Zdarec lidi, mám tady takovej problém a potřeboval bych trošku poradit :-)..
Mám udělat úkol z programování, jakýkoliv chci, ale doposud sme dělali jen se třema knihovnama a to -
<stdio.h>
<stdlib.h>
<time.h>
Měli byste nějaký návrhy, co za úlohu by se na tohle dalo udělat? Má to být něco jako seminární práce za půl roku a já si vůbec nevím rady s tématem :-).. Myslel sem udělat něco jako převodník měn ?!.. Myslíte, že by to šlo? popřípadě nějaký nápadek jestli by byl? Mám nějaký začátek, ale nevím jak dál, tak kdybych mohl poprosit o nějakou pomoc :-) Díky Jarda
Fórum › C / C++
Pomoc s úkolom
Ahojte prgramátoři, potřeuju poradit s tímto úkolem:
Vytvořte v jazyku C strukturovaný datový typ datum se členy den, mesic a rok. Poté vytvořte strukturovaný typ student se členy jmeno, prijmeni a narozen. Pro reprezentaci jednotlivých členů struktur zvolte vhodné datové typy.
Dále napište funkci int porovnej_vek(student s1, student s2), která porovná věk (resp. datum narození) daných studentů a vrátí hodnotu -1 v případě, že první student je starší, 1 v případě, že druhý student je starší a 0 v případě shodného data narození u obou studentů. Podle návratové hodnoty funce porovnej_vek pak ve funkci main vypište vhodný text na obrazovku.
Příklad výstupu:
Pepa Stary je starsi nez Adam Novak.
Povolené knihovny: stdio.h, stdlib.h
tohle to jsem zatím vytvořil, ale zdá se tam chyba, prosím vás podrobte to kritice, aby to fungovalo jak má, děkuji KroYc.
#include <stdio.h>
typedef struct {char den, mesic, rok;} datum;
typedef struct {char jmeno [10], prijmeni [10]; datum narozen;} student;
int porovnej_vek (char student_s1, char student_s2);
int porovnej_vek (char student_s1, char student_s2)
{
char rozdil = porovnej_vek(student_s1, student_s2);
rozdil = student_s1 > student_s2;
return -1;
rozdil = student_s1 = student_s2;
return 0;
rozdil = student_s1 < student_s2;
return 1;
}
int main()
{
char student_s1;
char student_s2;
student_s1 = {"Petr","Krizek", 18, 10, 1986};
student_s2 = {"Hana","Krizkova", 16, 3, 1990};
printf("%s je starsi nez %s", student_s1, student_s2);
return 0;
}
Rok bych reprezentoval spíš short int, jinak studenti nejsou typu char, ale student, sám jsi ho definoval. Pokud ho ches inicializovat, tak to datum by mělo jít do závorek (pokud si to dobře pamatuju). Ta funkce je úplně špatně. PĚokud chceš vědět, kdo je starší, bohatě stačí tohle.
int porovnej_vek (student s1, student s2)
{
return student_s1 > student_s2;
}
// a potom použít
if(porovnej_vek(student_s1, student_s2)) printf("%s je starsi nez %s", student_s1, student_s2);
i po těch úpravách to dělá chybu...sputnikone napsal:
Rok bych reprezentoval spíš short int, jinak studenti nejsou typu char, ale student, sám jsi ho definoval. Pokud ho ches inicializovat, tak to datum by mělo jít do závorek (pokud si to dobře pamatuju). Ta funkce je úplně špatně. PĚokud chceš vědět, kdo je starší, bohatě stačí tohle.int porovnej_vek (student s1, student s2)
{
return student_s1 > student_s2;
}
// a potom použít
if(porovnej_vek(student_s1, student_s2)) printf("%s je starsi nez %s", student_s1, student_s2);
int porovnej_vek (student s1, student s2)
{
int vysl = 0;
if(s1.narozen.rok > s2.narozen.rok) then vysl = 1
else if(s1.narozen.rok == s2.narozen.rok && s1.narozen.mesic > s2.narozen.mesic) then vysl = 1;
else if(s1.narozen.mesic == s2.narozen.mesic && s1.narozen.den > s2.narozen.den) then vysl = 1;
return vysl;
}
Nic lepšího teď asi nevypotím (zrovna se probouzím)
To KroYc : Celé to máš zle.
- Študent je typu student a nie char ako už sa spomínalo vyššie.
- Pre položky v dátume by som použil int pretože je ľahšie porovnať čísla ako text (pre PC) ;-)
- Tá funkcia sa volá rekurzívne a ani sa mi nezdá, že niekedy skončí.
- Ak porovnávaš štrukturované dátové typy (char *, struct, ...) tak nikdy nie takto pepek = pepek2. Podobne pre (<,>, <=,...)
- Konštruktor (premenna = {2, 4, "ddd"}) smieš použiť v C len pri deklarácii (inicializácii). Teda: typ premenna = {2, 4, "ddd"}.
- potom, ešte ak chceš aby ti to hodilo výsledok, tak musíš aj tú funkciu zavolať :-)
To sputnikone : short int by som nepoužíval, pretože asi má 32bit a tam je najrýchlejší int a aj dáta sú zarovnané na 32bit (4byt = int). Čiže sa vôbec aj tak neušetrí. A sizeof(short) je tuším tiež 4byt takže iba o dve písmenká viac v zdrojáku :-D
To m->29 : jo, už jsi vzpomínám... ale char je taky číslo :smile1:
Ahojte řeším problém se Součtem zlomků, už si ani nejsem jistej na kolik % je ten programek dobře, a myslím si že problem bude v datový typech. kdyby jste byli zase tak hodní a pěkně mě to zkritizovali, Dík KroYc
#include <stdio.h>
typedef struct {int Citatel[5], Jmenovatel[5];} zlomek;
int zlomek_soucet(zlomek1, zlomek2);
int main()
{
int zlomek_soucet();
//zlomek 1
printf("Zadej citatel zlomku 1:");
scanf("%i", &zlomek1.Citatel );
printf("Zadej jmenovatel zlomku 1:");
scanf("%i", &zlomek1.Jmenovatel );
//zlomek 2
printf("Zadej citatel zlomku 2:");
scanf("%i", &zlomek2.Citatel );
printf("Zadej jmenovatel zlomku 2:");
scanf("%i", &zlomek2.Jmenovatel );
printf("soucet zlomků %i a %i je zlomek %i", zlomek1, zlomek2);
return 0;
}
int zlomek_soucet(int zlomek1, int zlomek2)
{
int vysledek;
int vysledek2;
int vysledek3;
int vysledek_celkovy;
vysledek = zlomek1.Jmenovatel * zlomek2.Jmenovatel;
vysledek2 = zlomek2.Jmenovatel * zlomek1.Citatel;
vysledek3 = zlomek1.Jmenovatel * zlomek2.Citatel;
vysledek_celkovy = vysledek2 + vysledek3;
return 0;
}
teda v tvém příkladě by měl být
int zlomek_soucet(zlomek, zlomek);
a v definici fce potom takto:
int zlomek_soucet(zlomek zlomek1, zlomek zlomek2)
a nechápu, co ta fce vlastně vrací...
To crAzY^ : no zadání je takové...
Vytvořte v jazyku C strukturovaný datový typ zlomek se členy citatel a jmenovatel. Dále napište funkci zlomek soucet(zlomek a, zlomek b), která vypočítá a vrátí součet předaných zlomků v základním tvaru. Vykrácení výsledného zlomku do základního tvaru docílíte vydělením čitatele i jmenovatele jejich největším společným dělitelem, který můžete určit například použitím Euklidova algoritmu.
To KroYc : tak v tom případě by to mohlo vypadat nějak takto:
#include <stdlib.h>
#include <stdio.h>
typedef struct { int citatel; int jmenovatel; } zlomek;
int nsd(int, int); //nejvetsi spolecny delitel
zlomek soucet_zlomku(zlomek, zlomek);
int main()
{
zlomek prvni, druhy;
prvni.citatel = 1;
prvni.jmenovatel = 2;
druhy.citatel = 1;
druhy.jmenovatel = 4;
zlomek vysl = soucet_zlomku(prvni, druhy);
printf("Vysledny zlomek je: %d/%d\n", vysl.citatel, vysl.jmenovatel);
return 0;
}
int nsd(int u, int v)
{
int r;
while(v != 0)
{
r = u % v;
u = v;
v = r;
}
return u;
}
zlomek soucet_zlomku(zlomek a, zlomek b)
{
int Citatel, Jmenovatel;
Citatel = a.jmenovatel*b.citatel + b.jmenovatel*a.citatel;
Jmenovatel = a.jmenovatel*b.jmenovatel;
int NSD = nsd(Citatel, Jmenovatel);
zlomek vysledek;
vysledek.citatel = Citatel/NSD;
vysledek.jmenovatel = Jmenovatel/NSD;
return vysledek;
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Poblem s ukolom — založil Filip
Pomoc.... nějaká chybka prosím pomoc - více v podrobném popisu — založil tkstudent
Pomoc, pomoc s úkolem (matice v Delphi) — založil maxikp
Moderátoři diskuze