Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
1

Ввод всей матрицы

30.10.2016, 03:49. Просмотров 1507. Ответов 6
Метки нет (Все метки)

Доброго времени суток! Задачку на двумерную матрицу решаю. И тут вопрос, этим способом я задаю каждый элемент матрицы:
C
1
2
3
4
5
6
7
8
9
10
11
12
printf("Kol-vo strok: ");
    scanf("%d",&strok);
    printf("Kol-vo stolbcov: ");
    scanf("%d",&stob);
printf("Vvedem matricu A");
    for (i = 0; i < row; i++){
        for (j = 0; j < col; j++)
        {
            scanf("%d", &a[i][j]);
            
        }
    }
А если я хочу задать сразу всю матрицу ввести? например если размерность 2*2, то я просто введу к примеру: 1 5 7 9. Как быть? Что в scanf забивать?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2016, 03:49
Ответы с готовыми решениями:

Сортировка всей матрицы, а не только ее строк
Данную матрицу сортирует только по строкам. Что нужно добавить , что бы...

Сформировать одномерный массив из индексов положительных элементов, прочитанных по строкам всей матрицы
Дана матрица А размером m*n. Сформировать одномерный массив из индексов «+»-ых...

Метод Жодана Гаусса по главному элементу всей матрицы не вычисляет матрицу выше 5го порядка
Вот решения этой задачи, считает до 5го порядка правильно, а вот на 6м порядке...

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

Ввод матрицы с клавиатуры
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #define Max 100...

6
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
30.10.2016, 07:25 2
C
1
scanf("%d%d%d%d", &a[0][0], &a[0][1], &a[1][0], &a[1][1]);
только оно вам надо?
1
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
01.11.2016, 03:55  [ТС] 3
Я хочу переделать программу, чтобы можно было вычислять любую размерность матрицы. Не только 2х2, но и 5х5 и т.д. Вот в этом загвоздка

Добавлено через 2 часа 17 минут
Если размерность 2*2, то для каждой матрицы нужно будет вбивать 4 элемента, например: 2 4 6 8 (enter) 1 3 5 7 (enter), для 3*3 соответственно 9 элементов. Можем ли мы через scanf такое реализовать.

Добавлено через 6 часов 33 минуты
Или тут уже не через scanf необходимо работать? Не могу понять как.

Добавлено через 21 час 20 минут
Ну же, кто-нибудь выручайте) Как это можно реализовать

Добавлено через 37 минут
Вот такую подсказку дал преподаватель:

"If you remember from when we were trying to validate input when we call scanf we only match the minimum amount.
So if the user enters 10 20 45 all at once and in our code we have
scanf("%d", &num);

Then we will just read the 10 and the 20 and 45 will still be there. If we then call scanf again we will read the 20. And if we call it one more time we will get the 45."

Как это возможно?
0
shvyrevvg
724 / 540 / 270
Регистрация: 12.05.2016
Сообщений: 1,571
01.11.2016, 04:10 4
madi, если квадратная, то можно значения в массив занести и потом сформировать матрицу.
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
#include <stdio.h>
#include <string.h>
#include <math.h>
 
#define DELIM ", \n\t"
#define MAXCOL 5
#define MAXROW 5
 
