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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2011, 13:54   #1
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию задача с массивом

текст задания
Если у вектора b (b1, b2, …, bN) есть компонента со значением, равным q, то переменной r присвоить значение, равное 0. В противном случае переменной r присвоить значение, равное произведению всех компонент вектора b. Печатать r, q, вектор b.
никак не могу написать. программу. работает неправильно.
вот что я накарябал...
Код:
program dfd;
const n=10;
var b:array[0..n]of integer;
    i:integer;
    q,r:real;
begin
 write('q=');
 read(q);
  for i:=0 to n do 
  read(b[i]);
   for i:=0 to n do
   if (b[i])=q then r:=0 else r:=(b[i]*n);
    for i:=0 to n do 
    write(b[i],' '); write(' ''r=',r)
 end.
GoldSieg вне форума Ответить с цитированием
Старый 19.10.2011, 14:13   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Код:
program dfd;
const n=10;
var b:array[0..n]of integer;
    i:integer;
    q,r:real;
    bl:boolean;
begin
 write('q=');
 read(q);
 bl:=FALSE;
  for i:=0 to n do 
   begin  
   read(b[i]);
   if (b[i]=q) then 
    begin
    r:=0;
    bl = TRUE;
    end
   else 
    if (bl <> TRUE) then
    r:=(b[i]*r);
   end;
for i:=0 to n do 
write(b[i],' '); write(' ''r=',r)
end.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 19.10.2011 в 14:18.
Vanta11a вне форума Ответить с цитированием
Старый 19.10.2011, 14:18   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Код:
for i:=0 to n do
   if (b[i])=q then r:=0 else r:=(b[i]*n);
Ошибка вот здесь.
У вас здесь написано: если i-й элемент вектора равен q, то переменной r присвоить нуль, иначе попытка найти произведение всех компонент вектора, что у вас делается неверно.

БЫДЛОРЕШЕНИЕ УДАЛЕНО АВТОРОМ

Последний раз редактировалось Вадим Мошев; 19.10.2011 в 14:25.
Вадим Мошев вне форума Ответить с цитированием
Старый 19.10.2011, 14:22   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Цитата:
Результатом работы программы будет просто произведение всех компонентов вектора (массива). И не надо ничего проверять. Оператор If в этой задаче вообще не нужен.
Это если q = 0 или элемент, = q, просто отсутствует. А если нет?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 19.10.2011, 14:25   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Vanta11a Посмотреть сообщение
Это если q = 0 или элемент, = q, просто отсутствует. А если нет?
Спасибо за поправку, что-то затмило у меня

Тогда попробую своё решение предложить

Код:
f:=false;

for i:=1 to n do
		if A[i] = q then
				begin
				 f:=true;
				 break;
				end;
				
if NOT f
	then
		begin
		 r:=1;
		 for i:=1 to N do
		 		r:=r*A[i];
		 		
		end
		
	else
		r:=0;
а вообще, мне кажется, что автор просил нас указать на его ошибки, а не писать своё решение.
Поэтому:
Код:
var b:array[0..n]of integer;
    .........
  for i:=0 to n do
в принципе правильно, но только у вас используется не N переменных, а N+1. Рекомендую поступить так: убрать объявление константы, в объявлении массива нижнюю границу указать не 0, а 1, последнюю границу указать равной 10, ну и, наконец, все циклы указать не с 0, а с 1.

Последний раз редактировалось Вадим Мошев; 19.10.2011 в 14:54.
Вадим Мошев вне форума Ответить с цитированием
Старый 19.10.2011, 14:42   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ребят, а Вас при решении никого не смутило, что массив объявлен как целочисленных, а переменная q - в которой задаётся искомый компонент - ВЕЩЕСТВЕННАЯ.
Имхо, это, как минимум, странно и нелогично...

NB. разумеется, искомая компонента должна иметь тот же тип, что и компоненты вектора (массива). в данном случае: var q : integer;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.10.2011, 14:45   #7
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Цитата:
ребят, а Вас при решении никого не смутило, что массив объявлен как целочисленных, а переменная q - в которой задаётся искомый компонент - ВЕЩЕСТВЕННАЯ.
Имхо, это, как минимум, странно и нелогично...
Я просто не обратил внимания, честно. Правил только то, что необходимо для реализации логики.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 19.10.2011, 14:53   #8
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию

Всем спасибо за ответы. щас буду разбираться..
хотя что то я даже не рассматривал сделать прогу через логический тип..
GoldSieg вне форума Ответить с цитированием
Старый 19.10.2011, 15:18   #9
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию

а что надо написать чтобы перемножить у массива все его компоненты между собой???
GoldSieg вне форума Ответить с цитированием
Старый 19.10.2011, 15:30   #10
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Код:
p:=1;
for i:=1 to N do p:=p*A[i];
Вадим Мошев вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с массивом. lammy Помощь студентам 2 22.12.2013 22:06
Задача с массивом Zalim Фриланс 8 27.09.2011 11:34
Задача с массивом! kloyn91 Microsoft Office Excel 7 09.11.2009 09:17
Задача с массивом(help) sezem Паскаль, Turbo Pascal, PascalABC.NET 9 15.05.2009 21:14