Newsgroup: it.comp.lang.pascal
Titolo: media di n numeri

chi riesce a correggere questo programma (se cosi si può chiamare!):
-----------------------------
uses crt;
var
   A,N:integer;
   M,B:real;
begin
clrscr;
write('Di quanti numeri vuoi fare la media: ');
readln(N);
   for A:=1 to N do
                 begin;
                       write('Inserisci il ',A,'° numero: ');
                       if (M=0) then
                                read(M)
                             else
                             begin
                                  read(B);
                                  M:=(B+M)/2;
                             end;
                 end;
write('La media tra i ',N,' numeri è ',M:0:2);
repeat until keypressed;
end.
--
--  **  --  **
@LEX
"Straniero in terra straniera
 Terra di ghiacci e neve
 Intrappolato in questa prigione
 Perso e lontano da casa"

 end.
fai così e funge
ciao

 ha scritto nel messaggio
news:99V78.29637$om6.7...@news1.tin.it...


 ha scritto nel messaggio
news:Kkg88.31905$nI1.9...@twister1.libero.it...


 > > > readln(N);
trasforma la N variabile in un valore numerico!
Il problema pertanto va risolto in modo diverso e precisamente in modo tale
che N non sia definito a priori (quindi variabile). Tale soluzione richiede
in particolare un "codice di uscita".
Poichè la media si applica su degli oggetti non ha senso parlare di media
fra numeri negativi, ragione per cui si può considerare solo il campo R+ dei
numeri reali positivi.
Sulla base di ciò possiamo supporre che il "codice di uscita" possa essere
rappresentato da un qualsiasi numero < 0.
Fatte queste considerazioni, la relativa IMPLEMENTAZIONE in linguaggio
pascal risulta essere la seguente:
Function CalcMedia: Real;
 Var Count: Longint;   Sum, Number: Real;
 Begin
  Count := 0;  Sum := 0;
  While (Number > 0) Do
   Begin
    Inc (Count);
    Write ('Insert #', Count, ' number: ');   Readln (Number);
    If (Number > 0) Then Sum := Sum + Number;
   End;
  CalcMedia := Sum / Pred (Count);
 End;
La funzione CalcMedia, restituirà la media aritmetica dei primi N numeri
inseriti chiusi da un valore reale negativo. :-)
Cordialmente, Cooper.

 [ snippone megagalattico]
svegliato male stamattina ? :-)
se il problema iniziale richiede N numeri, la creazione del modello
canonico non mi obbliga ad inserire questa dipendenza all'interno
dell'algoritmo, bensi' nella sua interfaccia: mi viene richiesto di fare
la media di N numeri, quindi il mio algoritmo dovra avere in input
I appartente N * <Numeri>
O appartente a <Numeri>
inserendo l'esistenza di un "valore di uscita" (come lo chiami tu)
rispondi ad un altro problema: l'algoritmo non e' piu' una scatola
chiusa che risponde in modo (si spera corretto) ad un input,
ma un sistema in tempo reale
l'implementazione, in qualisiasi linguaggio, dovrebbe essere quella
che conosce gia' N prima del calcolo, conosce gia' i numeri e poi
ne calcola la media.  E' la CODIFICA che cambia a seconda di come
noi vogliamo memorizzare l'array di numeri:
a) coppia (<lunghezza>*<array di numeri>)
b) array di (<numeri> U <"valore di uscita">)
l'informatica teorica e' un sentiero in una foresta oscura... occhio
ad addentrartici :-)
--
Dreadnaut
(Life would be easier if I had the source code)

 dei numeri reali positivi.
dimenticavo... i poveri paesi dove la temperatura media e' 4 gradi sotto
zero non esistono vero ? :-)


 O appartente a <Numeri>
"in input" in fondo non ci andava :-) ops...
gia' I e O stanno per Input e Output


Ottima osservazione,
ma trascuri un particolare molto importante... :-) Metterò in evidenza tale
particolare.
Problema1:   Costruire un algoritmo che legga N numeri e ne calcoli la
media.
Problema2: Calcolare la media di N numeri.
Domanda no.1:   Quale differenza c'è fra Problema1 e Problema2 ? :P
Da parte mia, nessuna :-) Oddio, questo è italiano eh? :PPPP
Ora se il problema chiede di inserire N numeri... si presume che tu non sai
quanto valga N a priori, se lo sai allora esci fuori da questa classe di
algoritmi.
Adesso mettiamo a confronto questi due programmi...
Program Esempio1;
Const N = 24;
Begin
  (* Punto A *)
  CalcolaMedia (N);
  Visualizza Media;
End;
e ancora:
Program Esempio2;
Begin
 Writeln ('Inserisci N: ');   Readln (N);
 (* Punto A *)
 CalcolaMedia (N);
 VisualizzaMedia;
End;
Tracciando il valore N, noteremo che nel:   "Punto A"   N assumera sempre un
valore numerico ben definito... prima di entrare nell'algoritmo che calcola
la media...
Questo fa vedere che N non è una variabile ma è diventato un numero ben
preciso che viene passato a: "CalcolaMedia" per determinare la media di quei
N numeri.
Ecco quindi che l'algoritmo calcolerà la media si di N numeri... ma con N
già fissato a priori ovvero costante. Il problema iniziale invece presume
che il valore N non si conosce.... e quindi..... ecco dimostrato quanto
affermavo prima ^__^
Beh il discorso dei numeri... interi, reali etc etc... beh qui invece posso
anche darti ragione... ma ancora una volta sei uscito dal tema (senza
offesa)...  la tua osservazione è giustissima.... nessuno infatti vieta di
usare i numeri negativi per calcolare la media di un qualcosa, tipo la
temperatura.
Ma hai dimenticato un particolare... che tutto dipende dal punto di
riferimento... Pensaci bene... esiste una temperatura negativa? Nei
farahnait (non so come si scrive pardon) i numeri per esempio so tutti
positivi :-) In quelli centigradi positivi e negativi ecc ecc...
Cmq... piccola parentesi... se uno ti chiede di calcolare le radici di una
parabola.... (quindi due soluzioni) che possono essere reali o complesse...
te gli calcoli solo quelle reali... e gli dici che complesse non esistono
perchè il pascal non ha il il tipo di dato per i numeri complessi? o
piuttosto costruisci il tipo di dato per calcolare anche le radici
complesse? :-P
Il tipo di dato è una estensione di C quindi in esso è possibile risolvere
qualsiasi classe di problemi anche quelli che per via matematica non sono
risolubili.
Non posso spiegarti a fondo questa affermazione.... ma lo già dimostrato :))
Cordialmente, Cooper.