Читайте также: |
|
1) x=3
e=0.0001
Result: 10.06766
Ch x: 10.06761
Результат правильний.
2) x=5
e=0.0001
Result: 74.20991
Ch x: 74.20995
Результат правильний.
Завдання № 7
Тема завдання: Мова Pascal, множини
Постановка задачі
Використовуючи множини написати програму, яка б друкувала без повторень шляху всеможливі шляхи між двома заданими вершинами у зв’язному графі. Інформацію про граф прочитати з файлу.
Опис алгоритму
Суть цієї задачі полягає в тому, що ми вершини позначаємо числами, що не перевищують 9, тоді ребра ми будемо позначати двоцифровими числами. Тоді за цим алгоритмом програма може працювати не більше, ніж з дев’ятьма вершинами(може бути і з десятьма, якщо врахувати 0). Тоді шлях між двома вершинами запишеться у вигляді числа, що не перевищує дев’ять розрядів. Таким чином, ми переглядаємо у циклі всі можливі шляхи і перевіряємо, чи йому відповідають задані ребра у файлі, при цьому ми зразу відкидаємо шляхи із однаковими вершинами та ті, у яких перша вершина шляху не v1, а остання не v2, які ми зчитали з клавіатури.
Текст програми
Program a7;
Label 1;
TYPE vershuna=1..9;
vershunu=set of vershuna;
rebro=10..99;
rebra=set of 10..99;
VAR v1,v2:vershuna; r3:vershunu;
r:rebro; r1,r2:rebra;
ff:text; i,k,d,p,a:longint; n,t,l,m,b:integer;
Begin
assign(ff,'d:\graf.txt');
reset(ff);
r1:=[];
while not eof(ff) do begin
read(ff,r);
r1:=r1+[r];
end;
close(ff);
writeln('vvedit dvi rizni vershunu');
readln(v1);
readln(v2);
writeln(‘vsi shliahu mig dvoma vershunamu’);
i:=11;
while i<=(v1*100000000+9876543+v2) do
Begin
r2:=r1;
k:=i;
p:=i;
n:=0; r3:=[];
while p>0 do
Begin
b:=p mod 10;
if (b in r3) then goto 1
else r3:=r3+[b];
p:=p div 10;
n:=n+1; {n-кількість позицій i}
end;
d:=1; {перша вершина шляху v1}
for m:=1 to n-1 do
d:=d*10;
if (i div d)<>v1 then goto 1;
{нема вершин, що повторюються}
l:=n;
while k>10 do
begin
d:=1;
for t:=1 to l-2 do
d:=d*10;
a:=k div d;
if (a in r2) then begin
if ((a mod 10)=v2)and((i mod 10)=v2) then begin writeln(i);
end;
r2:=r2-[a];
end
else break;
k:=k-((k div (d*10))*d*10);
l:=l-1;
end;
1:i:=i+1;
end;
readln;
end.
Апробація
Нехай у файлі задані такі ребра: 13 24 32 45 14
1) vvedit dvi rizni vershunu
vsi shliahu mig dvoma vershunamu
Результат правильний
2) vvedit dvi rizni vershunu
vsi shliahu mig dvoma vershunamu
Завдання № 8
Тема завдання: Мова Pascal, робота з файлами
Постановка задачі
Задано текстовий файл, який містить символьну інформацію. Поміняти в ньому порядок входження кожної стрічки на протилежний. Додаткових файлів не використовувати.
Опис алгоритму
Спочатку з файлу зчитуємо стрічку. Після цього запускаємо цикл від останнього елемента стрічки до першого, і одразу виводимо на екран.
Текст програми
program p8;
uses crt;
var f:text; s:string; i:integer;
begin
assign(f,'abba.txt');
reset(f);
read(f,s);
for i:=length(s) downto 1 do
write(s[i]);
close(f);
end.
Дата добавления: 2015-07-17; просмотров: 107 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Постановка задачі | | | Апробація |