Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 16 июн 2025, 22:59

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Таинственные переменные
СообщениеДобавлено: 22 сен 2018, 13:22 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Я продолжил фрагмент программы, предложенной Zorko. Но у меня получилось не то, что бы криво, а как-то даже странно. Обратите внимание на переменные j, a в строке 6. Они вроде-бы нигде не учавствуют и без них программа компилируется, но работает она совсем по-другому (для этого в обеих случаях надо вставить флешку перед запуском процедуры): с этими переменными программа выводит количество свободной памяти на флешке, без них - не выводит.
Код: "OBERON"
  1. IMPORT StdLog, WinApi;
  2.  
  3. CONST numberOfSteps = 134217728;(*количество шагов в цикле, а также размер записываемого файла*)
  4.  
  5. PROCEDURE Start*;
  6. VAR i, j, numberOfDisks, a: INTEGER;
  7. b: WinApi.PtrSTR;
  8. drives: SET;
  9. drivesString: ARRAY 32 OF ARRAY 2 OF SHORTCHAR;
  10. boolInt: INTEGER;
  11. i1, i2, i3, i4: INTEGER;
  12. lage: LONGINT;
  13. BEGIN
  14. drives := BITS(WinApi.GetLogicalDrives ());
  15. i := 0;
  16. numberOfDisks := 0;
  17. REPEAT
  18. IF i IN drives THEN
  19. drivesString[numberOfDisks, 0] := SHORT(CHR(i + 97));
  20. StdLog.String(drivesString[numberOfDisks] + ":" );
  21. drivesString[numberOfDisks, 1] := ":";
  22. IF WinApi.GetDriveType(drivesString[numberOfDisks]) = WinApi.DRIVE_REMOVABLE THEN
  23. StdLog.String(" съёмный диск; Количество свободного места на диске: ");
  24. boolInt := WinApi.GetDiskFreeSpace("g:", i1, i2, i3, i4);
  25. lage := i3 * i2 * LONG(i1);
  26. IF lage > numberOfSteps THEN
  27. StdLog.Real(lage);
  28. StdLog.String (" байт;");
  29. END;
  30. StdLog.Ln;
  31. END;
  32. StdLog.Ln;
  33. INC(numberOfDisks)
  34. END;
  35. INC(i)
  36. UNTIL i = 31;
  37. END Start;
  38.  


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Таинственные переменные
СообщениеДобавлено: 22 сен 2018, 13:38 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
В BB 1.7 во время выполнения выдаёт ошибку, в v 1.5 ошибку выдаёт только на 32 разрядной платформе, но не смотря на это в рабочий журнал выводятся разные сообщения.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Таинственные переменные
СообщениеДобавлено: 22 сен 2018, 14:35 
Не в сети

Сообщения: 146
Для строк требуется завершающий 0, а так - в массиве неопределённый мусор, который смещается в зависимости от количества объявленных переменных.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Таинственные переменные
СообщениеДобавлено: 23 сен 2018, 16:42 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Len, зачем UNTIL i = 31 ? Сколько букв в латинском алфавите?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Таинственные переменные
СообщениеДобавлено: 24 сен 2018, 12:10 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
26. Исправил.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Таинственные переменные
СообщениеДобавлено: 24 сен 2018, 14:03 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Без обид, но именно большое внимание к деталям отличает хорошего программиста от посредственного. Так считаю.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club