PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 745 Preguntas.<<  >> 

    Pregunta:  23944 - MANIPULAR BIT EN ARCHIVOS JPG
Autor:  Rodrigo Jara
Como se puede manipular o cambiar los bit en un archivo jpg
Gracias
  Respuesta:  David Cañadas
Básicamente el modo es cargar el JPG en memoria convirtiéndolo a modo true-color (24 bits de color) no comprimido, modificándolo y volviéndolo a codificar a su profundidad de color y compresión originales.

En http://brand107.home.attbi.com/pc-gpe/ encontrarás el modo de codificar y decodificar JPGs.

Salu2.

    Pregunta:  24003 - DETECTAR UNA TECLA PULSADA MAS RAPIDO
Autor:  Guillermo Sanchez
Estoy haciendo el pacman en c++ y cuando el usuario aprieta la tecla la detecta rapido, pero tarda cuando el usuario la mantiene apretada, es decir si el usuario presiona por ej con la tecla a( a....aaaaaaaaaaaaa) la primera a la detecta rapido, pero demora un pequeño tiempo en detectar la segunda en adelante. Lo soluciono con la configuracion del teclado desde windows, pero necesito una solucion a nivel programacion, puede ser en c++ o ensamblador.
GRACIAS
  Respuesta:  EDSON NIETO
Intenta con el comando KBHIT, el cual sirve para actualizar la secuencia
  Respuesta:  José Pérez
Por la largada de la respuesta, esta en el archivo resp24003.txt.

    Pregunta:  24021 - ROMPER LA BARRERA DE LOS 50 MILISEGUNDOS EN WINDOWS
Autor:  pablo marcomini
Necesitaría saber si es posible lograr control del tiempo en Windows con resolución menor a los 50 milisegundos (18.2 Ticks/seg).
He probado timers en VB, VC++, BC++Builder, Etc. y en nigun caso pude vencer esta barrera.
Estoy desarrollando una aplicación que necesita leer o escribir en un puerto a intervalos regulares de, digamos, 100 microsegundos.
Si alguien puede ayudarme con este desafio, por favor, alcanceme alguna pista.
Gracias.
  Respuesta:  Neil Armstrong
Con estas funciones obtendrás una precisión basada en la velocidad (megahercios) del procesador. El sistema lleva un conteo de ciclos desde el arranque.

// Estructuras para enteros largos (64 bits)
LARGE_INTEGER count, frequency;

// Leer Frecuencia para cálculos posteriores (ciclos por segundo)
QueryPerformanceFrequency(&frequency);

// Leer contador de ciclos en su valor actual
QueryPerformanceCounter(&count);

    Pregunta:  24230 - QUE LIBRERIAS GESTIONAN LA SALIDA POR IMPRESORA?
Autor:  Eduardo Bernal
Necesito saber si hat librerias, que gestionen la salida por impresora, y la impresora.
  Respuesta:  Juan Carlos Ruiz
hay algunos sitios web donde las puedes conseguir, busca por funciones para el manejo de texto.
ademas puedes hacer las tuyas propias, aunque la verdad solo funcioanaria para imprimir caracteres , nunca he tratado con imagenes
, tienes que utilizar el apuntador
stdprn //que es un apuntador a la salida estandar por impresora
ejm:
//es solo un ejemplo puede variar las comas o algo

cade="Mi impresion"
fputs(cade, sizeof(cade),stdout);

lo mas probable es que esta funcion solo sirva para impresoras de matrix de punto , pero puiede funcionar con algunos modelos de burbuja y laser.

    Pregunta:  24396 - COMO UTILIZAR LA FUNCION TIME.H EN TURBO C
Autor:  arianna martinez

quiero utilizar la funcion time.h o alguna otra funcion para programar un tiempo de ejecucion de alguna rutina especifica en el programa asi como programar un determinado tiempo de ejecucion de mi programa .
De antemano gracias.
  Respuesta:  Oliver Atom
la libreria time.h coniene varias funciones, una de las principales es :
time(); la cual informa el tiempo en segundos que han pasado desde las cero horas del primero de enero de 1970 hasta el dia actual, el diseño de la rutina es i=time(&t);
donde i es un dato de tipo time_t definido en la libreria.
la variable t almacena el dato informado por la funcion por ejemplo:

#include "stdio.h"
#include "dos.h"
#include "conio.h"
#include "time.h"

main()
{
time_t t,i;
i=time(&t);
printf("desde las 0 horas de enero de 1970 han pasado %ld segundos",i);
getch();
}

puedes utilizarla recogiendo el valor en la variable al inicio de tu programa y sumando el nuemro de segundos que pasan hasta que se termine tu programa.

otra funcion puede ser ctime( ) la cual convierte en cadena de caracteres la informacion devuelta por la fincion time( ), la funcion ctime devuelve un apuntador a una cadena de caracteres de 26 posiciones divididas asi:

0,1,2 el dia de la semana
3 espacio en blanco
4,5,6 el mes
7 espacio en blanco
8,9 el dia del mes
10, espacio en bblanco
11,12,12,12,12,16,17,18 la hora
19 espacio en blanco
20,21,22,23 el año

un ejemplo es

#include "stdio.h"
#include "dos.h"
#include "conio.h"
#include "time.h"

main()
{
time_t t,i;
char *p;
i=time(&t);
p=ctime(&i);
printf(" %s ",p);
getch();
}

otra funcion a utilizar es la diftime() la cual calcula la diferencia entre dos tiempos asi
d=diftime(t1,t2)
donde de es una variable de tipo double que almacena la diferencia entre dos tiempos t1 y t2 ambos de tipo time();

si quieres calcular solo el tiempo transcurrido delde el inicio el programa hasta que finaliza utiliza la funcion clock() que te devuelbe el tiempo en centesimas de segundo

la funcion es j=clock(); y j es de tipo clock_t que tambien se encuentra en el time.h.

    Pregunta:  24413 - PROGRAMACION PARA PUERTO USB
Autor:  Eddy Eduardo Ponguillo Intriago
Cómo puedo crear una aplicación en visual C, para manejar puerto usb. Deseo transmitir datos y no lo puedo hacer en puertos paralelos o seriales, ya que la velocidad de estos últimos es ineficiente para el proyecto que tengo en mente. El problema mío es que no sé cómo manejar el puerto usb, con estos lenguajes.
  Respuesta:  Rommel Medina
Todo lo que necesitas esta en usb.org ya que el usb no es solo un puerto como el serial o paralelo.

    Pregunta:  24445 - HACER CURSOR NO VISIBLE
Autor:  Juanjo Alonso
En una aplicacion de tipo consola necesito hacer que el cursor desaparezca:

En el compilador de Borland existe la funcion _setcursortype(...) para conseguir borrar el cursor de la pantalla. ¿Y en microsoft? Estoy usando este compilador y no encuentro nada parecido. Mi pregunta es si existe alguna funcion o algo (c/c++) en el de microsoft que lo haga.

He probado a utilizar la int 10h (funcion 01h) dando valores fuera de rango y no funciona; como era de esperar el entorno visual c++ no responde pero esto no pasa si hago lo mismo en el compilador de borland.
Muchas gracias
  Respuesta:  José Pérez
Lo primero que debería decir es que no es muy recomendable crear aplicaciones de tipo consola en Visual C, por varias razones:

Porque no son aplicaciones Dos reales (sólo funcionarán en modo Dos dentro de Windows) y porque el uso de la memoria, recursos, etc realmente son de Windows, no Dos. Tampoco se podrán manejar modelos de memoria ni habrá diferenciación entre punteros far y near y muchas funciones y palabras clave habituales en la programación Dos las considerará obsoletas y las mostrará como erróneas.

A pesar de todo, si quieres seguir adelante, la siguiente rutina funcionará en cualquier compilador de C/C++ posterior a 1990:

void mostrar_cursor (boolean i)
{
if (i == false)
{
_asm {
mov cx, 0x2000;
mov ah, 0x01;
int 0x10;
}

}
else
{
_asm {
mov ch, 6;
mov cl, 7;
mov ah, 0x001;
int 0x10;
}
}
}

    Pregunta:  24554 - ¿EN QUé CONSISTE LA TéCNICA DE BACKTRACKING?
Autor:  Grupo Proyectos
Gracias, cordial saludo.

Quisiéramos informarnos más sobre la técnica de Backtracking y su uso en C.
  Respuesta:  Luis Machuca
El Backtracking quiere decir literalmente "seguimiento de retroceso". Esto consiste en ir guardado cada cierto tiempo, digamos "T", el estado del programa (los valores de las variables, etc). A este conjunto de valores le llamamos V(T).

El Backtracking consiste principalmente en que al llegar a un instante determinado T1, guardamos el estado del programa en V(T1), y al llegar a un instante T2,queremos recuperar la información, por ejemplo para "deshacer" una acción como lo hace WIndows. Entonces tenemos que tomar los datos del programa y sustituirlos por la información contenida en V(T1).

En realidad yo no sé mucho de esto y a los puristas esta definición les parece muy poco completa y muy poco formal pero a grandes rasgos de eso se trata, estando en un instante, recuperar variables o datos de un instante anterior.

Esto tiene aplicación en los videojuegos, en las aplicaciones conversacionales, y especialmente la saplicaciones que trabajan con menús y gran cantidad de archivos.

Para manejar esta técnica entran otros conceptos de la Informática como son las pilas(stacks), colas(queues), árboles(trees), y esencialmente los conceptos de algoritmos.

Espero que esto les sirva para poder empezar.

    Pregunta:  24625 - DETENER UN PROCESO EXE (URGENTE)
Autor:  Max C. Salas
Hola, necesito detener 2 procesos exe desde un sistema en vc++ 6.0 que estan ejecutandose en windows nt, es urgente pues si no logro descargarlos cuando el sistema sale me genera un conflicto horrible.

Saludos y Gracias.
  Respuesta:  Jesús Antón Martín
¿Conoces la estructura de los EXE?

Si la respuesta es afirmativa ¿Manejan mensajes de Windows? Si no fuera así ¿Está en tu mano que lo hagan?

Si al final ha quedado un "Sí", puede que estés de suerte. El API de Win32 tiene una función llamada BroadCastSystemMessage, que admite mandar mensajes a casi cualquier cosa que se esté ejecutando en el sistema, incluyendo drivers y dispositivos virtuales. Puedes utilizarla para mandar WM_QUIT a esos programas rebeldes (aunque si no escuchan el mensaje de salida de Windows, no creo que te hagan más caso así)

En cualquier caso, si tú inicias los procesos en tu aplicación, es muy probable que uses CreateProcess, y si no es así, es fácil que puedas hacerlo.

Si utilizas el último parámetro de esta función "lpProcessInformation", puedes contar con los handles del proceso y el thread que se han iniciado, y que permiten realizar algunas operaciones sobre ellos, incluida TerminateProcess, que recibe el handle del proceso y un valor de retorno.

Un saludo.

    Pregunta:  24790 - ACCESO A MEMORIA
Autor:  Omar Fabian Becerra Gomez
hola, estoy desrrollando una tarjeta para adquisición de imágenes de video, necesito accesar la memoria específicamente los segmentos D0000 y E0000, cómo lo hago con C++ (Borland C++ Builder) o mezclo el C++ con el ensamblador? y cómo?

Gracias de antemano
  Respuesta:  juan mamani
basta con crear un puntero inicializado con las direccion que desar accesar.
(debes tener claro como la cpu almacena los datos númerico que generalmente son empaquetado e invertidos)

ejemplo:

char *ram = (unsigned long) 0x0000A000

|<  <<  42 43 44 45 46 47 48 49 50 51 52  >>  >|