n° 185
Maggio/Giugno 2013
Maggio 19, 2013, 08:35:33 am *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: [C] Confronto di una matrice per trovare i gruppi di numeri uguali  (Letto 460 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
med90
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 5


Mostra profilo
« inserita:: Giugno 15, 2012, 07:30:48 pm »

ciao a tutti
Allora mi sono un pò impanato in un programma che stò facendo in C, in pratica sto creando una funzione che data una matrice con 15 per 10 composta da numeri, mi dovrebbe trovare i gruppi di numeri uguali sia sulla colonna sia sulla riga, e mettermeli nella stessa posizione in cui erano in un altra matrice sempre 10 x 15 composta da 0(eccetto per i gruppi).
Ho scritto la funzione, il compilatore non mi da alcun errore ma mi stampa su schermo una semplice matrice composta da soli zeri, vi allego il codice:

Codice:
#include<stdlib.h>
#include<stdio.h>

int read_matrix (char *file,int matrice[15][10])
{
    FILE *ifp;
    int i=0 ,j=0 ;
    ifp = fopen(file, "r");
    for(i=0; i<15; i++)
    {
        for(j=0; j<10; j++)
        {
            fscanf(ifp,"%1d",&matrice[i][j]);
        }
    }
    return(matrice[15][10]);
}
int search_groups (int matrice[15][10])
{
    int i,j,x,k,z;
    int matrix[15][10];
    for (i=0; i<15; i++)
    {
        for (j=0; j<10; j++)
        {
            x=matrice[i][j];
            for(k=i-1; k<i; k++)
            {
                if(matrice[k][j]==x)
                {
                    matrix[k][j]==matrice[k][j];
                }
                for (z=j-1; z<j+1; z++)
                {
                    if (matrice[i][z]==x)
                    {
                        matrix[i][z]==matrice[i][z];
                    }
                }
            }
        }
    }
    return matrix[15][10];
}

int main(int argc, char *argv[])
{

    int l,m,i,j;
    int matrice[15][10]= {0};
    int matrix[15][10]= {0};
    char *s=argv[2];
    if(argv[1][0] == '-' && argv[1][1]== 't')
    {
        matrice[10][15]=read_matrix(s,matrice);
        for (l=0; l<15; l++)
        {
            for (m=0; m<10; m++)
            {
                if(m==0)
                {
                    printf("\n");
                }
                printf("%1d ", matrice[l][m]);
            }
        }
        printf("\n \n \n");
        matrix[15][10]=search_groups(matrice);
        for(i<0; i<15; i++)
        {
            for (j=0; j<10; j++)
            {
                printf("%1d", matrix[i][j]);
            }
        }
    }
    else
    {
        printf("errore \n");
    }
    return 0;
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +204/-15
Scollegato Scollegato

Messaggi: 2705


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #1 inserita:: Giugno 15, 2012, 10:07:15 pm »

Al di là di un'analisi del codice prodotto, la specifica risulta piuttosto ambigua.
Cosa significa "gruppi di numeri uguali sia sulla colonna sia sulla riga"? Sequenze di due o più interi che si ripetono sia su una riga, sia su una colonna qualsivoglia? Una sorta di ingenuo pattern matching numerico, con complessità dell'ordine di O(N3)?

Il resto è piuttosto chiaro e banale: tali sequenze, comunque individuate, vanno copiate per pari indici in una seconda matrice, inizialmente nulla.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
med90
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 5


Mostra profilo
« Risposta #2 inserita:: Giugno 16, 2012, 04:03:41 pm »

Salve, devo fare un progetto per un esame all' università, ma sono rimasto un po con le spalle al muro.
In pratica devo Scrivere una funzione in C alla quale passo una matrice 15 x 10 composta da numeri che possono essere: 0,1,2 o 3.
Devo trovare il gruppo più grande possibile di 1, 2 o 3  che devono essere connessi solo tramite le direzioni cardinali.
Ad esempio passo alla funzione:
012333323
011233000
011230000

Lui dovrebbe trovarmi quel gruppo di tre che sono connessi e passarmeli a zero.
Qualcuno riesce a darmi un buon consiglio per implementarlo?
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +204/-15
Scollegato Scollegato

Messaggi: 2705


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #3 inserita:: Giugno 16, 2012, 05:26:20 pm »

Con questo post hai specificato in modo un po' più preciso il problema. Si tratta di ricerca dei cluster di cifre, un problema classico con numerose varianti.
Non occorre tuttavia aprire una nuova discussione, come avevi inizialmente fatto. Se hai prodotto un nuovo tentativo di risoluzione, puoi postarlo qui e ne discuteremo volentieri.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
med90
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 5


Mostra profilo
« Risposta #4 inserita:: Giugno 16, 2012, 05:37:18 pm »

Chiedo venia.
Beh diciamo che all inizio ho provato ad isolare i gruppi ponendoli in una matrice composta da soli zeri, tuttavia dovendo poi cancellare questo gruppo dalla matrice originale mi sono accorto che non era la strada più corretta.
Tuttavia ora non ho proprio idea di come implementarlo e volevo qualche consiglio.

Ho provato a fare una ricerca verso destra e verso il basso solo che mi trova cose assurde, posto il codice:

Codice:
int ricerca(int matrice[15][10] )
{
    int c,d,i,u,j,x,c1,c2,k,indo=0,indv=0;
    int *p;
    c1=1;
    p=&matrice[0][0];
    for(i=0; i<15; i++)
    {
        for (j=0; j<10; j++)
        {
            if(matrice[i][j]!=0)
            {
                x=matrice[i][j];
                if(x==matrice[i][j+1] || x==matrice[i+1][j] )
                {
                    c1=c1+1;
                    if(x!=matrice[i][j+1])
                    {
                        c1=c1;
                    }
                    if(x!=matrice[i+1][j])
                    {
                        c1=c1;
                    }
                    if(c1>k)
                    {
                        k=c1;
                        indo=i;
                        indv=j;
                        p=&matrice[i][j];
                    }
                    if(x!=matrice[i][j+1] && x!=matrice[i+1][j])
                    {
                        c1=0;
                    }
                }
            }
        }
    }
    printf("%d \n %d \n %d \n",k,indo,indv);


}
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page