0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 8
1

Вывести начальные индексы всех непрерывных знакопеременных последовательностей чисел

22.12.2019, 20:32. Показов 2065. Ответов 1
Метки нет (Все метки)

Объявить массив целых чисел и заполнить его случайными значениями.
Размерность массива – 100, диапазон значений [-50,50]. Вывести начальные индексы
всех непрерывных знакопеременных последовательностей чисел.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2019, 20:32
Ответы с готовыми решениями:

Вывести начальные и конечные индексы индексы всех непрерывных знакопеременных последовательностей чисел
Даны 3 массива.Вывести начальные и конечные индексы индексы всех непрерывных знакопеременных...

В одномерном массиве вывести начальные индексы всех непрерывных знакопеременных последовательностей чисел
1. В одномерном массиве вывести начальные индексы всех непрерывных знакопеременных...

Вывести начальные индексы всех непрерывных знакочередующихся последовательностей чисел
Объявить массив целых чисел и заполнить его случайными значениями с помощью функций srand() и...

Вывести начальные индексы всех непрерывных последовательностей неотрицательных чисел
Дан массив размером 100. Заполнить его случайными числами в диапазоне от -100 до 100. Вывести...

1
случайный прохожий
1516 / 1018 / 374
Регистрация: 20.07.2013
Сообщений: 2,955
23.12.2019, 04:14 2
Если я правильно понял задание (и нигде не ошибся), то с учетом того, что 0 не имеет знака и "сбрасывает" последовательность, получилось следующее.
Делал в билдере, вывод массива идет слева направо и сверху вниз. Думаю, вывод нетрудно заменить на "консольный".

Сначала 2 вспомогательных функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int sign (int x)  // знак целого числа
{
  if (x < 0)
    return -1;
  if (x > 0)
    return 1;
//  if (x == 0)
  return 0;
}
//---------------------------------------------------------------------------
int random_int_from_interval (int start_value, int end_value)  // "случайное" целое число из диапазона
{
  return random(end_value - start_value + 1) + start_value;
}
Основной код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  const n = 100;
  int array[n], i, start_value = -50, end_value = 50, current_sign, current_index, count;
 
  // "запускаем" ГПСЧ
  randomize();
 
  // заполняем массив
  String temp = "Массив:\n";
  for (i = 0; i < n; i++)
  {
    array[i] = random_int_from_interval(start_value, end_value);
    temp = temp + String(array[i]) + ((i % 10 != 9) ? "   " : ((i > 0) ? "\n" : "   "));
  }
  temp = temp + "\n\nИндексы:\n";
 
  // запоминаем знак и индекс первого (с индексом 0) элемента массива
  current_sign = sign(array[0]);
  current_index = 0;
  // кол-во (счетчик) чисел последовательности
  count = (current_sign != 0) ? 1 : 0;
 
  for (i = 1; i < n; i++)  // проверяем со второго (с индексом 1) элемента массива
  {
    if (sign(array[i]) == current_sign || sign(array[i]) == 0)  // если знак не меняется или равен 0
    {
      if (count > 1)  // если счетчик > 1
      {
        // ShowMessage(current_index + 1);  // выводим индекс + 1
        temp = temp + String(current_index + 1) + "   ";
      }
 
      count = (sign(array[i]) != 0) ? 1 : 0;  // сбрасываем счетчик
      current_index = i;  // меняем текущий индекс
      if (sign(array[i]) == 0)  // если знак равен 0
        current_index++;  // наращиваем индекс
    }
    else if (sign(array[i]) == -current_sign && sign(array[i]) != 0)  // если знак меняется и не равен 0
      count++;  // наращиваем счетчик
 
    current_sign = sign(array[i]);  // запоминаем текущий знак числа
  }
  // случай, когда последовательность меняет знак (с какого-то момента) до самого конца массива
  if (count > 1)  // если счетчик > 1
  {
//  ShowMessage(current_index + 1);  // выводим индекс + 1
    temp = temp + String(current_index + 1) + "   ";
    ShowMessage(temp);  // выводим массив
  }
Некоторые результаты ниже.

P.S.: в каких-то ситуациях из-за наличия 0 в массиве некоторые последовательности могут пропускаться при выводе результатов (мне не удалось выявить точную причину данного бага; если получится решить эту проблему, то выложу новый код).
Миниатюры
Вывести начальные индексы всех непрерывных знакопеременных последовательностей чисел  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2019, 04:14

Вывести начальные индексы всех непрерывных последовательностей чисел со значениями, которые не увеличиваются
Разработать программу, которая в одномерном массиве действительных чисел (размер задайте...

Вывести начальные индексы всех непрерывных последовательностей
(С)Вывести начальные индексы всех непрерывных последовательностей чисел с неувеличивающимися...

Найти начальные индексы непрерывных последовательностей
ребята помогите доделать лабу ато у меня не получаетса плз вот условие вот недоделаная лаба...

Вывести начальные индексы всех непрерывных неубывающих подпоследовательностей цифр
Дана последовательность целых чисел. Вывести начальные индексы всех непрерывных неубывающих...

Вывести индексы массива непрерывных невозрастающих последовательностей
всем привет! пишу впервые.... сделал програмку но она выводит не правильный ответ смысл задачки...

Вывести начальные индексы всех непрерывных последовательностей отрицательных чисел
Вывести начальные индексы всех непрерывных последовательностей отрицательных чисел, длинна которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.