Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59

Сделать программу более компактной + Ручной ввод размерности квадратной матрицы.

23.03.2012, 17:28. Показов 1886. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программу я написал.

Но надо сделать программу еще более компактной. + Вопрос, как сделать так, чтобы n не было константой, т.е. его можно было ввести вручную.(Основной критерий: минимум операторов при максимальном использовании возможностей языка С++.) Куда еще меньше я не представляю. С++ изучаю всего пару месяцев.

Условие задания:
Дана константа - натуральное число n, действительная квадратная матрица порядка n. Построить последовательность b1...bn из нулей и единиц, в которой b[i]=1 тогда и только тогда, когда в i-й строке матрицы есть хотя бы один отрицательный элемент.

Использую MVS Ultimate C++
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
#include <stdio.h>
#include <conio.h>
#include<clocale>
#include <math.h>
#include <iostream>
 
const int n =10;
 
void main()
{    
   setlocale(LC_ALL, "Russian");
   int a [n] [n];
   int b[n];
// Заполнение матрицы
 
    for (int i = 0; i < n; i++)
        {
            for   (int j = 0; j < n; j++)
                {
                    a [i] [j]=rand()% 200 - 100;
                }
        } 
 
// Заполнение 1 если a[i][j] отрицательное и 0 если a[i] [j]  положительное;
   
    for (int i = 1; i < n; i++)
        {
             bool f = false;
             for (int j = 0; j < n; j++)
             {
                    if (a[i][j] < 0) 
                        {
                            f = true;
                            break;
                        }
            }
             b[i] = (f = true)?(b[i] =  1):(b[i] = 0);
        }  
 
// Вывод полученной матрицы
 
for (int i = 1; i < n; i++)
    {
       printf(" %d ", b[i]);
    }
   _getch();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2012, 17:28
Ответы с готовыми решениями:

Не работает ручной ввод матрицы
Кароч выводит матрицу нулями именно при ручном вводе. Прикол в том что при рандомном заполнении и заполнении матрицы через константу все...

Нахождение детерминанта матрицы и её ручной ввод
Здравствуйте! Который вот уже день бьюсь! Не могу найти ошибку! Нужно поставить ручной ввод и найти детерминант. Матрица сначала...

Как сделать ручной ввод значений в матрицу
int j = 1; Console.Write(&quot;Введите кол-во столбцов: &quot;); int n = int.Parse(Console.ReadLine()); ...

10
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
23.03.2012, 17:40
У Вас же в условии задачи написано
Цитата Сообщение от Yentroistok Посмотреть сообщение
Условие задания:
Дана константа - натуральное число n,
Так зачем же тогда n делать переменной?
0
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
23.03.2012, 17:44  [ТС]
Хм... Логично.

Тогда остается только решить проблему - с компактизацией программы.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
23.03.2012, 17:50
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
#include <stdio.h>
#include <conio.h>
#include<clocale>
#include <math.h>
const int n =10;
void main()
{    
   setlocale(LC_ALL, "Russian");
   int a [n] [n];
   int b[n];
   for (int i = 0; i < n; i++)
      for   (int j = 0; j < n; j++)
          a [i] [j]=rand()% 200 - 100;
    for (int i = 1; i < n; i++)
    {
          bool f = false;
          for (int j = 0; j < n; j++)
               if (a[i][j] < 0){f = true;break;}
          b[i] = f?1:0;
     }  
     for (int i = 1; i < n; i++)
          printf(" %d ", b[i]);
   _getch();
}
По-моему так очень даже компактно.
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
23.03.2012, 19:04
Цитата Сообщение от Yentroistok Посмотреть сообщение
C++
1
int a [n] [n];
"Дана... действительная квадратная матрица порядка n"
Цитата Сообщение от Yentroistok Посмотреть сообщение
C++
1
int b[n];
массив можно сразу инициализировать нулями вот таким образом
C++
1
int b[n] = {0};
Цитата Сообщение от Yentroistok Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 1; i < n; i++)
{
    bool f = false;
    for (int j = 0; j < n; j++)
    {
        if (a[i][j] < 0) 
        {
            f = true;
            break;
        }
    }
    b[i] = (f = true)?(b[i] = 1):(b[i] = 0);
}
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        if (a[i][j] < 0) 
        {
            b[i] = 1;
            break;
        }
    }
}
0
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
28.03.2012, 21:00  [ТС]
Цитата Сообщение от rangerx Посмотреть сообщение
"Дана... действительная квадратная матрица порядка n"

массив можно сразу инициализировать нулями вот таким образом
C++
1
int b[n] = {0};

C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        if (a[i][j] < 0) 
        {
            b[i] = 1;
            break;
        }
    }
}
Если так сделать, то при выводе значений массива на экран, он их вывидет 10 раз.

Но если добавить вот так, при выводе:

C++
1
2
3
4
5
for (int i = 1; i < n; i++)
     {
          printf(" %d ", b[i]);
          break;
     }
Все работает нормально)
Но все равно спасибо)
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
28.03.2012, 21:40
Цитата Сообщение от Yentroistok Посмотреть сообщение
Если так сделать, то при выводе значений массива на экран, он их вывидет 10 раз.
Ну, а сколько их по-твоему должно быть, если количество строк в a равно 10?
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
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
const int n = 3;
 
int main()
{    
   setlocale(LC_ALL, "Russian");
   int a[n][n];
   int b[n] = {0};
// Заполнение матрицы
   
   srand(time(NULL));
   for (int i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
      {  
     a[i][j] = rand() % 200 - 100;
     printf("%5d", a[i][j]);
      }
      putchar('\n');
   } 
   
// Заполнение 1 если a[i][j] отрицательное и 0 если a[i] [j]  положительное;
   
   for (int i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
      {
     if (a[i][j] < 0) 
     {
            b[i] = 1;
            break;
     }
      }
   }
   
// Вывод полученной матрицы
   
   for (int i = 0; i < n; i++)
   {
      printf(" %d ", b[i]);
   }
   putchar('\n');
   _getch();
}
0
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
29.03.2012, 14:59  [ТС]
rangerx, Ну дак мне же не матрицу надо в итоге получить. А все-лишь массив b[n].(если хотя бы 1н эл-т в строке < 0, то заполнить, например 1-й эл-т b[1] = 1, а если нет в строке отрицательных, то, например, 2ой эл-т b[2] = 0).
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
29.03.2012, 15:17
Цитата Сообщение от Yentroistok Посмотреть сообщение
Ну дак мне же не матрицу надо в итоге получить
А при чём здесь матрица? Запусти код из моего предыдущего поста
http://codepad.org/cmDpRW17
0
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
29.03.2012, 15:31  [ТС]
rangerx, Вот что выводит на экран...

Извиняюсь, неправильно написал, надо массив получить а не матрицу.
Миниатюры
Сделать программу более компактной +  Ручной ввод размерности квадратной матрицы.  
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
29.03.2012, 15:57
Последняя строка вывода и есть искомый массив.
Если хочется вывести его в столбец, то надо сделать так:
C++
1
2
3
4
5
6
puts("Массив b:");
for (int i = 0; i < n; i++)
   {
      printf(" %d\n", b[i]);
   }
   _getch();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2012, 15:57
Помогаю со студенческими работами здесь

Как переделать рандомное заполнение матрицы на ручной ввод?
#include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include...

Нужно переделать программу с random на ручной ввод
В заданной квадратной матрице A(K,K) (K&lt;=10) вычислить сумму элементов, расположенных над главной диагональю. Полученной суммой заменить...

Как сделать возможным ручной ввод значений в поле типа DataGridViewComboBoxColumn
Добрый день, Уважаемые! С# начал изучать недавно и столкнулся со следующей проблемой: Есть обычный DataGridView, где одна из...

Как совместить ручной ввод и заполнение рандом в одну программу?
как совместить ручной ввод и рандом в одну прогу? Нужно чтоб выбиралось .код ниже РАНДОМ const n = 3; m = 5; var a:...

Переделать программу на ручной ввод или считывание данных из файла
помгите,пожалуйста,вместо random использовать просто ввод чисел или сразу их считывание из файла var f:file of integer; ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru