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

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке

30.03.2012, 08:05. Показов 1995. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброго времени суток)
Задача следующая:распечатать список учеников музыкальной школы,которые учатся играть на скрипке.Указать также сколько лет они занимаются музыкой и принимали ли участие в каких либо конкурсах.
вот что я написала:
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
 type
  TSpisok = record
    Fam: String;
    Instrum: String;
    Srok: Integer;
    Uchast: String;
  end;
   TSpisk = record
   Spisok: TSpisok;
 end;
var
  Form2: TForm2;
  Spis: Array of TSpisk;
  k: Integer;
 
implementation
 
{$R *.dfm}
procedure TForm2.Button3Click(Sender: TObject);
begin
close;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
begin
SetLength(Spis,k+1);
  Spis[k].Spisok.Fam :=Edit1.Text;
  Spis[k].Spisok.Instrum := Edit2.Text;
  Spis[k].Spisok.Srok := StrToInt (Edit3.Text);
  Spis[k].Spisok.Uchast := Edit4.Text;
    Edit1.Text:=' ';
    Edit2.Text:=' ';
    Edit3.Text:=' ';
    Edit4.Text:=' ';
 
  k := k+1;
end;
 
procedure TForm2.Button2Click(Sender: TObject);
var i: Integer;
begin
  for i := 0 to k do
  if    Spis[i].Spisok.Instrum ='скрипка' then
    begin      Memo1.Clear;
      Memo1.Lines.Add('Фамилия ученика : '+Spis[i].Spisok.Fam);
      Memo1.Lines.Add('Инструмент : '+Spis[i].Spisok.Instrum);
      Memo1.Lines.Add('Срок обучения :'+IntToStr(Spis[i].Spisok.Srok));
      Memo1.Lines.Add('Участие в конкурсах: '+Spis[i].Spisok.Uchast);
      Memo1.Lines.Add('____________________________')
    end;
end;
не могу понять почему она не работает,то выдает одного ученика,то вообще ошибку.
помогите разобраться)))заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2012, 08:05
Ответы с готовыми решениями:

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке
Пожалуйста помогите с программкой... Распечатать список учеников музыкальной школы, которые...

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке
Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также,...

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке
А) Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также,...

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке
Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также,...

8
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
30.03.2012, 17:36 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
type
  TSpisok = record
    Fam: String;
    Instrum: String;
    Srok: Integer;
    Uchast: String;
  end;
 
var
  Form2: TForm2;
  Spis: Array of TSpisk;
  k: Integer = 0; //Количество элементов массива.
 
implementation
 
{$R *.dfm}
 
procedure TForm2.Button3Click(Sender: TObject);
begin
  close;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
begin
  SetLength(Spis,k + 1);
  Spis[k].Fam :=Edit1.Text;
  Spis[k].Instrum := Edit2.Text;
  Spis[k].Srok := StrToInt (Edit3.Text);
  Spis[k].Uchast := Edit4.Text;
  Inc(k);
  
  Edit1.Text:='';
  Edit2.Text:='';
  Edit3.Text:='';
  Edit4.Text:='';
end;
 
procedure TForm2.Button2Click(Sender: TObject);
var i: Integer;
begin
  Memo1.Clear;
  for i := 0 to k - 1 do
  if Spis[i].Instrum ='скрипка' then
    begin
      Memo1.Lines.Add('Фамилия ученика : '+Spis[i].Spisok.Fam);
      Memo1.Lines.Add('Инструмент : '+Spis[i].Spisok.Instrum);
      Memo1.Lines.Add('Срок обучения :'+IntToStr(Spis[i].Spisok.Srok));
      Memo1.Lines.Add('Участие в конкурсах: '+Spis[i].Spisok.Uchast);
      Memo1.Lines.Add('____________________________')
    end;
end;
1
480 / 253 / 51
Регистрация: 30.06.2010
Сообщений: 651
30.03.2012, 18:59 3
Выдает 1 одного из-за строки
Delphi
1
Memo1.Clear;
переставьте её вне цикла и будет норм.
Ошибку выдает из-за
Delphi
1
for i := 0 to k
а надо
Delphi
1
for i := 0 to k-1
фееричность сего действа убила:
Delphi
1
2
3
   TSpisk = record
   Spisok: TSpisok;
 end;
на лице застыло выражение "Зачем???"
1
4 / 4 / 3
Регистрация: 16.04.2010
Сообщений: 59
30.03.2012, 22:00  [ТС] 4
на счет очистки мемо и цикла,это вы все правельно сказали,мой косяк,но она все равно выдает только одного ученика и то если он идет первым.
а на счет третьего:как однажды научили записывать записи,так и пошло))
0
4 / 4 / 3
Регистрация: 16.04.2010
Сообщений: 59
30.03.2012, 22:46  [ТС] 5
большое спасибо,не совсем поняла что было не так в последнем циеле,кроме не там стоящей очистки.или именно из-за оформления списка был блик?
0
4 / 4 / 3
Регистрация: 16.04.2010
Сообщений: 59
30.03.2012, 22:57  [ТС] 6
а все-разобралась,огромное спасибо
0
480 / 253 / 51
Регистрация: 30.06.2010
Сообщений: 651
30.03.2012, 23:32 7
Пожалуйста )
я рад что разобрались.
Будут ещё вопросы, обращайтесь, я очень ценю людей стремящихся понять и разобраться.
0
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
01.04.2012, 04:28 8
Переменная К нигде не инициализировалась. Начальное значение глобальной переменной может быть любым, поэтому её надо инициализировать.
И на всякий случай ещё раз уточню про список. В самом деле список надо реализовывать на динамическом массиве? Судя по условию задачи, речь скорее всего идёт о динамическом списке:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  //Указатель на элемент списка.
  TPElem = ^TElem;
  //Элемент списка.
  TElem = record
    Fam: String;
    Instrum: String;
    Srok: Integer;
    Uchast: String;
    PNext : TPElem; //Указатель на следующий элемент списка.
  end;
  //Тип, описывающий список.
  TSpisk = record
    PFirst, PNext : TPElem; //Указатели на первый и последний элементы списка.
  end;
0
4 / 4 / 3
Регистрация: 16.04.2010
Сообщений: 59
01.04.2012, 19:38  [ТС] 9
про к действительно забыла,спасибо, теперь все работает))
а динамические массивы использовать не обязательно
0
01.04.2012, 19:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2012, 19:38
Помогаю со студенческими работами здесь

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке
Дан файл Muz. Распечатать список учеников музыкальной школы, которые учатся играть на скрипке....

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке
Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также,...

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке.
Еще одна на записи, если не сложно скиньте код, что-то не нашел в поиске! Распечатать список...

Распечатать список учеников музыкальной школы, которые учатся играть на скрипке
Написать программу в С# windowsForms. Распечатать список учеников музыкальной школы, которые ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru