Помощь - Поиск - Пользователи - Календарь
Полная версия: подсчет количества слов списка.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ducky
Подскажите, пожалуйста, с чего начать писать эту программу.

type слово= array [1..10] of char;
ТЭ=слово;

Описать функцию, подсчитывающую количество слов списка L, которые начинаются и оканчиваются одной и той же буквой.
Krjuger
Напишите как вводится список,какой именно список и что за русские слова? Это предполагаевый код или нечно вербальное?
Цитата
array [1..10] of char

Ограничение на каждое вводимое слово,что длинна не привышает 10 символов?
Начать стоит с того,что написать структуру самого списка.Для этого надо понять какие ограничения для него вы введете,либо они у вас есть.Затем надо организовать ввод списка,либо из файла либо с клавиатуры,далее как раз та самая функция для поиска числа слов,которое вам надо найти.Входные параметры у этой функции, либо список,либо список и первая буква,по которой вы будете считать слова,Выбор либо сугубо ваш,либо есть какие то конкретные требоваия по хранению данных,например.если значение буквы будет еще где то требоваться,то ввод лучше организовать вне функции и передават ькак параметр.
Lapp
Hi Ducky!! Давненько тебя не было видно! Где пропадала? надеюсь, не на других форумах? smile.gif

Цитата(ducky @ 4.04.2011 22:57) *
Подскажите, пожалуйста, с чего начать писать эту программу.

type слово= array [1..10] of char;
ТЭ=слово;

Описать функцию, подсчитывающую количество слов списка L, которые начинаются и оканчиваются одной и той же буквой.
Немного непонятно написано.. Если рассматривать только последнюю строчку, то ответ на твой вопрос проще простого - надо написать все процедуры/функции для списков (все это есть у нас в FAQ, но ты все равно спрашивай, что неясно). Ну, хорошо - может, и не все, но по крайней мере создание, добавление элемента, просмотр. Лучше сделать это все в одтельном unit'е. Ну, а после этого вся прога займет несколько строчек..
ka2na4ei
Цитата(ducky @ 4.04.2011 21:57) *

Подскажите, пожалуйста, с чего начать писать эту программу.

type слово= array [1..10] of char;
ТЭ=слово;

Описать функцию, подсчитывающую количество слов списка L, которые начинаются и оканчиваются одной и той же буквой.


разве тип char может иметь длину более 1-го символа? не проще описать как строку...
Krjuger
ka2na4ei
А при чем тут тип char?Слово можно хранить как масив символов,что собственно тут и предполагалось.Тогда поиск нужных слов будет выполняться просто сравнением первого элемента массива с исходным.
Допустим вы опишете как строку,но извините,а что если на одной строке несколько слов?Тогда вам надо как то усложнять считывание данных из файла,либо использовать другое представление хранимых данных?В общем,упрощения не вижу совсем.Кстати не забывайте,что основная структура данных это список.
ducky
Цитата(Lapp @ 5.04.2011 5:19) *

Hi Ducky!! Давненько тебя не было видно! Где пропадала? надеюсь, не на других форумах? smile.gif

Немного непонятно написано.. Если рассматривать только последнюю строчку, то ответ на твой вопрос проще простого - надо написать все процедуры/функции для списков (все это есть у нас в FAQ, но ты все равно спрашивай, что неясно). Ну, хорошо - может, и не все, но по крайней мере создание, добавление элемента, просмотр. Лучше сделать это все в одтельном unit'е. Ну, а после этого вся прога займет несколько строчек..


День добрый)
Нет-нет, ни в коем случае) отдыхали просто от программирования)

Добавлено через 1 мин.
Спасибо всем! сейчас буду пытаться сделать!)
Lapp
Цитата(ducky @ 5.04.2011 18:39) *
Спасибо всем! сейчас буду пытаться сделать!)

Хорошо, давай. Ты только особо не упирайся, сразу показывай, что получается. Так будет лучше всем, потому что ошибки (если будут, конечно)) будут исправляться на ранней стадии. А еще ты поимеешь опыт коллективной работы )).

Krjuger, замечание ka2na4ei совершенно не лишено смысла. Хотя он и не вполне понимает, может, смысл типа char, но для хранения слова все же лучше использовать тип string - хотя, конечно, укороченный, string[10]. Иначе придется изобретать механизм определения длины слова.
Krjuger
Ну я про это и говорил,что тогда надо будет либо как то заранее обговаривать формат хранимых данных,например,чтобы на каждой строке было лиш 1 слово,либо как то выдирать из исходного файла(да,все это время я предполагал,что ввод данных идет из файла,а не с клавиатуры) каждое слово и записывать в строку.
Цитата
А еще ты поимеешь опыт коллективной работы

Что же так грубо,не ожидал от вас..."получишь"как то мягче))))
Lapp
Цитата(Krjuger @ 6.04.2011 17:32) *
Ну я про это и говорил,что тогда надо будет либо как то заранее обговаривать формат хранимых данных,например,чтобы на каждой строке было лиш 1 слово,либо как то выдирать из исходного файла(да,все это время я предполагал,что ввод данных идет из файла,а не с клавиатуры) каждое слово и записывать в строку.
Krjuger, ты меня не понял. Пожалуйста, перечитай мой пост.

Цитата
Что же так грубо,не ожидал от вас..."получишь"как то мягче))))
???
Что такого грубого в слове иметь?.. blink.gif Может, объяснишь?
ducky
блондинка и делфи

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

type pt = ^elem;
elem = record
info : byte;
next : pt;
end;

var
r: pt;
ok: boolean;
n: Real;

Procedure Search (first: pt; x: integer; var q: pt);

begin
{ TODO -oUser -cConsole Main : Insert code here }

First:= nil;
While n>0 do
begin
New®;
r^.Next:=first;
r^.Number:=n;
First:=r;
n := n-1
end;

r: = first;
ok: = true;
while (r<>nil) and ok do
if r^.Number=x then ok:=false else r:=r^.Next;
q: = r

end.
Lapp
Нет, дорогая блондинка ducky )).
Ты спрашивала:
Цитата(ducky @ 4.04.2011 22:57) *
Подскажите, пожалуйста, с чего начать писать эту программу.

Я говорю тебе еще раз: начни с реализации списка как такового. Перед поиском (который требуется в задаче) тебе надо заполнить список. Значит, нужны как минимум процедуры инициализации и заполнения. Откуда, кстати, ты его будешь брать? из файла? Или вводить с клавы каждый раз? Подумай над этим тоже.
Затем, для поиска понадобится просмотр списка. То есть передвижение по списку (по крайней мере, вперед).
Все это есть в нашем FAQ.

ducky, не ленись.. то, что ты написала в предыдущем посте - галиматья, ты ее откуда-то выдернула, признайся.. "что-то похожее на список" )) Думала, я проглочу? )) Начни делать список. Лучше пусть будут только две строчки, но твои и в нужном направлении. Ладно? smile.gif и между нами снова будет совет да любовь ))
ducky
выключили блондинку. rolleyes.gif
мне же надо список чтоб в него можно добавлять элементы было?
Lapp
ну или напиши такие кодовые слова: "никак не могу врубиться, чего ты от меня хочешь.."
но тогда я буду долго и нудно объяснять, что такое список, и с чем его употребляют в пищу..

Добавлено через 2 мин.
Цитата(ducky @ 13.04.2011 1:29) *
выключили блондинку. rolleyes.gif
mode: blondy = OFF;
wow!!! smile.gif

Цитата
мне же надо список чтоб в него можно добавлять элементы было?

Да. Сможешь? показать?
ducky
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
name=array [1..10] of Char;
p=^elem;
elem=record CC:p;
end;

var
slovo:name;
i:Integer;
nachalo, tek, ob:p;

begin
{ TODO -oUser -cConsole Main : Insert code here }
New (nachalo);
Readln;
writeln ('первый элемент списка: ');
for i:=1 to 10 do read (slovo [i]);
Readln;
nachalo^.CC:=nil;
nachalo^.data:=slovo;

while slovo<> ' ' do
begin
tek:=nachalo;
New(ob);
Writeln ('следующее слово');
for i:=1 to 10 do read (slovo[i]);
Readln;
end;

end.




Добавлено через 18 мин.
только я единственного не пойму, этот список в итоге как список группы/класса будет выглядить или как набор слов в строчку?

Добавлено через 7 мин.
а где я слова беру, они где-то уже должны быть записаны? unsure.gif
ужас
Lapp
Спасибо, ducky, это уже лучше ))

Опиши запись правильно.
ВСЕ названия типов начинай с t, например tName.
Почему ты делаешь массив of char? делай string[10], с ним удобнее работать (см. выше, пост Казначея и далее мой)
Оформи как unit.
Вот тебе заготовка:
unit WordList;

interface

type
tWord= string[10];
tpElem= ^tElem;
tElem= record
wrd: tWord;
next: tpElem
end;

procedure AddElem(l: tElem; w: tWord);


implementation

procedure AddElem(l: tElem; w: tWord);
begin
// тут код добавления элемента
end;

begin
end.


Добавлено через 4 мин.
Цитата(ducky @ 13.04.2011 1:37) *
только я единственного не пойму, этот список в итоге как список группы/класса будет выглядить или как набор слов в строчку?
Список - это список.. Не надо заботиться о том, как он выглядит. Это распределенная структура данных.

Цитата
а где я слова беру, они где-то уже должны быть записаны? unsure.gif
В файле )). Либо по слову на строчке, либо просто текстом (тогда надо делать процедуру распознавания отдельных слов).

Цитата
ужас
кайф!!!! smile.gif
ducky
добавление элемента, то есть формирование списка?

а в type всегда с t надо начинать называть?
Lapp
Цитата(ducky @ 13.04.2011 2:24) *
добавление элемента, то есть формирование списка?
Ну назови это так, если хочешь )). Мне кажется, "добавление элемента" правильнее описывает функционал.

Цитата
а в type всегда с t надо начинать называть?
Это не есть требование языка. Это моя личная просьба )). Учись организовывать то, что ты создаешь. В маленькой программке у тебя есть шанс не запутаться с любыми названиями. Если программа превышает пару экранов - запутаешься наврняка.

Это услуга, которую ты делаешь СЕБЕ smile.gif
ducky
так? sad.gif


unit WordList;

interface

type
tWord= string[10];
tpElem= ^tElem;
tElem= record
wrd: tWord;
next: tpElem
end;

procedure AddElem(l: tElem; w: tWord);


implementation

procedure AddElem(l: tElem; w: tWord);
begin
First: = nil;
While n>0 do
begin
New®;
r^.Next:=first;
r^.Number:=n;
First:=r;
n := n-1
end;

begin
end.
Гость
Цитата(Lapp @ 7.04.2011 0:44) *

Что такого грубого в слове иметь?.. blink.gif Может, объяснишь?[/color]

smile.gif с технической точки зрения ничего, а в оттенках смысла, который может получится приставкой "по-" "от-" или при употреблении в прошешем времени (да и в настоящем... и в будущем...)
от***
по***
***л Я их
Krjuger
Это не я написал,а кто то другой ,если что)))
Lapp
Цитата(Krjuger @ 7.05.2011 14:49) *
Это не я написал,а кто то другой ,если что)))

Если - что? lol.gif Да я знаю, что не ты.. ))

Господа, мне несколько жалко РЯ, который я очень люблю (как я понял после достаточно близкого знакомства с другим языком). Мало того, что большинство населения стремится ужать его в три слова, так еще теперь и хуже того - значения этих трех слов расползлись и на совершенно нормальные другие слова! Кошмар.. неужели не противно, а?..

Ладно, все, кончаем флудить. Кого сильно задело - открывайте тему в Дискуссиях (да, когнито)).


Помогли бы лучше автору темы справиться со списком.. Я до завтрашнего вечера вряд ли смогу заняться этим.

ducky, ты сделала движение в правильном направлении, но ошибок много.. И еще: кроме процедуры добавления должна быть процедура инициализации, а также просмотра списка. Я помогу завтра (если никто раньше не поможет).
Krjuger
Ладно попробую я помоч.
Во-первых,

AddElem(l: tElem; w: tWord);
begin
First: = nil;
While n>0 do
begin
New®;
r^.Next:=first;
r^.Number:=n;
First:=r;
n := n-1
end;


Насколько я понимаю ты хочеш заполнить список натуральными числами от n до 1,но вопрос, а как его найти....Его надо передавать в процедуру.Тоже самое и с самим списком.Ты передаеш l и w,а работаеш с r и n, согласись непорядок.
Дальше я приведу то,что удалось сделать,но там будеть чуть по другому(собственно имена,которые мне привычней и все),но зато более наглядно станет.

TElem = integer;
Type
PTStackItem = ^TStackItem;
TStackItem = record
Data: TElem;
Next: PTStackItem;
end;
TStack = PTStackItem;

Procedure InitStack(var Stack:TStack);
begin
Stack:=nil;
end;


Function StackEmpty(Stack:TStack):Boolean;
begin
StackEmpty:=(Stack=NIL);
end;

Procedure StackPush(var Stack:TStack; E:TElem);
var
tmp:TStack;
begin
new(tmp);
tmp^.next:=Stack;
tmp^.data:=E;
Stack:=tmp;
end;

Procedure PrintStack(Var Stack: TStack);
Var p: PTStackItem;
Begin
WriteLn( 'Printing Stack...' );
If StackEmpty(Stack) Then
Begin
WriteLn('<Џгбв®©>'); Exit
End;

p := Stack;
While p <> nil Do
Begin
Write( p^.data, ' ' );
p := p^.next;
End;
WriteLn
End;


Для того чтобы работать со списками всгда сначала надо описать их функционал,то есть инициализацию,добавление 1го элемента и ,если в задании необходимо, удаление 1го элемента.Ну я для себя еще выделаю проверку стека на пустоту.А потом на базе этого уже создается сам список вызыванием необходимого числа раз добавления 1го элемента.Насчет того,что Lapp сказал про просмотр,я не совсем понял,что он подразумевал,поэтому сделал печать на экран.
Ну и собственно создание стека будет зависеть от того как ты его вводиш,руками ли из файла ли,поэтому тут я решил не делать ничего пока.тем более,что ты скорее всего уже сама справишся.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.