- •Тема 1. Основные этапы решения задач на эвм 5
- •Тема 2. Жизненный цикл программы. Критерии качества программы. 15
- •Тема 3. Схемы алгоритмов, данных, программ 29
- •Тема 1. Основные этапы решения задач на эвм Постановка задачи разработки программного обеспечения
- •Анализ формальной постановки задачи
- •Выбор или разработка математической модели и метода решения
- •Разработка алгоритма
- •Базовые структуры алгоритма
- •3.2. Цикл с постусловием.
- •Тема 2. Жизненный цикл программы. Критерии качества программы.
- •Техническое задание и спецификация программы
- •Разработка проекта программной системы
- •Программирование (кодирование) или программная реализация алгоритмов
- •Тестирование и отладка
- •Эксплуатация и сопровождение
- •Критерии качества программного обеспечения
- •Тема 3. Схемы алгоритмов, данных, программ
- •Символы данных
- •Отображает данные, вводимые в ручную, во время обработки с устройств любого типа (клавиатура, переключатели, кнопки, световое перо, полоски со штрих кодом и т.Д.).
- •Символы процесса
- •Символы линий
- •Специальные символы
- •Правила применения символов в схемах
- •Правила выполнения соединений
- •Специальные условные обозначения
- •Тема 4. Язык программирования высокого уровня Си Общие сведения о языке Си
- •Алфавит языка Си
- •Грамматика для описания языка, синтаксические диаграммы
- •Структура программы на языке Си
- •Void main() //функция main
- •Имена объектов в программе
- •Выражения, операции и приоритеты
- •Тема 5. Стандартные типы данных
- •Тема 6. Составные типы данных Данные регулярного типа (массивы)
- •Int b [n]; // вектор из 10 целых элементов
- •9 Strcpy(s1,&s2[k]); //копирует правую подстроку из s2 в s1
- •9 Strncpy(s1,&s[2],n); //копирует среднюю подстроку из s2 в s1
- •Void main() /*пример функции*/
- •If(strcmp(s, "пароль"))
- •If(!strсmp("quit", s)) break;
- •Данные комбинированного типа (структуры)
- •Int month;
- •Int year;
- •Перечисления
- •Объединения
- •Указатели
- •Void *addres;
- •Int arrey[25];
- •Тема 7. Представление основных управляющих структур программирования Оператор присваивания
- •Составной оператор
- •Оператор перехода Goto
- •Условный оператор If
- •Оператор выбора switch
- •Операторы цикла while, do – while, for
- •Int I,j,imax,jmax,imin,jmin;
- •Операторы прерывания циклов
- •If (!flag) printf("Отрицательных чисел нет"); Форматированный ввод данных
- •Форматированный вывод данных
- •Преобразование типов
- •Инициализация данных
- •Тема 8. Функции
- •Определение функций в языке Си
- •Int rus (unsigned char r)
- •Void change (int X, int y)
- •Void change (int *X, int *y)
- •Вызов функций в языке Си
- •Int *fun (intx,int *y);
- •Int main()
- •Рекурсивные функции
- •Int nodWhile (int m, int n)
- •Int nodWhile (int m, int n)
- •Int main()
- •Int fCalculated[nFib];
- •Int FibDinam (int n)
- •Int main()
- •Int Summa(int n, int a[100])
- •Int main()
- •Тема 9. Файлы
- •Int fseek(file *fp, long count, int access);
- •Int ferror(file *fp);
- •Int remove(char *file_name);
- •Void rewind(file *fp);
- •Int main()
- •Тема 10. Приемы программирования. Примеры алгоритмов Алгоритмы сортировки
- •Исходный массив
- •Void SortBubble (int count, int* pArr)
- •Исходный массив
- •Void SortSelect(int count, int* pArr)
- •Int i1,temp;
- •Int jmax;
- •Void SortInsert (int count, int* pArr)
- •Int temp, j;
- •Алгоритмы поиска
- •Int bfSearch(char *s, char *p)
- •Int bmtarr[255];
- •Int bmSearch(int startpos, char *s, char *p)
- •Int BinarySearch (int lb, int ub, int key, int* pArr)
- •Динамические структуры данных
- •Линейные списки
- •Int value; // значение элемента
- •Void PrintSearchList (list head, int val)
- •If (lfound) printf("Элемент в списке найден!");
- •Стек, очередь, дек
- •Int prior(char);
- •Void main(void)
- •Int k, point;
- •Int prior(char a)
- •Деревья
- •Int info; //информационное поле
- •Приложение 1. Стандартные библиотеки языка Си
- •Приложение 2. Примеры реализации алгоритмов
- •Int main()
- •Int arr[10]; // Массив arr из 10 целочисленных элементов
- •Int I; // Счетчик для циклов
- •Int main()
- •Int main()
- •Int main()
- •Int Temp;
- •Int CurrentYear, Diff, Day1, Day2, Month1, Month2, I, Visokos;
- •Int main()
- •InsertSort(d, max); // Сортируем массив b методом вставок
- •Int number;
- •Int main()
- •Не рекурсивный алгоритм решения задачи Ханойская башня.
- •Int main()
- •Рекурсивный алгоритм решения задачи Ханойская башня.
- •Void move(int I, int j, int d)
- •Void hanoy(int I, int j, int k, int d)
- •Int main()
- •Int Cubic(double *X,double a,double b,double c);
- •Int Cubic (double *X, double a, double b, double c)
- •Void lu_backsub (double **a, int n, int *indx, double *b)
- •Void lu_invert (double **a, int n, int *indx, double **inv, double *col)
- •Int BracketRoot (double x0, double *a, double *b, double d0, double di, double dmax, double (*fun)(double));
- •Int BracketRoot (double x0, double *a, double *b, double d0,
- •Int main()
- •Int expo, I;
- •If (expo & 1)
- •Int main()
- •Приложение 3. Лабораторные работы Лабораторная работа №1
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораторная работа №12
- •Список литературы
Приложение 2. Примеры реализации алгоритмов
Пример 1. Дано 10 чисел. Определить, какие из них больше своих соседей.
#include <stdio.h>
#include <cstdlib>
Int main()
{
Int arr[10]; // Массив arr из 10 целочисленных элементов
Int I; // Счетчик для циклов
for (i = 0; i < 10; i++) // Вводим элементы массива
{
printf("Введите %d элемент массива : ", i);
scanf("%d",&arr[i]);
}
for (i = 1; i <= 8; i++) // Перебираем все элементы массива от 1 до 8
{
/* Сравниваем элемент с предыдущим и слудующим. Если элемент больше, то выводим его на экран */
if(arr[i] > arr[i-1] && arr[i] > arr[i+1])
printf("\nЭлемент %d больше своих сосдей : %d\n",i,arr[i]);
}
system("pause");
}
Результат выполнения программы
Введите 0 элемент массива : 1
Введите 1 элемент массива : 3
Введите 2 элемент массива : 4
Введите 3 элемент массива : 5
Введите 4 элемент массива : 2
Введите 5 элемент массива : 8
Введите 6 элемент массива : 6
Введите 7 элемент массива : 10
Введите 8 элемент массива : 5
Введите 9 элемент массива : 1
Элемент 3 больше своих сосдей : 5
Элемент 5 больше своих сосдей : 8
Элемент 7 больше своих сосдей : 10
Пример 2. Напечатать заданный непустой текст, удалив из него все цифры.
#include <stdio.h>
#include <cstdlib>
#include <string.h>
Int main()
{
int i;
char z; // Текущий вводимый символ
printf (“\nНапишите предложение с точкой в конце:\n”);
/* Пока не встретилась точка считываем символы. Если встретилась цифра, заканчиваем итерацию цикла, иначе выводим символ */
for (i = 0, z = 'a'; z != '.'; i++) {
scanf ("%c", &z);
if (z == '0' || z == '1' || z == '2' || z == '3' || z == '4') continue;
if (z == '5' || z == '6' || z == '7' || z == '8' || z == '9') continue;
printf (“Полученный текст : “);
printf ("%c\n", z);
}
system ("pause");
}
Результат выполнения программы
Напишите предложение с точкой в конце:
З2д3е6с8ь0 н76е9т 2н5и о8д0н7ой 3ц6и6фры4
Полученный текст : Здесь нет ни одной цифры
Пример 3. Определить, находится ли точка внутри шара?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct
{
float x;
float y;
float z;
float R;
} shar;
typedef struct
{
float x;
float y;
float z;
} tochka;
Int main()
{
shar S;
tochka T;
printf ("\n Введите координаты шара: x,y,z,R ");
scanf ("%f %f %f %f",&S.x,&S.y,&S.z,&S.R);
printf ("\n Введите координаты точки:x,y,z ");
scanf ("%f %f %f", &T.x,&T.y,&T.z);
if ((T.x-S.x)*(T.x-S.x)+(T.y-S.y)*(T.y-S.y)+(T.z-S.z)*(T.z-S.z)<=S.R*S.R)
printf ("\n Точка находится в шаре!");
else
printf ("\n Точка не находится в шаре!");
getch();
}
Результат выполнения программы
Введите координаты шара: x,y,z,R 0 0 0 2
Введите координаты точки:x,y,z 1 1 1
Точка находится в шаре!
Пример 4. Вычисление периода дроби.
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
// объявление переменных
int m,n;
int* ostatki;
int* period;
unsigned int len;
// проверка остатков
int IsInOstatki(int ost, int len)
{
//len-1 чтоб не проверять остаток, ввденый на текущем шаге
for (int i = 0; i < len - 1; i++)
{
if (ostatki[i] == ost) return i;
}
return 0;
}
int main()
{
cout << "Введите числитель дроби : \r";
cin >> m;
cout << "\r\nВведите знаменатель дроби : \r";
cin >> n;
ostatki = new int[n+1];
period = new int[n+1];
int d = m, q = n;
int r, pos;
len = 1;
do
{
r = d % q;
ostatki[len] = r;
d /= q;
period[len] = d;
d = 10 * r;
len++;
}
while ((pos = IsInOstatki (r, len/*сколько остатков помещено в массив остатков*/)) == 0);
// вывод результатов
cout << "дробь= \r\n";
cout << period[1] << ",";
for (r = 2; r < len; r++)
{
cout << period[r];
}
cout << "\r\n период = ";
for(r = pos + 1; r < len; r++)
cout << period[r];
cout << "\r\n";
// освобождение ресурсов
delete[] ostatki;
delete[] period;
system ("pause");
}
Результат выполнения программы
Введите числитель дроби :
12
Введите знаменатель дроби :
13
дробь
0,923076
период = 923076
Пример 5. Вычисление интервала в днях между двумя датами текущего года.
Год високосный, если он делится на четыре без остатка, но если он делится на 100 без остатка, это не високосный год. Однако если он делится без остатка на 400, это високосный год. Таким образом, 2000 г. является особым високосным годом, который бывает лишь раз в 400 лет.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>