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

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

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

Файл: Для заданной в файле матрицы A (n на m) определить количество строк, которые упорядочены по возрастанию - C++

03.07.2012, 13:28. Просмотров 525. Ответов 9
Метки нет (Все метки)

помогите написать программу
Для заданной в файле матрицы A (n на m) определить количество строк, которые упорядочены по
возрастанию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2012, 13:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Файл: Для заданной в файле матрицы A (n на m) определить количество строк, которые упорядочены по возрастанию (C++):

Определить количество строк матрицы, которые упорядочены по возрастанию - C++
В матрице А(n x n) определить количество строк ,которые упорядочены по возрастанию.Использовать подпрограмму проверки упорядоченности...

Найти максимальный элемент среди всех элементов тех строк заданной матрицы А (4,4), которые упорядочены по возрастанию - C++
нужно найти максимальный элемент среди всех элементов тех строк заданной матрицы А (4,4), которые упорядочены по возрастанию. Если...

Вычислить количество строк матрицы, элементы которых упорядочены по возрастанию - C++
Задание: Дано матрицу размерности N на M. Вычислить количество строк матрицы, элементы которых упорядочены по возрастанию. Заранее...

Найти количество строк матрицы, элементы которых упорядочены по возрастанию - C++
помогите исправить ошибки,я задачу решил только ошибки выходят!Matrix42. Дана матрица размера M . N. Найти количество ее строк, элементы...

Найти количество строк матрицы, элементы которых упорядочены по возрастанию. - C++
помогите докончить Matrix42. Дана матрица размера M × N. Найти количество ее строк, элементы которых упорядочены по возрастанию. ...

Найти количество строк матрицы, элементы которых упорядочены по возрастанию. - C++
Дана матрица размера M × N. Найти количество ее строк, элементы которых упорядочены по возрастанию.

9
Catstail
Модератор
22713 / 11082 / 1795
Регистрация: 12.02.2012
Сообщений: 18,273
03.07.2012, 13:30 #2
Это зависит от того, как хранится матрица - по строкам или по столбцам
0
neske
1502 / 869 / 84
Регистрация: 26.03.2010
Сообщений: 2,982
03.07.2012, 13:34 #3
Catstail, намудрили вы что-то
C++
1
2
3
for (int i = 0; i < row; ++i)
    for (int j = 0; j < col; ++j)
        ifs >> arr[i][j];
как она еще может храниться?
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
03.07.2012, 13:34 #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
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
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
 
int main()
{
    std::string file_name;
    std::fstream file;
    
    std::cout << "Enter a file name: " << std::endl;
    std::cin >> file_name;
    
    file.open(file_name, std::ios::in);
    if (file.fail())
    {
        std::cerr << "File not found" << std::endl;
        system("Pause");
        return EXIT_FAILURE;
    }
    
    unsigned int n, m;
    file >> n >> m;
    
    double** matrix = new double*[n];
    for (unsigned int i = 0; i < n; ++i)
        for (unsigned int j = 0; j < m; ++j)
            file >> matrix[i][j];
    
    unsigned int count = 0;
    for (unsigned int i = 0; i < n; ++i)
    {
        bool yes = true;
        for (unsigned int j = 1; j < m; ++j)
            if (matrix[i][j - 1] > matrix[i][j])
            {
                yes = false;
                break;
            }
        if (yes)
            ++count;
    }
    
    std::cout << "Answer: " << count << std::endl;
   
    for (unsigned int i = 0; i < n; ++i)
        delete[]matrix[i];
    delete[]matrix;
    
    system("Pause");
    return EXIT_SUCCESS;
}
0
Catstail
Модератор
22713 / 11082 / 1795
Регистрация: 12.02.2012
Сообщений: 18,273
03.07.2012, 13:49 #5
Вот решение для хранения по строкам:

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
#include "stdio.h"
 
int main(int argc, char* argv[])
{
    FILE *Inp;
 
    char Fname[200];
 
    int i,j,n,m,s,c=0,p=0,k=0;
 
    printf("Enter n ");
    scanf ("%d",&n);
 
    printf("Enter m ");
    scanf ("%d",&m);
 
    for (i=0; i<200; i++) Fname[i]=0;
    printf("Enter File Name ");
    scanf ("%s",Fname);
 
    if ((Inp=fopen(Fname,"r")) == NULL)
    {
        printf("Error by open\n");
        return -1;
    }
    else
        for (i=0; i<n; i++)
        {
            s=0;
            fscanf(Inp,"%d",&p);
            for (j=1; j<m; j++)
            {
                fscanf(Inp,"%d",&c);
                if (c > p) s++;
            }
            if (s == (m-1)) k++;
 
        }
 
     printf("Number of ordered rows is %d\n",k);
 
     fclose(Inp);
 
    return 0;
}
В этом решении вообще не нужны массивы...

Добавлено через 5 минут
Цитата Сообщение от neske Посмотреть сообщение
Catstail, намудрили вы что-то
Ваш код:

C++
1
2
3
for (int i = 0; i < row; ++i)
    for (int j = 0; j < col; ++j)
        ifs >> arr[i][j];
предполагает, что матрица хранится по строкам. т.е. пусть матрица имеет вид

1 2 3
4 2 1
7 8 9

и в файле сидит так:

1
2
3
4
2
1
7
8
9

Это хранение по строкам. Но она может храниться и так:

1
4
7
2
2
8
3
1
9

Это - та же матрица, но хранящаяся по столбцам (как, например, в Фортране). Для такой схемы ваш код перепутает столбцы и строки.

Для хранения по строкам массив не нужен (см. мое решение). Так что это не я перемудрил, а задача не вполне корректна.
0
neske
1502 / 869 / 84
Регистрация: 26.03.2010
Сообщений: 2,982
03.07.2012, 13:59 #6
Catstail, а вы часто встречали в подобных задачах на форуме, что матрица хранится по строкам?
можно ведь и по спирали ее хранить )
0
Catstail
Модератор
22713 / 11082 / 1795
Регистрация: 12.02.2012
Сообщений: 18,273
03.07.2012, 14:03 #7
В условии все должно быть задано чётко. Это претензия не ко мне. Просто в своей практике я сталкивался и первым и со вторым способом хранения.

И еще раз повторю: для такого хранения, как у тебя, массив (тем более динамический двумерный) не нужен. Задача верно решается без массива в одно действие. Возражения?
0
neske
1502 / 869 / 84
Регистрация: 26.03.2010
Сообщений: 2,982
03.07.2012, 14:15 #8
Цитата Сообщение от Catstail Посмотреть сообщение
И еще раз повторю: для такого хранения, как у тебя, массив (тем более динамический двумерный) не нужен. Задача верно решается без массива в одно действие. Возражения?
конечно можно и без массива, я ничего про это не говорил)

Добавлено через 1 минуту
только, вот, у тебя ошибка
первый элемент в строке сравнивается со всеми следующими
0
Catstail
Модератор
22713 / 11082 / 1795
Регистрация: 12.02.2012
Сообщений: 18,273
03.07.2012, 14:18 #9
Это да... Вот:

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
#include "stdio.h"
 
int main(int argc, char* argv[])
{
    FILE *Inp;
 
    char Fname[200];
 
    int i,j,n,m,s,c=0,p=0,k=0;
 
    printf("Enter n ");
    scanf ("%d",&n);
 
    printf("Enter m ");
    scanf ("%d",&m);
 
    for (i=0; i<200; i++) Fname[i]=0;
    printf("Enter File Name ");
    scanf ("%s",Fname);
 
    if ((Inp=fopen(Fname,"r")) == NULL)
    {
        printf("Error by open\n");
        return -1;
    }
    else
        for (i=0; i<n; i++)
        {
            s=0;
            fscanf(Inp,"%d",&p);
            for (j=1; j<m; j++)
            {
                fscanf(Inp,"%d",&c);
                if (c > p) s++;
                p=c;  /* !!! */
            }
            if (s == (m-1)) k++;
 
        }
 
     printf("Number of ordered rows is %d\n",k);
 
     fclose(Inp);
 
    return 0;
}
0
zarko97
278 / 38 / 0
Регистрация: 11.10.2015
Сообщений: 400
06.05.2017, 01:56 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
std::random_device rand;
std::default_random_engine gen(rand());
std::uniform_int_distribution <int> distr(-50, 50);
std::size_t size;
while (std::cout << "Enter size of vector: " && std::cin >> size && size <= 0);
std::vector< std::vector <int> > vector2d(size, std::vector <int>(size, 0));
std::for_each(vector2d.begin(), vector2d.end(), [&gen, &distr](std::vector <int> & curLine) -> std::vector <int>
    {
        std::generate(curLine.begin(), curLine.end(), [&gen, &distr]() -> int { return distr(gen); });
        //std::copy(curLine.begin(), curLine.end(), std::ostream_iterator <int>(std::cout << std::endl, "\t"));
        std::for_each(curLine.begin(), curLine.end(), std::cout << std::endl << boost::lambda::_1 << "\t");
        std::cout << std::endl;
        return curLine;
    });
std::cout << std::endl << std::count_if(vector2d.begin(), vector2d.end(), [] (std::vector <int> & curLine) -> bool
    {
        return std::is_sorted(curLine.begin(), curLine.end(), std::less< >());
    }) << std::endl;
0
06.05.2017, 01:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2017, 01:56
Привет! Вот еще темы с ответами:

Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены - C++
Доброго времени суток, у меня есть задача ( практика,паскаль, процедуры ) так вот я не могу решить задачу :( Помогите пожалуйста...

Массивы. Найти максимальный элемент среди всех элементов тех строк заданной матрицы, которые упорядочены - C++
Здравствуйте! помогите написать программу на языке C++. Найти максимальный элемент среди всех элементов тех строк заданной матрицы, которые...

Как найти количество рядков в матрице,которые упорядочены по возрастанию? - C++
Дана матрица розмерностью m х n. Найти количество рядков в матрице, которые упорядочены по возрастанию. Добавлено через 12 часов 55...

Дана матрица размера N×M. Найти максимальный среди элементов тех строк|столбцов, которые упорядочены либо по возрастанию - C++
Дана матрица размера N×M. Найти максимальный среди элементов тех строк|столбцов, которые упорядочены либо по возрастанию, либо по убыванию....


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

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

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