/* funkcia main() */ int main(void) { int i; double f;
printf("Zadaj cislo ktore sa bude umocnovat v tabulke: "); scanf("%Lf", &f); printf("Zadaj najvacsieho mocnitela tabulky: "); scanf("%d", &i); tabulka_mocnin(f, i); return 0; }
/* definicia vlastnych funkcii */ /* vypocita a vypise 1. az n-tu mozninu zadaneho cisla */ void tabulka_mocnin(double x, int n) { int i; double mocnina;
mocnina = x; printf("Tabulka mocnin od 1 do %d cisla %Lf\n" "\n1. mocnina = %Lf\n", n, x, x); for (i = 2;i <= n; i++) { mocnina *= x; printf("%d. mocnina = %Lf\n", i, mocnina); } }
2. Napíš funkciu troj(char c, int n), ktorá zobrazí na obrazovke trojuholník o n riadkoch zložený zo znakov. Prvý znak na poslednom riadku musí byť v prvom stĺpci! Použi v programe.
/* funkcia main() */ int main(void) { exist(); zatvor(); return 0; }
/* definicia vlastnych funkcii */ /* * funkcia kontroluje existenxiu súbor DOPIS.TXT * vracia 1 pri uspesnom otvoreni, inaksie vracia 0 */ void exist(void) { if ((fr = fopen("DOPIS.TXT", "r")) != NULL) printf("1\n"); else { printf("0\n"); // exit(EXIT_FAILURE); } }
/* * funkcia zatvara súbor DOPIS.TXT * vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0 */ void zatvor(void) { (fclose(fr) != EOF); }
4. Napíš funkciu vyskyt() s dvomi parametrami. Prvý je ukazovateľ na súbor, druhý je char. Funkcia vráti počet výskytu znaku (definovaného char) v súbore. Použi v programe.
/* deklaracia uplnych funkcnych prototypov */ int otvor_subor(void); int vyskyt(FILE *file, char znak); int zatvor_subor(void);
/* funkcia main() */ int main(void) { char c;
if (otvor_subor() == 0) /* vola funkciu otvor_subor() */ CHYBA("Neda sa otvorit súbor DOPIS.TXT"); /* vola makro CHYBA() */
printf("Zadaj znak, ktoreho pocet vyskytu v subore DOPIS.TXT chces zistit: "); c = getchar(); printf("\nPocet znakov '%c' v subore DOPIS.TXT je: %d\n", c, vyskyt(fr, c)); /* vola funkciu vyskyt() */
if (zatvor_subor() == 0) /* vola funkciu zatvor_subor() */ CHYBA("Neda sa zatvorit súbor DOPIS.TXT"); /* vola makro CHYBA() */ return 0; }
/* * funkcia otvara subor DOPIS.TXT * vracia nenulovu hodnotu pri uspesnom otvoreni, inaksie vracia 0 */ int otvor_subor(void) { return ((fr = fopen("DOPIS.TXT", "r")) != NULL); }
/* * unkcia vrati pocet vyskytu znaku (definovaneho char) v subore */ int vyskyt(FILE *file, char znak) { char c; int pocet = 0;
while ((c = getc(file)) != EOF) { if (c == znak) pocet += 1; } return pocet; }
/* * funkcia zatvara subor DOPIS.TXT * vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0 */ int zatvor_subor(void) { return (fclose(fr) != EOF); }
5. Napíš funkciu vypis(FILE *fr), ktorá vypíše na obrazovku obsah súboru. Použi v programe.
/* deklaracia uplnych funkcnych prototypov */ int otvor_subor(void); void vypis(FILE *fr); int zatvor_subor(void);
/* funkcia main() */ int main(void) { char c;
if (otvor_subor() == 0) /* vola funkciu otvor_subor() */ CHYBA("Neda sa otvorit súbor DOPIS.TXT"); /* vola makro CHYBA() */
vypis(fr); /* vola funkciu vypis() */
if (zatvor_subor() == 0) /* vola funkciu zatvor_subor() */ CHYBA("Neda sa zatvorit súbor DOPIS.TXT"); /* vola makro CHYBA() */ return 0; }
/* * funkcia otvara subor DOPIS.TXT * vracia nenulovu hodnotu pri uspesnom otvoreni, inaksie vracia 0 */ int otvor_subor(void) { return ((fr = fopen("DOPIS.TXT", "r")) != NULL); }
/* * funkcia vypise obsah suboru na obrazovku */ void vypis(FILE *file) { char c;
while ((c = getc(file)) != EOF) putchar(c); }
/* * funkcia zatvara subor DOPIS.TXT * vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0 */ int zatvor_subor(void) { return (fclose(fr) != EOF); }
6. Vylepši funkciu vypis() tak, aby zaisťovala stránkovanie po zaplnení obrazovky. Použi v programe.
/* deklaracia uplnych funkcnych prototypov */ int otvor_subor(void); void vypis(FILE *fr); int zatvor_subor(void);
/* funkcia main() */ int main(void) { char c;
if (otvor_subor() == 0) { /* vola funkciu otvor_subor() */ printf("Neda sa otvorit subor %s.\n", nazov_suboruOK); return 1; }
vypis(fr); /* vola funkciu vypis() */
if (zatvor_subor() == 0) { /* vola funkciu zatvor_subor() */ printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK); return 1; } return 0; }
/* * funkcia otvara subor s nazvom zadanym z klavesnice * vracia nenulovu hodnotu pri uspesnom otvoreni, inaksie vracia 0 */ int otvor_subor(void) { int i; char nazov_suboru[20];
printf("Zadaj nazov suboru aj s priponou: "); fgets(nazov_suboru,19,stdin); for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) { /* skratenie retazca o znaky '\n' a '\0' */ nazov_suboruOK[i] = nazov_suboru[i]; } return ((fr = fopen(nazov_suboruOK, "r")) != NULL); }
/* * funkcia vypise obsah suboru na obrazovku s odstrankovanim */ void vypis(FILE *file) { int i = 1, j = 0; char c;
while ((c = getc(file)) != EOF) { j++; if (j == DLZKA_RIADKU || c == '\n') { ++i; j = 0; } putchar(c); if (i % 22 == 0) { putchar('\n'); system("pause"); system("cls"); i++; } } }
/* * funkcia zatvara subor * vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0 */ int zatvor_subor(void) { return (fclose(fr) != EOF); }
7. Napíš funkciu double vypis_subor(void), ktorá vypíše pomocou funkcie výpis() na obrazovku obsah ľubovolného súboru. Meno súboru čítaj z klávesnice a vhodne reaguj na prípad, keď súbor neexistuje. Funkcia vypis_subor() vracia 2.2, ak je meno súboru len K alebo k. Ak nebol súbor otvorený, vracia hodnotu 1.1, inak vracia 0.5
Spoiler:
Kód:
double vypis_subor(void) { int i; char nazov_suboru[100];
printf("Zadaj nazov suboru aj s priponou: "); /* je mozne zadat aj celu cestu k suboru, napr. d:\\subory\test.txt */ fgets(nazov_suboru,99,stdin); if ((nazov_suboru[0] == 'k') && (nazov_suboru[1] == '\n') || (nazov_suboru[0] == 'K') && (nazov_suboru[1] == '\n') || (nazov_suboru[0] == '\n')) return 2.2; else { for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) /* skratenie retazca o znaky '\n' a '\0' */ nazov_suboruOK[i] = nazov_suboru[i]; if ((fr = fopen(nazov_suboruOK, "r")) == NULL) { printf("Taky subor nie je k dispozicii!\n"); return 1.1; } else { vypis(fr); /* vola funkciu vypis() */ return 0.5; } } } /* * funkcia vypise obsah suboru na obrazovku s odstrankovanim */ void vypis(FILE *file) { int i = 1; char c;
while ((c = getc(file)) != EOF) { if (c == '\n') ++i; putchar(c); if (i % 24 == 0) { putchar('\n'); system("pause"); system("cls"); i++; } } if (fclose(fr) == EOF) printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK); }
8. Napíš program, ktorý s využitím funkcie vypis_subor() bude vypisovať na obrazovku ľubovolné súbory dovtedy, kým užívateľ nezadá meno súboru ako K.
Spoiler:
Kód:
#include <stdio.h> #include <stdlib.h> /* kniznica potrebna pre funkcie system() */ #include <string.h> /* kniznica potrebna pre funkciu strlen() */
/* funkcia main() */ int main(void) { for (;;) { if (vypis_subor() == 2.2) return; } putchar('\n'); return 0; }
/* * funkcia otvori a vypise subor s nazvom zadanym z klavesnice * vracia 2.2 ak je nazov suboru k alebo K * vracia 1.1 ak sa subor neotvoril, unak vracia 0.5 */ double vypis_subor(void) { int i; char nazov_suboru[100];
printf("Zadaj nazov suboru aj s priponou: "); /* je mozne zadat aj celu cestu k suboru, napr. d:\\subory\test.txt */ fgets(nazov_suboru,99,stdin); if ((nazov_suboru[0] == 'k') && (nazov_suboru[1] == '\n') || (nazov_suboru[0] == 'K') && (nazov_suboru[1] == '\n') || (nazov_suboru[0] == '\n')) return 2.2; else { for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) /* skratenie retazca o znaky '\n' a '\0' */ nazov_suboruOK[i] = nazov_suboru[i]; if ((fr = fopen(nazov_suboruOK, "r")) == NULL) { printf("Taky subor nie je k dispozicii!\n"); return 1.1; } else { vypis(fr); /* vola funkciu vypis() */ return 0.5; } } } /* * funkcia vypise obsah suboru na obrazovku s odstrankovanim a nasledne zatvori subor */ void vypis(FILE *file) { int i = 1; char c;
while ((c = getc(file)) != EOF) { if (c == '\n') ++i; putchar(c); if (i % 24 == 0) { putchar('\n'); system("pause"); system("cls"); i++; } } if (fclose(fr) == EOF) printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK); }
9. Funkcie vypis() a vypis_subor() ulož do suboru FCE.C a funkciu main() do súboru HLAVNY.C. 10. Pomocou #include pripoj súbor FCE.C do súboru HLAVNY.C. 11. Vyskúšaj funkciu programu vytvoreného v predchádzajúcich úlohách spustením súboru HLAVNY.C.
FCE.C
Spoiler:
Kód:
#include <stdio.h> #include <string.h> /* kniznica potrebna pre funkciu strlen() */ #include <stdlib.h> /* kniznica potrebna pre funkcie system() */ /* globalne premenne */ FILE *fr; char nazov_suboruOK[100];
/* * funkcia otvori a vypise subor s nazvom zadanym z klavesnice * vracia 2.2 ak je nazov suboru k alebo K * vracia 1.1 ak sa subor neotvoril, unak vracia 0.5 */ double vypis_subor(void) { int i; char nazov_suboru[100];
printf("Zadaj nazov suboru aj s priponou: "); /* je mozne zadat aj celu cestu k suboru, napr. d:\\subory\test.txt */ fgets(nazov_suboru,99,stdin); if ((nazov_suboru[0] == 'k') && (nazov_suboru[1] == '\n') || (nazov_suboru[0] == 'K') && (nazov_suboru[1] == '\n') || (nazov_suboru[0] == '\n')) return 2.2; else { for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) /* skratenie retazca o znaky '\n' a '\0' */ nazov_suboruOK[i] = nazov_suboru[i]; if ((fr = fopen(nazov_suboruOK, "r")) == NULL) { printf("Taky subor nie je k dispozicii!\n"); return 1.1; } else { vypis(fr); /* vola funkciu vypis() */ return 0.5; } } } /* * funkcia vypise obsah suboru na obrazovku s odstrankovanim a nasledne zatvori subor */ void vypis(FILE *file) { int i = 1; char c;
while ((c = getc(file)) != EOF) { if (c == '\n') ++i; putchar(c); if (i % 24 == 0) { putchar('\n'); system("pause"); system("cls"); i++; } } if (fclose(fr) == EOF) printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK); }
HLAVNY.C
Spoiler:
Kód:
#include "FCE.C" /* pridany subor FCE.C
/* funkcia main() */ int main(void) { for (;;) { if (vypis_subor() == 2.2) return 0; } putchar('\n'); return 0; }
12. V súbore HLAVNY.C uveď úplný funkčný prototyp funkcie vypis_subor(). HLAVNY.C
/* funkcia main() */ int main(void) { for (;;) { if (vypis_subor() == 2.2) return 0; } putchar('\n'); return 0; }
13. Vytvor súbor FCE.H a vlož doňho úplný funkčný prototyp funkcie vypis_subor(). Pomocou #include zabezpeč spojenie medzi súbormi FCE.H a HLAVNY.C. Vyskúšaj funkčnosť. (projekt)
14. Vytvor dva súbory A.C a B.C, ktoré budú zdieľať premennú iii. Premenná iii sa v A.C definuje a inicializuje, v B.C sa vypíše jej hodnota. (Projekt)
15. Zmeň predchádzajúci program tak, aby iii bola definovaná ako globálna static premenná a vyskúšaj chovanie programu. Popíš chovanie.
Kompilátor mi vynadá, pretože statickú premennú z jedného modulu nemôžem použiť v druhom module.
16. Napíš program, ktorý prečíta znak z klávesnice. Ak to bude znak 'd' vtedy prečíta a vypíše celé číslo, ak to bude 'f', spraví to isté s číslom float. Premenné, do ktorých bude číslo uložené, definujte až vnútri bloku za if alebo else.
Spoiler:
Kód:
#include <stdio.h>
int main(void) { char c;
printf("Ak zadas 'd', vypisem cele cislo, ak 'f', vypisem realne cislo: "); c = getchar(); if (c == 'd') { int i = 5698457; printf("\n%d\n", i); } else if (c == 'f') { float f = 1548.658497; printf("\n%f\n", f); } else printf("\nZadal si ine pismeno!\n"); return 0; }
17. Dopíš stanovený program: (MAX skús minimálne 100000) tak, že i a j budú najprv globálne int a potom lokálne register int. Pokús sa zmerať rýchlosť obidvoch programov a napíš.
Spoiler:
Kód:
#include <stdio.h>
int i, j;
int main(void) { // register int i; // register int j; int MAX = 100000;
for (i = 0; i < MAX; i++) { for (j = 0; j < MAX; j++) { i = i; j = j; } } return 0; }
Tvanie 42.651 sekundy.
Spoiler:
Kód:
#include <stdio.h>
//int i, j;
int main(void) { register int i; register int j; int MAX = 100000;
for (i = 0; i < MAX; i++) { for (j = 0; j < MAX; j++) { i = i; j = j; } } return 0; }
Trvanie 3.562 sekundy.
_________________ 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