Урок 8. Функции для работы с числами
Уроки 58 — 61
Работа с символьной информацией
Практикум
Практическая работа № 3.8
«Программирование обработки строк символов»
Символьный тип данных
Величина типа «символ» может принимать значения любых символов компьютерного алфавита. Символьная величина занимает 1 байт памяти, в котором хранится код этого символа, соответствующий используемой кодовой таблице. Заметим, что в Delphi наряду с однобайтовой кодировкой символов используется и двухбайтовая.
Символьная константа записывается между апострофами. Например: 1R’, ‘ + ‘, ‘9’, ‘j’.
Символьной тип называется Char. Пример описания символьных переменных:
Var c1, с2: Char;
Символьный тип относится к порядковым типам данных. Из этого следует:
• символы — упорядоченное множество;
• у каждого символа в этом множестве есть свой порядковый номер;
• между символами работает соотношение «следующий — предыдущий ».
Порядковый номер символа — это его десятичный код, который лежит в диапазоне от 0 до 255. Например, в кодовой таблице ASCII десятичный код латинской буквы ‘А’ равен 65, а цифры ‘5’ — 53. О стандартах кодирования символов рассказывалось на уроках 13 — 16 «Представление текста, изображения и звука в компьютере».
Функция Ord(x)
Ord(x) — функция от аргумента порядкового типа, которая возвращает порядковый номер значения х в этом типе данных. Если х — символьная величина, то результатом функции будет десятичный код х в кодовой таблице. Например:
Функция Chr (х)
Chr (х) — функция от целочисленного аргумента, результатом которой является символ с кодом, равным х. Например:
Поскольку коды символов лежат в диапазоне от 0 до 255, желательно тип х определять либо как byte, либо как интервальный тип 0..255.
Пример 1. Составить программу на Паскале, по которой на экран будет выводиться таблица кодировки в диапазоне кодов от 32 до 255. Напомним, что символы с кодами, меньшими 32, являются управляющими (не экранными).
Значения выводятся парами: символ — код. В одной строке располагается 10 таких пар. Вся таблица разместится в 24 строках на экране.
Принцип последовательного кодирования алфавитов
В любой кодовой таблице выполняется принцип последовательного кодирования латинского (английского) алфавита и алфавита десятичной системы счисления. Это важное обстоятельство, которое часто учитывается в программах обработки символьной информации.
При выполнении операций отношений, применительно к символьным величинам, учитываются коды этих величин. Чем больше значение кода, тем символ считается больше. Истинными являются следующие отношения: ‘А’ с ‘В’, ‘Z’ > ‘Y’, ‘а’ > ‘А’. Значение символьной переменной С является прописной (заглавной) латинской буквой, если истинно логическое выражение:
(С >= ‘А’) and (C = ’0′) and (С : String[ ]
Var Name: String[20]
Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине — 255. Например:
Var slovo: String
Строковая переменная занимает в памяти на 1 байт больше, чем указанная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не присвоено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.
Символы внутри строки индексируются (нумеруются), начиная с единицы. Каждый отдельный символ идентифицируется именем строки с индексом, заключенным в квадратные скобки. Например:
Name[5], Name[i], slovo[k+1].
Значение индекса может быть задано положительной константой, переменной, выражением целочисленного типа. Оно не должно выходить за границы описания.
Тип String и стандартный тип Char совместимы: строки и символы могут употребляться в одних и тех же выражениях.
Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операция сцепления и операции отношения.
Операция сцепления (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.
В результате получится строка:
Длина результирующей строки не должна превышать 255.
Операции отношения: =, , =, производят сравнение двух строк, в результате чего получается логическая величина (true или false). Операции отношения имеют более низкий приоритет, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки.
Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.
Функции и процедуры
Функция Copy(S, Poz, N) выделяет из строки S подстроку длиной N символов, начиная с позиции Poz. N и Роz — целочисленные выражения.
Функция Concat (SI, S2, . . ., SN) выполняет сцепление (конкатенацию) строк S1. SN в одну строку.
Функция Length (S) определяет текущую длину строки S. Результат — значение целочисленного типа.
Функция Pos (SI, S2) обнаруживает первое появление в строке S2 подстроки S1. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 не обнаружена подстрока S1, то результат равен 0.
Процедура Delete (S, Poz, N) удаляет N символов из строки S, начиная с позиции Poz.
В результате выполнения процедуры уменьшается текущая длина строки в переменной S.
Процедура Insert (SI, S2, Poz) выполняет вставку строки S1 в строку S2, начиная с позиции Poz.
Примеры программ обработки строк
Пример 1. Составить программу, формирующую символьную строку, состоящую из N звездочек (N — целое число, 1 ≤ N ≤ 255).
здесь строковой переменной А вначале присваивается значение пустой строки, обозначаемой двумя апострофами (‘ ‘). Затем к ней присоединяются звездочки.
Пример 2. В символьной строке подсчитать количество цифр, предшествующих первому символу ‘ ! ‘.
В этой программе переменная К играет роль счетчика цифр, а переменная I — роль параметра цикла. Цикл закончит выполнение при первом же выходе на символ ‘ ! ‘ или если в строке такого символа нет, то при выходе на конец строки. Символ S[I] является цифрой, если истинно отношение: ‘O’ ≤ S[I] ≤ ‘9’.
Вопросы и задания
1. Как в программе обозначается строковая константа, как определяется строковая переменная?
2. Какой может быть максимальная длина строки?
3. Составьте программу получения из слова «дисковод» слова «воск», используя операцию сцепления и функцию Сору.
4. Составьте программу получения слова «правило» из слова «операция», используя процедуры Delete, Insert.
5. В данном слове замените первый и последний символы на символ ‘*’.
6. В данном слове произведите обмен первого и последнего символов.
7. К данному слову присоедините столько символов ‘!’, сколько в нем имеется букв (например, из строки ‘УРА’ надо получить ‘УРА. ‘).
8. В данной строке вставьте пробел после каждого символа.
9. Переверните введенную строку (например, из ‘ДИСК’ должно получиться ‘КСИД’).
10. В данной строке удалите все пробелы.
11. Строка представляет собой запись целого числа. Составьте программу ее перевода в соответствующую величину целого типа.
Практикум
Работа 3.8. Программирование обработки строк символов
Задание
Составить на Паскале программу решения поставленной задачи по обработке символьных строк. По возможности, использовать подпрограммы. В последующих задачах подразумевается, что слова в тексте (в строке) отделяются друг от друга пробелами.
Уровень 1
1. Дана строка, заканчивающаяся точкой. Подсчитать, сколько слов в строке.
2. Дана строка, содержащая английский текст. Найти количество слов, начинающихся с буквы «b».
3. В строке заменить все двоеточия (:) точкой с запятой (;). Подсчитать количество замен.
4. Дана строка. Преобразовать ее, заменив звездочками все двоеточия (:), встречающиеся среди первых n/2 символов, и заменив точками все восклицательные знаки, встречающиеся среди символов, стоящих после n/2 символов. Здесь n — длина строки.
5. В строке удалить символ двоеточие (:) и подсчитать количество удаленных символов.
6. Дана строка символов, среди которых есть одна открывающаяся и одна закрывающаяся скобки. Вывести на экран все символы, расположенные внутри этих скобок.
7. Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слов.
8. Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран все слова, содержащие три буквы. Если таких слов нет, то вывести сообщение об этом.
9. Дана строка. Преобразовать ее, удалив каждый символ * и повторив дважды подряд каждый символ, отличный от *.
10. Дана строка текста. Подсчитать количество букв «k» в последнем слове.
11. Определить, сколько раз в тексте встречается заданное слово.
Уровень 2
12. Дана строка-предложение на английском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы.
13. Дана строка. Подсчитать, сколько различных символов встречается в ней. Вывести их на экран.
14. Дана строка. Подсчитать самую длинную последовательность подряд идущих букв «а».
15. Имеется строка, содержащая буквы латинского алфавита и цифры. Вывести на экран длину наибольшей последовательности цифр, идущих подряд.
16. Дана строка. Указать те слова, которые содержат хотя бы одну букву «k».
17. Дана строка. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой.
18. Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т. е. является ли оно палиндромом).
19. В записке слова зашифрованы — каждое из них записано наоборот. Расшифровать сообщение.
20. Статистика. Дан текст. Написать программу, определяющую процентное отношение строчных и прописных букв к общему числу символов в нем.
21. Проверить, одинаковое ли число открывающихся и закрывающихся скобок в данной строке и правильно ли они расставлены, т. е. для каждой открывающей скобки есть соответствующая закрывающая скобка.
Уровень 3
22. Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в тексте.
23. Расстояние между двумя словами равной длины — это количество позиций, в которых эти слова различаются. В заданном предложении найти пару слов заданной длины с максимальным расстоянием.
24. Форматирование текста. Дан текст, состоящий из предложений, разделяемых точками. Напишите программу, производящую следующее форматирование: после каждой точки в конце предложения должен стоять хотя бы один пробел; первое слово в предложении должно начинаться с прописной буквы.
Замечание. Текст может быть как на русском, так и на английском языке.
25. Лишние пробелы. Дана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишние пробелы. Пробел считается лишним, если он:
• стоит в начале строки;
• стоит в конце строки;
• следует за пробелом.
26. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова (разделенные одним пробелом), но расположенные в обратном порядке.
27. Составить программу преобразования натуральных чисел, записанных в римской нумерации, в десятичную систему счисления.
28.
а) Дана строка-предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных местах, а затем, в обратном порядке, все символы, расположенные на нечетных местах. (Например, строка ‘Программа’ превратится в ‘ргамамроП’.)
б) Запрограммировать решение обратной задачи (расшифровки).
лабы по информатике, егэ
лабораторные работы и задачи по программированию и информатике, егэ по информатике
JavaScript урок 2. Функции для работы с типами данных, методы ввода и вывода данных
JavaScript функции для работы с типами данных
Иногда в программе требуется преобразовать тип переменной. Рассмотрим основные функции, связанные с преобразованием типов:
преобразует указанную в параметре строку в целое число. Если есть второй параметр — система счисления — преобразование происходит по указанному основанию системы счисления (8, 10 или 16):
parseInt(«3.14») // результат = 3 parseInt(«-7.875») // результат = -7 parseInt(«435») // результат = 435 parseInt(«Вася») /* результат = NaN, то есть не является числом */ parseInt(«15» ,8) // результат = 13
преобразует указанную строку в число с плавающей разделительной точкой (десятичной):
parseFloat(«3.14») // результат = 3.14 parseFloat(«-7.875») // результат = -7.875 parseFloat («435») // результат = 435 parseFloat («Вася») /* результат = NaN, то есть не является числом */ parseFloat («17.5») // результат = 17.5
x = Number(x) // к числу x = String(x) // к строке x = Boolean(x) // к булеву типу
2. Компактные преобразования:
x = +x // к числу x = x + » // к строке x = !!x // к булеву типу
Функция javascript isNaN(значение)
служит для определения того, является ли значение выражения числом:
isNaN(123) /* результат false (то есть это — число) */ isNaN(«50 рублей») /* результат true (то есть это — не число) */
var a=8; var b=»pi»; var S=a*b; // S=NaN
В качестве значения переменной может быть undefined — не определено. Такое случается, когда переменная создана, но значение ей не присвоено:
var b; document.write(b); // b=undefined
Для того чтобы узнать текущий тип данных конкретной переменной в javascript используется функция typeof :
typeof 33 // возвращает строку «number», typeof «A String» // возвращает строку «string», typeof true // возвращает строку «boolean», typeof null // возвращает строку «object»
Число в 1С 8.3 — функции работы с числами
Число в 1С 8 — значение примитивного типа Число. Числовым типом может быть представлено любое десятичное число. С числовыми данными возможно совершать основные арифметические операции: сложение, вычитание, умножение и деление. Максимальное количество разрядов для числа в 1с 8: 38 знаков.
Литералы числа: набор цифр вида: [+|-]<0|1|2|3|4|5|6|7|8|9>[.<0|1|2|3|4|5|6|7|8|9>] В качестве разделителя целой и дробной части используется «.» (точка).
Пример 1. Создадим числовую переменную
Преобразование значений другого типа в число
Преобразовать в число можно значения строкового типа, либо логического типа (Булево). Значение типа Булево преобразуется в число по следующим правилам:
- Ложь преобразуется в 0;
- Истина преобразуется в 1.
Значение типа Строка преобразуется в число в том случае, если оно является строковым представлением литерала численного типа.
Для преобразования существует специальная функция Число( ), которая возвращает полученное число, если преобразование удалось и выдает сообщение об ошибке в противном случае.
Пример 2. Преобразовать в 1с число строку «1.25»
После выполнения данного кода в переменной ПолученноеЧисло будет содержаться числовое значение 1.25
Пример 3. Преобразовать в число строку «Привет мир!»
При попытке выполнить данный код будет выдано сообщение об ошибке: «Преобразование значения к типу Число не может быть выполнено».
Функции работы со значениями типа Число в 1с 8.3
В данном разделе будут рассмотрены основные функции работы с числами в 1с 8 и приведены примеры их использования.
Цел( ). Возвращает целую часть числа переданного в параметре.
Пример 4. Определить делится ли число 121 на 11.
Результатом выполнения данного кода будет вывод на экран сообщения «Делится нацело».
Окр( , , ). Функция округляет число, переданное в первом параметре, до знака после запятой переданного во втором параметре. Значение разрядности может быть и нулевым (округление до целого) и отрицательным (округление до соответствующего разряда целой части). Параметр РежимОкругления может принимать значения:
- 0 (или РежимОкругления.Окр15как10). Округляет в меньшую сторону, то есть при округлении 1.5 будет возвращено 1;
- 1 (или РежимОкругления.Окр15как20). Округляет в большую сторону, то есть при округлении 1.5 будет возвращено 2;
Пример 5. Для того чтобы лучше разобраться с принципами округления рассмотрим округление до целого в меньшую и большую стороны, на ряде чисел от 1.1 до 1.9
Pow( , ). Возводит число переданное в первом параметре в степень переданную во втором параметре.
Пример 6. Извлечь квадратный корень из числа 144, а затем возвести его в квадрат, в итоге снова должно получится число 144.
Результатом исполнения кода будет вывод на экран числа 144.
Функции для работы с символьными строками.doc — Поурочный план на тему «Функции для работы с символьными строками» (9 класс)
Урок №18 Класс: 9 Дата: ____________________
Тема: Функции для работы с символьными строками
Цели урока:
Учебная:
Продолжить применять на практике работу с символьными
строками.
Развивать у учащихся логическое мышление.
Развивающая:
Воспитательная: Воспитывать у учащихся чувство ответственности, бережное
отношение к технике.
Тип урока: изучение нового материала
Ход занятия:
I.
II.
Организационный момент.
перекличку учащихся.
Проверить готовность кабинета к занятиям, провести
Проверка домашнего задания.
Закрепить теоретический материал предыдущего урока.
Проверить правильность решения домашних задач.
III. Объяснение нового материала.
Задача 1: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилияинициалы».
Пример:
Введите имя, фамилию и отчество:
Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.
Алгоритм:
•
•
•
•
•
найти первый пробел и выделить имя
удалить имя с пробелом из основной строки
найти первый пробел и выделить отчество
удалить отчество с пробелом из основной строки
«сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…
program qq;
var s, name, otch: string;
n: integer;
begin
writeln(‘Введите имя, отчество и фамилию’);
readln(s);
n := Pos(‘ ‘, s);
name := Copy(s, 1, n1); < вырезать имя >
Delete(s, 1, n);
n := Pos(‘ ‘, s);
otch := Copy(s, 1, n1); < вырезать отчество >
Delete(s, 1, n); < осталась фамилия >
s := s + ‘ ‘ + name[1] + ‘.’ + otch[1] + ‘.’;
writeln(s);
end.
Задача 2: Ввести в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести инициалы
и фамилию.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
Результат:
П.С. Иванов
Задача 3: Ввести имя файла (возможно, без расширения) и изменить его расширение на «.exe».
Пример:
Введите имя файла: Введите имя файла:
qqq qqq.com
Результат: Результат:
qqq.exe qqq.exe
Задача 4: с клавиатуры вводится символьная строка, представляющая собой сумму двух целых
чисел, например:
12+35
Вычислить эту сумму:
12+35=47
Алгоритм:
1) найти знак «+»
2) выделить числа слева и справа в отдельные строки
3) перевести строки в числа
4) сложить
5) вывести результат
Из строки в число:
s := ‘123’;
Val ( s, N, r ); < N = 123 >
< r = 0, если ошибки не было
r – номер ошибочного символа>
s := ‘123.456’;
Val ( s, X, r ); < X = 123.456 >
Из числа в строку:
N := 123;
Str ( N, s ); < '123' >
X := 123.456;
Str ( X, s ); < '1.234560E+002' >
Str ( X:10:3, s ); < ' 123.456' >
program qq;
var s, s1, s2: string;
r, n, n1, n2, sum: integer;
begin
writeln(‘Введите выражение (сумму чисел):’);
readln(s);
n:= Pos(‘+’, s);
s1:= Copy(s, 1, n1);
s2:= Copy(s, n+1, Length(s)n);
Val(s1, n1, r);
Val(s2, n2, r);
sum:= n1 + n2;
writeln(n1, ‘+’, n2, ‘=’, sum);
end.
Задача 5: Ввести арифметическое выражение: разность двух чисел. Вычислить эту разность.
Пример:
2512
Ответ: 13
Задача 6: Ввести арифметическое выражение: сумму трёх чисел. Вычислить эту сумму.
Пример:
25+12+34
Ответ: 71
Домашнее задание:
Задача 7: Ввести арифметическое выражение c тремя числами, в котором можно использовать
сложение и вычитание. Вычислить это выражение.
Пример:
Пример:
25+12+34
Ответ: 71
Пример:
2512+34
Ответ: 47
25+1234
Ответ: 3
Пример:
251234
Ответ: 21
Задача 8: Ввести арифметическое выражение c тремя числами, в котором можно использовать
сложение, вычитание и умножение. Вычислить это выражение.
Пример:
Пример:
25+12*3
Ответ: 61
Пример:
2512+34
Ответ: 47
25*234
Ответ: 16
25*2*3
Ответ: 150
Пример:
Как стать программистом
Обучение основам программирования на C для чайников.
Страницы
Последние новости
YoungCoder теперь и на Stepikе. Записывайтесь: https://vk.cc/75rISy
Чтобы записаться на курс, необходимо зарегистрироваться на Степике: https://vk.cc/75rIC4
Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS
воскресенье, 11 августа 2013 г.
Урок 15. Некоторые стандартные функции работы со строками.
Прочитайте улучшенную версию этого урока «Стандартные функции работы со строками».
В новой версии:
- Ещё более доступное объяснение
- Дополнительные материалы
- 8 задач на программирование с автоматической проверкой решения
Функция strlen ().
Рис.1 Программа, иллюстрирующая работу функции strlen(). |
Рис.2. Иллюстрация работы программы Листинг 15.2 |
Функции сравнения строк.
Рис.3. Сравнение строк функцией strcmp() |
Рис.4. Сравнение частей строк, с помощью функции strncmp(). |
Функции изменения регистра строки.
Рис.5. Изменение регистра строки функциями strupr() и strlwr(). |
Функции объединения строк.
strcat(str1,str2); // приклеиваем к str1 строку str2
printf( «%s\n» , str1); // выводим str1
return (0);
>
Рис.6. Склеивание двух строк функцией strcat(). |
Рис.7. Использование функции strncat(). |
Если Вам понравился этот урок, расскажите о нем вашим друзьям. В этом Вам могут помочь кнопки основных социальных сетей, расположенные ниже. Вам остается всего лишь кликнуть по любой из них.
9 комментариев :
решал задачку с перевёртышами из прошлого урока. возник вопрос
#include «stdio.h»
#include «string.h»
int main(void) <
char str1[100],str2[100];
fgets(str1,100,stdin);
strlwr(str1);
printf(«%s\n», str2);
return(0);
почему при выводе показателя str2, который я до этого приравнял к str1, появляется «мусор»?
Потому что, вот так просто нельзя копировать строки, к сожалению. =))) Тут нужно либо посимвольно с использование цикла, либо специальными функциями пользоваться.
В листинге 15.5 комментарии поменять местами надо)
И действительно. Спасибо за бдительность! )
А мне программа из листинга 15.2 при вводе Hellow World выдает -1098753604. Это норма?
Переписывал задание 5 прошлого урока при помощи изученных функций. Возник вопрос, почему ответ выводится не на экран а в файл «in.txt» и почему выводит ответ, что строка состоит из 0 символов.
#define _CRT_SECURE_NO_WARNINGS
#include
#include
char fun1(char arr[]);
int main(void)
<
char str1[200];
fun1(str1);
char mass[28] = < 0 >, c = 0;
freopen(«D:\\in.txt», «r», stdin);
while (c = getchar())
<
if (c == EOF) break;
mass[27]++;
if (c == 32) mass[26]++;
if (c > 96 && c 0) printf(«%c — %d\n», i + 97, mass[i]);
return(0);
>
char fun1(char arr[])
<
freopen(«D:\\input.txt», «r», stdin);
gets(arr);
freopen(«D:\\in.txt», «w», stdout);
_strlwr(arr);
puts(arr);
return (0);
>
в последнем я так понял ошибка вылезет потому что str1[10], это при том что символов выйдет 11. думаю я прав, компилировать правда не стану
Стандартные процедуры и функции для целых и вещественных чисел, преобразование типов числовых данных
В этом уроке мы рассмотрим основные Стандартные процедуры и функции для целых и вещественных чисел, а так же рассмотрим некоторые способы их преобразования.
Работа с переменными целого типа (арифметические операции).
Целочисленное деление (div) отличается от обычной операции деления тем, что делит число нацело с отбрасыванием остатка
Например: 7 div 3 = 2 или 5 div 4 = 1
Деление по модулю (mod) вычисляет остаток, полученны й при выполнении целочисленного деления
Например: 11 mod 7 = 4 или 13 mod 6 = 1
Работа с переменными целого и вещественного типа. Преобразование типов числовых данных.
Уроки по программированию
C, C++, Java, Assembler
Управление
Урок 9.8. Функции с переменным числом параметров
9.8. Функции с переменным числом параметров
В С++ можно создавать функции с переменным числом параметров. Параметры, их количество и типы, становятся известны только во время вызова функции. Формат описания функций с переменным числом параметров:
( , …) < > |
Здесь:
– тип возвращаемого значения,
– список параметров известных до вызова функции.
После списка явных параметров следует необязательная запятая и троеточие, которое сообщает компилятору, что контроль типов и количества параметров при вызове функции не следует.
При создании функций с переменным числом параметров необходимо предусмотреть способ определения количества параметров и их типов. Используется для этих целей два способа:
- один из параметров определяет число параметров функции;
- в списке явных параметров задается параметр, указывающий на конец списка параметров.
Если не один из этих способов не используется, тогда можно использовать специальный набор макроопределений.
Параметры функции помещаются в стек, при этом первый параметр оказывается в вершине стека. Переход от одного параметра к другому осуществляется с помощью указателей.
Пример 1. Задание числа дополнительных параметров с помощью первого параметра. Функция вычисляет сумму значений дополнительных параметров. Список явных параметров состоит из одного параметра, который задает число дополнительных параметров.
#include #include #include vo
#include double product(double a, . ) < double b; if (a)//проверяем на отсутствие дополнительных параметров < b = 1.0; //b - произведение //цикл до тех пор, пока p не укажет на 0 for (double* p=&a; *p; p++) b *= *p; >else b = 0.0; return b; > vo );
//получение значения очередного параметра типа type
type va_arg(va_list param, type);
//организации корректного выхода из функции
void va_end(va_list param);
Кроме перечисленных макросов, в файле stdarg.h определен специальный тип данных va_list, который является указателем. Именно такого типа должны быть первые операнды, используемые при обращении к макрокомандам va_start, va_arg, va_end.
Определим порядок использования макросов. В теле функции обязательно определяется переменная типа va_list: va_list f. С помощью макроса va_start переменная f связывается с первым необязательным параметром, т.е. с началом списка неизвестной длины:
va_start(f, )
Теперь с помощью указателя f можно получить значение фактического параметра, задав его тип. Макрос
va_arg(f, type);
позволяет получить значение очередного параметра типа type. Кроме того, макрос меняет значение указателя f на адрес следующего фактического параметра в списке.
Макрокоманда va_end предназначена для организации корректного выхода из функции с переменным числом параметров: va_end(f).
Приведем пример использования макросов в функции конкатенации любого числа строк. Строки передаются функции с помощью списка указателей. В конце списка помещается нулевой указатель NULL.
Урок 8. Функции
В этом уроке мы познакомимся с еще одним очень важным столпом программирования – функциями.
Немного математики
Мы уже использовали математические выражения в предыдущих уроках. Например, мы вводили выражения в строку чтобы получить ответ:
Чтобы увидеть результат вычислений, мы должны вводить выражение заново.
Создадим скрипт arithmetic.py и запишем в него следующие инструкции:
Здесь мы используем простую инструкцию print, строку текста и математические выражения. При запуске скрипта, математические выражения будут выполнены.
Пробелы между символами в математических выражениях не являются обязательными. Но существует стандарт написания кода PEP8, который рекомендует это делать.
Когда вы сохраните и выполните скрипт вы увидите следующее:
Минутку… 5 / 2 = 2… Это вычисление не выглядит точным. К сожалению, разработчики механизма деления сделали его немного нелогичным для человека, но технически правильным. Когда мы делим два целых числа, то результат является также целочисленным, а остаток просто отбрасывается.
Чтобы решить эту задачу с понятным нам результатом, необходимо добавить следующую строку в начало скрипта:
Рекомендуем, добавлять ее в каждый скрипт, где вы используете деление целых чисел. В python версии 3.x эта задача решена привычным для человека образом. from __future__ — означает что мы импортируем функционал из будущей версии.
Если сейчас вы все же хотите совершить целочисленное деление, то используйте оператор // вместо одинарного / , например:
Это «удвоение оператора» действительно только для деления. Если вы решите применить,например, оператор **, то он возведет число в степень:
Напишем собственную функцию
Одним из многочисленных достоинств Python является легкость манипуляций с различными фрагментами кода, похожими на кубики Lego. Кубики Lego в программировании — это функции.
Функция — это, в общем, миниатюрная программа, получающая одни данные и производящая другие. Мы уже видели несколько примеров функций, например, len(). Она принимает переменную и возвращает длину этой переменной.
Создадим собственную функцию, которая будет принимать на вход число, а возвращать его квадрат.
def — это сокращение от define, что переводится, как «определить». Эта инструкция говорит о том, что мы объявляем функцию. В этом случае, мы дали функции имя square и она принимает один параметр названый number. Входной параметр называется аргументом функции. Функции могут иметь и более одного аргумента.
Вторая строка кода, является первой в теле функции. В этой строке в функции мы объявляем новую переменную sqr_num и записываем в нее значение number, возведенное в квадрат. Следующая строка возвращает значение переменной sqr_num.
Если вы вставите эти три строки в скрипт и выполните его, то ничего не произойдет. Функция ничего не делает сама по себе. Мы можем использовать функцию в коде программы после ее объявления. Например, как в следующем скрипте:
Урок алгебры для 8 класса по теме «Множества чисел»
Рациональные числа — это целые и дробные числа (обыкновенные дроби, конечные десятичные дроби и бесконечные периодические дроби).
Есть версия, что название рациональных чисел связано с латинским словом
«ratio» — разум.
Бесконечные непериодические дроби НЕ входят в множество рациональных чисел.
Поэтому число «Пи» (π = 3,14. ), основание натурального логарифма
e (e = 2,718..) или √2 НЕ являются рациональными числами.
Примеры рациональных чисел:
Множество рациональных чисел обозначается заглавной английской буквой Q (кью). Множество Q включает в себя множество целых чисел (Z) и натуральных чисел (N).
Любое рациональное число можно представить в виде дроби, у которой числитель принадлежит целым числам, а знаменатель — натуральным.
a/b, где a ∈ Z (a принадлежит целым числам), b ∈ N (b принадлежит натуральным числам).
Множество иррациональных чисел — это бесконечные непериодические дроби.
Примеры иррациональных чисел :
(число Пи ) π = 3,14159…
(основание натурального логарифма ) e = 2,71828…
Обозначается множество иррациональных чисел большой английской
буквой [ай] —I.
Среди множества чисел иррациональные числа занимают особое место. Они не входят в рациональные числа.
Иррациональные числа (в отличие от рациональных) невозможно представить в виде дроби a / b , где a ∈ Z (a принадлежит целым числам), b ∈ N ( b принадлежит натуральным числам ).
Натуральные числа — одно из старейших математических понятий.
В далёком прошлом люди не знали чисел и, когда им требовалось пересчитать предметы (животных, рыбу и т.д.), они делали это не так, как мы сейчас.
Количество предметов сравнивали с частями тела, например, с пальцами на руке и говорили: «У меня столько же орехов, сколько пальцев на руке».
Со временем люди поняли, что пять орехов, пять коз и пять зайцев обладают общим свойством — их количество равно пяти.
Натуральные числа — это числа, начиная с 1, получаемые при счете предметов. 1,2,3,4,5.
Наименьшее натуральное число — 1.
Наибольшего натурального числа не существует.
При счёте число ноль не используется. Поэтому ноль не считается натуральным числом.
Записывать числа люди научились гораздо позже, чем считать. Раньше всего они стали изображать единицу одной палочкой, потом двумя палочками — число 2, тремя — число 3
Затем появились и особые знаки для обозначения чисел — предшественники современных цифр. Цифры, которыми мы пользуемся для записи чисел, родились в Индии примерно 1 500 лет назад. В Европу их привезли арабы, поэтому их называют арабскими цифрами .
Всего цифр десять: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. С помощью этих цифр можно записать любое натуральное число.
Натуральный ряд — это последовательность всех натуральных чисел:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 .
В натуральном ряду каждое число больше предыдущего на 1.
Натуральный ряд бесконечен, наибольшего натурального числа в нём не существует.
Систему счёта (счисления), который мы пользуемся, называют десятичной позиционной .
Десятичной потому, что 10 единиц каждого разряда образуют 1 единицу старшего разряда. Позиционной потому, что значение цифры зависит от её места в записи числа, то есть от разряда, в котором она записана.
Разряды и классы (включая класс миллионов) подробно разобраны на нашем сайте в материалах для начальной школы.
Если взять десять сотен миллионов, то получим новую разрядную единицу — один миллиард или в записи цифрами.
1 000 миллионов = 1 000 000 000 = 1 млрд
Десять таких единиц — десять миллиардов, десять десятков миллиардов образуют следующую единицу — сто миллиардов.
Миллиарды, десятки миллиардов и сотни миллиардов образуют четвёртый класс — класс миллиардов.
Разряды и классы натурального числа
Рассмотрим натуральное число 783 502 197 048:
C помощью таблицы разрядов прочитаем это число. Для этого надо слева направо по очереди называть количество единиц каждого класса и добавлять название класса.
Название класса единиц не произносят, также не произносят название класса, если все три цифры в его разрядах — нули.
Теперь прочтем число 783 502 197 048 из таблицы: 783 миллиарда 502 миллиона 197 тысяч 48.
Любое натуральное число можно записать в виде разрядных слагаемых .
Числа 1, 10, 100, 1000. называются разрядными единицами . С их помощью натуральное число записывается в виде разрядных слагаемых. Так, например, число 307 898 будет выглядеть в виде разрядных слагаемых.
307 898 = 300 000 + 7 000 + 800 + 90 + 8
Следующие за миллиардом классы названы в соответствии с латинскими наименованиями чисел. Каждая следующая единица содержит тысячу предыдущих.
1 000 миллиардов = 1 000 000 000 000 = 1 триллион («три» — по латыни «три»)
1 000 триллионов = 1 000 000 000 000 000 = 1 квадриллион («квадра» — по латыни «четыре»)
1 000 квадриллионов = 1 000 000 000 000 000 000 = 1 квинтиллион («квинта» — по латыни «пять»)
Все числа пересчитать невозможно, поскольку за каждым числом следует число на единицу большее, но очень большие числа в повседневной жизни не нужны.
Однако, физики нашли число, которое превосходит количество всех атомов (мельчайших частиц вещества) во всей Вселенной.
Это число получило специальное название — гугол . Гугол — число, у которого 100 нулей.
На числовой оси целые числа выглядят так:
Наибольшего и наименьшего целого числа не существует.
Натуральные числа также называют положительными целыми числами, то есть слова «натуральное число» и «положительное целое число» означают одно и то же.
Естественно, среди целых чисел не может быть ни обыкновенных, ни десятичных дробей.
Множество целых чисел обозначается большой буквой Z.
Множество натуральных чисел (N) входит во множество целых чисел (Z).
Действительные числа – это рациональные и иррациональные числа.
Так как любое рациональное число может быть записано в виде конечной десятичной дроби или бесконечной периодической дроби , а иррациональные числа представляются бесконечными непериодическими десятичными дробями, то озвученное определение действительных чисел можно переформулировать следующим образом.
Действительные числа – это числа, которые могут быть записаны в виде конечной или бесконечной (периодической или непериодической) десятичной дроби.
Итак, по определению действительным числом является любое рациональное, а также любое иррациональное число. Это позволяет нам привести примеры действительных чисел . Например, 5 , 1 056 , −47 , 3/7 , , −5,36 , 0,45(175) , −32,149382750. , e , π , , cos3 , log 5 12 — это все действительные числа . Число нуль также является действительным числом, так как 0 – рациональное число.
Из определения действительных чисел следует, что существуют как положительные, так и отрицательные действительные числа, а нуль – ни положительное, ни отрицательное действительное число.
Действительные числа позволяют описывать величины, значения которых могут изменяться непрерывно, чего не позволяют делать рациональные и иррациональные числа по отдельности. Другими словами, действительные числа дают возможность численно выражать значение непрерывно изменяющейся величины через единичное (эталонное) значение этой величины.
В заключение этого пункта заметим, что действительные числа также называют вещественными.
Уроки 58 — 61
Работа с символьной информацией
Практикум
Практическая работа № 3.8
«Программирование обработки строк символов»
Символьный тип данных
Величина типа «символ» может принимать значения любых символов компьютерного алфавита. Символьная величина занимает 1 байт памяти, в котором хранится код этого символа, соответствующий используемой кодовой таблице. Заметим, что в Delphi наряду с однобайтовой кодировкой символов используется и двухбайтовая.
Символьная константа записывается между апострофами. Например: 1R’, ‘ + ‘, ‘9’, ‘j’.
Символьной тип называется Char. Пример описания символьных переменных:
Var c1, с2: Char;
Символьный тип относится к порядковым типам данных. Из этого следует:
• символы — упорядоченное множество;
• у каждого символа в этом множестве есть свой порядковый номер;
• между символами работает соотношение «следующий — предыдущий ».
Порядковый номер символа — это его десятичный код, который лежит в диапазоне от 0 до 255. Например, в кодовой таблице ASCII десятичный код латинской буквы ‘А’ равен 65, а цифры ‘5’ — 53. О стандартах кодирования символов рассказывалось на уроках 13 — 16 «Представление текста, изображения и звука в компьютере».
Функция Ord(x)
Ord(x) — функция от аргумента порядкового типа, которая возвращает порядковый номер значения х в этом типе данных. Если х — символьная величина, то результатом функции будет десятичный код х в кодовой таблице. Например:
Функция Chr (х)
Chr (х) — функция от целочисленного аргумента, результатом которой является символ с кодом, равным х. Например:
Поскольку коды символов лежат в диапазоне от 0 до 255, желательно тип х определять либо как byte, либо как интервальный тип 0..255.
Пример 1. Составить программу на Паскале, по которой на экран будет выводиться таблица кодировки в диапазоне кодов от 32 до 255. Напомним, что символы с кодами, меньшими 32, являются управляющими (не экранными).
Значения выводятся парами: символ — код. В одной строке располагается 10 таких пар. Вся таблица разместится в 24 строках на экране.
Принцип последовательного кодирования алфавитов
В любой кодовой таблице выполняется принцип последовательного кодирования латинского (английского) алфавита и алфавита десятичной системы счисления. Это важное обстоятельство, которое часто учитывается в программах обработки символьной информации.
При выполнении операций отношений, применительно к символьным величинам, учитываются коды этих величин. Чем больше значение кода, тем символ считается больше. Истинными являются следующие отношения: ‘А’ с ‘В’, ‘Z’ > ‘Y’, ‘а’ > ‘А’. Значение символьной переменной С является прописной (заглавной) латинской буквой, если истинно логическое выражение:
(С >= ‘А’) and (C = ’0′) and (С : String[ ]
Var Name: String[20]
Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине — 255. Например:
Var slovo: String
Строковая переменная занимает в памяти на 1 байт больше, чем указанная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не присвоено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.
Символы внутри строки индексируются (нумеруются), начиная с единицы. Каждый отдельный символ идентифицируется именем строки с индексом, заключенным в квадратные скобки. Например:
Name[5], Name[i], slovo[k+1].
Значение индекса может быть задано положительной константой, переменной, выражением целочисленного типа. Оно не должно выходить за границы описания.
Тип String и стандартный тип Char совместимы: строки и символы могут употребляться в одних и тех же выражениях.
Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операция сцепления и операции отношения.
Операция сцепления (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.
В результате получится строка:
Длина результирующей строки не должна превышать 255.
Операции отношения: =, , =, производят сравнение двух строк, в результате чего получается логическая величина (true или false). Операции отношения имеют более низкий приоритет, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки.
Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.
Функции и процедуры
Функция Copy(S, Poz, N) выделяет из строки S подстроку длиной N символов, начиная с позиции Poz. N и Роz — целочисленные выражения.
Функция Concat (SI, S2, . . ., SN) выполняет сцепление (конкатенацию) строк S1. SN в одну строку.
Функция Length (S) определяет текущую длину строки S. Результат — значение целочисленного типа.
Функция Pos (SI, S2) обнаруживает первое появление в строке S2 подстроки S1. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 не обнаружена подстрока S1, то результат равен 0.
Процедура Delete (S, Poz, N) удаляет N символов из строки S, начиная с позиции Poz.
В результате выполнения процедуры уменьшается текущая длина строки в переменной S.
Процедура Insert (SI, S2, Poz) выполняет вставку строки S1 в строку S2, начиная с позиции Poz.
Примеры программ обработки строк
Пример 1. Составить программу, формирующую символьную строку, состоящую из N звездочек (N — целое число, 1 ≤ N ≤ 255).
здесь строковой переменной А вначале присваивается значение пустой строки, обозначаемой двумя апострофами (‘ ‘). Затем к ней присоединяются звездочки.
Пример 2. В символьной строке подсчитать количество цифр, предшествующих первому символу ‘ ! ‘.
В этой программе переменная К играет роль счетчика цифр, а переменная I — роль параметра цикла. Цикл закончит выполнение при первом же выходе на символ ‘ ! ‘ или если в строке такого символа нет, то при выходе на конец строки. Символ S[I] является цифрой, если истинно отношение: ‘O’ ≤ S[I] ≤ ‘9’.
Вопросы и задания
1. Как в программе обозначается строковая константа, как определяется строковая переменная?
2. Какой может быть максимальная длина строки?
3. Составьте программу получения из слова «дисковод» слова «воск», используя операцию сцепления и функцию Сору.
4. Составьте программу получения слова «правило» из слова «операция», используя процедуры Delete, Insert.
5. В данном слове замените первый и последний символы на символ ‘*’.
6. В данном слове произведите обмен первого и последнего символов.
7. К данному слову присоедините столько символов ‘!’, сколько в нем имеется букв (например, из строки ‘УРА’ надо получить ‘УРА. ‘).
8. В данной строке вставьте пробел после каждого символа.
9. Переверните введенную строку (например, из ‘ДИСК’ должно получиться ‘КСИД’).
10. В данной строке удалите все пробелы.
11. Строка представляет собой запись целого числа. Составьте программу ее перевода в соответствующую величину целого типа.
Практикум
Работа 3.8. Программирование обработки строк символов
Задание
Составить на Паскале программу решения поставленной задачи по обработке символьных строк. По возможности, использовать подпрограммы. В последующих задачах подразумевается, что слова в тексте (в строке) отделяются друг от друга пробелами.
Уровень 1
1. Дана строка, заканчивающаяся точкой. Подсчитать, сколько слов в строке.
2. Дана строка, содержащая английский текст. Найти количество слов, начинающихся с буквы «b».
3. В строке заменить все двоеточия (:) точкой с запятой (;). Подсчитать количество замен.
4. Дана строка. Преобразовать ее, заменив звездочками все двоеточия (:), встречающиеся среди первых n/2 символов, и заменив точками все восклицательные знаки, встречающиеся среди символов, стоящих после n/2 символов. Здесь n — длина строки.
5. В строке удалить символ двоеточие (:) и подсчитать количество удаленных символов.
6. Дана строка символов, среди которых есть одна открывающаяся и одна закрывающаяся скобки. Вывести на экран все символы, расположенные внутри этих скобок.
7. Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слов.
8. Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран все слова, содержащие три буквы. Если таких слов нет, то вывести сообщение об этом.
9. Дана строка. Преобразовать ее, удалив каждый символ * и повторив дважды подряд каждый символ, отличный от *.
10. Дана строка текста. Подсчитать количество букв «k» в последнем слове.
11. Определить, сколько раз в тексте встречается заданное слово.
Уровень 2
12. Дана строка-предложение на английском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы.
13. Дана строка. Подсчитать, сколько различных символов встречается в ней. Вывести их на экран.
14. Дана строка. Подсчитать самую длинную последовательность подряд идущих букв «а».
15. Имеется строка, содержащая буквы латинского алфавита и цифры. Вывести на экран длину наибольшей последовательности цифр, идущих подряд.
16. Дана строка. Указать те слова, которые содержат хотя бы одну букву «k».
17. Дана строка. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой.
18. Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т. е. является ли оно палиндромом).
19. В записке слова зашифрованы — каждое из них записано наоборот. Расшифровать сообщение.
20. Статистика. Дан текст. Написать программу, определяющую процентное отношение строчных и прописных букв к общему числу символов в нем.
21. Проверить, одинаковое ли число открывающихся и закрывающихся скобок в данной строке и правильно ли они расставлены, т. е. для каждой открывающей скобки есть соответствующая закрывающая скобка.
Уровень 3
22. Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в тексте.
23. Расстояние между двумя словами равной длины — это количество позиций, в которых эти слова различаются. В заданном предложении найти пару слов заданной длины с максимальным расстоянием.
24. Форматирование текста. Дан текст, состоящий из предложений, разделяемых точками. Напишите программу, производящую следующее форматирование: после каждой точки в конце предложения должен стоять хотя бы один пробел; первое слово в предложении должно начинаться с прописной буквы.
Замечание. Текст может быть как на русском, так и на английском языке.
25. Лишние пробелы. Дана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишние пробелы. Пробел считается лишним, если он:
• стоит в начале строки;
• стоит в конце строки;
• следует за пробелом.
26. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова (разделенные одним пробелом), но расположенные в обратном порядке.
27. Составить программу преобразования натуральных чисел, записанных в римской нумерации, в десятичную систему счисления.
28.
а) Дана строка-предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных местах, а затем, в обратном порядке, все символы, расположенные на нечетных местах. (Например, строка ‘Программа’ превратится в ‘ргамамроП’.)
б) Запрограммировать решение обратной задачи (расшифровки).