Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilRoman Procházka
1
Příklady v jazyku C – část 8
2
Napište program, který inicializuje 2-rozměrné pole uživatele (5 řádků, 2 sloupce) a naplní ho hodnotami (první sloupec znamená číslo serveru a druhý sloupec počet uživatelů tohoto serveru). Program umožňuje zadat číslo serveru, vyhledá tento server ve výše uvedené tabulce a pak vypíše počet jeho uživatelů: #include int main(void) { int ServerUsers[5][2] = { 1, 14, 2, 28, 3, 19, 4, 8, 5, 15 }; int server; int i; printf("Vloz cislo serveru: "); scanf("%d", &server); /* vyhledej server v tabulce */ for(i=0; i<5; i++) if(server == ServerUsers[i][0]) { printf("Na serveru %d je %d uzivatelu.\n", server,ServerUsers[i][1]); break; } /* pokud server nenalezen v tabulce */ if(i==5) printf("Server nenalezen.\n"); while(!kbhit()); return 0; }
3
Napište program, který do pole o max. 50 řádkách a 4 sloupcich zapisuje do sloupců 2D-pole údaje: úhel [ o ], sin(úhel [rad]), cos(úhel [rad]), log(úhel [ o ]). Potom pomocí sprintf přepíše 4 údaje do řetězce, vymění v něm tečky za čárky, otevře soubor “export.csv” a přepíše do tohoto souboru. [Převod na radiány=180/PI*úhel realizujte pomocí podprogramu]. Úhel se pohybuje od 90 o do 180 o s krokem 10 o. Současně se zápisem do souboru vypisujte 4 sloupečky čísel na obrazovku : #include #define PI 3.1415926 double prevod(double st) { return(PI / 180.0 * st); } int main() { FILE *soubor; int radky, sloupce, i, j; double pole[50][4], uhel; char retezec[255]; radky = (180-90)/5; sloupce = 4;
4
suborn = fopen("export.csv", "w"); if (soubor == NULL) { printf("\nNepodarilo se vytvorit soubor..."); return(1); } uhel = 90.0; for (i = 0; i < radky; i++) { pole[ i ][ 0 ] = uhel; pole[ i ][ 1 ] = sin(prevod(uhel)); pole[ i ][ 2 ] = cos(prevod(uhel)); pole[ i ][ 3 ] = log(uhel); /* tisk radky do retezce a vymena tecky za carku */ sprintf( retezec, "%f;%f;%f;%f\n", pole[ i ][ 0 ], pole[ i ][ 1 ], pole[ i ][ 2 ], pole[ i ][ 3 ] ); j = 0; while(retezec[j] != '\n') { if(retezec[j] == '.') retezec[j] = ','; j++; } fprintf(soubor, "%s", retezec); printf( "%f\t%f\t%f\t%f\n", pole[ i ][ 0 ], pole[ i ][ 1 ], pole[ i ][ 2 ], pole[ i ][ 3 ] ); uhel += 5; } if (fclose(soubor) == EOF) { printf("\nNepodarilo se uzavrit soubor..."); return(1); } printf("\nPro ukonceni programu stisknete klavesu..."); while(!kbhit()); return 0; }
5
Napište program, který inicializuje 2-rozměrné pole velikosti (10 řádků, 3 sloupce) tak, že první prvek každého řádku obsahuje číslo, druhý prvek obsahuje jeho druhou mocninu a třetí prvek obsahuje jeho třetí mocninu: #include int main(void) { int pole[10][3], i; for(i=0; i<10; i++) { pole[ i ][ 1 ] = i ; pole[ i ][ 2 ] = i*i ; pole[ i ][ 1 ] = i*i*i ; } for(i=0; i<10; i++) printf(" %d\t%d \t%d\n“, pole[ i ][ 1 ], pole[ i ][ 2 ], pole[ i ][ 3 ] ); while(!kbhit()); return 0; }
6
Napište program, který přečte 10 řetězců, které uloží do pole řetězců. Každý řetězec může mít max. 80 znaků. Pole řetězců definujte jako char text[10][80]. Nejprve řetězce načte do pole. Potom v cyklu přečte číslo řetězce (1 až 10) a tento řetězec zobrazí. Přečte-li záporné číslo, pak cyklus ukončí a program je skončen : #include int main(void) { char text[10][80]; int i; for(i=0; i<10; i++) { printf("%d: ", i+1); gets(text[i]); } do { printf("Vloz cislo retezce (1-10) : "); scanf("%d", &i); i--; /* uprav hodnotu, aby odpovidala indexu pole */ if(i>=0 && i<10) printf("%s\n", text[i]); } while(i>=0); return 0; }
7
Napište program, který realizuje překladač z angličtiny do češtiny : #include char words[][2][40] = { "dog", "Hund", "no", "nein", "year", "Jahr", "child", "Kind", "I", "Ich", "drive", "fahren", "house", "Haus", "to", "zu", "","" }; int main(void) {char english[80]; int i; printf("Vloz anglicke slovo: "); gets(english); /* hledej toto slovo ve slovniku */ i = 0; /* hledej, dokud nanaleznes prazdny retez */ while(strcmp(words[i][0], "")) { if(!strcmp(english, words[i][0])) { printf("Nemecky preklad: %s", words[i][1]); break; } i++; } if(!strcmp(words[i][0], "")) printf("Neni ve slovniku\n"); while(!kbhit()); return 0; }
8
Napište program, který vypíše řetězcový ekvivalent výčtové konstanty enum transport {auto,vlak,letadlo,autobus} pomocí příkazu switch (výčtové konstanty nejsou řetězce, ale celá čísla). Pro volbu dopravního prostředku se užívá generátor náhodných čísel. #include enum transport { auto1, vlak, letadlo, autobus } tp; int main(void) {printf("Stiskni klavesu pro vyber dopravniho prostredku: "); /* vytvoreni nahodneho cisla pri kazdem spusteni programu */ while(!kbhit()) rand(); getch(); /* precteni a odlozeni znaku */ tp = rand() % 4; printf("%d\n",tp); switch(tp) { case auto1: printf("auto"); break; case vlak: printf("vlak"); break; case letadlo: printf("letadlo"); break; case autobus: printf("autobus"); } while(!kbhit()); return 0; }
9
Napište program, který vytiskne 1., 2. a 3. prvek desetiprvkoveho 1D-pole jednak přes indexy, jednak přes pointerovou aritmetiku. int main() { int a[10]={10,20,30,40,50,60,70,80,90,100}; int *p_a; int i; p_a = a;/* přiřadí p_a adresu začátku pole a */ printf("Pole a[10]: \n\n"); for (i=0;i<10;i++) printf("a[%d]=%d ",i, a[i]); printf("\n\n"); /* vytiskne adresu pole A */ printf("Adresa pointeru na zacatek pole A (p_a = a) je : %p \n\n",p_a); /* vytiskne 1. 2. 3. prvek přes indexy pole */ printf("a[0]=%d a[1]= %d a[2]= %d \n\n",a[0],a[1],a[2]); /* vytiskne 1. 2. 3. prvek přes pointery */ printf("p_a (p_a+1) (p_a+2) \n"); printf("%p %p %p\n",p_a, (p_a+1), (p_a+2)); printf("--------------------------------------------\n\n"); printf("*p_a=%d *(p_a+1)=%d *(p_a+2)=%d \n\n",*p_a, *(p_a+1), *(p_a+2)); while(!kbhit()); return 0; }
10
Napište program, který pracuje s 2D-maticí jako s 1D (řádky jsou umístěné za sebou), naplní ji hodnotou indexu a poté ji jako dvoudimenzionální vytiskne. #include #define POCET_RADKU 10 #define POCET_SLOUPCU 5 int main() { /* prace s vicedimenzionalnim polem, jako s jednodimenzionalnim */ int i,j, cit=0; int A[ POCET_RADKU ][ POCET_SLOUPCU ], *p_radek; p_radek = A; /* ziskani adresy zacatku pole tj.prvku [0,0] */ /* p_radek = (int *) A; */ /* (pozor na potrebu explicitniho pretypovani u nekterych prekladacu) */ /* p_radek = &A[0][0]; ziskani adresy vektoru adres radku */ /* Adresa zacatku pole: /* ! ! ! ! Pozor A bez indexů = adresa začátku pole A (tj. prvního prvku pole A) */ /* &A[0][0] = adresa 1.prvku pole A (tj. zacatku pole A) */ /* Hodnota 1.prvku pole: */ /* A[0][0] = hodnota 1.prvku pole A */ /* Naplneni 2D pole, (pracujeme s nim ale jako s 1D polem) hodnotou prubezneho indexu */ for ( i=0 ; i < POCET_RADKU*POCET_SLOUPCU ; i++ ) *( p_radek + i ) = i+1;
11
/* vytisteni 2D pole, indexovaneho jako 2D pole - tj. 2-ma indexy [i,j] */ for ( i=0 ; i < POCET_RADKU ; i++ ) { for ( j=0 ; j < POCET_SLOUPCU ; j++ ) printf("%4d ", A[ i ][ j ]); printf("\n"); } printf("\n ----------------------------------------------------------\n\n"); /* Naplneni 2D pole, (pracujeme s nim ale jako s 2D polem se 2-ma indexy) */ /* hodnotou prubezneho indexu: */ for ( i = 0 ; i < POCET_RADKU ; i++ ) for ( j = 0 ; j < POCET_SLOUPCU ; j++ ) { /* ADRESACE prvku 2-D pole: /* a) pres pointer na zacatek 2D-pole */ *( p_radek + i*POCET_SLOUPCU + j ) = i; /* b) pres indexy [i,j] tohoto pole */ /* nebo A[ i ][ j ] = i */ /* ladici tisk: */ printf("i = %d\t j = %d\t i * ( POCET_SLOUPCU ) + %d = %2d\t%2d \n", i, j, j, i*POCET_SLOUPCU+j, i ); } printf("\n"); for ( i=0 ; i < POCET_RADKU ; i++ ) { for ( j=0 ; j < POCET_SLOUPCU ; j++ ) printf("%4d ", A[ i ][ j ] ); printf("\n"); } printf("\n"); while(!kbhit()); return 0; }
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.