Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 5, средняя оценка - 5.00
BaboshinSD
334 / 273 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
#1

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

23.03.2013, 15:03. Просмотров 176332. Ответов 120

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

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


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


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

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

Работа с графикой:
Исходники программ, работающих с графикой и графическими библиотеками (GraphABC, OpenGL и пр.).
Проектирование игр:
Инструкции, советы и пр.:
Инструкции, касающиеся работы с PascalABC.NET, советы для новичков и пр.
Работа со строками:
Базовые алгоритмы:
23
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 15:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Полезные коды для PascalABC.NET (PascalABC.NET):

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

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

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

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

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

120
BaboshinSD
334 / 273 / 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
BaboshinSD
334 / 273 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 15:03  [ТС] #3
В: Как сделать форму круглой, или любой другой формы?
О:
Делаем форму круглой (или любой другой формы)

Не по теме:

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


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

Размер: 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
334 / 273 / 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).
4
BaboshinSD
334 / 273 / 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.
7
BaboshinSD
334 / 273 / 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
BaboshinSD
334 / 273 / 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
BaboshinSD
334 / 273 / 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
BaboshinSD
334 / 273 / 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
BaboshinSD
334 / 273 / 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.
1
BaboshinSD
334 / 273 / 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.
3
Новичок
Модератор
1480 / 946 / 457
Регистрация: 17.07.2012
Сообщений: 4,888
Завершенные тесты: 3
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
BaboshinSD
334 / 273 / 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
BaboshinSD
334 / 273 / 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
Ragnazar
37 / 37 / 13
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
12.04.2013, 17:50 #15
Попробовал код на mp3 http://www.cyberforum.ru/pascalabc-net/thread816315-page2.html
не работает (Ошибка при чтении сборки 'C:\Windows\Microsoft.NET\assembly\GAC_32\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35\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
334 / 273 / 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
Ragnazar
37 / 37 / 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
Ragnazar
37 / 37 / 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
Ragnazar
37 / 37 / 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
Ragnazar
37 / 37 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 16:03
Привет! Вот еще темы с решениями:

Создание своего модуля для PascalABC.net
Здравствуйте уважаемые форумчане, подскажите как создать из файла Pas файл PCU....

Ошибка при создании меню в PascalABC.net для игры
ПОМОГИТЕ СРОЧНО!Я хочу заключить процедуры в одну процедуру для меню, для того...

Написать программу из задачника среды PascalABC.NET для задания integer8:
Написать программу из задачника среды PascalABC.NET для задания integer8:...

Установится ли PascalABC.NET на систему, где установлен только .NET 4.6.1?
Привет всем. Вопрос, собственно, озвучен выше. Конкретнее: есть компьютер со...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru