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

#1
Programación C/C++ / Problemas listas
17 Mayo 2014, 19:50 PM
Estoy trabajando con listas dobles circulares, espero puedan ayudarme.
Lo que intento hacer es que al ir agregando se vayan ordenando los datos
Pero tengo problemas con el ultimo caso, como hago la comparacion y como voy avanzando si lo tengo que hacer de forma recursiva??



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

#define SALIR 0

typedef struct nodo
{
   int dato;
   struct nodo *sig;
   struct nodo *ant;
}NODO;

typedef struct punteros
{
   struct nodo *inicio;
   struct nodo *fin;
}LISTA;

int agregar_ordenado(LISTA *aux, int dato)
{
   if(aux->inicio==NULL)//LISTA VACIA
   {
       NODO *nuevo=(NODO *)malloc(sizeof(NODO));
       nuevo->dato=dato;
       nuevo->ant=nuevo;
       nuevo->sig=nuevo;
       aux->fin=nuevo;
       aux->inicio=nuevo;
       return 1;
   }
   if(dato > aux->inicio->dato)//ES MAYOR AL INICIO
   {
       NODO *nuevo=(NODO *)malloc(sizeof(NODO));
       nuevo->dato=dato;
       nuevo->sig=aux->inicio;
       aux->inicio->ant=nuevo;
       aux->inicio=nuevo;
       nuevo->ant=aux->fin;
       aux->fin->sig=aux->inicio;
       return 1;
   }
   if(dato < aux->fin->dato)//ES MENOR AL FIN
   {
       NODO *nuevo=(NODO *)malloc(sizeof(NODO));
       nuevo->dato=dato;
       nuevo->ant=aux->fin;in        aux->fin->sig=nuevo;
       nuevo->sig=aux->inicio;
       aux->inicio->ant=nuevo;
       return 1;
   }
   if()//EN MEDIO DE LA LISTA
   {

   }

   agregar_ordenado(aux->inicio->sig)

}



void imprimir(LISTA *aux)//DEL ULTIMO AREGADO AL PRIMERO
{
NODO *actual;
actual = aux->inicio;
while(actual != aux->fin)
   {
printf(" %i ",actual->dato);
actual = actual->sig;
}
printf(" %i ",actual->dato);
printf("\n");
}


int main()
{
   NODO *lista =NULL;
   LISTA *aux=(LISTA *)malloc(sizeof(LISTA));
   int op,dat,num;

   aux->inicio = NULL;
   aux->fin = NULL;
   do
   {
       printf("\n 1.Agregar elemento");
       printf("\n 2.Imprimir lista");
       printf("\n 0.salir");
       scanf(" %d",&op);
       switch(op)
       {
       case 0:
           exit(0);
       case 1:
           printf("\n Ingrese dato: ");
           scanf(" %d",&dat);
           agregar_ordenado(aux,dat);
           break;
       case 2:
           imprimir(aux);
           break;
       }


   }while(op!=SALIR);
   return 0;
}


   
#2
Programación C/C++ / Ficheros y estructuras
18 Abril 2014, 23:29 PM
Saludos a toda la comunidad, tengo algunas dudas espero puedan auxiliarme con algunas.
Estoy trabajando en el siguiente codigo y me he topado con algunos problemas

En la parte de buscar por titulo a la hora de ingresar el titulo el programa se cierra, el problema sera con el fgets()? intente usar el gets() pero me pasaba lo mismo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;

struct libros
{
   char id[30];
   char titulo[30];
   char autor[30];
   char editorial[30];
   int paginas;
}; libros registro [30];

int main()
{
int op,op2,i,j, cont=0,cant;
char temp[60];
char temp2[60],elim[60];
char *bus,*eli, *mos;
FILE *datalib;

       
        printf("\n Escoja su opcion: ");
        printf("\n 1 - Busqueda de registo de libro ");
        printf("\n 2 - Agregar nuevo registro de libro ");
        printf("\n 3 - Quitar registro de libro ");
        printf("\n 4 - Modificar registro de libro ");
        printf("\n 5 - Imprimir todos los registros ");
        printf("\n 0 - Salir");
        scanf("%d",&op);

       switch(op)
{
   case 0:
                   exit(0);
           break;
           case 1:
                   

printf("\n Escoja la opcion: ");
printf("\n 1 - Busqueda por ID: ");
printf("\n 2 - Busqueda por titulo: ");
printf("\n 0 - Salir: ");

scanf("%d",&op2);

datalib=fopen("libros.csv","r");
                           if(datalib==NULL){
                           printf("\n No se ha podido abrir el archivo");
                           exit(1);}
                           
switch (op2)
{
                   case 0:
                       exit(0);
                   case 1:
                           printf("\n Introduzca el ID del libro deseado:");
                           scanf("%s",&temp);
                           for(i=0;!feof(datalib);i++){
                               fgets(temp2,60,datalib);
                               bus=strtok(temp2,",");
                               if(strcmp(bus,temp)==0){
                                   printf("\n Registro encontrado");
                                   printf("\n Los datos son:");
                                   printf("\n\n");
                                   while(bus!=NULL){
                                       printf("\n  %s\n",bus);
                                       bus=strtok(NULL,",");}
                                   cont++;}
                           }
                           if(cont==0){
                               printf("\n ID no encontrada");}
                           system("PAUSE");

                       break;

                       case 2:
                           printf("\n Introduzca el titulo del libro deseado:");
                           fgets(temp,60,stdin);
                           for(i=0;!feof(datalib);i++){
                               fgets(temp2,60,datalib);
                               bus=strtok(temp2,",");
                               bus=strtok(NULL,",");
                               if(strcmp(bus,temp)==0){
                                   printf("\n Registro encontrado");
                                   printf("\n Los datos son:");
                                   printf("\n\n");

                                   while(bus!=NULL){
                                       printf("\n  %s\n",bus);
                                       bus=strtok(NULL,",");}
                                   cont++;}
                                   
                           }
                           if(cont==0){
                               printf("\n Titulo no encontrado");}
                               system("PAUSE");
                       break;

                       default:
                           printf("\nLa opcion no es correcta ");
                           printf("\n\n");
                           system("PAUSE");
                           system("cls");
break;
                       fclose(datalib);
                   }
           break;
system("PAUSE");
return 0;
}


El fichero tiene lo siguiente:

Citar

  DR453,INGENIERIA INDUSTRIAL,PHILIP HICKS,PATRIA,450
  RT567,TRASMISION DE DATOS Y REDES,FOROUZAN,MC GRAW HILL,920
  TJ567,REDES DE COMPUTADORAS,ANDREW TANENBAUM,PEARSON,870

#3
Estoy escribiendo un código usando ficheros, necesito saber cuantas lineas tiene el archivo para almacenar el espacio correspondiente. ¿¿como puedo contar el numero de lineas usando el fscanf??


A partir de ahí tengo que separar la informacion y guardarla en la estructura.
en el archivo tengo algo como esto

daniela,castillo,biologia,15
carlos,cervantes,fisica,14
diego,garcia,quimica,16


Algun consejo para hacerlo?? tenia pensado dividirlo usando la funcion strtok y despues ir copiando a cada variable pero aun no se muy bien como plantearlo.




#include <stdio.h>
#include <conio.h>
#include <string.h>

struct alumno
{
      char nombre[30];
      char apellido[30];
      char materia[30];
      int edad;
}; struct alumno reg*;


int main()
{
    FILE *ptr;
    char c[80];
    char *b;
    int x=0;
   
    ptr=fopen("alumno.csv","r+");
   
    while(!feof (ptr))
    {
           fscanf(ptr,"%[^\n]s",&c);
           x++;
    }
   
    reg=(struct alumno*)malloc(x*sizeof(struct alumno));
    rewind(ptr);
   
    printf("numero de filas: %i",x);

     .
     .
     .
     .
     .
     .
     .
     .
     .    
   
    getch();
}
#4
Programación C/C++ / Struct y apuntadores
3 Abril 2014, 04:39 AM
Saludos a toda la comunidad, tengo el siguiente programa que maneja una estructura y apartir de un numero n dado por el usuario reserva memoria para guardar todos los registros.
Tengo varias dudas al usar los apuntadores y la forma de acceder a las variables del struct. La forma en que lo estoy haciendo es correcta?  :huh: :huh:
No tengo muy claro la diferencia entre estas dos formas.
reg->editorial
reg.editorial

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

struct libros
{
   char titulo[60];
   char autor[60];
   char editorial[60];
   int num_paginas[60];
} struct libros *reg;

void* cast(int m)
{
   return(malloc(m*sizeof(struct libros)));
}

main ()
{
   int x;
   int n;
   
   printf("Cuantos registros deseas ingresar?");
   scanf("%d",n);
   
   reg=(struct libros*)cast(n);
   
   for(x=0;x<n;x++)
   {
       printf("Titulo: ");
       gets(reg->titulo);
       printf("Autor; ");
       gets(reg->autor);
       printf("Editorial: ");
       gets(reg->editorial);
       printf("Numero de paginas: ");
       scanf("%d",reg->num_paginas);
       
       reg++;
   }
   
    for(x=0;x<n;x++)
   {
       printf("Titulo: %s",reg->titulo);
       printf("Autor; %s",reg->autor);
       printf("Editorial: %s",reg->editorial);
       printf("Numero de paginas: %s",reg->num_paginas);
       
       reg++;
   }

   
   getch();
}
#5
Programación C/C++ / Ayuda con programa
15 Marzo 2014, 06:03 AM
Necesito crear un programa que a partir de una frase la imprima por palabras pero sin usar la funcion strtok, tengo lo siguiente pero no logro que imprima. Espero me puedan ayudar.
Por ejemplo si la frase es "hoy es viernes"
debe imprimir:
hoy
es
viernes

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;


int mi_strtok(char* frase)
{
    int cont = 0;
    int x,c=0;
   
    while(*frase++ != '\0')
    {
       if(*frase!= ' ')
         {  
               
              cont++;
             
           }
       else
           {
               for(x=c;x<cont;x++)
               {
                  cout<<frase[x];
                  }
                  c=c+cont;
                 
               
           }
           
       }
           
    return 0;
}

main()
{
    char frase[500];
    cout<<"Ingrese la frase: ";
    gets(frase);  
    mi_strtok(frase);
   
    getch();
#6
Programación C/C++ / Abrir y leer un archivo
23 Febrero 2014, 05:52 AM
Hola, esta semana empece a trabajar con archivos. Tengo este codigo que crea un archivo

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#include <fstream>
#include <cstring>
#include <sstream>

struct alu
{
char nombre[30];
int edad;
float altura;
};

alu vec[10];

main()
{
int x,y,orden,n;

printf("Cuantas personas desea ingresar?: ");
scanf("%i",&n);
printf("\n");
ofstream fsalida("Datos.alu.dat",ios::out|ios::binary);

for (x=0; x<n;x++)
{
printf("Introduce el nombre: ");
setbuf(stdin,NULL);
gets(vec[x].nombre);

printf("Introduce la edad: ");
scanf("%i",&vec[x].edad);

printf("Introduce la altura: ");
   cin>>vec[x].altura;

printf("\n\n");

fsalida.write(reinterpret_cast<char *>(&vec[x]),sizeof (alu));

}
fsalida.close();


ifstream fentrada ("Datos_alu.dat",ios::in |ios::binary);
for (x=0; x<n;x++)//Imprimir

{
fentrada.read(reinterpret_cast<char *>(&vec[x]),sizeof(alu));

printf ("Nombre: %s\n",vec[x].nombre);
printf ("Edad: %i\n",vec[x].edad);
printf ("Altura %.1f\n",vec[x].altura);
printf("\n\n");

}
fentrada.close();

getch();

}


Como puedo hacer otro programa pero que esta vez lea el archivo "Datos.alu.dat" sume las edades, imprima y lo guarde en el mismo archivo.
No tengo muy claro como hacer que abra el archivo  y lo lea para poder manejar las edades.