• Sábado 15 de Marzo de 2025, 01:26

Mostrar Mensajes

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


Mensajes - ProfesorX

Páginas: 1 ... 8 9 [10] 11 12 ... 32
226
C/C++ / Re: Complementos(1 y 2)
« en: Viernes 13 de Mayo de 2011, 03:31 »
Citar
Sin embargo, usando conversores web para verificarlo, veo que 10111 da 23.

Esto creo que es porque he limitado el numero de bits a 5, pero si lo hiciera con 8, el numero 23 quedaría: 00010111, y el numero -9 en lugar de 0, 1. Voy muy desviado?

Se que el tema se ha desvirtuado mucho, y que poco cabe aquí, lo siento.  :unsure:
 
Gracias y saludos

Desafortunadamente si, vas muy desviado.

Para empezar, tanto en el complemento a uno como en el complemento a 2, se deben rellenar TODOS los bits no utilizados con cero, dependiendo del tamaño en que los vas a almacenar, quiere decir que suponiendo que almacenas el numero nueve de tu ejemplo en una variable de 8 bits (un byte) el numero 9 en realidad es 00001001, y por lo tanto su complemento a uno es 11110110, y el complemento a 2 es 1110111. Si la variable fuera de 16 bits (2 bytes), el numero seria 0000000000001001, el complemento a uno seria 1111111111110110 y el complemento a 2 seria 1111111111110111.

Ahora, segundo error que tienes, recuerda cuando se utiliza el complemento a 1 y 2, el primer digito indica que el numero es un numero NEGATIVO, no un numero positivo, suponiendo que el numero esta en complemento a 2, 10111 es negativo, ya que su primer digito es uno.

Para obtener el verdadero numero que representa, debes volver a calcular el complemento a 2 del numero en cuestion.

Complemento a 1 de 10111: 01000
Sumandole uno para obtener el complemento a 2: 01001
01001 = 9 y como el primer digito del numero era 1, quiere decir que el numero en realidad es -9

Recapitulando, solo se calcula el complemento a 2, si el primer digito es uno, porque eso significa que el numero es negativo, si el primer digito del numero es cero, no se calcula el complemento, porque quiere decir que el numero es positivo. Recuerda ademas que debes rellenar con ceros hasta tener el total de bits de la variable antes de calcular el complemento, si es que quieres obtener el equivalente negativo de determinado numero.

Ahora otro detalle mas para finalizar, y ya aplicado a lenguaje C/C++, el complemento a 2 solo aplica para aquellas variables que utilizan numeros negativos, o sea las variables (signed) short, int, long int, etc. Recuerda que el complemento a 2 es la manera que tenemos los humanos de poder almacenar y representar un numero negativo en la computadora. En las variables que son unsigned, el primer digito no representa nada, y el numero se toma tal cual.

Saludos :)

227
C/C++ / Re: compila pero no corre
« en: Miércoles 11 de Mayo de 2011, 07:51 »
Mi querido john994, el el otro hilo ssaammuu ya te explico varios de los errores que tienes en tu codigo, adicionales al error de public y private, no se considera correcto abrir dos hilos con el mismo tema, ya que valga la redundancia se pierde el hilo de la conversacion, debiste seguir la consulta en el mismo hilo para darle un correcto seguimiento, ademas, los titulos poco descriptivos como "compila pero no corre", no se consideran la mejor manera para pedir ayuda, te recomiendo que leas lo siguiente:

Antes De Postear

Cómo Hacer Preguntas De Forma Inteligente

Por ultimo, si tu compilador incluye depurador, prueba a depurar linea por linea tu programa, de esa forma descubriras mas rapidamente en donde esta tu error, ya que los errores en la ejeccion son los mas dificils de encontrar

Saludos :)

228
C/C++ / Re: constructores c++
« en: Miércoles 11 de Mayo de 2011, 01:54 »
Coloca la defincion del constructor abajo de public, junto con  void impimir_pelicula(MovieData,MovieData) y void info_pelicula(MovieData&,MovieData&).

No se permiten metodos constructores de tipo privado, y si no pones explicitamente public, los metodos se toman como privados.

Saludos :)

229
C/C++ / Re: Cunsulta de principiante
« en: Martes 10 de Mayo de 2011, 06:27 »
Creo que estas exagerando un poco, ahora las computadoras tienen grandes capacidades de memoria, y procesadores muy veloces, a menos claro que pienses utilizar una computadora de mas de 10 años ;), no te afectara mucho el definir tu constante pi como double, asi que puedes hacerlo con toda confianza.

Saludos :)

230
C/C++ / Re: Copiar archivos con C
« en: Lunes 9 de Mayo de 2011, 19:30 »
¿Estas abriendo el archivo en modo binario o en modo texto? Sospecho que lo abres en modo texto. Si no especificas el modo, por defecto te abre el archivo en modo texto, como si pusieras "t", para abrirlo en modo binario debes definir explictamente modo binario "b", aunque no pones el codigo para abrir el archivo, pero sospecho que ese es tu problema. En modo texto, te convierte los caracteres de salto de linea (0xA) en 2, salto de linea y retorno de carro (0xA OxD), dependiendo de tu sistema operativo.

Te dejo un codigo de ejemplo, lo probe y me funciona adecuadamente en windows, compilado con Visual Studio 2010. Si eso no resuelve tu problema, publica una porcion mas grande de tu codigo, que incluya como abres y cierras tu archivo.

Código: C++
  1.  
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cctype>
  6.  
  7. char letra;
  8. FILE *ficheroL, *ficheroE;
  9.  
  10. int main ()
  11. {  
  12.     // modo "rb" binario lectura, si no especificas b lo abre en modo texto
  13.     // (modo por defecto) como si escribieras "rt"
  14.     ficheroL = fopen("archivo1.dat", "rb");
  15.     // modo "wb" binario escritura, igual que antes, si no especificas
  16.     // binario, lo abre en modo texto, como si escribieras "wt"
  17.     ficheroE = fopen("archivo2.dat", "wb");
  18.     letra=getc(ficheroL);
  19.     while (feof(ficheroL)==0)
  20.     {
  21.         putc(letra,ficheroE);
  22.         printf("%c", letra);
  23.         letra=getc(ficheroL);
  24.     }
  25.  
  26.     fclose(ficheroL);
  27.     fclose(ficheroE);
  28.  
  29.     system("pause");
  30.     return 0;
  31. }
  32.  
  33.  

Saludos :)

231
C# / Re: declaraciones byte forma binaria 0x...
« en: Lunes 9 de Mayo de 2011, 18:39 »
No es posible declarar literales numericas binarias en C#, solo admite literales decimales y hexadecimales.

Podrias declarar tu constante mediante una cadena, y luego convertirla por medio de Convert.ToByte(), de la siguiente manera.

Código: C#
  1.  
  2. byte p = Convert.ToByte("10110011",2);
  3.  
  4.  

No se si se adapte a lo que necesitas.

Saludos :)

232
C/C++ / Re: [C] Estructuras y archivos binarios
« en: Lunes 9 de Mayo de 2011, 01:25 »
Bueno, ya te contestaron la mayoria de las dudas que tenias, solo añadire que no se recomienda el uso de scanf, ya que tiene el problema de que lee toda la entrada hasta que pulsas enter o encuentra un espacio.

Entonces ¿que pasa si tu defines tu cadena como de 12 caracteres, y por un error el usuario captura 15? pues que te guarda los 15 caracteres, pero como tu cadena es de 12, ocurre lo que se conoce como un desbordamiento de buffer, corrompiendo la memoria y con ella tu programa.

Cuando un programa es pequeño, estos desbordamientos no son fatales, pero en programas grandes si pueden serlo, ocasionando diversos problemas, entre ellos, el congelamiento o cuelgue del sistema.

Lo mas recomendable es usar fgets(), que te limita el total de caracteres que vas a leer, con esta funcion no puede haber un desbordamiento, ya que nunca leera mas de los caracteres que le digas que lea, aun cuando el usuario erronea o intencionalmente capture caracteres de mas. Claro que aun puede haber un desbordamiento de buffer si le dices que lea un maximo de 15, pero reservas para tu cadena menos de 15 caracteres, por ponerte un ejemplo.

Ademas, no es necesario que leas todo el archivo desde el principio para posicionarte al final del archivo, puedes usar la funcion fseek para esto, o abrir el archivo en modo append binario (ab+) si lo abres con append, automaticamente coloca el apuntador de archivo al final del archivo.

Te dejo el codigo que corregi, con comentarios para que quede mas claro :)

Código: C++
  1.  
  2. // Inserción en la tabla
  3. void insert_into_table()
  4. {
  5.     int menu2_on = 1;
  6.  
  7.     struct persona avance;
  8.  
  9.     FILE *save_file;
  10.  
  11.     save_file = fopen ("archivo.dat", "rb+");
  12.     // Coloca el apuntador de posicion de archivo al final del archivo
  13.     // No necesitas leer todo el archivo para posicionarte al final
  14.     // tambien podrias abrir el archivo con "ab+" en lugar de "rb+"
  15.     // y te evitas el tener que usar fseek
  16.     fseek(save_file, 0, SEEK_END);
  17.  
  18.     do {
  19.  
  20.         struct persona data_save;
  21.         // Variable de tipo cadena para capturar la edad con fgets, ya que fgets
  22.         // solo funciona con cadenas.
  23.         char edad[3];
  24.  
  25.         printf("Rut de la personan");
  26.         // Borra el buffer de entrada, para que no haya nada al leer los datos
  27.         // con fgets
  28.         while(getchar() != 'n');
  29.         // El tercer parametro es la longitud de tu cadena con el caracter de
  30.         // fin de cadena incuido. Si necesitas guardar 11 caracteres,
  31.         // debes reservar espacio para 12 (11+fin cadena). Si necesitas
  32.         // guardar 12, debes reservar espacio para 13, y asi, siempre
  33.         // debes reservar espacio para un caracter mas, que es el fin de cadena
  34.         fgets(data_save.rut, 12, stdin);
  35.  
  36.         printf("Edad de la personan");
  37.         while(getchar() != 'n');
  38.         fgets(edad, 3, stdin);
  39.         // Conviertes la edad
  40.         data_save.edad = atoi(edad);
  41.        
  42.         printf("Nombre de la personan");
  43.         while(getchar() != 'n');
  44.         fgets(data_save.nombre, 255, stdin);
  45.  
  46.         fwrite (&data_save , 1 , sizeof(struct persona) , save_file);
  47.  
  48.         printf("¿Desea agregar otra tupla? (1 Si, 0 No)n");
  49.         scanf("%d", &menu2_on);
  50.  
  51.     } while (menu2_on == 1);
  52.  
  53.     fclose(save_file);
  54.  
  55.     struct persona junior;
  56.     FILE  *test_file;
  57.  
  58.     test_file = fopen ("archivo.dat", "rb");
  59.     if (test_file==NULL)
  60.         printf ("No se pudo abrir el archivon");
  61.  
  62.     printf("Rut              Edad   Nombren");
  63.     printf("--------------------------------------------------------------------n");  
  64.     while (!feof(test_file))
  65.     {  
  66.         fread (&junior, sizeof(struct persona), 1, test_file);
  67.         // Necesitas volver a comprobar si despues de leer llegaste al final del archivo
  68.         if (!feof(test_file))
  69.         {
  70.             printf("%s     %d     %sn", junior.rut, junior.edad, junior.nombre);  
  71.         }
  72.  
  73.     }
  74.  
  75.     // No olvides cerrar tus archivos
  76.     fclose(test_file);
  77. }
  78.  
  79.  

Saludos :)

233
C/C++ / Re: Duda sobre composición/agregación de clases.
« en: Jueves 5 de Mayo de 2011, 18:27 »
Debes tener algo mal en el metodo setx de tu clase, si es necesario que publiques el codigo de tu clase, para saber en donde esta el problema porque no es normal lo que mencionas.

Saludos :)

234
C/C++ / Re: Como escribir en un archivo desde una función - C++
« en: Jueves 5 de Mayo de 2011, 07:44 »
Probe el codigo que publicaste, y el detalle que note es que colocas la sentencia "using namespace std" dentro de main(), al igual que el nombre del archivo, si lo haces asi, no te reconocera el namespace, y por lo tanto, creo que esa es la razon por la que te marca el error de "ofstream has not been declared". y respecto al nombre de archivo, al estar declarado dentro de main, es una variable local, y tampoco te la reconocera dentro de la funcion escribir, en este caso, puedes o pasarle como parametro la variable archivo, o declarar archivo como global. Y el namespace se declara al principio de tu programa, lo mas comun y recomendable es despues de tus archivos include.

Te dejo el codigo corregido como creo que deberia ir, modifica tu codigo original en base a esto. Ah y tambien elimine la variable local "a" de la funcion escribir, me parece que es innnecesaria, y utilizo directamente el parametro entrada.

Código: C++
  1.  
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. // Los namesapce al principio, despues de los include, y no dentro de cada funcion como lo estas haciendo.
  6. using namespace std;
  7. // variable declarada como global, para que la reconozca la funcion escribir.
  8. // tambien podrias pasarla como parametro, en caso de que no quieras variables globales
  9. ofstream archivo;
  10.  
  11. void escribir (double entrada);
  12.  
  13. int main()
  14. {
  15.     archivo.open("prueba.txt", ios::app);
  16.  
  17.     double entrada;
  18.  
  19.     cout << "Ingrese el numero de entrada a escribir en el archivo" << endl;
  20.     cin >> entrada;
  21.  
  22.     archivo << "Eso fue todo lo que escribimos en el archivo";
  23.  
  24.     archivo.close(); // Cierra el archivo de salida en donde aparecen todos los puntos.
  25.  
  26.     return(0);
  27. }
  28.  
  29. void escribir (double entrada)
  30. {
  31.     // variable local innecesaria a mi parecer, utilza directamente el parametro entrada
  32.     //double a = entrada;
  33.     archivo << "El numero que escribo en el archivo es: " << entrada;
  34.     cout << "No hay mas datos para escribir " << endl;
  35. }
  36.  
  37.  
  38.  

Saludos :)

235
C/C++ / Re: Mostrar en pantalla durante un tiempo determinado
« en: Jueves 5 de Mayo de 2011, 07:03 »
Las funciones sleep y delay no son standard, pero es facil implementar una funcion delay(), que utiliza la funcion time(), esta funcion utiliza la libreria time.h (ctime en C++):

Código: C++
  1.  
  2. void delay(int secs)
  3. {
  4.     for(time_t i = (time(NULL) + secs); time(NULL) != i;);
  5. }
  6.  
  7.  

Saludos :)

236
C# / Re: FUNCIONES DE STRING Y TEXTBOX
« en: Miércoles 4 de Mayo de 2011, 16:52 »
No se si entendi bien, lo que entendi es que quieres separar tu cadena en palabras, utilizando el espacio como separador.

Si es asi, solo utiliza las funcion Split.

Split te separa la cadena utilizando como separador el cracter especificado y devuelve el resultado (la cadena separada) en un array

Saludos :)

237
C/C++ / Re: borrar archivos
« en: Lunes 2 de Mayo de 2011, 19:48 »
remove no admite comodines, solo borra archivos individuales.

La manera de hacerlo seria leyendo el directorio y pasarle el nombre de cada archivo a la funcion.

El procedimiento de leer el directorio cambia segun el sistema operativo utilizado.

Si trabajas sobre windows, puedes hacerlo con las funciones FindFirstFile y FindNextFile de la winapi. FindFirstFile si admite comodines

Mas informacion en MSDN o en http://winapi.conclase.net/curso/?winfun=FindFirstFile#inicio

Saludos :)

238
C/C++ / Re: Problemas para mandar imprimir arreglo con ALLEGRO
« en: Lunes 2 de Mayo de 2011, 08:28 »
A simple vista parece que esta bien, No mencionas cual es el error que te da, solo mencionas la lina que te lo da.

Si fueras mas especifico, se te podria ayudar mejor.

Saludos :)

239
C/C++ / Re: Help me con un Ejercicio de C++ (Funcion)
« en: Lunes 2 de Mayo de 2011, 08:18 »
No se hacen tareas, y esto claramente es una tarea.

Aqui se ayuda cuando alguien tiene problemas en la ccmpilacion o en la ejecucion, y no, no se vale decir que tu problema es que no sabes como hacerlo  :rolleyes:.

El problema esta demasiado sencillo, con un poco de conocimiento basico en C/C++ lo puedes hacer.

Si no tienes conocimientos basicos, te recomiendo que comiences buscando un buen libro o curso de programacion en C++, usando google seguramente encontraras muchos cursos, en caso de que no puedas conseguir un libro.

Saludos :)

240
C/C++ / Re: Switch case que muestra 2 veces seguidas el menu
« en: Sábado 30 de Abril de 2011, 04:06 »
El problema esta en la funcion scanf() y la manera en que se maneja el buffer de la entrada estandar.

La funcion scanf() te leera de la entrada estandar hasta que pulses la tecla de "enter", pero la tecla de "enter" cuenta tambien como caracter, y se queda en el buffer, ya que scanf("%c",&opcion); solo lee un caracter, pero en realidad estas capturando 2, la letra y el "enter" que das, es por eso que la siguiente vez que lee del teclado, encuentra en el buffer el "enter", y lo lee de nuevo, por eso aparece dos veces el menu.

Lo que tu quieres seguramente es que inmediatamente que pulses una tecla, seleccione una opcion, y desafortunadamnte no hay una manera estandar y portable de hacerlo, esto depende del compilador y de la plataforma que utilices. Existia (o existe) una biblioteca en los compildores borland llamada getch(), que estaba en la libreria conio.h, que hacia exactamente eso, pero como dije antes, solo funcionaba en los compiladores borland y no es portable.

Lo mejor que podrias hacer es limpiar el buffer de entrada despues de leer con getchar(), aunque esto no es perfecto, ya que hay algunos casos en que esto no funciona adecuadamente (creeme, lo he probado varias veces), pero bueno, ya que seguramente tu programa es sencillo, no creo que te muchos porblemas.

Te dejo el ejemplo:

Código: C++
  1.  
  2. #include <cstdio>
  3. #include <cstring>
  4.  
  5. int main (int argc, const char * argv[])
  6. {
  7.     char menu[] = "n A)Nuevo altan B)Bajan C)Modificaciónn D)Búsqueda por autorn E)Búsqueda por editorialn F)Búsqueda por títulon G)Búsqueda por fechann";
  8.     char opcion;
  9.  
  10.     do {
  11.         printf("%s",menu);
  12.         scanf ("%c", &opcion);
  13.         // Limpia el buffer de entrada despues de leer
  14.         while (getchar() != 'n');
  15.         switch (opcion)
  16.         {
  17.         case 'A':
  18.             printf("Opcion1n");
  19.             break;
  20.         case 'B':
  21.             printf("Opcion2n");
  22.             break;
  23.         case 'Q':
  24.             printf("nnSaliendo.nn");
  25.             break;
  26.         }
  27.     } while (opcion != 'Q');
  28.     printf("nnTerminación normal del programa.");
  29.  
  30.     return 0;
  31. }
  32.  
  33.  

Saludos :)

241
C/C++ / Re: duda sobre regex en C/c++
« en: Viernes 29 de Abril de 2011, 21:45 »
Boost te funcionara en cualquiera de los dos compiladores que mencionas, (devcpp y boland) de hecho, no es necesario que compiles todo, puedes compilar solo las funciones que necesites.

Ahora para la utilizacion de la funcion regex, lee la documentacioon:

http://www.boost.org/doc/libs/1_46_1/libs/regex/doc/html/index.html

Ahi esta explicado a mas detalle.

Saludos :)

242
C/C++ / Re: Repetir un programa en c++
« en: Martes 26 de Abril de 2011, 22:49 »
Cita de: "123mago456"
pero en donde meto el do while?
:(

Extraña pregunta, que nunca has usado do..while??  :rolleyes:

Pones el do justo antes del bloque que quieras repetir, y el while justo despues del bloque que queras repetir.

mas informacion:

http://c.conclase.net/curso/?cap=005b#Se_hacermientras

Saludos :)

243
C/C++ / Re: acceder al codigo des las librerias
« en: Martes 26 de Abril de 2011, 22:31 »
Cita de: "Alfonsos1"
todas las librerias son asi o solo las "estandar"

No todas, algunas si vienen con el codigo fuente, y algunas no, eso depende del creador de la libreria si quiere publicar el codigo o no, segun convenga a sus intereses, y dependiendo de la licencia de la libreria.

Por ejemplo, Fmod es una libreria parta manejo de sonido, no viene con el codigo fuente, aunque puedes bajarla y utilizarla para tus programas siempre y cuando no sea para uso comercial.

Boost es una libreria para C++ con funciones variadas de todo tipo (matematicas, manejo de texto y cadenas, manejo de memoria, etc.) viene con el codigo fuente y puedes usarla en programas comerciales y no comerciales, sin restriccion.

Y asi me podria seguir, resumiendo, algunas vienen con codigo fuente, algunas te dejan usar su codigo en programas comerciales, algunas no vienen con codigo fuente, etc. verifica la licencia de cada libreria para que sepas que puedes hacer y que no.

Citar
yo queria acceder al codigo de la libreria allegro (la cual no me vino con el compilador)

Allegro es una libreria de plataforma cruzada (cross-platform) para programacion de videojuegos y multimedia, te tengo buenas noticias, si existe el codigo fuente, inclusive el codigo fuente viene con archivos para que lo puedas compilar tu mismo en diferentes plataformas y compiladores.

Puedes bajar la version mas reciente (en el momento de escribir esto, es la 5.0.2.1) de la siguiente pagina:

http://alleg.sourceforge.net/

Saludos :)

244
C/C++ / Re: acceder al codigo des las librerias
« en: Martes 26 de Abril de 2011, 04:43 »
Bueno, si te refieres a las librerias que vienen con los compiladores (stdio.h, stdlib.h, math.h etc.) resulta que el codigo fuente de esas librerias no lo dan, ya esan compiladas a codigo maquina, y cuando compilas el programa lo que hace es enlazar (link) el codigo maquina de la libreria con el codigo maquina de tu programa.

Lo unico que encontraras dentro de cada archivo .h son los encabezados de las funciones, y la definicion de constantes y tipos de la libreria. Busca una carpeta llamada include dentro de tu compilador, ahi veras los archivos.h, que puedes revisar con un editor de texto, pero como dije antes, no contiene codigo fuente, solo encabezados.

Saludos :)

245
C/C++ / Re: Repetir un programa en c++
« en: Martes 26 de Abril de 2011, 04:34 »
Con clclos repites

Puedes usar while o do..while

saludos :)

246
C/C++ / Re: Error al asignar un puntero char a un struct
« en: Domingo 24 de Abril de 2011, 20:32 »
El problema viene de que tu no puedes asignar directamente una estructura a un arreglo, de la misma forma en que no puedes asignar directamente un arreglo a otro arreglo.

La solucion seria utilizar la funcion memcpy, que copia el contenido de una direccion de memoria a otra direccion de memoria esta funcion se encuentra en la libreria string.h (cstring)

Trate de ponerte un ejemplo utilizando tu codigo, pero debido a que esta incompleto y faltan definiciones no lo pude hacer, pero te dejo un ejemplo parecido para que te des una idea de como funciona.

Código: C++
  1.  
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cmath>
  6.  
  7. typedef unsigned char u_int8_t;
  8.  
  9. struct ether_addr
  10. {
  11.     u_int8_t ether_addr_octet[6];
  12. };
  13.  
  14. struct ether_addr estructura;
  15. char cadena[6];
  16.  
  17. int main()
  18. {
  19.     // La siguientes lineas daran error
  20.     //estructura.ether_addr_octet = "hola";
  21.     //cadena = estructura;
  22.    
  23.     // La siguientes lineas compilaran correctamente
  24.     memcpy (estructura.ether_addr_octet, "Hola", 6);
  25.     // Nota como le paso la direccion (&) de la estructura a la funcion memcpy, si no lo hago, no funciona
  26.     memcpy (cadena, &estructura, 6);
  27.  
  28.     return 0;
  29. }
  30.  
  31.  

Ojala te funcione.

Saludos :)

247
C/C++ / Re: Redondeo a favor del consumidor C+
« en: Sábado 23 de Abril de 2011, 22:27 »
La funcion fmod hace lo mismo que el operador %, la diferencia esta en que el operador % solo sirve con enteros, y la funcion fmod funciona con flotantes (de ahi lo de f mod, float modulus), y dado que compras es flotante, no puedes usar %

Esta funcion foma parte de la libreria math.h por lo que necesitas poner #include <math.h>

pero estas equivocado en esta linea, no pusiste lo mismo que yo:

