domingo, 3 de março de 2013

Números primos em Matriz Dinâmica


Números primos são os números naturais que têm apenas dois divisores diferentes: o 1 e ele mesmo.
        Exemplos:
            1) 2 tem apenas os divisores 1 e 2, portanto 2 é um número primo.
            2) 17 tem apenas os divisores 1 e 17, portanto 17 é um número primo.
            3) 10 tem os divisores 1, 2, 5 e 10, portanto 10 não é um número primo.

   Para saber se um número é primo, dividimos esse número por um número primo.
            =>  ou uma divisão com resto zero e neste caso o número não é primo,
            =>  ou uma divisão com quociente menor que o divisor e o resto diferente de zero. Neste caso o número é primo.

Partindo desta lógica ficou fácil imprementar este excelente código didático
indicado a iniciantes em linguagem c.

Funcionamento resumido:

Apesar de ter muito o que fazer por aqui, em programação é claro, deixei de lado
um código que já está me cansando, ás vezes dá vontade de chingar uns palavrões,
lá fora o céu está azul, dia lindo e ensolarado, e eu preso por aqui com o interesse de progredir mais ainda nos meus estudos em Linguagem C. "ironia do destino, porque que fui gostar tanto de linguagem C?"

Vendo uma idéia em outro forum, comecei a criar este código, onde declarei a matriz ** pri_mo; que é inicializada e seus termos fica entre 10 x 10, definida
pela constante tam; a contagem começa em 1, e segue contando graças a variável
cont que é incrementada até que atinja o fim definido, então vem a primeira
impressão de printf que mostra a matriz já formada e pronta para ser entregue nos blocos seguintes.
Entregue agora num bloco comandado principalmente por um loop for, a **matriz
pri_mo, é varrida começando na linha [0] e coluna [0] e finalizando
na linha [9] e coluna [9], e os valores contidos nesta matriz são testados, e divididos, um por um ( por dois ), se o resto for zero o número não é primo.
E printf faz sua segunda impressão numérica, imprimindo agora todos os números não primos contidos na matriz **pri_mo;
Más o processo continua, o programa ainda não foi finalizado, e a matriz **pri_mo; é entregue ao último bloco para verificação, e é varrido semelhantemente ao bloco anterior, só que agora os números da matriz **pri_mo;
são divididos por 1, onde só interessa divisões com resto diferente de zero,
e assim são imprimidos por printf como números primos, e o programa conclui
o seu propósito que era mostrar na matriz **pri_mo; que conta de 1 a 100,
todos os números não primos, e todos os números primos.

Eis as saídas deste programa no cmd:



Eis o código abaixo;


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define tam 10
int main(){
int i, j;
int  cont = 0;
int **pri_mo = 0;
pri_mo = (int**) malloc ( tam * sizeof ( int** ) );
system ("title NUMEROS PRIMOS EM MATRIZ DINAMICA");textbackground(WHITE);
textcolor(VERMELHOCLARO);gotoxy(28,3);printf("NUMEROS PRIMOS EM MATRIZ DINAMICA");
textcolor(ROXOCLARO);gotoxy(34,5);printf("sa_sp10@hotmail.com");
textcolor(AZULCLARO);gotoxy(30,7);printf("IMPRIMINDO A MATRIZ ORIGINAL");
printf("\n\n");textcolor(PRETO);
for ( i = 0; i < tam; i++ ) {
pri_mo [i] = ( int* ) malloc( tam * sizeof(int* ) );//numero de linhas
printf("\t\t\t");
for ( j = 0; j < tam; j++ ) {
cont++;
pri_mo [i] [j]  = cont;
printf(" %d ",pri_mo [i] [j] );
}
printf("\n");
}
printf("\t");
textcolor(VERMELHOCLARO);gotoxy(30,21);printf("PRESSIONE QUALQUER TECLA");
getche();
system ("cls");
textcolor(VERMELHOCLARO);gotoxy(28,3);printf("NUMEROS PRIMOS EM MATRIZ DINAMICA");
textcolor(AZULCLARO);gotoxy(25,5);printf("EZIBINDO NUMEROS NAO PRIMOS ENTRE 0 E 100");
textcolor(PRETO);gotoxy(2,7);
for(i = pri_mo  [0] [0] + 1; i < pri_mo  [9] [9]; i++){
int Primo = 1;
for(j = 2; j <= i / 2; j++){
if(i % j == 0){
Primo = 0;
break;
}
}
if(Primo == 0){
printf(" %d ",i);
}
}
getchar();
textcolor(AZULCLARO);gotoxy(28,12);printf("EZIBINDO NUMEROS PRIMOS ENTRE 0 E 100");
textcolor(PRETO);gotoxy(2,14);
for(i = pri_mo  [0] [0] + 1; i < pri_mo  [9] [9]; i++){
int Primo = 1;
for(j = 2; j <= i / 2; j++){
if(i % j == 0){
Primo = 0;
break;
}
}
if(Primo == 1){
printf(" %d ",i);
}
}
getche();
textcolor(VERMELHOCLARO);gotoxy(33,18);printf ("O ROCCO AGRADECE");getchar();exit(0);
}














































Nenhum comentário:

Postar um comentário

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