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

Задача на массивы - C++

Восстановить пароль Регистрация
 
Fesmer
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 18
13.11.2012, 22:26     Задача на массивы #1
Дана матрица размерностью N на M, где большинство элементов равно 0. Нужно все элементы матрицы разделить на самое большое число по модулю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 22:26     Задача на массивы
Посмотрите здесь:

C++ Задача на массивы
Задача на массивы C++
Задача на массивы. C++
задача на массивы. C++
C++ Задача на массивы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.11.2012, 22:45     Задача на массивы #2
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
/*
Дана матрица размерностью N на M, где большинство элементов равно 0.
Нужно все элементы матрицы разделить на самое большое число по модулю.
*/
 
#include <iostream>
#include <algorithm>
#include <iterator>
#include <functional>
#include <stdlib.h>
 
const int N = 10;
const int M = 5;
 
double getRand(void) { return 36.0 / double(rand() % 10 + 1); }
 
int main(void)
{
    setlocale(0, "rus");
 
    double Matrix[N][M];
    double * begin = &Matrix[0][0];
    double * end = &Matrix[0][0] + N * M;
    std::generate(begin, end, getRand);
 
    for (int i = 0; i < M; ++i)
    {
        std::copy(begin + i * N, begin + i * N + N, std::ostream_iterator<double>(std::cout, " "));
        std::cout << '\n';
    }
 
    double max = *std::max_element(begin, end);
    std::cout << '\n' << "Макс.элемент: " << max << "\n\n";
 
    std::transform(begin, end, begin, std::bind2nd(std::divides<double>(), max));
 
    for (int i = 0; i < M; ++i)
    {
        std::copy(begin + i * N, begin + i * N + N, std::ostream_iterator<double>(std::cout, " "));
        std::cout << '\n';
    }   system("pause");
    return 0;
}
UMZ
1 / 1 / 0
Регистрация: 15.06.2010
Сообщений: 12
14.11.2012, 00:53     Задача на массивы #3
Задание: Для Х, принимающего значения от XN=-30 до XK=50 с шагом ∆X=0,6, определить Y.
При условии:

Y= log3x, если x>6,8
Y= x-32, если 0<=x<=6,8
Y= sin(x), если x<0.
Результат выдать в форме таблицы значений X иY.

Проверьте, пожалуйста, решение, которое я здесь приведу. Исправьте, если что не так или предложите свой вариант, если считаете, что ваш вариант лучше. Только не судите строго, я С++ совсем недавно начал изучать и ошибки вполне возможны.
Код писал для компилятора Visual C++ 2008.
Решение:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <math>
using namespace std;

//int _tmain(int argc, _TCHAR* argv[])
int main()
{
double a[35]; //задаю одномерный массив a[x] размерностию 35 на 35
for (double x=-20; x<0; x=x+0,6) // начальное значение х, конечное значение х, шаг х
a[x]= sin(x); // присваию значение массива функции
for (double x=0; x<=6,8; x=x+0,6)
a[x]= x-32;
for (double x=6,8; x<20; x=x+0,6)
a[x]= ln(x)/ln(3);
for (double j=0; j<=100; j++)
cout<<"x="<<x<<"y="<<a[x]<<endl; //вывод значения на экран (используя консольное приложение)
return 0;
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
14.11.2012, 01:02     Задача на массивы #4
John Prick, в условии еще модуль требовался. Вроде как, надо найти максимальный по модулю элемент матрицы, а потом на него делить

Добавлено через 2 минуты
UMZ, создайте свою тему и там задавайте вопрос
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
14.11.2012, 09:59     Задача на массивы #5
I.M., да, про модуль забыл. Но тогда в одну строчку не записать, потому что нужен шаблон compose, которого в стандарте нет (В MSVC2008 нету). Два раза transform применять придётся.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2012, 10:07     Задача на массивы #6
Цитата Сообщение от Fesmer Посмотреть сообщение
Дана матрица размерностью N на M, где большинство элементов равно 0. Нужно все элементы матрицы разделить на самое большое число по модулю.
Если большинство элементов равны некоторой константе, или могут быть быстро вычислены, то их можно вообще не хранить, а только подразумевать, матрица, в которой так и делается называется разреженной. Причём, если потом 0 поменяется на что то другое, то его можно добавить в физический массив, который есть внутреннее составное данное разреженного массива, состоящее из действительно хранимых его элементов. Достаточно ли велика твоя матрица, чтоб применение разреженной матрицы вместо обычной было выгодно?
Yandex
Объявления
14.11.2012, 10:07     Задача на массивы
Ответ Создать тему
Опции темы

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