Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основная книга по С++й.doc
Скачиваний:
16
Добавлен:
28.10.2018
Размер:
2.07 Mб
Скачать

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();