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

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

Восстановить пароль Регистрация
 
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
05.05.2010, 19:01     Файлы, работа с ними (ч.1) #1
Народ, плз помогите с задачами на языке Си
Задача 1. Дана строка S. Если S является допустимым именем файла, то создать пустой файл с этим именем и вывести True. Если файл с именем S создать нельзя, то вывести False.

Задача 2. Дано имя файла и целое число N (> 1). Создать файл целых чисел с данным именем и записать в него N первых положительных четных чисел (2, 4, …).

Задача 3. Дано имя файла и вещественные числа A и D. Создать файл вещественных чисел с данным именем и записать в него 10 первых членов арифметической прогрессии с начальным членом A и разностью D:
A, A + D, A + 2*D, A + 3*D, … .

Народ, плз помогите с задачами, и если можете подскажите книгу по Си чтоб было очень понятно
И если не затруднит, плз хелп и объясните
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
06.05.2010, 10:35     Файлы, работа с ними (ч.1) #2
Цитата Сообщение от Лестат Посмотреть сообщение
Задача 3. Дано имя файла и вещественные числа A и D. Создать файл вещественных чисел с данным именем и записать в него 10 первых членов арифметической прогрессии с начальным членом A и разностью D:
A, A + D, A + 2*D, A + 3*D, …
Если "файл вещественных чисел" - это бинарный файл, то вот:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SIZE 10
 
int main(void){
    double arr[SIZE], a, d;
    size_t i;
    char buf[MAX_PATH];
    FILE *f;
    
    printf("A = ");
    if ( scanf("%lf", &a) != 1 ){
        perror("scanf");
        exit(1);
    }
    printf("B = ");
    if ( scanf("%lf%*c", &d) != 1 ){
        perror("scanf");
        exit(1);
    }
    
    printf("Name for output file: ");
    if ( scanf("%s", buf) != 1 ){
        perror("scanf");
        exit(1);
    }
    
    for ( i = 0; i < SIZE; ++i )
        arr[i] = a + d * i;
    
    if ( ( f = fopen(buf, "wb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    if ( fwrite(arr, sizeof(double), SIZE, f) != SIZE ){
        perror("fwrite");
        if ( fclose(f) )
            perror("fclose");
        exit(1);
    }
    
    if ( fclose(f) ){
        perror("fclose");
        exit(1);
    }
    f = NULL;
    
    memset(arr, 0, sizeof(double) * SIZE); /* для чистоты эксперимента */
    
    if ( ( f = fopen(buf, "rb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    if ( fread(arr, sizeof(double), SIZE, f) != SIZE ){
        perror("fread");
        if ( fclose(f) )
            perror("fclose");
        exit(1);
    }
    if ( fclose(f) )
        perror("fclose");
    
    for ( i = 0; i < SIZE; ++i )
        printf("%f\n", arr[i]);
    
    exit(0);
}
Добавлено через 1 час 12 минут
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
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
int main(void){
    int n, val;
    char buf[MAX_PATH];
    FILE *f;
    
    printf("Name for output file: ");
    if ( scanf("%s", buf) != 1 ){
        perror("scanf");
        exit(1);
    }
    printf("N = ");
    if ( scanf("%d", &n) != 1 ){
        perror("scanf");
        exit(1);
    }
    if ( n < 2 ){
        fprintf(stderr, "Too small!\n");
        exit(1);
    }
    if ( n > INT_MAX / 2 ){
        fprintf(stderr, "Too big!\n"); /* ;) */
        exit(1);
    }
    if ( ( f = fopen(buf, "wb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    for ( val = 2; n > 0; val += 2, --n ){
        if ( fwrite(&val, sizeof(int), 1, f) != 1 ){
            perror("fwrite");
            if ( fclose(f) )
                perror("fclose");
            exit(1);
        }
    }
    if ( fclose(f) ){
        perror("fclose");
        exit(1);
    }
    f = NULL;
    
    if ( ( f = fopen(buf, "rb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    while ( fread(&val, sizeof(int), 1, f) == 1 )
        printf("%d\n", val);
    
    val = 0;
    if ( ferror(f) ){
        perror("ferror");
        val = 1;
    }
    if ( fclose(f) ){
        perror("fclose");
        val = 1;
    }
    exit(val);
}
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
12.05.2010, 16:04  [ТС]     Файлы, работа с ними (ч.1) #3
Может кто-нибудь с 1-й задачей помочь =((
easybudda, не знаете почему и в той, и в той задаче - когда выводится в файл - то вместо того, что надо выводит "кракозябры" ???пытался исправить - не получилось =(((
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.05.2010, 16:07     Файлы, работа с ними (ч.1) #4
Цитата Сообщение от Лестат Посмотреть сообщение
easybudda, не знаете почему и в той, и в той задаче - когда выводится в файл - то вместо того, что надо выводит "кракозябры"
может по тому, что файлы двоичные, а не текстовые?
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
12.05.2010, 16:09  [ТС]     Файлы, работа с ними (ч.1) #5
омг, а в каком формате тогда создавать файл ? или как решить эту проблему ???
а то разобратся толком не могу =((( ,( только с физикой вчера разобрался, а на программирование времени не хватает =(( )
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.05.2010, 00:46     Файлы, работа с ними (ч.1) #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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SIZE 10
 
#ifndef MAX_PATH
#define MAX_PATH 1024
#endif
 
int main(void){
        double a, d;
        size_t i;
        char buf[MAX_PATH];
        FILE *f;
 
        printf("A = ");
        if ( scanf("%lf", &a) != 1 ){
                perror("scanf");
                exit(1);
        }
        printf("D = ");
        if ( scanf("%lf%*c", &d) != 1 ){
                perror("scanf");
                exit(1);
        }
 
        printf("Name for output file: ");
        if ( scanf("%s", buf) != 1 ){
                perror("scanf");
                exit(1);
        }
 
        if ( ( f = fopen(buf, "w") ) == NULL ){
            perror("fopen");
            exit(1);
        }
 
        for ( i = 0; i < SIZE; ++i ){
            if ( fprintf(f, "%f\n", a + d * i) < 0 ){
                perror("fprintf");
                if ( fclose(f) )
                    perror("fclose");
                exit(1);
            }
        }
 
        if ( fclose(f) )
            perror("fclose");
        else
            printf("Done.\n");
 
        exit(0);
}
на пример...

Добавлено через 7 часов 49 минут
Цитата Сообщение от Лестат Посмотреть сообщение
Дана строка S. Если S является допустимым именем файла, то создать пустой файл с этим именем и вывести True. Если файл с именем S создать нельзя, то вывести False.
Цитата Сообщение от Лестат Посмотреть сообщение
Может кто-нибудь с 1-й задачей помочь
а в чём сложность-то?
C
1
2
3
4
5
6
7
8
9
10
11
12
...
FILE *f;
char *S = "file.txt";
if ( f = fopen(S, "w") ){
  printf("Oh yeah!\n");
  fclose(f);
}
else {
  printf("Shit happens!\n");
  exit(1);
}
...
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
13.05.2010, 02:45     Файлы, работа с ними (ч.1) #7
Отнюдь. Файл может не создаться по миллиону причин. А посему: надо узнать требования к именам файлов (чтобы в них отсутсвовали определённые символы, чтобы одноимённый файлов не было в директориях и так далее)

А потом уже анаолизировать строку S нав предмет соответствия этим правилам.
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
13.05.2010, 08:52  [ТС]     Файлы, работа с ними (ч.1) #8
eassybudda, а что вместо ... О_о
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.05.2010, 09:10     Файлы, работа с ними (ч.1) #9
Цитата Сообщение от kravam Посмотреть сообщение
Файл может не создаться по миллиону причин.
Ага, может... Но в задании не сказано выяснять причину, только попытаться создать файл и вывести результат. А тут без вариантов - или создался, или нет.

Цитата Сообщение от Лестат Посмотреть сообщение
а что вместо ...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
#define BAD_FILE_NAME "z:\\file.txt"
 
int main(void){
    FILE *f;
    if ( f = fopen(BAD_FILE_NAME, "w") ){
        fclose(f);
        printf("Aga!\n");
    }
    else {
        printf("Ne aga!\n");
        exit(1);
    }
    exit(0);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2010, 09:53     Файлы, работа с ними (ч.1)
Еще ссылки по теме:

Работа с функциями. Задача без них работает, а с ними - нет C++
C++ Массивы и работа с ними
C++ Где должны находиться текстовые файлы, для того чтобы с ними можно было работать?

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

Или воспользуйтесь поиском по форуму:
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
13.05.2010, 09:53     Файлы, работа с ними (ч.1) #10
easybudda,
Цитата Сообщение от easybudda Посмотреть сообщение
"Ne aga!\n" "Aga!\n"
Yandex
Объявления
13.05.2010, 09:53     Файлы, работа с ними (ч.1)
Ответ Создать тему
Опции темы

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