Форум программистов, компьютерный форум CyberForum.ru

Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) - C++

Восстановить пароль Регистрация
 
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 03:04     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #1
Дан файл целых чисел с элементами A(i), i = 0, ..., N–1 (N — размер файла). Заменить исходное расположение его элементов на следующее: A(0), A(N–1), A(1), A(N–2), A(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
#include "stdafx.h"
#include <iostream>
#include <fstream>
using std::cout;
using std::endl;
using std::fstream;
using std::ios_base;
 
int getsize( fstream &FILE ){
    FILE.seekg(0, ios_base::beg);
    int size = 0;   
    while( !FILE.eof() ){
        int temp;
        FILE >> temp;
        size++;
    }
    FILE.seekg(0, ios_base::beg);
return size;
}
 
void F_to_A( fstream &FILE, int tmpArray[]){
    FILE.seekg(0, ios_base::beg);
    int i = 0;
    while( !FILE.eof() ){ FILE >> tmpArray[i++]; 
    }
    FILE.seekg(0, ios_base::beg);
}
 
void main( void )
{
    fstream inputFile("F1.txt", ios_base::in), 
            outputFile("F2.txt", ios_base::out);
    
    if( inputFile ){
        int size = getsize( inputFile );
        int *tmpArray = new int[size];
        F_to_A(inputFile, tmpArray);
        inputFile.close();
 
        int i = 0; 
        int j = size-1;
 
        while( i < j ) { cout << tmpArray[i++] << " " << tmpArray[j--] << " "; }
        cout << endl;
        delete tmpArray;
    }
}
Посоветуйте, как сделать так что бы не использовать массив? И вообще по коду, что можно было сделать лучше?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 03:04     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код)
Посмотрите здесь:

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке C++
C++ Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла.
Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла C++
C++ дан файл целых чисел, содержащий четное количество элементов. удалить из файла вторую половину элементов
C++ Дан текстовый файл, в котором записана последовательность целых чисел. Записать в новый файл только четные из них
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 04:13     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #2
Это размер в байтах:
C++
1
2
3
4
5
6
int getsize( fstream &FILE ){
    FILE.seekg(0, ios::end);
    int size = FILE.tellg();   
    FILE.seekg(0);
    return size;
}
Если в int:
C++
1
2
3
4
5
6
int getsize( fstream &FILE ){
    FILE.seekg(0, ios::end);
    int size = FILE.tellg();   
    FILE.seekg(0);
    return size / sizeof(int);
}
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 04:19  [ТС]     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #3
alsav22,
Мне нужно было узнать количество чисел в файле, а не количество символов.
tellg() возвращает не размер в байтах, она возвращает текущую позицию указателя в файле.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 04:37     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #4
Цитата Сообщение от UnsKneD Посмотреть сообщение
tellg() возвращает не размер в байтах, она возвращает текущую позицию указателя в файле.
Если передвинуть курсор из начала файла в конец, то позиция курсора (которую вернёт tellg()) как раз и будет равна количеству байтов в файле.

Добавлено через 1 минуту
Цитата Сообщение от UnsKneD Посмотреть сообщение
Мне нужно было узнать количество чисел в файле, а не количество символов.
Второй код.

Добавлено через 4 минуты
Все эти подсчёты ещё зависят от того, как числа в файле расположены. Из задания это не понятно. То ли это бинарная запись int, то ли текстовая.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 04:44  [ТС]     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #5
alsav22, в файле записаны 1 2 3 4 5
tellg() вернёт 9, 9/4 не равно 5!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 04:53     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #6
Это понятно, если известно, что числа именно так записаны...
Цитата Сообщение от UnsKneD Посмотреть сообщение
(N — размер файла)
Размер в чём?
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 04:55  [ТС]     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #7
alsav22, Имелось ввиду количество чисел.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 04:59     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #8
Если числа: 1 2 3 4 5, то размер файла 9 (байт), последнее число A(8) или А(4)?

Добавлено через 2 минуты
Цитата Сообщение от UnsKneD Посмотреть сообщение
Имелось ввиду количество чисел
Хорошо бы это "имелось ввиду" ещё и в задании уточнять?
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 05:01  [ТС]     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #9
alsav22, а пробелы? я ещё раз говорю, tellp() вернёт позицию указателя в файле.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 05:05     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #10
Что tellg() возвращает я знаю. Просто в задании нужно было написать: " ...где N - количество чисел в файле..."
UnsKneD
24.03.2013, 05:29  [ТС]
  #11

Не по теме:

alsav22, скажу по секрету, задание составлял не я...
И даже не вчитался так вдумчиво, как ты.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 18:55     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код)
Еще ссылки по теме:

C++ Дан файл целых чисел. айти среди этих чисел те, что больше за среднее арифметическое суммы всех элементов
C++ Дан файл целых чисел
Дан файл целых чисел которые упорядочены по убыванию. Среди этих чисел найти те что больше среднего арифметического суммы всех элементов C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 18:55     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #12

Не по теме:

Цитата Сообщение от UnsKneD Посмотреть сообщение

Не по теме:

alsav22, скажу по секрету, задание составлял не я...
И даже не вчитался так вдумчиво, как ты.

Верю. Значит моё замечание составителю задания.



Добавлено через 3 часа 55 минут
Если с вектором сделать. Способ вывода изменён. При твоём, при нечётном количестве чисел, непарное число не выводится.
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
#include <iostream>
#include <vector>
#include <cstdlib>
#include <iostream>
#include <fstream>
 
using std::vector;
using std::cout;
using std::endl;
using std::fstream;
using std::ostream;
using std::ios_base;
 
 
inline void F_to_A(fstream &FILE, vector <int> &tmpArray)
{
    int i;
    while( !FILE.eof() )
    { 
        FILE >> i;
        tmpArray.push_back(i); 
    }
    
    FILE.close();
}
 
inline void outtmpArray(ostream &out, const vector <int> &tmpArray)
{
    int i = 0; 
    int j = tmpArray.size() - 1;
 
    while( i <= j ) 
    { 
        out << tmpArray[i];
        if (i != j) out << ' ' << tmpArray[j];
        if ((j != i) && ((j - i) != 1)) out << ' '; // чтобы не было лишнего пробела при записи в файл
        ++i;
        --j;
    }
}
 
 
int main()
{
    fstream inputFile ("1.txt", ios_base::in ), 
            outputFile("2.txt", ios_base::out);
    
    if (inputFile)
    {
        vector <int> tmpArray;
        
        F_to_A(inputFile, tmpArray);
        
        outtmpArray(cout, tmpArray);
        
        outtmpArray(outputFile, tmpArray);
        
        outputFile.close();
    }
    
    cout << endl;
    system("pause");
    return 0;
}
Yandex
Объявления
24.03.2013, 18:55     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код)
Ответ Создать тему
Опции темы

Текущее время: 23:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru