Лекция 4. Строки в стиле C и многомерные массивы Красс Александр Alexander.Krass@gmail.com СПбГУ ИТМО, 2008.

Презентация:



Advertisements
Похожие презентации
Лекция 3. Одномерные массивы, указатели и ссылки Красс Александр СПбГУ ИТМО, 2008.
Advertisements

Константы Константы подразделяются, в зависимости от их типа, на 5 групп: целочисленные; перечисления; вещественные (с плавающей точкой); символьные; строковые.
Лекция 2 Функции библиотек языка C. stdio.h Заголовочный файл стандартной библиотеки языка C. Содержит определения констант, объявления функций и типов.
Лекция 6 1. Обработка массивов. Объявление одномерного массива Синтаксис: [ ] Пример: int a[10]; Определяет массив a размера 10, т. е. блок из 10 последо-
Лекция 2. Фундаментальные типы данных и основные конструкции Красс Александр СПбГУ ИТМО, 2008.
Лекция 3 по дисциплине «Программные средства математических расчетов» тема: «Операторы циклов и работа с массивами в С++» гр. 8Е31 Мамонова Татьяна Егоровна.
Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Массивы и строки Лекция 5. Одномерные массивы. Объявление. Общая форма объявления: тип имя_переменной[размер]; Пример: double balance[100]; balance[3]
Основы информатики Массивы. Указатели. Заикин Олег Сергеевич
1 Контрольное зачетное задание (0, 0)(0, m-1) (n-1, 0)(n-1, m-1) Дано прямоугольное поле, расчерченное на клетки: n клеток в высоту и m клеток в ширину.
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
СИМВОЛЬНЫЕ СТРОКИ С++. ОБЪЯВЛЕНИЕ СИМВОЛЬНЫХ СТРОК В ПРОГРАММАХ В C++ символьные строки хранятся в массиве типа char, который заканчивается символом NULL.
Программирование на языке высокого уровня Лекция 5. Массивы. Массивы. Массивы. Кафедра АСОИУ ОмГТУ, 2012 Богатов Р.Н.
ЕГЭ 2012 Информатика и ИКТ Консультация 3. Пример.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
Тема: Массивы ОДНОМЕРНЫЕ МАССИВЫ. Проверка домашнего задания Найти все 3-х значные числа, заканчивающихся на 2, 4, 8 и делящихся на 6. CLS FOR I = 100.
Лекция 18. Повторение и введение в STL (часть 1) Красс Александр СПбГУ ИТМО, 2008.
Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Лекция 1. Введение Красс Александр СПбГУ ИТМО, 2008.
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное.
Транксрипт:

Лекция 4. Строки в стиле C и многомерные массивы Красс Александр СПбГУ ИТМО, 2008

2 Что такое символ? 'S'

3 Что такое строка? "Hi!"

4 Управляющие последовательности \a Звуковой сигнал \b Возврат на символ \f\f Перевод страницы \n Перевод строки \r Возврат каретки \t\t Горизонтальная табуляция

5 Управляющие последовательности \v Вертикальная табуляция \\Обратная косая черта \'\'Апостроф \"Кавычки \070 или \70Восьмеричный код символа \xF0Шестнадцатеричный код символа

6 Символ имеет тип char

7 А строка?

8 char [] char * const char [] const char *

9 char str[] = "My treasure!" char *str = "My treasure!"

10 Строка в памяти Verycool\0

11 Ввод строки char str[100]; cin >> str;

12 Вывод строки char str[] = " Hi! "; cout << str;

13 Но этот способ больше подходит, когда Вы работаете со строками в стиле C++

14 Функции для работы со строками в стиле C можно найти в stdio.h и string.h

15 Функции для работы со строками Ввод строки с клавиатуры: scanf("%s",str) или gets(str). Вывод строки: printf("Text %s and text here too",str) или puts(str).

16 Функции для работы со строками strcpy(s1, s2) – копирует содержимое строки s2 в s1, возвращает указатель на s1. strcat(s1, s2) – присоединяет строку s2 к s1, возвращает указатель на s1. strlen(s1) – возвращает длину строки, последний нулевой байт не учитывается. strcmp(s1, s2) – сравнивает строки, возвращает положительное, нулевое или отрицательное значение. strstr(s1, s2) – ищет первое вхождение строки s2 в строке s1.

17 Функции для работы со строками Для большинства функций в библиотеках для Microsoft Visual С++ есть более безопасные версии. Они снабжаются суффиксом _s: gets_s, strcpy_s и т.д. Используйте их вреальной жизни! Подробнее в статье MSDN Security Enhancements in the CRT.

18 Копирование строки while (s2[i]=s1[i]) ++i; или while (s2[i]=s1[i++]);

19 Подсчёт количества слов в строке #include #define N 100 void main() { char s[N];... }

20 Подсчёт количества слов в строке char s[N]; printf("Enter a string: "); gets(s); strcat(s, " "); printf("\n\"%s\"\n%d characters\n", s, strlen(s)); int k = 0; for (int i = 0; i < strlen(s) - 1; ++i) if (s[i] == ' ') ++k; printf("The string contains %d words.\n", k);

21 Подсчёт количества слов в строке char s[N]; printf("Enter a string: "); gets(s); strcat(s, " "); printf("\n\"%s\"\n%d characters\n", s, strlen(s)); int k = 0; for (int i = 0; i < strlen(s) - 1; ++i) if (s[i] == ' ') ++k; printf("The string contains %d words.\n", k);

22 Подсчёт количества слов в строке char s[N]; printf("Enter a string: "); gets(s); strcat(s, " "); printf("\n\"%s\"\n%d characters\n", s, strlen(s)); int k = 0; for (int i = 0; i < strlen(s); ++i) if (s[i] == ' ') ++k; printf("The string contains %d words.\n", k);

23 Подсчёт количества слов в строке char s[N]; printf("Enter a string: "); gets(s); strcat(s, " "); printf("\n\"%s\"\n%d characters\n", s, strlen(s)); int k = 0; for (int i = 0; i < strlen(s) - 1; ++i) if ((s[i]!= ' ') && (s[i+1] == ' ')) ++k; // Пример защиты от пользователя. printf("The string contains %d words.\n", k);

24 Многомерные массивы

25 Сосредоточимся на двумерных массивах

26 Примеры из жизни

27 Поле для игры «Сапёр»

28 Поле для игры в Шахматы

29 Матрица

30 Карта местности, разбитая на квадраты

31 Объявление и инициализация int field[8][8]; int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; char *str[3] = {"One", "Two", "Three"};

32 Объявление и инициализация #define N 8... int *field[N]; for (int i = 1; i < N; ++i) { field[i] = new int[i]; }

33 Директива препроцессора #define #define N 1 #define MAX(i, j) \ ((i) > (j)) ? (i) : (j))

34 Объявление и инициализация #define M 9 #define N 8... int **field = new int*[M]; for (int i = 0; i < M; ++i) { field[i] = new int[N]; }

35 Объявление и инициализация #define M 9 #define N 8... int **field = new int*[M]; for (int i = 0; i < M; ++i) { field[i] = new int[N]; }... for (int i = 0; i < M; ++i) { delete[] field[i]; } delete[] field;

36 Сумма всех элементов матрицы int m, n; cin >> m >> n; int **a = new *int[m]; int sum = 0; for (int i = 0; i < m; ++i) for (int j = 0; j < n; ++j) sum += a[i][j]; cout << sum << endl;

37 Многомерные массивы int ***p; double ****r;

38 Домашнее задание 1 Пользователь вводит несколько строк текста. Последняя строка заканчивается фрагментом. Задача подсчитать количество предложений в тексте.

39 Домашнее задание 2 Модификация для продвинутых. Пользователь плохо учился в школе, поэтому делает пунктуационные ошибки. Постарайтесь как можно лучше помочь пользователю. Пример текста. Наши люди не дураки, и когда им предлагают процентов годовых, понимают, что это чистой воды надувательство...Но когда предлагают 200.процентов, все-таки не выдерживают и несут

40 Домашнее задание 3 У Вашей фирмы появился новый клиент – ЗАО Попасёмка. Эта фирма занимается выпасом отар на заказ. Во многих случаях им приходится пасти овец в областях с большим количеством оврагов, в которые овцы периодически падают (пастухи фирмы обычно делятся с овцами алкогольными напитками, чтобы те сильно не разбегались). Они обратились к Вашей фирме с просьбой разработать программный продукт для оценки смертности овец в результате несчастных случаев.

41 Домашнее задание 3 Отара из k овец пасётся на пастбище с некоторым числом оврагов в течении t единиц времени. Нужно подсчитать сколько в среднем овец не вернутся к хозяину после такого выпаса (падение в овраг заканчивается для овцы необратимой трагедией).

42 Домашнее задание 3 Главный программист Вашего отдела после 11 бутылок пива предложил математическую модель для имитации выпаса отары. Клиенту она понравилась (ему во время разговора дали чашку очень хорошего кофе с вкусным пирожным). Теперь Вам нужно будет написать программный продукт, который использует эту модель.

43 Домашнее задание 3. Математическая модель Пастбище представляется в виде матрицы m на n ( 1 <= m, n <= 100). Каждый элемент матрицы соответствует части пастбища, которая может быть либо доступной для движения, либо оврагом. Время выпаса t (1 <= t <= 1000). Число овец k ( 1 <= k <= 100).

44 Домашнее задание 3. Математическая модель Овца может с равной вероятностью за одну единицу времени перейти в одну из четырёх смежных клеток, либо остаться в текущей. Если овца попадает на клетку-овраг, то считается погибшей в результате несчастного случая. Овца не может выйти за пределы пастбища. Если она стоит на его границе, то вероятность перемещения овцы за пределы пастбища распределяется между другими возможными действиями.

45 Домашнее задание 3. Математическая модель Несколько овец в один момент времени могут находится в одной клетке. Все допустимые начальные расположения овец на поле равновероятны (расположение допустимо, если ни одна овца не стоит в начальный момент времени в клетке- овраге).

46 Домашнее задание 3. Замечание. Решение задачи требуется производить с использованием имитации выпаса овец. Математическое решение не принимается. Подсказка (можете не читать). Запускаете имитацию много раз, выбирая каждый раз случайное начальное положение овец, затем считаете среднее арифметическое числа погибших овец.

47 Спасибо за внимание Вопросы?