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

#561
Cita de: dato000 en  7 Diciembre 2013, 18:10 PMEl enunciado del ejercicio es este:
Supongo algo salio mal en tu mensaje ya que no esta el enunciado del programa.

Cita de: dato000 en  7 Diciembre 2013, 18:10 PM
printf("%1f ", mt[f][c]);
Esta mal. "%lf" se utiliza con scanf para leer un valor de tipo double, en el caso de printf "%f" es para el tipo double y "%Lf" para el tipo long double.

El primer error en tu segundo programa (C++) se encuentra en la sentencia:
Código (cpp) [Seleccionar]
*(mt_puntero) = &mt[0][0];
La variable "mt_puntero" es un puntero y antes de cualquier uso (por ejemplo indirección) debes almacenar en el una dirección valida.

Otro detalle algo feo: cuando se nombra un array en la mayoría de las ocasiones resulta en la dirección en memoria de su primer elemento, por ejemplo un array de enteros genera un puntero a entero y un array de arrays (tu caso) genera un puntero a array. Por ello el tipo del puntero debe ser "double (*)[M]"

Otro error es utilizar dos bucles como este:
Código (cpp) [Seleccionar]
while (*mt_puntero) ...
Ello funciona con cadenas "a la C" porque estas tienen un valor que indica el final de estas (el '\0') pero en tu caso tal delimitador no existe. En su lugar debes utilizar aritmética de punteros, por ejemplo:
Código (cpp) [Seleccionar]
while (mt_puntero < mt + N) ...

El programa con (algunos de) los cambios:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

#define N 4
#define M 5

int main()
{
   int f, c;
   double mt[N][M];
   
   double (*p_array)[M];
   double *p_double;
   
   for (p_array = mt; p_array < mt + N; p_array++)
      for (p_double = *p_array; p_double < *p_array + M; p_double++)
         *(p_double) = 2.00;
   
   p_array = mt;
   for (f = 0; f < N; f++){
      for (c = 0; c < M; c++){
         cout << *(*(p_array + f) + c) << "--> ";
         cout << &p_array[f][c] << endl;
      }
      cout << endl;
   }
   
   // ...

   return 0;
}


Un saludo
#562
Cuando tengas una duda por favor utiliza el motor de búsqueda ya que es posible que la misma pregunta (o una similar) ya exista en la base de datos de los foros.

Formas hay varias, por ejemplo puedes leer una linea con getline y a continuación tratas de extraer de esta el numero mediante un objeto de clase stringstream. Dos temas sobre ello son:
duda c++
Leer un char como float

Un saludo
#563
Programación C/C++ / Re: basura en mi programa
7 Diciembre 2013, 02:24 AM
* Lo primero a cambiar es el prototipo de la funciona "ingresarDato" a:
void ingresarDato(int *num);
Ya que en C los paréntesis vacíos en una declaración indican un numero indeterminado de argumentos.

* Se deben evitar los comentarios como este:
//Variables de uso interno del programa
Porque su valor como documentación es nulo, en su lugar se debe indicar la intención.

* El problema principal se debe a que tratas de leer el operador como un entero, en su lugar debes leerlo como un carácter con:
printf ("Escribe el operador (+,-,*,/,%%): ");
scanf(" %c", &operador);
{
   int ch;
   
   while ((ch = getchar()) != EOF && ch != '\n')
      ;
}


Lo anterior es solo la forma mas sencilla, lo mejor es modificar la función "ingresarDato" para que acepte dos argumentos: una dirección de memoria (de tipo "void *", esto para pasar cualquiera) y un entero que indique el tipo (int, char, etc.).

Un saludo
#564
Una forma ligeramente distinta de implementar la función es:
Código (cpp) [Seleccionar]
int Convertiraentero(vector<bool>& dato)
{
   int rv = 0;
   
   for (vector<bool>::size_type i = 0; i < dato.size(); i++)
      rv = rv * 2 + dato[i];
   
   return rv;
}


Un saludo
#565
Cita de: Bròquil en  6 Diciembre 2013, 21:24 PMMe referia a si hay una manera de guardar los valores por separado y como hacer para que despues reconozca que un valor pertenece a una variable o a una posición del vector tal y no a otra de otro vector.
Ya lo explico amchacon .

Explicado con un poco mas de detalle: almacenas la información un campo por linea, en el caso de los objetos de clase vector simplemente separas los valores en la linea con espacios. En tu caso las lineas se agrupan en conjuntos de siete lineas ya que ese es el numero de campos: las primeras siete lineas son el primer registro, las siguientes siete el segundo, etc..

Por ejemplo:
cosa
1
1
1
1 1 1 0 0 0
0 0 0 1 1 1
1 2 3 4 5 6
otra_cosa
2
1
1
1 1 1 0 0 0
0 0 0 1 1 1
1 2 3 4 5 6

Para leer el contenido del archivo utilizas objetos de clase fstream, ifstream, etc. dependiendo del caso, aquí lo mejor es buscar ejemplos sobre el uso de archivos en C++ mediante el motor de búsqueda de los foros.

Un saludo
#566
Cita de: jamatbar en 27 Noviembre 2013, 17:55 PMMe compila bien, sin avisos ni nada, y funciona bien salvo cuando le digo que me convierta el 0 en binario (qué evidentemente sigue siendo 0), lo que hace es salir del programa, ¿alguna solución?
Eso sucede porque en la función main llamas a la función "decBin" solo si el numero introducido es mayor que cero:
n = leeNumero();
if (n > 0){
   decBin(n);
}
printf("\n");


Eso es innecesario ya que en la función "leeNumero" verificas que el numero introducido no sea negativo, sustituye el fragmento anterior por:
n = leeNumero();
decBin(n);
printf("\n");

Una vez verifiques el correcto funcionamiento del programa con ese cambio el siguiente (cambio) es eliminar la variable "n".

Un saludo
#567
Cuando desarrolles un programa trata de verificar este con el menor numero de datos, por ejemplo en tu caso puedes reducir el numero de atletas a diez.

Los problemas en tu programa son dos: 1) no tomas en cuenta el numero de elementos utilizados en la lista de atletas (cinco), solo el numero máximo (cien) y 2) calculas mal el numero de elementos en el array "lista":
int tamanio = sizeof(listaAtletas); // tamanio = tamaño array
Eso no dará el resultado correcto porque es el numero de bytes utilizados por el array.

Para conocer el numero de elementos en el array debes utilizar:
int tamanio = (int) (sizeof lista / sizeof lista[0]);
Con eso se soluciona el error critico en tiempo de ejecución pero se procesan de forma innecesaria todos los elementos del array, por eso deberías cambiar la función para que solo procese los elementos utilizados (indicando el numero de estos a la función con un argumento).

Un saludo
#568
Programación C/C++ / Re: Un poco de orientación
27 Noviembre 2013, 03:02 AM
Cita de: jamartinez66 en 26 Noviembre 2013, 23:51 PMLlevo años programando en otros lenguajes sin problema ninguno, pero el C no sé por qué siempre se me ha resistido y creo que ya es hora de que supere este trauma. Me gustaría que me indicaran algún libro/tutorial o lo que sea para aprender,  pero partiendo ya cierto nivel, es decir, que no empiece como casi todos los manuales, con tipos de datos, las estructuras de control, etc
No veo el problema con empezar con C desde cero, si dices que se te dificulta un poco entonces los temas básicos que ya haz visto los puedes tomar como un repaso.

Un tema con algunas recomendaciones sobre libros es Presentación y dudas.

Un saludo
#569
Programación C/C++ / Re: abrir archivo con default
27 Noviembre 2013, 02:37 AM
Tienes que explicar de una forma mas clara que es lo que quieres hacer, para empezar: ¿A que te refieres con "usar la forma default"?

Si te refieres a solo indicar el nombre del archivo, por ejemplo "archivo.txt", la ubicación donde se crea es "implementation defined" (depende de la implementación) y usualmente es el directorio inicial (directorio de trabajo) del proceso.

Un saludo
#570
Programación C/C++ / Re: buscar en un fichero c++
25 Noviembre 2013, 18:27 PM
@br7: las recomendaciones sobre libros, por desgracia todos ellos en ingles, se encuentran en el tema Presentación y dudas .

Otra opción es el libro Thinking in C++ de Bruce Eckel, desde su pagina principal puedes descargar su versión original en ingles o la versión (en desarrollo) en español.

Un saludo