Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Ввести 2 числа и посчитать сумму всех чисел между ними  (Прочитано 56919 раз)
0 Пользователей и 1 Гость смотрят эту тему.
g001501
Интересующийся

by
Offline 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 от Джон » Записан
Джон
просто
Администратор

de
Offline 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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 28-09-2010 13:52 » 

м-да...
сумма арифметической прогрессии...

Срочно в школу!!!
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 28-09-2010 18:03 » 

Sla, ну, думаю это задача на организацию циклов, а не на оптимизацию Улыбаюсь
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 28-09-2010 19:10 » 

Лучше читать книги, которые пишут профессионалы, а не другие начинающие. Попробуй в качестве m задать число 2147483647, и "домой" уже будет не суждено вернуться.
Записан
g001501
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #5 : 01-10-2010 13:35 » 

Синтаксических ошибок здесь, но решение неадекватное.

Нда...

Нууу смотря как считать точку  с запятой после оперетора for.


ну да. Извините, там не нужна точка с запятой

Добавлено через 39 секунд:
м-да...
сумма арифметической прогрессии...

Срочно в школу!!!

Большое спасибо! как-то сама не догадалась!

Добавлено через 43 секунды:
Sla, ну, думаю это задача на организацию циклов, а не на оптимизацию Улыбаюсь

да, это задача с использованием  цикла for. А что такое оптимизация?
« Последнее редактирование: 01-10-2010 13:37 от g001501 » Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 01-10-2010 13:54 » 

g001501, оптимизация - это улучшение характеристик алгоритма (быстродействие, расход памяти). В данном случае, без уточнения, что "задание на использование for", напрашивается более оптимальный по скорости (на больших интервалах) алгоритм вычисления суммы арифметической прогрессии, который делает это без нудного суммирования в цикле, а буквально в пару действий. Говоря сухим языком науки, вместо сложности O(N) получаем O(1).
« Последнее редактирование: 01-10-2010 13:56 от Вад » Записан
g001501
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #7 : 01-10-2010 14:00 » 

Люди! Объясните, пожалуйста, как решена эта задача. Чего-то я думала, думала и все равно не могу понять!

Добавлено через 1 минуту и 54 секунды:
g001501, оптимизация - это улучшение характеристик алгоритма (быстродействие, расход памяти). В данном случае, без уточнения, что "задание на использование for", напрашивается более оптимальный по скорости (на больших интервалах) алгоритм вычисления суммы арифметической прогрессии, который делает это без нудного суммирования в цикле, а буквально в пару действий. Говоря сухим языком науки, вместо сложности O(N) получаем O(1).

Спасибо! теперь все понятно! но я не могу понять  решение задачи с использованием цикла for! Как-то все сложно.
« Последнее редактирование: 01-10-2010 14:02 от g001501 » Записан
x77
Команда клуба

ro
Offline 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
Интересующийся

by
Offline 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.

Спасибо большое! Только я не совсем понимаю логику поменять числа местами. Как это они так хитро их поменяли?
Записан
Джон
просто
Администратор

de
Offline 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
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 04-10-2010 14:36 » 

После этого блока
Код:
	if(n>m)
        {
           i=n;
   n=m;
   m=i;
        }
Ты всегда можешь сказать, что у тебя m>=n, а значит следующий цикл у тебя выполнится хотя бы 1 раз.
А в самой замене ничего хитрого нет: просто попробуй нарисовать для каждой строки таблицу со значениями каждой перменной (на каком-то примере) и поймешь:
nmi
if(n>m)105?
i=n;
n=m;
m=i;
Записан
g001501
Интересующийся

by
Offline 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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 06-10-2010 07:57 » 

существуют циклы с предусловием и постусловием

в данном случаем используется цикл с предусловием. Т.е. истинность цикла проверяется на ВХОДЕ
При постусловии Истинность цикла проверяется на выходе.
Поэтому  и существует первая строка ввода.

А книШку по С читала?
« Последнее редактирование: 06-10-2010 09:05 от Джон » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 06-10-2010 08:32 » 

Я бы в подобной задаче использовал вечный цикл с выходом по условию
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 06-10-2010 08:35 » 

g001501, для понимания кода (своего или чужого) - форматируй!!!
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
g001501
Интересующийся

by
Offline 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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #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
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 07-10-2010 05:37 » 

Не понимаю увеличение х на единицу в операторе if.

Верное замечание. Поскольку это цикл с перебором, значение x должно увеличиваться на каждой итерации независимо от какого-либо условия.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Джон
просто
Администратор

de
Offline 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
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 07-10-2010 07:18 » 

1. Откуда берутся коды, которые показывает ТС?
  Не сама пишет - 100%
2. Зачем спрашивает?
  Не понимает, но пытается понять.
3. Будем дальше продолжать оптимизировать?
  А почему бы и нет?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline 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
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 07-10-2010 08:45 » 

Тут, что называется, назвался груздем (выбрал C) - полезай... В том же букваре Кернигана и Ричи, который рассчитан отнюдь не на экспертов, читатель натыкается, скажем, на такую реализацию копирования строк:

Код:
while (*s++ = *t++);

И авторский комментарий:

Цитата
Хотя на первый взгляд то, что мы получили, выглядит загадочно, все же такая запись значительно удобнее, и следует освоить ее, поскольку в Си-программах вы будете с ней часто встречаться.

К сожалению, они не обманывают, встречаться будете чаще, чем хотелось бы. Поэтому лучше сразу обзавестись иммунитетом. С волками сишниками жить...
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 07-10-2010 21:23 » 

Код:
while (*s++ = *t++);
так это нормально вполне

Код:
while(x--&&((x!=5)?printf("%d",10-x):1));
а вот это уже говнокод. чем-то даже перл напоминает  Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline 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
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #27 : 09-10-2010 13:00 » 

что такое цикл с перебором?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #28 : 09-10-2010 14:11 » 

g001501, это вроде такого
Код:
for(int i=0; i<N; i++)
{
   ...
}
Записан

g001501
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #29 : 10-10-2010 08:50 » 

g001501, это вроде такого
Код:
for(int i=0; i<N; i++)
{
   ...
}




а какие еще циклы бывают, кроме цикла с перебором?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #30 : 10-10-2010 12:53 » 

g001501, хм, даже не знаю. Наверное, циклы без перебора Улыбаюсь Ещё бывают бесконечные циклы. В общем - для чего назначишь цикл, для того он и будет
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 10-10-2010 17:32 » 

g001501, читаем: http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 11-10-2010 09:27 » 

а какие еще циклы бывают, кроме цикла с перебором?

Еще бывают циклы с предусловием, с постусловием и обобщенные циклы (с явным выходом через break или в случае крайней необходимости goto).
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
g001501
Интересующийся

by
Offline 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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 13-10-2010 14:48 » 

результат будет предсказуемым, до второго z++ дойдет только один раз
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
g001501
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #35 : 13-10-2010 16:09 » 

результат будет предсказуемым, до второго z++ дойдет только один раз

так чему в итоге будет равно z?
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #36 : 13-10-2010 17:04 » 

g001501,
1. Это ты у нас спрашиваешь?
2. Если хочешь понять все-таки чему будет равно, то

z=0
цикл x от 0 до 4
z++ | z=1
если x<3 то КУДА?
если x>3 то что?
z++ | КОГДА?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
g001501
Интересующийся

by
Offline 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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #38 : 14-10-2010 09:10 » 

Цитата
я уже поняла, почему z=6.

А я не понял Жаль
Докажи...
xzпримечание
01на начало цикла
Продолжи
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
g001501
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #39 : 18-10-2010 11:29 » 

Цитата
я уже поняла, почему z=6.

А я не понял Жаль
Докажи...
xzпримечание
01на начало цикла
Продолжи


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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #40 : 25-10-2010 13:37 » 

а не вылетим ли за пределы массива?

