Setul 4

Problema 1 - Tabelare funcții matematice

Să se scrie un program pentru tabelarea unor funcţii matematice. Programul trebuie să ştie să tabeleze funcţiile sin(x), cos(x), sin(x)*cos(x) şi x*x.

Programul va citi de la tastatură două valori reale A şi B şi o valoare întreagă N. Pe urmă va împărţi intervalul [A, B] în N-1 părţi egale, astfel încât să rezulte N puncte echidistante în interval. Două din cele N puncte vor coincide cu capetele intervalului, A şi B. Programul va afişa valorile funcţiilor în cele N puncte astfel obţinute.

Soluţia voastră trebuie să folosească pointeri la funcţii. Scrieţi o funcţie generică pentru tabelarea unei funcţii matematice oarecare. Această funcţie generică va avea un parametru de tip pointer la funcţie. Folosind funcţia generică, tabelaţi cele patru funcţii matematice amintite mai sus.

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

float my_sin(float n)

{

return sin(n);

}

float my_cos(float n)

{

return cos(n);

}

float sin_cos(float n)

{

return my_sin(n)*my_cos(n);

}

float x_x(float n)

{

return n*n;

}

void tab(float (*f)(float),float a,float b,int n)

{

float i;

i=a;

while(i<=b)

{

printf("f(%f)=%f\n",i,(*f)(i));

if(i+(b-a)/n>b&&i<b)

i=b;

else

i=i+(b-a)/n;

}

}

int main()

{

printf("Hello world!\n");

float a,b,i;

int n;

printf("a=");scanf("%f",&a);

printf("b=");scanf("%f",&b);

printf("n=");scanf("%d",&n);

printf("Prima functie: sin(x)\n\n");

tab(my_sin,a,b,n);

printf("\n\n\nA doua functie:cos(x)\n\n");

tab(my_cos,a,b,n);

printf("\n\n\nA treia functie:sin(x)*cos(x)\n\n");

tab(sin_cos,a,b,n);

printf("\n\n\nA patra functie: x*x:\n\n");

tab(x_x,a,b,n);

return 0;

}

Problema 2 - Corectare program

Completaţi următorul program astfel încăt el să ruleze corect. Programul trebuie să citească de la tastatură un nume şi o varstă şi să le afişeze pe ecran. Nu modificaţi codul deja scris; adăugaţi codul necesar în funcţia citeste. Atenţie la alocările/eliberările de blocuri de memorie.

#include <stdio.h> #include <stdlib.h> #include <string.h> void citeste(char **nume, int *varsta) { /* Completati aici. */ } void scrie(char *nume, int varsta) { printf("%s, %d\n", nume, varsta); } int main(void) { char *nume; int varsta; citeste(&nume, &varsta); scrie(nume, varsta); free(nume); return 0; }

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void citeste(char **nume, int *varsta)

{

*nume=(char*)malloc(20*sizeof(char));

scanf("%s",*nume);

scanf("%d",varsta);

}

void scrie(char *nume, int varsta)

{

printf("%s, %d\n", nume, varsta);

}

int main()

{

printf("Hello world!\n");

char *nume;

int varsta;

citeste(&nume, &varsta);

scrie(nume, varsta);

free(nume);

return 0;

}