Newsgroup: it.comp.lang.pascal
Titolo: Array di record

La traccia che ho è: creare e stampare una tabella che memorizza di n
parole, la parola, la lunghezza e il n. di vocali che contiene la parola.
Io l'ho risolto con il programma che riporto di seguito ma mi visualizza
tutto tranne la parola. Qualcuno può aiutarmi? Grazie in anticipo.
dani...@libero.it
PROGRAM TabellaParole (input, output);
USES WINCRT;
CONST
     maxlunghezza = 50;
TYPE
     informazioni = RECORD
                    parola      : string[maxlunghezza];
                    lunghezza   : 0..maxlunghezza;
                    totvocali   : 0..maxlunghezza;
                    END;
     parolearray  = ARRAY [1..100] OF informazioni;
VAR
     informazione : informazioni;
     parole       : parolearray;
     risp         : char;
     totparole    : integer;
PROCEDURE CreaTabella;
VAR
     i,l,contcar,contvoc : integer;
BEGIN
     i:=0;
     l:=0;
     contcar:=0;
     contvoc:=0;
     write ('Inserisci il n. totale delle parole da inserire: ');
     readln (totparole);
     FOR i:=1 to totparole DO begin
           write ('Inserisci la parola (MAX 50 caratteri e lettere
minuscole): ');
           WHILE (not eoln (input)) AND (l<maxlunghezza) DO begin
                 read (parole[i].parola[l]);
                 contcar:= contcar+1;
                 IF parole[i].parola[l] in ['a','e','i','o','u']
                 THEN
                    contvoc:=contvoc+1;
           END;
           parole[i].lunghezza:=contcar;
           parole[i].totvocali:=contvoc;
           contcar:=0;
           contvoc:=0;
           readln;
     END;
END;
PROCEDURE VisualizzaTabella;
VAR
     i,l,cont: integer;
BEGIN
     Clrscr;
     i:=0;
     l:=0;
     writeln ('PAROLA','LUNGHEZZA':40,'TOTALE VOCALI':20);
     writeln;
     FOR i:=1 to totparole DO begin
         FOR l:=1 to parole[i].lunghezza DO begin
             write (parole[i].parola[l]);
         END;
         write (parole[i].lunghezza:40);
         write (parole[i].totvocali:20);
         writeln;
     END;
END;
PROCEDURE ParolaPiuLunga;
VAR
     max, pos,i : integer;
BEGIN
     writeln;
     max:=0;
     FOR i:=1 to totparole DO begin
         IF parole[i].lunghezza > max THEN begin
            max:= parole[i].lunghezza;
            pos:= i;
         END;
     END;
     writeln ('La parola più lunga è: ',parole[pos].parola);
END;
BEGIN
     CreaTabella;
     VisualizzaTabella;
     writeln;
     writeln;
     write ('Vuoi visualizzare la parola più lunga? (s/n)  ');
     read (risp);
     IF risp = 's' THEN ParolaPiuLunga;
END.

          writeln;
Data per "buona" la lettura carattere per carattere, ma xchè stampare
carattere per carattere una bella
write(parole[i].parola) mi sembra molto + elegante... cmq il problema è
sempre lo stessoo
scrivere write(parole[i].parola[1]);  significa scrivere tante volte solo il
primo carattere.... Ti dirò di + sei stata fortutana nel dimensionare
stringhe e array se avessi avuto una stringa lunga + di 100 caratteri
avresti avuto un bell'errore in fase di esecuzione e li si sarebbero aperte
le porte del DeBug
Ciao ReDiCuori
------------------------------------------
pascal su IRC : #turbopascal
pascal sul web : 
www.pascallike.cjb.net
------------------------------------------