como soluciono estos ejercicios-c++

Publicado en 'Programación' por ZeNdO, 30 Ago 2011.





  1. ZeNdO

    ZeNdO Miembro nuevo

    Registro:
    5 Abr 2011
    Mensajes:
    5
    Likes:
    0




    como hallo el algoritmo y pseudocodigo de estos ejercicios(c++):cray:



    1)Si dos números son dispositivos calcule su producto, en caso contrario calcule su suma.
    2) Sin usar estructuras repetitivas, olea 5 números y determine el menor.
     


  2. latincorsario

    latincorsario Miembro de bronce

    Registro:
    16 Oct 2010
    Mensajes:
    1,379
    Likes:
    172
    numeros dispositivos?
     
  3. lokito100

    lokito100 Miembro frecuente

    Registro:
    27 Feb 2010
    Mensajes:
    234
    Likes:
    12
    Haber recordando maso seria ... (No tengo ningún para programa en C++ para ver si corre)
    y entiendo que numeros dispositivos son numeros POSITIVOS osea mayores a 0

    ejercicio1)

    #include <iostream>

    void_leer
    int &num1, &num2
    {
    cout<<"Ingrese primer numero"
    cin>>(num1)

    cout<<"Ingrese segundo numero"
    cin>>(num2)

    void_proceso
    int num1, num2, &resul

    if (num1>0 && num2>0)
    resul= num1*num2;
    else
    resul=num1+num2
    }

    void_mostrar
    int num1 num2 resul

    {
    cout<<("El resultado es " <<resul<<endl;
    }
    void_main
    {
    leer int num1 num2
    proceso int num1 num2 resul
    mostrar resul
    }


    ejercicio 2)


    Si no usas repetitvas usaras selectivas :p

    void_leer{
    int menor (int, int, int, int, int)
    int a, b, c, d, e;

    cout<<"Ingrese 5 numeros\n";
    cin>>a>>b>>c>>d>>e;

    m=menor (a, b, c, d, e );

    cout<<"el menor es : <<m<<endl;

    cin.ignore(); return 0;

    int menor (int a, int b, int c, int d, int e)

    {
    int m

    if (a < b)
    if (a < c)
    if (a < d)
    if (a < e)
    m=a;

    este falta terminar....

    return m;



    }

     
    Última edición: 30 Ago 2011
    A Jefer le gustó este mensaje.
  4. ElpirataRata

    ElpirataRata Miembro maestro

    Registro:
    14 Feb 2007
    Mensajes:
    385
    Likes:
    17
    en c no se la verdad pero en java usarias metodos recursivos..
    escribe bien tu problema...
     
  5. johannAV

    johannAV Miembro frecuente

    Registro:
    1 Mar 2011
    Mensajes:
    69
    Likes:
    4
    ¿números dispositivos?

    Te quiero ayudar pero el termino "números dispositivos" no parece coherente.
    mmm... dudo que sea esa la respuesta.
     
  6. lokito100

    lokito100 Miembro frecuente

    Registro:
    27 Feb 2010
    Mensajes:
    234
    Likes:
    12
    Bro, en la cita parece que yo afirme eso, puse "entiendo" , algo que suponia :risota: salu2!
     
  7. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. Lo idóneo serìa que intentes hacerlo tú primero y cuando te encuentres atascado en algo recurrir a un foro para solicitar apoyo, previo posteo de tu avance, así los foreros pueden detectar tu error y de esa manera no sólo tú aprendes sino todos.
    Por otro lado, para el primer ejercicio, desconozco que existan números dispositivos. Debes postear tu problema de manera coherente y clara. Me imagino que te referías a números positivos, de ser así te propongo la siguiente solución:
    Código:
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    int main()
    {
       int num1, num2;
       cout << "Primer numero : ";
       cin >> num1;
       cout << "Segundo numero: ";
       cin >> num2;
       // Verificar si ambos son positivos
       if (num1 > 0 && num2 > 0)
          cout << endl << "El producto es: " << num1 * num2 << endl;
       else
          cout << endl << "La suma es: " << num1 + num2 << endl;
       return EXIT_SUCCESS;
    }
    De igual manera para el segundo ejercicio debes indicar que tipo de números se leerán, es decir, enteros o de coma flotante. Asumiré que se trata de enteros:
    Código:
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    //Prototipo
    int getMenor(const int x, const int y);
    int main()
    {
       int a, b, c, d, e;
       int menor;
       // Leer los 5 números
       cout << "Primer numero : ";
       cin >> a;
       cout << "Segundo numero: ";
       cin >> b;
       cout << "Tercer numero : ";
       cin >> c;
       cout << "Cuarto numero : ";
       cin >> d;
       cout << "Quinto numero : ";
       cin >> e;
       menor = getMenor(a, b);
       menor = getMenor(menor, c);
       menor = getMenor(menor, d);
       menor = getMenor(menor, e);
       cout << endl << "El menor es: " << menor << endl;
       return EXIT_SUCCESS;
    }
    // Función menor: Devuelve el menor de 2 números pasados como argumentos
    int getMenor(const int x, const int y)
    {
       return x < y ? x : y;
    }
    Hubiera sido muy sencillo meter todo en un array y hacer la lectura y comparaciones mediante un for pero ya que se excluye dicha solución entonces no queda más que hacer las comparaciones por pares con ayuda de una función.

    Recuerda intentar hacerlo primero tú mismo.
    Un saludo.
     
    A lokito100 le gustó este mensaje.
  8. lokito100

    lokito100 Miembro frecuente

    Registro:
    27 Feb 2010
    Mensajes:
    234
    Likes:
    12
    eduar2083 , No me acordaba como obtener el menor en c , gracias...
     
  9. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    No es C, es C++.

    En C se utiliza:
    scanf para leer desde teclado y equivale al objeto cin de C++.
    printf para escribir en la pantalla y equivale al objeto cout de C++.

    Un saludo.
     
  10. lokito100

    lokito100 Miembro frecuente

    Registro:
    27 Feb 2010
    Mensajes:
    234
    Likes:
    12
    se xD es que , andaba en el cel y como cambie de teclado virtual no encontraba el "++" , te mando un Mp , tengo una consulta de bAse de datos... salu2
     
  11. CompuXtreme

    CompuXtreme Miembro maestro

    Registro:
    15 Ago 2011
    Mensajes:
    690
    Likes:
    200
    muchachos saber programar no quiere decir que el programa funcione, sino que ademas debe ser lo mas optimo posible.

    te djo la logica:

    1.
    void main()
    {
    int Nro1,Nro2,Resul;
    printf("ingrese el Nro 1:");
    cin>>Nro1;
    printf("ingrese el Nro 2:");
    cin>>Nro2;
    if (Nro1>0 && Nro2>0)
    Resul=Nro1*Nro2;
    else
    Resul=Nro1+Nro2;
    printf("El resultado es: %d",Resul);
    }

    2.
    void main()
    {
    int I, Nro,Menor=MAXINT;

    for (I=0;I<5;i++)
    {
    printf("Ingrese Nro %d:",I);
    cin>>Nro;
    if (Nro<Menor)Menor=Nro;
    }
    printf("El numero menor es: %d",Menor);
    }

    Explicaciones:
    printf(): escribe un msje en pantalla
    %d: cuando deseas escribir un nro entero en pantalla
    %f: cuando deseas escribir un nro real en pantalla
    cin>> lee un nro o una cadena, funcion similar al gecth, sin embargo deberas crear tus funciones de lectura tanto de cadenas como de nros, ya que si lees un nro pero x error ingresas un caracter (letra), ocurrira un error.
     
    Última edición: 1 Set 2011
  12. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    De acuerdo contigo, pero debes hacer que tu programa funcione sino de nada sirve.

    Una de las condiciones era no aplicar bucles para el segundo ejercicio pero aún asi tu programa está pésimamente mal e inteligible, lo digo en buen plan.

    Uno de los grandes errores que cometen los principiantes de C/C++ es no saber diferenciar un lenguaje del otro y lo que es peor, hacen una mezcla sin sentido de ambos cuando no se requiere. Tenemos un ejemplo en el post anterior.
    Voy a hacerlo en C estándar de tal forma que se vea la diferencia entre un lenguaje y otro, vale decir que la solución en C++ está más arriba.
    Ejercicio 1:
    Código:
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
       int num1, num2;
       printf("Primer numero : ");
       fflush(stdout);
       scanf("%d", &num1);
       printf("Segundo numero: ");
       fflush(stdout);
       scanf("%d", &num2);
       /* Verificar si ambos son positivos */
       if (num1 > 0 && num2 > 0)
          printf("\nEl producto es: %d\n", num1 * num2);
       else
          printf("\nLa suma es: %d\n", num1 + num2);
       return EXIT_SUCCESS;
    }
    Ejercicio 2:
    Código:
    #include <stdio.h>
    #include <stdlib.h>
    /* Prototipo */
    int getMenor(const int x, const int y);
    int main(void)
    {
       int a, b, c, d, e;
       int menor;
       /* Lectura */
       printf("Primer numero : ");
       fflush(stdout);
       scanf("%d", &a);
       printf("Segundo numero: ");
       fflush(stdout);
       scanf("%d", &b);
       printf("Tercer numero : ");
       fflush(stdout);
       scanf("%d", &c);
       printf("Cuarto numero : ");
       fflush(stdout);
       scanf("%d", &d);
       printf("Quinto numero : ");
       fflush(stdout);
       scanf("%d", &e);
       /* Proceso */
       menor = getMenor(a, b);
       menor = getMenor(menor, c);
       menor = getMenor(menor, d);
       menor = getMenor(menor, e);
       /* Salida */
       printf("\nEl menor es: %d\n", menor);
       return EXIT_SUCCESS;
    }
    /* Función getMenor: Devuelve el menor de 2 números pasados como argumentos */
    int getMenor(const int x, const int y)
    {
       return x < y ? x : y;
    }
    
    Un saludo.
     
  13. lokito100

    lokito100 Miembro frecuente

    Registro:
    27 Feb 2010
    Mensajes:
    234
    Likes:
    12
    en el 2do ejercicio menciono sin bucles...
     
  14. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    NO soy un experto en C o C++ pero otra posible solucion sin utilizar los bucles propios del lenguaje algo mas generica, es utilizando recursividad mediante un array de datos donde se puede sacar el menor numero.

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    /* Prototipo */
    int getMenor(int numero[],int i_min,int menor,int i_max);
    int menor_num(int numero[]);
    
    int main(void)
    {
       int numero[5];
       /* Lectura */
       printf("Primer numero : ");
       fflush(stdout);
       scanf("%d", &numero[0]);
       printf("Segundo numero: ");
       fflush(stdout);
       scanf("%d", &numero[1]);
       printf("Tercer numero : ");
       fflush(stdout);
       scanf("%d", &numero[2]);
       printf("Cuarto numero : ");
       fflush(stdout);
       scanf("%d", &numero[3]);
       printf("Quinto numero : ");
       fflush(stdout);
       scanf("%d", &numero[4]);
       /* Salida */
       /*Solamente cambiar el nombre del array segun sea el caso*/
       printf("\nEl menor es: %d\n", menor_num(numero));
       system("pause");
    
       return EXIT_SUCCESS;
    }
    /* Función getMenor: Devuelve el menor de 2 números pasados como argumentos */
    
    int menor_num(int numero[]){
        return getMenor(numero,0,numero[0],sizeof(numero)/sizeof(int));
    }
    
    int getMenor(int numero[],int i_min,int menor,int i_max)
    {
        if(i_min == i_max-1){
            return menor;
        }else{
            i_min = i_min + 1;
            if(numero[i_min]<menor){
                menor =  numero[i_min];
                getMenor(numero,i_min,menor,i_max);
            }else{
                getMenor(numero,i_min,menor,i_max);
            }
            
        }
    }
    
    PD. Podrias aclarar si no te piden utilizar bucles probios del lenguaje o te impiden generarlos aun con recursividad, si el caso es este ultimo entonces no te queda mas que las soluciones de arriva, pero por lo general solamente te restringen los bucles propios del lenguaje.
     
    Última edición: 4 Set 2011
    A eduar2083 le gustó este mensaje.
  15. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Haré unos pequeños cambios al programa de initiald para que funcione de manera correcta.

    -Se trata de código C, por tanto no soporta el header iostream de C++.
    -La función getMenor() tiene algunos fallos ya que sólo devuelve un valor para la primera condición y no hará recursión.

    Corregido en C estándar quedaría:
    Código:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define CANT 5
    
    int getMenor(int numeros[], int n);
    
    int main(void)
    {
       int numeros[CANT];
    
       printf("Primer numero : ");
       fflush(stdout);
       scanf("%d", &numeros[0]);
    
       printf("Segundo numero: ");
       fflush(stdout);
       scanf("%d", &numeros[1]);
    
       printf("Tercer numero : ");
       fflush(stdout);
       scanf("%d", &numeros[2]);
    
       printf("Cuarto numero : ");
       fflush(stdout);
       scanf("%d", &numeros[3]);
    
       printf("Quinto numero : ");
       fflush(stdout);
       scanf("%d", &numeros[4]);
    
       printf("\nEl menor es: %d\n", getMenor(numeros, CANT));
    
       return EXIT_SUCCESS;
    }
    
    int getMenor(int numeros[], int n)
    {
       int aux;
    
       if (n == 0)
          return numeros[0];
    
       aux = getMenor(numeros, n - 1);
    
       return aux < numeros[n] ? aux : numeros[n];
    }
    
    Un saludo.
     
    Última edición: 4 Set 2011
    A initiald le gustó este mensaje.
  16. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Excelente solucion seria otra alternativa de forma decreciente, En el caso de mi codigo en visual studio el tamaño del array lo toma correctamente pero en Dev C++ no, es asi que corregi mi codigo a esta nueva forma que soportan los dos. Si no detecta el numero de elementos para algunos pues simplemente se define como eduard lo hizo arriba y deberia funciona.

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    /* Prototipo */
    int menor_num(int numero[]);
    int getMenor(int numero[],int i_min,int menor,int i_max);
    
    
    int main(void)
    {
       int numero[5];
       /* Lectura */
       printf("Primer numero : ");
       fflush(stdout);
       scanf("%d", &numero[0]);
       printf("Segundo numero: ");
       fflush(stdout);
       scanf("%d", &numero[1]);
       printf("Tercer numero : ");
       fflush(stdout);
       scanf("%d", &numero[2]);
       printf("Cuarto numero : ");
       fflush(stdout);
       scanf("%d", &numero[3]);
       printf("Quinto numero : ");
       fflush(stdout);
       scanf("%d", &numero[4]);
       /* Salida */
       /*Solamente cambiar el nombre del array segun sea el caso*/
       printf("\nEl menor es: %d\n", menor_num(numero));
    //   system("pause");
    
       return EXIT_SUCCESS;
    }
    /* Función getMenor: Devuelve el menor de un array pasados como argumentos */
    
    int menor_num(int numero[]){
        return getMenor(numero,0,numero[0],[COLOR=Red]sizeof(numero)+1[/COLOR]);
    }
    
    int getMenor(int numero[],int i_min,int menor,int i_max)
    {
        [COLOR=Red]int aux;[/COLOR]
        if(i_min == i_max-1){      
           [COLOR=Red] aux = menor;[/COLOR]
        }else{
            i_min = i_min + 1;
            if(numero[i_min]<menor){
                [COLOR=Red]aux =  getMenor(numero,i_min,numero[i_min],i_max);  [/COLOR]
            }else{
     
                [COLOR=Red]aux = getMenor(numero,i_min,menor,i_max);[/COLOR]
            }
        }
       [COLOR=Red] return aux;[/COLOR]
    }
    
    PD. Se deberia poder editar los post libremente para no estar repitiendo las correcciones por lo menos en esta seccion.
     
    Última edición: 4 Set 2011
  17. CompuXtreme

    CompuXtreme Miembro maestro

    Registro:
    15 Ago 2011
    Mensajes:
    690
    Likes:
    200
    lo de estructuras repetitivas se me paso...

    otra forma ............

    int Menor=MAXINT;

    void LeeNro(int &Pos)
    {
    int Nro=0;
    printf("Ingrese el Nro %d:",Pos);
    scanf("%d",Nro);
    if (Nro<Menor)Menor=Nro;
    if (Pos++<6)LeeNro(Pos);
    }

    void main()
    {
    int Pos=1;
    LeeNro(Pos);
    printf("EL menor es:%d",Menor);
    }

    logicamente scanf y printf deben ser reemplazados x cin y cout, sin embargo como repito debes crear procedimientos para lectura de cadenas y nros para evitar errores.

    recordando c/c++
    que tiempos aquellos
     
  18. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Seria bueno que te bajes algún IDE en C/C++ para que corrobores y des una solución funcional; y así puedas aportar de una mejor forma.

    DevC++ es un IDE que utiliza el compitador MinGW o puedes utilizar NetBeans con cygwin como compilador, Visual Studio también es otra alternativa aun que en este ultimo, particularmente en el 2008 me acepto ciertas sintaxis que en otros IDE no.

    Link de DevC++

    http://www.bloodshed.net/dev/devcpp.html
     
    Última edición: 4 Set 2011
  19. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. Personalmente yo uso CodeBlocks y puedes descargarlo aquí, eliges la opción binaria y según tu plataforma.

    initiald te comento que DevC++ no recibe soporte hace varios años, espero te animes a cambiarte a CodeBlocks.

    Hace unas semanas comenté aquí algunas cosillas respecto a este IDE, su implementación y compilador.

    Existen muchos tutoriales y libros gratuitos en internet para aprender C/C++.

    Un saludo.
     
    Última edición: 5 Set 2011
    A initiald le gustó este mensaje.
  20. CompuXtreme

    CompuXtreme Miembro maestro

    Registro:
    15 Ago 2011
    Mensajes:
    690
    Likes:
    200
    solucion funcional nunca la voy a dar, estoy dando el 100% de la logica con un 90% de codigo fuente, ayudemos pero tampoco hay que darselo facil.... ;)