Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ЗАПИСИ, задачка на выписывание данных 
:(
    Опции темы
настюша
Дата 25.11.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



Помогите пожалуйста разобраться. В задачке:
Дан массив, содержащий информацию об учениках некоторой школы. Заполнить второй массив данными об учениках только девятых классов.
Не работает самое главное: заполнение второго массива. Вернее сказать работает, только неправильно...Код у меня получился такой:
Код

uses crt;
type
 massiv=record
 name:string[15];
 class:byte;
 vozrast:byte;
 rost:byte;
 ves:byte;
 end;
var
 a:massiv;
 mas1: array[1..50] of massiv;
 mas2: array[1..50] of massiv;
 n:integer;
 i:integer;
begin
 clrscr;
 writeln('Введите количество учеников школы, занесенных в массив');
 readln(n);
 i:=1;
 while i<=n do
 with mas1[i] do
  begin
  write('Фамилия   ',i,'-го ученика :   ');
  readln(name);
  write('Класс, в котором учится этот ученик :   ');
  readln(class);
  write('зраст этого ученика :  ');
  readln(vozrast);
  write('Рост этого ученика (в сантиметрах):   ');
  readln(rost);
  write('Вес этого ученика (в килограммах):   ');
  readln(ves);
  inc(i);
  end;
writeln('');
writeln('Исходный массив данных об учениках:');
writeln('');
writeln('________________________________________');
writeln('|  Фамилия  | Класс | Возраст | Рост (см) | Вес(кг) |');
writeln('________________________________________');
i:=1;
  while i<=n do
  with mas1[i] do
  begin
  write('|',name:9,'    |');
  write('   ', class:3, '    |');
  write('   ', vozrast:4, '    |');
  write('      ', rost:3, '       |');
  write('    ', ves:4, '       |');
  writeln;
  writeln('_________________________________________');
  inc(i);
  end;
 writeln('Сформированный массив:  ');
 writeln('');
 writeln('________________________________________');
 writeln('|  Фамилия  | Класс | Возраст | Рост (см) | Вес(кг) |');
 writeln('________________________________________');
 i:=1;
 while i<=n do
  with mas2[i] do
   if mas2[i].class=9 then
   begin
   write('|',name:9,'    |');
   write('   ', class:3, '    |');
   write('   ', vozrast:4, '    |');
   write('      ', rost:3, '       |');
   write('    ', ves:4, '       |');
   writeln;
   writeln('_________________________________________');
   inc(i);
   end;
 writeln('the end');
 readln;
 end.

 smile Никак не могу заметить, что не так. smile  Подскажите пожалуйста кто-нибудь...
PM MAIL   Вверх
volvo877
Дата 25.11.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Код

  with mas2[i] do
   if mas2[i].class=9 then ...
Ты же еще не заполнила массив mas2, а уже пытаешься с ним работать... Делай так:

Код
i := 1; j := 0;
while i <= n do begin
  if mas1[i].class = 9 then begin
    inc(j); mas2[j] := mas1[i];
  end;
  inc(i);
end;

{ и только потом: }
i := 1;
while i <= j do { <--- В переменной j хранится размер массива mas2 }
  with mas2[i] do
   if mas2[i].class=9 then ...


Это сообщение отредактировал(а) volvo877 - 25.11.2006, 19:43
PM MAIL   Вверх
AlexST
Дата 25.11.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 30.4.2006
Где: Москва

Репутация: нет
Всего: 3



И это поправь:
Код

while i<=n do begin
  with mas2[i] do 
     if class=9 then begin
      write('|',name:9,'    |');
      write('   ', class:3, '    |');
      write('   ', vozrast:4, '    |');
      write('      ', rost:3, '       |');
      write('    ', ves:4, '       |');
      writeln;
      writeln('_________________________________________');
     end;
   inc(i);
end;


Это сообщение отредактировал(а) AlexST - 25.11.2006, 19:55
PM MAIL ICQ   Вверх
настюша
Дата 25.11.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



 smile спасиба, спасиба,спасиба!!!!!!! Выписывает програмка теперь всех кого надо smile , только вот почему то она сама не заканчивается. Надпись "the end" не выходит (да и фиг с ней), но после вывода на экран таблиц и нажатия Enter ничего не происходит  smile (она не возвращается к программе) - это самое 
плохое. Как это преодолеть? smile 




А если написать как посоветовал AlexST, то цикл вообще не заканчивается и таблицу програмка выписывает бесконечно.... smile 

Это сообщение отредактировал(а) настюша - 25.11.2006, 20:10
PM MAIL   Вверх
AlexST
Дата 25.11.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 30.4.2006
Где: Москва

Репутация: нет
Всего: 3



Ты покажи как поправила.  smile 
PM MAIL ICQ   Вверх
настюша
Дата 25.11.2006, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



Вот так:
Код

while i<=n do begin
  with mas2[i] do 
     if mas2[i].class=9 then begin
      write('|',name:9,'    |');
      write('   ', class:3, '    |');
      write('   ', vozrast:4, '    |');
      write('      ', rost:3, '       |');
      write('    ', ves:4, '       |');
      writeln;
      writeln('_________________________________________');
     end;
   inc(i);
writeln('the end');
readln;
end.

PM MAIL   Вверх
Zero
Дата 25.11.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



настюша, у тебя строки 
Код

writeln('the end');
readln;
 находятся внутри цикла, поэтому должны быть глюки адназначна.
PM MAIL ICQ   Вверх
Zero
Дата 25.11.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Стоп извеняюсь незаметил, end там есть...

Цитата(настюша @  25.11.2006,  21:02 Найти цитируемый пост)
Надпись "the end" не выходит (да и фиг с ней), но после вывода на экран таблиц и нажатия Enter ничего не происходит   (она не возвращается к программе) - это самое 
плохое. Как это преодолеть?

Чтобы точно найти ошибку нужно видеть весь код а не его часть в данном случае.

Это сообщение отредактировал(а) Zero - 25.11.2006, 20:49
PM MAIL ICQ   Вверх
настюша
Дата 25.11.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



 smile Представляю твоему рассудительному вниманию весь код:
Код

uses crt;
type
 massiv=record
 name:string[15];
 class:byte;
 vozrast:byte;
 rost:byte;
 ves:byte;
 end;
var
 a:massiv;
 mas1: array[1..50] of massiv;
 mas2: array[1..50] of massiv;
 n:integer;
 i:integer;
begin
 clrscr;
 writeln('Введите количество учеников школы, занесенных в массив');
 readln(n);
 i:=1;
 while i<=n do
 with mas1[i] do
  begin
  write('Фамилия   ',i,'-го ученика :   ');
  readln(name);
  write('Класс, в котором учится этот ученик :   ');
  readln(class);
  write('зраст этого ученика :  ');
  readln(vozrast);
  write('Рост этого ученика (в сантиметрах):   ');
  readln(rost);
  write('Вес этого ученика (в килограммах):   ');
  readln(ves);
  inc(i);
  end;
writeln('');
writeln('Исходный массив данных об учениках:');
writeln('');
writeln('________________________________________');
writeln('|  Фамилия  | Класс | Возраст | Рост (см) | Вес(кг) |');
writeln('________________________________________');
i:=1;
  while i<=n do
  with mas1[i] do
  begin
  write('|',name:9,'    |');
  write('   ', class:3, '    |');
  write('   ', vozrast:4, '    |');
  write('      ', rost:3, '       |');
  write('    ', ves:4, '       |');
  writeln;
  writeln('_________________________________________');
  inc(i);
  end;
 writeln('Сформированный массив:  ');
 writeln('');
 writeln('________________________________________');
 writeln('|  Фамилия  | Класс | Возраст | Рост (см) | Вес(кг) |');
 writeln('________________________________________');
i := 1; j := 0;
while i <= n do begin
  if mas1[i].class = 9 then begin
    inc(j); 
   mas2[j] := mas1[i];
  end;
  inc(i);
end;
i := 1;
while i <= j do 
  with mas2[i] do
    if mas2[i].class=9 then begin
      write('|',name:9,'    |');
      write('   ', class:3, '    |');
      write('   ', vozrast:4, '    |');
      write('      ', rost:3, '       |');
      write('    ', ves:4, '       |');
      writeln;
      writeln('_________________________________________');
     end;
   inc(i);
writeln('the end');
readln;
end.

PM MAIL   Вверх
AlexST
Дата 25.11.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 30.4.2006
Где: Москва

Репутация: нет
Всего: 3



Ну я же сказал, что в конце надо было поправить. Чего не сделала?  smile :
Код

uses crt;
type
 massiv=record
 name:string[15];
 class:byte;
 vozrast:byte;
 rost:byte;
 ves:byte;
 end;
var
 a:massiv;
 mas1: array[1..50] of massiv;
 mas2: array[1..50] of massiv;
 n:integer;
 j,i:integer;
begin
 clrscr;
 writeln('Введите количество учеников школы, занесенных в массив');
 readln(n);
 i:=1;
 while i<=n do
 with mas1[i] do
  begin
  write('Фамилия   ',i,'-го ученика :   ');
  readln(name);
  write('Класс, в котором учится этот ученик :   ');
  readln(class);
  write('зраст этого ученика :  ');
  readln(vozrast);
  write('Рост этого ученика (в сантиметрах):   ');
  readln(rost);
  write('Вес этого ученика (в килограммах):   ');
  readln(ves);
  inc(i);
  end;
writeln('');
writeln('Исходный массив данных об учениках:');
writeln('');
writeln('________________________________________');
writeln('|  Фамилия  | Класс | Возраст | Рост (см) | Вес(кг) |');
writeln('________________________________________');
i:=1;
  while i<=n do
  with mas1[i] do
  begin
  write('|',name:9,'    |');
  write('   ', class:3, '    |');
  write('   ', vozrast:4, '    |');
  write('      ', rost:3, '       |');
  write('    ', ves:4, '       |');
  writeln;
  writeln('_________________________________________');
  inc(i);
  end;
 writeln('Сформированный массив:  ');
 writeln('');
 writeln('________________________________________');
 writeln('|  Фамилия  | Класс | Возраст | Рост (см) | Вес(кг) |');
 writeln('________________________________________');
i := 1; j := 0;
while i <= n do begin
  if mas1[i].class = 9 then begin
    inc(j); 
   mas2[j] := mas1[i];
  end;
  inc(i);
end;
i := 1;
while i <= j do begin
  with mas2[i] do 
    if class=9 then begin
      write('|',name:9,'    |');
      write('   ', class:3, '    |');
      write('   ', vozrast:4, '    |');
      write('      ', rost:3, '       |');
      write('    ', ves:4, '       |');
      writeln;
      writeln('_________________________________________');
     end;
   inc(i);
end;
writeln('the end');
readln;
end.




Это сообщение отредактировал(а) AlexST - 25.11.2006, 21:09
PM MAIL ICQ   Вверх
настюша
Дата 25.11.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



 smile You are so considerate and vise! smile  Thank you very much! Все работает как часы! smile 
PM MAIL   Вверх
volvo877
Дата 25.11.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



настюша, одно условие явно лишнее (моя ошибка, признаюсь, я сразу его не убрал) :
Код
while i <= j do begin
  with mas2[i] do 
    if class=9 then begin
    ...
можно смело заменить на
Код

while i <= j do begin
  with mas2[i] do begin
  ...
, ибо не может в массиве mas2 быть элементов, в которых class не равен 9, об этом позаботился код, написанный мной выше...  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0934 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.