Bisogno di aiuto...

di il
2 risposte

Bisogno di aiuto...

Ciao a tutti...non è da molto ke sto cercando di imparare a programmare in C...e mi sono impattato in un programma ke non è nulla di complicatissimo ma mi sta dando un pò di fastidio..vi prego di darmi una mano..sono sicuro ke chi è in gamba riuscirà a risolvere il problema in pochissimo tempo...ringazio anticipatamente tutti coloro ke spenderanno del tempo per darmi una mano..vi posto la traccia del problema...se vi è possibile v chiedo di postarmi la soluzione del problema...un'ultima cosa..il programma è in C semplice, non il ++..inoltre vi chiederei se possibile d non usare delle funzioni molto complicate perchè il mio livello non è ancora alto..funzioni del tipo switch o argv argc dichiarazione di funzioni, librerie personali,for,sscanf e così via vanno bene...uso come compatore quincy 2005...Vi prego di aiutarmi..GRAZIE!!

Un programma riceve sull’unita di input standard le dimensioni di alcune aree che devono essere
dipinte in vari colori, secondo il seguente formato.
Ogni riga inizia con una lettera alfabetica che indica il colore da usare secondo la seguente codifica:
N=nero B=bianco V=Verde G=Giallo
(si noti che la lettera può essere scritta indifferentemente in maiuscolo o minuscolo). Seguono
quindi due numeri floating-point che rappresentano la dimensione orizzontale e verticale (espresse
in centimetri) del rettangolo da colorare.
Il programma deve segnalare sull’unità di errore standard le righe non valide (ad esempio
contenenti numeri negativi o colori inesistenti) indicandone il numero di riga e scartandole dai
conteggi, con una segnalazione di questo tipo:
Riga n. X non valida - scartata
Il programma riceve inoltre sulla riga di comando il costo al litro (espresso in Euro) dei quattro
colori suddetti, nell’ordine indicato.
Sapendo che occorre 0.25 litri di pittura al metro quadro, il programma deve calcolare:
?? la dimensione totale dell’area che viene dipinta (espressa in metri quadri)
?? il costo totale della pittura
?? il costo medio al metro quadro
Tutti i risultati devono essere espressi come numeri reali con due cifre dopo la virgola.
Ad esempio se sull’input standard fossero fornite le seguenti righe:
N 200.0 100.0
b 100 200
ed il programma – denominato colori – fosse attivato con la seguente riga di comando:
C:> colori 1.00 2 2 2.0
allora dovrebbe produrre il seguente risultato:
Area totale: 4.00 mq
Costo totale della pittura: 1.50 Euro
Costo medio della pittura: 0.37 Euro/mq

2 Risposte

  • Re: Bisogno di aiuto...

    Ciao, è il mio primo post, quindi approfitto dell'occasione per salutare tutti gli utenti del forum!

    Riguardo al tuo compito, puoi realizzare il programma più o meno così:
    
    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define VERO 1
    #define FALSO 0
    
    #define RESA_PITTURA	0.25
    
    int
    main(int argc, char *argv[]) {
    	char colore;
    	int numero_riga;
    	int riga_valida;
    	float lunghezza, altezza;
    	float area, area_parziale, costo_totale, costo_medio;
    	float costo_colore, costo_nero, costo_bianco, costo_verde, costo_giallo;
    
    	numero_riga = 0;
    	area = 0;
    	costo_totale = costo_medio = 0;
    
    
    	if (argc < 5) {
    		printf(\"usare: %s costoNero costoBianco costoVerde costoGiallo\\n\", argv[0]);
    		return 1;
    	}
    	
    	costo_nero = strtof(argv[1], (char**)NULL);
    	costo_bianco = strtof(argv[2], (char**)NULL);
    	costo_verde = strtof(argv[3], (char**)NULL);
    	costo_giallo = strtof(argv[4], (char**)NULL);
    
    	while (!feof(stdin)) {
    		++numero_riga;
    		riga_valida = VERO;
    		scanf(\"%c%f%f\\n\", &colore, &lunghezza, &altezza);
    		
    		if (lunghezza < 0 || altezza < 0) {
    			riga_valida = FALSO;
    		}
    
    		/*costo_colore = 0;*/
    		switch (toupper(colore)) {
    		    case 'N':
    			    costo_colore = costo_nero;
    			    break;
    		    case 'B':
    			    costo_colore = costo_bianco;
    		    	    break;
    		    case 'V':
    			    costo_colore = costo_verde;
    			    break;
    		    case 'G':
    			    costo_colore = costo_giallo;
    			    break;
    		    default:
    			    riga_valida = FALSO;
    		}
    
    		if (riga_valida) {
    
    		    area_parziale = lunghezza * altezza / (100 * 100);
    		    area += area_parziale;
    		    costo_totale += costo_colore * area_parziale * RESA_PITTURA;
    		} else
    		    fprintf(stderr, \"Riga n. %d non valida - scartata\\n\", numero_riga);
    	}
    
    	printf(\"Area totale = %.2f mq\\n\", area);
    	printf(\"Costo totale della pittura: %.2f Euro\\n\", costo_totale);
    	printf(\"Costo medio della pittura: %.2f Euro/mq\\n\", costo_totale / area);
    
    	return 0;
    }
    
  • Re: Bisogno di aiuto...

    Grazie mille per il tempo ke hai speso...mi è stato moto di aiuto avere un algoritmo di riferimento e grazie a te sono riuscito a risolverlo..ti ringrazio ancora.se posso esserti di aiuto in qualsiasi cosa fammi sapere!!
Devi accedere o registrarti per scrivere nel forum
2 risposte