Vous êtes sur la page 1sur 23

C++ con Clase

Curso de C++
Curso de C++
Estilo: Normal Activar
Visitas desde 2000-09-09
Usuarios en lnea
Con Clase
C++
Win API 32
HTML y CSS
Grficos
MySQL
Artculos
Listas
<<
<
>
>>
Curso
Info
Bibliotecas
Tabla
Comentario
Introduccin
1 Toma de contacto
2 Tipos de variables I
3 Funciones I
4 Operadores I
5 Sentencias
6 Declaracin de variables
Declaracin de variables
mbitos
mbito de las variables
Enmascaramiento
Operador de mbito
Problemas resueltos 1 a 6
Ejemplo 6.1
Ejemplo 6.2
Ejemplo 6.3
Ejemplo 6.4
Ejemplo 6.5
7 Notacin
8 Cadenas de caracteres
9 Conversin de tipos
10 Variables II: Arrays
11 Objetos III: Estructuras
12 Objetos IV: Punteros 1
13 Operadores II
14 Oper III: Precedencia
15 Funcs II: valor y referencia
16 Variables V: Uniones
17 Variables VI: Punteros 2
18 Operadores IV
19 Definicin de tipos
20 Funciones III: ms cosas
21 Funciones IV: Sobrecarga
22 Operadores V: Sobrecarga
23 El preprocesador
24 Funciones V: Recursividad
25 Vbls VII: Almacenamiento
26 Espacios con nombre
27 Clases I: definiciones
28 Declaracin de una clase
29 Constructores
30 Destructores
31 El puntero this
32 Sistema de proteccin
33 Modificadores
34 Ms sobre las funciones
35 Operadores sobrecargados
36 Herencia
37 Funciones virtuales
38 Derivacin mltiple
39 Trabajar con ficheros
40 Plantillas
41 Punteros a miembros
42 Castings en C++
43 Manejo de excepciones
A Codificacin ASCII
B Palabras reservadas
C Bibliotecas estndar
D Trigrafos y smbolos alt.
E Streams
Problemas resueltos de captulos 1 a 6
^
Veamos ahora algunos ejemplos que utilicen los conocimientos que ya tenemos sobre C++.
Pero antes introduciremos, sin explicarlo en profundidad, dos elementos que nos permitirn que nuestros programas se comuniquen con nosotros. Se trata de la salida estndar,
cout y de la entrada estndar cin. Estos objetos nos permiten enviar a la pantalla o leer desde el teclado cualquier variable o constante, incluidos literales. Lo veremos ms
detalladamente en un captulo dedicado a ellos, de momento slo nos interesa cmo usarlos para mostrar o leer cadenas de caracteres y variables.
Nota: en realidad cout es un objeto de la clase ostream, y cin un objeto de la clase istream pero los conceptos de clase y objeto quedarn mucho ms claros en captulos
posteriores.
El uso es muy simple:
#include <iostream>
using namespace std;
cout << <variable|constante> [<< <variable|constante>...];
cin >> <variable> [>> <variable>...];
Veamos un ejemplo:
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << "la variable a vale " << a;
return 0;
}
Un mtodo muy til para cout es endl, que har que la siguiente salida se imprima en una nueva lnea.
cout << "hola" << endl;
Otro mtodo, este para cin es get(), que sirve para leer un carcter, pero que nos puede servir para detener la ejecucin de un programa.
Esto es especialmente til cuando trabajamos con compiladores como Dev-C++, que crea programas de consola. Cuando se ejecutan los programas desde el compilador, al
terminar se cierra la ventana automticamente, impidiendo ver los resultados. Usando get() podemos detener la ejecucin del programa hasta que se pulse una tecla.
A veces, sobre todo despus de una lectura mediante cin, pueden quedar caracteres pendientes de leer. En ese caso hay que usar ms de una lnea cin.get().
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << "la variable a vale " << a;
cin.get();
cin.get();
return 0;
}
Las lneas #include <iostream> y using namespace std; son necesarias porque las declaraciones que permiten el uso de cout y cin estn en una biblioteca externa.
Con estos elementos ya podemos incluir algunos ejemplos.
Te aconsejo que intentes resolver los ejemplos antes de ver la solucin, o al menos piensa unos minutos sobre ellos.
Ejemplo 6.1
Primero haremos uno fcil. Escribir un programa que muestre una lista de nmeros del 1 al 20, indicando a la derecha de cada uno si es divisible por 3 o no.
// Este programa muestra una lista de nmeros,
// indicando para cada uno si es o no mltiplo de 3.
// 11/09/2000 Salvador Pozo
#include <iostream> // biblioteca para uso de cout
using namespace std;
int main() // funcin principal
{
int i; // variable para bucle
for(i = 1; i <= 20; i++) // bucle for de 1 a 20
{
cout << i; // muestra el nmero
if(i % 3 == 0) cout << " es mltiplo de 3"; // resto==0
else cout << " no es mltiplo de 3"; // resto != 0
cout << endl; // cambio de lnea
}
return 0;
}
El enunciado es el tpico de un problema que puede ser solucionado con un bucle for. Observa el uso de los comentarios, y acostmbrate a incluirlos en todos tus programas.
Acostmbrate tambin a escribir el cdigo al mismo tiempo que los comentarios. Si lo dejas para cuando has terminado el programa, probablemente sea demasiado tarde, y la
mayora de las veces no lo hars. ;-)
Tambin es una buena costumbre incluir al principio del programa un comentario extenso que incluya el enunciado del problema, aadiendo tambin el nombre del autor y la
fecha en que se escribi. Adems, cuando hagas revisiones, actualizaciones o correcciones deberas incluir una explicacin de cada una de ellas y la fecha en que se hicieron.
Una buena documentacin te ahorrar mucho tiempo y te evitar muchos dolores de cabeza.
Ejemplo 6.2
Escribir el programa anterior, pero usando una funcin para verificar si el nmero es divisible por tres, y un bucle de tipo while.
// Este programa muestra una lista de nmeros,
// indicando para cada uno si es o no mltiplo de 3.
// 11/09/2000 Salvador Pozo
#include <iostream> // biblioteca para uso de cout
using namespace std;
// Prototipos:
bool MultiploDeTres(int n);
int main() // funcin principal
{
int i = 1; // variable para bucle
while(i <= 20) // bucle hasta i igual a 20
{
cout << i; // muestra el nmero
if(MultiploDeTres(i)) cout << " es mltiplo de 3";
else cout << " no es mltiplo de 3";
cout << endl; // cambio de lnea
i++;
}
return 0;
}
// Funcin que devuelve verdadero si el parmetro 'n' en
// mltiplo de tres y falso si no lo es
bool MultiploDeTres(int n)
{
if(n % 3) return false; else return true;
}
Comprueba cmo hemos declarado el prototipo de la funcin MultiploDeTres. Adems, al declarar la variable i le hemos dado un valor inicial 1. Observa que al incluir la
funcin, con el nombre adecuado, el cdigo queda mucho ms legible, de hecho prcticamente sobra el comentario.
Por ltimo, fjate en que la definicin de la funcin va precedida de un comentario que explica lo que hace. Esto tambin es muy recomendable.
Ejemplo 6.3
Escribir un programa que muestre una salida de 20 lneas de este tipo:
1
1 2
1 2 3
1 2 3 4
...
// Este programa muestra una lista de nmeros
// de este tipo:
// 1
// 1 2
// 1 2 3
// ...
// 11/09/2000 Salvador Pozo
#include <iostream> // biblioteca para uso de cout
using namespace std;
int main() // funcin principal
{
int i, j; // variables para bucles
for(i = 1; i <= 20; i++) // bucle hasta i igual a 20
{
for(j = 1; j <= i; j++) // bucle desde 1 a i
cout << j << " "; // muestra el nmero
cout << endl; // cambio de lnea
}
return 0;
}
Este ejemplo ilustra el uso de bucles anidados. El bucle interior, que usa j como variable toma valores entre 1 e i. El bucle exterior incluye, adems del bucle interior, la orden de
cambio de lnea, de no ser as, la salida no tendra la forma deseada. Adems, despus de cada nmero se imprime un espacio en blanco, de otro modo los nmeros
apareceran amontonados.
Ejemplo 6.4
Escribir un programa que muestre una salida con la siguiente secuencia numrica:
1, 5, 3, 7, 5, 9, 7, ..., 23
La secuencia debe detenerse al llegar al 23.
El enunciado es rebuscado, pero ilustra el uso de los bucles do..while.
La secuencia se obtiene partiendo de 1 y sumando y restando 4 y 2, alternativamente. Veamos cmo resolverlo:
// Programa que genera la secuencia:
// 1, 5, 3, 7, 5, 9, 7, ..., 23
// 11/09/2000 Salvador Pozo
#include <iostream> // biblioteca para uso de cout
using namespace std;
int main() // funcin principal
{
int i = 1; // variable para bucles
bool sumar = true; // Siguiente operacin es suma o resta
bool terminado = false; // Condicin de fin
do { // Hacer
cout << i; // muestra el valor en pantalla
terminado = (i == 23); // Actualiza condicin de fin
// Puntuacin, separadores
if(terminado) cout << "."; else cout << ", ";
// Calcula siguiente elemento
if(sumar) i += 4; else i -= 2;
sumar = !sumar; // Cambia la siguiente operacin
} while(!terminado); // ... mientras no se termine
cout << endl; // Cambio de lnea
return 0;
}
Ejemplo 6.5
Escribir un programa que pida varios nmeros, hasta que el usuario quiera terminar, y los descomponga en factores primos.
No seremos especialmente esplndidos en la optimizacin, por ejemplo, no es probable que valga la pena probar nicamente con nmeros primos para los divisores, podemos
probar con algunos que no lo sean, al menos en este ejercicio no ser una gran diferencia.
Piensa un momento en cmo resolverlo e intntalo, despus puedes continuar leyendo.
Lo primero que se nos ocurre, al menos a mi, cuando nos dicen que el programa debe ejecutarse mientras el usuario quiera, es implementar un bucle do..while, la condicin de
salida ser que usuario responda de un modo determinado a cierta pregunta.
En cada iteracin del bucle pediremos el nmero a descomponer y comprobaremos si es divisible entre los nmeros entre 2 y el propio nmero.
No podemos empezar 1, ya que sabemos que todos los nmeros son divisibles por 1 infinitas veces, por eso empezamos por el 2.
Pero si probamos con todos los nmeros, estaremos intentando dividir por todos los pares entre 2 y el nmero, y sabremos de antemano que ninguno de ellos es un factor, ya
que slo el 2 es primo y par a la vez, por lo tanto, podemos probar con 2, 3 y a partir de ah incrementar los factores de dos e dos.
Por otra parte, tampoco necesitamos llegar hasta el factor igual al nmero, en realidad slo necesitamos alcanzar la raz cuadrada del nmero, ya que ninguno de los nmeros
primos entre ese valor y nmero puede ser un factor de nmero.
Supongamos que tenemos en nmero 'n', y que la raz cuadrada de 'n' es 'r'. Si existe un nmero 'x' mayor que 'r' que es un factor primo de 'n', por fuerza debe existir un
nmero 'h', menor que 'r', que multiplicado por 'x' sea 'n'. Pero ya hemos probado todos los nmeros por debajo de 'r', de modo que si existe ese nmero 'h' ya lo hemos
extrado como factor de 'n', y si hemos llegado a 'r' sin encontrarlo, es que tampoco existe 'x'.
Por ejemplo, el nmero 257. Su raz cuadrada es (aproximada), 16. Es decir, deberamos probar con 2, 3, 5, 7, 11 y 13 (nuestro programa probar con 2, 3, 5, 7, 9, 11, 13 y
15, pero bueno). Ninguno de esos valores es un factor de 257. El siguiente valor primo a probar sera 17, pero sabemos que el resultado de dividir 257 por 17 es menor que
17, puesto que la raz cuadrada de 257 es 16.031. Sin embargo ya hemos probado con todos los primos menores de 17, con resultado negativo, as que podemos decir que
17 no es factor de 257, ni tampoco, por la misma razn, ningn nmero mayor que l.
Ya tenemos dos buenas optimizaciones, veamos cmo queda el programa:
// Programa que descompone nmeros en factores primos
// 26/07/2003 Salvador Pozo
#include <iostream> // biblioteca para uso de cout
using namespace std;
int main()
{
int numero;
int factor;
char resp[12];

do {
cout << "Introduce un nmero entero: ";
cin >> numero;
factor = 2;
while(numero >= factor*factor) {
if(!(numero % factor)) {
cout << factor << " * ";
numero = numero / factor;
continue;
}
if(factor == 2) factor++;
else factor += 2;
}
cout << numero << endl;
cout << "Descomponer otro nmero?: ";
cin >> resp;
} while(resp[0] == 's' || resp[0] == 'S');
return 0;
}
Vemos claramente el bucle do..while, que termina leyendo una cadena y repitiendo el bucle si empieza por 's' o 'S'.
En cada iteracin se lee un numero, y se empieza con el factor 2. Ahora entramos en otro bucle, este while, que se repite mientras el factor sea menor que la raz cuadrada de
numero (o mientras numero sea mayor o igual al factor al cuadrado).
Dentro de ese bucle, si numero es divisible entre factor, mostramos el factor, actualizamos el valor de numero, dividindolo por factor, y repetimos el bucle. Debemos probar
de nuevo con factor, ya que puede ser factor primo varias veces. Para salir del bucle sin ejecutar el resto de las sentencias usamos la sentencia continue.
Si factor no es un factor primo de numero, calculamos el siguiente valor de factor, que ser 3 si factor es 2, y factor + 2 en otro caso.
Cuando hemos acabado el bucle while, el valor de numero ser el del ltimo factor.
Puedes intentar modificar este programa para que muestre los factores repetidos en forma exponencial, en lugar de repetitiva, as, los factores de 256, en lugar de ser: "2 * 2 *
2 * 2 * 2 * 2 * 2 * 2", seran "2
8
".
Comentarios de los usuarios (63)
Arnaudh
2010-07-09 01:41:54
Una pregunta en el ejemplo 6.2 hay una parte que pone:
if(n % 3) return false; else return true;
No hay que saltar lnea obligatoriamente despus de un if?
Steven
2010-07-23 06:33:32
El salto de lnea no es obligatorio para ninguna sentencia. Indicamos la terminacin de una sentencia con un punto y coma, por lo que el salto de lnea no es necesario. De
hecho, podramos escribir casi todo el cdigo fuente en una misma lnea, si quisiramos. Por ejemplo,
bool MultiploDeTres(int n){if(n%3) return false; else return true;}
Obviamente, esto no es muy legible para nosotros, los programadores, y por tanto no es nada aconsejable escribir programas de esta manera.
Donde s es obligatorio realizar un salto de lnea es al terminar las directivas del precompilador (o preprocesador). Hablaremos ms de ellas en el captulo 23:
http://c.conclase.net/curso/index.php?cap=023#inicio Por ejemplo,
#include <iostream>
Lo siguiente sera un error:
#include <iostream> using namespace std;
El precompilador espera un salto de lnea para terminar cada una de sus directivas.
frn
2010-08-09 20:24:37
Una pregunta, en el ejemplo 6.5 hay una parte en que despues del bucle while anidado al bucle do while, dice
if (factor==2) factor++
else factor+=2
Porque se vuelve a repetir el bucle while anidado con los valores actualizados si la actualizacion de valores no esta dentro del bucle while?
Steven
2010-08-10 08:40:41
Hola frn,
Esa sentencia "if" s pertenece al cuerpo del bucle "while". Si quieres, te reescribo el bucle "while" para que veas el cdigo mejor:
while( numero >= factor*factor )
{
if( !(numero % factor) )
{
cout << factor << " * ";
numero = numero / factor;
continue;
}
if( factor == 2 ) factor++;
else factor += 2;
}
aaronmcresh
2010-08-13 03:18:31
Te complicaste al cuete con el ejemplo que hay que calcular +4 y -2 desde 1 hasta 23. Est bien que haya que manejar muchas frmulas, pero este cdigo arroja lo mismo sin
poner tanta complicadera!
# include
using namespace std; // inicio inclusion
int main () // principal
{
int a = 1; // nica variable en main
do // hacer
{
cout << a << " "; // que muestre a y un espacio
a += 4; // que haga la cuenta +4
cout << " " ; // que ponga espacio
a -= 2; // cuenta -2
cout << " " ; // espacio
}
while ( a <= 23 ); // condicin para terminar

cin.get(); // espere a pulsar tecla
cout << "pulse para terminar" ; // una chuchera
return 0;
}
mil gracias por el curso, sos un genio!
Me parece que ya estoy marcando un estilo de programacin!
PD: No s por qu pero cuando sale la vista previa me atraviesa barras donde hay comillas, esas barras no van.
b0ch0n
2010-09-06 19:51:24
Yo tambin dejo mi aporte
#include // biblioteca para uso de cout
using namespace std;
int main() // funcin principal
{
bool salir=false;//centinela o bandera del bucle
for(int i=1; !salir; i++)
{
if(i%2) cout<
Saludos desde Santa Fe-Argentina
Kiske
2010-12-14 18:18:48
Yo en el Ejemplo 6.4, lo hice de esta manera, el resultado es el mismo, pero lo hice de otra manera yo.
#include
using namespace std;
int main()
{
int i = 1;
while( i + 4 )
{
if( i == 1 )
{
cout << i;
cout << " ";
}
i += 4;
cout << i;
cout << " ";
if( i >= 23 ) break;
i -= 2;
cout << i;
cout << " ";
}
cin.get();
return 0;
}
Jos
2011-01-23 14:10:56
Hola,
Filicitaciones por el sitio y gracias por las clases de c++.
Bueno, tengo un problema, instal CodeBlocks y estoy haciendo los ejercicios con el el compilador GCC en Windows pero las tildes no me aparecen, aaprecen unos
caracteres extraos:
cout << "S"
aparece como S...
...no sabrs a quese deba esto? sera por el ANSI?
txesmi
2011-03-15 16:36:14
Enhorabuena por este excelente curso. Me est resultando muy ameno dar mis primeros pasos con C++.
No me he podido resistir al reto de modificar el ejemplo 6.5 y dibujar las potencias. He llegado a esto:
#include <iostream> // biblioteca para uso de cout
using namespace std;
int main()
{
int numero, factor, potencia, productoFactor;
char resp[12];
do {
cout << "Introduce un nmero entero: ";
cin >> numero;
factor = 2;
potencia = 0;
cout << 1;
while ( numero != 1 ) {
productoFactor = 1;
while ( !( numero % ( productoFactor * factor ) ) ) {
potencia ++;
productoFactor *= factor;
}
if ( potencia > 0 ) {
numero /= productoFactor;
cout << " * ";
cout << factor;
if ( potencia > 1 ) cout << "^" << potencia;
potencia = 0;
}
if(factor == 2) factor++;
else factor += 2;
}
cout << endl << "Descomponer otro nmero?: ";
cin >> resp;
} while(resp[0] == 's' || resp[0] == 'S');
return 0;
}
Salud!
Carlos
2011-03-28 23:54:53
queria preguntar, una vez desarrollado el macro, lo guardo como ".c" o como ".C". Ahora como es que hago correr los macros en los compiladores?
gracias
Steven
2011-03-29 03:01:29
Hola Carlos,
Una macro realmente es cdigo para el precompilador (o preprocesador) ya que usamos la directiva #define. Por lo tanto, el compilador jams llega a saber de tal macro, pero
s de su "contenido". Por lo tanto, puedes definir una macro donde quieras: ".h" o ".c", o ".cpp", si es C++. Por ejemplo,
// "main.cpp"
#define mayor(a,b) ((a) > (b) ? (a) : (b))
Para "invocar" o expandir una macro, lo hacemos como si fuera una funcin. Esto es,
int main()
{
cout << "Mayor de 10 y 13 es: "
<< mayor(10,13) << endl;
return 0;
}
Lo que realmente ocurre es que el precompilador expande la macro y bsicamente reescribe tu cdigo fuente para que el compilador pueda realizar su trabajo. Esto es lo que
ve el compilador:
int main()
{
cout << "Mayor de 10 y 13 es: "
<< ((10) > (13) ? (10) : (13)) << endl;
return 0;
}
Como puedes ver, la macro nunca llega al compilador, y por tanto ste nunca sabe que existe.
Hablamos de esto en el captulo 13: http://c.conclase.net/curso/index.php?cap=013#OP2_define
Espero haber aclarado la duda.
Steven
dehm
2011-05-06 22:38:24
He intentado hacer el ejercicio 6.1 sin mirar.
Aunque intua por donde iba la forma ms correcta de hacerlo, he querido enfocarlo de manera distinta, para experimentar ms cosas de lo aprendido hasta ahora. (de verdad
que es mi primer programa).
Pero algo no va bien.
Lo pongo por si alguien me quiere ayudar:
#include <iostream>
using namespace std;
int main()
{
short int x = 0;
char Divisible[] = " El nmero es divisible por 3";
char NoDivisible[] = " El nmero NO es divisible por 3";
while (x<20)
x++;
if (x%3 == 0)
{
cout << x << Divisible << endl;
}
else
{
cout << x << NoDivisible << endl;
}
return 0;
}
dehm
2011-05-06 22:53:21
Perdn.
Mi "aporte personal" era resolver el problema con "while", pero no haba llegado al ejercicio 2 dnde se resuelve de sta forma.
Esto me pasa por no mirar hasta el final antes de plantear las dudas :-(
dehm
2011-05-07 18:20:02
He resuelto el ejercicio 6.3 de sta forma, pero no s si es muy legible o aceptable en cuanto a la lgica o sintaxis.Qu opinis?
#include <iostream>
using namespace std;
int main()
{
short int x,y; // declaro las variables "x" y "y"
while (x<20) // qu pasa si x es menor que 20
{x++; // 1.-incrementa el valor de x en una unidad
while (y<x) // 2.-otro bucle que se ejecuta si y es menor que x
{ // empieza el sub-bucle
y++; // 2.2.- incrementa el valor de y en una unidad
cout << y << " "; // 2.1 saca el valor de y y un espacio
} // termino el sub-bucle
y=0; // pongo el valor de y a 0
cout << endl; // retorno de carro
} // 3.-vuelve a ejecutar la accin, hasta que x sea igual a 20
return 0;
}
Steven
2011-05-07 18:35:01
Hola David,
Te hago un anlisis del programa y te comento a medida que vaya viendo el cdigo fuente.
- Defines correctamente 'x' e 'y', pero al llegar al bucle 'while', date cuenta que 'x' NO tiene ningn valor conocido y por tanto no se trata de un valor vlido. En otras palabras,
'x' puede contener cualquier valor; a esto se le suele llamar "basura" y de aqu el lema: "basura que entra, basura que sale". Tu bucle 'while' puede o no funcionar debidamente.
La solucin es inicializar 'x' o asignar un valor inicial, antes de pasar al bucle 'while'. Por ejemplo,
int x=0;
- Tienes un problema similar con la variable 'y'. La defines correctamente, pero la usas sin haber dado un valor inicial. Seguramente, queras que fuese 0 (cero), inicialmente; o
sea,
y = 0;
while( y < x )
- Como deberas asignar el valor de 0 (cero) a 'y' antes del segundo bucle 'while', no necesitas la misma asignacin despus del bucle 'while'.
Por lo dems, todo bien :)
Hasta pronto,
Steven
dehm
2011-05-08 13:36:52
Muchas gracias! :-)
Hasta pronto
jadr
2011-06-02 20:28:35
Esta es una solucin para el ejemplo 6.4 usando el bucle while y viendo la lista de nmero a imprimir como 2 series intercaladas.
/* ********************
* Programa que imprime la secuencia:
* 1, 5, 3, 7, 5, 9, 7, ..., 23
*
* Se detiene en el 23
*
* 02/06/11 jadr
* ********************/
#include <iostream>
using namespace std;
// Prototipos:
// Varibles globales
int main()
{
int serieImpar=1, seriePar=5;
cout<<serieImpar<<" ,"<<seriePar;
serieImpar+=2;
seriePar+=2;
while (seriePar<=23)
{
cout<<" ,"<<serieImpar<<", "<<seriePar;
serieImpar+=2;
seriePar+=2;
}
cout<<endl;
return 0; //siempre hay que devolver algo
}
Angel
2011-06-08 02:29:36
El ultimo problema lo resolvi de la siguiente manera
// Descomprimir numeros en sus factores primos
// 06/06/2011 Angel Ortega
#include <iostream> // biblioteca para uso de cout
using namespace std;
int DescomponerFactoresPrimos(int n); // declaracion de la funcion que descompone los numeros
int main() // funcion principal
{
bool terminado = false; // variable para indicar si se termin de utilizar el programa
int i = 0; // numero que se va a descomponer
char resp[32]; // respuesta a la pregunta final
do { // bucle para la descomposicion de primos
system("CLS"); // limpiar la pantalla
cout<<"Introduzca el numero que desea descomponer en sus factores primos: ";
cin>>i; // obtener el numero
cout<<endl; // nueva linea
DescomponerFactoresPrimos(i); // funcion para descomponer el numero obtenido
cout<<"\n"<<"\n"<<"Desea continuar descomponiendo? (si/no): ";
cin>>resp; // obtener respuesta
} while((resp[0] == 's' || resp[0] == 'S')); // si la respuesta es si o por lo menos comienza con s continuar descomponiendo
cout<<endl; // nueva linea

system("PAUSE");
return 0;
}
int DescomponerFactoresPrimos(int n)
{
int x = 0; // exponente del factor primo

if(n==2 || n==3 || n==5 || n==7) {cout<<"Numero primo"; return 0;} // numeros primos de una cifra
for(int i = 2; i <= 9; i++) { // bucle para la division del numero en sus factores primos
if(n%i == 0) { // n divisible entre i
if(x > 0) cout<<" * "; // separador entre los factores primos
x = 1; // indicar el exponente del factor primo
cout<<i; // mostrar el divisor
n /= i; // dividir entre el factor primo
while((n%i == 0)) { // si n sigue siendo divisible entre i
n /= i; // dividir entre el factor primo
x++; // aumentar la exponente del factor primo
}
if(x>1) cout<<"^"<<x; // si hay exponente mostrarlo
}
}
if(x > 0 && n > 9) {cout<<" * "<<n; return 1;} // si el ultimo factor primo es mayor a 9 colocar el multiplicador para separarlo
if(x > 0 && n != 1) {cout<<n; return 1;} // si el numero final no es igual a 1 agregarlo
if(x == 0) {cout<<"Numero primo"; return 0;} // si no hay factores primos indicar que el numero es primo

return 0; // no hay factores primos (numero primo)
}
La verdad que me quedo demasiado largo y me gustaria saber si alguien sabe como simplificar lo que hice
Francisco Andres
2011-11-11 01:18:13
hola como estan? me gustara si me pudieran explicar que hace que en el ejempplo 6.3 tome esa forma.
saludos!!
Diego
2011-11-23 13:53:15
Para el 6.4:
int main()
{
int i;
for(i = 3; i <= 21; i += 2)
{
cout << i - 2 << " " << i + 2 << " ";
}
cin.get();
}
Julian Farfan
2012-03-03 00:10:37
Buenas Tardes, en el ejemplo 6.3 no entiendo como el bucle imprime el numero de esa manera teniendo en cuenta que el primer ciclo no hace nada solo es un contador y el
segundo ciclo lo que hace es imprimir 'y' & 'y' siempre esta cambiando de valor es decir como es que y imprime 1 luego vuelve imprime 1 2 me explico vuelve a imprimir el 1
cuando ya ha pasado a valer 2.
Julian Farfan
2012-03-03 00:12:14
#include<iostream>
using namespace std;
int main()
{

int x,y,z,a,b,c;

for(x=1;x<=20;x++)
{
for(y=1;y<=x;y++)
{
cout<<y<<" ";
}
cout<<endl;
}
system("pause");
}
Me refiero a y en el comentario anterior siguiendo este codigo.
Steven R. Davidson
2012-03-03 00:48:30
Hola Julin,
Si te fijas en el bucle anidado, 'y' va de 1 'x'. Por lo tanto, no siempre realizar la misma cantidad de iteraciones cada vez.
Si miras algunas iteraciones, vers lo que sucede:
x = 1
y = 1 <= y := 1 1
x = 2
y = 1,2 <= y := 1 2
x = 3
y = 1,2,3 <= y := 1 3
x = 4
y = 1,2,3,4 <= y := 1 4
...
x = 20
y = 1,2,3,4,...,19,20 <= y := 1 20
Espero haber aclarado esta duda.
Steven
Julian Felipe
2012-03-03 00:56:06
Muchisimas gracias por la pronta respuesta y quedo resuelta la duda.
Felicitaciones por este gran proyecto
Julian Farfan
2012-03-03 01:12:59
El Ejercicio de la secuencia 1,3,7,5,9 realize el codigo de la siguiente manera me podrian decir si es lo ideal puesto que a mi me dio el mismo resultado.
Julian Farfan
2012-03-03 01:13:40
#include<iostream>
using namespace std;
int main()
{
int x=1;
cout<<x<<",";
x+=4;
do{
x-=2;
cout<<x<<",";
x+=4;
if(x==23)
cout<<x<<".";
else
cout<<x<<",";
}while(x!=23);
system("pause");
}
Robert Casellas
2012-03-05 23:42:35
Hola a todos... Antes que nada, gracias por el curso. Est muy bien. Estoy realizando las prcticas sin copiar los ejemplos. cout me est dando algunos problemas, ya que
cuando le pongo carcteres acentuados no los reconoce como tal. Estoy usando Dev-C++ tal como nos aconsejais en otro apartado. Supongo que es algn tema de
configuraciones. Si podeis echarme un cable os estar muy agradecido.
JAVES
2012-03-06 07:25:23
hola soy nuevo en esto el ejemplo lo hice de la siguiente manera me gustara saber si es correcto.
#include <iostream>
using namespace std;
int main(){
int x=1;
while(x <= 20){
cout<<"numero "<< x <<((x % 3 ==0)?"si es divisible entre 3":" no es divisible entre 3")<<endl;
x++;
}
return 0;
}
Robert Casellas
2012-03-09 11:33:24
Ups!!!! disculpen, pero algo hice mal porque mi limo mensaje se triplic.... Disculpen las molestias.
Salvador Pozo
2012-03-12 17:16:47
Para Robert:
No te preocupes por la duplicidad de mensajes, ya he borrado dos de ellos.
En cuanto a tu consulta, el problema es que la consola usa una codificacin de caracteres diferente del que se usa en el GUI (la interfaz grfica).
Yo, al menos hasta ahora, no he sido capaz de corregir este problema, no he encontrado ningn parmetro de configuracin que permita hacerlo.
Hay varios mensajes en la lista de correo sobre este tema:
http://listas.conclase.net/?gid=2&mnu=mensajes&ord=fecha&msg=15058
Hasta pronto.
Salvador Pozo
2012-03-12 17:39:28
Para JAVES:
Todo correcto.
dani
2012-03-22 16:19:39
me podriais decir xk no funciona esto?
#include <iostream>
using namespace std;
int main()
[ char a = '\a';
cout << a;
return 0]
Salvador Pozo
2012-03-22 16:40:50
Hola, Dani:
Hay varios errores:
1) No es [, sino {
2) Falta un ";" al final de "return 0"
3) No es ], sino }
#include <iostream>
using namespace std;
int main()
{ char a = '\a';
cout << a;
return 0;}
Cesar Faundez
2012-04-20 22:46:57
El ejercicio 6.3 lo hice con switch pero al ver el resultado me parecio mas rapido y optimo lo que se hace aca. En el ejercicio 6.4 me quede con ese razonamiento lo hice con
for y tambien me funciono, aqui se los dejo...
#include <iostream>
using namespace std;
int main(){

int a = 1, b;

for(b=5;b<=23;b+=2){
cout << a << " ";
cout << b << " ";
a +=2;
}
cin.get();
return 0;
}
marcos
2012-08-16 19:08:19
Hola muchas gracias por el curso.
Queria hacer una pregunta, porque me esta costando muchisimo empezar, o sea entiendo las propuestas y hasta los ejemplos pero me sucede lo siguiente.
Abro el codebloks hago un proyecto nuevo, luego selecciono console aplication, y entro.
Pego un ejemplo cualquiera:
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << "la variable a vale " << a;
return 0;
}
y no anda, sale process returned 0 pres any key to continue.
Pegue el ejemplo que pegue, como si faltara algo, aclaro que descargue la version de 72 megas, en fin no puedo si quiera poner un hellow worl. me pueden orientar?
AndrsC
2012-08-27 17:08:46
Hola Marcos, la verdad el cdigo est bien, hace lo que creo que quieres que haga que es capturar una variable entera "a" y luego mostrarla en pantalla, pero hace falta que
agregues una pausa [system ("pause");] o [cin.get();] para que alcances a ver el resultado de tu cdigo despus de compilarlo... lo he hecho en "DEV C++" y anda bastante bien
mira:
#include <iostream>
using namespace std;

int main()
{
int a;
cout <<"Ingrese variable a:" <<endl;
cin >>a;
cout <<"La variable a vale:" <<endl <<a <<endl;
cin.get();
cin.get();
return 0;
Para este caso he tenido que ingresar dos veces "cin.get();" para simular la pausa Por qu dos veces?, no tengo ni idea pero funciona jajaja con [system ("pause";)] tienes el
mismo efecto... saludos :)
AndrsC
2012-08-27 17:12:43
Marcos, se me qued una "}" por fuera, pero es obvio que debes finalizar la funcin principal main con "}"... saludos ;)
Luis Rivero
2012-09-02 05:14:27
Una pregunta en el ejemplo 6.1 declaramos un bucle for de este modo:
for (i = 1; i <= 20; i++) // bucle for de 1 a 20
Por lo que entiendo tenemos la variable " i = 1 ", la condicin " si i es menor o igual a 20 " y lo que hacemos si es cierta la condicin " i++ " sumamos 1 a i, esto no hara que el
bucle comenzara en 2?, la variable i no debera inicializarse en 0 (cero) para que el primer valor que tome i sea 1?
Espero sus respuestas, gracias.
Steven R. Davidson
2012-09-02 18:14:22
Hola Luis,
En un bucle 'for', tenemos el siguiente esquema gramatical de su "cabecera":
for( <expr1>; <expr2>; <expr3> ) <sentencias>
La secuencia de la ejecucin de los pasos en un bucle 'for' es la siguiente:
1. Se evala <expr1>
2. Se evala <expr2> como condicional
3. Si <expr2> es falsa, nos salimos fuera del bucle 'for'
4. Si no, entonces,
5. Se ejecutan <sentencias>
6. Se evala <expr3>
7. Se evala <expr2> como condicional
8. Si <expr2> es falsa, nos salimos fuera del bucle 'for'
9. Si no, entonces,
10. Se ejecutan <sentencias>
11. Se evala <expr3>
y as sucesivamente. Visto de otra forma los pasos son:
<expr1>
<expr2>
<sentencias>
<expr3>
<expr2>
<sentencias>
<expr3>
...
<expr1> se evala una sola vez nada ms entrar en el bucle 'for'; <expr2> se evala siempre; si <expr2> es verdadera, se ejecutan <sentencias> del bucle; y <expr3> se
evala siempre, pero antes de comenzar la segunda iteracin.
Espero haber aclarado la duda.
Steven
Silver
2012-11-01 13:35:20
Hola con clase, este curso es asombroso! estoy entendiendo todo hasta ahora y lo mejor es que soy nuevo en esto de programar!. Aqui muestro como hice el ejercicio 6.3... si
es posible me gustaria saber si el comportamiento es el mismo al programa que hicieron uds.
#include <iostream>
using namespace std;
int main(); // funcion main
{
int j, i; // declaracion y valor de variables locales
j = 1;
{
i = 1;
cout << i; // muestro "i"
while (j <= 20) j++;
{
while (i != j) i++;
cout << " ";
if i == j; cout << endl;
else continue;
}
}
return 0;
}
Lupin
2012-11-22 19:09:13
Hola buenos dias. Al momento de hacer el ejercicio 6.2 en donde usamos una funcion para calcular si un numero es divisible por 3, se me vino una duda, declarar prototipo algo
asi "<tipo> funcion(int);" es valido, pero es valido delcarar definicion "<tipo> funcion(int){...}"?
Salvador Pozo
2012-11-23 18:58:31
Hola Lupin:
Si lo que preguntas es si es vlido definir una funcin sin identificar los parmetros, la respuesta es: depende.
Puedes usar parmetros sin nombre en las definiciones de funciones, pero debes tener en cuenta que no podrs usar esos parmetros en la funcin, ya que no hay forma de
referirse a ellos. Aunque tendrs que especificarlos en la llamada:
int funcion(int) {
return 32;
}
Esta funcin es vlida (y tonta, siempre devuelve 32). Para invocarla debers usar un parmetro entero, da igual el valor:
funcion(3);
Si lo que preguntas es si se pueden especificar las llaves {} en la declaracin del prototipo, la respuesta es: no. Si pones las llaves, aunque sean sin nada dentro, se considera
una definicin, no una declaracin, y por lo tanto, si intentas definirla ms tarde, el compilador se quejar diciendo que la funcin ya fue definida previamente.
Hasta pronto.
B. Amauri
2013-01-05 01:38:16
Hola a todos! Primero que nada quiero halagarlos por su labor , este curso est realmente bien diseado.
Deseo hacerles una consulta y mostrarles mi trabajo.
Consulta: Ya me registr en la lista de correos y me di de alta desde el correo, pero no s como comenzar a enviar correos para que me puedan responder. Me indican por
favor qu sigue?
Mi trabajo: As resolv el problema 6.4, qu opinan?.
// Mostrar una serie de nmeros del 1 al 23 sumando
// y restando 4 y 2 alternadamente
// B.Amauri 04/01/12
#include <iostream>
using namespace std;
// Esta funcin evala al nmero como par
bool EsPar(int n)
{
if(n%2) return false; else return true;
}
int main()
{
int x; // Variable que coresponde a la posicin en la serie
for(x=1;x<=23;x++)
{
// Los pares aumentan en 2
// Sumamos 1 por ser pares (2==1+"1")
if(EsPar(x)) cout<<x+3; // x+2+1
else cout<< x;
if(x<23) cout<<","<<" ";
}
cout<<endl;

return 0;
}
B. Amauri
2013-01-05 01:43:57
* Detalle: cree el archivo en 2013 no 2012
Daniel Andreani
2013-01-05 15:29:40
if(MultiploDeTres(i)) cout << " es mltiplo de 3";
bool MultiploDeTres(int n)
en el comando en el if el valor de la variable "i" lo transfiere a la variable "n"?
es decir en la primera pasada del programa i=1 cuando va a la definicion de la funcion "MultiploDeTres" transfiere el valor 1 a la variable "n"?
Gracias, y muy buena la respuesta por medio de e-mail
B. Amauri
2013-01-05 23:45:53
Hola de nuevo!
Dos interrogantes: por favor respondan a mi primer pregunta del comentario anterior, acerca de las listas de correo.
La pregunta nueva, necesito ayuda con el siguiente ejercicio, quiero que el programa reciba un nmero y me indique si este es primo o no, pero slo reconoce como no primos
auquellos que son mltiplos de 2, los dems nmeros los marca como primos:
// El siguiente programa contiene una funcin que evala un nmero como primo
// y genera una lista de los primeros n nmeros primos (el usuario introduce n)
// B. Amauri 05/01/13
#include <iostream>
using namespace std;
// Funcin que determina si ddo==dividendo es primo
bool EsPrimo(int ddo)
{
bool primo;
// Si nmero==1 es primo
if(ddo==1||ddo==2) primo=true;
else
{
int dsr; // dsr==divisor
for(dsr=2;dsr<ddo;dsr++)
{
// Si un nmero!=1 se puede dividir entre
//2<=n<nmero, no es primo
if(!(ddo%dsr)) primo=false; break;

// Si nmero!=1 no se puede dividir entre
//n<nmero^(1/2) sigue realizando iteraciones
if(ddo%dsr&&dsr^2<=ddo) continue;

// Si nmero!=1 no se puede dividir entre
//n>nmero^(1/2)entonces es primo
if(ddo%dsr&&dsr^2>ddo) primo=true; break;

continue;
}
}
return primo;
}
int main()
{
char salir;
do{
int x;
cin>>x;// El usuario introduce un nmero x

if(EsPrimo(x)) cout<<"Primo"<<endl;
else cout<<"No primo"<<endl;

cout<<"Desea salir? Y/N "<<endl;
cin>>salir;
}
while(salir!=89);
return 0;
}
Steven R. Davidson
2013-01-05 23:46:57
Hola B.Amauri,
Te comento algunas mejoras para el cdigo fuente.
Escribes:
if( n%2 ) return false; else return true;
Si reescribimos la sentencia para que el valor de retorno coincida con el valor booleano evaluado de la condicin, obtendremos esto:
if( n%2 != 0 ) return true; else return false;
Si analizamos el comportamiento, vemos que el valor de la condicin es igual que el retornado y por tanto, no necesitamos comprobar tal condicin. Por tanto, reescribiramos
la sentencia simplemente as:
return n%2 != 0;
Luego, escribes:
for( x=1; x<=23; x++ )
{
...
if(x<23) cout<<","<<" ";
}
Si analizamos el cdigo fuente, nos damos cuenta de que sabemos de antemano su comportamiento. Por lo tanto, no tiene sentido obligar al programa a comprobar algo que ya
sabemos su veracidad.
La solucin es separar el caso general - el bucle - del caso particular. Podramos reescribir el cdigo as:
// Caso general: 1 <= x < 23
for( x=1; x<23; x++ )
{
...
cout << ',';
}
// Caso particular: x = 23
...
cout << endl; // en lugar de ' ';
S que en este ejemplo no parece que se necesite hacer todos estos cambios, pero si te acostumbras a hacer esto al principio, creas buenos hbitos programando con
naturalidad.
Hasta pronto,
Steven
Steven R. Davidson
2013-01-06 00:00:47
Hola Daniel,
Efectivamente, esto es lo que ocurre. Tcnicamente, se realiza una copia del valor original pasado por parmetro. Para entender mejor el proceso, puedes pensar que seguimos
esta secuencia de pasos:
[MultiploDeTres(i)]
Salto a: MultiploDeTres()
int n = i;
...
Como puedes ver, realmente creamos el entero 'n' cada vez que invoquemos esta funcin, y por ello se destruye, cada vez que termine su ejecucin.
Espero haber aclarado la duda.
Steven
Steven R. Davidson
2013-01-06 02:36:38
Hola B.Amauri,
Puedes entrar al foro, yendo a: http://listas.conclase.net/ Si quieres enviar mensajes por correo-e, puedes enviarlos a: cconclase@listas.conclase.net Deberas haber recibido un
correo-e con toda la informacin.
El cdigo fuente tiene algunos errores gramaticales. Primeramente, escribes:
if(!(ddo%dsr)) primo=false; break;
Slo porque escribas varias sentencias en una sola lnea no significa que sea una sola sentencia. En este caso, hay dos sentencias. Es como si escribieras:
if(!(ddo%dsr))
primo=false;
break;
Es decir, siempre ejecutas 'break', irrelevantemente de lo que ocurre con la condicin anterior.
Tienes otro error al intentar calcular el cuadrado de un nmero. Escribes:
dsr^2
Sin embargo, C/C++ no implementa ningn operador de potenciacin. El operador ^ es a nivel de bits; lo veremos en el captulo 18 ( http://c.conclase.net/curso/?
cap=018#inicio ).
Si quieres calcular el cuadrado, lo ms sencillo es multiplicando:
dsr*dsr
Luego, colocas 'continue' al final del bucle, cosa que no tiene sentido. En general, no es buena idea usar 'continue' ni 'break', al menos que no haya otra solucin. Es decir,
intenta pensar en otros diseos que no involucren estos dos vocablos.
Espero que esto te ayude.
Steven
B. Amauri
2013-01-08 01:51:41
Steven gracias por tu respuesta, me fue muy til todo y ya mejor el cdigo.
Respecto al correo hubo una dificultad con mi proveedor, pero pronto me suscribir por completo a la lista.
Quisiera solicitar tu ayuda de nuevo. Solucion el asunto de los nmeros primos e hice un cambio en este programa:
// El siguiente programa contiene una funcin que evala un nmero como primo
// y muestra el resultado en pantalla
// B. Amauri 05/01/13
#include <iostream>
using namespace std;
// Funcin que determina si ddo==dividendo es primo
bool EsPrimo(int ddo)
{
bool primo;

// Si nmero==1,2,3,5 o 7 es primo
if(ddo==1||ddo==2||ddo==3||ddo==5||ddo==7) primo=true;
else
{
//Si nm!=1,2,3,5,7 comienza a probar dividiendo
//entre dsr=2 y con dsr++, cuando sea divisible
//primo=false. Si primo==false o dsr>(ddo)^(1/2)
//deja de hacer pruebas
int dsr=2; // dsr==divisor
do
{
if(!(ddo%dsr)) primo=false;
dsr++;
}
while(dsr*dsr<=ddo && primo!=false);
}
return primo;
}
int main()
{
char salir[3];
do
{
int x;
cout<<"Introduzca un numero"<<endl;
cin>>x;// El usuario introduce un nmero x
if(EsPrimo(x)) cout<<"Primo"<<endl;
else cout<<"No primo"<<endl;
cout<<"Desea salir? si/no ";
cin>>salir;
}
while(salir[0]=='n' || salir[0]=='N');
return 0;
}
El cual funciona perfectamente, pero quise darle otro uso, haciendo que genere una lista de nmeros primos desde el 1 hasta el lmite que el usuario elija, con filas de 15
elementos. Todo funciona bien menos la evaluacin del nmero en la funcin que determina si es primo; slo puedo obtener una lista de primos del 1 al 10 (1,2,3,5,7):
// El siguiente programa contiene una funcin que evala un nmero como primo
// y genera una lista de los primeros n nmeros primos (el usuario introduce n)
// B. Amauri 05/01/13
#include <iostream>
using namespace std;
// Funcin que determina si ddo==dividendo es primo
bool EsPrimo(int ddo)
{
bool primo;

// Si nmero==1,2,3,5 o 7 es primo
if(ddo==1||ddo==2||ddo==3||ddo==5||ddo==7) primo=true;
else
{
//Si nm!=1,2,3,5,7 comienza a probar dividiendo
//entre dsr=2 y con dsr++, cuando sea divisible
//primo=false. Si primo==false o dsr>(ddo)^(1/2)
//deja de hacer pruebas
int dsr=2; // dsr==divisor
do
{
if(!(ddo%dsr)) primo=false;
dsr++;
}
while(dsr*dsr<=ddo && primo!=false);
}
return primo;
}
int main()
{
//x==lmite superior
//i==cantidad de nmeros en una lnea
//n==iteraciones
int x,n,i;
cout<<"Introduzca el limite superior ";
cin>>x;

i=0;
for(n=1;n<=x;n++)
{
if(EsPrimo(n))
{
cout<<n;
if(n<=9) cout<<" ";
else cout<<" ";
i++;
}
if(i==15) {cout<<endl;i=0;}
}
return 0;
}
Me diras qu est mal?
B.Amauri
B. Amauri
2013-01-08 20:31:29
Resuelto! Este es el cambio:
bool EsPrimo(int ddo)
{
bool primo;
...
else
{
int dsr=2; // dsr==divisor
primo=true; //ESTO FUE LO QUE AGREGU
...
if(!(ddo%dsr)) primo=false;
}
return primo;
}
Jhabriel
2013-01-24 12:42:11
Aqu va el ejercicio 6.4! Est funcional!
#include <iostream>
using namespace std;
int main()
{
int i=1; // Inicializa i con 1
while (i<23) // Mientras i sea menor a 23
{

// Imprime el '1' en la primera iteracion
if (i == 1)
{
cout << i << " ";
}


// Adiciona 4 e imprime 'i'
i += 4;
cout << i << " ";
if (i == 23)
{
break; // Sale del bucle si la suma = 23
}

// Sustrae 2 e imprime 'i'
i -= 2;

cout << i << " ";
}
return 0;
}
Manuel Cerezo
2013-01-30 19:32:31
Llevo unos das visitando la pgina y me parece genial. He empezado el curso desde 0, y aunque tena algunos conocimientos previos de C++, me est sirviendo para
refrescarlo todo y entender cosas que antes se me escapaban sobremanera o directamente no entenda. Enhorabuena a los creadores! Seguir ampliando conocimientos
mientras os visito. Ah dejo mi aportacin para el Ejemplo 6.3:
#include <iostream>
using namespace std;
// Programa que genera la secuencia:
// 1, 5, 3, 7, 5, 9, 7, ..., 23
// 30/01/2013 Manuel Cerezo Osorio
#include <iostream>
using namespace std;
int main () // Funcin Principal
{
int x = 1; //Variable del bucle, controla que se llega al objetivo de 23
bool Suma = true; // Variable para controlar si se suma 4 (o se resta 2)

do
{
if (Suma){ // Se muestra el valor de x y se le suma 4
cout << x << " ";
x += 4;
Suma = false; // Se cambia para que se reste 2 en la prxima pasada del bucle
}
else { //Se muestra el valor de x
cout << x << " ";
if (x == 23) break; // Se le resta 2 siempre que x no sea ya 23
x -= 2;
Suma = true; // Se cambia para que se sume en la prxima pasada
}
} while (x <= 23);

cin.get(); // Espera la entrada de un carcter para salir
return 0;
}
jose
2013-02-24 19:36:32
me podrian dar una explicacion a este tipo de variables
int formula(int numero, int pocision)
la verda que no entiemdo les agradeceria su respuesta lo mas pronto posible
gracias
Marcos
2013-07-25 13:39:59
Muchas felicidades y muchas gracias por un curso tan bueno, estoy empezando con C++ y me ha surgido una duda en el ejemplo 6.3, en el bucle for dentro del otro bucle for.
Una vez que se ejecuta, j aumenta una unidad, entonces porque en la segunda linea (y en el resto) aparece un uno y no un dos? Gracias de antemano.
Saludos
John W.
2013-08-13 06:13:03
porque al copiar el codigo de cada uno de los ejemplos y al guardarlo en mi pc y ejecutarlo en (Dev C++)..los comentarios como "teclee un numero entero" 0 "el numero es
divisible por 3" o "el numero no es divisible por 3"... no me aparece??? ..en todos los ejemplos me aparece: por ejemplo si ejecuto el numero 4 (al dar enter)..rta: la variable "a"
vale 4.. ???
Manuel Snchez
2013-09-09 16:19:41
Hola, aqu tengo el ejercicio 6.5 segn me ha salido a mi...
#include <iostream>
using namespace std;
int main()
{
char fin[12]; // Declaramos la variable para salir del primer bucle
do
{
int num; // Variable del numero a factorizar
int factor = 2; // Empezamos desde el factor 2
int potencia = 0; // Reseteamos a 0 potencia en cada nuevo numero
int ast = 0; // Para no poner el asterisco inicial
cout << "Introduce el numero a factorizar: ";
cin >> num;
cout << num << " = ";
while(num >= factor*factor) // Segundo bucle, cuando factor*factor es > que num, no hay mas posibilidad de factorizar
{
while( !(num%factor) ) // Aqui comprobamos si el factor actual da resto 0
{
num /= factor; // Dividimos num / factor para continuar en el siguiente bucle
potencia++; // Sumamos 1 potencia
}
if(potencia > 0)
{
if(ast) // Si es distinto a 0, ponemos asterisco
cout << " * ";
cout << factor;
ast++; // Evitamos asterisco inicial
if(potencia > 1)
cout << "^" << potencia;
potencia = 0;
}
else
{
if(factor == 2)
factor++;
else
factor += 2;
}

}
if(num > 1)
cout << " * " << num << endl << endl;
cout << endl << "Otro numero? s/n ";
cin >> fin;
}
while(fin[0] == 's' || fin[0] == 'S');
return 0;
}
jhon
2013-09-29 07:11:49
mmmmm...Me da tristeza, no logre resolver ningn ejercicio. los comenzaba y me confunda, pero bueno a seguir intentando con otros. excelente curso
Angie
2013-10-07 05:35:19
Buen Da:
Ustedes me puede ayudar a resolver este ejercicio, a la hora de compilar, me salen errores.
11.Escriba un diagrama de flujo que lea un nmero entero N y calcule la suma de la siguiente serie: 1^1+ 2^2+3^3+N^n.
Agradezco su ayuda
Jos Luis
2013-11-28 18:49:30
Hola aqui mi codigo sobre el Ejemplo 6.4
#include <iostream>
using namespace std;
int main()
{
int numero, factor, contador, factor_ant;
char salir[12];
do
{
factor = 2;
cout << "Introduce un nmero entero: ";
cin >> numero;
contador = 0;
factor_ant = 2;
while (numero >= (factor*factor))
{
if (numero % factor == 0)
{
if(factor==factor_ant) contador++;
else
{
if (contador!=0) if (contador==1) cout << factor_ant << " x "; else cout << factor_ant << "^" << contador << " x ";
contador =1;
factor_ant = factor;
}
numero /= factor;
continue;
}
if (factor==2) factor++; else factor +=2;
}
cout << numero << endl;
cout << "Descomponer otro nmero? ";
cin >> salir;

} while (!(salir[0]=='n' || salir[0]=='N'));
return 0;
}
Saludos desde Villahermosa, Tabasco, Mxico.
Jaime
2014-01-12 11:58:24
Buenos dias, no se si me pueden ayudar, debo hacer la media de las observaciones de X, tal que X>0,Y<=1. y no se desarrollar el comando. Muchas gracias
Steven R. Davidson
2014-01-12 18:01:15
Hola Jaime,
Me temo que no nos das suficiente informacin para poder ayudarte. No estoy seguro qu representa Y, pero supongo que quieres calcular la media aritmtica de una serie de
nmeros. Para esto, necesitas calcular la suma total, que se puede realizar a partir de sumas parciales. Puedes ir sumando cada nmero dado por el usuario, a travs del
teclado, como hemos visto en los ejemplos completos del captulo 6. Por ejemplo,
suma = 0;
for( ... )
{
...
suma += num;
}
El promedio no es ms que implementar la frmula popular:
promedio = suma / N
donde N es la cantidad de nmeros sumados.
Espero que esto te ayude.
Steven
Jaime
2014-01-12 18:14:29
Perdn, tiene razn. Muchas gracias por contestarme de todas maneras, me explico mejor a continuacin:
**Tengo que crear un data frame con 100 observaciones y dos variables "X" y "C". Los elementos de X son de una v.c. N(nu=0,var=4), y C=>Bin(3,0.4)
**Hasta aqu si que he sabido llegar. Ahora bien, mi problema es cuando tengo que calcular la media y varianza de las observaciones de X tales que X>0 y C<=1 .
Si pudieran ayudarme les estara muy agradecido.
Un saludo y gracias de anticipado.
Septiembre de 2000, Salvador Pozo, salvador@conclase.net

Vous aimerez peut-être aussi