Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main.c
- * Author: dean
- *
- * Created on 25 febbraio 2014, 12.21
- *
- * Si scriva un programma che presi in ingresso due vettori di numeri reali letti da file,
- * li ordini e successivamente li fonda unendo i due vettori in modo da ottenere un vettore
- * anch'esso ordinato.
- * La lettura da file deve avvenire mediante la funzione LeggiVettore che prende
- * in ingresso il puntatore al vettore e il massimo numero di elementi da leggere
- * inserito dall'utente da standard input e restituisce il numero di elementi
- * effettivamente letti.
- * Qualora il file contenga un numero di elementi minore a quello specificato dall'utente,
- * allora la funzione restituisce il numero di dati effettivamente letti.
- * Una volta ordinati e fusi i due vettori nel terzo vettore mediante la funzione Fondi_Vettori,
- * si dovra' stampare il vettore fusione a video mediante la funzione StampaVettore.
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define MAXCAR 20
- #define MAX 100
- int LeggiVettore( float v[], int riemp);
- void Sort( float v[], int riemp );
- void Fondi_Vettori( float *, int, float *, int, float * );
- void StampaVettore( float v[], int riemp );
- int main()
- {
- float array[3][MAX];
- int num[2][2];
- puts("Inserisci il massimo numero di elementi da leggere dal primo vettore");
- scanf("%d", &num[0][0]);
- num[0][1]=LeggiVettore(array[0], num[0][0]);
- (num[0][0]==num[0][1])?:printf("%d/%d elementi letti con successo!\n", num[0][1], num[0][0]);
- puts("Inserisci il massimo numero di elementi da leggere dal secondo vettore");
- scanf("%d", &num[1][0]);
- num[1][1]=LeggiVettore( array[1], num[1][0] );
- (num[1][0]==num[1][1])?:printf("%d/%d elementi letti con successo!\n", num[1][1], num[1][0]);
- Sort(array[0], num[0][1]);
- Sort(array[1], num[1][1]);
- Fondi_Vettori(array[0], num[0][1], array[1], num[1][1], array[2]);
- StampaVettore(array[2], num[0][1]+num[1][1]);
- return 0;
- }
- /*
- * LeggiVettore prende in ingresso il puntatore al vettore di reali e il suo
- * riempimento massimo e restituisce il numero di dati effettivamente letti
- */
- int LeggiVettore( float v[], int riemp )
- {
- int i, num=0, j;
- FILE * fp;
- char filename[MAXCAR];
- puts("Inserisci nome file");
- scanf("%s", filename);
- if((fp=fopen(filename, "r"))==NULL)
- abort();
- for(i=0;i<riemp;i++){
- j=fscanf(fp, "%f", &v[i]);
- (j!=1)?:(num+=j);
- }
- fclose(fp);
- return num;
- }
- /*
- * Sort prende in ingresso il puntatore al vettore di reali e il suo
- * riempimento effettivo e ordina il vettore
- */
- void Sort( float v[], int riemp )
- {
- int i, j, min;
- for(i=0;i<riemp-1;i++){
- for(j=i+1, min=i;j<riemp;j++)
- if( v[j]<v[min] )
- min=j;
- v[i]=v[i]+v[min]-(v[min]=v[i]);
- }
- }
- /*
- * Fondi_Vettori prende in ingresso il puntatore ai vettori di reali e il loro
- * riempimento effettico e il puntatore al vettore di reali in cui fondere i due
- * vettori ordinati
- */
- void Fondi_Vettori( float *a, int n1, float *b, int n2, float *c )
- {
- int i;
- for(i=0;i<n1;i++)
- c[i]=a[i];
- for(i=0;i<n2;i++)
- c[i+n1]=b[i];
- }
- void StampaVettore( float v[], int riemp )
- {
- /* Dichirazione delle varibili locali alla funzione */
- int i;
- for( i = 0; i < riemp; i++ )
- printf("Elemento %d\tValore %.1f\n", i+1, v[i]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement