IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Как вывести записи с нужными параметрами?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Задача:
Фамилия Имя Факультативы
Мат. Физ. Инф.
Павлов Серг true false true
Мисюченко Ира true true false
Сидорон Зоя false false true
Кладов Роман true false false
Создайте массив следующего содержания и структуры, выведите фамилии и имена школьников, которые не посещают факультатив по физике или по математике.

Var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Cells[1,1] := 'Фамилия ';
StringGrid1.Cells[2,1] := 'Имя';
StringGrid1.Cells[3,1] := 'математика';
StringGrid1.Cells[4,1] := 'физика';
StringGrid1.Cells[5,1] := 'информатика';

StringGrid1.Cells[1,2] := 'Иванов';
StringGrid1.Cells[2,2] := 'Коля';
StringGrid1.Cells[3,2] := 'да';
StringGrid1.Cells[4,2] := 'да';
StringGrid1.Cells[5,2] := 'нет';

StringGrid1.Cells[1,3] := 'Петров';
StringGrid1.Cells[2,3] := 'Вася';
StringGrid1.Cells[3,3] := 'да';
StringGrid1.Cells[4,3] := 'да';
StringGrid1.Cells[5,3] := 'да';
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
for j:=2 to 3 do begin
for i:=1 to 4 do
if (StringGrid1.Cells[3,j]= 'нет') or (StringGrid1.Cells[4,j]= 'нет') then
StringGrid1.Cells[1,j]:= StringGrid1.Cells[1,j];
StringGrid1.Cells[2,j]:= StringGrid1.Cells[2,j];
end;end;

procedure TForm1.Button3Click(Sender: TObject);
var i,j:integer;
begin
for j:=2 to 3 do begin
for i:=1 to 4 do
StringGrid1.Cells[1,j]:='';
StringGrid1.Cells[2,j]:= '';
StringGrid1.Cells[3,j] := '';
StringGrid1.Cells[4,j] := '';
StringGrid1.Cells[5,j] := '';end;
end;
end.

Не знаю, как правильно задать Button2, чтобы вывелись только нужные записи.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






А почему ты в RunTime создаешь массив, а не на этапе компиляции?

var
arr: array[1 .. 4] of record
name: string[50];
math, phys, info: boolean;
end = (
(name:'Павлов Серг'; math:true; phys:false; info:true ),
(name:'Мисюченко Ира'; math:true; phys:true; info:false),
(name:'Сидорон Зоя'; math:false; phys:false; info:true ),
(name:'Кладов Роман'; math:true; phys:false; info:false)
);

И выбирай, какие записи отобразить...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Это я додумала 1-й вариант своей задачи со 2-й кнопкой. Кривовато, но работает.

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin

for j:=2 to 3 do begin
for i:=1 to 4 do
begin
if (StringGrid1.Cells[3,j]= 'нет') or (StringGrid1.Cells[4,j]= 'нет') then
begin
StringGrid1.Cells[1,j]:= StringGrid1.Cells[1,j];
StringGrid1.Cells[2,j]:= StringGrid1.Cells[2,j];
StringGrid1.Cells[3,j]:= '';
StringGrid1.Cells[4,j]:= '';
StringGrid1.Cells[5,j]:= '';end;
if (StringGrid1.Cells[3,j]= 'да') and (StringGrid1.Cells[4,j]= 'да') then
begin
StringGrid1.Cells[1,j]:= '';
StringGrid1.Cells[2,j]:= '';
StringGrid1.Cells[3,j]:= '';
StringGrid1.Cells[4,j]:= '';
StringGrid1.Cells[5,j]:= '';
end;end;
end;
end;

И начала делать вариант , предложенный вами,Volvo. Но на самих записях выходит ошибка :cannot initialise local parametrs,not enough actual parametrs.

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
x: array[1 .. 4] of record
name: string[50];
math, phys, info: boolean;
end = ( {выделяет эту строку}
(name:'Павлов Серг'; math:true; phys:false; info:true ),
(name:'Мисюченко Ира'; math:true; phys:true; info:false),
(name:'Сидорон Зоя'; math:false; phys:false; info:true ),
(name:'Кладов Роман'; math:true; phys:false; info:false)
);
begin
for i:=1 to 4 do
if (x[i].math=false) or (x[i].phys=false) then
with x[i] do
StringGrid1.Cells[i] :=x[i].name;
end;
end.


Я в Паскале более-менее разбираюсь, а здесь вообще на каждом шагу ошибки делаю. unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ага... Правильно... Переменная X должна быть либо Var, но глобально (вне процедуры), либо можно локально (прямо внутри процедуры), но только с Const ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


 with x[i] do
StringGrid1.Cells[i] :=x[i].name;

это равнозначно
StringGrid1.Cells[i] :=x[i].x[i].name;


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Цитата(мисс_граффити @ 2.12.2006 11:59) *

 with x[i] do
StringGrid1.Cells[i] :=x[i].name;

это равнозначно
StringGrid1.Cells[i] :=x[i].x[i].name;


По этому вопросу, оно не идет ни так ни как равнозначно.
и так не идет

stringgrid1.cells[1,i]:=x[i].x[i].name;


так тоже не идет

stringgrid1.cells[1,i]:=x[i].name;


Как правильно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ты последовательно обращаешься к элементам
что такое x[i].x[i] компилятор не может понять...
а вот почему не идет
stringgrid1.cells[1,i]:=x[i].name;
- не могу сходу сказать. может, до этого что-то не то?
какая хоть ошибка?...
или выложи кусок кода побольше.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


 stringgrid1.cells[1,i]:=x[i].name;


вот при таком коде программа запускается без ошибки, но по нажатии кнопки ничего не выводит.
А код этот весь. Остальное стандартное окно делфи.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


blink.gif
можешь прикрепить проект?
в архиве... все, кроме ехе-шника


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Прикрепленный файл  131____________.zip ( 7.33 килобайт ) Кол-во скачиваний: 253

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


выводит... но ты этого не видишь, так как выводит в первый столбец (а у тебя только нулевой).
вот так работает:
for i:=1 to 4 do
if not(x[i].math) or not(x[i].phys) then
stringgrid1.cells[0,i]:=x[i].name;

что еще заменила:
1) убрала строчку with...
ты же и так явно пишешь, что работаешь с x[i]. Зачем дублировать информацию?
2) чуть-чуть перефразировала условие - мы ж работаем с логическими переменными, зачем делать сравнение через =?

...но будет выводить "с дырками".
тебя это устроит?


Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Спасибо. Я все поняла. Выводится сообщения начались, но с "дырками". Я попыталась исправить ситуацию, изменив вот так код:

procedure TForm1.Button1Click(Sender: TObject);
var
i,j,n,k:integer;
y:array[1..4] of record
name1:string[50]; end;
const x: array[1 .. 4] of record
name: string[50];
math, phys, info: boolean;
end = (
(name:'Павлов Серг'; math:true; phys:false; info:true ),
(name:'Мисюченко Ира'; math:true; phys:true; info:false),
(name:'Сидорон Зоя'; math:false; phys:false; info:true ),
(name:'Кладов Роман'; math:true; phys:false; info:false)
);
begin
n:=0;
for i:=1 to 4 do
begin
k:=0;
if not(x[i].math) or not(x[i].phys) then
begin
stringgrid1.cells[0,i]:=x[i].name;
k:=k+1;
if k=1 then begin n:=n+1; y[n].name1:=x[i].name;end;{создаю в отдельную запись правильные ответы}
end;
end;

for i:=1 to 4 do begin {вывожу отдельную запись}
stringgrid1.cells[0,i]:=y[i].name1; end;
end;
end.


и там, где вывожу ,после вывода появляется на следующей строке какая-то бяка. Набор символов разных шрифтов.Прикрепленный файл  131____________.rar ( 7.34 килобайт ) Кол-во скачиваний: 235
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


а зачем такие сложности?
дополнительный массив...
k:=1;
for i:=1 to 4 do
if not(x[i].math) or not(x[i].phys) then
begin
stringgrid1.cells[0,k]:=x[i].name;
inc(k);
end;


если этот вариант не нравится...
кракозябры появляются вот почему: реально заполнены у тебя только y[1..3], а в y[4] хранится какой-то мусор. надо изначально опустошать все строки:
y[i].name1:=''


Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Большое спасибо за помощь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.09.2020 20:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name