funkcje cd. tablice znaków operacje lancuchowe.doc

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

Funkcje (c.d.). Ta znaków

Nie wolno definicji funkcji zagnieżdżać w ciele innej funkcji !

 

Funkcje bez parametrów muszą korzystać ze zmiennych globalnych, jeśli zachodzi potrzeba współdzielenia danych.

 

 

 

Zmienne globalne zawsze mają wartość 0, zgodną z typem danych

 

Przykład 1 – Na podstawie przykładu z wykładu 5, str. 4.

Przetwarzanie tablicy z wyborem operacji, zastosowanie funkcji bez parametrów korzystających ze zmiennych globalnych

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int tab[5], i, p;                            // zmienne globalne: tab={0, 0, 0, 0, 0},   i=0,  p=0;

float suma;                                                                              // suma =0.0;

char opcja;                                                                       // opcja = ’\x0’;

void wypelnij_tablice();

void wyswietl_tablice();

void oblicz_srednia_wartosc();

void main()

{ srand(1);

  do

  { clrscr();

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

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

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

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

    opcja=getch();

    switch(opcja)

              {

        case '1':               wypelnij_tablice();                                                        break;

                case '2':               wyswietl_tablice();                                                        break;

                     case '3':               oblicz_srednia_wartosc();                                          break;

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

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

       }

while(!kbhit());

}while(1);

}

 

void wypelnij_tablice()

{

              p= random(5)+1;

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

                            tab[i]=random(200);

 

}

 

 

void wyswietl_tablice()

{

              if (p==0) return;

              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 );

 

}

 

void oblicz_srednia_wartosc()

{

              if (p==0) return;

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

                 suma+=tab[i];

              suma/=p;

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

}

 

 


·       Funkcje bez parametrów powinny korzystać ze zmiennych globalnych tylko wtedy, kiedy je współdzielą z innymi funkcjami

·       Zmienne pomocnicze powinny być zmiennymi lokalnymi funkcji np. zmienna sterująca instrukcji for

·       Zmienne lokalne jednej funkcji są poza zasięgiem innej funkcji

 

 

 

 

 

 

Przykład 2 – kolejna wersja programu z przykładu 1

Wprowadzenie zmiennych lokalnych jako zmiennych pomocniczych – zmienne sterujące pętli for

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int tab[5], p;

float suma;

void wypelnij_tablice();

void wyswietl_tablice();

void oblicz_srednia_wartosc();

void main()

{

char opcja;

srand(1);

do

  {

    clrscr();

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

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

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

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

    opcja=getch();

    switch(opcja)

              {

case '1':               wypelnij_tablice();                                                                      break;

                            case '2':               wyswietl_tablice();                                                                      break;

                            case '3':               oblicz_srednia_wartosc();                                                        break;

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

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

              }

while(!kbhit());

}while(1);

}

void wypelnij_tablice()

{

              p= random(5)+1;

              for (int i=0; i<p; i++)                                                                      //zmienna lokalna

                            tab[i]=random(200);

 

}

 

 

void wyswietl_tablice()

{

              if (p==0) return;

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

              for (int i=0; i<p; i++)                                                                      //zmienna lokalna

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

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

 

}

 

void oblicz_srednia_wartosc()

{   int i;                                                                                                  //zmienna lokalna

              if (p==0) return;

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

                                          suma+=tab[i];

              suma/=p;

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

}

 

 

 


·       Lista parametrów formalnych pozwala przekazać do funkcji, jako parametry aktualne, wyrażenia lub zmienne zdefiniowane w zasięgu wywołania funkcji w programie

·       Funkcja z parametrami jest funkcją wieloużywalną   - wywołanie jej jest jedynie ograniczone zgodnością typu każdego parametru formalnego z  typem podstawionego parametru aktualnego

 

 

 

 

 

 

 

Przykład 3 – kolejna wersja programu z p.2.

W programie zastosowano w funkcjach listę parametrów, stąd miejsce definicji zmiennych aktualnych jest niezależne od zmiennych używanych w ciałach funkcji.

 

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void wypelnij_tablice(int [], int& );

void wyswietl_tablice(int [], int );

int oblicz_srednia_wartosc(int [], int, float&);

void main()

{ int tab[5], p=0;

   float suma;

  char opcja;

   srand(1);

   do

    {

     clrscr();

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

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

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

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

     opcja=getch();

     switch(opcja)

              {               case '1':               wypelnij_tablice(tab,p);                                                        break;

                            case '2':               wyswietl_tablice(tab,p);                                          ...

Zgłoś jeśli naruszono regulamin