0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 4
1

Дан текстовый файл f из целых чисел. Переписать этот файл в g без повторных вхождений цифр

26.03.2015, 00:05. Показов 2593. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите написать код програмки. ну или хотя бы алгоритм проверки элемента. Я не могу понять как каждый раз пробегаться по второму файлу в поисках числа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2015, 00:05
Ответы с готовыми решениями:

Пусть имеется текстовый файл, который содержит несколько целых чисел. Открыть этот текстовый файл и каждое из чисел вознести в квадрат.
Пусть имеется текстовый файл, который содержит несколько целых чисел. Открыть этот текстовый файл и...

ПУСТЬ это текстовый файл, который содержит НЕСКОЛЬКО ЦЕЛЫХ ЧИСЕЛ. ОТКРЫТЬ этот текстовый файл и КАЖДЫЙ С ЧИСЕЛ вознести В КУБ.
ПУСТЬ это текстовый файл, который содержит НЕСКОЛЬКО ЦЕЛЫХ ЧИСЕЛ. ОТКРЫТЬ этот текстовый файл и...

Создать и заполнить текстовый файл f получить файл g образованнный из файла f c исключением повторных вхождений одного и того же слова
Создать и заполнить текстовый файл f получить файл g образованнный из файла f c исключением...

Дан текстовый файл. Найти сумму всех чисел, входящих в этот файл.
Дан текстовый файл. Найти сумму всех чисел, входящих в этот файл. uses crt; var f:text;...

24
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 00:15 2
у тебя числа какой величины максимум хранятся в исходном файле?
0
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 4
26.03.2015, 00:17  [ТС] 3
не имеет значения
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 00:23 4
имеет, определи сам, у тебя файл это поток байт или что именно? может у тебя там int записано. в каком диапазоне ты будешь числа проверять?
0
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 4
26.03.2015, 00:27  [ТС] 5
int
целые числа

Добавлено через 1 минуту
у меня есть кусок програмки. но без исключения элементов. вот она
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//Дано текстовий файл f цілих чисел. Отримати з f файл g, виключивши повторні входження чисел
 
# include <stdio.h>
# include <locale.h>
# include <stdlib.h>
# include <conio.h>
# include <string.h>
 
void StvorFile (FILE*frodo);
void PrintFile (FILE*);
void StvorNewFile(FILE*frodo, FILE*hobit);
 
int main ()
{   setlocale (LC_ALL, "rus");
    char filename1 [128];
    char filename2 [128];
    puts("Введите имя первого файла");
    gets(filename1);
    puts("Введите имя второго файла");
    gets(filename2);
    FILE*fp1;
    FILE*fp2;
    fp1=fopen(filename1, "w");
        if( ! fp1)
            {puts ("Файл не удалось открыть. Попробуйте заново!");
            exit(1);
        }
    StvorFile(fp1);
    puts("Печать файла");
    fp1=fopen(filename1, "r");
    PrintFile(fp1);
    rewind(fp1);
    fp2=fopen(filename2, "w");
    if( ! fp2)
            {puts ("Файл не удалось открыть. Попробуйте заново!");
            exit(1);
        }
    puts("Щас откроеться новый файл. Для подтверждения нажмите любую кнопку");
    getch();
    StvorNewFile(fp1, fp2);
    fp2=fopen(filename2, "r");
    PrintFile(fp2);
    fclose(fp1);
    fclose(fp2);
    puts("Программа закончила свою работу");
    getch();
    return 0;
}
 
void StvorFile (FILE*frodo)
    {   int a;
        puts("Введите целые числа. Конец - набор 00");
        scanf("%d", &a);
        while(a!=00)
        {fprintf(frodo, "%d", a);
        scanf("%d", &a);
            }
        
        fclose(frodo);
    }
 
    void PrintFile(FILE*frodo)
        {int a;
        do
            {fscanf (frodo, "%d", &a);
            printf("%d", a);
            }
        while (!feof(frodo));
        printf("\n");
    }
// вот сдесь начинаються проблемки. этот кусочек как то нужно поправить
    void StvorNewFile(FILE*frodo, FILE*hobit)
{   int x1,x2;
    FILE*fp2;
    fscanf(frodo, "%d", &x1);
    fprintf(hobit, "%d", x1);
    while(!feof(frodo))
        {   fscanf(frodo, "%d", &x2);
            {if(x1==x2)
                fscanf(frodo, "%d", &x2);
            else
                fprintf(hobit, "%d", x2);
        }
            fscanf(frodo, "%d", &x2);
    }
    fclose(hobit);
}
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 00:33 6
я тебе напишу в общих чертах
допустим ты ожидаешь числа типа инт. создаешь булевый массив размеров в 2^32 32 именно столько бит выделяется для хранения одного числа типа инт.
далее ты получаешь число, смотришь в массив по индексу равное числу, если лож тогда переносишь во второй файл если лож то ничего не делаешь после этого условия записываешь на тот же индекс истина
0
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 4
26.03.2015, 00:38  [ТС] 7
Да я в принципе знаю как сделать. Нужно закрыть второй файл, потом открыть и брать следующие число с первого файла. И потом пробегать по второму файлу и смотреть, есть там это число или нет. вот только как это записать на си я пока не додумался
0
116 / 117 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.03.2015, 03:07 8
Prizrak86, ребят, а что если вот так
C#
1
SortedSet<int> ss = new SortedSet<int>();
И не нужно никуда бегать и открывать других файлов
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 10:21 9
Цитата Сообщение от lokilo Посмотреть сообщение
Prizrak86, ребят, а что если вот так
C#
1
SortedSet<int> ss = new SortedSet<int>();
И не нужно никуда бегать и открывать других файлов
это хорошо, а если пересчитать на все возможные варианты чисел которые могут попадаться чисел у нас (2^32)*32 бит информации, это получиться 16Гб оперативы, есть столько?

Добавлено через 2 минуты
к сравнению мой вариант займет только 512Мб оперативы
0
116 / 117 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.03.2015, 10:28 10
Prizrak86, я может что то плохо понял, но для чего представлять числа, когда есть список чисел и нужно пройтись по списку и удалить дубликаты чисел
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 10:32 11
lokilo, внимательно прочитай, твой способ во первый только сортирует (возможно я не знаю функционал вашего класса или не правильно его понял), а во вторых если файл будет содержать все возможные значения которое может принимать тип int то вашей программе оперативы не хватит.

Добавлено через 1 минуту
lokilo, короче ща напишу, ты тоже напиши, я выложу файл с числами, числа будут записаны через пробел, потом по меряемся у кого лучше программа работает.
0
116 / 117 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.03.2015, 10:34 12
Prizrak86, давайте попробуем
файл с числами выложите
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 10:48 13
поправка числа запишу в файл в столбец что бы легче читать было. построчно

Добавлено через 5 минут
lokilo,
C#
1
2
3
4
5
6
7
8
9
10
 static void GenFileInt()
        {
            using (var sw = File.CreateText("int.txt"))
            {
                for (int i = int.MaxValue; i > int.MinValue; i--)
                {
                    sw.WriteLine(i);
                }
            }
        }
это код формирующий файл, запусти у себя, а то файл оооочень большой получаеться

Добавлено через 1 минуту
перед запуском своей программы откройте диспетчер и следите за объемом оперативной памяти

Добавлено через 1 минуту
я поправил условие цикла, иначе генерация не закончиться. строго больше, обратите внимание.
0
116 / 117 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.03.2015, 10:52 14
Prizrak86, сколько строк должно получиться в итоге? пока что 31 миллион с лихим
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 11:06 15
lokilo, 2^32

Добавлено через 7 минут
4'294'967'296 значений
0
116 / 117 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.03.2015, 11:07 16
Prizrak86, да уже посчитал, где то на 40 гигов должно выйти?
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 11:14 17
да, где то так, там еще знаки переноса. у меня уже 15Гб есть

Добавлено через 1 минуту
первая новость, студия не позволяет создать массив такой длинны.

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

Добавлено через 2 минуты
у меня половина записалось пока что 24Гб файл
0
116 / 117 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.03.2015, 11:15 18
Prizrak86, да и в самом деле, массива такой размерности нет.
То есть переводить числа в масcив byte?
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 11:20 19
думаю можно и 16битные числа хранить, тогда тоже оба решений возможны, в твоем случае это займет 128 Кбайт

Добавлено через 1 минуту
сейчас цикл исправлю, записывать буду значения типа Int16

Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
9
10
static void GenFileInt()
        {
            using (var sw = File.CreateText("int.txt"))
            {
                for (Int16 i = Int16.MaxValue; i > Int16.MinValue; i--)
                {
                    sw.WriteLine(i);
                }
            }
        }
файл получился размером 459КБ
0
116 / 117 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.03.2015, 11:28 20
Prizrak86, да тот файл на 20 гигах уже не загрузился, вот этого я даже то и не знал
0
26.03.2015, 11:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2015, 11:28
Помогаю со студенческими работами здесь

Дан файл f, компоненты которого являются целыми числами. Получить файл g, образованный из файла f исключением повторных вхождений одного и того же чис
Помогите пожалуйста, у меня что-то не очень получается разобратся. Задание: Дан файл f, компоненты...

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

Дан текстовый файл, в котором записана последовательность целых чисел. Записать в новый файл только четные из них
Дан текстовый файл, в котором записана последовательность целых чисел. Записать в новый файл только...

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

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

Дан текстовый файл F. Переписать файл F в файл G, вставляя в конец каждой строки ее порядковый номер.
решите)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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