|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2012
Messaggi: 9
|
[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:
Codice:
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.
Fatal: Syntax error, : expected but [ found Ultima modifica di Ricky96 : 05-05-2012 alle 20:47. |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: May 2012
Messaggi: 9
|
Nessuno è in grado di aiutarmi in questo forum?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
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
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
Sottoscrivo wizard1993, posso però dirti di controllare varie cose:
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: May 2012
Messaggi: 9
|
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. Scusatemi ancora |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
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).
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) Ultima modifica di Gimli[2BV!2B] : 05-05-2012 alle 16:05. |
|
|
|
|
|
#7 | |
|
Junior Member
Iscritto dal: May 2012
Messaggi: 9
|
Quote:
Quindi per capire al meglio i programmi devo sbattere la testa e smanettare.. Ottimo 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.. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
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. Codice:
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 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.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: May 2012
Messaggi: 9
|
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! |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
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: Codice:
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('');
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#11 |
|
Junior Member
Iscritto dal: May 2012
Messaggi: 9
|
Allora grazie mille! Vediamo come va il compito..
|
|
|
|
|
|
#12 | |
|
Junior Member
Iscritto dal: May 2012
Messaggi: 9
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
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...
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:59.




















