IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> разбиение на слова + массивы, Массивы + строки
HeX
сообщение 20.11.2005 22:36
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: AleX

Репутация: -  -1  +


SoS

1.Дана строка символов. Группу символов, разделенных с одной или с обеих сторон одним или несколькими пробелами и не содержащую внутри себя пробелов, назовем словом.
Присвоить переменной F = 1, если слово с наибольшим количеством символов находится в первой половине строки, F= 2 – во второй половине, F= 0 – часть слово в первой, а часть во второй. Предполагается, что слово с наибольшей длиной единственное.

2.Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содер-жащих хотя бы один нулевой элемент.
Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик.


--------------------
...Купи слона, ну и что что все говорят продай слона...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 16)
Altair
сообщение 20.11.2005 22:57
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
1.Дана строка символов. Группу символов, разделенных с одной или с обеих сторон одним или несколькими пробелами и не содержащую внутри себя пробелов, назовем словом.
Присвоить переменной F = 1, если слово с наибольшим количеством символов находится в первой половине строки, F= 2 – во второй половине, F= 0 – часть слово в первой, а часть во второй. Предполагается, что слово с наибольшей длиной единственное.


вот

Исходный код

Type
TElem = string;
TList = ^TNode;
TNode = record
Info: TElem;
Next: TList
end;


function getmax(l:tlist):string;
var
max:string;
begin
max:='';
while L <> nil DO
begin
if length(L^.Info)>length(max) then max:=L^.Info;
L := L^.Next
end;
getmax:=max;
end;


procedure ListClear ( var L: TList );
var
N: TList;
begin
while L <> nil do
begin
N :=L;
L:=L^.Next;
dispose(N)
end
end;


function SepWord(s:string):tlist;
procedure AddLast(var L: TList; E: TElem);
var
N, P: TList;
Begin
new(N);
N^.Info :=E; N^.Next :=nil;
if L= nil then L:=N else begin
P:=L;
while P^.Next <> nil do P:=P^.Next;
P^.Next:=N
end
End;
const
i:integer=1;
r:set of char = [chr(0)..chr(255)]-['A'..'Z','a'..'z','1'..'9','0'];
var
SL:boolean; L: TList; ss:string;
begin
sl:=false; L:=nil; ss:='' ; i:=1;
while i<=length(s) do begin
if ((not(s[i] in r)) and (sl=false)) then sl:=true;
if (not(s[i] in r)) and (sl=true) then ss:=ss+s[i];
if ((s[i] in r)or(i=length(s))) and (sl=true) then
begin
AddLast(L,ss); ss:=''; sl:=false;
end;
inc(i)
end;
SepWord:=L;
end;

var
L:tlist;
maxstr,s:string;
f:byte;
begin
l:=nil;
write('Enter string : '); readln(s);
l:=sepword(s);
maxstr:=getmax(l);
if pos(maxstr,s)<length(s) div 2 then f:=1;
if pos(maxstr,s)>length(s) div 2 then f:=2;
if (pos(maxstr,s)<length(s) div 2) and (pos(maxstr,s)+length(maxstr)>length(s) div 2) then f:=0;
writeln(f);
readln;
listclear(l);
end.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.11.2005 23:12
Сообщение #3


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
2.Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содер-жащих хотя бы один нулевой элемент.
Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик.

const
size_row = 10; { число строк }
size_col = 10; { число столбцов }

type
tvector = array[1 .. size_col] of integer;
tmatrix = array[1 .. size_row] of tvector;

var
mx: tmatrix;
n,m, i, j: integer; s:integer;


procedure swap_rows(var mx: tmatrix;
const i, j: integer);
var T: tvector;
begin
T := mx[i]; mx[i] := mx[j]; mx[j] := T
end;

procedure print(var mx: tmatrix);
var i, j: integer;
begin
for i := 1 to n do
begin
for j := 1 to m do
write(mx[i][j]:4);
writeln
end;
end;

function har(mx:tmatrix; i:integer):integer;
var j: integer; s:integer;
begin
s:=0;
for j := 1 to m do begin
if (mx[i,j]<0) and (not (odd(mx[i][j]))) then inc(s,mx[i,j]);
end;
har:=s;
end;



begin
s:=0;
writeln('enter n,m ... ');
readln(n,m);
{ Заполнение матрицы }
for i := 1 to n do
for j := 1 to m do begin
write('a[',i,',',j,']=');
readln(mx[i][j])
end;
{Определить номер первого из столбцов, содер-жащих хотя бы один нулевой элемент.}
for i:=1 to n do begin
for j:=1 to m do begin
if (mx[i,j]=0) and (s=0) then s:=j;
end
end;
if s<>0 then writeln('s=',s) else writeln('Not Found!');


{ Матрица до обмена }
writeln('before:'); print(mx);
writeln('------------------------------------');
for i:=1 to n-1 do
for j:=i+1 to n do if har(mx,i)<har(mx,j) then swap_rows(mx, i, j);
{ Матрица после обмена }
writeln('after:'); print(mx);
readln;
end.


тестировал на
n=4
m=4

Цитата
s=3
before:
  1  -2  -3  -2
  1  -1  -4  -7
  2  3  0  3
  -1  5  -1  3
------------------------------------
after:
  2  3  0  3
  -1  5  -1  3
  1  -2  -3  -2
  1  -1  -4  -7


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
HeX
сообщение 21.11.2005 20:03
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: AleX

Репутация: -  -1  +


Спасибо большое но не могли бы сделать первую задачу попроще без указателей и динамических переменных "nil" пожалуйста заранее еще раз сапсибо. smile.gif good.gif good.gif good.gif


--------------------
...Купи слона, ну и что что все говорят продай слона...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 21.11.2005 20:09
Сообщение #5


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Можно. щас переделаем.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 21.11.2005 20:20
Сообщение #6


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


вот преобразование с минимальными изменениями

Type
TElem = string[20];
TList = array[1..20] of telem;
VAR
NN:integer;

function getmax(l:tlist):string;
var
max:string;
i:integer;
begin
max:='';
for i:=1 to nn do begin
if length(L[i])>length(max) then max:=L[I];
end;
getmax:=max;
end;


Procedure SepWord(var L:tlist; s:string);
procedure AddLast(var L: TList; E: TElem);
Begin
if nn<20 then begin
inc(nn);
l[nn]:=e;
end else writeln('error! not free memory! ');
End;
const
i:integer=1;
r:set of char = [chr(0)..chr(255)]-['A'..'Z','a'..'z','1'..'9','0'];
var
SL:boolean; ss:string;
begin
sl:=false; ss:='' ; i:=1;
while i<=length(s) do begin
if ((not(s[i] in r)) and (sl=false)) then sl:=true;
if (not(s[i] in r)) and (sl=true) then ss:=ss+s[i];
if ((s[i] in r)or(i=length(s))) and (sl=true) then
begin
AddLast(L,ss); ss:=''; sl:=false;
end;
inc(i)
end;
end;

var
L:tlist;
maxstr,s:string;
f:byte;
begin
write('Enter string : '); readln(s);
sepword(l,s);
maxstr:=getmax(l);
if pos(maxstr,s)<length(s) div 2 then f:=1;
if pos(maxstr,s)>length(s) div 2 then f:=2;
if (pos(maxstr,s)<length(s) div 2) and (pos(maxstr,s)+length(maxstr)>length(s) div 2) then f:=0;
writeln(f);
readln;
end.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
HeX
сообщение 21.11.2005 20:25
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: AleX

Репутация: -  -1  +


Я просто вас обожаю!!!
Я люблю весь мир!!!!!!!
wub.gif wub.gif wub.gif


--------------------
...Купи слона, ну и что что все говорят продай слона...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 21.11.2005 20:27
Сообщение #8


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


wub.gif мы тоже всех любим wub.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.11.2005 21:14
Сообщение #9


Гость






HeX, ты уверен, что эта процедура будет выполняться только один раз, и не будет какого-нибудь цикла, вроде "вводить строку и проделывать указанные действия, пока не введена пустая строка (или, например, 10 раз)" ? Учти, если SepWord будет выполняться больше одного раза в одном запуске программы - будут проблемы.

Олег, найдешь сам, или показать, где?
 К началу страницы 
+ Ответить 
Altair
сообщение 21.11.2005 21:18
Сообщение #10


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


ну так обнуление массива слов надо бы сделать да и переменной nn...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.11.2005 21:21
Сообщение #11


Гость






Да не только. Тут еще одна засада:
const
i:integer=1;
в SepWord не будет выполняться smile.gif Оно же при компиляции инициализируется, так что если ты при первом вызове нашел 3 слова, счетчик на 3-х и останется... Лучше бы такие вещи переменными объявлять...
 К началу страницы 
+ Ответить 
HeX
сообщение 21.11.2005 21:22
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: AleX

Репутация: -  -1  +


Да вроде все работает не барахлит но если можно ускорить работу то покажите место я исправлю


--------------------
...Купи слона, ну и что что все говорят продай слона...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 21.11.2005 21:48
Сообщение #13


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


volvo, там же в коде:
i:=1;


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.11.2005 21:59
Сообщение #14


Гость






blink.gif А тогда на что тебе Typed Const вообще? Я бы заменил вот так:
Var i: integer;
Const r = [chr(0)..chr(255)]-['A'..'Z','a'..'z','0'..'9'];

меньше вопросов у преподавателей будет возникать... blum.gif
 К началу страницы 
+ Ответить 
Altair
сообщение 21.11.2005 22:25
Сообщение #15


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
А тогда на что тебе Typed Const вообще?

ТИпизированная константа и есть переменная!

Цитата
меньше вопросов у преподавателей будет возникать... blum.gif


Ко мне преподы не пристают с вопросами на программинге, гиблое дело smile.gif tong2.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
HeX
сообщение 22.11.2005 17:48
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: AleX

Репутация: -  -1  +


Дак есть ошибка или ето миф blink.gif


--------------------
...Купи слона, ну и что что все говорят продай слона...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.11.2005 17:58
Сообщение #17


Гость






HeX
Ты на мой вопрос ответил? Нет. Почему же ты думаешь, что я буду отвечать на твой?
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 25.06.2025 0:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"