Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
#1

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

23.03.2012, 17:28. Просмотров 1026. Ответов 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 17:28     Сделать программу более компактной + Ручной ввод размерности квадратной матрицы.
Посмотрите здесь:
C++ Нахождение детерминанта матрицы и её ручной ввод
C++ Ввод-вывод элементов квадратной матрицы
Ввод/вывод элементов квадратной матрицы, вычисление индексов максимального элемента C++
Организовать ввод квадратной матрицы, увеличить все элементы, удалить первый элемент... C++
Ручной ввод элементов C++
Массивы: ручной ввод C++
C++ Сделать из квадратной матрицы - треугольную
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,188
Завершенные тесты: 1
23.03.2012, 17:40     Сделать программу более компактной + Ручной ввод размерности квадратной матрицы. #2
У Вас же в условии задачи написано
Цитата Сообщение от Yentroistok Посмотреть сообщение
Условие задания:
Дана константа - натуральное число n,
Так зачем же тогда n делать переменной?
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
23.03.2012, 17:44  [ТС]     Сделать программу более компактной + Ручной ввод размерности квадратной матрицы. #3
Хм... Логично.

Тогда остается только решить проблему - с компактизацией программы.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,188
Завершенные тесты: 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();
}
По-моему так очень даже компактно.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
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;
        }
    }
}
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;
     }
Все работает нормально)
Но все равно спасибо)
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
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();
}
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).
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
29.03.2012, 15:17     Сделать программу более компактной + Ручной ввод размерности квадратной матрицы. #9
Цитата Сообщение от Yentroistok Посмотреть сообщение
Ну дак мне же не матрицу надо в итоге получить
А при чём здесь матрица? Запусти код из моего предыдущего поста
http://codepad.org/cmDpRW17
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
29.03.2012, 15:31  [ТС]     Сделать программу более компактной + Ручной ввод размерности квадратной матрицы. #10
rangerx, Вот что выводит на экран...

Извиняюсь, неправильно написал, надо массив получить а не матрицу.
Миниатюры
Сделать программу более компактной +  Ручной ввод размерности квадратной матрицы.  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2012, 15:57     Сделать программу более компактной + Ручной ввод размерности квадратной матрицы.
Еще ссылки по теме:
Матрица, ручной ввод элементов C++
C++ Ввод имени в программу с клавиатуры, содержащее 2 или более слова
Ручной ввод в массив и проверка цепочки C++
C++ Дан двумерный массив А(4,4) в виде квадратной матрицы. Составьте программу, обнуляющую побочную диагональ матрицы, если в ней найдется хоть один отриц
C++ Ручной ввод количества знаков после запятой

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,188
Завершенные тесты: 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();
Yandex
Объявления
29.03.2012, 15:57     Сделать программу более компактной + Ручной ввод размерности квадратной матрицы.
Ответ Создать тему
Опции темы

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