Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2008, 21:04   #1
Jenka156
 
Аватар для Jenka156
 
Регистрация: 20.12.2008
Сообщений: 7
Вопрос Работа с файлами. Пожалуйста помогите!)

Здравствуйте! тут такая проблема. никогда еще не работала с файлами на C++ и не могу справиться с заданием. Помогите пожалуйста кто может!)))

Задание такое: нужно реализовать алгоритм сортировки методом пузырька и упорядочить последовательность чисел из файла (в файле 500 чисел неупорядоченные, каждое число начинается с новой строки). при этом также нужно установить таймер, который будет определять время работы функции, которая упорядочивает числа. Результат можно просто вывести в консоль или записать в файл. здесь как удобно будет.

Вот программа. что куда надо в ней вставить???
Код:

#include <clx.h>
#pragma hdrstop
#include <iostream.h>

#pragma argsused
int main(int argc, char* argv[])
{
      int n, c, b;
      cout<<"Kollichestvo chisel=";
      cin>>n;
      int* x=new int[n];
      for (int i=0; i<n; i++) 
             {cout<<"x["<<i<<"]="; cin>>x[i];}
      b=n;
      while(b>1)
     {
         for(int i=0; i<b-1; i++)
            { 
                   if(x[i]>x[i+1])
                           {
                             c=x[i];
                             x[i]=x[i+1];
                             x[i+1]=c;
                           }         
             ;}
           b--; 
      }
         for (int i=0; i<n; i++) 
                  {cout<<x[i]<<"; ";}
         cin>>c;
         return 0;
}

Последний раз редактировалось Jenka156; 20.12.2008 в 21:08.
Jenka156 вне форума Ответить с цитированием
Старый 21.12.2008, 20:03   #2
Jenka156
 
Аватар для Jenka156
 
Регистрация: 20.12.2008
Сообщений: 7
По умолчанию

вроде разобралась с чтением из файла. Ошибок нет, но выдает ошибку при компиляции про какой то доступ? что неправильно в коде??? и какой функцией можно прочесть в массив?

Код:

#include <clx.h>
#pragma hdrstop
#include <iostream.h>

#pragma argsused
int main()
{
int letter;
   FILE *file;
   fopen("number.txt", "r");

while((letter = fgetc(file)) != EOF)
printf("%c", letter);
fclose(file);
}
Jenka156 вне форума Ответить с цитированием
Старый 21.12.2008, 20:49   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Я бы вам рекомендовал использовать файловые потоки. Типа ifstream для ввода из файла, и ofstream - для вывода в файл.
Работа с ними - такая же как с cin и cout.

ПыСы: подключите fstream.h. И еще using namespace std не забудьте.
MaTBeu вне форума Ответить с цитированием
Старый 22.12.2008, 09:20   #4
Jenka156
 
Аватар для Jenka156
 
Регистрация: 20.12.2008
Сообщений: 7
По умолчанию

ой! спасибо большое!!! все получилось!
только вот все равно не могу понять, у меня переменной ch присваивается значение всего файла: 285 109 27 207.

Код:
int ch, c;
   ifstream in;
   ofstream out;
   in.open("number.txt");
   in.get(ch);

   while (!in.eof())
   {
   cout<<ch;
   in.get(ch);
   }
   in.close();
    cin>>c;
а как можно эти числа записать как различные элементы массива типа int чтоб двльше выполнять численные операции с ними ( то есть чтоб было x[1]=285 x[2]=109 x[3]=27 и тд? я пробовала функцией strtok(), но появляется какая то ошибка все время

а еще один небольшой вопрос. мне нужно измерить время работы функции упорядочивания, тоесть сколько времени она будет упорядочивать последовательность из 500 чисел. преподаватель скеазал про какой то таймер, но я ничего не могу найти в интернете. Вы не скажете чем можно измерит время выполнения функции??

Последний раз редактировалось Jenka156; 22.12.2008 в 09:38.
Jenka156 вне форума Ответить с цитированием
Старый 22.12.2008, 10:35   #5
ActioNs
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 38
По умолчанию

насчет разбиения строки на массив значений так сразу не скажу, код надо писать. а насчет измерения производ:

int t = GetTickCount();

что то проиходит....

выводим (GetTickCount() - t) - получаем время выполнения кода в милисекундах
ActioNs вне форума Ответить с цитированием
Старый 22.12.2008, 15:43   #6
Jenka156
 
Аватар для Jenka156
 
Регистрация: 20.12.2008
Сообщений: 7
По умолчанию

спасибо)

но все таки может кто нибудь подскажет??? я вот попыталась сделать преобразованием в int но выводит какой то странный набор чисел и не выводит самого последнего числа почему то...

Код:
char ch[65], c;
   ifstream in;
   in.open("number.txt");
   int x[100];
   int i=0;
   in.getline(ch, sizeof(ch));
  while (!in.eof())
   {
         x[i]=(int)ch;
         cout<<"x["<<i<<"]="<<x[i]<<endl;
         in.getline(ch, sizeof(ch));
         i++;
   }

  in.close();
В результате по идее должен вывести:
x[0]=285
x[1]=109
x[2]=27
x[3]=207
а выводит:
x[0]=1244648
x[1]=1244648
x[2]=1244648

В чем ошибка???
Jenka156 вне форума Ответить с цитированием
Старый 22.12.2008, 15:45   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Попробуйте
Код:
in>>ch;
MaTBeu вне форума Ответить с цитированием
Старый 22.12.2008, 17:29   #8
Jenka156
 
Аватар для Jenka156
 
Регистрация: 20.12.2008
Сообщений: 7
По умолчанию

а вот мне еще подсказали про использование GetTickCount();
Полный код программы такой:
Код:
//---------------------------------------------------------------------------

#include <clx.h>
#pragma hdrstop
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <windows.h>


//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

template<class T>
void quickSortR(T* a, long N) {
  long i = 0, j = N;
  T temp, p;
  p = a[ N>>1 ];
  do
  {
        while ( a[i] < p ) i++;
        while ( a[j] > p ) j--;
        if (i <= j)
        {
                temp = a[i]; a[i] = a[j]; a[j] = temp;
                i++; j--;
        }
  }
  while ( i<=j );
  if ( j > 0 ) quickSortR(a, j);
  if ( N > i ) quickSortR(a+i, N-i);
}


int main()
{
        char ch[65], c;
   int count;
   ifstream in;
   in.open("number.txt");
   int A[2015];
   int i=0;
   in.getline(ch, sizeof(ch));
  while (!in.eof())
   {
         A[i]=atoi(ch);
         in.getline(ch, sizeof(ch));
         i++;
         count=i;

   }
  in.close();
  int e=count-1;
  int start=GetTickCount();   //ВКЛЮЧЕНИЕ ТАЙМЕРА
  quickSortR(A,e);              //ПРОЦЕСС СОРТИРОВКИ ПОСЛЕДОВАТЕЛЬНОСТИ
  int end=GetTickCount();   //ВЫКЛЮЧЕНИЕ ТАЙМЕРА
  int res=end-start;
  for (int i=0; i<count; i++) {cout<<A[i]<<"; ";}
  cout<<" "<<endl<<"Work time="<<res;
  cin>>c;
}


//---------------------------------------------------------------------------
получается что я измеряю время работы функции сортировки массива из 2015 элементов и мне выводится, что оно равно 0. разве такое может быть?

Последний раз редактировалось Jenka156; 22.12.2008 в 19:35.
Jenka156 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами Maksi Фриланс 4 07.06.2008 11:38
Delphi Работа с файлами. Помогите пожалуйста отредактировать программу)) katia230990 Помощь студентам 10 03.06.2008 17:14
Работа с файлами Zenit10 Помощь студентам 2 19.01.2008 09:59
Работа с файлами Dim@ Помощь студентам 1 26.12.2007 22:43
Работа с файлами ShVad Общие вопросы Delphi 4 03.02.2007 10:43