Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Составление блок-схем 
V
    Опции темы
STRIKER221
Дата 2.11.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



Люди, странное какое-то явление. Решил задачи в Turbo Paskal, а они не заработали. У меня есть два варианта: или я отупел, или что-то не так. 

Условие первой задачи: 
Составьте блок-схему и программу на языке Paskal для задачи: Ввести число Х и проверить, что больше:
Sin (x), Cos (x), tg (x). 
X – исчисляется в радианах. Примечание: tg вычислять через sin и cos.
Исходные данные
1. X=2,9 
2. X=0.5
3. X=1.5

Вот что у меня получилось:
Код

program fun (input, output);
type z=array [1..3] of real;
var a:z; i: integer; x, m: real;
begin read (x);
a[1]:=sin (x);
writeln ('sinx= ' , a[1]);
a[2]:=cos(x);
writeln ('cosX= ', a[2]);
a[3]:=sin(x)/cos(x);
writeln ('tgx= ', a[3]);
for i:=3 downto 2 do
if a[i]>a[i-1] then
begin
m:=a[i];
a[i]:=a[i-1];
a[i-1]:=m;
end;
writeln ( ' minimalnoe ', a[1]);
writeln ( ' srednee ', a[2]);
writeln ( ' maksimalnoe ', a[3]);
end.


По этой задаче у меня два вопроса:
Как распределить минимальное и максимальное значение, в правильном порядке? 
Как сделать что паскаль отличал положительные и отрицательные числа?

Задача 2
Составьте блок-схему и программу на языке Paskal для задачи: Найти сумму последовательности введённых чисел. Признаком конца последовательности является ввод нуля.
Вводимые слагаемые расположить в столбик, а сумму вывести под чертой (как в школе)

Вот что у меня получилось:
Код

program fun (input, output);
type z=array [0..5] of integer;
var a:z; i, k, s: integer;
begin a[1]:=1;
s:=0;
i:=1;
while a[i]<>0 do
begin writeln ( a[i+1]);
i:=i+1; k:=i;
s:=s+a[i-1];
end;
for i:=2 to k do
writeln (' a [i])');
writeln ( '________' );
writeln ( ' ;S');
end.



Какой переменной задаться в Риде (read) и как по-другому запустить её?
Как обеспечить сумму в конце? Проверьте, пожалуйста, правильность написания проги!

PM MAIL ICQ   Вверх
Zero
Дата 2.11.2006, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 3
Всего: 24



Цитата(STRIKER221 @  2.11.2006,  22:36 Найти цитируемый пост)
Как распределить минимальное и максимальное значение, в правильном порядке?

Сделать правильную сортировку.
Цитата(STRIKER221 @  2.11.2006,  22:36 Найти цитируемый пост)
Как сделать что паскаль отличал положительные и отрицательные числа?

Он их отлчает просто в операторе writeln у тебя стоял формат вывода с плавающей точкой.
Я всё исправил посмотри пример.
Код

program fun;
type z=array [1..3] of real;
var
  a:z;
  i,j,ind: integer;
  x, m: real;
begin
  read (x);
  a[1]:=sin (x);
  writeln ('sinx= ' , a[1]);
  a[2]:=cos(x);
  writeln ('cosX= ', a[2]);
  a[3]:=sin(x)/cos(x);
  writeln ('tgx= ', a[3]);

  for i:=1 to 2 do
    begin
      ind := i;
      m:=a[i];
      for j:=i+1 to 3 do
        if a[j] < m then
          begin
            m := a[j];
            ind := j;
          end;
      a[ind] := a[i];
      a[i] := m;
    end;
    writeln ( ' minimalnoe ', a[1]:5:10);
    writeln ( ' srednee ', a[2]:5:10);
    writeln ( ' maksimalnoe ', a[3]:5:10);
end.


Добавлено @ 22:38 
Цитата(STRIKER221 @  2.11.2006,  22:36 Найти цитируемый пост)
Какой переменной задаться в Риде (read) и как по-другому запустить её?

Просто написать оператор readln
Цитата(STRIKER221 @  2.11.2006,  22:36 Найти цитируемый пост)
Как обеспечить сумму в конце? Проверьте, пожалуйста, правильность написания проги!

Добавить имя идентификатора сумы и всё.
Цитата(STRIKER221 @  2.11.2006,  22:36 Найти цитируемый пост)
Проверьте, пожалуйста, правильность написания проги!

В качестве правильности я бы сказал, цикл лучше использовать с пост-условием а ни с пред-усл.
Код

program fun;
var
  a,s:integer;
begin
  repeat
      write('a=');
      readln(a);
      s:=s+a;
  until a = 0;
  writeln ( '________' );
  writeln ( 'S=',s);
end.

PM MAIL ICQ   Вверх
STRIKER221
Дата 3.11.2006, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



Спасибо огромное!!! Сейчас буду пробовать. Надеюсь всё получится. 


Это сообщение отредактировал(а) STRIKER221 - 3.11.2006, 08:07
PM MAIL ICQ   Вверх
STRIKER221
Дата 3.11.2006, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



Всё заработало, Вы молодец!!!! 
Я был бы Вам очень признателен, если бы Вы псмотрели ещё одну задачу. В принципе она функционирует, но не совсем правильно....

Задача 3
Составьте программу на языке Paskal для задачи: вывести целый массив длины n(n>0), найти и вывести 
1. Min элемент и его номер
2. Max элемент и его номер 


Вот что у меня получилось:
Код

program fun (input, output);
type z=array [0..10000] of integer;
type k=array [0..10000] of integer;
var t:k; a:z ; n,i, v, min, max: integer;
begin write ('vvedite kolichestvo elementov');
read (n);
writeln ('vvedite elementi');
for i:=1 to n do read (a[i]);
for i:=1 to n do t[i]:=a[i];
for i:=n to 1 do
if a[i]>a[i-1] then
begin v:=a[i];
a[i]:=a[i-1];
a[i-1]:=i;
i:=i-1;
end;
for i:=1 to n do
if a [1]=t[i] then
begin write ('minimalnii element', a[1]);
writeln ( ' s nomerom', i);
end;
for i:=1 to n do
if a[n]=t[i] then
begin write ( 'maksimalnii element', a[n]);
write ( ' s nomerom ', i);
end;
end.


Недочёт заключается в том, что прога не отсортировывает минимальный и максимальный элемент.
PM MAIL ICQ   Вверх
Zero
Дата 3.11.2006, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 3
Всего: 24



STRIKER221, я же тебе привёл в первой задачи один из методов сортировки массива:
Код

for i:=1 to 2 do
    begin
      ind := i;
      m:=a[i];
      for j:=i+1 to 3 do
        if a[j] < m then
          begin
            m := a[j];
            ind := j;
          end;
      a[ind] := a[i];
      a[i] := m;
    end;

По этому принципу надо и тут сортировать.... Принцип такой:
1. берётся первый элемент и начинает сравниваться с каждым последующим, и если есть какой то элемент меньше чем m то он заносится в эту переменную также сохр. его индекс, для последующего обмена с i-ым элементом.
Попробуй сам исправить, а если не получится, то я подправлю.
PM MAIL ICQ   Вверх
STRIKER221
Дата 3.11.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



Я не понимаю как это исправить. Я не работаю в Паскале..... Помогите пожалуйста....
PM MAIL ICQ   Вверх
Zero
Дата 3.11.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 3
Всего: 24



Ладно не будем выяснять чё не понимаешь, а то тебе код ещё пол дня придётся ждать.
Но в следующий раз имей ввиду, с начала сам пытаешся всё сделать, а если в процессе работы, чё то не получится пишиш сюда... При этом если вопрос мелкий, то не обязательно писать весь код, а только ту часть которая непонятно.
Код

program fun;
type z=array [0..10000] of integer;
type k=array [0..10000] of integer;
var
  t:k;
  a:z;
  n,i,j,ind, v,m, min, max: integer;
begin
  write ('Введите количество элементов: ');
  readln(n);
  writeln ('Введите элементы:');
  for i:=1 to n do
    begin
      write('a[',i,']=');
      read (a[i]);
    end;

  m:=a[1];
  for i:=2 to n do
    if a[i] < m then
      begin
        m := a[i];
        ind := i;
      end;
  writeln ('минимальный элемент ',m,' с номером ', ind);

  m:=a[1];
  for i:=2 to n do
  if a[i] > m then
    begin
      m := a[i];
      ind := i;
    end;
    writeln ( 'максимальный элемент ',m,' с номером ', ind);
end.


PM MAIL ICQ   Вверх
STRIKER221
Дата 3.11.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



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

Добавлено @ 18:46 
Не успел прочесть Ваше сообщние, но всё равно хочу понять как это работает smile 
PM MAIL ICQ   Вверх
STRIKER221
Дата 3.11.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



Я не понимаю смысл строки:  
Код

write('a[',i,']=');
 как она работает и зачем она??? И зачем вводился идентификатор J??? Он ведь всё равно нигде не участвовал… Или участвовал?
Правильно ли я понял, как Вы осуществили сортировку:
M = первому введённому числу, когда идентификатор I больше либо равен 2. Если же ‘а’ с неким индексом I меньше М, тогда М=а[i] которое оказалось меньше а[1]. А максимальный элемент ищется также, за исключением того, что если ‘а’ с неким индексом I БОЛЬШЕ М, тогда М=а[i] которое оказалось больше а[1].

Я, кажется, понял зачем нужна строка: :  
Код

write('a[',i,']='); :yasno  
 Она при вводе чисел меняет индексы. Т.е. а1; а2; а3 Верно????

PM MAIL ICQ   Вверх
sergejzr
Дата 3.11.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 3.11.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360



Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена! 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
STRIKER221
Дата 3.11.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



спасибо!!!!
PM MAIL ICQ   Вверх
Zero
Дата 3.11.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 3
Всего: 24



Цитата(STRIKER221 @  3.11.2006,  21:02 Найти цитируемый пост)
 Она при вводе чисел меняет индексы. Т.е. а1; а2; а3 Верно????

Нет. Write это процедура вывода.
То что в круглых скобках, там указываются параметры вывода.
при её выполнении, ты видишь на экране:
a[1]=
a[2]=
...
а цифры которые в квадратных скобках, это переменная i в цикле меняется.
Для определения мин. макс. не сортировка не нужна, она происходит тут (мин):
Код

m:=a[1];
  for i:=2 to n do
    if a[i] < m then
      begin
        m := a[i];
        ind := i;
      end;
  writeln ('минимальный элемент ',m,' с номером ', ind);

PM MAIL ICQ   Вверх
STRIKER221
Дата 3.11.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



Но в принципе я был на правильном пути, только объяснить это толково не смог 
PM MAIL ICQ   Вверх
STRIKER221
Дата 3.11.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



а переменная j нужна была?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.