Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 46
1

Переписать файл, упорядочив числа

06.05.2012, 18:04. Показов 1553. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В данном задании необходимо осуществить обработку текстового файла (или файлов) согласно условию варианта. Имя файла передается в параметрах командной строки, а если оно не указано, то вводится с клавиатуры.


Файл содержит целые числа. Переписать файл, упорядочив числа по следующему принципу: сначала идут нулевые значения, затем положительные значения в порядке убывания, а затем отрицательные числа в порядке возрастания.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2012, 18:04
Ответы с готовыми решениями:

Переписать из одного файла в другой файл только четные числа
я сделал так,но у программы не получается переписать только четные числа,в чем ошибка,подскажите...

Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в заданном порядке
Дан файл F, содержащий целые числа. Файл F содержит столько же отрицательных чисел, сколько...

Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в заданном порядке
Заданный файл f, компоненты которого являются целыми числами. Ни один из компонентов файла не равна...

Переписать числа файла, идущие подряд, в другой файл, причем записаны они должны быть в столбец
У меня имеется текстовый файл с числами, записанными подряд. Нужно переписать эти числа в другой...

2
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
08.05.2012, 16:06 2
Лучший ответ Сообщение было отмечено roonmax как решение

Решение

Одно из возможных решений. Комментировать особо не буду. Функция cmp0pm осуществляет сравнение в соответствии с заданным критерием, то есть 0 меньше чем не ноль, положительные меньше отрицательных, числа с большим абсолютным значением меньше чем с меньшим (для одинакового знака). Сортировка с помощью стандартной функции qsort. Файл сначала полностью считывается в память, затем сортируется и записывается в новый файл.
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
66
#include <stdio.h>
#include <stdlib.h>
 
int cmp0pm(const void* p1, const void* p2)
{
    int a = *(int*)p1, b = *(int*)p2;
    if (a == b)
        return 0;
    if (b == 0)
        return 1;
    if (a == 0)
        return -1;
    if (b > 0)
    {
        if (a > b)
            return -1;
        else
            return 1;
    }
    if (a > 0 || a < b)
        return -1;
    return 1;
}
 
int main(void)
{
    FILE *in, *out;
    int capacity = 10;
    int i, v;
    int count = 0;
    int *array = (int*)malloc(capacity*sizeof(*array));
    
    in = fopen("input.txt", "r");
    if (NULL == in)
    {
        fprintf(stderr, "Error: Can't open file\n");
        return 1;
    }
 
    while (fscanf(in, "%d", &v) == 1)
    {
        if (++count > capacity)
        {
            capacity *= 1.5;
            array = (int*)realloc(array, capacity*sizeof(*array));
        }
        array[count - 1] = v;
    }
    fclose(in);
 
    out = fopen("output.txt", "w+");
    if (NULL == out)
    {
        fprintf(stderr, "Error: Can't create output file\n");
        return 1;
    }
 
    qsort(array, count, sizeof(*array), cmp0pm);
    for (i = 0; i < count; ++i)
        fprintf(out, "%d\n", array[i]);
 
    fclose(out);
    free(array);
 
    return 0;
}
1
4 / 4 / 3
Регистрация: 08.08.2013
Сообщений: 24
22.12.2013, 18:14 3
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 <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"RU");
    char *name=malloc(sizeof(char*));
    FILE *f = NULL;
    printf("Введите название файла: ");
    scanf("%s",name);
    f=fopen(name,"r");
    if(!f)
  {
        printf("Файл не найден!\n");
    return 0;
    }
  int *array=calloc(1,sizeof(int));
    int n=0, x;
    while(feof(f)==0)
  {
        fscanf(f,"%d",&array[n]);
        n++;
        array=realloc(array,(n+1)*sizeof(int));
    }
    fclose(f);
    for(int i=0; i<n; i++)
   for(int j=i; j<n; j++)
     if (array[i]<array[j])
     {
       x=array[i];
       array[i]=array[j];
       array[j]=x;
     }
    for(int i=0; i<n; i++)
    if(array[i]<0)
    {
      for(int j=i; i<n; i++)
        if(array[i]>array[j])
                {
          x=array[i];
          array[i]=array[j];
          array[j]=x;
        }
    }
  for(int i=0; i<n; i++)
    {
      if(array[i]==0)
        {
            for(int j=i; j!=0; j--)
          {
              array[j]=array[j-1];
          }
          array[0]=0;
        }
    }
    f=fopen(name,"w+");
  for(int i=0; i<n; i++)
    fprintf(f,"%d",array[i]);
    fclose(f);
    free(name);
    free(array);
    return 0;
}
0
22.12.2013, 18:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2013, 18:14
Помогаю со студенческими работами здесь

Создать символьный файл f1, переписать в файл f2 - буквы, а в файл f3 - цифры
Помогите, пожалуйста, написать программу по файлам. Задание звучит так: Создать символьный файл f1...

Переписать файл, упорядочив числа
В данном задании необходимо осуществить обработку текстового файла (или файлов) согласно условию...

В текстовый файл записать целые числа, четные числа переписать в новый файл
В текст. файл записать целые числа четные числа переписать в новый файл.

Сформировать файл F1, содержащий целые числа, и переписать в другой файл
Ðàçðàáîòàòü ïðîãðàììó, êîòîðàÿ ôîðìèðóåò ôàéë F1, ñîäåðæàùèé öåëûå ÷èñëà, è ïåðåïèñûâàåò ýòîò...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru