Olá pessoal…
Hoje vou mostrar como fazer um Letreiro simples em Linguagem C, com uma String de 10 posições e programado para dar 3 voltas.
Primeiro para se fazer um letreiro, deve-se pensar na lógica de como irá funcionar o texto a ser impresso, para isso, no programa abaixo, além da variável que irá guardar o texto (palavra), também criei uma variável de cópia do conteúdo (copia), e através da definição do tamanho das strings (tamanho), é percorrido as voltas (volta_atual e voltas) e copiando o conteúdo da palavra para a copia, quando acaba, então é feito a cópia do começo da palavra para o fim da copia, posição por posição, até chegar no início da palavra. Por exemplo:
palavra: |daniel| Primeira parte do programa (cópia normal): copia: |aniel | copia: |niel | copia: |iel | copia: |el | copia: |l | copia: | | Segunda parte do programa (do começo da palavra para o fim da cópia): copia: | d| copia: | da| copia: | dan| copia: | dani| copia: | danie| copia: |daniel|
Conforme o exemplo acima, com isso a volta fica alterando entre as duas partes do programa, criando o letreiro.
Abaixo um print do programa em execução.
//Bibliotecas #include <stdio.h> #include <string.h> //Se o sistema for Windows, a limpeza utiliza a funcao cls #ifdef WIN32 #define LIMPA_TELA system("cls"); //Se for Linux, utiliza a funcao clear par alimpeza da tela #else #define LIMPA_TELA system("/usr/bin/clear"); #endif //Espera 1 segundo #define ESPERA sleep(1); main(){ int tamanho = 9; int voltas = 2; int volta_atual = 0; int atual = 0; int auxiliar = 0; int pos_copia = 0; int posicao = 0; int quantidade = 0; int tipo = 0; char palavra[tamanho+2]; char copia[tamanho+2]; //Zera a string for (atual=0;atual<=tamanho;atual++){ palavra[atual] = ' '; } //Pega a string printf("Insira a string (maximo de %d caracteres): \n> ", tamanho+1); gets(palavra); //Pegando o tipo de impressao while (tipo != 1 && tipo != 2){ printf("Deseja mostrar somente o letreiro (1=Sim; 2=Nao)?"); scanf("%d", &tipo); } //Zera a string onde tiver o \0, deixando somente na última posicao for (atual=0;atual<=tamanho;atual++){ if (palavra[atual] == '\0') palavra[atual] = ' '; } palavra[tamanho+1] = '|'; palavra[tamanho+2] = '\0'; //Limpando a tela e imprimindo a primeira vez LIMPA_TELA; if (tipo == 1) printf("%s", palavra); else printf("Original: ...%s...\nLetreiro: ...%s...\nVolta: %d de %d", palavra, palavra, volta_atual+1, voltas+1); ESPERA; //Zera a copia for (atual=0;atual<=tamanho+1;atual++){ copia[atual] = ' '; } palavra[tamanho+2] = '\0'; //Percorre as voltas for (volta_atual=0; volta_atual<=voltas; volta_atual++){ //Impressao normal for (posicao=0;posicao<tamanho+1;posicao++){ auxiliar++; pos_copia = 0; //Percorre a string for (atual=auxiliar;atual<=tamanho+1;atual++){ copia[pos_copia] = palavra[atual]; pos_copia++; } //Seta o restante da copia como espaco em branco for (pos_copia=pos_copia;pos_copia<=tamanho+1;pos_copia++){ copia[pos_copia] = ' '; } //Imprimindo Mensagem LIMPA_TELA; if (tipo == 1) printf("%s", copia); else printf("Original: ...%s...\nLetreiro: ...%s...\nVolta: %d de %d", palavra, copia, volta_atual+1, voltas+1); ESPERA; //Se ja tiver atingido o maximo, zera o auxiliar if (auxiliar == tamanho+1) auxiliar = 0; } quantidade = 0; //Agora comeco do fim for (atual=0;atual<=tamanho+1;atual++){ //Armazena o restante da copia excluindo a primeira posicao for (pos_copia=0;pos_copia<=tamanho;pos_copia++){ copia[pos_copia] = copia[pos_copia+1]; } //Define agora o caracter que sera copiado copia[tamanho+1] = palavra[quantidade]; //Mostrando a mensagem LIMPA_TELA; if (tipo == 1) printf("%s", copia); else printf("Original: ...%s...\nLetreiro: ...%s...\nVolta: %d de %d", palavra, copia, volta_atual+1, voltas+1); ESPERA; quantidade++; } //Zera a copia for (atual=0;atual<=tamanho+1;atual++){ copia[atual] = ' '; } palavra[tamanho+2] = '\0'; } printf("\n\nPrograma encerrado...\n\n"); }
Bom pessoal, por hoje é só.
Abraços e Até a próxima.
Dan, mais uma vez parabenizo-te pela excelência do material postado. Se possível gostaria da sua autorização para reblogá-lo. Força e Honra!
Bom dia Fernando, tudo bem?
Primeiramente muito obrigado.
Claro que pode, para mim será uma honra.
Abraços.