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

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

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

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

24.03.2013, 03:04. Просмотров 800. Ответов 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;
    }
}
Посоветуйте, как сделать так что бы не использовать массив? И вообще по коду, что можно было сделать лучше?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 03:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) (C++):

Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла. - C++
Задачу нужно решить в Borland C++ 3.11 Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла...

Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла - C++
Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла (серией называется набор последова- ...

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

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

Дан файл целых чисел - C++
Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в обратном порядке).

Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них, которые имеют четные млад - C++
Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них, которые имеют четные младшие цифры. Пример: 2462...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 04:13 #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);
}
1
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
24.03.2013, 04:19  [ТС] #3
alsav22,
Мне нужно было узнать количество чисел в файле, а не количество символов.
tellg() возвращает не размер в байтах, она возвращает текущую позицию указателя в файле.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 04:37 #4
Цитата Сообщение от UnsKneD Посмотреть сообщение
tellg() возвращает не размер в байтах, она возвращает текущую позицию указателя в файле.
Если передвинуть курсор из начала файла в конец, то позиция курсора (которую вернёт tellg()) как раз и будет равна количеству байтов в файле.

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

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

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

Не по теме:

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

0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2013, 18:55 #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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 18:55
Привет! Вот еще темы с ответами:

Дан текстовый файл, в котором записана последовательность целых чисел. Записать в новый файл только четные из них - C++
Дан текстовый файл, в котором записана последовательность целых чисел. Записать в новый файл только четные из них. Помогите пожалуста!!! ...

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

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

Дан одномерный массив целых чисел напечатать все четные эелементы (посмотрете код) - C++
Дан одномерный массив целых чисел напечатать все четные эелементы (посмотрете код) Скажите, что я не правильно тут сделал #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.03.2013, 18:55
Ответ Создать тему
Опции темы

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