Module: Sottoprogrammi: procedure e funzioni - 1


Problem

12/12

Cambiare Argomenti

Theory Click to read/hide

Problema: scrivi una procedura che scambia i valori di due variabili.
Le peculiarità di questo compito sono che abbiamo bisogno che le modifiche apportate alla procedura diventino note al programma chiamante.

Proviamo a scrivere la procedura in questo modo:

var x, y: numero intero;

procedura Swap(a, b: intero); // con una tale descrizione dei parametri della procedura,
var c: numero intero;
begin // copierà i valori degli argomenti (x e y)
                      // le variabili a e b sono variabili indipendenti non correlate a x e y
c := un;
un := b;
b := c;
FINE;

inizio
  x := 1;
  e := 2;
  Scambia(x, y); //i valori delle variabili x e y (argomenti) vengono copiati nei parametri a e b
  writeln('x = ', x, ', y = ', y); // x=1, y=2
FINE.
Se esegui questo programma, puoi vedere che i valori delle variabili x e y non sono cambiati. Affinché i parametri modifichino i valori degli argomenti, è necessario utilizzare passando i dati per riferimento. Per fare ciò, dopo il nome del tipo di dati nell'intestazione della subroutine, devi inserire la parola var 
procedura Swap(var a, b: intero);   // ora le variabili a e b ottengono gli indirizzi delle variabili x e y in memoria
var c: numero intero 
inizio
c := un;
un := b;
b := c;
FINE;
Utilizzo: se passi un argomento per riferimento, solo il nome della variabile (NON un numero e NON un'espressione aritmetica) può trovarsi in questa posizione quando chiami la procedura!< br />
NON chiamare una procedura come questa:
Scambia(x, 4);
Scambia(5+x, y);

Problem

Scrivi una procedura che scambia i valori di due variabili.

Trova e correggi gli errori in questa procedura