![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| N0rd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.10.2004 Где: Карелия,Петрозаво дск Репутация: нет Всего: нет |
Помогите пожалуйста с реализацией программы на С.
Начну с небольшого рассказа о себе(может это и лишнее).Я студент первого курса Петрозаводского гос университета(р. Карелия).Специальность прикладная математика и информатика.В школе програмированию учили плохо, тока бейсику(у учительницы уходила неделя чтобы проверить программу в пять строк А вот собственно с чем мне нужно помочь. Преобразовать введенную строку в число и введенное число в строку. Функции форматных преобразований использовать для преобразования запрещается (printf, atof etc.) Реализация на С. Только вот о чём вас попрошу.Не надо выкладывать готовое решение(весь исходный текст).Пока что время у меня ещё до сдачи есть и я хочу сам хоть до чего нибудь дойти.Помогите с теоритеческими подсказками.Я пока что не понимаю даже суть этого задания. Буду надеятся что вы не пройдёте стороной и поможете своему младшему брату програмеру(пока что чайнику |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
N0rd
Для начала: Берёшь массив типа char в 100 элементов. Берёшь переменную p типа int и присваиваешь ей значение 0. Дальше, когда я говорю, что мы что-то добавляем к строке -- это означает, что мы записываем в этот массив символ по индексу p и увеличиваем p на единицу. Чтобы добавить цифру z к массиву, тебе нужно записать в массив код её символа а его можно получить очень просто: z - '0'. Где в одинарных кавычках стоит ноль. Если нужно число в строку: 1. смотрим отрицательное оно или нет: если отрицательное добавляем к строке "-" 2. берём модуль целой части числа ( если был float или double, то просто приводим к int ) и дальше работаем с ним. Присвоим его переменной x. 2А. если он равен 0, то переходим к пункту 3. 2Б. считаем десятичный логарифм ( функция log10 ) и его округляем вниз до целого -- это будет на единицу меньше числа знаков целой части. Дальше берём 10 и возводим в эту степень (именно в целую степень, т.е. если логарифм был 6.78, то 10 нужно возвести в 6-ю степень). В степень можно возводить простым перемножением 2В. делим x на t. Получаем однозначное число d. Добавляем его к строке. Важно! И x и t должны быть типа int, чтобы d получилось целое. Иначе тебе его тоже прийдётся приводить к целому, чтобы получилась одна цифра. 2Г. x = x - t*d. Тем самым избавляемся от старшей цифры. 2Д. если x равно 0, то всё -- с целой частью закончили, иначе делим t на 10 и возвращаемся к шагу 2В 3. берём дробную часть ( из числа вычитаем целую часть, которую, кстати, нужно получить снова, так как в x у нас теперь 0 ) 4. если дробная часть 0, то можно радоваться -- всё готово, иначе продолжаем. 5. добавляем к строке точку (или запятую, кому как нравится Вот с дробной мне уже некогда тут расписывать -- на работу пора идти, а в принципе там, наверно, что-то похожее Правильность и оптимальность, кстати, не гарантирую. Придумывал на ходу Алгоритм преобразования строки в число тоже довольно прост. Сначала нужно определить величину этого числа, просто посчитав количество цифр до точки. Дальше нужно по одной цифре брать из массива, домножать на 10 в некоторой степени и суммировать -------------------- Да. Именно так. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Дрон
А почему со СТАРШЕЙ цифры? 1) Разбираем число на запчасти
2) Преобразуем в строку
Аналогично обратно... Вот только что делать с ошибками преобразования типов? PS. Из Барсика в Си переваришь поди... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Вот такую работу со строками в Си не очень удобно реализовывать. А вот с дробной частью как раз так, как ты написал и надо ЗЫ: На работу решил позже пойти Это сообщение отредактировал(а) Дрон - 25.10.2004, 09:17 -------------------- Да. Именно так. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Дрон
Это сообщение отредактировал(а) Akina - 25.10.2004, 11:14 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Добавлять символ к строке -- вот, что сложно
-------------------- Да. Именно так. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Дрон
ну рассматривать строку аки массив байтов и держать еще текущий указатель... да мелочи это все... вот что делать если имеет место нечто вроде: x=1.1 Sign(x)=1 Re(x)=1 Im(x)=0.099999999996 вот вопрос.... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| po-her |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
нас учили так!!!
1.читаем посимвольно строку. 3.Проверяем на десятичную точку, если она есть то присваиваем переменной-показателю 1 если нет 0. 3.1 Если эта переменная уже единица то к переменной int начинаем прибавлять единицы (показатель степени) 4.из прочитанного символа вычитаем ASCII код нуля... 5.прибавляем это к переменной типа double и в 6.Эту переменную умножаем на 10. И так до конца строки. В конце vозвращаем ту переменную к которой прибавляли числа (double), поделенную на 10 в степени, а именно степень=тому числу к которому мы прибавляли единичке после нахождения точки... Вороде Все... |
|||
|
||||
| N0rd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.10.2004 Где: Карелия,Петрозаво дск Репутация: нет Всего: нет |
Всем большое спасибо за помощь!!!
Отличный здесь форум. Прогу писать буду наверно попозже,сначала надо бы книжку прикупить с описанием функций и т.д.Может посоветуете какую книгу для начинающего по С( не ++). |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
N0rd
Всегда рады помочь Насчёт книг -- есть здесь на форуме раздел: Начинаем изучение С/С++ Может там чего-нибудь найдёшь Это сообщение отредактировал(а) Дрон - 26.10.2004, 21:26 -------------------- Да. Именно так. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |