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 - madness

Páginas: [1]
1
Como prometí, aquí les traigo el código para insertar nombres en una lista, es decir, en cada nodo insertaremos un nombre:

Código: [Seleccionar]
#include "lista.h"


Lista *creaLista()
{
  Lista *nuevo;

  if(nuevo = (Lista *) malloc(sizeof(Lista))) // Pide memoria para la lista
    {
      nuevo->tamano = 0; // Lista vacía
      nuevo->inicio = nuevo->fin = NULL; // Inicio y Fin apuntan a NULL
    }
  return nuevo;
}


Nodo *crearNodoCola(Info *dato, Nodo *ptro)
{
  Nodo *nuevo;
  if(nuevo = (Nodo *) malloc(sizeof(Nodo))) // Pide memoria para el nodo
    {
      nuevo->datos = dato;
      nuevo->siguiente = ptro;
    }
  return nuevo;
}


Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente)
{
  Nodo *nuevo;
  if(nuevo = (Nodo *) malloc(sizeof(Nodo)))
    {
      nuevo->datos = dato;
      nuevo->anterior = anterior;
      nuevo->siguiente = siguiente;
    }
  return nuevo;
}


Info *agregar(char *dato1)
{
  Info *pdato;
  if(pdato = (Info *) malloc(sizeof(Info))){
      pdato->dato1 = dato1;
      return pdato;
  }else{
      printf("problemas en la inserción\n");
      exit(0);
  }
}

void ingresar(Info **pdato, char *dato1)
{
  if(*pdato = (Info *) malloc(sizeof(Info)))
    {
      (*pdato)->dato1 = dato1;
    }
  else
    {
      printf("problemas en el push\n");
      exit(0);
    }
}

bool insertar(Lista *plista, char *nombre)
{
Nodo *aux;
Info *dato = agregar(nombre);
  if(aux = crearNodo(dato, NULL, plista->inicio)){
      if(plista->tamano == 0)
        plista->fin = aux;
      else
        plista->inicio->anterior = aux;
      plista->inicio = aux;
      plista->tamano++;

      return true;
    }
  else
    return false;
}

void recorrer(Lista *plista)
{
  Nodo *i;
  i = plista->inicio;
  printf("La lista tiene = ");
  while(i != NULL)
    {
      printf("%s ", i->datos->dato1);
      i = i->siguiente;
    }
  printf("\n");
}


int main(int argc, char *argv[])
{
  Lista *nombres;
  nombres = creaLista();
 
  char n1[100]="Nicole", n2[100]="Sandra", n3[100]="Javiera", n4[100]="Camila", n5[100]="Johana";
 
  insertar(nombres, n1);
  insertar(nombres, n2);
  insertar(nombres, n3);
  insertar(nombres, n4);
  insertar(nombres, n5);
  recorrer(nombres);

  return 0;
}

A continuación lista.h

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

 
typedef struct{
  char* dato1;
}Info;
 
typedef struct nodo {
  Info *datos;
  struct nodo *siguiente;
  struct nodo *anterior;
}Nodo;

 
typedef struct lista {
  Nodo *inicio;
  Nodo *fin;
  int tamano;
}Lista;


Lista *crearLista();
Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente);
void destruirLista(Lista *plista);
bool insertar(Lista *plista, char *nombre);
void recorrer(Lista *plista);

Espero que les sirva :). Ahora voy por árboles binarios xD. Saludos :)

2
Pero por supuesto ! lo que pasa esque no quiero que me copien mis compañeros después de mucho esfuerzo ! pero a penas termine el plazo lo subo por acá :D ! Saludos!

3
Que tal ! Finalmente pude lograrlo ! después de unas horas modificando el código resultó :D. Cuando termine el plazo para entregar mi tarea la subiré por acá, ya que es posible que mis compañeros de Universidad pueden caer en esta página y me copian todo! jajaja xD. Saludos!

4
Hola Cesar :D, aquí va mi código:

Código: [Seleccionar]
Lista *creaLista()
{
  Lista *nuevo;

  if(nuevo = (Lista *) malloc(sizeof(Lista))) // Pide memoria para la lista
    {
      nuevo->tamano = 0; // Lista vacía
      nuevo->inicio = nuevo->fin = NULL; // Inicio y Fin apuntan a NULL
    }
  return nuevo;
}
void destruirLista(Lista *plista)
{
  Nodo *aux;

  while(plista->inicio != NULL)
    {
      aux = plista->inicio;
      plista->inicio = plista->inicio->siguiente;
      free(aux->datos);
      free(aux);
    }
  free(plista);
}


Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente)
{
  Nodo *nuevo;
  if(nuevo = (Nodo *) malloc(sizeof(Nodo))) // Pide memoria para el nodo
    {
      nuevo->datos = dato;
      nuevo->anterior = anterior;
      nuevo->siguiente = siguiente;
    }
  return nuevo;
}

Info *agregar(int dato1)
{
  Info *pdato;
  if(pdato = (Info *) malloc(sizeof(Info)))
    {
      /* Se almacena la información en Info */
      pdato->dato1 = dato1;
      /* pdato->dato2 = dato2; */
      return pdato;
    }
  else
    {
      printf("problemas en la inserción\n");
      exit(0);
    }
}


bool insertar(Lista *plista, char info)
{
  Nodo *aux;
  Info *dato = agregar(info);
  // Se crea un nodo con datos y apunta al siguiente nodo
  if(aux = crearNodo(dato, NULL, plista->inicio)) //además, se almacena en aux
    {
      if(plista->tamano == 0)
        plista->fin = aux;
      else
        plista->inicio->anterior = aux;
      plista->inicio = aux;
      plista->tamano++;

      return true;
    }
  else
    return false;
}
int main(int argc, char *argv[])
{
  Lista *L1, *L2, *L3, *L4, *L5;
  L1 = creaLista();
  L2 = creaLista();
  L3 = creaLista();
  L4 = creaLista();
  L5 = creaLista();
  Cola *C1, *C2, *C3, *C4, *C5;
  C1 = creaCola();
  C2 = creaCola();
  C3 = creaCola();
  C4 = creaCola();
  C5 = creaCola();
  Pila *P1, *P2, *P3, *P4, *P5;
  P1 = creaPila();
  P2 = creaPila();
  P3 = creaPila();
  P4 = creaPila();
  P5 = creaPila();
  char polola1[100], polola2[100], polola3[100],
  polola4[100], polola5[100];
  int i;
  printf("Ingrese nombre: ");
  scanf("%s", polola1);
  /*printf("Ingrese nombre: ");
  scanf("%s", polola2);
  printf("Ingrese nombre: ");
  scanf("%s", polola3);
  printf("Ingrese nombre: ");
  scanf("%s", polola4);
  printf("Ingrese nombre: ");
  scanf("%s", polola5);*/
  for(i=0;i<strlen(polola1);i++)
  {
   insertar(L1, polola1[i]); 
  }
  /*for(i=0;i<strlen(polola2);i++)
  {
   insertar(L2, polola2[i]); 
  }
  for(i=0;i<strlen(polola3);i++)
  {
   insertar(L3, polola3[i]); 
  }
  for(i=0;i<strlen(polola4);i++)
  {
   insertar(L4, polola4[i]); 
  }
  for(i=0;i<strlen(polola5);i++)
  {
   insertar(L5, polola5[i]); 
  }*/
 
  return 0;
}

Aquí va el programa.h:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
 
typedef struct info {
  int dato1;
  /* int dato2; */
  /* ... */
}Info;

 
typedef struct nodo {
  Info *datos;
  struct nodo *siguiente;
  struct nodo *anterior;
}Nodo;

 
typedef struct lista {
  Nodo *inicio;
  Nodo *fin;
  int tamano;
}Lista;


/* Funciones de las operaciones básicas*/
Lista *crearLista();
Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente);
Info * agregar(int dato1);
bool insertar(Lista *plista, char info);;

Realmente no sé cómo se insertan varios nombres en una sola lista... :/ solo logre insertar en una lista todos los carácteres de un nombre pero eso no es válido :( Y no solo eso me piden, ya que también me piden ingresar nombres en pilas y colas :/ ayuda por favor !

5
Sí, la verdad es que falta las estructuras que definí en miprograma.h, el cual lo incluí en el programa que expuse y, al compilarlo, solo imprime el primer caracter :(, aún asi definiendo nombreMed[100] :/.  El problema que tengo es que debo insertar nombres en una lista, y cada nombre de la lista es asociado a una cola... Ya no sé que hacer u.u no me resulta insertar un nombre completo :( ayuda porfa :(

6
Muy buenas tardes gente :) Necesito de su ayuda :( estoy realizando una tarea en donde debo ingresar nombres diferentes en una lista, y lo único que he logrado es que guarde una letra ! A continuación mi código:

Código: [Seleccionar]
Persona *agregarNom(char nombre)
{
  Persona *pdato;
  if(pdato = (Medicos *) malloc(sizeof(Persona)))
    {
      /* Se almacena la información en Info */
      pdato->nombre = nombre;
      /* pdato->dato2 = dato2; */
      return pdato;
    }
  else
    {
      printf("problemas en la inserción\n");
      exit(0);
    }
}

char insertarNomMed(Lista *plista, char persona)
{
  Nodo *aux;
  int i;
  Persona *dato = agregarNom(persona);
  // Se crea un nodo con datos y apunta al siguiente nodo
  if(aux = crearNodo(dato, plista->inicio)) //además, se almacena en aux
    {
      plista->inicio = aux;
      if(plista->tamano == 0)
        plista->fin = aux;
      plista->tamano++;
     }
}

int main(int argc, char *argv[])
{
  Lista *L;
  L = creaLista();
  int i;
  char nombreMed[1];
  printf("Ingrese nombre del medico: ");
  scanf("%s", nombreMed);
  insertarNomMed(L, *nombreMed);
  return 0;
}

Espero que me puedan ayudar lo mas pronto posible y muchas gracias de antemano :D

7
Ogramar! sé que es un poco tarde mi respuesta jaja, pero ya logre hacer la tarea, y me fue mejor de lo que esperaba a pesar de no saber mucho jaja. Agradesco tu ayuda y espero que te hagas presente en próximas dudas que tenga xD Gracias!

8
Ogramar ! te agradesco demaciado por tu dedicación y tiempo para solucionar mi problema ! De verdad ! :D. Mientras esperaba tu respuesta me guie por videos en youtube e información de google, y este es parte del código que he construído:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main()
{
 int *arreglo, i=0, j;
 arreglo=(int*)malloc(n*sizeof(double));    //La variable n es la cantidad de numeros que se guardaran en el array.
 if(arreglo==NULL){ printf("<ERROR: No se ha generado espacio suficiente en la memoria>\n"); }
 else
 { 
  aleatorio(arreglo, n);
  j++;
  for(i=0;i<n;i++)
  {
   if(*(arreglo+i)>*(arreglo+j)) //Si el arreglo en posicion i es mayor a arreglo en posicion j
   {
    // Ahora no se como ir cambiando de posicion en caso de que cumpla la condición siendo punteros! :(   
   }
  }
 }
}

No entiendo parte de tu codigo al haber variables con "->" :( y, ¿Qúe hacer en caso de que no haya espacio suficiente en mi memoria?. Sé que he molestado mucho jaja pero con solo saber que hacer en el if, creo que ya tendría gran parte de mi tarea hecha y te lo agradecería tanto x.x jaja :(. Saludos bro!

9
Ok bro, pero la verdad es que tengo muy poco conocimiento de estructura, ya que es primera vez que tomo esta asignatura :(. Según lo que explicó mi profesor es que debo también realizar el código, y ahí es donde me complica más, ya que no sé como usar la funcion Malloc para reservar una cierta cantidad de memoria para crear los arreglos según la cantidad que estime necesaria el usuario. Por ejemplo para generar un arreglo yo hacia lo siguiente:

#include <stdio.h>
#inclide <stdlib.h>

int main()
{
 int n, i, menor, mayor;
 printf("Ingrese el largo del arreglo a construir: ");
 scanf("%d", &n);
 int arreglo[n];
 //Desde aquí generaba un for, en donde se llenaba el arreglo hasta "n".
 //Luego haría otro for para ir chequeando y ordenando de menor a mayor
}

¿Cómo sería este mismo código pero estructurado y utilizando memoria dinámica?. De verdad me sería de gran ayuda si me dieras un empujonsito, ya que yo solito tuve que aprender C y en otra asignatura debo aprender Java desde 0 y, aunque me guste programar, con todo esto ya me quiero morir! jeje :(.

10
Hola Ogramar :D! es un poquito grande, mira:

"Realizar una comparacion que contemple un analisis respecto del tamaño de la entrada vs. el tiempo de los algoritmos de ordenamiento. Debe implementar cuatro algoritmos de ordenamiento: dos basicos y dos mas avanzados.

* Debe utilizar los siguientes tamaños de arreglos: 50, 100, 500, 1000, 5000, 10000, 50000, 100000.
* Para la generacion del arreglo de datos debe utilizar memoria dinamica.

Los algoritmos de ordenacion basico son: Seleccion, burbuja e insercion.
Los algoritmos de ordenacion mas avanzados son: Shell, Mergesort, Radixsort, Binsort y Quicksort"

Ayuda por favor :(

11
Muy buenas noches a todos! he recurrido a esta página con el objetivo de que me puedan ayudar! Soy un estudiante de Ing. en Computación e Informática y me han dado una Tarea en Estructura de Datos donde debo realizar un programa utilizando memoria dinámica y no tengo ningún conocimiento de este tema! solo tengo entendido que la funcion Malloc funciona para este tipo de memorias :(
Espero que me puedan ayudar ya que no quiero reprobar el ramo :( ! De ante mano muchas gracias :D

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".