Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Permutazione Casuale Matrice di Caratteri

    Salve ragazzi. Ho un piccolo problema. Ho una matrice di caratteri,devo da quest'ultima una nuova matrice che è la permutazione della precedente, usando la funzione srand. Non so come fare. Ho provato memorizzare gli elementi della matrice all'interno di un array. Generare numeri casuali,e di associare ad ogni elemento della nuova matrice la lettera che si trova alla posizione numero(rand) dell'array. Il problema è che si possono generare anche numeri uguali e quindi c'è la possibilità di prfendere due volte gli stessi valori.

    Ecco il codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    void main()
    {
    char matrice [6][10]={{'O','K','7','Z','S','G','X','H','Y','K'},
    {'O','8','J','E','Q','D','N','5','O','8'},
    {'W','P','U','3','A','R','F','L','W','P'}, {'I','4','V','C','2','T','M','B','I','4'},
    {'K','K','7','Z','S','G','X','H','Y','K'},
    {'O','8','J','E','Q','D','N','5','O','8'}};

    int i,j,k;
    int nc[32];

    char l_matrice[32];
    char matrice2[4][8];
    k=0;
    for(i=1;i<5;i++)
    {
    for(j=1;j<9;j++)
    {
    l_matrice[k]=matrice[i][j];
    k++;
    }

    }
    srand((unsigned int)time(0));
    for(i=0;i<32;i++)
    {
    nc[i]=rand()%32;
    }

    k=0;
    for(i=0;i<4;i++)
    {
    for(j=0;j<8;j++)
    {
    matrice2[i][j]=l_matrice[nc[k]];
    k++;
    }
    }
    for(i=0;i<4;i++)
    {
    for(j=0;j<8;j++)
    {
    printf("%c ",matrice2[i][j]);
    }
    printf("\n");
    }
    }

    Aiutoooooooooooooo!!!!!!!!!!!!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Una strada potrebbe essere questa:
    1) Crei una matrice di interi grande quanto quella di di caratteri: la chiami IDX
    2) Generi un numero casuale (compreso tra 0 e la dim della matrice -1)
    3) Controlli se il numero è già presente nella matrice IDX
    4) Se è già presente torna al punto 2
    5) Se non è presente lo inserisci nella matrice IDX
    6) Se hai estratto tutti i numeri (dim matrice -1) hai finito, altrimenti torna al punto 2.

    Finito questo la matrice IDX rappresenta una permutazione di tutti gli indici della matrice di caratteri: la scorri tutta inserendo nella nuova matrice caratteri in ciascuna posizione l'elemento indicato dal valore in IDX.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille,ci provo!!!!


  4. #4
    Grande funziona.
    Ho un pò cambiato, nel senso che ho generato un array di numeri casuali, tutti diversi, alla quale associerò una lettera della mia matrice.
    Se vuoi ecco il codice.
    Un saluto e grazie mille.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    void main()
    {
    	  char matrice [6][10]={{'O','K','7','Z','S','G','X','H','Y','K'}, 
    							{'O','8','J','E','Q','D','N','5','O','8'},	 
    							{'W','P','U','3','A','R','F','L','W','P'},	 
    							{'I','4','V','C','2','T','M','B','I','4'},	 
    							{'K','K','7','Z','S','G','X','H','Y','K'},
    							{'O','8','J','E','Q','D','N','5','O','8'}};
    	  int i,k,nc,nc1;
    	  int ncr[32];
    	  srand((unsigned int) time(0));
    	  k=1;
    	  nc1=rand()%32;
    	  ncr[0]=nc1;
    	  while(k<32)
    	  {
    		nc=rand()%32;
    		for(i=0;i<k;i++)
    		{
    			if(ncr[i]==nc)
    			{
    				i=k;
    			}
    			else
    			{
    				if(k==i+1)
    				{
    					ncr[k]=nc;
    					k++;
    				}
    				
    			}
    		}
    	  }
    		
    
    	  for(i=0;i<32;i++)
    		  printf("%d ",ncr[i]);
    }

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Quando posti il codice, inseriscilo all'interno dei tag [*CODE] e [*/CODE] (senza l'asterisco rosso) così diventa leggibile, mantenendo l'indentazione e utilizzando un carattere più consono al codice.

    Inoltre, per le indentazioni, cerca di non utilizzare il tab, ma una sequenza di 3 o quattro spazi così da migliorarne ulteriormente la leggibilità.

    (il codice te l'ho inserito io nei tag CODE, ma non sono stato lì a trasformare i tab in spazi...)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Grazie per i consigli e ancoa per l'aiuto.
    Li seguirò!!

    Grazie mille, apresto.

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.