С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 34
1

Оператор IF, delphi

24.06.2017, 12:53. Показов 604. Ответов 13

Author24 — интернет-сервис помощи студентам
Определить комбинированный тип (запись) для заполнения анкеты студента, включающей в себя, ФИО, год рождения, пол, номер группы и оценки по пяти предметам. Обеспечить возможность заполнения анкеты в экранном режиме. Вывести на экран дисплея анкетные данные отстающих по одному из предметов.
У меня 2 условие либо не выполняется вообще, либо выполняется, но после того, как выполнилось первое. Мне нужно, чтобы оно выполнялось отдельно. В чем проблема?
Вот сам код:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  type
tablica=record
 
  name:string[20];
  surename:string[20];
  srname:string[20];
  group:string;
 birthday:string[20];
 sex: string[20];
 math:string;
 szi:string;
 orgprav:string;
 progr:string;
 IT:string;
 end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
 s, x: tablica;
 r:integer;
 f:string;
 
begin
r:=3;
with s do
s.name:=StringGrid1.Cells[1,1];
s.surename:=StringGrid1.Cells[2,1];
s.srname:=StringGrid1.Cells[3,1];
s.group:=StringGrid1.Cells[4,1];
s.birthday:=StringGrid1.Cells[5,1];
s.sex:=StringGrid1.Cells[6,1];
s.math:=StringGrid1.Cells[7,1];
s.szi:=StringGrid1.Cells[8,1];
s.orgprav:=StringGrid1.Cells[9,1];
s.progr:=StringGrid1.Cells[10,1];
s.IT:=StringGrid1.Cells[11,1];
 
with x do
x.name:=StringGrid1.Cells[2,1];
x.surename:=StringGrid1.Cells[2,2];
x.srname:=StringGrid1.Cells[2,3];
x.group:=StringGrid1.Cells[2,4];
x.birthday:=StringGrid1.Cells[2,5];
x.sex:=StringGrid1.Cells[2,6];
x.math:=StringGrid1.Cells[2,7];
x.szi:=StringGrid1.Cells[2,8];
x.orgprav:=StringGrid1.Cells[2,9];
x.progr:=StringGrid1.Cells[2,10];
x.IT:=StringGrid1.Cells[2,11];
 
if (strtoint(StringGrid1.Cells[7,1]) < (r)) or (strtoint(StringGrid1.Cells[8,1]) < (r)) or (strtoint(StringGrid1.Cells[9,1]) < (r)) or (strtoint(StringGrid1.Cells[10,1])<(r)) or (strtoint(StringGrid1.Cells[11,1])<(r))
then showmessage(s.name + #32 + s.surename);
 
if (strtoint(StringGrid1.Cells[7,2]) < (r)) or (strtoint(StringGrid1.Cells[8,2]) < (r)) or (strtoint(StringGrid1.Cells[9,2]) < (r)) or (strtoint(StringGrid1.Cells[10,2])<(r)) or (strtoint(StringGrid1.Cells[11,2])<(r))
then showmessage(x.name + #32 + x.surename);
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var z: integer;
begin
Stringgrid1.cells[0,0]:=('№');
Stringgrid1.cells[1,0]:=('Имя');
Stringgrid1.cells[2,0]:=('Фамилия');
Stringgrid1.cells[3,0]:=('Отчество');
Stringgrid1.cells[4,0]:=('Группа');
Stringgrid1.cells[5,0]:=('День рождения');
Stringgrid1.cells[6,0]:=('Пол');
Stringgrid1.cells[7,0]:=('Математика');
Stringgrid1.cells[8,0]:=('СЗИ');
Stringgrid1.cells[9,0]:=('Организационное право');
Stringgrid1.cells[10,0]:=('Программирование');
Stringgrid1.cells[11,0]:=('ИТ');
for z := 1 to 11  do
begin
  Stringgrid1.cells[0,z]:=inttostr(z);
end;
 
end;
 
end.
P.s.
Можно ли сделать так, чтобы в условии проверялись все ячейки, а не строки, как у меня? Т.е. создать одно условие для всех ячеек. Если можно, то как? Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2017, 12:53
Ответы с готовыми решениями:

Оператор IN и Unicode Delphi XE10
Есть функция, собирающая URL, перебирая каждый символ function GetUrl(txt: String): String; var ...

Delphi 7! Оператор case и множества?
допустим есть такие варианты множества: a:=; b:=; c:=; и есть переменная, напр. x = 5;

Не работает оператор сравнения в Delphi
Надо найти минимальные элементы строк 2-мерного массива, но у меня не работает оператор сравнения...

В Delphi есть оператор cost i of. и т.д. Есть ли в C++ такой же оператор?
(C++ Builder XE5)

13
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
24.06.2017, 13:32 2
Delphi
1
2
3
for i:=1 to 11 do
for j:=7 to 11 do
if strtoint(StringGrid1.Cells[j,i]) < r then ...
Добавлено через 9 минут
Попробуйте лучше так.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
n:=0;
for i:=1 to 11 do
 begin
  j:=7;
  while (j<=11)and(StringGrid1.Cells[j,i])>=r) do inc(j);
  if j<=11 then
   begin
    n:=1;
    Memo1.Lines.Add(StringGrid1.Cells[1,i]+' '+StringGrid1.Cells[2,i]))
   end;
 end;
if n=0 then ShowMessage('Неуспевающих студентов нет');
1
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 34
24.06.2017, 17:51  [ТС] 3
Выдает ошибку:
[Error] Unit1.pas(82): Incompatible types: 'String' and 'Boolean'

Добавлено через 52 секунды
если писать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
n:=0;
for i:=1 to 11 do
 begin
  j:=7;
  while (j<=11)and(StringGrid1.Cells[j,i])>=r) do inc(j);
  if j<=11 then
   begin
    n:=1;
    Memo1.Lines.Add(StringGrid1.Cells[1,i]+' '+StringGrid1.Cells[2,i]))
   end;
 end;
if n=0 then ShowMessage('Неуспевающих студентов нет');
Добавлено через 10 минут
Может я что-то неправильно сделал. Вот код, который я исправил:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
procedure TForm1.Button1Click(Sender: TObject);
var
 s, x: tablica;
 r,j,i,n:integer;
 
begin
r:=3;
with s do
s.name:=StringGrid1.Cells[1,1];
s.surename:=StringGrid1.Cells[2,1];
s.srname:=StringGrid1.Cells[3,1];
s.group:=StringGrid1.Cells[4,1];
s.birthday:=StringGrid1.Cells[5,1];
s.sex:=StringGrid1.Cells[6,1];
s.math:=StringGrid1.Cells[7,1];
s.szi:=StringGrid1.Cells[8,1];
s.orgprav:=StringGrid1.Cells[9,1];
s.progr:=StringGrid1.Cells[10,1];
s.IT:=StringGrid1.Cells[11,1];
 
with x do
x.name:=StringGrid1.Cells[2,1];
x.surename:=StringGrid1.Cells[2,2];
x.srname:=StringGrid1.Cells[2,3];
x.group:=StringGrid1.Cells[2,4];
x.birthday:=StringGrid1.Cells[2,5];
x.sex:=StringGrid1.Cells[2,6];
x.math:=StringGrid1.Cells[2,7];
x.szi:=StringGrid1.Cells[2,8];
x.orgprav:=StringGrid1.Cells[2,9];
x.progr:=StringGrid1.Cells[2,10];
x.IT:=StringGrid1.Cells[2,11];
 
n:=0;
for i:=1 to 11 do
 begin
  j:=7;
  while (j<=11)and((StringGrid1.Cells[j,i])<=r)) do inc(j);
  if j<=11 then
   begin
    n:=1;
    Memo1.Lines.Add(StringGrid1.Cells[1,i]+' '+StringGrid1.Cells[2,i])
   end;
 end;
if n=0 then ShowMessage('Íåóñïåâàþùèõ ñòóäåíòîâ íåò');
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var z: integer;
begin
Stringgrid1.cells[0,0]:=('¹');
Stringgrid1.cells[1,0]:=('Èìÿ');
Stringgrid1.cells[2,0]:=('Ôàìèëèÿ');
Stringgrid1.cells[3,0]:=('Îò÷åñòâî');
Stringgrid1.cells[4,0]:=('Ãðóïïà');
Stringgrid1.cells[5,0]:=('Äåíü ðîæäåíèÿ');
Stringgrid1.cells[6,0]:=('Ïîë');
Stringgrid1.cells[7,0]:=('Ìàòåìàòèêà');
Stringgrid1.cells[8,0]:=('ÑÇÈ');
Stringgrid1.cells[9,0]:=('Îðãàíèçàöèîííîå ïðàâî');
Stringgrid1.cells[10,0]:=('Ïðîãðàììèðîâàíèå');
Stringgrid1.cells[11,0]:=('ÈÒ');
for z := 1 to 11  do
begin
  Stringgrid1.cells[0,z]:=inttostr(z);
