QReferate - referate pentru educatia ta.
Cercetarile noastre - sursa ta de inspiratie! Te ajutam gratuit, documente cu imagini si grafice. Fiecare document sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Documente informatica

Definirea si utilizarea de functii



DEFINIREA SI UTILIZAREA DE FUNCTII


EXEMPLE DE PROGRAME


E3.1a Functie fara argumente si fara rezultat asociat numelui sau.


// Stergere ecran in mod text, prin defilare

#include <stdio.h>

// definire functie

void clear()



// utilizare functie

void main ()


Observatii:

- Functia 'clrscr()' nu este standard in limbajul C, dupa cum nici fisierul

antet CONIO.H nu este standard (dar ele exista in Borland-C).

- Dupa stergere ecran cu 'clrscr' cursorul este in prima linie de sus si

ecranul trece in mod pagina (implicit este in modul defilare).


E3.1b Aceeasi functie de la 3.1a, dar plasata dupa programul principal


#include <stdio.h>

void clear(); // declarare functie (prototip)

// utilizare functie

void main ()

// definire functie (cu declaratie ca in C++)

void clear()


E3.2 Functie de tip 'void' cu un argument


#include <stdio.h>

// Desenarea unei bare orizontale compuse din n caractere

void bar (int n)

// Desenare histograma pe baza unui vector de intregi

void main () ,n=5,k;

clear(); // sterge ecran

for (k=0;k<n;k++)

bar (a[k]); // desenare bara k de lungime a[k]

}


E3.3 Functie de tip 'void' cu doua argumente de tipuri diferite


// Desenarea unei bare orizontale din n caractere ch

void bar1 (int n, char ch)


E3.4 Functie de tip 'void' cu argument de tip vector


// Desenare histograma pe baza unui vector de intregi

void hist (int a[], int n)


E3.5 Functie cu rezultat si argument de tip vector


// Determinare valoare minima dintr-un vector dat

float minim (float x[], int n)

// utilizare functie

void main () , tmin;

printf ('%f n', minim(t,6));

}


E3.6 Functie care verifica satisfacerea unei conditii


// Verifica daca un caracter dat este un spatiu alb

int isspace (char ch)


Obs.

- In C exista functii standard pentru verificarea tipului unui caracter dat

(isspace, isalpha,isdigit,), declarate in CTYPE.H.


E3.7 Functie care verifica respectarea unei conditii de catre toate

elementele unui vector dat.


// Verifica daca un vector este ordonat crescator sau nu

int sorted (int a[], int n)


E3.8 Functie cu doua rezultate (cu argumente de tip pointer)


// Determinare minim si maxim dintr-un vector

void minmax ( float x[],int n,float* pmin, float* pmax)

*pmin=xmin; *pmax=xmax;

}

// utilizare functie

void main () ;

float a1,a2;

minmax (a,6,&a1,&a2);

printf('%f %f n',a1,a2);

}


Obs.: Este preferabila scrierea a doua functii separate care transmit prin

numele functiei valoarea minima sau maxima.


E3.9 Functie cu argument vector apelata pentru o linie dintr-o matrice


// Determinare valoare minima dintr-o matrice

float minim (float x[],int n); // prototip functie

void main ()


E3.10 Functie cu argument matrice (cu numar impus de coloane)


// Generare matrice unitate

void matrunit (float u[][30], int n)

}

// afisare matrice patratica (cu 30 de coloane declarate)

void scrmatr (float a[][30], int n)

}

// utilizare

void main ()

}



E3.11 Functie recursiva pentru ridicarea unui numar la o putere intreaga

pe baza relatiei de recurenta x^k = x * x^(k-1) si cu x^0=1


double power (double x, int n)



E3.12 Functie recursiva pentru ridicarea unui numar la o putere intreaga

cu numar redus de inmultiri, pe baza relatiei de recurenta

x^k = x^(k/2) * x^(k/2) daca k este par si x^k= x * x^(k-1) daca k impar


double power (double x, int n)

else

return (x * power (x,n-1));

}



PROBLEME PROPUSE



P3.1 Functie pentru determinarea numarului de cifre al unui numar dat (de

orice tip intreg). Program pentru citirea unui intreg n si afisarea a n

numere aleatoare intre 0 si n, cu determinare numar de coloane in functie

de valorile afisate. ( nr de coloane = 80/(nr.cifre+2) )

Se va utiliza functia 'random' declarata in <math.h>


P3.2 Functie care verifica daca un numar dat este prim sau nu. Program

pentru afisarea descompunerilor numerelor pare mai mici ca un intreg dat

in sume de doua numere prime (Ipoteza lui Goldbach = orice numar par se

poate scrie ca suma a doua numere prime).


P3.3 Functie care primeste doi intregi a si b si determina alti doi

intregi k si c astfel ca a = c * b^k ( b este un divizor posibil al lui a,

k este ordinul de multiplicitate, c este numarul ramas dupa k impartiri

repetate a lui a prin b). Program pentru descompunerea unui numar dat in

factori primi (cu puterile lor) folosind functia. Exemplu:

360 = 2^3 * 3^2 * 5^1


P3.4 Functie care determina pozitia valorii maxime intr-un vector. Program

pentru ordonarea unui vector de numere prin determinarea repetata a valorii

maxime dintr-un vector si schimbarea cu ultimul element din vector.


P3.5 Functie care determina semnul unui numar intreg ('sign') si are

rezultat 0 (valoare zero), -1 (numar negativ) sau +1 (numar pozitiv).

Functie care determina numarul cadranului in care se afla un punct de

coordonate intregi date x,y; rezultatul este 0 daca punctul se afla pe

una din axe sau la intersectia axelor. Indicatie: Se face o selectie

('switch') dupa valoarea 3*sign(x)+sign(y). Program de verificare.


P3.6 Functie pentru cautare binara intr-un vector ordonat in doua moduri:

iterativ si recursiv. Cautarea binara se face prin compararea valorii

cautate cu valoarea din mijlocul vectorului cercetat si alegerea primei

sau ultimei jumatati din vector pentru pasul urmator, in functie de

rezultatul comparatiei. Procesul de injumatatire a vectorului se opreste

fie la gasirea valorii cautate, fie la reducerea dimensiunii pana la 1.

Functia primeste ca argumente valoarea cautata, adresa vectorului si

indicii (pozitiile) din vector intre care se cauta.


P3.7 Functii pentru operatii cu multimi de 256 intregi realizate printr-un

sir de 256 de biti (16 intregi fara semn sau 32 de octeti). Bitul k din

sir este 1 daca multimea contine elementul cu valoarea k si este zero

daca multimea nu contine valoarea k. Bitul k din sir se afla in bitul cu

numarul k%16 din intregul k/16 din vectorul de 16 intregi. Operatii

(functii): initializare multime vida, adaugare intreg la multime, verifica

apartenenta unui numar la o multime, afisare multime (intre acolade),

reuniune, intersectie si diferenta de multimi.

Program pentru verificarea acestor functii


P3.8 Functii pentru operatii cu multimi de numere intregi reprezentate

prin vectori neordonati de lungime fixa, in care elementele multimii sunt

grupate la inceputul vectorului, dupa care urmeaza zerouri. Operatii:

initializare multime vida, verificare apartenenta la o multime, adaugare

element la o multime (daca nu exista deja), afisare multime (intre acolade),

reuniune, intersectie si diferenta de multimi. Program pentru verificarea

acestor functii.


P3.9 Functie pentru determinarea divizorilor unui numar intreg dat.

Functie pentru calculul valorii unui polinom cu coeficienti intregi.

P(x)= a[0]*x^n+a[1]*x^(n-1)+ +a[n-1]*x + a[n]


Functie pentru determinarea coeficientilor polinomului cat ('b') al

impartirii unui polinom (dat prin coeficientii 'a') prin (x-r). Se vor

folosi relatiile de recurenta urmatoare:

b[0]=a[0]; b[k]=a[k]+b[k-1]*r k=1,n-1

Program care determina si afiseaza radacinile unei ecuatii polinomiale

cu coeficienti intregi, aflate printre divizorii termenului liber; se

vor afisa divizorii (cu valori pozitive sau negative) care anuleaza

valoarea polinomului dat. exemplu: x^3+3x^2+2x+6 are ca radacina x=-3

(dar nu are radacinile 2,-2,3). Coeficientul puterii maxime a lui x va fi 1.


P3.10 Functie pentru calculul valorii polinomului de interpolare Lagrange

pentru o valoare data xx folosind relatia :

yy = Suma (y[k]*Prod((xx-x[i])/(x[k]-x[i]) )

Suma pentru k=1,n. Produs pentru i=1,n si i!=k

Program pentru citirea a 2 vectori x si y ce definesc o functie prin n

puncte si calculeaza valorile functiei la mijlocul intervalelor de pe

axa X prin interpolare Lagrange. Se vor afisa coordonatele celor n-1

puncte astfel determinate.


P3.11 Functie pentru inmultirea unui polinom cu coeficienti dati cu un

binom de forma (x+c). Program pentru calculul coeficientilor polinomului

care are ca radacini numerele intregi c[1],c[2],c[n] (citite ca date

initiale). (Termenul liber trebuie sa fie egal cu produsul r[1]*r[2]*,

iar coeficientul lui x^(n-1) sa fie egal cu suma r[1]+r[2]+r[n])

Pentru c[1]=c[2]=..=c[n]=1 coeficientii afisati sunt coeficientii puterii

n a binomului (x+1)


P3.12 Functie recursiva pentru determinarea celui mai mare divizor comun

a 2 intregi, pe baza relatiei cmmdc(a,b) = cmmdc (b,a%b) daca a%b != 0

si cmmdc(a,b) =b daca a%b==0.


P3.13 Functie recursiva pentru afisare in binar a unui intreg primit ca

argument. Algoritm: echivalentul binar al lui m se obtine din echivalentul

binar al lui m/2 urmat de cifra binara m%2. Scrieti si o forma iterativa

pentru acest algoritm de impartiri succesive la 2 si afisare de resturi

in ordinea inversa obtinerii lor.


P3.14 Functie recursiva pentru cautarea secventiala intr-un vector a unei

valori date, cu rezultat pozitia in vector a numarului cautat sau -1 daca

negasit. Rezultatul cautarii intr-un vector a cu n elemente este fie

a[n-1] fie egal cu rezultatul cautarii in primele n-1 elemente (daca n>0).



P3.15 Functie pentru inmultirea a doua matrice patratice cu acelasi numar

de linii si coloane. Functie pentru ridicarea unei matrice patratice la

o putere intreaga, prin inmultiri repetate (folosind prima functie).

Program pentru verificare pe o matrice unitate.


P3.16 Functie care schimba intre ele doua linii i si j dintr-o matrice

patratica. Program care foloseste functia pentru a aduce pe diagonala

principala numai elemente nenule (daca este posibil). Se va afisa matricea

obtinuta prin schimbari de linii.


SOLUTII LA PROBLEME PROPUSE


R3.1

// determinare nr de cifre la p.intreaga a unui nr. dat

int digits (double x)

return nc;


// varianta mai simpla ptr functia digits

int digits(double x)

// afisare vector de numere cu tabelare automata

void main ()

// printf ('nr. max. cifre=%d n',max);

// afisare vector

nv=80/(max+1); // nr. maxim de coloane

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


R3.2

// verifica daca este numar prim

int prim ( int n)

// verif. ipotezei lui Goldbach

main ()


R3.3

// factorul de multiplicitate al lui b in a

int mult (int a, int b, int * c)

*c=a;

return k;


// descompunere in factori primi

void main ()

printf('n');



// varianta pentru functia 'mult' (cu alt mod de folosire)

void mult (int a, int b, int * m, int *c)

*c=a; *m=k;



R3.4

// determina pozitie maxim in vector de numere

int imax ( float x[], int n)

// ordonare vector

void sort ( float x[], int n)


// verificare

void main () ;

int i, n = sizeof(t)/sizeof(t[0]);

sort (t,n);

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

printf ('%.2f ',t[i]);


R3.5

#include <stdio.h>

#include <math.h>

// semn numar algebric = -1 sau 1 sau 0

int sign (int x)

// determinare cadran

int cadran ( int x, int y)


// verificare functii

void main () while (1);


R3.6

// cautare binara, nerecursiva

int caut(int b,int a[],int i,int j)

return -1;



// cautare binara, recursiva

int caut(int b,int a[],int i,int j)


R3.7

// operatii cu multimi de biti

#include <stdio.h>

#define DIM 16

typedef unsigned int Set[DIM];

// initializare multime vida

void init (Set m)

// adauga la multimea m valoarea x

void add (Set m,int x)

// reuniune de multimi ( c=a+b)

void or (Set a, Set b, Set c)

// intersectie de multimi (c=a&b)

void and (Set a, Set b, Set c)

// diferenta simetrica de multimi

void xor (Set a, Set b, Set c)

// diferenta de multimi (c=a-b)

void dif (Set a, Set b, Set c)

// verifica aparteneta la multimea m a lui x

int is (Set m,int x)

// afisarea multimii m

void print (Set m)

n');


// verificarea unor functii

main()


R3.8

// operatii cu multimi reprezentate prin vectori neordonati

#include <stdio.h>

#define M 256  // dimensiune maxima vectori (multimi)

// initializare multime vida

void init (int a[])

// test daca o valoare data apartine unei multimi

int contine (int a[], int x)

// dimensiunea (cardinalul) unei multimi

int dim (int a[])

// adaugare element la o multime

void plus (int a[], int x)

// eliminare valoare data dintr-o multime

void minus (int a[], int x)


// afisarea elementelor unei multimi

void scrie (int a[])

printf (' } n');


// reuniune de multimi

void plusm (int a[],int b[], int c[])

// intersectie de multimi

void inters (int a[],int b[], int c[])

// diferenta de multimi a-b

void minusm (int a[], int b[], int c[])

// comparatie la egalitate multimi

int egal (int a[], int b[])

// citire multime vector

int citmul (int a[]) while (a[i-1]);

return i;


// verificare functii

void main ()


R3.9

#include <stdio.h>

// calcul valoare polinom ptr un x dat

long valPol ( int c[], int n, int x)

// vector cu divizorii unui intreg dat (pozitivi si negativi)

int div (int n, int d[])

return j;


// impartire polinom prin x-r

void impPol (int a[],int n, int b[], int r)

// radacini intregi ec. polinomiala

void main ()

}

} while (nr>0);

// scrie coeficienti polinom fara radacini intregi

// return ;

if (n >1)


R3.10

#include <stdio.h>

// Interpolare Lagrange

float lagrange ( float x[], float y[], int n, float xx)

return s;


// program principal

void main ()

// creare vector de n-1 puncte prin interpolare

for (i=1;i<n;i++)

for (i=1;i<=n-1;i++)

printf ('%f %f n', xm[i],ym[i]);



R3.11

#include <stdio.h>

// produs dintre un polinom si un binom

// (a[n]+a[n-1]*x++a[0]*x^n)(x+c) = b[n+1]+b[n]*x++b[0]*x^(n+1)

int prodpoli (int a[], int n, int c, int b[])

// calcul produs (x+c[0])*(x+c[1])* (x+c[n-1])=b[n]+b[n-1]*x++b[0]*x^n

void produs (int c[], int n, int b[])


// verificare functii

void main ()



R3.12

int cmmdc (int a,int b)


R3.13

// recursiv

void binar (int n)

else

printf('0');


// iterativ (cu vector)

void binar2 ( int n)

printf ('%dn',i);

// scrie vector in ordine inversa

while (i>0)

printf ('%d',c[--i]);



R3.14

// cautare secventiala recursiva intr-un vector

int lsearch (int a[], int n, int b)


R3.15

#include <stdio.h>

#define M 20    // dimensiuni matrice

typedef float num;

typedef num mat[M][M];  // definire tip 'mat'

// generare matrice unitate

void matunit ( mat u,int n)

// produs matrice patratice

void prodmat ( mat a, mat b, mat c,int n)

// copiaza din t in c

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

for (j=0;j<n;j++)

c[i][j]=t[i][j];


// afisare matrice

void scrmat (mat a, int n)


// ridicare la putere matrice

void expmat (mat a,int n,int k, mat p)

// verificare functii

void main () ,,};

mat b,c ;

matunit(b,n);

prodmat (a,b,a,n);

scrmat (a,n);

// ridicare la putere matrice

expmat (a,n,2,c);

scrmat(c,n);



R3.16

#include <stdio.h>

#define M 10  // nr maxim linii/coloane

typedef float mat[M][M];

// schimba intre ele doua linii dintr-o matrice patratica

void schimb ( mat a, int n, int i, int j)


// aducere valori nenule pe diagonala unei matrice patratice

// rezultat 1 daca a reusit si 0 daca nu a reusit

int transf (mat a, int n)

if (gasit) continue;

else return 0;

}

return 1;


// verificare functie

void main ()

i=transf (a,n); // transforma matricea a

if (i==0)

for (i=1;i<=n;i++)



Nu se poate descarca referatul
Acest document nu se poate descarca

E posibil sa te intereseze alte documente despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site.
{ Home } { Contact } { Termeni si conditii }