Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача по теме файлов + оператор Case Of + меню
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Myasnik
Вообщем дали мне вот такую задачу, я как всегда в ауте из-за срока в 2 дня... lol.gif wacko.gif wacko.gif

Программа запрашивает имя файла и предоставляет пользователю меню из 3-х пунктов:
a) упорядочить по возрастанию
б) упорядочить по убыванию
в) определить, сколько компонентов файла представляют собой цифры, сколько - не заглавные буквы латинского алфавита, сколько являются восклицательными знаками.
volvo
Ну, и в чем проблема? Открывай файл как File Of Char и читай символы до победного EOF... В Case проверяй, какой символ был прочитан, и увеличивай соответствующий счетчик...

Я в FAQ выкладывал, насколько я помню, процедуру, сортирующую как по возрастанию, так и по убыванию, в зависимости от переданного параметра. Если в FAQ не найдешь - посмотри у меня на сайте, там точно есть...
Myasnik
Цитата(volvo @ 4.02.2006 19:26) *

Ну, и в чем проблема? Открывай файл как File Of Char и читай символы до победного EOF... В Case проверяй, какой символ был прочитан, и увеличивай соответствующий счетчик...

Я в FAQ выкладывал, насколько я помню, процедуру, сортирующую как по возрастанию, так и по убыванию, в зависимости от переданного параметра. Если в FAQ не найдешь - посмотри у меня на сайте, там точно есть...

с первыми двумя пунктами разберусь, а вот с пунктом в) вообще не рублю. sad.gif
volvo
countExclamation := 0;
countDigits := 0;
countLower := 0;
While not Eof(f) Do Begin
  Read(f, Ch);
  Case Ch Of
    '!': Inc(countExclamation);
    '0' .. '9': Inc(countDigits);
    'a' .. 'z': Inc(countLower);
  End;
End;
Где проблема?
Myasnik
ну тебе не проблема, а мне уже от написанного плоха wacko.gif wacko.gif wacko.gif

Спасибо Агромное!!! smile.gif smile.gif smile.gif
Myasnik
Короч, нарот, помогите... запарился я тут с этой задачей... нужно чтоб оператор выводил и буквы и цифры и сортировал их, получилось только цифры... а как буквы и цифры?

Вот задача (тока работает пока меню 1 пункта, 2 такой же, поменять-то знак, 3 тут написан, ещё не списаль =)))


Program chegevAra;
uses Crt;

Type ff=file of integer;
type Tvector=array [1..10] of integer;

Var 
f1:ff;
Vector:Tvector;
c,b,i,j,a:integer;
Name:string;

Begin
ClrScr;
Randomize;
Writeln('Vvedite imya faila:');
Read(Name);
Assign(f1,Name);
{$i-}
Rewrite(f1);
{$i+}
If ioresult<>0 then rewrite(f1);
For i:=1 to 10 do
begin
a:=random(10);
write(f1,a);
end;

Close(f1);
Writeln('Vse chisla faila:');
reset(f1);
seek(f1,0);
while not Eof(f1) do

begin
read(f1,a);
writeln(a:3);
end;

writeln('Veberite interesuyushiy vas punkt:');
writeln('1)Yporyadochitb po Bozrastaniy.');
writeln('2)Yporyadochitb po yBbIvaniy.');
writeln('3)Opredelitb, skolbko komponentov...');
reset(f1);
read(c);
case c of

1:begin
For i:=FILESIZE(F1)-1 downto 1 do
For j:=0 to i-1 do
begin
seek(f1,j);
read(f1,a,b);
if a>b then
begin
seek(f1,j);
write(f1,b,a);
end;
end;

close(f1);
reset(f1);
write('Otsortirivanniy file:');
for i:=1 to Filesize(f1) do

begin
read(f1,a);
write(a:3);
end;

close(f1);
end;
end;
READKEY;
END.


volvo
Цитата
получилось только цифры... а как буквы и цифры?
Буквы и цифры при использовании
Type ff=file of integer;
?
Никак...
Я же говорил, используй File Of Char...

К тому же, у тебя в программе есть несколько недочетов:
reset(f1);
seek(f1,0); { <-- Зачем это? Указатель и так в начале файла... }


Assign(f1,Name);
{$i-}
Rewrite(f1);
{$i+}
If ioresult<>0 then rewrite(f1);
{ А с чего это, если была ошибка в первый раз, то во второй она НЕ должна произойти? }


Цитата
2 такой же, поменять-то знак
А если без Copy/Paste?
Myasnik
Сделал задачу! Всё ништяк работает! good.gif
Пасиб тебе Вольво за подсказки! good.gif


Program chegevAra;

uses Crt;
Type ff=file of char;

Var
f:ff;
a1,a2,a3,c,i,j:integer;
Name:string;
s,a,b:char;

Begin
ClrScr;
Randomize;
Writeln('Vvedite imya faila:');
readln(name);
assign(f,name);
Rewrite(f);
Writeln('Zapolnite file');
For i:=1 to 10 do
  begin
  Readln(a);
  Write(f,a);
end;
Seek(f,0);

writeln('Veberite interesuyushiy vas punkt:');
writeln('1)Yporyadochitb po Bozrastaniy.');
writeln('2)Yporyadochitb po yBbIvaniy.');
writeln('3)Opredelitb, skolbko komponentov...');
reset(f);
read(c);
case c of

1:begin
For i:=FILESIZE(F)-1 downto 1 do
For j:=0 to i-1 do
begin
seek(f,j);
read(f,a,b);
if a>b then
begin
seek(f,j);
write(f,b,a);
end;

end;
close(f);
reset(f);
write('Otsortirivanniy file:');
for i:=1 to Filesize(f) do
begin
read(f,a);
write(a:4);
end;
close(f);
end;

2:begin
For i:=FILESIZE(F)-1 downto 1 do
For j:=0 to i-1 do
begin
seek(f,j);
read(f,a,b);
if a<b then
begin
seek(f,j);
write(f,b,a);
end;

end;
close(f);
reset(f);
write('Otsortirivanniy file:');
for i:=1 to Filesize(f) do
begin
read(f,a);
write(a:3);
end;
close(f);
end;

3: Begin
   a1:=0;
   a2:=0;
   a3:=0;
   while not Eof(f) do begin

   read(f,s);
   case s of
'!':Inc(a1);
'0'..'9':Inc(a2);
'a'..'z':Inc (a3);
end;
end;
   Writeln('In file');
   Writeln('skolko cifr: ',a2);
   Writeln('skolko bukvy alfavita:', a3);
   Writeln('skolko !: ',a1);
close(f);
end;
end;
READKEY;
END.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.