Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Operazioni sui vettori in C...

    Ciao a tutti, vi posto questo mio semplice e breve codice da me scritto per esercizio...si tratta di eliminare un elemento da un vettore di interi e poi di portarlo in ultima posizione...purtroppo, e non riesco a capirne il motivo, mi scala tutti gli elementi, ma invece di mettermi in ultima posizione il valore 0 mi scrive sempre 3! Mi sapreste dire in cosa sbaglio? Grazie mille...

    #include <stdio.h>
    int main ()

    { int array1[] = {3,5,1,6,8,7,5,3,4,10};
    int array2[10] = {0};
    int i;
    int pos;
    int hold;

    for (i=0; i<10; i++)
    printf ("array1[%d] = %d\n", i, array1[i]);

    printf ("\n");

    for (i=0; i<10; i++)
    printf ("array2[%d] = %d\n", i, array2[i]);

    printf ("\n");

    printf ("Inserisci la posizione dell'elemento che si vuole eliminare dal vettore (0 il primo e 9 l'ultimo):\n");
    scanf ("%d", &pos);

    for (i=0; i<pos; i++)
    array2[i] = array1[i];

    for (i=(pos + 1); i<10; i++)
    array2[i] = array1[i];

    printf ("Il nuovo vettore con l'elemento levato a zero è:\n");

    printf ("\n");

    for (i=0; i<10; i++)
    printf ("array2[%d] = %d\n", i, array2[i]);

    printf ("\n");

    for (i=pos; i<10; i++)
    { hold = array2[i];
    array2[i] = array2[i + 1];
    array2[i + 1] = hold;
    }

    printf ("Il nuovo vettore con l'elemento levato con valore 0 in ultima posizione è:\n");

    for (i=0; i<10; i++)
    printf ("array2[%d] = %d\n", i, array2[i]);

    return 0;

    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    20
    Ma devi necessariamente usare una struttura di appoggio (array2), o è una cosa che hai fatto tu? Perché il problema è risolvibilissimo semplicemente salvandoti in una variabile temporanea il valore da eliminare, shiftare il resto degli elementi, e posizionare il suddetto valore alla fine dell'array.

    EDIT

    Pure perché, non ho ben capito cosa fai lì... Prendi in input la posizione dell'array1 che vuoi eliminare, poi, copi tutti gli elementi restanti in array2, nello stesso ordine, presumo, escludendo la suddetta posizione, ma poi, non metti la posizione alla fine dell'array2, per cui, credo che resta quindi non iniziallizzata.

  3. #3
    ...hai ragione...è un esercizio che mi sono inventato io...ci sono molti modi, hai ragione, per svolgerlo, ma non riesco a capire perchè in posizione array[9] mi mette sempre il valore 3! Perchè ? Non capisco proprio...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    20

    Re: Operazioni sui vettori in C...

    codice:
       [...]
    
       for (i=pos; i<10; i++)
         { hold          = array2[i];
           array2[i]     = array2[i + 1];
           array2[i + 1] = hold;
         }
    
       array2[9]=array1[pos]; 
    
       printf ("Il nuovo vettore con l'elemento levato con valore 0 in ultima posizione è:\n");
    
       for (i=0; i<10; i++)
        printf ("array2[%d] = %d\n", i, array2[i]);
    
      return 0;
    
    }
    La riga in rosso va a mettere proprio il valore che tu avevi eliminato da array1 alla fine di array2.

  5. #5
    ...cavolo! Hai ragione! Ecco perchè! Risolto il tutto con iìl'ultimo ciclo for i<9 e non i<10! Grazie mille...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova a rifare lo stesso esercizio usando la funzione

    memmove

    http://www.cplusplus.com/reference/c...tring/memmove/
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.