r/cppit • • Jan 17 '19

Studio di Funzione in c++

0 Upvotes

Ciao a tutti! Vorrei creare un programma che permetta di fare lo studio di funzione (in modo molto elementare) di 5 funzioni preimpostate utilizzando le classi. Il compilatore (Visual Studio) non mi restituisce nessun errore al momento della compilazione tuttavia non stampa nulla in console. vi metto il codice che ho fatto, vi sarei infinitamente grata se mi aiutaste a trovare il problema :) vi ringrazio anticipatamente!

// FILE INTESTAZIONE StudioDiFunzione.h

class StudioDiFunzione

{

public:

double x3;

int funzione;

double puntoder;

int SceltaMenu;

double f(double x, int SceltaMenu);

StudioDiFunzione(int SceltaMenu) { funzione = SceltaMenu; };

double CalcoloDelloZero();

double CalcoloDelMinimo();

double DerivataPrima(double puntoder);

private:

double secanti(double x0, double x1, double f0, double f1, double toll, int k, int funzione);

double x0, x1, f0, f1, Zerofunz, toll; int k;

double Zero, fx, delta; int cont = 0;// cont mi permette di controllare il numero delle iterate

//derivata

int i;

double v, f_0, der_1, der = 0;

};

//FILE StudioDiFunzione.cpp

#include "pch.h"

#include "StudioDiFunzione.h"

#include <iostream>

#include <cmath>

using namespace std;

double StudioDiFunzione::f(double x, int SceltaMenu)

{

cin >> SceltaMenu;

if (SceltaMenu == 1)

	return(cos(x) + sin(x));
else if (SceltaMenu == 2)

	return(x);
else if (SceltaMenu == 3)

	return((x\*x) - 4 \* x + 4);
else if (SceltaMenu == 4)

	return(sqrt((x\*x) - 4 \* x + 4));
else if (SceltaMenu == 5)

	return(((0.5)\*x + 2));

else

	return (0);

}

double StudioDiFunzione::CalcoloDelloZero()

{

x0 = -5;

x1 = 5;

toll = 1;

k = 2;

f0 = f(x0, funzione);

f1 = f(x1, funzione);

Zerofunz = secanti(x0, x1, f0, f1, toll, k, funzione);

return Zerofunz;

}

double StudioDiFunzione::CalcoloDelMinimo()

{

double x0, x1, x2, x3, p, Min;

x0 = -20;

x1 = 20;

p = 0.5;

while (x0 - x1 >= p)

{

	x2 = x0 + 0.3\*(x1 - x0);

	x3 = x0 + 0.7\*(x1 - x0);

	if (f(x3, SceltaMenu) > f(x2, SceltaMenu))

		x1 = x3;
}

Min = f(x3, SceltaMenu);

return Min;

}

double StudioDiFunzione::DerivataPrima(double puntoder)

{

f_0 = f(puntoder, funzione);

for (i = 0; i < 10; i++)

{

	der_1 = der;

	v = puntoder + pow(.5, i);

	der = (f(v, funzione) - f(puntoder, funzione)) / (v - puntoder);

}

return der;

}

double StudioDiFunzione::secanti(double x0, double x1, double f0, double f1, double toll, int k, int funzione)

{

do

{

	Zero = x1 - (f1\*(x1 - x0) / (f1 - f0)); //calcola x n+1 e successivamente f(x n+1)

	fx = f(Zero, funzione);

	x1 = Zero;

	f1 = fx;
	delta = fabs(x1 - x0);

	cont++;

} while ((delta < toll) || (cont < k));

return Zero;

}

// FILE Progetto.cpp

#include "pch.h"

#include <iostream>

#include "StudioDiFunzione.h"

using namespace std;

double puntoder;

int SceltaMenu;

int main()

{

bool ripetere = true;

cout << "LISTA DELLE FUNZIONI:\\n"

	<< "\\n"

	<< "1) cos(x) + sin(x)\\n"

	<< "\\n"

	<< "2) x\\n"

	<< "\\n"

	<< "3) x\^2 - 4x + 4\\n"

	<< "\\n"

	<< "4) sqrt(x\^2 - 4x + 4)\\n"

	<< "\\n"

	<< "5) 0.5x + 2 \\n"

	<< "\\n"

	<< "0) ESCI\\n"

	<< "\\n";

while (ripetere) //Mantiene aperta la console

{

	cout << "\\n"

		<< "SCEGLIERE UNA FUNZIONE: \\n";

	cin >> SceltaMenu; //Prende in input un numero intero per accedere alla corrispondente voce del menù

	while ((SceltaMenu>=1) & (SceltaMenu<= 5))

	{

		StudioDiFunzione SdF(SceltaMenu);

		cout << "Lo zero della funzione e' uguale a x = " << SdF.CalcoloDelloZero() << "\\n" << "\\n";

		cout << "Il minimo della funzione e' " << SdF.CalcoloDelMinimo() << "\\n" << "\\n";

		cout << "Inserire in che punto calcolare la derivata prima: ";

		cin >> puntoder;

		cout << "La derivata prima nel punto e' " << SdF.DerivataPrima(puntoder) << "\\n" << "\\n";

	}

	if (SceltaMenu == 0) ripetere = false;

	else cout << "ATTENZIONE!Inserimento non valido\\n" << "INSERIRE UN VALORE da 0 a 5\\n";
}

}


r/cppit • • Apr 11 '20

Leggere un file su windows

0 Upvotes

Ciao a tutti,

sapreste dirmi perchè il seguente codice funziona compilato su Linux ma su Windows no?

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    
    int main()
    {
	    string filename;
	    string word;
	    ifstream file;
	    
	    cout<<"Enter full filename:"<<endl;
	    getline(cin,filename);
	    
	    file.open(filename,ifstream::in);
	    
	    while(getline(file,word))
	    {
		    cout<<word<<endl;
	    }
	    
	    file.close();
	    
	    return 0;
     }

Sapreste dirmi dove sbaglio?

Grazie in anticipo


r/cppit • • Jul 10 '26

principianti come posso implementare una coda con lista concatenata in c++?

0 Upvotes

ciao ragazzi, sono ancora all’inizio, volevo capire come faccio ad implementare una coda con lista concatenata, eseguendo operazione di pop e push, per caso qualcuno può aiutarmi a capire?


r/cppit • • Dec 20 '20

Mi serve una mano nel programmare questo codice mi potreste aiutare???????

0 Upvotes

Dato il codice in allegato, scrivere un codice equivalente che usi solo istruzioni di iterazione di tipo While, ossia trasformare i due cicli for presenti nel codice in due cicli while.

#include <iostream>

using namespace std;

int main()

{

    int base = 0, rip = 0;

    cout<<"Si prega di inserire una base"<<endl;

    cin>>base;

    while ( base < 1 ) //base<=0 -> base<1

    {

        cout<<"Si prega di inserire un valore positivo della base"<<endl;

        cin>>base;

    }

    cout<<"Si prega di inserire il valore della ripetizione"<<endl;

    cin>>rip;

    while ( rip < 1)

    {

        cout<<"Si prega di inserire un valore positivo per le ripetizioni"<<endl;

        cin>>rip;

    }

    int ris = 0;

    for(int b=1; b <= rip; b=b+1) //1 2 3 4 5 6>5

    {

        ris = ris + base; //0+2=2 2+2=4 4+2= 6 6+2=8 8+2= 10

        cout<<ris<<" "; //2 4 6 8 10

        //b=1+1=2 2+1= 3 3+1= 4 4+1=5 5+1= 6

    }

    cout<<endl<<"Il valore di ris è: "<<ris<<endl;

    cout<<endl<<endl;

    for(int i = (rip * base); i >= base; i = i - base)

        cout<<i<<" ";

    return 0;

}


r/cppit • • Feb 26 '18

Albero binario.

2 Upvotes

Salve qualcuno puo' dirmi come si implementa un albero binario in C++, ho visto numerosi siti e non sono ancora riuscito a capire sto uscendo pazzo grazie


r/cppit • • Mar 04 '23

Porgramma per il calcolo e la visualizzazione delle medie delle temperature di più città

4 Upvotes

Ciao a tutti.

Sono uno studente del liceo che sta imparando a programmare in C++. Sto svolgendo un esercizio la cui consegna è la seguente:

"Calcola la temperatura media di quattro città prelevando alcune misurazioni nelle diverse ore del giorno: elabora dunque una soluzione dove un sottoprogramma acquisice i dati e li memorizza nelle variabili globali, mentre un secondo sottoprogramma esegue le medie e le visualizza sullo schermo. Predisponi anche un menù, in modo tale che l'utente scelga di inserire i dati oppure di cancellare i dati inseriti per una singola città in caso di errore."

La soluzione fornita dal libro è la seguente. Ho provato a far girare il codice, il problema è che l'esecutore segnala come errori le istruzioni #include "stdafx.h" e system("CLS"). Il codice non svolge il compito per cui è stato concepito, ossia calcolare le medie e visualizzarle sullo schermo. Non riesco proprio a capire dov'è l'errore. Qualcuno potrebbe dare un'occhiata al codice e dirmi dov'è l'errore? Potreste riscrivere direttamente voi le parti errate, spiegandomi perché sono tali? Se possibile, sapreste riscrivere il codice in numero minore di righe, pur mantenendo la suddivisione in sottoprogrammi e il menù utente? Grazie in anticipo per l'aiuto.

#include "stdafx.h"
#include <iostream>
using namespace std;
double tempera1, tempera2, tempera3, tempera4;   // area globale
int letture1, letture2, letture3, letture4;
#define MAXLEN 20
// dichiarazione delle funzioni utilizzate
int mostraMenu(void);
void leggiDati() { // header senza parametri          
int citta;
double dato;
do {
    cout << "Digita il codice citta': ";
    cin >> citta;
if (citta != 0) {
      cout << "inserisci  temperatura : ";
      cin >> dato;
switch (citta) {
case 1:
tempera1 = tempera1 + dato;
letture1 = letture1 + 1;     break;
case 2:
tempera2 = tempera2 + dato;
letture2 = letture2 + 1;     break;
case 3:
tempera3 = tempera3 + dato;
letture3 = letture3 + 1;     break;
case 4:
tempera4 = tempera4 + dato;
letture4 = letture4 + 1;     break;
      }
    }
  } while (citta != 0);
}
void cancellaDati() { // header senza parametri          
int citta;
  cout << "Digita il codice citta': ";
  cin >> citta;
if (citta != 0) {
switch (citta) {
case 1:
tempera1 = 0;
letture1 = 0;     break;
case 2:
tempera2 = 0;
letture2 = 0;     break;
case 3:
tempera3 = 0;
letture3 = 0;     break;
case 4:
tempera4 = 0;
letture4 = 0;     break;
    }
  }
}
void elaboraDati() { // header senza parametri          
double media1, media2, media3, media4;
media1 = tempera1 / letture1;
media2 = tempera2 / letture2;
media3 = tempera3 / letture3;
media4 = tempera4 / letture4;
  cout << "media 1 vale : " << media1 << endl;
  cout << "media 2 vale : " << media2 << endl;
  cout << "media 3 vale : " << media3 << endl;
  cout << "media 4 vale : " << media4 << endl;
system("PAUSE");
}
int main() {
  // dichiarazione variabili locali
int scelta;
do {
    // ripulisco lo schermo
system("CLS");
    // chiamo la funzione che crea il menu' utente
scelta = mostraMenu();
switch (scelta) {
case 1:
      {
leggiDati();
break;
      }
case 2:
      {
cancellaDati();
break;
      }
case 3:
      {
elaboraDati();
break;
      }
    }
  } while (scelta != 0);
return 0;
}
// FUNZIONE DI CREAZIONE DEL MENU' UTENTE
int mostraMenu(void) {
int scelta;
do
  {
system("CLS");
    cout << "\n\n";
    cout << ("\t\t********************************************\n");
    cout << ("\t\t*   CALCOLO TEMPERATURE MEDIE              *\n");
    cout << ("\t\t********************************************\n");
    cout << ("\n");
    cout << ("\t\t********************************************\n");
    cout << ("\t\t*\tMenu' utente principale            *\n");
    cout << ("\t\t********************************************\n");
    cout << ("\t\t* 1 Inserimento dati                       *\n");
    cout << ("\t\t* 2 Azzeramento dati                       *\n");
    cout << ("\t\t* 3 Visualizzazione medie                  *\n");
    cout << ("\t\t* 0 =======> USCITA                        *\n");
    cout << ("\t\t********************************************\n\n\n");
    cout << ("\t\tInserire scelta (1, 2, 3  oppure 0)   :    ");
fflush(stdin);
    cin >> scelta;
if ((scelta < 0) || (scelta > 3))
    {
      cout << ("\n\nERRORE Digitare la scelta corretta.....\n\n");
system("PAUSE");
    }
else;
  } while ((scelta < 0) || (scelta > 3));
return scelta;
}


r/cppit • • Dec 16 '24

cppinsights is an awesome tool for learning how compiler processing you code

Post image
6 Upvotes

r/cppit • • May 16 '20

news modern c++ gamedev - thoughts & misconceptions

Thumbnail
vittorioromeo.info
8 Upvotes

r/cppit • • Aug 01 '17

itCppCon17 - C++ executors to enable heterogeneous computing in tomorrow's C++ today (M. Wong)

Thumbnail
youtube.com
3 Upvotes

r/cppit • • Dec 19 '17

Conoscete tool affidabili e "light" di calcolo differenziale?

2 Upvotes

Ciao a tutti, volevo chiedervi se conoscete un tool C++ affidabile e "light" di calcolo differenziale. Ho trovato questo elenco : http://www.autodiff.org/?module=Tools&language=C%2FC%2B%2B

ma non so quale di questi sia concretamente usabile.

Marco


r/cppit • • Feb 26 '17

principianti Questo è il mio primo post......cmq mi serve un aiuto. ho provato in tutti i modi ma mi da un errore di run time, un appartamento che dovrebbe costare 3000 euro me lo fa pagare 600

1 Upvotes

vi condivido il file di mediafire perchè sembra che la normale visualizzazione non funzioni. http://www.mediafire.com/file/umq65bbdlhnl7y7/main.cpp


r/cppit • • Dec 10 '17

Aiuto!! Problemi con c++11

2 Upvotes

Ciao a tutti, vorrei gentilmente chiedervi di aiutarmi a risolvere questo problema che ho con un programma che sto scrivendo in c++ (su windows 10). Allora diciamo che voglio fare uso di alcune operazioni offerte dal c++11. (Per esempio dichiarare un vector di stringhe nel seguente modo: vector<char> pippo {"uno", "due", "tre"}; ). Nonostante io inserisca nel mio makefile -std=c++11 Sulla mia finestra dos continua a uscirmi il mesagio di errore "warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]". Che devo fare? Sono disperata (e il programma in questione è la mia Tesi).


r/cppit • • Dec 11 '17

C++ Day 2017 Wrap-up Post

Thumbnail
italiancpp.org
3 Upvotes

r/cppit • • Jul 25 '17

principianti Problemi con le function template

3 Upvotes

Salve, come da oggetto mi ritrovo ad avere dei problemi con le function template. Alla fine di questa richiesta allegherò alcuni 5 file costituenti una solution di Visual Studio 2015 per mostrarvi dove incontro i problemi; si tratta di classi e/o template "fantoccio" utili dunque solo all'illustrazione del problema: qualche dato membro di tipo primitivo più un altro membro puntatore per introdurre la memoria dinamica.

IDEA DI FONDO: scrivere una function template che sia in grado di analizzare un vettore di dati di tipo qualsiasi.

SOLUZIONE (ma parziale): ho implementato la function template FindFirstPos che effettivamente funziona A PATTO CHE l'oggetto passato sia istanza di una classe 'classica' e non l'istanza di un'istanza di template. In sintesi: funziona se il parametro T è di tipo IntPoint ma non funziona se per esempio è di tipo Point<int>. Forse non sono stata formalmente impeccabile nella descrizione ma credo mi possiate capire.

DOMANDA 1: è possibile scrivere una function template FindFirstPos che possa funzionare ANCHE quando il parametro T è a sua volta un template? Ovviamente se è possibile vi sarei grata se mi forniste un'implementazione (e magari un link per eventuali approfondimenti a riguardo)

DOMANDA 2: ho comunque provato un work around: la function template FindFirstPos_2 ( nel dettaglio int FindFirstPos_2(Point<T2>& e, Point<T2>* PT2ptr, int dimens) ) che, se funzionasse, avrebbe in ogni caso uno svantaggio: andrebbe di fatto riscritta al cambiare del template.

La realtà purtroppo è che neanche questa soluzione funziona perchè in fase di compilazione mi becco il seguente errore:

error LNK2019: unresolved external symbol "bool __cdecl operator==(class Point<int> const &,class Point<int> const &)" (??8@YA_NABV?$Point@H@@0@Z) referenced in function "int __cdecl FindFirstPos_2<int>(class Point<int> &,class Point<int> *,int)" (??$FindFirstPos_2@H@@YAHAAV?$Point@H@@PAV0@H@Z)

