Autor
|
Tema: Practiquemos C++ (juntos) (Leído 17,967 veces)
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
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 am 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.714
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; for(i=1;i<=num;i++) if(isPnumber(i)) } 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= "); printf("Ingrese mes inicial m1= "); printf("Ingrese anio inicial a1= "); printf("Ingrese dia final d2= "); printf("Ingrese mes final m2= "); printf("Ingrese anio final 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 ); }
gracias por continuar con la linea y gracias por hacerme romper la cabeza je je lo necesitaba... salu2
|
|
|
En línea
|
|
|
|
micky123
Desconectado
Mensajes: 32
|
Bueno me toca proponer otro ejercicio: Encontrar numeros de 3 digitos, cuya suma del cubo de los digitos sea el numero de 3 digitos, mostrar los digitos: ejemplo: 153= 1 3+5 3+3 3espero haber sido claro . Extra Sin la intencion de molestar no c si pudieras resolver un ejercicio que hasta el dia de hoy no puedo resolverlo si me das opcion a planteartelo lo coloco... salu2
|
|
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
Ya me estaba olvidando de este post Encontrar numeros de 3 digitos, cuya suma del cubo de los digitos sea el numero #include <math.h> #include <stdio.h> int IsNumber(int num); int main() { int num; int i; printf("Ingrese numero (100-999): "); for(i=100;i<=num;i++) if(IsNumber(i)==i) } int IsNumber( int numero) { int i; int nums[3]; double sum=0; for (i=2;i>=0;i--) { nums [i ]=numero /pow(10,i ); nums[i]%=10; } for(i=0;i<3;i++) return sum; }
Ingrese numero (100-999): 999 ---- 153 370 371 407
Nuevo ejercicio:Desarrollar una función que permita insertar en una secuencia de dígitos los caracteres guión cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito. Si la cantidad de dígitos no fuera múltiplo de 8 se deberá adicionar ceros por la izquierda. Ejemplo: 472348237388539055823012 queda como 4723-4823 7388-5390 5582-3012. Sin la intencion de molestar no c si pudieras resolver un ejercicio que hasta el dia de hoy no puedo resolverlo si me das opcion a planteartelo lo coloco... Dale ponelo asi lo vemos, pero primero haz el ejercicio que te pase . 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.
|
|
|
micky123
Desconectado
Mensajes: 32
|
Hola de nuevo y gracias por continuar... mi respuesta a: Desarrollar una función que permita insertar en una secuencia de dígitos los caracteres guión cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito. Si la cantidad de dígitos no fuera múltiplo de 8 se deberá adicionar ceros por la izquierda. Ejemplo: 472348237388539055823012 queda como 4723-4823 7388-5390 5582-3012.#include <stdio.h> #include <conio.h> #include <string.h> void main(void) { char v[35]; int i, dim,f; clrscr(); v[dim+1]=v[dim]; for(f=dim;f>=1;f--) { v[f]=v[f-1]; } for(i=1;i<=dim;i++) { if(i%5==0) { v[dim+1]=v[dim]; for(f=dim;f>=i;f--) { v[f]=v[f-1]; } if(i%2==0) { v[i]=' '; } else { v[i]='-'; } } } for(i=1;i<=dim;i++) }
Bueno algo raro que pasa es que introduzco tus datos y me devuelve: 4723-4823 7388-5390 5582-3@
Porfa pido identificar mi error... gracias de antemano.
|
|
|
En línea
|
|
|
|
micky123
Desconectado
Mensajes: 32
|
El ejercicio q nunca pude resolver es:
Dado un numero x (puede ser de cualquier cantidad de digitos) hallar todas las posibles combinaciones entre sus digitos: ejemplo1: x=1234 la salida seria: 1234 1243 1342 2341 2421 ..... 123 132 213 231 321 312 .... 12 21 31 13 23 32 todas las posibles permutaciones; podria ser x=124 ó x=64875
espero haberme dejado entender... gracias de antemano salu2
|
|
|
En línea
|
|
|
|
ghastlyX
Ex-Staff
Desconectado
Mensajes: 1.900
|
Si te he entendido, es un simple backtracking muy sencillo de hacer. #include <iostream> #include <algorithm> #include <string> using namespace std; void rec(int p, string& s, string r) { if (p == s.size()) { do { cout << r << endl; } while (next_permutation(r.begin(), r.end())); return; } rec(p + 1, s, r); r.push_back(s[p]); rec(p + 1, s, r); } int main() { string s; cin >> s; sort(s.begin(), s.end()); rec(0, s, ""); }
Un saludo de ghastlyX
|
|
|
En línea
|
|
|
|
|
|