logo Thecsea.it



Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License



scolastica » esercizi » terza superiore » linguaggio c

Testo dell'esercizio

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.

mostra soluzione

/*
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);
}

Testi Consigliati:

Il linguaggio C. Principi di programmazione e manuale di riferimento. Ediz. MyLab. Con Contenuto digitale per download e accesso on line
C guida alla programmazione: Conoscere lo standard C11 dalle basi del linguaggio alle direttive del preprocessore (Programmare con C Vol. 1)
Programmazione in C

torna



Copyright © 2004-2024 thecsea.it (Claudio Cardinale - [email protected])! Tutti i diritti riservati. - contattaci