Ir ao conteúdo
  • Cadastre-se

Ajuda com exercício


Mariana Oliveira

Posts recomendados

nao consigo nem imagino o caminho para fazer este exercício, se alguem puder me ajude!!!

3. FAQ que dada uma matriz 10x10 e números inteiros, atribua o valor 0

(zero) para o elemento cuja soma de seus índices (representando a linha e

coluna) seja múltiplo de 2. Exiba a matriz resultante.

Link para o comentário
Compartilhar em outros sites

eu consegui pouca coisa, nao deve ta nada certo, tentei de tudo mas nao vai! se você puder me ajudar, da uma olhada aí no que eu fiz, esqueci de mencionar, mas o exercício é no visualg:

var
M:VETOR[1..10,1..10]DE INTEIRO
I,J:INTEIRO

inicio

PARA I DE 1 ATE 10 FACA
ESCREVAL("")
PARA J DE 1 ATE 10 FACA
SE(I+J%2=0)então
M[I,J]<- 0
SENAO
SE (I+J%2=1)então
M[I,J]<-I,J
FIMSE
FIMSE
ESCREVA ("",M[I,J])
FIMPARA
FIMPARA
fimalgoritmo

Link para o comentário
Compartilhar em outros sites

Olá Mariana, bom dia.

Sua lógica parece correta pra mim, o único porém é esse seu "else" (senão), por dois motivos:

1 - Não precisaria de um IF (se) pois é a única outra possibilidade de uma divisão por 2.

2 - Você esta tentando atribuir dois valores inteiros para a Variável M[i,J], que só pode receber um valor, aquela virgula não pode estar ali, tem que ser ou uma equação ou outra coisa, como por exemplo M[i,J] <- I*J

Bom, fora isso não consigo ver nada (não conheco essa sua linguagem, mas a ideia me parece correta).

Espero ter ajudado, até mais.

Link para o comentário
Compartilhar em outros sites

nao entendi, esse if (se) tem as virgulas separando I e J porque I seria a Linha e J seria a coluna, então somando linha e coluna se o resultado for um número multiplo de 2 no lugar no número da linha e da coluna seria o número 0

tentei fazer diferente e só a primeira linha deu certo, da uma olhada pra ver se você entende

var
M:VETOR[1..10,1..10]DE INTEIRO
I,J:INTEIRO

inicio

PARA I DE 1 ATE 10 FACA
ESCREVAL("")
PARA J DE 1 ATE 10 FACA
SE(I+J%2=0)então
M[I]<- 0
M[J]<-0
SENAO
SE (I+J%2=1)então
M[I]<-I
M[J]<-J
FIMSE
FIMSE
ESCREVA ("",M[I,J])
FIMPARA
FIMPARA
fimalgoritmo

Link para o comentário
Compartilhar em outros sites

A sua lógica inicial estava correta Mariana, agora você está confundindo a posição na matriz (ou vetor multidimensional) com o valor que cada posição possui.

Analisemos a seguinte linha:

M:VETOR[1..10,1..10] DE INTEIRO

O que você está fazendo acima é declarando 100 números inteiros, organizados na forma de um vetor de duas dimensões. Ou seja, para cada posição entre 1 e 10 da parte esquerda [XX, ..] e para cada posição entre 1 e 10 da parte da direita [.., XX] existe 1 número inteiro. Quando você declara o I e o J e os coloca como M[i,J] você está resgatando o valor inteiro que a posícao I,J apontam dentro do seu vetor de duas dimensões.

Desta forma, o que o exercício requer é que você trabalhe analisando a posição do vetor, fazendo um cálculo sobre a soma dos índices, e alocando 0 ou 1 (ele não fala o que é pra escrever caso não seja múltiplo de 2, então vamos apenas colocar 1) na posição.

Isso que eu disse acima é com relação à lógica do exercício.

Agora com relação o que eu disse sobre o SE (if): Em uma divisão por 2 ou o resto é 0 ou é 1 (trabalhando com números inteiros). Ponto. Portanto, quando você fala que SE( (I+J)%2=0) Então M[i,J] = 0, o SENÃO não precisa conter outro IF para verificar se é 1, pois só pode ser 1 caso não seja 0.

Ficaria:

SE(I+J%2=0)ENTÃO

M[i,J]<-0

SENÃO

M[i,J]<- 1 (se for fazer o exercício rigorosamente, essa linha não precisa ser escrita, pois iria manter o valor que estava na variável).

Se ainda tiver dúvidas eu procuro alguns links sobre matriz, aí fica mais fácil. Até mais!

(Poste se entendeu ou não, hehe)

Link para o comentário
Compartilhar em outros sites

oi, obrigada por estar me ajudando.

Eu entendi a parte do If, arrumei como entendi da uma olhada se está correto agora:

var
M:VETOR[1..10,1..10]DE INTEIRO
I,J,LINHA,COLUNA:INTEIRO
inicio
// Seção de Comandos
PARA I DE 1 ATE 10 FACA
ESCREVAL("")
PARA J DE 1 ATE 10 FACA
SE(I+J%2=0)então
M[I,J]<- 0
SENAO
M[I,J]<-1
FIMSE
ESCREVA ("",M[I,J])
FIMPARA
FIMPARA
fimalgoritmo

só que o resultado está dando tudo 1 agora, antes deste eu tinha feito outro exercício que tinha dado certo, tentei fazer este do mesmo jeito, mas nao estou conseguindo, ou da tudo 0 que nem antes ou da tudo 1, da uma olhada no outro:

var
M:VETOR[1..5,1..5]DE INTEIRO
I,J:INTEIRO
inicio
// Seção de Comandos
PARA I DE 1 ATE 5 FACA
ESCREVAL("")
PARA J DE 1 ATE 5 FACA
SE(I=J)então
M[I,J]<-1
SENAO
M[I,J]<-0
FIMSE
ESCREVA (" ",M[I,J])
FIMPARA
FIMPARA
fimalgoritmo

obs: estes exercicios sao todos feitos no visualg porque estou começando a aprender agora, se você quiser o programa pra ver eu te passo

Link para o comentário
Compartilhar em outros sites

Mariana, o seu primeiro código está correto, perfeito.

Inclusive baixei o programa que você usa e testei, o único porém é um erro na condição de igualdade! (Sim, hahaha, quebramos a cabeça por um erro de como colocar a equação)

Substitua a linha:

SE(I+J%2=0)então

Por:

SE(((I+J)%2)=0)então

Note que desta forma, ele primeiro irá realizar a soma dos índices, depois irá calcular o resto da equação, e só depois verificar a igualdade. O que estava acontecendo é que ele verificava a igualdade se 2 = 0 antes de tudo e logicamente sempre dava errado (entrava no SENAO) - por isso sempre era preenchido com 1.

Com relação ao programa, achei bem interessante, uma ferramenta boa para iniciar, bem legal!

Bom, só poste pra confirmar se deu certo aí também, no mais acho que é só isso! Até mais!

OBS: Com relação ao segundo código, apesar de ser um exemplo de teste, note que I = J não soluciona o proposto pelo exercício, afinal existem muitas outras combinações de soma de índices que geram números pares.

Link para o comentário
Compartilhar em outros sites

nao deu certo nem assim, continua dando tudo em 0, quando você testou aí no visualg deu certo? eu troquei o codgo que você falou, nao sei o que pode ter dado errado aqui, o codgo é o mesmo, só troquei o detalhe que você me ajudou anteriormente

var
M:VETOR[1..10,1..10]DE INTEIRO
I,J,LINHA,COLUNA:INTEIRO
inicio
// Seção de Comandos
PARA I DE 1 ATE 10 FACA
ESCREVAL("")
PARA J DE 1 ATE 10 FACA
SE(((I+J)%2)=0)então
M[I,J]<- 0
FIMSE
ESCREVA ("",M[I,J])
FIMPARA
FIMPARA
fimalgoritmo

Link para o comentário
Compartilhar em outros sites

Então Mariana, você alterou o código que falei que estava correto... cade o SENAO???

O VisualG por padrão inicializa todas as variáveis inteiras com 0. Portanto, se você apenas verifica algumas condições e atribui novamente 0 para elas com certeza só vai aparecer 0 como resposta.

O SENAO era o único local que atribuia 1 para as variáveis e que fazia você perceber se o código estava correto ou não.

Escreva novamente o código que eu disse estar correto (incluindo o SENAO) apenas alterando a linha de código do SE pela que eu falei.

Até mais!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!