end;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
end.
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
24.06.2017, 18:17 4
Ну пропустил я слово, так поправь, не переписывай без ума.
Исправь это

Delphi
1
and(strtoint(StringGrid1.Cells[j,i]))>=r
1
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 34
24.06.2017, 19:02  [ТС] 5
Не работает, прога запускается, но не работает как надо.
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
24.06.2017, 19:16 6
И не будет поскольку у Вас написана какая-то ерунда.
Вот зачем эти x и s?
Просто заполните свою таблицу и напишите мой поправленный код.

Добавлено через 3 минуты
А вообще нужно работать не с таблицей, а массивом записей. Таблица это для визуализации данных.
1
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 34
24.06.2017, 19:21  [ТС] 7
В этом и прикол, что условие надо выполнять не для готовой таблицы, а для таблицы, которую заполняешь потом.
Вот задание:
Цитата Сообщение от NewTony07 Посмотреть сообщение
Определить комбинированный тип (запись) для заполнения анкеты студента, включающей в себя, ФИО, год рождения, пол, номер группы и оценки по пяти предметам. Обеспечить возможность заполнения анкеты в экранном режиме. Вывести на экран дисплея анкетные данные отстающих по одному из предметов.
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
24.06.2017, 19:29 8
Ну и что? Заполняй свою таблицу и потом ищи что нужно как я написал, нахрена тебе эти x,s?
1
3760 / 2264 / 705
Регистрация: 29.05.2013
Сообщений: 9,616
24.06.2017, 19:30 9
Ну и в каком месте этого задания говорится о том что надо использовать для этого StringGrid? Вы сами себе придумали проблему и теперь ее решаете.
1
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 34
24.06.2017, 20:00  [ТС] 10
Я не знаю как по-другому, я неделю делфи изучаю. В этом вся проблема.

Добавлено через 20 минут
'' is not a valid integer value
Что это за ошибка?
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
24.06.2017, 20:03 11
Ячейка из которой хотим прочитать пустая или содержит не целое число.
1
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 34
24.06.2017, 21:00  [ТС] 12
Цитата Сообщение от Puporev Посмотреть сообщение
n:=0;
for i:=1 to 11 do
*begin
* j:=7;
* while (j<=11)and(StringGrid1.Cells[j,i])>=r) do inc(j);
* if j<=11 then
* *begin
* * n:=1;
* * Memo1.Lines.Add(StringGrid1.Cells[1,i]+' '+StringGrid1.Cells[2,i]))
* *end;
*end;
if n=0 then ShowMessage('Неуспевающих студентов нет');
Этот код тоже двойку не находит где-то в конце таблицы. Например, в первой строке 2, во второй строке нету 2, а в третьей опять 2. Он эту двойку, которая в третьей строке, не находит почему-то.
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
25.06.2017, 08:00 13
Цитата Сообщение от NewTony07 Посмотреть сообщение
анкетные данные отстающих по одному из предметов.
А что это означает? Вывести всех, кто не успевает по заданному предмету, например по математике, или всех у кого есть только 1 двойка, или всех у кого вообще есть двойки?
1
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 34
25.06.2017, 23:04  [ТС] 14
Цитата Сообщение от Puporev Посмотреть сообщение
А что это означает? Вывести всех, кто не успевает по заданному предмету, например по математике, или всех у кого есть только 1 двойка, или всех у кого вообще есть двойки?
Вообще, это означает вывести всех, у кого вообще есть двойки.
Но уже не надо над этим думать, я разобрался там. Всем спасибо за помощь.)))
0
25.06.2017, 23:04
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.06.2017, 23:04
Помогаю со студенческими работами здесь

SQL запрос, оператор IN, Delphi и базы данных
В таком запросе Delphi ругается на пропущенный оператор SELECT * FROM `Отправители` WHERE id IN...

При попытке добавить оператор else, появляется оператор "Ожидался оператор"
Здравствуйте, помогите пожалуйста. У меня есть программа, которая решает квадратные уравнения. Но...

Оператор похожий на "with" из Delphi в Java
В Delphi есть оператор with который помогает сократить запись операций над одним объектом. Например...

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru