powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ Задание
6 сообщений из 6, страница 1 из 1
C++ Задание
    #38085950
Ershvl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, вот такая вот задача в каждой строке матрицы F(k,k) элемент, лежащий на главной диагонали, если это простое число, заменить суммой ранее расположенных элементов.
вот мой вариант
Код: plaintext
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.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <cmath>
 
bool is_prime(int value)
{
    if(value <= 1)
    {
        return 0;
    }
    
    for(int i = 2; i <= sqrt(value); ++i)
    {
        if (value % i==0)
        {
            return 0;
        }
    }
    
    return 1;
}
 
int sum_before(int * arr, int index)
{
    int sum = 0;
    
    for(int i = 0; i < index; ++i)
    {
        sum += arr[i];
    }
    
    return sum;
}
 
void change_elems(int ** matrix, int rows, int cols)
{
    int * diag = new int[rows];
    
    for(int i = 0; i < rows; ++i)
    {
        diag[i] = matrix[i][i];
    }
    
    for(int i = 0; i < rows; ++i)
    {
        if(is_prime(matrix[i][i]))
        {
            matrix[i][i] = sum_before(diag, i);
        }
    }
    
    delete [] diag;
        
}
 
void fill_matrix(int ** matrix, int rows, int cols)
{
    for(int i = 0; i < rows; ++i)
    {
        for(int j = 0; j < cols; ++j)
        {
            matrix[i][j] = rand() % 100;
        }
    }
}
 
void output_matrix(int ** matrix, int rows, int cols)
{
    for(int i = 0; i < rows; ++i)
    {
        for(int j = 0; j < cols; ++j)
        {
            std::cout << std::setw(4) << matrix[i][j] << " ";
        }
        std::cout << "\n";
    }
}
        
 
int main()
{
    srand(static_cast<unsigned int>(time(0))); 
    
    int rows, cols;
 
    std::cout << "Enter rows: ";
    std::cin >> rows;
    std::cout << "Enter cols: ";
    std::cin >> cols;
 
    int ** matrix = new int * [rows];
 
    for(int i = 0; i < rows; ++i)
        matrix[i] = new int[cols];
        
    
    fill_matrix(matrix, rows, cols);
    std::cout << "Source:\n";
    output_matrix(matrix, rows, cols);
    
    change_elems(matrix, rows, cols);
    std::cout << "\nResult:\n";
    output_matrix(matrix, rows, cols);
    
   
    for(int i = 0; i < rows; ++i)
        delete [] matrix[i];
        
    delete [] matrix;
   
    return 0;
}


он работает( но преподаватаель говорит, что данная задача решается намного проще(( не могу понять как проще.
...
Рейтинг: 0 / 0
C++ Задание
    #38086061
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ershvlон работает( но преподаватаель говорит, что данная задача решается намного проще(( не могу понять как проще.
Начни с формального описания алгоритма. Сравни его с тем что делает твоя программа. Это подскажет куда копать.
...
Рейтинг: 0 / 0
C++ Задание
    #38086111
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может его смущает непонятно чем обоснованное использование дополнительного массива diag?
Но без него не то чтобы проще - экономнее и логичнее (не логично выкатывать диагональные элементы в отдельный массив, чтобы буквально чуть дальше его удалить, так ничего с ним и не проделав).
...
Рейтинг: 0 / 0
C++ Задание
    #38086116
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonМожет его смущает непонятно чем обоснованное использование
дополнительного массива diag?
Лично меня смущает функция sum_before(), без которой код тоже проще и экономичнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ Задание
    #38086120
Vadddddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если упрощать, то sum_before() не нужно, и массив еще один не нужно создавать.
и если rows = cols, можно одно выкинуть.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void change_elems(int ** matrix, int rows, int cols)
{
	int sum = 0;
	for(int i = 0; i < rows; ++i)
	{
		if(is_prime(matrix[i][i]))			matrix[i][i] = sum;
		sum += matrix[i][i];
	}
}
...
Рейтинг: 0 / 0
C++ Задание
    #38086543
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... Eclipse(C++) не может отформатировать эту простыню. Сначала нормально ровняет исходник
и где-то начиная с std::cout начинает ломать всё и делать переносы прямо между namespace
и функцией. Что за нахер?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ Задание
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]