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

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

Восстановить пароль Регистрация
 
_д_м_и_т_р_и_й_
 Аватар для _д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 35
21.08.2011, 19:31     файл целых чисел #1
Дан файл целых чисел. Нулевых компонентов файле нет. Число отрицательных компонентов равно числу полжительных. Преобразовать файл таким образом, чтобы сначала были положительные числа, а затем отрицательные. Порядок следования как положительных, так и отрицательных чисел сохранить.
Буду признателен если поможете сделать это на Си. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2011, 19:31     файл целых чисел
Посмотрите здесь:

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке C++
C++ Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла.
C++ Составить программу, которая формирует файл целых чисел, получаемых с помощью датчика случайных чисел
C++ Записать в файл f N целых чисел, полученных с помощью генератора случайных чисел.
Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dr.curse
 Аватар для dr.curse
386 / 342 / 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 размер массива.
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 20:51     файл целых чисел #3
Цитата Сообщение от _д_м_и_т_р_и_й_ Посмотреть сообщение
Дан файл целых чисел...
А вы не бизнесом случаем занимаетесь? Мы вам решаем, а вы потом все сплавляете. Ну как так, где ваши наработки? А мы поможем
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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 строчки =)
Ай, на си же... Извиняюсь.
_д_м_и_т_р_и_й_
 Аватар для _д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 35
21.08.2011, 21:08  [ТС]     файл целых чисел #5
нет, я просто студент, с небольшей задолжностью по программированию, извините что обращаюсь, просто сроки поджимают, поэтому пока разбираюсь с одним, хотелось найти решение другого задания. еще раз приношу свои извинения за то что прошу вашей помощи.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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
Olga_
 Аватар для Olga_
840 / 182 / 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, не забывайте потоки закрывать. Это ОЧЕНЬ важно!
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.08.2011, 21:46     файл целых чисел #8
Цитата Сообщение от Olga_ Посмотреть сообщение
Diagon, не забывайте потоки закрывать. Это ОЧЕНЬ важно!
А зачем их закрывать в данном случае?
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 21:49     файл целых чисел #9
Цитата Сообщение от diagon Посмотреть сообщение
А зачем их закрывать в данном случае?
Сложится у вас привычка и потом в других задачах вы вдруг обнаружите, что в файл не все записалось. Все же это признак хорошего тона, когда всегда потоки закрываются.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
21.08.2011, 21:52     файл целых чисел #10
Особо занудные могут ещё сказать, что потоки (Си) не только закрывать надо, но ещё и проверять значение, возвращаемое fclose(). Сам я этого никогда не делаю, но только тссс!
-=ЮрА=-
Заблокирован
Автор 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;
}
Вложения
Тип файла: txt data.txt (15.5 Кб, 9 просмотров)
_д_м_и_т_р_и_й_
 Аватар для _д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 35
21.08.2011, 21:55  [ТС]     файл целых чисел #12
огромное спасибо за помощь, извините что отвлекаю своими заданиями. и еще вопрос, почему у вас статус "нарушитель"?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 21:59     файл целых чисел
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 21:59     файл целых чисел #13
Цитата Сообщение от grizlik78 Посмотреть сообщение
Особо занудные могут ещё сказать, что потоки (Си) не только закрывать надо, но ещё и проверять значение, возвращаемое fclose().
Пока это учебные задачи, а так, конечно, надо. Но, как минимум, без fclose() никуда (или fflush()).

Добавлено через 3 минуты
Цитата Сообщение от _д_м_и_т_р_и_й_ Посмотреть сообщение
огромное спасибо за помощь, извините что отвлекаю своими заданиями. и еще вопрос, почему у вас статус "нарушитель"?
Во первых, ничего страшного, еще бы вы это освоили, было бы здорово, в таком случае помочь одно удовольствие.
А "нарушитель" за желание помочь - ссылки на хорошие книги выкладывала, а, оказалось, так нельзя
Yandex
Объявления
21.08.2011, 21:59     файл целых чисел
Ответ Создать тему
Опции темы

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