elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  suma de los elementos mayores a 100 en un array c/Recursividad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: suma de los elementos mayores a 100 en un array c/Recursividad  (Leído 2,993 veces)
adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
suma de los elementos mayores a 100 en un array c/Recursividad
« en: 19 Octubre 2018, 21:35 pm »

Hola! tengo que hacer este ejercicio y no entiendo por qué no suma nada, cuando compilo me da como resultado 1. si me pueden ayudar por favor!!

/*5: Realizar una función recursiva que permita calcular la suma de los valores de un vector de 20 posiciones,
 donde cada valor es un entero. Los valores que deben sumarse son solamente aquellos que sean mayores a 100.*/
 #include<stdlib.h>
 #include <stdio.h>
 #include<time.h>
 
 int suma(int vector[], int i);
 
 int main(){
    int vector[20], i=0;
    
     srand(time(0));
    
    for(i=0; i<20; i++){
       
       vector= 1+ rand() % 300;
       
    }
    for (i=0;i<20; i++){
    printf("\n%i", vector);}
    
 printf("\nEl resultado de la suma es: %i", suma(vector, i));
 return 0;   
 }
 
 int suma(int vector[], int i){
    int  sumar=0;
    
    for (i=0;i<20; i++){
    
    if(i<100){
       return 1;
    }
    else if (i>100){
       
       return sumar= suma(vector,i-1) + vector [i-1];
    }
    }
 }


En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: suma de los elementos mayores a 100 en un array c/Recursividad
« Respuesta #1 en: 19 Octubre 2018, 23:47 pm »

Código
  1. #include<stdlib.h>
  2. #include <stdio.h>
  3. #include<time.h>
  4.  
  5. int suma(int vector[], int i);
  6.  
  7. int main()
  8. {
  9. int vector[20], i=0;    
  10. srand(time(0));
  11.    for(i=0; i<20; i++){
  12.       vector[i]= 1+ rand() % 300;
  13.    }
  14.    for(i=0;i<20; i++){
  15.     printf("\n%i", vector[i]);
  16. }
  17.    printf("\nEl resultado de la suma es: %i", suma(vector, i));
  18. return 0;  
  19. }
  20.  
  21. int suma(int vector[], int i)
  22. {
  23. if(i==-1)
  24. return 0;
  25. else{
  26. if(vector[i]>100){
  27. return vector[i]+suma(vector,i-1);
  28. }
  29. else{
  30. return suma(vector,i-1);
  31. }
  32. }
  33. }


En línea

7w7
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: suma de los elementos mayores a 100 en un array c/Recursividad
« Respuesta #2 en: 20 Octubre 2018, 17:04 pm »

Voy a añadir algo aparte de la excelente respuesta de Beginner Web,
Este es la parte del código que está mal:
Código
  1. for(i=0; i<20; i++){
  2.  
  3.       vector= 1+ rand() % 300;
  4.  
  5. }
  6.  
La razón por que no funciona es por que no estás accediendo a ningún elemento del vector, se te olvido colocar los [] en la variable vector.
De paso te recomiendo que no aglutines los elementos en funciones, funciones de control, etc.
Código
  1. for(i = 0; i < 20; ++i)
  2. {
  3.    //foo
  4. }
  5.  
En línea

adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: suma de los elementos mayores a 100 en un array c/Recursividad
« Respuesta #3 en: 20 Octubre 2018, 21:07 pm »

gracias chicos voy a probar lo que me sugieren!!
En línea

adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: suma de los elementos mayores a 100 en un array c/Recursividad
« Respuesta #4 en: 20 Octubre 2018, 21:17 pm »

Código
  1. #include<stdlib.h>
  2. #include <stdio.h>
  3. #include<time.h>
  4.  
  5. int suma(int vector[], int i);
  6.  
  7. int main()
  8. {
  9. int vector[20], i=0;    
  10. srand(time(0));
  11.    for(i=0; i<20; i++){
  12.       vector[i]= 1+ rand() % 300;
  13.    }
  14.    for(i=0;i<20; i++){
  15.     printf("\n%i", vector[i]);
  16. }
  17.    printf("\nEl resultado de la suma es: %i", suma(vector, i));
  18. return 0;  
  19. }
  20.  
  21. int suma(int vector[], int i)
  22. {
  23. if(i==-1)
  24. return 0;
  25. else{
  26. if(vector[i]>100){
  27. return vector[i]+suma(vector,i-1);
  28. }
  29. else{
  30. return suma(vector,i-1);
  31. }
  32. }
  33. }



Gracias!! anduvo perfecto pero me podrias explicar por qué se pone en el caso base  if i== -1?? eso no lo entiendo y despues al final por que se pone un else antes del return suma. gracias!!
En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: suma de los elementos mayores a 100 en un array c/Recursividad
« Respuesta #5 en: 20 Octubre 2018, 21:33 pm »

Código
  1. int suma(int vector[], int i)//Esto recorre el arreglo desde la utima posicion
  2. {
  3. if(i==-1)//<-Es el caso base que indica que el vector esta vacio y ya no tiene que
  4.                    //volver a llamar a la funcion recursiva
  5.                   //y empezar a retornar todos los valores obtenidos en cada llamada recursiva
  6. return 0;
  7. else{
  8. if(vector[i]>100){
  9. return vector[i]+suma(vector,i-1);
  10. }
  11. else{
  12. return suma(vector,i-1);
  13. }
  14. }
  15. }

Tambien podias haberlo hecho a la inversa

Código
  1. int suma(int vector[], int i)//Esto recorre el arreglo desde la primera posicion
  2. {
  3. if(i==20)//<<-Se termino de recorrer el vector, se detienen las llamadas recursivas
  4. return 0;
  5. else{
  6. if(vector[i]>100){
  7. return vector[i]+suma(vector,i+1);
  8. }
  9. else{
  10. return suma(vector,i+1);
  11. }
  12. }
  13. }
« Última modificación: 20 Octubre 2018, 21:45 pm por Beginner Web » En línea

7w7
adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: suma de los elementos mayores a 100 en un array c/Recursividad
« Respuesta #6 en: 20 Octubre 2018, 21:40 pm »

int suma(int vector[], int i)
{
   if(i==-1)//<<--Es el caso base que indica que el vector esta vacio y ya no tiene que volver a llamar a la funcion recursiva y empezar a retornar todos los valores obtenidos en cada llamada recursiva
      return 0;
    else{
       if(vector>100){
          return vector+suma(vector,i-1);
       }
       else{
          return suma(vector,i-1);
      }
   }
 }


gracias!!! entendi perfecto
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] Función que suma números positivos mayores a 32 bits. v1.2
Scripting
0x0309 1 4,466 Último mensaje 14 Abril 2009, 23:39 pm
por M a t t
Puntero a elementos de array
Programación C/C++
Riki_89D 2 2,769 Último mensaje 26 Mayo 2010, 21:32 pm
por 08l00D
[Ruby] Sumar elementos de un array
Scripting
ka0s 2 8,803 Último mensaje 25 Noviembre 2013, 20:32 pm
por ka0s
Array elementos repetidos
Programación C/C++
LGG 1 2,938 Último mensaje 5 Mayo 2015, 17:32 pm
por eferion
suma de los elementos encima de la diagonal principal en c
Programación C/C++
cable 1 8,172 Último mensaje 21 Noviembre 2016, 18:32 pm
por Kenji-chan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines