Консультация № 185938
01.05.2012, 18:23
183.95 руб.
0 11 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
помогите выполнить вот такие задания на делфи(в консоле):
1)Дан файл f, компоненты которого являются действительными числами. Найти модуль суммы и квадрат компонент файла f.
2)Найти самое длинное общее слово двух заданных предложений.
3)"Порядок" на точках плоскости определили следующим образом: (x,y)<=(u,v), если либо x<u, либо x=u b y<=v. Перечислить точки заданного множества точек на плоскости в соот-ветствии с этим порядком.

Обсуждение

Неизвестный
01.05.2012, 18:26
общий
поясните,пожалуйста, каждую строчку в заданиях
давно
Профессионал
304622
583
01.05.2012, 19:26
общий
01.05.2012, 19:30
а) Файл f - текстовый? Или имеется в виду типизированный двоичный файл f:file of real?

б) Задание 3) совершенно непонятно. Что за "множество точек"? Где оно задано? Или по какому-то правилу?

в) Надо делать на Дельфи с графическим интерфейсом (кнопками, Edit'ами и т.д.)? Или требуется консольная программа с текстовым вводом/выводом? (Или может быть вообще Turbo Pascal?)
Неизвестный
01.05.2012, 21:45
общий
Цитата: Сергей Бендер
а) Файл f - текстовый? Или имеется в виду типизированный двоичный файл f:file of real?


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

на точках плоскости определили следующим образом: (x,y)<=(u,v), если либо x<u, либо x=u b y<=v.


помоему это и есть тот закон по которому задано все!

Цитата: Сергей Бендер
в) Надо делать на Дельфи с графическим интерфейсом (кнопками, Edit'ами и т.д.)? Или требуется консольная программа с текстовым вводом/выводом? (Или может быть вообще Turbo Pascal?)

ну у автора написано
помогите выполнить вот такие задания на делфи(в консоле):

хотя консольное приложение делфи помоему 1 строчкой отличается от консольного в ТП
Неизвестный
01.05.2012, 21:49
общий
по поводу 3го задания думаю, что тут надо как то ограничить плосколсть) ну допустим числом 100.... и уже выдать все возможные варианты на экран....
давно
Профессионал
304622
583
02.05.2012, 19:44
общий
Цитата: 324791
© Цитата: Сергей Бендер
а) Файл f - текстовый? Или имеется в виду типизированный двоичный файл f:file of real?


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


Я тоже так подумал, но надо возможно толкования -- надо, чтобы автор высказался. Молчит что-то.

Цитата: 324791
© Цитата:
на точках плоскости определили следующим образом: (x,y)<=(u,v), если либо x<u, либо x=u b y<=v.


помоему это и есть тот закон по которому задано все!


Это лишь отношение между некоторыми точками. А требуется перечислить какое-то "заданное множество", которое нигде никак не задано.

Цитата: 324791
ну у автора написано
© Цитата:
помогите выполнить вот такие задания на делфи(в консоле):


А-а-а! Ёлки-палки!
давно
Профессионал
304622
583
03.05.2012, 21:52
общий
это ответ
Здравствуйте, Бондаренко Сергей Николаевич!

Поскольку вы не пояснили 3-ю задачу, даю решение только для двух.

[code h=200]program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

const MyFileName='chisla.dat'; // имя файла
n=10;

var f:file of real;
a,sum1,sum2:real;
st1,st2,st3,stmax:string;
i,j,k:integer;

begin
{ TODO -oUser -cConsole Main : Insert code here }

// Создание файла
AssignFile(f,MyFileName);
rewrite(f); // Открытие файла
for i:=1 to n do // пишем десять чисел
begin
a:=10*random; // random -- случайное число от 0 до 1
// 10*random -- от 0 до 10
write(f,a); // число в файл
end;
CloseFile(f);

// Задание 1)
AssignFile(f,MyFileName);
reset(f); // Открытие файла
sum1:=0; // Начальное обнуление сумм
sum2:=0;
while not eof(f) do // Пока НЕ дошли до конца файла
begin
read(f,a); // читаем число
sum1:=sum1+a; // добавляем к сумме
sum2:=sum2+sqr(a); // добавляем к сумме квадратов
end;
sum1:=abs(sum1); // Вычмсляем модуль суммы
writeln('Mudul summy: ',sum1); // Вывод на экран
writeln('Summa kvadratov: ',sum2);

// Задание 2
st1:='odin dva tri chetyre piat'; // Исходные строки
st2:='tridtsat chetyre dvadtsat piat sto';
i:=1; // Начинаем перебирать буквы строки st1 с первой
stmax:=''; // Переменная для результата. Начальное значение -- пустая строка,
// т.е. строка с минимальной возможной длиной
while i<=length(st1) do // Пока не добрались до последней буквы
begin
// Ищем начало очередного слова.
// Признак того, что очередной символ строки -- буква
// это то, что она по ASCII-коду не меньше, чем первая буква алфавита,
// и не больше, чем послендняя.
while (i<=length(st1)) and not ((st1[i]>='a') and (st1[i]<='z')) do
// пока не вышли за конец строки и текущий символ -- не буква
inc(i); // увеличиваем индекс
// Ищем конец слова
j:=i;
while (j<=length(st1)) and (st1[j]>='a') and (st1[j]<='z') do
// пока не вышли за конец строки и текущий символ -- буква
inc(j); // увеличиваем индекс
if j>i // если конец больше чем начало, т.е. слово найдено
then begin
st3:=copy(st1,i,j-i); // командой copy вынимаем слово с i-й позиции
k:=pos(st3,st2); // командой pos ищем слово другой строке
if (k<>0) and (length(st3)>length(stmax))
// если результата pos ненулевой, т.е. слово найдено
// и если его длина больше, чем длина ранее найденных слов
then stmax:=st3; // запоминаем его
end;
i:=j; // сдвигаем текущую позицию в st1 на конец найденного слова
end;
writeln('Samoe dlinnoe obshee slovo: ',stmax);
readln;
end.[/code]
Неизвестный
04.05.2012, 16:39
общий
Адресаты:
Как мне дали задание,так я вам его и написал....сделайте, пожалуйста, 3 задание,строчно надо(((И вы бы не могли те два задания в разных файлах сделать(как две отдельные полноценные программы)
давно
Профессионал
304622
583
04.05.2012, 16:59
общий
Могу предположить, что речь по сути идёт о сортировке. Т.е. задан набор из пар чисел их надо расположить в соответсвии с заданным отношением порядка. Есть два варианта:

а) переставить их каким-либо из алгоритмов сортировки (прямой выбор, пузырьковый и др.), а потом выводить готовую последовательность. (Изучали ли вы сортировку?)

б) отыскивать минимальную по "порядку" точку, сразу выводить, помечать, а потом снова искать минимальную среди оставшихся.

Который из вариантов препочитаете?

По исходным данным:

в) точки должны быть заданы во отдельном файле?

г) если да, то файл -- текстовый?

Цитата: 369940
строчно надо


Сегодня вечером? Завтра?
Неизвестный
04.05.2012, 22:40
общий
до воскресенья надо((((как Вы считаете нужным,так и сделайте.По поводу исходных данных, я думаю,что лучше самому задавать
давно
Профессионал
304622
583
05.05.2012, 11:36
общий
Насчёт разделения программы в ответе
Первая
[code h=200]
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

const MyFileName='chisla.dat'; // имя файла
n=10;

var f:file of real;
a,sum1,sum2:real;
i:integer;

begin
{ TODO -oUser -cConsole Main : Insert code here }

// Создание файла
AssignFile(f,MyFileName);
rewrite(f); // Открытие файла
for i:=1 to n do // пишем десять чисел
begin
a:=10*random; // random -- случайное число от 0 до 1
// 10*random -- от 0 до 10
write(f,a); // число в файл
end;
CloseFile(f);

// Задание 1)
AssignFile(f,MyFileName);
reset(f); // Открытие файла
sum1:=0; // Начальное обнуление сумм
sum2:=0;
while not eof(f) do // Пока НЕ дошли до конца файла
begin
read(f,a); // читаем число
sum1:=sum1+a; // добавляем к сумме
sum2:=sum2+sqr(a); // добавляем к сумме квадратов
end;
sum1:=abs(sum1); // Вычмсляем модуль суммы
writeln('Mudul summy: ',sum1); // Вывод на экран
writeln('Summa kvadratov: ',sum2);

end.[/code]

Вторая
[code h=200]
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

const MyFileName='chisla.dat'; // имя файла
n=10;

var st1,st2,st3,stmax:string;
i,j,k:integer;

begin
{ TODO -oUser -cConsole Main : Insert code here }

// Задание 2
st1:='odin dva tri chetyre piat'; // Исходные строки
st2:='tridtsat chetyre dvadtsat piat sto';
i:=1; // Начинаем перебирать буквы строки st1 с первой
stmax:=''; // Переменная для результата. Начальное значение -- пустая строка,
// т.е. строка с минимальной возможной длиной
while i<=length(st1) do // Пока не добрались до последней буквы
begin
// Ищем начало очередного слова.
// Признак того, что очередной символ строки -- буква
// это то, что она по ASCII-коду не меньше, чем первая буква алфавита,
// и не больше, чем послендняя.
while (i<=length(st1)) and not ((st1[i]>='a') and (st1[i]<='z')) do
// пока не вышли за конец строки и текущий символ -- не буква
inc(i); // увеличиваем индекс
// Ищем конец слова
j:=i;
while (j<=length(st1)) and (st1[j]>='a') and (st1[j]<='z') do
// пока не вышли за конец строки и текущий символ -- буква
inc(j); // увеличиваем индекс
if j>i // если конец больше чем начало, т.е. слово найдено
then begin
st3:=copy(st1,i,j-i); // командой copy вынимаем слово с i-й позиции
k:=pos(st3,st2); // командой pos ищем слово другой строке
if (k<>0) and (length(st3)>length(stmax))
// если результата pos ненулевой, т.е. слово найдено
// и если его длина больше, чем длина ранее найденных слов
then stmax:=st3; // запоминаем его
end;
i:=j; // сдвигаем текущую позицию в st1 на конец найденного слова
end;
writeln('Samoe dlinnoe obshee slovo: ',stmax);
readln;
end.[/code]

Сейчас третью напишу.
давно
Профессионал
304622
583
05.05.2012, 12:03
общий
Задание 3. Что неясно -- пишите-спрашивайте.

[code h=200]program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

const n=20;

type point=record
x,y:integer;
b:boolean;
end;

function Menshe(p1,p2:point):boolean;
begin
if (p1.x<p2.x) or ( (p1.x=p2.x) and (p1.y<=p2.y) )
then Menshe:=true
else Menshe:=false;
end;

var a:array[1..n] of point;
i,iMin,k:integer;

begin
{ TODO -oUser -cConsole Main : Insert code here }
for i:=1 to n do
begin
a[i].x:=random(10);
a[i].y:=random(10);
a[i].b:=true;
end;

for k:=1 to n do
begin
iMin:=0;
for i:=1 to n do
if a[i].b
then begin
if iMin=0 then iMin:=i;
if Menshe(a[i],a[iMin])
then iMin:=i;
end;
a[iMin].b:=false;
writeln('Tochka N',iMin,': (',a[iMin].x,',',a[iMin].y,')');
end;
readln;
end.[/code]
Форма ответа