CATEGORII DOCUMENTE |
1. SCOPUL LUCRARII
In aceasta lucrare se va studia modul in care se definesc functiile, in limbajul C.
2. BREVIAR TEORETIC
2.1. Definirea functiilor
Orice program C contine cel putin o functie si aceasta este main (functie a carei prezenta este obligatorie). O functie poate fi apelata fie din programul principal, fie dintr-o alta functie.
In limbajul C, o functie nu poate fi definita in interiorul altei functii.
Definitia unei functii trebuie sa fie facuta o singura data in program si are sintaxa:
tipul_rezultatului nume_functie(lista_de_parametrii)
Lista de parametrii cuprinde parametrii functiei, ce pot fi:
- de intrare. Valorile lor sunt transmise de catre programul apelant . Nu sunt modificati in functie.
- de iesire. Sunt creati de functie (valorile lor sunt calculate in interiorul functiei ).
- de intrare / iesire. Sunt si folositi in functie (receptionati de la programul ce a apelat functia) dar si modificati in corpul functiei.
Alegerea antetului functiei depinde de programator.
In momentul apelarii, toti parametrii de intrare trebuie sa aiba valori (sa fie initializati).
In cazul functiilor ce au parametrii de iesire sau parametrii de intrare / iesire, pentru acestia trebuie transmisa functiei adresele lor. Pentru a evita lucrul direct cu pointeri si adresarea indirecta, care este ceva mai greoi, lasand aceasta sa fie facuta de compilator, vom folosi pentru parametrii de iesire sau de intrare / iesire ai unei functii (deci, pentru parametrii care trebuiau dati ca pointeri ) notatia de variabile referinta (se foloseste pentru aceasta notatie simbolul & plasat intre tipul parametrului si numele sau ).
2.2. Apelul functiilor
Un program C, ce consta doar dintr-o definitie de functie (alta decat main), nu poate fi rulat. Pentru testarea unei functii scrise, trebuie sa fie prezenta cel putin si functia main. In general, orice program de test trebuie :
- sa initializeze parametrii de intrare
- sa apeleze functia
- sa afiseze rezultatul
Un apel de functie consta din numele functiei, urmat de parametrii actuali ai functiei. Daca functia returneaza o valoare, aceasta trebuie atribuita unei variabile.
Urmarim:
- ca toti parametrii de intrare sa fie initializati
- pentru fiecare parametru in parte, trebuie sa se respecte tipul lui
- sa se respecte numarul si ordinea parametrilor
Exemplu:
Se da urmatorul prototip de functie:
int f1(int a,double b);
Fie urmatoarea secventa de program:
void main(void)
Vom da mai multe exemple de mod de apelare a functiei f1(), din programul principal. Unele dintre acestea vor fi gresite si vom explica unde sunt greselile, altele vor fi corecte.
Apelul 1:
f1(a,b);
Acest apel nu este corect pentru ca argumentul b nu este initializat.
Apelul 2:
f1(a,7.5);
Este corect , dar valoarea returnata de functie nu este folosita.
Apelul 3:
rezultat=f1(2);
Nu este corect, pentru ca functia f1() are doi parametrii.
Apelul 4:
rezultat=f1(a,3.14);
Este corect, valoarea returnata este incarcata in variabila rezultat.
2.3. Instructiunea return
Iesirea dintr-o functie (retransmiterea controlului catre programul care a apelat-o) se face fie la intalnirea instructiunii return fie (daca aceasta lipseste) la intalnirea acoladei ce marcheaza sfarsitul functiei.
Sintaxa instructiunii return:
- prima forma:
return;
Aceasta forma se foloseste atunci cand nu se transmite nici un rezultat catre programul ce a apelat functia respectiva.
- a doua forma:
return rezultat;
Aceasta forma se foloseste atunci cand se transmite un rezultat catre programul ce a apelat functia respectiva. Se poate folosi si varianta cu paranteze:
return(rezultat);
3. DESFASURAREA LUCRARII
Se vor edita si apoi executa programele descrise in continuare.
Programul nr. 1
Sa re scrie o functie impreuna cu un program de test, care decide daca trei numere sunt in progresie aritmetica:
#include<conio.h>
#include<stdio.h>
int suntProgArit(int a, int b, int c);
void main(void)
int suntProgArit(int a, int b, int c)
Programul nr. 2
Sa se scrie o functie impreuna cu un program de test, care stabileste daca doua numere a si b sunt prime intre ele.
#include<conio.h>
#include<stdio.h>
int suntPrimeIntreEle(int a,int b);
void main()
int suntPrimeIntreEle(int a,int b)
return sunt;
Programul nr. 3
Sa se scrie o functie care returneaza primul numar prim mai mare strict decat un numar intreg N dat. Se va scrie si programul principal ce testeaza aceasta functie.
#include <conio.h>
#include <stdio.h>
#include <math.h> //pentru functia sqrt()
int primulNrPrim(int N);
int estePrim(int nr);
void main(void)
//definitia functiei primulNrPrim():
int primulNrPrim(int N)
//definitia functiei estePrim():
int estePrim(int nr)
Programul nr. 4
Sa se scrie o functie, impreuna cu un program de test, care returneaza minimul si maximul dintre trei numere.
#include<conio.h>
#include<stdio.h>
void max_min(int a,int b,int c,int&max,int& min);
void main(void)
void max_min(int a,int b,int c,int&max,int& min)
Programul nr. 5
Sa se scrie o functie care are ca parametru de intrare un string si ca parametru de iesire, stringul inversat.
Exemplu:
Daca stringul de intrare este: '12abc' atunci stringul de iesire va fi: 'cba21' .
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void inversareStr(char * in, char* out);
void main(void)
void inversareStr(char* in, char* out)
Programul nr. 6
Sa se scrie o functie, impreuna cu un program de test, ce are ca parametru de intrare un vector A si dimensiunea lui si scoate ca rezultat vectorul ce contine toate numerele prime din A, precum si dimensiunea lui.
Sursa programului:
#include<conio.h>
#include<stdio.h>
#include<math.h>
int estePrim(int nr);
void vectorPrime(int A[], int dimA, int B[], int& dimB);
void main(void);
int B[5];
int dimB;
int i;
clrscr();
vectorPrime(A,5,B,dimB);
for(i=0;i<dimB;i++)printf('%d ',B[i]);
printf('nDimensiunea vectorului de numere prime este %d',dimB);
getch();
int estePrim(int nr)
return este;
void vectorPrime(int A[], int dimA, int B[], int& dimB)
dimB=j;
Programul nr. 7
Sa se scrie o functie, impreuna cu un program de test, care afiseaza daca elementele unui vector sunt sau nu diferite.
Sursa programului:
#include<conio.h>
#include<stdio.h>
#include<math.h>
int suntDiferite(int A[],int dimA);
void main(void);
clrscr();
printf('n%d',suntDiferite(A,6));
getch();
int suntDiferite(int A[],int dimA)
Programul nr. 8
Sa se scrie o functie ce face rotirea spre stanga a unui vector, precum si un program de test.
Sursa programului:
#include<conio.h>
#include<stdio.h>
void rotireSt(int A[], int dimA);
void main(void);
clrscr();
rotireSt(A,6);
for(i=0;i<6;i++)
printf('%d ',A[i]);
getch();
void rotireSt(int A[], int dimA)
Programul nr. 9
Sa se scrie o functie, impreuna cu programul de test care afiseaza daca un vector este sau nu sortat crescator.
Sursa programului:
#include<conio.h>
#include<stdio.h>
int esteSortatCresc(int A[], int dimA);
void main(void);
clrscr();
printf('%d',esteSortatCresc(A,6));
getch();
int esteSortatCresc(int A[], int dimA)
return este;
Programul nr. 10
Sa se scrie o functie, impreuna cu programul de test, care returneaza minimul si maximul dintr-un vector, precum si pozitiile lor.
Sursa programului:
#include<conio.h>
#include<stdio.h>
void max_minV(int A[], int dimA, int& max, int& pozMax, int& min, int & pozMin);
void main(void);
clrscr();
max_minV(A,6,max,pozMax,min,pozMin);
printf('Maximul este %d si are indexul %dn',max,pozMax);
printf('Minimul este %d si are indexul %d',min,pozMin);
getch();
void max_minV(int A[], int dimA, int& max, int& pozMax, int& min, int & pozMin)
min=A[0];
pozMin=0;
for(i=1;i<dimA;i++)
if(A[i]<min)
4. PROBLEME PROPUSE
1. Sa se scrie o functie impreuna cu un program de test care sa afiseze toate perechile de numere prime intre ele din intervalul [N1, N2].
2. Sa se scrie o functie impreuna cu un program de test care sa afiseze toate numerele prime dintr-un interval [N1, N2].
3. Sa se scrie o functie ce are ca rezultat intersectia a doua multimi, si are antetul:
void intersectie(int A[], int nA, int B[], int nB, int C[], int &nC)
4. Sa se scrie o functie ce face rotirea spre dreapta a unui vector.
5. Sa se scrie o functie si programul de test, care are ca intrare un numar de tip long int, si scoate ca rezultat un vector ce contine toate cifrele numarului.
6. Sa se scrie o functie care returneaza cel mai mare numar prim de patru cifre.
7. Sa se scrie o functie care scoate drept rezultat solutiile ecuatiei de gradul al doilea, si are antetul:
int ec2(double a, double b, double c, double &x1, double &x2)
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1481
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved