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

André Sousa

Duvida em Algoritmo

20 mensagens neste tópico

Boas. O exercicio é o seguinte:

Descreva um algoritmo para o calculo dos valores da seguinte função:

F(x) = x se x<0

           0 se x=0

          x^2 - 2x se x>0

Eu fiz assim, mas acho que tenho mal:

ED:

real x, x^2-2x, f(x)

int 0

Inicio

   ler (x, x^2-2x,0)

   Se (x<0) entao

   f(x) <-- x

   Se (x=0) entao

   f(x) <--0

  Se (x>0) entao

  f(x) <-- x^2 - 2x

Fimse

Escrever (f(x))

Fim

Que acham?

Cumps, André Sousa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não percebo o que vem antes de "Inicio", estás a declarar variáveis?!?

O main está certo, se bem que nao gosto da forma como apresentas o pseudo-código, mas são maneiras e gostos.

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, antes do Inicio está a estrutura de dados ao qual declaro as variáveis. Quanto à disposição do pseudo-código, tenho aprendido assim nas aulas, mas por acaso, conheces alguma forma mais organizada?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pegando na tua sintaxe:

real x,y

Input X

If  (x<0)

x -> y

If (x=0)

0 -> y

If (x>0)

x^2-2x -> y

EndIf

Write (y)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Normalmente as variáveis são indicadas ao contrário:

y <- x, que significa y = x.

Já agora, eu mudaria o < 0 para <= e tratava só dois casos, com um if e um else, mas isso tu é que sabes, não fica "mais correcto" por isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Normalmente as variáveis são indicadas ao contrário:

y <- x, que significa y = x.

Já agora, eu mudaria o < 0 para <= e tratava só dois casos, com um if e um else, mas isso tu é que sabes, não fica "mais correcto" por isso.

Eu meti assim porque nas calculadoras é assim que aparece... Não é razão especial nenhuma... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deixo aqui mais dois exercicios:

a) Faça um algoritmo que dadas as medidas dos 3 lados de um triangulo o classifique quanto aos lados

Resolvi assim:

ED

real lado1, lado2, lado3

Inicio

    Ler(lado1,lado2,lado3)

      Se(lado1 <> lado 2 e lado3) então

        Escrever (" O triangulo é isósceles)

      Se(lado1 <> lado 2 <> lado 3)entao

        Escrever ("O triangulo é escaleno) SENAO

        Escrever ("O triangulo é recto)

      Fimse

Fim

Está correcto?

;) Este causou muitas duvidas na minha turma:

Considere uma data correspondente ao mês e dia do ano corrente fornecida pelo utilizador. Escreva um algoritmo que apresente a quantidade de dias que falta para o ultimo dia do ano. (* Considere que todos os meses têm 30 dias)

Alguém me pode ajudar neste?

Obrigado, cumprimentos!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me que a classificação do triângulos não está correcta ao nível da Matemática.

Quanto ao (;), se estás no mês m e no dia d, faltam (12-m)*30+30-d dias.

EDIT: relativamente ao (a), o algoritmo é um bocado mais complexo do que isso... É que tens que testar várias combinações.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me que a classificação do triângulos não está correcta ao nível da Matemática.

Exacto. Temos o isósceles (2 lados iguais), o escaleno (todos diferentes) e o equilatero (todos iguais).

Em relação ao B, é o que o Rui Carlos disse.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pretende-se calcular o salário semana de um empregado. Sabe-se que o numero de horas semanais é 36 e que o preço por hora é 7.5€. Se fizer horas extra recebe 10€ por cada. Elabore um algoritmo que calcule o salario semanal consoante o nº de horas que trabalhou.

Fiz assim:

ED:

int hextra

real ss

INICIO

   ler(hextra,ss)

   SE(número de horas semanais = 36) ENTAO

   ss <-- 36 * 7.5

   SENAO

   ss < -- 36*7.5 + hextra * 10

   ESCREVER(ss)

  FIMSE

FIM

Eu tenho colocado algoritmos básicos, mas estou a iniciar-me e quero confirmar se tenho bem ;)

Algum erro?

EDIT: outro

Elabore um algoritmo que lê um valor em segundos e calcule o numero de horas, minutos e segundos correspondentes.

ED:

int num, nhoras, nmins

INICIO

  LER(num, nhoras, nmins)

    nhoras <-- num/3600

    nmins  <-- num/60

    escrever("o numero de correspondente de horas é":, nhoras, "minutos":, nmins)

FIM

acho que este não está de todo correcto...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
INICIO

  ler(hextra,ss)

Para que é que queres ler o "ss" (salário semanal?)?

Não queres por a hipótese do empregado ter trabalhado menos de 36 horas numa semana? ;)

Em vez de leres as horas extra, lês as horas totais; se for 36 ou menos essas horas são pagas a 7.5 cada, se for mais de 36, cada hora a mais é paga a 10.

E meias-horas (ou períodos de 10 minutos) ... não queres considerá-los para o teu algoritmo? LOL

Tirando o ler(ss) o que está mal é a estrutura de SE: tens o ESCREVER fora do sítio.

EDIT outro

Elabore um algoritmo que lê um valor em segundos e calcule o numero de horas, minutos e segundos correspondentes.

ED:

int num, nhoras, nmins

INICIO

  LER(num, nhoras, nmins)

Oops ... "Elabore um algoritmo que lê um valor em segundos" não joga com "LER(num, nhoras, nmins)"

PS Mete os algoritmos separados daqui para a frente, até talvez numa mensagem diferente, específica para cada algoritmo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais tarde colocarei as resoluções dos algoritmos antecendentes a este post. No entanto hoje foi nos proposto um TPC que pede o seguinte:

Dada uma determinada data, elabore um algoritmo que indique o dia seguinte da data escolhida.

Resolvi assim:

ED:

    int dia, mes, ano, diaseguinte

inicio

       ler(dia, mes, ano)

          Caso mes seja

                1, 3, 5, 7, 8, 10:

                se (dia = 31) entao

                  diaseguinte <-- dia + 1,  mes + 1

                  senao

                  diaseguinte <-- dia + 1

                  12:

              se(dia = 31) entao

               diaseguinte <-- dia + 1, mes + 1, ano + 1

                 senao

               diaseguinte <-- dia + 1

              4, 6, 9, 11:

                 se(dia = 30) entao

                    diaseguinte <-- dia + 1, mes + 1

                 senao

                     diaseguinte <-- dia + 1

              2:

                 se(ano % 4 = 0 ou ano % 100 <> 0 e dia = 29)entao

                     diaseguinte <-- dia + 1, mes + 1

                    senao

                       se (dia = 28)entao

                         diaseguinte <-- dia+1, mes +1

                          senao

                            diaseguinte <-- dia + 1

              Fimcaso

                      Fimse

                fimse

             fimse

           fimse

        fimse

     escrever("O dia seguinte á data escolhida é":, diaseguinte)

FIM

Penso que compliquei uma bocado o exercício e poderia ter resolvido com uma forma mais simplificada. Alguma sugestão? :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

* Dia 32 do mês 13? :confused:

* A regra de ano bissexto está incompleta

Pontos extra

* informar data inválida (qual é o dia a seguir a 2007-02-29?)

* ter atenção ao calendário gregoriano (qual foi o dia a seguir a 1582-10-04?) ou limitar o algoritmo aos anos entre, por exemplo, 1930 e 2100.

E diz à tua professora que o TPC foi um trabalho de grupo -- constituído por ti e pelo P@P :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E diz à tua professora que o TPC foi um trabalho de grupo -- constituído por ti e pelo P@P :P

Epá, eu não entendo esta gente.

Se queres ajudar, ajuda, mas não queiras reconhecimento de tal. Se ele quer ajuda ou não, se ele quer fazer batota ou não, se ele quer aprender ou não, não tens nada a ver com isso, como tal, ou se ajuda ou não.

@André Sousa,

Talvez usar uma identação de 4 espaços fosse melhor para a leitura. :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E diz à tua professora que o TPC foi um trabalho de grupo -- constituído por ti e pelo P@P :P

Perguntares a opinião de um amigo teu é fazeres o trabalho em grupo? Não sejamos extremistas... :confused:
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

                se(ano % 4 = 0 ou ano % 100 <> 0 e dia = 29)entao

* A regra de ano bissexto está incompleta

Estive a olhar melhor para isto e reparo que a regra de ano bissexto, além de incompleta, está errada.

No caso do ano 2007

    2007 % 4 é 3 -- diferente de 0

mas

    2007 % 100 é 7 -- diferente de 0

por isso, 2007 seria considerado como bissexto.

Quanto à questão do "trabalho de grupo": a minha frase saiu mal, mesmo com o smiley.

Não tenho problema nenhum em dar um empurrãozinho a quem está a aprender (eu também estou a aprender e também gosto de levar uns empurrõezinhos), e não pretendo ser reconhecido por esses empurrõezinhos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais um algoritmo simples:

Calcular o número de graos de milho que se pode colocar num tabuleiro de xadrez, colocando 1 grao no primeiro quadrado e nos quadrados seguintes o dobro dos graos do quadro anterior. Um tabuleiro de xadrez é constituido por 8 linhas e 8 colunas.

Fiz assim:

ED:

int graos, i

INICIO

      graos <-- 1

           PARA(i<-1 até 63)Fazer

                 graos <-- graos * 2

           FimPara

                  escrever("O número de graos é:", graos)

FIM

Penso que é isto. Quanto aos comentários anteriores. A minha intenção ao colocar algoritmos, é meramente para tirar duvidas e melhorar nesta matéria, eu estou a iniciar-me e como tal tenho algumas dificuldade a ultrapassar. Não quero que ninguem me faça o trabalho :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que percebi queres calcular o  número de grãos colocados no tabuleiro. Assim só ficas com o número de grãos no último quadrado. Tens de os ir somando.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiveres o número de grãos no último, também é fácil de calcular o número de grãos no total (ou podias recorrer à fórmula da soma dos elementos de uma progressão geométrica).

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