Código: C++
  1.  
  2. compra = compra - (resto-100);
  3.  
  4.  

observa lo que puse yo, ya que no te dara el mismo resultado, no es lo mismo resto -100 que resto / 100, ya que suponiendo que tenemos compras = 3.17, aqui ves que claramente sobran dos centavos, para sacarlos multiplicas por 100, se convierte en 317, al dividir entre 5 y obtener el modulo (residuo) te dara 2, pero al poner 2 - 100 da -98, no .02, que es lo que necesitas restar para que te de el resultado de 3.15,por eso debes dividir entre 100, no se si entiendas bien el algoritmo.

Saludos :)

248
C/C++ / Re: Redondeo a favor del consumidor C+
« en: Sábado 23 de Abril de 2011, 21:04 »
Antes de seguir, te recomiendo que cuando publiques codigo lo encierres utilizando las etiquetas [ code] [ /code] (sin espacio en los corchetes), ya que mejora la legibilidad del codigo.

Bueno, yo lo resolveria multiplicando la compra por 100 (para eliminar centavos), luego dividiendo ese resultado entre 5 usando la funcion fmod() para obtener el modulo (residuo) de la division, si el residuo es diferente de 0, entonces quiere decir que los centavos no son multiplos de 5, entonces divido el residuo entre 100 para convertirlo a centavos de nuevo, y se los resto a la compra para que quede redondeado a un multiplo de 5.

Lo que explique antes, en codigo, para que te quede mas claro:

Código: C++
  1.  
  2.     // Variable para guardar el residuo de la division
  3.     int resto;
  4.     resto = fmod(compra * 100.0f, 5.0f);
  5.     if (resto != 0)
  6.     {
  7.         compra = compra - (resto / 100.0f);
  8.     }
  9.  
  10.  

Espero te funcione.

Saludos :)

249
C/C++ / Re: Sobre funcion piso y techo con matrices
« en: Viernes 22 de Abril de 2011, 23:40 »
Cita de: "aneroeancoh"
Que falta de seriedad en esta pagina.

Perdoname, pero la falta de seriedad es tuya, no nuestra.

Como te dije antes, este foro no es para resolverte la tarea, como Epa te lo menciono antes, y como tu mismo lo admites, el problema esta bastante claro, no es nada complicado, es manejo basico de arreglos, ciclos y funciones, temas que ya deberias haber aprendido antes, puesto que te lo estan pidiendo como ejercicio. Si fuera algo mas complicado, muy probablemente se te pediria mas informacion para poder ayudarte, pero no es asi. Tu mismo mencionas que las funciones estan en la libreria math.h, ¿porque no buscas ahi?

Aqui lo que se hace es ayudar cuando la persona demuestra que ella esta trabajando por su parte, y al menos yo no lo veo, o acaso ¿donde esta el codigo que hiciste?, ¿donde publicas los mensajes de error que obtuviste al compilarlo? ¿o donde esta el resultado erroneo que obtienes al ejecutar el programa?  nada de eso aparece publicado porque no has hecho nada, entonces tu problema no es que estes obteniendo errores, sino que quieres que te resuelvan el problema sin esforzarte, y como te mencione antes aqui no se hace la tarea.

Ahora si tu problema es que no sabes nada de programacion ni de C++, entonces comienza por lo mas basico.

1. Primero que nada Antes De Postear

2. Luego: Cómo Hacer Preguntas De Forma Inteligente

3. Sigues con: Curso de C++

4. Continuas con Funciones de la libreria math.h (cmath, pagina en ingles)

Saludos :)

P.D. es lo ultimo que te contestare, espero que leas los enlaces que coloque anteriormente y cambies tu actitud.

250
OpenGL / Re: Que alguen quien puede mandar OpenGL por correo
« en: Jueves 21 de Abril de 2011, 19:16 »
No se porque dices que no funciona, y no se porque dices que necesitas descargarlo, si generalmente ya viene incluido en el compilador, desconozco que compilador utilizas, pero al menos en Visual Studio si que funciona, y ya lo trae.

Sospecho que tienes algun error en su utilizacion te recomiendo que leas la guia de NeHe:

http://nehe.gamedev.net/

Saludos :)

Páginas: 1 ... 8 9 [10] 11 12 ... 32