Testo dell'esercizio
scrivere un programma che definisca ed inizializzi le variabili necessari per memorizzare:
1)un elenco di interi : codici, ciascuno dei quali rappresenta il codice di un prodotto.
2)un elenco di stringhe : descr, ogni stringa rappresenta la descrizione di un prodotto.
3)Un elenco di numeri reali : prezzi ciascuno dei quali rappresenta il prezzo di un prodotto
il programma deve poi permettere di eseguire, attraverso un menu, le seguenti operazioni:
1)data in input il codice di un prodotto, se è presente nell'elenco dei codici visualizzare la sua descrizione ed il suo prezzo, altrimenti visualizzare il messaggio “codice non presente”(funzione ricerca).
2)Dato in input il codice di un prodotto, se esso è presente nell'elenco dei codici modificare il suo prezzo aumentandolo del 10%(funzione ricerca).
3)Dato in input un prezzo visualizzare il codice e la descrizione di tutti i prodotti aventi quel prezzo.
4)Definire una funzione trasforma che ricevendo una stringa sostituisce tutti gli spazi con dei caratteri _.
5)dati input un prezzo_min e un prezzo_max salvare in due nuovi elenchi il codice ed i prezzi di tutti i prodotti che hanno il prezzo compreso tra prezzo_min e prezzo_max, ordinare i due elenchi per ordine decrescete di prezzo e visualizzarli.
mostra soluzione
/*
CLAUDIO CARDINALE 3AI
scrivere un programma che definisca ed inizializzi le variabili necessari per memorizzare:
1)un elenco di interi : codici, ciascuno dei quali rappresenta il codice di un prodotto.
2)un elenco di stringhe : descr, ogni stringa rappresenta la descrizione di un prodotto.
3)Un elenco di numeri reali : prezzi ciascuno dei quali rappresenta il prezzo di un prodotto
il programma deve poi permettere di eseguire, attraverso un menu, le seguenti operazioni:
1)data in input il codice di un prodotto, se è presente nell'elenco dei codici visualizzare la sua descrizione ed il suo prezzo, altrimenti visualizzare il messaggio “codice non presente”(funzione ricerca).
2)Dato in input il codice di un prodotto, se esso è presente nell'elenco dei codici modificare il suo prezzo aumentandolo del 10%(funzione ricerca).
3)Dato in input un prezzo visualizzare il codice e la descrizione di tutti i prodotti aventi quel prezzo.
4)Definire una funzione trasforma che ricevendo una stringa sostituisce tutti gli spazi con dei caratteri _.
5)dati input un prezzo_min e un prezzo_max salvare in due nuovi elenchi il codice ed i prezzi di tutti i prodotti che hanno il prezzo compreso tra prezzo_min e prezzo_max, ordinare i due elenchi per ordine decrescete di prezzo e visualizzarli.
*/
#include<stdio.h>
#include<string.h>
#define MAX 1000
#define LEN 100
int codici[MAX];
char descr[MAX][LEN];
float prezzi[MAX];
int codici2[MAX];
float prezzi2[MAX];
int acquisizione(void);
int ricerca(int ele,int l);
void presenza(int codice,int l);
void mod(int codice, int l);
void prezzo_u(float prezzo, int l);
void trasforma(int pos);
void ordina(int l);
void min_max(float min,float max,int l);
int main(){
int l,scelta,codice,i;
float prezzo,prezzo_min,prezzo_max;
l = acquisizione();
do{
do{
printf("0) uscita\n1) ricerca un elemento in base al codice e ne visualizza la sua descrizione e prezzo\n2) incrementa un prezzo del 10\n3) visualizza la descrizione ed il codice di tutti i prodotti aventi uno stesso prezzo fornito in input\n4) trasforma tutti gli spazi in _\n5) dato un minimo ed un massimo vsiualizzi tutti i prezzi ed i codici ordinati per ordine descrescente\nscelta : ");
scanf("%d",&scelta);
}while(scelta<0 || scelta>5);
switch(scelta){
case 1:
printf("inserire il codice dell'elemento da cercare : ");
scanf("%d",&codice);
presenza(codice,l);
break;
case 2:
printf("inserire il codice dell'elemento da cercare : ");
scanf("%d",&codice);
mod(codice,l);
break;
case 3:
printf("inserire il prezzo degli elementi da cercare : ");
scanf("%f",&prezzo);
prezzo_u(prezzo,l);
break;
case 4:
for(i=0;i<l;i++)
trasforma(i);
break;
case 5:
printf("inserire il prezzo minimo : ");
scanf("%f",&prezzo_min);
printf("inserire il prezzo massimo : ");
scanf("%f",&prezzo_max);
min_max(prezzo_min,prezzo_max,l);
break;
}
}while(scelta>=1 && scelta<=5);
}
int acquisizione(void){
int l,i;
do{
printf("inserire il numero di prodotti : ");
scanf("%d",&l);
}while(l<1 || l>=MAX);
for(i=0;i<l;i++){
printf("inserire il codice del prodotto numero %d : ",i+1);
scanf("%d",&codici[i]);
getchar();
printf("inserire la descrizione del prodotto numero %d : ",i+1);
gets(descr[i]);
printf("inserire il prezzo del prodotto numero %d : ",i+1);
scanf("%f",&prezzi[i]);
}
}
int ricerca(int ele,int l){
int i;
for(i=0;codici[i]!=ele && i<l;i++);
if(codici[i] == ele)
return i;
return -1;
}
void presenza(int codice,int l){
int pos;
pos = ricerca(codice,l);
if(pos>=0)
printf("%s - %f\n",descr[pos],prezzi[pos]);
else
printf("codice non presente\n");
}
void mod(int codice, int l){
int pos;
pos = ricerca(codice,l);
if(pos>=0)
prezzi[pos] = prezzi[pos]+prezzi[pos]/100*10;
}
void prezzo_u(float prezzo, int l){
int i;
for(i=0;i<l;i++)
if(prezzi[i]==prezzo)
printf("%d - %s\n",codici[i],descr[i]);
}
void trasforma(int pos){
int i,l;
l = strlen(descr[pos]);
for(i=0;i<l;i++)
if(descr[pos][i] == ' ')
descr[pos][i] = '_';
}
void ordina(int l){
int i,k,aux;
float aux2;
do{
k = 0;
for(i=0;i<l;i++)
if(prezzi2[i] < prezzi2[i+1]){
aux = codici2[i+1];
codici2[i+1] = codici2[i];
codici2[i] = aux;
aux2 = prezzi2[i+1];
prezzi2[i+1] = prezzi2[i];
prezzi2[i] = aux2;
k = i+1;
}
l = k;
}while(k);
}
void min_max(float prezzo_min,float prezzo_max,int l){
int i,j=0;
for(i=0;i<l;i++)
if(prezzi[i]>=prezzo_min && prezzi[i]<=prezzo_max){
codici2[j] = codici[i];
prezzi2[j++] = prezzi[i];
}
ordina(j);
for(i=0;i<j;i++)
printf("%d - %f\n",codici2[i],prezzi2[i]);
}
torna