elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [40] 41 42 43 44 45
391  Programación / Programación C/C++ / Re: Problema con arrays dinámicos en: 31 Diciembre 2010, 19:29 pm
Hola Leo Gutiérrez, gracias por responder. También pensé en utilizar listas enlazadas, pero son más lentas, ya que son de acceso secuencial.

Saludos.
392  Programación / Programación C/C++ / Problema con arrays dinámicos en: 31 Diciembre 2010, 16:40 pm
Hola, practicando un poco con punteros me surgió un problema. Estoy creando una clase llamada TStringList (como la que existe en Delphi) y creé una función Add(). Funciona bastante bien, el problema ocurre cuando introduces más de 5 o 6 cadenas, que la primera cadena se pierde y salen caracteres raros.

Código main.

Código
  1. #include <iostream>
  2. #include "stringlist.h"
  3.  
  4. using namespace std;
  5.  
  6. const int CHAR_MAX_LENGTH = 20;
  7.  
  8. int showmenu()
  9. {
  10. int option = 0;
  11.    do
  12.    {
  13.        cout << "1.- Añadir string" << endl;
  14.        cout << "2.- Mostrar strings" << endl;
  15.        cout << "3.- Salir" << endl;
  16.        cout << "Introduce una opcion: ";
  17.        cin >> option;
  18.    }while(option < 1 && option > 3);
  19. return option;
  20. }
  21.  
  22. int main()
  23. {
  24. char buff[CHAR_MAX_LENGTH];
  25. int option = 0;
  26. TStringList *List = new TStringList();
  27.        do
  28.        {
  29.            option = showmenu();
  30.            switch(option)
  31.            {
  32.                case 1: cout << "Introduce una cadena: ";
  33.                        cout.flush();
  34.                        cin >> buff;
  35.                        List->Add(buff);
  36.                        break;
  37.                case 2: for (int i = 0; i < List->GetCount(); i++)
  38.                            cout << "Item " << i + 1 << ": " << List->GetItem(i) << endl;
  39.  
  40.                        break;
  41.            }
  42.  
  43.        }while(option != 3);
  44. delete(List);
  45. return 0;
  46. }
  47.  
  48.  

Código stringlist.h
Código
  1. #ifndef _H_STRINGLIST
  2. #define _H_STRINGLIST
  3.  
  4. struct SL_ITEM{
  5.    char *string;
  6. };
  7.  
  8. class TStringList{
  9.    private:
  10.        SL_ITEM *Items;
  11.        long numItems;
  12.    public:
  13.        TStringList();
  14.        ~TStringList();
  15.        void Add(char *cadena);
  16.        long GetCount();
  17.        char * GetItem(long Index);
  18. };
  19.  
  20. #endif
  21.  
  22.  

Código stringlist.cpp
Código
  1. #include "stringlist.h"
  2. #include <memory>
  3. #include <malloc.h>
  4. #include <string.h>
  5.  
  6. TStringList::TStringList()
  7. {
  8.    numItems = 0;
  9. }
  10.  
  11. TStringList::~TStringList()
  12. {
  13.    if (numItems > 0)
  14.    {
  15.            for (int i = 0; i < numItems; i++)
  16.                Items[i].string = NULL;
  17.            Items = NULL;
  18.         /*
  19.               Aquí también tengo alguna duda.
  20.               Probé con delete [] Items; pero compilado en Linux me suelta un stack error, en Windows, simplemente se cierra la aplicación  :huh:
  21.          */
  22.    }
  23.  
  24. }
  25.  
  26. void TStringList::Add(char *cadena)
  27. {
  28.    if (numItems > 0){
  29.        SL_ITEM * NewItems = (SL_ITEM*) malloc((numItems + 1) * sizeof(SL_ITEM));
  30.        /*for (int i = 0; i < numItems; i++)
  31.             {
  32.                 NewItems[i].string = (char *) malloc(strlen(Items[i].string) + 1);
  33.                 strcpy(NewItems[i].string, Items[i].string);
  34.             }*/
  35.        memcpy(NewItems, Items, sizeof(*Items));
  36.        memcpy(Items, NewItems, sizeof(*NewItems));
  37.        NewItems = NULL; //Creo que no hace falta
  38.    }
  39.    else Items = (SL_ITEM*) malloc(sizeof(SL_ITEM));
  40.        Items[numItems].string = (char *) malloc(strlen(cadena) + 1);
  41.        strcpy(Items[numItems].string, cadena);
  42.        numItems++;
  43. }
  44.  
  45. long TStringList::GetCount()
  46. {
  47.    return numItems;
  48. }
  49.  
  50. char * TStringList::GetItem(long Index)
  51. {
  52.    if (Index < numItems && Index >= 0)
  53.        return Items[Index].string;
  54.    else return NULL;
  55. }
  56.  
  57.  

Espero que puedan echarle un ojo y comentar.

Saludos.
393  Programación / Programación General / Re: Algoritmo de Fuerza bruta... en: 31 Diciembre 2010, 16:19 pm
Me supongo que en la condición, en vez de ":=" iría un "=". verdad?

Pero Ferno se refiere a una condición, estás usando el operador de asignación en una condición.

Código:
if a[i] := p[j] then begin //sería =

Además, aquí creo que los paréntesis son necesarios.

Código:
until (j > M)  or (i > N);


Para devolver un valor con una función puedes usar result, en vez del nombre de la función.
394  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda con numeros random en arrays en: 6 Diciembre 2010, 23:04 pm
y sin el 0 tamb xD porfavor.. esq creo q al combinarlos es q da el error :S

Es tan simple que con cambiar está línea ya lo haces:

Código
  1. Lista[i] = Rnd.Next(8);
  2.  

por esta:

Código
  1. Lista[i] = Rnd.Next(1, 8);
  2.  

Y como la lista tiene tamaño 7 y le pides valores entre 1 y 7, siempre te va a mostrar desde 1 hasta 7 pero con los números desordenados.

Saludos.
395  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda con numeros random en arrays en: 6 Diciembre 2010, 22:48 pm
Por lo que entendí tienes un array de tamaño 7 y quieres almacenar en ese array números desde el 0 al 7, sin que se repitan. El algoritmo creo que es bastante sencillo. Prueba a hacer algo como esto:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8.    class Program
  9.    {
  10.        private static int[] Lista = new int[7];
  11.  
  12.        public static bool NumExists(int Num, int MaxPos)
  13.        {
  14.            bool resultado = false;
  15.                for (int i = 0; i < MaxPos; i++)
  16.                    if (Lista[i] == Num)
  17.                    {
  18.                        resultado = true;
  19.                        break;
  20.                    }
  21.            return resultado;
  22.        }
  23.  
  24.        public static void RandomNumbers()
  25.        {
  26.            Random Rnd = new Random(unchecked((int)DateTime.Now.Ticks));
  27.            for (int i = 0; i < Lista.Length; i++)
  28.                do{
  29.                    Lista[i] = Rnd.Next(8);
  30.                }while(NumExists(Lista[i], i) == true);
  31.            Rnd = null;
  32.        }
  33.  
  34.        static void Main(string[] args)
  35.        {
  36.            RandomNumbers();
  37.            for (int i = 0; i < Lista.Length; i++)
  38.                Console.WriteLine("Número: {0}", Lista[i]);
  39.            Console.ReadLine();
  40.        }
  41.    }
  42. }
  43.  


La salida de la consola sería algo como esto:

Código:
Número: 7
Número: 5
Número: 0
Número: 1
Número: 6
Número: 4
Número: 2

Saludos.
396  Programación / Programación General / Re: Creando Programas para Luxur 0.0.5 (sistema operativo) en: 4 Diciembre 2010, 11:04 am
Estoy siguiendo el proyecto, y la verdad, la versión 0.0.5 debería incorporar un administrador de memoria.

http://wiki.osdev.org/Projects

En esa página puedes encontrar muchísimos "prototipos" de Kernel y podrías emplear algún módulo para administrar la memoria para poder usar funciones como malloc() y free().

Este Kernel me gustó mucho http://www.dynacube.net/

Cuenta con Administrador de Memoria, Administrador de Procesos, Sistema de Archivos FAT12 y una pequeña GUI.

Me parece una tontería lo que estas haciendo. Son "programas" en modo kernel, que con posteriores versiones seguramente tengan que ser modificados para funcionar.
Yo que tu trabajaría primero con la memoria e intentaría hacer un administrador de procesos básico.

Saludos.

397  Programación / Programación General / Re: tipo de lenguaje en: 13 Noviembre 2010, 10:53 am
Para administrar servidores, lo mejor es: perl, bash y awk.

Saludos.

¿por qué?  :rolleyes:

Estoy estudiando Administración de Sistemas Informáticos y son los mejores lenguajes script para automatizar tareas en entornos UNIX.

Saludos.
398  Programación / Programación General / Re: tipo de lenguaje en: 12 Noviembre 2010, 21:49 pm
Para administrar servidores, lo mejor es: perl, bash y awk.

Saludos.
399  Programación / Programación General / Re: que version de delphi me recomiendan? en: 12 Noviembre 2010, 21:48 pm
La última, Delphi XE o la anterior, Delphi 2010.

Saludos.
400  Programación / .NET (C#, VB.NET, ASP) / Re: Como insertar Unicode en vb.net? en: 7 Noviembre 2010, 13:32 pm
Creo que deberías buscar en google la definición de UNICODE o UTF-8.

.NET trabaja en UNICODE nativo, es decir, el tipo de datos char ocupa 2 bytes en vez de 1. Si no se muestran los caracteres UNICODE en tu equipo puede ser porque no tengas las fuentes de idiomas instaladas, los Windows Ultimate suelen tener todas instaladas...
Páginas: 1 ... 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [40] 41 42 43 44 45
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines