|
221
|
Programación / Programación C/C++ / Re: analisis codigos de ordenamiento
|
en: 19 Septiembre 2013, 04:38 am
|
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 / Programación C/C++ / analisis codigos de ordenamiento
|
en: 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: "); for(i=0;i < n;i++) { printf("Dame el elemento numero %d:\n",i +1); } Ordenacion_Burbuja(v,n); for(i=0;i < n;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: "); for(i=0;i < n;i++) { printf("Dame el elemento numero %d:\n",i +1); } metodo_Insercion(v,n); for(i=0;i < n;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: "); for(i=0;i < n;i++) { printf("Dame el elemento numero %d: ",i +1); } metodo_Seleccion(v,n); for(i=0;i < n;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 / Programación C/C++ / algoritmos divide y venceras
|
en: 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 / Programación C/C++ / getc() y printf
|
en: 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 ) { mitad = fin/2; fseek(fd ,mitad ,SEEK_SET ); fread(&letra ,sizeof(char),1,fd ); } else printf("No se pudo abrir archivo"); return 0; }
y si al printf le pongo fread(&letra ,sizeof(char),1,fd );
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
|
|
|
226
|
Programación / Programación C/C++ / Re: Lectura y modificacion de archivo
|
en: 11 Septiembre 2013, 03:16 am
|
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') { letra = '5'; } 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
|
Programación / Programación C/C++ / Re: Lectura y modificacion de archivo
|
en: 10 Septiembre 2013, 23:30 pm
|
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 ) { { fread(&letra ,sizeof(char),1,fd ); if(letra == '1') { letra = '5'; fwrite(&letra ,sizeof(char),1,fd ); i++; } } } else printf("No se pudo abrir el archivo"); return 0; }
|
|
|
228
|
Programación / Programación C/C++ / Lectura y modificacion de archivo
|
en: 10 Septiembre 2013, 13:12 pm
|
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 ) { { 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
|
|
|
230
|
Programación / Programación C/C++ / Re: leer caracteres de un archivo
|
en: 8 Septiembre 2013, 06:42 am
|
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
|
|
|
|
|
|
|