Salve a tutti,
sono alle primissime armi, ho fatto un esercizio che funziona in tutti i suoi quesiti richiesti meno l'ultimo (anche se sicuramente anche dove funziona non è il massimo nella risoluzione, ma ripeto sono alle primissime armi)
Ecco il testo:
******************************
Negozio dei cellulari
Si consideri un archivio dei cellulari contenente 100 modelli conservato in un archivio S:
Codice numerico del modello (progressivo univoco da 1 a 100)
Durata batteria
Peso
Prezzo acquisto
Numero totale di pezzi
Esistano 2 negozi, ognuno con il suo archivio del magazzino (rispettivamente N1, N2 di MAX 1.000 elementi l'uno) dei cellulari arrivati:
Codice numerico del modello (lo stesso dell'archivio S)
Prezzo di vendita unitario
Numero pezzi arrivati di questo modelli
N.B.: di un modello possono arrivare anche 2 stock con differente numero di pezzi
ESERCIZIO BASE
Scrivere in C un programma che:
1) Legge da tastiera le informazioni relative ai 100 modelli di cellulari mettendo il numero totale a 0.
2) Legge da tastiera il nome del negozio e chiama una funzione "magazzino" che legge da tastiera, in ordine casuale, ed inserisce nell'archivio gli arrivi.
3) Chiama una funzione "aggiorna" S che aggiorna il numero totale di pezzi arrivati nel negozio precedente nell'archivio dei cellulari S.
4) Chiama una funzione "ordina" che ordina gli archivi N1 ed N2 in base al Prezzo di vendita unitario e rende il valore totale dei cellulari presenti in quel magazzino.
ESERCIZIO 1
Inserire nel programma una funzione “Merce” che crea un vettore ordinato in base al prezzo di vendita unitario in cui sono presenti gli articoli di entrambi i negozi.
ESERCIZIO 2
Scrivere una funzione che costruisce 2 liste (L1 ed L2) contenenti rispettivamente tutti cellulari presenti nel magazzino N1 con peso superiore a 100 e minore di 100.
NB: le variabili usate devono essere locali e non è necessario controllare la correttezza dei dati in input.
************************************************** ***********
ecco come ho risolto l'ultimo quesito, inizialmente le definizioni delle SD:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int codice_modello;
int durata_batteria;
int peso;
float prezzo_acquisto;
int tot_pezzi_modello;} scheda_cellulare;
typedef struct {
scheda_cellulare c;
float prezzo_vendita;
int pezzi_arrivati_modello;} scheda_magazzino;
#define Smax 100
#define Nmax 1000
typedef scheda_cellulare S[Smax];
typedef scheda_magazzino N[Nmax];
struct nodo{
scheda_magazzino cellulare;
struct nodo *next;};
void crealista(N Neg, int numero_arrivi) {
struct nodo *testaL1;
struct nodo *nuovoElementoL1;
testaL1=NULL;
struct nodo *testaL2;
struct nodo *nuovoElementoL2;
testaL2=NULL;
int i;
for(i=0;i<numero_arrivi;i++) {
if(Neg[i].c.peso>100)
{
nuovoElementoL1=(struct nodo*)malloc(sizeof(struct nodo));
nuovoElementoL1->cellulare=Neg[i];
nuovoElementoL1->next=testaL1;
testaL1=nuovoElementoL1;
}
else if(Neg[i].c.peso<100)
{
nuovoElementoL2=(struct nodo*)malloc(sizeof(struct nodo));
nuovoElementoL2->cellulare=Neg[i];
nuovoElementoL2->next=testaL2;
testaL2=nuovoElementoL2;
}
}
struct nodo *tmp; //stampa della lista
tmp=testaL1;
while(tmp!=NULL)
{
printf("%d ",tmp->cellulare.c.codice_modello);
tmp=tmp->next;
}
}
Credo che ci sia un errore negli if , ma non sono riuscito a trovarlo.
Grazie mille