g001501
Интересующийся
Offline
Пол:
|
|
« : 28-09-2010 13:28 » |
|
Здравствуйте! Я начинающий программер на Си. Мне попалась такая задача: Введите 2 числа и посчитать сумму всех чисел между ними. Решебник предлагает такое решение: #include<stdio.h> void main() { int i,n,m,sum=0; printf("Vvedite dva chelix chisla:"); scanf("%d%d",&n,&m); if(n>m) { i=n; n=m; m=i; }
for (i=n;i<=m;i++); { if(i!=n) printf("%+d",i); else printf("%d",i); sum+=i; } printf("=%d\n",sum);
} Синтаксических ошибок здесь, но решение неадекватное. Мне кажется, в этом коде содержится ошибка. Может, кто подскажет, где?
|
|
« Последнее редактирование: 28-09-2010 13:42 от Джон »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #1 : 28-09-2010 13:43 » |
|
Синтаксических ошибок здесь, но решение неадекватное. Нда... Нууу смотря как считать точку с запятой после оперетора for.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Sla
|
|
« Ответ #2 : 28-09-2010 13:52 » |
|
м-да... сумма арифметической прогрессии...
Срочно в школу!!!
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Kivals
|
|
« Ответ #3 : 28-09-2010 18:03 » |
|
Sla, ну, думаю это задача на организацию циклов, а не на оптимизацию
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #4 : 28-09-2010 19:10 » |
|
Лучше читать книги, которые пишут профессионалы, а не другие начинающие. Попробуй в качестве m задать число 2147483647, и "домой" уже будет не суждено вернуться.
|
|
|
Записан
|
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #5 : 01-10-2010 13:35 » |
|
Синтаксических ошибок здесь, но решение неадекватное. Нда... Нууу смотря как считать точку с запятой после оперетора for. ну да. Извините, там не нужна точка с запятой Добавлено через 39 секунд:м-да... сумма арифметической прогрессии...
Срочно в школу!!!
Большое спасибо! как-то сама не догадалась! Добавлено через 43 секунды:Sla, ну, думаю это задача на организацию циклов, а не на оптимизацию да, это задача с использованием цикла for. А что такое оптимизация?
|
|
« Последнее редактирование: 01-10-2010 13:37 от g001501 »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #6 : 01-10-2010 13:54 » |
|
g001501, оптимизация - это улучшение характеристик алгоритма (быстродействие, расход памяти). В данном случае, без уточнения, что "задание на использование for", напрашивается более оптимальный по скорости (на больших интервалах) алгоритм вычисления суммы арифметической прогрессии, который делает это без нудного суммирования в цикле, а буквально в пару действий. Говоря сухим языком науки, вместо сложности O(N) получаем O(1).
|
|
« Последнее редактирование: 01-10-2010 13:56 от Вад »
|
Записан
|
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #7 : 01-10-2010 14:00 » |
|
Люди! Объясните, пожалуйста, как решена эта задача. Чего-то я думала, думала и все равно не могу понять! Добавлено через 1 минуту и 54 секунды:g001501, оптимизация - это улучшение характеристик алгоритма (быстродействие, расход памяти). В данном случае, без уточнения, что "задание на использование for", напрашивается более оптимальный по скорости (на больших интервалах) алгоритм вычисления суммы арифметической прогрессии, который делает это без нудного суммирования в цикле, а буквально в пару действий. Говоря сухим языком науки, вместо сложности O(N) получаем O(1).
Спасибо! теперь все понятно! но я не могу понять решение задачи с использованием цикла for! Как-то все сложно.
|
|
« Последнее редактирование: 01-10-2010 14:02 от g001501 »
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #8 : 01-10-2010 15:15 » |
|
if(n>m) { i=n; n=m; m=i; }
если первое введённое число больше второго - меняем их местами. далее всегда считаем от младшего n до старшего m: for (i=n;i<=m;i++); { sum+=i; }
если выкинуть весь трэш, то алгоритм тупо прибавляет к sum (которое инициализировано нулём) текущее значение i, а i, в свою очередь, пробегает все значения от n до m.
|
|
|
Записан
|
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #9 : 02-10-2010 08:57 » |
|
if(n>m) { i=n; n=m; m=i; }
если первое введённое число больше второго - меняем их местами. далее всегда считаем от младшего n до старшего m: for (i=n;i<=m;i++); { sum+=i; }
если выкинуть весь трэш, то алгоритм тупо прибавляет к sum (которое инициализировано нулём) текущее значение i, а i, в свою очередь, пробегает все значения от n до m. Спасибо большое! Только я не совсем понимаю логику поменять числа местами. Как это они так хитро их поменяли?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #10 : 03-10-2010 17:56 » |
|
Только я не совсем понимаю логику поменять числа местами. Как это они так хитро их поменяли? Твоё предложение? Менять можно разными способами. Что именно хитрого ты видишь в данном способе?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Kivals
|
|
« Ответ #11 : 04-10-2010 14:36 » |
|
После этого блока if(n>m) { i=n; n=m; m=i; } Ты всегда можешь сказать, что у тебя m>=n, а значит следующий цикл у тебя выполнится хотя бы 1 раз. А в самой замене ничего хитрого нет: просто попробуй нарисовать для каждой строки таблицу со значениями каждой перменной (на каком-то примере) и поймешь: | n | m | i | if(n>m) | 10 | 5 | ? | i=n; | | | | n=m; | | | | m=i; | | | |
|
|
|
Записан
|
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #12 : 05-10-2010 12:33 » |
|
Kivals, Спасибо большое! Теперь я поняла! Добавлено через 19 часов, 10 минут и 34 секунды:У меня такой вопрос: Есть задача: Посчитать количество четных положительных чисел, ввод чисел завершается, когда вводим 0. Есть решение: #include<stdio.h> void main() { int x,k=0; printf("Vvedite chislo:"); scanf("%d", &x); while (x) { if(x%2==0&&x>0) k++; printf("Vvedite chislo:"); scanf("%d", &x); } printf (Kol-vo chetnix polozitel'nix chisel =%d\n", k); } Зачем нужна строка по вводу чисел, если она есть в цикле while? И что такое за условие while(x)? Это значит , что while (x!=0)? Или нет?
|
|
« Последнее редактирование: 06-10-2010 07:44 от g001501 »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #13 : 06-10-2010 07:57 » |
|
существуют циклы с предусловием и постусловием
в данном случаем используется цикл с предусловием. Т.е. истинность цикла проверяется на ВХОДЕ При постусловии Истинность цикла проверяется на выходе. Поэтому и существует первая строка ввода.
А книШку по С читала?
|
|
« Последнее редактирование: 06-10-2010 09:05 от Джон »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Kivals
|
|
« Ответ #14 : 06-10-2010 08:32 » |
|
Я бы в подобной задаче использовал вечный цикл с выходом по условию
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #15 : 06-10-2010 08:35 » |
|
g001501, для понимания кода (своего или чужого) - форматируй!!!
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #16 : 06-10-2010 12:48 » |
|
существуют циклы с предусловием и постусловием
в данном случаем используется цикл с предусловием. Т.е. истинность цикла проверяется на ВХОДЕ При постусловии Истинность цикла проверяется на выходе. Поэтому и существует первая строка ввода.
А книШку по С читала?
О, да! Я читала. Но я, наверное, блондинка. Хотя цвет волос вроде бы темный. Добавлено через 5 часов, 40 минут и 9 секунд: Такая задача: нужно напечатать числа от 1 до 10, пропустив 5. Решение: #include<stdio.h> void main() { int x=1; while(x<=10) {if(x==5) {x++; continue;} printf("%d",x); x++;}}
Не понимаю увеличение х на единицу в операторе if. Причем, если x++ поставить после continue, задача выводит только первые четыре числа. Может, кто подскажет.
|
|
« Последнее редактирование: 06-10-2010 18:29 от g001501 »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #17 : 06-10-2010 18:41 » |
|
смотри x=1 вывести x x=x+1 x=2 вывести x x=x+1 x=3 вывести x x=x+1 x=4 вывести x x=x+1 x=5 не выводить x=x+1 continue говорит о том чтобы пойти в начало цикла x=6 вывести x x=x+1 x=7 вывести x x=x+1 x=8 вывести x x=x+1 x=9 вывести x x=x+1 x=10 вывести x
|
|
« Последнее редактирование: 06-10-2010 18:43 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Oldy
|
|
« Ответ #18 : 07-10-2010 03:44 » |
|
А так? #include<stdio.h> void main() { int x=1; while(x<=10) { if(x!=5) printf("%d",x); x++; } }
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Dale
|
|
« Ответ #19 : 07-10-2010 05:37 » |
|
Не понимаю увеличение х на единицу в операторе if. Верное замечание. Поскольку это цикл с перебором, значение x должно увеличиваться на каждой итерации независимо от какого-либо условия.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #20 : 07-10-2010 06:24 » |
|
Не понимаю увеличение х на единицу в операторе if. Если ПРАВИЛЬНО форматировать код (что уже настоятельно советовали сделать): #include<stdio.h> void main() { int x=1; while(x<=10) { if(x==5) { x++; continue; //<<<< } printf("%d",x); x++; } }
легко заметить, что после х++; стоит оператор continue - те с этого места цикл переходит сразу в начало и остальная часть тела цикла не выполняется. В чём ты сама убедилась: Причем, если x++ поставить после continue, задача выводит только первые четыре числа. Так что всё правильно. Другое дело, а стоит ли так программировать? Но это уже другой вопрос.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Dale
|
|
« Ответ #21 : 07-10-2010 07:15 » |
|
Такая задача: нужно напечатать числа от 1 до 10, пропустив 5. Если это упражнение по языку C, то в духе этого языка скорее будет такая конструкция: int x; for (x = 0; ++x <= 10; (x != 5) && printf("%d\n", x));
Лучше сразу привыкать, чтобы потом глаз не резало.
|
|
« Последнее редактирование: 07-10-2010 07:20 от Dale »
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Sla
|
|
« Ответ #22 : 07-10-2010 07:18 » |
|
1. Откуда берутся коды, которые показывает ТС? Не сама пишет - 100% 2. Зачем спрашивает? Не понимает, но пытается понять. 3. Будем дальше продолжать оптимизировать? А почему бы и нет?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #23 : 07-10-2010 08:29 » |
|
Парни, вы только не забывайте, что раздел для начинающих. Оптимизация - это уже следующих шаг. И приводимый код как раз призван разобраться с логикой работы операторов, а не оптимально решить задачу, или сократить код насколько это позволяет язык. Подобные непонятные, хоть и короткие, конструкции: int x=10; while(x--&&((x!=5)?printf("%d",10-x):1));
ИМХО вызовут у них только отвращение.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Dale
|
|
« Ответ #24 : 07-10-2010 08:45 » |
|
Тут, что называется, назвался груздем (выбрал C) - полезай... В том же букваре Кернигана и Ричи, который рассчитан отнюдь не на экспертов, читатель натыкается, скажем, на такую реализацию копирования строк: И авторский комментарий: Хотя на первый взгляд то, что мы получили, выглядит загадочно, все же такая запись значительно удобнее, и следует освоить ее, поскольку в Си-программах вы будете с ней часто встречаться. К сожалению, они не обманывают, встречаться будете чаще, чем хотелось бы. Поэтому лучше сразу обзавестись иммунитетом. С волками сишниками жить...
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #25 : 07-10-2010 21:23 » |
|
так это нормально вполне while(x--&&((x!=5)?printf("%d",10-x):1)); а вот это уже говнокод. чем-то даже перл напоминает
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #26 : 08-10-2010 06:32 » |
|
а вот это уже говнокод Во-во. А представь какие ощущения он у новичка вызывает.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #27 : 09-10-2010 13:00 » |
|
что такое цикл с перебором?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 09-10-2010 14:11 » |
|
g001501, это вроде такого for(int i=0; i<N; i++) { ... }
|
|
|
Записан
|
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #29 : 10-10-2010 08:50 » |
|
g001501, это вроде такого for(int i=0; i<N; i++) { ... }
а какие еще циклы бывают, кроме цикла с перебором?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #30 : 10-10-2010 12:53 » |
|
g001501, хм, даже не знаю. Наверное, циклы без перебора Ещё бывают бесконечные циклы. В общем - для чего назначишь цикл, для того он и будет
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #31 : 10-10-2010 17:32 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dale
|
|
« Ответ #32 : 11-10-2010 09:27 » |
|
а какие еще циклы бывают, кроме цикла с перебором? Еще бывают циклы с предусловием, с постусловием и обобщенные циклы (с явным выходом через break или в случае крайней необходимости goto).
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #33 : 13-10-2010 13:57 » |
|
спасибо Добавлено через 9 минут и 29 секунд:Как вы думаете, каков будет результат выполнения программы? #include<stdio.h> void main() { int x, z=0; for(x=0; x<5; x++) { z++; if(x<3) continue; if(x>3) break; z++; } printf("z=%d\n",z); }
|
|
« Последнее редактирование: 13-10-2010 14:06 от g001501 »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #34 : 13-10-2010 14:48 » |
|
результат будет предсказуемым, до второго z++ дойдет только один раз
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #35 : 13-10-2010 16:09 » |
|
результат будет предсказуемым, до второго z++ дойдет только один раз
так чему в итоге будет равно z?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #36 : 13-10-2010 17:04 » |
|
g001501, 1. Это ты у нас спрашиваешь? 2. Если хочешь понять все-таки чему будет равно, то
z=0 цикл x от 0 до 4 z++ | z=1 если x<3 то КУДА? если x>3 то что? z++ | КОГДА?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #37 : 14-10-2010 08:56 » |
|
g001501, 1. Это ты у нас спрашиваешь? 2. Если хочешь понять все-таки чему будет равно, то
z=0 цикл x от 0 до 4 z++ | z=1 если x<3 то КУДА? если x>3 то что? z++ | КОГДА?
спасибо! я уже поняла, почему z=6.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #38 : 14-10-2010 09:10 » |
|
я уже поняла, почему z=6. А я не понял Докажи... x | z | примечание | 0 | 1 | на начало цикла |
Продолжи
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #39 : 18-10-2010 11:29 » |
|
я уже поняла, почему z=6. А я не понял Докажи... x | z | примечание | 0 | 1 | на начало цикла |
Продолжи x = 0, z = 1, (x < 3) - да, continue; x = 1, z = 2, (x < 3) - да, continue; x = 2, z = 3, (x < 3) - да, continue; x = 3, z = 4, (x < 3) - нет, (x > 3) - нет, z = 5; x = 4, z = 6, (x > 3) - да, выход из цикла. Добавлено через 7 дней, 2 часа, 4 минуты и 56 секунд:Чему равно S? #include<stdio.h> #define N 6
void main() { double Array[N] = {1,2,3,0,-5,6}; double Vector[N] = {1,1,1,1}; float S = 0; int i;
for(i = 0; i < N ; i++) { S = S + Array[i]*Vector[i]; } printf("результат равен %f", S); } заранее спасибо за ответ
|
|
« Последнее редактирование: 25-10-2010 13:34 от g001501 »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #40 : 25-10-2010 13:37 » |
|
а не вылетим ли за пределы массива?
S будет неизвестно чему равно S будет равно сумме первых четырех элементов массива Array.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #41 : 25-10-2010 15:30 » |
|
а не вылетим ли за пределы массива?
S будет неизвестно чему равно S будет равно сумме первых четырех элементов массива Array.
Что-то я не догоняю, почему?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #42 : 26-10-2010 13:31 » |
|
Джон, так нечестно Был вопрос а не вылетим ли за пределы массива? Ответа не было.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #43 : 26-10-2010 13:33 » |
|
Не Слав, я ответил g001501. На её вопрос "Что-то я не догоняю, почему?". Ок, больше не вмешиваюсь.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Sla
|
|
« Ответ #44 : 26-10-2010 13:46 » |
|
Я пытаюсь ответить на простые вопросы, и в то же время их задаю, для того чтоб человек сам на них ответил. Если вопрос не понят, то мне бы хотелось, чтоб был вопрос о непонятом моменте, а не "Чет не догоняю".
А там в цитате аж три строки. Какую строку не догоняет спрашивающий?
зы. вмешивайся, конечно же.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #45 : 26-10-2010 17:01 » |
|
Я пытаюсь ответить на простые вопросы, и в то же время их задаю, для того чтоб человек сам на них ответил. Если вопрос не понят, то мне бы хотелось, чтоб был вопрос о непонятом моменте, а не "Чет не догоняю".
А там в цитате аж три строки. Какую строку не догоняет спрашивающий?
зы. вмешивайся, конечно же.
Я не думаю, что задача содержит ошибку, так как задание состоит в том, чтобы определить результат выполнения программы. Только что попробовала в компиляторе. Результат получается равен 6. Я не догоню, почему?
|
|
|
Записан
|
|
|
|
Oldy
|
|
« Ответ #46 : 26-10-2010 17:13 » |
|
Sla, прости. g001501, чему равно выражение при i равном пяти?
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Sla
|
|
« Ответ #47 : 26-10-2010 20:23 » |
|
Oldy, меня прости? не вопрос... чему равно количество элементов Vector? 1+2+3 =6 Почему? Это вопрос к Sla? и вот вопрос!!!! а не вылетим ли за пределы массива?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #48 : 27-10-2010 07:06 » |
|
А там в цитате аж три строки. Какую строку не догоняет спрашивающий?
Я так понял, что твои ответы. зы. вмешивайся, конечно же. ОК Тогда восстановлю вчерашний пост. Добавлено через 1 минуту и 11 секунд:Я не думаю, что задача содержит ошибку, так как задание состоит в том, чтобы определить результат выполнения программы. Сколько элементов в массиве double Vector[N] = {1,1,1,1}; ? Какие значения примет счёчик i в for(i = 0; i < N ; i++) при #define N 6 ? Какие значения имеют элементы массива Vector с индексами 4 и 5 -> Vector[4] и Vector[5] ? Добавлено через 3 минуты:Только что попробовала в компиляторе. Результат получается равен 6. Я не догоню, почему? Слава так и написал: S будет равно сумме первых четырех элементов массива Array. как один из возможных вариантов решения.
|
|
« Последнее редактирование: 27-10-2010 07:10 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #49 : 29-10-2010 12:19 » |
|
Sla, прости. g001501, чему равно выражение при i равном пяти? Нулю, думаю. Добавлено через 2 минуты и 3 секунды:Oldy, меня прости? не вопрос... чему равно количество элементов Vector? 1+2+3 =6 Почему? Это вопрос к Sla? и вот вопрос!!!! а не вылетим ли за пределы массива?
Количество элементов Vector равно 6. А на счет вопроса, вылетим ли мы за пределы массива, то я пока еще не настолько умна, чтобы на него ответить Добавлено через 4 минуты и 59 секунд:Я не думаю, что задача содержит ошибку, так как задание состоит в том, чтобы определить результат выполнения программы. Сколько элементов в массиве double Vector[N] = {1,1,1,1}; ? Какие значения примет счёчик i в for(i = 0; i < N ; i++) при #define N 6 ? Какие значения имеют элементы массива Vector с индексами 4 и 5 -> Vector[4] и Vector[5] ? 1. 6 2. 1,2,3,4,5,6 3. 0 и 0
|
|
« Последнее редактирование: 29-10-2010 12:26 от g001501 »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #50 : 29-10-2010 12:40 » |
|
g001501, я кажется начинаю понимать в чём проблема. Похоже, что твой компилятор создаёт (что несколько подозрительно) в твоей версии С++ автоматически два нулевых элемента. Вобще-то это нехорошо так делать. Знаешь, загадку для начинающих программеров?
"Мальвина дала Буратино три яблока, Буратино съел одно яблоко, сколько яблок у Буратино?"
Сможешь отгадать?
Поэтому лучше написать так:
Vector[N] = {1.0, 1.0, 1.0, 1.0, 0.0, 0.0};
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #51 : 29-10-2010 12:49 » |
|
g001501, я кажется начинаю понимать в чём проблема. Похоже, что твой компилятор создаёт (что несколько подозрительно) в твоей версии С++ автоматически два нулевых элемента. Вобще-то это нехорошо так делать. Знаешь, загадку для начинающих программеров?
"Мальвина дала Буратино три яблока, Буратино съел одно яблоко, сколько яблок у Буратино?"
Сможешь отгадать?
Поэтому лучше написать так:
Vector[N] = {1.0, 1.0, 1.0, 1.0, 0.0, 0.0};
Ну, теоретически у него осталось 2 яблока. А практически, может, и меньше. Вдруг он оставшимися яблоками угостил еще кого-нибудь?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #52 : 29-10-2010 14:18 » |
|
У него МОЖЕТ БЫТЬ осталось 2 яблока. Можно ли всё-таки однозначно сказать, сколько яблок у Буратино, при условии, что он никого не угощал? Подсказка - НЕТ. А вот почему?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #53 : 29-10-2010 17:12 » |
|
У него МОЖЕТ БЫТЬ осталось 2 яблока. Можно ли всё-таки однозначно сказать, сколько яблок у Буратино, при условии, что он никого не угощал? Подсказка - НЕТ. А вот почему? Предположим, что у вас в кармане два яблока. Некто взял у вас одно яблоко. Сколько у вас осталось яблок? – Два. – Подумайте хорошенько. – Два… – Почему? – Я же не отдам Некту яблоко, хоть он дерись!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #54 : 29-10-2010 23:53 » |
|
g001501, всё гораздо проще, нельзя сказать сколько яблок у Буратино, после того как он съел одно, тк из условия задачи неизвестно сколько яблок у него было до того, как Мальвина дала ему ещё три. Какой отсюда следует вывод? Для простоты представь себе, что Буратино - переменная целого типа, содержащая количество буратиновых яблок:
int Буратино; Буратино += 3; Буратино -= 1;
|
|
« Последнее редактирование: 29-10-2010 23:56 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #55 : 03-11-2010 17:06 » |
|
g001501, всё гораздо проще, нельзя сказать сколько яблок у Буратино, после того как он съел одно, тк из условия задачи неизвестно сколько яблок у него было до того, как Мальвина дала ему ещё три. Какой отсюда следует вывод? Для простоты представь себе, что Буратино - переменная целого типа, содержащая количество буратиновых яблок:
int Буратино; Буратино += 3; Буратино -= 1;
и что дальше? Добавлено через 3 минуты и 4 секунды:Есть такая задача: Разработать приложение, выполняющее следующие функции. Ввести с клавиатуры значения элементов двумерного массива действительных чисел. Поменять местами четные и нечетные столбцы. Отсортировать элементы первой строки по убыванию (методом выбора). Результат вывести на экран. И ее решение: #include <stdio.h> #include <conio.h> void main() { float a[100][100], t, max; int m, n, i, j, p; printf("Vvedite razmer matricy (MxN): ") ; scanf("%d%d", &m, &n); for (i = 0; i < m; i++) for (j = 0; j < n; j++) { printf("Vvedite jelement massiva a[%d, %d]: ", i + 1, j + 1); scanf("%f", &a[i][j]); } printf("\nRazmer matricy: %dx%d\n", m, n); printf("\nIshodnaja matrica\n" ); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) printf("%g ", a[i][j]); printf("\n" ); } for (j = 0; j < m - 1; j+=2) { for (i = 0; i < n; i++) { t = a[i][j]; a[i][j] = a[i][j + 1]; a[i][j + 1] = t; } } for (i = 0; i < n - 1; i++) { max = a[0][i]; p = i; for (j = i + 1; j < m; j++) if (a[0][j] > max) { max = a[0][j]; p = j; } t = a[0][i]; a[0][i] = a[0][p]; a[0][p] = t; } printf("\nRezul'tat\n") ; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) printf("%g ", a[i][j]); printf("\n") ; } getch(); }
Кто-нибудь может объяснить, как поменяли местами четные и нечетные столбцы и принцип сортировки первой строки во возрастанию? Заранее спасибо.
|
|
« Последнее редактирование: 03-11-2010 17:09 от g001501 »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #56 : 04-11-2010 07:33 » |
|
и что дальше? Вывод какой следует? Почему нельзя сказать однозначно, сколько яблок у Буратино после всех этих операций?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
g001501
Интересующийся
Offline
Пол:
|
|
« Ответ #57 : 06-11-2010 16:23 » |
|
и что дальше? Вывод какой следует? Почему нельзя сказать однозначно, сколько яблок у Буратино после всех этих операций? потому что из условия задачи неизвестно сколько яблок у него было до того, как Мальвина дала ему ещё три.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #58 : 07-11-2010 21:03 » |
|
Ну наконец-то! Поскольку мы делаем вид, что мы программеры, то данный ответ можно скорректировать: ПЕРЕМЕННЫЕ НАДО ИНИЦИАЛЛИЗИРОВАТЬ! В данном случае: Какие значения имеют элементы массива Vector с индексами 4 и 5 -> Vector[4] и Vector[5] ?
Эти элементы массива не были проинициаллизированы, именно поэтому Слава сказал S будет неизвестно чему равно
То, что у тебя получается 6, есть результат "разумности" режима отладки. Обычно перед выполнением программы в этом режиме вся резервируемая память обнуляется. Это часто приводит к сокрытию ошибок. В релизе такие штуки не проходят.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|