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 - do-while

#631
Programación C/C++ / Re: RETOS C++
21 Septiembre 2012, 16:22 PM
2.

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

int main(int argc, char *argv[])
{
   FILE *f;
   char *contenido;
   unsigned long longitud;

   f=fopen("algunfichero","rb");

   fseek(f,0,SEEK_END);

   if(!(contenido = malloc(longitud = ftell(f))))
       return -1;

   fseek(f,0,SEEK_SET);

   fread(contenido,longitud,1,f);

   fclose(f);

   free(contenido);

   return 0;
}


5.
Este crashea con alfabetos de mas de 18 caracteres y longitud 6
Código (cpp) [Seleccionar]

/*
*  linea de comandos:
*      nombreprograma alfabeto longitud
*/

#include <iostream>
#include <list>
#include <string>
#include <cstring>
#include <cstdlib>

using namespace std;

unsigned long convertir(char *s);
void bruteforce(list<string> &resultado,char *alfabeto,unsigned long longitud);

int main(int argc, char *argv[])
{
   list<string> resultado;
   unsigned long l;

   if(argc != 3)
   {
       cerr << argv[0] << " alfabeto longitud" << endl;
       return -1;
   }

   if(!(l = strlen(argv[1])))
   {
       cerr << argv[0] << " alfabeto longitud" << endl;
       return -1;
   }


   //eliminamos caracteres repetidos del alfabeto
   for(int i = 0 ; i < strlen(argv[1]) ; i++)
       if(strchr(argv[1] + i + 1 , argv[1][i]))
       {
           memmove(argv[1] + i ,argv[1] + i  + 1, (l--) - i );
           i--;
       }

   //nos aseguramos de que el segundo argumento sea numerico
   for(int i = 0 ; argv[2][i] ; i++)
       if(argv[2][i] < '0' || argv[2][i] > '9')
       {
           cerr << argv[0] << " alfabeto longitud" << endl;
           return -1;
       }

   bruteforce(resultado,argv[1],convertir(argv[2]));

   for(list<string>::iterator it = resultado.begin() ; it != resultado.end() ; it++)
       cout << (*it) << endl;

   return 0;
}

unsigned long convertir(char *s)
{
   unsigned long ret = 0;

   for(int i = 0 ; s[i] ; i++)
   {
       ret *= 10;
       ret += s[i] - '0';
   }

   return ret;
}

void bruteforce(list<string> &resultado,char *alfabeto,unsigned long longitud)
{
   static string cadena;
   static unsigned long posicion = 0;

   if(posicion == longitud)
   {
       //si hemos llegado a la ultima posicion almacenamos la variacion
       resultado.push_back(cadena);
       return;
   }

   //si es la primera llamada damos la longitud deseada a la cadena
   if(posicion == 0)
       cadena.resize(longitud);

   //para cada una de los caracteres del alfabeto
   for(int i = 0 ; alfabeto[i] ; i++)
   {
       cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.

       //avanzamos una posicion
       posicion++;

       //y calculamos el siguiente caracter
       bruteforce(resultado , alfabeto , longitud);

       //volvemos a la posicion original
       posicion--;
   }

   //posicion termina a cero para la siguiente llamada
    if(!posicion)
        cadena.resize(0);
}


Alternativa:
Código (cpp) [Seleccionar]

/*
*  linea de comandos:
*      nombreprograma alfabeto longitud
*/

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>

using namespace std;

unsigned long convertir(char *s);
void bruteforce(char *alfabeto,unsigned long longitud);

int main(int argc, char *argv[])
{
   unsigned long l;

   if(argc != 3)
   {
       cerr << argv[0] << " alfabeto longitud" << endl;
       return -1;
   }

   if(!(l = strlen(argv[1])))
   {
       cerr << argv[0] << " alfabeto longitud" << endl;
       return -1;
   }


   //eliminamos caracteres repetidos del alfabeto
   for(int i = 0 ; i < strlen(argv[1]) ; i++)
       if(strchr(argv[1] + i + 1 , argv[1][i]))
       {
           memmove(argv[1] + i ,argv[1] + i  + 1, (l--) - i );
           i--;
       }

   //nos aseguramos de que el segundo argumento sea numerico
   for(int i = 0 ; argv[2][i] ; i++)
       if(argv[2][i] < '0' || argv[2][i] > '9')
       {
           cerr << argv[0] << " alfabeto longitud" << endl;
           return -1;
       }

   bruteforce(argv[1],convertir(argv[2]));

   return 0;
}

unsigned long convertir(char *s)
{
   unsigned long ret = 0;

   for(int i = 0 ; s[i] ; i++)
   {
       ret *= 10;
       ret += s[i] - '0';
   }

   return ret;
}

void bruteforce(char *alfabeto,unsigned long longitud)
{
   static string cadena;
   static unsigned long posicion = 0;

   if(posicion == longitud)
   {
       //si hemos llegado a la ultima posicion almacenamos la variacion
       cout << (cadena) << endl;
       return;
   }

   //si es la primera llamada damos la longitud deseada a la cadena
   if(posicion == 0)
       cadena.resize(longitud);

   //para cada una de los caracteres del alfabeto
   for(int i = 0 ; alfabeto[i] ; i++)
   {
       cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.

       //avanzamos una posicion
       posicion++;

       //y calculamos el siguiente caracter
       bruteforce(alfabeto , longitud);

       //volvemos a la posicion original
       posicion--;
   }

   //posicion termina a cero para la siguiente llamada
    if(!posicion)
        cadena.resize(0);
}
#632
Programación C/C++ / Re: RETOS C++
21 Septiembre 2012, 12:40 PM
1.

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

#define DIM 100

int main(int argc, char *argv[])
{
   char texto[DIM],*cifras[]={"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
   int i;

   do{
       if(!fgets(texto,DIM,stdin))
           return 0;

       for(i = 0 ; texto[i] ; i++)
           if(texto[i] >= '0' && texto[i] <= '9')
               printf("%s\n",cifras[texto[i] - '0']);

   }while(texto[strlen(texto) - 1] != '\n');

   return 0;
}


Código (cpp) [Seleccionar]

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *agrv[])
{
   char *cifras[] = {"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
   string texto;

   getline(cin,texto);

   for(int i = 0 ; i < texto.length() ; i++)
       if(texto[i] >= '0' && texto[i] <= '9')
           cout << cifras[texto[i] - '0'] << endl;

   return 0;
}


Y mas eficiente:
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *agrv[])
{
   char *cifras[] = {"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
   string texto;

   getline(cin,texto);

    //no se dice nada sobre el orden
   for(int i = texto.length() - 1 ; i >= 0 ; i--)
       if(texto[i] >= '0' && texto[i] <= '9')
           cout << cifras[texto[i] - '0'] << endl;

   return 0;
}


2. Faltan datos: ¿Nombre del fichero? ¿Tipo de fichero? (binario/texto) ¿Leer completo, por bloques de una cantidad determinada de bytes, por palabras...?

3.

#include <stdio.h>

int main(int argc, char *argv[])
{
   int max, num,i;

   scanf("%d",&max);

   for(i = 1 ; i < 4 ; i++)
   {
       scanf("%d", &num);
       if(num > max)
           max = num;
   }

   printf("Max: %d\n",max);

   return 0;
}


4.
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
   string min, palabra;
   int i;

   cin >> min;

   for(i = 1 ; i < 4 ; i++)
   {
       cin >> palabra;

       if(palabra < min)
           min = palabra;
   }

   cout << min;

   return 0;
}


5. Faltan datos: ¿Alfabeto? ¿Longitud de la clave?
#633
Programación C/C++ / Re: Problema con punteros.
20 Septiembre 2012, 18:35 PM
Cita de: vazquinhos en 20 Septiembre 2012, 10:33 AM
He quitado el puntero a Tnodo

¡¡¡¡¡¿¿¿¿¿?????!!!!!

No visualizo lo que dices. ¿Donde estas almacenando la informacion? ¿Puedes poner el codigo?
#634
Programación C/C++ / Re: Problema con punteros.
19 Septiembre 2012, 15:04 PM
¡Buenas!

Veo un problema aqui (no he seguido leyendo) corrijelo y nos cuentas:

Código (cpp) [Seleccionar]

void lifo::push(int new_element)
{
Tnodo *nodo;

//No asignas memoria a nodo, solo asignas a nodo->datos el valor del parametro
nodo->datos = new_element;

if(stack->ant == NULL)
{
nodo->ant = NULL;
}else
{
[s]nodo->ant = stack->ant;[/s]
}

//asignas una direccion de una variable local, ya que no has asignado memoria a nodo
stack->ant = &(*nodo);


¡Saludos!
#635
Nada, esta claro que a partir de ahora solo comere vegetales.

Me olvido del pescado y de la carne, de la leche, los huevos... pues caere en el mismo pecado en el que cayeron mis antepasados cuando pasaron de ser cazadores y recolectores a ser ganaderos y agricultores. A pesar de que al hacer esto, dieron un primer paso para que las sociedades modernas seamos lo que somos. Se aplico la capacidad creativa en el arte, las letras y las ciencias, ya que no dependian al 100% de los caprichos de la naturaleza al poder controlar la produccion de alimentos, pero bueno, al parecer es mejor cazar y recolectar en taparrabos, morirnos de hambre en periodos de sequia o depender de que los animales que debemos cazar no sucumban a una enfermedad que nos deje sin alimentos, a lo que tenemos ahora.

¿Pero entonces que comere? No debo utilizar cuchillos, tenedores o cucharas para comer, no son las herramientas que la evolucion me ha dado, debo responder a la llamada de la naturaleza y olvidarme de estos utensilios que utilizan los carnivoros para masacrar animales y vivir contranatura. Tampoco podre cocinar nada. Esto del fuego, las fritangas y la coccion son herramientas de carnivoros tambien. No puedo darles la satisfaccion de utilizar las mismas herramientas que utilizan ellos para cocinar esa carne tan maligna que ingieren sin ningun tipo de escrupulo. Tendre que comer zanahorias, patatas, legumbres (sobre todo estas ultimas) crudas, para ser fiel a los medios que tantos años de adaptacion genetica me han dado. Esta claro que me tendre que olvidar de estos alimentos que he mencionado si no quiero acabar sin dentadura a los 15 años. Escogere algo mas blando. Ojas frescas, cesped, flores, frutas... Esto si que parece que puedo comermelo tranquilamente sin acabar con mi denticion a una edad precoz. Eso si, me parece que los alimentos terminaran saliendo al mismo ritmo al que entran. Desgraciadamente no soy rumiante. No tengo poderosos estomagos y bacterias que me ayuden a digerir y desmenuzar la pared celular de lo vegetales.

Asi pues, descartandos la carne y los vegetales, habre de morir de hambre.

Menos mal que aun tengo cabeza y he recordado que utilizar herramientas y procesos para manipular los alimentos, si puedo hacerlo.

¡Saludos!

Tal y como estan las cosas no me arriesgo a poner el enlace de descarga del libro, pero descargaos (los que estais diciendo que el se humano no debe comer carne sobre todo), "La especie elegida" de Juan Luis Arsuaga. Tiene un capitulo entero dedicado a la alimentacion (el libro entero es bien interesante), y como veis es un reputado biologo.

¡Saludos de nuevo!

PD: A esa lagartija la estaba acechando un milano desde hacia un buen rato, asi que si no se la comia el tontolaba ese, no iba a pasar mucho tiempo retozando entre margaritas y cantando canciones de Disney antes de que se la zampase el pajarraco.
#636
Hay que ver cuanto daño ha hecho el traductor de google...

PD:
   
Advertencia - mientras estabas leyendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
#637
¡Buenas!

for(j=0; j<COL; j++){
                       
                       cout<<"Ingrese la Nota del Alumno"<<k;
                       cin>>m[k][j];
                       suma = suma + m[k][j];
                       vec_aux[k]= suma;
                       ¡¡¡suma=0;!!!
                     
                    }

Si lo pones a cero en cada iteracion mal vamos...

Soluciones:

Código (cpp) [Seleccionar]
for(j=0; j<COL; j++){
                       
                       cout<<"Ingrese la Nota del Alumno"<<k;
                       cin>>m[k][j];
                       suma = suma + m[k][j];
                       vec_aux[k]= suma;
                     
                    }
                      suma=0;


Código (cpp) [Seleccionar]
for(j=0; j<COL; j++){
                       
                       cout<<"Ingrese la Nota del Alumno"<<k;
                       cin>>m[k][j];
                       suma = suma + m[k][j];
                       vec_aux[k] += suma;
                      suma=0;
                     
                    }


o lo que es lo mismo

Código (cpp) [Seleccionar]
for(j=0; j<COL; j++){
                       
                       cout<<"Ingrese la Nota del Alumno"<<k;
                       cin>>m[k][j];
                       vec_aux[k] += m[k][j];
                     
                    }


¡Saludos!
#638
Programación C/C++ / Re: TAD Matriz
6 Septiembre 2012, 21:37 PM
¡Buenas!

Pues declaras la matriz de tipo ficha en lugar de entero y ya esta.

¡Saludos!
#639
Programación C/C++ / Re: Consulta punteros (C)
3 Septiembre 2012, 07:38 AM
¡Buenas!

Si compilais y ejecutais esto, por lo menos utilizando gcc, no hay ningun problema:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char s[] = "Uno, dos, tres, cuatro...";
    unsigned short *p,i;

    for(i = 0 ; i < 5 ; i++)
    {
        p = (unsigned short*)(s + i);
        printf("%p\n",p);
    }

    return 0;
}


Espero que te sirva.

¡Saludos!
#640
Programación C/C++ / Re: Consulta punteros (C)
1 Septiembre 2012, 01:19 AM
¡Buenas!

¿Has probado esto?
ptro = (unsigned short*) (((char*) p) + 1);

¡Saludos!