Модераторы: Alx, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Работа с массивами, целыми, без WinAPI 
V
    Опции темы
sOckets
Дата 20.9.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Привет , и так я хочю чтоб в этой теме все кто хочет подкидывали задачки на "С++" , чтоб именно "С++" без WinAPI и тд , просто хочю поднатянуть матчасть...ну там работа с массивами,целыми и тд. У кого есть задачки очень прошу их сюда скидывать, только по подробней обьясняйте smile
И ещё если у когото там в учебных заведениях задачки дают , тоже кидайте сюда.
Жду


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
sergejzr
Дата 20.9.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена! 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 20.9.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Напишите пожалуйста программу, которая считает количество дней между двумя датами (обе включительно). Даты передаются с коммандной строки в формате год.месяц.день пример:

a.exe --date_from 1990.12.10 --date_to 2005.01.01

В случае неправильного ввода выводится обьясняющая информация и возвращается 1, иначе выводится количество дней и возвращается 0.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sOckets
Дата 20.9.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



sergejzr, Ок ,спасибо , я действительно мешкался и не знал где создать тему

Добавлено @ 18:08 
Цитата
Напишите пожалуйста программу, которая считает количество дней между двумя датами (обе включительно). Даты передаются с коммандной строки в формате год.месяц.день пример:

a.exe --date_from 1990.12.10 --date_to 2005.01.01

В случае неправильного ввода выводится обьясняющая информация и возвращается 1, иначе выводится количество дней и возвращается 0.


решаем....


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
sOckets
Дата 20.9.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



ужасно :'( я не знаю решения smile позор , пол часа искал как можно работать с датой в "С++" ...ничего не нашёл smile 

sergejzr, пожалуйста , если не трудно хоть подскажите куда копать и что инклюдить smile


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Sartorius
Дата 20.9.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



 Инклудить ничего не дада. Возьми сам разбей переданные строки на год, месяц и день... а дальше сам smile 
 Если будет желание , можешь еще вот над чем подумать

Отсортировать последовательность байтов(файл) произвольной длинны за время O(n)

PM MAIL ICQ   Вверх
sOckets
Дата 20.9.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Цитата
Отсортировать последовательность байтов(файл) произвольной длинны за время O(n)

извиняюсь , по подробней можно ?  smile 


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
586
Дата 20.9.2006, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(sergejzr @  20.9.2006,  19:06 Найти цитируемый пост)
Напишите пожалуйста программу, которая считает количество дней между двумя датами (обе включительно). Даты передаются с коммандной строки в формате год.месяц.день пример:

a.exe --date_from 1990.12.10 --date_to 2005.01.01

В случае неправильного ввода выводится обьясняющая информация и возвращается 1, иначе выводится количество дней и возвращается 0. 


Код
#include <stdio.h>
#include <windows.h>
#include <conio.h>

