Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    12

    Algoritmo di inversione array non funzionante ...


    ho fatto questo algoritmo con funzione main che richiama le function ma non funziona

    codice:
    #include <stdio.h>#include <stdlib.h>
    
    
    void inverti (int *X);
    void scambio (int *a, int *b);
    
    
    
    
    main () {
    
    
    int *X, n, i, *a, *b;
    
    
    
    
    printf("quale è la dimensione del tuo array?");
    scanf("%d", &n);
    X=(int *)malloc(n*sizeof(int));
    
    
    for (i=0; i<n; i++) {
    printf ("Inserisci X[%d]: ", i);
    scanf ("%d", &X[i]);
    }
    
    
    inverti (X);
    
    
    scambio (a,b);
    
    
    
    
    for (i=0; i<n; i++) {
    printf ("X[%d] %d \n", i, X[i]);
    }
    
    
    }
    
    queste sono le function:
    
    void inverti (int *X) {
    
    
    int i, n;
    
    
    for (i=0; i<(n/2); i++) {
    scambio (&X[i], &X[n-1-i]);
    }
    
    
    }
    
    
    
    
    void scambio (int *a, int *b){
    int tmp=*a;
    
    
    *a=*b;
    b=tmp;
    
    
    }

    potete aiutarmi?
    Ultima modifica di LeleFT; 02-01-2015 a 18:42 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Senza costringere la gente a copiarsi il tuo codice, incollarlo in un nuovo progetto, compilarlo ed eseguirlo... dovresti dire precisamente cosa non funziona: ci sono errori in compilazione? Se sì, quali?
    Si verificano errori in esecuzione? Se sì, quali?
    Ottieni risultati errati? Se sì, che risultati e con quali input?

    Insomma... un po' più di informazioni.

    PS: ho aggiunto i tag [CODE] .. [/CODE] al codice. Quando posti del codice, inseriscilo all'interno di questi tag per mantenere indentazione e formattazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Nella funzione inverti utilizzi la variabile n senza averla inizializzata.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    12
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Senza costringere la gente a copiarsi il tuo codice, incollarlo in un nuovo progetto, compilarlo ed eseguirlo... dovresti dire precisamente cosa non funziona: ci sono errori in compilazione? Se sì, quali?
    Si verificano errori in esecuzione? Se sì, quali?
    Ottieni risultati errati? Se sì, che risultati e con quali input?

    Insomma... un po' più di informazioni.

    PS: ho aggiunto i tag
    codice:
     ..
    al codice. Quando posti del codice, inseriscilo all'interno di questi tag per mantenere indentazione e formattazione.


    Ciao.
    Grazie e scusa per le poche informazioni , comunque mi da errori in compilazione usando dev e sono i seguenti :
    In function `void inverti(int*)':
    linea 6 function.c`scambio' undeclared (first use this function)
    In function `void scambio(int*, int*)':
    linea 12 function.c `void scambio(int*, int*)' used prior to declaration
    linea 16 function.c invalid conversion from `int' to `int*'

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    12
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Nella funzione inverti utilizzi la variabile n senza averla inizializzata.
    inizializzare intendi assegnargli un valore? non credo ci sia bisogno perché n è la dimensione dell'array che viene chiesta a chi utilizza l'algoritmo

  6. #6
    Ma la funzione viene a conoscenza in qualche modo della lunghezza della stringa ?
    Tu dichiari n dentro la funzione, e quindi è una variabile locale, che nulla ha a che vedere con quella dichiarata nel main()
    Non credi che dovresti passare alla funzione, oltre al vettore, anche la sua lunghezza ?
    Ultima modifica di Samuele_70; 02-01-2015 a 21:26
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    12
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Esatto, ma la funzione viene a conoscenza in qualche modo del valore di n ?
    tu dichiari n dentro la funzione, e quindi è una variabile locale, che nulla a che vedere con quella dichiarata nel main()
    Non credi che dovresti passare alla funzione, oltre al vettore, anche la sua lunghezza ?
    credo che tu abbia ragione quindi devo fare questo ?
    void inverti (int*X, int n ); NEL MAIN

    void inverti (int *X,int n) NELLA FUNCTION ?


    dopo averlo fatto mi continua a dare ugualmente i seguenti errori

    In function `void inverti(int*)':
    linea 6 function.c`scambio' undeclared (first use this function)
    In function `void scambio(int*, int*)':
    linea 12 function.c `void scambio(int*, int*)' used prior to declaration
    linea 16 function.c invalid conversion from `int' to `int*'

    Ultima modifica di ringo24; 02-01-2015 a 21:39

  8. #8
    Dei modificare anche le dichiarazioni delle funzioni
    Posta il nuovo codice
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    12
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Dei modificare anche le dichiarazioni delle funzioni
    Posta il nuovo codice




    codice:
    #include <stdio.h>
     #include <stdlib.h>
    
    
    void inverti (int *X, int n);
    void scambio (int *a, int *b);
    
    
    
    
    main () {
    
    
    int *X, n, i, *a, *b;
    
    
    
    
    printf("quale è la dimensione del tuo array?");
    scanf("%d", &n);
    X=(int *)malloc(n*sizeof(int));
    
    
    for (i=0; i<n; i++) {
    printf ("Inserisci X[%d]: ", i);
    scanf ("%d", &X[i]);
    }
    
    
    
    inverti (X,n);
    
    
    scambio (a,b);
    
    
    
    
    for (i=0; i<n; i++) {
    printf ("X[%d] %d \n", i, X[i]);
    }
    
    
    }
    e questa è la function

    codice:
    void inverti (int *X,int n) {
    
    
    int i;
    
    
    for (i=0; i<(n/2); i++) {
    scambio (&X[i], &X[n-1-i]);
    }
    
    
    }
    
    
    
    
    void scambio (int *a, int *b){
    int tmp=*a;
    
    
    *a=*b;
    b=tmp;
    
    }
    Ultima modifica di ringo24; 02-01-2015 a 22:24

  10. #10
    Nel main() richiami la funzione scambio passandogli due interi per valore, anziché per riferimento.
    Sempre nella funzione scambio, non devi modificare il valore di b, ma il contenuto dell'intero nell'area di memoria puntata da b.
    codice:
    void scambio (int *a, int *b)
    {
        int tmp=*a;
        *a=*b;
        *b=tmp;
    }
    Ultima modifica di Samuele_70; 02-01-2015 a 22:07
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

Tag per questa discussione

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.