Registrovaný: 06 Jan 2012, 19:26 Príspevky: 458 Bydlisko: pod Pátrovom Udelené body:228 bodov Získané body:21 bodov
1. Napíš program, ktorý naplní maticu 10 x 10 int číslami 0 - 99 a pomocou pointerov vytlačí jej obsah prehľadne na obrazovku. Pri nastavovaní hodnôt prvkov pristupuj do matice pomocou indexov.
Spoiler:
Kód:
/*********************************************** * * 1.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
#include <stdio.h>
int main(void) { int i, j, x[10][10]; // dvojrozmerne pole o 100 prvkoch
for (i = 0; i < 10; i++) { // pre kazdy riadok for (j = 0; j < 10; j++) // pre kazdy stlpec x[i][j] = j + (i * 10); // vkladanie cisiel od 0 do 99 po riadkoch } for (i = 0; i < 10; i++) { // vypis cisla riadku printf("mapa pamati pre %d. riadok: \n",i); for(j = 0; j < 10; j++) // vypis cisla stlpca a hodnoty prvkov printf("\t stlpec %d \t hodnota %d \n", j, x[i][j]); putchar('\n'); }
return 0; }
2. Definuj statické pole 5 x 5 int a vypíš adresu začiatku poľa, nultého a prvého riadku, prvku [0][0], [1][0] a posledného prvku. Pomocou sizeof() zisti veľkosť poľa a porovnaj toto číslo s bázovou adresou poľa a adresou jeho posledného prvku. Adresy vypisuj formátom %p alebo %x.
Spoiler:
Kód:
/*********************************************** * * 2.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
#include <stdio.h>
int main(void) { int i, j; int x[5][5]; // dvojrozmerne pole o 25 prvkoch
3. Napíš program, ktorý prečíta súbor a pomocou poľa pointerov na char ho uloží do dynamickej pamäti po riadkoch. Ukladaj len skutočné dĺžky riadkov. Čítaný súbor nebude mať viac ako 1000 riadkov. Do druhého súboru zapíš prečítaný súbor opačne, teda najskôr posledný riadok a nakoniec prvý riadok. Pre čítanie celého riadku použi funkciu fgets().
Spoiler:
Kód:
/*********************************************** * * 3.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
int main(void) { int i, j; FILE *fr, *fw; char *pole[1000]; // definicia jednorozmerneho pola pointerov
for (i = 0; i < 1000; i++) { // dynamicky alokovany druhy rozmer pola if ((pole[i] = (char *) malloc(1000)) == NULL) { printf("Malo pamati"); return; } } if ((fr = fopen("DOPIS.TXT", "r")) == NULL) { printf("Subor sa neda otvorit."); return; } if ((fw = fopen("KOPIA.TXT", "w")) == NULL) { printf("Subor sa neda otvorit."); return; } i = 0; while (fgets((pole[i]), 999, fr) != NULL && i <= 1000) // vlozenie riadkov do pola i++; i -= 1; while (i != -1) { fputs(pole[i], fw); // vlozenie riadkov do noveho suboru opacne i--; } fclose(fr); fclose(fw);
return 0; }
4. Uprav predchádzajúci program tak, že bude na obrazovku vypisovať len riadky, v ktorých sa objaví slovo, ktoré bude zadané z klávesnice. Na hľadanie reťazca využi funkciu srtstr().
Spoiler:
Kód:
/*********************************************** * * 4.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
int main(void) { int i, j; FILE *fr, *fw; char *pole[1000]; // definicia jednorozmerneho pola pointerov char slovo[50];
for (i = 0; i < 1000; i++) { // dynamicky alokovany druhy rozmer pola if ((pole[i] = (char *) malloc(1000)) == NULL) { printf("Malo pamati"); return; } } if ((fr = fopen("DOPIS.TXT", "r")) == NULL) { printf("Subor sa neda otvorit."); return; } if ((fw = fopen("KOPIA.TXT", "w")) == NULL) { printf("Subor sa neda otvorit."); return; } i = 0; while (fgets((pole[i]), 999, fr) != NULL && i <= 1000) // vlozenie riadkov do pola i++; i -= 1; while (i != -1) { fputs(pole[i], fw); // vlozenie riadkov do noveho suboru opacne i--; } printf("Zadaj slovo a vypisem riadky, ktore ho obsahuju: "); scanf("%s", slovo); for (i = 0; i < 1000; i++) { if (strstr(pole[i], slovo)) puts(pole[i]); } fclose(fr); fclose(fw);
return 0; }
5. Uprav predchádzajúci program tak, že vytvorí súbor ODKAZY.TXT, kde ku každému slovu zo súboru SLOVA.TXT pripíše čísla riadkov, na ktorých sa príslušné slovo nachádzalo.
Spoiler:
Kód:
/*********************************************** * * 5.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
int main(void) { int i, j, k, pocet_slov; FILE *fr, *fr1, *fw; char *pole[1000], *slovo[50]; // definicia jednorozmerneho pola pointerov
/* dynamicky alokovany druhy rozmer pola */ for (i = 0; i < 1000; i++) { if ((pole[i] = (char *) malloc(1000)) == NULL) { printf("Malo pamati"); return; } } for (i = 0; i < 50; i++) { if ((slovo[i] = (char *) malloc(50)) == NULL) { printf("Malo pamati"); return; } }
/* otvorenie suboru DOPIS.TXT na citanie a vlozenie jeho obsahu do dvojrozmerneho pola po riadkoch */ if ((fr = fopen("DOPIS.TXT", "r")) == NULL) { printf("Subor sa neda otvorit."); return; } i = 0; while (fgets((pole[i]), 999, fr) != NULL && i <= 1000) // vlozenie riadkov do pola i++; fclose(fr);
/* otvorenie suboru SLOVA.TXT na citanie a vlozenie jednotlivych slov do dvojrozmerneho pola po riadkoch */ if ((fr1 = fopen("SLOVA.TXT", "r")) == NULL) { printf("Subor sa neda otvorit."); return; } i = 0; while (fgets((slovo[i]), 49, fr1) != NULL && i <= 50) { // vlozenie riadkov do pola slovo[i][strlen(slovo[i]) - 1] = '\0'; // orezanie znaku '\n' //printf("%s - %d\n", slovo[i], strlen(slovo[i])); i++; } fclose(fr1); pocet_slov = i; // pamata si pocet riadkov pola
/* otvorenie suboru ODKAZY.TXT na zapis a vlozenie do neho po riadkoch jednotlive slova s vypisom cisiel riadkov kde sa v subore DOPIS.TXT nachadzaju*/ if ((fw = fopen("ODKAZY.TXT", "w")) == NULL) { printf("Subor sa neda otvorit."); return; } for(k = 0; k < pocet_slov; k++) { fprintf(fw, "%s - ", slovo[k]); // vlozenie slova j = 0; for (i = 0; i < 1000; i++) { if (strstr(pole[i], slovo[k])) fprintf(fw, "%d ", i); // vlozenie cisiel riadkov } fprintf(fw, "\n"); // odriadkovanie riadku v suboru } fclose(fw); printf("Skontroluj si obsah suboru ODKAZY.TXT.\n"); return 0; }
6. Definuj v main() lokálne automatické pole 10 x 10 prvkov typu int a vytvor funkcie napln() a vytlac(). Prvá funkcia toto pole naplní číslami 0 - 99 a druhá ho vytlačí na obrazovku. Pole odovzdávaj do obidvoch funkcií ako skutočný parameter.
Spoiler:
Kód:
/*********************************************** * * 6.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
void napln(int pole[][10], int pocet); void vytlac(int pole[][10], int pocet);
int main(void) { int pole[10][10]; // definicia lokalne automatickeho dvojrozmerneho pola
napln(pole, 10); vytlac(pole, 10);
return 0; }
/* funkcia naplni dvojrozmerne pole cislami 0 - 99 */ void napln(int pole[][10], int pocet) { int i, j, k = 0;
for (i = 0; i < pocet; i++) { for (j = 0; j < 10; j++) { pole[i][j] = k; // ulozenie cisla do prvku pola k++; // zvysenie ukladaneho cisla o jedna } } }
/* funkcia vytlaci na obrazovku obsah dvojrozmerneho pola */ void vytlac(int pole[][10], int pocet) { int i, j;
for (i = 0; i < pocet; i++) { for (j = 0; j < 10; j++) printf("%d\n", pole[i][j]); // vypis jednotlivych prvkov pola pod seba } }
7. Napíš program, ktorý vytvorí dynamické pole a dolnú trojuholníkovú maticu. Túto maticu naplň číslami xij, kde xij = i * 10 + j a vytlač ju.
Spoiler:
Kód:
/*********************************************** * * 7.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
for (i = 0; i < argc; i++) { for (j = 0; j < strlen(argv[i]); j++) printf("%c", toupper(argv[i][j])); putchar(' '); } return 0; }
9. Napíš program, ktorý vypíše na obrazovku súbor, ktorého meno je prvý parameter príkazového riadku. Pokiaľ bude uvedený aj druhý parameter, považuj ho za meno súboru, do ktorého sa bude čítaný súbor kopírovať namiesto výpisu na obrazovku. Ak nebude uvedený žiadny parameter, vypíš prehľadný návod k použitiu.
Spoiler:
Kód:
/*********************************************** * * 9.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
if (argc == 2) { if ((fr = fopen(argv[1], "r")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", argv[1]); return 0; } putchar('\n'); while ((c = getc(fr)) != EOF) putchar(c); fclose(fr); } else if (argc == 3) { if ((fr = fopen(argv[1], "r")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", argv[1]); return 0; } if ((fw = fopen(argv[2], "w")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", argv[2]); return 0; } while ((c = getc(fr)) != EOF) putc(c, fw); fclose(fr); fclose(fw); printf("\nObsah suboru %s bol prekopirovany do suboru %s.\n", argv[1], argv[2]); } else printf("\nSubor 9.exe je potrebne spustit z prikazoveho riadku nasledovne:\n\n" "1) s prvym parametrom - presny nazov suboru, ktory chceme citat\n" "vtedy sa jeho obsah vypise na obrazovku.\n" "Napriklad: 9 dopis.txt\n\n" "2) s prvym parametrom - presny nazov suboru, ktory chceme citat\n" "a s druhym parametrom - nazov suboru, do ktoreho chceme zapisovat.\n" "Napriklad: 9 dopis.txt kopia.txt\n");
return 0; }
10. Uprav predchádzajúci program tak, že návod k použitiu sa vypíše, ak bude prvý parameter -h alebo -H (help). Ak nebude zadaný žiadny parameter, program bude vyžadovať zadanie názvu čítaného súboru z klávesnice.
Spoiler:
Kód:
/*********************************************** * * 10.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
if (argc == 2) { if (argv[1][1] == 'h' || argv[1][1] == 'H') { printf("\nSubor 10.exe je potrebne spustit z prikazoveho riadku nasledovne:\n\n" "1) s prvym parametrom - presny nazov suboru, ktory chceme citat\n" "vtedy sa jeho obsah vypise na obrazovku.\n" "Napriklad: 10 dopis.txt\n\n" "2) s prvym parametrom - presny nazov suboru, ktory chceme citat\n" "a s druhym parametrom - nazov suboru, do ktoreho chceme zapisovat.\n" "Napriklad: 10 dopis.txt kopia.txt\n"); return 0; } else { if ((fr = fopen(argv[1], "r")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", argv[1]); return 0; } putchar('\n'); while ((c = getc(fr)) != EOF) putchar(c); fclose(fr); } } else if (argc == 3) { if ((fr = fopen(argv[1], "r")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", argv[1]); return 0; } if ((fw = fopen(argv[2], "w")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", argv[2]); return 0; } while ((c = getc(fr)) != EOF) putc(c, fw); fclose(fr); fclose(fw); printf("\nObsah suboru %s bol prekopirovany do suboru %s.\n", argv[1], argv[2]); } else { printf("Zadaj presny nazov suboru, z ktoreho chces citat: "); scanf("%s", subor); if ((fr = fopen(subor, "r")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", subor); return 0; } putchar('\n'); while ((c = getc(fr)) != EOF) putchar(c); fclose(fr); }
return 0; }
11. Napíš program, ktorý bude v súbore, ktorého názov bude uvedený ako 1. parameter príkazového riadku, hľadať reťazec, ktorý bude zadaný ako 2. parameter. Riadky obsahujúce tento reťazec sa vypíšu na obrazovku. Program bude reagovať aj na nasledujúce znaky, ktoré sa môžu objaviť v ľubovolnom poradí ako 3. parameter príkazového riadku: c (case sensitive) rozlišuje malé a veľké písmená, inakšie ich považuje za rovnaké n (numbering) každý vypísaný riadok bude očíslovaný, inakšie sa číslovať nebude
Príklady zadania z príkazového riadku: 11 dopis.txt pointer 11 dopis.txt pointer c 11 dopis.txt pointer n 11 dopis.txt pointer cn // alebo tretí parameter bude nc, výstup bude rovnaký
Spoiler:
Kód:
/*********************************************** * * 11.c ver. 1.0 * popis je vyssie * =========================================== * * libcosenior, september 2012 * ***********************************************/
#include <stdio.h> // I/O funkcie #include <stdlib.h> // funkcia malloc #include <string.h> // funkcia strstr #include <ctype.h> // pouzitie makier napr.islower, toupper
int main(int argc, char **argv) { FILE *fr; char *pole[1000]; int i;
/* dynamicke vytvorenie druhej dimenzie pola */ for (i = 0; i < 1000; i++) { if ((pole[i] = (char *) malloc(1000)) == NULL) { printf("Malo pamati"); return; } }
/* ak je zadany aj 2. alebo 3. parameter, plnia sa ulohy programu */ if (argc == 3 || argc == 4) { /* otvorenie suboru na citanie */ if ((fr = fopen(argv[1], "r")) == NULL) { printf("\nSubor %s sa nepodarilo otvorit!\n", argv[1]); return 0; } /* vlozenie obsahu suboru do dvojrozmerneho pola po riadkoch */ i = 0; while (fgets((pole[i]), 999, fr) != NULL && i <= 1000) i++;
/* ak je zadany aj 2. parameter - retazec, vypisu sa riadky, ktore ho obsahuju nezalezi ci je zaciatocne pismeno retazca velke alebo male */ if (argc == 3) { if (islower(argv[2][0])) argv[2][0] = toupper(argv[2][0]); for (i = 0; i < 1000; i++) { if (strstr(pole[i], argv[2])) printf("%s", pole[i]); } if (isupper(argv[2][0])) argv[2][0] = tolower(argv[2][0]); for (i = 0; i < 1000; i++) { if (strstr(pole[i], argv[2])) printf("%s", pole[i]); } }
/* ak je zadany aj 3. parameter - volitelne, vypisuje sa podla jeho hodnoty */ else if (argc == 4) { /* vypisuje cisla riadkov */ if (argv[3][0] == 'n' && argv[3][1] != 'c') { for (i = 0; i < 1000; i++) { if (strstr(pole[i], argv[2])) printf("%3d. %s", i, pole[i]); } } /* vypisuje riadky, ktore obsahuju retazec, zalezi na velkosti prveho pismena */ else if (argv[3][0] == 'c' && argv[3][1] != 'n') { for (i = 0; i < 1000; i++) { if (strstr(pole[i], argv[2])) printf("%s", pole[i]); } }
/* nezalezi ci je zaciatocne pismeno retazca velke alebo male a vypisuje cisla riadkov */ else if ((argv[3][0] == 'c' && argv[3][1] == 'n') || (argv[3][0] == 'n' && argv[3][1] == 'c')) { for (i = 0; i < 1000; i++) { if (strstr(pole[i], argv[2])) printf("%3d. %s", i, pole[i]); } }
/* ak nebol zadany spravny 3. parameter */ else printf("Nezadal si spravny treti parameter!!!\n"); fclose(fr); } }
/* ak nebol zadany 1. a 2. parameter */ else printf("\nNezadal si spravne parametre k suboru %s z prikazoveho riadku.\n\n" "Treba zadat napr.: 11 dopis.txt Staticka nc\n", argv[0]);
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