Advertisement
Mazamin

Traccia Febbraio

Jan 18th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.38 KB | None | 0 0
  1. /*
  2.  * File:   main.c
  3.  * Author: dean
  4.  *
  5.  * Created on 25 febbraio 2014, 12.21
  6.  *
  7.  * Si scriva un programma che presi in ingresso due vettori di numeri reali letti da file,
  8.  * li ordini e successivamente li fonda unendo i due vettori in modo da ottenere un vettore
  9.  * anch'esso ordinato.
  10.  * La lettura da file deve avvenire mediante la funzione LeggiVettore che prende
  11.  * in ingresso il puntatore al vettore e il massimo numero di elementi da leggere
  12.  * inserito dall'utente da standard input e restituisce il numero di elementi
  13.  * effettivamente letti.
  14.  * Qualora il file contenga un numero di elementi minore a quello specificato dall'utente,
  15.  * allora la funzione restituisce il numero di dati effettivamente letti.
  16.  * Una volta ordinati e fusi i due vettori nel terzo vettore mediante la funzione Fondi_Vettori,
  17.  * si dovra' stampare il vettore fusione a video mediante la funzione StampaVettore.
  18.  *  
  19.  */
  20.  
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23.  
  24. #define MAXCAR 20
  25. #define MAX 100
  26.  
  27. int LeggiVettore( float v[], int riemp);
  28. void Sort( float v[], int riemp );
  29. void Fondi_Vettori( float *, int, float *, int, float * );
  30. void StampaVettore( float v[], int riemp );
  31.  
  32. int main()
  33. {
  34.     float array[3][MAX];
  35.     int num[2][2];
  36.     puts("Inserisci il massimo numero di elementi da leggere dal primo vettore");
  37.     scanf("%d", &num[0][0]);
  38.     num[0][1]=LeggiVettore(array[0], num[0][0]);
  39.     (num[0][0]==num[0][1])?:printf("%d/%d elementi letti con successo!\n", num[0][1], num[0][0]);
  40.     puts("Inserisci il massimo numero di elementi da leggere dal secondo vettore");
  41.     scanf("%d", &num[1][0]);
  42.     num[1][1]=LeggiVettore( array[1], num[1][0] );
  43.     (num[1][0]==num[1][1])?:printf("%d/%d elementi letti con successo!\n", num[1][1], num[1][0]);
  44.     Sort(array[0], num[0][1]);
  45.     Sort(array[1], num[1][1]);
  46.     Fondi_Vettori(array[0], num[0][1], array[1], num[1][1], array[2]);
  47.     StampaVettore(array[2], num[0][1]+num[1][1]);
  48.     return 0;
  49. }
  50.  
  51. /*
  52.  * LeggiVettore prende in ingresso il puntatore al vettore di reali e il suo
  53.  * riempimento massimo e restituisce il numero di dati effettivamente letti
  54.  */
  55. int LeggiVettore( float v[], int riemp )
  56. {
  57.     int i, num=0, j;
  58.     FILE * fp;
  59.     char filename[MAXCAR];
  60.     puts("Inserisci nome file");
  61.     scanf("%s", filename);
  62.     if((fp=fopen(filename, "r"))==NULL)
  63.         abort();
  64.     for(i=0;i<riemp;i++){
  65.         j=fscanf(fp, "%f", &v[i]);
  66.         (j!=1)?:(num+=j);
  67.     }
  68.     fclose(fp);
  69.     return num;
  70. }
  71.  
  72. /*
  73.  * Sort prende in ingresso il puntatore al vettore di reali e il suo
  74.  * riempimento effettivo e ordina il vettore
  75.  */
  76.  
  77. void Sort( float v[], int riemp )
  78. {
  79.     int i, j, min;
  80.     for(i=0;i<riemp-1;i++){
  81.         for(j=i+1, min=i;j<riemp;j++)
  82.             if( v[j]<v[min] )
  83.                 min=j;
  84.         v[i]=v[i]+v[min]-(v[min]=v[i]);
  85.     }
  86. }
  87.  
  88. /*
  89.  * Fondi_Vettori prende in ingresso il puntatore ai vettori di reali e il loro
  90.  * riempimento effettico e il puntatore al vettore di reali in cui fondere i due
  91.  * vettori ordinati
  92.  */
  93. void Fondi_Vettori( float *a, int n1, float *b, int n2, float *c )
  94. {
  95.     int i;
  96.     for(i=0;i<n1;i++)
  97.         c[i]=a[i];
  98.     for(i=0;i<n2;i++)
  99.         c[i+n1]=b[i];
  100. }
  101.  
  102. void StampaVettore( float v[], int riemp )
  103. {
  104.     /* Dichirazione delle varibili locali alla funzione */
  105.     int i;
  106.    
  107.     for( i = 0; i < riemp; i++ )
  108.         printf("Elemento %d\tValore %.1f\n", i+1, v[i]);
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement