![](/user_photo/2706_HbeT2.jpg)
- •1. Основные этапы решения задач на эвм
- •Формулировка задачи
- •Математическая постановка задачи
- •Разработка алгоритма решения задачи
- •Написание текста программы на языке программирования
- •Ввод текста программы в эвм
- •Поиск и устранение синтаксических ошибок
- •Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы
- •Базовые компоненты программ
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Типы данных
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Универсальные функции ввода и вывода любых типов данных
- •Структуры и форма написания программы
- •Программирование разветвляющихся вычислительных процессов
- •Цикл while – цикл с предусловием.
- •Цикл do while – цикл с постусловием
- •Цикл for
- •Безусловная передача управления внутри цикла
- •Описание некоторых стандартов алгоритмов
- •Работа с файлами (функции ввода вывода верхнего уровня)
- •Указатели
- •Одномерные массивы Объявление массива.
- •Стандартные функции обработки строк
- •Многомерные массивы на примере двумерных
- •Классы памяти
- •Способы передачи данных в функцию
- •Функции и строки
- •Функции и одномерные числовые массивы
- •Функции и двумерные массивы
- •Функции с параметрами по умолчанию
- •Перегрузка функции
- •Шаблоны функции
- •Типы данных, определяемые пользователем
- •4.1. Структуры
- •Шаблон структуры
- •Структурные переменные
- •Инициализация структуры
- •Доступ к полям структуры
- •Массив структур
- •Вложенные структуры
- •Битовые поля структур
- •Передача структуры в функцию
- •Двоичный ввод-вывод структур
- •Функции двоичного ввода-вывода
- •Динамические структуры данных
- •4.2. Объединения
- •4.3. Перечисления
- •Файловые операции ввода/вывода
- •Файловый ввод/вывод с прямым доступом
Описание некоторых стандартов алгоритмов
1. Алгоритм вычисления суммы ряда чисел.
Объявить переменную соответствующего типа для накопления суммы и обнулить ее: float sum=0;
В процессе выполнения цикла при выполнении определенного условия или безусловно добавить к переменной sum+=a;
2. Алгоритм накопления произведения ряда чисел.
Объявить переменную соответствующего типа для накопления произведения и инициализировать ее 1; при выборе типа учитывать, что произведение очень быстро растет. double pr=1;
В процессе выполнения определенного условия или безусловно помножить переменную на очередное число pr*=b;
3. Алгоритм подсчета количества чего либо.
Объявить переменную целого типа для подсчета количества и обнулить ее int kol=0;
В процессе выполнения цикла при выполнении определенного условия количество увеличить на единицу kol++;
4. Алгоритм подсчета максимального из ряда чисел.
Объявить переменную соответствующего типа для подсчета максимума. Первоначально в переменную max поместить первое число, среди которых ищем максимум max=a1;
В процессе выполнения цикла каждое очередное число сравнить с переменно max.
if (max<aN )
max=aN;
5. Формирование в программе случайных чисел.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
для этого нужны заголовочные файлы:
#include "time.h" - для времени
#include "stdlib.h" - для случайных чисел
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Один раз в программе вызвать функцию srand(); для инициализации генератора случайных чисел.
srand((unsigned)time(NULL));
а) Формирование случайного положительного числа в диапазоне типа unsigned
int n;
n=rand();
б) Формирование случайного целого числа в диапазоне [-m;+m]
int n;
n=rand()%(2*m+1)-m;
в) Формирование случайного дробного числа в диапазоне [-m;+m]
double n;
n=(rand()%(2*m+1)-m)*0.9738179;
Работа с файлами (функции ввода вывода верхнего уровня)
При работе с файлами, файл должен быть открыт. В результате этого действия определяется указатель потока.
Указатель потока – это адрес определенного места в оперативной памяти, где хранятся сведения о файле. Указатель потока позиционируется на начало файла при попытке записи или чтения или в конец файла при дозаписи. Указатель потока автоматически смещается по файлу вслед за чтением или записью. Программист принудительно может изменить позиционирование указателей потока с помощью функции fseek(). При окончании работы с файлом, поток должен быть закрыт, вследствие чего указатель потока освобождается и может быть использован для открытия других файлов. Функции ввода вывода работают не на прямую с файлом, а через указатель потока.
fopen (открытие потока).
Функция имеет два аргумента:
Строка константа содержит полный путь к файлу или имя строки- переменной, в которую предварительно введено имя файла.
Строка константа, содержащая режим доступа к файлу.
“r” – режим существующего файла.
“w” – это создание нового файла или перезапись существующего файла.
“a” – дозапись в конец существующего или созданного нового файла.
“r+” – к свойствам добавляется свойство записи.
“w+” – к свойствам добавляется свойство чтения.
“a+” – к свойствам добавляется свойство чтения.
t – текстовый редактор.
b – байтовый редактор.
Пример:
Функция возвращает в качестве результата указатель потока.
Открыть существующий файл для чтения.
FILE*in; //in – указатель потока
in = fopen (“C:\\user\\ИУ-42\\.f.txt”,“rt”);
if (in==NULL)
{
puts (“Нет файла”);
return;
}
Открыть файл для записи, имя файла ввести с клавиатуры.
FILE*out; // out – указатель потока;
char str[80];
puts (“Введите имя файла”);
gets (str);
out = fopen (str, “wt”);
if (out = = NULL)
{
puts (“Поток не открыт”);
return;
}
Закрытие потока. fclose(in); где in – имя потока.
Чтение из файла или запись файла происходит порциями.
Файл можно читать: 1)посимвольно; 2)построчно (с пробелами внутри); 3) словами; 4) чтение цифр определенного типа.
Любая функция чтения в качестве результата возвращает сигнал, закончился файл или нет.
Ввод -вывод символов.
Функция ввода fgetc – в качестве аргумента требует имя потока, а прочтенный символ возвращает в качестве результата. Переменная под символ должна быть объявлена типом int.
int simv;
simv = fgetс(in);
Если обнаружен конец файла
if (simv = = EOF)
{
// ситуация конца файла.
}
Функция вывода символа
fputc (simv, out);
fputc (‘*’, out);
Ввод - вывод строк с пробелами внутри.
Функция fgets имеет три аргумента:
Имя строки, куда производится чтение.
Размер строки.
Имя потока.
char str [80];
if (fgets (str,80,in) = = NULL)
{
// ситуация конец файла.
}
fputs – имеет два аргумента:
Строка откуда производится запись.
Имя потока.
fputs (str, out);
fputs (“Привет”, out);
Функция ввода- вывода слов fscanf.
char str [40];
in n;
n = fscanf (in,”%s”,str);
if (n = = NULL)
{
// ситуация конца файла.
}
fprintf (out,”%s_”, str);
fprintf (out, “Привет!\n”);
Ввод -вывод чисел.
float ch;
in n;
n = fscanf (in,“%f”,&ch);
if (n = = NULL)
{
// ситуация конца файла.
}
Прямой доступ к файлу. fseek – используется для перемещения управления потока в произвольное место в файле.
Функция имеет три аргумента:
Имя потока.
Данные типа long, показывающие, на сколько байт будет произведено смещение.
Равен нулю если смещение относительно начала файла, единица, если смещение относительно текущей позиции и двойке, если смещение относительно конца файла.
Функция fseek не отcлtживает смещение за пределы конца файла.
Пример:
fseek (in,-1L,1); на один символ назад относительно текущей позиции.
Если файл открыт для чтения и записи то переход от чтения к записи и, наоборот, от записи к чтению происходит через функцию fseek, даже если реальное смещение не нужно.
Определение текущей позиции в файле.
ftell – имеет один аргумент-имя потока и возвращает номер позиции указателя потока в файле.
Пример:
long n;
n = ftell (in);