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 - m@o_614

#221
muchas gracias a ambos por sus respuestas, una ultima duda el profesor me pidio que comparara los tiempos de ejecucion de los algoritmos con vectores de tamanio que va desde el 10 hasta el millon!!!! y eso me parece demasiado estarle ingresando numerito por numerito, creen que es mejor crear un archivo que ya tenga los numeros y despues ya que abra el archivo y los ordene o que otra opcion hay???

#222
Programación C/C++ / analisis codigos de ordenamiento
18 Septiembre 2013, 18:59 PM
Saludos tengo que codificar algunos codigos de ordenamiento y despues me pide que los compare de acuerdo a su tiempo de ejecucion, ya sea para un array de 1000, 10000 o 1000000, los codigos ya los tengo hechos

BURBUJA
#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void Ordenacion_Burbuja(int v[],int n);

int main()
{
    int i,n,v[MAX];
    printf("Dame el numero de elementos del vector: ");
    scanf("%d",&n);
    for(i=0;i < n;i++)
    {
        printf("Dame el elemento numero %d:\n",i+1);
        scanf("%d",&v[i]);
        system("cls");
    }
    Ordenacion_Burbuja(v,n);

    for(i=0;i < n;i++)
       printf("[%d]",v[i]);
    return 0;
}

void Ordenacion_Burbuja(int v[],int n)
{
    int i,j,aux;
    for(i=1;i < n;i++)
    {
        for(j=0;j < n-i;j++)
        {
            if(v[j] > v[j+1])
            {
                aux = v[j+1];
                v[j+1] = v[j];
                v[j] = aux;
            }
        }
    }
}


INSERCION
#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void metodo_Insercion(int v[],int n);

int main()
{
    int i,v[MAX],n;
    printf("Dame el numero de elementos del vector: ");
    scanf("%d",&n);
    for(i=0;i < n;i++)
    {
        printf("Dame el elemento numero %d:\n",i+1);
        scanf("%d",&v[i]);
        system("cls");
    }
    metodo_Insercion(v,n);
    for(i=0;i < n;i++)
       printf("[%d]",v[i]);
    return 0;
}

void metodo_Insercion(int v[],int n)
{
    int i,j,aux;
    for(i=1;i < n ;i++)
    {
        for(j=i;j > 0;j--)
        {
            if(v[j] < v[j-1])
            {
                aux = v[j];
                v[j] = v[j-1];
                v[j-1] = aux;
            }
        }
    }

}


SELECCION

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void metodo_Seleccion();
int Minimo(int v[],int n);
void intercambiar(int pos,int v[]);

int main()
{
    int n,i,v[MAX],pos;
    printf("Dame el numero de elementos del vector: ");
    scanf("%d",&n);
    for(i=0;i < n;i++)
    {
        printf("Dame el elemento numero %d: ",i+1);
        scanf("%d",&v[i]);
        system("cls");
    }

    metodo_Seleccion(v,n);
    for(i=0;i < n;i++)
        printf("[%d]",v[i]);
    return 0;
}

void metodo_Seleccion(int v[],int n)
{
    int i,j,minimo,aux,pos;
    for(i=0;i < n;i++)
    {
        minimo = v[i];
        pos = i;
        for(j=i+1;j < n;j++)
        {
            if(v[j] < minimo)
            {
                minimo = v[j];
                pos = j;
            }
        }
        aux = v[pos];
        v[pos] = v[i];
        v[i] = aux;
    }
}


El problema es que no tengo idea como determinar los tiempos que le toma a cada uno ordenar un vector, como se puede hacer???

de antemano gracias
#223
Programación C/C++ / algoritmos divide y venceras
14 Septiembre 2013, 02:46 AM
Saludos

Estoy estudiando algunos metodos de ordenamiento como Merge-Sort, Quick Sort y el metodo de busqueda binaria, y me he fijado que todos estos algoritmos utilizan la tecnica de dividir vectores en subvectores e irlos ordenando pero me fije que antes  de dividir el vector en 2 hace una suma, la de la variable ini mas el tamanio del vector

ini=1,sup=n;
i= (ini+sup)/2;

y me pregunto si esto es necesario, no seria mas logico dividir el tamanio del vector sobre 2 sin necesidad de hacer la dichosa suma??? de que me sirve la variable ini??

sup=n;
i= (sup/2);

de antemano gracias

#224
Programación C/C++ / getc() y printf
12 Septiembre 2013, 22:11 PM
Saludos, tengo el siguiente codigo que me tiene que colocar el puntero en el caracter que se encuentre en la mitad de un texto, leerlo y despues imprimirlo, el codigo funciona correctamente, la duda que tengo es que a la hora de imprimir lo hago con un printf y cuando a ese printf le digo que tome el caracter de la mitad con getc() me imprime el caracter que le sigue al de la mitad, o sea uno mas, y no se por que se comporta asi esta funcion,

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

int main()
{
    int fin,mitad;
    char letra;
    FILE *fd;
    if((fd = fopen("F:\\archivo_fuente.txt","r"))!=NULL)
    {
        fseek(fd,-1,SEEK_END);
        fin = ftell(fd);
        printf("%d\n",fin);
        mitad = fin/2;
        printf("%d\n",mitad);
        fseek(fd,mitad,SEEK_SET);
        fread(&letra,sizeof(char),1,fd);
        printf("%c",getc(fd));
    }
    else
       printf("No se pudo abrir archivo");
    return 0;
}


y si al printf le pongo

fread(&letra,sizeof(char),1,fd);
        printf("%c",letra);

aqui si me imprime el caracter que se encuentra en la mitad y no el que le sigue. cual es la diferencia??

de antemano gracias
#225
muchas gracias rir3760 nunca se me hubiera ocurrido que cuando haces una actualizacion no se puede leer y despues escribir luego. Una ultima pregunta, por que antes del fread siempre se tiene que utilizar el ftell???
#226
En realidad ese printf y el contador ps no sirven para nada, solo queria saber si me estaba contando bien cuantos unos habia, pero ahora ya me di cuenta que el fseek no es el problema!! el problema es cuando le asigno a letra un nuevo valor o en el fwrite, no se bien

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

/*
   Objetivo de la prueba: En una archivo de texto que contiene caracteres alfanuméricos,
   intercambiar el  '1' por el  ' 5' en donde quiera que ocurra esa incidencia en el documento.
   El archivo debe aparecer sin ningún 1, y en su lugar los cincos equivalentes.
*/

int main()
{
  FILE *fd;
  char letra;
  int n;
  if((fd = fopen("F:\\archivo2.txt","r+"))!=NULL)
  {
         fread(&letra,sizeof(char),1,fd);
          if(letra == '1')
          {
              fseek(fd,-1,SEEK_CUR);
              letra = '5';
              printf("%c",fgetc(fd));
  }
  else
     printf("No se pudo abrir el archivo");
  return 0;
}


en el printf que tiene el fgetc  queria ver si la variable letra habia cambiado a 5 pero ya vi que me sigue imprimiendo los unos, me imagino que por ahi esta el problema
#227
Gracias por sus respuestas, le habia hecho al codigo unos cambio de los que me habian dicho, pero ahora sucede que aunque el programa si cambia los 1's por los 5's ahora se cicla infinitamente, y creo que el problema esta en el fseek, porque le puse un contador en el ciclo para que me contara cuantos unos aparecian en el texto y si le ponia fseek no me imprimia nada y si se lo quitaba ya me imprimia correctamente

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

/*
    Objetivo de la prueba: En una archivo de texto que contiene caracteres alfanuméricos,
    intercambiar el  '1' por el  ' 5' en donde quiera que ocurra esa incidencia en el documento.
    El archivo debe aparecer sin ningún 1, y en su lugar los cincos equivalentes.
*/

int main()
{
   FILE *fd;
   char letra;
   int i = 0;
   if((fd = fopen("F:\\archivo2.txt","r+"))!=NULL)
   {
       while(!feof(fd))
       {
           fread(&letra,sizeof(char),1,fd);
           if(letra == '1')
           {
               fseek(fd,-1,SEEK_CUR);
               letra = '5';
               fwrite(&letra,sizeof(char),1,fd);
               i++;
           }
       }
       printf("%d",i);
   }
   else
      printf("No se pudo abrir el archivo");
   return 0;
}
#228
Saludos tengo el siguiente codigo que me lee un archivo de texto y despues lo modifica, en todos los lugares donde se encuentre 1's los intercambia por 5's, la lectura del archivo lo hace bien porque ya verifique y si me ubica los unos del texto el problema es para poder cambiarlos a 5, y no se donde esta el error

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

/*
   Objetivo de la prueba: En una archivo de texto que contiene caracteres alfanuméricos,
   intercambiar el  '1' por el  ' 5' en donde quiera que ocurra esa incidencia en el documento.
   El archivo debe aparecer sin ningún 1, y en su lugar los cincos equivalentes.
*/

int main()
{
   FILE *fd;
   char letra;
   if((fd = fopen("F:\\archivo_practica11.txt","r+"))!=NULL)
   {
       while(!feof(fd))
       {
           fread(&letra,sizeof(char),1,fd);
           if(letra == '1')
           {
                letra = '5';
               fwrite(fd,sizeof(char),1,letra);
           }
       }
   }
   else
      printf("No se pudo abrir el archivo");
   return 0;
}


gracias
#229
Tenian razon,  no solo el ultimo caracter era un salto de linea o espacio, sino que los ultimos 4 caracteres tambien eran saltos de linea
#230
Saludos roilivethelife hice lo que me recomendaste y no funciono porque el lseek(fd,0,SEEK_END) me coloca el puntero en el fin de archivo o sea \0 donde no hay ningun caracter y cuando le pongo lseek(fd,-1,SEEK_END) le estoy diciendo que me coloque un lugar antes del fin de archivo o sea en el ultimo caracter pero ni asi funciona