Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Одномерные массивы Пример решения простой задачи
Задача:
Заполнить массив a[N] случайным образом вещественными числами, заданными на отрезке [A, B].
Решение:
#include <stdio. h>
#include <time. h>
#include <stdlib. h>
// определение константы числа элементов массива
#define N 10
// определение левой границы изменения значений элементов
#define A -1.0f
// определение правой границы изменения значений элементов
#define B 1.0f
// определение функции заполнения массива вещественными
// значениями в интервале (lb, rb)
void fill(float a[], int size, float lb, float rb);
// определение функции печати элементов массива
void print(float a[], int size);
int main()
{
// создание массива вещественных чисел из N элементов
float a[N];
// вызов функции заполнения массива
fill(a, N, A, B);
// вызов функции печати элементов массива
print(a, N);
// выход из основной функции
return 0;
}
// реализация функции заполнения массива вещественными
// значениями в интервале (lb, rb)
void fill(float a[], int size, float lb, float rb)
{
// определение переменной счетчика цикла
int i;
// инициализация генератора случайных чисел
srand((unsigned int) time(0));
// цикл по всем элементам массива
// индексация от 0 дл size-1, с шагом 1
for (i = 0; i < size; i++)
{
// rand() генерирует целое число в отрезке [0, RAND_MAX]
// ((float)rand()) / RAND_MAX переводит в отрезок [0, 1]
// линейное преобразование в [lb, rb]
a[i] = (rb - lb) * ((float)rand()) / RAND_MAX + lb;
}
}
// реализация функции печати элементов массива
void print(float a[], int size)
{
// определение переменной счетчика цикла
int i = 0;
// цикл по всем элементам массива
// индексация от 0 до size-1, с шагом 1
for (; i < size; i++)
{
// печать i-ого элемента массива, 3 знака после запятой
printf("%.3f\n", a[i]);
}
}
Комментарий
В приведенном примере:
Подключаются библиотеки стандартного ввода/вывода stdio. h, функций работы с датой и временем time. h, функций выделения памяти, контроля процесса выполнения программы, преобразования типов stdlib. h. Объявляются необходимые константы для задания количества элементов массива и интервала изменения значений элементов. Объявляются функции заполнения массива fill и печати его элементов print. Описывается функция main, в которой:- Создается массив. Выполняется заполнения массива с помощью объявленной функции fill. Выполняется печать массива с использованием объявленной функции print.
Пример решения задачи средней сложности
Задача:
Пусть задан массив целых чисел x, элементы которого удовлетворяют условию x[0]≤x[1]≤⋯x[n-1], n – число элементов массива x. Определить количество различных элементов в массиве.
Решение:
#include <stdio. h>
#include <time. h>
#include <stdlib. h>
// определение константы числа элементов массива
#define N 10
// определение левой границы изменения значений элементов
#define A -10
// определение правой границы изменения значений элементов
#define B 10
// определение функции заполнения массива целыми
// значениями в интервале (lb, rb)
void fill(int a[], int size, int lb, int rb);
// определение функции упорядочивания элементов по возрастанию
void sort(int a[], int size);
// определение функции печати элементов массива
void print(int a[], int size);
// определение функции числа различных элементов в упорядоченном массиве
int diff(int a[], int size);
int main()
{
int a[N], kDiffNumbers;
// вызов функции заполнения массива
fill(a, N, A, B);
// вызов функции сортировки элементов массива
sort(a, N);
// вызов функции печати элементов массива
print(a, N);
// вызов функции определения числа различных элементов
kDiffNumbers = diff(a, N);
// вывод числа различных элементов массива
printf("kDiffNumbers = %d\n", kDiffNumbers);
// выход из основной функции
return 0;
}
// реализация функции заполнения массива целыми
// значениями в интервале (lb, rb)
void fill(int a[], int size, int lb, int rb)
{
// определение переменной счетчика цикла
int i;
// инициализация генератора случайных чисел
srand((unsigned int) time(0));
// цикл по всем элементам массива
// индексация от 0 дл size-1, с шагом 1
for (i = 0; i < size; i++)
{
// rand() генерирует целое число в отрезке [0, RAND_MAX]
// ((float)rand()) / RAND_MAX переводит в отрезок [0, 1]
// линейное преобразование в [lb, rb]
a[i] = (rb - lb) * ((float)rand()) / RAND_MAX + lb;
}
}
// реализация функции упорядочивания элементов по возрастанию
void sort(int a[], int size)
{
int i, j, buf;
// цикл по всем элементам массива
// индексация от 0 дл size-1, с шагом 1
for (i = 0; i < size; i++)
{
// цикл по всем элементам массива, следующим за i-ым
// индексация от i+1 дл size-1, с шагом 1
for (j = i + 1; j < size; j++)
{
// если i-ый элемент больше, чем j-ый
if (a[i] > a[j])
{
// то выполняется обмен i-ого и j-ого элемента
buf = a[i];
a[i] = a[j];
a[j] = buf;
}
}
}
}
// реализация функции печати элементов массива
void print(int a[], int size)
{
// определение переменной счетчика цикла
int i = 0;
// цикл по всем элементам массива
// индексация от 0 до size-1, с шагом 1
for (; i < size; i++)
{
// печать i-ого элемента массива
printf("%d\n", a[i]);
}
}
// реализация функции числа различных элементов в упорядоченном массиве
int diff(int a[], int size)
{
int i = 0, kDiffNumbers = 1;
// цикл по всем элементам массива
// индексация от 0 до size-2, с шагом 1
for (; i < size - 1; i++)
{
// сравнение текущего i-ого элемента и следующего (i+1)
// если они не совпали
if (a[i] != a[i + 1])
{
// то увеличивается количество различных элементов
kDiffNumbers++;
}
}
// возврат числа различных элементов
return kDiffNumbers;
}
Комментарий
В приведенном примере:
Подключаются библиотеки стандартного ввода/вывода stdio. h, функций работы с датой и временем time. h, функций выделения памяти, контроля процесса выполнения программы, преобразования типов stdlib. h. Объявляются необходимые константы для задания количества элементов массива и интервала изменения значений элементов. Объявляются функции заполнения массива fill, печати его элементов print, а также функции упорядочивания массива sort и вычисления количества различных элементов diff. Описывается функция main, в которой:- Создается массив. Выполняется заполнения массива с помощью объявленной функции fill. Массив упорядочивается функцией sort. Выполняется печать массива с использованием объявленной функции print. Определяется количество различных элементов с помощью функции diff. Осуществляется печать полученного количества различных элементов.
Пример решения задачи повышенной сложности
Задача:
Задан массив Y[n], элементами которого являются целые числа. Преобразовать массив так, чтобы все его нечетные элементы оказались в конце. Порядок элементов в четной и нечетной частях может измениться.
Решение:
#include <stdio. h>
#include <time. h>
#include <stdlib. h>
// определение константы числа элементов массива
#define N 10
// определение левой границы изменения значений элементов
#define A -10
// определение правой границы изменения значений элементов
#define B 10
// определение функции заполнения массива целыми
// значения в интервале (lb, rb)
void fill(int *a, int size, int lb, int rb);
// определение функции печати элементов массива
void print(int *a, int size);
// определение функции преобразования массива таким образом,
// чтобы все его нечетные элементы оказались в конце
void convert(int a[], int size);
int main()
{
// создание массива целых чисел из N элементов
int a[N];
// вызов функции заполнения массива
fill(a, N, A, B);
// вызов функции печати элементов массива
print(a, N);
// перенос курсора на следующую строку
printf("\n");
// вызов функции преобразования массива
convert(a, N);
// вызов функции печати элементов массива
print(a, N);
// выход из основной функции
return 0;
}
// реализация функции заполнения массива целыми
// значения в интервале (lb, rb)
void fill(int a[], int size, int lb, int rb)
{
// определение переменной счетчика цикла
int i;
// инициализация генератора случайных чисел
srand((unsigned int) time(0));
// цикл по всем элементам массива
// индексация от 0 дл size-1, с шагом 1
for (i = 0; i < size; i++)
{
// rand() генерирует целое число в отрезке [0, RAND_MAX]
// ((float)rand()) / RAND_MAX переводит в отрезок [0, 1]
// линейное преобразование в [lb, rb]
a[i] = (rb - lb) * ((float)rand()) / RAND_MAX + lb;
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


