Newsgroup: it.comp.lang.pascal
Titolo: problema aiuto!!!!!!!!!!!

Ciao volevo chiedere se per piacere potevate dare un occhiata al programma
che vi mando. Il programma calcola, dato un giorno dell'anno, quanti giorno
sono trascorsi dall'inizio dell'anno.
Il programma mi da un errore che non riesco a correggere, vi sarei molto
grato se ci potreste dare un occhiata e vedere eventualmente di correggerlo.
A presto e grazie mille ciao!!!!!!!!
Paolo
P.s.
Il file di pascal è qui in basso e ho segnato
tra due parantesi graffe dove c'è l'errore:
Program data;
uses crt;
var  m, s, g, a, g1, g2: Integer;
    Begin
clrscr;
writeln ('Inserisci il giorno del mese');
readln (s);
writeln ('Inserisci il mese da 1 a 12');
readln (m);
writeln ('Inserisci l''anno');
readln (a);
g:=a mod 4;
g1:= a mod 400;
g2:= a mod 100;
if (g=0) and (g2<>0) or (g1=0)
   then
   writeln ('L''anno S bisestile');
   case m of
   1:writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
   2:Begin
     s:=s+31;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
   3:Begin
     s:=s+31+29;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
   4:Begin
     s:=s+31+29+31;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
   5:Begin
     s:=s+31+29+31+30;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
   6:Begin
     s:=s+31+29+31+30+31;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
   7:Begin
     s:=s+31+29+31+30+31+30;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
   8:Begin
     s:=s+31+29+31+30+31+30+31;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
   9:Begin
     s:=s+31+29+31+30+31+30+31+31;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
  10:Begin
     s:=s+31+29+31+30+31+30+31+31+30;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
  11:Begin
     s:=s+31+29+31+30+31+30+31+31+30+31;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end;
  12:Begin
     s:=s+31+29+31+30+31+30+31+31+30+31+30;
     writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
     end
     else begin
     writeln ('Il numero che hai inserito come mese S maggiore di 12;
ATTENTO');
     end;
     end;
    {La Macchina mi da errore qui
    se metto il punto e virgola nell'ultimo end mi dice error in statement
    se non ce la metto mi dice che manca il punto e virgola
    che devo fare}
    else begin
    writeln ('L''anno non S bisestile');
    case m of
    1:writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
    2:Begin
      s:=s+31;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
    3:Begin
      s:=s+31+28;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
    4:Begin
      s:=s+31+28+31;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
    5:Begin
      s:=s+31+28+31+30;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
    6:Begin
      s:=s+31+28+31+30+31;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
    7:Begin
      s:=s+31+28+31+30+31+30;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
    8:Begin
      s:=s+31+28+31+30+31+30+31;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
    9:Begin
      s:=s+31+28+31+30+31+30+31+31;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
   10:Begin
      s:=s+31+28+31+30+31+30+31+31+30;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
   11:Begin
      s:=s+31+28+31+30+31+30+31+31+30+31;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
   12:Begin
      s:=s+31+28+31+30+31+30+31+31+30+31+30;
      writeln ('Dall''inizio dell''anno sono passati ', s ,' giorni');
      end;
      else begin
     writeln ('Il numero che hai inserito come mese S maggiore di 12;
ATTENTO');
     end;
     end;
     end;
     readln
      end.

ma dopo l'end del case ci puo essere un altro else?
---------
potrei aver detto qualche c****a , ma perdonatemi
---------


Il pascal e struturato a blocchi...
i begin end servono ad parire e chiudere un blocco..
la case viene letta come un unico bocco (idem per for, repeat ecc)
ora il blocco della case è
Case <var> of
  <var1>: Blocco1
  <var2>: Blocco2
  ...
  <varN>: BloccoN
Else {facoltativa}
  Blocco else
End;
Se non si usa un blocco si puo' usare una sola istruzione (per esempio
una write) come ho gia detto le for sono dei blocchi e anche le if
per esempio le if:
If <condizioni>
  Then Blocco1
  Else Blocco2;
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

quotate ragazzi... quotate che i mortali la banda la pagano...
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)

> Program data;
argh... oddio spero che sia il tuo primo programma ;-)
cmq l'errore e' due righe sotto dove te lo segna:
 *** MAI mettere un ';' davanti ad un else... MAI ***
togli quello e sei a posto ;-)
cmq parliamone... hai ripetuto 24 blocchi di codice praticamente
identici... non potresti strutturare la cosa un po' meglio ?
vediamo... improvviso... un array con le lunghezze dei mesi :
var
 mesi : array[1..12] of byte = [31,29,31,30,31,30,31,31,30,31,30,31];
quando ci dicono il mese ci facciamo un bel for:
somma := 0;
for n := 1 to mese-1 do
 inc (somma, mesi[n]);
cosi' abbiamo la somma di tutti i mesi precedenti a quello inserito...
aggiungiamo il giorno del mese
inc(somma,giorno);
e poi sbrighiamo la grana del bisestile:
if mese>2 then
  if bisestile(anno) then dec(somma);
ed ecco fatto... l'ho messa un po' facile, pero' in 20 righe ci
sta' tutto...
la potenza di un linguaggio di programmazione sta' nelle strutture,
sia per i dati che per il flusso... usale... ridurre tutto a una banale
definizione per casi non e' mai bello... immagina quake definito
per casi ehhehehheh :-)
saluti


"Dreadnaut" <Drea...@liberoDALLASPAM.it> ha scritto nel messaggio
news:C1cN7.197052$sq5.9...@news.infostrada.it...

Non ho la minima idea di che cosa possano essere questi array???
Non lo ho ancora fatti a scuola??????????
Ciao
Paolo

quotate ragazzi... quotate che i mortali la banda la pagano...
A dire la verita ne sono un mortale ne pago... percui io non ci
rientro :o)
(che bella la ADSL)


mmh ok non hai ancora fatto gli array... ma hai fatto il case... boh...
cmq... tutto quello che ti ho detto non dovrebbe cambiare,
se hai fatto le funzione (sperem...) fatti una funzione che
prenda come parametro il numero del mese e ne restituisca la
lunghezza standard (o prenda anche l'anno e restituisca la
lunghezza esatta... n.per.Feb)


 ha scritto nel messaggio
news:9u3nu4$u1u$1...@pegasus.tiscalinet.it...
