Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121

    BUBBLE SORT- Cosa non vā nel mio programma?

    Oggi ho provato a ORDINARE UN ARRAY e chiedendo su answer mi han detto che l'algoritmo pių semplice per l'ordinamento di un array č il bubble sort.
    Allora ho cercato su wikipedia, mi sono fatto una idea e ho scritto questo programma:
    Dimenticavo! č in PASCAL

    Program Bubble_sort;
    Uses crt, dos;
    TYPE
    Vettore = ARRAY [1..5] OF Integer;
    VAR
    Dato: Vettore; {Vettore}
    i,k: integer; {Variabili ausiliari}
    N: integer; {Numero dati}
    Appoggio: integer; {Variabile usata per lo scambio}
    Begin

    n:= 5; {Numero dati = 5}
    {Lettura Dati}
    For i:=1 to 5 do
    Begin
    Write('Introduci ',i,' Numero');
    Readln(dato[i]);
    end;
    {Fine lettura dati}

    i:=1; {Inizializzazione i}

    Repeat{Ripeti tutto, ma se i vale numero dei dati-1 smetti}
    Begin
    i:=i+1;{Incremento i}
    for k:=1 to (n-1) do
    Begin
    {Sostituzione numeri}
    if dato[k]> dato[k+1] Then {se il dato dell array č maggiore del successivo}
    Begin
    Appoggio:= dato[i]; { }
    dato[i]:= dato[i+1]; { <--Scambio }
    dato [i+1]:= Appoggio { }
    end;
    End;

    end;
    Until i = (n-1);{Ripeti tutto, ma se i vale num-1 smetti}

    {Stampa L'array}
    For i:=1 to 5 do
    Begin
    Writeln(dato[i]);
    end;
    Readln;
    End.

    Non mi da nessun errore il compilatore, perō non funziona! perchč ??????

  2. #2
    Nell'ordinamento o fai partire i da 0 oppure iteri finchč i č diversa da n.
    Inoltre hai usato l'indice i (e non k) per lo scambio...
    Usa i tag [*code][*/code] (senza asterischi) la prossima volta, per postare il codice e, soprattutto, indica il linguaggio nel titolo della discussione.

    Guarda qui: http://www.algorithm-code.com/wiki/Bubble_sort

    codice:
    procedure BubbleSort(var A:array of Integer);
    Var
        i, z: Integer;
        swapped: boolean;
    begin
        repeat
            swapped := false;
            for i:=low(A) to high(A)-1 do
            begin
                if(A[i] > A[i+1])then
                begin
                    z := A[i];
                    A[i] := A[i+1];
                    A[i+1] := z;
    
                    swapped := true;
                end;
            end;
        until swapped = false;
    end;
    Experience is what you get when you don’t get what you want

  3. #3
    Ma hai risolto ?
    codice:
    Program Bubble_sort;
    	Uses crt, dos;
    	TYPE
    		Vettore = ARRAY [1..5] OF Integer;
    	VAR
    		Dato: Vettore; {Vettore}
    		i,k: integer; {Variabili ausiliari}
    		N: integer; {Numero dati}
    		Appoggio: integer; {Variabile usata per lo scambio}
    	Begin
    		n:= 5; {Numero dati = 5}
    		
    		{Lettura Dati}
    		For i:=1 to 5 do
    			Begin
    				Write('Introduci ',i,' Numero');
    				Readln(dato[i]);
    			end;
    		{Fine lettura dati}
    
    		i:=0; {Inizializzazione i}
    		Repeat{Ripeti tutto, ma se i vale numero dei dati-1 smetti}
    			Begin
    				i:=i+1;{Incremento i}
    				for k:=1 to (n-1) do
    					Begin
    						{Sostituzione numeri}
    						if dato[k]> dato[k+1] Then {se il dato dell array č maggiore del successivo}
    							Begin
    								Appoggio:= dato[k]; { }
    								dato[k]:= dato[k+1]; { <--Scambio }
    								dato [k+1]:= Appoggio { }
    							end;
    					End;
    			end;
    		Until i = (n-1);{Ripeti tutto, ma se i vale num-1 smetti}
    
    		{Stampa L'array}
    		For i:=1 to 5 do
    			Begin
    				Writeln(dato[i]);
    			end;
    		Readln;
    		End.
    Experience is what you get when you don’t get what you want

  4. #4
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121

    Si

    Si ho risolto da solo scusa ma avevo dimenticato questo post.
    L'ho risolta con una variabile di tipo booleana guarda:

    codice:
     repeat
     scambio:= false;
     for i:=1 to (a-1) do
      Begin
       if num[i]<num[i+1] then
        Begin
         scambio:= true;
         appoggio:= num[i];
         num[i]:= num[i+1];
         num[i+1]:= appoggio;
        end;
      end;
     until scambio = false;

  5. #5
    Perfetto...
    Il tuo programma andava bene comunque.
    Sono modi diversi di fare la stessa cosa ...

    il mio preferito č questo:
    codice:
    for i := 4 downto 1 do
    	begin
    		for k := 1 to i do
    			begin
    				if dato[k]> dato[k+1] Then {se il dato dell array č maggiore del successivo}
    					Begin
    						Appoggio:= dato[k]; { }
    						dato[k]:= dato[k+1]; { <--Scambio }
    						dato [k+1]:= Appoggio { }
    					end;
    			end;
    	end;
    Experience is what you get when you don’t get what you want

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.