Jump to content
thinkabout

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

Recommended Posts

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");
}

Edited by thinkabout

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Edited by thinkabout

Share this post


Link to post
Share on other 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

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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]);

 }

}

Edited by thinkabout

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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");
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.