Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
#1

Вопрос по логической переменной - Delphi

26.04.2012, 10:54. Просмотров 1723. Ответов 19

Понимаю, что просто, но не выходит... Требуется создать логическую переменную (булевую), со значением true.
Delphi
1
var check_zn : boolean = true;

А в коде как-то не могу сообразить как, надо прописать условие
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
begin
if FileExists('C:\123') <> true then
      check_zn := false
      else
if FileExists('D:\123') <> true then
      check_zn := false
 if (check_zn) then
 begin
 ShowMessage('Файл отсутствует');
 check_zn.free;
  Application.Terminate;
            end;
        end
 
      else
    ShowMessage('Файл присутствует);
    check_zn.free;
  Application.Terminate;
      end;
      end;
Что в моем коде не верно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2012, 10:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вопрос по логической переменной (Delphi):

Описание логической функции earlier(t1,t2) - Delphi
Добрый день! Помогите, пожалуйста, исправить ошибку, связанную с несоответствием типов Time и TDateTime... Дано время, описанное...

Как лучше сделать повторение логической подпрограммы? - Delphi
Здраствуйте, я в этом деле новичёк создал вроде неплохого бота для браузерной игрушки но вот захотелось пойти дальше зделать бота...

По заданным логическим выражениям построить цифровую модель логической схемы - Delphi
По заданным логическим выражениям построить цифровую модель логической схемы 1. _______ ...

Передача значения переменной одной формы в описание переменной другой - Delphi
Всем привет. Не могу найти решение проблемы. На первой форме имеется глобальная переменная kol, которая содержит в себе число. на второй...

Как обратиться к переменной, если после функции тебе дали строку, с именем переменной - Delphi
Допустим есть Function Generation():String; там генерируется строка, с именем нашего обьекта(имя объекта мы не знаем которое выпадет). ...

Программа с логической переменной - Pascal
Логической переменной Pole присвоить значение true, если поля (Hor1, Ver1) и (Hor2, Ver2) шахматной доски имеют одинаковый цвет (Hor1,...

19
Nutserus
Нарушитель
207 / 166 / 2
Регистрация: 24.04.2012
Сообщений: 592
26.04.2012, 11:07 #2
Хрень какая-то, а не код. Тут ошибок больше чем правильных строчек.

1) if FileExists('C:\123') зачем 2 раза?
2) check_zn.free; так делать нельзя и не за чем, кто вас надоумил?
3) ShowMessage('Файл присутствует); нет апострофа завершающего строку.
0
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 11:08 #3
Delphi
1
2
3
4
  check_zn := FileExists('C:\123') or FileExists('D:\123');
...
  if check_zn then
...
0
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 11:52  [ТС] #4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  che : boolean;
begin
che := FileExists('C:\123') or FileExists('D:\123');
if che then
 begin
 ShowMessage('Истина');
 Application.Terminate;
 end
 else
 begin
     ShowMessage('Ложь');
     Application.Terminate;
     end
 end;
 
end.
Все время выдает ложь
0
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 11:55 #5
Ralik, есть подозрение что C:\123 и D:\123 - это не файлы, а папки. Если это папки, то писать надо так:
Delphi
1
che := DirectoryExists('C:\123') or DirectoryExists('D:\123');
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 12:13  [ТС] #6
Цитата Сообщение от Mawrat Посмотреть сообщение
Ralik, есть подозрение что C:\123 и D:\123 - это не файлы, а папки. Если это папки, то писать надо так:
Delphi
1
che := DirectoryExists('C:\123') or DirectoryExists('D:\123');
А Вы совершенно правы оказались, вот это я олень.
Ну да ладно, с кем не бывает, спасибо Вам!

Добавлено через 7 минут
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.FormCreate(Sender: TObject);
begin
if DirectoryExists('D:\1-23')= true  or DirectoryExists('D:\123')= true then
begin
 ShowMessage('Истина');
 Application.Terminate;
end
else
 ShowMessage('Ложь');
 Application.Terminate;
Почему вот этот код выдает все время одно условие?
Выходит, что не работает
Delphi
1
if DirectoryExists('D:\1-23')= true  or DirectoryExists('D:\123')= true then
0
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 12:17 #7
Приоритет операции OR выше, чем приоритет операции "=", поэтому значение выражения вычисляется, на самом деле, не в том порядке, как задумывалось.
В этом выражении надо проставить скобки:
Delphi
1
if (DirectoryExists('D:\1-23')= true)  or (DirectoryExists('D:\123')= true) then
И сравнение с True здесь лишнее.
0
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 15:01  [ТС] #8
А как в
Delphi
1
if DirectoryExists('D:\1-23')
заместо 123 вписать переменную?
То есть
Delphi
1
if DirectoryExists('D:\(myperemen)')
Добавлено через 1 час 39 минут
Почему при выполнении
Delphi
1
if (DirectoryExists('D:\123')= true)  or (DirectoryExists('D:\123')= true) then
Windows ругается сообщением "В устройстве нет диска" Вставьте диск в устройство \Device\Harddisk2\DR2
Хотя флешка есть и в компьютере открывается.

Добавлено через 11 минут
При этом D:\ - это флешка. А если без неё, то все проходит нормально.

Добавлено через 26 минут
Подскажите, как правильно надо обращаться к съёмным носителям?
Просто D:\123 - это не правильно, т.к. приводит к ошибке и сообщению, которое написал выше.???

Добавлено через 8 минут
Я, кажись понял.
Вот здесь все в порядке
Delphi
1
if (DirectoryExists('D:\1-23')= true)  or (DirectoryExists('D:\123')= true) then
Просто когда флешку вставляешь, WIndows 7 создает пустой съемный носитель, который невозможен к открытию. А код работает, просто с этим пустым диском, который невозможно открыть, выходит, что описаная выше процедура не катит.

Добавлено через 2 минуты
Очень прошу помочь с решением.
Суть вопроса в том, что моя программа должна выполнять условие:
Если папка 123 присутствует на любом из доступных дисков, тогда выполнить алгоритм 1, иначе алгоритм 2.
0
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 15:54 #9
Цитата Сообщение от Ralik Посмотреть сообщение
Очень прошу помочь с решением.
Суть вопроса в том, что моя программа должна выполнять условие:
Если папка 123 присутствует на любом из доступных дисков, тогда выполнить алгоритм 1, иначе алгоритм 2.
Эту задачу можно решить так. С помощью функции GetLogicalDrives() получить буквы всех логических томов (дисков), которые зарегистрированы в системе. Затем, проверить наличие заданной папки на всех имеющихся томах.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
type
  TArrChar = array of Char;
 
//Функция возвращает динамический символьный массив, содержащий буквы
//логических томов (дисков), зарегистрированных в системе.
function GetArrDrv : TArrChar;
var
  D : set of Byte;
  DD : Cardinal;
  i, j : Byte;
begin
  D := [];
  DD := GetLogicalDrives();
  CopyMemory(@D, @DD, SizeOf(DD));
  SetLength(Result, 26);
  j := 0; //Количество значимых элементов в массиве.
  for i := 0 to High(Result) do begin
    if not (i in D) then Continue;
    Result[j] := Chr(65 + i);
    Inc(j);
  end;
  if j < Length(Result) then SetLength(Result, j);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  AppPath = ':\123\';
var
  ArrDrv : TArrChar;
  i : Integer;
  F : Boolean;
begin
  //Получаем буквы всех дисков (логических томов), установленных в системе.
  ArrDrv := GetArrDrv();
 
  //Проверяем, есть ли заданная папка хотябы на одном из томов.
  F := False;
  for i := 0 to High(ArrDrv) do begin
    if not DirectoryExists(ArrDrv[i] + AppPath) then Continue;
    F := True;
    Break;
  end;
 
  //Ответ.
  if F then
    ShowMessage('Заданная папка найдена на одном из томов.')
  else
    ShowMessage('Ни на одном из томов заданная папка не найдена.');
end;
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 16:15  [ТС] #10
Mawrat, ну простите за тупость.
Все сделал как в Вашем коде , при компиляции ругается
Delphi
1
 TArrChar = array of Char;
Пишит: Expected ':' but '=' found
Пробовал и так
Delphi
1
TArrChar := array of Char;
ТОгда пишит Expected an identifier but '=' found.
Пробовал и так
Delphi
1
TArrChar : array of Char;
ТОгда пишит Expected an identifier but Array found.
Спасите!
0
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 16:26 #11
Цитата Сообщение от Ralik Посмотреть сообщение
Все сделал как в Вашем коде , при компиляции ругается
При программировании разное случается. Ошибки не должны расстраивать. Ведь, как известно: ошибок нет у того, кто ничего не делает.
---
Прикрепляю проект.
1
Вложения
Тип файла: rar GetLogicalDrives.rar (168.3 Кб, 8 просмотров)
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 16:48  [ТС] #12
Спасибо! Но в результате все равно ошибку кидает. В устройстве нет диска. Вставьте в устройство \Device\Harddisk2\DR2
А вот если, например, файл будет на диске, младшем по букве, чем этот самый злополучный пустой диск, тогда все в норме, все ищет и ошибок не кидает
0
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 16:53 #13
Ralik, я проверил этот код перед публикацией. Я создавал папку 123 на разных дисках - программа всегда её находила... Если я папку не создавал, то соответственно, папка, тогда, не находилась.
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 16:55  [ТС] #14
Значит, когда возникает ошибка обращения к диску, в коде его нужно указать, что следует игнорировать для поиска на нем. Но как это сделать, сейчас задача непосильная. Поможете?

Добавлено через 45 секунд
Цитата Сообщение от Mawrat Посмотреть сообщение
Ralik, я проверил этот код перед публикацией. Я создавал папку 123 на разных дисках - программа всегда её находила... Если я папку не создавал, то соответственно, папка, тогда, не находилась.
Да это я загоняюсь, сообщения не внимательно читаю Я уже исправил пост.
0
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 16:56 #15
Может быть какая-то проблема с подключением диска? Я сейчас ещё проверил на флешке - создал на ней папку 123, запустил прогу - папка нашлась. И у меня ошибки не возникают.
---
Ralik, а какой текст в сообщении об ошибке?
А - какое сообщение выше в постах уже указано...
Вот тут в чём причина не понятно пока... Harddisk2 - это съёмный диск? Или это флешка, как раз?
1
26.04.2012, 16:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2012, 16:56
Привет! Вот еще темы с ответами:

Значение, логической переменной, по умолчанию - Lazarus
Скажите, какое будет значение логической переменной по умолчанию? Заранее спасибо.

Определить значение логической переменной X - Информатика
Нужно определить значение логической переменной X, при котором две логические формулы становятся эквивалентными. Это Задание №14 Ещё 12...

Фильтрация логической переменной в dbgrid - Lazarus
Здравствуйте, помогите довести до ума программку. Не могу понять как создать фильтрацию логической переменной в dbgrig. Добавление значения...

Вывести значение логической переменной - C++
Составить программу, которая выводит на экран слово «ИСТИНА», если условие выполнено или слово «ЛОЖЬ», если условие не выполнено. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru