С Новым годом! Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/1651: Рейтинг темы: голосов - 1651, средняя оценка - 4.62
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
1

Полезные коды для PascalABC.NET

23.03.2013, 15:03. Показов 318155. Ответов 133

Author24 — интернет-сервис помощи студентам
В этой теме размещаются полезные исходники программ, различные процедуры и функции, а так же готовые решения на часто задаваемые вопросы, написанные на PascalABC.NET.

Поддержать тему и добавить свои примеры, исходники и пр. может каждый, после того, как ознакомиться с правилами темы:
Правила темы!
  1. Запрещается добавлять коды программ никак не связанные с PascalABC.NET, для этих программ есть другие темы и разделы.
  2. Не рекомендуется добавлять слишком простые примеры, типа "Как добавить текст на кнопку?" и пр.
  3. Перед тем как выложить код, подумайте будет ли он кому-то интересен или полезен.
  4. Приветствуются сложные примеры или проекты, а так же программы с интересным принципом работы.
  5. Если программа использует сторонние ресурсы (изображения, библиотеки и пр.) обязательно прикрепляйте их во вложении
  6. Обязательно подробно комментируйте свой код, чтобы другим было проще разобраться в нём.
  7. Тема ведётся в формате Вопрос-Ответ, поэтому все сообщения оформляются в таком виде:
    В: Как что-то сделать?
    О:
    Делаем что-то
    Pascal
    1
    
    // Тут код
  8. Если вы хотите отредактировать свой код, можно обратиться к модераторам раздела или к ТС.


Путеводитель по теме:


Работа с формами:

Готовые решения:
Готовые решения на часто задаваемые вопросы.

Работа с графикой:
Исходники программ, работающих с графикой и графическими библиотеками (GraphABC, OpenGL и пр.).
Проектирование игр:
Инструкции, советы и пр.:
Инструкции, касающиеся работы с PascalABC.NET, советы для новичков и пр.
Работа со строками:
Базовые алгоритмы:
25
IT_Exp
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
23.03.2013, 15:03
Ответы с готовыми решениями:

Модуль для PascalABC.NET
Здравствуйте уважаемые форумчане, возник вопрос почему не работает модуль. Вот модуль unit...

Персонаж для игры на PascalABC.NET
Здравствуйте. Я программирую игру на PascalABC.NET и я столкнулся с такой проблемой. Смысл игры в...

Редактор форм для PascalABC.NET
Существуют ли редакторы форм для PascalABC.NET, а то в PascalABC был свой. Добавлено через 41...

Есть ли PascalABC.NET для Mac OS X?
Есть ли PascalABC.NET для Mac OS X?

133
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 2
В: Как двигать форму без границ?
О:
Двигаем форму без границ (FormBorderStyle.None)
Для начала делаем событие на нажатие кнопки мыши:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure MainForm_MouseDown(sender: object; args: System.Windows.Forms.MouseEventArgs);
begin
  Down := True; {Зажали кнопку}
  
  // Запоминаем координаты формы
  X := MainForm.Left;
  Y := MainForm.Top;
  
  // Запоминаем координаты курсора
  cX := System.Windows.Forms.Cursor.Position.X;
  cY := System.Windows.Forms.Cursor.Position.Y;
end;
В нём будет переменная типа boolean, которая будет отвечать за "нажатие" кнопки (если нажата - True, если отпустили - False). Тут же запоминаем текущие координаты формы (X, Y) и текущие координаты курсора (cX, cY).

Далее пишем коротенькую процедуру, которая будет отвечать за "отпускание" кнопки:
Pascal
1
2
3
4
procedure MainForm_MouseUp(sender: object; args: System.Windows.Forms.MouseEventArgs);
begin
  Down := False; {Отпустили кнопку}
end;
Думаю тут всё понятно)

Последний шаг делаем событие по движению мыши:
Pascal
1
2
3
4
5
6
7
8
9
procedure MainForm_MouseMove(sender: object; args: System.Windows.Forms.MouseEventArgs);
begin
  if Down then {Если кнопка нажата}
  begin
  // Двигаем форму относительно курсора
    MainForm.Left := System.Windows.Forms.Cursor.Position.X - cX + X;
    MainForm.Top := System.Windows.Forms.Cursor.Position.Y - cY + Y;
  end;
