HLFX.Ru Forum
Показать все 5 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Нужен совет с кодом (https://hlfx.ru/forum/showthread.php?threadid=4698)


Отправлено Chyvachok 08-12-2015 в 17:01:

Нужен совет с кодом

Мне по предмету в универе надо сделать прогу, в которой надо ввести массив не больше 100 элементов, и чтобы с этого массива в матрицу 10 на 10 вводились по столбацам начиная с левого, элементы с минусом начиная с конца массива, я что-то там набылокодил, вроде делает что надо, но если последний элемент массива с плюсом, вместо того чтобы в матрице 1 элементом вместо него написать следущий элемент массива с минусом, там пишет ноль, если последний с минусом то все нормально, я пока не допру как это подправить, да и может кто подскажет как еще можно улучшить код, а то я несколько лет этот с++ вообще не трогал и успел все забыть.

C++ Source Code:
1
#include <iostream>
2
 
3
using namespace std;
4
 
5
int main()
6
{
7
  int arrsize; //размер массива А
8
  int her=0; //позже уберу
9
 
10
  cout << "Введите размер массива А (не больше 100):" << endl;
11
  cin >> arrsize;
12
 
13
  int A[arrsize];
14
  int C[10][10];
15
 
16
  // заполнение массива
17
  for ( int i = 0; i < arrsize; i++ )
18
  {
19
    //cout << "Введите элемент массива А[" << i << "]= ";
20
    //cin >> A[i];
21
    if (her == 0) //чтобы чередовались минусовые и плюсовые числа позже надо будет поменять на рандом
22
    {
23
      A[i] = i+1;
24
      her++;
25
    }
26
    else
27
    {
28
      A[i] = -i+1;
29
      her--;
30
    }
31
    //cout << endl;
32
  }
33
 
34
  int element = arrsize-1; //Для ввода чисел из массива с конца
35
 
36
  // Заполнение матрицы по столбцам минусовыми элементами массива с конца
37
  for ( int j = 0; j < 10; j++ )
38
  {
39
    for ( int i = 0; i < 10; i++ )
40
    {
41
      C[i][j] = 0;
42
 
43
      do {
44
        if (element < 0)
45
        {
46
          break;
47
        }
48
 
49
        if (A[element] < 0)
50
          C[i][j]=A[element];
51
 
52
        element--;
53
 
54
      } while (A[element] > 0);
55
    }
56
  }
57
 
58
  // Вывод массива А
59
  cout << "Массив A:" << endl;
60
  for ( int i = 0; i < arrsize; i++ )
61
  {
62
    cout << "A[" << i << "]=" << A[i] << " ";
63
  }
64
  cout << endl;
65
 
66
  // Вывод матрицы С
67
  cout << "Матрица C:" << endl;
68
  for ( int i = 0; i < 10; i++ )
69
  {
70
    for ( int j = 0; j < 10; j++ )
71
    {
72
      cout << "C[" << i << "][" << j << "]=" << C[i][j] << " ";
73
    }
74
    cout << endl;
75
  }
76
 
77
  return 0;
78
}


Отправлено XaeroX 08-12-2015 в 18:18:

Chyvachok
Лучше в таких случаях приводить пару примеров в стиле "исходные данные - ожидаемый результат". Словами не всегда понятно описывается.
Если я правильно пони, нужно заполнить матрицу по столбцам только отрицательными числами с конца массива? Ну так и заполняй без всяких хитростей:

C++ Source Code:
1
for ( int i = arrsize-1, j = 0; i >= 0; --i ) {
2
  if ( A[i] >= 0 )
3
    continue;
4
  C[j/10][j%10]=A[i];
5
  ++j;
6
}

ЗЫ: код компилировал в уме, так что если где-то опечатался - сорри.


Отправлено Chyvachok 08-12-2015 в 19:45:

Цитата:
XaeroX писал:
Если я правильно пони, нужно заполнить матрицу по столбцам только отрицательными числами с конца массива?


Да, спасибо за код, попробую его заюзать.

Добавлено 08-12-2015 в 21:45:

XaeroX работает отлично, не пропускает уже числа как у меня, остальнось сделать чтобы он столбцы заполнял, а не строки, то есть вертикально, я пока не разобрался как код работает, когда то у нас было програмирование, но я уже забыл уже эти все операторы


Отправлено ComradeAndrew 08-12-2015 в 19:54:

Chyvachok, поменяй просто местами обращения к индексам.

code:
C[j%10][j/10]

Хотя стой, разве он сейчас не по столбцам у тебя идет? У тебя как представлено: строки x столбцы или столбцы x строки?


Отправлено Chyvachok 08-12-2015 в 20:32:

Цитата:
ComradeAndrew писал:
Chyvachok, поменяй просто местами обращения к индексам.


Спасибо, уже как надо работает. По заданию эту програму еще надо на java и python написать, но с тем я маяться буду по позже.


Временная зона GMT. Текущее время 05:17.
Показать все 5 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024