Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ 3 задачи... (полуработающие!) Help...

Автор: DCRM 26.11.2006 5:42

Люди, ХЕЛП!!!
Вот поехали...:
Задача 1!
Условие:
В последовательности из 10 5ти буквенных слов найти и поменять местами пару слов, у которых 1е три буквы совпадают с тремя последними буквами другого...
Вот мой ответ(использую автозаполнение, ИМХО лень заполнять))) ):
РАБОТАЕТ ЧЕРЕЗ РАЗ, ИНОГДА ДВОИТ СЛОВА И ГЕНРИТ ФИГ ЗНАЕТ КАКИЕ СЛОВА...


program Z1;
uses CRT;
const
m=10;
type
myword=string[5];
var
massiv:array[1..m] of myword;
t,z:string[3];
ii,i1,ii1:1..m;
i:integer;
q:myword;

function genword:Myword;
var
i:integer;
tstr:myword;

begin

tstr:='';

for i:= 1 to 5 do
tstr:=tstr+chr(random(4)+65);
genword:=tstr;
end;
begin
randomize;

for i:=1 to m do
massiv[ i ]:=genword;

for i:=1 to m do
begin
write(massiv[ i ]:6);
end;
writeln;
{PROGA}
for i:=1 to m do
begin
t:=copy(massiv[ i ],1,3);
i1:=i;
for ii:=1 to m do
begin
if ii<>i then
z:=copy(massiv[ii],3,3);
ii1:=ii;
if t=Z then
begin
writeln (massiv[ i ],' ',massiv[ii]);
q:=massiv[ii1];
massiv[ii1]:=massiv[i1];
massiv[i1]:=q;
end;
end;
end;
for i:=1 to m do
begin
write(massiv[ i ]:6);
end;
readln;
end.


Задача 2!
Тема:
Работа с внешними файлами

Условие:
Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения):
а) Выбрать самого младшего студента.
б) Выбрать самого старшего.
в) упорядочить по возрасту.

Вот мой ответ:
НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ

program Z4;
type
info=record
fam,im,ot:string[15];
dr,mr,gr:integer;
end;
Spisok=file of info;
var
inf:info;
spi:spisok;
i,msd,msm,msg,ssd,ssm,ssg,k:integer;
begin
writeln('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв㤥­в®ў:');
readln(k);
assign(spi,'g:\stud.dat');
rewrite(spi);
for i:=1 to k do
begin
with inf do
begin
writeln('Ќ®¬Ґа бв㤥­в : ',i,' ”®а¬ в § ЇЁбЁ: ” ¬Ё«Ёп, ?¬п, ЋвзҐбвў®, „Ґ­м! ЊҐбпж! ѓ®¤! ஦¤Ґ­Ёп');
readln(fam);
readln(im);
readln(ot);
readln(dr);
readln(mr);
readln(gr);
end;
write(spi,inf);
end;
close(spi);
reset(spi);
{‘ ¬л© ¬« ¤иЁ©}
ssd:=0;
ssm:=0;
ssg:=0;
for i:=1 to k do
begin
read(spi,inf);
if (inf.gr>ssg) then
begin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
if (inf.gr=ssg) then
begin
if (inf.mr>ssm) then
begin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
if (inf.mr=ssm) then
begin
if (inf.dr>ssd) then
begin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
end;
end;
end;
close(spi);
reset(spi);

{‘ ¬л© бв аиЁ©}
msd:=ssd;
msm:=ssm;
msg:=ssg;
for i:=1 to k do
begin
read(spi,inf);
if (inf.gr<msg) then
begin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
end;
if (inf.gr=msg) then
begin
if (inf.mr<msm) then
begin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
end;
if (inf.mr=msm) then
begin
if (inf.dr<msd) then
begin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
writeln('=! ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
end;
end;
end;
close(spi);
reset(spi);
{Џ®бв஥­ЁҐ бЇЁбЄ }
for i:=1 to k do
begin
read(spi,inf);
if (inf.gr<ssg) then
begin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
if (inf.gr=ssg) then
begin
if (inf.mr<ssm) then
begin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
if (inf.mr=ssm) then
begin
if (inf.dr<ssd) then
begin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
end;
end;
end;
close(spi);
reset(spi);
{+1}
for i:=1 to k do
begin
read(spi,inf);
if (ssd=inf.dr) and (ssm=inf.mr) and (ssg=inf.gr) then writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
close(spi);
reset(spi);
{‘ЇЁб®Є Ё +1 ўлў®¤Ёв в®«мЄ® ўҐбм ўўҐ¤с­­л© бЇЁб®Є... ЉЂЉ ”ЏЋђџ„Ћ—?’њ ЏЋ ‚Ћ‡ђЂ‘’”???}
{‚лў®¤ १г«мв в }
for i:=1 to k do
begin
read(spi,inf);
if (ssd=inf.dr) and (ssm=inf.mr) and (ssg=inf.gr) then writeln('Њ« ¤иЁ© бв㤥­в= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
if (msd=inf.dr) and (msm=inf.mr) and (msg=inf.gr) then writeln('‘в аиЁ© бв㤥­в= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
close(spi);
readln;
end.



Задача 3!
Тема:
Использование переменных динамического типа

Условие:

1. Создать однонаправленный список, состоящий из элементов, в качестве дынных которых используются записи из задачи 2
2. Вывести на экран данные динамического списка на экран
3. Дополнить список в начале и в конце...
4. Удалить элемент:
а) первый в списке
б) последний в списке
в) с заданным номером
г) с заданным ключём
5. Поменять местами элементы:
а) с заданными номерами;
б) с заданными ключами.

Вот мой ответ:
ХЗ

Автор: DCRM 28.11.2006 2:14

Интересно тут помогают... вот допёр как делать 3-ю задачу... smile.gif (удалил из списка и прецифровал номера задач)

Автор: klem4 28.11.2006 2:19

Помогают, только не стоит наверное так много задач кидать в одну тему + название твоей темы явно нарушает правила форума, советую их прочитать.

Цитата
В последовательности из 10 5ти буквенных слов найти и поменять местами пару слов, у которых 1е три буквы совпадают с тремя последними буквами другого...


abcde = qweabc

или

abcde = qwecba

?

Автор: DCRM 28.11.2006 2:56

Тему подправил и как только задачу пойму и исправлю, сразу удаляю) было 5 задач))) останется 2 задачи, щас 2я и 3я, ибо они связаны условием...

надо так: abcde = qeabc smile.gif

Автор: Archon 28.11.2006 4:35

По Задаче 1:

1. Очевидно, этот код нужно выделить отдельным блоком:

 if ii<>i then
begin <= вот
z:=copy(massiv[ii],3,3);
ii1:=ii;
if t=Z then
begin
writeln (massiv[i],' ',massiv[ii]);
q:=massiv[ii1];
massiv[ii1]:=massiv[i1];
massiv[i1]:=q;
end;
end; <= и вот


2. Предположим в наборе слов встретились: Massiv[4] = 'abcqwe' и Massiv[8] = 'rtyabc'. Что будет делать программа, когда дойдёт до Massiv[4]? Поменяет его с Massiv[8]. После чего продолжит перебирать слова, дойдёт до Massiv[8] и найдёт там 'abcqwe'... и снова поменяет его с Massiv[4]...
Что делать? Ну, например сформировать массив идентичный данному, тогда можно будет Совпадения искать в первом, а местами слова менять во втором. Или запоминать все пары слов, а менять уже после проверок.

3. А если исходные данные такие:
...
Massiv[4] = 'abcqwe'
...
Massiv[8] = 'rtyabc'
Massiv[9] = 'uioabc'
...
Что получится?
Massiv[4] <=> Massiv[8] <- это правильная замена
Massiv[4] <=> Massiv[9] <- это потому что твоя программа не прекращает выполнение цикла если находит больше 1 совпадения
Massiv[8] <=> Massiv[4] <- эту проблему я описал в пункте 2
Massiv[8] <=> Massiv[9] <- здесь тоже второе совпадение
Что делать? А вообще не слишком понятно, как должна вести себя программа если совпадений несколько. Пояснишь?

Автор: volvo 28.11.2006 5:59

 ! 
Цитата(Правила Раздела)
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
Done...
volvo