terça-feira, 19 de fevereiro de 2013

Programa Fatorial de uma Sequência


Declarei uma string do tipo char para ponteiro de nome *numStr, e inicializei com -1.
dentro do if a variável num se iguala  com *numStr, que pela função atoi este -1 é convertido em inteiro e finaliza a sequência graças ao comando break, que completa a operação.
Já no próximo bloco bem otimizado por um laço for, declarei a variável aux que auxilia a variável num, onde a finalidade é a separação dos dígitos digitado na sequência.
Então o vetor vet [i], entra em ação recebendo da variável aux, os dígitos já separados e entrega a printf que imprime esta sequência separada.
Então, os números da sequência são outra vez imprimido, agora pelo vetor vet [i]; Não há nenhuma necessidade de imprimir isto,
más fiz só para provar que os valores já estão armazenados no vetor. No bloco seguinte, a sequência digitada
entra no processo de ordenação, onde usei o método da bolha, que é fácil de imprementar, e a sequência é imprimida em ordem.
Também não havia necessidade de fazer isto, más fiz só para dar um resultado agradável na saída. O último bloco
que é a razão deste código finaliza mostrando o fatorial de cada dígito da sequência.

Eis o código abaixo:



#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
//#define tam 10
int tam;
int main(){
int vet [ 10 ];
char *numStr = "-1";
int i, num, aux, ord;
int CONTADOR = 1; // dia 21/02/2013
int FATORIAL = 1; // Funcionando perfeitamente
printf("Informe o tamanho do Vetor: "); // 20/02/2013
scanf("%d", &tam);fflush(stdin);
printf("\nDigite um numero inteiro de %d algarismo: ", tam); // Para finalizar digite -1
for (i = 0; i < tam; i++) {
scanf("%d", &num );fflush (stdin);
if ( num ==  atoi (numStr) ) { break; }
printf("\nNumeros Digitados: ");
printf("\n\n");
for (i = 0; i < tam; i++){
aux = num % 10;
num = num / 10;
vet [i] = aux;
vet [i] = aux;
printf(" %d ", vet [i]);
}
getche();
printf("\n\nNumeros Armazenadosdos Num Vetor");
printf("\n\n");
for(i = 0; i < tam; i++){
printf("  %d",vet [i] );
}
}
getche( );
printf("\n\nNumeros Ordenados: ");
ord = 0;
while ( ord == 0 ){
ord = 1;
for ( i = 0; i < tam; i++ ){
if ( vet [i]  >
vet [ ( i + 1 ) ] ){
aux = vet [i];
vet [i] = vet [ (i + 1) ];

vet [(i + 1)] = aux;
ord = 0;
}
}
}
for(i = 0; i < tam; i++)
printf(" %d ",vet [i] );
getche();
for ( i = 1; i  < tam; i++ ){
while (CONTADOR <= vet [i] ){
FATORIAL *= CONTADOR;
CONTADOR += 1;
}
printf("\n\n fatorial de %d equivale a %d", vet [i], FATORIAL);
}
getche();
}




domingo, 17 de fevereiro de 2013

Programa Múltiplos de um Número II



Qualquer número multiplicado pela sequência dos números naturais, obtem - se os seus Múltiplos,
Veja abaixo a sequência dos Números Múltiplos de 2 até 5:

2 x 0 = 0
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10

E assim vai, até onde você quizer.

Portanto 2, 4, 6, 8 e 10 são Múltiplos de { 2 }, Partindo desta lógica ficou fácil criar este programa em linguagem C.

Breve resumo do funcionamento:

Na primeira tela O Programa começa pedindo um intervalo ao usuário para estabelecer os limites mínimos e máximos dos Múltiplos.
Na segunda tela ele pede que se digite o número para verificação dos Múltiplos
dentro dos limites estabelecidos previamente.
Coloquei limites no programa para que não se use números muito longo, e ficou limitado até 10,
se for digitado um número acima disto um beep é acionado junto com uma mensagem para o usuário
advertindo para os limites do programa e volta para o início da função main fazendo o bom uso da recursividade ,
e isto dentro de uma chave while bem imprementada.
Más se for digitado um número dentro dos parâmetros estabelecidos o programa segue o seu curso entrando num bloco
comandado por um for que recebe auxílio de um if e uma variável que termina todo
o processo, recebendo a carga nas costas de todos os Múltiplos do número solicitado.



Eis as saídas deste Programa no cmd:



Veja o código abaixo:

#include <stdio.h>
#include <conio2.h>
int main ( ) {
     int a, b, i = 0, j = 0, num, result = 0;
     system ( "title PROGRAMA MULTIPLOS DE UM NUMERO II" );
     while ( 1 ) {
         system ( "cls" );
         textcolor ( LIGHTRED );
         gotoxy ( 27, 3 );
         printf ( "PROGRAMA MULTIPLOS DE UM NUMERO II" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 25, 5 );
         printf ( "Digite um intervalo" );
         textcolor ( YELLOW );
         gotoxy ( 25, 7 );
         printf ( "De: " );
         scanf ( "%d", &a );
         fflush ( stdin );
         textcolor ( YELLOW );
         gotoxy ( 25, 9 );
         printf ( "Ate: " );
         scanf ( "%d", &b );
         fflush ( stdin );
         if ( num == -1 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 35, 7 );
              printf ( "O ROCCO AGRADECE" );
              Sleep ( 1800 );
              exit ( 0 );
         }
         system ( "cls" );
         textcolor ( LIGHTRED );
         gotoxy ( 27, 3 );
         printf ( "PROGRAMA MULTIPLOS DE UM NUMERO II" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 18, 5 );
         printf ( "digite um numero entre 1 e 10: [ Zero para Sair ] " );
         textcolor ( LIGHTRED );
         scanf ( "%d", &num );
         fflush ( stdin );
         while ( ( num < 0 ) || ( num >= 10 ) ) {
              textcolor ( YELLOW );
              gotoxy ( 25, 7 );
              printf ( "\aNumero Acima de 0 e menor que 10\n" );
              Sleep ( 1800 );
              main ( );
         }
         if ( num == 0 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 35, 7 );
              printf ( "O ROCCO AGRADECE" );
              Sleep ( 1800 );
              exit ( 0 );
         }
         result = b - a;
         textcolor ( LIGHTGREEN );
         gotoxy ( 20, 7 );
         printf ( "Entre %d e %d  Temos %d Multiplos de %d ", a, b, result,
                   num );
         textcolor ( LIGHTGRAY );
         gotoxy ( 1, 9 );
         for ( i = a; i < b; i++ ) {
              if ( num > 0 ) {
                   j = num * i;
                   //result = b - a;
                   printf ( " %d ", j );
                   Sleep ( 50 );
              }
         }
         getche ( );
         for ( num = 0;; num++ ) {
              textcolor ( LIGHTCYAN );
              gotoxy ( 20, 17 );
              printf ( "Digite: [ 1 para Repetir ou Negativo para sair ]\n" );
              gotoxy ( 39, 21 );
              scanf ( "%d", &num );
              fflush ( stdin );
              if ( num < 0 ) {
                   textcolor ( LIGHTRED );
                   gotoxy ( 35, 21 );
                   printf ( "O ROCCO AGRADECE" );
                   Sleep ( 1800 );
                   exit ( 0 );
              }
              if ( num == 1 ) {
                   main ( );
              } else {
                   textcolor ( LIGHTBLUE );
                   gotoxy ( 36, 21 );
                   printf ( "\aOPCAO ERRADA" );
                   Sleep ( 1800 );
                   textcolor ( LIGHTBLUE );
                   gotoxy ( 36, 21 );
                   printf ( "               " );
              }
         }
     }
}