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

Файлы, работа с ними (ч.2) - C++

Восстановить пароль Регистрация
 
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
12.05.2010, 16:18     Файлы, работа с ними (ч.2) #1
Люди, помогите плз с задачами на файлы ( на языке Си )
задачи с файлами - вообще ппц, не понимаю. Хелп Плиз!
Задача 1. Дан файл целых чисел. Заменить в нем каждый элемент с четным номером на два нуля.

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

Задача 3. Дана строка S0, целое число N (<= 4) и N файлов одного и того же типа с именами S1, …, Sn. Объединить содержимое этих файлов (в указанном порядке) в новом файле с именем S0.(S0 - S нулевое )
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.05.2010, 00:27     Файлы, работа с ними (ч.2) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <stdio.h>
#include <stdlib.h>
 
/* Дан файл целых чисел. Заменить в нем каждый элемент с четным номером на два нуля. */
 
#define FIN_NAME "input.txt"
#define FOUT_NAME "output.txt"
 
int main(void){
    FILE *fin, *fout;
    long num, cnt;
    
    if ( ( fin = fopen(FIN_NAME, "r") ) == NULL ){
        perror("fopen(FIN_NAME, \"r\")");
        exit(1);
    }
    if ( ( fout = fopen(FOUT_NAME, "w") ) == NULL ){
        perror("fopen(FOUT_NAME, \"w\")");
        if ( fclose(fin) )
            perror("fclose(fin)");
        exit(1);
    }
    
    cnt = 0;
    while ( fscanf(fin, "%ld", &num) == 1 ){
        if ( ++cnt & 1 ){
            if ( fprintf(fout, "%ld\n", num) < 0 ){
                perror("fprintf");
                if ( fclose(fin) )
                    perror("fclose(fin)");
                if ( fclose(fout) )
                    perror("fclose(fout)");
                exit(1);
            }
        }
        else {
            if ( fprintf(fout, "%s\n", "00") < 0 ){
                perror("fprintf");
                if ( fclose(fin) )
                    perror("fclose(fin)");
                if ( fclose(fout) )
                    perror("fclose(fout)");
                exit(1);
            }
        }   
    }
    
    if ( num = ferror(fin) )
        perror("fscanf");
    if ( fclose(fin) )
        perror("fclose(fin)");
    if ( fclose(fout) )
        perror("fclose(fout)");
    
    printf("%s\n", ( num ) ? "Shit happens!" : "Done.");
    return (int)num;
}
Файлы, работа с ними (ч.2)

2 - примерно так же, только числа по порядку считать не нужно, достаточно очередное прочитанное число с нулём сравнивать...
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
19.05.2010, 15:49  [ТС]     Файлы, работа с ними (ч.2) #3
а 3-ю задачку кто-нить может сделать ?не знаю как сделать
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.05.2010, 15:56     Файлы, работа с ними (ч.2) #4
Цитата Сообщение от Лестат Посмотреть сообщение
а 3-ю задачку кто-нить может сделать ?не знаю как сделать
1 открыть для записи S0
2 открыть для чтения S1
3 читать (хоть по символу, хоть по строке) S1 и писать в S0
4 закрыть S1
5 со второго пункта тоже для S2, S3...
6 закрыть S0
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
19.05.2010, 15:57  [ТС]     Файлы, работа с ними (ч.2) #5
вот только как эт написать вс-равно не понял =((((((((
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.05.2010, 23:07     Файлы, работа с ними (ч.2) #6
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
#include <stdio.h>
#include <stdlib.h>
 
#ifndef MAX_PATH
#define MAX_PATH 1024
#endif
 
#define NFILES 5
 
int main(void){
    FILE * f[NFILES];
    char n[NFILES][MAX_PATH];
    int i, ch;
    
    printf("Name for output file: ");
    if ( scanf("%s%*c", n[0]) != 1 ){
        perror("scanf");
        exit(EXIT_FAILURE);
    }
    for ( i = 1; i < NFILES; ++i ){
        printf("Name for input file #%d: ", i);
        if ( scanf("%s%*c", n[i]) != 1 ){
            perror("scanf");
            exit(EXIT_FAILURE);
        }
    }
    
    if ( ! ( f[0] = fopen(n[0], "w") ) ){
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    for ( i = 1; i < NFILES; ++i ){
        if ( ! ( f[i] = fopen(n[i], "r") ) ){
            perror("fopen");
            if ( fclose(f[0]) )
                perror("fclose");
            exit(EXIT_FAILURE);
        }
        while ( ( ch = fgetc(f[i]) ) != EOF ){
            if ( fputc(ch, f[0]) == EOF ){
                perror("fputc");
                if ( fclose(f[0]) )
                    perror("fclose");
                if ( fclose(f[i]) )
                    perror("fclose");
                exit(EXIT_FAILURE);
            }
        }
        if ( fclose(f[i]) )
            perror("fclose");
    }
    if ( fclose(f[0]) ){
        perror("fclose");
        exit(EXIT_FAILURE);
    }
    printf("Done.\n");
    exit(EXIT_SUCCESS);
}
Yandex
Объявления
19.05.2010, 23:07     Файлы, работа с ними (ч.2)
Ответ Создать тему
Опции темы

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