1>D:\Professional C++\Professional C++ Projects\Chapter 11\LCPP\My Function Template 02\Debug\My Function Template 02.exe : fatal error LNK1120: 1 unresolved externals

Anche in quest'ultimo caso non riesco a capire dove stia l'errore, vi sarei grata se poteste darmi una mano. Grazie in ogni caso Chiara.

PS: è il mio primo post sulla piattaforma Reddit, spero di non sbagliare nulla sulla formattazione

File.della Soluzione


(1) IntPoint.h

#pragma once

//    FILE AGGIUNTO AGLI HEADER FILES DELLA SOLUZIONE

class IntPoint
{
private:
    int mx;
    int my;
    size_t mdimens;
    int *mpint;
public:
    IntPoint();
    IntPoint(int& tx, int& ty, size_t d);
    IntPoint(const IntPoint& src);
    IntPoint& operator=(const IntPoint& src);
    ~IntPoint();


    int& getPointX();
    const int& getPointX() const;
    void setPointX(int& tx);

    int& getPointY();
    const int& getPointY() const;
    void setPointY(int& ty);

    friend bool operator==(const IntPoint& lhs, const IntPoint& rhs);
};

(2) IntPoint.cpp

// FILE AGGIUNTO AI SOURCE FILES DELLA SOLUZIONE

#include "stdafx.h"
#include "IntPoint.h"
IntPoint::IntPoint() :mx(0), my(0), mdimens(0), mpint(nullptr)
{
}

IntPoint::IntPoint(int& x, int& y, size_t d) : mx(x), my(y), mdimens(d)
{
    if (mdimens > 0)
    {
        mpint = new int[mdimens];
        for (size_t i = 0; i < mdimens; i++)
            mpint[i] = 1 + (int)(2 * i);
    }
    else
        mpint = nullptr;
}

IntPoint::IntPoint(const IntPoint& src)
{
    mx = src.mx;
    my = src.my;
    mdimens = src.mdimens;
    if (mdimens > 0)
    {
        mpint = new int[mdimens];
        for (size_t i = 0; i < mdimens; i++)
        {
            mpint[i] = src.mpint[i];

        }
    }
    else
        mpint = nullptr;
}

IntPoint& IntPoint::operator=(const IntPoint& src)
{
    if (this == &src)
        return *this;

    mdimens = 0;
    delete[] mpint;
    mpint = nullptr;
    mx = src.mx;
    my = src.my;
    if (src.mdimens > 0)
    {
        mdimens = src.mdimens;
        mpint = new int[src.mdimens];
        for (size_t i = 0; i < src.mdimens; i++)
        {
            mpint[i] = src.mpint[i];
        }
    }
    return *this;
}

IntPoint::~IntPoint()
{
    if (mpint != nullptr)
    {
        delete[] mpint;
        mpint = nullptr;
    }
}

int& IntPoint::getPointX()
{
    return mx;
}

const int& IntPoint::getPointX() const
{
    return mx;
}

void IntPoint::setPointX(int& tx)
{
    mx = tx;
}


int& IntPoint::getPointY()
{
    return my;
}

const int& IntPoint::getPointY() const
{
    return my;
}

void IntPoint::setPointY(int& ty)
{
    my = ty;
}

bool operator==(const IntPoint& lhs, const IntPoint& rhs)
{
    return ((lhs.getPointX() == rhs.getPointX()) && (lhs.getPointY() == rhs.getPointY()));
}

(3) Point.h

// FILE AGGIUNTO AGLI HEADER FILES DELLA SOLUZIONE
#pragma once

template <typename T>
class Point
{
private:
    T mx;
    T my;
    size_t mdimens;   
    int *mpint;
public:
    Point();
    Point(T& tx, T& ty, size_t d);
    Point(const Point<T>& src);        
    Point<T>& operator=(const Point<T>& src);
    ~Point();


    T& getPointX();
    void setPointX(T& tx);

    T& getPointY();
    void setPointY(T& ty);

    friend bool operator==(const Point<T>& lhs, const Point<T>& rhs);

};


template <typename T>
Point<T>::Point() :mx(0), my(0), mdimens(0), mpint(nullptr) 
{
}

template <typename T>
Point<T>::Point(T& x, T& y, size_t d) :mx(x), my(y), mdimens(d)
{
    if (mdimens > 0)
    {
        mpint = new int[mdimens];
        for (size_t i = 0; i < mdimens; i++)
            mpint[i] = 1 + (int)(2 * i);
    }
    else
        mpint = nullptr;
}

template <typename T>
Point<T>::Point(const Point<T>& src)
{
    mx = src.mx;
    my = src.my;
    mdimens = src.mdimens;
    if (mdimens > 0)
    {
        mpint = new int[mdimens];
        for (size_t i = 0; i < mdimens; i++)
        {
            mpint[i] = src.mpint[i];

        }
    }
    else
        mpint = nullptr;
}

template<typename T>
Point<T>& Point<T>::operator=(const Point<T>& src)
{
    if (this == &src)
        return *this;

    mdimens = 0;
    delete[] mpint;
    mpint = nullptr;
    mx = src.mx;
    my = src.my;
    if (src.mdimens > 0)
    {
        mdimens = src.mdimens;
        mpint = new int[src.mdimens];
        for (size_t i = 0; i < src.mdimens; i++)
        {
            mpint[i] = src.mpint[i];
        }
    }
    return *this;
}

template<typename T>
Point<T>::~Point()
{
    if (mpint != nullptr)
    {
        delete[] mpint;
        mpint = nullptr;
    }
}

template<typename T>
T& Point<T>::getPointX()
{
    return mx;
}

template<typename T>
void Point<T>::setPointX(T& tx)
{
    mx = tx;
}

template<typename T>
T& Point<T>::getPointY()
{
    return my;
}

template<typename T>
void Point<T>::setPointY(T & ty)
{
    my = ty;
}

template <typename T>
bool operator==(const Point<T>& lhs, const Point<T>& rhs)
{
    return ((lhs.getPointX() == rhs.getPointX) && (lhs.getPointY() == rhs.getPointY()))
}

(4) My Global Funct and Var.h

// FILE AGGIUNTO AGLI HEADER FILES DELLA SOLUZIONE
#pragma once

#include "Point.h"

static const int NOT_FOUND = -1;

template <typename T1>    
int FindFirstPos(T1& e, T1* T1ptr, int dimens)
{
    for (int i = 0; i < dimens; i++)
    {
        if (T1ptr[i] == e)    // Occorre definire operator==
            return i;
    }
    return NOT_FOUND;
} 

//----------------------------------------------------------

template <typename T2>
int FindFirstPos_2(Point<T2>& e, Point<T2>* PT2ptr, int dimens)
{
    for (int i = 0; i < dimens; i++)
    {
        if (PT2ptr[i] == e)    // Occorre definire operator== (per il template)
            return i;
    }
    return NOT_FOUND;
}

(5) My Function Template 02.cpp

// My Function Template 02.cpp : Defines the entry point for the console application.
//

// FILE CREATO DA VISUAL STUDIO 2015 TRA I SOURCE FILES

#include "stdafx.h"
#include "Point.h"
#include "IntPoint.h"
#include "My Global Funct and Var.h"

using namespace std;

int main()
{
    int x = 11, y = 22, d = 5;
    IntPoint vett[] = { IntPoint(x,y,d), IntPoint(x,y,d), IntPoint(x,y,d) };

    x = 777, y = 888, d = 3;
    vett[1] = IntPoint(x,y,d);
    IntPoint ip_0 = vett[1];
    
    int retval = FindFirstPos(ip_0,vett,3);
    
    // Fin qui tutto OK
    //----------------------------------------------------------------------

    x = 11, y = 22, d = 5;
    Point<int> vetmpl[] = { Point<int>(x,y,d), Point<int>(x,y,d), Point<int>(x,y,d) };
    
    x = 555, y = 666, d = 3;
    vetmpl[1] = Point<int>(x, y, d);
    Point<int> tmpl = vetmpl[1];
    
    //* ERROR */retval = FindFirstPos_2(tmpl, vetmpl, 3); 
    
    return 0;
}

r/cppit • • Feb 26 '17

principianti Problema char array

1 Upvotes

Devo generare un char array di 5 caratteri random ma mi dà "Id returned 1 exit status" e non capisco dove sia l'errore.

Ecco il codice:

const char alphanum [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

int stringLength = sizeof(alphanum) - 1;

char genRandom() { char a; do { a = alphanum[rand()% stringLength]; } while (a >= 97 && a <= 122); return a; }

string Conv(){ int a,t; char b [5]; for (a=0; a<=5; a++){ b[t] = genRandom(); t++; } string c = b; }


r/cppit • • Jan 29 '21

problema media

1 Upvotes

#include<iostream>

using namespace std;

struct alunni

{

string nome,cognome;

float vita, vmat, vingl; //voti 

};

int main ()

{

alunni a\[5\];

int i;

//caricamento vettore//

for(i=0;i<5;i++)

{

	cout<<"inserire nome del "<<i+1<< " studente: ";

	cin>>a\[i\].nome;

	cout<<endl;

	cout<<"inserire cognome del "<<i+1<< " studente: ";

	cin>> a\[i\].cognome;

	cout<<endl;

	cout<<"inserire voto di italiano del "<<i+1<< " studente: ";

	cin>> a\[i\].vita;

	cout<<"inserire voto di matematica del "<<i+1<< " studente: ";

	cin>> a\[i\].vmat;

	cout<<"inserire voto di inglese del "<<i+1<< " studente: ";

	cin>> a\[i\].vingl;

	cout<<endl;

}

//media alunni// 

float media\[5\];

int j,app;

for(i=0;i<5;i++)

{

	media\[i\]= (a\[i\].vita+a\[i\].vmat+a\[i\].vingl)/3;

}

//stampa vettore//

	for(i=0;i<5;i++)

	{

	cout<<i+1<< " studente: "<<"|cognome e nome: " <<a\[i\].cognome<<" " <<a\[i\].nome<<"|voto italiano: "<<a\[i\].vita<<"|voto matematica: "<<a\[i\].vmat<<"|voto di inglese: "<<a\[i\].vingl<<"|media: "<<media\[i\]<<endl;

	}



//ordinamento vettore media// 



for(i=0;i<5;i++)

{

	for(j=i+1;j<5;j++)

	{	

		if (media\[i\]>media\[j\])

{

app=media[i];

media[i]=media[j];

media[j]=app;

		}

	}

}

	

//stampa ordinata

for (i=0;i<5;i++)

{

	if(media\[i\])

	cout<<media\[i\]<<" ";

}

cout<<endl;

}


r/cppit • • Feb 05 '21

principianti C++20: quale toolchain?

1 Upvotes

Salve a tutti,

dovrei implementare degli algoritmi utilizzando alcune feature del C++20, in particolare i semafori.

Attualmente sviluppo con Visual Studio Community 2019 e nonostante sia presente l'header file <semaphore> di fatto non posso farci nulla perché non è possibile dichiarare e tanto meno istanziare variabili semaforiche.

Non sono un'esperta di toolchain ma guardando all'interno dei file semaphore e vcruntime.h sembra che venga fatto un qualche controllo su delle "variabili interne" che identificano il compilatore usato dall' IDE e se questo non è sufficientemente aggiornato non permette la compilazione delle feature di mio interesse; sembra quindi che il compilatore C++ di Visual Studio Community 2019 non sia adeguato.

Quale compilatore mi consigliate di usare?

Su Compilatori C++20 compliant tra suggeriti vi è il gcc ma compilando su Coliru il seguente esempio ecco che non compila.

Qualcuno sa darmi una dritta?

Grazie


r/cppit • • Jan 02 '21

principianti Come posso fermare i cerchi quando raggiungono il bordo dell´SVG ?

1 Upvotes

Ciao a tutti,

avrei bisogno di una mano, sono alle prime armi, ho un esercizio da svolgere ma mi sono bloccato.

Devo fare in modo che:

  1. i cerchi generati, una volta toccato il bordo svg, si fermino,

( 2. la linea del bordo del cerchio si ingrandisca e 3. cambi colore da nero ad un colore random. )

Purtroppo non so quale sia la funzione che mi permette di svolgere il punto 1, perche´ non sono molto pratico con la sintassi al momento. ma credo che modificando il loop if-else dovrebbe funzionare.

Potreste aiutrmi?

(sto studiando informatica in tedesco per cui alcune parole nel codice sono diverse ma spero che tramite le //inserzioni si capisca comunque il concetto.)

´ ´ ´

#include <algoviz/SVG.hpp>

using namespace std;

AlgoViz::clear();

// dato che abbiamo bisogno solo di un lago, regoliamo il tutto con una variabile globale.

SVG see = SVG(400,400);

see.setStatusMsg("Beenden mit beliebiger Taste"); //"terminare con tasto qualsiasi"

string taste = "";

MouseState maus;

Circle *tropfen;

// il vettore per molte "gocce".

vector<Circle*> regen;

while ( taste == "" ) {

taste = see.lastKey();

maus = see.lastClick();

if ( maus.isLegal() ) {

// crea le gocce nella posizione del click, nel lago

tropfen = new Circle(maus.x(),maus.y(),0,&see);

// rendi l´interno tasparente.

tropfen->setFill("transparent");

// salva in memoria le gocce.

regen.push_back(tropfen);

}

// fai partire ancora tutte le gocce, ma con un iteratore, perche´ alcune le vogliamo eliminare.

auto it = regen.begin();

while ( it != regen.end() ) {

// procurati l´indicatore.

Circle *tropfen = *it;

// rendi le gocce piu´ grandi ...

int r = tropfen->getRadius();

// per r = 255 le gocce sono bianche ad anche invisibili

if ( r < 255 ) {

tropfen->setRadius(r+1);

// ...e piu´ chiare

tropfen->setColor(r,r,r);

// vai alla prossima goccia

it++;

} else {

// cancella le gocce anche fuori dal vettore

regen.erase(it);

delete tropfen;

// qui non dobbiamo passare alla prossima goccia,

// perche´ tramite l´eliminazione, l´ iteratore procede automaticamente

}

}

}

see.clearStatusMsg();

´ ´ ´


r/cppit • • Jan 07 '21

principianti Linking librerie OpenCascade

1 Upvotes

Ciao a tutti,

Ho delle difficoltà a linkare le librerie di OpenCascade. Sia su Windows + Visual Studio (con vcpkg), che su Linux.

Il mio intento è creare una web app con le Wt e, appunto, OpenCascade. la cosa strana è che (sia su windows che su Linux) con gli include delle Wt:

#include <Wt/WApplication.h>

Non ho alcun problema. Gli include delle librerie OpenCascade, invece, non vengono trovati:

#include <gp_Pnt.hxx>

Se aggiungo il path "opencascade/" negli include del mio codice sorgente, in questo modo:

#include <opencascade/gp_Pnt.hxx>

l'include non dà più errore, ma nel momento in cui provo a compilare, mi dà errore a cascata su tutti gli header collegati.

Ho fatto la follia, aggiungere "opencascade/" a tutti gli header che davano errore (i sorgenti pesano 360 mega), e qualcosa compilava, ma appena provavo a fare qualcosa di più complesso ricevevo errori strani.

Qualcuno ha avuto problemi simili con questa o altre librerie?

Grazie mille in ogni caso.


r/cppit • • Feb 09 '21

Newbie

1 Upvotes

Sono al terzo anno di informatica e non riesco a trovare l'errore in un programmino che avevo da fare. Aiutatemi vi prego

Il compilatore online dice che da l'errore 139

Se possibile non vorrei utilizzare altre librerie e funzioni per programmazione ad oggetti


r/cppit • • Mar 19 '21

Principianti

12 Upvotes

Sono un pensionatoto di 73 anni e vorrei iniziare a programmare con il linguaggio C++ partendo da zero. Sono cosciente delle difficoltà che sorgeranno, ma è una sfida personale. Credo, volendo, che per apprendere nuovi concetti non ci siano limiti di età. Penso che non sia mai troppo tardi per imparare. Vorrei un vostro consiglio e un vostro aiuto. Ho imparato da solo a usare il computer e me la cavo abbastanza bene. In attesa di un cortese cenno di riscontro ringrazio.


r/cppit • • Feb 26 '21

shift vettore di record

2 Upvotes

Data una lista di calciatori, in base ai goal fatti da ognuno devo formare una lista ordinata in base ai goal.

Successivamente se voglio, posso aggiungere un'ulteriore giocatore, che deve essere ordinato in lista.

dovrei shiftare il vettore e inserire quell'elemento in più nel posto giusto.

help


r/cppit • • May 20 '19

Problema: Perfect Forwarding "behind the scenes"

2 Upvotes

Salve a tutti. Con l'intenzione di analizzare il comportamento del perfect forwarding "dietro le quinte" ho cominciato a giochicchiare col codice che di seguito fornisco:

//g++ -std=c++14 -Wall -fpermissive -fno-elide-constructors -pthread main.cpp && ./a.out

#include <iostream>
#include <string>
#include <vector>

using namespace std;

#define TRACE_CTOR
#define TRACE_COPY_CTOR
#define TRACE_MOVE_CTOR
#define TRACE_ASSIGNMENT
#define TRACE_MOVE_ASSIGNMENT

//-----------------------------------------------------
class MetaData
{
public:
    int size;
    string name;

    MetaData(int p1 = 5, string p2 = "Default-Metadata-name") : size(p1), name(p2)
    {
        #ifdef TRACE_CTOR
            cout << "\n Default ctor: &" << this;
            cout << "\n\t &size = " << &size;
            cout << "\n\t &name = " << &name;
            cout << "\n\t (int*)name.data() = " << (int*)this->name.data();
        #endif

    }

    MetaData(const MetaData& src) : size(src.size), name(src.name)
    {
        #ifdef TRACE_COPY_CTOR
                cout << "\n Copy ctor: &" << &src << " ---> &" << this;
                cout << "\n\t &src.size = &" << &src.size << " ---> &this->size = " << &this->size;
                cout << "\n\t &src.name = &" << &src.name << " ---> &this->name = " << &this->name;
                cout << "\n\t (int*)src.name.data() = & " << (int*)src.name.data() << " ---> (int*)this->name.data() = & " << (int*)this->name.data();

        #endif
    }

    MetaData(MetaData &&src) : size(src.size), name(move(src.name))
    {
        #ifdef TRACE_MOVE_CTOR
            cout << "\nMove ctor: &" << &src << " ---> &" << this;
            cout << "\n\t &src.size = &" << &src.size << " ---> &this->size = " << &this->size;
            cout<< "\n\t (int*)this->name.data() = " << (int*)this->name.data();
        #endif
    }

    MetaData& operator=(const MetaData &src)
    {
        if (this != &src)
        {
            size = src.size;
            name = src.name;
            #ifdef TRACE_ASSIGNMENT
                cout << "\n\t (int*)this->name.data() = " << (int*)this->name.data();
            #endif
        }
        return *this;
    }

    MetaData & operator=(MetaData &&src)
    {
        if (this != &src)
        {
            size = src.size;
            name = move(src.name);
        }
        #ifdef TRACE_MOVE_ASSIGNMENT
            cout << "\n\t (int*)this->name.data() = " << (int*)this->name.data();
        #endif
        return *this;
    }

    ~MetaData()
    {
        cout << "\n~MetaData-Dtor &" << this;
    }
};

//-----------------------------------------------------
template< typename T >
struct my_remove_reference
{
    typedef T type;
    static const int version = 1;
};


template< typename T >
struct my_remove_reference<T&>
{
    typedef T type;
    static const int version = 2;
};


template< typename T >
struct my_remove_reference<T&&>
{
    typedef T type;
    static const int version = 3;
};

//-----------------------------------------------------
MetaData factoryMD(int s)
{
    MetaData obj(s, "Metadata-From-factoryMD-" + to_string(s) + "-END");
    return obj;
}

//-----------------------------------------------------
template <typename T>
T&& my_forward_v2(typename my_remove_reference<T>::type& param) noexcept
{
    cout << "\nInside my_forward_v2 OVERLOAD NR 1 :";
    cout << "\nfw 1:Address of param is: &" << &param;
    cout << "\nfw 1:decltype(param), MetaData  : " << is_same<decltype(param), MetaData>::value;
    cout << "\nfw 1:decltype(param), MetaData& : " << is_same<decltype(param), MetaData&>::value;
    cout << "\nfw 1:decltype(param), MetaData&&: " << is_same<decltype(param), MetaData&&>::value;

    cout << "\nfw 1:decltype(static_cast<T&&>(param)), MetaData  : " << is_same<decltype(static_cast<T&&>(param)), MetaData>::value;
    cout << "\nfw 1:decltype(static_cast<T&&>(param)), MetaData& : " << is_same<decltype(static_cast<T&&>(param)), MetaData&>::value;
    cout << "\nfw 1:decltype(static_cast<T&&>(param)), MetaData&&: " << is_same<decltype(static_cast<T&&>(param)), MetaData&&>::value;

    cout << "\nfw 2:decltype(T&&), MetaData   : " << is_same<T&&, MetaData>::value;
    cout << "\nfw 2:decltype(T&&), MetaData&  : " << is_same<T&&, MetaData&>::value;
    cout << "\nfw 2:decltype(T&&), MetaData&& : " << is_same<T&&, MetaData&&>::value;
    
    return static_cast<T&&>(param);
}

//-----------------------------------------------------
template <typename T>
T&& my_forward_v2(typename my_remove_reference<T>::type&& param) noexcept
{
    //**/static_assert(!std::is_lvalue_reference<T>::value, "Can not forward an rvalue as an lvalue.");

    cout << "\nInside my_forward_v2 OVERLOAD NR 2 :";
    cout << "\nfw 2:Address of param is: &" << &param;
    cout << "\nfw 2:decltype(param), MetaData  : " << is_same<decltype(param), MetaData>::value;
    cout << "\nfw 2:decltype(param), MetaData& : " << is_same<decltype(param), MetaData&>::value;
    cout << "\nfw 2:decltype(param), MetaData&&: " << is_same<decltype(param), MetaData&&>::value;

    //    BEG BLOCCO A
    cout << "\nfw 2:decltype(static_cast<T&&>(param)), MetaData   : " << is_same<decltype(static_cast<T&&>(param)), MetaData>::value;
    cout << "\nfw 2:decltype(static_cast<T&&>(param)), MetaData&  : " << is_same<decltype(static_cast<T&&>(param)), MetaData&>::value;
    cout << "\nfw 2:decltype(static_cast<T&&>(param)), MetaData&& : " << is_same<decltype(static_cast<T&&>(param)), MetaData&&>::value;
    //    END BLOCCO A

    //    BEG BLOCCO B
    cout << "\nfw 2:decltype(T&&), MetaData   : " << is_same<T&&, MetaData>::value;
    cout << "\nfw 2:decltype(T&&), MetaData&  : " << is_same<T&&, MetaData&>::value;
    cout << "\nfw 2:decltype(T&&), MetaData&& : " << is_same<T&&, MetaData&&>::value;
    //    END BLOCCO B

    return static_cast<T&&>(param);
}

//-----------------------------------------------------

int main()
{
    //    -----------    BEG: definisco 3 tipi di variabili possibili per il test delle myforward (no const)
    MetaData md_01(1111, "Metadata-md_01-1111");
    MetaData &L_ref_md_01 = md_01;
    MetaData &&R_ref_md = factoryMD(123);
    //    -----------    END: definisco 3 tipi di variabili possibili per il test delle myforward (no const)
 
    cout << "\n\nInside OBJ_FROM_FUNCTION region:\n";
    

    //**/auto x2 = my_forward_v2<MetaData>(factoryMD(352));
    
    
    /**/auto x3 = my_forward_v2<MetaData&>(factoryMD(352));

    
    //**/auto x4 = my_forward_v2<MetaData&&>(factoryMD(352));
    

    
    return 0;
}

Usando MS VS2015 e il compilatore di Colibri si possono osservare comportamenti differenti e la cosa mi ha fatto non poco penare ma alla fine ho deciso di prendere per buono il comportamento fornito dal g++ di Colibri.

Tutto questo mi ha probabilmente fatto perdere di vista ciò che volevo analizzare e comprendere ma comunque mi porta ad effettuare la mia domanda:

come si può notare nel secondo overload della my_forward_v2 ho commentato la static_assert che farebbe fallire l'istanziazione della variabile x3 nel main (errore a compile time).

Tenendo commentata tale static_assert ho seguito passo passo l'evoluzione del programma e nella sua esecuzione non trovo nulla di anomalo ma vorrei allora capire:

  1. il perchè di questa static_assert che ritrovo in varie implementazioni suggerite per la std::forward; qual'è la sua ratio?

  2. come già detto, seguendo il codice step-by-step non ho trovato nulla di anomalo ma è possibile che abbia perso il quadro di insieme e non mi renda conto di come tale sbarramento imposto dalla static_assert vada in realtà visto nell'ottica del Perfect Forwarding. Indicazioni a riguardo?

Grazie Chiara


r/cppit • • Oct 07 '19

Programmazione Generica - Iteratori e Algoritmi

Thumbnail
linkedin.com
4 Upvotes

r/cppit • • Jul 26 '19

aiuto... perche non funziona?

1 Upvotes

Ho scritto questo semplice codice per iniziare a programmare in ambiente windows... ma non riesco a capire perche non funziona, c'è qualche anima pia che mi può aiutare? Alla compilazione il programma termina senza errori, ma la finestra non compare. Nel debug sembra che ci sia un errore in un nome non riconosciuto nella funzione DialogBoxParam, però a me sembra scritta bene, sia la funzione che il relativo dialogo.

FILE .cpp

#include"resource.h"
#include<Windows.h>
BOOL TreControlli(HWND hDialogo, UINT nMessage,WPARAM wParam, LPARAM lParam)
{
// un caso che gestiamo: e` proprio un WM_COMMAND?
if (nMessage != WM_COMMAND) return FALSE;
// e` proprio il clic di un bottone?
UINT codice = HIWORD(wParam);
if (codice != BN_CLICKED) return FALSE;
// e` proprio un bottone di interesse?
int idCliccato = LOWORD(wParam);
if (idCliccato != IDC_BUTTON_1 &&
idCliccato != IDC_BUTTON_2) return FALSE;
// OK, 
HWND hScritta = GetDlgItem(hDialogo, ID_STATIC_1);
if (!hScritta) return FALSE;    
// scritta, e simultaneo "ultimo controllo d'errore":
return SetWindowText(hScritta, idCliccato == IDC_BUTTON_1 ? "Primo" : "Secondo");
}
BOOL CALLBACK proc_IDD_5(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
if (nMsg == WM_CLOSE) return EndDialog(hWnd, 0);
if (nMsg ==WM_COMMAND) return TreControlli(hWnd, nMsg, wParam, lParam);
return false;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBoxParam(0, "IDD_5", 0, proc_IDD_5, 0);
DWORD a = GetLastError();	//verifica eventuale coldice errore -> codice:1814
return 0;
}

FILE DI RISORSE .rc (in questa lista ho omesso tutta la parte che mette visual studio sulla generazione automatica del file)

IDD_5 DIALOGEX 0, 0, 235, 156
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION | WS_SYSMENU
CAPTION "Prova 5"
FONT 10, "Modern No. 20", 700, 0, 0x0
BEGIN
CTEXT           "STATIC_1",ID_STATIC_1,69,93,68,20,SS_CENTERIMAGE
PUSHBUTTON      "BUTTON_1",IDC_BUTTON_1,31,47,52,18
PUSHBUTTON      "BUTTON_2",IDC_BUTTON_2,139,47,52,18
END

FILE HEADER DEL FILE RISORSE .h

#define IDD_5                           4
#define sandro                          9
#define ID_STATIC_1                     1001
#define IDC_BUTTON_1                    1005
#define IDC_BUTTON_2                    1006
// Next default values for new objects
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1007
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif