Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    15

    Delphi : passare un array a una funzione

    Salve a tutti.
    Ho un problema che non risco a risolvere e spero che qualch'uno mi possa aiutare.
    Il problema è che devo passare un array a una funzione in un file di libreria per eliminare i valori doppi.
    questa è la dichiarazione della funzione nel file di libreria

    prima dichiaro il tipo
    type
    TIntegerArray = array of Integer;
    poi la funzione
    procedure RemoveDuplicatesArrayInt(var aMatrice:TIntegerArray) ;

    Nel programma prima dichiaro il tipo
    type
    TIntegerArray = array of Integer;
    poi dichiaro l'array
    ele: TIntegerArray;

    poi chiamo la funzione
    RemoveDuplicatesArrayInt(ele) ;


    quando compilo mi da questo errore:
    [Error] Main.pas(335): Types of actual and formal var parameters must be identical

    se la funzione la inserisco nello stesso file del programma funziona correttamente.

    non capisco perchè mi dice che non è uguale la chiamata alla funzione alla dichiarazione.

    Se qualch'uno mi può aiutare grazie in anticipo

  2. #2
    type AInteger= array of Integer; // Array di Integer
    type PAInteger= ^AInteger; // Puntatore all'array di Integer


    var
    AAInteger: AInteger;
    begin
    SetLength(AAInteger, 1);
    Svuota(@AAInteger);
    end;

    procdure Svuota(AAInteger: PAInteger);
    begin
    SetLength(AAInteger^, 0);

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    15
    Grazie per la risposta ma i puntatori mi sono ostici.
    Quello che vorrei fare è questo:

    type
    TIntegerArray = array of Integer;

    ele: TIntegerArray;
    RemoveDuplicatesArrayInt(ele); // funzione chiamante dal programma


    // funzioni chiamate contenute in un file libreria collegato con use
    procedure RemoveDuplicatesArrayInt(var aMatrice : TIntegerArray) ;
    {
    elimina valori duplicati ridimensionando l'array
    parametri:
    aMatrice: matrice da cui eliminare gli elementi duplicati
    }
    var
    a:integer;
    pos:integer;
    // h:integer;
    begin
    a:=0;
    for a:=0 to High(aMatrice) do
    begin
    pos:=a+1;
    repeat
    if (aMatrice[a]<>aMatrice[pos]) and (pos<100) then
    begin // se diverso passo a quello dopo
    pos:=pos+1;
    end
    else // se uguale
    begin
    // h:= High(aMatrice);
    DeleteArrayElement(pos,aMatrice);
    end;
    until pos > High(aMatrice);
    end;
    end;

    procedure DeleteArrayElement(const Index: Integer; var ele: TIntegerArray);
    { elimina un elemento da una matrice di interi
    parametri:
    Index: posiszione dell'elemento
    aMatrice: matrice da cui eliminare l'elemento
    }
    var
    Size: Integer;
    begin
    Size:= SizeOf(Integer) * (High(ele) - Index);
    Move(ele[Succ(Index)], ele[Index], Size);
    SetLength(ele, High(ele));
    end;


    Con le modifiche che mi proponi mi scovolge tutte le funzioni e non saprei come modificarle con i puntatori

    Qualche idea ??

    Grazie

  4. #4
    Secondo me il mio metodo non è di difficile lettura, anzi.
    In questo modo: @Ciao, è chiaro che stai passando il puntatore all'array anziché la copia dell'array (metti che stai rileggendo il codice dopo mesi, in questo modo lo si capisce al volo.)
    In questo modo Ciao^, è chiaro che stai accedendo all'array attraverso il suo puntatore.

    Io uso questo metodo da anni, in Delphi e Freepascal. Condivido inoltre il codice con altri che confermano essere di semplice ed immediata lettura.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Re: Delphi : passare un array a una funzione

    Io credo che ci sia da concentrarsi su questo punto:

    Originariamente inviato da Biulk
    se la funzione la inserisco nello stesso file del programma funziona correttamente.
    Cosa hai voluto dire?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    15
    Intendo dire che se la funzione è in un file esterno che importo con la clausola "use" non funziona, se la inserisco come funzione del programma si.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.