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

/*
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



Copyright © 2004-2024 thecsea.it (Claudio Cardinale - [email protected])! Tutti i diritti riservati. - contattaci