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

Приложение 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>