Автор Тема: Вспоминаем Turbo Pascal и решаем задачи на нём  (Прочитано 49371 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #210 : 19 Ноябрь 2011, 15:54:42 »
gepar, Да вот такое дали.. это кстати только А часть, Б часть ещё более странное, там вообще заполняется по спирали... но это уже другой вопрос.

Пишу задание:

Разработать программу, которая в двумерном массиве заполняет указанные элементы значениями 1, 2, 3, 4, 5,.... по вертикали. В программе нельзя использовать операторы присвоения, для заполнения массива, которые не находятся в теле цикла.
И соответственно картинка:
{ . . 1 . . . . . . . }
{ . . 2 7 . . . . . . }
{ . . 3 813 . . . . . }
{ . . 4 91419 . . . . }
{ . . 510152025 . . . }
{ . . 611162126 . . . }
{ . . .12172227 . . . }
{ . . . .182328 . . . }
{ . . . . .2429 . . . }
{ . . . . . .30 . . . }


Ну и нам дали другой вариант, для примера, я его уже выкладывал на http://ifolder.ru/27046988
« Последнее редактирование: 19 Ноябрь 2011, 15:57:51 от igarexa »

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #211 : 19 Ноябрь 2011, 16:42:06 »
Мне такое решение нравится:
  for i := 0 to 29 do
  begin
    y := i div 6 + i mod 6;
    x := i div 6 + 2;
    arr[y, x] := i + 1;
  end;

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #212 : 19 Ноябрь 2011, 17:07:52 »
HoRRoR, Спасибо, попробую разобраться с этим :) хотя пока не особо ясно

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #213 : 19 Ноябрь 2011, 17:33:33 »
Набрал ради теста вариант хоррора:

Результат работы:

Работает, можно пользовать. :3

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #214 : 19 Ноябрь 2011, 17:48:02 »
Цитата: igarexa
Разработать программу, которая в двумерном массиве заполняет указанные элементы значениями 1, 2, 3, 4, 5,.... по вертикали. В программе нельзя использовать операторы присвоения, для заполнения массива, которые не находятся в теле цикла.
Картинка не соответствует заданию так как три точки подразумевают дальнейшую прогрессию, а не только цифру 6, скорее всего они подразумевают 1,2,3,4,5,...,n где n - количество строк. Также в задании не указано что значения должны заполнятся именно с 3 строки матрицы что подразумевает заполнение с начала матрицы... Но так как сдавать это не мне то можешь воспользоваться и вариантом HoRRoR'а  ;)

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #215 : 19 Ноябрь 2011, 18:45:15 »
gepar, ну даже не знаю, я с листа переписывал, если что, проблемы профессора :)
HardWareMan, Спасибо ;) так стало понятнее :) Выводит то что как раз хочу видеть, щас заточу под пример который нам дали, для маскировки  :D Надеюсь со вторым вариантом уже разберусь.

HoRRoR,HardWareMan,gepar, Благодарю за помощь и отзывчивость!  :)

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #216 : 19 Ноябрь 2011, 19:21:02 »
Кстати, чтобы не писать "if xxx < 10 then write(' ', xxx)" можно писать "write(xxx:2)". Поправьте, если не во всех паскалях так.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #217 : 19 Ноябрь 2011, 22:42:35 »
Кстати, чтобы не писать "if xxx < 10 then write(' ', xxx)" можно писать "write(xxx:2)". Поправьте, если не во всех паскалях так.
Ах да, уже забывать начинаю. Все верно.

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #218 : 19 Ноябрь 2011, 23:33:51 »
HoRRoR, да спасибо, так и сделал :) как раз в примере задания так и надо было сделать. По идее программа готова, щас допишу протокол с блок-схемой, и задание выполнено :)

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #219 : 20 Ноябрь 2011, 00:55:38 »
Ах да, уже забывать начинаю. Все верно.
Я вот вспоминал, как массивы объявлять :lol:
Хотя несколько лет на Delphi кодил...

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #220 : 19 Февраль 2012, 21:57:34 »
Это снова я..  :-\
Ребята, тут написал программу с обработкой файлов, но столкнулся с 2 проблемами.
Цель: В программу ввести вводный файл, сделать его обработку, и результат вывести в другой текстовой файл. Если в вводном файле есть слова "begin" или "BEGIN", то перед данной строкой в выводном файле сделать 2 пустые строки.

С файлами я разобрался, и поиском слов "бегин" тоже, но, по неизвестной причине, все строчки, которые не имеют слов "бегин", не выводятся в выводной файл. а выводится лишь те, где они имеются.
И ещё один момент. Я могу дописать текст, перед словами "бегин", но не получается пропускать строки.

Выложу программу для наглядности.

Ну а вот и сам код:

Оффлайн koral

  • Пользователь
  • Сообщений: 43
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #221 : 20 Февраль 2012, 00:07:25 »
Цитата
по неизвестной причине, все строчки, которые не имеют слов "бегин", не выводятся в выводной файл
Причина известна: компиляторов с телепатическими возможностями еще не изобрели. Вот нет в коде программы вывода этих строчек в выходной файл, они и не выводятся.

Цитата
Я могу дописать текст, перед словами "бегин", но не получается пропускать строки.
Ну можно так

Writeln(OutFile);
Writeln(OutFile);
Writeln(OutFile, Outputstring);

или

Write(OutFile, #13#10#13#10);
Writeln(OutFile, Outputstring);

или

Writeln(OutFile,#13#10#13#10, Outputstring);
И, кстати, зачем два раза повторять один и тот же кусок кода? Написать один if религия не позволяет?

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #222 : 20 Февраль 2012, 12:59:22 »
И, кстати, зачем два раза повторять один и тот же кусок кода? Написать один if религия не позволяет?
А чтобы не указывать все варианты, перед этим сделать UpCase и тогда одним условием будем отлавливать гламурное BeGiN. :3

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #223 : 21 Февраль 2012, 01:34:10 »
koral, Огромное Спасибо за помощь :) Пошаманив, провозившись, испробовав вариаций 40 кода  :blush: , наконец догнал как делать :) Конечно, были проблемы, и уже начал писать новую просьбу о помощи, но что то меня осинило))

Если делал Writeln(OutFile,#13#10#13#10, Outputstring); То в выводном файле, 2 раза писались строки со словами "бегин". И делались 3 пустые строки.

Вообщем, вот часть кода с обработкой файла:
  while (not EOF (InpFile)) do
  begin
   readln(InpFile, InputString);
  OutputString:=InputString;
    If Pos('BEGIN',OutputString) >0 then
   begin
   writeln(Outfile, #13#10);
   end;
   If Pos('begin',OutputString) >0 then
   begin
   writeln(Outfile, #13#10);
   end;
   writeln(Outfile,OutputString);
  end;

Цитата
И, кстати, зачем два раза повторять один и тот же кусок кода? Написать один if религия не позволяет?

Скорее не религия, а знания не позволяют :)
Пытался сделать с If ... or ... then , но выводило ошибку, я так понял, что то вроде компилятор ожидал тип булеан, а было лонгинт.
Ну думаю не столь важно :)

Оффлайн CrazyMax

  • Пользователь
  • Сообщений: 922
  • Пол: Мужской
  • DeSmuME Team
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #224 : 21 Февраль 2012, 02:04:21 »
igarexa, можно так (если правильно помню... давно Паскаля не видел)

while (not EOF (InpFile)) do
  begin
   readln(InpFile, InputString);
  OutputString:=InputString;
    If Pos('BEGIN',UpCase(OutputString)) >0 then
   begin
   writeln(Outfile, #13#10);
   end;
   writeln(Outfile,OutputString);
  end;

HardWareMan тоже на это указывал.

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #225 : 23 Апрель 2012, 00:29:07 »
Снова всем привет) И снова это я)

Я делаю програмку для обработки текста (создание файла, осмотр содержания файла и обьеденение 2х файлов (пока не дошёл)), и столкнулся с очередной проблемой. Ребят, помогите пожалуйста разобраться с ошибкой.
Вот основная программа:
program lab4;
uses filework;
var Tx, filename :integer;
label CASEPOINT;
    begin
CASEPOINT:
    writeln(' menu');
    writeln('1 - sozdatj novij fajl');
    writeln('2 - osmotretj fajl');
    writeln('3 - objedenitj 2 fajlaà');
    writeln('4 - zakon4itj rabotu ');
    readln (Oper);
    case (Oper) of
  1: begin
       FCreate(Tx, filename);
     end;

  2: begin
       FRead(Tx, filename);
       end;

 { 3: begin
       FMergin
     end;   }

  4: begin
       exit;
     end;
 end;

  goto CASEPOINT;


    end.

И вот модуль к ней:
unit filework;
interface
procedure Fcreate( var Tx: Text; FileName: String; s: String);
procedure FRead( var f :text; s:string);

implementation
uses CRT;
procedure FCreate;
Var
 Tx : Text;
 FileName : String;
 s : String;
 i,n : Integer;
Begin
 Writeln('vvedi nazvanie fajla');
 Readln (FileName);
 Assign(Tx,FileName);
 Rewrite (Tx);
 Writeln (vvedi koli4estvo strok');
 Readln(n);
 Writeln ('vvedi stroki');
 For i:=1 to n do
 Begin
  Readln (s);
  Writeln(Tx,s);
 End;
 Close(Tx);
End;

procedure Fread;
Var
   f : text;
   S : string;

begin
    clrscr;
    [b]assign(f, filename);[/b]
    reset(f);
    write(' ');
    while not Eof(f) do
        begin
           readln(f, S);
           write(S,' ');
        end;

    close(f);
    readln
end.

Есть подозрения, что проблем с подключением модуля, и с процедурами в нём намного больше, чем показывает компилятор..
Но вот собственно что мне не даёт покоя: Identifier not found "filename"
В коде я выделил это место. В гугле не очень много об этом написано, но вычитал примерно такое: "проблема бывает в паскале, используй делфи".
Помогите пожалуйтса с этим разобарться....


Оффлайн Yoti

  • Пользователь
  • Сообщений: 4470
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #226 : 23 Апрель 2012, 04:14:39 »
filename :integer;Я аж подавился...
 - Тебя как зовут?
 - 15



Ещё и goto/label на каждом шагу...

FCreate(Tx, filename);procedure Fcreate( var Tx: Text; FileName: String; s: String);
« Последнее редактирование: 23 Апрель 2012, 04:19:29 от Yoti »

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #227 : 23 Апрель 2012, 14:23:51 »
Ещё и goto/label на каждом шагу...
Ну, допустим, не на каждом. Этот лэйбл заменяется на банальный while true do, в 4 пункте кейса обязательно вставить break (в случае использования вечного цикла) или просто halt в текущем варианте. В остальном, на ошибки указано.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4470
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #228 : 23 Апрель 2012, 16:24:11 »
В остальном, на ошибки указано.
Наверное, мне всё же стоило вот так процитировать:
Цитата: igarexa
program lab4;
uses filework;
var Tx, filename :integer;
Цитата: igarexa
procedure FCreate;
Var
 Tx : Text;
 FileName : String;

Подзабываю Pascal, но в Delphi бы было
Tx: TextFile;
filename: String;
« Последнее редактирование: 23 Апрель 2012, 16:26:52 от Yoti »

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #229 : 23 Апрель 2012, 19:31:12 »
Подзабываю Pascal, но в Delphi бы было
Tx: TextFile;
filename: String;
Так точно, часть юнита System. Но под Паскалем, тип тестового файла будет text в составе юнита dos.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4470
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #230 : 24 Апрель 2012, 04:57:56 »
Цитата: HardWareMan
Но под Паскалем, тип тестового файла будет text в составе юнита dos.
Ясненько, спасибо. Просто не вижу смысла делать что-либо в Паскале, когда есть возможность написать cli-приложение в Дельфи.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #231 : 24 Апрель 2012, 17:26:10 »
Ясненько, спасибо. Просто не вижу смысла делать что-либо в Паскале, когда есть возможность написать cli-приложение в Дельфи.
У Дельфи в этом режиме только одно приемущество: 32битный код. В остальном, зачем стрелять из пушки по воробьям?

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4470
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #232 : 24 Апрель 2012, 19:19:47 »
Цитата: HardWareMan
В остальном, зачем стрелять из пушки по воробьям?
Зачем ставить две софтины, когда можно только одну?

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #233 : 25 Апрель 2012, 10:26:38 »
Зачем ставить две софтины, когда можно только одну?
А кто сказал, что TP7/BP7 устанавливается? ;)

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4470
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #234 : 27 Апрель 2012, 13:45:42 »
Цитата: HardWareMan
А кто сказал, что TP7/BP7 устанавливается?
Принято =)
Цитата: Yoti
Зачем хранить две софтины, когда можно только одну?

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #235 : 27 Апрель 2012, 22:20:15 »
Yoti,HardWareMan, Спасибо что указали где ошибки  :) Пришлось повозиться с этой програмкой...  Правда выяснилось, что надо использовать исходник, что мне дали, он более сложный, чем моя скромная програмка... вобщем попробую сделать ))

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #236 : 28 Апрель 2012, 06:42:22 »
Зачем хранить две софтины, когда можно только одну?
TP7/BP7 выгодно отличается компактным размером, не?

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4470
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #237 : 29 Апрель 2012, 16:20:14 »
HardWareMan,
в любом случае 2 софтины весят больше одной. А копейка рубль бережёт ;)

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7543
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #238 : 29 Апрель 2012, 19:16:33 »
Твоя мотивация и так понятна, к чему этот спор?

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4470
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #239 : 30 Апрель 2012, 00:20:54 »
HardWareMan,
не позиционировал как спор =)