
- •Тема 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
- •Список литературы
Int main()
{
Int Temp;
int DaysInMonth[2][12]= //количество дней в месяцах 0-обычном, 1 - високосном
{{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}
};
//вводим исходные данные
Int CurrentYear, Diff, Day1, Day2, Month1, Month2, I, Visokos;
printf("\nВведите год : ");
scanf("%d",&CurrentYear);
printf("Введенный год %d. \n",CurrentYear);
//проверяем нависокосный год
if(CurrentYear%400==0 || (CurrentYear%4==0 && CurrentYear%100!=0))
{
printf("\nВисокосный год!\n\n"); Visokos=1;
}
else
{
printf("\nNE Visokosny god!\n\n"); Visokos=0;
}
do
{
printf("Введите день 1 (1-31):");
scanf("%d",&Day1);
printf("Введите месяц 1 (1-12) :");
scanf("%d",&Month1);
}
while ((Month1<1||Month1>12)||(Day1<1||Day1>DaysInMonth[Visokos][Month1-1]));
do
{
printf("Введите день 2 (1-31) : ");
scanf("%d",&Day2);
printf("Введите месяц 2 (1-12) : ");
scanf("%d",&Month2);
}
while ((Month2<1||Month2>12)||(Day2<1||Day2>DaysInMonth[Visokos][Month2-1]));
if(Month1>Month2)
{ //вторая дата должна быть старше первой
Temp=Month1;Month1=Month2;Month2=Temp; //меняем даты местами
Temp=Day1;Day1=Day2;Day2=Temp;
}
Diff=0; //итоговая разность в днях
if (Month1==Month2) Diff=abs(Day1-Day2); //если один и тот же месяц то просто вычитаем дни
else
{
for (i=Month1;i<Month2-1;i++) //пройти по всем ПОЛНОСТЬЮ прошедшим месяцам
Diff += DaysInMonth[Visokos][i]; // и сложить дни
Diff+=(DaysInMonth[Visokos][Month1-1]-Day1);//добавить отстатки дней от первого месяца
Diff+=Day2; //и еще добавить дни второго месяца
}
//вывести результат
printf ("Между %d.%d.%d и %d.%d.%d",Day1,Month1,CurrentYear,Day2,Month2, CurrentYear);
printf ("\nРазница = %d дней\n",Diff);
getch();
}
Результат выполнения программы
Введите год : 2008
Введенный год 2008.
Високосный год!
Введите день 1 (1-31):3
Введите месяц 1 (1-12) :10
Введите день 2 (1-31) : 12
Введите месяц 2 (1-12) : 10
Между 3.10.2008 и 12.10.2008
Разница = 9 дней
Пример 6. Алгоритм построения треугольника Паскаля
Треугольник Паскаля арифметический треугольник, образованный биномиальными коэффициентами. Назван в честь Блеза Паскаля.
Если очертить треугольник Паскаля, то получится равнобедренный треугольник. В этом треугольнике на вершине и по бокам стоят единицы. Каждое число равно сумме двух расположенных над ним чисел. Продолжать треугольник можно бесконечно. Строки треугольника симметричны относительно вертикальной оси.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#define M 13
Int main()
{
int n;
int a[M][M];
int i, j, k;
do
{
printf ("Введите n < 12 : ");
scanf("%d", &n);
}
while (n >= 12);
puts ("Таблица 1");
for (i = 0; i <= n; i++)
{
for (j = 0; j <= i; j++)
{
if ((i == j) || (j == 0)) a[i][j] = 1;
else a[i][j] = a[i-1][j-1] + a[i-1][j];
printf ("%4d", a[i][j]);
}
printf ("\n");
}
Puts ("Таблица 2");
for (i = 0; i <= n; i++)
{
for (j = 0;j <= i; j++)
{
if (j == 0)
for (k = 0; k < (n-i); k++) printf (" ");
printf ("%6d", a[i][j]);
}
printf ("\n");
}
getch ();
}
Результат выполнения программы
Введите n < 12 : 7
Таблица 1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
Таблица 2
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
Пример 7. Сравнение способов сортировки: способ «пузырька», сортировка выбором и метод простых вставок.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
inline void Change(int a[], int first, int second)
// меняем местами элементы буфера first на second
// a[] - заданный массив
// first и second - номера элементов массива a, которые надо поменять местами!
{
if (first == second) // Если одинаковые номера элементов, то не нужно менять их местами
return;
int i;
i = a[second];
a[second] = a[first];
a[first] = i;
}
int FindMax(int a[], int max)
// Поиск максимального числа в массиве от a[0] до a[max]
// a[] - заданный массив
// max - размер массива a
{
int imax = 0;
for (int i = 0; i <= max; i++)
{
if (a[imax] < a[i]) imax = i;
}
return imax;
}
void SelectSort(int b[], int max)
// Сортировка выбором
// b[] - заданный массив
// max - размер массива b
{
int i1;
for (int i = max - 1; i > 0; i--)
{
i1 = FindMax(b, i); // Находим самое максимальное число в промежутке от a[0] до a[i]
Change(b, i, i1); // ставим максимальное число в конец (а именно на место эллемента под номером i)
}
}
void BubbleSort(int c[], int max)
// Сортировка "пузырьком"
// c[] - заданный массив
// max - размер массива c
{
for (int i1 = 0; i1 < max; i1++)
{
for (int i = max-2; i >= i1; i--)
{
if (c[i+1] > c[i]) continue;
Change(c, i, i+1); // Двигаем минимальное число вверх, тем самым сортируя числа
}
}
}
void InsertSort(int d[], int max)
// Сортировка методом простых вставок
// d[] - заданный массив
// max - размер массива c
{
int temp, j;
for (int i = 1; i < max; i++) // цикл проходов, i - номер прохода
{
temp = d[i];
j = i - 1; // поиск места элемента в готовой последовательности
while (j >= 0 && d[j] > temp)
{
d[j+1] = d[j]; // сдвигаем элемент направо, пока не дошли
--j;
}
// место найдено, вставить элемент
d[j+1] = temp;
}
}
int main()
{
int MAX;
printf("Введите количество элементов : ");
scanf("%i", &MAX);
// Объявляем буферы
int *a = new int[MAX];
int *b = new int[MAX];
int *c = new int[MAX];
int *d = new int[MAX];
srand((unsigned)time(0));
for (int i = 0; i < MAX; i++)
{
a[i] = rand(); // заполняем случайными числами
b[i] = a[i]; // делаем копию
c[i] = a[i]; // делаем копию
d[i] = a[i]; // делаем копию
}
clock_t begin, end;
begin = clock();
BubbleSort(b, MAX); // Сортируем массив с методом "пузырька"
end = clock();
float f0 = (float)(end-begin); // Измеряем время, занятое сортировкой методом "пузырька"
printf ("\nСортировка массива из %i элементов методом "пузырька" заняла \t%.0f msec.\r\n", MAX, f0);
begin = clock();
SelectSort(c, MAX); // Сортируем массив b методом выбора
end = clock();
float f1 = (float)(end-begin); // Измеряем время, занятое сортировкой методом выбора
printf ("Сортировка массива из %i элементов методом выбора заняла \t%.0f msec.\r\n", MAX, f1);
begin = clock();