с двумя заданиями :( 1) Объем сообщения, содержащего 30 символов, составил 120 бит. Каков размер алфавита, с которого записано сообщение?
2) Сообщение, записанное буквами из 16-символьного алфавита, содержит 10 символов. Какой объем информации в битах оно несет?
Урок 1 Линейные алгоритмы. Исполнитель Робот.
В линейном алгоритме команды выполняются последовательно, одна за другой.
Среда Робота
Учебный исполнитель Робот предназначен для того, чтобы без участия человека сажать цветы в подготовленные для них грядки. В программе, с которой вы будете работать, Робот изображен в виде машинки, которая ездит по полю. Поле размечено на квадраты, каждый из которых может быть:
1) свободным местом ;
2) грядкой или
3) стенкой .
Робот может переходить из клетки в клетку по грядкам или по свободным клеткам, ходить по клумбам с цветами запрещается. Он должен посадить цветы на всех грядках и вернуться на Базу, обозначенную специальным значком , для пополнения запасов.
Робот может двигаться вперед и назад, а также разворачиваться на 90 и 180 градусов влево или вправо. Конечно, в реальной обстановке на Робота влияет ветер, дождь, неровность земли и т.п., но мы их не будем учитывать. Такое упрощенное представление называется моделью работы Робота.
¨ СКИ Робота:
направо; повернуться на 90 градусов вправо
налево; повернуться на 90 градусов влево
кругом; развернуться кругом (на 180 градусов)
вперед ( n ); перейти на n клеток вперед
назад ( n ); перейти на n клеток назад
посади; посадить цветы на грядке в том месте, где стоит Робот
база Робот пришел на базу
Позже мы немного расширим СКИ и добавим в него новые команды.
задачи для решения . В архиве находятся 6 задач (обстановка для Робота), которые необходимо решить.
Урок 2 Циклы
Что такое цикл?
Часто исполнителю надо выполнить какую-то последовательность команд несколько раз. Например, в задаче на рисунке справа Робот должен подойти к ряду клеток, которые надо закрасить, и затем выполнить 6 раз команды вперед(1) и посади.
В данном случае эти команды надо повторить только 6 раза и можно легко 6 раз написать одинаковые команды. Но представьте, что надо сделать одинаковые операции 100 или 200 раз! В программировании в таких случаях используется специальная команда (оператор), которая говорит исполнителю, что какую-то часть программы надо сделать несколько раз.
¨ Цикл — это многократное исполнение последовательности команд
Для нашей задачи подходит цикл повтори (или repeat) с известным числом повторений. Программа с использованием оператора цикла выглядит так:
Ряд
{
вперед ( 1 ); /* подойти к месту работы */
повтори ( 6 )
{
вперед ( 1 );
посади;
}
}
Правила использования цикла
1. Цикл повтори (или repeat) используется тогда, когда число повторений цикла заранее известно или может быть вычислено.
2. Оператор цикла начинается заголовком цикла - ключевым словом повтори, за которым в скобках указывается нужное количество повторений цикла.
3. Тело цикла начинается открывающей фигурной скобкой { и заканчивается закрывающей }.
4. В цикле выполняются все операторы, заключенные в скобки.
5. Если тело цикла включает всего один оператор, скобки можно не ставить.
6. Для того, чтобы легче разбираться в программе, применяют специальную систему записи с отступами: все команды, входящие в цикл, смещают вправо на 2-3 символа — это позволяет сразу видеть, где начинается и где заканчивается цикл.
Урок 3 Вложенные циклы
Рассмотрим задачу для Робота, в которой требуется сажать цветы во многих местах площадки (на рисунке справа).
Такую задачу невозможно решить одним циклом, так как для каждого ряда из четырех клеток требуется отдельный цикл. Пусть Робот сначала сажает цветы в первом ряду, затем во втором и т.д.
Для обработки одного ряда можно использовать цикл повтори(5). В программе надо обработать 3 ряда, то есть написать три одинаковых цикла. Тогда получается, что можно снова использовать цикл повтори(3) для трех рядов, но внутри него также будет находиться цикл, который будет сажать цветы в ряду и переходить на новый ряд
если суть задачи обменивать столбцы в зависимости от значений 3 строки, то вот, что я сварганил:
#include <iostream>
using namespace std;
struct collumn{
int a[3];
};
collumn c[4];
bool comp(collumn c1, collumn c2){
return c1.a[2] > c2.a[2];
}
void print() {
for(int i = 0; i < 3; i ++) {
for (int j = 0; j < 4; j++)
cout << c[j].a[i] << " ";
cout << "\n";
}
cout << "\n";
}
void solve(){
print();
sort(c,c+4,comp);
print();
}
signed main() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
cin >> c[j].a[i];
solve();
}