c++ dato astratto

Pascolo

Nuovo Utente
2
0
Buongiorno vorrei un auto in questo esercizio:
Realizzare il tipo di dato astratto “intero opzionale” che codifica il significato di successo o
fallimento durante una computazione. In particolare, se la computazione ha successo il tipo di
dato astratto rappresenta internamento un intero, se invece la computazione non ha successo
viene memorizzato internamente un valore stringa con un breve messaggio dell’errore.
Questo tipo di dato può essere utilizzato ad esempio durante la ricerca di un numero in un
array di interi data una certa condizione: se la ricerca ha successo ed il numero viene trovato,
allora si restituisce l’oggetto opzionale con il valore intero ed un indicatore di successo, se
il numero non viene trovato invece si restituisce l’oggetto opzionale con un indicatore di
fallimento e la descrizione dell’errore.
Il tipo di dato astratto optional_int deve fornire le seguenti operazioni:
• make_optional(int), che costruisce e restituisce un intero opzionale popolando la
componente di successo;
• make_optional(string), che costruisce e restituisce un intero opzionale popolando la
componente di errore;
• use(optional_int), che stampa a video l’intero memorizzato nell’optional oppure
l’errore in base allo stato interno.
Scrivere nel main qualche semplice test per provare l’effettività delle funzioni elencate
sopra, indicando risultato atteso e risultato ottenuto.
Successivamente, anche in un altro file, scrivere un programma che dato un array A
effettua la ricerca di un numero multiplo di 3.
La ricerca deve essere codificata tramite una funzione che ha come tipo di ritorno proprio optional_int. Se la ricerca del multiplo
di 3 ha successo la suddetta funzione restituisce un optional_int con valore 3 e flag di
successo, altrimenti un messaggio di errore elemento non trovato e il flag di errore. Al main
non rimane che “utilizzare” con la funzione use(optional_int) l’intero opzionale ritornato.
Invocare poi nel main questa funzione, testando diversi array in input.
Io ho provato a scrivere questo codice ma penso sia quasi completamente sbagliato :(
C++:
#include <string>
#include <iostream>
using namespace std;
int ricerca_multiplo(optional_int &a){
    for(i=0;i<5;i++){
        if v.A[v.i]%3==0;
        cout<<"giusto";
    }  

struct optional_int{
    int A[5]={1,2,3,4,5}
    string errore="errore";
    int b;
    };
    int main(){
        optional_int A;
        ricerca_multipo(optional_int A);
    }
 
Ultima modifica:

AntonioRagagnin

Nuovo Utente
13
11
Non hai implementato le funzioni richieste dall' esercizio: make_optional(int) quindi che accetta un intero, make_optional(string) quindi che accetta una stringa e la funzione use.

Inoltre secondo me dovresti separare le parti di codice che fanno parte solo del tipo astratto optional_int dalle parti di codice che invece usano optional_int : quindi togliere la variabile A da struct optional_int perche' non e' essenziale al tipo astratto che stai implementando.
 
  • Mi piace
Reazioni: _Achille

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Inoltre non ha nemmeno senso inizializzare errore in quanto non sai se l’oggetto tenga un valore intero o non errore appunto.

E poi se dai ad una struttura un nome in inglese usa la stessa lingua per gli attributi e non chiamare un attributo “b”. Dai su…

Infine i non è nemmeno dichiarato e non sai passare un oggetto ad una funzione
 

Mursey

Super Moderatore
Staff Forum
Utente Èlite
8,230
5,659
@Pascolo non è che postando un codice abbozzato sei nel regolamento, si vede quando uno ci prova o no...
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili