Описание некоторых стандартов алгоритмов
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 – байтовый редактор.
Пример:
Функция возвращает в качестве результата указатель потока.
1. Открыть существующий файл для чтения.
FILE*in; //in – указатель потока
in = fopen (“C:\\user\\ИУ-42\\.f.txt”,“rt”);
if (in==NULL)
{
puts (“Нет файла”);
return;
}
2. Открыть файл для записи, имя файла ввести с клавиатуры.
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 имеет три аргумента:
· Имя строки, куда производится чтение.
· Размер строки.
· Имя потока.
charstr[80];
if (fgets (str,80,in) = = NULL)
{
// ситуация конец файла.
}
fputs – имеет два аргумента:
· Строка откуда производится запись.
· Имя потока.
fputs (str, out);
fputs (“Привет”, out);
Функция ввода- вывода слов fscanf.
char str [40];
inn;
n = fscanf(in,”%s”,str);
if (n = = NULL)
{
// ситуация конца файла.
}
fprintf(out,”%s_”, str);
fprintf(out, “Привет!\n”);
Ввод -вывод чисел.
float ch;
inn;
n = fscanf(in,“%f”,&ch);
if (n = = NULL)
{
// ситуация конца файла.
}
Прямой доступ к файлу. fseek – используется для перемещения управления потока в произвольное место в файле.
Функция имеет три аргумента:
· Имя потока.
· Данные типа long, показывающие, на сколько байт будет произведено смещение.
· Равен нулю если смещение относительно начала файла, единица, если смещение относительно текущей позиции и двойке, если смещение относительно конца файла.
Функция fseek не отcлtживает смещение за пределы конца файла.
Пример:
fseek (in,-1L,1); на один символ назад относительно текущей позиции.
Если файл открыт для чтения и записи то переход от чтения к записи и, наоборот, от записи к чтению происходит через функцию fseek, даже если реальное смещение не нужно.