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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
#1

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

24.03.2013, 03:04. Просмотров 789. Ответов 11
Метки нет (Все метки)

Дан файл целых чисел с элементами 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++ Дан файл целых чисел
C++ Дан текстовый файл, в котором записана последовательность целых чисел. Записать в новый файл только четные из них
C++ Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них, которые имеют четные млад
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 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
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 04:19  [ТС]     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #3
alsav22,
Мне нужно было узнать количество чисел в файле, а не количество символов.
tellg() возвращает не размер в байтах, она возвращает текущую позицию указателя в файле.
alsav22
5416 / 4812 / 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
алкокодер
154 / 150 / 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 04:53     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #6
Это понятно, если известно, что числа именно так записаны...
Цитата Сообщение от UnsKneD Посмотреть сообщение
(N — размер файла)
Размер в чём?
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 04:55  [ТС]     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #7
alsav22, Имелось ввиду количество чисел.
alsav22
5416 / 4812 / 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
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 05:01  [ТС]     Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) #9
alsav22, а пробелы? я ещё раз говорю, tellp() вернёт позицию указателя в файле.
alsav22
5416 / 4812 / 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++ Дан одномерный массив целых чисел напечатать все четные эелементы (посмотрете код)
C++ Дан файл целых чисел. Удалить из него все элементы с четными номерами.
C++ Создать файл состоящий из n целых чисел (прокомментировать код)

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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 — размер файла) (упростить\улчшить код)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru