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

дана матрица a(n/m) которая вводиться из файла - C++

Восстановить пароль Регистрация
 
arsenij726
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 23
04.09.2013, 19:01     дана матрица a(n/m) которая вводиться из файла #1
дана матрица a(n/m) которая вводиться из файла и число k вводиться с клавиатуры. В k-ой строке найти максимальный элемент.В том столбце где этот элемент находиться найти сумму модулей элементов. Каждый этап решать при помощи программы работающей с вектором ( На С++)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 19:01     дана матрица a(n/m) которая вводиться из файла
Посмотрите здесь:

C++ Дана квадратная матрица А порядку n. Составить программу, которая находит минимальный элемент и все элементы, расположенные в одной строке и в одном
Дана квадратная матрица А порядка n. Составить программу которая все элементы расположенные на главных и побочных диагоналях заменяет на минимальное. C++
дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. C++
C++ Нужно что бы если в текстбокс не вводиться текст, то срабатывала исключительная ситуация, которая просила бы юзера заполнить его.
Дана прямоугольная матрица А размером N × M. Составить программу, которая преобразует матрицу следующим образом: поэлементно вычитает первый столбец C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Oman
4 / 4 / 0
Регистрация: 07.11.2010
Сообщений: 29
04.09.2013, 20:26     дана матрица a(n/m) которая вводиться из файла #2
Цитата Сообщение от arsenij726 Посмотреть сообщение
дана матрица a(n/m) которая вводиться из файла и число k вводиться с клавиатуры. В k-ой строке найти максимальный элемент.В том столбце где этот элемент находиться найти сумму модулей элементов. Каждый этап решать при помощи программы работающей с вектором ( На С++)
Это задание такое дали тебе? n/m - любыми могут быть? размер матрицы.
arsenij726
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 23
04.09.2013, 20:54  [ТС]     дана матрица a(n/m) которая вводиться из файла #3
да мне дали задание с n и m, но препод сказал , что не меньше 4х4
Oman
4 / 4 / 0
Регистрация: 07.11.2010
Сообщений: 29
05.09.2013, 17:46     дана матрица a(n/m) которая вводиться из файла #4
Цитата Сообщение от arsenij726 Посмотреть сообщение
да мне дали задание с n и m, но препод сказал , что не меньше 4х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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
using namespace std;
#include <fstream>
#include <vector>
 
int main()
{
    system("chcp 1251 > nul");
 
    vector<int> v;              // создаем вектор
    vector<int>::iterator inter;    // итератор для вектора
    char ch[400];               // строка, в которую буден введен текст из файла
    int x = 0,y = 0;            // количество строк и колнок
 
    ifstream file;              
    file.open("matrix.txt");        // открываем сам файл
    cout << "\nStart read file...\n";
 
    file.seekg(0,ios::end);
    int filesize = file.tellg();    // узнаем размер
 
    cout << "\nFile size: " << filesize << endl << "File:\n";
 
     file.seekg(0);
    file.read(ch,filesize);
    ch[filesize-4] = '\0';  // почему -4 хз, но на этом месте кончается файл, но 
                        //продолжает читать его дальше вручную ствлю знак конца
 
    int numb;               // переменная, в которую складываются числа
    numb = atoi(ch);        // с помощью atoi переделываем из строки в цифру
    v.push_back(numb);      // кладем получившуюся цифру в вектор
    y++;                    // увеличиваем счетчик цифр (y пока что считает общие кол-во чисел)
    for (int i = 0; ch[i] != '\0'; i++) // цикл заполнения вектора.
    {   
        if (ch[i] == ' ' || ch[i] == 10)    // если считан пробел ии переход на след строку
        {                           // значит за ним следует цифра
            numb = atoi(ch+i);          // считываем ее 
            v.push_back(numb);          // и записываем
            y++;                        // +1 к счетчику
        }
        if (ch[i] == 10)                // если новая строка, то
            x++;                        // +1 к числу строк
    }
    x++;                                // +1, т.к. в после последнего числа идет конец файла, а не новая строка
    y /= x;                         // теперь y хранит количество столбцов( все числа делить на количество срок)
    cout << "Размер матрицы " << y << " на " <<  x << endl;
    
    inter = v.begin();  // возвращаем итератор в начало вектора
    i = 0;          // счетчик чисел
    while (inter != v.end())        // пока итератор не указывает на конец вектора
    {
        i++;                    // прибавляем +1 к количеству выведеных на экран чисел
        cout << *inter++ << " ";    
        if (i % y == 0)         // если количество выведеных чисел кратно количеству столбцов
            cout << endl;       // новая строка
    }
 
    cout << "\nEnd reading...\n";
 
    cout << "Введите k: ";
    int k;
    cin >> k;
 
    inter = v.begin();          // возвращаем итератор в начало вектора
    for (i = 0; i < y*(k-1); i++)   // интерратор перемещаем на нужную строку
        inter++;
 
    int z;                  // переменная, которая будет хранить позицию в строке(номер столба)
    int temp = 0;               // переменная, которая будет хранить самое большое число на данный момент
    for (int j = 0; j < y; j++)     // ищем в этой строке наибольший элемент
    {
        int tmp = *inter++;
        if (tmp > temp)
        {
            temp = tmp;
            z = j ;             // запоминаем его столбик
        }
    }
 
    cout << "Мы запомнили " << z << " столбик" << endl;
 
    inter = v.begin();              // возвращаем итератор в начало вектора
    int summ = 0;
    for (i = 0; i < x * y; i++)     // перебераем все(x * y) числа
    {
        temp = *inter++;            // берем число
        if ( (i % y) == z)          // если его "порядковый номер" при делении на кол-во чисел в строке
        {                       // дает остаток раный номеру нужного столба
            int mod = (temp < 0) ? - temp : temp;       // если число отрицательное, берем (0-число)
            summ += mod;                        // суммируем модули
        }
    }
 
    cout << "Сумма равна: " << summ << endl;
 
    return 0;
}
Не смог прямо считать int переменные с файла, пришлось применять itoa.
Файл для тестов был такой:
Кликните здесь для просмотра всего текста
21 21 43 42 53
33 43 53 64 73
35 53 61 74 83
23 43 62 73 82
21 44 53 63 71


Именно важно что бы:
1. После последнего числа не было больше никаких символов.
2. Файл сразу начинался с цифры.
3. Цифры отделялись пробелами.
4. Строка заканчивалась цифрой.
Yandex
Объявления
05.09.2013, 17:46     дана матрица a(n/m) которая вводиться из файла
Ответ Создать тему
Опции темы

Текущее время: 11:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru