1 Востаннє редагувалося ProgramBandera (21.01.2019 04:41:49)

Тема: Як передати дані з попередніх процедури в наступну?

Якщо є ось такий код

procedure TForm1.BitBtn1Click(Sender: TObject);     // Процедура нажаття на кнопку обчислити
var
  t1, t2, t3, t4, t5, t6 : extended;                   // Змінним присвоюється тип extended
  v1, v2, v3, v4, v5, v6 : extended;                 // Змінним присвоюється тип extended
  s1, s2, s3, s4, s5, s6 : extended;                      // Змінним присвоюється тип extended
begin
  WriteDano;                       // Виклик процедури виведення тексту в поле Розв'язання
  FindTheFirstLine;                                 // Процедура першого рядка знайти
  FindTheSecondLine;                                 // Процедура другого рядка знайти
  FindTheThirdLine;                              // Процедура третього рядка знайти
  FindTheFourthLine;                             // Процедура четвертого рядка знайти
  TheFirstLine;              // Виклик процедури першого рядка даних та переводу його в систему СІ
  TheSecondLine;           // Виклик процедури другого рядка даних та переводу його в систему СІ
  TheThirdLine;              // Виклик процедури третього рядка даних та переводу його в систему СІ
  TheFourthLine;        // Процедура четвертого рядка даних та переводу його в систему СІ
  TheFifthLine;          // Процедура п'ятого рядка даних та переводу його в систему СІ
  TheSixthLine;         // Процедура шостого рядка даних та переводу його в систему СІ
  ToCalculate;         // Процедура розв'язання

end;

Якщо процедуру ToCalculate; не прописувати, а просто писати код який вній є то програма рахує чудово. І в процедурах все чудово рахує. Якщо я цей код запихаю в процедуру ToCalculate то мені вибиває нуль. Підкажіть, можливо попередні процедури не описувати як процедури, а описати їх як функції?

2

Re: Як передати дані з попередніх процедури в наступну?

Телепатично я бачу, що цей код просто неймовірно чудово можна переробити на

var
   t:array[1..6] of extended;
   ...
   for i:=1 to 4 do
       FindTheLine(i);
   for i:=1 to 6 do
       TheLine(i);   

і т.д.

3 Востаннє редагувалося koala (21.01.2019 09:48:27)

Re: Як передати дані з попередніх процедури в наступну?

Судячи з комбінації цього та попередніх питань, ви просто не в курсі, що локальні змінні можуть мати такі самі назви, як і глобальні.

var variable:integer;//глобальна

procedure proc;
var variable:integer; //локальна
begin
    variable := 5;
    writeln('Локальна ',variable);//5
end;

begin
    variable := 3;//глобальна змінна
    writeln('Глобальна ',variable);//3
    proc;//5
    writeln('Глобальна ',variable);//все одно 3, бо змінилася лише локальна в proc variable.
end.

Приклад виконання

Подякували: leofun01, Torbins2

4 Востаннє редагувалося koala (21.01.2019 12:20:58)

Re: Як передати дані з попередніх процедури в наступну?

Узагалі, у вас тут не різні питання, а одне - робота над вашим проектом. Може, досить окремі теми створювати?

5

Re: Як передати дані з попередніх процедури в наступну?

koala
По правилах форуму треба окремі. Може тоді у розділ "Ваші проекти" перейти?

6

Re: Як передати дані з попередніх процедури в наступну?

Пане Torbins, тут, крім правил, є вже й певні традиції. FakiNyan не дасть збрехати зі своїми шляхами до вершин. Ну буде у нас 50 тем про один код, кому від того легше? Вже зараз доводиться в сусідні лазити, щоб на нові відповідати.

7 Востаннє редагувалося koala (21.01.2019 15:16:18)

Re: Як передати дані з попередніх процедури в наступну?

І ще одна порада ProgramBandera. Є таке умовне правило, rule of the thumb: якщо ви пишете один і той самий код (із незначними змінами - заміною якогось числа чи назви змінної) тричі, то варто цей код переробити, щоб він був написаний один раз. Як саме - це хитріше питання, базові відповіді - цикли, масиви, функції та додаткові параметри, але бувають ще варіанти. Якщо у вас таке є (а є ж, правда) і ви не бачите, що там можна викинути чи стиснути - ставте тут питання, як це можна скоротити. Це не завжди виходить, і не завжди воно потрібно, але часто-густо - можна і треба.
Чи саме 3 повтори - це найсуперечливіша частина; дехто вважає, що й 2 рази повторювати не варто, а комусь і 5 стерпно; але 10 разів - то вже точно перебір.
Чому варто? Бо потім для найменшого виправлення доведеться весь код перелопачувати, і не факт, що всі ці шматки знайдете. А потім буде "чому програма тут показує так, а тут навпаки".

Подякували: leofun01, Torbins2

8

Re: Як передати дані з попередніх процедури в наступну?

Усім дякую за відповіді!!!! Я вирішив це питання. Всі локальні змінні видалив і зробив їх глобальними! Пішло як по маслу.