Автор Тема: c++ Задача с файлами и массивами  (Прочитано 6530 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Педусаар

  • Пользователь
  • **
  • Сообщений: 64
    • Просмотр профиля
c++ Задача с файлами и массивами
« : 30 Апреля 2010, 20:34:55 »
Вот такая задача встала поперек горла:

Требования к программе

Общий алгоритм работы программы:
•   Чтение входного файла.
•   Поочередное преобразование строки чисел в «массив». Определенный вид «массива» жестко задан в индивидуальном задании.
•   Сортировка каждого «массива». Метод сортировки жестко задан в индивидуальном задании (буфер или циклический буфер).
•   Запись отсортированного «массива» в строку выходного файла.

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

Требования к входным и выходным данным
Выходные данные. По окончании работы программа выводит 3 беззнаковых целых числа, разделенных пробелами и перевод строки (std::endl или “\n”). Никакой другой текстовой или числовой информации, или единиц измерения не выводится.

Команда запуска программы:
arraysort.exe имя_входного_файла имя_выходного_файла [-t]

Программа принимает в качестве аргументов командной строки:
•   имя_входного_файла (обязательный параметр);
•   имя¬_выходного_файла (обязательный параметр);
•   -t (НЕобязательный флаг). Если в параметрах программы указан этот флаг, тогда сортировка «массива» не производится. Это нужно для тестирования производительности операций чтения из входного файла, парсинга строки в число, сериализации чисел в строку и записи строк в выходной файл.

Формат входного файла:
•   Данные записаны построчно и разделены между собой пробелом (т.е. csv-файл с разделителями).
•   Данных в строке может быть произвольное количество, но не более 100. Строка может быть длиннее 100 символов, в этом случае лишние символы отбрасываются.
•   Данные являются целыми числами со знаком типа int.
•   В строке могут быть некорректные данные: символы или слова, не являющиеся числами.
•   Количество строк произвольно. Может быть очень большим.

Формат выходного файла аналогичен формату входного файла, за исключением следующего:
•   В строке не может быть некорректных данных.
•   Если в строке входного файла не оказалось корректных данных, в выходной файл выводится пустая строка.
•   Номера строк входного и выходного файлов совпадают.
Требования к технологиям
Допустимые языки реализации: C++, Java, C#.
Требования к качеству
Обеспечить максимальное быстродействие программы (самое приоритетное условие) при минимальном расходе памяти (менее приоритетное условие).
Полезные обозначения:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: c++ Задача с файлами и массивами
« Ответ #1 : 02 Мая 2010, 11:21:38 »
И где ваши наработки?
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Педусаар

  • Пользователь
  • **
  • Сообщений: 64
    • Просмотр профиля
Re: c++ Задача с файлами и массивами
« Ответ #2 : 08 Мая 2010, 18:42:38 »
Для начала хотелось бы узнать, как реализовать считывание параметров из командной строки ?
Полезные обозначения:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: c++ Задача с файлами и массивами
« Ответ #3 : 08 Мая 2010, 19:51:53 »
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Педусаар

  • Пользователь
  • **
  • Сообщений: 64
    • Просмотр профиля
Re: c++ Задача с файлами и массивами
« Ответ #4 : 09 Июля 2010, 18:12:56 »
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <ctime>

using namespace std;

#define BMAX 100000
#define N 12*BMAX


void patience_sort(int *a,int n)
{
   vector<vector<int>> v;
   static const vector<int> vv;
   register int i,j;
   int t,k,s,top;

   v.push_back(vv);
   v[0].push_back(a[0]);

   //Greedy
   for(i=1;i<n;i++)
   {
      t = a;
      s = v.size();
      for(j=0;j<s;j++)
      {
         k = v[j].size()-1;
         if(v[j][k]>t)
         {
            v[j].push_back(t);
            break;
         }
      }

      if(j==s)
      {
         v.push_back(vv);
         v[j].push_back(t);
      }
   }

   //Built sorted array
   top = 0;
   do
   {
      s = v.size();
      for(i=0;i<s;i++)
         if(!v.empty())
         {
            k = i;
            break;
         }
      for(i=0;i<s;i++)
         if(!v.empty() && v.back()<v[k].back() ) k = i;

      a[top++] = v[k].back();
      v[k].pop_back();
   } while(top<n);

   
}


int InSortOut(char *finn,char *foutn,bool t)
{
   ifstream fin(finn,ios::in);
   ofstream fout(foutn,ios::out);

   if(!fin || !fout) return 1;


   register int i;
   int buff[BMAX];
   int top;

   long ms_time;
   int str_count = 0;
   int avg_len = 0;

   

   char *p,*pp;
   char *cbuff = new char[N];

   ms_time = clock();
 

   while(!fin.eof())
   {
      fin.getline(cbuff,N);

      top = 0;
      p = strtok(cbuff," ");
      while(p)
      {
         buff[top++] = strtol(p,&pp,10);
         if(*pp!='\0')
         {
            top = 0;
            break;
         }
         p = strtok(NULL," ");
      }

      if(top)
      {
         str_count++;
         avg_len += top;

         //if(!t)
         patience_sort(buff,top);
         for(i=0;i<top;i++) fout << buff << " ";
      }
      fout << endl;
   }

   ms_time = clock() - ms_time;
   delete []cbuff;
   cout << ms_time << " " << avg_len/str_count << " " << str_count << endl;
   
   return 0;
}

int __cdecl main(int argc, char **argv)
{
   //if(argc<3) return 1;
   //return InSortOut(argv[1],argv[2], argc == 4);
   return InSortOut("file.in","file.out", argc == 4);

Кто сможет найти ошибки ?
Пример ошибочного входного файла:
3 4 5 --6 ---7 -- - --- 8 19 -20 -54 5 43 232 37374 95
23232 5 5 4 3 23 9 -54 -99 -101 -54 43434
43434 3 32 74575 7575749 8697686363 -4
654 43453 9875 -5 -1000 кукук 212 77774 -7
3939 6784 -8 76464 -9
рарарар 342343 323 -65 8757 8884
гклоиорваи 43434
н784н 232 -5 894   4
4    45        4 4     4
Полезные обозначения:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

 

Олимпиадная задача "Дипломы"

Автор DrXakep

Ответов: 0
Просмотров: 5838
Последний ответ 30 Декабря 2012, 14:09:40
от DrXakep
Задача паскаль. Составить программу для построения таблицы значений

Автор Rydon

Ответов: 1
Просмотров: 8254
Последний ответ 21 Декабря 2009, 15:49:38
от Rydon
Срочно надо написать курсовую по информатике. Задача на языке VBA.

Автор lana

Ответов: 1
Просмотров: 5635
Последний ответ 12 Сентября 2010, 19:29:18
от InfStudent
Паскаль(задача). Составить программу определения показания часов

Автор Fairmont

Ответов: 0
Просмотров: 6265
Последний ответ 24 Февраля 2011, 21:25:22
от Fairmont
Задача в Turbo С. Написать программу построения одномерного массива

Автор deamond

Ответов: 1
Просмотров: 3669
Последний ответ 21 Декабря 2011, 12:04:34
от Hellko