Ir ao conteúdo
  • Cadastre-se
rsd_17

C maior entre dois inteiros

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

~~ / ~~

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 :)

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

~~ / ~~

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×