Примеры решения задач

Задача 1. Дан массив действительных чисел, состоящий из 3 строк и 5 столбцов. Вычислить произведение всех элементов массива.

Program pr1;

CONST N=3; M=5;

TYPE MAS=array [1..N,1..M] of real;

Var b: MAS;

i: 1..N;

j: 1..M;

p:real;

BEGIN

Writeln(‘Введите элементы массива’);

For i:=1 to n do

For j:=1 to m do

Readln(b[i,j]);

{Вывод значений массива}

For i:=1 to n do

begin

For j:=1 to m do

Write (b[i,j]); {Вывод элементов одной строки матрицы}

Writeln; { переход на следующую строку экрана}

end;

p:=1;

For i:=1 to n do

For j:=1 to m do

p:=p*b[i,j];

Writeln(‘Произведение = ’,p:7:2);

end.

Задача 2. Дан двумерный массив A[N,M]

Сформировать массив B[N,M], где

SQR(A[I.J]), если I- НЕЧЕТНОЕ;

B[I,J] =

SQRТ(A[I.J]), если I- ЧЕТНОЕ;

Program pr3;

CONST N=3; M=5;

TYPE MAS=array [1..N,1..M] of real;

Var a,b: MAS;

i: 1..N;

j: 1..M;

BEGIN

Writeln(‘Введите элементы массива’);

For i:=1 to N do

For j:=1 to M do

Readln(a[i,j]);

{Вывод значений массива}

For i:=1 to N do

begin

For j:=1 to M do

Write (a[i,j]:5:1);

Writeln;

end;

For i:=1 to N do

if i/2= int(i/2) Then For j:=1 to M do

b[i,j]:=sqrt (a[i,j])

Else For j:=1 to M do

b[i,j]:=sqr (a[i,j])

For i:=1 to N do

begin

For j:=1 to M do

Write (b[i,j]:7:2);

Writeln;

end;

end.

9.1 Дан двухмерный массив целых чисел. Составить программу:

а) вывода на экран элемента, расположенного в правом верхнем углу массива;

б) вывода на экран элемента, расположенного в левом нижнем углу массива;

в) вывода на экран любого элемента второй строки массива;

г) вывода на экран любого элемента третьего столбца массива;

д) вывода на экран любого элемента массива.

9.2 Дан двухмерный вещественный массив. Поменять местами:

а) элементы, расположенные в верхнем правом и нижнем левом углах;

б) элементы, расположенные в нижнем правом и верхнем левом углах;

9.3 Известен номер строки, на которой расположен элемент главной диагонали двумерного массива целых чисел. Вывести на экран значение этого элемента.

9.4 Вывести на экран (в одну строку):

а) все элементы главной диагонали целочисленного массива, начиная с элемента, расположенного в левом верхнем углу;

б) все элементы главной диагонали вещественного массива, начиная с элемента, расположенного в правом нижнем углу.

9.5 Заменить значения всех элементов главной диагонали целочисленного массива на нулевые.

9.6 Заменить значения всех элементов побочной диагонали целочисленного массива на значения, равные 100.

9.7 Определить:

а) сумму элементов главной диагонали вещественного массива;

б) сумму элементов побочной диагонали целочисленного массива;

в) среднее арифметическое элементов главной диагонали массива целых чисел;

г) среднее арифметическое элементов побочной диагонали вещественного массива;

д) минимальный (максимальный) элемент главной диагонали целого массива;

е) максимальный (минимальный) элемент побочной диагонали вещественного массива;

ж) координаты первого максимального элемента главной диагонали вещественного массива;

з) координаты первого минимального элемента главной диагонали целочисленного массива.

9.8 Верно ли, что сумма элементов главной диагонали целочисленного массива не превышает 100?

9.9 Дан двухмерный массив вещественных чисел.

а) вывести на экран все элементы пятой строки массива;

б) вывести на экран все элементы третьей строки массива, начиная с по следнего элемента этой строки;

в) вывести на экран все элементы s-го столбца массива;

г) заменить значения всех элементов второй строки массива на число 5;

