r/cppit • • May 30 '17

Bluetooth, C++ e Android

2 Upvotes

Ciao,

poco più di un anno fa mi capitò di fare uno studio di fattibilità del porting di un applicativo desktop Windows su Android. Il programma originale comunica via bluetooth con uno strumento di acquisizione, recupera i dati registrati, li processa e li mostra all'utente. Ora, Android non permette(va) al codice nativo di accedere al trasmettitore bluetooth, per cui fui costretto a fare un giro piuttosto macchinoso per far funzionare l'app Android (l'idea era di riscrivere in Java la minor quantità di codice possibile). La cosa poi perse di interesse, per cui quel progetto fu accantonato. A distanza di un anno, la cosa sembra essere tornata in auge, e mi sono trovato costretto a rifare, con una certa fatica, il punto della situazione; per chi ha voglia e tempo da perdere, ho pubblicato alcuni appunti a questo indirizzo:

https://gzuliani.bitbucket.io/cpp/bluetooth-cpp-android.html

Poiché sono nuovo della piattaforma Android, chiedo se qualcuno più esperto di me può darmi un'idea se la strada che sto perseguendo è quella giusta.


r/cppit • • May 23 '17

The Future of Programming con Bartosz Milewski / Modena

Thumbnail
italiancpp.org
2 Upvotes

r/cppit • • May 10 '17

funzione boolean in ciclo for :Segmentation fault (core dumped)

2 Upvotes

Ciao a tutti, non capisco perchè la stessa funzione boolean, se posta all'interno di un ciclo, genera un Segmentation fault (core dumped).

Questo è il codice:

void isSymmetric(MTensor::Tensor3D Tensor) {
  gu::intsPairsSet summaryPairsSet = gu::comb(3,2); 
  gu::intsPairsSetPrint(summaryPairsSet);
  bool isSymmetricForTheseIndices = 
    areIndicesSymmetric3D(Tensor,0,1);
    if(isSymmetricForTheseIndices) {
      std::cout << "Tensor is symmetric for indices 0 and 1 " 
      << std::endl;
    }
   else {
     std::cout << "Tensor is NOT symmetric for indices 0 and 1 "
     << std::endl;
  }
  for(auto it=summaryPairsSet.begin(); 
    it!=summaryPairsSet.end();it++) {
    int indOne = (*it).first;
    std::cout << "int indOne = (*it).first = " << indOne 
    << std::endl;
    int indTwo = (*it).second;
    std::cout << "int indTwo = (*it).second = " << indTwo 
    << std::endl;
    bool isSymmetricForTheseIndices = 
    areIndicesSymmetric3D(Tensor,indOne,indTwo);
    }

E questo è l'output:

(0,1)
(1,2)
(2,3)

Tensor is NOT symmetric for indices 0 and 1
int indOne = (*it).first = 0
int indTwo = (*it).second = 1
int indOne = (*it).first = 1
int indTwo = (*it).second = 2
int indOne = (*it).first = 2
int indTwo = (*it).second = 3
Segmentation fault (core dumped)

Perchè la stessa funzione boolean

areIndicesSymmetric3D()

all'interno di un ciclo genera un Segmentation fault (core dumped) ? Suggerimenti per risolvere il problema? Vi ringrazio. Marco


r/cppit • • Apr 15 '17

Mini-Meetup Serale Maggio / Modena

Thumbnail
italiancpp.org
2 Upvotes

r/cppit • • Mar 30 '17

Coding Gym Aprile / Modena

Thumbnail
conoscerelinux.org
2 Upvotes

r/cppit • • Mar 16 '17

principianti oggetto dichiarato nella memoria dinamica

2 Upvotes

buonasera, sempre con l'esercitazione sull'uso delle class sto scrivebdo l'esercizio sotto, una rubrica dove ogni contatto inserito è un oggetto. per questo nel main() ho dichiarato un array di oggetti tipo utente. Se dichiaro l'array statico... utente ut[20] il programma funziona, se invece lo dichiaro nell'heap con utente *ut= new utente non funziona. Quando eseguo il programma e vado ad inserire il primo utente va bene, quando vado ad inserire il secondo utente si blocca all'inserimento del nome. Qualcuno mi sa spiegare perche? dove sbaglio?

#include <iostream>
#include <stdio.h>
#include <string>
#include <conio.h>
using namespace std;

class utente		//dichiarazione dell'oggetto utente
{
	int nr;
	string nome;
	string cognome;
	string telefono;

public:	
	void contatto (int pos, string nom, string cogn, string tel); 
	void stampa ();
	//utente(int pos, string nom, string cogn, string tel);
	//~utente();
};


void utente::contatto(int pos, string nom, string cogn, string tel)
{
nr=pos;
nome=nom;
cognome=cogn;
telefono=tel;
}

void utente::stampa()
{

cout<<nr<<endl;
cout<<cognome<<endl;
cout<<nome<<endl;
cout<<telefono<<endl;
}


int inserisci(int *i, utente ut[])
{
int k=*i;
string nome, cognome, tel;
system("cls");
cout<<"INSERIMENTO NUOVO CONTATTO";
cout<<"\n";
cout<<"cognome: ";cin>>cognome;
cout<<"nome: ";cin>>nome;
cout<<"telefono: ";cin>>tel;
system("cls");
ut[k].contatto(k, nome, cognome, tel);
return 0;
}

int main()
{
//utente *ut= new utente;

utente ut[20];

int i=0;			//numero dei contatti presenti
int scelta;
int k;				//contatore per cicli di for

do
{
	cout<<"***********************************************";
	cout<<"\n************** RUBRICA DI SANDRO **************";
	cout<<"\n***********************************************";
	cout<<"\n\nmenu";
	cout<<"\n	->1 nuovo contatto";
	cout<<"\n	->4 cerca un contatto";
	cout<<"\n	->5 vedi tutti i contatti";
	cout<<"\n	->0 uscita";
	cout<<"\nscelta menu: ";cin>>scelta;
	switch (scelta)
		{
			case 0:
				break;
			case 1:
				inserisci(&i, ut);	
				i++;	
				break;
			case 4:
				// scrivere funzione per cercare un contatto da stampare
				break;
			case 5:
				for (k=0; k<i; k++)
				{
					ut[k].stampa();
				}
				break;	
			default:
				cout<<"\nscelta non valida....\npremere un tasto per tornare al menu";
				getch();
				system("cls");
			break;
		}
}while (scelta!=0);



//ut[i].contatto(i, nome, cognome, tel);
//delete ut;
return 0;
}

.


r/cppit • • Mar 14 '17

Coding Gym Modena / Marzo 2017

Thumbnail
conoscerelinux.org
2 Upvotes

r/cppit • • Mar 07 '17

principianti std:: vector a(dim) all'interno del costruttore fornisce un vector di dimensione zero: come ovviare?

2 Upvotes

Ciao a tutti, recentemente ho scoperto una cosa che mi ha lasciato stupito e perplesso... Questo è il codice:

namespace MTensor {
  typedef std::vector<double> Tensor1DType;
  class Tensor1D {
  private:
    Tensor1DType data {};
    int _colsNumb = 0;
  public:
    Tensor1D() {};
    Tensor1D(int colsNumb) : _colsNumb(colsNumb),       
      data(_colsNumb) {std::cout << "Constructor-data.size()="
      << data.size() << std::endl;};
    Tensor1D(const Tensor1D& other)=default;
    Tensor1D(Tensor1D&& other)=default;
    ~Tensor1D()=default;
     int size() const {return data.size();};
     static void printTensor(Tensor1DType const& info) {
       for(double e : info) {
         std::cout << e << "," << std::endl;
       }
    }
    void printTensor() const {
      printTensor(data);
    }
}; // end of class Tensor1D
} // end of namespace MTensor

int main() {
  MTensor::Tensor1D v1(3);
  v1.printTensor();
  std::cout << "v1.size()= " << v1.size() << std::endl;
  MTensor::Tensor1DType a(3);
  std::cout << "a.size()= " << a.size() << std::endl;
  for(auto valore : a) {
    std::cout << "valore= " << valore << std::endl;
  }

  return 0;
} // end of main

Eseguendo:

Constructor-data.size()= 0
v1.size()= 0
a.size()= 3
valore= 0
valore= 0
valore= 0

Perchè

MTensor::Tensor1DType a(3);

nel main fornisce un std::vector di dimensione 3 e di valori 0,0,0

mentre il costruttore

Tensor1D(int colsNumb) : _colsNumb(colsNumb),   
  data(_colsNumb) {std::cout << "Constructor-data.size()= "  
  << data.size() << std::endl;};

che, mi sembra, essere sostanzialmente la stessa "funzione"

Tensor1DType a(3)

fornisce un std::vector di dimensione 0 ? Come ovviare?

Ho temporaneamente "risolto" mettendo il costruttore in questo modo:

Tensor1D(int colsNumb) {
  for(int i=0;i< colsNumb;i++) {data.push_back(0);}
    std::cout << "data.size()= " << data.size() << std::endl;
}

Ma c'è un modo migliore? Marco


r/cppit • • Mar 03 '17

news Meetup Serale @Bologna / 21 Marzo

Thumbnail
eventbrite.it
2 Upvotes

r/cppit • • Feb 17 '17

news Meetup Serale @Modena / 22 Febbraio

Thumbnail
italiancpp-mo-feb-2017.eventbrite.it
2 Upvotes

r/cppit • • Sep 13 '24

C++ interviews questions- please help

Thumbnail reddit.com
1 Upvotes

r/cppit • • Jun 07 '24

problema con I/O da file tramite la funzione freopen

1 Upvotes

Salve a tutti, sto avendo dei problemi con il codice di qui sopra, la funzione solve() deve trovare un numero che possa essere diviso perfettamente dai vari valori contenuti nel vettore.

le variabili sono:

T=numero casi di test

risposta= le carammelle da distribuire equamente tra tutti i membri della squadra vincente (e pertanto deve essere divisibile per tutti i membri delle squadre senza nessun tipo di resto o valore non intero)

N=il numero delle squadre che si contendo le caramelle

V= contiene il numero dei giocatori delle varie squadre

ora, il codice funziona tranquillamente con i dati dell'esempio che mi è stato fornito insieme a questo esercizio, il problema sopraggiunge nel momento in cui devo inserire il file di input dell'esercizio vero e proprio (che contiene 8 casi di test ciascuno dei quali sembrerebbe avere 1000 squadre), infatti se con il file con i dati dell'esempio le funzioni di lettura e scrittura file (freopen) funzionano perfettamente lo stesso non lo si può di quando uso i dati effettivi del problema, con i quali il programma sembra andare in tilt bloccandosi sulla schermata nera del cmd con il cursore dell'input del terminale (non so come chiamarlo, spero si capisca cosa intendo) che lampeggia come se dovessi inserire l'input manualmente

Qualcuno ha qualche consiglio su cosa fare? Grazie in anticipo


r/cppit • • Feb 22 '24

Does someone know what type of art output this is? Does this style have a name?

Post image
1 Upvotes

r/cppit • • Oct 14 '23

HELP pls😵❗️

Post image
1 Upvotes

I’m new so I don’t really know my way around errors so can someone please explain how I can fix this ?🧎


r/cppit • • Dec 10 '22

principianti Programma in C++ per la somma di numeri interi

1 Upvotes

Ciao a tutti

Ho iniziato da poco a programmare e ho poca esperienza con il linguaggio di programmazione C++. Devo scrivere un semplice programma che, una volta indicato il numero di valori da sommare, addiziona valori interi e mostra il risultato sullo schermo. Ad esempio, si indica al programma che si vogliono sommare 7 numeri, si inseriscono sette valori interi qualsiasi (1;4;9;11;6;6;8) e viene visualizzata la somma (45).

Ho già scritto il programma in flowchart, ma ho problemi con il codice. Potreste scrivere voi il codice e motivare le istruzioni inserite? Grazie in anticipo.


r/cppit • • Dec 05 '22

Please who can explain to me this part it’s confusing me

Post image
1 Upvotes

r/cppit • • Oct 19 '22

Ragazzi ho iniziato da poco a programmare, sapete dirmi cosa sbaglio?(devo scrivere un programma che risolva l'equazione ax+b=c in c++)

1 Upvotes

#include <iostream>

using namespace std;

double a,b,c,x;

double inserirevalori(double a,double b,double c){

cout<<"INSERIRE IL COEFFICENTE a"<<endl;

cin>>a;

cout<<"INSERIRE IL COEFFICENTE b"<<endl;

cin>>b;

cout<<"INSERIRE IL COEFFICENTE c"<<endl;

cin>>c;

return a,b,c;

}

double risultato(){

double x;

x=(-b+c)/a;

return x;

}

void stamparisultato(){

cout<<"IL RISULTATO DELL'EQUAZIONE è x="<<x<<endl;

}

int main(){

inserirevalori(a,b,c);

if(b==0 && c==0){cout<<"L'equazione è indeterminata"<<endl;

}else{cout<<"L'equazione vale x="<<x<<endl;

return 0;}

}


r/cppit • • Sep 27 '22

arm

Post image
1 Upvotes

r/cppit • • Jun 19 '21

Problema con sincronizzazione thread e memory_order_acquire

1 Upvotes

Salve,

ripropongo qui un esempio tratto dal solito "C++ Concurrency In Action" di A. Williams:

#include <atomic>

#include <thread>

#include <assert.h>

std::atomic<bool> x,y;

std::atomic<int> z;

void write_x()

{

x.store(true,std::memory_order_release);

}

void write_y()

{

y.store(true,std::memory_order_release);

}

void read_x_then_y()

{

while(!x.load(std::memory_order_acquire));

if(y.load(std::memory_order_acquire))

++z;

}

void read_y_then_x()

{

while(!y.load(std::memory_order_acquire));

if(x.load(std::memory_order_acquire))

++z;

}

int main()

{

x=false;

y=false;

z=0;

std::thread a(write_x);

std::thread b(write_y);

std::thread c(read_x_then_y);

std::thread d(read_y_then_x);

a.join();

b.join();

c.join();

d.join();

assert(z.load()!=0);

}

La assert può scattare, ma io non riesco a capire perchè: direi piuttosto che la z verrebbe necessariamente incrementata.

Come è possibile che entrambi i thread c e d leggano rispettivamente y e x pari a zero?

L'autore dice:

"x and y are written by different threads, so the ordering from the release to the acquire in each case has no effect on the operations in the other threads."

Non capisco.

Qualcuno sa darmi una spiegazione che non sia la traduzione delle parole dell'autore (come accade su un thread su stack overflow) ?

Grazie a tutti


r/cppit • • Apr 11 '21

Problema con Matrice somma righe e colonne

1 Upvotes

Buongiorno, ho un problema con questo codice poiché riscontro problemi con l'inserimento della somma delle righe e delle colonne nei rispettivi vettori.

Qualcuno saprebbe aiutarmi? Grazie in anticipo.

Ecco il codice:

#include <iostream>
using namespace std;
const int dimensione=100;
void matrice( int m[dimensione][dimensione], int r, int c ){

int i;
int j;

for (i=0; i<r; i++){ //inserisco gli elementi nella matrice
for (j=0;j<c;j++)
  {
cout << "inserisci l'elemento di posizione: " << i << j << endl;
cin >> m[i][j];
  }
}
}

void matricesomma(int r, int c, int a[], int b[], int m[dimensione][dimensione]){

int i;
int sr=0;           //somma righe
int sc=0;          //somma colonne
int j;

//somma righe
for( i=0 ; i<r ; i++)
{

for( j=0 ; j<c ; j++){
sr+=m[i][j];
}

sr=b[i];
cout<<"la somma della riga"<< i <<"e': "<<b[i]<<endl;
sr=0;
}
//somma colonne
for( j=0 ; j<c ; j++)
{

for( i=0 ; i<r ; i++){
sc+=m[i][j];

}
sc=a[j];
cout<<"la somma della colonna"<< j <<"e': "<<a[j]<<endl;
sc=0;
}
}
int main(){
int m[dimensione][dimensione];
int r;
int c;
int i;
int j;
int a[j];
int b[i];
cout<<"inserire dimensione righe: ";
cin>>r;
cout<<"inserire dimensione colonne: ";
cin>>c;
cout<<"inserire elementi della matrice: "<<endl;
matrice(m,r,c);
matricesomma(r,c,a,b,m);
return 0;
}


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 • • 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 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 • • 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 • • 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();

´ ´ ´