Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24

    [c]Eliminare elemento da vettore

    Salve a tutti non ho ben chiaro come posso cancellare un elemento da un vettore,qualcuno potrebbe darmi delucidazioni ?
    cerco di sezionare il codice sul quale sono più dubbioso:

    questa è la dichiarazione struct typedef e ind e biblioteca sono variabili globali
    codice:
    typedef struct{    char cognome[stringa];
        char nome[stringa];
        char titolo[stringa];
        char casa[stringa];
        int anno;
        int codice;
    }Libro;
    
    
    int ind=0;
    Libro biblioteca[dim];
    questo e' lo switch dove viene invocata
    codice:
    case 4:            visualizza();
                printf("Inserisci il codice\n");
                scanf("%d" ,&canc);
    
    
                cancella(canc);
    
    
                break;
            }
    questa è la funzione di "eliminazione" dell'elemento:
    codice:
    void cancella(int wcancellato)
    {
        int i;
    
    
        for(i=wcancellato; i<ind-1; i++)
            biblioteca[i]=biblioteca[i+1];
    }
    In realtà io però non elimino proprio un bel nulla.


    qualunque critica e\o consiglio è ben accetta\o
    Non posto il codice completo per evitare la paginona, in caso serve lo posto volentieri grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Un vettore è rappresentato da un'area di memoria. Non c'è un modo semplice di eliminare un elemento del vettore. Dovrai effettuare delle operazioni di

    1) spostamento dei dati successivi di un elemento in su

    2) ridimensionamento del vettore con la realloc
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24
    Se non è di disturbo posso chiedere qualche aiutino in più? in caso grazie lo stesso

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24
    ce l'ho fatta grazie lo stesso per i consigli

    vi posto il codice nel caso qualcuno avesse lo stesso problema :

    codice:
    #include <stdio.h>#include <stdlib.h>
    #include <string.h>
    
    
    #define stringa 50
    #define dim 500
    
    
    typedef struct{
        char cognome[stringa];
        char nome[stringa];
        char titolo[stringa];
        char casa[stringa];
        int anno;
        int codice;
    }Libro;
    
    
    int ind=0;
    Libro biblioteca[dim];
    
    
    void inserisci(Libro);
    void visualizza_libro(Libro);
    void visualizza(void);
    void cancella(int);
    int ricerca(char[]);
    int ricerca_int(int);
    void shift(int);
    
    
    int main(void)
    {
        int i;
        int scl;
        int qnt;
        int x;
        Libro l={"Manfredi","Massimo Valerio","Le idi di marzo","Arnoldo Mondadori",1234,1234567};
        char cercato[stringa];
        int trv;
        int segn=-1;
        int risp=-1;
        int canc;
        int men;
    
    
        do{
            printf("\n************************\n");
            printf("1)Visualizza libri presenti\n");
            printf("2)Inserisci nuovi libri\n");
            printf("3)Ricerca un libro\n");
            printf("4)Cancella un libro\n");
            scanf("%d" ,&scl);
            if(scl < 0 || scl > 4)
                printf("hai inserito dei valori invalidi\n");
    
    
            switch(scl)
            {
            case 1:
                visualizza();
                break;
    
    
            case 2:
                printf("\nCompila i seguenti campi:\n");
                while(men != -1)
                {
                    printf("Cognome:\n");
                    scanf("%s" ,&l.cognome);
                    printf("Nome:\n");
                    scanf("%s" ,&l.nome);
                    printf("Titolo:\n");
                    scanf("%s" ,&l.titolo);
                    printf("Casa editrice:\n");
                    scanf("%s" ,&l.casa);
                    printf("Anno:\n");
                    scanf("%d" ,&l.anno);
                    printf("Codice:\n");
                    scanf("%d" ,&l.codice);
                    printf("Inserire -1 per terminare, 0 per continuare\n");
                    scanf("%d" ,&men);
                    inserisci(l);
                }
                break;
    
    
            case 3:
                do{
                    printf("\n***********************\n");
                    printf("1)Ricerca per autore, titolo, casa editrice\n");
                    printf("2)Ricerca per anno, codice\n");
                    printf("0)torna al menu' precedente\n");
                    scanf("%d" ,&x);
    
    
                    switch(x)
                    {
                    case 1:
                            printf("Inserisci cosa vuoi ricercare:\n");
                            scanf("%s" ,&cercato);
                            risp=ricerca(cercato);
                            if(risp != -1)
                                printf("Hai cercato %s, che si trova alla posizione %d\n",cercato,risp);
                            else
                                printf("Non hai trovato nessun elemento corrispondente\n");
                        break;
    
    
                    case 2:
                        printf("inserisci l'elemento da cercare:\n");
                        scanf("%d" ,&trv);
                        segn=ricerca_int(trv);
                       if(segn != -1)
                        printf("L'elemento cercato:%d si trova nella posizione :%d" ,trv,segn);
                       else
                        printf("L'elemento %d non e' stato riscontrato" ,cercato);
                        break;
                    }
    
    
                }while(x != 0);
    
    
            case 4:
                visualizza();
                printf("Inserisci il codice\n");
                scanf("%d" ,&canc);
    
    
                cancella(canc);
    
    
                break;
            }
        }while(scl != 0);
    
    
        return 0;
    }
    
    
    void inserisci(Libro wbook)
    {
        biblioteca[ind]=wbook;
        ind++;
    }
    
    
    void visualizza(void)
    {
        int i;
    
    
        for(i=0; i<ind; i++)
        {
            printf("\nLibro numero: %d\n" ,i+1);
            visualizza_libro(biblioteca[i]);
        }
    }
    
    
    void visualizza_libro(Libro wbook)
    {
        printf("Cognome:%s\nNome:%s\nTitolo:%s\nCasa Editrice:%s\nAnno;%d\nCodice:%d\n" ,wbook.cognome, wbook.nome, wbook.titolo, wbook.casa, wbook.anno, wbook.codice);
    }
    
    
    int ricerca(char wcercato[])
    {
    
    
        int i=0;
        int scl;
        int trovato=0;
    
    
        while(trovato == 0 && i<=ind)
        {
            if(strcmp(wcercato, biblioteca[i].cognome)==0)
                trovato=1;
            else if(strcmp(wcercato, biblioteca[i].nome)== 0)
                trovato=1;
            else if(strcmp(wcercato, biblioteca[i].titolo)== 0)
                trovato=1;
            else if(strcmp(wcercato, biblioteca[i].casa)== 0)
                trovato=1;
            i++;
        }
    
    
        if(trovato == 1)
            return i;
        else
            return -1;
    }
    
    
    
    
    int ricerca_int(int wcercato)
    {
        int trovato=0;
        int i=0;
    
    
        while(trovato == 0 && i<ind)
        {
            if(biblioteca[i].anno == wcercato)
                trovato=1;
            else if(biblioteca[i].codice == wcercato)
                trovato=1;
            i++;
        }
    
    
        if(trovato == 1)
                return i;
        else
                return -1;
    }
    
    
    void cancella(int wcancellato)
    {
        int i;
        int pos_canc=-1;
    
    
        pos_canc=ricerca_int(wcancellato);
        if(pos_canc != -1)
        {
            shift(pos_canc);
            ind--;
        }
    
    
        else
            printf("Non hai trovato nessun elemento corrispondente\n");
    }
    
    
    void shift(int qcancellato)
    {
        int i;
    
    
        for(i=qcancellato; i<ind; i++)
        {
            biblioteca[i]=biblioteca[i+1];
        }
    }

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.