|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.05.2008, 16:33 | #1 |
Ворон-мститель
Пользователь
Регистрация: 26.05.2008
Сообщений: 24
|
С++.Задача на строки.Помогите найти ошибки
Задача такая :
Ввести строку, в которой есть bin код числа ( с возможными пропусками ). Определить и напечатать значение числа в 10-й системе. Включить то, что в строке будет введеныи другие символы. У меня получилось примерно вот что: правда в институте два часа назад почти все шло,а дома вообще делать ничего не хочет. Помогите пожалуйста нати ошибки, а то плакала моя стипуха #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <math.h> #define size 60 void main () Код:
Бог умер. Воскрес и мстит.
Последний раз редактировалось NamelessEndless; 26.05.2008 в 17:12. |
26.05.2008, 16:52 | #2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Где инициализируется переменная j? Зачем здесь atoi, если задание состоит в том, чтобы реализовать именно её и с чего Вы взяли, что она превратит в нужное число двоичную, а не десятичную его запись? Зачем, наконец, pow, если возведение двойки в степень реализуется сдвигом? И оформляйте листинги тэгом CODE.
|
26.05.2008, 17:08 | #3 |
Ворон-мститель
Пользователь
Регистрация: 26.05.2008
Сообщений: 24
|
Уфф, вы меня так вопросами умными не заваливайте,сего лишь эту С++ месяц учу. )))
1)Проинициализировала вроде...Программа сама запускается, но дома вообще ничего не выводит,все виснет.На другом компе переводило, но не все. 2) atoi - преобразует строкув знаение типа int. А если я не переведу, то как я потом в 10-й код буду переводить?О_о.. 3)в сдвигах я путаюсь, а с pow легче. Бог умер. Воскрес и мстит.
|
26.05.2008, 17:17 | #4 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
atoi переводит в число десятичную запись, а у Вас - двоичная. Уберите её, не нужна она здесь. А число образуется последовательной выборкой нулей и единиц из того массива, что Вы заполнили и возведением их (за вычетом символа '0', разумеется) в степень (сразу говорю, это - самый неоптимальный вариант)
|
26.05.2008, 17:25 | #5 | |
Ворон-мститель
Пользователь
Регистрация: 26.05.2008
Сообщений: 24
|
Цитата:
Я же не буду единицу в степень сунуть.Мне ее вроде надо на 2 в степени умножить. Если например у меня число 1010, то 1*2(в степени3) + 1*2(в степени 1).. И еще,я ше не буду сhar умножать на 2.. Ничего не понимаю,совсем запуталась.... То есть, допустим: я ввела 10ывапфы10, Если все равботает верно, в новом массиве, типу сhar ,окажутся 1010. Потом я это перевожу именно в число,а не в строку. И потом с этого числа уже беру 1 и умножаю их на 2 в степени. Бог умер. Воскрес и мстит.
|
|
26.05.2008, 18:06 | #6 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Тот случай, когда быстрее написать
Код:
|
26.05.2008, 23:18 | #7 |
Ворон-мститель
Пользователь
Регистрация: 26.05.2008
Сообщений: 24
|
О_о..Неужели все было так просто(ну,для вас просто..))..А я ,... кгм, лана не буду себя обижать.Огромное вам спасибо
А можно еще вопрос *извините, но просто я после нормативов несоображающая* : почему в нас размер строки задан 256, а в цикле пишет пока не 32 ?О_о..И ..Я еще не совсем понимаю сокращения, вот здесь if (i) result <<= 1; result |= (*p - '0'); что делается? А то я оооочень примерно понимаю.. Бог умер. Воскрес и мстит.
|
26.05.2008, 23:42 | #8 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
256 задано "про запас". строки вообще очень не рекомендуется вводить через scanf, для этого больше подходит fgets. К 32-м это 256 не имеет никакого отношения, 32 - это разрядность типа long, который имеет переменная result, которую мы постепенно сдвигаем вверх. Это ограничение не даст "вылезти" за пределы её разрядности. Объяви я result как short, пришлось бы ограничивать шестнадцатью. "<<= 1" это сдвиг влево на один разряд (умножение на два) с последующим присвоением результата, "result |= (*p - '0')" - двоичное ИЛИ с текущим разрядом строки, вернее с тем, что получается после вычитания символа '0' из текущей цифры - числа 0 или 1.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужна срочная помощь немогу найти свои ошибки | delphin100 | Общие вопросы Delphi | 3 | 03.06.2008 08:38 |
найти сумму элементов строки | jenja | Общие вопросы Delphi | 2 | 02.04.2008 17:49 |
Задача на строки!! Помогите, плиз) | Кasa | Помощь студентам | 4 | 03.03.2008 11:26 |
помогите найти причину ошибки! | НиКС | БД в Delphi | 3 | 10.05.2007 15:55 |
С++ Найти самое длинное слово строки | k0z7_g0b1in | Общие вопросы C/C++ | 3 | 22.04.2007 17:37 |