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

Вывод массива и вывод строки, где меньше всего переходов с - на + и с + на -

07.02.2018, 15:23. Показов 1106. Ответов 6
Метки нет (Все метки)

Как изменить этот код, чтобы пользователь сам мог вводить количество столбцов и строк в массиве
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
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
#define M 5
#define N 7
int main()
{
    srand(time(NULL));      // новая точка отсчета рнд
    int a[M][N];                // массив
    int i, j;                   // счетчики цикла
    int m, mi;                  // минимум в строке и номер минимальной строки
    int cnt;                        // число смен знака в строке
    int lastsign, sign = 1; // первый знак, текущий знак
 
    // заполянем массив случайными в диапазоне от -10 до +10 и выводим на экран
    for (i = 0; i<M; i++)
    {
        for (j = 0; j<N; j++)
        {
            a[i][j] = -10 + rand() % 21;
            printf("%4d", a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
 
    // подсчитываем количество смен знака:
    for (i = 0; i<M; i++)
    {
        cnt = 0;
        for (j = 0; j<N; j++)
        {
            if (a[i][j] < 0) sign = 0;      // определяем знак
            if (a[i][j] >= 0) sign = 1;
            if (j == 0) lastsign = sign;        // начало строки считаем начальным знаком
            else if (sign != lastsign)          // если знак изменился
            {
                cnt++;                              // считаем
                lastsign = sign;                    // и запоминаем последний знак
            }
        }
        if (i == 0 || cnt < m)                  // если первая строка, считаем ее минимальной
        {
            m = cnt;
            mi = i;
        }
    }
 
    // найденную строку на экран
    for (j = 0; j<N; j++)
        printf("%4d", a[mi][j]);
    printf("\n");
    _getch();
    return 0;
    
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2018, 15:23
Ответы с готовыми решениями:

Вывод элемента массива, значение которого меньше всего отличается от арифметической средней всех элементов массива
Всем доброго дня! Работаю над заданием. Только не сделал его до конца. Помогите пожалуйста...

Вывод записи, которая меньше всего повторяется
Допустим, есть магазины(id_market) и покупатели(id_person). Магазины могут быть посещены одними и...

Вывод всего массива
Привет, как мне сделать такое есть такой код JSON stdClass Object ( =&gt; stdClass...

Вывод определенной строки из всего блока в таблице
Может и не так задал заголовок, суть вот в чем. Мне нужно вытащить из таблицы только 1 строку из...

6
16 / 15 / 13
Регистрация: 20.11.2017
Сообщений: 100
07.02.2018, 16:35 2
посмотрите прежде всего на строки 14-19 и изменения в условиях циклов
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
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
 
int main()
{
srand(time(NULL)); // новая точка отсчета рнд
int i, j; // счетчики цикла
int m, mi; // минимум в строке и номер минимальной строки
int cnt; // число смен знака в строке
int lastsign, sign = 1; // первый знак, текущий знак
int x, y;  // число строк и столбцов
 
printf("Ведите число строк и столбцов: ");
scanf("%i%i", &x, &y);
 
int a[x][y]; // массив
// заполянем массив случайными в диапазоне от -10 до +10 и выводим на экран
for (i = 0; i<x; i++)
{
for (j = 0; j<y; j++)
{
a[i][j] = -10 + rand() % 21;
printf("%4d", a[i][j]);
}
printf("\n");
}
printf("\n");
 
// подсчитываем количество смен знака:
for (i = 0; i<x; i++)
{
cnt = 0;
for (j = 0; j<y; j++)
{
if (a[i][j] < 0) sign = 0; // определяем знак
if (a[i][j] >= 0) sign = 1;
if (j == 0) lastsign = sign; // начало строки считаем начальным знаком
else if (sign != lastsign) // если знак изменился
{
cnt++; // считаем
lastsign = sign; // и запоминаем последний знак
}
}
if (i == 0 || cnt < m) // если первая строка, считаем ее минимальной
{
m = cnt;
mi = i;
}
}
 
// найденную строку на экран
for (j = 0; j<x; j++)
printf("%4d", a[mi][j]);
printf("\n");
_getch();
return 0;
 
}
0
0 / 0 / 0
Регистрация: 01.02.2018
Сообщений: 32
07.02.2018, 16:52  [ТС] 3
не работает. Пишет, что x и y должны иметь константное значение
0
16 / 15 / 13
Регистрация: 20.11.2017
Сообщений: 100
07.02.2018, 17:49 4
Алексей79547, скиньте скриншот ошибки. Вы мой код брали?
0
36 / 35 / 17
Регистрация: 15.06.2017
Сообщений: 184
08.02.2018, 07:18 5
C
1
int a[x][y]; // массив
нельзя инициировать массив переменными индексами!
1
36 / 35 / 17
Регистрация: 15.06.2017
Сообщений: 184
08.02.2018, 08:00 6
Вот скрин
Миниатюры
Вывод массива и вывод строки, где меньше всего переходов с - на + и с + на -  
0
16 / 15 / 13
Регистрация: 20.11.2017
Сообщений: 100
08.02.2018, 13:31 7
Roddog2017, спасибо! Думаю, это правильно:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
 
int main()
{
srand(time(NULL)); // новая точка отсчета рнд
int i, j; // счетчики цикла
int m, mi; // минимум в строке и номер минимальной строки
int cnt; // число смен знака в строке
int lastsign, sign = 1; // первый знак, текущий знак
unsigned x, y;  // число строк и столбцов
 
printf("Ведите число строк и столбцов: ");
scanf("%u%u", &x, &y);
 
int ** a = (int**)malloc(x * sizeof(int));
// заполянем массив случайными в диапазоне от -10 до +10 и выводим на экран
for (i = 0; i<x; i++)
{
a[i] = (int *)malloc(y*sizeof(int));
for (j = 0; j<y; j++)
{
a[i][j] = -10 + rand() % 21;
printf("%4d", a[i][j]);
}
printf("\n");
}
printf("\n");
 
// подсчитываем количество смен знака:
for (i = 0; i<x; i++)
{
cnt = 0;
for (j = 0; j<y; j++)
{
if (a[i][j] < 0) sign = 0; // определяем знак
if (a[i][j] >= 0) sign = 1;
if (j == 0) lastsign = sign; // начало строки считаем начальным знаком
else if (sign != lastsign) // если знак изменился
{
cnt++; // считаем
lastsign = sign; // и запоминаем последний знак
}
}
if (i == 0 || cnt < m) // если первая строка, считаем ее минимальной
{
m = cnt;
mi = i;
}
}
 
// найденную строку на экран
for (j = 0; j<y; j++)
printf("%4d", a[mi][j]);
printf("\n");
_getch();
free(a);
return 0;
 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2018, 13:31
Помогаю со студенческими работами здесь

Организация условных переходов. Ввод и вывод информации
Когда записать a=2 и b=3 (a&lt;b) выводит 21844. Почему? Как это исправить и что сделать, чтобы...

Вывод ряда Фибоначчи - программа выводит в textBox на 2 элемента меньше, чем я задаю размер массива
Подскажите, пожалуйста!Программа выводит в textBox на 2 элемента меньше, чем я задаю размер...

Вывод заголовков полей массива / Вывод содержимого массива на веб-страницу не через print_r
Есть некий массив массивов, который передаётся в какой-то документ и там переприсваивается через ...

Вывод данных в textBox c новой строки в цикле. Где ошибка
В textBox1 вводится некий текст разделённый пробелами. Нужно вывести в textBox2 каждую отдельную...

Вывод только ординат из одномерного массива, где записаны обе координаты
Одномерный массив с 20-мя неизвестными элементами от х1,у1 до х20,у20. Надо вывести только...

Вывод строки, массива
Доброго времени суток! Подскажите, что я делаю не так. Задача, найти кратные числа из массива(к...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru