Tengo que hacer un programa del logaritm9o de la burbuja pero cuando corro el programa sale de resultado un 0
he pensado que el problema esta en la manera en que se carga el arreglo ¿como o en que variable tengo que cargar el arreglo?
| |||
Hola, Es interesante que se propongan ejercicios sobre Pascal. Creo que lo que intentas es escribir un programa que implemente el algoritmo de ordenamiento burbuja, ¿no es así? Respecto al cero que dices que genera el programa, la verdad es que puede haber un sinnúmero de razones por las que esto puede pasar, y es realmente difícil dar con la causa cuando no se cuenta con el código fuente. ¿Puedes publicar el código que estás usando en este momento? De esta forma sería tremendamente más sencillo ayudarte. Un cordial saludo |
| ||||
{************************************************* **************************} { METODOS DE ORDENAMIENTO } { } { 3 Algoritmos de ordenamiento, Burbuja, Seleccion y Interseccion. Trabajan } { sobre vectores de 1 dimension ordenandolos de menor a mayor, la cantidad } { de elementos de los vectores esta controlada por la constante N donde N } { puede tomar cualquier valor entero. Una forma de ver como trabajan estos } { algoritmos es usar el Debug de TPascal agregando la variable A(el vector) } { y observar como se va ordenando de a poco nuestro vector. } { } {Mauricio ([email protected]) } {Pd: no se pierdan el Debug que es lo mas!!! } {************************************************* **************************} program Ordenamiento; uses crt; const N = 5; type TipoArray = Array [1 .. N] of byte; var a:tipoarray; i,j:byte; opc:char; salir:boolean; procedure Cambiar (var a,b:byte); var aux:byte; begin aux:= a; a:= b; b:= aux end; procedure Cargar(var A:TipoArray); var i:byte; begin for i:=1 to N do begin write('Ingrese la coordenada ',i,': '); readln(a[i]); end; end; procedure Burbuja(var A:TipoArray); var i,j:byte; begin for j:=1 to (N-1) do for i:=1 to (N-1) do if (A[i] > A[i+1]) then Cambiar(A[i],A[i+1]) end; procedure Seleccion(var A: TipoArray); var Recorrido,j:byte; begin for Recorrido:= 1 to N-1 do for J :=Recorrido+1 to N do If (A[Recorrido]>A[J]) then Cambiar(A[Recorrido],A[J]) end; procedure Interseccion (var A:TipoArray); var Indice,K,Aux:byte; Hallado:Boolean; begin For Indice:= 2 to N do begin Aux:= A[Indice]; K:=Indice-1; Hallado:=false; While not Hallado and (K>0) do If (A[K]>Aux) then begin A[K+1]:=A[K]; K:=K-1; end else Hallado:=true; If Hallado then A [K+1]:=Aux else A[1]:= Aux end end; procedure Imprime(A:TipoArray); var i:byte; begin write('[ '); for i:=1 to N do write(A[i],' '); writeln(']'); end; begin clrscr; writeln(' TIPOS DE ORDENAMIENTO'); writeln; Cargar(A); writeln; writeln('Seleccione el tipo de Ordenamiento: '); writeln(' 1.Burbuja'); writeln(' 2.Selecci¢n'); writeln(' 3.Intersecci¢n'); writeln; repeat write(' Opc:'); readln(opc); if (opc='1') or (opc='2') or (opc='3') then salir:=true else salir:=false; until salir; case opc of '1': Burbuja(A); '2': Seleccion(A); '3': Interseccion(A); end; Imprime(A); readkey; end. Tomado de Código Fuente Pascal.
__________________ NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL |
| ||||
Pues sigue sin correrme el bendito programa, este es mi codigo fuente: program burbuja; uses crt; const n=5; var i,j,temp:integer; a:array[1..n] of integer; begin clrscr; writeln('Metodo de ordenacion de la burbuja'); writeln('Escribe 5 numeros enteros'); readln(a[i]); for j:=1 to (n-1) do for i:=1 to (n-1) do if (a[i])>(a[i+1]) then begin; temp:=a[i]; a[i]:=a[i+1]; a[i+1]:=temp; end; writeln('El resultado es ', a[i]); readln; end. a todo eso sale de resultado un grandioso 0
__________________ I miss you, like the desert miss the rain |
| |||
Hola, Me parece que lo que hace falta es que utilices ciclos tanto a la hora de leer los datos como a la hora de imprimirlos. Al tener sentencias readln(a[i]) o writeln(a[i]) sencillas, solo estarás leyendo/imprimiendo un elemento de la matriz dada. Lo natural sería que esas sentencias estuvieran dentro del cuerpo de un ciclo que usara a `i' como variable de iteración. Por ejemplo:
Código:
He modificado otros pequeños elementos del código, aunque esencialmente sigue trabajando como es de esperarse. :)program burbuja; uses crt; const n = 5; var i,j,temp:integer; a:array[1..n] of integer; begin clrscr; writeln('Metodo de ordenacion de la burbuja'); writeln('Escribe ', n, ' numeros enteros'); for i := 1 to n do readln(a[i]); for j := (n - 1) downto 1 do for i := 1 to j do if (a[i])>(a[i+1]) then begin temp := a[i]; a[i] := a[i+1]; a[i+1] := temp; end; writeln ('El resultado es:'); for i := 1 to n do writeln (a[i]); readln; end. Un cordial saludo |