Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

WinCity.Ru _ Программирование _ перевод числа из 10 сист счисления в двоичную

Автор: shplint Среда, 23 Января 2008, 14:07

Помогите пожалуйста написать алгоритм перевода числа из 10-ой с.с. в 2-ую с.с. Язык Си.

Автор: Квазимодо Среда, 23 Января 2008, 15:32

Число в десятичной системе целое или с дробной частью?

Автор: Админ Среда, 23 Января 2008, 15:39

Не, ну до чего люди ленивые пошли. Пользоваться поиском в интернете им не позволяет религия.

shplint, уважаемый. Ну неужели так сложно найти в интернете алгоритм первода чисел из одной системы в другу.
Вот вам один из алгоритмов - http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0#.D0.9F.D1.80.D0.B5.D0.BE.D0.B1.D1.80.D0.B0.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B4.D0.B5.D1.81.D1.8F.D1.82.D0.B8.D1.87.D0.BD.D1.8B.D1.85_.D1.87.D0.B8.D1.81.D0.B5.D0.BB_.D0.B2_.D0.B4.D0.B2.D0.BE.D0.B8.D1.87.D0.BD.D1.8B.D0.B5
Или вы ждете что вам дадут готовое решение, прямо на нужном вам языке? А самому головой подумать слабо? Или вы так загружены выполнением заказов на написание лабораторных на "ANSI C", о которых вы здесь несколько раз пытались дать объявление, что головой думать недосуг?

Автор: shplint Среда, 23 Января 2008, 16:19

Да я загружен, да + еще к экзамену готовлюсь...И ты тут ссылку написал, ты хоть смотрел че там? Или ты думаешь что я на бумаге не умею переводить числа в другие с.с.?

Автор: Админ Среда, 23 Января 2008, 20:30

shplint,

Цитата(shplint @ Сегодня, 17:19)
И ты тут ссылку написал, ты хоть смотрел че там?

конечно я видел что там - "системы счисления для чайников". Просто и доступно.
Цитата(shplint @ Сегодня, 17:19)
Или ты думаешь что я на бумаге не умею переводить числа в другие с.с.?
А вот как раз складывается такое впечатление. Если на бумаге все понятно, и вы, следуя определенному алгоритму, можете выполнить эти действия на бумаге, то ЧТО ЖЕ ВАМ МЕШАЕТ НАПИСАТЬ ТОЖЕ САМОЕ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ? Лень? Или хотите сделать свой труд чужими руками?

И еще, я бы попросил вас, проявить все-таки немного уважения, мы с вам на ТЫ не переходили. И вместо того, чтобы бить себя пяткой в грудь, лучше ответьте на вопрос
Цитата(Квазимодо @ Сегодня, 16:32)
Число в десятичной системе целое или с дробной частью?

Автор: Archangel Среда, 23 Января 2008, 23:00

//поправил

Код

main()
{
int  b, c,n,m,y;
long int x, a;
printf ("Vvedite chislo v 10 sisteme s4isleniya :\n");
scanf ("%d", &a);
m=2;
x=0;
c=1;    
while (n>0)
{
n=a/m;
y=a%m;
if(y!=0)
{y=1;
}
b=(y)*c;
c=c*10;
a=a/m;
x=b+x;
}
printf ("Eto 4islo v 2 sisteme s4isleniya = %u ", x);
getch();
}

Автор: shplint Четверг, 24 Января 2008, 11:37

Archangel, спасибо большое очень помог мне! Ты проверил его работоспособность? если что, у меня этот алгоритм не работает

Автор: shplint Четверг, 24 Января 2008, 11:43

Админ, на вашем форуме как-то не очень развивается раздел программирования. Хотелось бы чтобы его пропаганда велась более активным образом. Поставьте задачу своим модераторах, они конечно неплохо следят за сообщениями на форуме, но тема программирования вообще не развивается и факт...

Автор: Барэль Четверг, 24 Января 2008, 11:54

Цитата(shplint @ Сегодня, 12:43)
Поставьте задачу своим модераторах

w00t.gif Партия сказала "НАДО!" - Комсомол ответил "ЕСТЬ!"

А каким образом предполагается его развивать? Устроить рок-концерт в поддержку раздела Программирование? band.gif

Автор: shplint Четверг, 24 Января 2008, 12:04

Барэль, над этим вопросом надо немножко подумать, но вполне понятно что этот раздел развивать нужно. К примеру можно, по примеру одного из сайтов, сделать темку для написания небольших статей(программок) о том какие хитрости можно провернуть со своим или чужим компьютером, влядея некоторыми приемами. Но этим должен заниматься человек шарящий в этом+это не должно противоречить УК РФ.

Автор: Барэль Четверг, 24 Января 2008, 16:54

shplint, если хочешь - займись. Я уже устал писать, что авторство приветствуется.

Автор: Archangel Четверг, 24 Января 2008, 17:16

Цитата
Ты проверил его работоспособность?

косяки начинаются если ты вводишь число больше 30 (в 10ссч)
Потому что вывод единичек и нулей вревышает 5 знаков.
Как поправить думаю догадаешься wink.gif

PS int не в состоянии выдать 6-и значное число )

Автор: shplint Четверг, 24 Января 2008, 19:10

Этот алгоритм вообще неправильный, че-то он какой-то муторный у тебя и если честно я его непонял, конечно я еще зеленый в программировании. Но я считаю, что он слишком запутанный и вообще неправильный. Токо не обижайся...

Автор: shplint Четверг, 24 Января 2008, 19:54

Вот он правильный алгоритм, написал его потратив чуть больше 20 минут. Появилось настроение и желание и все быстренько сделал. Админ, вот видишь справился, после того как подумал...Правда в этом алгоритме надо еще поменять в массиве А последовательность чисел на обратную, ну это я додумаю.

int main(int argc, char* argv[])
{ static int i;
int chislo,ost,chastnoe,A[100],size;
const int osn=2;
printf("enter number");
scanf("%d",&chislo);

do
{ chastnoe=chislo/osn;
ost=chislo%osn;
{A[i]=ost;i++;}
chislo=chastnoe;

}
while (chastnoe>osn);
size=i;
for (i=0;i<size;i++)
printf("%d",A[i]);

getch();

Автор: Archangel Четверг, 24 Января 2008, 23:38

Ну знаешь, одно единственного "правильного" алгоритма не существует biggrin.gif
Кому как больше нравится, тот так и пишет.
Я не считаю, что написанный мною, является не верным.

Впринципе особой разницы не вижу, кроме реализации массива для вывода поштучно символов rolleyes.gif

Автор: shplint Пятница, 25 Января 2008, 16:26

У нас сегодня парню на экзамене одна из задач досталась такая, он сидел 3 часа и не смог вообще ничего написать по ней... Сам я однако тоже оплошал на 3 сдал, ощущение хреновое, мне с первой задачей неповезло.
Дан строковый массив, программа должна отслеживать появление лишних пробелов и удалять их. Выложите свои идеи и алгоритмы. А я в свою очередь выложу, что я на экзамене наработал по этой программе.

Автор: Админ Пятница, 25 Января 2008, 18:44

shplint, поподробней постановку задачи можно?

Что представляет из себя заданный массив? (Массив, слов, или групп слов, т.е. заполнен ли он уже, как заполнен, и есть ли там пробелы?)
Как могут появиться новые данные в этом массиве.
Критерий определения того, что пробел является лишним, как и где он появляется?
Требования к интерфейсу.

Автор: shplint Пятница, 25 Января 2008, 19:34

Опишу, насколько помню. Программа считывает текст из текстового файла на консоль, текст представляет собой слова на англиском языке, разделенные знаком пробела, и если в тексте слова разделены не одним пробелом а двумя, то программа должна удалить лишний пробел. тип элемнтов массиве соответственно char, текст мы можем вводить и непосредственно с консоли, главное чтобы работал алгоритм.Интерфейс программы самый простой, не нужно ничего лишнего, я бы сказал об отсутствии интерфейса... Думаю теперь все понятно с формулировкой задачи.
В свое оправдание скажу, что не сделал по причине отсутствия опыта работы с текстовыми данными и незнанием и неумением применить функции для тестового массива, надо исправляться.

Автор: shplint Воскресенье, 27 Января 2008, 0:04

Админ, как продвигается решение этой задачки или решение стоит на месте мертвым грузом?

Автор: Админ Понедельник, 28 Января 2008, 10:58

shplint, Я не понимаю вас. При наличии времени, вы сами до сих пор не разобрались как это решается? Или вы хотить узнать смогу ли я решить эту задачу и приведу вам готовое решение?
Я смогу, но писать код special for you не намерен.

Исходя из условия задачи, массив тут совершенно не нужен, т.к. исходные данные находятся в файле, читаются из него, удаляются лишние пробелы и выводятся на консоль. Алгоритм будет примерно следующим:

Код
1. открыть текстовый файл для чтения.
2. пока файл не прочитан полностью повторять:
3.    считать из файла в переменную типа String строку
4.    в цикле, пока в строке есть можно найти 2 пробела повторять:
5.        заменить в строке 2 пробела на 1
6.    вывести обработанную строку на экран.
7. закрыть текстовый файл.

Для ввода с клавиатуры я думаю алгортм переделать не сложно.
Соверую вам почитать про работу с текстовами файлами.

Автор: shplint Понедельник, 28 Января 2008, 16:34

Админ это все понятно, но мне непонятно как сдвинуть строку на 1 позицию назад. Подскажи хороший сайт где объяснены функции работы со строками, пожалуйста. В поисковике я искал, мало что нашел хорошего... А алгоритм ты точно не можешь написать, это стопроцентов. И если бы ты написал его то это было бы нетолько для меня, а для всех посетителей этого форума, тебе так не кажется? Если ты соображал бы, то тебе это как 2 пальца, а не вондосил бы тут... вся фишка в этой программе чтобы сдвинуть строку после того как компилятор нашел второй проел на 1 позицию назад.
И для начала можно сделать без чтения данных из файла.

Автор: Админ Понедельник, 28 Января 2008, 19:37

shplint, Алгоритм как раз написан, и написан вполне нормально, и тот, у кого есть хоть капля соображалки и способности абстрагироваться от "компилятора, который что-то ищет" (smile.gif так и хочется сказать находит, и перепрятывает - учите матчасть, уважаемый, чем занимается компилятор), способен его понять и реализовать.

Для тех же кто в танке, или у кого запас своих мозгов неожиданно закончился, объясняю - можно обойтись и без сдвигов, если рассматривать текстовую строку не как массив символов, а именно как строку (паскалевский тип String)
В этом случае можно пользоваться функциями работы со строками. Т.к. в стандартном паскале нет функции замены (что в принципе не правильно), то аналог такой функции придется писать самому. Для ленивых и немощных, привожу ее текст и пример использования:

Код

function StrReplace(const Source, Pattern, Value: String): String;
var
  Result: String;
  i: Integer;
begin
  Result := Source;
  i := pos(Pattern, Source);
  while i > 0 do
  begin
     Delete(Result, i, Length(Pattern));
     Insert(Value, Result, i);
     i := pos(Pattern, Result);
  end;
  StrReplace := Result;
end;

begin
   writeln(StrReplace('123__123__123','__','_'));
end.

Правда необходимо помнить про ограничение на длину строк при работе с этими функциями - 255 символов

Автор: Админ Понедельник, 28 Января 2008, 19:51

Кстати, можно вообще обойтись без всяких функций, строк, сдвигов и удалений. Для этого исходные данные нужно обрабатывать на этапе их получения посимвольно и запоминать предыдущий прочитанный символ. Если и текущий и предыдущий символы - это пробелы, то текущий просто не заносить как прочитанный.

Алгоритм smile.gif

Код

1. Пока не прочитаны все строки выполнять:
2.    Сбросить запомненный символ (т.к. мы в начале очередной строки)
3.    Пока в очередной читаемой строке есть символы, выполнять:
4.       Считать очередной символ
5.       Стравнить его с предыдущим запомненным и если они оба не равны пробелу, то
               предыдущий := текущий,  
               а сам текущий занести в результирующий массив;
6.       Повтрять шаги 4,5 пока не закончится строка
7.    Перейти к на следующую строку и выполнить заново шаг с 1 по 7.
8.    Вывести весь "прочитанный" массив


При таком алгоритме - все лишние пробелы пропускаются на этапе чтения (ввода с клавиатуры) данных.

Автор: Админ Понедельник, 28 Января 2008, 20:03

Цитата(shplint @ Сегодня, 17:34)
Если ты соображал бы, то тебе это как 2 пальца, а не вондосил бы тут... вся фишка в этой программе чтобы сдвинуть строку после того как компилятор нашел второй проел на 1 позицию назад.

smile.gif Ну, что тут можно сказать, если бы кто-то соображал, то он бы решил эту задачу еще на экзамене, а не ждал бы "маны небесной" от кого-то другого. Да и проблемы реализовать сдвиг массива я вообще никакой не вижу (кроме неоптимальности этих действий). Для этого нужно с позиции лишнего пробела +1 пробежаться весь массив до конца и
присваивать что-то типа a[i] := a[i-1];
Кстати можно массив не сдвигать - а забивать лишние пробелы символом #0, а при выводе на экран - такие элементы массива не выводить.
Цитата(shplint @ Сегодня, 17:34)
Подскажи хороший сайт где объяснены функции работы со строками, пожалуйста.
А чем стандартный хелп не устраивает? Там даже примеры есть. Ну или можешь скачать какой-нибудь самоучитель или купить книгу (правда не знаю есть ли сейчас книги по паскалю)

Автор: pan Вторник, 29 Января 2008, 13:37

Цитата
А алгоритм ты точно не можешь написать, это стопроцентов. И если бы ты написал его то это было бы нетолько для меня, а для всех посетителей этого форума, тебе так не кажется? Если ты соображал бы, то тебе это как 2 пальца, а не вондосил бы тут...

shplint, давайте будем аккуратней на поворотах. Вы - автор топика и вы задали вопрос. Так что в первую очередь ответ нужен вам. А про остальных пользователей побеспокоимся мы.

Если не секрет, на какой специальности учитесь?

Автор: shplint Вторник, 29 Января 2008, 14:14

"Вычислительные машины, комплексы, системы и сети"

Автор: Барэль Вторник, 29 Января 2008, 14:19

shplint, а тебе надо подсказку в решении или решение? Если первое, то Админ по-моему уже дал их штук 5. Если второе, то тут я поддержу Админа и скажу "думай сам". Потом в жизни тоже будешь сваливать на дядю Ваню?

Цитата(shplint @ Сегодня, 15:14)
Вычислительные машины, комплексы, системы и сети

w00t.gif фигасе... Коллеги чтоль...

Автор: shplint Вторник, 29 Января 2008, 19:58

Барэлб, ты несказанно рад этому... biggrin.gif
А алгоритм сам сделаю, когда экзамены сдам и можно будет заняться изучением строковых функций!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)