1

Тема: Процедура/Масив логічного типу

Не працює програма, допоможіть будь-ласка знайти прогалини.

Завдання:

Сформувати масив В типу BOOLEAN, в якому значення TRUE буде
записуватись, якщо довжина рядка більша 65 символів, а значення
FALSE – у противному випадку.

Program Proc;
const n = 65;
Type
   TST=string;
var
  MSTR: array [1..100] of TST;
  B: array[1..100] of boolean;
  i, len: integer;
procedure trfl(STR:TST; var L: boolean);

begin
   L:=True;
      if len > n then lenght(TST)
        else L:=False;
end;

begin
  writeln('Please, write Your string:');
  for i := 1 to 100 do
    readln(MSTR[i]);
  for i := 1 to 100 do
    trfl(MSTR[i], B[i]); 
      writeln ('Result of B:');
      for i:= 1 to 100 do
      writeln('B');   
  end.

2

Re: Процедура/Масив логічного типу

1. Конкретизуйте своє "не працює", не примушуйте людей ламати телепатори чи перепитувати - це намагання привернути до себе увагу, а не отримати допомогу у справі. Типова відповідь на проблему "не працює" - увімкніть комп'ютер. Хочете отримати допомогу - описуйте свої дії і їхній результат.
2. Нічого про рядки в умові не сказано. Звідки ви взяли, що треба вводити рядки, а не отримувати величину з умовною назвою "довжина рядка в символах" як випадкову?
3. Нащо ви оголошуєте зайвий тип TST - щоб себе заплутати?
4. Функцією trfl виглядала б значно краще.
5. Відступи виставляються для того, щоб зрозуміти, що після чого відбувається. Так, якщо є цикл for, то все, що йде далі з більшими відступами, має виконуватися в ньому, а те, що далі на одному рівні з ним - після нього. У вас writeln ('Result of B:'); явно іде після for, а не в ньому.

Подякували: Меліса, Torbins2

3

Re: Процедура/Масив логічного типу

ем..окей, зрозуміла. Дякую за зауваження. Вибачте за неточності. 
Робила дуже швидко, оскільки потрібно терміново.

- "4. Функцією trfl виглядала б значно краще." - треба процедурою, бо загалом темою цілої лабораторної є підпрограми-процедури.

Тоді конкретизую:
Мене цікавить, як доцільніше в цьому завданні визначати потрібну довжину у процедурі?
Як правильно записати саме цей фрагмент програми:

begin
   L:=True;
      if len > n then lenght(TST)
        else L:=False;
end;

4

Re: Процедура/Масив логічного типу

Пані, я вас дуже прошу - закінчуйте економити свій час, бо ваш зекономлений час - це час, який доведеться витратити іншим, щоб відповісти на ваше питання, і в сумі часу піде рівно стільки ж, швидше все одно не вийде; але багатьох, хто міг би відповісти, ви відлякаєте надмірними витратами власного часу, і відповідей буде менше.

Меліса написав:

треба процедурою, бо загалом темою цілої лабораторної є підпрограми-процедури.

Я утримаюсь від подальших порад, доки ви не спроможетеся записати умову повністю. Не хочу знову отримати відповідь "ні, це не підходить, бо в умові ще сказано..."

Подякували: Меліса1

5 Востаннє редагувалося Меліса (09.05.2014 23:11:41)

Re: Процедура/Масив логічного типу

Прошу вибачення за незручності та мою надмірну неуважність і квапливість.   
Детальна умова завдання:   

Сформувати масив В типу BOOLEAN, в якому значення TRUE буде
записуватись, якщо довжина рядка (тексту) більша 65 символів, а значення
FALSE – у противному випадку.

+ Для формування масиву B використати процедуру, яка буде повертати результат логічного типу.

P.S. Стосовно економії часу - я б дещо в іншому аспекті це висвітлила: на деякі виявлення некоректності програми мені, очевидно, доведеться витратити годину (так як новачок в програмуванні), професіонали зі стажем в цьому зроблять це за 5-10 хв. Ось в чому істина, як на мене)

6

Re: Процедура/Масив логічного типу

if len > n then lenght(TST)

- Абракадаба, бо lenght нічого не робить, а лише повертає довжину свого аргументу (рядка або масиву).

Подякували: koala, Меліса2

7 Востаннє редагувалося koala (10.05.2014 05:30:17)

Re: Процедура/Масив логічного типу

Torbins: неправда, не повертає. Уважно придивіться.
Меліса:

begin
   L:= умова_для_рядка ;
end;

От і все, що вам треба. Подальші уточнення будуть після відповіді на п.1. з мого першого допису.

Подякували: Меліса1

8

Re: Процедура/Масив логічного типу

koala
Та я бачу, що у коді туди тип замість змінної пхають. Я у загальному випадку казав.

9 Востаннє редагувалося Меліса (10.05.2014 12:55:57)

