• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите с тремя задачами на языке Pascal

  • Автор темы Автор темы Chelios
  • Дата начала Дата начала

Chelios

Ученик
Регистрация
8 Ноя 2010
Сообщения
5
Реакции
0
Баллы
0
Помогите с тремя задачами на языке Pascal

Здравствуйте!
Прошу помощи в реализации 3х задач на языке Pascal.

1)Даны два файла f1 и f2. Создать файл f3, в котором вставлен текст f2 после предпоследней записи f1.


2)Дано натуральное N<=100. Записать это число русскими словами. (Например: двадцать один, девяносто три).


3)Число оканчивается на 2. Если двойку перенести в начало, число удвоится. Найти это число.
 
1)Даны два файла f1 и f2. Создать файл f3, в котором вставлен текст f2 после предпоследней записи f1.
Если под "записью" понимается строка, то так:
Код:
VAR
 S,S1:String;
 f1,f2,f3:TEXT;
BEGIN
 Assign(f1,'D:\t1.txt');
 ReSet(f1);
 Assign(f3,'D:\t3.txt');
 ReWrite(f3);
 Repeat
  ReadLn(f1,S);
  If (not EoF(f1)) then
   WriteLn(f3,S)
  else
   begin
    Assign(f2,'D:\t2.txt');
    ReSet(f2);
    Repeat
     ReadLn(f2,S1);
     WriteLn(f3,S1);
    Until EoF(f2);
    Close(f2);
    WriteLn(f3,S);
   end;
 Until EoF(f1);
 Close(f1);
 Close(f3);
END.
Здесь файлы расположены в корневом каталоге диска D:. Поправьте, если нужно.
 
А если под предпоследней записью подрузамевается слово?
Допустим в 1 файле текст (Как зовут?)
а во 2 файле текст (меня)
Нужно получить ( Как меня зовут?)
 
Тогда "Как" и "зовут?" - две разные строки в первом файле, "меня" - строка во втором файле
 
В этой задаче 3)Число оканчивается на 2. Если двойку перенести в начало, число удвоится. Найти это число. известно что число равно 105263157894736842 , последовательность нахождения этого числа

Х2 * 2 = 2Х
Дальше подбор.
Х2 *2 = 2Х4
Х42 *2 = 2Х84
Х842 *2 = 2Х684
Х6842 *2 = 2Х3684
Х36842 *2 = 2Х73684
Х736842 *2 = 2Х473684
Х4736842 *2 = 2Х9473684
Х94736842 *2 = 2Х89473684
Х894736842 *2 = 2Х789473684
Х7894736842 *2 = 2Х5789473684
Х57894736842 *2 = 2Х15789473684
Х157894736842 *2 = 2Х315789473684
Х3157894736842 *2 = 2Х6315789473684
Х63157894736842 *2 = 2Х26315789473684
Х263157894736842 *2 = 2Х526315789473684
Х5263157894736842 *2 = 2Х0526315789473684
Х05263157894736842 *2 = 2Х10526315789473684*
10526315789473684 *2 = 210526315789473684

Прошу помочь с реализацией , заранее огромное спасибо.
 
А если под предпоследней записью подрузамевается слово?
Допустим в 1 файле текст (Как зовут?)
а во 2 файле текст (меня)
Нужно получить ( Как меня зовут?)
Тогда - существенно сложнее. Требуется расчленение последней строки. Подумаю.
С остальными задачами - не торопите. Сделаю, если кто-нибудь не опередит. Просто там возни много, а вот времени у меня мало.
 
А если под предпоследней записью подрузамевается слово?
Допустим в 1 файле текст (Как зовут?)
а во 2 файле текст (меня)
Нужно получить ( Как меня зовут?)
Ладно, вот Вам такой вариант:

Код:
VAR
 S,S1:String;
 f1,f2,f3:TEXT;
 i,Ifix:INTEGER;
BEGIN
 Ifix:=0;
 Assign(f1,'D:\t1.txt');
 ReSet(f1);
 Assign(f3,'D:\t3.txt');
 ReWrite(f3);
 Repeat
  ReadLn(f1,S);
  If (not EoF(f1)) then
   WriteLn(f3,S)
  else
   begin
    For i:=1 to Length(S) do
     If S[i]=' ' then Ifix:=i;
    For i:=1 to Ifix do
     Write(f3,S[i]);
    WriteLn(f3);
    Assign(f2,'D:\t2.txt');
    ReSet(f2);
    Repeat
     ReadLn(f2,S1);
     WriteLn(f3,S1);
    Until EoF(f2);
    Close(f2);
    For i:=Ifix+1 to Length(S) do
     Write(f3,S[i]);
    WriteLn(f3);
   end;
 Until EoF(f1);
 Close(f1);
 Close(f3);
END.
 
2)Дано натуральное N<=100. Записать это число русскими словами. (Например: двадцать один, девяносто три).
Код:
CONST
 Names1:ARRAY[1..9] of STRING = ('один',
                                 'два',
                                 'три',
                                 'четыре',
                                 'пять',
                                 'шесть',
                                 'семь',
                                 'восемь',
                                 'девять');

 Names2:ARRAY[1..10] of STRING = ('десять',
                                  'одиннадцать',
                                  'двенадцать',
                                  'тринадцать',
                                  'четырнадцать',
                                  'пятнадцать',
                                  'шестнадцать',
                                  'семнадцать',
                                  'восемнадцать',
                                  'девятнадцать');

 Names3:ARRAY[1..8] of STRING = ('двадцать',
                                 'тридцать',
                                 'сорок',
                                 'пятьдесят',
                                 'шестьдесят',
                                 'семьдесят',
                                 'восемьдесят',
                                 'девяносто');

VAR
 N:BYTE;
BEGIN
 Write('N= ');
 ReadLn(N);
 If N=0 then WriteLn('ноль') else
 If N=100 then WriteLn('сто') else
 If N<10 then WriteLn(Names1[N]) else
 If N<20 then WriteLn(Names2[N-9]) else
 If (N mod 10)=0 then WriteLn(Names3[(N div 10)-1]) else
 WriteLn(Names3[(N div 10)-1]+' '+Names1[N mod 10]);
 ReadLn;
END.
 
Благодарю за помощь ! Буду ждать дальнейших вариантов решения.
 
3)Число оканчивается на 2. Если двойку перенести в начало, число удвоится. Найти это число.
Код:
VAR
 A1,A2:ARRAY[1..100] of BYTE;
 N:BYTE;
 i:Integer;
BEGIN
 A1[1]:=2;
 A2[1]:=4;
 N:=1;
 Repeat
  Inc(N);
  A1[N]:=A2[N-1];
  A2[N]:=((A1[N]*2) mod 10)+((A1[N-1]*2) div 10);
 Until (A1[N]=1) and (A2[N]=2);
 For i:=N downto 1 do
  Write(A1[i]);
 WriteLn;
 For i:=N downto 1 do
  Write(A2[i]);
 WriteLn;
 ReadLn;
END.
 
Нуждаюсь в помощи ещё по 2м задачам , прошу помочь идеей решения , и по возможности реализацией . Заранее большое спасибо.

1) Из слов заданного текста составить цепочку слов максимальной длины, в которой каждое последующее слово начинается с буквы, на которую заканчивается предыдущее.

2)Найти самое длинное общее слово двух текстов.
 
Предлагаю такие примерные алгоритмы решения

По первой задаче: есть по крайней мере два пути решения - 1) каждое слово текста обрабатывать как элемент массива, соответственно, массив отсортировать по возрастанию длины и слова с максимальной длиной выстраивать в нужном порядке; 2) во внешний файл вывести по отдельности каждое слово текста, потом его отсортировать и применить алгоритм выстраивания цепочки.

По второй задаче: заводится 2 текстовых массива, каждый заполняется словами из соответствующих текстов, причем параллельно проводится анализ совпадений текущего слова с уже внесенными в массив. Затем массивы последовательно сравниваются и в промежуточную переменную выводится самое длинное из общих слов на каждой итерации сравнения. По окончании сравнения значение промежуточной переменной выводится как результат.
 
Назад
Сверху