- •Предисловие
- •Введение
- •Часть первая глава 1 теоретические основы информатики
- •Введение
- •§ 1. Информатика как наука и как вид практической деятельности
- •1.1. История развития информатики
- •1.2. Информатика как единство науки и технологии
- •1.3. Структура современной информатики
- •1.4. Место информатики в системе наук
- •1.5. Социальные аспекты информатики
- •1.6. Правовые аспекты информатики
- •1.7. Этические аспекты информатики
- •Контрольные вопросы
- •§ 2. Информация, ее виды и свойства
- •2.1. Различные уровни представлений об информации
- •2.2. Непрерывная и дискретная информация
- •2.3. Единицы количества информации: вероятностный и объемный подходы
- •Вероятностный подход
- •Объемный подход
- •2.4. Информация: более широкий взгляд
- •2.5. Информация и физический мир
- •§ 3. Системы счисления
- •3.1. Позиционные системы счисления
- •3.2. Двоичная система счисления
- •3.3. Восьмеричная и шестнадцатиричная системы счисления
- •§ 4. Кодирование информации.
- •4.1. Абстрактный алфавит
- •4.2. Кодирование и декодирование
- •4.3. Понятие о теоремах шеннона
- •4.4. Международные системы байтового кодирования
- •§ 5. Элементы теории графов
- •5.1. Основные понятия
- •5.2. Представление графов
- •§ 6. Алгоритм и его свойства
- •6.1. Различные подходы к понятию «алгоритм»
- •6.2. Понятие исполнителя алгоритма
- •6.3. Графическое представление алгоритмов
- •6.4. Свойства алгоритмов
- •6.5. Понятие алгоритмического языка
- •Контрольные вопросы
- •§7. Формализация понятия «алгоритм»
- •7.1. Постановка проблемы
- •7.2. Машина поста
- •73. Машина тьюринга
- •7.4. Нормальные алгоритмы маркова
- •7.5. Рекурсивные функции
- •Контрольные вопросы и задания
- •§ 8. Принципы разработки алгоритмов и программ для решения прикладных задач
- •8.1. Операциональный подход
- •8.2. Структурный подход
- •8.3. Новейшие методологии разработки программ для эвм
- •Контрольные вопросы и задания
- •§ 9. Структуры данных
- •9.1. Данные и их обработка
- •9.2. Простые (неструктурированные) типы данных
- •9.3. Структурированные типы данных
- •Контрольные вопросы и задания
- •§ 10. Понятие об информационном моделировании
- •10.1. Моделирование как метод решения прикладных задач
- •10.2. Основные понятия информационного моделирования
- •10.3. Связи между объектами
- •Контрольные вопросы и задания
- •§ 11. Некоторые кибернетические аспекты информатики
- •11.1. Предмет кибернетики
- •11.2. Управляемые системы
- •11.3. Функции человека и машины в системах управления
- •Контрольные вопросы и задания
- •§ 12. Понятие искусственного интеллекта
- •12.1. Направления исследований и разработок в области систем искусственного интеллекта
- •12.2. Представление знаний в системах искусственного интеллекта
- •12.3. Моделирование рассуждений
- •12.4. Интеллектуальный интерфейс информационной системы
- •12.5. Структура современной системы решения прикладных задач
- •Контрольные вопросы и задания
- •Дополнительная литература к главе 1
- •Глава 2 программное обеспечение эвм
- •Введение
- •§ 1. Операционные системы
- •1.1. Назначение и основные функции операционных систем
- •1.2. Понятие файловой системы
- •1.3. Операционные системы для компьютеров типа ibm pc
- •1.4. Оболочки операционных систем
- •Контрольные вопросы и задания
- •§ 2. Понятие о системе программирования
- •2.1. Основные функции и компоненты
- •2.2. Трансляция программ и сопутствующие процессы
- •Контрольные вопросы
- •§3. Прикладное программное обеспечение общего назначения
- •3.1. Классификация
- •3.2. Инструментальные программные средства общего назначения
- •3.3. Инструментальные программные средства специального назначения
- •3.4. Программные средства профессионального уровня
- •3.5. Организация «меню» в программных системах
- •Контрольные вопросы ч задания
- •§ 4. Системы обработки текстов
- •4.1. Элементы издательского дела
- •4.2. Текстовые редакторы
- •4.3. Издательские системы Общая характеристика
- •Настольная издательская система ТеХ
- •§ 5. Системы компьютерной графики
- •5.1. Принципы формирования изображений на экране
- •5.2. Изобразительная графика
- •5.3. Графические редакторы
- •5.4. Деловая графика
- •5.5. Инженерная графика
- •5.6. Научная графика
- •Контрольные вопросы и упражнения
- •§ 6. Базы данных и системы управления базами данных
- •6.1. Понятие информационной системы
- •6.2. Виды структур данных
- •6.3. Виды баз данных
- •6.4. Состав и функции систем управления базами данных
- •6.5. Примеры систем управления базами данных
- •Контрольные вопросы и задания
- •§ 7. Электронные таблицы
- •7.1. Назначение и основные функции табличных процессоров
- •7.2. Электронные таблицы supercalc
- •7.3. Электронные таблицы excel
- •§8. Интегрированные программные средства
- •8.1. Принципы построения интегрированных программных систем
- •8.2. Интегрированный пакет ms-works
- •§ 9. Экспертные системы
- •Контрольные вопросы и задания
- •§ 10. Инструментальные программные средства для решения прикладных математических задач
- •10.1. Назначение программ
- •10.2. Пакет mathcad
- •10.3. Система аналитических преобразований reduce
- •§ 11. Компьютерное тестирование
- •11.1. Технология проектирования компьютерных тестов предметной области
- •Оценка соответствия
- •11.2. Типы компьютерных тестов
- •11.3. Инструментальные тестовые оболочки
- •11.4. Пример теста по школьному курсу информатики
- •§12. Компьютерные вирусы
- •12.1. Что такое компьютерный вирус
- •12.2. Разновидности компьютерных вирусов
- •12.3. Антивирусные средства
- •Контрольные вопросы и задания
- •§ 13. Компьютерные игры
- •13.1. Виды и назначение компьютерных игр
- •13.2. Обзор компьютерных игр
- •Контрольные вопросы
- •Глава 3 языки и методы программирования
- •Введение
- •§ 1. История развития языков программирования
- •§2. Языки программирования высокого уровня
- •2.1. Понятие о языках программирования высокого уровня
- •2.2. Метаязыки описания языков программирования
- •23. Грамматика языков программирования
- •§3. Паскаль как язык структурно-ориентированного программирования
- •3.1. Введение
- •Контрольные вопросы
- •3.2. Основные конструкции языка
- •Контрольные вопросы
- •3.3. Структуры данных
- •3.4. Процедуры и функции
- •3.5. Работа с файлами
- •3.6. Динамические информационные структуры
- •Контрольные вопросы
- •3.7. Работа с графикой
- •Var gd, gm: integer; {переменные gd и gm определяют драйвер и режим}
- •Контрольные вопросы и задания
- •3.8. Турбо-оболочки. Версии паскаля
- •Контрольные вопросы
- •3.9. Руководство пользователю турбо-паскаля
- •§4. Методы и искусство программирования
- •4.1. Проектирование программ
- •Контрольные вопросы и задания
- •4.2. Основные принципы разработки и анализа алгоритмов
- •Задания
- •4.3. Методы построения алгоритмов, ориентированные на структуры данных
- •Контрольные задания
- •4.4. Рекурсивные алгоритмы
- •Контрольные задания
- •4.5. Важнейшие невычислительные алгоритмы (поиск и сортировка)
- •If f then write('найден элемент на ',m, ' месте') else write('такого элемента в массиве нет ');
- •Контрольные вопросы и задания
- •§ 5. Бейсик как язык операционально-проблемно-ориентированного программирования
- •5.1. Введение в бейсик
- •Контрольные вопросы
- •5.2. Базовые операторы
- •Контрольные вопросы ч задания
- •5.3. Музыкальные возможности
- •Контрольные вопросы и задания
- •5.4. Графические возможности
- •Контрольные вопросы и задания
- •5.5. Обработка символьной информации
- •Контрольные вопросы и задания
- •5.6. Подпрограммы
- •Контрольные вопросы
- •5.7. Работа с файлами
- •5.8. Средства и методы организации диалога
- •Контрольные задания
- •5.9. Версии бейсика
- •5.10. Бейсик и паскаль
- •§ 6. Введение в язык программирования си
- •6.1. Общая характеристика языка и пример программы на си
- •6.2. Элементы си: алфавит, идентификаторы, литералы, служебные слова
- •6.3. Типы данных и операции в языке си. Выражения
- •6.4. Операторы. Управляющие конструкции языка
- •6.5. Структура программы на си. Понятие о функциях
- •6.6. Классы памяти
- •6.7. Функции вводa-вывода
- •6.8. Директивы препроцессора
- •6.9. Си и паскаль
- •§ 7. Основы логического программирования на языке пролог
- •7.1. Общие сведения
- •7.2. Алгоритм выполнения программ на прологе
- •7.3. Рекурсия
- •7.4. Предикат отсечения и управление логическим выводом в программах
- •7.5. Обработка списков
- •7.6. Решение логических задач на прологе
- •Контрольные вопросы и задания
- •§ 8. Введение в функциональное программирование на языке лисп
- •8.1. Назначение и общая характеристика языка
- •8.2. Основные элементы программы на лиспе. Списки
- •8.3. Функции
- •8.4. Формы. Управляющие конструкции в лисп-программе
- •8.5. Рекурсия и цикл в программах на лиспе
- •8.6. Ввод-вывод данных
- •8.7. Пример программирования на лиспе
- •8.8. Свойства символов
- •Контрольные вопросы и задания
- •§9. Введение в объектно-ориентированное программирование
- •9.1. Основные положения
- •9.2. Основы объектного программирования в системе турбо-паскаль
- •9.3. Оболочка turbo-vision
- •9.4.* Среда объектного визуального программирования delphi
- •9.8. Система объектного программирования smalltalk
- •Контрольные вопросы и задания
- •Дополнительная литература к главе 3
- •Часть вторая глава 4 вычислительная техника
- •Введение
- •§ 1. История развития вычислительной техники
- •Начальный этап развития вычислительной техники
- •Начало современной истории электронной вычислительной техники
- •Поколения эвм
- •1.4. Персональные компьютеры
- •1.5. И не только персональные компьютеры...
- •1.6. Что впереди?
- •Контрольные вопросы
- •§2. Архитектура эвм
- •2.1. О понятии «архитектура эвм»
- •1.2. Классическая архитектура эвм II принципы фон неймана
- •2.3. Совершенствование и развитие внутренней структуры эвм
- •2.4. Основной цикл работы эвм
- •2.5. Система команд эвм и способы обращения к данным
- •Контрольные вопросы
- •§3. Архитектура микропроцессоров
- •3.1. История развития микропроцессоров
- •3.3. Внутренняя организация микропроцессора
- •3.3. Работа микропроцессора с памятью. Методы адресации
- •3.4. Форматы данных
- •3.5. Обработка прерываний
- •3.6. Работа микропроцессора с внешними устройствами
- •3.7. Пример: система команд процессоров семейства pdp
- •Контрольные вопросы и задания
- •§4. Учебная модель микрокомпьютера
- •4.1. Структура учебного микрокомпьютера
- •4.2. Система команд
- •4.3. Адресация данных
- •4.4. Работа с внешними устройствами
- •4.5. Примеры программ
- •4.6. Некоторые справочные данные по е-97
- •Контрольные вопросы и задания
- •§ 5. Внешние устройства эвм: физические принципы и характеристики
- •5.1. Внешние запоминающие устройства
- •5.2. Устройства ввода информации
- •5.3. Устройства вывода информации
- •Контрольные вопросы и задания
- •§ 6. Логические основы функционирования эвм
- •6.1. Логика высказываний. Элементарные логические функции
- •6.2. Схемная реализация элементарных логических операций. Типовые логические узлы
- •63. Пример электронной реализации логического элемента
- •Контрольные вопросы и задания
- •Дополнительная литература к главе 4
- •Глава 5 компьютерные сети и телекоммуникации введение
- •§ 1. Локальные сети
- •1.1. Аппаратные средства
- •1.2. Конфигурации локальных сетей и организация обмена информацией
- •1.3. Локальные сети учебного назначения
- •Контрольные вопросы
- •§2. Операционные системы локальных сетей
- •Контрольные вопросы ч задания
- •§3. Глобальные сети
- •3.1. Общие принципы организации
- •3.2. Аппаратные средства и протоколы обмена информацией
- •3.3. Электронная почта
- •3.4.1. Адресация и виды информации в Internet
- •3.4.2. Доступ к информации в Internet
- •3.4.3. Язык разметки гипертекстов html
- •3.4.4. Программа-оболочка Internet Explorer
- •3.4.5. Другие информационные системы в Internet
- •§ 4. Представление об операционной системе unix
- •§ 5. Использование компьютерных сетей в образовании
- •5.1. Телекоммуникации как средство образовательных информационных технологий
- •5.2. Персональный обмен сообщениями
- •5.3. Информационное обеспечение
- •5.4. Совместное решение задач
- •Глава 6 информационные системы введение
- •§ 1. Банки информации
- •1.1. Банки данных
- •1.2. Банки документов
- •1.3. Банк педагогической информации
- •§ 2. Базы данных в структуре информационных систем
- •2.1. Основные понятия
- •2.2. Проектирование баз данных
- •2.3. Представление об языках управления реляционными базами данных типа dBase
- •2.3.1. Основные элементы субд типа dBase
- •2.3.2. Создание структуры файлов базы данных
- •2.3.3. Командный язык субд
- •2.3.4. Ввод данных в базу и редактирование
- •2.3.5. Дополнительные операции
- •2.3.6. Организация системы меню
- •2.3.7. Пример создания информационной системы с помощью субд типа dBase
- •§ 3. Автоматизированные информационные системы
- •3.1. Автоматизированные системы управления
- •3.2. Информационные системы управления
- •3.2.1. Общие принципы
- •3.2.2. Информационные системы управления в образовании
- •3.3. Автоматизированные системы научных исследований
- •3.4. Системы автоматизированного проектирования
- •3.5. Геоинформационные системы
- •Контрольные вопросы
- •§4. Экспертные системы
- •Контрольные вопросы и задания
- •§ 5. Компьютерные обучающие системы
- •5.1. Основные принципы новых информационных технологий обучения
- •5.2. Типы обучающих программ
- •5.3. Компьютерное тестирование
- •5.4. Перспективные исследования в области компьютерного обучения
- •Глава 7 компьютерное математическое моделирование введение
- •§ 1. О разновидностях моделирования
- •§2. Понятие о компьютерном математическом моделировании
- •2.1. Математическое моделирование и компьютеры
- •2.2. Этапы и цели компьютерного математического моделирования
- •2.3. Классификация математических моделей
- •2.4. Некоторые приемы программирования
- •§3. Моделирование физических процессов
- •3.1. Физика и моделирование
- •3.2. Свободное падение тела с учетом сопротивления среды
- •3.3. Движение тела, брошенного под углом к горизонту. Законы подобия
- •3.4. Движение тела с переменной массой: взлет ракеты
- •3.5. Движение небесных тел
- •3.6. Движение заряженных частиц
- •3.7. Колебания математического маятника
- •3.8. Моделирование явлений и процессов в приближении сплошной среды
- •3.9. Моделирование процесса теплопроводности
- •Контрольные вопросы и задания
- •§ 4. Компьютерное моделирование в экологии
- •4.1. Экология и моделирование
- •4.2. Модели внутривидовой конкуренции
- •4.3. Логистическая модель межвидовой конкуренции
- •4.4. Динамика численности популяций хищника и жертвы
- •4.5. Имитационное моделирование динамики популяций
- •Контрольные вопросы и задания
- •§5. Глобальные модели развития человечества
- •§ 6. Моделирование случайных процессов
- •6.1. Техника стохастического моделирования
- •6.2. Моделирование случайных процессов в системах массового обслуживания
- •6.3. Различные примеры моделирования случайных процессов
- •Контрольные вопросы и задания
- •§7. Компьютерное математическое моделирование в экономике
- •7.1. Постановка зaдaчи линейного программирования
- •7.2. Симплекс-метод
- •Контрольные вопросы и задания
- •Дополнительная литература к главе 7
- •Содержание
- •§4. Методы и искусство программирования 261
- •§ 5. Бейсик как язык операционально-проблемно-ориентированного программирования 290
- •§ 6. Введение в язык программирования си 306
6.5. Структура программы на си. Понятие о функциях
Программа на языке Си представляет собой набор последовательно описанных функций (процедуры и подпрограммы в языке Си считаются частным случаем функций). Каждая функция - самостоятельная единица программы, предназначенная для решения определенной задачи (или подзадачи). При описании она имеет следующий вид:
Тип_функцни Имя (<список аргументов>)
<описания аргументов>
{
<описания>
<операторы>
}
Отметим, что список аргументов может быть пустым (однако, скобки после имени функции сохраняются). В этом случае, естественно, нет и их описаний.
Имеется одна главная функция (с именем main), с которой начинается выполнение программы. Функции могут обращаться к другим функциям посредством конструкций вызова. Вызов функции используется при вычислении значения выражения. В результате вызова функция возвращает вычисленное значение, которое и является значением вызова функции. Попутно функция может преобразовывать значения своих аргументов. Такой результат вызова функции называется побочным эффектом.
В модуле, вызывающем данную функцию, тип возвращаемого ею значения должен быть описан (даже если это неопределенное значение) вместе с описанием переменных.
Пример. Пусть необходимо вывести на экран словосочетание «Простая функция без аргументов» 15 раз, используя функции.
Программа 97
#include<stdio.h>
main ()
(
int i,print() ;
for (i=l;i<=15;i++) print();
{
print() /* вызываемая функция без аргументов */
)
printf ("Простая функция без аргументов\n»);
}
Аргументы передаются по значению путем копирования в соответствующие (по порядку) параметры, указанные в определении функции. Соответствие аргументов и параметров по количеств) и типу не контролируется в языке Си. Такой контроль может быть выполнен с помощью дополнительных средств отладки.
Следует различать формальные аргументы, используемые при описании функций, и фактические, задаваемые при вызове функций. Формальный аргумент - переменная в вызываемой программе, а фактический аргумент - конкретное значение, присвоенное этой переменной вызывающей программой. Фактический аргумент может быть константой, переменной или даже более сложным выражением. Независимо от типа фактического аргумента он вначале вычисляется, а затем его величина (в данном случае некоторое целое число) передается функции (см. программу 97). Можно задавать список аргументов, разделенных запятыми. Пример: программа 98, которая находит числа х, у, z, принадлежащие отрезку [1;20] и удовлетворяющие условию x^2 = у^2 + z^2.
Программа 98
#include<stdio.h>
main()
(
int х, у, z, zero() ;
char p, q, ch() ;
x=2; y=45; z=0;
q=’o’;
printf("х» "); zero(x);
printf("x+y+(x+y)^z= "); zero(x+y+(x+y)^z) ;
printf("q= "); ch(q);
}
int zero(u)
int u;
(
printf("%d\n",u);
)
char ch(u)
char u;
{
printf("%c\n",u);
)
Результат работы программы:
x=2
x+y+(x+y)^z= 94
q=0
Программа 99
#include<stdio.h>
main()
(
int x,y,z;
int zero();
printf("Следующие величины могут быть сторонами прямоугольного треугольника:\n");
for (х=1;х<=20;х++)
for (у=1;у<=20;у++)
for (z=l;z<=20;z++)
if (y*y+z*z==x*x)
zero(x,у,z);
}
int zero(f,g,h)
int f,g,h;
(
printf ("x= %d, y= %d, 2=%d\n",f,g,h);
)
Результат работы программы:
следующие величины могут быть сторонами прямоугольного треугольника
х= 5, у= 3, z= 4
х= 5, у= 4, z= 3 x= 10, y= 6, z= 8
x= 10, y=8, z=6 x= 13, y=5, z= 12
x= 13, y= 12, z= 5 x= 15, y= 9, z= 12
x= 15, y= 12, z=9 x=17, y=8, z=15 x= 17, y= 15,
z=8 x=20, y=12, z=16
x=20, y= 16, z= 12
Завершает выполнение данной функции и передает управление вызывающей функции оператор return; в главной функции main он же вызывает завершение выполнения всей программы. Оператор return может содержать любое выражение:
return (<выражение>);
Если выражение не пусто, то вычисляется его значение, которое и становится значением данного вызова функции.
Достижение «конца» функции (правой закрывающей фигурной скобки) эквивалентно выполнению оператора return без возвращаемого значения (т.е. оператор return в конце функции может быть опущен).
Пример. Данная программа вычисляет факториал, если число меньше 8; если вводимое число больше или равно 8, то выводится сообщение «Очень большое число».
Программа 100
#include<stdio.h>
main()
{
int n, s() ;
printf("Введите число ");
scant("%d", &n) ;
if (n<8) printf(=%d", s(n)) ;
else printf("Очень большое число");
)
int s(x) /* определение функции с параметром */
int x;
{
int y,p=l;
for (y=x; y>0; y- ) p*=y;
return(p); /* Возвращает в основную программу значение р */
}
Результат работы программы:
1. Введите число 4
р=24
2.Введите число 9
Очень большое число
Пример: предположим, что нужно вычислить x2 (для некоторого неотрицательного целого у) (очевидный способ реализации возведения в целочисленную степень -многократное умножение, но существует более эффективный алгоритм, приведенный ниже).
Программа 101
#include<stdio.h>
main()
(
int а, Ь, x, у, z;
int odd() ;
printf("\nВведите x, у через пробел: ");
scanf("%d %d", &х, &у); а=х; Ь=у; z=l;
while (b!=0)
if (odd(b))
{ z=z*a; b- -;}
else
( a=a*a; b=b/2;}
printf("\n%d", z);
}
int odd(t)
int t;
(
return((t%2==0)? 0:1);
)
Результат работы программы:
Введите x, у через пробел: 15 2
225
Если функции необходимо вернуть несколько значений, можно использовать два различных приема:
• применить глобальные переменные (в этом случае кроме изученных ранее характеристик переменных (имени, типа, значения), используется еще одна – класс памяти, см.ниже);
• применить переменные типа «указатель» в качестве аргументов функции. При вызове функции информация о переменной может передаваться функции в двух видах. Если мы используем форму обращения
function 1(х);
то происходит передача в функцию значения переменной х. Изменение этого значения в вызывающую функцию не возвращается. Если мы используем форму обращения
function2(&x);
то происходит передача адреса переменной х. Теперь измененное значение переменной х может использоваться в вызывающей функции. Первая форма обращения требует, чтобы определение функции включало в себя формальный аргумент того же типа,что и х:
function l(num)
int num;
Вторая форма обращения требует, чтобы определение функции включало в себя формальный аргумент, являющийся указателем на один из объектов соответствующего типа:
function2(x)
int *x;
Обычно пользуются первой формой, если входное значение необходимо функции для некоторых вычислений или действий, и второй формой, если функция должна будет изменять значения переменных в вызывающей программе. Выше вторая форма вызова \же применялась при обращении к ф\нкции scanf(). Когда мы хотим ввести некоторое значение в переменную num, мы пишем scanf(''%d",&num). Данная функция читает значение, затем, используя адрес, который ей дается, помещает это значение в память.
Пример: пусть необходимо поменять местами заданные значения переменных х и у.
Программа 102
#include<stdio.h>
main()
{
int х, у;
int interchange(); /* описание функции типа int */
x=l; y=3;
printf("Имели... x=l y=3\n") ;
interchange(&x, &y); /* обращение к функции (в данном случае передаются адреса переменных) */
printf("Получили... x=%d y=%d", х, у);
}
/* вызываемая функция */
int interchange(u, v)
int *u, *v;
(
int p;
p=*\i; *u=*v; *v=p;
}
Результат работы программы:
Имели х=1 у=3
Получили х=3 у=1
В этой программе в вызове функции interchange(&x,&y) вместо передачи значений х и у мы передаем их адреса. Это означает, что формальные аргументы и и v, имеющиеся в спецификации interchanage(u,v), при обращении будут заменены адресами и, следовательно, они должны быть описаны как указатели.
Поскольку х и у целого типа, u и v являются указателями на переменные целого типа, и мы вводим следующее описание:
int *u,*v; int p;
Оператор описания используется с целью резервирования памяти. Мы хотим поместить значение переменной х в переменную р, поэтому пишем: р=*u; Вспомните, что значение переменной u - это &х, поэтому переменная и ссылается на х. Это означает, что операция *u дает значение х, которое как раз нам и требуется. Мы не должны писать, например, так:
р = u; /* неправильно */
поскольку при этом происходит запоминание адреса переменной х, а не ее значения. Аналогично, оператор *u = *v соответствует оператору х = у.
Тип функции определяется типом возвращаемого ею значения, а не типом ее аргументов. Если указание типа отсутствует, то по умолчанию считается, что функция имеет тип int. Если значения функции не принадлежат типу int, то необходимо указать ее тип в двух местах.
1. Описать тип функции в ее определении:
char pun(ch,n) /* функция возвращает символ */
int n;
char ch;
2. Описать тип функции также в вызывающей программе. Описание функции должно быть проведено наряду с описаниями переменных программы; необходимо только указать скобки (но не аргументы) для идентификации данного объекта как функции.
main()
{
char rch,pun();