Ayuda para programacion en c

Iniciado por nikko621, 16 Septiembre 2019, 14:40 PM

0 Miembros y 1 Visitante están viendo este tema.

nikko621

Realice un programa en donde pueda realizar un menú que permita
a. insertar elementos a una lista enlazada simple
b. borrar elementos a una lista enlazada simple
c. borrar completamente la lista enlazada simple
d. mostrar los elementos de una lista enlazada simple
e. Calcular el promedio de los valores que se le insertaron a la lista enlazada simple
f. Que indique el valor menor y mayor de la lista enlazada simple

K-YreX

Muy bien, ya tenemos el enunciado del ejercicio pero se te ha olvidado poner dónde está tu duda... :silbar:
Si en realidad el asunto de este tema no era "ayuda para programacion en c" y lo que querías poner era "Alguien que me haga la tarea" no te va a funcionar. En el foro ayudamos a hacer ejercicios tanto guiando sobre un problema concreto o localizando los errores que pueda tener un código, pero desde luego que nadie va a hacerte el ejercicio y te lo va a dar hecho.

Lo siento por tomármelo con humor pero son muchos los que se crean una cuenta y su primera aportación en el foro (y muchas veces, la última) es el enunciado de un ejercicio hecho. Si quieres ayuda, coloca tu código usando las etiquetas de Código GeSHi para que lo veamos o concreta qué ayuda necesitas para poder empezar. Si no quieres eso y prefieres esperar a alguien que te lo dé hecho... Suerte, la vas a necesitar.  :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

EdePC

Saludos,

- Cierto, pero como guía puedes ver este par de vídeos para que te quede claro eso de Listas Enlazadas:

https://youtu.be/WxoGvBzWuGs

https://youtu.be/NPmwuR4VbKk

- También puedes guiarte de ese ebook gratuito en español:
Fundamentos de programación en C, por Nacho Cabanes
http://www.nachocabanes.com/fich/descargar.php?nombre=cc095.pdf

- Ya luego lo intentar hacer y si tienes dudas puntuales las indicas en el foro.

nikko621

se me habia pasado poner el codigo no lo estaba poniendo para que me lo hicieran ya resolvi mi duda muchas gracias..

#include <stdlib.h>
#include <stdio.h>
int opcion=0,nvalor=0,borrar=0,seguir=0,seguir2=0,acum=0,i=0,j=0;
typedef struct _nodo
{
   int valor;
   struct _nodo *siguiente;
}
tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;


void Insertar(Lista *l, int v);
void Borrar(Lista *l, int v);
int ListaVacia(Lista l);
void BorrarLista(Lista *);
void MostrarLista(Lista l);
void PromedioLista(Lista I);

int main()
{
   Lista lista = NULL;
   pNodo p;
   do
   {
      printf("\n   1)Insertar elementos. 2)Mostrar elementos. 3)Borrar elementos . \n4) Borrar toda la lista. 5)Promedio \n");scanf("%d",&opcion);
      if(opcion==1)
      {
         do
         {
            printf("\n Introduzca el valor de la lista:  ");scanf("%d",&nvalor);
            Insertar(&lista, nvalor);
            printf("\n desea introducir otro valor  en la lista: (1) Si (2) No:  ");scanf("%d",&seguir);
         }
         while(seguir==1);
      }
      else
      {
         if(opcion==2)
         {
            printf("\n Mostrar la lista\n");
            MostrarLista(lista);
         }
         else
         {
            if(opcion==3)
            {
               do
               {
                  printf("\n Valor de la lista a borrar:  ");scanf("%d",&borrar);
                  Borrar(&lista, borrar);
                  MostrarLista(lista);
                  printf("\n Desea borrar otro elemento de la lista : (1) Si (2) No:  ");scanf("%d",&seguir);
               }
               while(seguir==1);
            }
            else
            {
               if(opcion==4)
               {
                  printf("\n Borrar toda la Lista :");
                  BorrarLista(&lista);
                  MostrarLista(lista);
               }
            else
            {   
               if (opcion ==5)
               {
                  printf ("\nPromedio\n");
                  PromedioLista(lista);
               }
            }
         }
   }
}
      printf("\n Desea realizar otra operacion: (1) Si  (2) No  ");scanf("%d", &seguir2);
      
   }while(seguir2==1);
   
   /*Insertar(&lista, 20);
   Insertar(&lista, 10);
   Insertar(&lista, 40);
   Insertar(&lista, 30);*/
   /*MostrarLista(lista);*/
   /*Borrar(&lista, 10);
   Borrar(&lista, 15);
   Borrar(&lista, 45);
   Borrar(&lista, 30);
   Borrar(&lista, 40);
   MostrarLista(lista);*/
   /*BorrarLista(&lista);
   getchar();*/
   return 0;
}
void Insertar(Lista *lista, int v)
{
   pNodo nuevo, anterior;

   nuevo = (pNodo)malloc (sizeof(tipoNodo));
   nuevo->valor = v;

   if(ListaVacia(*lista) || (*lista)->valor > v)
   {

      nuevo->siguiente = *lista;
      *lista = nuevo;
        acum= acum+v;
   }
   else
   {
      anterior = *lista;
      while(anterior->siguiente && anterior->siguiente->valor <= v)
          anterior = anterior->siguiente;
      nuevo->siguiente = anterior->siguiente;
      anterior->siguiente = nuevo;
   }
      i=i+acum;
      j++;

}

void Borrar(Lista *lista, int v)
{
   pNodo anterior, nodo;
   nodo = *lista;
   anterior = NULL;
   while(nodo && nodo->valor < v)
   {
       anterior = nodo;
       nodo = nodo->siguiente;
   }
   if(!nodo || nodo->valor != v) return;
   else {
       if(!anterior)
          *lista = nodo->siguiente;
       else
          anterior->siguiente = nodo->siguiente;
       free(nodo);
   }
}

int ListaVacia(Lista lista)
{
   return (lista == NULL);
}

void BorrarLista(Lista *lista)
{
   pNodo nodo;
   while(*lista) {
       nodo = *lista;
       *lista = nodo->siguiente;
       free(nodo);
   }
}

void MostrarLista(Lista lista)
{
   pNodo nodo = lista;
   if(ListaVacia(lista)) printf("   Lista vacía\n");
   else
   {
       while(nodo)
       {
          printf("%d -> ", nodo->valor);
          nodo = nodo->siguiente;
     }
     printf("\n");
   }
}

void PromedioLista (Lista lista)
{
   float prom=0.0;
   pNodo nodo = lista;
      if(ListaVacia(lista)) printf("   Lista vacía\n");
      else
      {
         prom = (acum/j);
      }
      printf ("\nPROMEDIO:\n %.2f\n", prom);
      }