• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Arthur

ajuda com exercicio

13 mensagens neste tópico

boas, preciso escrever um algoritmo cuja saida seja por ex:

se a=1, printf( *),  //* é um caracter.

se a=2, printf( _*_)

            printf( ***)

            printf( _*_)

se a=3,printf(___*__)

            printf( _***_)

            printf( *****)

            printf(_***_)

            printf( _*_)

e assim sucessivamente, dependendo do valor numerico introduzido.

obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, antes de mais bem-vindo.

Sem te querer assustar, pois aparentemente ésnovo por aqui, aqui vai o que te aconselho a fazer:

Ler as regras, podes usar o link na minha ssinatura. Acho que conseguiste desobedecer a ums 3 ou 4 num só tópico.

Depois acho que devias dizer qual é a tua duvida pois não o fizeste.

Posto isso, volta e edita este tópico que nós estamos cá para ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, fiz a apresentação. a verdade é que já frequento o forum há algum tempo, só que com outro user que não me recordo, daí ter postado de imediato.

assim a minha duvida é de acordo com o nº introduzido no teclado , o programa devolve a impressao daqueles caracters'*'.

não sei como controlar a inserção de espaços antes e depois do caracter'*' no respectivo printf.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só um exemplo:

if(a==1){
    printf("*");
}
else{
    if(a==2){
        printf("**");
    }
    //... etc etc
}

Ou então podes fazer pelo switch case:

switch(a)
{
case 1:
    printf("*");
    break;
case 2:
    printf("**");
    break;
//etc etc
default:
    break;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

if(a==1){
    printf("*");
}
else{
    if(a==2){
        printf("**");
    }
    //... etc etc
}

Quando os casos são mais que 5, isso fica uma salganhada. Mais vale:

if(a==1){
    printf("*");
}else if(a==2){
    printf("**");
}else if(a==3){
    printf("***");
}else{
    printf("none of them");
}

Anyway, respondendo ao tópico inicial, era muito melhor se usasses um loop for em vez de um if para cada caso. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok.obrigado. escrevi um switch case

vou pensar nisto e tentar implementar um ciclo que controle a saida escrita.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que não queres switch/case.... A não ser que sejam só umas 5 opções, e no máximo....

A forma mais fácil do ponto de vista de processamento, é sacrificares um pouco de memória e meteres todas as opções num array, assumindo que queres poucas, e então fica algo tipo

void imprimeCoisas(unsigned int i)
{
    char *x[] = { "*",   "_*_\n***\n_*_",   "__*__\n_***_\n*****\n_***_\n__*__"   /* etc */};

    if(xDentroDosLimites())
    {
        printf("%s", x[i]);
    }
}

Por outro lado podes sacrificar o tempo de escrita de código e pensar noutro modo automatizado de escrever com essa formatação:

#include <stdio.h>
#include <math.h>

void imprimeCoisas(int x)
{
    int i, k;

    for(i = 0; i < (x * 2) - 1; i++, printf("\n"))
    {
        for(k = 0; k < abs((x - 1) - i); k++)
        {
            printf("_");
        }
        
        for(k = 0; k < ((2 * x) - 1) - 2 * abs((x - 1) - i); k++)
        {
            printf("*");
        }

        for(k = 0; k < abs((x - 1) - i); k++)
        {
            printf("_");
        }
    }
}

Este segundo código é muito rebuscado, mas foi a maneira que encontrei de calcular tudo num ciclo. Podia ficar mais simples, com mais uma ou duas variáveis para armazenar valores, mas pronto, percebeste a ideia, desenvolve a matemática, porque o problema segue um padrão muito específico...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exercicio ainda nao resolvipensando no triangulo superior..a razaõ matematica do numero de espaços é '_'=(2*linha)-1 ; e a razao dos asteriscos é '*'=linha-1

preciso de controlar com ciclo a impressão destes dois caracteres para obter o efeito arvore natal.

tenho um esboço de codigo, mas nao faz o que pretendo:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int i,j=0;
  int linha=0;
  int ast='*';//variavel com asteriscos
  int esp='_';//variavel com espaços
  
    printf("\t\tArvore de Natal\n"); 
    printf("Introduza um numero\n\n");
    
  scanf("&d",&linha);//linha=var com o numero de linhas
       
    
    for(i=1;i<linha;i++){//ciclo for para percorrer o numero linhas
                         printf("%d",esp=linha-1);
                          }
                         for(j=1;j<=linha;j++){//ciclo for para percorrer o numero linhas
                                               
                                              printf("%d",ast=(2*linha)-1); 
                                               }
                               
         system("PAUSE");	
return 0;
    }

obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Afinal qual é a formatação que queres na saida?

Já viste o meu código?

"printf("%d",ast=(2*linha)-1)"  é suposto fazer o quê, no teu entendimento???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se eu percebi bem o problema, o seguinte ciclo deve resolver metade do problema, e a outra metade é fácil de deduzir...

for(i=0;i<n;i++)
{
  for(j=0;j<n-i-1;j++) putchar('_');
  for(;j<n;j++) putchar('*');
  for(j--;j>n-i-1;j--) putchar('*');
  for(;j>0;j--) putchar('_');
  puts("");
}

   

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não sei se fui só eu que vi e fiz bem ou se vocês não viram e fizeram bem, mas ele em cima tem "losangos" e depois começaram todos a desenhar pirâmides....................

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não sei se fui só eu que vi e fiz bem ou se vocês não viram e fizeram bem, mas ele em cima tem "losangos" e depois começaram todos a desenhar pirâmides....................

No meu caso, referi que só tinha resolvido metade do problema (o objectivo era não dar o trabalho todo feito).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, reparei, mas depois o próprio Arthur falou em árvores de natal, que são primamidais..........

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora