Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 23.12.2013, 12:56   #1 (permalink)
furt123
Member
 
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Застопорился в написании вектора

подскажите как сделать так чтобы выводило только 1й отрицательный эл-нт (k), а не все


const
n1 = 20;

type
index1 = 1..n1;
index2 = 1..n1;
vectorA = array[index1] of Integer;
vectorB = array[index2] of Integer;

var
n, i: index1;
m, j: index2;
k: Integer;
A: vectorA;
B: vectorB;

begin
write('количество элементов n= ');
readln(n);
writeln('_____________________________________');
writeln('вектор (А):');
for i := 1 to n do
begin
A[i] := random(41) - 20;
write(A[i]:5);
end;
writeln;
writeln('_____________________________________');
for i := 1 to n do
if ((A[i]) < 0) then
begin
k := (A[i]);
writeln(k);
end;

end.
furt123 вне форума   Ответить с цитированием

Старый 23.12.2013, 12:56
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот топики, которые должны вам во многом помочь

Прошу помощи в написании программы. С++
Помощь в написании программы на Паскале
Нужна помощь в написании программы

Старый 23.12.2013, 13:28   #2 (permalink)
furt123
Member
 
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

всё, уже не нужно. сделал с помощью break;
но если кто знает ещё способы - поделитесь пож-та.
furt123 вне форума   Ответить с цитированием
Старый 23.12.2013, 14:34   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от furt123 Посмотреть сообщение
всё, уже не нужно. сделал с помощью break;
но если кто знает ещё способы - поделитесь пож-та.
Пожалуйста. Но прежде позволю себе выразить поддержку Вашей неудовлетворенности найденным способом решения: все эти "break", равно как и переходы по меткам, следует применять только в каких-то экзотических случаях, а вообще стараться обходиться без них.
Код:
const
 n1 = 20;

type
 index1 = 1..n1;
 vectorA = array[index1] of Integer;
var
 n,i:byte;
 A: vectorA;

begin
 write('количество элементов n= ');
 readln(n);
 writeln('_____________________________________');
 writeln('вектор (А):');
 for i := 1 to n do
 begin
  A[i] := random(41) - 20;
  write(A[i]:5);
 end;
 writeln;
 writeln('_____________________________________');
 i:=0;
 Repeat
  Inc(i);
  if A[i]<0 then writeln(A[i]:5);
 Until (A[i]<0) or (i=n);
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.12.2013, 14:56   #4 (permalink)
furt123
Member
 
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

благодарю)
да, я прочитал, что применение подобных способов выхода из цикла не приветствуют.
furt123 вне форума   Ответить с цитированием
Старый 23.12.2013, 15:15   #5 (permalink)
furt123
Member
 
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

оу. прошу прощения. не правильно поставил задачу. здесь нужно не вывести (вывести я просил для наглядности), а именно присвоить значение первого отр эл-та вектора значению (k). поэтому вопрос актуален.
furt123 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 23.12.2013, 15:24   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от furt123 Посмотреть сообщение
оу. прошу прощения. не правильно поставил задачу. здесь нужно не вывести (вывести я просил для наглядности), а именно присвоить значение первого отр эл-та вектора значению (k). поэтому вопрос актуален.
Да, это, конечно "радикально" меняет дело :
Код:
...
var
 n,i:byte;
 A: vectorA;
 k:integer;

begin
 ...
 i:=0;
 k:=0;
 Repeat
  Inc(i);
  if A[i]<0 then
   begin
    k:=A[i];
    writeln(k:5);
   end;
 Until (k<0) or (i=n);
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.12.2013, 17:04   #7 (permalink)
grelly
падаван
 
Аватар для grelly
 
Регистрация: 23.01.2013
Сообщений: 739
Сказал(а) спасибо: 307
Поблагодарили 27 раз(а) в 3 сообщениях
Репутация: 10792
По умолчанию

А вас не смущает тот факт что создается массив из 20 элементов а забивается произвольное количество n, заданное пользователем?

а что плохого в break? если конечно в цикле нет манипуляций с памятью
grelly вне форума   Ответить с цитированием
Старый 23.12.2013, 17:27   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от grelly Посмотреть сообщение
А вас не смущает тот факт что создается массив из 20 элементов а забивается произвольное количество n, заданное пользователем?
Нет. Если нужно больше, константу легко поменять. Хоть на 1000.
Цитата:
Сообщение от grelly Посмотреть сообщение
а что плохого в break? если конечно в цикле нет манипуляций с памятью
Да в принципе - ничего, можно и так. Просто я считаю, что новичку лучше не привыкать ко всяким там "break", "goto" и прочей лапше, а для начала освоить штатные завершения циклов (предусловие, постусловие), а уж потом, в порядке расширения познаний, разбираться с аварийными вариантами типа "break", а не сразу на них настраиваться.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.12.2013, 21:46   #9 (permalink)
grelly
падаван
 
Аватар для grelly
 
Регистрация: 23.01.2013
Сообщений: 739
Сказал(а) спасибо: 307
Поблагодарили 27 раз(а) в 3 сообщениях
Репутация: 10792
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Просто я считаю, что новичку лучше не привыкать
это верно.
константу поменять это конечно не сложно, но лучше приучаться новичкам делать проверки и защиту от дурака.
grelly вне форума   Ответить с цитированием
Старый 24.12.2013, 01:16   #10 (permalink)
furt123
Member
 
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

собственно вот для чего это нужно было:

const
n1 = 50;

type
index1 = 1..n1;
index2 = 1..n1;
vectorA = array[index1] of Integer;
vectorB = array[index2] of Integer;

var
n, i: index1;
m, j: index2;
k: Integer;
A: vectorA;
B: vectorB;

begin
write('количество элементов n= ');
readln(n);
writeln('_____________________________________');
writeln('вектор (А):');
for i := 1 to n do
begin
A[i] := random(41) - 20;
write(A[i]:5);
end;
writeln;
writeln('_____________________________________');
i := 0;
repeat
i := i + 1;
if A[i] < 0 then
begin
k := A[i];
write('первый отрицательный элемент '); write(k);
end;
until (k < 0) or (i = n);
writeln;
writeln('Вектор (В):');
m := 0;
for i := 1 to n do
if ((A[i]) < k) then
begin
m := m + 1;
B[m] := A[i];
end;
for j := 1 to m do write(B[j]:4);
writeln
end.


посмотрите пожалуйста - не ляпнул ли я чего лишнего?
защит пока не делал.
furt123 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:15.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.