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

#101
Programación C/C++ / Re: tipos de enteros en C
17 Diciembre 2012, 18:51 PM
Lo más "sencillo" que puedes hacer es crear tu tipo abstracto de datos que te permita tener un dato de 128 bits y crear el conjunto de operaciones que te permitan operar sobre este tipo de dato.
#102
Si el código es estándar debería compilar tanto en linux y en windows
#103
Cita de: Fire_Hugo12 en 16 Diciembre 2012, 23:33 PM
la llamo dentro de un switch en el main:


//dependiendo la opc del menu
switch(opc)
  {
     case 1:
             ingresar();
             system("cls");
             break;
     case 2:
             busqueda();
             getch();
             break;
     case 3: cout<<"El Numero de Repeticion que desea eliminar es: ";
             cin>> v;
             borrar();
             break;
  }
}while(opc!=4);
}


La función borrar recibe dos parámetros y no le estás pasando ninguno, debes pasarle la lista y el valor.
#104
Cita de: Fire_Hugo12 en 16 Diciembre 2012, 19:03 PM
Gracias a las 2 por las respuestas, ya logre ordenarlo por cantidad de repeticiones... lo unico que me falta y tengo una duda es en la parte de borrar los menores, tengo que "v" es el menor numero de repeticiones pero me da un error en la funcion, me dice "error: too few arguments to function 'void borrar(tipoNodo**, int) " que puede ser?
(el compilador que uso es el codeblock)

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) ;
   else { /* Borrar el nodo */
      if(!anterior) /* Primer elemento */
         *lista = nodo->siguiente;
      else  /* un elemento cualquiera */
         anterior->siguiente = nodo->siguiente;
      free(nodo);
   }
}


Ojo CodeBlocks es el IDE lo más seguro es que tu compilador sea GCC. Podrías colocar el fragmento de código donde haces el llamado a la función borrar?

Cita de: x64Core en 16 Diciembre 2012, 08:52 AM
Claro todo el mundo sabe eso, ni siquiera tengo la idea de porque lo mencionas. respecto al tema se tendría que mirar tu código
y de que forma lo implementas para saber si es tan veloz y eficiente.

No todo el mundo lo sabe, por eso lo menciono y como he visto varios posts que respondes y colocas código NO estándar quise hacer la acotación, pero OJO esto no es nada personal, simplemente te lo digo porque a MI parecer es lo más correcto, no quiero caer en discusiones acerca del tema. No tengo ninguna implementación, pero en esencia es lo mejor ir insertando de manera ordenada en una lista enlazada o un arreglo para que al momento de eliminar la palabra o las palabras con el número menor de ocurrencias se sabe de ante mano que es la última en la lista o en el arreglo.
#105
Cita de: x64Core en 16 Diciembre 2012, 06:42 AM
Tu podrías estar buscando esto:

Ordenamiento burbuja en C++

ordena una lista de enteros podrias hacer un array con las veces que se repiten las palabras, o mejor aún hacer una estructura de este tipo:

typedef struct WordInfo
{
  PCHAR   lpWord;
  ULONG   nRep;
}

lpWord, puntero a la palabra.
nRep, las veces que se repite la palabra.

de esta forma lo tienes mejor ordenado.

Sin ánimos de ofender amigo, considero que lo más correcto es que el código que coloques para este tipo de casos sea código estándar, ya que no sabemos que compilador está utilizando Fire_Hugo12. Por las dudas tenemos que PCHAR es equivalente a un apuntador a caracter (char *) y ULONG es equivalente a un entero largo sin signo (unsigned long int). Con respecto al problema puedes utilizar una lista enlazada e ir insertando de manera ordenada en tu caso de mayor a menor. Para eliminar la más baja o las más bajas vas recorriendo palabra a palabra y comprobando si no es la más baja la concatenas en otra nueva cadena y reduces el contador de dicha palabra, esto lo haces hasta que dicho contador llegue a cero.
#106
Cita de: flony en 15 Diciembre 2012, 21:39 PM
lo meti al visual c++ lo compile y me fije los errores, no soy muy bueno apenas aprendiz pero veo que los errores indican que a las matrices le  tenes que meter como dato una constante
error C2057: se esperaba una expresión constante
en la parte int numeros[total],n_par[total],n_impar[total]
una solucion tener matrices dinamicas, aca pongo una pagina porque no llegue tan lejos todavia :) http://www.alanchavez.com/matrices-dinamicas-en-c-desmitificadas/
de todas formas la lógica del problema indica que deba ser desde 01 a 10?...no seria desde 00 a 09?

El código compila, en dado casos los errores son lógicos. Ese error que te arroja el compilador de vc++ sucede cuando tratas de declarar el arreglo global de un tamaño variable, si la declaración del arreglo se encuentra dentro de una función, como en este caso, debería compilar.

Error C2057
http://msdn.microsoft.com/en-us/library/eff825eh(v=vs.71).aspx
#107
Explícame un poco que quieres hacer o que se supone que debería hacer tu código porque no lo estoy siguiendo del todo
#108
Así como lo vas imprimiendo en consola, lo imprimes en el archivo, es decir, dentro del mismo for ya que la consola la puedes ver como un archivo.
#109
Puedes pasar n bytes por una tubería. En tu código tienes un error y es que tratas B como una matriz 3x3 cuando esta es 2x2.
#110
Programación C/C++ / Re: malloc y free
14 Diciembre 2012, 03:47 AM
Otra opción podría ser la siguiente:

#include <stdio.h>
#include <stdlib.h>
#define NUMERO_COLUMNAS 2

void * reservar_matriz(int m, int n)
{
    return malloc(sizeof(double)*m*n);
}

void liberar_matriz(void * matrizp)
{
    free(matrizp);
}

int main()
{
    /* Reserva una matriz de 10 filas por NUMERO_COLUMNAS columnas */
    double (*matriz)[NUMERO_COLUMNAS] = reservar_matriz(10,NUMERO_COLUMNAS);

    if(matriz == NULL)
    {
        fprintf(stderr, "Ocurrión algún problema con malloc()\n");
        return 1;
    }

    matriz[0][0] = 20.5;

    printf("%.1f\n", matriz[0][0]);

    liberar_matriz(matriz);

    return 0;
}