Que error tiene este codigo?

Iniciado por Mozzard, 30 Septiembre 2018, 21:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Mozzard

El objetivo de este programa es que de los 4 datos introducidos te devuelva el mas alto:

#include <stdio.h>
/*
Add `int max_of_four(int a, int b, int c, int d)` here.
*/
//a=0 b=1 c=2 d=3
int max_of_four(int a, int b, int c, int d){
   int array [4] = {a,b,c,d};
   int i=0,k=0,j=1,g;
   //i=0
   for (i;i<=4;i++){
       if(array[k]>array[j]){
           array[k]=g;
           k += 1;
       }else{
           array[j]=g;
           j += 1;
       }
   }
   return g;
   }
int main() {
   int a, b, c, d;
   scanf("%d %d %d %d", &a, &b, &c, &d);//input
   int ans = max_of_four(a, b, c, d);
   printf("%d", ans);
   
   return 0;
}
Programalo... sin miedo...

Mozzard

#1
Lo he modificado un poco aun asi no da el resultadoe esperado:

#include <stdio.h>
/*
Add `int max_of_four(int a, int b, int c, int d)` here.
*/
//a=0 b=1 c=2 d=3
int max_of_four(int a, int b, int c, int d){
   int array [4] = {a,b,c,d};
   int i=array[0],n=0;
   //i=0
   for (n;n<=4;n++){
       if(i<array[n]){
           i=array[n];
       }
   }
   return i;
   }
int main() {
   int a, b, c, d;
   scanf("%d %d %d %d", &a, &b, &c, &d);//input
   int ans = max_of_four(a, b, c, d);
   printf("%d", ans);
   
   return 0;
}
Programalo... sin miedo...

CalgaryCorpus

Mis comentarios al código mostrado:

Usa etiquetas Geshi de C o C++ para que aparezcan números de línea. Es más fácil comentar así

Haz que el ciclo llegue hasta 3. Cómo está visitas más allá del fin del arreglo.

Usa nombres de variables que ayuden a entender el código. Que es o que guarda "I"?

"i" debería ser el índice, pero usaste "n" para ese efecto.

Al compilador no le va a costar mas si usas variables con mejores nombres.

si "i" parte con el primer valor, es superfluo que el índice empiece en 0, hazlo partir en 1.

Aqui mi perfil en LinkedIn, invitame un cafe aqui

Beginner Web

Es mucho codigo lo que pusiste se resolvia mas usando un arreglo y sabiendo el tamaño del arreglo, recorrer el arreglo con un for y sacar el mayor con un if dentro del for y al final de la funcion retornar el mayor

de entrada max deberia valer lo que contiene la primera posicion del arreglo, y luego ir comparando elemento por elemento dentro del for con un

Si arreglo>max a max le asigno arreglo,  asi,

Tambien hay otra forma de hacerlo que es usando una variable bandera de tipo logica que hace esto para asignar el primer elemento a la variable max;

for(i=0;i<TAMARREGLO;i++){
if(bandera==true){
max=arreglo;
bandera=false;
}
else{
if(arreglo>max){
max=arreglo;
}
}

Espero haberte ayudado  ;-)
7w7