Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Dichiarare delle matrici (prog C)

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[11] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentetecfil » 7 ago 2013, 20:57

Ciao Foto Utentesimo85

Grazie mille per l'esempio, però forse non ho capito bene io come utilizzare i puntatori :oops:

Ho provato a riscrivere il codice in questo modo:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int *dim1;
    dim1 = (int*) malloc (sizeof(int) * 100);
    int *dim2;
    dim2 = (int*) malloc (sizeof(int) * 100);

    int matrice[dim1][dim2];
    int i=0,j=0;
   
    printf("Numero di righe: ");
    scanf("%d", dim1);
    printf("Numero di colonne: ");
    scanf("%d", dim2);

       
    printf("Inserisci i numeri della matrice:\n");
    for(i=0; i<dim1; i++) {
        for(j=0; j<dim2; j++) {
            printf("==> ");
            scanf("%d", &matrice[i][j]);
            }
    }

    //Stampa matrice
    for(i=0; i<dim1; i++) {
        for(j=0; j<dim2; j++) {
            printf("%d",matrice[i][j]);
        }
        printf("\n");
    }
    return 0;
}


Ho dichiarato i puntatori dim1 e dim2, poi ho allocato 100byte di memoria per ognuno. Però non riesco a capire come far decidere all'utente la dimensione della matrice. Inoltre come faccio a decidere quanti byte di memoria sono sufficienti per la mia matrice? Ad esempio se ho una matrice 3x3 avrà bisogno di meno memoria rispetto ad una 5x5 :-)

Una domanda riguardante il codice: il free(pointer) mi serve per eliminare i dati salvati in memoria giusto? :-)

Grazie mille per l'aiuto!
Ciaoo :-)

PS: questo esercizio me lo sono inventato giusto per fare un po' di programmini ed allenarmi per l'esame :D
Il colmo per un elettricista? Essere isolato :D
Avatar utente
Foto Utentetecfil
327 1 5 6
Stabilizzato
Stabilizzato
 
Messaggi: 440
Iscritto il: 2 lug 2013, 21:41

0
voti

[12] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentetecfil » 7 ago 2013, 21:06

Capito!! :mrgreen: :mrgreen:

Nel codice sbagliavo a richiamare il puntatore, mi dimenticavo l'asterisco quindi avevo sempre un errore!

Ecco il codice giusto se serve ad altre persone:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int *dim1;
    dim1 = (int*) malloc (sizeof(int) * 100);
    int *dim2;
    dim2 = (int*) malloc (sizeof(int) * 100);

    int i=0,j=0;
   
    printf("Numero di righe: ");
    scanf("%d", dim1);
    printf("Numero di colonne: ");
    scanf("%d", dim2);
       int matrice[*dim1][*dim2];

    printf("Inserisci i numeri della matrice:\n");
    for(i=0; i<*dim1; i++) {
        for(j=0; j<*dim2; j++) {
            printf("==> ");
            scanf("%d", &matrice[i][j]);
            }
    }

    //Stampa matrice
    for(i=0; i<*dim1; i++) {
        for(j=0; j<*dim2; j++) {
            printf("%d",matrice[i][j]);
        }
        printf("\n");
    }
    return 0;
}


L'unico dubbio che mi rimane è:
come faccio a decidere quanti byte di memoria sono sufficienti per la mia matrice? Ad esempio se ho una matrice 3x3 avrà bisogno di meno memoria rispetto ad una 5x5 :-)

Una domanda riguardante il codice: il free(pointer) mi serve per eliminare i dati salvati in memoria giusto?


Grazie mille per l'aiuto :-)

Ciaoo!
Il colmo per un elettricista? Essere isolato :D
Avatar utente
Foto Utentetecfil
327 1 5 6
Stabilizzato
Stabilizzato
 
Messaggi: 440
Iscritto il: 2 lug 2013, 21:41

0
voti

[13] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentefairyvilje » 7 ago 2013, 21:06

No il free non elimina i dati, rende la memoria non-riservata. Quello che succede ai dati è non-predicibile dato che essi non esistono formalmente più.
Poi solitamente questi rimangono fino a che non si sovvrascrive la memoria. Dipende dalle implementazioni.

Ricorda sempre di usarlo correttamente e fare attenzione che alla fine del programma tutti i dati alloccati siano liberati :)
Ultima modifica di Foto Utentefairyvilje il 7 ago 2013, 21:07, modificato 1 volta in totale.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[14] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentesimo85 » 7 ago 2013, 21:07

Credo che tu faccia confusione tra dichiarazione ed allocazione di memoria ;-) oltre a complicarti un po' la vita. :D

Nel tuo programma alloci 100 byte per dim1 & dim2 ciascuno, ma non stai dando nessun valore a questi due puntatori. Stai solo allocando memoria. Niente più. :D

Come prima nota di passaggio, i puntatori quando vengono dichiarati senza essere inizializzati, si fanno puntare a NULL, ossia a niente.

Infine, tu devi solo dare un valore a righe e colonne per dichiarare la matrice.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[15] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentefairyvilje » 7 ago 2013, 21:09

@Foto Utentesimo85 Allocca sizeof(int)*1000 bytes non solo 1000 bytes
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[16] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentesimo85 » 7 ago 2013, 21:11

Vabbé ne alloca 100 * sizeof(int) tutti e due ci vediamo storto.. :mrgreen:

Io vado a mangiarmi una pizza, alloco un posto a tavola..

:mrgreen: :mrgreen:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[17] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentefairyvilje » 7 ago 2013, 21:35

XD XD in due siamo riusciti a dirla giusta XD...
Buona cena
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

1
voti

[18] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentesimo85 » 7 ago 2013, 23:12

fairyvilje ha scritto:Buona cena

Grazie! Mi sono proprio abbuffato :!:

Foto Utentetecfil, come dicevo prima secondo me ti stai complicando le cose.

Se dichiari un array:

Codice: Seleziona tutto
int array[ROWS][COLS];


ROWS e COLS devono essere, ciascuno, un numero intero maggiore di 0.
Altrimenti non devi usare gli array ma bensì i puntatori come ti avevamo già consigliato e la cosa si complica.

Questo thread su StackOverflow ed anche questo tutorial mi sembra facciano al caso tuo.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

1
voti

[19] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto UtenteTardoFreak » 7 ago 2013, 23:28

Quando avrò un po' di tempo implementerò la dichiarazione dell' array come hai postato in [9] con diversi compilatori per microcontrollori.
Teoricamente se l' allocazione dell' array nello stack (si tratta di una variabile la cui visibilità è a livello di blocco) viene fatta "al momento" potrebbe funzionare ...teoricamente, ma non è detto perché i compilatori per i micro sono molto avari e schizzinosi. :mrgreen:
Ci proverò e farò sapere, magari è un argomento che può interessare.

Stay tuned. :mrgreen:
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[20] Re: Dichiarare delle matrici (prog C)

Messaggioda Foto Utentesimo85 » 8 ago 2013, 2:48

Un TardoHack.

:mrgreen:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

PrecedenteProssimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti