Visual c++

Devo imparare almeno le basi di questo programma e parto da zero.

Diciamo che conosco qualcosa di java e di matlab, ma molto autodidatta; di visual c++ 2005 mi basterebbe conoscere le funzioni base proprio terra terra. Quindi la sintassi e le funzioni fondamentali, e più che altro una bella spiegazione delle varie finestre che sono un casino.
In java mi ricordo che c’era una parte dove scrivevi il codice e una schermo dove apparivano i risultati del programma, qui ci sono 10 schermate differenti e non ci capisco niente.

Oggi grazie a questo video:

sono riuscito a stampare a video CIAO MONDO :clap: :clap:, però non capisco ancora niente di sintassi e sul web non ho trovato una guida affidabile, anche perchè di c++ a quanto ho capito ce ne sono molte versioni differenti.

C’è qualche anima pia che mi da un paio di dritte per iniziare?

No beh insomma di C++ ce ne uno solo!
Poi ci sono diversi ambienti di sviluppo come quello che hai citato tu di Microsoft… Visual Studio che comprende appunto Visual C++

La sintassi del C++ ricorda molto quella del JAVA, diciamo che sono parenti, ed è uguale in ogni ambiente di sviluppo
Caso mai cambiano le librerie che hai a disposizione e la “filosofia” che sta sotto all’ambiente e quindi a come usare le finestre che ti appaiono!

Sinceramente ho usato il Visual per un po’ ma è parecchio tempo che non ci “smanetto” (preferisco il Builder Borland), quindi forse è meglio se ti aiuta qualcun’altro

Intanto ho trovato questa guida su wiki e già qualcosa mi torna più chiaro del codice:

http://it.wikibooks.org/wiki/Dal_C_al_C%2B%2B/Introduzione

PS: domandina, visto che in questi giorni sto anche provando ubuntu (giorni davvero smanettoni :nerd:), non c’è un versione compatibile anche per linux? E quindi segue la domanda, facendo un programma su windows visual poi lo posso leggere da ubuntu?

Ok ok sto prendendo un pò la mano:

[code]#include

using namespace std;

int main()
{
double dnumber1 = 0.0;
double dnumber2 = 0.0;
double dnumber3 = 0.0;
double dmedia = 0.0;

cout << "Inserisci tre numeri " << endl;

cin >> dnumber1;
cin >> dnumber2;
cin >> dnumber3;

dmedia= (dnumber1 + dnumber2 + dnumber3) / 3;

cout << “la media è” << dmedia << endl << endl;

system (“pause”);
return (0);
} [/code]

Non capisco perchè devo mettere system (“pause”) con visual studio, ho solo cpaito che se non lo metto non mi fa apparire lo schermo dove genera l’output oppure lo fa apparire ma al tempo di esecuzione della macchina, quindi qualche millisecondo :sunglasses:

Ok per il linguaggio base qualcosa ho trovato:

Anche se video molto stupidi ho capito subito subito come funziona c++, se vedete le guide di microsoft c’è da mettersi le mani nei capelli :angry:

Beh, ti sei risposto da solo… :slight_smile: è esattamente x obbligare il terminale ad attendere la pressione di un invio e non chiudersi al termine del programma…

Michael visto che te ne intendi sia di Linux che di C++…che mi dici sulla compatibilità dei due?

Non mi intendo assolutamente di Visual C++, nel senso che non ho mai programmato in ambiente visuale con C++.
E anche di C++ ho solo qualche base. Ti consiglio il testo “Thinking in C++”, per un corso avevo verificato alcune cose ed è molto molto chiaro, specialmente se hai delle basi di programmazione sequenziale e procedurale. Questo ti insegna la programmazione ad oggetti.
Si trova in ogni negozio di libri informatici e in mulattiere di montagna, adiacenti a freschi torrenti (ammicco ammicco)

Sicuramente esistono compilatori e IDE (ambienti di sviluppo integrati) per Linux, ma essendo io un informatico poco programmante non ho assolutamente esperienza. Kdevelop mi pare che permetta di programmare in C++.

Quello che cambia rispetto a Visual C++, tuttavia, sono molte librerie per le interfacce grafiche e per l’accesso ai dati.
Di conseguenza un programma appena piu’ complesso di quello che hai postato non sarebbe compatibile tra i 2 sistemi.

[quote author=Michael (Capt. Archer) link=topic=10343.msg100403#msg100403 date=1238438387]in mulattiere di montagna, adiacenti a freschi torrenti (ammicco ammicco)

[quote]
Doppio ammicco ammicco :wink: :wink:

Ok allora lascio stare. Continuo a studiarmi le due cose separatamente.

Ci sono 3 concetti separati da tenere presenti:

  • il linguaggio di programmazione, sufficientemente standardizzato nel caso di C++ insieme con alcune librerie di base
  • l’ambiente di sviluppo con editor, compilatore, debugger, inspector, ecc. (es. Visual C++, Xcode, Eclipse)
  • le API di sistema e le librerie avanzate (es. Win32, POSIX, MacOS X Quartz, GTK, Qt)

La principale fonti di complessità è che sono possibili diverse combinazioni di questi concetti. Puoi per esempio scrivere un programma portabile C++ usando ambienti di sviluppo diversi e librerie multipiattaforma come GTK. Oppure scrivere un programma C++ che richiede uno specifico ambiente di sviluppo (es. Xcode) perché usa librerie non portabili (es. Quartz).

Un altro problema è che con un linguaggio standardizzato e le librerie di base si possono scrivere solo programmi relativamente semplici, che non sfruttano le funzionalità dei moderni ambienti computazionali (es. interfacce utente grafiche e protocolli di rete). Questi programmi semplici, per le limitazioni delle funzionalità standardizzate, tendono purtroppo ad assomigliare a qualli che si scrivevano alcuni decenni fa e che eseguivano I/O su schede perforate, nastri magnetici e stampanti – come il tuo esempio.

Paolo Amoroso

Ecco, un perfetto riassunto della situazione! :grin:

Incrocio questa discussione per farti capire cosa devo farci:

Nel pomeriggio vado a parlare con il prof e quindi saprò bene cosa devo fare, per ora mi ha solo accennato qualcosa.

Dovrei fare a quanto ho capito un programmino che riceva in input il segnale analogico degli accelerometri e una volta preso ed elaborato il segnale farci di tutto. Metterlo in varie funzioni da studiare o diagrammare, credo tutto in tempo reale.

Ora ho trovato qui le API della phidget:

http://www.phidgets.com/documentation/web/cdoc/index.html

Amoroso mi potresti spigare cosa sono le API? E come le dovrei usare visto il programma che dovrei realizzare?

Una API - Application Programming Interface è l’insieme di funzioni, strutture dati, classi o protocolli forniti da un sistema operativo o una libreria per scrivere programmi.

Paolo Amoroso

Praticamente un libreria?

Oggi ho parlato con il prof, e ho capito cosa devo fare. Praticamente per ora devo cercare di unire due programmi, in cui uno acquisisce i dati del sensore e l’altro li elabora trovando un indice significativo.
I programmi sono già compilati li devo solo interfacciare.
Il problema fondamentale (a parte il fatto che non conosco un tubo di c++) è che devo far leggere i dati del secondo programma in tempo reale con il primo.

Casomai questa sera posto il codice direttamente e mi date un consiglio :ok:

In prima approssimazione.

Nel senso che hai l’eseguibile ma non il sorgente?

Paolo Amoroso

ho tutti e due, bhe ovviamente dovevo avere il sorgente.

http://www.phidgets.com/downloads.php?example_id=17

Qui ci sono i file sorgenti di alcuni esempi…li ho visti girare in studio dal prof non capisco perche da me non girano.

Il programma sarebbe questo

[code]// - Accelerometer simple -
// This simple example creates an accelerometer handle, initializes it, hooks the event handlers and opens it. It then waits
// for an accelerometer to be attached and waits for events to be fired. We preset the sensitivity of each axis to 0.5 to make it
// easier to see the event data.
//
// Copyright 2008 Phidgets Inc. All rights reserved.
// This work is licensed under the Creative Commons Attribution 2.5 Canada License.
// view a copy of this license, visit http://creativecommons.org/licenses/by/2.5/ca/

#include “stdafx.h”
#include “…\phidget21.h”

double past_samples[3];

//callback that will run if the Accelerometer is attached to the computer
int __stdcall AttachHandler(CPhidgetHandle IFK, void *userptr)
{
int serialNo;
CPhidget_getSerialNumber(IFK, &serialNo);
printf(“Accelerometer %10d attached!”, serialNo);

return 0;

}

//callback that will run if the Accelerometer is detached from the computer
int __stdcall DetachHandler(CPhidgetHandle IFK, void *userptr)
{
int serialNo;
CPhidget_getSerialNumber(IFK, &serialNo);
printf(“Accelerometer %10d detached! \n”, serialNo);

return 0;

}

//callback that will run if the Accelerometer generates an error
int __stdcall ErrorHandler(CPhidgetHandle IFK, void *userptr, int ErrorCode, const char *unknown)
{
printf(“Error handled. %d - %s \n”, ErrorCode, unknown);
return 0;
}

//callback that will run if the acceleration changes by more than the Acceleration trigger.
//Index - Index of the axis that is generating the event, Value - the value read by the accelerometer axis
int __stdcall accel_AccelChangeHandler(CPhidgetAccelerometerHandle WGT, void *userptr, int Index, double Value)
{
past_samples[Index] = (past_samples[Index] * 0.90) + (Value * 0.10);

printf("Axis: %i -- %6f\n", Index, past_samples[Index]);

return 0;

}

//Display the properties of the attached phidget to the screen.
//We will be displaying the name, serial number, version of the attached device and number of Axes on the accelerometer.
int display_properties(CPhidgetHandle phid)
{
int serialNo, version;
const char* ptr;
int numAxes;

CPhidget_getDeviceType(phid, &ptr);
CPhidget_getSerialNumber(phid, &serialNo);
CPhidget_getDeviceVersion(phid, &version);
CPhidgetAccelerometer_getAxisCount((CPhidgetAccelerometerHandle)phid, &numAxes);

printf("%s\n", ptr);
printf("Serial Number: %10d\nVersion: %8d\n", serialNo, version);
printf("Number of Axes: %i\n", numAxes);

return 0;

}

int accelerometer_simple()
{
int result, numAxes;
const char *err;

//Declare an accelerometer handle
CPhidgetAccelerometerHandle accel = 0;

//create the accelerometer object
CPhidgetAccelerometer_create(&accel);

//Set the handlers to be run when the device is plugged in or opened from software, unplugged or closed from software, or generates an error.
CPhidget_set_OnAttach_Handler((CPhidgetHandle)accel, AttachHandler, NULL);
CPhidget_set_OnDetach_Handler((CPhidgetHandle)accel, DetachHandler, NULL);
CPhidget_set_OnError_Handler((CPhidgetHandle)accel, ErrorHandler, NULL);

//Registers a callback that will run if the acceleration changes by more than the Acceleration trigger.
//Requires the handle for the Accelerometer, the function that will be called, 
//and an arbitrary pointer that will be supplied to the callback function (may be NULL)
CPhidgetAccelerometer_set_OnAccelerationChange_Handler(accel, accel_AccelChangeHandler, NULL);

//open the acclerometer for device connections
CPhidget_open((CPhidgetHandle)accel, -1);

//get the program to wait for an accelerometer device to be attached
printf("Waiting for accelerometer to be attached.... \n");
if((result = CPhidget_waitForAttachment((CPhidgetHandle)accel, 10000)))
{
	CPhidget_getErrorDescription(result, &err);
	printf("Problem waiting for attachment: %s\n", err);
	return 0;
}

//Display the properties of the attached accelerometer device
display_properties((CPhidgetHandle)accel);

//read accelerometer event data
printf("Reading.....\n");

//get the number of available axes on the attached accelerometer
CPhidgetAccelerometer_getAxisCount(accel, &numAxes);

//Most accelerometers have 2 axes so we'll pre-set their sensitivity to make the data more readable
CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 0, 0.500);
CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 1, 0.500);

//If the accelerometer attached is a 3-axis, we'll set the sensitivity of the 3rd axis
if(numAxes > 2)
{
	CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 2, 0.500);
}

//wait until user input is read
printf("Press any key to end\n");
getchar();

//since user input has been read, this is a signal to terminate the program so we will close the phidget and delete the object we created
printf("Closing...\n");
CPhidget_close((CPhidgetHandle)accel);
CPhidget_delete((CPhidgetHandle)accel);

//all done, exit
return 0;

}

//main entry point to the program
int _tmain(int argc, _TCHAR* argv)
{
accelerometer_simple();
return 0;
}[/code]

a quanto ho capito richiama due libreri che credo di aver impostato correttamente sul pc. Come faccio ad avere la conferma delle librerie?

Quando faccio partire il programma mi appare questo (immagine allegata), ma se vado a vedere nella cartella ho:

accelerometer-simple.exe.embed.manifest
accelerometer-simple.exe.embed.manifest.res
e altri file…

Che significa??

ok precisamente mi servirebbe capire come includere una libreria.

Allora ho capito che una libreria è un file .h giusto?
Diciamo che io mi creo questa libreria e poi la voglio richiamare in un file di progetto (.cpp) lo richiamo in che modo?
Ho capito che per le librerie standard tipo io stream posso fare semplicemente cosi:

#include

E va bene. Ma se la libreria la creo io non gli dovrei dare l’indicazione di dove sia la libreria nelle cartelle del pc?? E come glielo dico, com’è la sintassi??

Servono altri file importanti che sto trascurando?

PS: chiedo scusa ai programmatori se sto completamente distruggendo il linguaggio formale, ma ripeto sto imparando in questi giorni (diciamo in queste ore), non sono assolutamente un informatico quindi…capitemi :flushed: :flushed:

PPS: conoscete siti, o meglio forum, dove poter chiedere info? Nel senso un forum umano dove mi possano dar retta anche per queste piccolezze?

infatti il programma mi da questo errore:

LINK : fatal error LNK1104: impossibile aprire il file ‘odbc32.lib’

che significa proprio che il preprocessore non è riuscito a collegare tutte le librerie giusto??