Foro Oficial De C++

hola a todos, solo queria saludarlos, personalmente aprendi en al Universidad, no me guie de ningun libro pero no manejo el lenguaje al 100%, aunque manejo estructuras y TADS y memoria dinamica en el, cualquier cosa en que pueda ayudarlos como vi por ahi,asi sea basico no hay problema, o plastilina como vi por ahi...jeje, mientras este en mis capacidades...
 
Dak dijo:
Intente usar el codeblocks y no me fuinciona, las cosas no me compilan, no se poruqe(no input file), si las corro sale que "d:\C++" no es una archivo..., alguien sabe algo?


Cual de las dos versiones bajó??

Existe una sin compilador y otra con el compilador GCC.


Se tiene que bajar la que dice Code::Blocks IDE, with MINGW compiler en:
http://codeblocks.org/downloads.shtml

Y si quiere compilar algo que ya tenga hecho, debe crear un proyecto nuevo e incluir los archivos .cpp y .h de lo que haya hecho.
 
ya lo logre ahcer funcionar, solo le dije que instalara en C:\codeblocks y no en archivo de programa.
 
Pregunta??
Alguno de uds conoce una librería para C++ que sea parecida a gmp, es decir, que me permita hacer cálculos aritméticos con números extremadamente grandes??? con numeros grandes quiero decir mayores a los que soporta el tamaño long int??
lo que sucede es que necesito el algoritmo de exponenciacion modular, para calcular
a exp b mod n, para poder hacer la encripcion y desencripcion en RSA 16 bits
 
Bueno, el algoritmo es el siguiente::

static long ModExponentiation (int a, int x, int n)
{
ii=0;
do
{
ll=exponente%2;
exponente=exponente/2;
ii=ii++;
} while(exponente!=0) ;
//printf("%d\n",i);
for(jj=0;jj<ii;jj++)
{
posiciones[jj]=exp%2;
exp=exp/2;
}

/*for(k=0;k<i;k++)
{
printf("%d",posiciones[k]);
} */

printf("\n");
/*printf("%d en binario es ",exp1);
for(z=i-1;z>=0;z--)
{
printf("%d",posiciones[z]);
} */
cc=0;
dd=1;
for(kk=ii-1;kk>=0;kk--)
{
cc=2*cc;
dd=(dd*dd)%modulo;
if(posiciones[kk]==1)
{
cc=cc+1;
dd=(dd*base)%modulo;
}
}
return dd;
}

funciona para valores de n menores a (2^31)-1, pero despues arroja numeros negativos o 0 (no vale ponerle unsigned int a las variables
 
existe otro aparte de long int y es _int64 creo que no necesita sino la libreria standard, aquel incrementa aun la capacidad de bytes y nunca lo he probado pero usar el unsigned con el puede aumenta un poco mas... si quieres ver en mas detalle haz una goosqueda con _int64, que es el maximo segun se... lo utilizas como el long int...cuentame si te sirve :)
 
Memoria Dinámica

Hola a todos:
Soy nuevo en este foro y quisiera formular una pregunta para ver quien me puede colaborar. Necesito trabajar en C++ con asignación dinámica de memoria para arreglos de 2 o mas dimensiones y no se como hacerlo, si alguien me puede colaborar se lo agradeceria.

amarin.
 
amarin dijo:
Hola a todos:
Soy nuevo en este foro y quisiera formular una pregunta para ver quien me puede colaborar. Necesito trabajar en C++ con asignación dinámica de memoria para arreglos de 2 o mas dimensiones y no se como hacerlo, si alguien me puede colaborar se lo agradeceria.

amarin.


NO sé si mi concepto está errado, pero técnicamente no se pueden crear arreglos con asignación dinámica de memoria... lo más cercano que se puede hacer es recolectar un dato que tenga el tamaño del arreglo y en tiempo de ejecución crear el arreglo de ese tamaño.

Como yo lo entiendo, la asignación dinámica de memoria se logra con estructuras un poco más complejas, como listas encadenadas y esas cosas.
 
amarin dijo:
Hola a todos:
Soy nuevo en este foro y quisiera formular una pregunta para ver quien me puede colaborar. Necesito trabajar en C++ con asignación dinámica de memoria para arreglos de 2 o mas dimensiones y no se como hacerlo, si alguien me puede colaborar se lo agradeceria.

amarin.

En vez de utilizar arreglos por que no mejor piensa en usar los contenedores que provee C++, estos le asignan automaticamente espacio a los objetos que vaya creando.
 
amarin dijo:
Hola a todos:
Soy nuevo en este foro y quisiera formular una pregunta para ver quien me puede colaborar. Necesito trabajar en C++ con asignación dinámica de memoria para arreglos de 2 o mas dimensiones y no se como hacerlo, si alguien me puede colaborar se lo agradeceria.

amarin.

Hola, pues aqui le hice algo con lo que puede empezar, y se usa así:

Al usar el constructor debe pasar el numero de filas y numero de columnas:
Array2D miArray(filas,columnas);

Para insertar un elemento debe dar la fila, la cumna y el valor a insertar:
miArray.insertar(filas,columnas,valor);

Para ver el valor de un posicion debe la fila, la cumna:
miArray.retorna(filas,columnas)


Ahora digo empezar por lo siguiente:

- la clase solo puede ser usada con matrices de NxN (numero de filas = numero de columnas).
- Si tiene un 'Array2D' de 100 posiciones usted puede ver la posicion 106, 110, 300, etc. Es decir se puede salir del tamaño maximo del Array2D (si quiere puede hacer un metodo para controlar esto).
- Si desea usar el metodo 'crecer' (que hacer lo que usted pide asignar memoria a nuevos elementos), debe hacerlo asignando el mismo numeros de filas y columnas, recuerde que solo sirve con arreglos de NxN.
- Como puede ver solo se pueden guardar datos de tipo entero.

#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;

//INICIA DECLARACION Y DEFINICION DE ARRAY2D
class Array2D {
int f;
int c;
vector<int> datos;

public:
Array2D (const int filas, const int cols) : f(filas), c(cols){
for (int i = 0; i < (f*c); ++i)
datos.push_back(0);
}

void insertar (const int fila, const int cols, const int valor){
datos[((fila-1)*f + cols - 1)] = valor;
}

int retorna (const int fila, const int cols){
return datos[((fila-1)*f + cols - 1)];
}

void crecer (const int filas, const int cols){
f = f + filas;
c = c + cols;

for (int i = static_cast<int>(datos.size())+1; i < (f*c)+1; ++i)
datos.push_back(0);
}

void verTamano (void){
std::cout << "TAMANO DE Array2D :" << static_cast<int>(datos.size()) << std::endl;
}

int getFilas(void){
return f;
}

int getColumnas(void){
return c;
}
};//FIN DE DECLARACION Y DEFINICION DE ARRAY2D




int main()
{
Array2D miArray(10,10);
miArray.verTamano();
miArray.insertar(3,5,6);
cout << "VALOR QUE HABIA INSERTADO EN LA POSICION (3,5) :" << miArray.retorna(3,5) << endl;
miArray.crecer(3,3);
int nu = 0;
for (int i = 1; i <= miArray.getColumnas(); ++i)
for (int r = 1; r <= miArray.getFilas(); ++r) {
++nu;
miArray.insertar(r,i,(nu));
}
for (int i = 1; i <= miArray.getColumnas(); ++i)
for (int r = 1; r <= miArray.getFilas(); ++r)
cout << miArray.retorna(r,i) << endl;
miArray.verTamano();
getch();
return 0;
}
 
y para que necesita conio en una estructura de datos? y los templates??

ferrodri: puede crear su propio tipo de datos que le maneje numeros mas grandes...
 
krawek dijo:
y para que necesita conio en una estructura de datos? y los templates??

el conio es para el 'getch()' por si lo compila en windows no le abra y le cierre una ventana sin alcanzar a ver los datos.
Y sin templates por que es para amarin comienze, ¿o le tengo que hacer todo?

PD: amarin, si te sirvio note olvides de ponerme punticos de reputación. ;)
 
jomunoz dijo:
el conio es para el 'getch()' por si lo compila en windows no le abra y le cierre una ventana sin alcanzar a ver los datos.
Y sin templates por que es para amarin comienze, ¿o le tengo que hacer todo?

PD: amarin, si te sirvio note olvides de ponerme punticos de reputación. ;)

Hahaha... tan chistoso... :p ay qué pena... para reemplazar el getch (que no es necesario) está en cin.ignore(2); Pero de todas maneras... por favor no meterle vainas de consola a una estructura de datos! eso va en otro lado.

Y tampoco entiendo para qué meterle templates si lo único que hace es almacenar datos enteros :S Es decir... ¿En dónde está la potencia del template? Me parece que lo único que hace es medio desperdiciando memoria tontamente :p con todo respeto, yo cambiaría el vector<int> por un simple int[]
 
uhm para reemplazar getch() no es necesario hacer el programa dependiente de ms-dos, puede utilizar el metodo get de std::cout

Código:
krawek@mother-earth ~ $ cat cin.cpp
#include <iostream>

int main()
{
        char a = std::cin.get();
        std::cout << a << std::endl;
}
 
FoxM dijo:
Hahaha... tan chistoso... :p ay qué pena... para reemplazar el getch (que no es necesario) está en cin.ignore(2); Pero de todas maneras... por favor no meterle vainas de consola a una estructura de datos! eso va en otro lado.

Y tampoco entiendo para qué meterle templates si lo único que hace es almacenar datos enteros :S Es decir... ¿En dónde está la potencia del template? Me parece que lo único que hace es medio desperdiciando memoria tontamente :p con todo respeto, yo cambiaría el vector<int> por un simple int[]


Mi intención era ayudar de forma simple y rapida, le falto decir que por que no cree la clase en un archivo inclusión, entre otras cosas. Y no usé un simple int[] por que con eso no se puede usar el metodo 'crecer'. El getch() esta dentro del main(), no dentro de la definición de la clase, ¿sabe distinguir las dos?.
Y el template permitiria insetar cualquier tipo de dato definido por el cliente, ejem:

template<class T>
class Array2D {
int f;
int c;
vector<T> datos;


Le falta repasar un poquito C++ :D :D

Ahora, quise ayudar colocando un código que ademas de ejemplo le pueda servir de base (si desea), no con simples ¡¡¡ideas!!! poco concretas, que lo que hacen es dejar a las personas en el mismo lugar donde estaban.

Un saludo.
 
Ayudita

Que tal todos:

En estos dias, he estado buscando como crear y manejar archivos en C++, encontre un programa muy complejo, no lo entiendo muy bien y realmente nesesito saber como se manejan archivos, nesesito hacer cosas basicas como grabar y recuperar,eliminar etc...
aqui esta la direccion:
http://c.conclase.net/ficheros/index.php?cap=004

Me parece un muy buen codigo pero no lo entiendo, nesesito algo mas sencillo, o un alma caritativa que me quiera ayudar explicandome.
MSN: SFX440 (arr)hot.

Quien se apunta?
 
Dak dijo:
Que tal todos:

En estos dias, he estado buscando como crear y manejar archivos en C++, encontre un programa muy complejo, no lo entiendo muy bien y realmente nesesito saber como se manejan archivos, nesesito hacer cosas basicas como grabar y recuperar,eliminar etc...
aqui esta la direccion:
http://c.conclase.net/ficheros/index.php?cap=004

Me parece un muy buen codigo pero no lo entiendo, nesesito algo mas sencillo, o un alma caritativa que me quiera ayudar explicandome.
MSN: SFX440 (arr)hot.

Quien se apunta?


Use la libreria standard 'fstream'. Solo es hacer un #include <fstream> y tendra disponible toda una jerarquia de clases para manejo de archivos ifstream para archivos de solo lectura, ofstream para escritura y su padre fstream.

Aqui le informan de todos lo metodos que posee la clase ftream:
http://www.cplusplus.com/ref/iostream/fstream/

Al ser una libreria standard es más facil encontrar información sobre como usarla.


Aqui un ejemplo que le permite insertar 20 lineas:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
ofstream salida("salida.txt");
string linea;

for (int i = 0; i < 20; ++i){
cin >> linea;
salida << linea << "\n";
}



return 0;
}

Como puede ver, al instanciar el objeto se le da el nombre del archivo de salida: (salida es nuestro objeto y salida.txt el archivo donde escribiremos) ofstream salida("salida.txt");.
Guardamos en una variable lo que insertamos mediante el teclado: cin >> linea;
Y escribimos en nuestro archivo como si lo estubieramos haciendo a un 'cout' : salida << linea << "\n";

Los demas objetos de la libreria <fstream> son igual de faciles de usar.
 
es mejor en lugar de usar

Código:
cin >> linea;

usar la funcion getline de std::string

Código:
getline(std::cin, linea);

este es el prototipo:
Código:
istream& getline( istream& is, string& s, char delimitador = '\n' );
 

Los últimos temas