Foros del Web » Programación para mayores de 30 ;) » C/C++ »

2 consultas sobre funciones en C++

Estas en el tema de 2 consultas sobre funciones en C++ en el foro de C/C++ en Foros del Web. Buenas noches, bueno soy Coto y empece con el C++ hace un par de semanas, en realidad estuve más con Pascal, y bueno tengo 2 ...
  #1 (permalink)  
Antiguo 31/10/2012, 18:49
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 6 meses
Puntos: 10
Pregunta 2 consultas sobre funciones en C++

Buenas noches, bueno soy Coto y empece con el C++ hace un par de semanas, en realidad estuve más con Pascal, y bueno tengo 2 consultas sobre C++, espero puedan ayudarme y explicarlme en lo posible. La primera:

1- ¿Qué diferencia hay entre esto:

Código C++:
Ver original
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int cuadrado(int n){
  6.        return n*n
  7. }
  8. int main(){
  9.     return 0;
  10. }

Y esto:

Código C++:
Ver original
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int cuadrado(int);
  6.  
  7. int main(){
  8.     return 0;
  9. }
  10.  
  11. int cuadrado(int n){
  12.        return n*n
  13. }

Bueno eso sería la primera duda. La segunda duda:

2-
Resulta que estoy haciendo un programa que te calcula si una frase es palíndromo. En este caso el programa se divide en 4 secciones y 3 funciones (Luego pongo el código, para que me ayuden). La primera sección el usuario ingresa una frase por ejemplo: " a nita la v4a la ti n3'1a", luego se muestra la frase ingresada y el tamaño de esta. En este caso 35.
La segunda sección es declarar una variable y asignarle un valor que regresa la función "nuevoSize". Lo que hace es chequear en la frase ingresada la cantidad de letras que hay, en este caso 15. (Lo almaceno en la variable "id").
Entonces luego declaro una variable char texto[id]. La tercera sección es la que quiero saber como hacerla función (Por ahora la tengo en main) lo que hace es convertir la frase ingresada al inicio en solo letras, en este caso quedaría
texto[id] = "anitalavalatina"; con un tamaño de 15. Y la cuarta y última sección es chequear si texto[id] es palíndromo o no.

Bueno les dejo el código y la pregunta (Si leyeron lo de antes sabrán que es lo que pido).

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <string.h>
  6.  
  7. using namespace std;
  8.  
  9. bool palindromo(char texto[], int tama){
  10.     for(int x = 0; x < tama/2; x++)
  11.         if (texto[x] != texto[tama - x -1])
  12.             return false;
  13.     return true;
  14. }
  15.  
  16. int nuevoSize(char texto[], int tama){
  17.     int id = 0, x = 0;
  18.     while(x < tama){
  19.         if (isalpha(texto[x]))
  20.                 id++;
  21.         x++;
  22.     }
  23.     return id;
  24. }
  25.  
  26. int main()
  27. {
  28.     char frase[120];
  29.     int size;
  30.     cout << "Ingrese Texto: " << endl;
  31.     cin.getline(frase, 120, '\n');
  32.     size = strlen(frase);
  33.     system("CLS");
  34.  
  35.     cout << "Su Frase: " << endl << endl;
  36.     cout << frase << endl << endl;
  37.     cout << "Tamanio frase: " << size << endl << endl;
  38.  
  39.     //Calculamos la cantidad de elemento que debe contener la nueva cadena de caracteres
  40.     int id = nuevoSize(frase, size);
  41.  
  42.  
  43.     /* Esto es lo que quiero hacer pero me da error*/
  44.     //char texto [id] = convertirTexto(frase, size, id);
  45.     char texto[id];
  46.     /* *********** Comienzo Función ******************** */
  47.     //char convertirTexto(char frase, int size, int id)
  48.     int xx = 0;
  49.     //va recorriendo y si el caracter es una letra entonces se la añade a texto
  50.     for(int i = 0; i < size; i++)
  51.         if (isalpha(frase[i]) && xx < id)
  52.             {
  53.                 texto[xx] = tolower(frase[i]);
  54.                 xx++;
  55.             }
  56.         else if (xx >=id) break;
  57.  
  58.     /* *********** Fin Función ******************** */
  59.  
  60.     cout << "Su Frase Convertida: " << endl << endl;
  61.     cout << texto << endl << endl;
  62.     cout << "Tamanio Frase: " << id << endl << endl;
  63.  
  64.     if (palindromo(texto, id))
  65.         cout << "Su Frase si es Palindromo" << endl;
  66.     else
  67.         cout << "Su Frase no es Palindromo" << endl;
  68.  
  69.     getche();
  70.     return 0;
  71. }


El programa funciona perfectamente, pero tengo problemas al convertir lo que está en /* ************* */ en una función que devuelva un valor de tipo char en este caso haciendo que texto[id] = convertirTexto(char frase, int size int id).

Espero me ayuden gracias!
  #2 (permalink)  
Antiguo 31/10/2012, 18:56
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: 2 consultas sobre funciones en C++

Respondo tu primera duda en primer lugar que me dio flojera leer la otra lo que pasa es que al usar la primera forma tienes toooooooooodo el codigo que podria ser mucho antes del main que podria ser menos codigo y eso es un problema para estar revisando, en cambio la segunda forma esa declaracion de la funcion se llama prototipo y te permite saber que funciones tienes con que tipos de datos en los parametros y asi puedes ver el main rapidamente, si necesitas cambiar una funcion solo ves mas abajo del main y cambias, la segunda forma con prototipo es la manera mas eficiente de programar acostumbrate a usar los prototipos
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #3 (permalink)  
Antiguo 31/10/2012, 19:03
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: 2 consultas sobre funciones en C++

convertirTexto no existe como funcion, tienes que crear primero tu funcion
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #4 (permalink)  
Antiguo 31/10/2012, 19:03
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: 2 consultas sobre funciones en C++

Cita:
Iniciado por OscarMariano Ver Mensaje
Respondo tu primera duda en primer lugar que me dio flojera leer la otra lo que pasa es que al usar la primera forma tienes toooooooooodo el codigo que podria ser mucho antes del main que podria ser menos codigo y eso es un problema para estar revisando, en cambio la segunda forma esa declaracion de la funcion se llama prototipo y te permite saber que funciones tienes con que tipos de datos en los parametros y asi puedes ver el main rapidamente, si necesitas cambiar una funcion solo ves mas abajo del main y cambias, la segunda forma con prototipo es la manera mas eficiente de programar acostumbrate a usar los prototipos
Gracias Oscar, empezaré a usar prototipos entonces. No hay algún detalle más?
  #5 (permalink)  
Antiguo 31/10/2012, 19:04
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: 2 consultas sobre funciones en C++

Cita:
Iniciado por OscarMariano Ver Mensaje
convertirTexto no existe como funcion, tienes que crear primero tu funcion
q sonso eso era lo qeu querias hacer
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #6 (permalink)  
Antiguo 31/10/2012, 19:05
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: 2 consultas sobre funciones en C++

Cita:
Iniciado por OscarMariano Ver Mensaje
convertirTexto no existe como funcion, tienes que crear primero tu funcion
Esa es mi duda quiero crear la función "convertirTexto" a partir de lo que está entre

/* ******Comienza función ************/



/* ******Termina función ************ */

debiese devolver un valor char y asignarsela a la variable texto, pero siempre me marca error y no sé como retornarlo.
  #7 (permalink)  
Antiguo 31/10/2012, 19:06
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: 2 consultas sobre funciones en C++

Cita:
Iniciado por cotolon Ver Mensaje
Gracias Oscar, empezaré a usar prototipos entonces. No hay algún detalle más?
con respecto a esa duda pues me parece que no xD
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #8 (permalink)  
Antiguo 31/10/2012, 19:12
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: 2 consultas sobre funciones en C++

Estoy chekando tu codigo pero a ver creo que mas simple seria eliminar los espacios en blanco y luego compara el primer elemento con el ultimo del arreglo donde esta guardado, el problema de esto es que los arreglos puede guardar basura si no usas el espacio exacto y puede que bote algun error porque no primero pruebas solo con palabras y luego con oraciones
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #9 (permalink)  
Antiguo 31/10/2012, 19:14
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: 2 consultas sobre funciones en C++

Cita:
Iniciado por OscarMariano Ver Mensaje
Estoy chekando tu codigo pero a ver creo que mas simple seria eliminar los espacios en blanco y luego compara el primer elemento con el ultimo del arreglo donde esta guardado, el problema de esto es que los arreglos puede guardar basura si no usas el espacio exacto y puede que bote algun error porque no primero pruebas solo con palabras y luego con oraciones
haciendo eso tu unico problema seria los espacios en blanco y el tamaño del arreglo porque el algoritmo para ver si es palindromo ya estaria hecho
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.
  #10 (permalink)  
Antiguo 31/10/2012, 19:16
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: 2 consultas sobre funciones en C++

Cita:
Iniciado por OscarMariano Ver Mensaje
haciendo eso tu unico problema seria los espacios en blanco y el tamaño del arreglo porque el algoritmo para ver si es palindromo ya estaria hecho

Exacto ya está hecho el programa, bueno si podría contar los espacios, solo tendría que cambiar el isalpha por !isspace o algo así creo que se escribe.

Es que igual tengo esa duda, porque si después quiero hacer otro programa con una función que retorne una palabra o frase de tipo char no voy a saber como hacerlo porque me dará error todo el tiempo y no quiero usar mucho espacio en main

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Bueno ya lo solucioné, además de cambiar las funciones a prototipo, debía colocar un char* y no un char a la función declarada de arriba de main. El tema de la funcion convertirTexto era con un char *texto (un puntero), aunque dentro de la función aún tengo la duda de por qué para cambiar el valor de la variable texto[id] debo colocarlo como texto[xx] y no como *texto[xx], bueno dejo el código aquí:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <string.h>
  6.  
  7. using namespace std;
  8.  
  9. bool palindromo(char*, int);
  10. int nuevoSize(char*, int);
  11. void convertirTexto(char *, char*, int, int);
  12.  
  13. int main()
  14. {
  15.     char frase[120];
  16.     int size;
  17.     cout << "Ingrese Texto: " << endl;
  18.     cin.getline(frase, 120, '\n');
  19.     size = strlen(frase);
  20.     system("CLS");
  21.  
  22.     cout << "Su Frase: " << endl << endl;
  23.     cout << frase << endl << endl;
  24.     cout << "Tamanio frase: " << size << endl << endl;
  25.  
  26.     //Calculamos la cantidad de elemento que debe contener la nueva cadena de caracteres
  27.     int id = nuevoSize(frase, size);
  28.  
  29.     char texto[id];
  30.     convertirTexto(texto, frase, size, id);
  31.  
  32.     cout << "Su Frase Convertida: " << endl << endl;
  33.     cout << texto << endl << endl;
  34.     cout << "Tamanio Frase: " << id << endl << endl;
  35.  
  36.     if (palindromo(texto, id))
  37.         cout << "Su Frase si es Palindromo" << endl;
  38.     else
  39.         cout << "Su Frase no es Palindromo" << endl;
  40.  
  41.     getche();
  42.     return 0;
  43. }
  44.  
  45. bool palindromo(char texto[], int tama){
  46.     for(int x = 0; x < tama/2; x++)
  47.         if (texto[x] != texto[tama - x -1])
  48.             return false;
  49.     return true;
  50. }
  51.  
  52. int nuevoSize(char texto[], int tama){
  53.     int id = 0, x = 0;
  54.     while(x < tama){
  55.         if (!isspace(texto[x]))
  56.                 id++;
  57.         x++;
  58.     }
  59.     return id;
  60. }
  61.  
  62. void convertirTexto(char *texto, char frase[], int size, int id){
  63.     int xx = 0;
  64.     for(int i = 0; i < size; i++)
  65.         if (!isspace(frase[i]) && xx < id)
  66.             {   if (isalpha(frase[i]))
  67.                     texto[xx] = tolower(frase[i]);
  68.                 else    texto[xx] = frase[i];
  69.                 xx++;
  70.             }
  71.         else if (xx >=id) break;
  72. }

Última edición por cotolon; 01/11/2012 a las 09:19 Razón: Solucionado

Etiquetas: funcion, funciones, palindromo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:26.