Ir ao conteúdo

Posts recomendados

Postado

Com um loop podemos percorrer todos os valores de uma matriz que representa também o número de iterações. A função em questão compara 2 valores, e  retorna aquele que é o maior. Com isso, pode-se guardar o valor campeão de cada iteração. Daí basta garantir que esse campeão seja um dos 2 termos da próxima iteração, repetindo esse procedimento até que todos os valores na matriz sejam testados.

 

 

Para ser mais preciso poderia fazer pseudocódigo, porém é mais fácil escrever o programa, pois o algoritmo é iniciante e não faz sentido nenhum uma tentativa que não seja diretamente escrita em C. Contudo, espero que tenha entendido e pelo menos faça umas tentativas de resposta.

 

 

Dica: Garanta que o maior valor seja sempre, sempre a primeira posição na matriz, v[ 0 ],

Boa Sorte  ^_^

  • Curtir 1
Postado

@AnsiC eu estou a tentar fazer assim, assim consigo achar o maior de apenas dois certo? porque depois nao comparo com o maior que vem a seguir para saber qual o maior do vetor

#include <stdio.h> 

int maior(int a, int b ) {    
     return a > b ? a : b; 
} 

int main() {    

   int v[10] = { 12, 4, 5, 78, -4, 18, 542, 0, 45, -72 };
   int i=0,m;
   
   for(i=0;i<10;i++){
           m=maior(v[ i ], v[ i+1 ]);
   }
   
   
   
   return 0;
 
} 

 

  • Curtir 1
Postado

@rsd_17 Olá. Chegou perto. Sinceramente não entendi o q o @AnsiC explicou. Mas eu fiz o exercício de um modo parecido com o seu. Só q dentro do for eu verifico se a função é maior q 'm', a aí dentro do if faço m = função();

Inicialize a variável 'm' dessa forma, por ex: m = v[ 0 ]; antes do for

Não sei dizer se foi dessa forma q o @AnsiC quis explicar, mas assim como fiz funcionou.

Os parâmetros da função são como você está fazendo

Postado

Para ser mais claro, haja vista que é um exercício dos mais introdutório, me resta fazer dois exemplos.

/*
Com um loop podemos percorrer todos os valores de uma matriz que representa
também o número de iterações. A função em questão compara 2 valores, e  reto
rna aquele que é o maior. Com isso, pode-se guardar o valor campeão de cada
iteração ...
*/
#include <stdlib.h>/* EXIT_SUCCESS */
#include <stdio.h> /* printf() */



/* Retorna o maior valor (a ou b)

    Por meio de operador ternário ( ? ) testa qual de dois valores é o maior
    retornando camada superior o campeão.

    RETURN: TRUE > FALSE? TRUE:FALSE

    Nota
    ----
    Essa função pode ser reduzida a macro, entretanto, não significa nada em
    termos de desempenho na atualidade.

    Parâmetro
    ---------
        a: int
            Primeiro valor da propósição, e hipoteticamente o MAIOR valor
        b: int
            Segundo valor da propósição, e hipoteticamnte o MENOR valor

    Retorno
    -------
*/ int
maior(int a, int b)
{
    return a > b? a:b;
    /* Se 'a' é maior que 'b'? retorne a, se não retorne b; */
}

/* A principal função do Programa

    Nota
    ----
    Não precisa se preocupar com o 'parâmetro' void, pois se trada de uma
    conversão antiga que melhor releva a inexistência de parâmetros, 'void'
    nesse contesto, de fato, nos diz 'nenhum' parâmetro.

    Retorno
    -------
*/ int
main( void )
{
    int v[10] = {12, 4, 5, 78, -4, 18, 542, 0, 45, -72};
    /* Declara matriz do tipo inteiro com 10 itens */


    /* Exemplo 1:*/
    unsigned item = 0; /* Contador de iterações while */
    while(item < 10){

        v[0] = maior(v[0], v[item]);
        item++;
        /* Por hipoteses consideramos o primeiro valor na matriz, e no parâmetro
         da função; como sendo inicialmente o maior, permanecemos assim até o
         fim das iterações while.

         Nota: Se por acaso modificar o primeiro elemento da matriz é proibido
         / ou inconveniente, basta declarar outra variável para salvar o valor
         campeão.

         Exemplo 2:
             int v[10] = {12, 4, 5, 78, -4, 18, 542, 0, 45, -72};
             int m = v[0];
             // Por hipotese dizemos que o maior valor é o primeiro e preservamos

             int i;
             for(i = 0; i < 10; i++){
                 m = maior(m, v[i]);
                 // A variável campeão 'm' participa de todas iterações
        */
    }
    printf("O maior valor no vetor: %d\n", v[0]);
    /* Exemplo 2:
     printf("O maior valor no vetor: %d\n", m);
    */

    return EXIT_SUCCESS;
    /* Finaliza o programa */
}

Obervação: O conteúdo no interior de /* */ são comentários e outra possibilidade de resolução (existem muitas análogas)

 

 

2 horas atrás, giu_d disse:

Sinceramente não entendi o q o @AnsiC explicou

Ainda estou exercitando a didática da coisa; ainda sim estou impressionado, culpo o meu 'português ingenuo' ^_^!

 

Boa Sorte

~~ / ~~

 

Postado

@AnsiC Cara! Devo confessar q estava um tanto qto incomodado com a forma como fiz esse exercício. Agora, vendo a sua resolução, abandonei de vez a forma como fiz :)

  • Membro VIP
Postado

@AnsiC, por que:

3 horas atrás, AnsiC disse:

unsigned item = 0; /* Contador de iterações while */

 

funciona?

 

 

E por que não seria assim:

unsigned int item = 0; /* Contador de iterações while */

?

adicionado 13 minutos depois

@rsd_17, resumidamente seu código poderia ficar assim:

#include <stdio.h>

int maior(int a, int b ) {    
    return a > b ? a : b; 
} 

int main() {    
    int v[10] = {12, 4, 5, 78, -4, 18, 542, 0, 45, -72};
    int i, m;
    
    m=v[0]; //inicializa o maior com o primeiro
    for(i=1; i<10; i++) { //do segundo em diante
      m=maior(m,v[i]); //m é comparado com o próximo, e o próprio m receba o então maior
    } //no final, m terá o maior
    
    printf("O maior valor no vetor: %d\n",m);
    
    return 0; 
}

 

  • Obrigado 1
  • Amei 1
Postado
40 minutos atrás, Simon Viegas disse:

E por que não seria assim:


unsigned int item = 0; /* Contador de iterações while */

?

Quando omitido o tipo, o modificador adota o padrão int. Escrever desta forma é tão ingênuo que ninguém mais se arisca faze-lo ou relembrar tal conceito. Porém obrigado!

 
40 minutos atrás, Simon Viegas disse:

funciona?

Claro que funciona! Ocorreu-lhe que não?! [Pesquisou onde] pelo motivo já citado.

 

 

Boa Sorte

~~ / ~~

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!