Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) trabalho


Headbanger_tr00

Pergunta

Alguém tem como me ajudar com um trabalho? São duas perguntas bem simples, mas eu tenho dificuldades (em C)

1)Faça dois programas que imprimam na saída padrão (tela) todas as horas existentes no dia

com precisão de segundos . Um dos programas deve usar a estrutura de controle FOR e o outro

WHILE. Cada hora deve ser impressa no formato hh:mm:ss, um por linha.

00:00:00

00:00:01

00:00:02

.

.

.

23:59:57

23:59:58

23:59:59

2)Faça dois programas que imprimam na saída padrão (tela) um retângulo sólido N x M

formado por conjuntos de letras 'o's separadas por espaços. Um dos programas deve usar a

estrutura de controle FOR e o outro WHILE. A largura N e o comprimento M devem ser lidos da

entrada padrão (tela).

Entrada:

4 10

Saída:

o o o o o o o o o o

o o o o o o o o o o

o o o o o o o o o o

o o o o o o o o o o

Agradeço à quem puder me ajudar! :blush:

Editado por quintelab
Título alterado
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

vlandeismilsoun,

Cara você ta começando agora na área de programação? É muito importante você estudar for e while, pois estes repetidores são a base de tudo o que você vai fazer na vida em programação.

O primeiro exercício você pode criar 1 variável para cada casa e colocar um while dentro do outro... A condição de parada seria o limite de cada variável, igual a primeira que vai até 2, a segunda vai até 3, depois a outra vai até 5 e por ai vai.. tipo assim

int horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade...

while( horaDezena <= 2 )
   while( horaUnidade <= 3 )
      while( minutoDezena <=5 ) //... etc... e por ai vai
No outro problema tenta fazer algo assim:
int linha, coluna;

        printf("Digite linha x coluna: ");
        scanf("%d %d", &linha, &coluna);

        int matriz[linha][coluna];

        for( int i=0; i<linha; i++ ) // Aqui você passa as linhas
        {
                for( int j=0; j<coluna; j++ ) //Aqui você passa as colunas
                {
                        printf("o ");
                }
                printf("\n"); // proxima linha
        }

Vai tentando implementar aí e se tiver dúvida posta aí. Não testei, mas a idéia é essa aí.

Att,

WebPantoja

Editado por webpantoja
Link para o comentário
Compartilhar em outros sites

  • 0

Sim, estou começando agora à mexer em C =P

Estava com pressa quando escrevi o post e esqueci de especificar melhor a minha dúvida quanto ao primeiro exercício.

Eu até consegui QUASE fazê-lo com For (não faço idéia de como fazer com while), mas tem algum erro, pois quando eu executo o programa, acontece um erro bizarro, as horas aparecem assim:

03:05:22

05

33

03:05:23

Ou algo assim.

#include <stdio.h>
int main()
{
    int hora, minuto, segundo;
    for (hora=0; hora<=23; hora++)
    {
        for (minuto=0; minuto<=59; minuto++)
        {
            for (segundo=0; segundo<=59; segundo++)
            {
                if(hora<10) printf ("0");
                printf("%d\n", hora);
                if(minuto<10) printf ("0");
                printf("%d\n", minuto);
                if(segundo<10) printf ("0");
                printf("%d\n", segundo);
                printf("%02d:%02d:%02d\n", hora, minuto, segundo);
                }
                }
                }
               return 0;
                }
Esse é o código que eu consegui fazer. Onde está o erro nele? EDIT: Completei o código, mas parece haver um erro ainda:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m;

        printf("Digite linha x coluna: ");
        scanf("%d %d", &n, &m);

        int matriz[n][m];

        for( int i=0; i<n; i++ )
        {
                for( int j=0; j<m; j++ )
                {
                        printf("o ");
                }
                printf("\n");
        }
        system ("pause"); 
        return 0;
        }

Troquei os nomes das variáveis. =P

Digitei "2 x 3", mas não formou um retângulo de 2 "o" de largura por 3 "o" de comprimento. Ao contrário, fez um retângulo de 4 "o" de largura, vários "o" de comprimento e alguns "o" soltos depois. =/

Editado por Headbanger_tr00
Link para o comentário
Compartilhar em outros sites

  • 0

vlandeismilsoun,

Se você fizer as casas decimais e unidades separadas acho que fica mais fácil, apesar que vai ter um monte de while ou for. Mas é isso aí, vai quebrando a cabeça que esse aí é chatinho de fazer mesmo.

Com relação ao program dos 'o's eu coloquei seu programa aqui e rodou legal. Quando for digitar digita '2 3'... sem o x para ver o que vai dar.

Att,

WebPantoja

Link para o comentário
Compartilhar em outros sites

  • 0

Não entendi bem o quê você quis dizer com fazer casas decimais separadas, mas vou tentar algo assim.

Quanto ao programa da figura, como fazê-lo com While? E se eu quisesse fazer figuras ocas como essa:

oooooo
o    o
oooooo

Como faço essas formas com For? E com while?

Editado por Headbanger_tr00
Link para o comentário
Compartilhar em outros sites

  • 0

Cara,

Você tem que entender primeiro o conceito dos 2.

For e While são praticamente as mesmas coisas, são repetidores mudando somente a condição de parada.

se fizer

int x;

for( x=0; x< 5; x++ )
{
   printf("%d", x); // Aqui enquanto a condição for x menor que 5 vai imprimindo, vai imprimir, 0,1,2,3,4... quando chegar no 5 para
}

x = 0;
while( x < 5 )
{
   printf("%d", x); // Aqui enquanto a condição estiver x menor que 5 vai imprimindo, vai imprimir, 0,1,2,3,4... quando chegar no 5 para
   x++;
}

Então não importa usar while ou for, fazer de um jeito ou de outro não vai alterar nada a lógica.

O que vai mudar o resultado final é os if's que você vai colocar, tipo nesse exemplo aí de baixo você já sabe que deve fazer um if para não imprimir linha 2 nem linha 4.

Tenta fazer aí e posta as dificuldades.

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpa pelo double-post. Tentei completar o programa das horas, como você me recomendou. Mas alguma coisa deu errado. Não sei se montei o código errado, ou se foi algum erro banal (como um ";" ou "{" no lugar errado), enfim, esse é o programa que eu fiz:

#include <stdio.h>
#include <stdlib.h>
int main ();
{
int horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade;
while( horaDezena <= 2 )
   while( horaUnidade <= 3 )
      while( minutoDezena <=5 )
      while (minutoUnidade <=9)
      while (segundoDezena <=5)
      while (segundoUnidade <=9)
      printf ("%d horaDezena, %d horaUnidade, %d minutoDezena, %d minutoUnidade, %d segundoDezena, %d segundoUnidade\n");
      return 0;
      }

O quê está errado nele? =/

EDIT: O Dev-C++ nem diz que tem erro na linha depois do Int main, mas não sei o quê é. Ainda não consigo fazer esse programa com For também. =/

Editado por Headbanger_tr00
Link para o comentário
Compartilhar em outros sites

  • 0

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade;
while( horaDezena <= 2 )
   while( horaUnidade <= 3 )
      while( minutoDezena <=5 )
      while (minutoUnidade <=9)
      while (segundoDezena <=5)
      while (segundoUnidade <=9)
      printf ("%d horaDezena, %d horaUnidade, %d minutoDezena, %d minutoUnidade, %d segundoDezena, %d segundoUnidade\n");
      system ("pause");
      return 0;
      }

Ainda dá erro. Quando eu compilo e executo, aparece a tela do prompt, sem NADA escrito (nada mesmo, nem aquela mensagem padrão do fim do programa), com um "_" piscando. Aperto vários botões, e ela não fecha (só clicando no X). Onde estou errando? Seria a falta do Break? Onde insiro ele?

Link para o comentário
Compartilhar em outros sites

  • 0

Headbanger,

Antes de começar a fazer um laço de repetição, inicialize as variáveis, assim:

int horaDezena = 0, horaUnidade = 0, minutoDezena = 0, minutoUnidade = 0, segundoDezena = 0, segundoUnidade = 0;
Depois quando estiver em um laço de repetição você tem que incrementar a variável, ou seja, fazer com que ela some +1 no valor dela, ficando de 0 -> 1, 1 -> 2, até que chegue na condição de parada... assim
while( horaDezena <= 2 )
{
   while( horaUnidade <= 3 )
   {
      while( minutoDezena <=5 )
      {
         while (minutoUnidade <=9)
         {
            while (segundoDezena <=5)
            {
               while (segundoUnidade <=9)
               {
                  printf ("%d horaDezena, %d horaUnidade, %d minutoDezena, %d minutoUnidade, %d segundoDezena, %d segundoUnidade\n");
                  segundoUnidade++;  //soma +1 no valor da variável
               }
               segundoDezena++;  //soma +1 no valor da variável
            }
            minutoUnidade++;  //soma +1 no valor da variável
         }
        minutoDezena++;  //soma +1 no valor da variável
      }
      horaUnidade++;  //soma +1 no valor da variável
   }
  horaDezena++;  //soma +1 no valor da variável
}

Também é importante fazer uma boa identação (dar espaços sempre que for um novo bloco dentro de um bloco). Fica melhor a leitura do código.

Tenta aí, deve dar mais alguns erros mas vê se funciona. Qualquer outra dúvida posta aí.

Att,

WebPantoja

Link para o comentário
Compartilhar em outros sites

  • 0

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int horaDezena=0, horaUnidade=0, minutoDezena=0, minutoUnidade=0, segundoDezena=0, segundoUnidade=0;
while( horaDezena <= 2 )
{
   while( horaUnidade <= 3 )
   {
      while( minutoDezena <=5 )
      {
         while (minutoUnidade <=9)
         {
            while (segundoDezena <=5)
            {
               while (segundoUnidade <=9)
               {
                  printf ("%d horaDezena, %d horaUnidade, %d minutoDezena, %d minutoUnidade, %d segundoDezena, %d segundoUnidade\n");
                  segundoUnidade++;
               }
               segundoDezena++;
            }
            minutoUnidade++; 
         }
        minutoDezena++;
      }
      horaUnidade++;
   }
  horaDezena++;
}
system ("pause");
return 0;
}
Montei o código assim, maaaas, ao executar, aparece isso no prompt:
2009014384 horaDezena, 4008888 horaUnidade, 4199093 minuto Dezena, 2009184276 minutoUnidade, 4013186 segundoDezena, 4013080 segundoUnidade

Então pula uma linha, e repete 10 vezes essa linha de texto, seguida pelo "pressione qualquer tecla para continuar". =/

Não sou bom programador, só comecei a ter aulas recentemente, e não sei como onde está o erro nesse programa. =/

Também não sei como converter isso pra While. =/

Editado por Headbanger_tr00
Link para o comentário
Compartilhar em outros sites

  • 0

Troque:

printf ("%d horaDezena, %d horaUnidade, %d minutoDezena, %d minutoUnidade, %d segundoDezena, %d segundoUnidade\n");
Por:
printf ("%d %d %d %d %d %d", horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade\n");

Imagino que seja isso que queira.

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz isso, mas ainda deu um erro. Tirei uma print dessa vez, acho que ficará mais fácil de explicar assim:

printdevc.png

Aparentemente, tem um erro na linha 18, o quê é estranho, já que só tem uma "}" nessa linha. "Stray '\' in program"... O quê isso quer dizer?

OBS: Uso o compilador Bloodshed Dev-C++, versão 4.9.9.2

Editado por Headbanger_tr00
Link para o comentário
Compartilhar em outros sites

  • 0

quer dizer q tem um \ perdido no meio do codigo. a linha 18 não tem nenhum }, ela tem um printf().

ai se você olhar na linha, vai ver q você pos um \n num lugar onde não pode existir.

então, nessa linha, apague o \n" q esta no final. e ponha o \n depois do ultimo %d dentro das aspas no printf().

Link para o comentário
Compartilhar em outros sites

  • 0

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int horaDezena=0, horaUnidade=0, minutoDezena=0, minutoUnidade=0, segundoDezena=0, segundoUnidade=0;
while( horaDezena <= 2 )
{
   while( horaUnidade <= 3 )
   {
      while( minutoDezena <=5 )
      {
         while (minutoUnidade <=9)
         {
            while (segundoDezena <=5)
            {
               while (segundoUnidade <=9)
               {
                  printf ("%d %d %d %d %d %d\n", horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade);
                  segundoUnidade++;
               }
               segundoDezena++;
            }
            minutoUnidade++; 
         }
        minutoDezena++;
      }
      horaUnidade++;
   }
  horaDezena++;
}
system ("pause");
return 0;
}
Dá erro ainda. No prompt só aparece:
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 0 0 0 0 0 6 0 0 0 0 0 7 0 0 0 0 0 8 0 0 0 0 0 9 Pressione qualquer tecla para continuar...
Ainda acho que o primeiro código que eu montei era o quê estava mais perto de funcionar, embora ainda desse um erro:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int hora, minuto, segundo;
    for (hora=0; hora<=23; hora++)
    {
        for (minuto=0; minuto<=59; minuto++)
        {
            for (segundo=0; segundo<=59; segundo++)
            {
                if(hora<10) printf ("0");
                printf("%d\n", hora);
                if(minuto<10) printf ("0");
                printf("%d\n", minuto);
                if(segundo<10) printf ("0");
                printf("%d\n", segundo);
                printf("%d:%d:%d\n", hora, minuto, segundo);
                }
                }
                
                system ("pause");
               return 0;
                }
Obrigado pela ajuda! o/ EDIT: Fiz outro teste, também dando erro:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade;
   {
   while( horaDezena <= 2 )
   while( horaUnidade <= 3 )
      while( minutoDezena <=5 )
      while (minutoUnidade <=9)
      while (segundoDezena <=5)
      while (segundoUnidade <=9)
      else printf ("%d, %d:, %d, %d:, %d, %d\n", horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade);
}
system ("pause");
return 0;
}

Erro na linha 13 (a do else printf), "expected primary-expression before "else"", também não sei como resolver isso. =/

Editado por Headbanger_tr00
Link para o comentário
Compartilhar em outros sites

  • 0

Tente assim:

int main()
{
    int hora, minuto, segundo;
    for (hora=0; hora<=23; hora++)
    {
        for (minuto=0; minuto<=59; minuto++)
        {
            for (segundo=0; segundo<=59; segundo++)
            {
                printf("%d:%d:%d\n", hora, minuto, segundo);
            }
        }
    }            
    system ("pause");
    return 0;
}

Acho que pelas alterações dá pra entender o que estava errado, mas se ficar com dúvida é só postar.

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu, valeu, VALEU! <3

Funcionou certinho com for, vou tentar adaptar isso pra while também.

MUITO obrigado! =P

EDIT:

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int horaDezena=0, horaUnidade=0, minutoDezena=0, minutoUnidade=0, segundoDezena=0, segundoUnidade=0;
while( horaDezena <= 2 )
{
   while( horaUnidade <= 3 )
   {
      while( minutoDezena <=5 )
      {
         while (minutoUnidade <=9)
         {
            while (segundoDezena <=5)
            {
               while (segundoUnidade <=9)
               {
                  printf ("%d %d: %d %d: %d %d\n", horaDezena, horaUnidade, minutoDezena, minutoUnidade, segundoDezena, segundoUnidade);
                  segundoUnidade++;
               }
               segundoDezena++;
            }
            minutoUnidade++; 
         }
        minutoDezena++;
      }
      horaUnidade++;
   }
  horaDezena++;
}
system ("pause");
return 0;
}

Novamente, só aparece "00: 00: 00", "00: 00: 01" até "00: 00: 09". Já revisei o código algumas vezes, mas não consegui achar o erro. =/

Editado por Headbanger_tr00
Link para o comentário
Compartilhar em outros sites

  • 0

Minha melhor tentativa foi aquela alí em cima, mas o código pára no começo, ainda.

Tentei adaptar o programa das figuras pro while, mas não tive muito sucesso:

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m;
printf ("Digite linha e colune separadamente:");
scanf ("%d%d", &n, &m);
int matriz [n][m];
if (i=0);
while i<n;
{
if (j=0);
while j<m;
{
i++
j++
printf("o");
}
printf ("\n");
}
system ("pause");
return 0;
}
i e j undeclared. Mas elas não foram definidas no programa com for e deu certo mesmo assim. o_o Programa com for:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m;

        printf("Digite linha e coluna separadamente: ");
        scanf("%d %d", &n, &m);

        int matriz[n][m];

        for( int i=0; i<n; i++ )
        {
                for( int j=0; j<m; j++ )
                {
                        printf("o ");
                }
                printf("\n");
        }
        system ("pause"); 
        return 0;
        }

A descrição do programa está no meu primeiro post. Obrigado. =P

Link para o comentário
Compartilhar em outros sites

  • 0

Não tinha visto que também tinha outro programa...

i e j undeclared. Mas elas não foram definidas no programa com for e deu certo mesmo assim. o_o
Elas foram definidas sim, dentro do próprio for:
for(int i=0; i<n; i++ )
for(int j=0; j<m; j++ )

int matriz[n][m];
Qual o objetivo dessa matriz? Ela sequer é utilizada. O seu código tem vários erros.
if (i=0);
Essa instrução não é necessaria, além de conter um erro (a comparação deve ser feita com o operador ==, e não utilizando =, que é operador de atribuição).
while i<n;
while j<m;
Dois problemas:
  • Falta o parênteses. O correto é while(condição).
  • Aquele ponto-e-vírgula não deveria estar no final.
while j<m;
{
...
i++
j++
...
}

Novamente, dois erros:

  • Falta o ponto-e-vírgula no final da instrução. O correto é i++; e não i++. Isso também vale para a variável j.
  • A variável i deve ser incrementada no loop principal (while(i<n)) e não no secundário (while(j<m)).
Corrigindo esses erros o programa funciona perfeitamente.
Link para o comentário
Compartilhar em outros sites

  • 0

Opa, corrigi esses erros:

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m;
printf ("Digite linha e coluna separadamente:");
scanf ("%d%d", &n, &m);
while (i<n)
i++;
{
while (j<m)
{
j++;
printf("o");
}
printf ("\n");
}
system ("pause");
return 0;
}
Diz que o problema é que i e j não foram declaradas, mas quando eu declarei AINDA deu problema. Botei logo no começo:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m, i, j;
printf ("Digite linha e coluna separadamente:");
scanf ("%d%d", &n, &m);
while (i<n)
i++;
{
while (j<m)
{
j++;
printf("o");
}
printf ("\n");
}
system ("pause");
return 0;
}

Quando o prompt pede pra eu digitar a linha e a coluna, eu digito, mas quando dou enter, nada acontece. Aparece escrito "Aperte qualquer tecla para continuar..." apenas. =/

Link para o comentário
Compartilhar em outros sites

  • 0

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m, i, j;
printf ("Digite linha e colune separadamente:");
scanf ("%d%d", &n, &m);
if (i==0);
while (i<n)
{
i++;
if (j==0);
while (j<m)
{
j++;
printf("o");
}
printf ("\n");
}
system ("pause");
return 0;
}
Assim? Está dando o mesmo erro de antes. =/ Outro teste, mas ainda dá erro (aparece apenas um 'o'):
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m, i, j;
printf ("Digite linha e colune separadamente:");
scanf ("%d%d", &n, &m);
if (i==0);
{
while (i<n)
i++;
}
if (j==0);
{
while (j<m)
j++;
}
printf("o");
printf ("\n");
system ("pause");
return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

if (i==0);
Não há a necessidade de testar se i é diferente de 0 (o correto é, na verdade, você atribuir i a 0). Além disso, o ponto-e-vírgula não deveria estar ali. Remova a linha acima e lembre-se de atribuir i a zero (i=0;). O mesmo na linha if (j==0);, mas não se esqueça de limpar o contador j para cada iteração do loop principal:
while(i<n){
  j=0; //limpa o contador
  ...
  while(j<m){
    ...
  }
  ...
}

Link para o comentário
Compartilhar em outros sites

  • 0

Não entendi. Botei isso no código (acho que fiz errado), mas dá o mesmo erro na compilação:

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m, i, j;
printf ("Digite linha e colune separadamente:");
scanf ("%d%d", &n, &m);
i=0;
{
while (i<n)
i++;
}
j=0;
{
while (j<m)
j++;
}
printf("o");
printf ("\n");
system ("pause");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...