Un file di testo è così strutturato:
2+3+12=9+8;
2+3+4=9;
22=3+4+5+10;
3+85+1=4+44;
alcune uguaglianze sono corrette altre no; infatti nel file l'ultima riga il primo membro la somma non coincide con la somma del secondo membro.
Scrivere un programma in C++ che letti i dati dal files, attraverso una funzione calcoli la frazione di somme corrette a video.
Il progetto si compone di tre files due con header e un main. Ecco il primo header:
#include <iostream>
#include <fstream>
using namespace std;
struct Somme {
int num1[20];
int num2[20];
int ris2;
int addendi1;
int addendi2;
int corretto=0;
int ris1;
};
void leggi_file (fstream& f, struct Somme s[], int& l);
int controllo (struct Somme s);
void stampa(struct Somme s[],int l);
float rapporto (struct Somme s[], int l);
La stuct contiene i numeri del primo membro e del secondo all'interno di due array, le somme sono memorizzate nei campi ris1, ris2, mentre le variabili addendi1 e addendi2 sono il numero degli addendi delle due somme. La variabile corretto indica se le somme del primo e del secondo mebro di ogni riga del files coincidono.
Sono state realizzate quattro funzioni la prima che estrae dal file sequenziale i dati caricandoli nella tballe, la seconda interna che controlla una sola riga della tabella creata, la terza che stampa i dati (è stata utilizzata solo a scopo di test nel main non è eseguita), la quarta che scansiona la tabella e richiama di volta in volta la funzione controlla per verificare se le somme coincidono.
L'implementazione delle funzioni è:
#include "funzioni.h"
void leggi_file (fstream& f, struct Somme s[], int& l){
int i=0;
int j=0;
int n;
int flag=1;
char temp;
f.open("somme.txt", ios::in);
if (!f) {
cout<<"file non trovato!\n";
exit(1);
}
l=0;
f>>n>>temp;
while (!f.eof()){
s[l].addendi1=0;
s[l].addendi2=0;
if (flag==1){
if (temp=='+'){
s[l].num1[i]=n;
i++;
}
}
else{
if (temp=='+'){
s[l].num2[j]=n;
j++;
}
}
if (temp=='='){
flag=2;
s[l].num1[i]=n;
}
if (temp==';'){
s[l].addendi2=j+1;
s[l].addendi1=i+1;
s[l].num2[j]=n;
// cout <<"\n Numero elemtni primo membro:"<<s[l].addendi1;
// cout << "\n Numero elementi secondo membro:"<<s[l].addendi2;
flag=1;
j=0;
i=0;
l++;
}
f>>n>>temp;
}
f.close();
}
Nella funzione leggi_file è utilizzata la variabile char temp per caricare il separatore che può essere un "+", un "=" o un ";". Quest'ultimo indica la fine di una riga.
void stampa(struct Somme s[], int l)
{
int k;
int i;
for (k=0;k<l;k++)
{ cout << "\nNuova Riga\n";
cout << "\n Stampa dettaglio 1\n";
for (i=0;i<s[k].addendi1;i++)
cout << s[k].num1[i]<<"\t";
cout << "\n Stampa dettaglio 2\n";
for (i=0;i<s[l].addendi2;i++)
cout << s[k].num2[i]<<"\t";
}
}
int controllo (struct Somme s){
int i;
s.ris1=0;
s.ris2=0;
s.corretto=0;
for (i=0;i<s.addendi1;i++){
s.ris1=s.ris1+s.num1[i];
}
for (i=0;i<s.addendi2;i++)
s.ris2=s.ris2+s.num2[i];
if (s.ris1==s.ris2)
{
s.corretto=1;
}
return s.corretto;
}
float rapporto (struct Somme s[], int l){
int i;
int ncorrette=0;
int flag=0;
float percentuale;
for (i=0;i<l;i++){
flag=controllo(s[i]);
if (flag==1)
ncorrette++;
flag=0;
}
cout << "Numero corrette \t"<< ncorrette<<endl;
percentuale=(float)ncorrette/l;
return (percentuale);
}
E il main è:
#include "funzioni.cpp"
int main (){
fstream file;
Somme somma[100];
int n;
float percentuale=0;
leggi_file (file,somma,n);
cout<<"\nLettura file completata con successo!\n";
cout << "\nStampa del dettagio\n";
//stampa(somma,n);
percentuale=rapporto (somma,n);
cout<<"elaborazione completata!\n la percentuale delle operazioni corrette e': ";
cout<<percentuale<<endl;
return 0;
}
Nel main non si fa altro che che riciamare le funzioni sopra definite per eseguire il programma, la funzione leggi fils contiene la variabile n che rappresenta il numero dellerighe lette dal file che è passata per indirizzo in quanto viene calcolata nella subroutine e tornata al programma principale.
Articoli che potrebbero interessarti - Esercizio con le Struct in C++ funzione che ritorna una struttura - Video Lezione n.1 - C++ Avanzato - Progetto con le Struct
Problema
Immaginiamo di voler simulare il lancio di un dato e verificare se l'utente ha vinto la partita.
Ad esempio l'utente effettua una puntata, se il numeor è <=3 ha perso, se il punteggio è 4 e 5 vince due volte la puntata, se il punteggio è 6 vince quattro volte la puntata
Ecco la semplice codifica in C
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int x;
float importo;
float vincita;
vincita=0;
printf("\n Inserisci un importo\n");
scanf("%f",&importo);
srand(time(NULL));
x= rand()%6+1;
printf("\n Numero Estratto %d\n",x);
if (x<3)
printf("\n Hai perso\n");
if ((x==4)||(x==5))
{
vincita=importo*2;
printf("\n Hai vinto %f",vincita);
}
if (x==6)
{
vincita=importo*4;
printf ("\n Hai vinto %f",vincita);
}
return 0;
}
Articoli che potrebbero interessarti: Video Esercitazione sugli algoritmi - Appunti sui linguaggi di programmazione e algoritmi
Valutazione attuale: 5 / 5
Scrivere un programma che presenti un menu a video che permetta all'utente di eseguire le operazioni su un array di interi e dimensione richiesta in input.
Le operazioni sono: caricamento array, ricerca e verifica se un valore inserito da tastiera è presente nell'array, ordinamento per selezione, e stampa dell'array.
Attraverso il menu di scelta l'utente può interrompere il programma.
Codifica in C++
#include <iostream>
using namespace std;
void carica(int x[],int l);
void stampa(int x[],int l);
bool cerca(int x[],int l, int y);
void ordina(int x[],int l);
int main ()
{
int a[100];
int incognito;
int n;
int scelta;
while (1)
{
cout << "\n Menù Scelta\n";
cout << "\n 1- Caricamento Vettore\n";
cout << "\n 2- Ricerca elemento nell'array\n";
cout << "\n 3- Ordina \n";
cout << "\n 4- Stampa\n";
cout << "\n 5- Fine";
do {
cout << "\nInserisci la tua scelta\n";
cin >> scelta;
if ((scelta<1)||(scelta>5))
cout << "\n Scelta errata ripeti \n";
}
while ((scelta<1)||(scelta>5));
switch (scelta) {
case 1: {
cout << "inserisci la dimensione dell'arry\n";
cin >> n;
carica(a,n);
break;
}
case 2: {
cout << "\n Inserisci l'elemento incognito\n";
cin >> incognito;
if (cerca(a,n,incognito))
cout <<"\n Elemento trovato\n";
else
cout << "\n Elemento non trovato\n";
break;
}
case 3: {
cout << "\n Ordinamento array\n";
ordina(a,n);
cout << "\n---------\n";
stampa(a,n);
break;
}
case 4:{
cout << "\n Stampa elementi dell'array\n";
stampa(a,n);
break;
}
case 5:
{
cout << "\n Fine programma arriderci\n";
return 0;
}
}
}
}
void carica(int x[],int l)
{
int k;
for (k=0;k<l;k++)
{
cout << "\n Inserisci gli elementi\n";
cin >> x[k];
}
}
void stampa(int x[],int l)
{
int k;
for (k=0;k<l;k++)
{
cout << "\n Elementi dell'array'\t";
cout << x[k];
}
cout << endl;
}
bool cerca(int x[],int l, int y)
{
// Ricerca sequenziale
bool trovato=false;
int k;
for (k=0;k<l;k++)
{
if (x[k]==y)
trovato=true;
}
return trovato;
}
void ordina(int x[],int l)
{
// Ordinamento per selezione crescente
int k,j;
int tmp;
for (k=0;k<l-1;k++)
for (j=k+1;j<l;j++)
if (x[k]>x[j])
{
tmp=x[k];
x[k]=x[j];
x[j]=tmp;
}
}
Articoli che potrebbero interessarti: Nuova Video Lezione - Array C e C++ Esercizio di ribaltamento di un array in C++
Strutture dati complesse, utilizzo delle struct in C++
Video
Acquista il Video e il Codice Sorgente di un esempio pratico in C++
Il link per l'acquisto Acquista I diritti di visione del video e il download dal codice sorgente
Problema
Realizzare un programma in C++ che dopo aver caricato un array di N elementi con N inserito da tastiera, calcoli la somma degli elementi di posto pari e di posto dispari.
Realizzare una funzione C++ che rittorni una struct.
Le struct in C++/C sono molto utili quando occorre far tornare tipi di dati differenti da una funzione. Una funzione è un sottoprogramma che ritorna un valore, ma in senso più generalizzato può far ritornare anche una struttura un arraym una struct.
Nell'esempio sotto riportato è stata definita una funzione che calcola le somme come richeisto dal problema e ritorna una struct contenente i valori calcolati nella stessa.
La codifica C++ è:
Altri articoli che potrebbero interessarti Video Lezione n.1 - C++ Avanzato - Progetto con le Struct
#include <iostream>
using namespace std;
struct numeri
{
int x;
int y;
};
void carica(int x[],int l);
struct numeri calcola(int x[],int l);
int main ()
{
struct numeri num;
int n;
int a[100];
cout << "\n Inserici la dimensione del vettore\n";
cin >> n;
carica(a,n);
num=calcola(a,n);
cout << "\nLa somma dei pari è "<< num.x << endl;
cout << "La somma dei dispari è " << num.y << endl;
cout << endl;
}
void carica(int x[],int l)
{
int k;
for (k=0;k<l;k++)
{
cout << "\n Inserisci gli elementi\n";
cin >> x[k];
}
}
struct numeri calcola(int x[],int l)
{
struct numeri tmp;
int k;
tmp.x=0;
tmp.y=0;
for (k=0;k<l;k++)
{
if ((k+1)%2==0)
tmp.x=tmp.x+x[k];
else
tmp.y=tmp.y+x[k];
}
return tmp;
}
Video Lezione dal Problema al C++ - Ambiente di Sviluppo
Ambiente di sviluppo per il C++ - Fase di sviluppo di un programma
Altri articoli che potrebbero interessarti Video Lezione dal problema al C++ - primi passi - Video Esercitazione sugli algortimi - Video Lezione dal Problema all'algoritmo
Scrivere un programma composto da due funzioni che risolva il seguente problema:
Calcolo della media degli elementi di un array o vettore con dimensione definita dall'utente.
I flowchart sono stati realizzati con il software flowgorithm
Algoritmo principale:
Codifica in C++ del problema
#include <iostream>
using namespace std;
void carica(int x[],int l);
float media(int x[],int l);
int main ()
{
int a[100];
int n;
float m;
cout << "\n Inserisci la dimensione del vettore \n ";
cin >> n;
carica(a,n);
m=media(a,n);
cout << "\n La media degli elementi è:\n";
cout << m << endl;
}
void carica(int x[],int l)
{
int k;
for (k=0;k<l;k++)
{
cout << "\n Inserisci gli elementi del vettore\n";
cin >> x[k];
}
}
float media(int x[],int l)
{
float s;
int k;
for (k=0;k<l;k++)
s=s+x[k];
return s/l;
}
Articoli che potrebbero ineressarti:
Nuova Video Lezione - Array C e C++
Dal problema al C++
Primi passi nella creazione di un programma in C++
Articoli che potrebbero interessarti: Video Esercitazione sugli algortimi - Video Lezione dal Problema all'algoritmo
Come utilizzare le strutture dati in C e C++, Algoritmi fondamentali
Videolezione - Gli Array in C e C++
Articoli che potrebbero interessarti
Cosa sono le Struct ? Sono modelli di strutture dati definite dall'utente in relazione alla rappresentazione dati che occorre nel problema; nel linguaggi di programmazione di qualunque tipo sono sempre ammessi come tipologia di struttura dati.
E' definita una struttura dati eterogenea in quanto può essere composta da tipi di dati semplici o strutturati come ad esempio un array.
Per poter utilizzare tale strutture l'utente deve dichiarare nel programma la struct con la dichiarazione:
struct nome struttura
{ tuoi1 nome dato;
tipo 2 nome dato 2;
.....
tipo n nome dato n;
};
ad esempio
struct alunno {char nome[20];
char cognome[20];
char classe[4];
char sezione[2];
int age;
float media_voti;
};
In questo caso è dichiarata una struttura dati contenente tipi di dati diversi definiti dall'utente in relazione al suo problema. Tale dichiarazione, va effettuata prima che il programmatore definisca delle variabili statiche o dinamiche legate all'uso del nuovo modello dati.
Infatti, fintantoché la struttura non è dichiarata come variabile non è utilizzabile all'interno del programma e di suoi eventuali sotto programmi.
La dichiarazione avviene in modo generico con la dichiarazione tipica:
struct nome struttura nome variabile;
oppure se è necessario dichiarare un array di strutture è possibile utilizzare la sintassi:
struct nome struttura nome variabile[dimensione];
In entrambi i casi le variabili dichiarate sono statiche e non dinamiche (non si è fatto uso dei puntatori).
Una variante della dichiarazione, può essere ottenuta con la clausola typedef, la quale dichiara il nuovo tipo con un alias della struttura; in questo modo l'utente non è costretto a dichiarare la parola chiave struct quando dichiara la variabile di quel modello dati.
Ad esemoio la dichiarazione della struttura di esempio diventa:
typedef struct{
char nome[20];
char cognome[20];
char classe[4];
char sezione[2];
int age;
float media_voti;
} alunno ;
In questo modo, l'utente dichiara la sua variabile indicando direttamente il nome della struttura come nuovo tipo. Ad esempio:
alunno a;
alunno a[100];
la prima dichiara una variabile di tipo alunno e la seconda un array composto da tante strutture alunno dello stesso tipo.
Per prima cosa, una volata dichiarate le strutture e le relative variabili associate con essa, il programmatore per accedere ai dati detti anche "campi" utilizza la seguente sintassi:
nome_variabile.campo
per assegnare un valore al campo è possibile utilizzare ad esempio la sintassi seguente:
alunno.cognome[]="rossi";
o
alunno.cognome={'r','o','s','s','i',};
E' utile notare che nel momento in cui è opportuno definire delle stringhe; ogni stringa termina con un carattere di terminazione '\0', il quale si aggiunge come numero ai caratteri della stringa. In altre parole se il cognome è "rossi" la stringa avrà 6 caratteri e non 5 in quanto la memorizzazione avverrà nella seguente forma "rossi\0".
Se in blocco si vuole assengare a tutti i campi della struttura un valore è possibile utilizzare la sintesssi:
nome variabile={valore1, valore2, …,valoren);
attribuendo i valori nei formati opportuni; nel senso che se è un numero non sono necessari le veirgolette, se trattasi di una stringa invece le virgolette sono necessarie.
Le strutture possono essere definite anche come record ovvero "registrazione", la cui parola indica un aggregato di dati composto da dati di tipo diverso ognuno dei quali è caratterizzato da una dimensione.
I dati che compongono la struttura detti "campi" concorrono insieme alla definizione di un informazione.
Tali informazioni, possono a loro volta essere aggregati in array di record dette tabelle che ben si prestano alla memorizzazione in memoria RAM oppure su memoria di massa sotto forma di file di record.
Accedi all'area Riservata per completare la lettura con un esercizio commentato.
Esercizio svolto per gli utenti registrati
Esercizio
Realizzare un programma in C con l'uso delle function, che permetta di creare una tabella con record informativo, che contiene per ogni studente, il nome, il cognome, l'età, e la media che ha conseguito a fine anno.
L'utente, inizialmente deve inserire i dati e poi attraverso un menù deve consentire le seguenti operazioni:
1- Stampa media dei voti con i dati delgi alunni;
2- Visualizzazione della media di un alunno specifico
3- Visualizzazione dei dati degli alunni con voto massimo e minimo
4- Uscita dal programma
Realizzare una codifica in C
Articolo con l'esercizio svolto solo ad utenti Registrati Esercizio Svolto in C sulle struct
Video Lezione Strutture Dati Astratte in C++ -- Edizione 2020
Per il contenuto completo extra con materiali didattici e sorgenti esercizi https://www.corsi-on-line.it/index.ph... La seconda parte del Video Spiega come implementare gli algoritmi e le relative funzioni in C++
Video Lezione - Files in C e C++
Argomenti:
Files binari in C e C++
Files ad accesso diretto e sequenziale in C e C++
Scarica il codice sorgente il PDF (solo registrati unico file zip)
Articoli, Video e Tutorial per lo sviluppo di applicazioni grafiche in C++ con vari Toolkit WxWidgets, QT, ecc.
Ricordando agli utenti che si possono registrare per accedere ad altri contenuti del sito e che la registrazione deve
essere approvata per verificare i dati inseriti, si inseriscono gli ultimi contenuti inseriti.
9-11-2018 - Test amplio di verifica sulla programmazione strutturata e gli algoritmi in C/C++
12-11-2018 - Dispensa EUCIP IT Administrator - Le Memorie di Massa
Iscriviti alla Newsletter
Abbiamo 124 visitatori e nessun utente online