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

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

Войти
Регистрация
Восстановить пароль
 
_д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 35
#1

файл целых чисел - C++

21.08.2011, 19:31. Просмотров 910. Ответов 12
Метки нет (Все метки)

Дан файл целых чисел. Нулевых компонентов файле нет. Число отрицательных компонентов равно числу полжительных. Преобразовать файл таким образом, чтобы сначала были положительные числа, а затем отрицательные. Порядок следования как положительных, так и отрицательных чисел сохранить.
Буду признателен если поможете сделать это на Си. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2011, 19:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос файл целых чисел (C++):

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

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

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

Записать в файл f N целых чисел, полученных с помощью генератора случайных чисел. - C++
Помогите пожалуйста с задачей. Записать в файл f N целых чисел, полученных с помощью генератора случайных чисел. Заполнить файл g...

Создать файл целых чисел содержащий сумму чисел из каждой строки исходной таблицы - C++
: Дан текстовый файл, содержащий таблицу из трех столбцов целых чисел. В начале и в конце каждой строки таблицы, а также между ее столбцами...

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

12
dr.curse
388 / 344 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
21.08.2011, 19:42 #2
должно работать
C++
1
2
3
4
for (int i=0;i<n;i++)
    if (a[i]>0) cout << a[i] << endl;
for (int i=0;i<n;i++)
    if (a[i]<0) cout << a[i] << endl;
а массив чисел а n размер массива.
1
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 20:51 #3
Цитата Сообщение от _д_м_и_т_р_и_й_ Посмотреть сообщение
Дан файл целых чисел...
А вы не бизнесом случаем занимаетесь? Мы вам решаем, а вы потом все сплавляете. Ну как так, где ваши наработки? А мы поможем
1
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.08.2011, 21:03 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>
bool is_positive( int n ) { return n > 0; }
bool is_negative( int n ) { return n < 0; }
int main(){
    std::fstream file("input.txt", std::ios::in);
    std::vector<int> arr;
    std::copy( std::istream_iterator<int> (file), std::istream_iterator<int> (), std::back_inserter(arr) );
    file.close();
    file.open("input.txt", std::fstream::out);
    std::remove_copy_if(arr.begin(), arr.end(), std::ostream_iterator<int> (file, " "), is_positive);
    std::remove_copy_if(arr.begin(), arr.end(), std::ostream_iterator<int> (file, " "), is_negative);
}
Код
diagon@shadeware:~$ cat input.txt && ./a.out && cat input.txt
1 -2 3 -4 5 -6 7
-2 -4 -6 1 3 5 7 
diagon@shadeware:~$
Тьфу, у меня сначала отрицательные идут, затем положительные...
Поменяйте 14 и 15 строчки =)
Ай, на си же... Извиняюсь.
1
_д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 35
21.08.2011, 21:08  [ТС] #5
нет, я просто студент, с небольшей задолжностью по программированию, извините что обращаюсь, просто сроки поджимают, поэтому пока разбираюсь с одним, хотелось найти решение другого задания. еще раз приношу свои извинения за то что прошу вашей помощи.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.08.2011, 21:23 #6
На си как-то так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#define MAXSIZE 1024
int main(){
    int arr[MAXSIZE];
    FILE *file = fopen("input.txt", "r");
    int i = 0;
    while ( fscanf(file, "%d", &arr[i++] ) != EOF );
    file = fopen("input.txt", "w");
    for (int j = 0; j < i; ++j)
        if (arr[j] > 0)
            fprintf(file, "%d ", arr[j]);
    for (int j = 0; j < i; ++j)
        if (arr[j] < 0)
        fprintf(file, "%d ", arr[j]);
        
}
Bash
1
2
3
diagon@shadeware:~$ cat input.txt && ./a.out && cat input.txt
1 -2 3 -4 5 -6 7
1 3 5 7 -2 -4 -6
1
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 21:41 #7
вариант без массивов:

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
#include<stdio.h>
 
int Transform(char *fname)
{
   FILE *f, *g;
   char tmpname[300];
   int x;
   tmpnam(tmpname);
   rename(fname, tmpname);
   if ((f = fopen(tmpname, "rt")) == NULL)
      return 1;
   if ((g = fopen(fname, "wt")) == NULL)
      return 1;
   while (fscanf(f, "%d", &x) != EOF)
      if (x > 0)
         fprintf(g, "%d ", x);
   rewind(f);
   while (fscanf(f, "%d", &x) != EOF)
      if (x < 0)
         fprintf(g, "%d ", x);
  fclose(f);
  fclose(g);
  remove(tmpname);
  return 0;
}
 
int main()
{
   Transform("c:\\a.txt");
   return 0;
}
Добавлено через 4 минуты
Diagon, не забывайте потоки закрывать. Это ОЧЕНЬ важно!
1
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.08.2011, 21:46 #8
Цитата Сообщение от Olga_ Посмотреть сообщение
Diagon, не забывайте потоки закрывать. Это ОЧЕНЬ важно!
А зачем их закрывать в данном случае?
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 21:49 #9
Цитата Сообщение от diagon Посмотреть сообщение
А зачем их закрывать в данном случае?
Сложится у вас привычка и потом в других задачах вы вдруг обнаружите, что в файл не все записалось. Все же это признак хорошего тона, когда всегда потоки закрываются.
1
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
21.08.2011, 21:52 #10
Особо занудные могут ещё сказать, что потоки (Си) не только закрывать надо, но ещё и проверять значение, возвращаемое fclose(). Сам я этого никогда не делаю, но только тссс!
1
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2011, 21:55 #11
Вот моя реализация, я расширил в файле числа могут быть дабл, алгоритм оттестирован и полностью работоспособен!Выполнял в функциях Си
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
65
#include <windows.h>//malloc, realloc
#include <stdlib.h> //atof
#include <stdio.h>  //printf, FILE
#include <conio.h>  //getch
 
int main()
{
    long n,i;
    FILE * f;
    char * str,*buf;
    double * mass = (double *)malloc(sizeof(double));
    if(!(f = fopen("data.txt","rb+")))
        printf("ERROR ACCESS to READ [data.txt]\r\n");
    else
    {
        fseek(f,0,SEEK_END);
        n = ftell(f);
        fseek(f,0,SEEK_SET);
        if(!(str = (char *)malloc(n + 1)))
            printf("ERROR ALLOCATION MEMORY\r\n");
        else
        {
            fread(str,1,n,f);
            fclose(f);
            str[n] = '\0';
            n = 0;
            buf = strtok(str," ,\n");//Числа могут идти через пробел, запятую или с новой строки
            while(buf)
            {
                mass[n] = atof(buf);
                buf = strtok(NULL," ,\n");
                mass = (double *)realloc(
                    (void *)mass,
                    (1 + (n = n + 1))*sizeof(double));
            }
            free(str);//Чистим память
            if(!(f = fopen("data.txt","w")))
                printf("ERROR ACCESS to WRITE [data.txt]\r\n");
            else
            {
                for(i = 0; i < n; i++)
                {
                    if(mass[i] < 0)
                    {
                        fprintf(f,"%.3f ",mass[i]);//Точность вывода 3 знака после запятой
                        printf("%.3f ",mass[i]);
                    }
                }
                for(i = 0; i < n; i++)
                {
                    if(0 <= mass[i])
                    {
                        fprintf(f,"%.3f ",mass[i]);//Точность вывода 3 знака после запятой
                        printf("%.3f ",mass[i]);
                    }
                }
                printf("\r\nWRITING DATA IN [data.txt] DONE\r\n");
            }
        }
        fclose(f);
    }
    printf("Press any key to continue\r\n");
    getch();
    return 0;
}
1
Вложения
Тип файла: txt data.txt (15.5 Кб, 9 просмотров)
_д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 35
21.08.2011, 21:55  [ТС] #12
огромное спасибо за помощь, извините что отвлекаю своими заданиями. и еще вопрос, почему у вас статус "нарушитель"?
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 21:59 #13
Цитата Сообщение от grizlik78 Посмотреть сообщение
Особо занудные могут ещё сказать, что потоки (Си) не только закрывать надо, но ещё и проверять значение, возвращаемое fclose().
Пока это учебные задачи, а так, конечно, надо. Но, как минимум, без fclose() никуда (или fflush()).

Добавлено через 3 минуты
Цитата Сообщение от _д_м_и_т_р_и_й_ Посмотреть сообщение
огромное спасибо за помощь, извините что отвлекаю своими заданиями. и еще вопрос, почему у вас статус "нарушитель"?
Во первых, ничего страшного, еще бы вы это освоили, было бы здорово, в таком случае помочь одно удовольствие.
А "нарушитель" за желание помочь - ссылки на хорошие книги выкладывала, а, оказалось, так нельзя
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 21:59
Привет! Вот еще темы с ответами:

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

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

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

Задан файл из целых чисел со знаком, разделенных пробелом. Произвести чтение этих чисел в обратном порядке, не читая предыдущие. - C++
Есть множество задач анализа данных, записанных в файле, которые можно решить за &quot;линию&quot;, не обязательно, сохраняя данные в оперативную...


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

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

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