#================================================================ # Descrição: Mostra o fatorial de um dado número recursivamente #================================================================ # Função recursiva do fatorial def fatorial(n) if(n > 1) return n * fatorial(n-1) else return 1 end end # Lê um valor e converte em um número inteiro puts "Digite um numero: " n = gets.to_i() # Calcula o fatorial fat = fatorial(n) #Converte os números em texto e imprime o fatorial do número puts "Fatorial de " + n.to_s + ": " + fat.to_s
Fatorial sem Recursividade – Ruby
#================================================================ # Descrição: Mostra o fatorial de um dado número sem # recursividade #================================================================ # Lê um valor e converte em um número inteiro puts "Digite um numero: " n = gets.to_i() # Calcula o fatorial fatorial = 1 for i in 1..n fatorial = fatorial * i end #Converte os números em texto e imprime o fatorial do número puts "Fatorial de " + n.to_s + ": " + fatorial.to_s
Fatorial Sem Recursividade – C
//================================================================ // Descrição: Mostra o fatorial de um dado número sem // recursividade //================================================================ // Libs #include <stdio.h> #include <stdlib.h> // Função main // Main Function int main(int argc, char** argv) { int n, fatorial, i; printf("Digite o numero: "); scanf("%d", &n); // Calcula o fatorial fatorial = 1; for(i = n; i > 0; i--) { fatorial *= i; } printf("Fatorial de %d: %dn", n, fatorial); system("pause"); return 0; }
Fatorial Com Recursividade – C
//================================================================ // Descrição: Mostra o fatorial de um dado número com // recursividade //================================================================ // Protótipo da função fatorial int fatorial(int n); // Libs #include #include // Função main // Main Function int main(int argc, char** argv) { int n, i; printf("Digite o numero: "); scanf("%d", &n); printf("Fatorial de %d: %dn", n, fatorial(n)); system("pause"); return 0; } // Função do fatorial int fatorial(int n) { if(n == 0) { return 1; } else { return n * fatorial(n-1); } }
Conversão Decimal para Binário – C
Você precisa converter um número decimal para binário em C e agora?
Por meio desse programa você vai poder entender como e porque é simples realizar essa tarefa de uma forma elegante e rápida.
A forma aqui apresentada tem um olhar diferente se comparada a forma manual de conversão em que realizamos sucessivas divisões do número por 2 e agrupamos os restos para gerar o resultado.
Tomamos como base um inteiro de 32 bits para realizar nossa conversão. O que faremos é verificar bit a bit em cada uma das 32 posições o seu valor e o imprimir na tela (1 ou 0), até formar o número desejado.
Esse algoritmo segue os seguintes passos para alcançar nosso objetivo:
- Lê o número
- Para cada bit, realiza uma operação de deslocamento até à última casa da esquerda para direita
- Realiza uma operação lógica & com o número 1, tendo como resultado 0 ou 1, que será impresso na tela até formar o nosso número desejado.
//================================================================ // Descrição: Lê um número decimal e imprime a sua forma binária //================================================================ // Libs #include <stdio.h> #include <stdlib.h> // Função Main int main() { int n; // Número de entrada int r; // Resultado do deslocamento int i; // Contador // Lê o número printf("Digite o numero: "); scanf("%d", &n); // Utiliza um número de 32 bits como base para a conversão. for(i = 31; i >= 0; i--) { // Executa a operação shift right até a // última posição da direita para cada bit. r = n >> i; // Por meio do "e" lógico ele compara se o valor // na posição mais à direita é 1 ou 0 // e imprime na tela até reproduzir o número binário. if(r & 1) { printf("1"); } else { printf("0"); } } printf("\n"); system("pause"); }
Continua com dúvidas? Tem uma sugestão diferente da abordada? Deixe um comentário, vamos discutir e construir conhecimento.
Hello World – Ruby
O clássico Hello World em Ruby.
# O clássico Hello World em Ruby puts 'Hello World!'
Enésimo termo da sequência Fibonacci – C
//================================================================ // Descrição: O programa calcula e imprime o enésimo termo // da sequência Fibonacci, de forma recursiva //================================================================ // Libs #include <stdio.h> #include <stdlib.h> // Protótipo da função fibonacci int fibonacci(int n); // Função main // Main Function int main(int argc, char** argv) { int n; // Lê a posição do termo printf("Digite a posicao: "); scanf("%d", &n); // Imprime o termo printf("O termo: %dn", fibonacci(n)); system("pause"); return 0; } // Função fibonacci int fibonacci(int n) { if(n == 1) { return 0; } else if(n == 2) { return 1; } else { return fibonacci(n-1) + fibonacci(n-2); } }
Fórmula de Bháskara – C
//================================================================ // Descricao: O programa calcula e mostra o resultado de uma // equacao do segundo grau. //================================================================ // Libs #include <stdio.h> #include <stdlib.h> #include <math.h> // Funcaoo main // Main Function int main(int argc, char** argv) { float a, b, c, x1, x2, delta; // Le os termos da equacao printf("Digite o valor do termo a: "); scanf("%f", &a); printf("Digite o valor do termo b: "); scanf("%f", &b); printf("Digite o valor do termo c: "); scanf("%f", &c); // Calcula o valor de x1 delta = b*b - 4*a*c; x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); // Imprime os resultados if(delta < 0) { printf("A equacao nao possui raizes reais.n"); } else { printf("O valor de x1: %.2fn", x1); printf("O valor de x2: %.2fn", x2); } system("pause"); return 0; }
Pixels Aleatórios em SDL – C
/* * Desc: O programa desenha pixels em posições e cores aleatórias * usando a função putpixel, que pode ser encontrada na * documentação da SDL, na parte de exemplos. */ #include <stdlib.h> #include <time.h> #include <SDL/SDL.h> // Set the pixel void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel); // Variavel que representa a tela SDL_Surface *screen = NULL; // Ponto inicial da aplicação int main(int argc, char *argv[]) { // Coordenadas do pixel int x, y; // Cor do pixel Uint32 pixel; // Flag de encerramento int bExit = 0; // Inicia o gerador de números aleatórios srand(time(NULL)); // Inicializa a SDL com o Video e Audio if((SDL_Init(SDL_INIT_VIDEO) == -1)) return 1; // Define a resolução 640x480 e 16 bits com "Double Buffer" screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF); if (screen == NULL) return 2; // Muda o titulo da janela SDL_WM_SetCaption("Pixels Aleatórios - SDL", NULL); // Pinta a tela de azul SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 255)); // Laço principal do programa while (!bExit) { SDL_Event evento; // Verifica os eventos pendentes while (SDL_PollEvent(&evento)) { switch (evento.type) { case SDL_KEYDOWN: // Verifica se foi pressionado uma tecla switch(evento.key.keysym.sym) { case SDLK_ESCAPE: // Se a tecla foi ESC então sai bExit = 1; break; } break; case SDL_QUIT: // Se foi selecionador para fechar a janela bExit = 1; break; } } // Gera posições e uma cor aleatória x = rand() % 640; y = rand() % 480; pixel = SDL_MapRGB(screen->format, rand() % 256, rand() % 256, rand() % 256); // Pinta o pixel na tela putpixel(screen, x, y, pixel); // Executa o Flip (vira o "Double Buffer") SDL_Flip(screen); } // Libera a memória alocada para a tela SDL_FreeSurface(screen); // Finaliza a biblioteca SDL e a aplicação SDL_Quit(); return 0; } /* * Set the pixel at (x, y) to the given value * NOTE: The surface must be locked before calling this! */ void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel) { int bpp = surface->format->BytesPerPixel; /* Here p is the address to the pixel we want to set */ Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp; switch(bpp) { case 1: *p = pixel; break; case 2: *(Uint16 *)p = pixel; break; case 3: if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { p[0] = (pixel >> 16) & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = pixel & 0xff; } else { p[0] = pixel & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = (pixel >> 16) & 0xff; } break; case 4: *(Uint32 *)p = pixel; break; } }
Substring – C
//================================================================ // Nome Do Arquivo: string_substring.c // File Name: string_substring.c // // Descrição: O programa retorna uma string a partir de um dado // intervalo: [start, end[ //================================================================ // Libs #include <stdio.h> #include <stdlib.h> #include <string.h> // Protótipo da função char* string_substring(char str[], int start, int end); // Função main // Main Function int main(int argc, char** argv) { char str[100], *sub; int start, end; // Lê a string printf("Digite a string: "); gets(str); printf("Digite a posição inicial: "); scanf("%d", &start); printf("Digite a posição final: "); scanf("%d", &end); // Retorna a substring sub = string_substring(str, start, end); // Imprime a substring printf("A substring: %sn", sub); system("pause"); return 0; } char* string_substring(char str[], int start, int end) { int i, j; char *sub; // Verifica valores incompatíveis e // retorna NULL if(start >= end || end > strlen(str)) { return NULL; } // Aloca memória para a substring sub = (char *) malloc(sizeof(char) * (end - start + 1)); // Copia a substring para a variável for(i = start, j = 0; i < end; i++, j++) { sub[j] = str[i]; } // Terminador de string sub[j] = '\0'; return sub; }