Registrovaný: 06 Jan 2012, 19:26 Príspevky: 458 Bydlisko: pod Pátrovom Udelené body:228 bodov Získané body:21 bodov
1. Definuj štruktúru s tromi prvkami (float, char a int v tomto poradí) a union s tými istými prvkami. Zisti adresy štruktúry, unionu a všetkých ich položiek. Ďalej zisti veľkosť štruktúry a unionu.
Spoiler:
Kód:
/*********************************************** * * 1.c ver. 1.0 * popis je vyssie * =========================================== * pouzita diakritika * * libcosenior, oktober 2012 * ***********************************************/
#include <stdio.h>
char ss = 231, uu = 163, z = 167, l = 150, t = 156;
2. Definuj štruktúru, ktorá bude mať položky meno a vek. Napíš funkciu napln(), ktorá túto štruktúru naplní tvojimi dátami. Pointer na štruktúru bude odovzdávaný ako prvý parameter funkcie. Tú istú štruktúru alokuj dynamicky a naplň ju dátami priateľa opäť pomocou funkcie napln(). Obsah obidvoch štruktúr vytlač.
Spoiler:
Kód:
/*********************************************** * * 2.c ver. 1.0 * popis je vyssie * =========================================== * pouzita siakritika * * libcosenior, oktober 2012 * ***********************************************/
int main(void) { int vek; char meno[30]; OSOBA ja; OSOBA *p_kamos;
printf("Nap%c%c svoje meno a priezvisko: ", ii, ss); gets(meno); printf("Nap%c%c ko%cko m%c%c rokov: ", ii, ss, l, aa, ss); scanf("%d", &vek); while (getchar() != '\n'); /* zahodenie <ENTER>, inaksie to bude blbnut */ ; napln(&ja, meno, vek);
/* alokovanie pamati pre dynamicku strukturu */ if ((p_kamos = (OSOBA *) malloc(sizeof(OSOBA))) == NULL) { printf("\nM%clo pam%cti! \n", aa, ae); return; } printf("\n\nNap%c%c meno a priezvisko kamar%cta: ", ii, ss, aa); gets(meno); printf("Nap%c%c jeho vek: ", ii, ss); scanf("%d", &vek); napln(p_kamos, meno, vek);
/* vytlacenie obsahu struktur */ printf("\n\nJa sa vol%cm %s a m%cm %d rokov.\n", aa, ja.jmeno, aa, ja.stari); printf("Kamar%ct sa vol%c %s a m%c %u rokov.\n", aa, aa, p_kamos->jmeno, aa, p_kamos->stari);
return 0; }
3. Uprav predchádzajúci program tak, že sa meno a vek budú čítať zo súboru (obidva údaje budú na jednom riadku a súbor nebude mať viac ako 1000 riadkov). Načítané hodnoty sa budú ukladať do statického poľa štruktúr. Vypočítaj priemerný vek a vytlač mená všetkých ľudí, ktorí majú tento vek.
Spoiler:
Kód:
/*********************************************** * * 3.c ver. 1.0 * popis je vyssie * =========================================== * pridana diakritika * * libcosenior, oktober 2012 * ***********************************************/
/* vypis mien vsetkych ludi v priemernom veku */ printf("Priemern%c vek %d-ich %cud%c zo s%cboru \"OSOBY.TXT\" je %.0f rokov.\n", yy, pocet, l, ii, uu, priemerny_vek); printf("V tomto veku s%c nasleduj%cci %cudia: \n", uu, uu, l); /* ak ma v strukture meno priradeny vypocitany priemerny vek, tak ho vypise */ for (i = 0; i < pocet; i++) { if (priemerny_vek == osoby[i].stari) printf(" - %s \n", osoby[i].jmeno); } return 0; }
4. Predchádzajúci program uprav tak, že namiesto do poľa štruktúr sa budú načítané údaje ukladať do jednosmerne zreťazeného dynamického zoznamu týchto štruktúr. Ten sa bude vytvárať dynamicky podľa aktuálnej dĺžky čítaného súboru.
Spoiler:
Kód:
/*********************************************** * * 4.c ver. 1.0 * popis je vyssie * =========================================== * pridana diakritika * * libcosenior, oktober 2012 * ***********************************************/
int main(void) { OSOBA *p_prvy = NULL, /* prva polozka zoznamu */ *p_aktualny, /* jednosmerne zreťazeny dynamicky zoznam struktur*/ *p_pomocny; /* pomocna polozka zoznamu */ FILE *fr; int i, pocet = 0, /* skutocny pocet osob v subore */ vek; /* pomocny vek pre nacitanie */ double sucet_vek = 0.0, priemerny_vek; char meno[DLZKAMENA]; /* pomocne meno pre nacitanie */
/* otvorenie suboru */ if ((fr = fopen("OSOBY.TXT", "r")) == NULL) { printf("\nS%cbor sa ned%c otvori%c! \n", uu, aa, t); return; } /* citanie suboru po riadkoch a vlozenie udajov do jednosmerne zreťazeného dynamického zoznamu */ while (fscanf(fr, "%s %d", meno, &vek) == 2) { /* dynamicke alokovanie novej struktury */ if ((p_pomocny = (OSOBA *) malloc(sizeof(OSOBA))) == NULL) { printf("\nM%clo pam%cti!\n", aa, ae); /* program sa neukonci, ale pracuje len s tymi datami, ktore sa podarilo ulozit do pamati */ break; } pocet++; if (p_prvy == NULL) p_prvy = p_pomocny; else p_aktualny->p_dalsi = p_pomocny; /* pripojenie struktury do retazce */
p_aktualny = p_pomocny; /* soucasny prvok se stava aktualnym */ p_aktualny->p_dalsi = NULL; /* nulovanie ukazovatela = koniec retaze */ napln(p_aktualny, meno, vek); /* vlozenie udajov do zoznamu */ sucet_vek += vek; /* sucet vsetkych poloziek vek */ } /* zavretie suboru */ if (fclose(fr) == EOF) printf("\nS%cbor sa ned%c zavrie%c! \n", uu, aa, t);
/* vypis mien vsetkych ludi v priemernom veku */ printf("Priemern%c vek %d %cud%c zo s%cboru \"OSOBY.TXT\" je %.0f rokov.\n", yy, pocet, l, ii, uu, priemerny_vek); printf("V tomto veku s%c nasleduj%cci %cudia: \n", uu, uu, l); /* ak ma v zozname struktur meno priradeny vypocitany priemerny vek, tak ho vypise */ for (p_aktualny = p_prvy; p_aktualny->p_dalsi != NULL; p_aktualny = p_aktualny->p_dalsi) { if (priemerny_vek == p_aktualny->stari) printf(" - %s \n", p_aktualny->jmeno); } return 0; }
5. Vytvor program, ktorý pomocou funkcie fgets() prečíta súbor a uloží ho do pamäti po riadkoch pomocou jednosmerne zoradeného zoznamu štruktúr. Položkami štruktúry budú okrem iného reťazec max. dĺžky 80 a aktuálna dĺžka riadku. Vytlač najdlhší riadok súboru.
Spoiler:
Kód:
/*********************************************** * * 5.c ver. 1.0 * popis je vyssie * =========================================== * pridana diakritika * * libcosenior, oktober 2012 * ***********************************************/
/* vytvorenie prveho prvku struktury */ p_prvy = alokuj_a_testuj(); if ((fgets(p_prvy->riadok, MAX_DLZKA - 1, fr)) != NULL) { p_prvy->aktualna_dlzka = strlen(p_prvy->riadok); } p_prvy->p_dalsi = NULL; p_aktualny = p_prvy;
/* vytvorenie vsetkych ostatnych prvkov */ for (;;) { p_aktualny->p_dalsi = alokuj_a_testuj(); p_aktualny = p_aktualny->p_dalsi; if ((fgets(p_aktualny->riadok, MAX_DLZKA - 1, fr)) != NULL) { p_aktualny->aktualna_dlzka = strlen(p_aktualny->riadok); /* zistenie dlzky najdlhsieho riadku */ if (max_dlzka < p_aktualny->aktualna_dlzka) max_dlzka = p_aktualny->aktualna_dlzka; /* posun na dalsiu strukturu */ p_aktualny->p_dalsi = NULL; } else break; }
/* zavretie suboru */ if (fclose(fr) == EOF) printf("\nS%cbor sa ned%c zavrie%c! \n", uu, aa, t);
/* v cykle najde najdlhsi riadok a vypise ho */ printf("Najdlh%cie riadky s%cboru maj%c %d znakov a s%c to tieto riadky:\n\n" , ss, uu, uu, max_dlzka, uu); for (p_aktualny = p_prvy; p_aktualny->p_dalsi != NULL; p_aktualny = p_aktualny->p_dalsi) { if (max_dlzka == p_aktualny->aktualna_dlzka) puts(p_aktualny->riadok); }
return 0; }
6. Uprav predchádzajúci program tak, aby položkami štruktúr bol pointer na reťazec a dĺžka aktuálneho riadku. Vypočítaj priemernú dĺžku riadku a vytlač všetky riadky s touto dĺžkou.
Spoiler:
Kód:
/*********************************************** * * 6.c ver. 1.0 * popis je vyssie * =========================================== * pridana diakritika * * libcosenior, oktober 2012 * ***********************************************/
/* zavretie suboru */ if (fclose(fr) == EOF) printf("\nS%cbor sa ned%c zavrie%c! \n", uu, aa, t);
/* v cykle vypise vsetky riadky o priemernej velkosti */ priem_dlzka /= pocitaj; printf("Priemerne riadky suboru maju %d znakov a su to tieto riadky:\n\n",priem_dlzka); for (p_aktualny = p_prvy; p_aktualny->p_dalsi != NULL; p_aktualny = p_aktualny->p_dalsi) { if (priem_dlzka == p_aktualny->aktualna_dlzka) puts(p_aktualny->p_riadok); }
7. Napíš program, ktorý prečíta súbor dĺžky max. 1000 riadkov a do poľa štruktúr uloží dĺžku riadku. Do prkov vhniezdenej štruktúry pocet uloží jednak počat písmen v tomto riadku, a potom aj počet ostatných znakov. Vypíš počet písmen v súbore.
Spoiler:
Kód:
/*********************************************** * * 7.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, oktober 2012 * ***********************************************/
/* vhniezdena struktura */ typedef struct { int pismena; int nie_pismena; } ZNAKY;
/* hlavna struktura */ typedef struct { int dlzka_riadku; ZNAKY pocet; } RIADKY;
int main(void) { int i, pocet_pismen, pocet_nie_pismen, pocet_riadkov = 0; FILE *fr; char pom[MAX_DLZKA_RIADOK]; RIADKY riadky[MAX_RIADKOV];
/* otvorenie suboru */ if ((fr = fopen("SUBOR.TXT", "r")) == NULL) { printf("\nSubor sa neda otvorit! \n"); return; }
/* nacitanie údajov zo suboru do struktury */ /* zistenie dlzky riadku */ while (fgets(pom, MAX_DLZKA_RIADOK - 1, fr) != NULL) { pocet_pismen = pocet_nie_pismen = 0; /* ulozenie dlzky riadku do struktury */ riadky[pocet_riadkov].dlzka_riadku = strlen(pom); /* zistenie poctu pismen a nie pismen v riadku */ for (i = 0; i < riadky[pocet_riadkov].dlzka_riadku; i++) isalpha (pom[i]) ? pocet_pismen++ : pocet_nie_pismen++; /* ulozenie poctu pismen a nie pismen do struktury */ riadky[pocet_riadkov].pocet.pismena = pocet_pismen; riadky[pocet_riadkov].pocet.nie_pismena = pocet_nie_pismen; /* pocitadlo riadkov */ pocet_riadkov++; }
/* zavretie suboru */ if (fclose(fr) == EOF) printf("\nSubor sa neda zavriet! \n");
/* zistenie v cykle poctu pismen v subore a vypis vysledku */ pocet_pismen = 0; for (i = 0; i < pocet_riadkov; i++) pocet_pismen += riadky[i].pocet.pismena; printf("V subore je spolu %d pismen.\n", pocet_pismen);
return 0; }
8. Napíš program, ktorý bude zisťovať, či sa súbor, ktorého meno bude zadané z klávesnice, nachádza na disku alebo nie. K tomuto účelu vytvor funkciu BOOLEAN je_tu(char *meno). Typ BOOLEAN vytvor pomocou výčtového typu s položkami ANO a NIE.
Spoiler:
Kód:
/*********************************************** * * 8.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, oktober 2012 * ***********************************************/
#include <stdio.h> #include <string.h>
/* definicia vyctoveho typu */ typedef enum { NIE, ANO } BOOLEAN;
/* funkcia zistuje ci subor je v pc na zadanej ceste */ BOOLEAN je_tu(char *meno) { FILE *fr;
do { printf("Zadej meno suboru aj s cestou [Q - koniec]:\n" "\n ________________________________________\b\b\b\b\b\b\b\b\b\b" "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); scanf("%s", meno);
if (je_tu(meno) == ANO) printf("\nSoubor '%s' existuje.\n\n", meno); else printf("\nSoubor '%s' nie je na na zadanej ceste na PC.\n\n", meno); } while (toupper(meno[0]) != 'Q');
return 0; }
9. Definuj výčtový typ AUTOMOBILY a vytlač názvy a hodnoty jednotlivých položiek. Názvy položiek tlač: * po znakoch pomocou dvoch cyklov * pomcou printf() * pomocou puts()
Spoiler:
Kód:
/*********************************************** * * 9.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, oktober 2012 * ***********************************************/
int main(void) { int i, j; char *mena_aut[] = { "Ziguli", "Trabant", "Lada", "Skoda", "Olcit" };
printf("Pacia sa vam tieto auta? printf()\n"); for (i = ZIGULI; i <= OLCIT; i++) printf("%d. %s \n", i, mena_aut[i]); putchar('\n');
printf("Nepaci sa mi ani jedno z tychto aut: puts() v opacnom poradi\n"); for (i = OLCIT; i >= ZIGULI; i--) { printf("%d. ", i); puts(mena_aut[i]); } putchar('\n');
return 0; }
10. Predchádzajúci výčtový typ skús inicializovať, najprv čiastočne, potom úplne a opäť vytlač názvy jeho položiek.
Spoiler:
Kód:
/*********************************************** * * 9.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, oktober 2012 * ***********************************************/
#include <stdio.h> #include <string.h>
/* definicia vyctoveho typu */ typedef enum { ZIGULI = 259, TRABANT = 1000, LADA = 157, SKODA, /* tu sa implicitne prideli cislo o jedna vacsie ako predchadzajuce */ OLCIT = 99 } AUTOMOBILY;
void vytlac(AUTOMOBILY inicialy) { switch (inicialy) { case ZIGULI: printf("Typ Ziguli\t cena %4d euro.\n", ZIGULI); break; case TRABANT: printf("Typ Trabant\t cena %4d euro.\n", TRABANT); break; case LADA: printf("Typ Lada\t cena %4d euro.\n", LADA); break; case SKODA: printf("Typ Skoda\t cena %4d euro.\n", SKODA); break; case OLCIT: printf("Typ Olcit\t cena %4d euro.\n", OLCIT); break; } }
int main(void) { AUTOMOBILY automobil; automobil = ZIGULI; /* test spravnosti */
printf("Na vyber su tieto automobily : \n\n"); vytlac(automobil); /* test spravnosti */ vytlac(TRABANT); vytlac(LADA); vytlac(SKODA); vytlac(OLCIT);
return 0; }
_________________ kódy píšem na platforme: linux Ubuntu 12.04 (Geany, Code::Blocks), WinXP (Code::Blocks, PsPad editor), Skype: libcokamo, ICQ: 56312279 Ak treba, napíš mi na libcosenior@gmail.com. To mám v mobile a stále po ruke.
Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 1 hosť
Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre Nemôžete zasielať súbory v tomto fóre