int main(int argc, char **argv)
{
    int max_size = MAXCOL*MAXROW;
    int arr[max_size];
    char *ptr, buf[BUFSIZ];
    if ( !fgets(buf, BUFSIZ, stdin) ) 
        return 1;
 
    int t = 0;
    for (ptr=strtok(buf, DELIM); ptr && t<max_size; ptr=strtok(NULL, DELIM))
        arr[t++] = atoi(ptr);
 
    int col, row;
    col = row = sqrt(t);
    t = 0;
    int matrix[row][col];
    for (int i=0; i<row; i++)
        for (int j=0; j<col; j++)
            matrix[i][j] = arr[t++];
            
    for (int i=0; i<row; i++) {
        for (int j=0; j<col; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
1
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
01.11.2016, 04:28  [ТС] 5
Не работает. Но на самом деле все можно сделать гораздо легче. Написал преподаватель

So if the user enters 10 20 45 all at once and in our code we have
scanf("%d", &num);
Then we will just read the 10 and the 20 and 45 will still be there. If we then call scanf again we will read the 20. And if we call it one more time we will get the 45."

Примерно значит следующее:
"Если пользователь введет 10 20 45 за один раз и в его коде будет только
scanf("%d", &num);
Затем мы просто прочитаем 10 и 20 и 45 которые будут все еще там. Затем если мы вызовем scanf снова мы прочитаем 20. И если мы вызовем это еще раз, мы получим 45."

Как я понял нужно как-то через один scanf сделать
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,320
01.11.2016, 04:37 6
Лучший ответ Сообщение было отмечено madi как решение

Решение

Цитата Сообщение от madi Посмотреть сообщение
Что в scanf забивать?
Во-первых, мне не понятно, что там у вас с переменными. Вводятся некие strok и stob, а циклы потом вдруг до row и col? Что это за каша?

Во-вторых, ничего больше не надо менять в коде. Такой код уже сам по себе будет прекрасно читать и 1 5 7 9, и 1 5 7 9, и 1 5 7 9, и 1 5 7 9. Этому коду соврешенно все равно, как ваш ввод разбит на строки. Именно это вам и сказал преподаватель.

Другими словами, нет абсолютно никакой разницы между

C
1
2
3
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
и

C
1
scanf("%d%d%d", &a, &b, &c);
Поэтому не надо заниматься изобретением каких-то "однострочных scanf". Это ничего не дает и ничего не меняет.
1
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
01.11.2016, 08:47  [ТС] 7
ну конечно! А я уже думал, может внутри scanf как то цикл сделать, так и знал что ответ на поверхности и очевиден.
А что насчет того, чтобы вывести значение в виде двумерной матрицы? Имею ввиду следующее:
Enter Matrix A
1 2
3 4
Enter Matrix B
100 200
200 400
A + B =
101 202
203 404

Добавлено через 3 часа 18 минут
Ну это вообще легко было) Один printf добавил после цикла.
Но проблема другая,в этом коде я заполняю массив а:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int row,col;
    int a[row][col], b[row][col], c[row][col];
    int i, j;
    printf("Please enter the number of rows: ");
    scanf("%d",&row);
    printf("Please enter the number of columns: ");
    scanf("%d",&col);
    printf("Enter Matrix A\n");
    for (i = 0; i < row; ++i){
        for (j = 0; j < col; ++j)
        {
            scanf("%d", &a[i][j]);
            
        }
    }
Когда я вбиваю 1 2 3 4, то выводит он у меня 3 4 3 4
C
1
2
3
4
5
for (i = 0; i < row; i++){
        for (j = 0; j < col; j++){
            printf("%d ", a[i][j]);
        }
    }
Вот весь код
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
#include <stdio.h> 
 
 
 
int main()
{
    int row,col;
    int a[row][col], b[row][col], c[row][col];
    int i, j;
    printf("Please enter the number of rows: ");
    scanf("%d",&row);
    printf("Please enter the number of columns: ");
    scanf("%d",&col);
    printf("Enter Matrix A\n");
    for (i = 0; i < row; ++i){
        for (j = 0; j < col; ++j)
        {
            scanf("%d", &a[i][j]);
            
        }
    }
    
    printf("Enter Matrix B\n");
    for (i = 0; i < row; i++){
        for (j = 0; j < col; j++)
        {
            scanf("%d", &b[i][j]);
            
        }
    }
    for (i = 0; i < row; i++){
        for (j = 0; j < col; j++){
            printf("%d ", a[i][j]);
        }
    }
    
    printf("A + B =\n");
    for (i = 0; i < row; i++){
        
        for (j = 0; j < col; j++){
            c[i][j] = a[i][j] + b[i][j];
            printf("%d ",  c[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}
Добавлено через 37 минут
Все, разобрался. Ответ был на поверхности)
0
01.11.2016, 08:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 08:47

Ввод матрицы из файла
Вылетает ошибка при запуске построенного решения &quot;...expression...

Ввод элементов матрицы с клавиатуры
у меня дано СЛАУ методом гаусса: #include &lt;stdio.h&gt; #include &lt;conio.h&gt;...

Файловый ввод/вывод матрицы
Здравствуйте нигде не могу найти пример кода файлового ввода/вывода матрицы на...


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

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

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