PDA

Visualizza la versione completa : [C] Consiglio su programma e miglioramento (semplice)


Power Dragon
11-01-2010, 17:22
Ciao, devo creare un programmino in consolle in linguaggioC, vi pongo il quesito e la mia soluzione:

#Si sviluppi un programma in linguaggio C che, ricevendo in ingresso una sequenza di
lunghezza arbitraria di almeno due numeri interi diversi da zero, terminata da uno zero,
produca in uscita i due valori minimi letti in ingresso (escluso l’ultimo zero).
Ad esempio, ricevendo in ingresso la sequenza 7 2 19 4 45 3 7 9 3 0
produce in uscita 2 3


RISOLUZIONE PROPOSTA PER L'ESERCIZIO
1 Dichiarare num1, num2 in formato numero intero
2 Dichiarare scambio e gamma in formato numero intero
3 Acquisire il valore di num1 e num2
4 FUNZIONE SCAMBIO(num1, num2) //in questo modo sono sicuro che num1<num2
5 CICLO
6 Acquisire gamma
6.2 SE (gamma!=0) ALTRIMENTI
SE((num1<gamma) e (gamma<num2)) ALLORA num2 = gamma
SE(gamma<num1) ALLORA num1 = gamma
MENTRE(gamma!=0)
6 Scrivi(num1 e num2)



#include <stdio.h>
#include <stdlib.h>

int main()
{
int num1, num2;
int scambio, gamma;
printf("Inserisci un numero diverso da zero: ");
scanf("%d", &num1);
printf("Inserisci un numero diverso da zero: ");
scanf("%d", &num2);
/* Scambio */
if(num2<num1)
{
scambio = num1;
num1 = num2;
num2 = scambio;
}
/* Ciclo */
do
{
printf("Inserisci un numero: ");
scanf("%d", &gamma);
if(gamma!=0)
{
if((num1<gamma) && (gamma<num2))
num2 = gamma;
if(gamma<num1)
num1 = gamma;
}
else {}
} while(gamma!=0);
printf("Ecco i due numeri cercati: %d e %d \n", num1, num2);
system("PAUSE");
return 0;
}


Secondo voi posso apportare modifiche in modo che l'algoritmo diventi più semplice?

YuYevon
11-01-2010, 18:21
Che intendi con "più semplice"? Sicuramente c'è da eliminare quell'else con il corpo definito vuoto ( else { } ) che non ha senso, poi puoi apportare una semplice miglioria ma si tratta davvero di volerla andare a cercare... se questa condizione risulta vera



if((num1<gamma) && (gamma<num2))


quella successiva



if(gamma<num1)


risulta necessariamente falsa, quindi nel caso la prima risulti vera è inutile andare a testare anche la seconda, quindi io modificherei con



if((num1 < gamma) && (gamma < num2))
num2 = gamma;
else if (gamma < num1)
num1 = gamma;


ma è proprio per essere noiosi :D

Per il resto, hai seguito semplicemente i passi della traccia, quindi cosa dovrebbe esserci da modificare?

Loading