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");
printf("*(tab+%i)=%3i %i tab+%i: %p\n",
i, *(tab+i), i, i, tab+i );
void oblicz_srednia_wartosc()
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
int tab[5], p;
float suma;
char opcja;
srand(1);
clrscr();
case 'k': printf("Koniec programu\n");getch(); return;
for (int i=0; i<p; i++) //zmienna lokalna
{ int i; //zmienna lokalna
for (i=0, suma=0;i<p;i++)
· 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.
void wypelnij_tablice(int [], int& );
void wyswietl_tablice(int [], int );
int oblicz_srednia_wartosc(int [], int, float&);
{ int tab[5], p=0;
{ case '1': wypelnij_tablice(tab,p); break;
case '2': wyswietl_tablice(tab,p); ...
chesschempion