PDA

View Full Version : [Pascal] IF OR?? E media??


EraKlon
07-06-2009, 10:03
Ciao a tutti!
Volevo sapere come fare una cosa del genere:

if= 'ciao' or 'bye' or 'ecc'
si può fare??
perchè al terzo or pascal mi dice:
error 41: operand types do not match operator.


che posso fare??


-----------------------------------------------

Come posso fare la media tra più numeri?
non voglio crearne una con o 2 o 3 o 4 o 5 numeri..
vorrei che per esempio il programma gli chiede quanti numeri a cui fare la media, e da solo gli chieda il numero.. si può?

Tommy81
07-06-2009, 10:55
Ciao a tutti!
Volevo sapere come fare una cosa del genere:

if= 'ciao' or 'bye' or 'ecc'
si può fare??
perchè al terzo or pascal mi dice:
error 41: operand types do not match operator.


che posso fare??


-----------------------------------------------

Come posso fare la media tra più numeri?
non voglio crearne una con o 2 o 3 o 4 o 5 numeri..
vorrei che per esempio il programma gli chiede quanti numeri a cui fare la media, e da solo gli chieda il numero.. si può?

Per il primo punto ricordati che devi sempre dichiarare la variabile... ciao, bye cosa sono? Se sono stringhe della variabile A allora bisogna scrivere così:


...
Var A : String;

Begin

If (A = 'ciao') OR (A = 'bye') OR (A = 'ecc ecc') then
Else

End.


Occorre piazzare bene anche le parentesi.
Per la media di più numeri diciamo N, di cui non sai valore all'inizio, conviene utilizzare un ciclo. In pseudo codice sarebbe:

Somma, Contantore, N: integer;
X: real;

Begin
Somma:=0;
Contantore:=0;
scrivi ('Di quanti numeri devi fare la media?');
leggi (N);
repeat
Contantore:= Contatore+1;
scrivi ('numero n.',Contantore,':');
leggi (X);
Somma:= Somma+X;
until (contatore=N)
scrivi ('media= ',Somma/N);
End.

X è un generico numero che immetti per fare la media
N è il numero totale dei valori
Contatore serve per il ciclo repeat... tiene il conto dei numeri immessi
Somma è l'addizione dei vari numeri che si immettono da tastiera
Finito il conteggio esce dal ciclo repeat e esegue la divisione Somma/N restituendo la media aritmetica.

EraKlon
07-06-2009, 14:51
Grazie ancora Tommy!!! (:

Tommy81
07-06-2009, 15:14
Grazie ancora Tommy!!! (:

di nulla.

EraKlon
08-06-2009, 13:02
Somma:= Somma+X;

somma:=somma+x; ???
mi da errore, infatti avevo qualche dubbio ma boh.. devo ancora capirmi del tutto con il pascal[devo mettermi sotto se voglio capire..]

Tommy81
08-06-2009, 13:25
La logica è giusta, sarà qualche errore di sintassi. Ti faccio un esempio, se dobbiamo fare la media dei numeri 7, 3 e 5... immettiamo come valore per N il numero 3... perchè sono tre numeri. Col ciclo repeat prendiamo tutti i numeri uno alla volta e li sommiamo...
- immettiamo 7... allora X=7, Somma=0+7=7 e Contatore=0+1=1
il repeat effettua un altro ciclo perchè il Contatore non è uguale a N che vale 3
- immettiamo 3... allora X=3, Somma=7+3=10 e Contatore=1+1=2
il repeat effettua un altro ciclo perchè il Contatore non è uguale a N che vale 3
- immettiamo 5... allora X=5, Somma=10+5=15 e Contatore=2+1=3
il repeat si arresta dal ciclare perchè Contatore=N=3, cioè sono finiti i numeri da immetere.
- si trova la media... Somma/N=15/3=5

EraKlon
08-06-2009, 13:39
mi da sotto la U di until l'error 26: Type mismatch.

perchè?

Tommy81
08-06-2009, 14:14
mi da sotto la U di until l'error 26: Type mismatch.

perchè?

scrivi il testo del programma che hai fatto e la riga dove ti dà l'errore

EraKlon
08-06-2009, 15:04
program Media;
uses crt;
var somma,contatore,N:integer;
x:real;
begin
clrscr;
somma:=0;
contatore:=0;
writeln('Inserisci i numeri di cui vuoi avere la media.');
readln(n);
repeat
contatore:=contatore+1;
writeln('numero n.',contatore,':');
readln(x);
somma:= somma + x
until (contatore=N) <--- sotto la U c'è la cosa intermittente e mi dice l'errore
writeln('media=',somma / N);
end.

Tommy81
08-06-2009, 17:36
Bastano piccole correzioni:


var
contatore,N: integer;
somma,x: real;
begin
somma:=0;
contatore:=0;
write('Di quanti numeri devi fare la media? ');
readln(N);
repeat
contatore:=contatore+1;
write('numero n.',contatore,':');
readln(x);
somma:= somma + x;
until (contatore=N);
writeln('media= ',somma/N);
readln;
end.