Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу решить 2 недели(, Обработка последовотельности символов 
V
    Опции темы
Igor094
Дата 19.12.2012, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2012

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



Геморная задача не знаю что сделать..


25.    ввести строку, содержащую дату в формате хх-месяц-хх и преобразовать ее в формат хх.хх.хх

пытался..
исходник вот... помогите может даже не решить, а найти ошибку...




Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  Задача_8.txt 3,91 Kb
PM MAIL   Вверх
Фантом
Дата 19.12.2012, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(Igor094 @  19.12.2012,  01:17 Найти цитируемый пост)

исходник вот... помогите может даже не решить, а найти ошибку...

Это все - одна сплошная ошибка. Вам никто никогда не говорил о том, что в коде полезно делать отступы, писать комментарии, использовать осмысленные названия переменных и т.п.? Сейчас это какая-то безумная неструктурированная каша, в которой совершенно невозможно понять, что и зачем Вы делали.

В общем, сделайте так: сотрите этот ужас, опишите самому себе способ решения задачи (полностью, на нормальном русском языке), а уже потом реализуйте этот способ в виде программы. Заново, с нуля.
PM   Вверх
NoviceF
Дата 19.12.2012, 00:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



а зачем объявлять строки таким образом

Код

char f[]={'f','e','v','\0'};

?
не тоже ли самое
Код

char f[]= "fev";

?

По моему 2й вариант намного нагляднее..
PM MAIL   Вверх
Igor094
Дата 19.12.2012, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2012

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



Цитата(Фантом @ 19.12.2012,  00:38)
Цитата(Igor094 @  19.12.2012,  01:17 Найти цитируемый пост)

исходник вот... помогите может даже не решить, а найти ошибку...

Это все - одна сплошная ошибка. Вам никто никогда не говорил о том, что в коде полезно делать отступы, писать комментарии, использовать осмысленные названия переменных и т.п.? Сейчас это какая-то безумная неструктурированная каша, в которой совершенно невозможно понять, что и зачем Вы делали.

В общем, сделайте так: сотрите этот ужас, опишите самому себе способ решения задачи (полностью, на нормальном русском языке), а уже потом реализуйте этот способ в виде программы. Заново, с нуля.

 smile 
там все поэтапно расписано... просто комментарии учитывая объемы задачи вообще меня путают... там я проверяю новый массив из записанного, полученным в результате выделения названия месяца, состоящего из трех букв с массивом который я обьявил если он равен, записываю номер месяца.

Добавлено через 2 минуты и 45 секунд
Цитата(NoviceF @ 19.12.2012,  00:54)
а зачем объявлять строки таким образом

Код

char f[]={'f','e','v','\0'};

?
не тоже ли самое
Код

char f[]= "fev";

?

По моему 2й вариант намного нагляднее..

это уже мои глупости... в тетрадке посмотрел как объявляються на первой странице, а дальше только потом увидел... но идея та же? то же самое ведь...
PM MAIL   Вверх
feodorv
Дата 19.12.2012, 01:03 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Igor094 @  19.12.2012,  01:17 Найти цитируемый пост)
помогите может даже не решить

Всё таки давайте попробуем перерешить эту задачу. Ибо 12 штук повторяющихся циклов 
Код
c=0;

for (i=0;i<3;i++)        
{if (u[i]==ja[i])
c++;}
if (c==3)
{for (i=0;i<2;i++)
{poly4[i]=s[i];
poly4[2]='.';}
poly4[3]='0';
poly4[4]='1';
poly4[5]='.';
i=7;
j=0;
while (s[i]!='\0')
{poly4[6+j]=s[i];
i++;
j++;
poly4[8]='\0';}}
 не есть хорошо.

Во-первых, мы знаем, что в формате хх-месяц-хх месяцу отведено три буквы (я правильно понимаю?), а x - это цифры. То есть формат совершенно фиксирован, мы даже можем (заранее) проверить соответствие введённой с клавиатуры строчки этому формату:
Код
bool is_correct( const char str[] )
{
  return isdigit(str[0]) && isdigit(str[1]) && str[2] == '-' && 
            isalpha(str[3]) && isalpha(str[4]) && isalpha(str[5]) && 
            str[6] == '-' && isdigit(str[7]) && isdigit(str[8]);
}


Во-вторых, было бы недурно объединить разрозненные массивы (имён месяцев) в один, тогда можно было бы организовать цикл по месяцам (т.е. избавиться от одного и того же кода, повторенного 12 раз). Это можно сделать по-разному, для простоты восприятия я воспользуюсь таким массивом:
Код
char *mnames[] = { ja, f, mr, ap, ma, jn, jl, av, se, o, n, d };


В сущности, нам же нужно только определить номер месяца, сравнив всего три символа:
Код

int month = 0;
for( int i = 0; i < 12; i++) 
{
  char *m = mnames[i];
  if( m[0] == str[3] && m[1] == str[4] && m[2] == str[5] ){ month = i + 1; break; }
}
if( month == 0 ){ cout << "Unknown month name" << endl; return; }


Теперь можно приступать к переформатированию строчки:
Код

char s[10];
s[0] = str[0];
s[1] = str[1];
s[2] = '.';
s[3] = (month / 10) + '0';
s[4] = (month % 10) + '0';
s[5] = '.';
s[6] = str[7];
s[7] = str[8];
s[8] = '\0';


И последнее - выдача на печать результата:
Код
cout << s << endl;

 smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Igor094
Дата 19.12.2012, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2012

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



Цитата(feodorv @  19.12.2012,  01:03 Найти цитируемый пост)
bool is_correct( const char str[] )
{
  return isdigit(str[0]) && isdigit(str[1]) && str[2] == '-' && 
            isalpha(str[3]) && isalpha(str[4]) && isalpha(str[5]) && 
            str[6] == '-' && isdigit(str[7]) && isdigit(str[8]);
}



жаль мы этого не проходили(


Цитата(feodorv @  19.12.2012,  01:03 Найти цитируемый пост)
char *mnames[] = { ja, f, mr, ap, ma, jn, jl, av, se, o, n, d };


и адреса нельзя использовать иначе на зачете он эту тему мне поднимет...

Добавлено через 1 минуту и 15 секунд
Цитата(feodorv @  19.12.2012,  01:03 Найти цитируемый пост)
c=0;
for (i=0;i<3;i++)        
{if (u[i]==ja[i])
c++;}
if (c==3)
{for (i=0;i<2;i++)
{poly4[i]=s[i];
poly4[2]='.';}
poly4[3]='0';
poly4[4]='1';
poly4[5]='.';
i=7;
j=0;
while (s[i]!='\0')
{poly4[6+j]=s[i];
i++;
j++;
poly4[8]='\0';}}



а по-идее это правильно?
PM MAIL   Вверх
feodorv
Дата 19.12.2012, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Igor094 @  19.12.2012,  02:14 Найти цитируемый пост)
и адреса нельзя использовать иначе на зачете он эту тему мне поднимет...

А массивы - можно??? А что сложного в адресах по сравнению с массивами?

Ну если уж так ломает, то напишите следующее:
Код
int month = 0;
if( str[3] == 'j' && str[4] == 'a' && str[5] == 'n' )
  month = 1;
else if( str[3] == 'f' && str[4] == 'e' && str[5] == 'v' )
  month = 2;
...
 Кстати, на английском имена месяцев звучат не так...


Цитата(Igor094 @  19.12.2012,  02:14 Найти цитируемый пост)
жаль мы этого не проходили(

Напишите самостоятельно:
Код
bool isdigit( char x ) { return x >= '0' && x <= '9'; }
bool isalpha( char x ) { return x >= 'a' && x <= 'z'; }
 какие проблемы?))) А то и распишите начальное условие через эти сравнения.


Цитата(Igor094 @  19.12.2012,  02:14 Найти цитируемый пост)
а по-идее это правильно? 

Понятия не имею  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Igor094
Дата 19.12.2012, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2012

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



Цитата(feodorv @  19.12.2012,  01:29 Найти цитируемый пост)
А массивы - можно??? А что сложного в адресах по сравнению с массивами?


вот этого я пока не знаю(
кстати задача у меня не из-за этого не работает...
ну если мое написанное можно этим назвать)
я не правильно ввожу массив в массив...
 
cin.getline(str,10);
for (i=0; str[i]!=' '||str[i]!='\n'||str[i]!='\0';i++)
s[i]=str[i];

вот этот цикл бесконечен... почему?(
PM MAIL   Вверх
feodorv
Дата 19.12.2012, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Igor094 @  19.12.2012,  02:37 Найти цитируемый пост)
вот этот цикл бесконечен... почему?( 

Из-за "or"-ов. Нужны "and"-ы smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Igor094
Дата 19.12.2012, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2012

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



Цитата(feodorv @ 19.12.2012,  01:40)
Цитата(Igor094 @  19.12.2012,  02:37 Найти цитируемый пост)
вот этот цикл бесконечен... почему?( 

Из-за "or"-ов. Нужны "and"-ы smile

 smile 
Как у нас сразу три условия выполняться ?   smile 

PM MAIL   Вверх
feodorv
Дата 19.12.2012, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Igor094 @  19.12.2012,  02:43 Найти цитируемый пост)
Как у нас сразу три условия выполняться ?

При "and"-ах, да, сразу три.
При "or"-ах достаточно какого-то одного. И даже если у Вас str[i]==' ' (первое условие не выполняется), то выполняется второе и даже третье: ' '!='\n' и ' '!='\0'.

PS Намёк:
Код

!(A || B || C) = !A && !B && !C



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Igor094
Дата 19.12.2012, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2012

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



Цитата(feodorv @  19.12.2012,  01:47 Найти цитируемый пост)
!(A || B || C) = !A && !B && !C

Прокатит? ща посмотрим..

Добавлено через 7 минут и 3 секунды
Цитата(feodorv @ 19.12.2012,  01:47)
Цитата(Igor094 @  19.12.2012,  02:43 Найти цитируемый пост)
Как у нас сразу три условия выполняться ?

При "and"-ах, да, сразу три.
При "or"-ах достаточно какого-то одного. И даже если у Вас str[i]==' ' (первое условие не выполняется), то выполняется второе и даже третье: ' '!='\n' и ' '!='\0'.

PS Намёк:
Код

!(A || B || C) = !A && !B && !C

Блин вообще не катит(
выдает ошибку
1>c:\users\documents\visual studio 2010\projects\8 zakaleb pisat\8 zakaleb pisat.cpp(26): warning C4805: !=: небезопасное смешение типа "char" и типа "bool" в операции

PM MAIL   Вверх
feodorv
Дата 19.12.2012, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Igor094 @  19.12.2012,  02:53 Найти цитируемый пост)
Блин вообще не катит(

Что именно не катит, вот это:
Код
for( i=0; str[i]!=' ' && str[i] != '\n' && str[i] != '\0'; i++) s[i]=str[i];
s[i] = '\0';
???


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Igor094
Дата 19.12.2012, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2012

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



Цитата(feodorv @ 19.12.2012,  05:16)
Цитата(Igor094 @  19.12.2012,  02:53 Найти цитируемый пост)
Блин вообще не катит(

Что именно не катит, вот это:
Код
for( i=0; str[i]!=' ' && str[i] != '\n' && str[i] != '\0'; i++) s[i]=str[i];
s[i] = '\0';
???

а не все норм) спасибо огромное вы мне очень помогли smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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