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ú

Temas - Principios en C

#1
Hola..

Tengo un codigo que hice el cual crea y ordena en forma alfabeticamente creciente un lista de caracteres, se pueden insertar elementos a la lista y eliminarlos.

Pero me falta dos puntos para terminar mi programa:

1° tengo que imprimir con una función recursiva la lista ordenada alfabeticamente decreciente, es decir de z-a,.

2° Y hacer una funcion recursiva que al momento que yo ingrese un elemeto que quiero que se busque en la lista me diga cuantos caracteres hay antes y cuantes después del caracter que yo indique.

Aqui esta mi codigo, pero quisiera ver si me ayudan y me pueden decir como hacer estas dos funciones recursivas que me faltan, por favor:


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

struct lista_nodos {
     
      /*Se declara una estructura*/
     
      char valor;
      struct lista_nodos *sigPtr; };
     
      typedef struct lista_nodos LISTA;
      typedef struct lista_nodos *LISTPREVPTR;
      /*Se usa un alias para la estructura lista_nodos*/
     
      void inserta(LISTPREVPTR*, char);
      /*Se declara la función inserta*/
      char elimina (LISTPREVPTR*, char);
      /*Se declara la función elimina*/
      int estavacia (LISTPREVPTR);
      /*Se declara la función estavacia*/
      void imprime (LISTPREVPTR);
      /*Se declara la función imprime*/
      void menu (void);
      /*Se declara la funcion menu*/
     
      main(){
             
      LISTPREVPTR inicioPtr = NULL;
      int avanza, selec;
      char dato;
      printf("\n\n%s\n\n","<Un programa que construye listas dinamicas>");
      menu();
      /*Se manda llamar a la función menu*/
      printf("\n%s","\n\nLa opción seleccionada es: ");
      scanf("%d",&selec);
      /*Se lee la función que elige el usuario*/
     
      while(selec != 3){
      /*Cuando la opción elegida por el usuario sea distinta de 1, 2 o 3
      se despliega nuevamente el menu*/
                 
      switch(selec){
      /*Se definen las acciones a realizar conforme a la opción que elija
      el usuario*/
                   
      case 1:
     
      printf("\n%s","Deme un caracter: ");
      scanf("\n%c", &dato);
      inserta(&inicioPtr, dato);
      /*Se manda llamar a la funcón inserta*/
      imprime(inicioPtr);
      /*Se manda llamar a la función inicio*/
      break;
     
      case 2:
           
      if(!estavacia(inicioPtr)){
                             
      printf("\n%s","El caracter a eliminar es: ");
      scanf("\n%c",&dato);
     
      if(elimina(&inicioPtr, dato)){
      /*Se manda llamar a la función elimina*/
     
      printf("\n%s%c%s\n\a\a","El caracter: ",dato,"fue eliminado de la lista");
      imprime(inicioPtr);
      /*Se manda llamar a la función imprime*/
      }
      else
      /*En caso de no encontrarse el caracter se entra al else*/
     
   printf("\n%s%c%s\n\a","El caracter: ",dato,"no fue encontrado en la lista");
   }
   
      else
      /*La ultima opcion que puede ocurrir al momento de eliminar un carcter
      se presenta en este else*/
      printf("\a\n\t%s\n\a","La lista esta vacia");
      break;
     
      default:
      /*En caso de no ocurrir nada de lo anterior se lanzara en pantalla
      lo siguiente*/
     
      printf("\n%s\n","La selección es incorrecta");
      menu();
      /*Se despliega el menu*/
      break;
      }
     
      menu();
      printf("\n%s","La opcion seleccionada es: ");
      scanf("%d", &selec);
      };
     
      printf("\n\n%s","Hasta pronto");
      scanf("%d",&avanza);
      return 0;
      }
     
      void menu(void){
      /*Se define la función menu*/
           
      printf("\n\nSeleccione una opcion: ");
      printf("\n\n1.-Insertar un elemento en la lista");
      printf("\n\n2.-Eliminar un elemento en la lista");
      printf("\n\n3.-Salir del programa");
      }
     
      void inserta(LISTPREVPTR*aPtr, char datoin){
      /*Se define la función inserta*/
      LISTPREVPTR datnvoPtr, datprevPtr, datactPtr, lista_nodos;
      /*Se declaran apuntadores que sean del tipo LISTPREVPTR*/
      datnvoPtr=(LISTPREVPTR)malloc(sizeof(lista_nodos));
      /*evalúa a sizeof (lista_nodos) para determinar el tamaño de una
      estructura del tipo lista_nodos, para asignar una nueva área en
      memoria, y para almacenar un apuntador a la memoria asignada a la
       variable datnvoPtr */
     
      if(datnvoPtr != NULL){
      /*En caso de que datnvoPtr sea distinto de NULL, se realizara lo
      siguiente*/
                   
      datnvoPtr->valor=datoin;
      datnvoPtr->sigPtr=NULL;
      datprevPtr=NULL;
      datactPtr=*aPtr;
     
      while(datactPtr != NULL&&datoin>datactPtr->valor){
     
      datprevPtr=datactPtr;
      datactPtr=datactPtr->sigPtr;
      };
     
      if(datprevPtr==NULL){
      /*Se compara datprevPtr con NULL y se continuara si son iguales*/
      datnvoPtr->sigPtr=*aPtr;
      *aPtr=datnvoPtr;
      }
     
      else{
      /*Si datprevPtr es distinto de NULL se entrara al else*/
      datprevPtr->sigPtr=datnvoPtr;
      datprevPtr->sigPtr=datactPtr;
      }
      }
     
      else
      /*En caso de no haber ocurrido ninguna de las anteriores se entrara
      a este else*/
      printf("\n%s%c%s\n%s\a\a\a\a","El caracter: ",datoin,"no fue insertado",
      "memoria insuficiente\n\n");
      }
     
      char elimina(LISTPREVPTR*bPtr, char datoele){
      /*Se define la función elimina*/
           
      LISTPREVPTR datempPtr, datprevPtr, datactPtr;
      /*Se declaran apuntadores que sean dell tipo LISTPREVPTR*/
     
      if(datoele==(*bPtr)->valor){
      datempPtr=*bPtr;
      *bPtr=(*bPtr)->sigPtr;
      free(datempPtr);
      /*Se liberara memoria de datempPtr*/
      return datoele;
      }
     
      else{
      datprevPtr=*bPtr;
      datactPtr=(*bPtr)->sigPtr;
     
      while(datactPtr!=NULL&&datactPtr->valor!=datoele){
      datprevPtr=datactPtr;
      datactPtr=datactPtr->sigPtr;
      };
     
      if(datactPtr!=NULL){
      datempPtr=datactPtr;
      datprevPtr->sigPtr=datactPtr->sigPtr;
      free(datempPtr);
      /*Se liberara memoria de datempPtr*/
      return datoele;
      }
      }
      return '\0';
      }
     
      int estavacia(LISTPREVPTR cPtr){
      /*Se define la función estavacia*/
         
      return(cPtr==NULL);
      }
     
      void imprime(LISTPREVPTR dPtr){
      /*Se define la función imprime*/
           
      if(dPtr==NULL){
      /*En casao de que dPtr no este inicializado se imprimira lo de abajo*/
                     
      printf("\a\n\t%s","La lista esta vacia\n\n");
      printf("NULL \n\n");
      }
     
      else{
      /*Cuando dPtr tenga valor se mostrara la lista*/
      printf("\n\t%s","La lista es: ");
      while(dPtr!=NULL){
      /*Solo cuando dPtr sea distitno de NULL se hara la impresión que aparece
      abajo*/
      printf("%c--->",dPtr->valor);
      dPtr=dPtr->sigPtr;
      }
      printf("\n");
      }
      }
#2
Hola...

Bueno tengo una mega duda sobre los apuntadores, ya lei demasiado sobre ello pero son muy dificiles de manejar o al menos a mi se me dificultan y no les entiendo. El mayor problema de esto es que tengo que hacer una base de datos de alumnos de una escuela. El programa debe constar de:
  • Cada alumno debe tener datos personales, como: apellidos, nombre, edad, carrera, año de ingreso y 5 calificaciones.
  • Con el llamado de una funcion se debe calcular el promedio de calificaciones por materia segun la carrera (Existen digamos tres carreras en la escuela y algunas materias son tronco comun)
  • Con el llamado de otra funcion se debera calcular el numero de alumnos y alumnas por carrera
  • Con el llamado de una funcion se tiene que clasificar a los alumnos por el año de ingreso

Lo que se me ha ocurrido (y talvez no significa mucho) es crear un arreglo de 7 o mas entradas, debido a los datos que deba poner al alumno ... bueno mejor lo escribo, seria algo asi como:

char*reg_alumno[7]

hago que apunte a un char ya que los datos son de tipo distinto y como no me dejan usar estructuras... Pero no entiendo apuntadores, una mega ayudisima, por favor!!

#3
Programación C/C++ / Matriz
25 Septiembre 2011, 20:46 PM
Hola...

De nuevo me tienen aqui con otra duda...
Tenia que crear una matriz en donde se orden las filas de mayor a menor para una de 2x3 y este es mi codigo:
#include<stdio.h>
#include<conio.h>
int mat[3][4],i,j,vec1[4],vec2[4],temp,p,q;
main()
{
     printf("Trabajo practico 1, ejercicio 8\n");
     printf("\nDada una matriz 2x3 de elementos enteros, ordenar todos los");
     printf("\nelementos de la matriz(de mayor a menor), comenzando por la");
     printf(" primera fila\n\n\n");
     
     for(i=1;i<=2;i++){
                      for(j=1;j<=3;j++){
                                       printf("Elemento (%d,%d): ",i,j);
                                       scanf("%d",&mat[i][j]);
                                       }
                      }  
     
     

for(j=1;j<=3;j++){                                
                vec1[j]=mat[1][j];
                           }
                printf("\n\nElementos de la fila 1:   ");
     for(j=1;j<=3;j++){
                      printf("%d  ",vec1[j]);  
                          }
                     
                     
for(i=1;i<=3;i++){
                 for(j=i+1;j<=3;j++){
                                      if(vec1[i]<vec1[j]){
                                       temp=vec1[i];
                                        vec1[i]=vec1[j];
                                         vec1[j]=temp;
                                         }
                                        }    
                                        }

                     
                               
for(j=1;j<=3;j++){                                
                vec2[j]=mat[2][j];
                            }
                printf("\nElementos de la fila 2:   ");
     for(j=1;j<=3;j++){
                      printf("%d  ",vec2[j]);
                                  }  
printf("");
                     


for(i=1;i<=3;i++){
                 for(j=i+1;j<=3;j++){
                                      if(vec2[i]<vec2[j]){
                                       temp=vec2[i];
                                        vec2[i]=vec2[j];
                                         vec2[j]=temp;
                                         }
                                        }    
                                        }
       
printf("\n\n\n");
printf("Elementos ordenados da la fila 1:  ");
for(i=1;i<=3;i++){
                       
                 printf("%d  ",vec1[i]);
                            }
                  printf("\n");
printf("Elementos ordenados de la fila 2:  ");
for(i=1;i<=3;i++){
                       
                 printf("%d  ",vec2[i]);}

                 
                 
                                 
     
                     
    getch();
    return(0);
}


Pero ahora me pidieron que creara un matriz de nxm y que ordenara tanto sus filas como sus columnas de mayor a menor, supongo ue solo tengo que generalizar paro no se como.. ya que soy nuevo en esto y la verdad sacar el code anterior me costo mucho, ojala me ayuden
#4
Programación C/C++ / Dimensión de Arreglos en C
25 Septiembre 2011, 17:24 PM
Hola....

Alguien sabe cual es la dimensión que soporta un arreglo en C??

Me dijeron que intentara hacer un programa para probrarlo pero no se me ocurre nada, alguien me podria ayudar, porfa??
#5
Programación C/C++ / Programando un Craps en C...
8 Septiembre 2011, 21:38 PM
Hola...

Estoy programando un craps en C, creo que la base del juego ya me quedo... pero aun me falta incluir al juego apuestas!! :-\ y aqui es cuando me atoré...

No sé como hacer para que se apueste minimo $5 cada vez que lanzen una tirada y pueda retirarse del juego o ganar el doble. Debo poner un limite de credito a la banca, por ejemplo $2000.

Pero ya no me surgen ideas, podrian ayudarme con esto?
Por favor!!!!! :rolleyes:


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

int lanzadado(void);

main(){
      int estadojuego, suma, mispuntos, avanza; /*Sección de declaraciones*/
      printf("\n\n%s\n\n","< Una función para un juego de dados >");
      srand(time(NULL));
      suma = lanzadado();
     
      switch(suma){
                   case 7: case 11: estadojuego =1;
                   break;
                   
                   case 2: case 3: case 12: estadojuego = 2;
                   break;
                   
                   default:
                            estadojuego = 0;
                            mispuntos = suma;
                            printf("Mis puntos son: %d\n", mispuntos);
                            break;
                            }
                           
                            while (estadojuego == 0){
                                 
                                  suma = lanzadado();
                                  if(suma == mispuntos)
                                  estadojuego = 1;
                                  else
                                  if(suma == 7)
                                  estadojuego = 1;
                                  }
                                 
                                  if(estadojuego == 1)
                                  printf("Ya gano!!\n");
                                  else
                                  printf("Lo siento perdio!\n");
                                  scanf("%d", &avanza);
                                  return 0;
                                  }
                                 
                                  int lanzadado(void){
                                     
                                      int dadouno, dadodos, sumatirada;
                                      dadouno = 1 + (rand()%6);
                                      dadodos = 1 + (rand()%6);
                                      sumatirada = dadouno + dadodos;
                                      printf("Lanzamiento de los dados %d+%d=%d\n",dadouno,dadodos, sumatirada);
                                      return sumatirada;
                                      }
#6
Hola...

He entrado a la universidad  tengo una materia llamada programación en C, la  verdad no sé casi nada sobre ello.... pero me piden elaborar un juego en el que se lanzen tres dados y si la suma de los tres es 18 han ganado el juego y si es 12 han perdido.

Me dijeron que usara srand y rand, asi como time que es para números aleatorios, eso si lo se usar mas o menos porque he visto ejemplos, pero no se como comenzar el codigo.

Me podrian ayudar, yo se que es mucho pedir pero estoy en ceros con este tema.

Se los agradeceria bastante.


Yo programe un poco un java antes pero en C es muy distinto y en verdad necesito ayuda, es una tarea un poco apresurada.
#7
Java / Manejo de archivos en java
13 Junio 2011, 03:15 AM
Hola...

Bueno quisiera saber si me puden ayudar a aclarar unas dudas con respecto al manejo de archivos en java.

La verdad no se muy bien como manejarlos, pero bueno les explico:

Tengo que hacer un sistema de inventarios, todos los datos tienen que almacenarse en un archivo (cualquiera que yo quiera, por ejemplo: inventario.dis).

Cada vez que se ejecute el programa, deberá leerse el archivo para cargar la información de todos los productos que se encuentran almacenados en el inventario. En caso de que el archivo no exista (es decir, que sea la primera vez que se ejecuta el programa) la lista inicial de productos estará vacía.

Al cerrar la aplicación, deben almacenarse nuevamente todos los usuarios en el archivo inventario.dis, para que se encuentren disponibles la próxima vez que se ejecute la aplicación.

Ya hice las clases abstractas, las que heredan y el menú pero lo que no sé es como guardar los datos en dicho archivo.

Me podrían orientar por favor?

Se los agradeceré mucho.

Gracias!!!