Задания Оценки Ведомость Материалы

Ведомость и материалы для обучения

Литература по Си

Керниган и Ричи, Язык программирования Си.

Памятка по работе в консоли.

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

Литература и ссылки по языку Python

Марк Лутц, Изучаем Python.

Python 32 бита:

http://python.org/ftp/python/3.2.2/python-3.2.2.msi

http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-Py3.2-x86-gpl-4.9.1-1.exe

Python 64 бита:

http://python.org/ftp/python/3.2.2/python-3.2.2.amd64.msi

http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-Py3.2-x64-gpl-4.9.1-1.exe

Дополнительные занятия проходят в среду, в 15:30, и в субботу, в 13:30.

Почта преподавателя: valeriy.fedotov [...] gmail.com

Подготовка к ЕГЭ

Лучший, на мой взгляд, сайт для подготовки к ЕГЭ по информатике:

http://kpolyakov.narod.ru/school/ege.htm

Просто читайте по порядку разборы типов задач и решайте примеры, от этого будет большая польза. Желающие могут решать варианты ЕГЭ и присылать часть С мне по почте на проверку.

Решение задачи C4 из диагностической работы на Python3: http://programming1189.ru/tasks-sc2010/ege/dict.html

Решение на C: http://programming1189.ru/tasks-sc2010/ege/numbers.html

Полезные примеры

Дополнительние примеры к экзаменационным программам, для тех, кто пришет программы по соответсвующим темам:

Экзаменационные задания

Внимание. Можно предлагать мне задания, которые были бы вам интересны, если я соглашусь (это зависит от многих факторов), будете делать его.

Список в процессе наполнения, обновление от 8 апреля 2012:

PyQt, работа с графикой:

PyQt:

Физика:

Игры (PyQt и графика):

Работа с сетью:

Прикладные библиотеки:

Для энтузиастов:

Интерпретаторы:

Сайты:

Результаты диагностической работы

результаты

Задание 40

Переписать форум (задание 39) таким образом, чтобы сделать

  1. Защитить пароли и сессии от кражи (хранить не пароли а их контрольные суммы, добавить средства от "угона сессий").

  2. Добавить возможность вставлять в сообщение пользователя часть текста другого пользователя как цитату, например с помощью собственного тегa:

[qoute]
Здесь идёт цитата.
[/qoute]
Здесь идёт текст пользователя.

Цитат в сообщении может быть несколько.

Задание 39

Написать простейший форум. Форум должен быть выполнен в виде набора CGI-скриптов и статических страниц. Должны быть представлены следующие страницы:

  1. Регистрация. (добавление новго пользователя, аналогично заданию 38)

  2. Вход на форум. (Проверка имени и пароля, и выдача соответсвующей регистрационной куки.

  3. Просмотр списка тем на форуме.

  4. Просмотр сообщений в определенной теме (параметр страницы -- номер темы).

  5. Отправка нового сообщения (параметр -- тема, в которую будет отправлено сообщение).

Задание 38

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

Указания к выполнению задания находятся здесь

Задание 37

Указания к выполнению задания и текст занания находятся в этом документе

Задание 36

Написать программу, которая по файлу с оценками marks.csv строит html-документ, сохраняя его в файл. Пример файла marks.csv лежит здесь.

Напоминаю, что html c таблицей выглядит примерно так:

<html>
  <head>
    <title>Название страницы. </title>
    <meta charset='UTF-8' />
  </head>
  <body>
    Обычный текст.
    <h1>Абзац с жирным текстом и большим шрифтом</h1>
    <table border=1px>
      <tr>
        <td>Ученик 1</td>
        <td>5</td>
        <td>4</td>
        <td></td>
        <td></td>
      </tr>
      <tr>
        <td>Ученик 2</td>
        <td>5</td>
        <td>4</td>
        <td></td>
        <td></td>
      </tr>
    </table>
  </body>
<html>

Как эта страница будет отображена в браузере, можно увидеть здесь.

Не у всех групп документ был в таком виде, в каком приведён здесь, в эту страницу внесено несколько изменений:

1. Указана кодировка UTF-8, поскольку питон по умолчанию работает с ней, и на уроках не у всех правильно открывались страницы.

2. У тега table указан параметр border, равный одному пикселю, чтобы данные не просто выравнивались в таблицу, но и разделялись границами между ячейками таблицы.

3. Так как в версии питона для русифицированного Windows используется виндовая кодировка cp1251, а CSV-файл в кодировке UTF-8, то для того, чтобы питон читал файл именно в этой кодировке и не выдавал ошибок, что он не может прочитать символ из другой кодовой таблицы, файл надо открывать так:

import codecs

f = codecs.getreader("utf-8")(open(fname, 'rb'))

А писать в выходной файл аналогично при помощи getwiter

f = codecs.getwriter("utf-8")(open(fname, 'wb'))

Задание 35

Написать аналог игры Angry Birds, только в этом случае вместо шаров должны быть "кирпичи". Столкновения упругие, без трения, за нулевое время. Задавать скорость, угол вылета и начальную угловую скорость кубика, которым стреляет игрок, в полях текстового ввода.

Формулы

Задание 34

Написать аналог игры Angry Birds. Игрок стреляет ядром по некоторой фигуре из твёрдых шаров (задавать начальную скорость и угол в полях текстового ввода). Смоделировать и анимировать в программе разлёт шаров. Кто сделает к 3 февраля, получит зачёт за эту и 35 программы. 35 программа будет на основе этой, но сложнее.

формулы и рисунки к заданиям 32, 33, 34

Задание 33

Написать программу для моделирования звёздной системы, состоящей из звезды и двух планет. Считать, что движение происходит в плоскости и масса звезды много больше масс планет. Программа должна графически отображать траектории двух планет. Рассмотреть различные случаи (обычное периодическое движение, резонанс между планетами, а также случай, когда есть одна планета, а второе тело является её спутником. Для моделирования использовать метод перешагивания или метод Эйлера-Кромера.

Простая основа для программы построения траекторий лежит здесь

Программа, рисующая траектории с анимацией

формулы к заданиям 32, 33, 34

Задание 32

Пример решения дифференциальных уравнений для тела, брошенного под углом к горизонту.

Задание. Необходимо написать программу для моделирования обращения спутника вокруг земли. Землю можно считать неподвижной, единицы измерения произвольные, массу Земли и гравитационную постоянную можно положить равными 1. Необходимо реализовать моделирование методами Эйлера, Эйлера-Кромера, методом с перешегиванием. Неявный метод Эйлера реализовывать не нужно.

Правильная формула для метода с перешагиванием (для 1ой и 2ой групп, у третьей правильная).

формулы к заданиям 32, 33, 34

Задание 31

Написать программу, которая рисует множество Мандельброта.

Множество Мандельброта -- это множество комплексных чисел c, таких, что последовательность вида z_{0} = 0, z_{n+1} = z_{n} * z_{n} + c ограничена.

Примечание 1. Не нужно возводить число в квадрат, надо перемножать его само на себя. Тогда в случае выхода за границы точности результатом будет nan.

Примечание 2. Более оптимальным, чем выход числа за границы точности будет сравнение модуля комплексного числа z_{n} с двойкой. Известно, что точки, вышедшие за круг радиуса 2 с центром в начале координат на комплексной плоскости, будут уходить на бесконечность. Поэтому можно дождаться только выхода за круг радиуса 2.

Задание 30

Пример 1.

Пример 2.

Пример 3.

Пример 4.

Пример 5.

Пример c циферблатом.

Примеры взяты с сайта http://zetcode.com/tutorials/pyqt4/ . Там же можно найти больше примеров на другие разделы PyQt4.

Задание заключается в том, что надо нарисовать фрактал — снежинку Коха.

Задание 29

Написать базу данных библиотеки. Программа должна уметь:

  1. Добавлять нового автора.

  2. Добавлять новую книгу.

  3. Выводить список всех авторов.

  4. Выводить список всех книг данного автора.

  5. Сохранять и загружать БД в файл (из файла).

Автор, книга и база данных должны быть реализованны как классы. У каждого класса должны быть методы, свойства и конструкторы.

Задание 28

Написать эмулятор файловой системы. Нужно реализовать следующие возможности:

  1. Создание файла с заданным пользователем именем.

  2. Создание директории (папки) с заданным пользователем именем.

  3. Чтение текстовой информации из файла

  4. Записать текста в файл.

  5. Удаление файла или директории.

6) Вывод списка файлов и диретории в данной диретории. (Аналог команды ls в юниксе).

Файлы и папки надо реализовать с помощью классов и объектов. У класса файл и у класса диретория должно быть минимум по 2 свойства и 2 метода. Директории могут быть вложенными.

Задание 27

Написать программу для решения судоку.

Лёгкое судоку, которое решается простым вычёркиванием вариантов (дано на уроке): http://upload.wikimedia.org/wikipedia/commons/f/ff/Sudoku-by-L2G-20050714.svg

Сложные судоку, которое нужно решать вычёркиванием вариантов и перебором (в каждой строчке записано по одному судоку, всего 95 разных судоку): http://magictour.free.fr/top95

Если есть желание, можно почитать статью Питера Норвига про решение судоку на английском: http://norvig.com/sudoku.html

Задание 26

Очередной апдейт записной книжки.

Книжка с датами сдачи заданий и email’ов. Поиск по имени пользователя из email, по имени сервера из email, сохранение и загрузка записной книжки с этими новыми полями. При загрузке надо использовать не split(), а разбирать сроку с помощью регулярных выражений. Ещё надо реализовать вывод списка пользователей, имеющих дату сдачи в интервале [a-b, a+b], где a — дата сдачи некоторого человека из записной книжки (заданного с клавиатуры), b — количество дней, которое вводится с клавиатуры.

хороший урок по регулярным выражениям (на английском, но достаточно понятный).

Задание 25

  1. Написать программу для перевода чисел из одной системы исчисления A (A <= 32) в систему исчисления B (B <=32).

2) Написать программу для подсчёта того, сколько раз каждое слово встречается в файле. Считать, что слова разделяются одним или несколькими пробелами или переводами строки.

Задание 24

Задание можно выполнять в двух вариантах:

Вариант 1 — упрощение выражений

Программа на питоне принимает строку вида

x * (x – 3) * (10 + x * (x + 1)) – 2

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

x * x * x * x – 2 * x * x * x + 7 * x * x – 30 * x + 2

Для простоты, можно считать, что минус всегда соответствует операции вычитания, а не отрицательным числам.

Указания к выполнению

Первоначально сделайте так, чтобы ваша программа работала со строкой без круглых скобок. при этом полезно строку преобразовать в последовательность чисел, переменных x и операторов. Например, при разборе строки без скобок вида

x * x – 3 * 10 + x * x + 1 – 2

Получается список

['x', '*', 'x', '-', 3, '*', 10, '+', 'x', '*', 'x', '+', 1, '-', 2]

Далее, помня о о том, что операция умножения имеет более высокий приоритет, чем сложение и вычитание, заменяем последовательности вида a, ‘*’, b’ на список из трёх элементов ['*', a, b].

[['*', 'x', 'x'], ‘-’, ['*', 3, 10], ‘+’, ['*', 'x', 'x'], ‘+’, 1, ‘-’, 2]

Аналогично поступаем с вычитанием:

[['-', ['*', 'x', 'x'], ['*', 3, 10]], ‘+’, ['*', 'x', 'x'], ‘+’, ['-', 1, 2]]

И со сложением:

['+', ['+', ['-', ['*', 'x', 'x'], ['*', 3, 10]], ['*', 'x', 'x']], ['-', 1, 2]]

(Прим. из-за неассоциативности вычитания, заменять надо либо сначала вычитания, либо и вычитание и сложение одновременно, начиная слева).

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

x * (x – 3) * (10 + x * (x + 1)) – 2

сначала приведёт к рекурсивному вызову для разбора (x – 3), результатом которого будет

['-', 'x', 3].

Затем, будет рекурсивный вызов для 10 + x * (x + 1), который в свою очередь приведёт к рекурсивному вызову для x + 1, и результатом этих двух вызовов будет

['+', 10, ['*', 'x', ['+', 'x', 1]]]

Таким образом, получим список вида

['x', '*', ['-', 'x', 3], ‘*’, ['+', 10, ['*', 'x', ['+', 'x', 1]]], ‘-’, 2]

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

['-', ['*', ['*', 'x', ['-', 'x', 3]], ['+', 10, ['*', 'x', ['+', 'x', 1]]]], 2]

Теперь осталось полученное выражение упростить и отправить на печать.

Вариант 2 — деление столбиком

В этом варианте задания два выражения вводятся уже в префиксной форме записи:

(- (* x (x – 3) (+ 10 (* x (+ x 1)))) 2)
(+ (* x x) 1)

Но ценой за это упрощение синтаксического разбора является то, что их надо не только упростить, но и поделить столбиком первое на второе.

Задание 23

Написать записную книжку из задания 16 на питоне.

Задание 22

Посчитать площадь круга радиусом 1 с помощью метода Монте-Карло.

Задание 21

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

Примеры работы. Арифметическое выражение 2 + 1:

2 1 +
Ответ: 3

Положить арифметическое выражение (2 + 1) * 4 в переменную a, вывести значение a / 10:

2 1 + 4 * a =
Значение 12 положено в переменную A
a 10 /
Ответ: 1.200000

Можно считать, что пользователь будет пользоваться не более чем 20 переменными, длина имени каждой переменной не более 6 символов.

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

Задание 20

Листинг

Переписать телефонную книгу на связном списке таким образом, чтобы выделить саму телефонную книгу в абстрактный тип данных. Все функции для работы с этим типом должны быть определены в отдельном файле с расширением .c, кроме того, их прототипы должны быть объявлены в файле с разрешением .h, который будет подключаться основным файлом (то есть тем, который содержит функцию main).

Собирать программу, разбитую на file1.c, file2.c, file2.h надо так: gcc file1.c file2.c

Задание 19

Распечатка с урока

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

Задание 18

Формулы к методам вычисления площади под графиком

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

Чтобы ваши программы могли находить минимумы и интегралы от разных математических функций, соответствующие методы загоните в функции, принимающие указатель на функции. Если забыли, как это делается, смотрите задание 13, там есть ссылка на pdf с кодом, распечатку которого я раздавал.

Задание 17

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

./encrypt input.txt keyfile output.txt

input.txt — входной файл, keyfile — файл с ключом, output.txt — выходной файл.

Расшифровка файла делается при помощи повторного наложения ключевой последовательности байт (тождество x ^ y ^ y == x можете доказать сами). То есть команда

./encrypt output.txt keyfile output2.txt

приведёт к тому, что файлы input.txt и output2.txt будут эквивалентны.

Если файл keyfile короче, чем входной файл, то, когда он закончится, последовательность надо заново начать брать из его начала.

Задание 16

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

Пункты меню.

  1. «Создать новую книгу». Программа освобождает все ресурсы, связанные с текущей телефонной книгой, запрашивает у пользователя значение максимального числа записей и создает новую, пустую книгу.

  2. «Просмотреть содержимое». Программа выводит содержимое всех непустых записей и их полное количество. Каждая запись должна иметь свой уникальный номер по которому ее можно распознать.

  3. «Добавить запись». Программа спрашивает пользователя о имени и телефоне объекта и создает новую запись, если это возможно.

  4. «Удалить запись». Программа требует ввода номера записи, которая будет удалена, и проводит процедуру удаления записи.

  5. «Поиск по имени». Пользователь вводит имя объекта, а программа в ответ выводит все записи, у которых имена объектов совпадают с введенным пользователем.

  6. «Поиск по номеру телефона». То же, что и предыдущий пункт, только критерием поиска является телефон объекта.

  7. «Сохранить книгу в файл». Программа запрашивает у пользователя имя файла и сохраняет текущее содержимое телефонной книги в указанный файл.

  8. «Восстановить книгу из файла». Программа запрашивает у пользователя имя файла и восстанавливает содержимое ранее сохраненной книги. Если восстановление успешно, то все ресурсы, связанные с предыдущей книгой освобождаются. При неудачном восстановлении текущая телефонная книга не уничтожается.

  9. «Выход».

Задание 15

Программа принимает как аргумент командной строки или считывает при помощи scanf целое число N. Необходимо вывести на экран такие варианты расстановки ферзей на шахматной доске N*N клеток, при которых ферзи не бьют друг друга.

Пример (для доски 4*4):

./queens 4
--X-
X---
---X
-X--

-X--
---X
X---
--X-

2 positions total.

Программа должна работать при помощи рекурсивного перебора.

Учтите, что на доске 2*2 можно поставить максимум одного ферзя, на 3*3 -- максимум двух. Во всех остальных случаях на доске N*N возможно поставить N ферзей.

Задание 14

Написать программу для нахождения размера файла. Имя файла должно передаваться как параметр командной строки. Находить размер подсчётом количества символов запрещено. Имя файла должно передаваться через аргумент командной строки.

Задание 13

Код примеров, выданный на уроке: task13.pdf

Поскольку я ошибся в одной из формул, но заметила это только третья группа, то напишу здесь правильные формулы.

Метод хорд

Уравнение хорды:

$$ y=f(a)+\frac{f(b)-f(a)}{b-a}(x-a) $$

точка пересечения хорды с осью X:

$$ c=a-\frac{f(a)(b-a)}{f(b)-f(a)} $$

Метод Ньютона

Уравнение касательной:

$$ y=f(x_{0})+f'(x_{0})(x-x_{0}) $$

Следующее приближение метода Ньютона:

$$ x_{1}=x_{0}-\frac{f(x_{0})}{f'(x_{0})} $$

Найти корни уравнения методом деления отрезка пополам, методом хорд, методом Ньютона.

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

Задание 12

Написать программу, разбивающую файл на части и соединяющую его обратно из частей. Программа принимает два ключа: -c (cut, порезать на части) и -j (join, собрать из частей).

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

./a.out -c 15 poem.txt

Если размер файла poem.txt 51 байт, то программа должна создать файлы poem.txt.0, poem.txt.1, poem.txt.2, poem.txt.3 , первые три из которых будут иметь размер 15 байт, а poem.txt.3 — 6 байт.

Если программе передан ключ -j, то она принимает имя выходного файла и имена входных файлов, из которых соберёт выходной. Пример:

./a.out -j poem1.txt poem.txt.0 poem.txt.1 poem.txt.2 poem.txt.3

Программа должна собрать файл poem1.txt из файлов poem.txt.0, poem.txt.1, poem.txt.2, poem.txt.3, записав поэтапно в poem1.txt сначала все байты из файла poem.txt.0, потом из следующего входного файла, и т.д.

После работы этих двух примеров содержание файлов poem1.txt и poem.txt должно быть эквивалентно.

Задание 11

Проходили массивы указателей и обработку аргументов командной строки.

Задание 11

Программа должна обрабатывать аргументы командной строки и на основании первого аргумента определять, какое ей действие выполнить. add — сложить числа из командной строки, sub — вычесть из первого последующие, mul — перемножить числа, div — поделить первое число на все последующие, sort — отсортировать числа по возрастанию. Примеры работы программы:

./a.out add 1 2 3 4
10
./a.out sub 10 2 1
7
./a.out mul 2 2 3
12
./a.out div 100 2 10
5
./a.out sort 1 2 6 45 10 -8 2
-8 1 2 2 6 10 45

Функцию, преобразующую строку в число, написать самостоятельно.

Задание 10

Переписать задание 6 (заполнение массива различными способами) так, чтобы программа не использовала постоянные значения M и N, заданные при компиляции, а просила пользователя ввести их с клавиатуры и выводила заполненный массив с такими размерностями (выделяя память под него с помощью malloc).

Программа должна состоять не из трёх файлов, а из одного файла с тремя функциями. Каждая функция должна иметь такой вид:

void zapoln1(int m, int n, int *mas)
{
        // ...
}

Примечание. Если шестая программа ещё не написана и не понята, то сначала пишите её.

Курчатовская олимпиада

Началась Курчатовская олимпиада по программированию за 2011 год.

Задания находятся здесь, вся дальнейшая информация по ссылке.

Внимание тем, кто читал задания до 22 февраля: в задания внесены несколько незначительных правок, перечитайте ещё раз.

Задание 9

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

  1. по возрастанию максимальной высоты подъема снаряда;

  2. по возрастанию дальности полета снаряда.

После сортировки, напрмер, по возрастанию дальности полёта, первая пара скоростей (вектор vx,vy) должна иметь наименьшую дальность, вторая — большую, чем первая, третья — большую чем вторая и последняя — наибольшую дальность.

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

sort4(int sort_type,
      double *vx1, double *vy1, double *vx2, double *vy2,
      double *vx3, double *vy3, double *vx4, double *vy4)
{
    //...
}

Сами пары скоростей снарядов должны храниться в отдельных переменных. Массивы использовать не разрешается. Функция сортировки sort4 должна принимать восемь указателей на отдельные координаты и параметр, определяющий тип сортировки. При этом sort4 должна только сортировать, выводом получившихся точек на экран должна заниматься либо отдельная функция, либо функция main.

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

Задание 8

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

Как только программа не сможет прочитать со стандартного ввода число (то есть, когда он введёт, например, букву), она должна сказать пользователю “пока” и завершиться.

Примечание. Вычисления синуса и косинуса должны быть оформлены в виде отдельных функций.

Задание 7

Сегодня не было интернета и мы не сдавали задания. Прошли функции для работы с отдельными символами, строки, и стандартные функции для работы со строками.

Объявление. Так как в этот раз сдачи заданий не было, да и у вас конец четверти и надо ставить оценки, в следующий раз в начале урока будет совсем короткая лекция, а потом я буду принимать задания. Хорошо их подготовьте.

Задание 7

  1. Вывести размеры стандартных типов данных языка Си (целые типы — char, short, int, long, long long и их unsigned варанты, типы чисел с плавающей точкой — float, double, long double). Использовать оператор sizeof.

  2. Программа в цикле считывает со стандартного ввода строку, введённую пользователем (при помощи функции fgets) в некоторый массив. После этого она копирует строку из этого массива в ещё один массив, распечатывает строку на стандартный вывод уже из этого массива, печатает количество символов в строке, затем количество слов в строке, затем слова из этой стоки в обратном порядке, затем изначальную строку в верхнем регистре. Затем программа таким же образом обрабатывает следующую введённую строку.

Например, при вводе строки

hello, world!

программа выведет

hello, world!
14 chars
2 words
world! hello,
HELLO, WORLD!

Примечание. В программе необходимо использовать функции fgets, strcpy (или strncpy), вместо простого сравнения символа с символом пробела использовать функцию isspace.

Задание 6.

Программа (или три отдельные программы) выводит на печать двумерный массив, заполненный змейкой, по спирали и зигзагом. Размер массива задаётся константами в исходном коде программы.

Пример работы программы для массива 6×7:

 0  1  2  3  4  5
11 10  9  8  7  6
12 13 14 15 16 17
23 22 21 20 19 18
24 25 26 27 28 29
35 34 33 32 31 30
36 37 38 39 40 41

 0  1  2  3  4  5
21 22 23 24 25  6
20 35 36 37 26  7
19 34 41 38 27  8
18 33 40 39 28  9
17 32 31 30 29 10
16 15 14 13 12 11

 0  1  5  6 14 15
 2  4  7 13 16 26
 3  8 12 17 25 27
 9 11 18 24 28 35
10 19 23 29 34 36
20 22 30 33 37 40
21 31 32 38 39 41

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

const int M = 6;

На самом деле, в языке Си такие константы использовать для задания размеров нельзя (в отличие от C++, и, частично, Си99)нельзя. Для этого надо воспользоваться конструкцией вида

#define M 6

(обратите внимание на отсутствие точки с запятой!).

Задание 5

Посчитать биномиальный коэффициент

http://www.programming1189.ru/custom_images/binom_coef.png

Программа просит пользователя ввести n и k и затем выводит биномиальный коэффициент от n и k.

Почта преподавателя

valeriy.fedotov[AT]gmail.com

Где вместо [AT] надо поставить @.

Задать вопрос вы можете следующим образом:

  1. Задаёте его себе и пытаетесь ответить сами. Если ответ получен, то завершаете алгоритм, если нет, переходите к следующему пункту.

  2. Задаёте вопрос своим одноклассникам (можно не всем, а одному-двум). Если ответ получен, то завершаете алгоритм, если нет, переходите к следующему пункту.

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

Также сообщаю, что и сайт, и сервер, к которому вы подключаетесь при помощи Putty, доступны по адресу programming1189.ru . Старый адрес будет работать ещё около месяца, потом я его отключу.

Некоторые ссылки

Я говорил, что Putty можно запросто найти в гугле, но так как меня продолжают спрашивать, где и как её скачать, то:

Putty можно скачать здесь.

WinSCP (программу для отправки файлов на сервер и скачивания их оттуда) можно скачать здесь.

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

Задание 4

Сегодня прошли do {...} while, continue и повторили другие управляющие конструкции. Начали разбираться с потоками ввода и вывода, разобрали несколько простых программ из Кернигана и Ритчи по этому поводу.

Задание 4

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

Например, если на ввод поступает текст вида

when I find my code in tons of trouble,

friends and colleagues come to me,

speaking words of wisdom:

“write in C.”

Программа выведет следующие строки:

When I find my code in tons of trouble,

Friends and colleagues come to me,

Speaking words of wisdom:

“write in C.”

115 symbols, 4 newlines.

Примечание. После того, как вы ввели программе текст, надо закрыть поток ввода, чтобы она получила EOF и поняла, что ввод завершён. Это делается нажатием Ctrl+d.

Задание 3

Прошли ленивость логических операций, деление с остатком и основные функции математической библиотеки.

Задание 3

Программа просит пользователя ввести целое число и считывает его со стандартного ввода. Затем программа выводит все делители этого числа.

Задание 1

Программа, находящая локальные минимумы и максимумы функции на заданном отрезке.

В программе нужно определить функцию с некоторым произвольным многочленом. Например, функция y = x ^ 2 — 4 выглядит так:

double y(double x){
  return x * x — 4;
}

Программа должна считывать со стандартного ввода значения a, b, N, вводимые пользователем. a — левый край отрезка, b — правый. N — количество точек, на которые разбит отрезок. Далее программа должна проходить по N точкам отрезка и проверять каждую на присутствие локального минимума и максимума. Для простоты, в данной программе можно считать, что точка x0 является точкой локального максимума, если значение функции в этой точке больше значений функции в ближайших точках из разбиения справа и слева. Для локального минимума исходите из такого же допущения.

Задание 2

Простое задание на массивы, данное 8 октября в довесок к заданию 1.

Нужно определить массив целых чисел длиной не менее 10 элементов, и заполнить его некоторыми значениями. Затем произвести печать всех этих элементов, для чего использовать цикл, проходящий по массиву. В результате у вас получится вывод вида

1 2 4 5 6 8 4 2

После этого вам необходимо поменять местами элементы массива так, чтобы они шли в обратном порядке, и вновь распечатать его, получив что-то вроде

2 4 8 6 5 4 2 1

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

Сайт

Итак, на этом сайте будут размещатся текущие сообщения для 10 класса школы 1189 по предмету информатика, и ведомости успеваемости.