Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: espdante en 18 Agosto 2012, 23:54 pm



Título: problema con un ejercicio
Publicado por: espdante en 18 Agosto 2012, 23:54 pm
Que hay muy buenas, soy nuevo en este foro, y antes de nada, me presento. Me llamo Luis, tengo 26 años, soy tecnico informatico y estudio programacion en c++ a distancia que no dire el nombre de la pagina para no darles publicidad gratuita xd.

Despues de esta breve presentación, os pido ayuda para realizar un ejercicio, es decir que me deis orientacion ya que mañana es domingo y la verdad estoy muy pero muy saturado con el ejercicio y hasta que no me salga no me pienso ir a dormir xd. No quiero que me digais el programa esta mal y tienes que hacer esto o lo otro, si no que me digais la pregunta concreta que hago mas abajo, tengo claro que el ejercicio está mal y no está terminado, pero me gustaría ir ejecutandolo e ir viendo yo paso a paso por qué esta mal e ir arreglandolo.

Este es el ejercicio en cuestion: Hacer un programa que contenga una función con el prototipo bool aumento(char numero[10]);. La función debe incrementar el número pasado como parámetro en una cadena de caracteres de 9 dígitos. Si la cadena no contiene un número, debe devolver false, en caso contrario debe devolver true, y la cadena debe contener el número incrementado.

y esto es lo que llevo hasta ahora...

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool aumento (char numero[10])
  5. {
  6.                  int i;
  7. cout<<"Introducir el numero cifra a cifra:";
  8. for (i=0; i<9; i++)
  9. {
  10. cout<<"Cifra numero "<<i <<":";
  11. cin>>numero[i];
  12. }
  13. cout<<"La cifra es: ";
  14. for (i=0; i<9; i++)
  15. {
  16. cout<<numero[i];
  17. }
  18.  
  19. for(i=0; i<9;i++)
  20. {
  21. do
  22. {
  23. for (int x=9; x<0;x++)
  24. {
  25. if (numero [ x ] = 9)
  26. {
  27. numero [ x ] = 0;
  28. numero [ x-1 ] = numero [ x-1 ] + 1;
  29. }
  30. else
  31. {
  32. numero [ x ] = numero[ x ] + 1;
  33. }
  34.  
  35. }
  36. }
  37. while (numero[i]!=0);
  38. }
  39.  
  40. for (i=0; i<9; i++)
  41. {
  42. cout<<numero[i];
  43. }
  44. }
  45.  
  46. int main()
  47. {
  48.  
  49. }
El problema viene a la hora de llamar a la funcion aumento en el main. No se como hacerlo, mi profesor me dice que ponga aumento(aquí_le_pasas_la_variable);
Pero... que variable? he probado de todas las maneras que se me han ocurrido, creando un int (me dice que no es compatible con un bool), creando otro bool (con la misma respuesta)....

A ver si me podeis ayudar, porque me estoy desesperando y hasta el lunes no puedo contactar con mi profesor.
Un saludo y gracias.


Título: Re: problema con un ejercicio
Publicado por: avesudra en 19 Agosto 2012, 00:23 am
Mmm bienvenido al foro eso lo primero , para la proxima vez que postees pon el código bajo las etiquetas GeSHi que colorea el código , de momento la pongo yo:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool aumento (char numero[10])
  5. {
  6.   int i;
  7.   cout<<"Introducir el numero cifra a cifra:";
  8.   for (i=0; i<9; i++)
  9.   {
  10.      cout<<"Cifra numero "<<i <<":";
  11.      cin>>numero;
  12.   }
  13.   cout<<"La cifra es: ";
  14.   for (i=0; i<9; i++)
  15.   {
  16.      cout<<numero;
  17.   }
  18.   for(i=0; i<9;i++)
  19.   {
  20.      do
  21.      {
  22.         for (int x=9; x<0;x++)
  23.         {
  24.            if (numero [ x ] = 9)
  25.            {
  26.               numero [ x ] = 0;
  27.               numero [ x-1 ] = numero [ x-1 ] + 1;
  28.            }
  29.            else
  30.            {
  31.               numero [ x ] = numero[ x ] + 1;
  32.            }
  33.         }
  34.      }
  35.      while (numero!=0);
  36.   }
  37.   for (i=0; i<9; i++)
  38.   {
  39.         cout<<numero;
  40.   }
  41. }
  42.  
  43. int main()
  44. {
  45.  
  46. }
Ahora bien , lo que te dice tu profesor es lógico , deberias pedir el número en el main , y después pasarselo a la función como te dice el.La variable que tienes que pasarle es la que pidas en el main , que debe ser una cadena con diez carácteres.


Título: Re: problema con un ejercicio
Publicado por: espdante en 19 Agosto 2012, 02:22 am
perfecto muchas gracias por tu ayuda, en eso no habia caido... si es que estas no son horas para programar... jeje muchas gracias por la ayuda ya te comentare que tal me fue xd.


Título: Re: problema con un ejercicio
Publicado por: avesudra en 19 Agosto 2012, 02:24 am
perfecto muchas gracias por tu ayuda, en eso no habia caido... si es que estas no son horas para programar... jeje muchas gracias por la ayuda ya te comentare que tal me fue xd.
Me alegro , si tienes alguna otra duda no dudes en volver a comentar.

¡Un saludo!


Título: Re: problema con un ejercicio
Publicado por: espdante en 19 Agosto 2012, 17:33 pm
pues si sigo con dudas a ver esto es lo que modifiqué:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool aumento (char numero[10])
  5. {
  6. for(i=0; i<9;i++)
  7. {
  8. do
  9. {
  10. for (int x=9; x<0;x++)
  11. {
  12. if (numero[x] = 9)
  13. {
  14. numero[x] = 0;
  15. numero[x-1] = numero[x-1] + 1;
  16. }
  17. else
  18. {
  19. numero[x] = numero[x] + 1;
  20. }
  21.  
  22. }
  23. }
  24. while (numero[i]!=0);
  25. }
  26.  
  27. for (i=0; i<9; i++)
  28. {
  29. cout<<numero[i];
  30. }
  31. return 0;
  32. }
  33.  
  34. int main()
  35. {
  36. int i;
  37. char numero[10];
  38. cout<<"Introducir el numero cifra a cifra empezando por la izquierda:"<<endl;
  39. for (i=0; i<9; i++)
  40. {
  41. cout<<"Cifra numero "<<i+1 <<":";
  42. cin>>numero[i];
  43. }
  44. cout<<"La cifra es: ";
  45. for (i=0; i<9; i++)
  46. {
  47. cout<<numero[i];
  48. }
  49. aumento(numero[10]);
  50. cin.get();cin.get();
  51. }



El problema viene de que sigo sin poder llamar a la funcion en el main... me da error, que hago mal?


Título: Re: problema con un ejercicio
Publicado por: avesudra en 19 Agosto 2012, 21:19 pm
Yo lo tengo hecho pero paso de hacerte la tarea, porque por lo que se vé o no has atendido mucho en la clase o no te interesa, el fallo lo tienes en tropescientosmil lados pero en esa función es que debe de ser así:
Código
  1. aumento(numero);


Título: Re: problema con un ejercicio
Publicado por: espdante en 20 Agosto 2012, 00:29 am
te voy a decir unas cuantas cosas.
primero, no voy a clase lo hago a distancia (estudio en casa y no tengo clases), segundo, el ejercicio lo quiero hacer yo y no que me lo des tu, en ningun momento te pedi eso se ve que tu tampoco sabes leer y/o atender, tercero, para darme ese tipo de contestacion mejor no contestes, prefiero quedarme con la duda. Se ve que tu ya naciste sabiendo programacion y en lugar de decir pues mira tienes esto mal por esta cosa y por esto otro, vas a criticar y dartelas de que tu sabes mas que el otro. Prefiero seguir con mis tropecientos mil fallos, "gracias" por tu "ayuda".


Título: Re: problema con un ejercicio
Publicado por: avesudra en 20 Agosto 2012, 01:12 am
te voy a decir unas cuantas cosas.
primero, no voy a clase lo hago a distancia (estudio en casa y no tengo clases), segundo, el ejercicio lo quiero hacer yo y no que me lo des tu, en ningun momento te pedi eso se ve que tu tampoco sabes leer y/o atender, tercero, para darme ese tipo de contestacion mejor no contestes, prefiero quedarme con la duda. Se ve que tu ya naciste sabiendo programacion y en lugar de decir pues mira tienes esto mal por esta cosa y por esto otro, vas a criticar y dartelas de que tu sabes mas que el otro. Prefiero seguir con mis tropecientos mil fallos, "gracias" por tu "ayuda".
Vale me parece bien , pero es que esos fallos son de cajón , yo no nací sabiendo programación , pero ni fui a clase ni lo hice a distancia.No he dicho que te lo vaya a hacer , ni he intentado vacilarte aunque sientas eso, pero son fallos muy faciles que en clase ya sea a distancia o en persona supongo que daran las lecciones(por eso lo de se ve que no has atendido y/o interesado en la clase). Entiendo que te haya molestado por eso pido disculpas con mucha rabia porque no dejo de decir que todo lo que viene a continuación me ha costado mucho trabajo y muchos errores y en este foro ni en ningún otro verás post mios que digan que porqué una variable no está declarada, pero claro es muy dificil coger un libro , buscar en google... que gran trabajo eh , hago esto por pasión , si tu lo hicieses te aseguro que estarías como yo muchas veces hasta las claras del día leyendo una puñetera biblia de C para enterarme de como funciona , pero cuesta mucho trabajo leerse 1000 páginas y decenas de papers en inglés , prefiero poner un post y que esta gente me indique letra a letra lo que tengo que escribir , te pones así de exigente siendo el único que se ha ofrecido a ayudarte aunque ale no se ni porque lo hago pero ahí tienes.
En cuanto a las dudas ya que quieres que te diga donde están todos los errores, copio tu código lo pego en el compilador (que también es muy complicado leer esto siguiente)y me dice esto:
Código:
In function 'bool aumento(char*)':|
52|error: 'i' was not declared in this scope|
In function 'int main()':|
95|error: invalid conversion from 'char' to 'char*'|
95|error:   initializing argument 1 of 'bool aumento(char*)'|
||=== Build finished: 3 errors, 0 warnings ===|
El primer error , pues que la variable i no está declarada.
El segundo error, es que el compilador se vuelve loco por una barbaridad y no sabe ni lo que dice.
El tercer error cuando pasas un array de carácteres a una función , si ya está declarado no hace falta volver a redeclararlo por eso no puedes poner otra vez que el array es de diez espacios, por lo que no sería así:
Código
  1. aumento(numero[10]);
Si no así:
Código
  1. aumento(numero);
Pues la variable ya la has declarado y no necesitas volver a redeclararla.
Y en cuanto a la función , el algoritmo no sé si está bien pero se observan algunas errores garrafales como estos:
Código
  1. for (int x=9; x<0;x++)
Genera un bucle que no se ejecutará pues 'x' sin las comillas nunca será menor a cero pues es 9.
Código
  1. if (numero[x] = 9)
No se puede usar el operador de asignación para comparar se usa el '==' sin las comillas o sea quedaría así:
Código
  1. if (numero[x] == 9)
Y en cuanto a otras cosas es que tengas en cuenta , que los valores de los carácteres no son los mismos que los valores enteros , es decir , que el 9 en carácter ,es 57 en entero , aunque para eso se usan las comillas que sirven para transformarlo , entonces al tener una cadena de caracteres no puedes comparar con enteros , si no con carácteres de esta forma:
Código
  1. if (numero[x] == '9')
Con las comillas que lo que hacen es tranformar el 9 (o el caracter que sea) a 57 , o sea a su valor entero.
El algoritmo está mal ,¿también quieres que te diga lo que tienes mal y como ponerlo para que salga?


Título: Re: problema con un ejercicio
Publicado por: espdante en 20 Agosto 2012, 02:47 am
a ver chico, una cosa es que te guste y otra muy distinta que lo hagas por aprender algo, o al menos intentarlo, a ti te costara poco porque ya sabes o quizas te costo poco porque tu leiste un curso mejor o porque directamente te cuesta menos aprender... hay gente y gente a algunos les cuesta mas y a otros menos, no tienes por que dartelas de listo. ya te digo que a mi el mismo codigo que tengo en microsoft visual c++ no me da error y me ejecuta el codigo sin problema, solo me daba el error anterior.

que seas el unico que me ha contestado? eso no te da derecho a ir de... como decirlo sin que tu te molestes? da igual mejor no digo nada por lo mismo. Es mas que yo sepa no te he puesto un cuchillo en el cuello para que contestes es un foro! tu responde a lo que quieras.

Te ha sobrado todo lo que no era codigo, puede que me haya confundido pero ya te digo que no podia ejecutar el codigo por lo que no podia ver los errores y por mas que miraba, no lo encontraba, yo trabajo y solo puedo estudiar a estas horas en las que tengo sueño y no doy pie con bola. por lo que creo que esos errores como lo del 0 son pasables. Te crees que no he buscado por google? que no he intentado leer libros? pero da la casualidad que todos los libros que leo van dedicados a gente que sabe otro lenguaje y les cuesta menos asimilarlo. O eso o yo soy tonto. Pero vamos tranquilo que ya no vuelvo a preguntar, porque si por preguntar contestas asi...

Y no fijate prefiero quedarme con el ejercicio sin hacer a que me des la solucion. Gracias de nuevo.


Título: Re: problema con un ejercicio
Publicado por: rir3760 en 20 Agosto 2012, 03:26 am
da la casualidad que todos los libros que leo van dedicados a gente que sabe otro lenguaje y les cuesta menos asimilarlo.
En ese caso empieza con una aplicación enfocada en los conceptos generales de programación como PSeInt (http://pseint.sourceforge.net/). Una vez domines los fundamentos pasas a un lenguaje de propósito general como C++.

Un saludo


Título: Re: problema con un ejercicio
Publicado por: avesudra en 20 Agosto 2012, 03:37 am
Podrias haberlo puesto desde el principio , que no te daba los errores el compilador que has buscado en google etc etc porque adivino no soy , no soy alguien a quien le guste discutir y menos por tonterias así que si tu quieres queda todo olvidado. Y sí estoy en un foro y respondo porque no me gusta que la gente que empieza se estanque como yo (no quiere decir que me considere un listillo), pero además de que en ese momento me cogiste ya cabreado  hay mucha gente como tú pero que no busca , por eso lo de no buscar etc... Pero bueno sí comprendo que me haya pasado y que te hayas ofendido siendo las tantas de la noche harto de trabajar y que te diga esto.Mis disculpas y por mi queda todo olvidado.


Título: Re: problema con un ejercicio
Publicado por: espdante en 20 Agosto 2012, 13:07 pm
ok np yo tampoco tuve ayer mi mejor dia.
rir3760 ese programa... como que lo veo demasiado... facil, si yo el problema lo tengo con las funciones, que las veo un estorbo que no valen para nada y solamente ordenan el codigo a cambio de comerte el coco mas aun.
volviendo al tema... si pongo comillas el programa me marca error. y si quito el [10] tambien me marca error.

La cosa es que no tengo ni idea de por qué al ejecutar el progama me realiza bien el main hasta que llamo a la funcion. Una vez que llamo a la funcion la consola no hace nada, se queda quieta xd y no me marca ningun error.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool aumento (char numero[10]) /*Si quito este 10 me da error en la llamada a la funcion en el main*/
  5. {
  6. int i;
  7. cout<<endl;
  8. for (i=0; i<9; i++)
  9. {
  10. cout<<numero[i];
  11. }
  12. for(i=0; i<9; i++)
  13. {
  14. do
  15. {
  16. for (int x=9; x == 0; x++)
  17. {
  18. if (numero [x] == 9)
  19. {
  20. numero [x] == 0;
  21. numero [x-1] == numero[x-1] + 1;
  22. }
  23. else
  24. {
  25. numero [x] == numero[x] + 1;
  26. }
  27. }
  28. }
  29. while (numero [i] == 9);
  30. }
  31. return numero;
  32. }
  33.  
  34. int main()
  35. {
  36. int i;
  37. char numero[10];
  38. cout<<"Introducir el numero cifra a cifra empezando por la izquierda:"<<endl;
  39. for (i=0; i<9; i++)
  40. {
  41. cout<<"Cifra numero "<<i+1 <<":";
  42. cin>>numero[i];
  43. }
  44. cout<<"La cifra es: ";
  45. for (i=0; i<9; i++)
  46. {
  47. cout<<numero[i];
  48. }
  49. //hasta aqui lo hace bien, el resto no.
  50. aumento(numero);
  51. cout<<endl;
  52. for (i=0; i<9; i++)
  53. {
  54. cout<<numero[i];
  55. }
  56. }


Título: Re: problema con un ejercicio
Publicado por: avesudra en 20 Agosto 2012, 13:52 pm
Ahora mismo de sintaxis el código anda un poco chungo, y lo que está mal es el algoritmo dentro de la función , si no hace nada ni reacciona es que normalmente se crea un bucle infinito y si el programa termina del tirón y no da el resultado esperado es que está mal.Y como es al llamar a la función pues ese problema está en la función.Otra cosa el operador == que te dije es para comparar y el = para asignar no todos para lo mismo.Vamos ejecutando linea a linea , supongamos que hemos metido el 123456789.
Código:
Primera línea: Declaramos i
Segunda línea: Ponemos i en 0 y Mientras que i sea menor que nueve haz lo que esté entre llaves y aumenta i.
{
   Cuarta línea: Despliega los carácteres uno por uno. También puedes hacerlo así eh cout<<numero;
}
Sexta línea: Ponemos i en 0 y Mientras que i sea menor que nueve haz lo que esté entre llaves y aumenta i.
{
  Octava línea: hacer mientras numero en [i] sea igual que nueve en decimal no en carácter estás comprobando un número!!!.
 {
   Décima linea: x es igual que 9 , mientras que equis sea igual que 0 o sea nunca haz lo que esté entre llaves y aumenta i , esto  no se ejecuta nunca.
 }
}
Hasta aquí creo que puedes comprender que sale de todos los bucles sin ejecutar nada.
Para lo que te digo de comparar los carácteres y eso te lo explico mejor por aquí:
El 9 en carácter no es el 9 en número
El 9 en carácter equivale a 57 en número.
Esto te ayudará a entenderlo mejor:
(http://www.asciitable.com/index/asciifull.gif)