Re: Процедура/Масив логічного типу

оо, змінила той фрагментик процедури, так як Ви порадили - програма вже компілюється, принаймні.
Проте, от не виводить нормально, підкажіть будь-ласка, як тут вивести результат правильно?
Дякую. 

Program Proc;
const n = 65;
Type
   TST=string;
var
  MSTR: array [1..100] of TST;
  B: array[1..100] of boolean;
  i, len: integer;
procedure trfl(STR:TST; var L: boolean);

begin
   L:=False;
      if len > n then
           L:=True;
end;

begin
  writeln('Please, write Your string:');
  for i := 1 to 100 do
    readln(MSTR[i]);
  for i := 1 to 100 do
    trfl(MSTR[i], B[i]); 
      writeln ('Result of B:');
  end.

10

Re: Процедура/Масив логічного типу

Так же виводити як і перевіряти:

if (B[i] = true) then
  writeln ('B is true')
else
  writeln ('B is false');

Можна ще "і" показувати, але то Ви вже самі

Подякували: Меліса1

11 Востаннє редагувалося Меліса (10.05.2014 14:13:29)

Re: Процедура/Масив логічного типу

Дякую за допомогу  :)
Змінила ще вивід. Тепер виконує завдання.

trfl(MSTR[i], B[i]); 
      writeln ('Result of B:');
      for i := 1 to 100 do
      writeln ('B [', I, '] = ', B[i]');
      if (B[i] = true) then
  writeln ('B is true')
else
  writeln ('B is false');
  end.

12

Re: Процедура/Масив логічного типу

Хотів сказати ще купу всього, але оскільки

Меліса написав:

Тепер виконує завдання.

то й слава Богу. Більшого від вас ніхто не має права вимагати.

Подякували: Меліса1

13

Re: Процедура/Масив логічного типу

Ну, якщо Вам не важко, можете сказати - для кращого розуміння (тим більше, деякі зауваження та Ваші поради знадобляться в написанні інших програм, ще напевне сьогодні програмку з функцією кину), можливо щось зміню для кращої організації програми, але якщо у Вас брак часу, то зрозумію.
Дякую, що допомогли відкоригувати код.

14

Re: Процедура/Масив логічного типу

Мене, власне, трохи дивує, яким чином цей код може працювати, оскільки ви ніде не надаєте значення змінній len... але якщо вас це влаштовує - то кращого годі й бажати.

Подякували: Меліса1

15

Re: Процедура/Масив логічного типу

аа зрозуміла, про що Ви.

Так можна записати?

begin
 len:=length(STR);
   L:=False;
      if len > n then
           L:=True;
end;


хз..ну, працювала і без цього, не вірите - прокомпілюйте)


P.S. Мені якщо програма запускається - це як зелене світло, перестаю автоматично щось змінювати, робить то робить, рухаюсь далі.

Подякували: koala1

16

Re: Процедура/Масив логічного типу

О! А тепер - так, працює.
А тепер дивіться, пара фокусів. len використовується рівно один раз із значенням, яке безпосередньо до цього отримав. То нащо він потрібен?

begin
   L:=False;
   if length(STR) > n then
       L:=True;
end;

Спростився код? Спростився. Але й це ще не все. Придивимося уважно до коду: тут написано по суті "якщо умова істинна, то L:=True, якщо хибна - то L:=False". Але істина - це True, хибність - False в Pascal, правильно? Тобто все це - еквівалент "L має таке саме значення, що й умова". Або, коротше,

begin
   L := length(STR) > n
end;

От вам і весь код процедури.

Подякували: Меліса, Torbins2

17

Re: Процедура/Масив логічного типу

Абсолютно все тепер зрозуміло, дуже вдячна Вам, що допомогли розібратись :)
І справді, повністю з Вами згідна, так як Ви написали - набагато лаконічніше, обов'язково застосую такий алгоритм у програмі.

18

Re: Процедура/Масив логічного типу

Меліса написав:

P.S. Мені якщо програма запускається - це як зелене світло, перестаю автоматично щось змінювати, робить то робить, рухаюсь далі.

Викладачам схоже варто видавати завдання разом із набором автоматичних тестів. Хоча з іншого боку, студенти тоді взагалі думати перестануть.

Подякували: koala1

19 Востаннє редагувалося Меліса (10.05.2014 18:55:37)

Re: Процедура/Масив логічного типу

Torbins написав:
Викладачам схоже варто видавати завдання разом із набором автоматичних тестів. Хоча з іншого боку, студенти тоді взагалі думати перестануть.

О_о.. хм, на жаль Ви не знаєте всієї ситуації. Окей, проте, поясню відверто, чому так роблю - одна обмежена стара викладачка відбила бажання програмувати (та навіть думати) на свій розсуд ще на 1 курсі, і не в мене одної. Відповідно, як вимагають - так і виконую.