Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#1211
Programación C/C++ / Re: [Duda] Impresion stdprn
6 Septiembre 2012, 02:47 AM
Cita de: apoeti en  5 Septiembre 2012, 19:11 PMBueno, ya que he abierto un tema, hago otra pregunta ¿Qué fallo tiene este código?

/* Copia de archivo de texto cambiando minúsculas por mayúsculas. */
Si como indica el enunciado el objetivo es tomar un texto y convertirlo a mayúsculas la primera pregunta que viene a la mente es: ¿Porque comparas con el rango 61 .. 121?

Tomando como base el programa de avesudra la función se puede reducir a:
#include <ctype.h>

FILE *copia_mayus(FILE *fp, FILE *fp_nuevo)
{
   int ch; /* getchar et al retornan un "int" */
   
   while ((ch = fgetc(fp)) != EOF)
      fputc(toupper(ch), fp_nuevo);
   
   return fp_nuevo;
}


Un saludo
#1212
Programación C/C++ / Re: ayuda con caracteres
3 Septiembre 2012, 06:24 AM
Cita de: bjpenn en  3 Septiembre 2012, 05:33 AMExiste buena informacion
No dudo que ese curso tenga una parte de información correcta, con eso no hay problema.

Pero, y este es mi punto, el argumento en contra es mayor: esta incompleto y una buena parte de su información esta (para ser "suavecito") errada. Un buen ejemplo es su descripción de los limites inferiores y superiores de los tipos. Solo voy a mencionar dos:

* "Long Int" tiene como limites 2E-6 .. 2E6
* "Signed Int" tiene como limites -65000 .. 65000

En mi opinión un curso no cumple su función si (sin importar la buena intención detrás de el) solo termina confundiendo al estudiante.

Un saludo
#1213
Programación C/C++ / Re: ayuda con caracteres
2 Septiembre 2012, 02:46 AM
Cita de: bjpenn en  2 Septiembre 2012, 02:26 AMaka encontre muy buena informacion

http://www.publispain.com/supertutoriales/programacion/c_y_cplus/cursos/3/index.htm
En buen plan ese curso no es aceptable. Por ejemplo empieza con la descripción de los "Operandos Aritmeticos" y para equivocarse en algo así uno se pone nervioso.

Tampoco separa las características de cada lenguaje, no indica que encabezados incluir y por las funciones que menciona ("getch", "kbhit", etc.) parece desarrollado para utilizarse con alguno de los compiladores viejos de Borland.

Un saludo
#1214
Programación C/C++ / Re: Consulta punteros (C)
1 Septiembre 2012, 18:54 PM
Cita de: do-while en  1 Septiembre 2012, 01:19 AM
¿Has probado esto?
ptro = (unsigned short*) (((char*) p) + 1);
No funcionaria.

Con esta parte no hay problema (había un par de paréntesis de mas):
((char *) p + 1)
La dirección almacenada en "p" se convierte al tipo "char *" y se le suma una unidad ("sizeof(char)" siempre es igual a uno).

El problema surgiría con la segunda conversión:
(unsigned short*) ((char *) p + 1)
Ya que el puntero a carácter no cumplirá con los requisitos de alineación del puntero a "unsigned int".

Un saludo
#1215
Cita de: alejandrosevenfold en  1 Septiembre 2012, 04:16 AMel codigo es el siguiente:

fstream dataarch;
    dataarch.open("estadistica.txt", ios::out);
   
    for(i=0;i<n1;i++){                                                     
    dataarch<<x[i];
    }
    dataarch.close();

El problema es no separar los números. Supongamos que tu array contiene diez valores (0 a 9) al imprimirlos en el archivo se guardan así:
Código (cpp) [Seleccionar]
0123456789
Cuando tratas de leerlos surge el problema de como interpretar esa linea ya que el numero puede ser 0, 01, 0123, etc. En el caso del operador ">>" este se "traga" todos los caracteres que pueda (para en base a ellos generar el numero).

