Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_Практ_new1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
225.79 Кб
Скачать

II часть Пример

Дан целочисленный массив размера N. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.

Вариант программы на языке С

#include <stdio.h>

#include <locale.h>

#include <stdlib.h>

#include <time.h>

/*Дан целочисленный массив размера N. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.

*/

int main()

{

int n, i, j;

int *a;

setlocale(LC_ALL, "");

srand(time(0));

printf("Введите n: ");

scanf("%d", &n);

// Выделяем память для массива.

a = (int *) malloc(sizeof(int) * n);

for(i = 0; i < n; i++)

a[i] = rand() % 3;

printf("Массив: ");

for(i = 0; i < n; i++)

printf(" %d", a[i]);

printf("\n");

for(i = 0; i < n - 1; i++)

// правая граница на 1 меньше количества элементов,

// т.к. на каждом шаге мы проверяем текущий и

// следующий после текущего элементы.

{

if(a[i] == a[i+1])

{

// Сдвигаем правую часть массива.

for(j = i + 1; j < n - 1; j++)

a[j] = a[j + 1];

// Уменьшаем n (размер массива при этом не изменяется -

// мы просто используем только первые n элементов).

n--;

}

}

// Выводим результат.

printf("Результат: ");

for(i = 0; i < n; i++)

printf(" %d", a[i]);

printf("\n");

// Освобождаем память.

free(a);

return 0;

}

Вариант программы на языке С++

#include <iostream>

#include <locale>

#include <cstdlib>

#include <ctime>

using namespace std;

/*Дан целочисленный массив размера N. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.

*/

int main()

{

int n;

int *a;

setlocale(LC_ALL, "");

srand(time(0));

cout << "Введите n: ";

cin >> n;

// Выделяем память для массива.

a = new int[n];

for(int i = 0; i < n; i++)

a[i] = rand() % 3;

cout << "Массив: ";

for(int i = 0; i < n; i++)

cout << " " << a[i];

cout << endl;

for(int i = 0; i < n - 1; i++)

// правая граница на 1 меньше количества элементов,

// т.к. на каждом шаге мы проверяем текущий и

// следующий после текущего элементы.

{

if(a[i] == a[i+1])

{

// Сдвигаем правую часть массива.

for(int j = i + 1; j < n - 1; j++)

a[j] = a[j + 1];

// Уменьшаем n (размер массива при этом не изменяется -

// мы просто используем только первые n элементов).

n--;

}

}

// Выводим результат.

cout << "Результат:";

for(int i = 0; i < n; i++)

cout << " " << a[i];

cout << endl;

// Освобождаем память.

delete[] a;

return 0;

}

Задания для самостоятельного решения

  1. Дан массив размера N и целое число K (1 ≤K ≤ N). Удалить из массива элемент с порядковым номером K.

  2. Дан массив размера N. После каждого отрицательного элемента массива вставить элемент с нулевым значением.

  3. Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся более двух раз, и вывести размер полученного массива и его содержимое.

  4. Дан массив размера N и два целых числа K и M (1 ≤K ≤ N, 1 ≤ M ≤ 10). Перед элементом массива с номером K вставить M новых элементов с нулевыми значениями

  5. Дан массив размера N. Вставить элемент с нулевым значением перед минимальным и после максимального элемента массива