Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа с БД

Автор: Feagor 24.12.2007 0:31

Сведения о ученике состоят из имени, фамилии, названии класса (год обучениия, буква). Дан файл f содержащий данные об учениках этой школы. Пусть в каждой строке через пробел даны сведения о каждом ученике. Выяснить в каких классах больше 35 человек.
то что сделано:

uses crt;
procedure WrRec(s:string; var f,i,k:string; var b:char);
var j,t,code:integer;
s1:string;
begin
for j:=1 to length(s) do
begin
if s[j]=' ' then begin t:=j+1; break; end
else f[j]:=s[j];
end;
for j:=t to length(s) do
begin
if s[j]=' ' then begin t:=j+1; break; end
else i[j-t+1]:=s[j];
end;
for j:=t to length(s) do
begin
if s[j]=' ' then begin t:=j+1; break; end
else k[j-t+1]:=s[j]
end;
b:=s[t];
end;
type pupil=record
fam:string;
ima:string;
klas:string;
bukva:char;
end;
var a:array[1..100] of pupil;
f:text;
i,j:integer;
s:string;
begin
clrscr;
i:=0;
assign(f,'d:\1234.dat');
reset(f);
while not eof(f) do
begin
writeln;
inc(i);
readln(f,s);
writeln(s);
WrRec(s,a[i].fam,a[i].ima,a[i].klas,a[i].bukva);

end;

close(f);
writeln(length(a[1].fam));
readkey;
end.


капитально не врубаюсь почему функция length неработает
writeln(length(a[1].fam));


Добавлено через 1 мин.
в принципе надо разобраться почему не раскладывает по массиву данные, дальше с подсчетом уж как-нить разберусь

Автор: klem4 24.12.2007 1:09

для начала убедись что твоя процедура разбиения строки на отдельные куски работает верно, выглядит она странновато если честно smile.gif Можно сделать намного короче, буквально в несколько строк.

Автор: Feagor 24.12.2007 1:23

2 klem4 ну как умею, я и подозреваю что с ней что-то не то можешь что-то другое предложить, буду рад!

Автор: volvo 24.12.2007 1:28

Feagor, а все данные гарантированно разделены только одним пробелом? Тогда вот тут есть функция get_str, которая выделяет токен по его номеру, при условии, что ВСЕ токены в строке разделены одним символом: http://forum.pascal.net.ru/index.php?s=&showtopic=9488&view=findpost&p=62651

Автор: klem4 24.12.2007 1:41

или то-же, но рекурсивно:

function get_part(s: String; part: Byte): String;
var
p: Byte;
begin
p := pos(' ', s);
p := byte(p = 0) * 255 + p;

if part = 1 then
get_part := copy(s, 1, p - 1)
else
get_part := get_part(copy(s, p + 1, 255), part - 1);
end;

var
s: String = 'Ivanov Petr Petrovich 10 A';

var
i: Byte;

begin
for i := 1 to 5 do writeln(get_part(s, i));
end.

Автор: Feagor 24.12.2007 1:50

спасибо volvo классный метод, не то, что мое извращение lol.gif +1

Добавлено через 1 мин.
обоим +1, спасибо, помогли))) щас доделаю, рабочий исходник выложу...

Добавлено через 3 мин.
извиняюсь, за оффтоп, туплю, но где тут +1 сделать smile.gif у нас просто уже 3 час ночи

Автор: klem4 24.12.2007 1:57

smile.gif Чтобы самому плюсы/минусы ставить, надо иметь > 25 мессаджей на форуме smile.gif Ну или можешь попросить кого-нить из модераторов в ПМ smile.gif volvo от тебя сейчас плюсану smile.gif

Автор: volvo 24.12.2007 2:35

Цитата
volvo от тебя сейчас плюсану
yes2.gif Взаимно...