Para evitarlo basta con separarlos con algún carácter como el espacio, tabulador, etc.

Un saludo
#1216
Programación C/C++ / Re: Consulta punteros (C)
29 Agosto 2012, 00:11 AM
Cita de: ecfisa en 28 Agosto 2012, 18:43 PMPor otro lado la asignación:
p = (unsigned char *)p + 1

Es equvalente a hacer:
p++;
No. El detalle es la conversión explicita al tipo "unsigned char *".

En la aritmética de punteros la expresión:
p + i
Resulta en un incremento en la dirección igual a "i * sizeof *p".

* En el caso del tipo "char *" la expresión "sizeof *p" siempre resulta en uno.

* En el caso del tipo "unsigned int *" la expresión "sizeof *p" resulta (en el caso de HRSLASH) en dos.

Un saludo
#1217
Programación C/C++ / Re: Consulta punteros (C)
28 Agosto 2012, 17:37 PM
Si con "correctamente" te refieres a un comportamiento que cumpla con el estándar de C no, no hay forma. Eso se debe a los requisitos de alineación: un puntero a "unsigned int" debe apuntar a una dirección que sea múltiplo de "sizeof(unsigned int)" (dos en tu caso).

Un saludo
#1218
Tal vez sea un conflicto pero no debería, algunos puntos en relación con el programa:

1) No debe existir un conflicto con la función "max" ya que no incluyes el encabezado <algorithm>.

2) El compilador debería reportar la llamada a "rand" ya que no se tiene acceso a su prototipo (este se encuentra en <cstdlib>).

3) No llamar a "srand" tiene el mismo efecto que "srand(1)". En otras palabras el resultado sera el mismo cada vez que se ejecute el programa.

Así debería funcionar:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <cstdlib>
using std::rand;

int main()
{
   unsigned short int num, max;
   
   cin >> max;
   num = rand() % max;
   cout << num << endl;
   
   cin.sync();
   cin.get();
   
   return 0;
}


Pero sigo pensando que es algo relacionado con el compilador (o la forma en que se ejecuta este).

Un saludo
#1219
Cita de: BlackZeroX (Astaroth) en 27 Agosto 2012, 09:10 AM¿Te sirve?.

char div = '\0';
printf("Ingrese una fecha en el sig formato dd/mm/aaaa (ejemplo: 21/01/1989)\n");
scanf("%d%c%d%c%d",&dia, &div, &mes, &div, &ano);
Dos comentarios:

* Si el carácter a leer se descarta de inmediato se puede utilizar "%*c" con ese efecto y nos ahorramos una variable:
scanf("%d%*c%d%*c%d",&dia, &mes, &ano);

* Si se desea que el carácter separador sea si o si el '/' se puede indicar directamente:
scanf("%d/%d/%d",&dia, &mes, &ano);

Un saludo
#1220
Programación C/C++ / Re: Funciones callback?
20 Agosto 2012, 17:41 PM
Una función "callback" es una que no llamas directamente, en su lugar alguien mas (en tu caso el SO) se encarga de hacerlo. Solo tienes que definir una función en la forma indicada, su tipo se indica en esa misma pagina.

Un ejemplo sencillo (solo lista las ventanas):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <windows.h>

#define NUM_CHARS 256

BOOL CALLBACK fn(HWND hwnd, LPARAM lParam);

int main(void)
{
   puts("Antes de la llamada a EnumWindows\n");
   if (!EnumWindows(fn, 0))
      return EXIT_FAILURE;
   puts("\nDespues de la llamada a EnumWindows");
   
   return EXIT_SUCCESS;
}

BOOL CALLBACK fn(HWND hwnd, LPARAM lParam)
{
   char nombre[NUM_CHARS + 1];
   static int i = 0;
   
   if (GetWindowText(hwnd, nombre, NUM_CHARS) > 0)
      printf("%02d -- %s\n", ++i, nombre);
   
   return TRUE;
}


Un saludo