Avatar
Tomáš Jančák:

Ahoj,
chtěl bych poprosit o pomoc z jedním kódem, mám udělat program který vypočte obsah,obvod a poměr u obdélníku, obsah a obvod jsem už dal ale dělá my problém poměr aby byl zapsán nař. 2:3...
prosím o seriozní radu a né posměšky že to je jednoduché...
Zde dávám kód:

namespace Obdelnik
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Zadejte 1 číslo pro výpočet obsahu a obvodu obdélníka");
            double a = double.Parse(Console.ReadLine());
            Console.WriteLine("Zadejte 2 číslo pro výpočet obsah a obvodu obdélníka");
            double b = double.Parse(Console.ReadLine());
            Obdelnik obdelnik = new Obdelnik(a, b);
            Console.WriteLine("Obvod: " + obdelnik.Obvod());
            Console.WriteLine("Obsah: " + obdelnik.Obsah());
            Console.WriteLine("Pomer: " + obdelnik.Pomer());
            Console.ReadLine();
        }
    }
    class Obdelnik
    {
        private double a;
        private double b;

        public Obdelnik(double astrana, double bstrana)
        {
            this.a = astrana;
            this.b = bstrana;
        }


        public double Obsah()
        {
             return (this.a * this.b);
        }
        public double Obvod()
        {
            return ((this.a + this.b) * 2);
        }
         public double Pomer()
        {
            return (this.a / this.b);

        }
    }
}
 
Odpovědět 11. dubna 10:25
Avatar
LacoS.
Člen
Avatar
Odpovídá na Tomáš Jančák
LacoS.:

Ved to tam mas urobene.
Pomer je len 1 cislo, a nemusi znamenat zapis typu (2:3);

Neviem, ze by existovala moznost, ktora by Ti previedla strany1.4 x 2.1
na pomer celych cisel... (teba 2:3)
Este si viem predstavit, ze by si to previedol na rovnaku presnost (teda: 14:21),
ale aby sa to este "kratilo", tak to veru neviem.

Podla mna ak mas vypocitat pomer, tak je to jedno cislo.

 
Nahoru Odpovědět  +1 11. dubna 10:44
Avatar
Odpovídá na LacoS.
Libor Šimo (libcosenior):

V céčku a už správne:

#include <stdio.h>

/**
* Funkcia vyberie z dvoch cisiel to mensie a porovnava
* ci maju obidve cisla rovnakeho delitela najprv celym
* mensim cislom, potom ho znizuje az po cislo 2.
* Ak je delitel rovnaky, vydeli nim obidve cisla.
* @param pointer na cislo 1 (je to zaroven aj vystupny parameter)
* @param pointer na cislo 2 (je to zaroven aj vystupny parameter)
*/

void pomer(int *cislo1, int *cislo2)
{
    int i;
    if (*cislo1 > *cislo2) {
        for (i = *cislo2; i > 1; i--) {
            if (*cislo1 % i == 0 && *cislo2 % i == 0) {
                *cislo1 /= i;
                *cislo2 /= i;
            }
        }
    }
    else {
        for (i = *cislo1; i > 1; i--) {
            if (*cislo1 % i == 0 && *cislo2 % i == 0) {
                *cislo1 /= i;
                *cislo2 /= i;
            }
        }
    }
}

int main(void)
{
    int a = 22, b = 2;

    pomer(&a, &b);
    printf("%d : %d", a, b);


    return 0;
}
Nahoru Odpovědět 11. dubna 10:51
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na LacoS.
Libor Šimo (libcosenior):

Skoro všetko sa dá vypočítať:

Nahoru Odpovědět 11. dubna 11:16
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Tomáš Jančák
Libor Šimo (libcosenior):

Ty tam máš desatinné čísla, to bude zložitejšie na kód, ale ak sa trochu viac zamyslíš, vyriešiš to.
Len sa mi nezdé, že by toto od vás chceli v škole, keď je tam obsah a obvod, teda veľmi jednoduché výpočty.
Pravdu bude mať LacoS.

Nahoru Odpovědět 11. dubna 11:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Tomáš Jančák:

Právě že si s tím nevím rady :/ a učitel si stojí za tím že chce program který obvod a obsah dát do poměru...
Proto jsem zkusil tuto možnost napsat sem jesli se s tím někdo nesetkal nebo neví....
Děkuji za rady :)

Editováno 11. dubna 11:33
 
Nahoru Odpovědět 11. dubna 11:32
Avatar
Odpovídá na Tomáš Jančák
Libor Šimo (libcosenior):

Princíp výpočtu pomeru pri desatinných číslachje jednoduchý.
Napr.

1. číslo
25,12 je 2512 stotín, teda 2512/100.
2. číslo
11,02 je 1102 stotín, teda 1102/100

Výpočet:
prvý zlomok vynásobíš druhým, ten ale musíš otočiť, teda
2512/100 * 100/1102 =
251200 : 110200 a to je pomer, síce ešte nie konečný, ale za pomoci spoločných deliteľov sa k nemu dostaneš.
V céčku by to mohlo byť takto:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void predvypocet(char *cislo1, char *cislo2);
void pomer(int *cislo1, int *cislo2);

int main(void)
{
    char *p_cislo1, *p_cislo2;

    p_cislo1 = (char *) malloc(50);
    p_cislo2 = (char *) malloc(50);
    strcpy(p_cislo1, "25,12");
    strcpy(p_cislo2, "11,02");

    predvypocet(p_cislo1, p_cislo2);

    return 0;
}

void predvypocet(char *cislo1, char *cislo2)
{
    char *buffer, *delenec[2], *delitel[2];
    int i = 0, a[2], b[2], vysledok[2];
    int pom[] = { 10, 100, 1000, 10000};

    buffer = (char *) malloc(128);
    delenec[0] = (char *) malloc(10);
    delenec[1] = (char *) malloc(10);
    delitel[0] = (char *) malloc(10);
    delitel[1] = (char *) malloc(10);

    printf("Pomer cisiel %s a %s je ", cislo1, cislo2);

    if (strchr(cislo1, ',') != NULL) {
        buffer = strtok(cislo1, ",");
        while(buffer != NULL) {
            strcpy(delenec[i], buffer);
            buffer = strtok(NULL, ",");
            i++;
        }
        a[1] = pom[strlen(delenec[1] - 1)];
        a[0] = atoi(strcat(delenec[0], delenec[1]));
    }
    else {
        a[0] = atoi(cislo1);
        a[1] = 1;
    }

    i = 0;
    if (strchr(cislo2, ',') != NULL) {
        buffer = strtok(cislo2, ",");
        while(buffer != NULL) {
            strcpy(delitel[i], buffer);
            buffer = strtok(NULL, ",");
            i++;
        }
        b[0] = pom[strlen(delitel[1] - 1)];
        b[1] = atoi(strcat(delitel[0], delitel[1]));
    }
    else {
        b[1] = atoi(cislo2);
        b[0] = 1;
    }
    vysledok[0] = a[0] * b[0];
    vysledok[1] = a[1] * b[1];
    pomer(&vysledok[0], &vysledok[1]);

    printf("%d : %d.\n", vysledok[0], vysledok[1]);
}

void pomer(int *cislo1, int *cislo2)
{
    int i;
    if (*cislo1 > *cislo2) {
        for (i = *cislo2; i > 1; i--) {
            if (*cislo1 % i == 0 && *cislo2 % i == 0) {
                *cislo1 /= i;
                *cislo2 /= i;
            }
        }
    }
    else {
        for (i = *cislo1; i > 1; i--) {
            if (*cislo1 % i == 0 && *cislo2 % i == 0) {
                *cislo1 /= i;
                *cislo2 /= i;
            }
        }
    }
}

Výsledok je 1256 : 551.

Editováno 12. dubna 8:26
Nahoru Odpovědět 12. dubna 8:24
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.