Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 01:11   #1
Маришка)))
Новичок
Джуниор
 
Регистрация: 26.12.2011
Сообщений: 2
По умолчанию Проограмма на паскале.абс.нет

Помогите пожалуйста разобраться с программой...
Написана на Паскале АБС.нет
Данная программа троит для орентированного графа, заданного фактор-множеством, матрицы смежности и инциденстности...
Программа написана не совсем мной...
А препод придерается к каждой запятой, точке и пробелу...
Поэтому многие вещие обяснить не смогу...(возле них стоят ?!?!)




Код:
 Program Pr19;

 uses PABCSystem, Crt; {Включили для очистки экрана и убийства программы}

 var 

 c: char;



 procedure Main_program(); {Сама программа}
 var
 matrix: array of array of integer; {матрица смежности} {двумерный динамический массив}
 matrix2: array of array of integer; {матрица инцидентности}
 this_string: string; ?!?!
 this_num: integer; ??!
 n: integer;
 tmp: integer; ?!?!
 Begin {1} {номера нужны чтобы увидеть какой энд к какому бегину отностися}
 ClrScr;
 writeln('Введите количество вершин фактор множества');
 var th:=true; ?!?!
 var num:integer;
 while th do ?!?!
 begin
 readln(this_string); {хотим получить цифру количества вершин}
 n:=this_string.Length;
 if n=0 then begin writeln('Вы ввели пустую строку повторите ввод'); continue; end
 else begin
 num:=0;
 var tr:=false; ?!?!
 for var i:=1 to n do
 begin
 var g:=Ord(this_string[i])-48; ?!?!
 if (g>=0) and (g<=9) then num:=num*10+g
 else begin tr:=true; break; end; 
 end;
 if tr then begin writeln('Ошибка ввода повторите еще раз'); continue; end
 else th:=false; ?!?!?
 end;

 end;

 tmp:=1;
 SetLength(matrix,num); ?!?!
 for var f:=0 to num-1 do ?!?!
 SetLength(matrix[f],num);

 for var i:=0 to num-1 do
 for var j:=0 to num-1 do
 matrix[i][j]:=0; 
 while tmp<=num do
 begin
 writeln ('Введите через пробел связи ', tmp, ' вершины');
 readln(this_string);
 var tr:=false;         ?!?!
 this_num:=0;
 for var i:=1 to this_string.Length do
 begin
 var g:=Ord(this_string[i])-48;
 if (g>=0) and (g<=9) then this_num:=this_num*10+g
 else if g=-16 then if (this_num>0) and (this_num<num) then 
 begin matrix[tmp-1][this_num-1]:=1; this_num:=0; end      ?!?!
 else begin tr:=true; break; end
 else begin tr:=true; break; end;
 end;
 if tr then begin 
 for var i:=0 to num-1 do
 matrix[tmp-1][i]:=0;
 writeln('Ошибка ввода повторите еще раз'); continue; 
 end
 else begin matrix[tmp-1][this_num-1]:=1; tmp+=1; end;

 end;

 writeln('Матрица смежности:');

 for var i:=0 to num-1 do
 begin
 for var j:=0 to num-1 do
 write (matrix[i][j], ' ');
 writeln();
 end;

 var sim: boolean :=true;      ?!?!

 for i: integer :=0 to num-1 do
 for j: integer :=i+1 to num-1 do
 if matrix[i][j]<>matrix[j][i] then sim:=false; {хоть одна неодинаковая не симметрично}       ?!?!

 if sim then begin   ?!?! 

 var st:=1; {тут будем считать ребра}
 SetLength(matrix2,num);
 for var f:=0 to num-1 do
 SetLength(matrix2[f],st);
 for var f:=0 to num-1 do
 matrix2[f][st-1]:=0;

 for var tmp1: integer :=0 to num-1 do
 for var tmp2: integer :=tmp1 to num-1 do
 begin
 if matrix[tmp1][tmp2]=1 then
 begin
 matrix2[tmp1][st-1]:=1;
 matrix2[tmp2][st-1]:=1;
 st+=1;
 for var f:=0 to num-1 do
 SetLength(matrix2[f],st);
 end;
 end;
writeln('Матрица инцидентности:');
 if st<>1 then
 for var tmp1: integer :=0 to num-1 do
 begin
 for var tmp2: integer :=0 to st-2 do
 begin
 if matrix2[tmp1][tmp2]=-1 then write(matrix2[tmp1][tmp2],' ')
 else write(' ', matrix2[tmp1][tmp2],' ');
 end;
 writeln();
 end
 else
 for var tmp1: integer :=0 to num-1 do
 writeln(matrix2[tmp1][0]);

 writeln();

 end;


 writeln('Еще раз - n, для справки - ?, выйти - q');
 End; {1}



 while true do {ГЛАВНЫЙ Б Е С К О Н Е Ч Н Ы Й ЦИКЛ}
 begin
 readln(c);
 case c of
 'n': Main_program();
 '?': begin Help(); writeln('Для начала использования программы нажмите клавишу <n>, <q> для выхода'); end;
 'q': Halt(); 
 else writeln('Ошибка ввода повторите еще раз, <?> для справки');
 end;
 end;

 End.


___________
1) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

2) Название темы должно адекватно отражать суть решаемой задачи/проблемы

3) КРОССПОСТ (это создание одинаковых тем строго запрещён).

Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 26.12.2011 в 08:31.
Маришка))) вне форума Ответить с цитированием
Старый 26.12.2011, 01:31   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

поехали

this_string: string; ?!?! - сринговая переменная, строка по простому длиной 255 символов + нулевой символ код которого обозначает длину строки

this_num: integer; ??! - переменная типа интеджер, числовая переменная которая может хранить в себе значение от -32768..+32767 размером 2 ну или 4 байта зависит проца

tmp: integer; ?!?! - см. выше

th:=true; ?!?! - переменная типа boolean хранящая значения либо true - истина либо false - ложь

while th do ?!?! - цикл с предусловием выполняется пока условие истинно
смотрим выше и видим th:=true что говорит о том что этот цикл будет выполнятся пока th не приобритёт значение false
tr:=false; ?!?! - присваиваем значение false

g:=Ord(this_string[i])-48; ?!?! - переменной присваиваем значение кода символа строки - 48. это короч если не изменяет память способ получить число из символа тк в аски таблице цифры начинаются с 48 кода

th:=false; ?!?!? см.выше

SetLength(matrix,num); ?!?! выделение памяти для динамического массива matrix под Num элементов типа integer таким образом если учесть что под integer выделяется 2 байта то для matrix выделится 2*num байт

for var f:=0 to num-1 do ?!?! цикл выполняется пока f не станет больше num-1
после каждого шага переменная f увеличится на 1 После цикла значение f неопределено
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 26.12.2011, 01:38   #3
Маришка)))
Новичок
Джуниор
 
Регистрация: 26.12.2011
Сообщений: 2
По умолчанию

Hacker19_90,

спасибо)))_ только вот ещ ебы разобраться что эти переменные означают...
Этот пакаль какойто другой стал(((
Маришка))) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно или нет вот в чём вопрос но ошибок нет... Alexcool Помощь студентам 2 10.01.2010 13:55
Паскаль абс Roll1n Паскаль, Turbo Pascal, PascalABC.NET 1 30.09.2009 14:25
Паскаль(абс) Roll1n Помощь студентам 16 30.09.2009 00:24