Registrovaný: 06 Jan 2012, 19:26 Príspevky: 458 Bydlisko: pod Pátrovom Udelené body:228 bodov Získané body:21 bodov
1) Vytvorte textový súbor ZNAKY.TXT, v ktorom budú náhodné znaky. Tento súbor čítajte po znakoch v cykle do-while. Ak je prečítaný znak 'q' (Quit), program ukončite. Ak je znak '0', vypíšte: Bola to nula Ak je prečítaný znak '1', vypíšte: Bola to jednicka Testujte aj OEF a použite switch. Poznámka: Súbor ZNAKY.TXT vytvorte za pomoci náhodných čísiel: (vygeneruje celé čísla v rozsahu 0 - 49)
Spoiler:
Kód:
#include <stdio.h> #include <time.h> // kniznica potrebna ku generatoru
int main () { FILE *fw, *fr; int i, j, znak;
/******************************************************** * generovanie nahodnych cisiel v rozsahu viditelnych znakov ASCII tabulky * a ich zapis do suboru v riadkoch ********************************************************/ srand( time( 0 ) ); // inicializacia generatora nahodnych cisiel fw = fopen("POKUS.TXT", "w"); // otvorenie suboru na zapis for (i = 0; i < 2000; i++) { // pocet generovanych cisiel j = rand()%254 + 1; // generovanie nahodneho cisla v rozsahu 1 - 254 if (j >= 33 && j <= 254) // vymadzenie viditelnych znakov ASCII tabulky fprintf(fw, "%c ", '\0' + j); // uloženie znakov do suboru if ((i + 1) % 50 == 0) // ohranicenie konca riadku v subore fprintf(fw, "%c", '\n'); // zapis konca riadku do suboru } fclose(fw); // zavretie suboru
fr = fopen("POKUS.TXT", "r"); // otvorenie suboru na citanie do { znak = getc(fr); // cita zo suboru po znakoch switch (znak) { case ('0'): // ak je nula printf("Bola to nula: %c\n", znak); break; case ('1'): // ak je jedna printf("Bola to jednicka: %c\n", znak); break; case ('q'): // ak je q printf("Quit\n"); return 1; // ukončenie behu programu } } while (znak = getc(fr), feof(fr) == 0); // podmienka behu cyklu printf("V subore nebol znak 'q'.\n"); fclose(fr); // zavretie suboru
return 0; }
2) Vytvorte textový súbor DOPIS.TXT, v ktorom bude niekoľko riadkov z malých, veľkých písmen a medzier. Tento súbor celý vypíšte na monitor. Súčasne do súboru KOPIA.TXT zapíšte obsah čítaného súboru, ale malé písmená preveďte na veľké.
Spoiler:
Kód:
#include <stdio.h>
int main(void) { FILE *fr, *fw; int c;
if ((fr = fopen("DOPIS.TXT", "r")) == NULL) { // otvorenie suboru na citanie s kontrolou jeho existencie printf("Subor DOPIS.TXT sa nepodarilo otvorit.\n"); return; /* ukoncenie programu */ } if ((fw = fopen("KOPIA.TXT", "w")) == NULL) { // otvorenie suboru na zapis s kontrolou jeho existencie printf("Subor KOPIA.TXT sa nepodarilo otvorit.\n"); return; /* ukoncenie programu */ } while ((c = getc(fr)) != EOF) { // v cykle cita subor po znakoch putchar(c); // vypis znakov na obrazovku if (c >= 'a' && c <= 'z') // ak su znaky male pismena putc(c - 32, fw); // zapis ich do suboru ako velke pismena else putc(c, fw); // ak znaky nie su male pismena, zapis ich do suboru } fclose(fr); // zavretie suboru fclose(fw); // zavretie suboru
return 0; }
3) Napíšte program, ktorý spočíta celkový počet znakov súboru DOPIS.TXT.
Spoiler:
Kód:
#include <stdio.h>
int main(void) { FILE *fr; int i = 0, c;
if ((fr = fopen("DOPIS.TXT", "r")) == NULL) { // otvorenie suboru na citanie s kontrolou jeho existencie printf("Subor DOPIS.TXT sa nepodarilo otvorit.\n"); return; /* ukoncenie programu */ } while ((c = getc(fr)) != EOF) // v cykle cita subor po znakoch i += 1; // pri kazdom cykle zvysi hodnotu i o jedna printf("Subor DOPIS.TXT obsahuje %d znakov.\n", i); // vypis poctu znakov v subore fclose(fr); zavretie suboru
return 0; }
4) Napíšte program, ktorý prečíta PISMENA.TXT po riadkoch. Každý riadok presne opíšte do súboru KOLKO.TXT a na novom riadku uveďte. koľko malých písmen v riadku bolo.
Spoiler:
Kód:
#include <stdio.h>
int main(void) { FILE *fr, *fw; int c, i = 0;
if ((fr = fopen("PISMENA.TXT", "r")) == NULL) { // otvorenie suboru na citanie s kontrolou jeho existencie printf("Subor PISMENA.TXT sa nepodarilo otvorit.\n"); return; /* ukoncenie programu */ } if ((fw = fopen("KOLKO.TXT", "w")) == NULL) { // otvorenie suboru na zapis s kontrolou jeho existencie printf("Subor KOLKO.TXT sa nepodarilo otvorit.\n"); return; /* ukoncenie programu */ } while ((c = getc(fr)) != EOF) { // v cykle cita subor po znakoch putc(c, fw); // zapis po znakoch do suboru if (c >= 'a' && c <= 'z') // ak je znak male pismeno i += 1; // zvacsi sa hodnota i o jedna if (c == '\n') { // ak je koniec riadku fprintf(fw, "%d pismen a - z\n", i); // zapise do suboru pocet malych pismen v riadku i = 0; // vynulovanie i, aby sa pocty z riadkov nenacitavali } } fprintf(fw, "\n%d pismen a - z\n", i); // zapise do suboru pocet malych pismen v poslednom riadku fclose(fr); // zavretie suboru fclose(fw); // zavretie suboru
return 0; }
5) Vytvorte program, ktorý zapíše do súboru CISLA.TXT dvadsať reálnych čísiel, - násobkov 3.14. Pred každé číslo napíšte znak "$" a každé číslo napíšte na samostatný riadok. napr.: $3.14 $6.28
Spoiler:
Kód:
#include <stdio.h> int main(void) { FILE *fw; int i; float f;
f = 3.14; if ((fw = fopen("CISLA.TXT", "w")) == NULL) { printf("Subor CISLA.TXT sa nepodarilo otvorit.\n"); return; /* ukoncenie programu */ } for (i = 1; i <= 20; i++) fprintf(fw, "$%.2f\n", f * i); if (fclose(fw) == EOF) { printf("Subor CISLA.TXT sa nepodarilo zavriet.\n"); return; } return 0; }
6) Čítajte všetky reálne čísla zo súboru CISLA.TXT a vypočítajte ich aritmetický priemer. Vo funkcii fscanf() vyskúšajte formáty čítania "%f", "%f\n", " %f", " %f\n". Koniec súboru netestujte pomocou EOF, ale pomocou návratovej hodnoty funkcie fscanf().
Spoiler:
Kód:
#include <stdio.h> int main(void) { FILE *fr; int c; float f, g;
f = g = 0; if ((fr = fopen("CISLA.TXT", "r")) == NULL) { printf("Subor CISLA.TXT sa nepodarilo otvorit.\n"); return; /* ukoncenie programu */ } do { while ((c = getc(fr)) == '$') ; /* precita vsetky predchadzajuce znaky $ */ ungetc(c, fr); /* vratenie prvej cislice cisla do bufferu */ fscanf(fr, "%f\n", &f); printf("%.2f\n", f); g += f; } while (!(f >= 3.14 * 19)); printf("\nAritmeticky priemer realnych cisiel zo suboru CISLA.TXT je %.2f.\n", g / 20); if (fclose(fr) == EOF) printf("Subor CISLA.TXT sa nepodarilo zavriet.\n"); return 0; }
7) Napíšte program, ktorý porovná oblasť súborov PISMENA1.TXT a PISMENA2.TXT (vytvorte ich napríklad pomocou príkazu operačného systému - copy). Program vypíše hlásenie: "Subory su zhodne." alebo "Subory sa lisia v x znakoch." Odlišné znaky priebežne vypisujte.
Spoiler:
Kód:
#include <stdio.h>
int main(void) { FILE *fr, *gr; int j, c, d;
j = 0; if ((fr = fopen("PISMENA1.TXT", "r")) == NULL) { printf("Subor PISMENA1.TXT sa nepodarilo otvorit.\n"); return 1; /* ukoncenie programu */ } if ((gr = fopen("PISMENA2.TXT", "r")) == NULL) { printf("Subor PISMENA2.TXT sa nepodarilo otvorit.\n"); return 1; /* ukoncenie programu */ } do { c = getc(fr); d = getc(gr); if (c != d) { j++; printf("%d. %c != %c\n", j, c, d); } }while (!feof(fr) || !feof(gr)); if (j > 0) printf("\nSubory sa lisia v %d znakoch.\n\n", j); else printf("\nSubory su zhodne.\n\n"); if (fclose(fr) == EOF) { printf("Subor KOPIA.TXT sa nepodarilo zavriet.\n"); return 1; } if (fclose(gr) == EOF) { printf("Subor KOPIA.TXT sa nepodarilo zavriet.\n"); }
return 0; }
8) Napíšte program, ktorý sa pokúsi čítať neexistujúci súbor. Zaistite, aby program vhodne reagoval na túto situáciu.
Spoiler:
Kód:
#include <stdio.h> int main(void) { FILE *fr; int c;
if ((fr = fopen("BLBOST.TXT", "r")) == NULL) { printf("Subor BLBOST.TXT sa v patricnej zlozke nanachadza!\n"); return 0; } while ((c = getc(fr)) != EOF) putchar(c); putchar('\n'); if (fclose(fr) == EOF) printf("Subor BLBOST.TXT sa nepodarilo zavriet"); return 0; }
9) Napíšte program, ktorý číta znaky zo súboru PISMENA.TXT a odpisuje ich buď na obrazovku, alebo do súboru NOVY.TXT. Užívateľ má možnosť si vybrať smer výstupu.
Spoiler:
Kód:
#include <stdio.h> int main(void) { FILE *fr, *fw; int c, d;
if ((fr = fopen("PISMENA.TXT", "r")) == NULL) { printf("Subor PISMENA.TXT sa nepodarilo otvorit"); return; } if ((fw = fopen("NOVY.TXT", "w")) == NULL) { printf("Subor NOVY.TXT sa nepodarilo otvorit"); return; } printf("Vyber si, ci chces obsah suboru PISMENA.TXT vypisat \n" "do <s>uboru alebo na <o>brazovku: "); for (;;) { d = getchar(); while (getchar() != '\n') ; if (d == '0') break; if (d == 's') { while ((c = getc(fr)) != EOF) putc(c, fw); printf("\nDo suboru NOVY.TXT sa zapisal obsah súboru PISMENA.TXT.\n"); break; } if (d == 'o') { putchar('\n'); while ((c = getc(fr)) != EOF) putchar(c); putchar('\n'); break; } if (d != 's' && d != 'o') printf("\nZadaj <s>, <o> pre vyber alebo nulu <0> pre ukoncenie!!!\n\n"); } return 0; }
10) Napíšte program, ktorý vypisuje prirodzené čísla od 1. Po každých 10 číslach vypíše otázku: "Mam pokracovat ? [A/N] :" a podľa odpovede sa zariadi.
Spoiler:
Kód:
#include <stdio.h> int main(void) { int i, c;
i = 1; c = 'A'; for (;;) { if (c != 'A' && c != 'N') break; printf("%d, ", i); if ((i %10) == 0) { printf("\n\nMam pokracovat ? [A/N] : "); c = getchar(); while (getchar() != '\n') ; if (c == 'N') { putchar('\n'); return 0; } if (c != 'A') { printf("\n\nKed nedokazes zadat [A], ukoncujem program!\n"); return 0; } } i++; } return 0; }
11) V súbore CISLA.TXT je na každom riadku jedno celé číslo, ktorému predchádza neznámy počet znakov "$". Spočítajte tieto čísla a výsledok vypíšte na obrazovku.
Spoiler:
Kód:
#include <stdio.h> int main(void) { FILE *fr; int i, j, c;
i = j = 0; if ((fr = fopen("CISLA.TXT", "r")) == NULL) { printf("Subor CISLA.TXT sa neotvoril.\n"); return; } while ((c = getc(fr)) != EOF) { while ((c = getc(fr)) == '$') ; ungetc(c, fr); fscanf(fr, "%d\n", &i); j += i; } printf("Sucet cisiel zo suboru CISLA.TXT je %d.\n", j); if (fclose(fr) == EOF) printf("Subor CISLA.TXT sa nepodarilo zavriet.\n"); 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 2 hostia
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