Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
#1

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

23.03.2012, 17:28. Просмотров 1108. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 17:28
Ответы с готовыми решениями:

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

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

Ввод-вывод элементов квадратной матрицы
Помогите написать программу для ввода элементов квадратной матрицы, вывода...

Ввод/вывод элементов квадратной матрицы, вычисление индексов максимального элемента
Помогите написать программу для ввода элементов квадратной матрицы, вывода...

Организовать ввод квадратной матрицы, увеличить все элементы, удалить первый элемент...
Помогите пожалуйста Составить программу, в которой 1) организовать ввод...

10
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
23.03.2012, 17:40 #2
У Вас же в условии задачи написано
Цитата Сообщение от Yentroistok Посмотреть сообщение
Условие задания:
Дана константа - натуральное число n,
Так зачем же тогда n делать переменной?
0
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
23.03.2012, 17:44  [ТС] #3
Хм... Логично.

Тогда остается только решить проблему - с компактизацией программы.
0
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
23.03.2012, 17:50 #4
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
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
23.03.2012, 19:04 #5
Цитата Сообщение от 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
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
28.03.2012, 21:00  [ТС] #6
Цитата Сообщение от 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
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
28.03.2012, 21:40 #7
Цитата Сообщение от 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
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
29.03.2012, 14:59  [ТС] #8
rangerx, Ну дак мне же не матрицу надо в итоге получить. А все-лишь массив b[n].(если хотя бы 1н эл-т в строке < 0, то заполнить, например 1-й эл-т b[1] = 1, а если нет в строке отрицательных, то, например, 2ой эл-т b[2] = 0).
0
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
29.03.2012, 15:17 #9
Цитата Сообщение от Yentroistok Посмотреть сообщение
Ну дак мне же не матрицу надо в итоге получить
А при чём здесь матрица? Запусти код из моего предыдущего поста
http://codepad.org/cmDpRW17
0
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
29.03.2012, 15:31  [ТС] #10
rangerx, Вот что выводит на экран...

Извиняюсь, неправильно написал, надо массив получить а не матрицу.
0
Миниатюры
Сделать программу более компактной +  Ручной ввод размерности квадратной матрицы.  
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
29.03.2012, 15:57 #11
Последняя строка вывода и есть искомый массив.
Если хочется вывести его в столбец, то надо сделать так:
C++
1
2
3
4
5
6
puts("Массив b:");
for (int i = 0; i < n; i++)
   {
      printf(" %d\n", b[i]);
   }
   _getch();
0
29.03.2012, 15:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2012, 15:57

Ручной ввод элементов
Эта программа сама в случайном порядке пишет элементы в массиве. Помогите,...

Массивы: ручной ввод
Всех с НОВЫМ ГОДОМ!!!!!!!!!!!!!! но НГ,а мне надо завтра сдавать работу.......

Сделать из квадратной матрицы - треугольную
Нужно квадратную матицу порядка N, заменить на ее низшую треугольную матрицу....


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

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

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