Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Matrici dinamiche in C

Hybrid View

  1. #1
    Perché però, se ad esempio riempio la matrice in questo modo:
    codice:
    for(i=0; i<righe; i++){
            for(j=1; j<colonne; j++){
                (*(matrix+colonne*i+j))=(*(matrix+colonne*i+(j-1)))++;
            }
        }
    E poi la stampo
    ...
    codice:
    for(i=0; i<righe; i++){
            for(j=0; j<colonne; j++){
                printf("%d ", (*(matrix+colonne*i+j)));
            }
            printf("\n");
        }
    mi stampa sul terminale:
    1 1 1 1 1 1 1 1 1 0
    1 1 1 1 1 1 1 1 1 0
    ?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da piergiuseppe24 Visualizza il messaggio
    Perché però[
    Devi indicare quale codice hai usato per l'allocazione altrimenti si fa confusione tra i vari metodi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    E soprattutto, ipotizzando che tu stia usando il metodo del puntatore singolo, che output ti attendi?
    every day above ground is a good one

  4. #4
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int main(void){
        int *pos = NULL, r=0, c=0, t=0;
        int i, j;
        printf("Inserisci il numero di colonne: ");
        scanf("%d", &c);
        printf("Inserisci il numero di righe: ");
        scanf("%d", &r);
        pos = (int *)calloc(r*c, sizeof(int));
        srand48(time(0));
        /***/
        for(i=0; i<r; i++){
          for(j=1; j<c; j++){
        if(((double)lrand48()/RAND_MAX)>0.5){
          (*(pos+c*i+j))=(*(pos+c*i+(j-1)))++;
        }
        else (*(pos+c*i+j))=(*(pos+c*i+(j-1)))--;
    
          }
        }
        /***/
        for(i=0; i<r; j++){
          for(j=0; j<c; i++){
        printf("%d ", (*(pos+c*i+j)));
          }
          printf("\n");
        }
    }

    Per r=2, c=10:
    -1 1 1 -1 1 1 -1 1 -1 0
    -1 -1 -1 -1 -1 -1 1 1 1 0
    Ciò che mi aspetto è, data la casualità, che gli elementi di questa matrice siano numeri interi, non necessariamente +-1.
    Inoltre mi stampa l'ultima colonna sistematicamente nulla, cosa che dovrebbe accadere alla prima.
    Ultima modifica di piergiuseppe24; 30-11-2015 a 20:32

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    data la casualità


    La calloc azzera gli elementi del vettore. E' la malloc (che avevi usato prima) che non inizializza i valori lasciandoli casuali.

    cosa che dovrebbe accadere alla prima


    Facci capire ... posto che tutti i valori siano a zero inizialmente, secondo te quale dovrebbe essere il risultato usando questa linea

    (*(pos+c*i+j))=(*(pos+c*i+(j-1)))++risultato usando questa linea.

    E infine, nelle ultime due for utilizzi i e aumenti j e poi utilizzi j e aumenti i ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Ti faccio l'esempio monodimensionale (il programma simula un certo tipo di moto in più dimensioni).
    Questo è quello che viene fatto di norma:
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int main(void){
        int pos = 0;
        int i, seed;
        seed=time(0);
        for(i=0; i<10; i++){
            if(((double)lrand48()/RAND_MAX)<0.5) pos += 1;
            else pos -= 1;
            printf("%d %d\n", i, pos);
        }
    }
    Il problema sorge quando passo agli array (analogo per più dimensioni):
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int main(void){
        int pos[10] = {0};
        int i, seed;
        seed=time(0);
        for(i=1; i<10; i++){
            if(((double)lrand48()/RAND_MAX)<0.5) (*(pos+i)) = (*(pos+(i-1)))++;
            else (*(pos+i)) = (*(pos+(i-1)))--;
            printf("%d %d\n", i, pos[i]);
        }
    }
    Sono stato chiaro?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quindi dovrebbe essere

    (*(pos+i)) = (*(pos+(i-1))) - 1;

    e

    (*(pos+i)) = (*(pos+(i-1))) + 1;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

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.