PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 745 Preguntas.<<  >> 

    Pregunta:  1629 - TUTORIALES SOBRE BORLAND C++ BUILDER
Autor:  Antonio borjas
Hola, desde hase mucho tiempo cuento con una copia de Borland C++ BUILDER ediciòn Standar he tratado por mi propia cuenta de entender el lenguaje, ya que es mi primer lenguaje visual para windows, el caso es que me gustaria que alguien me pudiera decir donde encontrar informaciòn sobre el uso de este lenguaje de antemano muchas gracias.
  Respuesta:  Juan Díaz
Sí, encontré uno buenísimo en www.programacionfacil.com.
  Respuesta:  Fabio Cifuentes
hola! como estas?

primero que todo te felicito por inclinarte por un lenguaje tan potente y bueno.

tutoriales en si, nose donde encontrarlos pero existe un libro llamado "Aprendiendo C++ Builder 3 en 21 dias" es excelente yo ya lo lei.
es en español de la Prentice Hall.
alguna inquitud con mucho gusto

PD: soy de medellin

fabio

    Pregunta:  1698 - TRANSFERIR UN ARCHIVO TEXTO POR PUERTO SERIE
Autor:  Daniel Hernández
Amigos, alguien sabe como puedo tranferir un archivo de texto de una pc a otra utilizanfo el puerto serial y en lenguaje c, en partucular en borland c?
  Respuesta:  Gustavo Muro
este programa lee de un puerto serial (com1), para hacer el envio de informacion se utiliza fopen(archivo) y lees bit por bit y lo envias por el puerto serial modificando los parametros res = write(fd,buf,255);
este programa lo modifique para linux, pero corre bien en borland
resp1698.zip

    Pregunta:  1699 - ABRIR DBF EN C++
Autor:  Robert Loaiza
Existe una libreria en C++ que me permita abrir archivos dbf y poder manipularlos
  Respuesta:  Euro Urbina
Con este codigo puedo abrirlos y leerlos, faltaria crear rutinas para escribirlos, solo seria tratar de hacerlo.

#include
#include
#include
#include

typedef unsigned char int8;
typedef unsigned short int16;
typedef unsigned int int32;
typedef char * string;

struct CAMPOS { // Estructura de los Campos de la Tabla.
int8 name[11]; // Nombre del Campo. Byte 0-10
int8 type; // Tipo del Campo. 11
int32 where; // Desplazamiento del Campo. 12-15
int8 leng; // Longuitud del Campo. 16
int8 dec; // Lugares Decimales. 17
int8 flags; // Banderas. 18
int8 rese1[13]; // Reservado. 19-31
};

struct TABLA { // Estructura del Registro de la Tabla.
int8 type; // Typo de Tabla. Byte 0
int8 ymd[3]; // Ultima modificacion. 1-3
int32 numreg; // Numero de Registros. 4-7
int16 firreg; // Posicion del Primer Registro de Datos. 8-9
int16 lonreg; // Lomguitud del Registro de Datos. 10-11
int8 res1[16]; // Reservado. 12-27
int8 flags; // Bandera. 28
int8 codpag; // Codigo de Pagina. 29
int8 res2[2]; // Reservado. 30-31
};

char* substr(char* cadena, int comienzo, int longitud)
{
if (longitud == 0) longitud = strlen(cadena)-comienzo-1;
char *nuevo = (char*)malloc(sizeof(char) * longitud);
strncpy(nuevo, cadena + comienzo, longitud);
nuevo[longitud]=0;
return nuevo;
}

void main(void)
{
FILE *fdbf; // Puntero al Archivo .dbf
TABLA header; // Cabecera del Arhivo .dbf
CAMPOS *fields; // Lista de Campos del .dbf
int16 numcmp; // Numero de Campos del .dbf
int16 i,desp=1;
string buf; // Buffer para el Registro de Datos.
string NombTable="libro2.dbf"; // Aqui el Nombre del .dbf
char separador; // Separador entre la Cabecera y los Registros de Datos

fdbf = fopen(NombTable,"rb");
fseek(fdbf,0L,0);
fread(&header,32,1,fdbf);
// Calculo de la cantidad de Campos del .dbf
if (header.type == 0x30) numcmp = (header.firreg-296)/32;
else numcmp = (header.firreg-32)/32;
if ((fields = new CAMPOS[numcmp]) == NULL) {
printf("Error en la inicializacion de SYSDBF #1");
return;
}
for (i=0;i fread(&fields[i],32,1,fdbf);

printf("-----------------------------------------
");
printf("Tabla : %-12s
",NombTable);
printf("Tipo de Tabla : %d
",header.type);
printf("Numero de Registros : %d
",header.numreg);
printf("Numero de Campos : %d
",numcmp);
printf("Longuitud del Registro : %d
",header.lonreg);
printf("Codigo de Pagina : %d
",header.codpag);
printf("-----------------------------------------
");
printf("Nombre Tipo Long Dec
");
for (i=0;i printf("%-11s %c %3d %2d
",
fields[i].name,fields[i].type,fields[i].leng,fields[i].dec);
}
printf("-----------------------------------------
");
fread(&separador,1,1,fdbf); // Fin de Cabecera DBF y comienzo de los Datos.

buf = new char[header.lonreg];
fread(buf,header.lonreg,1,fdbf);
for (i=0;i printf("%-11s :%s
",fields[i].name,substr(buf,desp,fields[i].leng));
desp+=fields[i].leng;
}

printf("
");
fclose(fdbf);
delete fields;
delete buf;
system("pause");
}
  Respuesta:  jesus luna carlos
Esa utileria que tu necesitas se llama CODEBASE de la compania de software SEQUITER.

    Pregunta:  1738 - MOVER VARIAS IMAGENES INDEPENDIENTEMENTE
Autor:  Kleber
Estoy creando un juego en C para DOS y tengo que mover varias imagenes pero cuando muevo una la otra no la puedo mover. La pregunta es como puedo realizar movimientos independientes de las imagenes, se que se puede hacer pero no se cómo. Me puedes ayudar?
Te lo agradezco
  Respuesta:  Juan Carlos Ruiz
ESTIMADO AMIGO,
NO SE HACE CUANTO HICISTE ESTA PREGHUNTA , ESPERO QUE DE TODOS MODOS ESTA RESPUESTA SI TE SIRVA.

SI LO ANALIZAS DETENIDAMENTE , LO QUE SE DEBE HACER ES EJECUTAR FUNCIONES AL TIEMPO, DONDE CADA UNA CONTROLA UNA IMAGEN O UN SPRITE DETERMINADO, DEBES DISEÑAR LAS FUNCIONES PARA LUEGO INVOCARLAS POR MEDIO DE LLAMADAS A HILOS, ES DECIR DISPARANDO PROCESOS LIGEROS QUE NO BLOQUEAN EL PROGRAMA , SINO QUE AL ESTARCE EJECUTANDO LAS DEMAS INSTRUCCIONES LO SIGUEN HACIENDO TAMBIEN, EN PLATAFORMA unix O linux LO PUEDES HACER POR MEDIO DE DOS COSAS
.UTILIZANDO LA INSTRUCCION FORK
LA CUAL SIRVE PARA GENERAR PROCESOS HIJOS DE OTROS
.UTILIZANDO LAS FUNCIONES DE LA LIBRERIA PTHREADS

LO MAS CONVENIENTE ES UTILIZANDO LAS FUNCIONES DE THREADS O LAS PTHREADS , PERO SE QUE EN INTERNET XSE CONSIGUEN LIBRERIAS IDEM , PARA WIN 9X , EL TEMA ES ALGO EXTENSO, SI TE INTERESA ENVIAME UN CORREO ELECTRONICO.
  Respuesta:  Mauricio Moya
Es muy difícil darte una respuesta acertada ya que no sé como es el juego ni como es que deseas mover las imágenes. De lo que sí estoy seguro es de que no puedes ,por ejemplo, hacer dos funciones distintas donde muevas en cada una imágenes al mismo tiempo (suena ilógico no?), para eso tienes que hacer un bucle "for", donde cada vez : se realice un movimiento de la figura 1, luego un movimiento de la figura 2, un movimiento de la figura 3, etc y repetir el bucle tantas veces como sea necesario, algo así como:

for(i=0;i<100;i++)
{
moverfigura1();//este renglón solo moverá un pixel a la figura 1
moverfigura2();
moverfigura3();
}

Si deseas mayor información escribeme a [email protected] que yo tengo experiencia en juegos de ese estilo.

    Pregunta:  1786 - UTILERÍAS DE C
Autor:  Enmanuel Goldstein
Donde puedo conseguir utilerías (sobre todo la de graphics.h) para el compilador C/C++ en una página de internet? ó si alguien puede facilitarme algunas?
  Respuesta:  Carlos M Castillo Umanzor
te puedo facilitar algunas librerias y algunos archivos cabeceras si deseas, recuerda que no basta que tengas los archivos cabeceras si no posees las librerias o archivos con extencion LIB.

    Pregunta:  1788 - POR FAVOR INFORMACION SOBRE LOS MÉTODOS DE ORDENACIÓN.
Autor:  Mauricio Alcántara Méndez
Deseo información sobre el método de montoculo o head sort.Agradezco de antemano cualquier informacion al respecto.
  Respuesta:  Erwin Villamizar Pérez
Vea hermano.. aqui le envio la función para ordenar un array de enteros por medio del método de Ordenación llamado HeapSort, pasando como argumento a HeapSort un puntero al vector de enteros, y a la funcion prioridad paso como argumentos: un puntero al vector de enteros, la prioridad en la cual se va a manejar, y la cantidad maxima de datos a ordenar, la cual va disminuyendo.. espero que te sirva..

void heapsort(int *v)
{
int opcord,i,j,prio,n;
opcord=tipo_ord();
prio=(MAX-1)/2;
prioridad(v,prio,MAX-1,opcord);
prio=MAX-2;
n=MAX-2;
while(n>=0)
{
prio=n/2;
prioridad(v,prio,n);
n=n-1;
}
}
void prioridad(int *v,int prio,int n)
{
int i,j,t;
i=prio+prio;
j=i+1;
while(prio>=0)
{
while(j<=(i+2) && j<=n)
{
if(opcord==1)
{
if(v[prio] < v[j])
{
t=v[j]; v[j]=v[prio]; v[prio]=t;
}
j=j+1;
}
else
{
if(v[prio] > v[j])
{
t=v[j]; v[j]=v[prio]; v[prio]=t;
}
j=j+1;
}
}
prio=prio-1;
i=prio+prio;
j=i+1;

}
t=v[n]; v[n]=v[0]; v[0]=t;
}
  Respuesta:  Ivan Bravo Sierra
Esto viene en el libro de "Estructuras de Datos"
de Cairó y Guardati
editorial
Mac Graw Hill
pag, 318

    Pregunta:  1815 - PREGUNTA ACERCA DE GRÁFICOS EN C
Autor:  Juanjo
Soy nuevo en esto de los gráficos en C, y la verdad es que aunque tengo programas ejemplo, hay ciertas cosas que no entiendo. La mayor de mis dudas es ahora la declaración de esta estructura:
(El programa carga una imagen con una paleta a partir del fichero SVGA256.BGI con installuserdriver())

typedef struct
{
unsigned char R, G, B;
} RGBColor;
typedef RGBColor VGAPalette[256];

Lo cual equivale a:

typedef struct
{
unsigned char R, G, B;
} VGAPalette[256];

Yo entiendo que esto no es un array de estructuras, por lo cual no entiendo la utilizacion que de esa estructura se hace cuando se declara:

VGAPalette VGAPal;

para luego leer por ejemplo la cabezera del fichero imagen (*.cap) con

fread(VGAPal,1,768,fp);

MUCHÍSISIMAS GRACIAS POR ADELANTADO
  Respuesta:  José Luis Torres Pantoja
Saludos
No estoy seguro de haber entendido tu pregunta, pero tal parece que lo que quieres saber es el porqué o para que están utilizando esa estructura, bueno lo que sucede es que estás leyendo un archivo que contiene una imagen, como la imagen tiene una paleta de colores que tal vez no cooincida en valores y/o en tamaño con la que estás usando, es necesario primero leer la paleta, que es lo que hacen con la operación fread, a continuación seguramente llaman a una función donde cambian la paleta actual por la paleta que fué leída y por último se lee pixel a pixel la imagen. Espero que sea la respuesta que necesitabas. Si aún tienes duda con el manejo de gráficos mándame un mail
  Respuesta:  Santiago Gomez Carpizo
Hola, no se mucho de C, pero la bronca en cuestión no es grafica, es tan solo de comprensión del manejo de la estructura.

En la estructura :

typedef struct
{
unsigned char R, G, B;
} VGAPalette[256];

cada dato, R,G y B son de tipo unsigned char, lo cual en número de bytes es de 1 para cada uno (sizeof(unsigned char)), y ademas lo declaras como un arreglo de 256 elementos, por lo cual si multiplicas los 256 elementos por 3 (el size de la estructura, obtenida de la sumatoria del size de R, G Y B) nos da 768 bytes.

Después usando la sintaxis del fread,

fread(VGAPal,1,768,fp);

significa, que vas a leer del disco 1 vez 768 bytes, almacenando esa lectura en VGAPal.

Es decir, estas leyendo 768 bytes, ya que ese es el size de la estructura que usas.

Ok. Espero haberles ayudado.

Atte. Chago

    Pregunta:  1854 - PROBLEMAS CON EL SETSTATE DE CBUTTON
Autor:  Juan Enrique Palacios Hernández
Estoy desarrollando una aplicación en la que necesito que los botones se queden pulsados y utilizo para ello la función SetState de la clase CButton. Cuando compilo en modo Release la aplicación y la ejecuto, al salir de ella me da un error de violación de acceso. He comprobado que si no utilizo en el código la función SetState, este error no aparece y en modo Debug no aparece utilice o no dicha función.
¿Alguién sabe porque pasa esto?
Mucha gracias y un saludo
  Respuesta:  Dario Vadino
Mira, yo he realizado cosas similares con Visual C++ 5.0 y 6.0, lo que debes utilizar si deseas mantener presionado un botón es el tipo de botón CHECK BUTTON, en su modo de Push-Like, que es un botón que se aprieta y de suelta, de esta forma utilizando el método SetCheck(int nCheck), puedes pasarle un valor de 1 para apretarlo y 0 para soltarlo, esa forma no te traerá ningun problema, te lo aseguro, nos vemos, cualquier cosa tienes mi e-mail, adios y espero poder haber sido util.

    Pregunta:  1859 - DIRECCION DEL PUERTO PARALELO
Autor:  Guillermo Ordaya Espinoza
Me gustaria saber que función el la adecuada(VC5) para obtener la dirección del puerto paralelo 0x3f8, 0x2f8 automaticamente.

Gracias!!!
  Respuesta:  Amadeus
Dare una pequeña explicacion y luego decides como usarlas y en que programarlas.
Algunas de las direcciones de puertos prinicpales son:
020H - 023H Registros de la mascara de interrupcion.
040H - 043H Temporizador/Contador.
060H Entrada desde teclado.
061H Bocina (bits 0 y 1).
200H - 20FH Controlador de juego.
278H - 27FH Adaptador paralelo de impresora Lpt3.
2F8H - 2FFH Puerto serial COM2
378H - 37FH Adaptador paralelo de impresora Lpt2.
3B0H - 3BBH Adaptador de despliegue mono.
3BCH - 3BFH Adaptador paralelo Lpt1.
3C0H - 3CFH EGA/VGA.
3D0H - 3DFH Adaptador grafico de color
3F0H - 3F7H Controlador de disco duro.
3F8H - 3FFH Puerto serial Com1.
Aunque la practica recomendada es utilizar las interrupciones del DOS y del BIOS, puede con seguridad pasar por alto el BIOS cuando accese a los puertos 21H, 40-42H, 60H, 61H y 201H.
Por ejemplo, al arranque una rutina en ROM del BIOS busca el sistema por las direcciones de los adaptadores de puerto paralelo y seriales. Si la direccion del puerto serial es encontrado, el BIOS la coloca en su área de datos, empezando en la localidad de memoria 40:00H; si las direcciones de los puertos paralelos son encontrados, el BIOS la coloca en su área de datos, empezando en la localidad 40:08H. Cada localidad tiene espacio para entradas de una palabra. La tabla del BIOS para un sistema con 2 puertos seriales y 2 puertos paralelos se veria asi:
40:00 F803 COM1
40:02 F802 COM2
40:04 0000 No usada
40:06 0000 No usada
40:08 7803 LPT1
40:0A 7802 LPT2
40:0C 0000 No usada
40:0E 0000 No usada
En C la rutina quedaria asi.
unsigned GetPortAddr (int lptnum)
{
/* make a far pointer with segment 0x40 and offset 0x008+...
then return its value */
return *(unsigned far *)(MK-FP(0X40, 0X008 +(lptnum - 1) * 2));
}

Saludos a todos y espero que a alguien le sirva.
  Respuesta:  Elver Gomez Torva
creo que lo que lo que deseas es la dirección del puerto paralelo para enviar un archivo a la impresora, lo cual se hace de la siguiente manera:

void main ()
{
FILE *impresora;
impresora=fopen("LPT1", "w");/*LPT1 Nombre del puerto*/
if (!impresora)
{printf("la impresora no está lista");
}
fputc("Hola", impresora);
}

    Pregunta:  1936 - ALGORITMO QUICK SORT
Autor:  C. David J.
¿Qué utilidad tiene el algoritmo Quick sort, y como se escribe?
  Respuesta:  Italo Muñoz
Quick sort es una funcion incorporada en la mayoria de los compiladores de C (o si no me equivoco es parte del standard ANSI-C), por lo cual basta llamar a la funcion qsort(), la cual tiene la sgte sintaxis :

#include
void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));

base : se refiere al arreglo o vector o cosa que tu quieras ordenar
nmemb: el numero de elementos que tiene la cosa que deseas ordenar
size : el tamaño (en bytes) de cada elemento que compone la cosa que vas a ordenar
compara: funcion que sera llamada por qsort para evaluar cuando un elemento es menor,igual o mayor a otro. Esta funcion debe tomar como entrada los elementos que comparara y como salida un entero de acuerdo al sgte formato:
parametros-de-entrada - valor de retorno
elem1,elem2 - 0 si elem1==elem2
elem1,elem2 - >0 si elem1>elem2
elem1,elem2 - <0 si elem1
Ejemplo:
qsort(arreglo,5,sizeof(int),comparacion_entera)

/* esta historia continuara ...
van a cerrar el laboratorio de la universidad
*/

|<  <<  6 7 8 9 10 11 12 13 14 15 16  >>  >|