Stránka 1 z 1

Strukturované datové typy v jazyku C

Napsal: sob 11. pro 2010, 21:44
od hedlre
Ahoj všichni, potřebovala bych pomoct s následujícím příkladem:

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.


Zatím jsem vytvořila toto, ale nefunguje mě to, někde je chyba a nemůžu přijít na to, kde. Mohl byste mi prosím někdo pomoct?

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

typedef struct {char den, mesic; short 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);

{
int 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);

getch ();
return 0;
}

Re: Strukturované datové typy v jazyku C

Napsal: ned 12. pro 2010, 00:29
od OndraSter
Co to hlasi za chybo? Pri kompilaci? Porovnava spatne?

Re: Strukturované datové typy v jazyku C

Napsal: ned 12. pro 2010, 15:07
od kocourleo
Neumím C (jen jsem kdysi z rychlíku viděl základy), ale řekl bych, že jazyk c umíš hůře než já. Zkusím poradit. Ale vážně se na to koukni, moc tomu nerozumíš, třeba sem se podívej http://www.builder.cz/art/cpp/cpp_struct.html . Zkontroluj si ještě, jestli to správně porovnává (zkoušej různá data).

Kód: Vybrat vše

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

typedef struct {short den; short mesic; short rok;} datum; /* definice struktury */
typedef struct {char jmeno[30]; char prijmeni[30]; datum narozen;} student;

int porovnej_vek (student student_s1, student student_s2) /* definice funkce  - parametry jsou struktury! */
{
  if (student_s1.narozen.rok > student_s2.narozen.rok) 
    return 1;
  else if (student_s1.narozen.rok < student_s2.narozen.rok) 
    return -1;
  else if (student_s1.narozen.rok == student_s2.narozen.rok) {  /* zde by podmínka být nemusela */
       if (student_s1.narozen.mesic > student_s2.narozen.mesic)
         return -1; 
       else if (student_s1.narozen.mesic < student_s2.narozen.mesic)
          return 1; 
       else if (student_s1.narozen.mesic == student_s2.narozen.mesic) {
          if (student_s1.narozen.den > student_s2.narozen.den)
            return -1; 
          else  if (student_s1.narozen.den < student_s2.narozen.den)
            return 1; 
         else  if (student_s1.narozen.den == student_s2.narozen.den)
           return 0; 
       }
   }
}

int main() {
  student student_s1 = {"Petr","Krizek", {18, 10, 1996}};
  student student_s2 = {"Hana","Krizkova", {16, 3, 1990}};
  int vysledek = porovnej_vek(student_s1, student_s2);
  if (vysledek == 0)
    printf("Studenti %s %s a %s %s jsou stejně stari.", student_s1.jmeno, student_s1.prijmeni, student_s2.jmeno, student_s2.prijmeni);
  else if (vysledek > 0)
    printf("Student %s %s je mladsi nez student %s %s .", student_s1.jmeno, student_s1.prijmeni, student_s2.jmeno, student_s2.prijmeni);
  else if (vysledek < 0)
    printf("Student %s %s je starsi nez student %s %s .", student_s1.jmeno, student_s1.prijmeni, student_s2.jmeno, student_s2.prijmeni);
  getchar ();
  return 0;
}

Re: Strukturované datové typy v jazyku C

Napsal: ned 12. pro 2010, 16:36
od arxeiss
hedlre píše:

Kód: Vybrat vše

...
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);

{
      int 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()
...
Proč máš tam ten blok, ale není v mainu, ani nemá žádnou definici funkce? A v něm navíc voláš funkci kterou jsi nikde nedeklarovala ani nedefinovala.

Re: Strukturované datové typy v jazyku C

Napsal: ned 12. pro 2010, 20:45
od hedlre
Moc všem děkuju za připomínky a pomoc. Jazyk c se učím teprve měsíc a opravdu v něm hodně plavu. Zkusím to podle vašich rad předělat. Díky moc.