Practiquemos C++ (juntos)

Iniciado por micky123, 16 Febrero 2010, 02:46 AM

0 Miembros y 4 Visitantes están viendo este tema.

micky123

Hola a todos bueno estuve leyendo el post en los cuales participaban Leyer y Amerikano, muy bueno por cierto, la idea de practicar en conjunto resolviendo ejercicios que suben el nivel gradualmente me agrada, partiendo de su idea; espero que participenos.

Como hicieron con java, quisiera proponer resolver ejercicios en C++,partiendo de ejercicios simples para todos aquellos principiantes (me incluyo).

si les parece... Comienzo proponiendo un ejercicio basico:

1. Realizar un programa en el cual me permita introducir un numero y el programa debera de desplegar un mensaje si dicho numero es capicua o no...
  Ejemlpo:    x=12321   mensaje==>   Es capicua



AlbertoBSD

#1
Aquí esta el código

#include<stdio.h>

int main(int argc, char **argv) {
int numero,len,capicua,I;
char *cadena;
printf("Ingrese un numero: ");
scanf("%d",&numero);
cadena = (char*)calloc(18,sizeof(char));
snprintf(cadena,19,"%d",numero);
len = strlen(cadena);
capicua = 1;
I = 0;
if((len % 2) == 0) {
while(I <= (len/2)) {
printf("comparando %c , %c\n",cadena[I],cadena[len - I -1]);
if(cadena[I] != cadena[len - I -1]) {
printf("Saliendo del ciclo\n");
capicua = 0;
break;
}
I++;
}
}
else {
while(I < ((len-1)/2)) {
printf("comparando %c , %c\n",cadena[I],cadena[len - I -1]);
if(cadena[I] != cadena[len - I -1]){
printf("Saliendo del ciclo\n");
capicua = 0;
break;
}
I++;
}
}
if(capicua)
printf("Numero %d es capicua\n",numero);
else
printf("Numero %d NO es capicua\n",numero);

}


Lo he compilado con el gcc de devcpp



Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Littlehorse

#2
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;

int main()
{
string num;
cin>>num;

string num2 = string(num.rbegin(), num.rend());

if(num==num2)
cout<<""<<"Es capicua"<<endl;
else
  cout<<""<<"No es capicua"<<endl;
 
cin.get();
cin.get();
}
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

AlbertoBSD

#3
Littlehorse tu código es mucho mas sencillo que el mio y mas facil de entender, sin embargo es posible ingresar también letras, ese seria "Textos capicua" xDD

Edit
Agrego codigo mas reducido, con la idea de Littlehorse

#include<stdio.h>

int main(int argc, char **argv) {
int numero,len,capicua,I;
char *cadena1,*cadena2;
printf("Ingrese un numero: ");
scanf("%d",&numero);
cadena1 = (char*)calloc(18,sizeof(char));
snprintf(cadena1,19,"%d",numero);
len = strlen(cadena1);
cadena2 = (char*)calloc(len,sizeof(char));
I = 0;
while(I < len) {
cadena2[I] = cadena1[len -1 -I];
I++;
}
if(strcmp(cadena1,cadena2) == 0)
printf("Numero %d es capicua\n",numero);
else
printf("Numero %d NO es capicua\n",numero);

}


Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Littlehorse

Y bueno texto capicua sera entonces  :xD jaja.

Ahora en serio, validar el input son solo 2 lineas mas y prefiero dejarselo a micky123. La lógica seguirá siendo la misma.

No obstante, en tu código también se puede ingresar texto:

CitarIngrese un numero: AAAADDDD
Numero 2 es capicua

Para validarlo podes usar ctype o chequear los valores ascii. Igualmente en C la única forma de validar un input correctamente es leyendo el texto y parseando.

Y para calloc tenes que incluir stdlib.h.

Un saludo!


An expert is a man who has made all the mistakes which can be made, in a very narrow field.

AlbertoBSD

#5
Si se del stdlib.h sin embargo ahorita estoy en winsucks y si me lo permite con el gcc del devcpp

Ahora con tu comentario de texto en mi input, es cierto pasan cosas raras, de hecho:

scanf("%d",&numero);

scanf es el que impide la entrada de texto con el formato "%d"


Aun así no procesa el texto como parte de la entrada

Saludos



edit

¿El que contesta el ejercicio propone otro?

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Littlehorse

Claro pero a lo que iba es que el programa funciona igual. Es decir, no hay avisos que el input es invalido. Ese 2 puede ser un 2 o cualquier otro valor basura.
No me gusta scanf, pero igualmente devuelve valores para comprobar si el input fue correcto. No es de lo mejor pero tampoco esta mal si validas de esa forma.
Yo también estoy con devcpp ahora.

Un saludo

PD: Tambien falta string.h para strxxx, aunque es verdad, en este entorno ni siquiera se queja  ;D.
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

micky123

Hola a todos y gracias por continuar con el tema.
bueno mi respuesta al ejercicio q plantee seria:
#include<stdio.h>
#include<conio.h>

void main()
{
    int x,d,aux,i=1,nn=0;
    scanf("%d",&x);
    aux=x;
    while(x>0)
    {
          d=x%10;
          nn=(nn*i)+d;
          i=i*10;
          x=x/10;
     }
     if(nn==aux)
         printf("Es capicua");
     else
         printf("No es capicua");
}


bueno Anon gracias por responder primero, y bueno te tocaria proponer otro ejercicio(con la misma simplicidad  :) je je) gracias por continuar.

Littlehorse

#8
Antes que nada decidir si es C, C++ o ambos  :). Porque el código que pusiste vos (Y Anon tambien) es C, y en el hilo el titulo dice C++. Decidí vos que fuiste el que inicio el hilo.

Y por cierto, muy buena iniciativa. Siempre viene bien ponerse a hacer ejercicios.

Un saludo!

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

micky123

bueno gracias por continuar...
espero no ser cambiante pero agradeceria por que continuemos con C...

por que aun soy principiante y quiero practicar un poco...

propongan un nuevo ejercicio je je :)
Salu2