Newsgroup: it.comp.lang.pascal
Titolo: procedure, funzioni e array...

Salve a tutti.
Attualmente sto scrivendo un programma in Pascal (standard) e sto
sbattendo la testa contro la scarsa flessibilita' e/o la mia scarsa
conoscenza del linguaggio. Scrivo al ng, quindi, per chiarirmi le
idee. 
- Partiamo da un problema di filosofia di programmazione: devo fare un
programma costituito da varie procedure che manipolano un vettore; mi
sorgono spontanee queste domande: se voglio fare un programma
flessibile, leggibile ad hoc, insomma, come dovrei impostare la sua
struttura?
1) Dichiaro il vettore nell'intestazione del programma e costruisco
delle procedure/funzioni (quale delle due e' meglio?)  in cui il
vettore NON compare nella lista del parametri:
program prova(input,output);
type
      vettore = array[1..100] of integer;
var 
    Q : vettore;
procedure manipola_vettore;
begin 
end;
begin
manipola_vettore;
...
end.
2) Dichiaro il vettore nell'intestazione del programma e lo metto in
elenco nella lista dei parametri delle procedure che lo manipolano:
program prova (input,output);
type
      vettore = array[1..100] of integer;
var 
     Q : vettore;
procedure manipola_vettore (A : vettore);
begin 
end;
begin
manipola_vettore(Q);
...
end.
3) Costruisco nel programma principale una funzione che crea un
vettore (chissa' come) e lo restituisce all'ambiente in modo che altre
procedure/funzioni possano manipolarlo...questo non so proprio se e'
possibile farlo, ed in tal caso come. 
Nella progettazione di questo programma ho provato tutti e tre gli
approci., e ho riscontrato molti problemi:
Il numero 1) e' orribile proprio da leggere, inoltre non ho mai la
sicurezza di aver fatto le cose giuste.
Il numero 2) e' abbastanza buono, pero' ho riscontrato un problema nel
passaggio degli array alle procedure: non posso passare alle procedure
array di lunghezza diversa! In Pascal non c'e' modo di rendere
flessibile una procedura in modo da poter accettare array di qualsiasi
lunghezza!!! Se conoscete un metodo funzionante, per piacere ditemelo!
Il numero 3) e' l'approcio che desidero tentare, pero' ho riscontrato
questi problemi: non posso costruire una funzione che CREA un array,
ossia una funzione che prende in entrata il minimo ed il massimo
dell'array e restituisce un array di quelle dimensioni, infatti le
funzioni non possono restituire array come valori...non so proprio
come fare...
- Un altro problema che ho riscontrato e' dovuto al fatto che le
funzioni possono restituire solo un valore, quando piu' di qualche
volta mi sarebbe stato comodo restituire piu' valori...

 volta mi sarebbe stato comodo restituire piu' valori...
spiegati meglio, illustra il caso specifico !
ciao !

te definito, come
No, non si puo' proprio, ho gia' provato e riprovato: non puoi
restituire ne' record e nemmeno vettori/matrici.
Alla prossima

spiegati meglio, illustra il caso specifico !
Ad esempio voglio fare una procedura che prende in ingresso un array
di interi e restituisce due interi che sono il valore piu' grande e
quello piu' piccolo trovato nell'array. In Pascuale non posso farlo!
function Non_si_puo (array[1..100] of integer) : (min,max:integer);
begin
...
end;

 end;
Come no ?
procedure Certo_che_si_può(vettore:array[1..100] of integer) :
(min,max,i:integer);
  begin
       for  i:=1 to 100 do begin
           if vettore[i] > vettore[i] + 1 then
               max:= vettore[i]
           else max:= vettore[i] + 1;
       end;
       for i:=1 to 100 do begin
           if vettore[i] < vettore[i] + 1 then
                min:= vettore[i]
           else  min:=vettore[i] + 1;
       end;
end;
Non è il modo più veloce infatti si può fare tutto con un solo ciclo ma non
mi va di cervellarmi.
ciao !

end;
Dici di si? Beh, vado subito a provare cosa viene fuori e se hai
ragione ti ringrazio mille volte.
Un grazie anche a Morpheus.

Salve a tutti.
Sempre riguardo alle funzioni, alle procedure ecc, ho notato che con
il Tp 7.0 ho ragione io. Cioe' non si puo' fare nulla. I tipi
restituibili sono i soliti: interi, reali, booleani, caratteri,
stringhe, tipi enumerativi e subrange e puntatori. Nulla che puzzi di
array o record. 
Usando il Think Pascal per mac all'universita' ho constatato che si
puo restituire sia un record od un array e sia piu' di un valore.
Insomma posso fare un po' tutto. Mi domando comunque se il Pascal
standard preveda l'eventualita' di restituire record, array o piu'
valori. Personalmente non ho mai letto da nessuna parte qualcosa del
genere, anceh perche' il libro che uso (Programmare in Pascal di Peter
Grogono) e' un libro di merda. 

 restituire ne' record e nemmeno vettori/matrici.
Allora l'unico modo è passare un parametro by reference che contiene il
risultato