logo Thecsea.it



Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License



scolastica » esercizi » terza superiore » informatica

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

001/*
002CLAUDIO CARDINALE 3AI
003scrivere un programma che definisca ed inizializzi le variabili necessari per memorizzare:
0041)un elenco di interi : codici, ciascuno dei quali rappresenta il codice di un prodotto.
0052)un elenco di stringhe : descr, ogni stringa rappresenta la descrizione di un prodotto.
0063)Un elenco di numeri reali : prezzi ciascuno dei quali rappresenta il prezzo di un prodotto
007il programma deve poi permettere di eseguire, attraverso un menu, le seguenti operazioni:
0081)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).
0092)Dato in input il codice di un prodotto, se esso è presente nell'elenco dei codici modificare il suo prezzo aumentandolo del 10%(funzione ricerca).
0103)Dato in input un prezzo visualizzare il codice e la descrizione di tutti i prodotti aventi quel prezzo.
0114)Definire una funzione trasforma che ricevendo una stringa sostituisce tutti gli spazi con dei caratteri _.
0125)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.
013*/
014#include<stdio.h>
015#include<string.h>
016#define MAX 1000
017#define LEN 100
018int codici[MAX];
019char descr[MAX][LEN];
020float prezzi[MAX];
021int codici2[MAX];
022float prezzi2[MAX];
023int acquisizione(void);
024int ricerca(int ele,int l);
025void presenza(int codice,int l);
026void mod(int codice, int l);
027void prezzo_u(float prezzo, int l);
028void trasforma(int pos);
029void ordina(int l);
030void min_max(float min,float max,int l);
031int main(){
032    int l,scelta,codice,i;
033    float prezzo,prezzo_min,prezzo_max;
034    l = acquisizione();
035    do{
036        do{
037            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 : ");
038            scanf("%d",&scelta);
039        }while(scelta<0 || scelta>5);
040        switch(scelta){
041            case 1:
042                printf("inserire il codice dell'elemento da cercare : ");
043                scanf("%d",&codice);
044                presenza(codice,l);
045                break;
046            case 2:
047                printf("inserire il codice dell'elemento da cercare : ");
048                scanf("%d",&codice);
049                mod(codice,l);
050                break;
051            case 3:
052                printf("inserire il prezzo degli elementi da cercare : ");
053                scanf("%f",&prezzo);
054                prezzo_u(prezzo,l);
055                break;
056            case 4:
057                for(i=0;i<l;i++)
058                    trasforma(i);
059                break;
060            case 5:
061                printf("inserire il prezzo minimo : ");
062                scanf("%f",&prezzo_min);
063                printf("inserire il prezzo massimo : ");
064                scanf("%f",&prezzo_max);
065                min_max(prezzo_min,prezzo_max,l);
066                break;
067        }
068    }while(scelta>=1 && scelta<=5);
069}
070 
071int  acquisizione(void){
072    int l,i;
073    do{
074        printf("inserire il numero di prodotti : ");
075        scanf("%d",&l);
076    }while(l<1 || l>=MAX);
077     
078    for(i=0;i<l;i++){
079        printf("inserire il codice del prodotto numero %d : ",i+1);
080        scanf("%d",&codici[i]);
081        getchar();
082        printf("inserire la descrizione del prodotto numero %d : ",i+1);
083        gets(descr[i]);
084        printf("inserire il prezzo del prodotto numero %d : ",i+1);
085        scanf("%f",&prezzi[i]);
086    }
087}
088 
089int ricerca(int ele,int l){
090    int i;
091    for(i=0;codici[i]!=ele && i<l;i++);
092    if(codici[i] ==  ele)
093        return i;
094    return -1;
095}
096 
097void presenza(int codice,int l){
098    int pos;
099    pos = ricerca(codice,l);
100    if(pos>=0)
101        printf("%s - %f\n",descr[pos],prezzi[pos]);
102    else
103        printf("codice non presente\n");
104}
105 
106void mod(int codice, int l){
107    int pos;
108    pos = ricerca(codice,l);
109    if(pos>=0)
110        prezzi[pos] = prezzi[pos]+prezzi[pos]/100*10;
111}
112 
113void prezzo_u(float prezzo, int l){
114    int i;
115    for(i=0;i<l;i++)
116        if(prezzi[i]==prezzo)
117            printf("%d - %s\n",codici[i],descr[i]);
118}
119 
120void trasforma(int pos){
121    int i,l;
122    l = strlen(descr[pos]);
123    for(i=0;i<l;i++)
124        if(descr[pos][i] == ' ')
125            descr[pos][i] = '_';
126}
127 
128void ordina(int l){
129    int i,k,aux;
130    float aux2;
131    do{
132        k = 0;
133        for(i=0;i<l;i++)
134            if(prezzi2[i] < prezzi2[i+1]){
135                aux = codici2[i+1];
136                codici2[i+1] = codici2[i];
137                codici2[i] = aux;
138                aux2 = prezzi2[i+1];
139                prezzi2[i+1] = prezzi2[i];
140                prezzi2[i] = aux2;
141                k = i+1;
142            }
143        l = k;
144    }while(k);
145}
146 
147void min_max(float prezzo_min,float prezzo_max,int l){
148    int i,j=0;
149    for(i=0;i<l;i++)
150        if(prezzi[i]>=prezzo_min && prezzi[i]<=prezzo_max){
151            codici2[j] = codici[i];
152            prezzi2[j++] = prezzi[i];
153        }
154    ordina(j);
155    for(i=0;i<j;i++)
156        printf("%d - %f\n",codici2[i],prezzi2[i]);
157}

torna



Copyright © 2004-2025 thecsea.it (Claudio Cardinale - cardi@thecsea.it)! Tutti i diritti riservati. - contattaci