S будет неизвестно чему равно
S будет равно сумме первых четырех элементов массива Array.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
g001501
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #41 : 25-10-2010 15:30 » 

а не вылетим ли за пределы массива?

S будет неизвестно чему равно
S будет равно сумме первых четырех элементов массива Array.

Что-то я не догоняю, почему?
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #42 : 26-10-2010 13:31 » 

Джон, так нечестно Улыбаюсь

Был вопрос
а не вылетим ли за пределы массива?

Ответа не было.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline 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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #44 : 26-10-2010 13:46 » 

Я пытаюсь ответить на простые вопросы, и в то же время их задаю, для того чтоб человек сам на них ответил.
Если вопрос не понят, то мне бы хотелось, чтоб был вопрос о непонятом моменте, а не "Чет не догоняю".

А там в цитате аж три строки.
Какую строку не догоняет спрашивающий?


зы. вмешивайся, конечно же.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
g001501
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #45 : 26-10-2010 17:01 » 

Я пытаюсь ответить на простые вопросы, и в то же время их задаю, для того чтоб человек сам на них ответил.
Если вопрос не понят, то мне бы хотелось, чтоб был вопрос о непонятом моменте, а не "Чет не догоняю".

А там в цитате аж три строки.
Какую строку не догоняет спрашивающий?


зы. вмешивайся, конечно же.

Я не думаю, что задача содержит ошибку, так как задание состоит в том, чтобы определить результат выполнения программы.  Только что попробовала в компиляторе. Результат получается равен 6. Я не догоню, почему?
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #46 : 26-10-2010 17:13 » 

Sla, прости.
g001501, чему равно выражение
Код:
Array[i]*Vector[i] 
при i  равном пяти?
Записан

С уважением, Oldy.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #47 : 26-10-2010 20:23 » 

Oldy, меня прости?
не вопрос...
чему равно количество элементов Vector?
 
1+2+3 =6
Почему? Это вопрос к Sla?
и вот вопрос!!!!
а не вылетим ли за пределы массива?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline 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
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #49 : 29-10-2010 12:19 » 

Sla, прости.
g001501, чему равно выражение
Код:
Array[i]*Vector[i] 
при 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 » Записан
Джон
просто
Администратор

de
Offline 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
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #51 : 29-10-2010 12:49 » 

g001501, я кажется начинаю понимать в чём проблема. Похоже, что твой компилятор создаёт (что несколько подозрительно) в твоей версии С++ автоматически два нулевых элемента. Вобще-то это нехорошо так делать. Знаешь, загадку для начинающих программеров?

"Мальвина дала Буратино три яблока, Буратино съел одно яблоко, сколько яблок у Буратино?"

Сможешь отгадать?

Поэтому лучше написать так:

Vector[N] = {1.0, 1.0, 1.0, 1.0, 0.0, 0.0};

Ну, теоретически у него осталось 2 яблока. А практически, может, и меньше. Вдруг он оставшимися яблоками угостил еще кого-нибудь? Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline 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
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #53 : 29-10-2010 17:12 » 

У него МОЖЕТ БЫТЬ осталось 2 яблока. Ага Можно ли всё-таки однозначно сказать, сколько яблок у Буратино, при условии, что он никого не угощал? Подсказка - НЕТ. А вот почему? Ага

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

– Два.

– Подумайте хорошенько.

– Два…

– Почему?

– Я же не отдам Некту яблоко, хоть он дерись!
Записан
Джон
просто
Администратор

de
Offline 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
Интересующийся

by
Offline 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 » Записан
Джон
просто
Администратор

de
Offline 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
Интересующийся

by
Offline Offline
Пол: Женский

« Ответ #57 : 06-11-2010 16:23 » 

и что дальше? Улыбаюсь

Вывод какой следует? Почему нельзя сказать однозначно, сколько яблок у Буратино после всех этих операций?

потому что из условия задачи неизвестно сколько яблок у него было до того, как Мальвина дала ему ещё три.
Записан
Джон
просто
Администратор

de
Offline 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."
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines