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

Тема в разделе "Общие вопросы по С и С++", создана пользователем star13b, 28 ноя 2012.

  1. star13b

    star13b Гость

    Можете проверить мою программу на наличие ошибок. Вот текст задания:Сформировать массив из целых псевдослучайных чисел в диапазоне
    [−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();
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    что за проблема?

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

    Код (Text):
    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++){ // магические числа? )
     
Загрузка...
Похожие Темы - Проблема Программой
  1. AgniXRudra
    Ответов:
    2
    Просмотров:
    52
  2. Zloikaktus
    Ответов:
    0
    Просмотров:
    30
  3. c0de3r
    Ответов:
    5
    Просмотров:
    153
  4. DobermannTT
    Ответов:
    10
    Просмотров:
    159
  5. SoulPaladin
    Ответов:
    4
    Просмотров:
    144

Поделиться этой страницей