end;
Тут тоже вроде всё ясно, единственная сложность с "движением относительно курсора", но тут легче понять чем объяснить.

Вот целый код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
uses
  System.Windows.Forms,
  System.Drawing;
 
var
  MainForm: System.Windows.Forms.Form;
  X, Y, cX, cY: integer;
  Down: boolean := False;
 
procedure MainForm_MouseDown(sender: object; args: System.Windows.Forms.MouseEventArgs);
begin
  Down := True; {Зажали кнопку}
  
  // Запоминаем координаты формы
  X := MainForm.Left;
  Y := MainForm.Top;
  
  // Запоминаем координаты курсора
  cX := System.Windows.Forms.Cursor.Position.X;
  cY := System.Windows.Forms.Cursor.Position.Y;
end;
 
procedure MainForm_MouseUp(sender: object; args: System.Windows.Forms.MouseEventArgs);
begin
  Down := False; {Отпустили кнопку}
end;
 
procedure MainForm_MouseMove(sender: object; args: System.Windows.Forms.MouseEventArgs);
begin
  if Down then {Если кнопка нажата}
  begin
  // Двигаем форму относительно курсора
    MainForm.Left := System.Windows.Forms.Cursor.Position.X - cX + X;
    MainForm.Top := System.Windows.Forms.Cursor.Position.Y - cY + Y;
  end;
end;
 
begin
  
  MainForm := new Form;
  MainForm.StartPosition := FormStartPosition.CenterScreen;
  MainForm.FormBorderStyle := FormBorderStyle.None;
  MainForm.MouseDown += MainForm_MouseDown;
  MainForm.MouseUp += MainForm_MouseUp;
  MainForm.MouseMove += MainForm_MouseMove;
  
  Application.Run(MainForm);
end.
2
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 3
В: Как сделать форму круглой, или любой другой формы?
О:
Делаем форму круглой (или любой другой формы)

Не по теме:

Форма формы O_o. Извиняюсь за тавтологию)


Сначала рисуем фон нашей формы например круглый. Название: BackGround.png
Просмотров: 14249

Размер: 5.2 КбСохраняем в формате .png! Далее пишем такой код, думаю там и так всё понятно:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
 
uses
  System.Windows.Forms,
  System.Drawing;
  
var
  MainForm: Form;
  
begin
  MainForm := new Form;
  MainForm.StartPosition := FormStartPosition.CenterScreen;
  MainForm.FormBorderStyle := FormBorderStyle.None;
  MainForm.ClientSize := new System.Drawing.Size(200, 200); {Подгоняем под размер изображения}
  MainForm.BackColor := Color.HotPink; {Цвет фона задаём "левый", который больше нигде не будет использоваться}
  MainForm.TransparencyKey := Color.HotPink; {Делаем прозрачным наш "левый" цвет}
  MainForm.BackgroundImage := Image.FromFile('background.png');
  
  Application.EnableVisualStyles;
  
  Application.Run(MainForm);
end.
1
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 4
В: Можно ли сделать 3D игру на PascalABC.NET? Если да, то как?
О:
OpenGL и PascalABC.NET
Предоставляю вашему вниманию модуль OpenGL, написанный на PascalABC.NET. Если вы хотите сделать 3D игру и знаете как работать с OpenGL (не обязательно под Pascal т.к. они идентичны) можете смело приступать Итак выкладываю сам модуль: OpenGL.rar и ещё пару простеньких (относительно) 3D игрушек для примера (Eclipse.rar и Serious Slam.rar).
5
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 5
В: Как программно выключить компьютер?
О:
Выключение компьютера
Pascal
1
2
3
4
5
6
7
8
function FindDir(): string;
begin
  Result := System.IO.Directory.GetDirectoryRoot('\WINDOWS\System32\shutdown.exe');
end;
 
begin
  Exec(FindDir + 'WINDOWS\System32\shutdown.exe', '-f');
end.
8
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 6
В: Как добавить программу в автозапуск или удалить её от туда?
О:
Добавление и удаление программы в\из автозапуск(а)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
uses
  Microsoft.Win32;
 
const
  ApplicationName = 'PABC.NET AutoRun'; {Имя программы в автозапуске}
 
begin
  // Добавляем программу в автозапуск
  var Reg := Registry.LocalMachine.CreateSubKey('Software\Microsoft\Windows\CurrentVersion\Run');
  Reg.SetValue(ApplicationName, GetEXEFileName);
  Reg.Close;
  
  // Удаляем программу из автозапуска
  var Reg := Registry.LocalMachine.CreateSubKey('Software\Microsoft\Windows\CurrentVersion\Run');
  Reg.DeleteValue(ApplicationName);
  Reg.Close;
end.
Что бы добавить\удалить программу в\из автозапуск(а) пользователь должен иметь права администратора.
2
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 7
В: Как воспроизвести музыкальный (.mp3) файл?
О:
Воспроизведение музыки в PascalABC.NET
Следующим кодом можно открывать различные музыкальные форматы (.wav, .mp3), но пробовал только .mp3 остальные не знаю.
Pascal
1
2
3
4
5
6
7
8
9
{$reference 'PresentationCore.dll'}
 
begin
  var Player := new System.Windows.Media.MediaPlayer; {Присваиваем переменной "Player" новый экземпляр MediaPlayer'а}
  Player.Open( new System.Uri('Имя_файла.mp3', System.UriKind.Relative)); {Задаём путь до файла*}
  Player.Play(); {Воспроизводим файл}
  
  System.Windows.Forms.Application.Run();
end.
* Примечание: если вы используйте относительный путь к файлу то используйте этот код, если абсолютный то замените
Pascal
1
System.UriKind.Relative
на
Pascal
1
System.UriKind.Absolute
Если не знаете какой путь используете пишите
Pascal
1
System.UriKind.RelativeOrAbsolute
P.S. Пути к файлам.
4
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 8
В: Как нарисовать кота, с помощью PascalABC.NET?
О:
Рисуем кота на PascalABC.NET, с помощью GraphABC

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
uses
  GraphABC;
 
begin
  // Тело
  Line(220, 100, 200, 380);
  Line(420, 100, 440, 380);
  Line(200, 380, 440, 380);
  Arc(320, 290, 140, 120, 60);
  
  // Уши
  Line(220, 100, 250, 170);
  Line(420, 100, 390, 170);
  
  // Глаза
  Circle(290, 220, 30);
  Circle(350, 220, 30);
  
  SetBrushColor(Color.Black);
  Circle(310, 220, 5);
  Circle(330, 220, 5);
  
  // Нос
  SetBrushColor(Color.Pink);
  Circle(320, 240, 10);
  
  // Рот
  Line(320, 250, 320, 290);
  Arc(320, 230, 60, -130, -50);
  
  // Усы
  Line(239, 270, 310, 245);
  Line(239, 280, 310, 245);
  Line(239, 290, 310, 245);
  
  Line(329, 245, 400, 270);
  Line(329, 245, 400, 280);
  Line(329, 245, 400, 290);
  
  // Лапы
  Arc(250, 390, 30, 160, 20);
  Arc(390, 390, 30, 160, 20);
  
  Line(240, 380, 240, 370);
  Line(250, 380, 250, 370);
  Line(260, 380, 260, 370);
  
  Line(380, 380, 380, 370);
  Line(390, 380, 390, 370);
  Line(400, 380, 400, 370);
end.
образец
Полезные коды для PascalABC.NET

1
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 9
В: Как установить свою иконку приложения?
О:
Делаем свою иконку приложения
Создадим простенькую программку и сохраним её:
Pascal
1
2
3
4
begin
  WriteLn('Hello World!');
  ReadLn();
end.
Потом создаём\скачиваем иконку и кидаем её в файл с программой. Далее создаём файл hwres.rc и пишем в него такую строчку:
Код
MAINICON ICON "hwicon.ico" {Вместо "hwicon"  имя вашей иконки}
сохраняем его.

Затем открываем командную строку (Пуск - Выполнить - cmd - Ок) и пишем туда:
Код
cd C:\PABCWork.NET\HelloWorld {Вместо "C:\PABCWork.NET\HelloWorld" путь к папке с вашей программой}
Жмём Enter. Потом пишем:
Код
"Z:\Дистрибутивы\PascalABC.NET\rc" hwres.rc {Вместо "Z:\Дистрибутивы\PascalABC.NET" путь к папке где установлен PascalABC.NET}
Жмём Enter. Если всё сделали правильно, в папке с программой появится файл hwres.res. Теперь немного изменим нашу программу, а именно:
Pascal
1
2
3
4
5
6
{$mainresource hwres.res}
 
begin
  WriteLn('Hello World!');
  ReadLn();
end.
Компилируем и вуаля, у EXE-шника наша иконка вместо стандартной!
12
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 10
В: Как/зачем объявлять переменную в заголовке цикла for?
О:
Объявление параметра цикла for в заголовке цикла

Многие новички, да и более опытные программисты перешедшие с Turbo/Free Pascal'я часто задают вопрос: как работает такая конструкция и зачем она нужна?
Pascal
1
2
for var i := 1 to n do
...
Объявление переменной в заголовке цикла это одна из фичей PascaABC.NET. Объявлять переменную можно 2-мя способами. 1-ый способ с ручным определением типа переменной:
Pascal
1
2
for i: integer := 1 to n do
...
Например:
Pascal
1
2
3
4
begin
  for i: integer := 1 to 10 do
    WriteLn(i);
end.
2-ой способ с автоопределением типа:
Pascal
1
2
for var i := 1 to 10 do
...
Например:
Pascal
1
2
3
4
begin
  for var i := 1 to 10 do
    WriteLn(i);
end.
Т.к. в цикле for разрешается использовать только целочисленные типы, 1-ый способ отпадает за ненадобностью. Чем же хорошо такое объявление? Основное его достоинство в том, что не выделяется память под глобальную переменную, а несколько переменных в разных циклах будут использовать общую память. Да и визуально такой код выглядит лучше Замечу, что переменную с одним именем можно использовать в разных циклах. Например такой код не вызовет ошибку:
Pascal
1
2
3
4
5
6
7
begin
  for var i := 1 to 10 do
    WriteLn(i);
  
  for var i := 1 to 10 do
    Write(i, ' ');
end.
Так же эту переменную нельзя использовать вне цикла, такой код вызовет ошибку:
Pascal
1
2
3
4
5
6
begin
  for var i := 1 to 10 do
    WriteLn(i);
  
  WriteLn(i); // Эта строка не входит в цикл
end.
2
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] 11
В: Как сделать скриншот экрана?
О:
Делаем скриншот экрана

Вот таким небольшим кодом можно сделать скриншот экрана:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
 
uses
  System.Windows.Forms,
  System.Drawing;
 
var
  Bm: Bitmap;
  Gr: Graphics;
  
begin
  Bm := new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); // Создаём новый Bitmap
  Gr := Graphics.FromImage(Bm); // Создаём новую поверхность для рисования
  Gr.CopyFromScreen(0, 0, 0, 0, Bm.Size); // Копируем в неё изображения с экрана
  Bm.Save('C:\Screen.jpg', System.Drawing.Imaging.ImageFormat.Jpeg); // Сохраняем в формате .jpg 
end.
4
1682 / 1095 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
23.03.2013, 22:39 12
BaboshinSD,тема действительно полезная.Я например в PascalABC.NET не пишу,изучаю чистый Паскаль без наворотов но хотелось бы и PascalABC.NET знать.

В:Как создать приложение с окном(пустым)?
О:
приложение с окном
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
uses System.Windows.Forms;
var myForm:Form;
begin
  myForm:=new Form; //В переменную myForm записываем экземпляр новой формы
  myForm.Text:='Программа с формой'; //Определяем заголовок окна
  myForm.Width:=600; //Устанавливаем ширину
  myForm.Height:=350; //Устанавливаем высоту
  myForm.Left:=95; //Расстояние от начала экрана до левой границы формы
  myForm.Top:=150;
  Application.Run(myForm);
end.
4
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 22:45  [ТС] 13
Андрей_Новичок, если нужно просто пустое окно можно короче записать:
Pascal
1
2
3
4
5
6
type
  MyForm = System.Windows.Forms.Form;
 
begin
  System.Windows.Forms.Application.Run(new MyForm);
end.
2
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
24.03.2013, 15:55  [ТС] 14
В:покажите программу с кнопкой и обработчиком нажатия кнопки,самым простым, например, чтобы менялся текст заголовка окна.
О: вот, основные строчки закомментировал:
Кнопка и обработчик нажатия кнопки
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
 
uses
  System.Windows.Forms,
  System.Drawing;
  
var
  MainForm: System.Windows.Forms.Form;
  B1: System.Windows.Forms.Button;
 
procedure B1_Click(Sender: Object; Args: System.EventArgs);
begin
  MainForm.Text := 'Вы нажали кнопку!';
end;
  
begin
  B1 := new Button; {Создаём кнопку}
  B1.Location := new System.Drawing.Point(100, 110); {Позиция кнопки на форме}
  B1.Text := 'Кнопка'; {Текст кнопки}
  B1.Click += B1_Click; {Процедура, выполняющаясь по нажатию}
 
  MainForm := new Form;
  MainForm.Text := 'Нажмите кнопку';
  
  MainForm.Controls.Add(B1); {Добавляем кнопку на форму}
  
  Application.EnableVisualStyles; {Подключаем визуальные стили}
  
  Application.Run(MainForm);
end.
7
38 / 38 / 13
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
12.04.2013, 17:50 15
Попробовал код на mp3 Полезные коды для PascalABC.NET
не работает (Ошибка при чтении сборки 'C:\Windows\Microsoft.NET\assembly\GAC_32\PresentationCore\v4.0_4.0.0.0__31bf385 6ad364e35\PresentationCore.dll')

Вот этот работает
В: Как проигрывать звук в PascalABC.NET?
О:
Media soundPlayer

Pascal
1
2
3
4
5
begin
var Player := new System.Media.soundPlayer('Ваш файл.wav'); //Создаем плеер и привязываем файл
player.Play;//Включаем плеер
player.Stop; //Останавливает плеер
end.
Другие способности плеера
Pascal
1
2
3
4
player.IsLoadCompleted //True если файл загружен успешно
player.LoadCompleted //Событие вызываемое при успешной или неуспешной загрузке файла
player.SoundLocation //Путь к файлу
player.PlayLooping //Зацикливает плеер
2
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
13.04.2013, 14:30  [ТС] 16
В: А можно сделать так, чтобы одновременно воспроизводил несколько звуков?
О, создайте 2 экземпляра плеера:
2 экземпляра плеера
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
{$reference 'PresentationCore.dll'}
 
begin
  var Player1 := new System.Windows.Media.MediaPlayer;
  Player1.Open( new System.Uri('1.mp3', System.UriKind.Relative));
  Player1.Play();
  
  var Player2 := new System.Windows.Media.MediaPlayer;
  Player2.Open( new System.Uri('2.mp3', System.UriKind.Relative));
  Player2.Play();
  
  System.Windows.Forms.Application.Run();
end.
7
38 / 38 / 13
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 15:15 17
В: Как перевернуть строку процедурой?
О:
Процедура ReverseString
Pascal
1
2
3
4
procedure ReverseString(var s:string); //назвать можно как угодно
begin
s:=ReverseString(s); //Это ФУНКЦИЯ которая возвращает перевернутую строку
end;

Да, мне известно что есть функция которая возвращает перевернутую строку
Но это процедура которая переворачивает введеную переменную без присваивания

Нашел такую фичу:
Если описание процедуры такое: (var s:string)
то в процессе выполнения будет использоваться не переменная s а та переменная, которая была написана в этом месте
То есть
Кликните здесь для просмотра кода
Pascal
1
2
3
4
5
6
7
8
9
function func(s:string):string;
begin
result:=reversestring(s);
end;
 
begin
s:='СЛОВО';
s:=func(s);
writeln(s); //ОВОЛС


равноценно
Кликните здесь для просмотра кода
Pascal
1
2
3
4
5
6
7
8
9
procedure func(var s:string);
begin
s:=reversestring(s);
end;
 
begin
s:='СЛОВО';
func(s);
writeln(s); //ОВОЛС
2
38 / 38 / 13
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 15:15 18
В: Функция которая возвращает количество указанной буквы?
О:
Функция Count
Pascal
1
2
3
4
5
6
function count(s:string;c:char):integer;
begin
for var i:=1 to length(s)-1 do
if s[i]=c then
inc(result);
end;
1
38 / 38 / 13
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 16:03 19
В: Процедура помещающая слова из строки в массив?
О:
процедура count
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure count(var arr:array of string;s:string); 
var k:integer; 
begin
if not (s[length(s)]=' ') then begin
setlength(s,length(s)+1);
s[length(s)]:=' '; end;
setlength(arr,count(s,' ')+1);
for var i:=1 to count(s,' ')+1 do begin
repeat
k+=1;
arr[i-1]+=s[k];
until s[k+1]=' ';
k+=1;
end;
end;


Код доказательства что это работает
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var words:array of string;
str:string;
///Считает количество 'c' в строке 's'
function count(s:string;c:char):integer; begin
for var i:=1 to length(s)-1 do
if s[i]=c then
inc(result);
end;
 
///Разбирает строку 's' на слова и помещает в массив 'arr'
procedure count(var arr:array of string;s:string); 
var k:integer; begin
setlength(arr,0);
if not (s[length(s)]=' ') then begin
setlength(s,length(s)+1);
s[length(s)]:=' '; end;
setlength(arr,count(s,' ')+1);
for var i:=1 to count(s,' ')+1 do begin
repeat
k+=1;
arr[i-1]+=s[k];
until s[k+1]=' ';
k+=1;
end;
end;
 
///Выводит в столбик массив
procedure writelnArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
writeln(arr[i]);
end;
 
///Выводит в строчку массив
procedure writeArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
write(arr[i],' ');
end;
 
begin
str:='Строка состоящая из пяти слов';
count(words,str);
writelnArray(words);
writeln;
str:='Строка из четырех слов';
count(words,str);
writelnArray(words);
writeln;
str:='Здесь три слова';
count(words,str);
writelnArray(words);
writeln;
str:='Два слова';
count(words,str);
writelnArray(words);
writeln;
str:='Слово';
count(words,str);
writelnArray(words);
end.


Кстати,
В: Вывести массив строк?
О:
процедура WritelnArray
Выводит массив в столбик
Pascal
1
2
3
4
5
procedure writelnArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
writeln(arr[i]);
end;

процедура WriteArray
Выводит в строчку массив
Pascal
1
2
3
4
5
procedure writeArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
write(arr[i],' ');
end;
2
38 / 38 / 13
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 16:03 20
Знаешь процедуру inc(i:integer) ?
Вот её код
procedure Inc
Pascal
1
2
3
4
procedure Inc(var i: integer);
begin
  i += 1;
end;

без var не будет работать
0
21.04.2013, 16:03
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
21.04.2013, 16:03
Помогаю со студенческими работами здесь

Процедура GetMem для PascalABC.NET
Долго долго курил страницы форума, изучал динамические списки. Когда код для программы уже...

Исправить код для PascalABC.net
как минимум, первое место которое ему не нравиться это как я обьявляю тип объект const size=10; ...

В чем разница PascalABC.net и PascalABC
Скажите в чем разница PascalABC.net И PascalABC. Помню когда-то давно программы работающие в...

Надо найти библиотеку для PascalABC NET
Всем привет. Вот сейчас пишу движок для PascalABC NET. Для графики взял OpenGL. Теперь начал делать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru