Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado
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
Postado

@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
Postado
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
Postado

@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;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...