Urmatoarele enunturi figureaza in cursul predat la
University College Cork.
1. Se cere un program care citeste de la tastatura numere
reale dubla precizie intr-un cuantum n specificat de utilizator, le stocheaza
intr-un tablou de maximum 100 de elemente, calculeaza suma si media lor. La
final se elimina din suma valorile extreme introduse, adica maximul si minimul.
Se afiseaza tabloul initial apoi se realizeaza inversarea elementelor stocate
in tablou, astfel incat primul devine ultimul etc.
Evident, se vor folosi functii definite de utilizator
pentru fiecare sarcina specificata.
#include <stdio.h>
void FeedArray(double *tab, int n);
void SumAndAverage(double *tab, double *sum, double
*average, int n, int flag);
void ReverseArr(double *tab, int n);
void PrintArr(double *tab, int n);
int main()
{
double
tab[100] = {0}, sum, average; // toate elementele sunt initializate cu zero
int n,
flag = 0;
printf("\nIntroduceti
in tablou un numar de elemente reale n: ");
scanf("%d",
&n);
FeedArray(tab,
n);
printf("\nVom
afisa suma si media valorilor introduse.\n");
SumAndAverage(tab,
&sum, &average, n, flag);
printf("Suma:
%.2lf. Media: %.2lf.", sum, average);
flag =
1;
printf("\nVom
afisa acum media dupa ce am eliminat din suma min si max: ");
SumAndAverage(tab,
&sum, &average, n, flag);
printf("%.2lf.",
average);
printf("\nAfisam
tabloul initial:\n");
PrintArr(tab,
n);
printf("\nAfisam
tabloul inversat:\n");
ReverseArr(tab,
n);
PrintArr(tab,
n);
return
0;
}
void FeedArray(double *tab, int n)
{
int i;
for(i =
0; i < n; i++)
{
printf("tab[%d]:
", i);
scanf("%lf",
&tab[i]);
}
}
void SumAndAverage(double *tab, double *sum, double
*average, int n, int flag)
{
*sum =
0;
int i;
double
min, max;
for(i =
0; i < n; i++) *sum += tab[i];
if(!flag)
*average = *sum/n;
else
{
min
= max = tab[0];
for(i
= 0; i < n; i++)
{
if(tab[i]
<= min) min = tab[i];
if(tab[i]
> max) max = tab[i];
}
// printf("\nMin: %.2lf. Max:
%.2lf.", min, max);
*average
= (*sum - min - max)/(n - 2);
}
}
void PrintArr(double *tab, int n)
{
int i;
for(i = 0; i
< n; printf("%.2lf ", tab[i++]));
}
void ReverseArr(double *tab, int n)
{
int i;
double temp;
for(i = 0; i
< n/2; i++)
{
temp =
tab[i];
tab[i] =
tab[n - 1 - i];
tab[n - 1 -
i] = temp;
}
}
2. Codul unei histograme. Un tablou monodimensional tab1 de 10 elemente este initializat cu valori
intregi, cu observatia ca valorile mai mari sau egale cu 10 vor 'umple' o
intreaga coloana cu simbolul '*'.
Histograma este implementata cu o matrice bi dimensionala
10 x 10 denumita tab.
Un element al tab1 avand indexul k, 0 <= k
<=9, va induce urmatorul
comportament:
a) Daca tab1[k] == N, atunci orice element tab[i][k] cu 9
- i < N, cu i efectuand iteratii de la 0 la 9, va contine simbolul '*', cod
ASCII 42.
De exemplu, daca tab1[3] = 6, atunci elementele
tab[4][3], tab[5][3], tab[6][3], …, tab[9][3] vor contine '*' pentru ca 9 - 4
== 5 < 6, 9 - 5 < 6,…., 0 < 6.
b) Corespunzator, elemente tab[3][3], …, tab[0][3] vor fi
initializate cu valoarea NULL (cod ASCII 0) pentru ca inegalitatea anterioara
nu mai este respectata.
Matricea tab este declarata de tipul intreg dar
elementele sale sunt afisate ca si caractere.
Codul si printscreen-ul:
#include <stdio.h>
void PrintMat(int tab[][10])
{
int i, j;
for(i = 0; i <
10; i++)
for(j = 0; j
< 10; j++)
{
printf("%c
", tab[i][j]);
if(j%9 == 0
&& j != 0) printf("\n");
}
}
int main()
{
int tab[10][10];
int tab1[10];
int k, i, j;
printf("\nIntroduceti 10 valori intregi.\n");
for(k = 0; k
< 10; k++)
{
printf("Tab[%d]: ", k);
scanf("%d", &tab1[k]);
_flushall();
}
// pentru valori
tab1[k] >= 0 coloana coresp. are TOATE elementele '*'
for(j = 0; j
< 10; j++)
for(i = 0; i
< 10; i++)
{
if(9 - i
< tab1[j]) tab[i][j] = 42; // ASCII code for '*'
else
tab[i][j] = 0; // ASCII code for NULL
}
PrintMat(tab);
for(i = 0; i
< 10; i++) printf("%d ", tab1[i]);
return 0;
}
No comments:
Post a Comment