Logo Sito Web

Informatica open Source

Il Digitale come Innovazione
Menu

Menu Principale

  • Home
  • Formazione
    • Piattaforma di Autoistruzioni E-Learning
    • Materiale Didattico Pubblico
    • Progetto ITACA
    • Richiesta lezione/esame di certificazione
    • Guide Acquistabili
    • Corso di Fomrazione e Certificazione Nuova ECDL 2020
  • Consulenza
    • Richiedi una Consulenza Ora
    • Tipologie Consulenze
  • Contattaci
    • Contattaci per informazioni su Lezionei/Corsi in Aula e/o ONline
  • Area Download
  • Mappa del Sito
  • Sottoscrivi Abbonamento Contenuti Digitali

Logo Sito Web

Informatica open Source

Il Digitale come Innovazione

Menu Principale

  • Home
  • Formazione
    • Piattaforma di Autoistruzioni E-Learning
    • Materiale Didattico Pubblico
    • Progetto ITACA
    • Richiesta lezione/esame di certificazione
    • Guide Acquistabili
    • Corso di Fomrazione e Certificazione Nuova ECDL 2020
  • Consulenza
    • Richiedi una Consulenza Ora
    • Tipologie Consulenze
  • Contattaci
    • Contattaci per informazioni su Lezionei/Corsi in Aula e/o ONline
  • Area Download
  • Mappa del Sito
  • Sottoscrivi Abbonamento Contenuti Digitali

Test e Materiali Didattici

  • Test e Simulazioni Informatiche
  • Test Sistema Operativo Linux
  • Test sul sistema operativo Windows - Prompt dei comandi
  • Articoli Networking

Certificazioni Informatiche

  • 2018
    • Certificazione Nuova ECDL, EUCIP, Informatica Giuridica

Linguaggi di Programmazione

  • Linguaggi di Programmazione
    • Java
      • Lezione 1
  • Lingaggio di Programmazione Visual Basic for Application
  • Linguaggio di Programmazione C/C++
  • Linguaggio Programmazione C++ - Articoli A Pagamento

Articoli e Post su Basi di Dati e SQL - Aggiornato 2020

  • Basi di Dati e SQL

Contenuti_Digitali

  • Simulazione - Nuova ECDL - Computer Essential n.1 - Windows 10

Post e Articoli Recenti

  • Nuova ECDL - Online Essentials n.1
  • Video Lezione - Nuova ECDL - Modulo Presentation n.3
  • Video Lezione - Nuova ECDL n.2 - Presentation
  • Esercizio svolto in C++, estratto soluzione di prova di esame
  • Video Lezione - Nuova ECDL n.1 - Presentation

Esercizio svolto in C++, estratto soluzione di prova di esame

  • Email
Dettagli
Scritto da Administrator
Categoria: Linguaggio di Programmazione C++
Pubblicato: 03 Gennaio 2021
Visite: 63
Tags:
  • Eserciziot e Files in C++
  • Files C++
Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 

Esercizio svolto soluzione di una prova di esame dell'esame di Programmazione 1 - Linguaggio C++

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.

Soluzione:

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

  • Avanti

Risorse prese dal Web

  • Montare un disco VirtualBox VDI in Linux
  • Risorse per Certificazione CISCO
  • PHP e Mysql dal Sito PHP.NET
  • Associazione Hermes
  • ISIS Antonio Serra - Napoli
  • Sito Gruppo Docenti di Informatica
  • Sito Web del Prof. De Giorgi

Linguaggi di Programmazione C/C++

  • 2020
    • Esercitazione in C sulla gestione dei numeri casuali
    • Esercitazione funzioni e array in C++
    • Esercizio con le Struct in C++ funzione che ritorna una struttura
    • Video Tutorial - WxWidgets n.5
  • 2021
    • Esercizio svolto in C++, estratto soluzione di prova di esame

Reti Informatiche

  • 2018
    • Appunti sulle Reti informatiche 1
    • Configurare una rete Wireless su sistema operativo Mac OSX
    • Le applicazioni per Internet: Web, FTP e Posta e App per il mobile
  • 2020
    • Reti di Comunicazione - Lezione 2 - Topologie di rete
    • Reti informatiche - I servizi di rete
    • Video Lezione - Il modello ISO/OSI
    • Video Lezione n.2 Reti di Calcolatori - Modello TCP/IP - parte 1
    • Video Lezione n.2 - Reti di Calcolatori - Modello TCP/IP -parte 2
    • Laboratorio di Reti di Calcolatori n.1 - Rete LAN con NAT
    • Video Indirizzamento IP Classfull - Reti di calcolatori
    • Reti Calcolatori - Il Livello Applicaitov
    • Video Lezione Livello Applicativo - Parte II - Esercitazione con PKT

News Contenuti Area Riservata

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

Cerca nel Sito


Ricerca avanzata

Canali Social

Informazioni e Contatti

Per contatti messaggiare al 340-723-55-64 oppure attraverso il modulo contatti

per consulenze/formazione e certificazione.

Contenuti Digitali in Abbonamento - Sottoscrivi prima abbonamento

  • Contenuti Nuova ECDL
  • Linguaggio di Programmazione

Accesso Utente

Accesso Area Riservata

  • Registrati
  • Nome utente dimenticato?
  • Password dimenticata?

Registrati per accedere ai contenuti riservati. Ricorda che se inserisci dati non corretti non verrai approvato

Certificazioni Informatiche

  • Certificazione Nuova ECDL, EUCIP, Informatica Giuridica
  • Conferma Ricezione Prenotazione
  • Nuovo Corso Online Nuova ECDL
  • Presentazione Certificazione Nuova ECDL

Iscriviti alla Newsletter

Iscriviti alla Newsletter

Utenti online

Abbiamo 26 visitatori e nessun utente online

Policy di Utilizzo del Sito e Privacy

Policy di Utilizzo del Sito

Misure per la tutela della Privacy - Informativa

© 2021 Sito ideato e creato dal prof. Giuseppe Sportelli