Ir ao conteúdo
  • Cadastre-se
Luan Bresolla

C Letreiro dinâmico programa em c

Recommended Posts

Fala galera, estou fazendo um trabalho e estou com dificuldade, tenho que fazer um programa que leia uma palavra e mostre ela como se estivesse em um letreiro dinâmico.Ex: lua, -> alu -> ual -> lua. Primeiramente tentei fazer sem palavras, somente com números pra facilitar e depois iria mudar, mas não estou conseguindo nem com os números. Segue o código do programa utilizando números. Ele da um bug e não para de aparecer 0 na tela kk

 

int main(){    
    int num[5],i;    
    for(i=0;i<=5;i++){
        printf("Digite um numero: ");
        scanf("%d",&num);
    }    
    for(i=5;i<=5;i--){
        printf("%d ",num);
    }    

}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luan Bresolla Lembre-se, INT não é infinito, mesmo fazendo fazendo o sentido reverso no for, o int vai bater no numero mínimo e vai parar a interação. Isso também não é dinâmico, é apenas um "animação visual".

Usando um vetor (array) estático, o problema é tamanho do letreiro, aqui fiz em 3 caractere por vez:

...//seu codigo
while ( variavel_char ){//enquanto existir
	aux = variavel_char[i];
	aux2 = variavel_char[i++];
	variavel_char[i] = aux2;
	variavel_char[i++]= variavel_char[2];
	variavel_char[2] = aux;
}
...//resto

O certo era criar uma fila dinâmica onde se altera dinamicamente o começo e o final, fazendo assim o "texto andar", e exibir as atualizações na tela.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 minutos atrás, zopek disse:

@Luan Bresolla Lembre-se, INT não é infinito, mesmo fazendo fazendo o sentido reverso no for, o int vai bater no numero mínimo e vai parar a interação. Isso também não é dinâmico, é apenas um "animação visual".

Usando um vetor (array) estático, o problema é tamanho do letreiro, aqui fiz em 3 caractere por vez:


...//seu codigo
while ( variavel_char ){//enquanto existir
	aux = variavel_char[i];
	aux2 = variavel_char[i++];
	variavel_char[i] = variavel_char[aux2];
	variavel_char[i++]= variavel_char[2];
	variavel_char[2] = aux;
}
...//resto

O certo era criar uma fila dinâmica onde se altera dinamicamente o começo e o final, fazendo assim o "texto andar", e exibir as atualizações na tela.

Não consegui entender seu código, a logica no caso.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luan Bresolla Explicando:

  • Vetor char de 3 caractere;
  • 2 variáveis auxiliares.

Os auxiliares recebem os 2 primeiros;

O ultimo char passa para o segundo;

O primeiro recebe o segundo auxiliar;

O ultimo recebe o primeiro auxiliar;


Exemplo: SOL

Exibiu: SOL

1º loop:

  1. aux = S
  2. aux2 = O
  3. char[0] = L
  4. char[1]= AUX2
  5. char[3]= AUX
  6. Exibiu:LSO

2º loop:

  1. aux = L
  2. aux2 = S
  3. char[0] = O
  4. char[1]= AUX2
  5. char[3]= AUX
  6. Exibiu:OLS

2º loop:

  1. aux = O
  2. aux2 = L
  3. char[0] = S
  4. char[1]= AUX2
  5. char[3]= AUX
  6. Exibiu:SOL

E vai indo...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, zopek disse:

@Luan Bresolla Explicando:

  • Vetor char de 3 caractere;
  • 2 variáveis auxiliares.

Os auxiliares recebem os 2 primeiros;

O ultimo char passa para o segundo;

O primeiro recebe o segundo auxiliar;

O ultimo recebe o primeiro auxiliar;


Exemplo: SOL

Exibiu: SOL

1º loop:

  1. aux = S
  2. aux2 = O
  3. char[0] = L
  4. char[1]= AUX2
  5. char[3]= AUX
  6. Exibiu:LSO

2º loop:

  1. aux = L
  2. aux2 = S
  3. char[0] = O
  4. char[1]= AUX2
  5. char[3]= AUX
  6. Exibiu:OLS

2º loop:

  1. aux = O
  2. aux2 = L
  3. char[0] = S
  4. char[1]= AUX2
  5. char[3]= AUX
  6. Exibiu:SOL

E vai indo...

valeu muito obrigado <3

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luan Bresolla     será mais fácil se você usar um vetor de caracteres , assim você pega a frase e coloca nesse vetor , e imprime todos os caracteres do vetor , um por um , começando da posição zero , e então você precisa mover as letras lá no vetor de caracteres , se for uma palavra ou frase com letras ou números , pegando o primeiro caractere do vetor e em seguida puxa todos os outros caractere uma posição para a esquerda  e coloca , aquele primeiro caractere que você pegou , lá na última posição do vetor e repete essa parte de imprimir os caracteres .  então seu código com algumas modificações ficaria assim  :

#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;

static int __BACKGROUND = BLACK;
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int color){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = color;/*pode ser também pelo nome da cor */
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    color + (__BACKGROUND << 4));
}
void gotoxy(int x,int y){
    COORD c;
    c.X = x;
    c.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
int main(){
    char palavra[100],aux;
    int i,key=0,tam,cor;
    srand(time(NULL));
    printf("Digite Uma Frase De Ate 78 Letra : ");
    fflush(stdin);
    gets(palavra);
    tam = strlen(palavra);
    if(tam > 78 )  tam=78;
    palavra[tam+1] =  '0';
    palavra[tam  ] =  ' ';
    tam++;
    system("cls");
    printf("\n\n\n\n ");
    for(i=0;i<tam;i++)
        printf("-");
    printf("\n|\n ");
    for(i=0;i<tam;i++)
        printf("-");
    gotoxy(15,12);
    printf("Tecle ESC Para Sair !");
    cor=rand()%14+1;
    textcolor(cor);
    cor=10;
    do{
        textcolor(cor);
        gotoxy(1,5);
        aux=palavra[0];
        for(i=0;i<tam;i++){
            printf("%c",palavra[i]);/*imprime letra por letra*/
        }
        textcolor(7);
        printf("|");
        for(i=0;i<tam;i++)
            palavra[i]=palavra[i+1];/*puxa todas as letras uma posição para a es querda */
        palavra[tam-1]=aux;         /* coloca a primeira letra nessa ultima posição */
        Sleep(150);                 /* velocidae que as letras se movem */
        if(kbhit())key=getch();     /* se pressionou alguma tecla */
    }while(key != 27);              /* se tecla pressionada não for ESC repete*/
    gotoxy(0,18);
    printf("\n\n");
    textcolor(cor);
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×