Tema destacado: [Overclocking] Récords de overclock del foro
Autor
|
Tema: Practiquemos C++ (juntos) (Leído 4,501 veces)
|
micky123
Desconectado
Mensajes: 32
|
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
|
|
|
|
|
En línea
|
|
|
|
AlbertoBSD
Estudiante y
Colaborador
 
Desconectado
Mensajes: 1.955
Anonymous & Paranoid
|
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
|
|
|
|
« Última modificación: 16 Febrero 2010, 03:31 por Anon »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
 
Desconectado
Mensajes: 2.710
Nie Dam Sie
|
#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(); }
|
|
|
|
« Última modificación: 16 Febrero 2010, 03:35 por Littlehorse »
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
AlbertoBSD
Estudiante y
Colaborador
 
Desconectado
Mensajes: 1.955
Anonymous & Paranoid
|
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
|
|
|
|
« Última modificación: 16 Febrero 2010, 03:43 por Anon »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
 
Desconectado
Mensajes: 2.710
Nie Dam Sie
|
Y bueno texto capicua sera entonces  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: Ingrese 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!
|
|
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
AlbertoBSD
Estudiante y
Colaborador
 
Desconectado
Mensajes: 1.955
Anonymous & Paranoid
|
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
|
|
|
|
« Última modificación: 16 Febrero 2010, 03:59 por Anon »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
 
Desconectado
Mensajes: 2.710
Nie Dam Sie
|
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  .
|
|
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
micky123
Desconectado
Mensajes: 32
|
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.
|
|
|
|
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
 
Desconectado
Mensajes: 2.710
Nie Dam Sie
|
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!
|
|
|
|
« Última modificación: 16 Febrero 2010, 04:17 por Littlehorse »
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
micky123
Desconectado
Mensajes: 32
|
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
|
|
|
|
|
En línea
|
|
|
|
AlbertoBSD
Estudiante y
Colaborador
 
Desconectado
Mensajes: 1.955
Anonymous & Paranoid
|
LOL no me habia dado cuenta que el titulo dice "C++" xD, bueno acepto que me haga falta stdlib.h y string.h xD, en FreeBSD los tendría que poner a fuerza, pero "conio.h", micky123 no necesitas conio.h.
Ahora sobre ejercicios fáciles asi, pues no se me ocurren muchos pero ahi va uno:
Escribir un programa que lea un numero ROMANO en forma de cadena de caracteres y lo convierta en un numero Arábigo. Si ya esta repetido por ahi en las chinchetas propongan otro.
Saludos
|
|
|
|
« Última modificación: 16 Febrero 2010, 04:41 por Anon »
|
En línea
|
|
|
|
micky123
Desconectado
Mensajes: 32
|
Holas gracias por continuar y bueno dando solucion al ultimo ejercicio mi forma de resolverlo solo convierte un numero romano comprendido entre 0 y 399, seria asía:
/*Escribir un programa que lea un numero ROMANO en forma de cadena de caracteres y lo convierta en un numero Arábigo realizado por Micky123*/
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h>
void main(void) { char v[15]; int i=1, cont=0,na=0,dim; clrscr(); printf("Ingrse Numero Romano: "); fflush(stdin); fgets(v,15,stdin);
//cputs(v); dim=strlen(v); //mayusculas for(i=0;i<dim;i++) v=toupper(v);
for(i=0;i<dim;i++) if(v=='I') if(v[i+1]=='V') { na=na+4;i++;} else if(v[i+1]=='X') { na=na+9;i++;} else if(v[i+1]=='L') {na=na+49;i++;} else if(v[i+1]=='C') {na=na+99;i++;} else na++; else if(v=='V') na=na+5; else if(v=='X') if(v[i+1]=='L') {na=na+40;i++;} else if(v[i+1]=='C') { na=na+90;i++;} else na=na+10; else if(v=='L') na=na+50; else if(v=='C') na=na+100;
printf("\nEn arabigo es %d",na);
getch(); }
gracias y bueno proponiendo otro ejercicio(mm generacion de digitos) seria: generar los N numeros perfectos:
salu2
|
|
|
|
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
 
Desconectado
Mensajes: 2.710
Nie Dam Sie
|
micky123, usa las etiquetas Geshi para poner código, así es mas legible. generar los N numeros perfectos: #include <stdio.h> int isPnumber(int num); int main() { int num=0; int i=0; printf("Ingrese numero: "); scanf("%d", &num); for(i=1;i<=num;i++) if(isPnumber(i)) printf("%d es perfecto\n",i); getchar(); getchar(); } int isPnumber(int num) { int sum = 0 ; int i=0; for( i = 1; i<num; i++ ) if( num%i==0) sum+=i; if( sum == num ) return 1; else return 0; } Ingrese numero: 10000 6 es perfecto 28 es perfecto 496 es perfecto 8128 es perfecto
Nuevo ejercicio:Leer tres variables enteras A1, M1, D1, que representan una fecha, y otras tres A2, M2 y D2, que representan otra fecha. Luego informar la cantidad de días entre las dos fechas (respetando la cantidad de días que tiene cada mes y teniendo en cuenta los años bisiestos).
|
|
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
micky123
Desconectado
Mensajes: 32
|
ok Littlehorse gracias por la sugerencia, es que como soy nuevo en el foro me voy acostumbrando  ... salu2... resolviendo ejercicio. Probando geshi
|
|
|
|
|
En línea
|
|
|
|
micky123
Desconectado
Mensajes: 32
|
hola Litllehorse... bueno me costo mucho resolver este ejercicio je je... fue uno de mis ejercicios mas complejos, pero bueno al fin logre realizarlo... ahí va: #include <stdio.h> #include <conio.h> void main() { int d1,m1,a1,d2,m2,a2,d,db,ca; int mes[12],i; mes[1]=31; mes[7]=31; mes[2]=28; mes[8]=31; mes[3]=31; mes[9]=30; mes[4]=30; mes[10]=31; mes[5]=31; mes[11]=30; mes[6]=30; mes[12]=31; printf("Ingrese dia inicial d1= "); scanf("%d",&d1); printf("Ingrese mes inicial m1= "); scanf("%d",&m1); printf("Ingrese año inicial a1= "); scanf("%d",&a1); printf("Ingrese dia final d2= "); scanf("%d",&d2); printf("Ingrese mes final m2= "); scanf("%d",&m2); printf("Ingrese año final a2= "); scanf("%d",&a2); d=0;db=0; ca=a2-a1-1; d=d+ca*365; for(i=m1;i<=12;i++) d=d+mes[i]; if(m2>1) for(i=1;i<=m2-1;i++) d=d+mes[i]; d=d-d1+d2; if(d1%100==0) { if(a1%400==0) if(m1<=2) db=1; } else { if(a1%4==0) if(m1<=2) db=1; } for(i=a1+1;i<=a2;i++) { if(i%100==0) { if(i%400==0) db++; } else { if(i%4==0) db++; } } if(a2%100==0) { if(a2%400==0) { if(m2>2) { db++; } else { if(m2==2 && d2==29) db++; } } } else { if(a2%4==0) { if(m2>2) { db++;} else { if(m2==2 && d2==29) db++; } } } d=d+db; printf("Los dias entre la fecha 1 y la fecha 2 son= %d",d); getch(); } gracias por continuar con la linea y gracias por hacerme romper la cabeza  je je lo necesitaba... salu2
|
|
|
|
|
En línea
|
|
|
|
|
|