Pagina 4 di 4 primaprima ... 2 3 4
Visualizzazione dei risultati da 31 a 39 su 39
  1. #31
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    è questo che non ho capito..
    a me hanno sempre spiegatoe ho anch letto nel libro di cui voi parlate che er creare le matrici ci deve essere un vettore, supponiamo di 3 celle; ognua di queste celle punta a un altro vettore..
    si viene così a formare una matrice 3*y;

    Ecco, quello che non ho capito è il rapporto che intercorre tra quanto appena detto e:

    matrice [10] [10]

  2. #32
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma parli di allocazione dinamica o statica della matrice?

    La matrice

    int matrice[10][10];

    e' allocata "staticamente" e il sistema riserva la necessaria memoria contigua.

    Nel caso di int da 32 bit, avrai una occupazione totale di 400 byte.

    La matrice avra' indirizzo iniziale determinato dal suo nome che puoi vedere con

    codice:
    printf("%p\n\n", matrice);
    e i suoi elementi sono memorizzati uno dopo l'altro ... gli indirizzi delle varie righe saranno

    codice:
    for(i=0; i<10; i++)
       printf("%p\n", matrice[i]);
    Se parliamo di allocazione "dinamica" della matrice allora, ad esempio

    codice:
    #define N 10
    
    ...
    
    int **mat; 
    int i;
    
    mat = (int **)malloc(N * sizeof(int *));
    for(i=0; i<N; i++) 
        mat[i] = (int *)malloc(N * sizeof(int));
    
    ...
    dovrai allocare lo spazio per i tuoi 10 puntatori (o per quante N righe vuoi) e, utilizzando questi ultimi, allocare lo spazio per N elementi in colonna (o per quante N colonne vuoi).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #33
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Sto leggendo piu' volte il libro ma non riesco a venirne fuori..
    Potresti per piacere farmi vedere come fare a costruire una matrice e stamparla riempendola di asterischi?
    Se è possibile utilizzando una volta vettori bidimensionali, l'altra utilizzando vettori di punatori..
    Solo soffermandomi su quelli credo di poterne uscire fuori.
    Grazie

  4. #34
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ho dedotto che non ho capito niente!!!
    Siamo daccordo che questo programma funziona e mi stampa una matrice 10*10 piena di 3.


    codice:
    #include <stdio.h>
    main()
    {
        int matrice[10][10];
        int x, y;
        /* riempie la matrice */
        for(x=0;x<10;x++)
        {
            for(y=0;y<10;y++)
            {
                matrice[x][y]=3; /* assegna all'elemento x,y dell'array il valore x*y */
                printf("%d\t",matrice[x][y]);
            }
        
            
        }
        getch();
    }
    Ma facendo questo tentativo, viene la stessa cosa!!!!!

    codice:
    
    #include <stdio.h>
    main()
    {
        int matrice[1];
        int x, y;
        /* riempie la matrice */
        for(x=0;x<10;x++)
        {
            for(y=0;y<10;y++)
            {
                matrice[x]=3; /* assegna all'elemento x,y dell'array il valore x*y */
                printf("%d\t",matrice[x]);
            }
        
            
        }
        getch();
    Come puo' avvenire lo stesso risultato, anche se ho completamente eliminato le colonne della matrice, ovvero il secodno termine di matrice [10][10]??
    Mi viene da supporre che tutto dipenda dai due for.. siccome nei for ho lasciato 10*10, il risultato non cambia..
    Ma allora dove vengono scritti i 3??
    Non è dunque vero che esiste un vettore le cui celle punatno ad altri vettori e via dicendo...???!! Suppongo di no, dato che ho omesso questi vettori "puntati" dalle celle del vettore originario...

  5. #35
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da playbasfa
    Ho dedotto che non ho capito niente!!!
    Beh ... l'ho dedotto anche io ... e deducoa anche che non hai letto il mio post precedente ...

    Ma facendo questo tentativo, viene la stessa cosa!!!!!
    Quando fai dei "tentativi" devi renderti conto di cosa stai scrivendo ...

    In primo luogo, questa

    int matrice[1];

    non e' una matrice (piu' di una dimensione) ma un vettore (una sola dimensione).

    Il numero 1 che hai inserito, fra l'altro, significa che il vettore avra' 1 SOLO elemento.

    Per quanto riguarda i due cicli, deduco che non hai neanche chiaro come funzioni un for ...

    La for piu' interna (quella con y) non fa altro che ripetere 10 volte quello che fa la for piu' esterna, ma NON PARTECIPA in nessuno modo all'indirizzamento delle celle del vettore perche' la variabile y non e' utilizzata come indice ...

    La for piu' esterna è assolutamente sbagliata perche' indirizza 10 elementi del vettore, di cui 9 NON ESISTONO. Questo e' il migliot modo per avere una eccezione in scrittura (segmentation fault) o danneggiare gli altri dati del tuo programma ...

    A questo punto tu non hai problemi a comprendere l'uso delle matrici, ma hai molta confusione su tutte quelle che sono le basi del linguaggio C ... ti consiglio di fare un passo indietro e studiare nuovamente tutte le parti del tuo libro precedenti le matrici ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #36
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    si hai ragione ci avevo riflettuto prima che me lo facessi notare ed è ovvio che tramite i cicli io non faccio altro che riempire quella cella dei quel vettore e stamparlo.. tante volte quante l'ho imposto nella condizione del for..

    Quello che non riesco a fare è:
    come prima quando trattavo di vettori a una sola dimensione, riuscivo a stamparli..
    xes.

    codice:
    char linea[100];
    getline (linea);
    printf("%s",linea);
    Perchè' adesso se mi riempo una matrice e poi faccio

    codice:
    char matrice[10] [10];
     (
    printf("%s",matrice);

    Non riesco a stamparla?

    Se qualcuno mi potesse fare vedere come fare a riempire una matrice 10*10 di asterischi e poi stamparla (posibilmente stamparla senza adoperare un ciclo, am semplicemente stampando i vettori interi) gliene sarei grato

  7. #37
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In C una stringa e' un vettore di char. La printf e' una funzione al cui interno c'e' un ciclo che visualizza carattere per carattere del vettore fino ad incontrare un NULL.

    Quindi, anche se non lo vedi, c'e' un ciclo for per visualizzare il vettore di char.

    Una matrice NON e' un vettore e quindi la printf NON puo' gestirla.

    Se consideri la matrice di char come un insieme di vettori di char, devi utilizzare un tuo ciclo per passarli, uno per uno, alla printf ... puoi quindi scrivere

    codice:
    char matrice[10][100];
    int i;
    
    ...
    
    for(i=0; i<10; i++)
       printf("%s\n", matrice[i]);
    Sono concetti semplici ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #38
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ok, adesso credo di aver capito..
    quindi per es. se io avessi un problema del tipo:

    http://www.tti.unipa.it/~ricrizzo/es...sercizio3.html

    Quale sarebbe a livello teorico la maniera corretta di approciarmi al problema.. Tralasciando anche l'input e l'output defi file, quale sarebbe la maniera corretta per controllare se sono presenti dei determinati caratteri all'interno della matrice?
    Un if all'interno dei for annidati?

  9. #39
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... sì, delle if all'interno dei for sarebbero la via piu' semplice.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.