Проблема С Программой

  • Автор темы star13b
  • Дата начала
S

star13b

Гость
#1
Можете проверить мою программу на наличие ошибок. Вот текст задания:Сформировать массив из целых псевдослучайных чисел в диапазоне
[−100,100] (длина массива задаётся во входном файле). Сформировать
второй массив, исключив из первого повторяющиеся элементы.

Вот моя программа:
#include <QtCore>

QVector<int> fill (int n)
{
QVector<int> m;
for(int i=0;i<n;i++){
m<<(-100+rand()%201);
}
return m;
}
void print(QVector<int>m){
QTextStream cout(stdout);
for(int i=0;i<m.count();i++)
cout<<m<<" ";
cout<<endl;}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream cin (stdin);
QTextStream cout(stdout);
QFile input_file("C:/input.txt");
if (!input_file.open (QIODevice::ReadOnly | QIODevice:: Text)){
cout << "Error opening file input" << endl;
while(1); }
QTextStream fin (&input_file);
int n;
fin >> n;
QVector<int> A;
A=fill(n);
print(A);
QFile output_file("C:/output.txt");
if(!output_file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate)){
cout<<"Error_output_file"<<endl;
::exit(-1);}
QTextStream fout(&output_file);
foreach(int k, A)
if(A.indexOf(k)!=A.lastIndexOf(k))
A.remove(A.lastIndexOf(k));
cout<<"noviy massiv = "<<endl;
for (int i=0;i<10;i++){
cout<<A<<" "<<flush;
fout<<A<<" "<<flush;}
input_file.close();
return a.exec();
}
 
R

rrrFer

Гость
#2
Проблема С Программой
что за проблема?

Я по коду вижу множество ляпов:
ГСЧ не инициализирован
функция fill возвращает вектор по значению, он будет скопирован.
функция print принимает вектор по значению, также, будет вызываться конструктор копирования.
for(int i=0;i<m.count();i++) функция count вызывается на каждой итерации, но возвращает одно итоже значение
что-то ужасное с форматированием кода - то ты ставишь открывающую фигурную скобку на той же строке, то переносишь на новую.
output_file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate) закрывать кто будет?

Код:
foreach(int k, A)
if(A.indexOf(k)!=A.lastIndexOf(k))
A.remove(A.lastIndexOf(k));
не уверен что это будет работать, foreach Qt создает копию контейнера перед началом работы, я не уверен что с remove все будет нормально.

если у тебя будет вектор 1 2 1 1 - то foreach выполнит 4 итерации, независимо от того вызовешь ты remove в нутри или нет (потому что это цикл по копии коллекции), но что он будет вытворять внутри уже на второй итерации я не знаю, что там будет с indexOf ?

Добавлено: ну и я не сильно вглядывался в код, проблема не описана, поэтому лишь просмотрел и описал что резко бросилось в глаза.

Добавлено: for (int i=0;i<10;i++){ // магические числа? )