пʼятниця, 15 вересня 2017 р.

Практична робота №2.2

Тема. Способи подання графів
Мета. Формування умінь представляти графи у вигляді таблиці суміжності

Завдання
Створити програму з графічним інтерфейсом для виконання наступних завдань:
1)    з першого текстового поля прочитати дані про пов’язані вершини графу (у окремих рядках вказано через пробіл номери пов’язаних ребрами вершин);
2)    до другого текстового поля вивести таблицю суміжності для цього графу;
3)    до третього текстового поля вивести кількість вершин графу;
4)    до четвертого текстового поля вивести кількість ребер графу.
Примітка: вершини графу пронумеровані по порядку від 1, граф не містить ізольованих вершин.

Приклади вхідних та вихідних даних:
Граф
Вхідні дані
Вихідні дані
Memo1
Memo2
Edit1.Text
Edit2.Text


1 4
1 2
1 3
3 2
3 5
0 1 1 1 0
1 0 1 0 0
1 1 0 01
1 0 0 0 0
0 0 1 0 0
5
5

Розв'язання мовою Pascal

procedure TForm1.Button1Click(Sender: TObject);
var  v,r,a,b,x,i,j : Integer;
     matr:array[1..100,1..100of Integer;
     s:string;
begin
        //Заповнюємо матрицю суміжності та рахуємо кількість вершин
        v:=0; //У цю змінну запам'ятовуватимемо найбільший номер вершини
        For i := 0 To Memo1.Lines.Count - 1 do begin
            //читаємо і-тий рядок з Memo1 до змінної s
            s := Memo1.Lines[i];
            //вилучаємо пробіли спереду та ззаду
            s := Trim(s);
            //вилучаємо подвійні пробіли
            while pos('  ',s)<>0 do delete(s,pos('  ',s),1);
            //Якщо в рядку є два числа, то використовуючи
            //функції для роботи з рядками, запишемо їх спочатку
            // до змінних a та b, а потім до матриці суміжності
            If (s <> ''and (pos(' ',s)<>0) Then begin
                x := pos(' ',s);
                a := StrToInt(copy(s,1,x-1));
                b := StrToInt(copy(s,x+1,Length(s)-x));
                matr[a, b] := 1;
                matr[b, a] := 1;
                If a > v Then v := a;
                If b > v Then v := b;
            end
        end;
        //Рахуємо кількість ребер
        r := 0;
        For i := 1 To v do begin
            For j := 1 To v do begin
                If matr[i, j] = 1 Then r := r + 1;
            end;
        end;
        r := r div 2;
        //Виводимо матрицю суміжності
        Memo2.Text := '';
        For i := 1 To v do begin
            s:='';
            For j := 1 To v do begin
                s := s + IntToStr(matr[i, j]) + ' ';
            end;
            trim(s);
            Memo2.Lines.Add(s);
        end;
        //Виводимо кількість вершин
        Edit1.Text := IntToStr(v);
        //Виводимо кількість ребер
        Edit2.Text := IntToStr(r);
end;

Завдання для самостійного виконання
 Виконати програму для заданого вашим варіантом графу:


Немає коментарів:

Дописати коментар