BYTE mm[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int __cdecl main(int argc, char** argv)
{
    int a=0, b=0;
    for(int i=1; i<argc; i++)
    {
        if(!strcmp(argv[i], "--date_from"))
        {
            i++; a=i;
            if(i<argc) continue; 
            else goto err;
        }
        if(!strcmp(argv[i], "--date_to"))
        {
            i++; b=i;
            if(i<argc) continue;
            else goto err;
        }
    }
    if(!a || !b)
    {
err:
        printf("Bad command line\n");
        return 1;
    }
    int y, m, d, y1, m1, d1, n;
    if(sscanf(argv[a], "%d.%d.%d", &y, &m, &d)!=3 ||
        sscanf(argv[b], "%d.%d.%d", &y1, &m1, &d1)!=3)
    {
err1:
        printf("Bad time format\n");
        return 1;
    }
    m--; m1--;
    if(m<0 || m>11 || y<0 || d<1 || m1<0 || m1>11 || y1<0 || d1<1) goto err1;
    if(d>mm[m] || d1>mm[m1]) goto err1;
    n=(y1-y)*365;
    n+=(y1-y)/4;
    if(!(y%4) || !(y1%4)) n++;
    i=m;
    if(m!=m1) while(1)
    {
        if(i==11) i=0;
        if(i==m1-1) break;
        n+=mm[i];
        i++;
    }
    if(m==m1)
        n+=d1-d;
    else {
        n+=mm[m]-d;
        n+=d1;
    }
    printf("=== %d\n", n);
    getch();

    return 0;
}

PM   Вверх
Rockie
Дата 20.9.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 2
Всего: 31



и високосный год  smile 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
586
Дата 20.9.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(Rockie @  20.9.2006,  22:32 Найти цитируемый пост)
и високосный год

строка 43, 44.  smile 

Цитата
Напишите пожалуйста программу, которая считает количество дней между двумя датами (обе включительно).

Это я не учёл. Тогда в конце расчетов нужно сделать инкремент n.

Это сообщение отредактировал(а) 586 - 20.9.2006, 21:46
PM   Вверх
586
Дата 20.9.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Код
#include <stdio.h>
#include <windows.h>
#include <conio.h>

BYTE mm[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int __cdecl main(int argc, char** argv)
{
    int a=0, b=0;
    for(int i=1; i<argc; i++)
    {
        if(!strcmp(argv[i], "--date_from"))
        {
            i++; a=i;
            if(i<argc) continue; 
            else goto err;
        }
        if(!strcmp(argv[i], "--date_to"))
        {
            i++; b=i;
            if(i<argc) continue;
            else goto err;
        }
    }
    if(!a || !b)
    {
err:
        printf("Bad command line\n");
        return 1;
    }
    int y, m, d, y1, m1, d1, n;
    if(sscanf(argv[a], "%d.%d.%d", &y, &m, &d)!=3 ||
        sscanf(argv[b], "%d.%d.%d", &y1, &m1, &d1)!=3)
    {
err1:
        printf("Bad time format\n");
        return 1;
    }
    m--; m1--;
    if(m<0 || m>11 || y<0 || d<1 || m1<0 || m1>11 || y1<0 || d1<1) goto err1;
    if(d>mm[m] || d1>mm[m1]) goto err1;
    n=(y1-y)*365;
    n+=(y1-y)/4;
    if(!(y%4) || !(y1%4)) n++;
    i=m+1;
    if(m!=m1) while(1)
    {
        if(i>=11) i=0;
        if(i==m1) break;
        n+=mm[i];
        i++;
    }
    if(m==m1)
        n+=d1-d;
    else {
        n+=mm[m]-d;
        n+=d1;
    }
    n++;
    printf("=== %d\n", n);
    return 0;
}

PM   Вверх
Sartorius
Дата 20.9.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



Ну пусть с goto smile  
Вот 44-я строка : считаем разницу между 1999 и 2001 - есть один високосный , а не 43 - я не 44 - я строки не сработают. smile 
 
PM MAIL ICQ   Вверх
vinter
Дата 20.9.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: нет
Всего: 56



Цитата

Ну пусть с goto

непорядок ИМХО


--------------------
Мой блог
PM MAIL WWW   Вверх
586
Дата 20.9.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(vinter @  20.9.2006,  23:28 Найти цитируемый пост)
Цитата
Ну пусть с goto

непорядок ИМХО 

Просто сократил размер кода.
Цитата(Sartorius @  20.9.2006,  23:08 Найти цитируемый пост)
Вот 44-я строка : считаем разницу между 1999 и 2001 - есть один високосный , а не 43 - я не 44 - я строки не сработают

Я чего-нибудь придумаю. Создавать цикл нехочу.
PM   Вверх
Sartorius
Дата 20.9.2006, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



 586, да на самом деле ИМХО проще считать количество дней до текущего от 0.0.0000 все проблемы отпадут
Ну а потом просто разность между двумя такими "абсолютными" датами smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.