Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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)
Expert


Messaggi: 445
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: 5714
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)
Expert


Messaggi: 445
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: 5714
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)
Expert


Messaggi: 445
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: 460
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.


"Io ne ho viste cose che voi umani non potreste immaginarvi...."
PM Quote
Avatar
Carlo (Member)
Expert


Messaggi: 445
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