Programare orientata pe obiecte

Configurare noua (How To)

Situatie

Se introduc, pe rand, de la tastatura oricare n (1<=n<=nmax) numere reale (float) si 2*n numere intregi (int) si  care vor folosi in comun aceasi zona de memorie. Sa se afiseze, pe rand, numerele introduse, cele reale si cele integi, impreuna cu mediile lor aritmetice, utilzandu-se un tip union adecvat care sa contina datele care utilizeaza in comun aceeasi zona de memorie precum si functiile membru de citire, calcul medii si de afisare a datelor si rezultatelor.

Solutie

#include <stdio.h>

#include <conio.h>

#include<malloc.h>

const int nmax=20;

union tipnumere

{

 long int x[nmax];

 double y[nmax/2];

 void citeste_intregi(long int n)

  {

    int k;

    printf(“n introduceti cele %d de nr. intregi in uniunea u:”,n);

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

    {

      printf(“n x(%d)=”,k);

      scanf(“%d”,&this->x[k]);

    }

  }

 void citeste_reale(long int n)

  {

    int k;

    printf(“n introduceti cele %d de numere reale din uniunea u:”,n/2);

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

     {

       printf(“n y(%d)=”,k);

       scanf(“%lf”,&this->y[k]);

     }

  }

 void calcul_medie_intregi(int n)

  {

    int k;

    double mint=0;

    printf(“n nr intregi si calculul medie in uniune:n”);

    /* insumarea numerelor intregi */

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

     {

       printf(“%ld “,this->x[k]);

       mint=mint+this->x[k];

     }

    printf(“n media arit. a celor %d nr. intregi=%1.2lf”,n,mint/n);

  }

 void calcul_medie_reale(int n)

  {

    int k;

    double mfloat=0;

    printf(“n nr reale si calculul medie in uniune:n”);

    /* insumarea numerelor intregi */

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

     {

       printf(“%1.2lf “,this->y[k]);

       mfloat=mfloat+this->y[k];

     }

    printf(“n media arit. a celor %d nr.reale=%1.2lf”,n/2,2*mfloat/n);

  }

}; // sfarsitul descrierii uniunii

void main(void)

{

  tipnumere u,v1,v2,*pv1,*pv2;int k,n;

  double mint,mfloat; char r=’d’;

while(r==’d’)

  {

   mint=0,mfloat=0;

   do

    {

      printf(“n nr par de numere intregi (1<=n<=%d):”,nmax);

      scanf(“%d”,&n);

    }

   while((n<1)||(n>nmax)||(n%2));

   // apelarea functiei membru ptr citirea a n nr intregi

   u.citeste_intregi(n);

   v1=u; /* atribuire de variabila de tip uniune cu numere intregi*/

   // apelarea functiei membru ptr citirea a n/2 nr reale

   u.citeste_reale(n);

   v2=u; /* atribuire de variabila de tip uniune cu numere reale*/

   pv1=&v1; /* adresa variabilei uniune v1 in pointerul pv1 */

   pv2=&v2; /* adresa variabilei uniune v2 in pointerul pv2 */

   /* afisarea numerelor intregi si calcularea mediei aritmetice a acestora */

   // apelarea functiei membru ptr calculul mediei nr intregi

   v1.calcul_medie_intregi(n);

   printf(“n nr intregi si media calculate in main:n”);

   /* insumarea numerelor intregi */

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

    {

      printf(“%ld “,pv1->x[k]);

      mint=mint+pv1->x[k];

    }

   printf(“n media celor %d nr. intregi=%1.2lf”,n,mint/n);

   /* afisarea numerelor reale si calcularea mediei aritmetice a acestora */

   // apelarea functiei membru ptr calculul mediei nr reale

   v2.calcul_medie_reale(n);

   printf(“n nr reale si media calculate in main:n”);

   /* insumarea numerelor reale */

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

    {

      printf(“%1.2lf “,pv2->y[k]);

      mfloat=mfloat+pv2->y[k];

    }

   printf(“n media celor %d nr. reale=%1.2lf”,n/2,2*mfloat/n);

   printf(“n continuati?(d/n):”);

   r=getche();

  }

}

Tip solutie

Permanent

Voteaza

(6 din 14 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?