Dato un valore chiamato Atleti(N) contenente i nominativi degli atleti che partecipano a una gara di salto in alto basata su C distinte prove e una matrice salti(N x C) riportante i risultati delle prove di salto in alto dei distinti atleti, visualizzare la classifica parziale della gara di salto dopo ogni prova e, al termine gara, i nominativi dei tre atleti che hanno conquistato il podio.
Sugg. per semplicità, caricare la matrici salti casualmente e utilizzare un vettore d'appoggio per copiare il contenuto del vettore atleti per la sua elaborazione.
/*
CLAUDIO CARIDNALE 3AI
Dato un valore chiamato Atleti(N) contenente i nominativi degli atleti che partecipano a una gara di salto in alto basata su C distinte prove e una matrice salti(N x C) riportante i risultati delle prove di salto in alto dei distinti atleti, visualizzare la classifica parziale della gara di salto dopo ogni prova e, al termine gara, i nominativi dei tre atleti che hanno conquistato il podio.
Sugg. per semplicità, caricare la matrici salti casualmente e utilizzare un vettore d'appoggio per copiare il contenuto del vettore atleti per la sua elaborazione.
*/
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1000
#define LEN 100
void inizializza(char vet[MAX][LEN], float mat[MAX][MAX], int *n, int *c);
void azzera(float vet[], int n);
void aggiungi(float vet1[], float vet2[], int n);
void ordina(float vet[], int ordinato[], int n);
int main(){
//dichiarazioni
char atleti[MAX][LEN];
int n,c,i,j,ordinato[MAX];
float salti[MAX][MAX], corrente[MAX], tot[MAX], aux[MAX];
//inizializzazioni
srand(time(NULL));
inizializza(atleti,salti,&n,&c);
azzera(tot,n);
//calcoli
for(i=0;i<c;i++){
azzera(corrente,n);
for(j=0;j<n;j++)
aux[j] = salti[j][i];
aggiungi(corrente,aux,n);
aggiungi(tot,corrente,n);
ordina(corrente,ordinato,n);
printf("prova n° %d :\n",i+1);
for(j=0;j<n;j++)
printf("%s -> %.3f\n",atleti[ordinato[j]],salti[ordinato[j]][i]);
}
ordina(tot,ordinato,n);
printf("primi 3 :\n");
for(i=0;i<3;i++)
printf("%s\n",atleti[ordinato[i]]);
}
void inizializza(char vet[MAX][LEN], float mat[MAX][MAX], int *n, int *c){
//dichiarazioni
int i,j;
//acquisizione lunghezze
do{
printf("inserire il numero di atleti(minimo 3) : ");
scanf("%d",n);
printf("inserire il numero di prove : ");
scanf("%d",c);
}while(*n<3|| *n>=MAX || *c<1 || *c>=MAX);
//acquisizione dati
for(i=0;i<*n;i++){
printf("inserire il nome dell'atleta numero %d : ",i+1);
scanf("%s",vet[i]);
}
//inizializzazioni
for(i=0;i<*n;i++)
for(j=0;j<*c;j++)
mat[i][j] = (float)(rand()%3000)/1000;
}
void azzera(float vet[], int n){
//dichiarazioni
int i;
//calcoli
for(i=0;i<n;i++)
vet[i] = 0;
}
void aggiungi(float vet1[], float vet2[], int n){
//dichiarazioni
int i;
//calcoli
for(i=0;i<n;i++)
vet1[i] = vet2[i];
}
void ordina(float vet[], int ordinato[], int n){
//dichiarazioni
int i,k,aux;
//calcoli
for(i=0;i<n;i++)
ordinato[i] = i;
n--;
do{
k=0;
for(i=0;i<n;i++)
if(vet[ordinato[i]]>vet[ordinato[i+1]]){
aux = ordinato[i];
ordinato[i] = ordinato[i+1];
ordinato[i+1] = aux;
k = i;
}
n = k;
}while(k);
}