Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 15:06   #1
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию строка (занести в массивы - буквы и слова)

То есть, дана строка, выписать из нее и занести в массивы = 1) для слов и 2) для количества букв в слове
Lodyr вне форума Ответить с цитированием
Старый 20.12.2009, 16:00   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
Uses Crt;

var
  mas1: array [0..10] of String;
  mas2: array [0..10] of Byte;
  s, tmp: String;
  i, len: Integer;
  WordEnum: Byte;

begin
  ClrScr;
  Readln(s);

  tmp := '';
  WordEnum := 0;

  len := Length(s);

  for i := 1 to len do
  begin
    if (s[i] = #32) and (s[i+1] <> #32) then
    begin
      Inc(WordEnum);
      tmp := '';
      Continue;
    end;
    tmp := tmp + s[i];
    mas1[WordEnum] := tmp ;
    mas2[WordEnum] := Length(tmp);
  end;

  for i := 0 to WordEnum do
  begin
    Write(mas1[i], ':');
    WriteLn(mas2[i]);
  end;

  ReadKey;
end.
psycho-coder вне форума Ответить с цитированием
Старый 20.12.2009, 16:17   #3
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

я дико извиняюсь, нужно в Паскале
program dflsd;
const znp=['.',',',';',';','!','?']; {ogranichenie na znaki}
mds=100;{maksim dlina stroki}
mdsl=20;{maksim dlina slova}
type tstr=string[mds];{dlina stroki}
tsl=string[mdsl];{dlina slova}
var a:array [tsl] of string;{massiv slov}
b:array [1.100] of integer;{massiv bukv}
procedure obrslov (s:tstr);
var i,l,b,d:byte;{i-бегунок, l-длина строки, d-длина слова}
begin
l:=length(s);{заносим длину строки в переменную)
i:=1;{begunok dla simvola}
while (i<=l) and (pos(s[i],znp)>0) do
inc(i);
b:=i; {nachalo slova};
while (i<=1) and (pos(s[i],znp)=0) do
inc(i);
d:=(i-b);{dlina sledua pozichii ot nachala do konca};
if d>0 then
obrslov (a[n]:=copy(s,b,d)and (b[n]:=d);

знаю что тут ошибки будут, но как вариант заполнения можно же использовать такую процедуру?
Lodyr вне форума Ответить с цитированием
Старый 20.12.2009, 16:41   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Так я Вам и написал в Pascal
psycho-coder вне форума Ответить с цитированием
Старый 20.12.2009, 17:12   #5
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

Дико извиняюсь, просто не привык к этим записям...
Спасибо большое!!! (хочется узнать, вот по моей процедуре можно как то занести в массив эти буквы и слова? или она нерабочая?)
теперь вопрос, как мне работать с массивами
то есть тут задача уже проста
необходимо в массиве букв смотреть разность 2 и 1 элемента и фикисировать ее смотреть разность 3 и 2
если неравна разность 2 и 1 = то присваиваем ей эту новую разность и смотрим дальше =====основная задача такова, что нам необходимо вывести на экран все слова образующие арифметическую прогрессию

просто мне хочется узнать :1) узнать как пользоваться массивом элементов (вести над ним операции
и 2) чем процедуру или функцию это все проделывать = если необходимо вывести на экран эти слова в виде арифметической прогрессии
Lodyr вне форума Ответить с цитированием
Старый 20.12.2009, 17:24   #6
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

и вот в чем проблема = длины слов находятся с учетом пробелов)))
Lodyr вне форума Ответить с цитированием
Старый 20.12.2009, 18:00   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
хочется узнать, вот по моей процедуре можно как то занести в массив эти буквы и слова? или она нерабочая?
Не знаю, с твоей не разбирался
Цитата:
теперь вопрос, как мне работать с массивами
то есть тут задача уже проста
необходимо в массиве букв смотреть разность 2 и 1 элемента и фикисировать ее смотреть разность 3 и 2
если неравна разность 2 и 1 = то присваиваем ей эту новую разность и смотрим дальше =====основная задача такова, что нам необходимо вывести на экран все слова образующие арифметическую прогрессию
Ну и смотри, переводи букву в ее код (Функция Ord) и сравнивай
Цитата:
просто мне хочется узнать
:1) узнать как пользоваться массивом элементов (вести над ним операции
Q[<номер элемента>] := <значение>; // Присвоить конкретному элементу конкретное значение.
<переменная> := Q[<номер элемента>]; // Взять элемент массива
Или я что то не так понял?
Цитата:
2) чем процедуру или функцию это все проделывать = если необходимо вывести на экран эти слова в виде арифметической прогрессии
Это как удобней

Цитата:
и вот в чем проблема = длины слов находятся с учетом пробелов)))
То есть должны быть с пробелами в массиве? Тогда вот это
Код:
    if (s[i] = #32) and (s[i+1] <> #32) then
    begin
      Inc(WordEnum);
      tmp := '';
      Continue;
    end;
измени, на
Код:
    if (s[i] = #32) and (s[i+1] <> #32) then
    begin
      mas1[WordEnum] := tmp + #32;
      Inc(WordEnum);
      tmp := '';
      Continue;
    end;
Тут последнее слово будет без пробела
psycho-coder вне форума Ответить с цитированием
Старый 20.12.2009, 18:33   #8
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

ООООО = все, теперь правильно считает, мне хочется понять, что означает:
1) tmp ===============?
2) WordEnum =======текстовый курсор?
3) #32 ======это данные из таблицы взяты?, я не помню что они означают...
Lodyr вне форума Ответить с цитированием
Старый 20.12.2009, 18:36   #9
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

const znp='.,,,;,;,!,?'; {ogranichenie na znaki}
var a:array [1..100] of string;{massiv slov}
b:array [1..100] of integer;{massiv bukv}
s:string;
i,l,beg,d,n:byte;{i-aaaoiie, l-aeeia no?iee, d-aeeia neiaa}
begin
readln (s);
l:=length(s);{caiinei aeeio no?iee a ia?aiaiio?)
i:=1;{begunok dla simvola}
while (i<=l) do
begin
while (i<=l) and (pos(s[i],znp)>0) do
inc(i);
beg:=i; {nachalo slova};
while (i<=1) and (pos(s[i],znp)=0) do
inc(i);
d:=(i-beg);{dlina sledua pozichii ot nachala do konca};
if d>0 then
a[n]:=copy(s,beg,d);;
b[n]:=d;
end;
begin
write(a[n], ':');
writeln(b[n]);
end;
end.
=================по сути должна делать все также, что и ваша, только одно но... не знаю в чем ошибка в ее работе...
Lodyr вне форума Ответить с цитированием
Старый 20.12.2009, 18:51   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
хочется понять, что означает:
1) tmp ===============?
В эту переменную укладывается слово (по буквам) и заносится в массив
Цитата:
2) WordEnum =======текстовый курсор?
Это номер слова
Цитата:
3) #32 ======это данные из таблицы взяты?, я не помню что они означают...
Это пробел из таблицы ASCII, его можно заменить на ' ' (два апострофа и между ними пробел), но так наглядней видно, где и что
Цитата:
по сути должна делать все также, что и ваша, только одно но... не знаю в чем ошибка в ее работе...
Если честно, мне так лень в ней разбираться(

И оформляйте код как следует (значек # в редакторе)
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Занести слова в массив [Delphi] Lemo Помощь студентам 4 20.12.2009 18:03
Все ли эти слова написаны с большой буквы dip Помощь студентам 11 02.11.2009 20:42
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47
Определить, что строка содержит буквы motorway Microsoft Office Excel 5 06.07.2009 17:23
Си. Вычеркнуть из слова X те буквы, которые встречаются в слове Z. hen Помощь студентам 1 29.04.2009 15:32