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

#641
El problema se encuentra en la funcion "buscarRegistro", en la linea:
fgets(Registro, tam, ap);
Y se debe a que le estas indicando el numero exacto de caracteres del registro pero la función utilizara el ultimo para almacenar el '\0'.

Para solucionarlo basta con tener eso en cuenta cambiando la llamada a fgets a:
fgets(Registro, tam + 1, ap);

Un saludo
#642
Programación C/C++ / Re: Libreria de grafos
25 Octubre 2013, 16:22 PM
En una matriz de adyacencias solo almacenas el peso del vértice o bien un valor especial para indicar que el vértice entre las aristas no existe. El caso de la lista de adyacencias es similar (solo si existe el vértice se almacena el peso correspondiente).

Si tenemos este grafo:
A ---- B ---- C ---- D
       |      |
       |      |
       E ---- F


La matriz de adyacencias es:
  A B C D E F
A - 4 - - - -
B 4 - 4 - 2 -
C - 4 - 4 - 2
D - - 4 - - -
E - 2 - - - 4
F - - 2 - 4 -

Donde cada entrada "matriz[ i ][ j ]" indica si las aristas están conectadas o no.

Un saludo
#643
Cita de: Ccomplica en 25 Octubre 2013, 14:39 PMme pregunta es porque ponen el asterisco del lado derecho del nombre del tipo, en vez de a la izquierda, que diferencia plantea eso? Gracias.

typedef _archivo* Archivo;
Tengo mis dudas sobre tu pregunta.

En una declaración después del tipo (esto es, a su derecha) se puede utilizar un asterisco para indicar que la variable declarada (o alias en el caso de typedef) es un puntero. Por ejemplo:
Código (cpp) [Seleccionar]
struct _archivo {

};

// ...

// "Archivo" es un alias o nombre alternativo de "_archivo *"
typedef _archivo *Archivo;

// "p" es un puntero de tipo "_archivo *"
_archivo *p;


El asterisco solo se utiliza a la izquierda de una variable cuando esta es un puntero, ahí el carácter '*' es el operador de indirección y permite acceder al objeto en la dirección indicada:
Código (cpp) [Seleccionar]
struct _archivo {

};

// ...

_archivo foo;
_archivo bar;

// "p" es un puntero de tipo "_archivo *"
_archivo *p;

// ...

// Almacenamos la direccion de "foo" en "p"
p = &foo;

// ...

// Accedemos a la variable "foo" utilizando indireccion
bar = *p;


Si es otra cosa entonces por favor trata de preguntar de una forma mas clara y si es posible con un ejemplo.

Todo eso debe describirse en tu material de referencia, busca las secciones sobre estructuras, punteros y uso de alias (mediante typedef).

Un saludo
#644
Programación C/C++ / Re: Comparación de cadenas
24 Octubre 2013, 15:18 PM
En este caso una alternativa a strcmp es sscanf (prototipo en <stdio.h>) para verificar si coincide la primera palabra y al mismo tiempo extraer el numero entero. Esa función opera de forma similar a scanf pero en lugar de obtener los caracteres de la entrada estándar utiliza la cadena indicada como su primer argumento.

Por ejemplo:
char linea[ALGUN_VALOR];
int numero;

/* ... */

if (sscanf(linea, "add %d", &numero) == 1){
   /* comando add */
}else if (sscanf(linea, "mul %d", &numero) == 1){
   /* comando mul */
}


Un saludo
#645
Programación C/C++ / Re: Libreria de grafos
24 Octubre 2013, 03:19 AM
Una opcion para almacenar los vertices es una lista, la otra una matriz. Como siempre puedes empezar revisando sitios como Wikipedia.

Un saludo
#646
Cita de: edr89 en 24 Octubre 2013, 00:22 AMentiendo, entonces esto se resuelve en el diseño del algoritmo, no en la códificación
Al cambiar el algoritmo por fuerza vas a cambiar el código fuente.

Las sugerencias van en la linea del desarrollo de funciones que cumplan una sola tarea, si tienes entrada, salida y la conversión de base ello resultara en tres funciones, una para cada operación.

Tu función principal debe terminar mas o menos así:
char *base10_to_N(int numero, unsigned base)
{
   char *rv;
   
   /* ... */
   
   return rv;
}

En ella realizas la conversión, solo eso. En un caso ideal si quieres reutilizar esa función en otro programa solo necesitas incluir la declaración de la interfaz y su implementación.

Un saludo
#647
Programación C/C++ / Re: Tabular salida en C
22 Octubre 2013, 02:44 AM
Cita de: eferion en 21 Octubre 2013, 08:54 AMLa forma correcta de formatear esta salida es configurar printf para que "reserve" un espacio mínimo para cada campo
Solo un comentario: cuando se indica la anchura del campo la alineación predeterminada es a la derecha, "%-" se utiliza cuando se quiere una alineación a la izquierda.

Un saludo
#648
Programación C/C++ / Re: Presentación y dudas
21 Octubre 2013, 15:39 PM
Lo primero que debes obtener es un manejo solido del SO que estés utilizando junto con sus aplicaciones de utileria mas importantes como administrador de archivos, interprete de comandos y editor de texto.

Para los fundamentos en programación puedes utilizar PSeInt.

Que lenguaje elegir es una pregunta complicada y abre la puerta a las discusiones que son divertidas de ver (si se tiene un montón de tiempo libre) pero con muy poco (o nada) rescatable. Mejor investiga por un tiempo y tomas una decisión.

----

Si decides por C dos libros de calidad para empezar con ese lenguaje:

Title: The C Programming Language
Author: Brian W. Kernighan, Dennis M. Ritchie
Format: Paperback, 274 pages
Publisher: Prentice Hall; 2nd edition (April 1, 1988)
ISBN-10: 0131103628
ISBN-13: 978-0131103627

Title: Pointers on C
Author: Kenneth Reek
Format: Paperback, 636 pages
Publisher: Addison-Wesley; 1st edition (July 25, 1997)
ISBN-10: 0673999866
ISBN-13: 978-0673999863

Y uno bueno sobre algoritmos:

Title: Algorithms in C
Subtitle: Parts 1-5 (Bundle): Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms
Author: Robert Sedgewick
Format: Paperback, 720 pages
Publisher: Addison-Wesley Professional; 3rd edition (September 17, 1997)
ISBN-10: 0201314525
ISBN-13: 978-0201314526

----

En el caso de C++ para aprender este dos buenos son:

Title: Accelerated C++
Subtitle: Practical Programming by Example
Author: Andrew Koenig, Barbara E. Moo
Format: Paperback, 352 pages
Publisher: Addison-Wesley Professional; 1st edition (August 14, 2000)
ISBN-10: 020170353X
ISBN-13: 978-0201703535

Title: C++ Primer
Author: Stanley B. Lippman, Josée Lajoie, Barbara E. Moo
Format: Paperback, 912 pages
Publisher: Addison-Wesley Professional; 4th edition (February 14, 2005)
ISBN-10: 0201721481
ISBN-13: 978-0201721485

Y dos buenos como referencia:

Title: The C++ Programming Language
Subtitle: Special Edition
Author: Bjarne Stroustrup
Format: Hardcover, 1030 pages
Publisher: Addison-Wesley Professional; 3rd edition (February 1, 2000)
ISBN-10: 0201700735
ISBN-13: 978-0201700732

Title: The C++ Standard Library
Subtitle: A Tutorial and Reference
Author: Nicolai M. Josuttis
Format: Hardcover, 832 pages
Publisher: Addison-Wesley Professional; 1st edition (August 12, 1999)
ISBN-10: 0201379260
ISBN-13: 978-0201379266

Todos los libros en ingles.

Un saludo
#649
Programación C/C++ / Re: [?] Archivos Binarios
20 Octubre 2013, 15:05 PM
En mi opinión los enunciados no explican de forma clara las operaciones a realizar. El primero indica "Los resultados se deben guardar ... con una precisión de tres decimales" y ello implica el uso de la función fprint sin embargo en el siguiente enunciado se refiere al archivo "10vol_esfera.dat" como uno binario cuando en realidad es texto.

Otro problema con los archivos binarios es que el numero y orden de sus bytes dependen de la implementación. En el caso de cuatro bytes por entero el valor 0x03000000 (o 0x00000003) aparece en dos ocasiones en el archivo y como utilizas la funcion feof para controlar el bucle (no deberias, utiliza directamente el valor de retorno de fread) el ultimo puede presentarse tambien como repetido.

Platica con tu profesor, en un caso ideal debe darles no solo el archivo de entrada sino también el de salida (para que verifiquen que el programa funciona correctamente)

Un saludo
#650
Programación C/C++ / Re: ¿Qué me falla?
17 Octubre 2013, 03:06 AM
Cita de: Xenomorfo77 en 17 Octubre 2013, 00:50 AMhe probado y hace el primer loop bien pero en alumno2 el programa crashea
Cuando actualices un programa por favor no respondas de esa forma ya que no hay manera de ayudarte a solventar el error, en su lugar publica el código fuente completo y actualizado. También indica el lenguaje de programación ya que C y C++ tienen diferencias como en este caso con el paso por referencia.

En la función tienes otro error:
w = (float**) calloc(filas,sizeof(float *));
for(i=0;i<columnas;i++) {
  w[i] = (float *) calloc(columnas,sizeof(float));
}

Después de reservar el bloque principal debes reservar el bloque para cada fila utilizando como limite del bucle el numero de filas pero tu utilizas el numero de columnas.

----

Si el lenguaje es C ...

Para solucionar los problemas primero debes cambiar la función indicando que su primer argumento sera de tipo "float ***", dentro de la función aplicas indirección para acceder al objeto apuntado (la variable "m" de la función main):
void reserva(float ***w,int filas,int columnas)
{
  int i;
 
  *w = calloc(filas, sizeof **w);
  for (i = 0; i < filas; i++)
     (*w)[i] = calloc(columnas, sizeof *(*w)[i]);
}


Y cuando llames a la función pasas como primer argumento la dirección de la variable "m" utilizando el operador "dirección de" (el '&'):
reserva(&m, numeroalumnos, numeronotas);

Un saludo