Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 19:16   #1
g001501
Пользователь
 
Аватар для g001501
 
Регистрация: 16.09.2010
Сообщений: 28
По умолчанию Результат выполнения программы

Чему равно 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);
}

заранее спасибо за ответ
g001501 вне форума Ответить с цитированием
Старый 25.10.2010, 19:38   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А запустить не пробовали?) Наверное 6
netrino вне форума Ответить с цитированием
Старый 25.10.2010, 20:00   #3
g001501
Пользователь
 
Аватар для g001501
 
Регистрация: 16.09.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
А запустить не пробовали?) Наверное 6
У меня не запускается. Пишет: Linking....
А почему 6?
g001501 вне форума Ответить с цитированием
Старый 25.10.2010, 20:05   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну так правильно, оно и должно так писать) Или во время компиляции возникают ошибки? Если да, то какие?
Шесть, потому что N (размерность массива) равно 6, в то время, как инициализируются лишь 4 элемента массива Vector, остальные по умолчанию заполняются нулями. Так как элементы массивов Array и Vector перемножаются, то последние три произведения будут равны нулю (так как четвёртый элемент Array тоже равен 0). Ну а в цикле как раз производится подсчёт суммы произведений элементов массива, так как в Vector'е они все равны единице, то конечный результат будет равен сумме первых трёх элементов Array. Это всё очевидно из алгоритма, вы в нём разобрались хотя бы?)

Последний раз редактировалось netrino; 25.10.2010 в 20:08.
netrino вне форума Ответить с цитированием
Старый 26.10.2010, 21:09   #5
g001501
Пользователь
 
Аватар для g001501
 
Регистрация: 16.09.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Ну так правильно, оно и должно так писать) Или во время компиляции возникают ошибки? Если да, то какие?
Шесть, потому что N (размерность массива) равно 6, в то время, как инициализируются лишь 4 элемента массива Vector, остальные по умолчанию заполняются нулями. Так как элементы массивов Array и Vector перемножаются, то последние три произведения будут равны нулю (так как четвёртый элемент Array тоже равен 0). Ну а в цикле как раз производится подсчёт суммы произведений элементов массива, так как в Vector'е они все равны единице, то конечный результат будет равен сумме первых трёх элементов Array. Это всё очевидно из алгоритма, вы в нём разобрались хотя бы?)
Я не понимаю такого момента. Если перемножить массив на вектор, то в результате получим массив. Тогда результат должен быть массив, а не число. Или я чего-то не понимаю?
g001501 вне форума Ответить с цитированием
Старый 26.10.2010, 21:31   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
S = S + Array[i]*Vector[i];
Не вектор множится на вектор, а каждый элемент вектора умножается на такой же по счёту элемент другого вектора, и полученное произведение прибавляется к S
netrino вне форума Ответить с цитированием
Старый 26.10.2010, 21:36   #7
devnir
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 26
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Шесть, потому что N (размерность массива) равно 6, в то время, как специализируются лишь 4 элемента массива Vector, остальные по умолчанию заполняются нулями.
Крайне не согласен особенно в моменте где "остальные по умолчанию заполняются нулями."
Пару лет назад я бы сказал то же самое... сейчас же совсем не согласен. Ошибочное мнение что при объявлении переменной она сразу нулится процветает у многих, а многие "преподы" клятвинно избивая себя в грудь, заявляют наивным студентам что так оно и есть....

Все зависит от компилятора и его настроек.
Приведу простой пример:
1. Старый добрый билдер при объявлении переменной INT08U i;
обнулит и. хотя явно о этом никто не говорил.. о том что "и" вообще должно быть нулем.
2. ADS(Arm Devel. Suite) - вродь так эта прелесть называется (в прошлом работал с ней писал прошивки для процессоров с АРМ архитектурой.). так вот именно ADS - пощитает что при таком объявлении i!=0x00, а если быть точнее i = 0xFF

Мораль сей повести такова: не зря во всех умных книжках пишут что то там про "ЯВНОЕ объявление переменных" ведь при объявлении переменной INT08U i; процессор всего навсего выделить память размером 8 бит.. но ему никто не говорит и не заставляет его нулить все эти битики... а что там было до этого - лишь святой "Дзэн" знает.
devnir вне форума Ответить с цитированием
Старый 26.10.2010, 21:38   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Какие еще перемножения массива и вектора? Что вы называете массивом, а что - вектором? У вас перемножаются элементы массива. Если геометрически - скалярно умножаются два вектора. И не важно, как вы назвали переменные.
Вообще я вас в упор не понимаю - вы удивляетесь, почему переменная типа float является числом, а не массивом???

P.S. devnir, не согласен с вами. Не стоит все стричь под одну гребенку. Согласно Страуструпу (а он вряд ли погрешит против стандарта)
Цитата:
Если инициализатор не задан, то глобальным объектам, объектам из пространства имен и локальным статическим объектам присваивается нулевое значение соответствующего типа. [...] Локальные переменные и объекты, создаваемые в области свободной памяти не инициализируются по умолчанию. [...] Элементы массивов и члены структур инициализируются или нет в зависимости от того, являются ли они статическими. Для типов, определяемых пользователем, может определяться инициализация по умолчанию. [....] Если в списке элементов инициализации недостает элементов, всем остальным элементам [статического] массива присваивается значение 0.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 26.10.2010 в 21:52.
Гром вне форума Ответить с цитированием
Старый 27.10.2010, 08:41   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
У меня не запускается. Пишет: Linking....
и? Дальше что? Компилятор какой?
Цитата:
А почему 6?
Странный вопрос? А почему не 6? Перемножь руками и увидишь. Неинициализированные элементы считай нулями.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2010, 11:35   #10
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

но там же могут быть совершенно разные значения, отличные от 0, первай раз возможно будет 0, второй раз, третий раз, точно будет 0, вы уверены ?
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен результат программы... Катюшенька Помощь студентам 1 17.05.2010 09:53
Определить результат выполнения программы. Joker<777> Паскаль, Turbo Pascal, PascalABC.NET 2 23.04.2010 02:15
Как сделать, чтобы результат выполнения макроса записывался по строкам во всем столбце? kipish_lp Microsoft Office Excel 3 26.11.2009 07:18
Появляется окошко и тут же пропадает, как посмотреть результат выполнения си кода? Urukhay4 Общие вопросы C/C++ 11 18.04.2009 17:37
как отобразить в dbgrid результат выполнения commandText двух adodataset? Гузель БД в Delphi 2 13.08.2008 16:17