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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  URGENTE ayuda arreglo c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: URGENTE ayuda arreglo c++  (Leído 3,674 veces)
sabar

Desconectado Desconectado

Mensajes: 15


Ver Perfil
URGENTE ayuda arreglo c++
« en: 25 Noviembre 2014, 17:17 pm »

Código
  1. #include<iostream>
  2. #include <string.h>
  3. #include<stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.           char frase[30];
  9.           int tam,i;
  10.           bool band= true;
  11.           char resp[20];
  12.           cout<<"ingresa la frase: ";
  13.           gets(frase);
  14.           tam=strlen(frase)-1;
  15.           while(i<tam&&band){
  16.           if(frase[i]==frase[tam]){
  17.            i++;
  18.            tam--;
  19.           }else{
  20.           band= false;
  21.           }
  22.           }
  23.           if(i>tam){
  24.    strcpy(resp,"si es palindromo");
  25.    }else{
  26.    strcpy(resp,"no es palindromo");
  27.    }
  28.    cout<<resp;
  29. }
  30.  


ya lo modifique pero como hago para que me salga bien si es o no palindromo


« Última modificación: 26 Noviembre 2014, 01:47 am por sabar » En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ayuda arreglo c++
« Respuesta #1 en: 25 Noviembre 2014, 17:49 pm »

No deberias invertir la cadena y luego comparar si la cadena invertida es igual que la original?

Si son iguales entonces si es palindromo.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ayuda arreglo c++
« Respuesta #2 en: 25 Noviembre 2014, 18:02 pm »

Lo primero sería ver si es palíndroma, precisamente con el algoritmo que tienes, que es correcto.
Pero en vez de hacer el cout: en caso de que no se cumpla la igualdad en algún momento, poner una variable booleana (declarada antes que el bucle, e igualada a true), a false.

De ese modo, en el momento en que encuentre una letra que no corresponda, ya sabrá que la frase no es palíndroma.

Eso sí, el cout lo pondrías al final, según sea el valor de la variable booleana.
En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ayuda arreglo c++
« Respuesta #3 en: 25 Noviembre 2014, 21:59 pm »

Bueno, hay formas de invertir una cadena entera, pero asumo que esto es un ejercicio, no otra cosa.

Tu bucle está mal enfocado, en lugar de intentar averiguar si una palabra es un palindromo, deberías intentar demostrar que no lo es.

Me explico... la situación es sencilla. Tienes el string de caracteres, tienes la longitud de la palabra, y puedes comparar los caracteres... estupendo.

Pues entonces, haz que el bucle avise de que no existe una coincidencia. Es decir: si no es palindromo.

Compara los caracteres por parejas, y abandona el bucle en el mismo momento en que no haya una coincidencia.

Declara una variable bool que sea "true" indicando que es palíndromo, y que solo pase a false si dentro del bucle no se cumple alguna de las comparaciones, luego una vez que has salido del bucle puedes mostrar el resultado.

La diferencia puede parecer trivial, pero implica una forma de abordar el problema que debes de tener en cuenta, y es que debes de intentar siempre que el programa haga el mínimo esfuerzo posible.

Claro, podemos comprobar todas las letras, y si son iguales decir que es palindromo, pero lo contrario tiene la ventaja de que si en la primera pasada no hay coincidencia, podemos salir inmediatamente del bucle sin necesidad de comprobar el resto.

Esto en una palabra de 5, 10 o 12 caracteres es irrelevante, pero si abordamos un caso similar, donde haya cientos, o miles de casos la cuestión ya no es tan simple, porque el programa debe de intentar siempre "atajar" los problemas lo mas rápido posible y con el menor uso posible de recursos. Bueno, no siempre se consigue, pero al menos intentarlo.

Es un poco como la "política" a la hora de comprobar una condición que contiene comparadores lógicos como && or !! de poner primero el mas simple, ya que el programa entonces si el primer caso no se cumple, no comprueba nada mas ahorrando tiempo y recursos.

A todo esto, si no me equivoco mucho (y si lo estoy que me corrijan) no es necesario declarar el #include<string.h> porque la biblioteca string forma parte de iostream.

Igualmente, puedes averiguar la longitud de un string sin necesidad de usar otras bibliotecas usando el método string::size();

Así en este caso, podrías usar

Código:
tam = frase.size();

En lugar de

Código:
tam = strlen(frase);

Ni que decir, que como te han señalado es posible invertir directamente la cadena usando algo como:

Código:
tekst = string ( tekst.rbegin(), tekst.rend() );

Pero claro, este no es el propósito del ejercicio
En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ayuda arreglo c++
« Respuesta #4 en: 25 Noviembre 2014, 22:49 pm »

Igualmente, puedes averiguar la longitud de un string sin necesidad de usar otras bibliotecas usando el método string::size();

No es una string, es un arreglo.

En cualquier caso y resivando el código, pides una frase, y utilizas el operador >> de cin. Eso solo te dará una palabra.
En línea

sabar

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: ayuda arreglo c++
« Respuesta #5 en: 26 Noviembre 2014, 01:26 am »

No es una string, es un arreglo.

En cualquier caso y resivando el código, pides una frase, y utilizas el operador >> de cin. Eso solo te dará una palabra.

ENTONCES COMO PUEDO HACER PARA QUE ME LEA TODA LA ORACION CREO QUE ES CON gets PERO NO SE COMO SE UTILIZA
En línea

zShackra

Desconectado Desconectado

Mensajes: 59


Ver Perfil WWW
Re: ayuda arreglo c++
« Respuesta #6 en: 26 Noviembre 2014, 04:36 am »

ENTONCES COMO PUEDO HACER PARA QUE ME LEA TODA LA ORACION CREO QUE ES CON gets PERO NO SE COMO SE UTILIZA


Aún no me he decidido por aprender C++ pues aún sigo con C, pero tengo entendido que con la función cin.getline() lo puedes hacer.

Por cierto, esas librerías que incluyes creo que son una mezcla de librerías de C y C++... ¿en qué lenguaje estás programando?...

P.D.: gets() no debería ser usada, fue removida y reemplazada por gets_s() en el estándar C11.
En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ayuda arreglo c++
« Respuesta #7 en: 26 Noviembre 2014, 22:20 pm »

ENTONCES COMO PUEDO HACER PARA QUE ME LEA TODA LA ORACION CREO QUE ES CON gets PERO NO SE COMO SE UTILIZA


Creas una variable de típo string, por ejemplo "entrada"

Luego sustituyes "cin" por "Getline (cin, entrada);

Al final obtienes toda la cadena introducida, incluyendo espacios hasta el fin de línea.

lo he reformado un poco (bastante)... pero a ver si entiendes como lo hago

Código:
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main(){
           string entrada;
           bool band= true;
           cout<<"ingresa la frase: ";
           getline (cin, entrada);
           char frase[entrada.size()+1];
           strcpy(frase, entrada.c_str());
           int tam = entrada.size();
           for (int i=0; i<tam; i++){
                if (frase[i] != frase[tam-i-1]) band = false;
                }

    if (band) cout << "si es palindromo";
    if (!band) cout << "no es palindromo";

    }

Quizás lo mas "exótico" es como se convierte el string de entrada en un array de caracteres (además del tamaño justo). Claro, si no te convence se puede hacer fácilmente una función para eso.

Algo interesante sería que pensaras que estrictamente hablando, un programa que comprueba frases palindromas debería de funcionar convirtiendo antes todo el texto a mayúsculas o minúsculas, porque la comprobación entre "A" y "a" te daría falso, y lo mismo para acentos (aunque no podrás usarlos en windows a menos que uses clocale)

Edito: Ahora que lo pienso un poco (que bruto que soy a veces) en realidad no necesitas hacer una comprobación de todo el arreglo, solo desde el principio hasta la mitad, ya que al comparar la primera con la última, la segunda con la penúltima, etc... a partir de la mitad del arreglo, estás comprobando de nuevo lo mismo.
« Última modificación: 27 Noviembre 2014, 00:14 am por Orubatosu » En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ayuda][c++]ordenar arreglo
Programación C/C++
dragon_hack 4 3,413 Último mensaje 31 Julio 2010, 21:20 pm
por Littlehorse
ayuda codigo de arreglo
Programación C/C++
nevfuck 3 3,209 Último mensaje 1 Octubre 2010, 03:22 am
por leogtz
Arreglo AYUDA!
Programación C/C++
JoseCheO 5 2,301 Último mensaje 10 Noviembre 2011, 01:43 am
por JoseCheO
ayuda en arreglo c++
Programación C/C++
sabar 0 1,247 Último mensaje 1 Diciembre 2014, 02:25 am
por sabar
AYUDA!!! validar DNI en arreglo bidimencional
Programación C/C++
cristianf1hlm 1 1,561 Último mensaje 21 Febrero 2016, 19:48 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines