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

#591
Programación C/C++ / Re: Lista doblemente ligada
18 Noviembre 2013, 17:13 PM
El programa revienta en el caso que mencionas porque cuando agregas un elemento como primero debes actualizar (si la lista no esta vacía) el campo "ant" del nodo "cabeza", de esta forma:
void insertarCabeza(int valor,Nodo **cabeza)
{
   Nodo *nuevo;
   
   nuevo = crearNodo(valor);
   nuevo->sig = *cabeza;
   nuevo->ant = NULL;
   
   if (*cabeza != NULL)
      (*cabeza)->ant = nuevo;
   *cabeza = nuevo;
}


Otros dos escenarios donde el programa revienta son:
* Insertar antes del primer elemento.
* Insertar después del ultimo elemento.
La razón es similar: debes verificar si el elemento anterior/posterior existe antes de tratar de realizar los cambios y en el caso de la inserción antes de un nodo debes verificar si ello requiere la actualización del puntero al primer nodo (la variable "cabeza").

Por ultimo deberías eliminar la función "anterior" y rescribir las funciones "insertar_antes" e "insertar_despues" desde cero ya que son un dolor de cabeza y su código es idéntico.

Un saludo
#592
Cita de: kotora en 16 Noviembre 2013, 14:23 PM
input: he probado todas las variantes posibles, y esta es la que menos errores me genera ;)
int main(void) {

        char a[]="0xFF,0xFF";
        uint8_t b=[uint8_t]a;

}
Si no tienes un curso o libro de calidad sobre C deberías conseguir uno, para recomendaciones puedes utilizar el motor de búsqueda de los foros.

El error se genera porque no puedes utilizar corchetes para realizar una conversión explicita, deben ser paréntesis y aun cuando se utilizaran lo que se convertiría en este caso:
uint8_t b = (uint8_t) a;
No seria el contenido del array sino la dirección (en memoria) del array.

Otro problema es que el tipo uint8_t es un tipo entero sin signo y con exactamente ocho bits (usualmente equivalente al tipo "unsigned char") y por ende no puedes tomar una cadena como "\xFF\xFF" (dos caracteres cada uno con el valor 255) y tratar de obtener el valor numérico correspondiente 65,535 para almacenarlo en una variable cuyo rango es 0 .. 255.

Mejor explica de la forma mas clara posible lo que intentas hacer y si puedes poner un ejemplo mejor (sin sockets, solo con una cadena de prueba).

Un saludo
#593
La forma mas fácil es utilizando las funciones fgets+sscanf o bien fscanf. En seudocodigo los pasos son:
Repetir
   Leer una palabra (nombre) en la variable "nombre_temporal"
   Leer una palabra (valor) en la variable "temporal"
   Extraer de la variable "temporal" el valor
   Si el valor es mayor que el maximo:
      Almacenar (copiar) el nombre en la variable "maximo_nombre"
      Almacenar (copiar) el valor en la variable "maximo_valor"


En cuanto a las funciones que te permiten utilizar hay un error en (o confusión con) el enunciado ya que para leer un archivo necesitas como mínimo las funciones fopen, fclose y fgetc (getchar es para leer la entrada estándar).

Un saludo
#594
Cita de: MiguelYeah en 16 Noviembre 2013, 12:45 PMtengo que entregar un ejercicio en C, y no tengo mucha idea. Lo tengo hecho en Java
El valor de retorno de la función main debe ser int y no deberías utilizar "fflush(stdin)". Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

Si apenas empiezas con el lenguaje C sera algo difícil ya que debes utilizar punteros y las funciones:
* strlen para conocer el numero de caracteres de una cadena sin incluir el '\0'.
* malloc para reservar un bloque de memoria donde almacenar una cadena.
* strcpy para copiar la cadena en el bloque de memoria indicado.
* sprintf para imprimir varias cadenas y caracteres en un bloque de memoria.

Supongo esas funciones ya las vieron en clase, ¿Correcto?

Un saludo
#595
El error se genera por la forma en que defines las macros:
Código (cpp) [Seleccionar]
#define sueldoIng = 7500000
#define sueldoOpe = 5000000
#define sueldoDis = 6000000
#define sueldoObr = 2500000


Debes eliminar el carácter '=' de ellas:
Código (cpp) [Seleccionar]
#define sueldoIng  7500000
#define sueldoOpe  5000000
#define sueldoDis  6000000
#define sueldoObr  2500000


Un saludo
#596
El programa lo debes rescribir desde cero empezando por la lectura de las lineas del archivo. Empieza con el caso mas sencillo asumiendo que nunca habrá mas de N lineas y ninguna de ellas tendrá mas de M caracteres.

Los pasos son:

1) Abres el archivo (función fopen).

2) Mediante un bucle:
2.1) Lees una linea en un array auxiliar (función fgets).
2.2) Obtienes su longitud y descartas el avance de linea (función strlen).
2.3) Reservas un bloque de memoria del tamaño justo (función malloc).
2.4) Copias en el bloque la linea (función strcpy).

3) Cierras el archivo.

El siguiente paso es ordenar las lineas (función sort) e imprimirlas mediante un bucle con printf (salida estándar) o fprintf (si la salida es un archivo).

Puedes revisar temas con ejemplos de esas funciones, para ello solo tienes que utilizar el motor de búsqueda de los foros.

Un saludo
#597
Programación C/C++ / Re: Temporizador en C
17 Noviembre 2013, 01:32 AM
Depende del SO que utilices, en MS Windows puedes utilizar la función Sleep. Si necesitas mas información sobre el tema puedes utilizar el motor de búsqueda de los foros.

Un saludo
#598
Programación C/C++ / Re: programacion en c
17 Noviembre 2013, 01:00 AM
Cita de: ProN00b en 17 Noviembre 2013, 00:40 AMEn esta linea
scanf("%f", & v);

Tienes que pegar el & al v, de tal forma que quede asi
scanf("%f", &v);

Si lo colocas separado no te va a pasar nada... prueba y comenta
No hay problema en colocar un espacio entre el operador '&' y su operando ya que el espacio no es significativo, para el caso se puede colocar así:
scanf
(
"%f"
,
&
v
)
;

Sin afectar el funcionamiento del programa (pero si su legibilidad).

Un saludo
#599
Con todo respeto el programa que mencionas no tiene relación alguna con lo que pides.

Si la intención es crear una versión básica del programa sort los pasos que debe realizar tu programa son:
1) Leer cada una de las lineas de la entrada estándar o el archivo indicado almacenando cada una en un bloque de memoria con el tamaño justo para ella.
2) Ordenar las lineas mediante la función qsort (prototipo en <stdlib.h>) o una propia.
3) Enviar todas las lineas ordenadas a la salida estándar (o el archivo indicado).

Un saludo
#600
Cita de: Proweb en 16 Noviembre 2013, 10:48 AMNo me refiero a libros de ningun lenguaje especifico, si no libros mas generales que ayuden a crear un codigo limpio, con buena estructura y que te ayuden a pensar como un programador.
Un libro de calidad sobre programación es The Practice of Programming.

Un saludo