quarta-feira, 11 de fevereiro de 2015

Números aleatórios em matriz sem repetições

Se você tentou gerar uma sequência de números inteiros aleatórios e se decepcionou por causa das repetições que surgiram, seu problema acaba com este exemplo que trago agora.
Três pequenos blocos de códigos foram suficientes pra fazer nosso programa,
onde no primeiro bloco geramos e adicionamos os números nas linhas e colunas de uma matriz, já no segundo bloco de código, com os números já gerados, usamos a famosa função rand(); que atua como embaralhador dos números gerados no primeiro bloco.
Já no terceiro, que é o último bloco, imprimimos nossa matriz, onde previamente, colhemos o total de linhas e de colunas por uma entrada de dados com scanf(); e finalmente o total de elementos gerados são contados e o programa encerra sua execução agradecendo o uso.

Veja abaixo imagens do programa em execução:




Veja abaixo o código do programa:


//Bom exemplo de como usar a função clreol(); para apagar linhas
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define tam 10
void Janela5(){
int lin, col;
col = 0;
for ( lin = 2; lin <= 24; lin++ )
for ( col = 2; col <= 78; col++ ){
gotoxy(col,lin);textattr ( 3 );printf(" ");
}
}
int main(){
system ("title NÚMEROS ALEATÓRIOS EM MATRIZ SEM REPETIÇÕES");
int a = 0, i, j, n, m, t = 0, r = 0, y = 0, temp,  M [ tam ] [ tam ];
do{system("Color 80");Janela5();
textcolor(LIGHTRED);gotoxy(23,3);printf("NÚMEROS ALEATÓRIOS EM MATRIZ SEM REPETIÇÕES");
textcolor(YELLOW);gotoxy(24,5);printf("Programa desenvolvido por:");
textcolor(LIGHTCYAN);gotoxy(52,5);printf("Samuel Lima");
textcolor(LIGHTBLUE);gotoxy(35,7);printf("sa_sp10@hotmail.com");
textcolor(WHITE);gotoxy(30,9);printf("Digite o total de linhas  ");
textcolor(LIGHTRED);scanf ( "%d",&n );fflush (stdin);
if ( n < 0 || n > tam  ){
textcolor(LIGHTBLUE);gotoxy(25,9);printf("\aO Número de linhas não Pode Ser Negativo");
textcolor(LIGHTBLUE);gotoxy(25,10);printf("Nem Maior que %d", tam);Sleep(1000);
gotoxy(25,12);textcolor(AMARELO);printf("PRESSIONE QUALQUER TECLA");
getche();system ("cls");
}
}while ( ( n < 0 ) || ( n > tam ) ) ;
do{
textcolor(WHITE);gotoxy(30,11);printf("Digite o total de colunas  ");
textcolor(LIGHTRED);scanf ( "%d",&m );fflush (stdin);
if ( m < 0 || m > tam  ){
textcolor(LIGHTBLUE);gotoxy(25,13);printf("\aO Número de colunas não Pode Ser Negativo");
textcolor(LIGHTBLUE);gotoxy(25,14);printf("Nem Maior que %d", tam);Sleep(1000);
gotoxy(25,16);textcolor(AMARELO);printf("PRESSIONE QUALQUER TECLA");
getche();
gotoxy(25,13);clreol();
gotoxy(25,14);clreol();
gotoxy(25,16);clreol();
gotoxy(57,11);clreol();
}
}while ( ( m < 0 ) || ( m > tam ) ) ;
Sleep(1000);gotoxy(32,21);textcolor(LIGHTGREEN);
printf("PRESSIONE QUALQUER TECLA");getche();
system("cls");system("Color 40");Janela5();
textcolor(LIGHTRED);gotoxy(23,3);printf("NÚMEROS ALEATÓRIOS EM MATRIZ SEM REPETIÇÕES");
textcolor(LIGHTBLUE);gotoxy(28,5);printf("Mostrando abaixo a matriz ");
textcolor(LIGHTRED);printf("%d", n);
textcolor(LIGHTBLUE);printf(" por ");
textcolor(LIGHTRED);printf("%d", m);
textcolor(WHITE);
for( i = 0; i < n; i++ ){
for( j = 0; j < m; j++ ){
t++;
M [ i ] [ j ]  = t;
a = M [ i  ] [ j ];
}
}
for ( i = 0; i < n; i++){
for ( j = 0; j <  m; j++){
r = rand() % n;
y = rand() % m;
temp = M [ i ] [ j ];
M [ i ] [ j ] = M [ r ] [ y ];
M [ r ] [ y ] = temp;
}
}
for( r = 0; r  < n ; r++ ){
gotoxy(18, r + 8);
for( y = 0; y  < m; y++ ){
printf(" %3d ",  M [ r  ] [ y ] );
}
}
textcolor(LIGHTBLUE);gotoxy(18,21);
printf("Foram gerados ");
textcolor(LIGHTRED);printf("%d", a);
textcolor(LIGHTBLUE);printf(" elementos na matriz sem repetições");
Sleep(1800);textcolor(LIGHTRED);
gotoxy(37,23);printf("MUITO OBRIGADO");
getche();exit(0);
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.