Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод определенного слова
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Krono
задана запись ,состоящая из букв , кол-во букв кратно N . Всего в записи M слов длинной N. Составить программу печати слова с заданным номером A.

задали недавно , не получается никак сделать , сдавать надо через 2 дня
Krono
Цитата(Krono @ 14.12.2008 18:11) *

задана запись ,состоящая из букв , кол-во букв кратно N . Всего в записи M слов длинной N. Составить программу печати слова с заданным номером A.

задали недавно , не получается никак сделать , сдавать надо через 2 дня

помогите пожалуйста cray.gif
Lapp
Цитата(Krono @ 14.12.2008 18:11) *
не получается никак сделать
Ты покажи, что получается.

Условие ты описал нечетко. Может, по твоей проге будет понятнее.
Krono
вообщем смысл всей моей программы:
1. создать строку с заданным кол-вом букв и слов
2. пронумеровать все слова строки (не могу понять как это делается)
3. вывести слово с заданным номером на экран (ввод номера с клавиатуры)

в инсте нам вообще ничего не объясняют , просто дают задание и делай что хочешь
я пытаюсь сам сделать , но в паскале я мало что понимаю

пример меню выкладываю
  var
a:char;
b,pos,n,m,g,i:byte;
str,str0:string;
iocode:integer;
key,key_2:char;
name:string;
f:text;
begin
clrscr;
writeln('otkuda budete wwodit dannije?');
writeln('1 - s klaviatyrj');
writeln('2 - iz fajla');
readln (key);
case key of
'1': begin
writeln('vvedite proverjaemi simvol');
readln(a);
writeln('vvedite dliny slova');
readln(b);
writeln('vvedite kol-vo slov');
readln(m);
writeln('vvedite stroky dlinoi ',m*b);
readln(str);
WriteLn(' Vvedite save or not save file ');
WriteLn(' Save rezault 1-yes 2-no');
Readln(key_2);
case key_2 of
'1':begin
repeat
Writeln(' soxraniau,vvedite name==>');
readLn(name);
assign(f,name);
{$I-}
rewrite(f);
{$I+}
iocode:=ioresult;
if iocode<>0 then WriteLn('oshibka vvoda!!!');
until(iocode=0);
write(f,str);
close(f);
end;
'2':WriteLn(' ne soxraniau');
else begin { oshibka vvoda faila}
writeLn(' vvod ne correckten');
WriteLn(' fail ne budet soxranen!!!');
end;
end;
end;
'2': begin
repeat
WriteLn('vvedite imia fail');
readln(name);
assign(f,name);
{$I-}
reset(f);
{$I+}
iocode:=ioresult;
if iocode<>0 then WriteLn('Faila ',name,' po dannomu pyti net!');
Until iocode=0;
read(f,str);
WriteLn(str);
close(f);
end;
else
begin
Writeln(' nepravelno vveden kod simvola');
WriteLn(' programma zaversena ');
WriteLn(' exit after KeyPressed ');
Repeat until keyPressed;
exit;
end;
end;

begin
pos:=0;
n:=1;
g:=b;
i:=1;
while pos<=(m*b) do begin
if str[pos+1]=a then begin
pos:=pos+b;
for pos:=n to g do
str0:=str0+str[pos];
writeln('slovo ',i,str0);
i:=i+1;
end
else pos:=pos+b;
n:=n+b;
g:=g+b;
delete(str0,1,length(str0));
end;
readkey;
end;
end.
Krono
аууу, хоть кто-нибудь знает как делать подобные задачи?????
хотябы подскажите !mol1.gif !mol1.gif !mol1.gif
Unconnected
Возможно, так?

const n=100;
var s,s2:string;
a,b,m,m2:integer;
mas1:array[1..n] of byte;
begin
writeln('Vvedite dlinu slova,kratnuyu 100');
readln(m);
if 100 mod m <> 0 then begin
writeln('Vvedennoe chislo ne kratno 100!');
readln;
halt;
end;
writeln('Vvedite sapis');
readln(s);
b:=1;
for a:=1 to 100 div m do
begin
mas1[a]:=b;
b:=b+m;
end;
writeln('Vvedite nomer slova dlya poiska');
readln(m2);
s2:=copy(s,mas1[m2],m);
writeln(s2);
readln;
end.


Lapp
Цитата(Krono @ 14.12.2008 18:11) *
задана запись ,состоящая из букв , кол-во букв кратно N . Всего в записи M слов длинной N.
Насколько я понял, места для пробелов не остается. Слова определяются только координатами.

Цитата(Krono @ 18.12.2008 21:03) *
пример меню выкладываю
При чем тут вообще меню? blink.gif В задаче про меню ни слова..

Цитата(Unconnected @ 20.12.2008 21:06) *
Возможно, так?
Unconnected в своем репертуаре.. smile.gif
1. Почему в программе жестко задано число 100? Про него что-то есть в условии?..
2. Ты понимаешь кратность с точностью до наоборот: кратно значит "делится на", а у тебя по смыслу "является множителем".
3. В задании сказано создать запись, а ты просишь ее ввести..

Но принцип решения в целом верный. Вот вариант, основанный на том же принципе, и свободный от перечисленных недостатков. По-прежнему вся запись хранится в переменой типа string, поэтому общее количество букв ограничено 255.
const
e='Mnogovato budet..';

var
n,m,i: integer;
s: string;

begin
repeat
repeat
Write('Vvedite kolichestvo slov: ');
ReadLn(m);
if m>255 then WriteLn(e)
until m<255;
repeat
Write('Vvedite chislo bukv v slove: ');
ReadLn(n);
if n>255 then WriteLn(e)
until n<=255;
if m*n>255 then WriteLn(e)
until m*n<=255;
s:='';
for i:=1 to m*n do s:=s+Chr(Random(28)+65);
WriteLn('Sozdana zapisj:');
WriteLn(s);
repeat
Write('Vvedite nomer iskomogo slova: ');
ReadLn(i);
if i>m then WriteLn(e)
until i<=m;
WriteLn('Vot vashe slovo: ',Copy(s,n*(i-1)+1,n))
end.

Unconnected
blink.gif Сорри, про кратность действительно перепутал...

Unconnected
Кстати, Lapp, а в твоей программе разве не нужно было написать randomize?
Или это сделано специально? smile.gif
Krono
меню требует препод,
смысл меню:
1)
1. ввести все данные с клавиатуры.
2.создать фаил , заполнить его текстом.
3.сохранить текст в файле.
2)
использовать фаил , пронумеровать все слова.
вывести нужное слово (с нужным номером).
3) просто выход из программы).

wink.gif

спасибо , я в паскале практически ничего не понимаю , но приходится учиться.
Lapp
Цитата(Unconnected @ 21.12.2008 13:51) *
Кстати, Lapp, а в твоей программе разве не нужно было написать randomize?
Или это сделано специально?
А зачем? В некотором смысле - специально. Randomize пишется тогда, когда программа готова к сдаче в эксплуатацию. При отладке (в большинстве случаев) гораздо удобнее без него: повторяемость результатов, как правило, облегчает этот процесс. За исключением, конечно, тех случаев, когда важна именно неповторяемость. Обычно это происходит после первого этапа, когда убедишься, что сам по себе процесс заполнения работает правильно. Данный случай - не тот. Я вообще не вижу в задании ни слова о случайности. Надо было создать запись - я создал.

Цитата(Krono @ 21.12.2008 20:39) *
меню требует препод,
Меню - отдельная задача, не упомянутая в условии. Если надо, то советую сделать две вещи:
1. поиск по Форуму (просто сотни меню гарантирую);
2. если вопрос останется - создать новую тему.

Добавлено через 2 мин.
Цитата(Unconnected @ 21.12.2008 13:30) *
blink.gif Сорри, про кратность действительно перепутал...
Свершилось чудо: Unconnected признал свою ошибку и извинился! smile.gif
Это явно стоит плюс единицы в репутации.. smile.gif
+1, прибавлено
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.