[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Компьютеры » Программирование » C++, C# » Помогите написать программу (OpenMP, VisualStudio)
Помогите написать программу
valentinshmickovДата: Четверг, 26.11.2015, 01:53 | Сообщение # 1
НовичЁк
Группа: Проверенные
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Оффлайн
1. Определить количество строк и столбцов в ней (в случае, если файл имеет неверный формат - выдать сообщение об ошибке), прочитать в двумерный массив все значения в ячейках матрицы.
2. Под неверным форматом понимаются случаи, когда данные в файле не являются матрицей (таблицей) или значения ячеек матрицы не являются вещественными. Вывести пользователю. В консоль количество строк и столбцов в матрице.
3. Вычислить минимальное и максимальное значение в матрице.
4. Отсортировать значения в матрице по возрастанию или убыванию (задать об этом вопрос пользователю)
5. Вывести в файл (название файла принять от пользователя) в виде такой же матрицы значения функций f(x), где "х" - ячейка исходной матрицы.
 
АлексейДата: Четверг, 26.11.2015, 01:56 | Сообщение # 2
Продвигающийся
Группа: Администраторы
Сообщений: 324
Награды: 4
Репутация: 1
Статус: Оффлайн
valentinshmickov, Библиотеку к проекту надеюсь знаешь как подключать?

Код
#include <fstream>
#include<locale.h>
#include<time.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <string.h>
#include <omp.h>
using namespace std;

struct  maxmin
{
maxmin() {}
double min;
double max;
};

double **filein(int n, int m)
{
double **mass = new double *[n];
cout << "Исходный массив" << endl;

double nm = n * m, id=0;

for (int i = 0;i < n; i++)
{
  mass [i]= new double[m];
  for (int j = 0;j < m;j++)
  {
   id++;
   mass [i][j]= 1 + rand() % 1001;
      now:
   int i1 = i, j1 = j - 1;
   while (1)
   {
    if (i1 == -1) { break; }
    if ((mass[i1][j1] == mass[i][j]) && ((i == i1 && j > j1) || (i > i1)))
    {
     srand(time(NULL));
     mass [i][j]= 1 + rand() % 1001;
     goto now;
    }
    j1--;
    if (j1 < 0) { i1--; j1 = m - 1; }
    if (i1 < 0)
    {
     break;
    }
   }
   cout << (id * 100) / nm << "% ";
  }
}
cout << endl;
for (int i = 0;i < n;i++)
{
  for (int j = 0;j < m;j++)
  {
   cout << mass [i][j]<< "\t";
  }
  cout << endl;
}

return mass;
}

maxmin обработчик1(double **mass, int n, int m)
{
maxmin res;
res.min = res.max = mass[1][1];
for (int i = 0;i < n;i++)
{
  for (int j = 0;j < m;j++)
  {
   if (res.max < mass[i][j]) { res.max = mass[i][j]; }
   else if (res.min > mass[i][j]) { res.min = mass[i][j]; }
  }
}
return res;
}

double **обработчик2(double **mass, int n, int m)
{
start:
cout << "Как отсортировать элементы матрицы (возрастанию - 1/убыванию - 2)?   ";
int ty;
cin >> ty;
if (ty == 1)
{
  double tmp;
  for (int i = 0; i < n;i++)
   for (int j = 0;j < m;j++)
    for (int i1 = 0;i1 < n;i1++)
     for (int j1 = 0;j1 < m;j1++)
     {
      if ((mass[i1][j1] < mass[i][j]) && ((i == i1 && j<j1) || (i<i1)))
      {
       tmp = mass[i][j];
       mass [i][j]= mass[i1][j1];
       mass[i1][j1] = tmp;
      }
     }
}
else if (ty == 2)
{
  double tmp;
  for (int i = 0; i < n;i++)
   for (int j = 0;j < m;j++)
    for (int i1 = 0;i1 < n;i1++)
     for (int j1 = 0;j1 < m;j1++)
     {
      if ((mass[i1][j1] > mass[i][j]) && ((i == i1 && j<j1) || (i<i1)))
      {
       tmp = mass[i][j];
       mass [i][j]= mass[i1][j1];
       mass[i1][j1] = tmp;
      }
     }
}
else
{
  cout << "Вы ввели неправильное значение" << endl;
  goto start;
}
return mass;
}

int main(int argc, char *argv)
{
setlocale(LC_ALL, "Russian");
srand(time(NULL)); int n, m;
cout << "Введите размерность (столбы строки): "; cin >> n >> m;
system("pause");
maxmin max_min;
double **mass = filein(n, m);
double **sortmass;

#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
  max_min = обработчик1(mass, n, m);
}
#pragma omp section
{
  sortmass = обработчик2(mass, n, m);
}
}
}

cout << "Результаты работы программы" << endl;
cout << "Минимальный элемент массива - " << max_min.min << endl;
cout << "Максимальный элемент массива - " << max_min.max << endl;
cout << "Отсортированный массив:" << endl;
for (int i = 0;i < n;i++)
{
  for (int j = 0;j < m;j++)
  {
   cout << sortmass [i][j]<< "\t";
  }
  cout << endl;
}

system("pause");
}
Прикрепления: 251120152324.cpp (3.9 Kb)
 
valentinshmickovДата: Четверг, 26.11.2015, 01:58 | Сообщение # 3
НовичЁк
Группа: Проверенные
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Оффлайн
Алексей, спасибо. С файлом разберусь, наверное.
 
ladyirina-rom1995Дата: Четверг, 26.11.2015, 02:07 | Сообщение # 4
НовичЁк
Группа: Пользователи
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Оффлайн
Алексей, а где ввод и вывод из файла?
 
valentinshmickovДата: Четверг, 26.11.2015, 02:10 | Сообщение # 5
НовичЁк
Группа: Проверенные
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Оффлайн
ladyirina-rom1995, Да я сам сделаю
 
ladyirina-rom1995Дата: Четверг, 26.11.2015, 02:12 | Сообщение # 6
НовичЁк
Группа: Пользователи
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Оффлайн
valentinshmickov, ты не смог сделать элементарные функции и закрепить их в omp, но ввод и вывод сделаешь...
 
АлексейДата: Четверг, 26.11.2015, 15:01 | Сообщение # 7
Продвигающийся
Группа: Администраторы
Сообщений: 324
Награды: 4
Репутация: 1
Статус: Оффлайн
ladyirina-rom1995, ввод/вывод сделает сам. Я откуда знаю какого формата файл из которого получаем информацию, может он из обычного txt это берет, может это бинарный файл, а может excel таблица. В любом случае простейшие моменты типа ввода и вывода молодой человек в силах сделать самостоятельно.
 
Форум » Компьютеры » Программирование » C++, C# » Помогите написать программу (OpenMP, VisualStudio)
  • Страница 1 из 1
  • 1
Поиск: