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

Удаление из файла - C++

Восстановить пароль Регистрация
 
coffeetea
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 6
08.07.2013, 13:08     Удаление из файла #1
Здравствуйте. Есть такое задание: "Дана последовательность a1...a20. Имеется в виду, что в ней есть несколько максимальных элементов. Получить новую последовательность, исключив из исходной все члены с максимальным значением, оставив первый."

Исходная последовательность берётсяя из файла. Конечная последовательность записывается в тот же файл. Вот, что я сделал:
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <fstream>
#include <math.h> 
 
void read(int *ptx, int n)
{
FILE *pf1;
pf1=fopen("file.txt","r");
int a,i;
printf("Ishodnaya posledovatel'nost:\n\n");
    for(i=0;i<n;i++)
    {
        fscanf(pf1,"%d",&a);
        *(ptx+i)=a;
        printf("%d ",a);
    }
    fclose(pf1);
}
void fmax(int *ptx, int n,int *mx)
{
     int i;
     for(i=0;i<n;i++)
    {
        if(*(ptx+i)>*mx)
        *mx=*(ptx+i);
    }
}
void write(int *ptx, int n,int mx)
{
FILE *pf1;
pf1=fopen("file.txt","w");
int i,x=0;
printf("Preobrazovanaya posledovatel'nost:\n\n");
    for(i=0;i<n;i++)
    {
        if(*(ptx+i)==mx)
        {
            if(x==0)
            {
             x=1;       
            goto m;
            }
           continue;             
        }
        else
        {
        m:         
        fprintf(pf1,"%d ", *(ptx+i));
        printf("%d ",*(ptx+i));
        }
    }
    fclose(pf1);
}
int main()
{
    int m=20,max=-1000,vybor;
    int a[m];
    
    read(&a[0],m);
    fmax(&a[0],m,&max);
    printf("\n\nMaximum = %d\n\n",max);
    write(&a[0],m,max);
    printf("\n\nOtkrit' file v Bloknote? (1 - da / 0 - net)\n\n");
    scanf("%d",&vybor);
    if(vybor==1)
    system("notepad.exe file.txt");
    
    getch();
}
Но нужно переделать эту программу, чтобы в ней не было массивов. Каким образом это реализовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2013, 13:08     Удаление из файла
Посмотрите здесь:

Удаление строки из файла\либо удаление самого файла. C++
Удаление из файла C++
Удаление данных из файла C++
Удаление из файла C++
Удаление из файла C++
C++ Удаление файла
C++ Удаление комментариев из файла
Удаление файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.07.2013, 04:56     Удаление из файла #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
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <fstream>
 
int read(int *max)
{
    FILE *pf1;
    pf1 = fopen("file.txt","r");
    int a, n = 0, ind = 0;
    printf("Ishodnaya posledovatel'nost:\n\n");
    fscanf(pf1,"%d", max);
    printf("%d ", *max);
    ++n;
    while (!feof(pf1))
    {
        fscanf(pf1,"%d", &a);
        printf("%d ", a);
        ++n;
        if (a > *max)
        {
            *max = a;
             ind = n;
        }
    }
    fclose(pf1);
    return ind;
}
 
 
void write(int max, int ind)
{
    FILE *pf1, *pf2;
    pf1 = fopen("file.txt","r");
    pf2 = fopen("temp.txt","w");
    int a, n = 0, flag = 0;
    
    printf("\nPreobrazovanaya posledovatel'nost:\n\n");
    while (!feof(pf1))
    {
        fscanf(pf1,"%d", &a);
        ++n;
        if (n <= ind)
        {
            printf("%d ", a);
            fprintf(pf2, "%d", a);
            if (!feof(pf1)) fprintf(pf2, " ");
        }
        else
        {
            if (a != max)
            {
                printf("%d ", a);
                fprintf(pf2, "%d", a);
                if (!feof(pf1)) fprintf(pf2, " ");
            }
        }
    }
    fclose(pf1);
    fclose(pf2);
    remove("file.txt");
    rename("temp.txt", "file.txt");
}
 
 
int main()
{
    int vybor;
    int max, ind;
    
    ind = read(&max);
    
    printf("\n\nMaximum = %d\n", max);
    printf("\Index = %d\n", ind);
    
    write(max, ind);
 
    printf("\n\nOtkrit' file v Bloknote? (1 - da / 0 - net)\n\n");
    scanf("%d", &vybor);
    
    if(vybor == 1)
        system("notepad.exe file.txt");
    
    getch();
}
coffeetea
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 6
09.07.2013, 18:41  [ТС]     Удаление из файла #3
alsav22, Спасибо за помощь.
Yandex
Объявления
09.07.2013, 18:41     Удаление из файла
Ответ Создать тему
Опции темы

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