IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

3 страниц V < 1 2 3 >  
 Ответить  Открыть новую тему 
> Вычисление арифметического выражения, Задачка на СИ
сообщение
Сообщение #21


Гость






Цитата
Точность представления типа float в стандартной архитектуре x86 не превышает 8 знаков
Я думаю, не будет лишним знать при сдаче работы, как рассчитывается количество значащих цифр smile.gif

Начинаем с float. Для 24 бит экспоненты мантиссы точность составляет [log10(224)] = 7 знаков. У двойной точности (double) - 53 бита в мантиссе, отсюда получаем 15 значащих цифр (почти 16, но все-таки до 16 чуть-чуть не дотягивает). Можно также использовать расширенную точность, (long double) с мантиссой из 64 бит, там будет уже 19 значащих цифр...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Сказать всем большое спасибо - значит ничего не сказать! Поражаюсь, как можно столько знать? good.gif
А путаница в моей голове из-за того, что не успел еще Паскаль совсем выветриться. yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Провинциалка @ 12.04.2011 23:25) *
не успел еще Паскаль совсем выветриться. yes2:

??? не допускай этого. НИКАКОЕ знание НЕ ЛИШНЕЕ.
Паскаль и Си могут прекрасно дополнять друг друга.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Уважаемые! Добрый вечер!
Вот никак не получается доделать программу второго задания. Не могу понять как прописать условия второго и третьего пунктов. Подскажите, пожалуйста.

#include <iostream.h>
#include <math.h>
#include <conio.h>
int main()
{
int m,n,S1,S2;
cout<<"Zadanie pervoe:\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
S1=--m-++n;
cout<<"S1="<<S1<<endl;

cout<<"\n Zadanie vtoroe\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
S2=m*n;
cout<<"S2="<<S2<<endl;
cout<<"n++ ="<<n++<<endl;
???????????????????????????????
cout<<"\n Zadanie tretye\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
cout<<"n-- ="<<n--<<endl;
cout<<"m++ ="<<m++<<endl;
?????????????????????????????????
getch();
}


Сообщение отредактировано: Провинциалка -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Провинциалка @ 23.04.2011 16:39) *
Не могу понять как прописать условия второго и третьего пунктов. Подскажите, пожалуйста.

Я не совсем понимаю, что тебя затрудняет.
Почему нельзя просто скопировать из задания?

Добавлено через 11 мин.
а, ясно, кажется.. туплю )
Вам, похоже, не объяснили, что является результатом сравнения.
В Паскале есть особый логический тип. Если ты попробуешь напечатать что-то типа 1<2, то ты увидишь на экране слово TRUE (или FALSE, если 1>2, например). Попробуй сама это сделать. В Си нет особого логического типа. Там истина выражается числом 1, а ложь - числом 0. Соответственно, если ты будешь печатать 1>2, то выйдет 0, а если -2<2, то 1.
Так что просто копируй из задания (как в первом пуекте делала).
Я правильно понял твой вопрос?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  2  +


Цитата
Не могу понять как прописать условия второго и третьего пунктов
Третий пункт, так как он записан в doc файле, компилироваться не будет, это нарушает синтаксис С/С++. Уточни, действительно ли там нужны все пробелы, или это опечатка в задании?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Цитата
Третий пункт, так как он записан в doc файле, компилироваться не будет, это нарушает синтаксис С/С++. Уточни, действительно ли там нужны все пробелы, или это опечатка в задании?

Да, там действительно опечатка.
И вот что я сотворила: wub.gif
#include <iostream.h>
#include <math.h>
#include <conio.h>
int main()
{
int m,n,S;
cout<<"Zadanie pervoe:\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
S=--m-++n;
cout<<"S = "<<S1<<endl;

cout<<"\n Zadanie vtoroe\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
m*n<n++;
cout<<"m*n = "<<m*n<<endl;
cout<<"n++ = "<<n++<<endl;

cout<<"\n Zadanie tretye\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
n-->m++;
cout<<"n-- = "<<n--<<endl;
cout<<"m++ = "<<m++<<endl;

getch();
}


Не знаю, правильно или нет, но работает. Как вы считаете, это так должно выглядеть?

Сообщение отредактировано: Провинциалка -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Гость






Цитата(Провинциалка @ 24.04.2011 14:39) *
Не знаю, правильно или нет, но работает. Как вы считаете, я это так должно выглядеть?

Нет, не так.
   cout<<"\n Zadanie vtoroe\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
cout<<"m*n<n++ = " << m*n<n++ <<endl;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Гость






Ты все же узнай - может это и не ошибка, а подколка (я про пост karpinsky говорю)
Я не обратил внимания, плдумал - это штучки ворда. Но исключить, что это нарочно, все же нельзя.
karpinsky +1
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Почему-то пишет ошибку здесь
Цитата
cout<<"m*n<n++ = " << m*n<n++ <<endl;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  2  +


Прав абсолютно: приоритет << выше, чем у операций сравнения - с точки зрения компилятора получается белиберда. Вот так это видит компилятор:
(cout<<("m*n<n++ = " << m*n))<(n++ <<endl);


Использование скобок приводит все в порядок:
cout<<"m*n<n++ = " << (m*n<n++) <<endl;


Сообщение отредактировано: karpinsky -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #32


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Спасибо, господин karpinsky!!!
Выходит, что я и третье задание неправильно написала!
Должно быть так? Ну скажите что я права
cout<<"\n Zadanie tretye\n";
cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
n-->m++;
cout<<"n-- > m++ = "<< (n-->m++) <<endl;
cout<<"m++ = "<<m++<<endl;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #33





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  2  +


Цитата
Ну скажите что я права
Не совсем. Ты не хочешь понять одной простой вещи:

    cout<<"Vvedi m\n";
cin>>m; // Ввела значение m
cout<<"Vvedi n\n";
cin>>n; // Ввела значение n

n-->m++;
// Вот тут начинаются проблемы.
// Это - бессмыслица. Ты ничему не присваиваешь результат сравнения.
// Синтаксически все правильно, но с точки зрения логики - нет. Зачем
// что-то делать, и при этом результат не использовать? Но это еще не все, см. ниже почему.

cout<<"n-- > m++ = "<< (n-->m++) <<endl;
cout<<"m++ = "<<m++<<endl;

А не все - потому что у того выражения, результат которого не используется, есть побочный эффект. При вего выполнении изменяется значение двух переменных. Понимаешь, к чему я клоню? Ты что-то сделала, результата не увидела, поэтому, чтоб показать результат, ты строкой ниже проделываешь ту же операцию еще раз, но теперь она производится уже с другими значениями m и n. И получается, что при некоторых данных у тебя результат первоначального сравнения, которое сделано впустую, будет отличаться от второго, которое ты пытаешься вывести на ээкран. Смотри:

допустим, n = 2 и m = 0. Сравниваем: n > m? Да, результат - истина, или ненулевое значение (скорее всего единица). Дальше производятся постфиксные операции, т.е., после того, как произведено сравнение двух чисел между собой, выполняется постфикс. Были бы ++ или -- перед переменной - был бы префиксный оператор, тогда действие производилось бы перед выполнением сравнения. Итак, после окончания выполнения строки n-->m++ значение n уменьшается на 1, значение m увеличивается на ту же единицу. Что имеем в итоге? n = 1 и m = 1. Как думаешь, в следующий раз, когда выполнится то же самое выражение, n > m будет истиной? Мне кажется, что нет. То есть, при втором выполнении результат уже неправильный. А при других исходных данных результат может стать неправильным и при 5-ом и при 10-ом выполнении выражения.

То есть, фрагмент кода должен быть таким:
	cout<<"Vvedi m\n";
cin>>m;
cout<<"Vvedi n\n";
cin>>n;
cout<<"n-- > m++ = "<< (n-->m++) <<endl;
cout << "n = " << n << " m = " << m << endl;
Все, что тебе нужно уметь объяснять в данном случае - это разницу между префиксным и постфиксным инкрементом/декрементом. То есть, ты должна знать, что сначала производится сравнение, и тольео потом - модификация переменных. И несмотря на то, что следующая строка может напечатать одинаковые значения m и n - результат сравнения может быть ложью.

С инкрементом/декрементом надо всегда "держать нос по ветру" (С), чревато ошибками. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #34


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Класс! Спасибо!
Позвольте задать ещё один глупый вопрос. Если мы добавили в третьем задании
cout << "n = " << n << " m = " << m << endl;

значит во втором задании можно добавить строчку
cout << "m*n = " << m*n << "n++ = " << n++ << endl;
? wacko.gif
Ну а первое задание-то хоть правильно решила?


Сообщение отредактировано: Провинциалка -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #35





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  2  +


Цитата
значит во втором задании можно добавить строчку
cout << "m*n = " << m*n << "n++ = " << n++ << endl;
Можно. Но реального положения дел она отражать не будет. Это будет не то значение n, которое принимало участи в строке
cout<<"m*n<n++ = " << m*n<n++ <<endl;
. Ты опять забыла о том, что после сравнения значение n увеличивается. И если добавить стоку, которую ты показала, и посмотреть, что напечатается, то можно очень сильно удивиться. Если тебе хочется выводить значение m*n - выводи его перед сравнением:

cout << "m*n = " << m*n << "n = " << n << endl;
cout<<"m*n<n++ = " << (m*n<n++) <<endl;


А первое задание - вроде нормально. Там надо вычислить значение, а не показать результат сравнения. Кстати, в doc опять же есть пробел, которого нет у тебя в программе, между выделенными символами: S=--m-++n; Уточни, нужен ли он. Результаты выполнения программы без этого пробела и с ним будут разными.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #36


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Спасибо большое!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #37


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(karpinsky @ 24.04.2011 17:14) *
Прав абсолютно: приоритет << выше, чем у операций сравнения - с точки зрения компилятора получается белиберда. Вот так это видит компилятор:
(cout<<("m*n<n++ = " << m*n))<(n++ <<endl);
Упс.. моя практика на Си sucks.. Рука хотела поставить в скобочки, но, подумав, я почему-то решил, что приоритет сравнения выше.
Извини, Провинциалка, и спасибо, karpinsky )

Интересно, в чем суть такой расстановки приоритетов? Если она есть, конечно.. )


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #38





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  2  +


Как говорил один из героев фильма "Хочу в тюрьму":
"- В России победит здравый смысл.
- Россия - она _сильнее_ здравого смысла!"
(С)

Точно так же и расстановка приоритетов операций в С оказалась сильнее здравого смысла. Так издревле повелось (спасибо Страуструпу), что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #39


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(karpinsky @ 25.04.2011 11:52) *
Как говорил один из героев фильма "Хочу в тюрьму":
"- В России победит здравый смысл.
- Россия - она _сильнее_ здравого смысла!"
(С)

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

wacko.gif
я б никогда не допер..
но хорошо, что хоть какой-то смысл есть (хоть и не здравый))
+1


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #40


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Извините что влезла в ваш диалог, просто интересно стало
Цитата
что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение.

Как будто инопланетяне разговаривают rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V < 1 2 3 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 12:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name