Diskuze: Poměr obdélníku c#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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;
}
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.
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
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.
Zobrazeno 8 zpráv z 8.