Pag 1 di 3 123 UltimaUltima
Risultati da 1 a 25 di 51

Discussione: C/c++

  1. #1
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito C/c++

    Quando sono mancato la prof. ha spiegato le matrici e leggendo quell'infimissimo libro ho capito ben poco... è tipo un vettore, ma...?

  2. #2
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da saichisono Visualizza Messaggio
    Quando sono mancato la prof. ha spiegato le matrici e leggendo quell'infimissimo libro ho capito ben poco... è tipo un vettore, ma...?
    E' un vettore di vettori , tipo ad esempio

    int matrice[][] = {{1,2,3,4,5},
    {1,2,3,4,5},
    {1,2,3,4,5}};
    poi per scorrere la matrice usi due cicli for annidati, ad esempio:

    for(int i=0; i<matrice.size(); i++) {

    for(int j=0; j<matrice.size() j++) {

    printf(...matice[i][j]..);

    }
    }

    semplice, ovviamente il codice è messo lì da esempio ma il concetto alla fine è quello

    vai alla voce "multidimensional arrays"
    http://www.cplusplus.com/doc/tutorial/arrays/

  3. #3
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    È già più chiaro


    Qua delle parentesi graffe non ce ne sarebbe bisogno (c'è un'istruzione sola dopo il for) o ricordo male io?
    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    for(int i=0; i<matrice.size(); i++) {

    for(int j=0; j<matrice.size() j++) {

    printf(...matice[i][j]..);

    }
    }

    Grazie mille

  4. #4
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da saichisono Visualizza Messaggio
    È già più chiaro


    Qua delle parentesi graffe non ce ne sarebbe bisogno (c'è un'istruzione sola dopo il for) o ricordo male io?



    Grazie mille
    Si, credo si possa scrivere

    for(.......)
    for(....)
    printfl(...)

    ma io uso sempre le graffe, anche per una sola istruzione, sono abituato così e quando lavori con progetti dalle medie dimensioni in su molte volte una chiara indentazione del codice ti salva la vita , e comunque le graffe me le mette l'IDE in automatico
    Ultima modifica di ZioYuri78; 17-01-13 alle 21:59:24

  5. #5
    LordOrion
    ospite

    Predefinito Re: C/c++

    Occhio:

    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    E' un vettore bidimensionale
    Fixed.

    Dire "vettore di vettori" per quanto possa sembrare corretto e' in realta' senmanticamente una cosa diversa.

    Anche il codice d'esempio e' contiene un errore: L'operatore size() non esiste nei vettori "normali" in C/C++, ma solo nei contenitori STL. Indipercui il ciclo che hai scritto non compila. In casi come quello del suo esempio, quando cioe' la dimensione della matrice e' nota, si usano un paio di #define per creare delle costanti simboliche che rapresentano la dimensione della matrice e le si usano nella definizione e nella giardia die cicli for.

    L'esempio corretto e quindi questo:

    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    Codice:
    #define NUM_RIGHE       3
    #define NUM_COLONNE   5
    
    int matrice[NUM_RIGHE][NUM_COLONNE] = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
    
    poi per scorrere la matrice usi due cicli for annidati, ad esempio:
    
    for(int i=0; i<NUM_RIGHE; i++) 
    {
    for(int j=0; j<NUM_COLONNE j++) {
    printf(...matice[i][j]..); }
    }


    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    Si, credo si possa scrivere

    for(.......)
    for(....)
    printfl(...)

    ma io uso sempre le graffe, anche per una sola istruzione, sono abituato così e quando lavori con progetti dalle medie dimensioni in su molte volte una chiara indentazione del codice ti salva la vita ,
    THIS.

    L'uso delle graffe e' obbligatorio solo se il blocco di codice da eseguire nel ciclo/costrutto condizionale contiene piu' di una istruzione, ma e' un OTTIMA regola usarlo sempre e comunque, anche solo per aumentare la chiarezza del codice.
    Ultima modifica di LordOrion; 28-01-13 alle 09:55:06

  6. #6
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da LordOrion Visualizza Messaggio
    Occhio:



    Fixed.

    Dire "vettore di vettori" per quanto possa sembrare corretto e' in realta' senmanticamente una cosa diversa.

    Anche il codice d'esempio e' contiene un errore: L'operatore size() non esiste nei vettori "normali" in C/C++, ma solo nei contenitori STL. Indipercui il ciclo che hai scritto non compila. In casi come quello del suo esempio, quando cioe' la dimensione della matrice e' nota, si usano un paio di #define per creare delle costanti simboliche che rapresentano la dimensione della matrice e le si usano nella definizione e nella giardia die cicli for.
    Sisi lo so, infatti ho anche detto che il codice l'ho scritto alla carlona, tanto per fargli capire il senso dell'algoritmo, raramente scrivo codice corretto negli esempi, altrimenti se uno si trova sempre la pappa pronta poi non impara più

  7. #7
    LordOrion
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    Sisi lo so, infatti ho anche detto che il codice l'ho scritto alla carlona, tanto per fargli capire il senso dell'algoritmo, raramente scrivo codice corretto negli esempi, altrimenti se uno si trova sempre la pappa pronta poi non impara più


    Ok, mantrattare i newbie e cosa buona e giusta, ma non esageriamo dai

  8. #8
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da LordOrion Visualizza Messaggio


    Ok, mantrattare i newbie e cosa buona e giusta, ma non esageriamo dai


    Diciamo anche che tendo a fare esempi in pseudo codice misto C++/Java/Haskell per sintetizzare la cosa, poi certi particolari li ritengo ovvi a seconda del linguaggio usato e non li scrivo, però in effetti il ragazzo qua sopra magari ha proprio appena cominciato e rischia solo di confondersi le idee

  9. #9
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    Ragazzi mi siete stati davvero utili. Nonostante sia mancato alla spiegazione in classe sono uno di quelli che sa usare meglio di tutti le matrici Mi prendono per pazzo perché vado direttamente in codifica senza diagramma di flusso
    Ora vi volevo porre un'altra domanda... come si utilizza il la selezione casuale dei valori (leggasi random)? La prof. ancora non l'ha spiegato ma caricare anche solo una matrice da 10x10 richiederebbe un botto di tempo...
    Ultima modifica di saichisono; 11-02-13 alle 14:11:04

  10. #10
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    Raddoppio la domanda
    Che ha di sbagliato questo programma?
    Spoiler:

    #include <stdlib.h>
    #include <stdio.h>
    int main () {
    int i,j,f,fl,mat[2][2],m,v;
    fl=0;
    for(i=0;i<3;i++)
    for(j=0;j<3;i++)
    scanf("%d",&mat[i][j]);
    for(j=0;j<3;j++){
    m=mat[0][j];
    for(i=1;i<3;i++)
    if(m<mat[i][j]){
    m=mat[i][j];
    f=i;
    }
    for(v=0;v<3;v++)
    if(m<mat[f][v]){
    fl=1;
    v=2;
    }
    if(fl!=1){
    printf("%d","%d",f,j);
    system("pause");
    }
    }


    system("pause");
    }



    Dovrebbe ricercare il massimo della riga e controllare se quest'ultimo è il minimo della colonna...

  11. #11
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    1) Per generare numeri casuali puoi usare il rand()
    http://www.cplusplus.com/reference/c.../rand/?kw=rand

    2) Così a prima vista nel secondo ciclo for incrementi ancora "i" al posto di "j"

    AH dimenticavo, nell'intestazione dei cicli for c'è un'altro errore abbastanza grave, ma lascio a te il piacere di scoprirlo
    Ultima modifica di ZioYuri78; 13-02-13 alle 13:32:55

  12. #12
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    E boh. La prof aveva detto che "forse" era giusto*
    *c'è stata mezz'ora ad interpretarlo e non era neanche sicura

  13. #13
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    No vabbè, ma cambiate profe, se nemmeno lei si è accorta che i cicli for vanno in overflow siete messi male

    Inoltre a metà programma si utilizza una variabile non inizializzata
    Ultima modifica di ZioYuri78; 15-02-13 alle 11:03:22

  14. #14
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    E perché dovrebbe andare in overflow?

  15. #15
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da saichisono Visualizza Messaggio
    E perché dovrebbe andare in overflow?
    perchè la dimensione degli array che compongono la matrice è 2 mentre il ciclo for fa 3 "giri", gli indici di un array partono sempre da 0 quindi in questo caso sono 0 e 1, mentre nel ciclo la variabile "i" (e j) viene incrementata tre volte in quanto i=0; i<3; ovvero 0,1,2 e quando arriva a 2 va in overflow, va a leggere una cella di memoria che non appartiene all'array

  16. #16
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    perchè la dimensione degli array che compongono la matrice è 2 mentre il ciclo for fa 3 "giri", gli indici di un array partono sempre da 0 quindi in questo caso sono 0 e 1, mentre nel ciclo la variabile "i" (e j) viene incrementata tre volte in quanto i=0; i<3; ovvero 0,1,2 e quando arriva a 2 va in overflow, va a leggere una cella di memoria che non appartiene all'array

    Ma se scrivo (esempio) int vet[2] il vettore non dovrebbe avere le celle 0,1,2? Quindi non dovrebbe andare in overflow, o sbaglio?
    Ad ogni modo ci metto i<=2 e siamo tutti contenti

  17. #17
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da saichisono Visualizza Messaggio

    Ma se scrivo (esempio) int vet[2] il vettore non dovrebbe avere le celle 0,1,2? Quindi non dovrebbe andare in overflow, o sbaglio?
    Ad ogni modo ci metto i<=2 e siamo tutti contenti
    Assolutamente no , int vet[2] imposta la dimensione dell'array a due celle di indici 0 e 1

    Inoltre se metti i<=2 non risolvi il problema in quanto equivale a scrivere i<3, devi mettere i<2

  18. #18
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    Assolutamente no , int vet[2] imposta la dimensione dell'array a due celle di indici 0 e 1

    Inoltre se metti i<=2 non risolvi il problema in quanto equivale a scrivere i<3, devi mettere i<2
    Mapporca... spero che non se ne accorga leggendo il compito in classe
    Grazie mille Zio.

  19. #19
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    Alla fine ho preso 7,5
    Comunque sono qua per altre delucidazioni. Stavolta si parla di stringhe, in generale e in breve: non so nulla

  20. #20

    Predefinito Re: C/c++

    Codice:
    string compito = "congratulazioni per il voto";
    ora hai una variabile chiamata "cacca" contenente una cosa che è fondamentalmente un array di caratteri char, e che puoi estrarre e modificare usando appunto un semplice array e il suo indice (es. per accedere alla 'o' di "congratulazioni", useresti voto[1]). Le stringhe sono molto comode. Ovviamente devi utilizzare cstring.h, se la memoria non m'inganna (non programmo da qualche anno, e non sono mai stato su chissà quali livelli).

  21. #21
    L'Onesto
    Data Registrazione
    13-12-11
    Località
    Messina
    Messaggi
    1,061

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da Drake Aran Visualizza Messaggio
    Codice:
    string compito = "congratulazioni per il voto";
    ora hai una variabile chiamata "cacca" contenente una cosa che è fondamentalmente un array di caratteri char, e che puoi estrarre e modificare usando appunto un semplice array e il suo indice (es. per accedere alla 'o' di "congratulazioni", useresti voto[1]). Le stringhe sono molto comode. Ovviamente devi utilizzare cstring.h, se la memoria non m'inganna (non programmo da qualche anno, e non sono mai stato su chissà quali livelli).
    Non sono sicuro di aver afferrato. E poi non parli delle funzioni string copy, string compare e le altre

  22. #22

    Predefinito Re: C/c++

    c'è un sito molto utile dove trovare un sacco di informazioni in merito, con tanto di esempi! Here: http://www.cplusplus.com/reference/string/string/

  23. #23
    ZioYuri78
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da Drake Aran Visualizza Messaggio
    c'è un sito molto utile dove trovare un sacco di informazioni in merito, con tanto di esempi! Here: http://www.cplusplus.com/reference/string/string/
    Riportato qualche post fa, miglior sito ever

  24. #24

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    Riportato qualche post fa, miglior sito ever
    Sorry, mi era sfuggito! Comunque sì, è fantastico!

  25. #25
    Frinn
    ospite

    Predefinito Re: C/c++

    Citazione Originariamente Scritto da saichisono Visualizza Messaggio
    Non sono sicuro di aver afferrato. E poi non parli delle funzioni string copy, string compare e le altre
    Allora in C le stringhe sono semplicemente vettori di caratteri. Puoi definire una stringa nel seguente modo:

    Codice:
    char* foo = "stringa";
    Se non avete studiato ancora i puntatori (e direi che sia cosi' visto l'obbrobrio di prima con le matrici) puoi fare anche cosi':

    Codice:
    char foo[] = "stringa";
    che tanto e' piu' o meno la stessa cosa.
    Per convenzione in C le stringhe sono zero-terminated, ossia esse finiscono sempre con un carattere di terminazione che viene spesso indicato come '\0' ad indicare che non e' il codice ascii di zero, ma proprio il valore 0.
    In poche parole in C una stringa e' un vettore di caratteri piu' il terminatore \0 in fondo. Nell'esempio che ti ho mostrato la parola 'stringa' ha 7 caratteri, il che significa che il compilatore C creera' un vettore di 8 elementi (7 lettere + il terminatore).
    Quindi:

    foo[0] vale 's'
    foo[1] vale 't'
    foo[2] vale 'r'
    foo[3] vale 'i'
    foo[4] vale 'n'
    foo[5] vale 'g'
    foo[6] vale 'a'
    foo[7] vale '\0'

    Dal punto di vista del linguaggio, e' piu' o meno tutto quello che c'e' da dire sulle stringhe. E' un vettore e lo puoi trattare come tutti gli altri vettori. A livello di libreria, c'e' <string.h> (o <cstring>) che ti da accesso a funzioni di manipolazione delle stringhe. Le tre piu' famose sono:

    strcpy - Copia una stringa in un'altra
    strcmp - Confronta due stringhe
    strlen - Ritorna il numero di caratteri della stringa (il terminatore non viene conteggiato)

    Tutte queste funzioni assumono che la stringhe terminino correttamente con '\0'.

    In C++ queste funzioni non andrebbero usate, visto che c'e' <string> che e' piu' sicura e robusta (e semplice da usare). Ci sono alcuni casi di applicazioni industriali in cui si deve usare per forza la stringa C style, ma in generale sarei sorpreso di trovare ancora le stringhe C in un programma moderno.
    Ultima modifica di Frinn; 28-02-13 alle 20:34:32

Pag 1 di 3 123 UltimaUltima

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato