помощь на контре


гильдия Собиратели (Адепт)[2425] _ПеСеЦ_ Информация
Назад к темам раздела.
2010-10-13 11:35:27 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
MrHide
Я плохо помню синтаксис и свойства scanf. Поэтому поопасился писать через неё.
 
2010-10-13 11:36:36 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
MrHide писал(а):
такой специфический вариант

Уж очень этот вариант хитропопый. Я такое на 1-м курсе писал по типу "авось, проканает"
 
2010-10-13 12:09:46 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
hockfan
насколько я помню остаток от деления (%) принимает только целые операнды, хотя надо смотреть матчасть, чтобы проверить
в данном случае действительно можно было просто делить, только имхо лучше было целое брать, т.к. с вещественными числом дольше работа идет

Digit=Tmp%10; //выделяем правую цифру для обработки
вот эту строку надо было выкинуть, тогда % и не понадобился бы
я просто переделывал прогу из предыдущей, в которой использовались сами цифры.
 
2010-10-13 12:11:10 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
yashchar
ну в да, такие подробности я только на спецкурсе рассказывал,
если без этого то надо выделять целую часть делением нацело вычитанием получать дробную и умножать ее на 10 пока не достигнем нужного числа позиций.
 
2010-10-13 12:27:27 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
MrHide писал(а):
если без этого то надо выделять целую часть делением нацело

А тут хитрый подвох в задании. Можно ли такое целочисленное деление считать библиотечной функцией.

Что касается float и иже с ними в первом задании: разумно ли выделять память под переменную float? И подключать математический сопроцессор для работы с действительными числами?
 
2010-10-13 13:03:48 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
MrHide
это лаба) думаю там не так важно что и как используется у процессора)
MrHide писал(а):
Digit=Tmp%10; //выделяем правую цифру для обработки
вот эту строку надо было выкинуть, тогда % и не понадобился бы

выкинуть можно не только эту строку)

float num=xxx; //число
unsigned int cnt=0; //счетчик
while(num>=1) {num/=10;cnt++;}

yashchar
sizeof(float)=sizeof(int)
так что без разницы. а по поводу мат сопроцессора и тому подобное) это же лаб, а не перегруженный сервер)
 
2010-10-13 13:09:37 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
hockfan
Вот именно, что лаба. Там могут специально до этого доколупаться.
 
2010-10-13 13:21:18 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
yashchar
ну в условиях нет даже про библиотечные функции по первой задаче, поэтому доколупаться они могут до чего угодно))
поэтому я бы решил именно так как написал) если бы доколупались, что нужно вводить целое число ввел бы целое и сделал каст.

в любом случае условия задачи выполнены, если нужно другое решение это уже другое решение и другой лаб.
 
2010-10-13 13:33:14 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
hockfan
Ты прав в том, что важен результат. Но использование float повлияет только на количество строк. Тем более у нас не шарп, где шикарный компилятор, а сишка.

Но еще повторю сказангное тобой:

hockfan писал(а):
в любом случае условия задачи выполнены

 
2010-10-13 13:45:38 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
yashchar
))) ну я бы поспорил про шикарный "компилятор".


yashchar писал(а):
Но использование float повлияет только на количество строк.

не совсем так)) скорее более очевидное и понятное решение даже новичку в этой области))

в общем я просто предложил другое более читаемое решение) успехов)
 
2010-10-13 13:55:30 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
hockfan
Под шикарным понималось то, что он, собака, скомпилирует код быстрее, нежели бы ты писал сразу на ассемблере.

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 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
hockfan
деление с присваиванием и инкремент насколько я помню это из С++ а тут нужен чистый Си, но это мелочи,
по сути алгоритм-то у меня такой же, все остальное - интерфейс юзера, т.к. число нужно ввести и в конце я стараюсь кроме результата выводить еще и исходное число
 
2010-10-13 14:21:39 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
MrHide
утверждать не буду (я сразу учил с++) но в коде на си эти операторы встречались.
 
2010-10-13 14:23:54 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
hockfan писал(а):
но в коде на си эти операторы встречались.

Никогда. Это был код, написанный под с++ компилятор. Если ты сразу учил С++, то должен был читать Стауструпа, он там подробно это расписывает
 
2010-10-13 14:26:32 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
Страуструп писал(а):
Напомним, что операции инкремента и декремента указателя эквивалентны сложению 1 с указателем или вычитанию 1 из указателя, причем вычисление происходит в элементах массива, на который настроен указатель. Так, результатом p++ будет указатель на следующий элемент. Для указателя p типа T* следующее соотношение верно по определению:

long(p+1) == long(p) + sizeof(T);
Чаще всего операции инкремента и декремента используются для изменения переменных в цикле. Например, копирование строки, оканчивающейся нулевым символом, задается следующим образом:

inline void cpy(char* p, const char* q)
{
while (*p++ = *q++) ;
}
Язык С++ (подобно С) имеет как сторонников, так и противников именно из-за такого сжатого, использующего сложные выражения стиля программирования. Оператор

while (*p++ = *q++) ;
вероятнее всего, покажется невразумительным для незнакомых с С. Имеет смысл повнимательнее посмотреть на такие конструкции, поскольку для C и C++ они не является редкостью.
 
2010-10-13 14:28:30 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
Гугл писал(а):
Название придумал Рик Мэсчитти. Термин С++ — это оператор инкремента в С, который как бы намекает на то, что язык С++, нечто больше, чем просто «Си».
 
2010-10-13 14:30:09 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
hockfan
Черт, не поленюсь дома перечитать свой талмуд. Что за ерунда...
 
2010-10-13 14:31:58 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
вот еще хорошая ссылка
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
 
2010-10-13 14:36:30 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
yashchar
вообще нет желания спорить на подобные темы, я лишь показал, что это не так очевидно как ты написал предыдущим постом. Ничего более.
 
2010-10-13 14:40:45 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
hockfan
Эм... Да я согласен с твоими утверждениями. Я вот недоумеваю, где и как я облажался с префиксными и постфиксными операторами на сишке? Стыдобища получается. Неужто с перегрузкой перепутал. Надо учить матчасть. Что самое интересное - ведь в "родном" пыхапе это присутствует. И как я мог забыть?
 
2010-10-13 14:51:42 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
yashchar
да ладно, это вообще того не стоит на самом деле. У самого каша в голове от разных языков.

а вот про вторую задачку я вообще сделал бы вот так (уж простите грешного):
float x=число;
int y;
тогда целая часть:
y=(int)x;
а дробная
x-=y;
 
2010-10-13 15:13:52 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
hockfan
я про это и писал, но
hockfan писал(а):
x-=y;

даст 0.xxxxx
а нужно получить просто xxxxxx

я потому и писал что этот x надо домножать на 10 до нужного количества знаков
 
2010-10-13 15:16:06 гильдия Мудрецы (Новичок)[76] гильдия Собиратели (Грандмастер)[42512] hockfan Информация
хм, в условиях вроде про это не написано. хотя может что-то упустил.
 
2010-10-13 15:18:55 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
hockfan
гм ну если не нужно переводить в число тогда проще
 
2010-10-13 15:23:12 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
да, кстати, Страуструпп - это хорошо, но его не всегда понимает неподготовленный читатель.
Я всегда рекомендую
Г. Шилдт "Полный справочник по С++" (первая глава посвящена чистому Си)
и он же, если нужно "Полный справочник по С"

на мой взгляд наиболее доступное и полное изложение
 
123