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

Файл создать новый - C++

Восстановить пароль Регистрация
 
D.I.
1 / 1 / 0
Регистрация: 05.12.2011
Сообщений: 24
07.06.2012, 16:38     Файл создать новый #1
File70. Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать новый строковый файл, содержащий все зимние даты из исходного файла (в обратном порядке). Если даты с требуемым временем года в файле отсутствуют, то оставить результирующий файл пустым.
File67. Дан строковый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а под год — четыре (например, «16/04/2001»). Создать два файла целых чисел, первый из кото-рых содержит значения дней, а второй — значения месяцев для дат из ис-ходного строкового файла (в том же порядке).
подскажите как определить зимние месяцы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 16:38     Файл создать новый
Посмотрите здесь:

Есть файл f, c целыми числами. Создать новый файл g где все компоненты файла f в квадрате. C++
Дан файл,компонентами его яв-ся числа.Число компонент делится на 2.Создать новый файл,куда будет записываться наименьшее из каждой пары чисел 1 файла C++
C++ создать новый двоичный файл и записать в него матрицу
Создать новый файл, удалив заданную последовательность символов из существующего. C++
C++ Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
07.06.2012, 16:56     Файл создать новый #2
Цитата Сообщение от D.I. Посмотреть сообщение
подскажите как определить зимние месяцы.
Ну как-как, если месяц = 11 или 12 или 1 то это зима.
D.I.
1 / 1 / 0
Регистрация: 05.12.2011
Сообщений: 24
07.06.2012, 17:07  [ТС]     Файл создать новый #3
а как это указать при записи в файл?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
07.06.2012, 17:08     Файл создать новый #4
D.I., ну тебя же просят записывать только зимние даты, естественно что если выполнилось условие что месяц зимний то ты записываешь дату в файл, а если нет то ничего не делаешь.
D.I.
1 / 1 / 0
Регистрация: 05.12.2011
Сообщений: 24
07.06.2012, 17:11  [ТС]     Файл создать новый #5
Если бы я это могла сделать, то не спрашивала бы как. Я решала другую задачу но там условие было просто переписать без определения месяца, поэтому я не понимаю как написать что именно сравнивать.
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.06.2012, 18:06     Файл создать новый #6
Вот накидал, только 1 проблема когда дат больше чем size будет ошибка, хотя по логике её там быть недолжно, кто будет смотреть этот пост скажите в чем ошибка?
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
#include <iostream>
 
using namespace std;
 
struct data
{
    int day;
    int month;
    int year;
};
 
int main(void)
{
    FILE* file = NULL, *rezult = NULL;
 
    if(!(file = fopen("data.txt", "rt")))
    {
        cout << "Can't open file" << endl;
        system("PAUSE");
        _exit(1);
    }
 
    if(!(rezult = fopen("rezult.txt", "w+")))
    {
        cout << "Can't creat file" << endl;
        system("PAUSE");
        _exit(1);
    }
 
    int size = 50, j = 0;
    data **spisok = NULL;
    
    spisok = new data*[size];
 
    for(int i=0; i < size; i++)
    {
        spisok[i] = new data;
    }
 
    while(!feof(file))
    {
        if(j == size)
        {
            data **new_spisok = NULL;
 
            size++;
 
            new_spisok = new data*[size];
 
            for(int i = 0; i < j; i++)
            {
                new_spisok[i] = spisok[i];
            }
 
            delete[] spisok;
 
            spisok = new_spisok;
        }
 
        fscanf(file, "%d/%d/%d", &spisok[j]->day, &spisok[j]->month, &spisok[j]->year);
        
        j++;
    }
 
    for(int i = size - 1; i >= 0; i--)
        if(spisok[i]->month == 12 || spisok[i]->month == 1 || spisok[i]->month == 2)
        {
            fprintf(rezult, "%d/%d/%d\n", spisok[i]->day, spisok[i]->month, spisok[i]->year);
        }
 
    fclose(file);
    fclose(rezult);
    system("PAUSE");
    return 0;
}
Добавлено через 3 минуты
Gepar, дружище, зима идет не с 11 по 1, а с 12 по 2
D.I.
1 / 1 / 0
Регистрация: 05.12.2011
Сообщений: 24
07.06.2012, 18:19  [ТС]     Файл создать новый #7
урааа1!! работает!! спасибо!
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.06.2012, 18:23     Файл создать новый #8
D.I., смотри если дат будет больше 50 она вылетит, там какой-то глюк не могу понять какой
D.I.
1 / 1 / 0
Регистрация: 05.12.2011
Сообщений: 24
07.06.2012, 18:24  [ТС]     Файл создать новый #9
Да нет мне не надо так масштабно. Так чисто чтобы работало
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.06.2012, 18:50     Файл создать новый #10
переделанный код Jazz411
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
#include <iostream>
#include <cstdio> 
 
struct date
{
    int day;
    int month;
    int year;
};
 
int main(void)
{
    FILE *file = NULL, *rezult = NULL;
 
    if(!(file = std::fopen("data.txt", "rt")))
    {
        std::cout << "Can't open file" << std::endl;
        return 1; 
    }
 
    if(!(rezult = std::fopen("rezult.txt", "w+")))
    {
        std::cout << "Can't create file" << std::endl;
        return 1;
    }
 
    int size = 50, count = 0; 
 
    date* arr = new date[size]();
    date d;
 
    while (std::fscanf(file, "%d/%d/%d", &d.day, &d.month, &d.year) == 3)
    {
        if (count == size)
        {
            size += static_cast<int>(1.6 * size);
            date* tmp = new date[size]();
 
            for (int i = 0; i < count; ++i)
                tmp[i] = arr[i];
 
            delete [] arr;
            arr = tmp;
        }
        arr[count++] = d;
    }
 
    for(int i = count - 1; i >= 0; --i)
    {
        if(arr[i].month == 12 || arr[i].month == 1 || arr[i].month == 2)
            fprintf(rezult, "%d/%d/%d\n", arr[i].day, arr[i].month, arr[i].year);
    }
 
    delete [] arr;
    std::fclose(file);
    std::fclose(rezult);
    std::cout << "Done!\n";
    system("pause");
    return 0;
}
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.06.2012, 19:30     Файл создать новый #11
Jupiter, так в чем была проблемма?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.06.2012, 19:48     Файл создать новый #12
Jazz411, у тебя весь код проблемный
начиная от include-ов(которых не хватает) и заканчивая утечкой памяти
disfatum
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 23
25.05.2014, 15:44     Файл создать новый #13
что происходит здесь , не подскажешь ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 while(!feof(file))
    {
        if(j == size)
        {
            data **new_spisok = NULL;
 
            size++;
 
            new_spisok = new data*[size];
 
            for(int i = 0; i < j; i++)
            {
                new_spisok[i] = spisok[i];
            }
 
            delete[] spisok;
 
            spisok = new_spisok;
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2014, 21:31     Файл создать новый
Еще ссылки по теме:

По символьным файлам с текстом и сокращениями создать новый файл C++
работа с файлами, создать новый файл из первого C++
C++ Нужно создать новый вектор и сохранить его в файл

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

Или воспользуйтесь поиском по форуму:
disfatum
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 23
29.05.2014, 21:31     Файл создать новый #14
что здесь происходит, не мог написать по-подробней пожалуйста
?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 if (count == size)
        {
            size += static_cast<int>(1.6 * size);
            date* tmp = new date[size]();
 
            for (int i = 0; i < count; ++i)
                tmp[i] = arr[i];
 
            delete [] arr;
            arr = tmp;
        }
        arr[count++] = d;
    }
Yandex
Объявления
29.05.2014, 21:31     Файл создать новый
Ответ Создать тему
Опции темы

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