Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
5th
Июл
Задача со строковыми величинами (Pascal)
Posted by obzor under Delphi
Написать функцию, которая получает на входе две строковые величины и проверяет вхождение одной в другую. На выходе выдает результат ложь или номер позиции вхождения. Никак не могу взять в толк, как переменной присвоить тип boolean и integer одновременно?
Паскаль строго типизированный язык. Переменная НЕ МОЖЕТ принимать значения разного типа (ну, если не брать искусственно введённый в Delphi тип VARIANT)
поэтому, у Вас два выхода.
выход первый — функция возвращает только целочисленное значение. В случае ошибки возвращается значение, которого заведомо нет и не может быть.
например, Pos возвращает ноль, если ничего не нашлось. Некоторые функции возвращают -1, если значение не найдено в списке и т.д.
вариант второй.
функция делается логического типа и возвращает true (нашлось) или false (не найдено) и при этом функция вовращает значение через переменную параметер:
function findPos(const S1, S2 : string; var PosS1InS2 : integer) : boolean;
begin
PosS1InS2 := Pos(S1, S2);
findPos := (PosS1InS2 > 0);
end;
безусловно, можно написать функцию, которая возвращает тип Variant, но это будет работать далеко не в каждом Pascal и подобное требует какое-то логическое обоснование — для чего это нужно.
Формулировка задачи написана для с/с++, там то, что = 0 и есть false.
На паскале можно, конечно, принять false за 0, что логично и правильно.
type
TPosResult = record case byte of
0: (Position: Integer);
1: (Success: Boolean);
end;
function MyPos(const SubStr, S: string; const Offset: Integer = 1): TPosResult;
begin
Result.Position:= Pos(SubStr, S, Offset);
end;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)