tablice.doc

(72 KB) Pobierz
Języki i metody programowania C2

Tablice, podstawowe algorytmy operujące na tablicach

Przykład 2 – odpowiednikiem tablicy 5-ciu elementów typu int jest pięć zmiennych typu int: a, b, c, d, e. Jest to jednak niewłaściwe rozwiązanie dla większej liczby zmiennych, jeśli powtarza się na nich takie same operacje. Właściwym rozwiązaniem są wtedy zmienne indeksowane.

Przykład 1 - tablica składa się z pięciu elementów typu int zawierających kolejno wartości wylosowane. Można ją zdefiniować jako: int tablica [5]. Program liczy sumę elementów tablicy i podaje wartość średnią elementów tablicy.

 

 

 

 

 

 

 

 

Przykłady 1 i 2 pokazują rozwiązanie z użyciem 5

· zmiennych indeksowanych, zdefiniowanych za pomocą tablicy int tab[5] i dostępnych jako tab[i] dla i=0,..,4

· zmiennych int a, b, c, d, e;

indeksy

elementy

0

2

1

0

2

67

3

6

4

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void main()

{

int a, b, c, d, e, p=5;

float suma=0;

srand(1);

a=random(200);

b=random(200);

c=random(200);

d=random(200);

e=random(200);

 

suma+=a;

suma+=b;

suma+=c;

suma+=d;

suma+=e;

suma/=p;

printf("srednia wartosc "

"%i elementow jest rowna %f\n",

p, suma);

getch();

}

 

71

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void main()                                           

{

int tab[5], i, p=5;

float suma=0;

srand(1); //generowanie powtarzalnego

//ciągu liczb losowych: 2, 0, 67, 6, 71

for (i=0; i<5; i++)

     tab[i] = random(200);                           

                                                                                     

 

 

for (i=0; i<5; i++)

    suma += tab[i];                           

 

 

 

suma /= p;                                           

printf("Srednia wartosc"

"%i elementow jest rowna %f\n",

p, suma);

getch();

}


Tablica jako adres swojego pierwszego elementu

 

Z tego punktu widzenia tablica jest traktowana jako tablica jednowymiarowa.

Tablica int tab [5] jest tablicą 5-u elementów typu int i jednocześnie adresem 1-go elementu, czyli ma wartość

tab = 8FC0 : 0FF6,

czyli jest stałą wskaźnikową typu int* - wskaźnik na int

 

Adresy elementów tablicy typu wskaźnik na int czyli  int*

 

Elementy typu  int

   Indeksy



&tab[0]=tab+0=8FC0 : 0FF6

 

2

0



&tab[1]=tab+1=8FC0 : 0FF8

 

0

1



&tab[2]=tab+2=8FC0 : 0FFA

 

67

2



&tab[3]=tab+3=8FC0 : 0FFC

 

6

3



&tab[4]=tab+4=8FC0 : 0FFE

 

71

4

 


Przykład programu z wskaźnikową notacją w odwołaniu do elementów tablicy – tablica jako stała wskaźnikowa typu wskaźnik na typ elementu

 

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

 

void main()

{

int tab[5];

int i, p=5;

float suma=0;

 

clrscr();

srand(1);

 

for (i=0; i<5; i++)

              *(tab+i)=random(200);

             

printf("\ntablica jako adres pierwszego elementu tab: %p\n\n",tab);

 

printf("\nwartosc     indeks   adres  wartosc adresu \n");

for (i=0; i<5; i++)

              printf("tab[%i]=%2i      %i   &tab[%i]: %p \n",

                            i, tab[i], i, i, &tab[i] );

             

 

printf("\nwartosc     indeks   adres  wartosc adresu \n");

 

for (i=0; i<5; i++)

              printf("*(tab+%i)=%2i    %i    tab+%i: %p \n",

                            i, *(tab+i), i, i, tab+i );

             

 

for (i=0;i<5;i++)

              suma+=*(tab+i);  //tab[i]

suma/=p;

printf("\nsrednia wartosc %i elementow jest rowna %f\n",p,suma);

getch();

}


Przykład programu przetwarzającego tablicę z wyborem operacji

 

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void main()

{

int tab[5];

int i, p=0;

float suma=0;

char opcja;

srand(1);

do

{

clrscr();

printf("1 - generowanie losowego ciagu danych do tablicy\n");

printf("2 - wyswietlanie tablicy\n");

printf("3 - obliczenie wrtosci sredniej elementow tablicy\n");

printf("k - koniec programu\n");

opcja=getch();              //odczyt klawisza naciśniętego również w pętli while(!kbhit());

switch(opcja)

              {case '1'  :  p= random(5)+1;                       //losowanie liczby elementów

                                     for (i=0; i<p; i++)

                                             tab[i]=random(200);                            //wypełnianie tablicy                                         

                                          break;

              case '2'  :  if (p==0) break;

                                            printf("\nwartosc     indeks   adres  wartosc adresu\n");

                                            for (i=0; i<p; i++)

                                            printf("*(tab+%i)=%3i    %i    tab+%i: %p\n",

                                                              i,*(tab+i), i, i, tab+i );             

                                          break;

              case '3'  :  if (p==0) break;

                                          for (i=0, suma=0;i<p;i++)

                                              suma+=tab[i];

                                          suma/=p;

                                          printf("\nsrednia wartosc %i elementow jest rowna %f\n",

                                 p,suma);

                                          break;

              case 'k'  :  printf("Koniec programu\n"); getch(); return;

              default  : printf("Zla opcja\n");

              }

...

Zgłoś jeśli naruszono regulamin