Здравствуйте! Только начала изучать Си, пока плохо его понимаю. Подскажите, как написать программку для написания арифметическое действия
Сообщение отредактировано: Провинциалка -
Вычисление арифметического выражения, Задачка на СИ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Вычисление арифметического выражения, Задачка на СИ |
Провинциалка |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Здравствуйте! Только начала изучать Си, пока плохо его понимаю. Подскажите, как написать программку для написания арифметическое действия
Сообщение отредактировано: Провинциалка - Прикрепленные файлы ___________________1_C_.rar ( 18.3 килобайт ) Кол-во скачиваний: 321 |
volvo |
Сообщение
#21
|
Гость |
Цитата Точность представления типа float в стандартной архитектуре x86 не превышает 8 знаков Я думаю, не будет лишним знать при сдаче работы, как рассчитывается количество значащих цифр Начинаем с float. Для 24 бит Сообщение отредактировано: volvo - |
Провинциалка |
Сообщение
#22
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Сказать всем большое спасибо - значит ничего не сказать! Поражаюсь, как можно столько знать?
А путаница в моей голове из-за того, что не успел еще Паскаль совсем выветриться. |
Lapp |
Сообщение
#23
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
не успел еще Паскаль совсем выветриться. yes2: ??? не допускай этого. НИКАКОЕ знание НЕ ЛИШНЕЕ. Паскаль и Си могут прекрасно дополнять друг друга. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Провинциалка |
Сообщение
#24
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Уважаемые! Добрый вечер!
Вот никак не получается доделать программу второго задания. Не могу понять как прописать условия второго и третьего пунктов. Подскажите, пожалуйста. #include <iostream.h> Сообщение отредактировано: Провинциалка - |
Lapp |
Сообщение
#25
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Не могу понять как прописать условия второго и третьего пунктов. Подскажите, пожалуйста. Я не совсем понимаю, что тебя затрудняет. Почему нельзя просто скопировать из задания? Добавлено через 11 мин. а, ясно, кажется.. туплю ) Вам, похоже, не объяснили, что является результатом сравнения. В Паскале есть особый логический тип. Если ты попробуешь напечатать что-то типа 1<2, то ты увидишь на экране слово TRUE (или FALSE, если 1>2, например). Попробуй сама это сделать. В Си нет особого логического типа. Там истина выражается числом 1, а ложь - числом 0. Соответственно, если ты будешь печатать 1>2, то выйдет 0, а если -2<2, то 1. Так что просто копируй из задания (как в первом пуекте делала). Я правильно понял твой вопрос? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
karpinsky |
Сообщение
#26
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 2 |
Цитата Не могу понять как прописать условия второго и третьего пунктов Третий пункт, так как он записан в doc файле, компилироваться не будет, это нарушает синтаксис С/С++. Уточни, действительно ли там нужны все пробелы, или это опечатка в задании? |
Провинциалка |
Сообщение
#27
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Цитата Третий пункт, так как он записан в doc файле, компилироваться не будет, это нарушает синтаксис С/С++. Уточни, действительно ли там нужны все пробелы, или это опечатка в задании? Да, там действительно опечатка. И вот что я сотворила: #include <iostream.h> Не знаю, правильно или нет, но работает. Как вы считаете, это так должно выглядеть? Сообщение отредактировано: Провинциалка - |
-Lapp- |
Сообщение
#28
|
Гость |
|
-lapp- |
Сообщение
#29
|
Гость |
Ты все же узнай - может это и не ошибка, а подколка (я про пост karpinsky говорю)
Я не обратил внимания, плдумал - это штучки ворда. Но исключить, что это нарочно, все же нельзя. karpinsky +1 |
Провинциалка |
Сообщение
#30
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Почему-то пишет ошибку здесь
Цитата cout<<"m*n<n++ = " << m*n<n++ <<endl; |
karpinsky |
Сообщение
#31
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 2 |
Прав абсолютно: приоритет << выше, чем у операций сравнения - с точки зрения компилятора получается белиберда. Вот так это видит компилятор:
(cout<<("m*n<n++ = " << m*n))<(n++ <<endl); Использование скобок приводит все в порядок: cout<<"m*n<n++ = " << (m*n<n++) <<endl; Сообщение отредактировано: karpinsky - |
Провинциалка |
Сообщение
#32
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Спасибо, господин karpinsky!!!
Выходит, что я и третье задание неправильно написала! Должно быть так? Ну скажите что я права cout<<"\n Zadanie tretye\n"; |
karpinsky |
Сообщение
#33
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 2 |
Цитата Ну скажите что я права Не совсем. Ты не хочешь понять одной простой вещи:cout<<"Vvedi m\n"; А не все - потому что у того выражения, результат которого не используется, есть побочный эффект. При вего выполнении изменяется значение двух переменных. Понимаешь, к чему я клоню? Ты что-то сделала, результата не увидела, поэтому, чтоб показать результат, ты строкой ниже проделываешь ту же операцию еще раз, но теперь она производится уже с другими значениями 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";Все, что тебе нужно уметь объяснять в данном случае - это разницу между префиксным и постфиксным инкрементом/декрементом. То есть, ты должна знать, что сначала производится сравнение, и тольео потом - модификация переменных. И несмотря на то, что следующая строка может напечатать одинаковые значения m и n - результат сравнения может быть ложью. С инкрементом/декрементом надо всегда "держать нос по ветру" (С), чревато ошибками. |
Провинциалка |
Сообщение
#34
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Класс! Спасибо!
Позвольте задать ещё один глупый вопрос. Если мы добавили в третьем задании cout << "n = " << n << " m = " << m << endl; значит во втором задании можно добавить строчку cout << "m*n = " << m*n << "n++ = " << n++ << endl;? Ну а первое задание-то хоть правильно решила? Сообщение отредактировано: Провинциалка - |
karpinsky |
Сообщение
#35
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 2 |
Цитата значит во втором задании можно добавить строчку Можно. Но реального положения дел она отражать не будет. Это будет не то значение n, которое принимало участи в строкеcout << "m*n = " << m*n << "n++ = " << n++ << endl; cout<<"m*n<n++ = " << m*n<n++ <<endl;. Ты опять забыла о том, что после сравнения значение n увеличивается. И если добавить стоку, которую ты показала, и посмотреть, что напечатается, то можно очень сильно удивиться. Если тебе хочется выводить значение m*n - выводи его перед сравнением: cout << "m*n = " << m*n << "n = " << n << endl; А первое задание - вроде нормально. Там надо вычислить значение, а не показать результат сравнения. Кстати, в doc опять же есть пробел, которого нет у тебя в программе, между выделенными символами: S=--m-++n; Уточни, нужен ли он. Результаты выполнения программы без этого пробела и с ним будут разными. |
Провинциалка |
Сообщение
#36
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Спасибо большое!
|
Lapp |
Сообщение
#37
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Прав абсолютно: приоритет << выше, чем у операций сравнения - с точки зрения компилятора получается белиберда. Вот так это видит компилятор:
Упс.. моя практика на Си sucks.. Рука хотела поставить в скобочки, но, подумав, я почему-то решил, что приоритет сравнения выше.(cout<<("m*n<n++ = " << m*n))<(n++ <<endl); Извини, Провинциалка, и спасибо, karpinsky ) Интересно, в чем суть такой расстановки приоритетов? Если она есть, конечно.. ) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
karpinsky |
Сообщение
#38
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 2 |
Как говорил один из героев фильма "Хочу в тюрьму":
"- В России победит здравый смысл. - Россия - она _сильнее_ здравого смысла!" (С) Точно так же и расстановка приоритетов операций в С оказалась сильнее здравого смысла. Так издревле повелось (спасибо Страуструпу), что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение. |
Lapp |
Сообщение
#39
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Как говорил один из героев фильма "Хочу в тюрьму": "- В России победит здравый смысл. - Россия - она _сильнее_ здравого смысла!" (С) Точно так же и расстановка приоритетов операций в С оказалась сильнее здравого смысла. Так издревле повелось (спасибо Страуструпу), что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение. я б никогда не допер.. но хорошо, что хоть какой-то смысл есть (хоть и не здравый)) +1 -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Провинциалка |
Сообщение
#40
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Женский Реальное имя: Ольга Репутация: 2 |
Извините что влезла в ваш диалог, просто интересно стало
Цитата что побитовые сдвиги более приоритетны, чем сравнения. А, поскольку приоритет операции не меняется при ее перегрузке, то теперь и вывод в поток в "плюсах" - тоже более приоритетная операция, чем сравнение. Как будто инопланетяне разговаривают |
Текстовая версия | 13.05.2024 16:43 |