д) заменить значения всех элементов пятого столбца на число 10.

е) определить максимальный (минимальный) элемент третьего столбца;

9.10 Дан двухмерный целых чисел массив. Составить программу:

а) расчета произведения двух любых элементов любой строки массива

б) сумму всех элементов любой строки массива;

9.11 Дан двумерный массив целых чисел. Определить:

а) в каком столбце массива сумма элементов меньше, в первом или в последнем;

б) в какой строке произведение элементов больше, во второй или в третьей.

9.12 Заполнить двумерный массив размером 7х7 следующим образом:

а)               б)              
                               
                               
                               
                               
                               
                               

9.13 * Заполнить массив 5х5 следующим образом:

а)           б)          
                       
                       
                       
                       

9.14 *Заполнить двумерный массив размером nxn числами 1, 2,... n2, расположенным в нем по спирали: (см 9.13б)

9.15 Дан двухмерный целочисленный массив размером 10 х 10. Вывести на экран часть массива:

а) расположенную выше главной диагонали;

б) расположенную ниже главной диагонали;

в) расположенную выше побочной диагонали;

г) расположенную ниже побочной диагонали;

9.16 Дан двумерный массив целых чисел:

а) в каждом его столбце найти максимальный (минимальный) элемент;

б) координаты максимального (минимального) элемента;

в) сумму нечетных элементов в каждом столбце (строке);

г) количество элементов кратных А или В.

д)* найти строку с максимальной суммой элементов;

е)* найти столбец с минимальной суммой элементов.

9.17 Даны два двумерных вещественных массива одинаковых размеров.

а) создать третий массив такого же размера, каждый элемент которого равен сумме соответствующих элементов двух первых массивов.

б) создать третий массив такого же размера, каждый элемент которого равен 100, если соответствующие элементы двух первых массивов имеют одинаковый знак, и равен нулю в противном случае.

9.18 * Дан двухмерный массив размером nxn, заполненный целыми числами.

а) все его элементы, кратные трем, записать в одномерный массив.

б) все его положительные элементы записать в один одномерный массив, а остальные - в другой.

9.19 Дан двухмерный массив целых чисел.

а) сформировать одномерный массив, каждый элемент которого равен сумме четных положительных элементов соответствующего столбца двумерного массива.

б) сформировать одномерный массив, каждый элемент которого равен количеству нечетных отрицательных элементов соответствующего столбца двумерного массива.

в) сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов соответствующей строке двухмерного массива, кратных 3 или 7.

г) сформировать одномерный массив, каждый элемент которого равен количеству положительных элементов соответствующего столбца двухмерного массива, кратных 4 или 5.

9.20 * Дан двумерный массив из четного числа столбцов. Поменять местами первый со вторым, третий - с четвертым и т.д.

9.21 Дан двухмерный массив. а) удалить из него k-ую строку, s-ый столбец.

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ

9.22 Напечатать строку, образованную символами, расположенными в четырех углах символьного массива (в любом порядке).

9.23 Составить программу, которая печатает слово, образованное несколькими идущими подряд символами с заданными номерами, расположенными в некоторой строке символьного массива.

9.24 Дан двумерный массив размером 5х5, заполненный буквами. Напечатать слово, образованное элементами массива, отмеченными звездочкой (*), при прочтении их:

а) слева направо в каждой строке, начиная с первой;

б) сверху вниз в каждом столбце, начиная с первого.

9.25 Напечатать слова, образованные четными элементами каждой строки массива.

9.26 В каждой строке двумерного символьного массива найти количество букв «Е», расположенных справа от буквы «Н»

9.27 Проверить, одинаковые ли строки целочисленного массива с номерами N и М.

9.28 Найти:

а) номер первой по порядку строки целочисленного массива, содержащей наибольшее число цифр;

б) номер первого по порядку столбца символьного массива, содержащего наибольшее число пробелов;

в) номер последней по порядку строки символьного массива, содержащей наибольшее количество букв «Ш» и «Щ».

9.29 Шахматную доску представить в виде квадратного символьного массива размером 8 х 8. Заполнить массив таким образом, чтобы элементы массива, соответствующие черным полям, имели значение Х. Левое нижнее поле на шахматной доске всегда черное.

Символы и строки.

Помимо числовой информации компьютер может обрабатывать символьную информацию. Turbo Pascal оперирует информацией, которая может быть представлена отдельными символами или строками символов.

Символы.

Для хранения и обработки отдельных символов используются переменные типа. Значением переменной типа char может быть любой символ. Переменная символьного типа должна быть объявлена в разделе описания переменных так:

Имя:;

где имя – имя переменной символьного типа, char – ключевое слово обозначения символьного типа.

Примеры: otv: char;

ch: char;

Как и любая переменная программы, переменная типа char может получить свое значение в результате выполнения команды присвоения или ввода (read, readln). Если переменная типа char получает значение в результате выполнения операции присвоения, то справа от знака:= должно стоять выражение типа char или символьная константа – символ, заключенный в двойные кавычки.

В результате выполнения программы:

var

c1, c2, otvet: char;

begin

c1:=’*‘;

c2:=c1;

write (‘Вы хотите научиться программировать?’);

readln (otvet);

writeln (c1, ‘Ваш ответ: ’, otvet, c2);

readln;

end.

переменная с1 получает значение присваиванием значения константы, с2 – присваиванием значения переменной с1, а значение переменной otvet вводится с клавиатуры.

Обратите внимание: переменная otvet объявлена как char, т.е. один символ. Поэтому если в ответ на вопрос программы будет введено, например слово «Да», то переменная otvet получит значение «Д».

Переменную типа char можно сравнивать с другой переменной типа char или с символьной константой. Сравнение основано на том, что каждому символу поставлено в соответствии число, причем символу ‘0’ соответствует число меньшее чем символу ‘9’, а символу ‘A’ – меньшее, чем ‘B’, символу ‘Z’ – меньшее чем ‘a’. Таким образом можно записать: ‘0’<’1’<…<’9’<…<’A’<’B’<…<’Z’<’a’<’b’<…<’z’.

Символам русского алфавита соответствуют числа большие, чем символы латинского алфавита.

Задание: С клавиатуры вводится символ, определить чем он является буквой гласной или согласной, цифрой, знаком препинания или каким другим символом.

Строки.

Последовательность символов называют строкой. Для хранения и обработки последовательностей символов (строк) можно использовать массив символов. Например, если программа должна вводить с клавиатуры фамилии людей. Эту задачу можно решить вводя строки в символьный массив, длина которого выбирается равной количеству букв самой длиной фамилии. Однако в этом случае на клавиатуре каждый раз приходится набирать строку длиной равной ровно столько символов сколько в самой длиной фамилии (дополняя короткие фамилии пробелами), что не очень удобно. Поэтому помимо массивов из символов есть такое понятие как строки, это переменные типа string, Значением переменной типа string может быть любая последовательность символов длиной не более 255.

Переменная типа string должна быть объявлена в разделе описания переменных так:

Имя: string;

или

Имя: string[длина];

где Имя – имя переменной; string – ключевое слово обозначения строкового типа; длина – константа типа integer, определяющая максимальную длину последовательности символов, которая может быть присвоена переменной.

Примеры: name: string [30]:

s: string;

Если при объявлении переменной длина не указывается, то предполагается что длина строки равняется 255 символам, т.е. объявления s: string; и s:string[255]; эквивалентны.

В тексте программы последовательность символов, являющаяся строкой, заключается в одинартные кавычки. Например, чтобы присвоить строковой переменной parol значение, нужно записать:

parol:=’большой секрет’;

или parol:=’2004’;

Утверждение parol:=2004; приведет к ошибке при компиляции, так как тип переменной не соответствует типу константы.

Переменную типа string можно сравнивать с другой переменной или константой типа string, используя операторы =, <, >, <=, >=, <>. Строки сравниваются посимвольно от первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом. Например: Иванов – 1 строка, Иванов – 2 строка, тогда они равны; васильев – 1 строка, Васильев – 2 строка, тогда 1 строка больше 2; Алексеев – 1 строка, петров – 2 строка, тогда 1 строка меньше 2; Иванова – 1 строка, Иванов – 2 строка, тогда 1 строка больше 2.

Кроме операций сравнения к строковым переменным и константам можно применить оператор сложения, в результате выполнения которого получается новая строка, полученная склеиванием двух или более строк. Например: name:=’Иван’;

fam:=’Иванов’;

fn:= fam +’ ‘+name;

переменная fn получит значение ’Иванов Иван’.

Задачи:

1. Составить программу:

а) которая запрашивает имя человека и повторяет его на экране;

б) которая запрашивает имя человека и повторяет его на экране с приветствием;

в) которая запрашивает название футбольной команды и повторяет его на экране со словами: "Это чемпион!".

2. Дано слово. Получить и вывести на экран буквосочетание, состоящее из его второго и четвертого символов.

3. Дано слово. Получить и вывести на экран буквосочетание, состоящее из его третьего и последнего символов.

4. Составить программу, которая запрашивает отдельно имя и отдельно фамилию, а затем выводит их как одну символьную строку.

5. Дано слово. Вывести на экран его третий символ.

6. Дано слово. Вывести на экран его последний символ.

7. Дано слово. Вывести на экран его k -й символ.

8. Дано слово. Определить, одинаковы ли второй и четвертый символы в нем.

9. Дано слово. Верно ли, что оно начинается и оканчивается на одну и ту же букву?

10. Даны два слова. Верно ли, что первое слово начинается на ту же букву, которой оканчивается второе слово?

Turbo Pascal предоставляет несколько полезных при работе со строками функций и процедур.

Функция length.

Функция length возвращает длину строки. У функции один параметр – переменная строкового типа. Возвращаемое значение функции (целое число) – количество символов, из которых состоит строка, без учета начальных и завершающих пробелов. Например length(’Иванов’) равно 6, а значение length(’ Невский проспект ’) равно 16, так как при вычислении длины строки функция не учитывает начальные и завершающие пробелы.

Примеры определения длины строки

• k:=length(‘мир’); k=3

• s:=‘Кот и пес’;

n:= length(s); n=9

• s1=‘’;

i:= length(s1); i=0

‘’ - пустая строка!

Задачи:

1. Дано название футбольного клуба. Определить количество символов в нем.

2. Дано название города. Определить четно или нет количество символов в нем.

3. Даны две фамилии. Определить какая из них длиннее.

Функция copy.

Функция copy позволяет выделить фрагмент строки. В общем виде обращение к функции copy выглядит так: (строка, p, n);

где строка – переменная строкового типа, содержащая строку, фрагмент которой надо получить; p – номер первого символа в строке строка, с которого начинается выделяемая подстрока; n – длина выделяемой подстроки. Например, в результате выполнения команд:

s:= ‘Инженер Иванов’;

fam:= copy (s, 9, 6);

значением переменной fam будет строка ‘Иванов’.

Примеры выделения символов

• s:=‘информатика’;

s1:=copy (s, 3, 5); s1=‘форма’

s2:=copy (s, 8, 2)+ copy (s, 3, 1); s2=‘тиф’

Задачи:

1. Дано слово. Получить его часть, образованную второй, третьей и четвертыми буквами.

2. Дано слово, состоящее из четного числа букв. Вывести на экран его первую половину, не используя оператор цикла.

3. Дано слово. Получить его часть, образованную идущими подряд буквами, начиная с m -й и кончая n -й.

4. Из слова "яблоко" путем вырезок его букв получить слова "блок" и "око".

5. Из слова "информатика" путем вырезок его букв получить слова "форма" и "тик".

Процедура insert.

Процедура insert позволяет добавить часть строки в исходную строку. В общем виде обращение к процедуре выглядит так: Insert (подстрока, строка, p);

где подстрока – строковая константа или переменная, которую необходимо добавить в строковую переменную строка; p – номер первого символа в строке строка, с которого начинается добавление подстроки.

Примеры вставки символов

• s:=‘мама’;

insert (‘очк’, s, 4); s=‘мамочка’

• s1:=‘рог’;

s2:=‘по’;

insert (s1, s2, 3); s2=‘порог’

Задачи:

1. Дано слово. Вставить букву "т" после k -й буквы.

2. Дано слово. Вставить заданную букву после первой буквы "и".

3. Дано слово. Переставить его первую букву на место последней. При этом вторую, третью,..., последнюю буквы сдвинуть влево на одну позицию.

Процедура delete.

Процедура delete позволяет удалить часть строки. В общем виде обращение к процедуре выглядит так: delete (Строка, p, n);

где строка – переменная строкового типа; p – номер символа, с которого начинается удаляемая подстрока; n – длина удаляемой подстроки.

Например, в результате выполнения команд:

s:= ‘Город Санкт-Петербург’;

delete (s, 7, 6);

значение переменной s будет строка ‘Город Петербург’.

Примеры удаления символов

• s:=‘котик’;

delete (s, 4, 2); s=‘кот’

• s:=‘информатика’;

delete (s, 1, 2);

delete (s, 6, 4); s=‘форма’

Задачи:

1. Дано слово:

а) удалить из него третью букву; б) удалить из него k -ю букву.

2. Дано слово:

а) Удалить из него первую из букв "о", если такая буква есть.

б) Удалить из него последнюю из букв "т", если такая буква есть.

3. Дано слово. Если его длина нечетная, то удалить среднюю букву, в противном случае - две средних буквы.

4. Дано предложение. Удалить из него все символы с n 1-го по n 2-й (n 1£ n 2).

5. Дано предложение. Удалить из него все буквы "с".

6. Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения, то есть в слове должны остаться только различные буквы.

7. Дано предложение. Удалить из него все буквы "о", стоящие на нечетных местах.

8.

Функция pos.

Функция pos позволяет определить положение подстроки в строке. В общем виде обращение к функции выглядит так: pos (Подстрока, строка);

где Подстрока – строковая константа или переменная, которую надо найти в строковой константе или переменной строка.

Например, в результате выполнения команды: p:= pos (‘Пе’, ‘Санкт-Петербург’); значение переменной p будет равно 7. Если в строке нет искомой подстроки, то функция возвращает ноль.

Примеры определения позиции

• k:=pos(‘р’, ’мир’); k=3

• s:=‘колокол’;

n:=pos(‘кол’, s); n=1

• s1:=‘ок’; s2:=‘кок’;

i:=pos(s1, s2); i=2

• k:=pos(‘п’, ’мама’); k=0

Например

var

st: string;

begin

write (‘Введите строку: ’);

readln (st);

while (pos (‘ ‘, st)=1) and (length (st)>0) do

delete (st, 1, 1);

write (‘Строка без начальных пробелов: ’, st);

end.

Данная программа использует функцию pos и процедуру delete для удаления пробелов в начале введенной с клавиатуры строки. пробелы удаляются в цикле while до тех пор, пока функция pos обнаруживает пробел в начале строки (значение pos при этом равно единице). Проверка условия length (st)>0 нужна, так как возможно, что введенная с клавиатуры строка состоит вся из пробелов.

Задачи:

1. Дано предложение, в котором имеется несколько букв "е". Найти:

а) порядковый номер первой из них;

б) порядковый номер последней из них.

2. Дано предложение. Определить, есть ли в нем буква "а". В случае положительного ответа найти также порядковый номер первой из них.

3. Дано предложение. Определить количество букв "н", предшествующих первой запятой предложения.

4. Дано предложение. Напечатать все символы, расположенные между первой и второй запятой. Если второй запятой нет, то должны быть напечатаны все символы, расположенные после единственной имеющейся запятой.

5. Дано предложение, в котором имеются одна буква "с" и одна буква "т". Определить, какая из них встречается раньше (при просмотре слова слева направо).

Процедура val.

процедура val позволяет преобразовать изображение числа в число. В общем виде обращение к процедуре выглядит так: val (Строка, число, код).

где строка – строковая константа или переменная, содержащая изображение числа; число - переменная, которой должно быть присвоено значение, изображенное строкой строка; код – возвращаемый процедурой код ошибки. Если строка может быть преобразована в число, то код ошибки равен нулю.

Процедура val полезна при организации ввода с клавиатуры. Например, если в программе описана переменная month типа integer и ее значение вводится с клавиатуры, то в результате возможной ошибки оператора, задавшего месяц строкой символов, например 'июнь', а не цифрой, программа завершается ошибкой времени выполнения. Однако если числовые данные вводить как строку, а затем преобразовывать в число с помощью процедуры val, то можно избежать подобного неприятного завершения программы. Ниже приведен пример такой программы.

var

month: integer;

st: string[10];

code: integer;

begin

repeat

write (‘Месяц->’);

readln (st);

val (st, month, code);

if code<>0 then

writeln (‘Ошибка! Месяц следует задать цифрой.’);

until code=0;

end.

Задачи:

1. Дан текст. Напечатать все имеющиеся в нем цифры.

2. Дан текст. Определить количество цифр в нем.

3. Дан текст, в котором имеются цифры.

а) Найти их сумму.

б) Найти максимальную цифру.

4. Дан текст, в начале которого имеются пробелы и в котором имеются цифры. Найти порядковый номер максимальной цифры, считая, что первый номер имеет первый непробел. Если максимальных цифр несколько, то должен быть найден номер первой из них.

Процедура str.

Процедура str позволяет преобразовать число в его изображение, т.е. в строку. В общем виде обращение к процедуре выглядит так: str (выражение, строка).

где выражение – выражение или переменная целого или вещественного типа, строка – строковая переменная, которой будет присвоено изображение выражения.

Задачи общие:

1. Дано предложение. Определить число букв "о" в нем.

2. Дано предложение. Определить число пробелов в нем.

3. Дано предложение. Определить число вхождений в него некоторого символа.

4. Дано предложение. Определить долю (в %) букв "а" в нем.

5. Дан текст. Сколько раз в нем встречается символ "+" и сколько раз символ "*".

6. Дано предложение. Определить сколько в нем одинаковых соседних букв.

7. Дано предложение. Определить число вхождений в него буквосочетания "ро".

8. Дано предложение. В нем слова разделены одним пробелом (начальные и конечные пробелы в предложении отсутствуют). Определить количество слов в предложении.

9. Дано предложение. В нем слова разделены одним или несколькими пробелами. Определить количество слов в предложении.

10. Дан текст. Подсчитать общее число вхождений в него символов "+" и "-".

11. Дано предложение. Определить, сколько в нем гласных букв.

12. Дано предложение. Все буквы "е" в нем заменить на букву "и".

13. Дано предложение. Все его символы, стоящие на четных местах заменить на букву "ы".

14. Дано предложение. Заменить в нем все вхождения буквосочетания "ах" на "ух".

15. Дано предложение. Заменить в нем все вхождения буквосочетания "бит" на "рог".

16. Дана последовательность слов. Проверить, правильно ли в ней записаны сочетания "жи" и "ши".

17. Дана последовательность слов. Проверить, правильно ли в ней записаны сочетания "ча" и "ща". Исправить ошибки.

18. Дано слово. Определить, сколько различных букв в нем.

19. Даны два слова. Определить, можно ли из букв первого из них получить второе. Рассмотреть два варианта:

1) повторяющиеся буквы второго слова могут в первом слове не повторяться;

2) каждая буква второго слова должна входить в первое слово столько же раз, сколько и во второе.

20. Даны три слова. Напечатать только те буквы слов, которые есть только в одном из слов. Рассмотреть два варианта:

1) повторяющиеся буквы каждого слова рассматриваются;

2) повторяющиеся буквы каждого слова не рассматриваются.

21. Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.

22. Даны три слова. Напечатать неповторяющиеся в них буквы.

Массивы из строк.

Работа с массивом из строк аналогична работе с целочисленными массивами. При объявлении массива тип элементов в нем должен быть типа string.

Задачи:

1. В массиве из строк определить количество строк начинающихся на букву «А» и ввести их на экран.

2. В массиве найти строки, длина которых равна заданному числу, либо сообщить о их отсутствии.

3. В массиве найти строки, начинающиеся гласной русской буквой.

4. Отсортировать массив из строк по убыванию их длин.

5. Отсортировать массив из строк по алфавиту.

6. Дано предложение из 10 слов. Заполнить ими массив из 10 элементов.

7. Дано предложение. Напечатать его в обратном порядке слов, например, предложение "мама мыла раму" должно быть напечатано в виде "раму мыла мама".

8. Даны две строки. определить можно ли вторую строчку получить вычеркиванием символов первой строки. если можно то указать номера оставшихся символов первой строки.

9. Даны несколько строк текста, в которых нет начальных и конечных пробелов. Необходимо изменить эти строки так, чтобы их длины были одинаковыми. Это следует сделать путем вставки между словами дополнительных пробелов. Количество пробелов между отдельными словами внутри отдельной строки должно отличаться не более чем на 1.

Зачет по строкам.

Системы счисления.

Система счисления это способ наименования и записи чисел. Все они делятся на две большие группы: позиционные и непозиционные.

В непозиционной системе счисления каждый знак, употребляемый для записи чисел, всегда обозначает одно и то же число. Цифра – это знак, используемый для изображения числа.

Примером непозиционной системы счисления может служить римская. В ней были определены следующие обозначения чисел: I – 1, V – 5, X – 10, L – 50, C – 100, D – 500, M – 1000.

Тогда число 378 в римской нумерологии будет выглядеть так: CCCLXXVII.

Славянская система счисления тоже являлась непозиционной, в ней использовались буквы алфавита, над которыми ставился специальный значок ~ - называемый титло.

Запись чисел в этих системах очень громоздко и не удобно, так как требует использования большого числа знаков, требуемых для записи какого - либо числа. Чтобы несколько уменьшить количество используемых знаков для записи чисел, в римской системе было введено следующее правило: Если поместить букву обозначающую меньшее число, слева от буквы обозначающей большее, то меньшее следует из большего вычитать. IV – 4, IX – 9, XL – 40, XC – 90.

С помощью всех введенных знаков тысячу изобразить легко, но трудно изобразить сто тысяч.

Ясно, что сколько не вводить новых знаков, всегда можно придумать число, которое трудно изобразить уже введенными знаками. Такое затруднение характерно для любой непозиционной системы счисления. Также очень сложны и неудобны в этих системах счисления арифметические действия.

CCCLIX+CLXXIV=DXXXIII. Еще труднее производить умножение. Поэтому должно быть понятно, почему были вытеснены такие системы счисления из обихода позиционными. Хотя надо отметить, что именно римская система используется до сих пор, только в тех случаях, где нет необходимости производить с числами какие – либо действия. Например, при обозначении столетий, глав в книгах, часов на циферблатах.

Общепринятой позиционной системой счисления является десятичная, берущая свое начало от счета на пальцах. Она была изобретена в Индии, затем заимствована там арабами и уже через арабские страны пришла в Европу. Значение каждой цифры в позиционной системе счисления определяется не только ею самой, но так же и местом (позицией), которое она занимает в записи числа. Для позиционной системы счисления так же характерно то, что число разбивается на разряды, которые считаются справа налево и каждая цифра в записи числа означает определенное количество единиц именно того разряда в котором эта цифра стоит (568 – 5 сотен, 6 десятков, 8 единиц). Единица каждого следующего разряда всегда в определенное количество раз превосходить единицу предыдущего. Это отношение называют основанием системы счисления.

Числа, которыми мы привыкли пользоваться называются десятичными и арифметика, которой мы пользуемся, также называется десятичной. Это потому, что каждое число можно составить из набора цифр содержащего 10 символов - цифр - "0123456789". Но десятичная арифметика не единственная. Если мы возьмём только пять цифр, то на их основе можно построить пятеричную арифметику, из семи цифр - семеричную. В областях знаний связанных с компьютерной техникой часто используют арифметику, в которой числа составляются из шестнадцати цифр, соответственно эта арифметика называется шестнадцатеричной. Чтобы понять, что такое число в не десятичной арифметике сначала выясним, что такое число в десятичной арифметике.

Возьмём, к примеру, число 246. Эта запись означает, что в числе две сотни, четыре десятка и шесть единиц. Следовательно, можно записать следующее равенство:

246 = 200 + 40 + 6 = 2 * 102 + 4 * 101 + 6 * 100

Здесь знаками равенства отделены три способа записи одного и того же числа. Наиболее интересна нам сейчас третья форма записи: 2 * 102 + 4 * 101 + 6 * 100 . Она устроена следующим образом:

В нашем числе три цифры. Старшая цифра "2" имеет номер 3. Так вот она умножается на 10 во второй степени. Следующая цифра "4" имеет порядковый номер 2 и умножается на 10 в первой. Уже видно, что цифры умножаются на десять в степени на единицу меньше порядкового номера цифры. Уяснив сказанное, мы можем записать общую формулу представления десятичного числа. Пусть дано число, в котором N цифр. Будем обозначать i-ю цифру через ai. Тогда число можно записать в следующем виде: anan-1….a2a1. Это первая форма, а третья форма записи будет выглядеть так:

anan-1….a2a1 = an * 10n-1 + an-1 * 10n-2 + …. + a2 * 101 + a1 * 100

где ai это символ из набора "0123456789"

В этой записи очень хорошо видна роль десятки. Десятка является основой образования числа. И кстати она так и называется "основание системы счисления", а сама система счисления, поэтому так и называется "десятичной". Конечно, никакими особыми свойствами число десять не обладает. Мы вполне можем заменить десять на любое другое число. Например, число в пятеричной системе счисления можно записать так:

anan-1….a2a1 = an * 5n-1 + an-1 * 5n-2 + …. + a2 * 51 + a1 * 50

где ai это символ из набора "012345"

В общем, заменяем 10 на любое другое число и получаем совершенно другую систему счисления и другую арифметику. Наиболее простая арифметика получается, если 10 заменить на 2. Полученная система счисления называется двоичной и число в ней определяется следующим образом:

anan-1….a2a1 = an * 2n-1 + an-1 * 2n-2 + …. + a2 * 21 + a1 * 20

где ai это символ из набора "01"

Эта система самая простая из всех возможных, так как в ней любое число образуется только из двух цифр 0 и 1. Понятно, что проще уже некуда. Примеры двоичных чисел: 10, 111, 101.

Очень важный вопрос. Можно ли, например двоичное число (или число из какой-нибудь другой системы счисления) представить в виде десятичного числа и наоборот, можно ли десятичное число представить в виде двоичного (или числа из какой-нибудь другой системы счисления).

Двоичное в десятичное. Это очень просто. Метод такого перевода даёт наш способ записи чисел. Возьмём, к примеру, следующее двоичное число 1011. Разложим его по степеням двойки. Получим следующее:

1001 = 1 * 23 + 0 * 22 + 0 * 21 + 1 * 20

Выполним все записанные действия и получим:

1 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 8 + 0+ 0 + 1 = 9. Таким образом, получаем, что 1011(двоичное) = 9 (десятичное). Сразу видно и небольшое неудобство двоичной системы. То же самое число, которое, в десятичной системе записано одним знаком в двоичной системе, для своей записи требует четыре знака. Но это плата за простоту (бесплатно ничего не бывает). Но выигрыш двоичная система даёт огромный в арифметических действиях. И далее мы это увидим.

В свое время в Древнем Вавилоне использовалась шестидесятеричная система счисления, ее отголоски находят у нас применение в переводе часов в минуты, минут в градусы и т.д.

При использовании системы счисления выше десятичной в обиход идут буквы, то есть, например, для шестнадцатеричной системы счисления будут использованы следующие цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f.

Представьте в виде десятичного числа следующие числа.

а) 1101000112 (419); б) 34106(798); с) d7e816(55272); в) 522456(7013); г) 17688(1012); д) 10100039270); е) 2a01b12(58775).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: