1 / 11

Příklady v jazyku C – část 8

Příklady v jazyku C – část 8.

stacie
Download Presentation

Příklady v jazyku C – část 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 <stdio.h> 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řevodna radiány=180/PI*úhel realizujte pomocí podprogramu] . Úhel se pohybuje od 90o do 180o s krokem 10o . Současně se zápisem do souboru vypisujte 4 sloupečky čísel na obrazovku : #include <string.h> #include <stdio.h> #include <math.h> #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 <stdio.h> 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 <stdio.h> 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 <string.h> #include <stdio.h> 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 <stdio.h> #include <stdlib.h> #include <conio.h> 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 <stdio.h> #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; }

More Related