Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    86

    [C] Selezione di una parte di una matrice

    Ragazzi avrei bisogno del vostro aiuto. Vi spiego il problema e posto la parte di codice.

    Come potete vedere, sia data una matrice 5x5 così composta:

    0 1 2 3 4

    0 0 2 4 6 2
    1 2 0 8 9 4
    2 4 8 0 7 5
    3 6 9 7 0 6
    4 2 4 5 6 0

    In un file sono presenti i vertici che mi interessano e li carico in un vettore di n celle, vettore le cui celle sono state inizializzate a -1. Man mano che leggo i valori da file e li inserisco nel vettore aggiorno una variabile contatore (count) che mi dice quanti sono i valori inseriti, variabile che mi servirà per creare una matrice di count righe e count colonne. Nella nuova matrice dovrò inserire solo i valori relativi ai vertici presi
    in esame.

    Come esempio, supponiamo che i vertici in questione siano 0,2,4 devo creare,
    quindi, una matrice 3x3 che prenda in considerazione solo i valori relativi ai
    vertici in questione. In output, quindi avremo questa soluzione.

    0 1 2

    0 0 4 2
    1 4 0 5
    2 2 5 0


    io ci ho provato ma non riesco a riempire le celle nel modo corretto.
    Posto la parte di codice. Mi sapete aiutare??

    for(v=0; v<count; v++)
    {
    for(riga=0; riga<count; riga++)
    {
    for(colonna=0; colonna<count; colonna++)
    {
    for(r=0; r<n; r++)
    {
    if(vettore[v] == r)
    {
    while(vettore[v] != -1)
    {
    for(c=0; c<n; c++)
    {
    If(vettore[v] == c)
    {
    nuovam[riga][colonna] = m[r][c];
    }
    }
    }
    }
    break;
    }
    }
    }
    }

  2. #2
    praticamente nella nuova matrice vai a inserire i valori contenuti nelle celle dicoordinate
    (0,0) (0,2) (0,4)
    (2,0) (2,2) (2,4)
    (4,0) (4,2) (4,4)
    ???

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    86
    Sì, è esattamente così!!

  4. #4
    per riempire la matrice io farei:

    #include <math.h>

    for (v=0; v<count; v++)
    {
    for(riga=0; riga<sqrt(count);riga++){

    for(colonna=0;colonna<sqrt(count); colonna++)
    }
    nuovamatr[riga][colonna]=vettore[v];

    }

    ma il problema sta nel riempire la matrice o nell'estrarre i numeri corretti dalla matrice originale?

  5. #5
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Provo a dare la soluzione

    int vertici[]={0,2,4};

    //ti allochi quindi una matrice con la malloc 3*3
    quindi
    int** matrice=malloc(sizeof(int*)*n);

    for(i=0;i<n<i++)
    matrice[i]=malloc(sizeof(int)*n);


    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    matrice[i][j]=MATRICEORIGINALE[vartice[i]] [vertice[j]];
    }
    }
    penso che funzioni provala

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    86
    Il problema sta nell'estrarre i valori corretti dalla matrice originale in funzione dei vertici richiesti.Solo in seguito bisognerà inserirli nella nuova matrice.

  7. #7
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    mhhh. allora il problema non mi è chiaro ...
    la soluzione di questo problema lo data in base all'esempio
    (0,0) (0,2) (0,4)
    (2,0) (2,2) (2,4)
    (4,0) (4,2) (4,4)

    con la richiesta dei vertici 0,2,4

    allora n vertici richiesti , qualsiasi siano , li carichi in un vettore e tutti gli elementi che ti interessano della matrice originale saranno nella forma

    matriceorgininale[vettore[i]] [vettore[j]]; // 0<=i,j<n

    nei due for scritti in precedenza li prendi tutti e poi li puoi mettere in una matrice o in un vettore incrementandoti un count

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    86
    Infatti quello è un esempio specifico. Nel caso più generico data una matrice di n vertici, con n righe e n colonne possono servirmi anche la metà o i tre quarti dei vertici presenti in matrice.

  9. #9
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    non vedo il problema basta che ongi volta ti carichi (quando leggi da file) in modo appropriato il vettore vertici e il tutto funziona )

    n=sizeof(vertici)/sizeof(int)M//ti da il numero di elementi di vertici\\ti da il numero di elementi presenti in vertici ;

    Se non sai qunato dichiarartelo grande il vettore vertici è un'altro discorso(puoi costruirti una prima una lista e poi con questa ci riempi il vettore vertici oppure puoi usare i vettori dinamici che utilizzano la realloc)

    in riferimanto a questo esempio

    (0,0) (0,2) (0,4)
    (2,0) (2,2) (2,4)
    (4,0) (4,2) (4,4)
    oppure per 1,3 abbiamo questo ;
    (1,1) (1,3)
    (3,1) (3,3)

    giusto?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    86
    Grazie.... la soluzione che mi hai dato ieri funziona perfettamente!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.