
Добавил:
nyan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:C++ / Lab 4
.txt#include "stdafx.h"
#include <iostream>
#include <clocale>
#include <time.h>
#define N 100
using namespace std;
int *Z[N] = {}; //Массив для определения местоположения нуля
int index = 0; //счетчик числа нулей
int x[N] = {}, y[N] = {};
int col; //количество элементов массива
bool answer = 1;
void inic()
{
for (int *k = x; k < (x + col); k++)
*k= rand() % 3;
}
void printmas(int t[])
{
for (int *k = t; k < (t + col); k++)
cout << *k << "\t";
}
void findzero()
{
for (int *k = x+2; k < (x + col); k++) //начинаем со второго элемента, потому что нет -1 и -2 элементов
{
if ((*k) == 0)
{
Z[index] = k;
index++;
}
}
}
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(0));
while (answer)
{
while (col <= 1)
{
cout << "Введите количество элементов массива" << endl;
cin >> col;
if (col<1) cout << "Количество элементов должно быть положительным" << endl;
if (col == 1) cout << "В массиве не может быть один элемент" << endl; //иначе теряется смысл сложения с предыдущими элементами
}
cout << "Исходный массив" << endl;
inic();
printmas(x);
for (int *k = x; k < (x + col); k++)
y[k-x] = *k; //копируем массив
findzero();
if ((index != 0)||(*(x + 1) == 0)||(*x == 0))
{
if (*x == 0) y[0] = *(x + col - 1) + *(x + col - 2);
if (*(x + 1) == 0) y[1] = *(x + col - 1) + *x; //если один из первых двух элементов равен 0, то для суммирования берутся элементы с конца массива
if (index != 0)
for (int i = 0; i < index; i++)
y[Z[i]-x] = *(Z[i] - 1) + *(Z[i] - 2);
cout << "\nМассив, в котором каждый 0 заменен суммой двух предыдущих элементов" << endl;
printmas(y);
}
else
cout << "\nВ массиве нет нулей";
index = 0; col = 0;
cout << "\nПродолжить?" << endl;
cin >> answer;
}
return 0;
}