Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

thinkabout

[Resolvido] Maior Posição / Andar um elemento para frente no array. / Maior elemento na última posição do array.

Mensagens Recomendadas

thinkabout

Boas Pessoal,

O ponto A já fiz, o B já fiz mas não como função, agora estou com problema em obter o return da função roda.

#define _CRT_SECURE_NO_WARNINGS
#define length 4
#include <stdio.h>
/*
Considere um vector com N componentes inteiros.
a)  Desenvolva uma função que devolva a posição do maior dos elementos do vector.
No caso de haver repetições do valor no vector, a função pode, por exemplo,
fornecer como resultado a posição com maior índice.
b)  Desenvolva uma função que desloque todos os seus elementos, uma posição para a
direita. O último elemento deve deslocar-se para a primeira posição.
c)  Elabore um programa que, após a leitura das N componentes inteiras, faça as
necessárias rotaçõespara a direita até que o elemento de maior valor do vector se
encontre na última posição desse vector.
*/
int maiorposicao(int numero[])
{
int i,max=-200,pos=0;
for ( i = 0; i < length; i++)
{
  if (numero[i] >= max)
 {
  max = numero[i];
  pos++;
 }
}
return pos;
}
int roda(int numero[])
{
int i;
int frente[length];
for (i = 0; i < length-1; i++) // Não posso por lenght senao o indice seria 4 e estoirava porque tentava por um nr na posicao 5.
 {
frente[i+1]=numero[i];
 }
 frente[0]=numero[length-1];

for (i = 0; i < length; i++)
 {
  return  frente[i];
 }


}
int main()
{

 int numero[length],i,j=0;

 for (i = 0; i < length; i++)
 {
 printf("Qual os valores ?");
 scanf("%d" , &numero[i]);
  }

 printf("O o valor da maior posicao e %d \n", maiorposicao(numero));

 printf(" %d", roda(numero));

 puts("\n");
}

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

antes de pensar nos restantes, vamos ver o ponto A

insere os seguintes valores :

Qual os valores ? -300
Qual os valores ? -280
Qual os valores ? -260
Qual os valores ? -240

qual o índice com maior valor : 3

qual a resposta da tua aplicação ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thinkabout

antes de pensar nos restantes, vamos ver o ponto A

insere os seguintes valores :

Qual os valores ? -300
Qual os valores ? -280
Qual os valores ? -260
Qual os valores ? -240

qual o índice com maior valor : 3

qual a resposta da tua aplicação ?

Sei que em vez de ter -200 no max devia ter INT_MIN, e ter #include <limits.h>, devia ter corrigido isso, já o fiz agora.

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

e que tal de fazer essa brincadeira toda, fazeres isto :

int maiorposicao(int numeros[])
{
 int i, max = numeros[0], pos = 0; // inteligente inicialização das variáveis

 for (i = 1; i < length; i++) // começar o ciclo numa posição que descarta a já considerada, a primeira
 {
   if (numeros[i] >= max)
   {
     max = numero[i];
     pos = i;
   }
 }
 return pos;
}

para o ponto B

void roda(int numeros[])
{
 int i, aux = numeros[length - 1];

 // um ciclo a andar para trás resolve o problema num tirinho
 for (i = length - 2; i > 0; i--)
 {
   numeros[i] = numeros[i + 1];
 }

 numeros[0] = aux;
}

ou então, ainda mais simples:

void roda(int numeros[])
{
 int aux = numeros[0];

 // http://www.cplusplus.com/reference/cstring/memmove/
 memmove(numeros, &numeros[1], sizeof(int) * (length - 1));
 numeros[length - 1] = aux;

 numeros[0] = aux;
}

o ponto C, experimenta

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thinkabout

O meu problema principal no ponto B é que estava a tentar fazer return de um array e não posso fazer sem recorrer a ponteiros, fiz um printf dentro da função e já tive o resultado que queria.

O teu ciclo ao contrário não me entrou bem na cabeça.

Em relação ao ponto C, estou perdido... :(

void maximonaultimacasa(int numeros[], int pos)
{

int i,maximonaultimacasa[length];

for (i = pos; pos == (length-1); i++)
{
maximonaultimacasa[i+1]=numeros[i];
 }
 // printf("pos -> %d, o vector tem de tamanho %d \n", pos, length-1); (debug)
for (i = 0; i < length; i++)
 {
  printf (" %d", maximonaultimacasa[i]);

 }

}

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thinkabout

pista para o ponto C : usa as duas últimas funções que acabaste de fazer

É o que tenho tentado fazer mas sucesso, :( acho que vou roer outro exercício qualquer e depois olho com olhos frescos para isto.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thinkabout

Após a ajuda de um colega. Este não fui lá de outra maneira :(

#define _CRT_SECURE_NO_WARNINGS
#define length 4
#include <stdio.h>

int maiorposicao(int numeros[])
{
 int i, max = numeros[0], pos = 0;
 for (i = 1; i < length; i++)
 {
   if (numeros[i] >= max)
   {
  max = numeros[i];
  pos = i;
   }
 }
 return pos;
}
void RodaVector(int numeros[] )
{
int i, frente [length];
for(i=0;i<length;i++)
frente[i]=numeros[i];
for (i=0;i<length-1;i++)
numeros[i+1]=frente[i];
numeros[0]=frente[length-1];
}


int main()
{

 int numeros[length],i,j=0,pos;

 for (i = 0; i < length; i++)
 {
 printf("Qual os valores ?");
 scanf("%d" , &numeros[i]);
  }

 printf("O maior valor aparece na posicao %d do vector \n", maiorposicao(numeros));
 RodaVector(numeros);
  puts("O Vector rodado uma vez");
 for (i=0;i<length;i++)
printf(" %d",numeros[i]);

 puts("");


  puts("O vector rodado ate o maior ");

 pos=maiorposicao(numeros);

 for(i=0;i<length-1-pos;i++)
RodaVector(numeros);

 for (i=0;i<length;i++)
 printf(" %d",numeros[i]);
 puts("\n");
}

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.