Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

Proposta di lavoro

informatica



/*Esempio di lavoro in C++ per vedere praticamente come si usano e dichiarano : le funzioni e i record e scoprire un po' le tecniche per una corretta programmazione,,,ma per capire al meglio il problema appena sviluppato bisogna aver comunque una conoscenza base del linguaggio C++ anche perché per esaminare il programma non c'č una completa pseudo-codifica e nessun flowchart*/



Proposta di lavoro


Creare una tabella contenente i dati relativi alla carriera dei calciatori, si considerino

le seguenti informazioni: cognome, nome, squadra, campionato, ruolo, reti, partite;


Predisporre un menų per :


Inserire i dati;



Per ricercare la lista di giocatori che hanno giocato in una squadra da ricercare;

Stampare il numero di reti totali di un calciatore da ricercare;

Lista dei giocatori che hanno segnato almeno un certo numero di reti in un campionato;

Uscita dal programma;






La rappresentazione di un algoritmo č indispensabile per produrre un programma, ben strutturato, in un linguaggio di programmazione, ma deve essere preceduta da una fase di analisi e def 222g61c inizione del problema che presto affronteremo.

Vediamo due tecniche che dobbiamo acquisire per poterci avviare alla risoluzione del problema.

La tecnica TOP-DOWN e BOTTOM-UP


Nella pratica, molti dei problemi che si vogliono risolvere mediante calcolatore sono complessi e noti solo nelle loro linee generali. Per questo motivo, un metodo di analisi e progettazione molto utilizzato consiste nell'individuare gli aspetti fondamentali (TOP) dell'applicazione e delinearne le fasi principali, cercando di esprimere con poche frasi l'intera logica risolutiva del problema.

Ogni singola frase č un sottoproblema, o modulo, pių semplice che si puō analizzare con lo stesso metodo.

Questo processo di scomposizione si ripete sino a considerare frasi sempre pių semplici (DOWN), praticamente coincidenti con le istruzione del linguaggio di programmazione.


Al contrario, la tecnica del BOTTOM-UP (dal particolare al generale) considera gli oggetti pių semplici (costituiti da poche istruzioni) per realizzare moduli pių complessi che si integrano, a loro volta, in altri moduli. Il processo di integrazione si ripete sino alla realizzazione della soluzione del problema (algoritmo o programma). Meno usata, comunque , in fase di analisi, questa tecnica viene spesso impiegata in fase di verifica (debugging) di un programma.


Il progetto di un programma complesso richiede, comunque, un accorto uso di entrambe le tecniche.


Gli algoritmi che affronteremo in questo problema verranno anche rappresentati mediante una diretta codifica in linguaggio C++ accuratamente commentato


Vediamo i passi che dovremo affrontare:


Dobbiamo creare una funzione menų che contenga le scelte proposte dal problema numerandole per facilitare la scelta da parte dell'utente. Che chiamiamo per esempio: menu()

Una funzione che acquisisce i dati del calciatore da registrare che corrisponde alla scelta numero

1 del menų e che chiamiamo : acquisisci()

Una funzione che stampa lista di giocatori che hanno giocato in una squadra ricercata che corrisponde alla scelta numero

del menų che chiamiamo : cercasquadra()

Una funzione che stampa il numero di reti totali di un giocatore ricercato che corrisponde alla scelta numero

del menų che chiamiamo  : retitotali()

Una funzione che stampa dei giocatori che hanno segnato almeno un numero prefissato di reti che corrisponde alla scelta numero

del menų che chiamiamo : retisegnate()










Rappresentazione schematica del problema


Programma principale

Menų

1 Acquisisci

Acquisisce i dati del calciatore

Verifica se i dati sono stati giā immessi

Controlla se l'utente vuole rimanere nel ciclo o ritornare al menų


2 Cercasquadra

L'utente Inserisce la squadra da ricercare

Si sanziona il solo l'elemento nomesquadra di tutti i record registrati

confrontandolo con la squadra che ha inserito l'utente

Se sono uguali stampa tutti i dati del calciatore che gioca in questa squadra

Altrimenti se non trova nessuna squadra con il nome che ha inserito l'utente il programma comunica che non esiste nessuna squadra che abbia quel nome

Poi si verifica se l'utente vuole ritornare al menų o fare un'altra ricerca


3 Retitotali

L'utente inserisce il nome e il cognome del calciatore da ricercare

Si sanzionano i soli elementi "nome[]", "cognome[]" di tutti i record registrati e si confrontano con il nome e cognome appena acquisiti per la ricerca

Se i dati verranno trovati si verificherā se lo stesso giocatore ha segnato dei gol in diversi campionati sommandoli ad una variabile che conterrā i gol totali del calciatore e alla fine stamperā il nome e i gol totali del calciatore

Altrimenti Comparirā un messaggio che non esiste nessun calciatore che č registrato con i dati immessi

Poi si verifica se l'utente vuole ritornare al menų o fare un'altra ricerca


4 Retisegnate

L'utente inserisce il numero di reti minime che dovrā avere il calciatore da ricercare

Si sanzionano il solo elemento reti di tutti i record registrati e si verifica se č maggiore o uguale di minime segnate

Se č vera questa condizione stampa il nome, il cognome e la squadra in cui gioca il calciatore

Altrimenti   compare la scritta non esiste nessun calciatore registrato che abbia segnato questo numero minime di reti

Poi si verifica se l'utente vuole ritornare al menų o fare un'altra ricerca


5 Fine Programma


ok allora visto i punti pių generali passiamo alla stesura del codice


Il primo passo per poter scrivere un programma in  C come pure in C++ č di dichiarare le librerie che useremo nel nostro programma.

E a noi servono le seguenti:


Iostream.h : per le istruzioni di input e output cioč(cin e cout)  

Ctype.h : che ci serve solo per la funzione toupper() che converte una lettera minuscola in maiuscola

Conio.h : ci serve per la pulizia dello schermo con la funzione clrscr()

Per la formattazione dell'output gotoxy()

Per l'acquisizione getche() usata perché riconosce il carattere "\n"

E kbhit() utilizzato nel programma come while(!kbhit()) e ci permette di visualizzare un output finché non premiamo invio

Stdio.h : ci serve per poter usare la funzione getchar() come while(getchar()!='\n'); che in definitiva ha lo stesso comportamento di while(!kbhit()) ,,, probabilmente vi domandate perché ho usato anche questa se hanno la stessa funzione boh non lo so J

String.h : che ci serve per la gestione delle stringhe la funzione utilizzata nel programma č strcmp(stringa,stringadaconfrontare) se come risultato da 0 significa che le stringhe sono uguali e il valore č < o > di  significa che le stringhe sono diverse.

E strlen per saper di quanti elementi č composto il vettore da considerare;


La dichiarazione delle librerie (o header) usate nel programma vengono fatte in questo modo


#include <iostream.h>

#include <ctype.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>


Passiamo poi alle dichiarazioni globali


Dichiariamo le costanti:_
 MAX //E' il numero Massimo di giocatori da caricare;

MAXCARATTERI //E' il numero massimo di caratteri che si possono inserire;


IN C++


#define MAX 10

#define MAXCARATTERI 15


Dichiariamo poi la struttura che contiene i dati di ogni singolo calciatore


struct calcio

giocatore[MAX];


cosė facendo dichiariamo un nuovo tipo che sarebbe "calcio" e un vettore "giocatore[ ] " della

struttura


Poi passiamo alla dichiarazione delle funzioni


//Menų

int menu(calcio [],int);

int vuoto(int); //usata nella funzione menu()


//Opzione 1

int acquisisci(calcio [],int&);

int verificaesistenza(calcio [],int);  //usata nell'opzione 1

int serie(calcio [],int); //usata nell'opzione 1


//Opzione 2

int cercasquadra(calcio [],int);


//Opzione 3

int retitotali(calcio [],int);


//Opzione 4

int retisegnate(calcio [],int);


int ritornomenu();//Verifica se l'utente vuole ritornare al ciclo o effettuare un'altra ricerca //usata nell'opzione 2,3,4

int maiusc(char []); //Converte una stringa tutta in lettere maiuscole; // usata nell'opzione 1,2,3,4



Passiamo poi alla stesura di ogni funzione con il relativo flowchart


Come paramentro della funzione ho passato tutto il record giocatori [ ] chiamandolo in questo caso g[] per non lavorare sulla variabile globale e t sarebbe il numero totale di calciatori registrati in definitiva il tot dichiarato nel main()


Menų


int menu(calcio g[],int t)



case '2':


case '3':


case '4':

case '5': return 0;



}while(1);

/*In questo caso ho deciso di  fare questo ciclo infinito perché se a risp si assegna un valore non previsto si rimane ancora nel ciclo e anche per fare in modo che si esca dal menų solo se l'utente inserisce la condizione di uscita prevista nello switch che sarebbe 5

Questo poteva essere sostituito anche da una istruzione ricorsiva " return menu(g,t)" ma un uso eccessivo di questo richiamo in un programma puō causare un riempimento eccessivo della memoria di stack causando un errore di overflow */


}//Fine della funzione menų;



Vuoto


/*vuoto() č usato nella funzione menu() per controllare se č stato registrato almeno un giocatore;ha come parametro t che rappresenta il numero totale di calciatori registrati.

Questa funzione ritorna 0 se non č registrato nessun giocatore altrimenti ritorna 1*/


int vuoto(int t)


clrscr();

return 1;

}//fine della funzione vuoto




Opzione 1



Questa funzione in cui passiamo il vettore del record giocatori[] e l'abbiamo chiamato con un  altro nome per il motivo giā citato nella funzione menu().

Viene passato anche l'indirizzo di tot che qui chiamiamo t (questo viene detto passaggio per riferimento o indirizzo) perché č proprio qui che si modifica il valore di tot.

*/


int acquisisci(calcio g[],int&t)

while(g[i].anno<1900); //L'utente non puō inserire un valore minore di 1900;


cout<<"\n\nInserisci il nome : ";

cin>>g[i].nome;


//E' qui che troviamo maiusc(char[]) questa funzione non fa nient'altro che convertire una variabile di tipo vettore di stringa da lettere minuscole a lettere maiuscole.

maiusc(g[i].nome);


cout<<"Inserisci il cognome : ";

cin>>g[i].cognome;

maiusc(g[i].cognome);


cout<<"\nInserisci il nome della squadra : ";

cin>>g[i].squadra;

maiusc(g[i].squadra);


if (i>0)


}


//Qui troviamo serie() in cui passiamo come valori g che sarebbe il record e l'indice i che sarebbe il numero di calciatori registrati in un determinato momento;questa funzione determina la sezie del campionato a cui appartiene la squadra;

serie(g,i);


do

while(strcmp(g[i].ruolo,"ATT")!=0 && strcmp(g[i].ruolo,"CEN")!=0 && strcmp(g[i].ruolo,"DIF")!=0 && strcmp(g[i].ruolo,"POR" )!=0);

//Il ciclo si ripete finchč l'utente inserisce valori diversi da quelli considerati;


cout<<"\nPartite giocate : ";

cin>>g[i].partite;


cout<<"Reti segnate : ";

cin>>g[i].reti;


char dm;


do

while((dm!=13)&&(dm!='N'));


//Il ciclo si ripete finchč l'utente inserisce valori diversi dall'INVIO che in codice ASCII corrisponde a 13 e N che corrisponde alla condizione di uscita dal ciclo;


i++; //Incrementa l'indice;


if (toupper(dm)=='N')



clrscr();


}while (i<MAX);

//Il ciclo si ripete finchč il numero dei calciatori registrati č minore al Massimo prefissato dichiarata MAX come costante;


return 0;

}//Fine della funzione acquisisci;



MAIUSC


//Converte una stringa in lettere maiuscole;

int maiusc(char s[])

while(j<strlen(s));


s[j]='\0'; //Assegna il carattere terminatore \0 alla fine del vettore


return 0;




Verificaesistenza


//Verifica se l'utente sta inserendo i dati uguali ad un altro giocatore registrato;

se esiste ritorna 1 altrimenti 0;


int verificaesistenza(calcio g[],int i)


return 0;

}



Opzione


Cercasquadra


//Funzione che cerca i giocatori che hanno giocato in una determinata squadra;


int cercasquadra(calcio f[],int t)


else

}


if (v==j) cout<<"\nNon esiste nessun calciatore registrato che gioca in questa squadra ";


if(ritornomenu())

return menu(f,t);

}while(1);

}//fine di cercasquadra


Ritornomenu



//L'utente sceglie se ritornare al menų o rimane nel ciclo;

Ritorna se l'utente vuole ritornare al menų e se vuole rimanere nel ciclo

int ritornomenu()

while((dm!=13)&&(dm!='M'));


if (toupper(dm)=='M')

return


return



Opzione 3


//funzione che ricerca il numero totale di reti di un giocatore ricercato;

int retitotali(calcio gio[],int to)


}


if (v j) cout<<"\nNon esiste nessun calciatore registrato che gioca in questa squadra ";

else cout<<"\n\nle reti che ha segnato in totale nella sua carriera \'"<<nomecalciatore <<" "<<cognomecalciatore <<"'\ sono : "<<retitotali


if(ritornomenu

return menu(gio,to);

}while (1);




Opzione 4  


Retisegnate


//StampaRicerca tutti i giocatori che hanno segnato almeno un numero ricercato di reti;


int retisegnate(calcio gioca[],int total)



if (v j cout<<"\nNon esiste nessun calciatore registrato che abbia segnato almeno '\ "<<minsegnate <<"\' reti \'";


if(ritornomenu

return menu(gioca,total);

}while (1);

}//Fine della funzione retisegnate 

Ecco qua penso che il programma visto pezzo pezzo sia pių semplice da comprendere


Adesso vi metto il listato completo pronto per l'esecuzione tramite un programma di compilazione : consigliato quello della Borland


#include <iostream.h>

#include <ctype.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>


#define MAX 10 //E' il numero Massimo di giocatori da caricare;

#define MAXCARATTERI 15 //E' il numero massimo di caratteri che si possono inserire;


struct calcio

giocatore[MAX];


int maiusc(char []); //Converte una stringa tutta in lettere maiuscole;

int menu(calcio [],int); //E' il menų principale;

int acquisisci(calcio [],int&); //Funzione di acquisizione; Opzione (1)

int verificaesistenza(calcio [],int);//Verifica se l'utente sta inserendo i dati uguali ad un altro giocatore registrato;

int serie(calcio [],int); //Funzione che determina la serie del campionato a cui appartiene la squadra;

int cercasquadra(calcio [],int);

int retitotali(calcio [],int);

int retisegnate(calcio [],int);

int vuoto(int);//Controlla se č stato registrato almeno un giocatore;

int ritornomenu();


void main()



//Funzione menų;

int menu(calcio g[],int t)



case '2':


case '3':


case '4':

case '5': return 0;


}while(1);



//Funzione di acquisizione;

int acquisisci(calcio g[],int&t)

while(g[i].anno<1900);


cout<<"\n\nInserisci il nome : ";

cin>>g[i].nome;

maiusc(g[i].nome);


cout<<"Inserisci il cognome : ";

cin>>g[i].cognome;

maiusc(g[i].cognome);


cout<<"\nInserisci il nome della squadra : ";

cin>>g[i].squadra;

maiusc(g[i].squadra);


if (i>0)


}


serie(g,i); //Funzione che determina la serie del campionato a cui appartiene la squadra;


dowhile(strcmp(g[i].ruolo,"ATT")!=0 && strcmp(g[i].ruolo,"CEN")!=0 && strcmp(g[i].ruolo,"DIF")!=0 && strcmp(g[i].ruolo,"POR" )!=0);


cout<<"\nPartite giocate : ";

cin>>g[i].partite;


cout<<"Reti segnate : ";

cin>>g[i].reti;


char dm;

dowhile((dm!=13)&&(dm!='N'));


i


if (toupper(dm)=='N')


clrscr();

}while (i<MAX);


return 0;



//funzione che determina la serie del campionato a cui appartiene la squadra;

int serie(calcio g[],int j)


return 0;



//Funzione che cerca i giocatori che hanno giocato in una determinata squadra;

int cercasquadra(calcio f[],int t)


else

}


if (v==j) cout<<"\nNon esiste nessun calciatore registrato che gioca in questa squadra ";


if(ritornomenu())

return menu(f,t);

}while(1);



//funzione che ricerca il numero totale di reti di un giocatore ricercato;

int retitotali(calcio gio[],int to)


do

{

clrscr();

cout<<"Stampa del numero di reti totali di un giocatore ricercato;\n\n";


char nomecalciatore[MAXCARATTERI],cognomecalciatore[MAXCARATTERI];


cout<<"Inserisci il nome del calciatore da ricercare : ";

cin>>nomecalciatore;

maiusc(nomecalciatore);

cout<<"Inserisci il cognome del calciatore da ricercare : ";

cin>>cognomecalciatore;

maiusc(cognomecalciatore);


int v,j,retitotali;

v=j=retitotali=0;


for ( ;j<=to;j++)


if ((strcmp(gio[j].nome,nomecalciatore)==0)&&(strcmp(gio[j].cognome,cognomecalciatore)==0)) retitotali+=gio[j].reti;

else

}


if (v==j) cout<<"\nNon esiste nessun calciatore registrato che gioca in questa squadra ";

else cout<<"\n\nle reti che ha segnato in totale nella sua carriera \'"<<nomecalciatore <<" "<<cognomecalciatore <<"'\ sono : "<<retitotali;;


if(ritornomenu())

return menu(gio,to);

}while (1);



//Ricerca tutti i giocatori che hanno segnato almeno un numero ricercato di reti;

int retisegnate(calcio gioca[],int total)



if (v==j) cout<<"\nNon esiste nessun calciatore registrato che abbia segnato almeno '\ "<<minsegnate <<"\' reti \'";


if(ritornomenu())

return menu(gioca,total);

}while (1);



//Verifica se l'utente sta inserendo i dati uguali ad un altro giocatore registrato;

int verificaesistenza(calcio g[],int i)


return 0;



//Controlla se č stato registrato almeno un giocatore;

int vuoto(int t)


clrscr();

return 1;



//Converte una stringa in lettere maiuscole;

int maiusc(char s[])

while(j<strlen(s));

s[j]='\0';


return 0;



//L'utente sceglie se ritornare al menų o rimane nel ciclo;

int ritornomenu()

while((dm!=13)&&(dm!='M'));


if (toupper(dm)=='M')

return 1;


return 0;






Privacy




Articolo informazione


Hits: 1503
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024