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

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

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

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

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


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


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

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

Работа с графикой:
Исходники программ, работающих с графикой и графическими библиотеками (GraphABC, OpenGL и пр.).
Проектирование игр:
Инструкции, советы и пр.:
Инструкции, касающиеся работы с PascalABC.NET, советы для новичков и пр.
Работа со строками:
Базовые алгоритмы:
25
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2013, 15:03
Ответы с готовыми решениями:

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

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

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

133
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Как сделать скриншот экрана?
О:
Делаем скриншот экрана

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

Затем открываем командную строку (Пуск - Выполнить - cmd - Ок) и пишем туда:
Code Скопировано
1
cd C:\PABCWork.NET\HelloWorld {Вместо "C:\PABCWork.NET\HelloWorld" путь к папке с вашей программой}
Жмём Enter. Потом пишем:
Code Скопировано
1
"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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Как нарисовать кота, с помощью 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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Как воспроизвести музыкальный (.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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Как добавить программу в автозапуск или удалить её от туда?
О:
Добавление и удаление программы в\из автозапуск(а)
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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Как двигать форму без границ?
О:
Двигаем форму без границ (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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Как сделать форму круглой, или любой другой формы?
О:
Делаем форму круглой (или любой другой формы)

Не по теме:

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


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

Размер: 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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Можно ли сделать 3D игру на PascalABC.NET? Если да, то как?
О:
OpenGL и PascalABC.NET
Предоставляю вашему вниманию модуль OpenGL, написанный на PascalABC.NET. Если вы хотите сделать 3D игру и знаете как работать с OpenGL (не обязательно под Pascal т.к. они идентичны) можете смело приступать Итак выкладываю сам модуль: OpenGL.rar и ещё пару простеньких (относительно) 3D игрушек для примера (Eclipse.rar и Serious Slam.rar).
5
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС]
В: Как программно выключить компьютер?
О:
Выключение компьютера
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
 Аватар для Новичок
1682 / 1097 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
23.03.2013, 22:39
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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 22:45  [ТС]
Андрей_Новичок, если нужно просто пустое окно можно короче записать:
Pascal Скопировано
1
2
3
4
5
6
type
  MyForm = System.Windows.Forms.Form;
 
begin
  System.Windows.Forms.Application.Run(new MyForm);
end.
2
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
24.03.2013, 15:55  [ТС]
В:покажите программу с кнопкой и обработчиком нажатия кнопки,самым простым, например, чтобы менялся текст заголовка окна.
О: вот, основные строчки закомментировал:
Кнопка и обработчик нажатия кнопки
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
Попробовал код на mp3 Полезные коды для PascalABC.NET
не работает (Ошибка при чтении сборки 'C:\Windows\Microsoft.NET\assembly\GAC_3 2\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
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
13.04.2013, 14:30  [ТС]
В: А можно сделать так, чтобы одновременно воспроизводил несколько звуков?
О, создайте 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
В: Как перевернуть строку процедурой?
О:
Процедура 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
В: Функция которая возвращает количество указанной буквы?
О:
Функция 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
В: Процедура помещающая слова из строки в массив?
О:
процедура 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
Знаешь процедуру inc(i:integer) ?
Вот её код
procedure Inc
Pascal Скопировано
1
2
3
4
procedure Inc(var i: integer);
begin
  i += 1;
end;

без var не будет работать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2013, 16:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров
Programma_Boinc 21.04.2025
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров. 3 марта 2025 года, в результате обобщенного поиска простых чисел Ферма в PrimeGrid был найден. . .
Система статов в Unity
GameUnited 20.04.2025
Статы — фундаментальный элемент игрового дизайна, который определяет характеристики персонажей, предметов и других объектов в игровом мире. Будь то показатель силы в RPG, скорость передвижения в. . .
Статические свойства и методы в TypeScript
run.dev 20.04.2025
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более. . .
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования. . . .
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
Максимальная производительность C#: Процессорный кэш
stackOverflow 20.04.2025
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но. . .
Максимальная производительность C#: Введение в микрооптимизации
stackOverflow 20.04.2025
В мире разработки на C# многие привыкли полагаться на . NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер