Jump to content

2 problemas...


Jmc2020

Recommended Posts

Boas pessoal, espero que estejam bem!

Problema, preciso de programar em C um programa que tenha o seguinte output:

https://prnt.sc/vme70d

O problema é que quando peço ao utilizador para inserir o numero de ramos o programa não para de adicionar asteriscos... Este é o meu código:
 

#include  <stdio.h>

int main() {

    int linha;
    int ramos;
    int espacos;
    int asteriscos;
    int i;

    printf("Introduza um numero para os ramos: ");
    scanf("%d", &ramos);

    for(linha=0;linha<ramos;linha++){

        for(i=0; i<espacos; i++){
            printf(" ");
        }

        for(i=0; i<asteriscos; i++){
            printf("*");
        }

        for(i=0;i<espacos;i++){
            printf(" ");
        }


        printf("\n");
    }


    return 1;
}

Poderiam ajudar me a entender o que estou a fazer mal, tendo em conta que não podemos usar arrays?

O outro problema é o seguinte: Tenho de imprimir a tabela ASCII da seguinte forma:

https://prnt.sc/vmeans

O problema é que no 8 desconfigura a "formatação"... Fica com este output:

https://prnt.sc/vmecv1

Este é o código que tenho:

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

void main() {

   int i;

   printf("\t|CHR\tDEC\tHEX|\t|CHR\tDEC\tHEX|\t|CHR\tDEC\tHEX|\t|CHR\tDEC\tHEX|\n");
   for(i=0; i<=255; i++){

        printf("\t|%c - %03d - 0x%02xh|\t |%c - %03d - 0x%02xh|\t|%c - %03d - 0x%02xh|\t|%c - %03d - 0x%02xh|\n", i, i, i, i, i, i, i, i, i, i, i, i);

   }


   return 0;
}

Se me puderem ajudar agradecia imenso

 

Cumprimentos, Jmc2020

Link to comment
Share on other sites

No teu primeiro exemplo que valor tem a variavel asteriscos e espacos?

 

Pela logica tens de inicializar as variaveis 

int espacos=2;
    int asteriscos=1;

 

e neste caso os asteriscos dependem das linhas, por isso deve ser algo assim , o for dos asteriscos 

for(i=0; i<asteriscos+linha; i++){
            printf("*");
        }

Edited by jmta_92
Link to comment
Share on other sites

Boas,

O primeiro não percebi muito bem, pelo que se calhar pedia que esclarecesses (não percebi bem o objetivo).

O segundo é tricky em duas situações:

1. As colunas não são todas iguais, umas vão de 0-63, outras de 64-127, etc... Tens que adicionar (0,) 64, 128 ou 192 respetivamente;

2. Alguns caracteres são manhosos para a formatação, isto é não ocupam propriamente 1 espaço. É o caso o 8 (backspace) que está a meter para trás o cursor, o 9 (horizontal tab) que mexe o cursor para a frente (até) 8 espaços e o 10 (line feed, ou newline) que mete o cursor no início da linha seguinte. Tens que tratar estes casos e imprimir apenas um espaço (' ')

 

Boa sorte com isso

Link to comment
Share on other sites

19 horas atrás, jmta_92 disse:

No teu primeiro exemplo que valor tem a variavel asteriscos e espacos?

 

Pela logica tens de inicializar as variaveis 

int espacos=2;
    int asteriscos=1;

 

e neste caso os asteriscos dependem das linhas, por isso deve ser algo assim , o for dos asteriscos 

for(i=0; i<asteriscos+linha; i++){
            printf("*");
        }

Obrigado pela sugestão, mas acabei por fazer de outra forma que também resultou...

Retirei as variáveis espacos e asteriscos, e deixei a outras 3... desta forma, retirei os dois for respetivos a essas variaveis que removi. Até notei que estava a imprimir 1 minha linha a menos do que o utilizador pedia, porque tinha linha < ramos, foi só trocar por <= e já funcionou.

De qualquer das maneiras obrigado pela ajuda.

Cumprimentos

Link to comment
Share on other sites

17 horas atrás, maluco-123 disse:

Boas,

O primeiro não percebi muito bem, pelo que se calhar pedia que esclarecesses (não percebi bem o objetivo).

O segundo é tricky em duas situações:

1. As colunas não são todas iguais, umas vão de 0-63, outras de 64-127, etc... Tens que adicionar (0,) 64, 128 ou 192 respetivamente;

2. Alguns caracteres são manhosos para a formatação, isto é não ocupam propriamente 1 espaço. É o caso o 8 (backspace) que está a meter para trás o cursor, o 9 (horizontal tab) que mexe o cursor para a frente (até) 8 espaços e o 10 (line feed, ou newline) que mete o cursor no início da linha seguinte. Tens que tratar estes casos e imprimir apenas um espaço (' ')

 

Boa sorte com isso

Fiz como sugeriste e ajudou, obrigado pela ajuda :)

Cumprimentos

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.