Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Primo approcio con C++ e librerie
Forum - C/C++ - Primo approcio con C++ e librerie

Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 0:24
Sabato, 23/06/2018
Mi sono deciso, ho installato su VS 2017 community il C++
Mi sembra che gli esempi che si trovano in rete sono di molteplici ambienti, e solitamente chi li divulga dimentica spesso di dire quale usa e quali librerie occorrono per farli funzionare.
Scusate se le domande vi sembrano banali o non correttamente poste, ma sto cercando di orizzontarmi.
Sono partito con una semplice consoleapplication.
1) std::cout in VS non è supportato? ci vuole una libreria?
nessun problema con printf che funziona egregiamente.
2) dove si può reperire l'elenco delle istruzioni usabili con le librerie "standard"?
3) ho cercato e trovato esempi per sapere di quanti elementi è composto un vettore, ma nessuno funziona su VS, le librerie che ho provato sono: <vector> <set> <stdio.h> <stdlib.h> <iostream> "stdafx.h"

vari tentativi:
Codice sorgente - presumibilmente C++

  1. int v[] = { 10,23,42 };
  2.         int elementi;
  3.         elementi = v.size;
  4.  
  5.         int elementi;
  6.         elementi = v.size();
  7.  
  8.         int elementi = (int)v.size;
  9.  
  10.         int elementi = (int)v.size();


l'errore segnalato è: l'espressione deve avere il tipo di classe
Il bello è che se vado con il cursore sopra al vettore v, l'intellisense candidamente dice v[3]



Ultima modifica effettuata da Carlo il 23/06/2018 alle 1:38


in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:37
Sabato, 23/06/2018
Andare a caso è il metodo peggiore per imparare il c/c++

Prendi un libro e studia dalla prima pagina, lascia stare google e internet almeno per ora
Impara le basi altrimenti farai solo confusione

Nel caso indicato v è un semplice vettore del C e non un oggetto quindi userai l'operatore sizeof

int elementi = sizeof(v)/sizeof(int)

Ultima modifica effettuata da nessuno il 23/06/2018 alle 7:43


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 8:32
Sabato, 23/06/2018
Testo quotato

Postato originariamente da nessuno:

Andare a caso è il metodo peggiore per imparare il c/c++

Prendi un libro e studia dalla prima pagina, lascia stare google e internet almeno per ora
Impara le basi altrimenti farai solo confusione

Nel caso indicato v è un semplice vettore del C e non un oggetto quindi userai l'operatore sizeof

int elementi = sizeof(v)/sizeof(int)


Funziona, grazie anche della spigazione del perché.
La scelta di usare VS 2017 per il C++ è azzeccata?
Cosa consigli di leggere, che sia indirizzato a VS 2017?
Di cout che mi dici?
grazie.

Primo programma test, postato da Mattiz2001, e ampliato, tanto per provare

Codice sorgente - presumibilmente C++

  1. //#include <iostream>
  2. //#include <vector>
  3. #include "stdafx.h"
  4. //#include <stdio.h>
  5. //#include <stdlib.h>
  6. #include <set> // contiene system
  7. using namespace std;
  8.  
  9. int funzione_sommadis(int vettore[])
  10. {
  11.         int somma = 0;
  12.         for (int k = 0; k<20; k++)
  13.         {
  14.  
  15.                 if (!(vettore[k] % 2 == 0))
  16.                 {
  17.                         somma = somma + vettore[k];
  18.                 }
  19.         }
  20.         return somma;
  21. }
  22.  
  23. int funzione_sommapar(int vettore[])
  24. {
  25.         int somma = 0;
  26.         for (int k = 0; k<20; k++)
  27.         {
  28.  
  29.                 if (vettore[k] % 2 == 0)
  30.                 {
  31.                         somma = somma + vettore[k];
  32.                 }
  33.         }
  34.         return somma;
  35. }
  36.  
  37. int main()
  38. {
  39.         int somma;
  40.         int vettoreinput[] = { 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0 };
  41.        
  42.         //std::cout <<"La somma dei valori dispari e': "<<somma<<endl;
  43.  
  44.         printf("Vettore: ");
  45.         for (int i = 0; i<20; i++)
  46.         {
  47.                 printf("%d", vettoreinput[i]);
  48.         }
  49.  
  50.         printf("\nVettore: ");
  51.         for (int i = 0; i<20; i++)
  52.         {
  53.                 printf("%d,", vettoreinput[i]);
  54.         }
  55.  
  56.         int elementi = sizeof(vettoreinput) / sizeof(int);
  57.         printf("\nElementi nel vettore : %d\n", elementi);
  58.         somma = funzione_sommadis(vettoreinput);
  59.         printf("\nLa somma dei valori dispari e': %d\n", somma);
  60.         somma = funzione_sommapar(vettoreinput);
  61.         printf("La somma dei valori pari e': %d\n", somma);
  62.  
  63.         // promemoria uso printf
  64.         printf("\nPromemoria uso printf\n");
  65.         printf("Characters: %c %c \n", 'a', 65);
  66.         printf("Decimals: %d %ld\n", 1977, 650000L);
  67.         printf("Preceding with blanks: %10d \n", 1977);
  68.         printf("Preceding with zeros: %010d \n", 1977);
  69.         printf("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
  70.         printf("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
  71.         printf("Width trick: %*d \n", 5, 10);
  72.         printf("%s \n", "A string");
  73.         system("PAUSE");
  74.         return 0;
  75. }


Ultima modifica effettuata da Carlo il 23/06/2018 alle 8:44


in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:22
Sabato, 23/06/2018
Visual Studio è prima di tutto un potente IDE con compilatore e debugger per C e C++.

Se intendi programmare con Windows è il migliore (soprattutto per il debugger). Se vorrai programmare in C/C++ con Linux non potrai utilizzarlo.

Fai attenzione alle differenze tra il C e il C++. Studia prima da qualche libro classico come il K&R e solo dopo passa alle classi/oggetti. Il C presuppone una buona conoscenza dei meccanismi di base di funzionamento di un computer (non dare per scontato che li conosci), il C++ presuppone che tu conosca la OOP e molto bene.

cout è un oggetto di classe ostream statico ed esiste ovviamente. Devi usare l'header

#include <iostream>

Puoi usare la dichiarazione

using namespace std;

per evitare di anteporre std::

Ti ripeto però che stai procedendo in maniera sbagliata. Sei troppo interessato al lato pratico per far partire del codice piuttosto che quella teorica molto importante per il C++

Ultima modifica effettuata da nessuno il 23/06/2018 alle 9:24


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 9:44
Sabato, 23/06/2018
Testo quotato

Postato originariamente da nessuno:

Visual Studio è prima di tutto un potente IDE con compilatore e debugger per C e C++.

Se intendi programmare con Windows è il migliore (soprattutto per il debugger). Se vorrai programmare in C/C++ con Linux non potrai utilizzarlo.

Fai attenzione alle differenze tra il C e il C++. Studia prima da qualche libro classico come il K&R e solo dopo passa alle classi/oggetti. Il C presuppone una buona conoscenza dei meccanismi di base di funzionamento di un computer (non dare per scontato che li conosci), il C++ presuppone che tu conosca la OOP e molto bene.

cout è un oggetto di classe ostream statico ed esiste ovviamente. Devi usare l'header

#include <iostream>

Puoi usare la dichiarazione

using namespace std;

per evitare di anteporre std::

Ti ripeto però che stai procedendo in maniera sbagliata. Sei troppo interessato al lato pratico per far partire del codice piuttosto che quella teorica molto importante per il C++



Avevo provato ad includere iostream, ma in fase di compilazione ricevo l'errore:
'cout': identificatore non dichiarato
'endl': identificatore non dichiarato

std:: lo avevo messo quando ancora non usavo il namespace std;

Ancora non sto procedendo, sto vedendo se mi prende la voglia, la somiglianza con C# è ingannevole, ma utile.
Per la conoscenza a basso livello dei microprocessori, sicuramente mi devo aggiornare, anche se non parto da zero.
:)

Ultima modifica effettuata da Carlo il 23/06/2018 alle 9:48


in programmazione tutto è permesso
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 13:13
Sabato, 23/06/2018
Quello che veramente serve e' capire bene come lavora la memoria e l'indirizzamento di essa.

A differenza del C#, la gestione della memoria non è automatica. Non esiste un garbage collettor (anche se in rete quanlche progetto mi pare ci sia).

Spesso, ti troverai ad utilizzare i puntatori che sono uno dei pilastri del linguaggio. Uno scoretto uso di essi è una delle principali cause di malfunzionamenti dei programmi.

Il K&R è un ottimo libro per iniziare. Se puoi vuoi approfondire bene il C++, uno dei più consigliati è il
C++. Linguaggio, libreria standard, principi di programmazione - Bjarne Stroustrup (Meglio in inglese se non ti è d'ostacolo la lingua).

Come IDE, ti consiglio anche di dare un'opportunita' a Code::Blocks.
Open source, multipiattaforma (Windows-Linux-Mac).
Tieni presente una cosa. Visual Studio e Code::Block hanno compilatori differenti, quindi per certe funzioni specifiche che non rientrano nelle librerie standard, potresti avere piccole differenze.

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:58
Domenica, 24/06/2018
Testo quotato

Postato originariamente da Mikelius:

Quello che veramente serve e' capire bene come lavora la memoria e l'indirizzamento di essa.

A differenza del C#, la gestione della memoria non è automatica. Non esiste un garbage collettor (anche se in rete quanlche progetto mi pare ci sia).

Spesso, ti troverai ad utilizzare i puntatori che sono uno dei pilastri del linguaggio. Uno scoretto uso di essi è una delle principali cause di malfunzionamenti dei programmi.

Il K&R è un ottimo libro per iniziare. Se puoi vuoi approfondire bene il C++, uno dei più consigliati è il
C++. Linguaggio, libreria standard, principi di programmazione - Bjarne Stroustrup (Meglio in inglese se non ti è d'ostacolo la lingua).

Come IDE, ti consiglio anche di dare un'opportunita' a Code::Blocks.
Open source, multipiattaforma (Windows-Linux-Mac).
Tieni presente una cosa. Visual Studio e Code::Block hanno compilatori differenti, quindi per certe funzioni specifiche che non rientrano nelle librerie standard, potresti avere piccole differenze.



Grazie, vedrò, con calma. :D


in programmazione tutto è permesso
PM Quote