Телескопы покупают здесь


A A A A Автор Тема: Изучаю Паскаль. Присоединяйтесь.  (Прочитано 22953 раз)

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

Оффлайн byFelix

  • Новичок
  • *
  • Сообщений: 23
  • Благодарностей: 2
  • Мне нравится этот форум!
    • Сообщения от byFelix
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #260 : 10 Фев 2023 [00:15:45] »
Так можно сделать, что бы нормально всё работало?
Не видя Ваш код, будем только ванговать. И так понял, что у Вас Линукс.
Arsenal 150/750, Arsenal 130/900

Оффлайн CyberManiac

  • *****
  • Сообщений: 8 489
  • Благодарностей: 477
  • Я ♥ オリオン!
    • Сообщения от CyberManiac
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #261 : 10 Фев 2023 [10:50:45] »
Так можно сделать, что бы нормально всё работало?
Попробуйте печатать не сам символ, а его код (Ord). С вероятностью 99% некая ОС-специфичная хрень, связанная с использованием кодировки UTF-8, в которой заранее невозможно предсказать, сколько байт занимает символ.
Трэш, угар и астрономия!
沖縄最高

Оффлайн АурипигментАвтор темы

  • *****
  • Сообщений: 5 587
  • Благодарностей: 170
  • Ми пацаки с планеты Земля. А Ви кто?
    • Сообщения от Аурипигмент
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #262 : 10 Фев 2023 [11:26:23] »
Не видя Ваш код, будем только ванговать. И так понял, что у Вас Линукс.
У меня Линукс, об этом я уже писал выше. :-[
Да какой там код: два оператора-- один определяет длину введённой строки, а другая через цикл печатает каждый символ с новой строки.
program P_18_1;

var S : string;
C : char;
k, L : integer;

BEGIN
repeat
write('Введите строку: '); readln(S);
L:= Length(S); { определяем длину строки }
for k:=1 to L do begin
C:= S[k]; { выбираем очередной символ }
writeln(C); { и печатаем его в отдельной строке }
end;
until L=0; { L=0, если строка пуста }
END.
Попробуйте печатать не сам символ, а его код (Ord).
Это задание такое, что бы печатать отдельный символ из строковой переменной.
Компилятор сам нормально переваривает кириллицу и Geany нормально работает с русским текстом, т.к. полностью русифицирована.
Free Pascal в упор не хочет вводить русские буквы. При этом автор сделал вид, что работает в нём, но я вижу, что текст набран чём-то другом. :(
Нам тайны не раскрытые раскрыть пора,
Лежат без пользы тайны, как в копилке.
Мы тайны эти с корнем вырвем у ядра,
На волю пустим Джина из бутылки.

Оффлайн byFelix

  • Новичок
  • *
  • Сообщений: 23
  • Благодарностей: 2
  • Мне нравится этот форум!
    • Сообщения от byFelix
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #263 : 10 Фев 2023 [12:12:09] »
Char не может содержать символы не латинского алфавита. Один символ кириллицы содержит занимает 2 байта, а под переменную типа Char отводится всего 1. Попробуйте использовать для кириллицы тип TUTF8Char описанный в модуле LCLType.
Arsenal 150/750, Arsenal 130/900

Оффлайн GraY25

  • *****
  • Сообщений: 5 954
  • Благодарностей: 1014
  • Дифракционный_беспредел [____ Сергей Иванов ____]
    • Сообщения от GraY25
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #264 : 10 Фев 2023 [13:36:43] »
program P_18_1;

var S : string;
C : char;
k, L : integer;

BEGIN
repeat
write('Введите строку: '); readln(S);
L:= Length(S); { определяем длину строки }
for k:=1 to L do begin
C:= S[k]; { выбираем очередной символ }
writeln(C); { и печатаем его в отдельной строке }
end;
until L=0; { L=0, если строка пуста }
END.

Для примера та же программа на Питоне:  ;D

for i in input("Введите строку: "):
    print(i)

Работает даже с эмоджиками)

Введите строку: 🤪🤪
🤪
🤪

PS Если надо чтобы повторялось бесконечно до ввода пустой строки, то на 1 строчку больше

while s := input("Введите строку: "):
    for i in s:
        print(i)
« Последнее редактирование: 10 Фев 2023 [14:15:24] от GraY25 »
• С14 HD [0.96] + HS F/1.9 @ CGE Pro
• С8 HD   [0.93] + HS F/2.1 @ ZWO AM5
• TS 152/900, WO 98FLT
Sun Hα  MoonAstroSeeing Bot

Оффлайн Павел Васильев

  • *****
  • Сообщений: 561
  • Благодарностей: 20
    • Сообщения от Павел Васильев
    • Программные компоненты астромоделирования
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #265 : 10 Фев 2023 [16:09:15] »
Да какой там код: два оператора-- один определяет длину введённой строки, а другая через цикл печатает каждый символ с новой строки.
Да не тратьте вы время на изучение работы readln/writeln, не помню когда я к ним напрямую обращался лет сто назад. Вы что, собираетесь в какой-то консольной программе считывать введённую строку и отправлять на печать?   Если надо распечатать текст, то можно прямо из окна ввода TEdit, Text или Caption любого компонента распечатать, а для больших текстов из мемо поля, например, подключив  в библиотеке VCL модуль Vcl.Printers.Printer с проверками и установками размера вот примерно таким образом из мемо поля, с загрузкой текстового файла (но можно и в программе набивать конечно) -

uses
  Vcl.Printers;

procedure TForm1.Button1Click(Sender: TObject);
var
  I, X, Y: Integer;
  Memo1 : TMemo;
  r: TRect;
begin
  Memo1 := TMemo.Create(Form1);
  Memo1.Parent := Form1;
  Memo1.Visible := True;
  Memo1.Width := 700;
  if (OpenDialog1.Execute) then
  begin
    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

    Printer.BeginDoc;
    X := 200;
    Y := 200;
    for I := 0 to 140 do
      if (not Printer.Aborted) then
      begin
        Printer.Canvas.TextOut(X, Y, Memo1.Lines);
        Y := Y + 80;
        if (Y > (Printer.PageHeight - 300)) then
        begin
          Y := 200;
          Printer.NewPage;
          Sleep(1000);  // to give you time to abort!
        end;
      end;
    if (not Printer.Aborted) then Printer.EndDoc;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   KeyPreview := True;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_ESCAPE) and Printer.Printing then
  begin
  Printer.Abort;
  MessageDlg('Printing aborted', mtInformation, [mbOK],0);
  end;
end;

То же самое есть и для кросс-платформы FMX, знаю, что для Линукса есть и в Лазарусе на freepascal. Иначе вы, если у вас неработающий принтер в соседней комнате, не поймёте что почём.

Кстати, для любителей кодировать на С++.  В RAD студии там всё тоже самое, ну конечно, с заменой на {}, стрелочек на точки и присвоения := на знак равенства = (из математики). 
 
« Последнее редактирование: 10 Фев 2023 [18:09:00] от wassail »

Оффлайн АурипигментАвтор темы

  • *****
  • Сообщений: 5 587
  • Благодарностей: 170
  • Ми пацаки с планеты Земля. А Ви кто?
    • Сообщения от Аурипигмент
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #266 : 10 Фев 2023 [16:22:06] »
Char не может содержать символы не латинского алфавита.
Автор даёт свой экран и у него всё распечатывает. :-\
Где тут собака порылась? :-[
Ни про какой
  тип TUTF8Char описанный в модуле LCLType.
он не пишет, тем более, что никакие модули я пока не изучал. ???
Для примера та же программа на Питоне:
Работает даже с эмоджиками)
PS Если надо чтобы повторялось бесконечно до ввода пустой строки, то на 1 строчку больше
Я Вас понял: лучше Питона может быть только два Питона! ;D
Но я корпею над Паскалем. 8)
Отряд: Миссия невыполнима. :-X
Да не тратьте вы время на изучение работы readln/writeln
Пока, просто учусь программировать. Это учебные задачки.
Вы что, собираетесь в какой-то консольной программе считывать введённую строку и отправлять на печать?
Про печать я ничего, нигде не говорил, а программа выводит ответ на экран моника. ???
Сидел три дня, решал задачу на сравнение двух отрезков. В приципе, догадался, в каком направлении двигаться, но правильно составить прогу так и не смог, пришлось воспользоваться ответами. :(
Автор, практически, не уделяет внимания решению самой задачи. Вероятно в школе составление самих алгоритмов изучают отдельно, но я то это не изучал. >:(
Нам тайны не раскрытые раскрыть пора,
Лежат без пользы тайны, как в копилке.
Мы тайны эти с корнем вырвем у ядра,
На волю пустим Джина из бутылки.

Оффлайн Павел Васильев

  • *****
  • Сообщений: 561
  • Благодарностей: 20
    • Сообщения от Павел Васильев
    • Программные компоненты астромоделирования
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #267 : 10 Фев 2023 [18:36:30] »
Сидел три дня, решал задачу на сравнение двух отрезков. В приципе, догадался, в каком направлении двигаться, но правильно составить прогу так и не смог, пришлось воспользоваться ответами.
За эти три дня вы бы давно нашли решение в либах по графике и узнали бы ещё много чего нового. Самому порой трудно догадаться. По алгоритмам вообще можно рекомендовать книгу "Стивенс Р.Delphi. Готовые алгоритмы, 2004. Доходчиво написано и, главное, комментарии все на русский язык переведены.  Есть и исходники в сети. Но поскольку вы в самом начале трудного и скользкого пути, можно легко поскользнуться и вас затянет в болото Питон  :-\, то недавно появилось отличное руководство на русском языке - Kamburelis. Краткое введение в Object_Pascal. 2018.

Оффлайн CyberManiac

  • *****
  • Сообщений: 8 489
  • Благодарностей: 477
  • Я ♥ オリオン!
    • Сообщения от CyberManiac
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #268 : 10 Фев 2023 [18:44:40] »
Сидел три дня, решал задачу на сравнение двух отрезков.
Шо за бесовская задача, покажите уже.

Автор, практически, не уделяет внимания решению самой задачи. Вероятно в школе составление самих алгоритмов изучают отдельно, но я то это не изучал. >:(
Предыдущие задачи были не столько на знание языка, сколько на "найди закономерность, которая сжимает решение до одной строчки".
Трэш, угар и астрономия!
沖縄最高

Оффлайн eabrega

  • **
  • Сообщений: 69
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от eabrega
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #269 : 10 Фев 2023 [20:23:56] »
Char не может содержать символы не латинского алфавита. Один символ кириллицы содержит занимает 2 байта, а под переменную типа Char отводится всего 1. Попробуйте использовать для кириллицы тип TUTF8Char описанный в модуле LCLType.
C каких пор?
https://ru.wikipedia.org/wiki/ASCII
https://astronav.ru - актуальная версия
https://stage.astronav.ru - тестовый стенд (мобильная версия не работает!!)

Оффлайн GraY25

  • *****
  • Сообщений: 5 954
  • Благодарностей: 1014
  • Дифракционный_беспредел [____ Сергей Иванов ____]
    • Сообщения от GraY25
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #270 : 10 Фев 2023 [23:45:23] »
На тему Паскаля - вспомнил одну из интересных задачек по программированию, которую решал.

Дело было в ~2002 году, уже 20 лет назад, курсовая работа по конструированию компиляторов в институте, как раз на Дельфи, 5 или 6 версия.
Решил сделать программу, которая рисует график любой заданной функции.
На первый взгляд звучит просто, но не надо забывать что функция задана не в коде, а задаётся просто входной текстовой строкой)
Пришлось немного "поломать голову" - в результате последовательного разбора выражения в памяти собирается некая интерпретируемая "микропрограмма" в виде ячеек памяти и элементарных операций над ними, по которой уже происходит вычисление для каждой точки.. Мне это казалось очень красиво и элегантно, тогда)
Дополнительно нужно было проверить абсолютно все возможные варианты некорректного ввода по логическим правилам.
Получилось как то так:
(Все компоненты стандартные, можно делать зумм мышкой, функция задаётся в том же Паскаль-стиле)



• С14 HD [0.96] + HS F/1.9 @ CGE Pro
• С8 HD   [0.93] + HS F/2.1 @ ZWO AM5
• TS 152/900, WO 98FLT
Sun Hα  MoonAstroSeeing Bot

Оффлайн Toth

  • *****
  • Сообщений: 2 662
  • Благодарностей: 181
    • Сообщения от Toth
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #271 : 10 Фев 2023 [23:59:42] »
функция задана не в коде, а задаётся просто входной текстовой строкой)
Это называется парсер формул , или математический парсер.
Я тоже хотел что-то сам сделать, но потом нашел исходники для Дельф, даже неск. вариантов. Их использую, например опред. интеграл считать для введенной формулы.

Оффлайн GraY25

  • *****
  • Сообщений: 5 954
  • Благодарностей: 1014
  • Дифракционный_беспредел [____ Сергей Иванов ____]
    • Сообщения от GraY25
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #272 : 11 Фев 2023 [00:02:26] »
Что касается общих впечатлений, я уже давно понял что подобные RAD-системы как Дельфи - настоящее зло!)

Первое - они подсаживают человека на "процедурный" стиль программирования. Фактически, пиши себе обработчики кнопок и событий и типа всё готово.
Всё ООП оказывается изолировано в компонентах. Программки "средней руки" так клепать можно, но большие проекты делаются только классами/объектами, ООП - фундамент серьёзного программирования, а эта среда разработки никогда не вынуждает разрабатывать и использовать их.
Следствие из всего этого - второй пункт: любое боле-менее сложное действие сделать без классов слишком сложно, и пользователь находит решение проблемы в использовании готовых сторонних компонентов, частенько с закрытым исходным кодом, разработанные одиночками, которые частенько платные. Качество же их так же нередко страдает.
В третьих - используя компоненты ты оказываешься очень ограничен ими, вместо свободы творчества - невозможность сделать шаг влево-вправо. В конце-концов дело доходит до прямых вызовов WinAPI, или даже хуже - до ассемблерных вставок, отчаявшиеся люди идут и на такое!) Конечно, это уже полный бред который рушит всю концепцию.

Так что ничего удивительного что постепенно популярность падала и можно сказать сошла на нет.
« Последнее редактирование: 11 Фев 2023 [00:23:33] от GraY25 »
• С14 HD [0.96] + HS F/1.9 @ CGE Pro
• С8 HD   [0.93] + HS F/2.1 @ ZWO AM5
• TS 152/900, WO 98FLT
Sun Hα  MoonAstroSeeing Bot

Оффлайн Павел Васильев

  • *****
  • Сообщений: 561
  • Благодарностей: 20
    • Сообщения от Павел Васильев
    • Программные компоненты астромоделирования
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #273 : 11 Фев 2023 [03:27:37] »
Первое - они подсаживают человека на "процедурный" стиль программирования. Фактически, пиши себе обработчики кнопок и событий и типа всё готово.
Всё ООП оказывается изолировано в компонентах. Программки "средней руки" так клепать можно, но большие проекты делаются только классами/объектами
Ну прямо открытие сделали, что работа с классами и их методами через обработчик события это вредное структурное  программирование. Судя по вашим словам кроме кнопки tbutton вы так ничего и не поняли в визуальных компонентах, а это классы, их тысячи, причём многие с разветвлённой иерархией, созданные гениальным программистами, а не просто чайниками. Не нравится бросать значок компонента на форму? Так делайте экземпляр класса в рантайме. Чем это отличается от работы с невизуальными классами? В принципе ничем, вот только объявления, свойства и события классов придётся  не в инспекторе объектов изменять, если не нравятся  дефолтные, а на события дописывать код, а помнить по памяти к чему обращаться или через справку. Если у вас класс небольшой без родителей то ещё куда ни шло, но при большой иерархии и наследовании вы будете очень долго копаться в коде предков и потомков. В Дельфи и Си Билдере процесс разработки ускоряется за счёт использования визуальных компонентов, ещё раз  - это классы, порождённые от TComponent,   а не просто кнопочки, бросаемые на формочки, как любят повторять многие крупные специалисты, малограмотные в языке Оbject Pascal.

Оффлайн АурипигментАвтор темы

  • *****
  • Сообщений: 5 587
  • Благодарностей: 170
  • Ми пацаки с планеты Земля. А Ви кто?
    • Сообщения от Аурипигмент
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #274 : 11 Фев 2023 [08:57:59] »
Шо за бесовская задача, покажите уже.
Задачи-то примитивные, просто я не догоняю, как надо их решать. :(
Цитата
И) Платный участок трассы протянулся с километра P1 до километра P2
(P1<P2). А пост ГАИ размещен на километре M. Попадает ли этот пост на платный
участок трассы? Пусть ваша программа разберется с этим.
Цитата
К) Дорожная служба запланировала ремонт трассы на участке с R1 по R2
(R1<R2). В сочетании с условием предыдущей задачи ваша программа должна
определить:
· Будут ли ремонтировать весь платный участок P1-P2 ?
· Будут ли ремонтировать хотя бы часть платного участка P1-P2 ? Если да, то
определить длину ремонтируемой платной части.
· Будут ли ремонтировать хотя бы часть бесплатного участка? Если да, то
определить длину ремонтируемой бесплатной части.
Задачу И решил, более менее,  а с К возникли проблемы, начал рассматривать все варианты и погряз. :-[
Нам тайны не раскрытые раскрыть пора,
Лежат без пользы тайны, как в копилке.
Мы тайны эти с корнем вырвем у ядра,
На волю пустим Джина из бутылки.

Оффлайн GraY25

  • *****
  • Сообщений: 5 954
  • Благодарностей: 1014
  • Дифракционный_беспредел [____ Сергей Иванов ____]
    • Сообщения от GraY25
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #275 : 11 Фев 2023 [11:43:20] »
Ну прямо открытие сделали, что работа с классами и их методами через обработчик события это вредное структурное  программирование. Судя по вашим словам кроме кнопки tbutton вы так ничего и не поняли в визуальных компонентах, а это классы, их тысячи, причём многие с разветвлённой иерархией, созданные гениальным программистами, а не просто чайниками.

Вы сами и обозначили ответы на все вопросы. Почему с Дельфи всё так плохо, если она настолько "хороша"?
Разработка идёт быстро, кидай компоненты и пиши - хоть десктопное, хоть серверное приложение, базы данных - без проблем, веб-приложения - тоже!

Потому что кучи разрозненных компонентов нельзя сделать одновременно хорошими, тем более силами одной компании.
И только когда она сосредотачивается на чём-то одном, шанс появляется.
Так что, у нас с Дельфи получился классический "перочиный ножик" со 100500 инструментов. Его удобно использовать время от времени, когда под руками ничего другого нет.
Но профессионалы своего дела не работают перочиными ножами, увы.
• С14 HD [0.96] + HS F/1.9 @ CGE Pro
• С8 HD   [0.93] + HS F/2.1 @ ZWO AM5
• TS 152/900, WO 98FLT
Sun Hα  MoonAstroSeeing Bot

Оффлайн CyberManiac

  • *****
  • Сообщений: 8 489
  • Благодарностей: 477
  • Я ♥ オリオン!
    • Сообщения от CyberManiac
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #276 : 11 Фев 2023 [13:53:11] »
Вы сами и обозначили ответы на все вопросы. Почему с Дельфи всё так плохо, если она настолько "хороша"?
Потому что она стоила штуку баксов и очень долго не имела бесплатной версии. И Турбо Паскаль тоже был не бесплатный вообще-то. А у народа как заведено: какая забесплатно даст, та и красавица. Короче, вся история чисто про бабло.
Трэш, угар и астрономия!
沖縄最高

Оффлайн Toth

  • *****
  • Сообщений: 2 662
  • Благодарностей: 181
    • Сообщения от Toth
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #277 : 11 Фев 2023 [14:15:10] »
а с К возникли проблемы
Да вроде просто. Сейчас времени нет, но кое что ..
- Будут ли ремонтировать весь платный участок P1-P2 ?
if (R1<=P1) and (R2>=P2)

Оффлайн CyberManiac

  • *****
  • Сообщений: 8 489
  • Благодарностей: 477
  • Я ♥ オリオン!
    • Сообщения от CyberManiac
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #278 : 11 Фев 2023 [14:32:08] »
а с К возникли проблемы
Да вроде просто. Сейчас времени нет, но кое что ..
- Будут ли ремонтировать весь платный участок P1-P2 ?
if (R1<=P1) and (R2>=P2)
Там нужно определить две длины: длину части платного участка, входящего в ремонтируемый участок и длину части ремонтируемого участка, входящего в платный участок. Из этих двух чисел и исходных длин отрезков выводятся ответы на все три вопроса.
Трэш, угар и астрономия!
沖縄最高

Оффлайн GraY25

  • *****
  • Сообщений: 5 954
  • Благодарностей: 1014
  • Дифракционный_беспредел [____ Сергей Иванов ____]
    • Сообщения от GraY25
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #279 : 11 Фев 2023 [15:21:52] »
Потому что она стоила штуку баксов и очень долго не имела бесплатной версии. И Турбо Паскаль тоже был не бесплатный вообще-то. А у народа как заведено: какая забесплатно даст, та и красавица. Короче, вся история чисто про бабло.

То есть вы утверждаете что в падении популярности виноват маркетинг?
И если ваш продукт не покупают по причине большой цены то остаётся просто ждать когда все про него забудут?)

Может у народа "так" и заведено, но это коммерческий софт, за который платит контора. Для неё цена лицензии меньше месячной зарплаты одного разработчика.
Посмотрите сколько стоят современные CAD-системы, их покупали и будут покупать, так что бабло тут не при чём.
• С14 HD [0.96] + HS F/1.9 @ CGE Pro
• С8 HD   [0.93] + HS F/2.1 @ ZWO AM5
• TS 152/900, WO 98FLT
Sun Hα  MoonAstroSeeing Bot