algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Ciąg graficzny(2) - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 09 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

graficzny2_d/ciag_graficzny.dpr:
//www.algorytm.org
//algorytm testowania czy podany ciąg stopni wierzcholków grafów jest graficzny
//Tomasz Lubiński (c) 2003
program ciag_graficzny;

uses
  SysUtils;

{$R *.RES}
{$Apptype Console}
var
  graficzny: Boolean;
  n,i,s: Integer;
  c: Array[1..100] of Integer;

//sortuje ciąg nierosnąco
procedure sort(var c:Array of Integer; n: Integer);
var j,k: Integer;
    flag: Boolean;
begin
flag:=true;
while (flag) do
        begin
        flag:=false;
        for j:=0 to n-2 do
                if c[j]<c[j+1] then
                        begin
                        k:=c[j];
                        c[j]:=c[j+1];
                        c[j+1]:=k;
                        flag:=true;
                       end;
       end;
end;


begin
//pobierz dane
writeln('Podaj liczbe wierzcholkow grafu');
readln(n);
for i:=1 to n do
        begin
        writeln('Podaj stopien wierzcholka '+IntToStr(i));
        readln(c[i]);
        end;
//algorytm testowania czy podany ciąg stopni wierzcholkow jest graficzny
graficzny:=true;
//sprawdz czy suma ciągu jest liczbą parzystą
s:=0;
for i:=1 to n do s:=s+c[i];
if (s mod 2)<>0 then graficzny:=false
        else sort(c,n); //posortuj ciąg nierosnąco jeżeli suma jest liczbą parzystą
while ((c[1]<>0) and graficzny) do
        begin
        s:=0;
        for i:=2 to n do
                if c[i]<>0 then s:=s+1;
        if c[1]>s then graficzny:=false
                else for i:=2 to c[1]+1 do c[i]:=c[i]-1;
        c[1]:=0;
        sort(c,n);
        end;
//podaj użytkownikowi wynik
if (graficzny) then writeln('Podany ciąg jest graficzny')
        else writeln('Podany ciąg nie jest graficzny');
readln;
end.
Dodaj komentarz