Newsgroup: it.comp.lang.pascal
Titolo: Max e Min...

Devo scrivere un programma che, inseriti d tastiera n numeri, ne determini
il massimo ed il minimo; non posso usare array ed affini...
Il mio sorgente ha un problema, non aggiorna il minimo lasciandolo sempre a
zero. Il codice è:
PROGRAM DetMaxMin(input,output);
 USES
     Crt;
 VAR
    s:char;
 PROCEDURE MaxMin(VAR sc:char);
  VAR
     i,n,min,max,num,temp:integer;
  BEGIN
       max:=0;
       min:=0;
       REPEAT
             write('Digitare la quantit. di numeri da inserire e premere
INVIO: ');
             readln(n);
       UNTIL n>=1;
       FOR i:=1 TO n DO
           BEGIN
                writeln;
                write('Digitare il ',i,'° numero seguito da INVIO: ');
                readln(num);
                IF (num>max) THEN
                   max:=num
                ELSE
                    IF num<min THEN
                       min:=num
           END;
       writeln;
       writeln('Il massimo tra i numeri inseriti è: ',max);
       writeln;
       writeln('Il minimo tra i numeri inseriti è: ',min);
       writeln;
       write('Premere U per uscire, qualsiasi tasto per un altro confronto:
');
       readln(sc);
       sc:=UpCase(sc);
  END;
                                {*****    MAIN BLOCK    *****}
 BEGIN
      REPEAT
            ClrScr;
            MaxMin(s);
      UNTIL s='U'
 END.
Help pleaze...

        min:=0;
inizializza min al massimo valore disponibile (32767)...altrimenti dopo
quando fa il confronto "IF num<min", a meno che num non sia negativo, non
aggiorna mai il valore minimo (btw già che ci sei, magari inizializza max
a -32768, per lo stesso motivo)

 ha scritto nel messaggio
news:%fGW8.16818$7N3.3...@twister2.libero.it...

Ma così facendo, se decido di inserire tre numeri con valori 1,2,3 mi dirà
che il max è 3 e che il min è 32767!! Il problema non è ancora risolto
(almeno non del tutto...). Cmq grazie del consiglio.
RiHelp pleaze...

 RiHelp pleaze...
Fai la prima lettura fuori dal for ed inizializzi
max=num
min=max;
in questo modo dovrebbe funzionare
Ciao ReDiCuori
--
L'informatica è un arte
---------------------------------------------------------
 
www.pascallike.too.it
 il sito sulla programmazione pascal e
 non solo
---------------------------------------------------------


hai ragione, non avevo visto...
togli l' "ELSE" prima dell' "IF num<min THEN..." :)
bye
Albe


Elimina tutte ste righe e usa un ciclo del tipo repeat/until per
l'immissione di un numero indefinito di dati e metti come condizione di
uscita un valore neutro.
Dopo l'immissione dei dati fai un confronto secondo le modalità indicate nel
post precedente. e prima del ciclo fai le inizializzazioni che ti sono state
dette.
Se tutto lo fai bene, in solo 10 righe di codice risolvi il problema e al
tempo stesso risulterà anche più leggibile.
Cooper.

            END;
[..]
ha apportato 2 modifiche, la prima per quanto riguarda i numeri da
acquisire, che come minimo devono essere 2 e non uno; la seconda, non fa
altro che assegnare il primo valore acquisito a min, il secondo a max, se e'
maggiore o uguale a min, oppure se e' minore di min effettua lo scambio.
spero di aver capito bene il tuo problema, anche perche' non ho controllaato
le modifiche. fammi sapere
--
Ciao
Gianfranco Marchese
e-mail dgruma@NOPUBBLICITA'
tin.it
 (Da togliere NOPUBBLICITA' se vuoi
rispondermi in privato)
sito internet personale: 
www.turbo-pascal.cjb.net
  Tutto sul Turbo Pascal
1.5