Matlab

MadalenaM

Membro
Olá pessoal :)
Preciso mt da vossa ajuda em programação ' MatLab '
Estes problemas fazem parte da minha avaliação na cadeira de programação e computação no IST e agradecia que me ajudassem a resolve-los o mais depressa possível, ja que nao percebo mt disto :(
São os seguintes:

Problema A

Desenvolva em Matlab uma função que receba como argumento um vector de números naturais, percorra elemento a elemento o vector dado recorrendo a um ciclo while e retorne um vector com os seguintes dois elementos:
  • na primeira posição, o número de elementos que ocorrem em posições ímpares no vector diferentes da posição que ocupam no vector;
  • na segunda posição, a soma das posições pares do vector em que ocorrem números menores que 7.
Problema B

Desenvolva em Matlab uma função que receba como argumento um vector de números naturais, percorra elemento a elemento o vector dado recorrendo a um ciclo while e retorne um vector do mesmo comprimento em que cada elemento do argumento é substituído:
  • pela soma da sua posição com o elemento que se lhe segue, caso o elemento anterior seja superior à posição que ocupa;
  • por 1, caso contrário.
Mto OBRIGADA :D
 
olha, aqui não podemos resolver os teus problemas..

mas porque não tentas por tu mesmo e depois mostras? aposto que ai ja teras muito mais ajuda, e ainda aprenderas alguma coisa ;)
 
bem...entao já q é assim agradecia que me propusessem a correcção do PROBLEMA A que ja fiz e q nao esta correcto:
function f(v)
I=1;
X=0;
Y=0;
while I<=length(v)
if mod(X,2)==1 & ~(V(I)==I)
X=X+1;
end
if mod(Y,2)==0 & Y<7
Y=Y+v(I)
end
I=I+1;
end
 
Código:
if mod(Y,2)==0 & Y<7
Y=Y+v(I)
    end

O que tu queres é saber se o índice é par e se o valor do vector na posição é menor que 7

Código:
if mod(I,2)==0 & v(I)<7
Y=Y+v(I)
    end
 
Jaac -- ""na primeira posição, o número de elementos que ocorrem em posições ímpares no vector diferentes da posição que ocupam no vector; " quer dizer que por exemplo o 2 nao pode estar na 2ª posição do vector nem um 3 na 3ª.

e mt obrigada pela correcção :) mas continua a nao estar certo...:/ é que estou a experimentar mesmo no programa.Por ex. fazendo f([2,3,1,2,5]) a resposta do matlab é:
Y =
2

Y =
5

os valores estao certos mas as variaveis para alem d ser Y,Y tem q aparecer ans= (e so depois o resultado)
 
é que estou a experimentar mesmo no programa.Por ex. fazendo f([2,3,1,2,5]) a resposta do matlab é:
Y =
2

Y =
5

os valores estao certos mas as variaveis para alem d ser Y,Y tem q aparecer ans= (e so depois o resultado)

tens [ 2 3 1 2 5 ], como em matlab os vectores começam na posição um, fica 1->2, 2->3, 3->1, 4->2, 5->5

Para a primeira condição o único que ocupa a mesma posição que o índice é o 5, o resultado é 4 (2,3,1,2)

De qualquer forma a tua interpretação da condição não me parece correcta, porque não utiliza a parte das posições impares.
 
A resposta à A é .....

function f(v)
I=1;
X=0;
Y=0;
while I<=length(v)
if mod(I,2)~=0 & v(I)~=I
X=X+1;
end
if mod(I,2)==0 & v(I) <7
Y=Y+v(I);
end
I=I+1;
end
w = [X Y]

Não tenho o Matlab disponivel para testar mas se houver algum erro é de compilação. Básico.
Eu posso estar a ser brutinho, mas sou ex-aluno do IST, e choca-me quando as pessoas não usam a massa cinzenta. Não devemos ver este problema como programação. Isto é lógica, raciocinio abstracto, sem o qual o engenheiro (ou qualquer outra ciencia) não vive, por isso Madalena não me venhas dizer que isto não te vai servir para nada na tua carreira.
 
Última edição pelo moderador:
Awake....
Antes de mais agradeço-te mt pela resolução, só tenho q esperar pela correcção do prof.
Quanto à cadeira servir-me ou não para alguma coisa acho q nao vale a pena discutir.
"choca-me quando as pessoas não usam a massa cinzenta" - reconheço q isto desenvolve a massa cinzenta mas tb há outras cadeiras q desenvolvem a lógica e raciocinio abstracto de um engenheiro como por ex. analise matematica ou algebra e q têm continuação no meu curso durante os 5 anos. Computação so tenho no 1ºsemetre do 1º ano...e nem toda a gente gosta d desenvolver a massa cinzenta em frente de um computador...é isso q quis dizer.
mt obrigada pela ajuda :)
 
Problema B

Desenvolva em Matlab uma função que receba como argumento um vector de números naturais, percorra elemento a elemento o vector dado recorrendo a um ciclo while e retorne um vector do mesmo comprimento em que cada elemento do argumento é substituído:
  • pela soma da sua posição com o elemento que se lhe segue, caso o elemento anterior seja superior à posição que ocupa;
  • por 1, caso contrário.
function U=g(v)
I = 2;
U(1) = 1;
U(length(v)) = 1;
while I < length(v)
if v(I-1) > I
U(I) = I + v(I+1);
else
U(I)=1;
end
I = I + 1;
end

agradecia que me corrigissem tb este q nao esta certo pq me foi rejeitado pelo professor
OBRIGADA
 
Repara que :

- caso o elemento anterior seja superior à posição que ocupa;

é diferente de:

- if v(I-1) > I

Isto é uma questão de português, não de programação. O enunciado também está mal feito porque não diz o que deve acontecer na fronteira quando não existe próximo ou anterior.
 
MadalenaM, um pequeno conselho para usares aqui no forum: sempre que queiras por codigo por estes lados, tenta usar a tag ["code"] ["/code"] (sem as aspas). Ajuda na compreensão. :)
 
Back
Topo