| 2010-10-13 11:35:27 MrHide Я плохо помню синтаксис и свойства scanf. Поэтому поопасился писать через неё. | ||
2010-10-13 11:36:36
Уж очень этот вариант хитропопый. Я такое на 1-м курсе писал по типу "авось, проканает" ![]() | ||
| 2010-10-13 12:09:46 hockfan насколько я помню остаток от деления (%) принимает только целые операнды, хотя надо смотреть матчасть, чтобы проверить в данном случае действительно можно было просто делить, только имхо лучше было целое брать, т.к. с вещественными числом дольше работа идет Digit=Tmp%10; //выделяем правую цифру для обработки вот эту строку надо было выкинуть, тогда % и не понадобился бы я просто переделывал прогу из предыдущей, в которой использовались сами цифры. | ||
| 2010-10-13 12:11:10 yashchar ну в да, такие подробности я только на спецкурсе рассказывал, если без этого то надо выделять целую часть делением нацело вычитанием получать дробную и умножать ее на 10 пока не достигнем нужного числа позиций. | ||
2010-10-13 12:27:27
А тут хитрый подвох в задании. Можно ли такое целочисленное деление считать библиотечной функцией. Что касается float и иже с ними в первом задании: разумно ли выделять память под переменную float? И подключать математический сопроцессор для работы с действительными числами? | ||
| 2010-10-13 13:03:48 MrHide это лаба) думаю там не так важно что и как используется у процессора)
выкинуть можно не только эту строку) float num=xxx; //число unsigned int cnt=0; //счетчик while(num>=1) {num/=10;cnt++;} yashchar sizeof(float)=sizeof(int) так что без разницы. а по поводу мат сопроцессора и тому подобное) это же лаб, а не перегруженный сервер) | ||
| 2010-10-13 13:09:37 hockfan Вот именно, что лаба. Там могут специально до этого доколупаться. | ||
| 2010-10-13 13:21:18 yashchar ну в условиях нет даже про библиотечные функции по первой задаче, поэтому доколупаться они могут до чего угодно)) поэтому я бы решил именно так как написал) если бы доколупались, что нужно вводить целое число ввел бы целое и сделал каст. в любом случае условия задачи выполнены, если нужно другое решение это уже другое решение и другой лаб. | ||
| 2010-10-13 13:33:14 hockfan Ты прав в том, что важен результат. Но использование float повлияет только на количество строк. Тем более у нас не шарп, где шикарный компилятор, а сишка. Но еще повторю сказангное тобой:
| ||
| 2010-10-13 13:45:38 yashchar ))) ну я бы поспорил про шикарный "компилятор".
не совсем так)) скорее более очевидное и понятное решение даже новичку в этой области)) в общем я просто предложил другое более читаемое решение) успехов) | ||
| 2010-10-13 13:55:30 hockfan Под шикарным понималось то, что он, собака, скомпилирует код быстрее, нежели бы ты писал сразу на ассемблере.
Ты видел код новичков? Там где-то такео было бы: int main () { int a, m, n, p, k; printf ("Input number: "); scanf ("%d", &a); m=a;k=0; while (m!=0) { p=m%10; k++; m=m/10; } printf ("Number of digits:" "%dn", k); | ||
| 2010-10-13 14:10:26 hockfan деление с присваиванием и инкремент насколько я помню это из С++ а тут нужен чистый Си, но это мелочи, по сути алгоритм-то у меня такой же, все остальное - интерфейс юзера, т.к. число нужно ввести и в конце я стараюсь кроме результата выводить еще и исходное число | ||
| 2010-10-13 14:21:39 MrHide утверждать не буду (я сразу учил с++) но в коде на си эти операторы встречались. | ||
2010-10-13 14:23:54
Никогда. Это был код, написанный под с++ компилятор. Если ты сразу учил С++, то должен был читать Стауструпа, он там подробно это расписывает | ||
2010-10-13 14:26:32
| ||
2010-10-13 14:28:30
| ||
| 2010-10-13 14:30:09 hockfan Черт, не поленюсь дома перечитать свой талмуд. Что за ерунда... | ||
| 2010-10-13 14:31:58 вот еще хорошая ссылка http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B | ||
| 2010-10-13 14:36:30 yashchar вообще нет желания спорить на подобные темы, я лишь показал, что это не так очевидно как ты написал предыдущим постом. Ничего более. | ||
| 2010-10-13 14:40:45 hockfan Эм... Да я согласен с твоими утверждениями. Я вот недоумеваю, где и как я облажался с префиксными и постфиксными операторами на сишке? Стыдобища получается. Неужто с перегрузкой перепутал. Надо учить матчасть. Что самое интересное - ведь в "родном" пыхапе это присутствует. И как я мог забыть? | ||
| 2010-10-13 14:51:42 yashchar да ладно, это вообще того не стоит на самом деле. У самого каша в голове от разных языков. а вот про вторую задачку я вообще сделал бы вот так (уж простите грешного): float x=число; int y; тогда целая часть: y=(int)x; а дробная x-=y; | ||
| 2010-10-13 15:13:52 hockfan я про это и писал, но
даст 0.xxxxx а нужно получить просто xxxxxx я потому и писал что этот x надо домножать на 10 до нужного количества знаков | ||
| 2010-10-13 15:16:06 хм, в условиях вроде про это не написано. хотя может что-то упустил. | ||
| 2010-10-13 15:18:55 hockfan гм ну если не нужно переводить в число тогда проще | ||
| 2010-10-13 15:23:12 да, кстати, Страуструпп - это хорошо, но его не всегда понимает неподготовленный читатель. Я всегда рекомендую Г. Шилдт "Полный справочник по С++" (первая глава посвящена чистому Си) и он же, если нужно "Полный справочник по С" на мой взгляд наиболее доступное и полное изложение | ||
| 1 | 2 | 3 |