struct, fce (C)

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
dark_stuff
Začátečník
Začátečník
Uživatelský avatar
Registrován: 23. bře 2006
Bydliště: Bruntál / Olomouc

struct, fce (C)

Příspěvek od dark_stuff »

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.
Ještě sme to neprobírali, tak v tom trochu plavu... Zatím mám tohle (jo, je toho málo :-D):

Kód: Vybrat vše

int main()
{
	int i;
	struct datum{int den; int mesic; int rok;}d1,d2,d3,d4,d5;
	struct student{char jmeno[100]; char prijmeni[100]; int narozen[3];}s1,s2,s3,s4,s5;

	d1.den=2;			d1.mesic=1;		d1.rok=1990;
	d2.den=23;			d2.mesic=12;	d2.rok=1990;
	d3.den=12;			d3.mesic=8;		d3.rok=1989;
	d4.den=15;			d4.mesic=6;		d4.rok=1989;
	d5.den=8;			d5.mesic=3;		d5.rok=1990;
	
	
	
	for(i=0; i<5; i++)
	{
		printf("%d: %c.%c.%c\n", i+1, di.den, di.mesic, di.rok);
	}

	printf("\n\n");
	system("pause");
	return(0);
}
Nevím si rady hned s několika věcmi...
1. nějak nevím, jak využít struct datum, když narození můžu zapsat do pole narozen a to pak posílat do fce.
2. jak zapisovat do struct student jméno a příjmení? Když zkusím s1.jmeno='Jan'; tak mi to háže chybu.
3. ten cyklus for. Chtěl sem, aby mi vypsal jméno, příjmení, datum narození studenta, aby mohl uživatel vybrat, které dva porovnávat. Jen nevím, jak pracovat s tou proměnnou i, když chci, aby to (v současné vývojové fázi kódu :-D) vypisovalo postupně d1, d2, d3 atd.

struct mám popsané ve skriptech, ale moc sem to nepobral :-D
Lidi jsou různí. Víc nesmím říct.
Černá karta je rasistická!
Trek
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. kvě 2008

Re: struct, fce (C)

Příspěvek od Trek »

Měl bys počíst ty skripta,

- řetězec se uvádí uvozovkami, apostrofem char
- když bys přiřadil ten řetězec tak jak to děláš, tak by to vlastně změnilo ten ukazatel na ten literál, správné je použít strcpy
- structy si můžeš dát do pole a pak bys mohl iterovat přes to pole
- ten struct bych deklaroval typedefem mimo tělo funkce, tohle je brutus
dark_stuff
Začátečník
Začátečník
Uživatelský avatar
Registrován: 23. bře 2006
Bydliště: Bruntál / Olomouc

Re: struct, fce (C)

Příspěvek od dark_stuff »

OK, tak sem to předělal:

Kód: Vybrat vše

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

typedef struct datum{int den, mesic; short rok;}DATUM;
typedef struct student{char jmeno[100]; char prijmeni[100]; DATUM narozen;}STUDENT;

STUDENT s1={"Jan\0", "Novak\0", 21, 10, 1990};
STUDENT s2={"David\0", "Dvorak\0", 13, 5, 1990};
STUDENT s3={"Pavel\0", "Dokladal\0", 7, 12, 1989};
STUDENT s4={"Ondrej\0", "Janda\0", 17, 2, 1990};
STUDENT s5={"Tomas\0", "Nejezchleba\0", 23, 2, 1989};

int main()
{
	printf("%d: %s %s %d.%d.%d\n", 1, s1.jmeno, s1.prijmeni, s1.narozen.den, s1.narozen.mesic, s1.narozen.rok);
	

	printf("\n\n");
	system("pause");
	return(0);
}
Snad je to správně... Jen sem furt nepřišel na to, jak udělat cyklus na vypsání všech studentů...
Lidi jsou různí. Víc nesmím říct.
Černá karta je rasistická!
Trek
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. kvě 2008

Re: struct, fce (C)

Příspěvek od Trek »

No sice ti to funguje, ale je to tak špatně až skoro nějak nemám sílu to komentovat.

Identifikátor pole je ukazatel na první prvek toho pole, když ty structy takto konstruuješ, tak se ten ukazatel přehodí na pevnej literál v paměti. Řetězec literál je ukončenej automaticky nulou.
Tohle je fakt silná káva. Jaký máš skripta?
Odpovědět

Zpět na „Programování a web“