View Full Version : [Pascal] Aiuto programma2
Rieccomi.. Stavolta non sono riuscito a risolvere.. Se ci fosse qualcuno che mi da una mano gliene sarei grato. Il programma è il seguente:
program es1;
uses crt;
var a[i],b[i],c[i]:array [1..150] of integer;
cont,n,cubo,i:integer;
Begin
clrscr;
cont:=0;
cubo:=0;
repeat
writeln('Introduci un numero n');
readln(n);
until n<=100;
for a:=0 to n do
begin
randomize;
random(a[i]):=(90)+1;
writeln(a[i]);
if a[i]<60
then cont:=cont+1
end;
writeln('I numeri minori di 60 sono: ',cont);
for b:=0 to n do
begin
randomize;
random(b[i]):=(90)+1;
writeln(b[i]);
if b[i] mod 4=0
then begin
cubo:= b[i]*b[i]*b[i];
writeln('Ecco i cubi dei numeri multipli di 4 caricati dall''array b',cubo);
end;
end;
for c:=0 to n do
begin
c[2i]:=a[2i];
c[2i]:=-c[2i];
writeln(c[2i]);
c[2i+1]:=a[2i+1];
c[2i+1]:=-c[2i+1];
writeln(c[2i+1]);
end;
readln;
end.
Errore:
Fatal: Syntax error, : expected but [ found
Nessuno è in grado di aiutarmi in questo forum?
wizard1993
04-05-2012, 21:47
tre piccole regole generali quando si posta nei forum di programmazione
1)indenta il codice
2)indica la linea dell'errore, il compilatore te la riporta
3)scrivi cosa dovrebbe fare il listato
Gimli[2BV!2B]
04-05-2012, 22:37
Sottoscrivo wizard1993, posso però dirti di controllare varie cose:
la dichiarazione delle variabili (l'errore che riporti)
una variabile è troppo piccola per contenere il valore che calcoli
errate variabili utilizzate nei cicli
inizializzazione del generatore di numeri casuali fatta troppe volte
funzione random utilizzata praticamente all'inverso
sforamento indice array nello strano balletto finale
Scusate ragazzi sono un pivello per quanto riguarda programmazione..
Per quanto riguarda la riga dell'errore adesso edito il post iniziale mettendo in grassetto dove mi evidenzia l'errore..
Per quanto riguarda la finalità del programma vi spiego velocemente:
Primo array A.. Dobbiamo visualizzare nell'output tanti numeri casuali quanti ne chiede l'utente con la variabile N (N<=100).
Dopo questo dobbiamo comunicare QUANTI numeri minori di 60 sono stati caricati dall'array..
Array B. Visualizzare sempre tanti numeri casuali quanti ne chiede l'utente (utilizziamo per comodità sempre la variabile N di prima).. Poi prendere i numeri visualizzati multipli di quattro e farne il cubo.. Successivamente dobbiamo visualizzare questi numeri..
Array C lasciamolo stare perchè neanche io ho ben capito il testo.:D
Scusatemi ancora
Gimli[2BV!2B]
05-05-2012, 16:01
Esatto, il primo errore è lì, ma è una cavolata ripetuta che se te la scrivo nero su bianco la dimentichi in 10 secondi netti, mentre se osservi un esempio/appunti/altro e la "scopri" tu te la ricorderai meglio.
I problemi più subdoli che potrai aver difficoltà a trovare/capire sono altri.
P.S. usa il tag CODE per preservare la formattazione del codice (è l'icona col cancelletto in editazione avanzata del post, sotto la tendina delle faccine).
;37397630']Esatto, il primo errore è lì, ma è una cavolata ripetuta che se te la scrivo nero su bianco la dimentichi in 10 secondi netti, mentre se osservi un esempio/appunti/altro e la "scopri" tu te la ricorderai meglio.
I problemi più subdoli che potrai aver difficoltà a trovare/capire sono altri.
P.S. usa il tag CODE per preservare la formattazione del codice (è l'icona col cancelletto in editazione avanzata del post, sotto la tendina delle faccine).
Grazie innanzitutto per la disponibilità..
Quindi per capire al meglio i programmi devo sbattere la testa e smanettare..
Ottimo:D .. E', ahimè:cry: , un compito di informatica che ho fatto qualche giorno fa..
Ma ci sono errori di logica? Alcune cose purtroppo non le ho ancora chiare.. E fare un compito di informatica scritto su un foglio è assurdo perchè non hai la possibilità di vedere che errori fai..
Gimli[2BV!2B]
06-05-2012, 00:45
Posso dirti che quel codice pulito da errori fa sostanzialmente quel che hai scritto che dovrebbe fare (fino all'array c).
L'argomento che hai mostrato di aver capito meno direi che è l'utilizzo delle funzioni/procedure, nel particolare di random e della procedura randomize (che andrebbe invocata una sola volta, mentre tu l'hai fatto 2 * n volte).
Naturalmente questa è la mia opinione e non so a cosa possa dare più peso il tuo/a prof.gimli@kwankey:~/Scrivania$ fpc -otest_pas -Tlinux test.pas && ./test_pas
Free Pascal Compiler version 2.6.0-2 [2012/04/01] for i386
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling test.pas
Linking test_pas
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
53 lines compiled, 0.3 sec
Introduci un numero n
10
76
2
63
50
57
51
15
52
90
34
46
I numeri minori di 60 sono: 8
19
44
Ecco i cubi dei numeri multipli di 4 caricati dall'array b: 85184
67
40
Ecco i cubi dei numeri multipli di 4 caricati dall'array b: 64000
51
89
22
16
Ecco i cubi dei numeri multipli di 4 caricati dall'array b: 4096
71
6
5
-76
-2
-2
-63
-63
-50
-50
-57
-57
-51
-51
-15
-15
-52
-52
-90
-90
-34
-34
-46
Che il compito scritto su foglio sia irrealistico pensando al normale contesto di utilizzo del linguaggio sono d'accordo, però, a posteriori (ho fatto pascal alle superiori), ne capisco il senso perché ti costringe ad imparare subito la sintassi a memoria.
Per farti un esempio, mi è capitato di lavorare per mesi con Javascript, ma non ho mai memorizzato veramente i nomi delle funzioni e proprietà basilari e son sempre un po' impedito quando ci torno sopra.
Saperlo scrivere su carta significa che puoi concentrarti maggiormente sul problema che devi risolvere piuttosto che perdere tempo a trovare le parole per scrivere la soluzione.
Grazie ancora! Scusami ti faccio un'ultima domanda. Riguardo all'array B sembra che nell'output che hai postato non ci siano i numeri casuali che avrebbe dovuto caricare (erano sempre N numeri..).
Nel senso che carica sempre 10 numeri casuali, controlla quali sono multipli di 4, fa il cubo di questi numeri e poi lo comunica.. Sembra che questo non lo faccia..
Per quanto riguarda il random ho completamente sbagliato in tutto il programma la sintassi.. Avrei dovuto mettere variabile:=random(90)+1. Grande boiata!
Gimli[2BV!2B]
06-05-2012, 12:30
Nel secondo ciclo l'hai fatto contemporaneamente: subito dopo aver generato il numero casuale lo controlli e ne stampi subito il cubo se multiplo di 4, quindi passi al numero successivo.
Diciamo che per soddisfare la sequenza temporale avresti dovuto memorizzare i cubi in un array, quindi stamparli con un altro ciclo.
Hai mostrato però di sapere come funziona l'operatore mod.
Ho notato adesso che i cicli vengono eseguiti una volta in più della variabile (da 0 ad n compreso: n + 1), non ci avevo badato perché non più abituato alla sintassi Pascal.
Esatto per random: for i := 0 to n do
begin
b[i] := random( 90 ) + 1 ;
writeln(b[i]);
if b[i] mod 4=0 then
begin
cubo := b[i] * b[i] * b[i];
writeln('Ecco i cubi dei numeri multipli di 4 caricati dall''array b: ', cubo);
end;
end;
writeln('');
Allora grazie mille! Vediamo come va il compito..:)
;37394336']Sottoscrivo wizard1993, posso però dirti di controllare varie cose:
la dichiarazione delle variabili (l'errore che riporti)
una variabile è troppo piccola per contenere il valore che calcoli
errate variabili utilizzate nei cicli
inizializzazione del generatore di numeri casuali fatta troppe volte
funzione random utilizzata praticamente all'inverso
sforamento indice array nello strano balletto finale
Ti chiedo un'altra cosa.. Che variabili devo mettere nei cicli? Ho provato a mettere nel primo e nel secondo ciclo due variabili diverse, ma cambia completamente..
Gimli[2BV!2B]
14-05-2012, 21:31
Variabili diverse? Non ti serve memorizzare il valore raggiunto dai contatori alla fine di ogni ciclo (è n).
Poi tu hai usato gli array stessi come contatori, mentre l'array è la cassettiera in cui devi cercare, aprendo un cassetto alla volta, dal primo a[0] all'ultimo a[n].
Qui si evidenzia di nuovo il dettaglio a cui ho accennato nell'ultimo post: da 0 ad n compreso fa n + 1 elementi, quindi bisogna decidere che fare per soddisfare le specifiche dell'assegnamento...
P.S. Controlla il frammento che ho già postato...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.