С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Vadim_0107
1 / 1 / 1
Регистрация: 04.01.2014
Сообщений: 30
1

Считать данные из файла в массив и обработать их

06.04.2014, 19:50. Просмотров 1898. Ответов 14
Метки нет (Все метки)

Найти непрерывную участок из 10 элементов, который имеет наибольшее среднее значение элементов +
1. Сформированный массив записать в текстовый файл;
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
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
# include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
 
int main ()
{
    setlocale(LC_CTYPE, "Russian_Russia.1251");
    int size;
    int *Ar;
const char Masiv1[]="File1.txt";
 
    srand(time(NULL));
    {
        ofstream potik1 (Masiv1);
    size=rand()%151+50;
    cout<<"size="<<size<<endl;
    Ar=(int  *)malloc(size*sizeof(int));
    cout<<"Початковий масив"<<endl;
 
    for (int i = 0; i != size; i++)
    {
        *(Ar + i)=rand() %100;
        cout<<*(Ar+i)<<'\t';
 
    potik1<<*(Ar+i)<<"\t";
    }
    }
    cout << endl<<endl;
    {
        ofstream potik2(Masiv1,ios::in);
 
    double max_average = 0,average;
    int sum = 0, m;
    for(int j = 0; j != size;j++)
    {
         m = j;
         while(m != j+ 10)
         {
             sum += *(Ar + m);
             m++;
         }
        average = (double)sum / 10;
 
        if(average > max_average)
        max_average = average;
 
 
        sum = 0;
        if(j+10 >= size) break;
 
    }
    for(int j = 0; j != size; j++)
    {
 
         m = j;
         while(m != j+ 10)
         {
             sum += *(Ar + m);
             m++;
         }
        average = (double)sum / 10;
 
 
        if(max_average == average)
            {
                m = j;
                while(m != j+10){
                cout << *(Ar + m) << "\t";
                m++;
                }
            }
 
        sum = 0;
        if(j+10 >= size) break;
    }}
return 0;
}
Нужно сделать так чтоб после нажатия на рushButton начальный массив выводился на tableWidget,а результат на tableWidget_2
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2014, 19:50
Ответы с готовыми решениями:

Как считать определенные данные с файла
Добрый день. Задали в универе курсовую &quot;игра Змейка&quot; (в Qt 5.4 C++). В ней уже...

Считать данные в массив с lineEdit
Всем привет. Прошу помощи в вопросе. Как считать данные в массив с...

Считать два столбца из Excel-файла, каждый в свой массив
Здравствуйте,нужно считать 2 столбца из exel файла,каждый в свой масив, как это...

Считать данные
в консольном программировании абсолютно ясно, как считываются введенные...

Как правильно обработать открытие файла?
В StatusBar имя файла который открыт.И если файл не открыт то кнопка pushButton...

14
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
06.04.2014, 19:54 2
А в чем вопрос то?
Если вы хотите, чтобы кто-то за вас сделал это задание, то вам сюда:
http://www.cyberforum.ru/order-program/
0
Ev_Hyper
Заблокирован
07.04.2014, 09:37 3
Vadim_0107, вы пробывали сделать сами?
0
Vadim_0107
1 / 1 / 1
Регистрация: 04.01.2014
Сообщений: 30
07.04.2014, 16:35  [ТС] 4
Ev_Hyper, Вот пробивал как то сделать но не получается .Так как я вообще не знаком с QT то не знаю в чем проблема .А он нужен мне лишь для разового использования в лабораторной работе.
C++ (Qt)
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
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <ctime>
#include <malloc.h>
#include <iostream>
using namespace std;
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
int size;
int *Ar;
int j=0;
double max_average = 0,average;
int sum = 0, m;
 
 
srand(time(NULL));
size=rand()%151+50;
cout<<"size="<<size<<endl;
ui->tableWidget->setColumnCount(size);
ui->tableWidget->setRowCount(1);
Ar=(int  *)malloc(size*sizeof(int));
QFile open3("F:\\mass.txt");
  QTextStream p3(&open3);
  open3.open(QIODevice::WriteOnly | QIODevice::Text);
cout<<"Початковий масив"<<endl;
for (int *i = Ar; *i != size; *i++)
{
    *i=rand() %100;
    QTableWidgetItem *I = new QTableWidgetItem(tr("%1").arg(*i));
    I->setTextAlignment(Qt::AlignCenter);
    ui->tableWidget->setItem(0,j, I);
    p3<<*i<<'\t';
    cout<<*i<<"\t";
}
cout << endl<<endl;
open3.close();
QFile open1 ("F:\\mas.txt");
         QTextStream p1(&open1);
         open1.open(QIODevice::ReadOnly | QIODevice::Text);
         ui->tableWidget->setColumnCount(10);
         ui->tableWidget->setRowCount(1);
for(int j = 0; j != size;j++)
{
     m = j;
     while(m != j+ 10)
     {
         sum += *(Ar + m);
         m++;
     }
    average = (double)sum / 10;
 
    if(average > max_average)
    max_average = average;
 
 
    sum = 0;
    if(j+10 >= size) break;
 
}
for(int j = 0; j != size; j++)
{
 
     m = j;
     while(m != j+ 10)
     {
         sum += *(Ar + m);
         m++;
     }
    average = (double)sum / 10;
 
 
    if(max_average == average)
        {
            m = j;
            while(m != j+10){
            cout << *(Ar + m) << "\t";
            m++;
            }
        }
 
    sum = 0;
    if(j+10 >= size) break;
}
open3.close();
}
0
Ev_Hyper
Заблокирован
07.04.2014, 18:25 5
Vadim_0107, если вам нужен графический интерфейс для лабы, и не принципиально на чем писать - то на C# это реализовать проще.
Qt 4 или 5?
И прикрепить текстовый файл, чтобы было понятно о чем речь.
Вечером попробую переделать.
0
Vadim_0107
1 / 1 / 1
Регистрация: 04.01.2014
Сообщений: 30
07.04.2014, 19:38  [ТС] 6
Ev_Hyper, Нужно сделать именно в QT Creator 5.
А текстовый файл должен создаваться программой и потом в него записать начальный массив рандомного размера и считать .
А само задание для QT такое: после нажатия на рushButton начальный массив выводился на tableWidget,а результат на tableWidget_2

И если можно то пожалуйста с комментариями для тех строк где есть синтаксис QT
0
Ev_Hyper
Заблокирован
08.04.2014, 09:50 7
Vadim_0107, я так и не понял, что должно получиться в итоге(среднее "по столбцам" в одномерном массиве?). И объясните строку:

C++
1
Ar=(int  *)malloc(size*sizeof(int));
У меня Qt 4 + VS2010, думаю передедать под 5 будет не очень сложно.
0
Чистый
Автор FAQ
2714 / 1410 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
08.04.2014, 10:30 8
Ev_Hyper, это выделенеи памяти
1
Vadim_0107
1 / 1 / 1
Регистрация: 04.01.2014
Сообщений: 30
08.04.2014, 14:23  [ТС] 9
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
я так и не понял, что должно получиться в итоге
Должно вывести непрерывный участок из 10 элементов который имеет найбольшее среднее значение.
0
Ev_Hyper
Заблокирован
08.04.2014, 14:45 10
Vadim_0107, Еще 1 уточняющий вопрос, ровно из 10 элементов или из ближайщего большего квадрата?
0
Vadim_0107
1 / 1 / 1
Регистрация: 04.01.2014
Сообщений: 30
08.04.2014, 17:10  [ТС] 11
Ev_Hyper, Да ровно из 10 элементов которые стоят подряд.
0
Ev_Hyper
Заблокирован
09.04.2014, 09:21 12
Лучший ответ Сообщение было отмечено Vadim_0107 как решение

Решение

Vadim_0107, код формы (создавал в дизайнере)
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#ifndef OWQHP916_H
#define OWQHP916_H
 
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QTableWidget>
#include <QtGui/QWidget>
 
QT_BEGIN_NAMESPACE
 
class Ui_owClass
{
public:
    QTableWidget *tableWidget;
    QTableWidget *tableWidget_2;
    QPushButton *pushButton;
    QLabel *label;
 
    void setupUi(QWidget *owClass)
    {
        if (owClass->objectName().isEmpty())
            owClass->setObjectName(QString::fromUtf8("owClass"));
        owClass->resize(793, 575);
        tableWidget = new QTableWidget(owClass);
        tableWidget->setObjectName(QString::fromUtf8("tableWidget"));
        tableWidget->setGeometry(QRect(10, 40, 771, 431));
        tableWidget_2 = new QTableWidget(owClass);
        tableWidget_2->setObjectName(QString::fromUtf8("tableWidget_2"));
        tableWidget_2->setGeometry(QRect(10, 480, 771, 91));
        pushButton = new QPushButton(owClass);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(10, 10, 75, 23));
        label = new QLabel(owClass);
        label->setObjectName(QString::fromUtf8("label"));
        label->setGeometry(QRect(100, 10, 46, 13));
 
        retranslateUi(owClass);
 
        QMetaObject::connectSlotsByName(owClass);
    } // setupUi
 
    void retranslateUi(QWidget *owClass)
    {
        owClass->setWindowTitle(QApplication::translate("owClass", "ow", 0, QApplication::UnicodeUTF8));
        pushButton->setText(QApplication::translate("owClass", "\320\237\321\203\321\201\320\272", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("owClass", "TextLabel", 0, QApplication::UnicodeUTF8));
    } // retranslateUi
 
};
 
namespace Ui {
    class owClass: public Ui_owClass {};
} // namespace Ui
QT_END_NAMESPACE
#endif // OWQHP916_H

ow_h:
Кликните здесь для просмотра всего текста

C++ (Qt)
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
#ifndef OW_H
#define OW_H
 
#include <QtGui>
#include "ui_ow.h"
using namespace std;
class ow : public QWidget
{
    Q_OBJECT
 
public:
    ow(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~ow();
 
private:
    Ui::owClass ui;
    int size;
    QList<QString> * Number;
    void generate();
    void write();
    public slots:
        void buttonClick();
 
};
 
#endif // OW_H

ow.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
ow.cpp:
#include "ow.h"
#include <ctime>
ow::ow(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);
    srand(time(NULL));
    size = rand()%151+50;
    //устанавливаем в метку количество чисел
    ui.label->setText(QString::number(size));
    //вызываем функцию записи в файл
    write();
    //выводим в первый тейблвиджет
    generate();
    //соединяем кнопку и слот buttonClick()
    connect(ui.pushButton,SIGNAL(clicked()),SLOT(buttonClick()));
}
 
ow::~ow()
{
 
}
void ow::generate()
{
    QString number;
    int k = size/10;
    if(size%10!=0)k++;
    ui.tableWidget->setColumnCount(10);
    ui.tableWidget->setRowCount(k);
    int count=0;
    // путь к файлу
    QFile file("F://1.txt");
    //открываем только для чтения
    if(file.open(QFile::ReadOnly)){ 
    QTextStream stream(&file);
    //считываем файл целиком
    number = stream.readAll();
    }
    file.close();
    //создаем List из значений, разделенных пробелом
    Number = new QList<QString>(number.split(' '));
    //пробегаем в цикле по элементам
    for(int i=0;i<k;i++){
        for(int j=0;j<10;j++){
            //создаем ячейку, в которую заносим число из списка
            QTableWidgetItem *newItem = new QTableWidgetItem(Number->at(count));
            //устанавливаем ей
            ui.tableWidget->setItem(i,j,newItem);
            count++;
            //если достигли конца - return
            if(count>=size)return;
        }
 
    }
}
void ow::write()
{
    int k = size/10;
    if(size%10!=0)k++;
 
    QFile file("F://1.txt");
    //открыли файл для чтения
 
    if(file.open(QFile::WriteOnly)){ 
    QTextStream stream(&file); 
        for(int i=0;i<k;i++){
        for(int j=0;j<10;j++){
            //записали сгенерированное число + пробел
            stream<<QString::number(rand()%100)+" ";
        }
        //stream<<"\r\n";
        }
    file.close();
    }
}
void ow::buttonClick()
{
    ui.tableWidget_2->setColumnCount(10);
    ui.tableWidget_2->setRowCount(1);
    double max_average = 0,average;
    int sum = 0, m;
    for(int j = 0; j != size;j++)
    {
         m = j;
         while(m != j+ 10)
         {
             sum+= Number->at(m).toInt();
             m++;
         }
        average = (double)sum / 10;
 
        if(average > max_average)
        max_average = average;
 
        sum = 0;
        if(j+10 >= size) break;
 
    }
    for(int j = 0; j != size; j++)
    {
 
         m = j;
         while(m != j+ 10)
         {
             //sum += *(Ar + m);
             sum+= Number->at(m).toInt();
             m++;
         }
        average = (double)sum / 10;
 
 
        if(max_average == average)
            {
                int count= 0;
                m = j;
                while(m != j+10){
                QTableWidgetItem *newItem = new QTableWidgetItem(Number->at(m));
                ui.tableWidget_2->setItem(0,count,newItem);
                m++;
                count++;
                }
            }
 
        sum = 0;
        if(j+10 >= size) break;
    }
    
}

Не забудьте проверить путь к файлу.
1
Ev_Hyper
Заблокирован
09.04.2014, 09:27 13
Забыл добавить, проверка правильного "перевода":
Код
size=59
Початковий масив
95 7 87 79 85 98 48 65 4 7 3 17 20 60 61 9 64 52 49 62 28 44 79 4 66 41 93 64 34
 23 75 88 11 94 23 77 45 87 50 85 76 73 82 68 4 72 41 64 31 85 16 42 85 40 63 62
 58 71 68

94 23 77 45 87 50 85 76 73 82 Для продолжения нажмите любую клавишу . . .
0
Миниатюры
Считать данные из файла в массив и обработать их  
Vadim_0107
1 / 1 / 1
Регистрация: 04.01.2014
Сообщений: 30
09.04.2014, 14:21  [ТС] 14
Ev_Hyper, Огромное вам спасибо!
Буду теперь розбиратся что к чему.
0
shurazab
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 8
17.03.2017, 12:05 15
Vadim_0107, не могу скомпилировать проект, все скопировал из исходников
0
Миниатюры
Считать данные из файла в массив и обработать их  
17.03.2017, 12:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2017, 12:05

Qt не могу корректно считать данные
Здравствуйте. Считываю текст из файла построчно следующим образом: if...

Считать данные из файла, обработать и записать в другой
Здравствуйте! Срочно нужна помощь. Необходимо написать программу, которая...

Считать данные из txt файла, обработать и вывести в Chart
Здравствуйте Помогите советом. Задача: считать из двух текстовых файлов...


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

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

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