Controllare se un elemento è già stato inserito in un array

di il
22 risposte

Controllare se un elemento è già stato inserito in un array

So che potrebbe sembrare una discussione già aperta molte volte, ma nelle altre risposte non ho capito molto bene le spiegazioni, dato che sono ancora agli inizi... L'argomento sono le strutture. L'esercizio è il seguente:

Scrivere un programma C che gestisca l’archivio dei componenti presenti in un magazzino. Il programma deve lavorare su un vettore (componenti) di strutture, dove ognuna di queste contiene le informazioni su un componente: identificativo del componente, nome del componente, quantità del componente presente in magazzino. Gestire poi un ulteriore vettore (ordini) di strutture dove ognuna di queste contiene le informazioni relative a un ordine di acquisto: identificativo ordine, identificativo componente, quantità richiesta. Il programma deve:
-Aggiungere un nuovo componente nell’archivio componenti (quindi nuovo identificativo, nuovo nome e nuova quantità iniziale) stampando un messaggio di errore se il componente è già presente o se l’archivio è pieno
- Dato l’identificativo di un componente stamparne il nome e la quantità disponibile se il componente è presente, un messaggio di errore in caso contrario
Dato l’identificativo di un componente modificare la quantità disponibile stampando un messaggio di errore se il componente non è presente nell’archivio
- Stampare tutte le informazioni dell’archivio nell’ordine con cui sono inserite
- Aggiungere un nuovo ordine nell’archivio ordini (quindi nuovo identificativo ordine, nuovo identificativo componente e nuova quantità richiesta) stampando un messaggio di errore se l’ordine è già presente o se l’archivio è pieno
- Verificare se gli ordini possono essere evasi, cioè se la quantità richiesta è inferiore a quella presente in magazzino, nel qual caso aggiornare le informazioni di magazzino e cancellare tutti gli ordini.

Ora, non voglio che mi diate la soluzione diretta, volevo arrivarci io. Il mio sorgente è questo:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct magazzino {
	
	int identificativoComponente[5];
	int nomeComponente[30];
	int quantitaComponente[1000];
	
};

	struct magazzino componenti[1500];
	
struct vendita {
	
	int identificativoOrdine[50];
	int identificativoComponenteOrdine[5];
	int quantitaOrdine[1000];
	
};

	struct vendita ordine[1500];
	
 int main()
 
 {
 	
 	int i;
	char k;
 	int esci = 0;
 	
	 	do{ 	
	 	
 			printf("Inserire il codice identificativo del componente (massimo 5 caratteri): ");
 			scanf("%s", componenti[i].identificativoComponente);
 			componenti[i].identificativoComponente = 1;
 				for( k = 0; k < 5; k++)
 				{
 					if(componenti[i].identificativoComponente == k)
 					{
 						printf("Errore! Il codice e\' gia' stato inserito!\n");
 					}
 				}
 			
 		
 		
 			printf("Inserire il nome del componente: ");
 			scanf("%s", componenti[i].nomeComponente);
 			printf("Inserire la quantita' del componente: ");
 			scanf("%s", componenti[i].quantitaComponente);
 		
 			
 		
 		} 	while (esci == 0);
 	
 	
 		printf("Il numero e\' %d", componenti[i].identificativoComponente);
 	
 	
 		system("pause");
 		return 0;
 		
 		
 }
Innanzitutto vorrei sottolineare che sto facendo per ora la prima parte, quella del controllo se l'elemento è già stato inserito nell'array... Quindi vi chiedo, potreste dirmi cosa c'è che non va? In pratica l'errore che mi si genera è:
[Error] incompatible types in assignment of 'int' to 'int [5]' (alla linea 37).

Inoltre, riuscireste a darmi qualche suggerimento per i punti successivi? Io sinceramente faccio molta fatica...
Vi ringrazio anticipatamente per la disponibilità, spero in una vostra mano.

22 Risposte

  • Re: Controllare se un elemento è già stato inserito in un array

    Praticamente lo stesso esercizio di questa discussione

    https://www.iprogrammatori.it/forum-programmazione/cplusplus/aiuto-programma-con-devc-t18457.html


    Che succede, tutti i professori danno lo stesso compito a tutti?
  • Re: Controllare se un elemento è già stato inserito in un array

    @oregon, sì, non lo conosco ma penso sia del mio stesso corso di Laurea in Ingegneria e Scienze Informatiche perché uno degli esercizi settimanali è identico a quello.
    Comunque, questo influisce sulla mia domanda? Non penso sia un problema sinceramente...
  • Re: Controllare se un elemento è già stato inserito in un array

    Intanto non capisco perché nella struct magazzino ci sono degli array di interi, e addirittura il nome del componente è un array di interi.

    Può darsi che sia perché credi che il codice possa essere alfanumerico o numerico ma con degli spazi (e in tal caso la scanf non funzionerebbe in nessun caso), ma comunque a quel punto converrebbero dei vettori di char che occupano 1/4 dello spazio.

    Ora non ho tempo per leggere tutto il codice, ma intanto spiegami questa cosa, può anche darsi che hai ragione, e domani controllo il resto.

    ciao
  • Re: Controllare se un elemento è già stato inserito in un array

    Pazzo ha scritto:


    Comunque, questo influisce sulla mia domanda? Non penso sia un problema sinceramente...
    No, assolutamente, perché lo credi?

    Era solo perché in uno di quei link c'è il codice completo dell'esercizio, sebbene anche in quello ci siano problemi.

    In ogni caso, il tuo problema deriva da

    int identificativoComponente[5];

    che dovrebbe un solo intero

    int identificativoComponente;

    e non vettore di interi.
  • Re: Controllare se un elemento è già stato inserito in un array

    dvaosta ha scritto:


    Intanto non capisco perché nella struct magazzino ci sono degli array di interi, e addirittura il nome del componente è un array di interi.
    Ciao, ti ringrazio intanto per la risposta. Comunque se devo essere sincero non lo so, cioè più che altro sono io che sono abituato a mettere sempre int... E il fatto che i char occupano meno lo sapevo, solo che non ci penso mai durante la scrittura ed è un difetto che devo iniziare a sistemare...
  • Re: Controllare se un elemento è già stato inserito in un array

    oregon ha scritto:


    Pazzo ha scritto:


    Comunque, questo influisce sulla mia domanda? Non penso sia un problema sinceramente...
    No, assolutamente, perché lo credi?

    Temevo che non mi rispondeste per il semplice fatto che qualcuno aveva già fatto la domanda... E purtroppo nemmeno quel codice funziona bene...

    Comunque, ho tolto il [5], solo che ora crasha all'avvio...
  • Re: Controllare se un elemento è già stato inserito in un array

    Pazzo ha scritto:


    E purtroppo nemmeno quel codice funziona bene...
    Lo hai già provato? O lo conoscevi?
    Comunque, ho tolto il [5], solo che ora crasha all'avvio...
    Certo ... perché i all'inizio del programma non ha nessun valore ...
  • Re: Controllare se un elemento è già stato inserito in un array

    oregon ha scritto:


    Lo hai già provato? O lo conoscevi?
    L'ho provato, ma prima ero un po' scazz*to di mio, quindi c'è caso che appena ho visto un errore abbia chiuso... Ora lo riprovo con calma.
    Certo ... perché i all'inizio del programma non ha nessun valore ...
    Vero, ma anche dopo l'inizializzazione a 0 lui non va avanti. Cioè, mi spiego meglio... Il programma si apre, mi chiede di inserire il codice di identificazione, e dopo averlo scritto e premuto invio crasha, mentre invece dovrebbe andare avanti a chiedere il nome componente ecc...
  • Re: Controllare se un elemento è già stato inserito in un array

    Tutti i dati di cui fai l'input li consideri stringhe dato che usi

    %s

    nelle scanf. Però tutti gli elementi sono int e non char ...
  • Re: Controllare se un elemento è già stato inserito in un array

    oregon ha scritto:


    Tutti i dati di cui fai l'input li consideri stringhe dato che usi

    %s

    nelle scanf. Però tutti gli elementi sono int e non char ...
    ... Li ho messi adesso tutti a char, ma niente... Continua a crashare... Non so più come fare
  • Re: Controllare se un elemento è già stato inserito in un array

    Ovvero? Qual è il codice adesso?
  • Re: Controllare se un elemento è già stato inserito in un array

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    struct magazzino {

    char identificativoComponente;
    char nomeComponente[30];
    char quantitaComponente[1000];

    };

    struct magazzino componenti[1500];

    struct vendita {

    char identificativoOrdine;
    char identificativoComponenteOrdine[5];
    char quantitaOrdine[1000];

    };

    struct vendita ordine[1500];

    int main()

    {

    char i = 1;
    char k;
    char esci = 0;

    do{

    printf("Inserire il codice identificativo del componente (massimo 5 caratteri): ");
    scanf("%s", componenti.identificativoComponente);
    componenti.identificativoComponente = 1;
    for( k = 0; k < 5; k++)
    {
    if(componenti.identificativoComponente == k)
    {
    printf("Errore! Il codice e\' gia' stato inserito!\n");
    }
    }



    printf("Inserire il nome del componente: ");
    scanf("%s", componenti.nomeComponente);
    printf("Inserire la quantita' del componente: ");
    scanf("%s", componenti.quantitaComponente);



    } while (esci == 0);


    printf("Il numero e\' %d", componenti.identificativoComponente);


    system("pause");
    return 0;


    }

    PS: grazie ancora per l'aiuto che mi stai dando, grazie mille.
  • Re: Controllare se un elemento è già stato inserito in un array

    Beh, a questo punto, se sono array di char, anche il primo deve avere una dimensione

    char identificativoComponente[5];

    (forse prima era così ma doveva essere un char non un int ... sembra che non lo stia scrivendo tu questo programma o che vada veramente a caso ...).

    E poi questo

    componenti.identificativoComponente = 1;

    non ha senso ...
  • Re: Controllare se un elemento è già stato inserito in un array

    oregon ha scritto:


    Beh, a questo punto, se sono array di char, anche il primo deve avere una dimensione

    char identificativoComponente[5];

    (forse prima era così ma doveva essere un char non un int ... sembra che non lo stia scrivendo tu questo programma o che vada veramente a caso ...).

    E poi questo

    componenti.identificativoComponente = 1;

    non ha senso ...


    Il fatto è che è il primo esercizio che facciamo con le strutture, e ancora non mi sono chiarissime... Non vado proprio a caso, però non so nemmeno bene cosa stia facendo... Comunque fino a qui l'ho scritto io.
    Ecco, sul fatto dell'assegnamento ho un dubbio: se non posso usare questo metodo, come posso fare per dire se esiste già un elemento uguale all'interno dell'array? In effetti quell'assegnamento non ha senso, ma non mi viene nessun altro metodo in mente...
Devi accedere o registrarti per scrivere nel forum
22 risposte