Анка, (она же Незнакомка? или я ошибаюсь? )
Поиском пользуемся...
1 задание - http://forum.pascal.net.ru/index.php?showtopic=5840&view=findpost&p=44358 (это как раз случай для 2-х последовательностей)
2 задание - http://forum.pascal.net.ru/index.php?showtopic=2694&view=findpost&p=38100 + поиск (задача уже решалась)
и т.д.
const
russ = ['А'..'П', 'Р'..'Я', 'а'..'п', 'р'..'я'];
digits = ['0'..'9'];
var
count_rus, count_digit: integer;
...
begin
{ Здесь - читаешь строку s }
count_rus := 0; count_digit := 0;
for i := 1 to length(s) do
if s[i] in russ then inc(count_rus)
else if s[i] in digits then inc(count_digit);
{ если count_rus > count_digit значит букв больше, иначе - больше цифр }
end.
volvo, klem4, спасибо, но 4 задачу я как раз решила....... причем видимо 3 способом..... :D
Насчет операций с векторами -
volvo, а можете мне объяснить вот эту строчку? Я просто не могу что-то понять, что это именно за элементы? (ar[Pred(j)] например)
If VLength(ar[Pred(j)]) > VLength(ar[j]) Then Begin { < }
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
Ну, это же стандартный метод "пузырька"...
ar[Pred(i)] - это то же самое что и ar[i - 1]. То есть, все что там делается - проверяется, если длина (VLength) предыдущего вектора больше длины последующего, то поменять эти 2 элемента местами (этим занимается вторая строка)... А закомментированный значок "<" - если понадобится сортировать по убыванию, меняем в этой строке "больше" на "меньше"...
volvo, спасибо, просто я не поняла только как раз записи ar[Pred(i)], так как я раньше так ни разу не писала.....то что это стандартно я знаю, сама часто писала через такой метод, а почему метод именно "пузырька" (первый раз такое слышу )?
что-то у меня Паксаль не хочет признавать процедуры и функции для программы с векторами... с действиями над ними...... кстати, а можно объявить переменные к конкретной задаче как бы в середине программы или в самом начале только? Просто у меня все 4 задачи объединены общим меню......
Прикрепи свою программу в аттаче или вышли мне в личку, я посмотрю, что ты делаешь.. Эти процедуры (с небольшими изменениями) взяты из нормально работающей программы...
я сейчас попробую пока сама разобраться.... надеюсь все будет нормально......
у меня сейчас возникла др. проблема...... с выводом массива в 1 задаче....
печатаю
for i:=1 to (size+size) do (или to 20) {максимальное количество в обоих массивах}
write (result[i]);
{end for}, а он выдает вообще весело... если массивы формируются случайно, то все нормально, а вот если самому...... то получается что-то вида
1 2 3 4 0 0 0 0 0 0 56 67 0 0 0 0 0 0 0 0 0 0
Ну, так приведи код, КАК заполняются массивы. Телепатов тут нет ...
volvo, не знаю, правильно ли, но решила разбить вывод массива на 2 пункта - для случайной генерации этих массивов и для чтения из файла, также с клавы. Немного устранились глюки, только теперь последний элемент во втором варианте (для файла и с клавы) конечного массива заменяется почему-то нулем. Массив формируется точно также почти, как вы предложили через поиск.... у меня только переменные другие. Вот.
Там только заменены переменные, типа arr[i] на a[i], вот и все... как сюда скинуть текст не знаю..... как вообще скопировать из Паскаля текст? или это нельзя сделать....
Так присоедини весь PAS-файл...
Жмешь кнопку "Ответить" (не Быстрый ответ, а именно "Ответить"), и выбираешь имя файла для присоединения (.PAS, или заархивируй, если исходник большой)...
а можно случайно сгенерировать текст (или строку)?
var
ch:char;
s:string;
...
Begin
...
readln(n);
s:='';
randomize;
count:=0;
repeat
ch:=chr(random(256));
s:=s+ch;
inc(count);
until count=n;
...
End.
ch:=chr(random(26)+97)
ch:=chr(random(256));
s := s + chr(32+random(255-32));
klem4, а что такое n? количество символов в строке что ли?
еще вопросик....
как лучше реализовать возможность сохранить результаты в файл? после каждой конкретной задачи или в конце программы после всего? и как это сделать?
а что такое count? какого типа? хм.....
volvo, а как это сделать? просто открыть вначале файл для записи, а в конце закрыть его? что я не совсем понимаю...
Count - типа Byte (больше нет смысла, все равно в строке только до 255 символов):
var
count, n: byte;
s: string;
begin
s := '';
n := 5 + random(255 - 5); { случайная длина от 5 до 255 символов }
for count := 1 to n do
s := s + chr(32+random(255-32)); { это я уже писал, почему }
end;
var f_log: text;
begin { начало основной программы }
assign(f_log, 'log.txt');
{$i-} rewrite(f_log); {$i+}
{ обработка ошибки открытия лог-файла }
...
Begin { здесь обрабатываем сложение векторов }
GetVector('first vector', v1);
GetVector('second vector', v2);
VAdd(v3, v1, v2); { v3 <- v1 + v2 }
PrintVector('result', v3); { печатаем на экран }
{ и записываем в лог }
WriteLn(f_log, 'add vector: v1=', v1.X:7:3, v1.Y:7:3,
' v2=', v2.X:7:3, v2.Y:7:3, ' result = ', v3.X:7:3, v3.Y:7:3);
End;
...
close(f_log); { перед самым концом программы закрываем лог-файл }
end.
volvo, а у меня n типа integer, зачем byte?
с файлом кошмар.... значит придется это писать, точнее одну часть в каждой части моей программы, но спасибо, вроде поняла. Я немного не так думала....
кстати, я сейчас конечно попробую на деле, но какие символы формируются при случайной генерации? Мне нужна латиница и цифры (П.С. это для 4 задачи)
var ch: char;
{ здесь генерируешь n }
for i := 1 to n do begin
repeat
{ случайный символ в интервале ['0'(ноль) .. 'z'] }
ch := chr(48+random(122-48));
{ но в этом интервале есть и другие символы,
(точки, двоеточия, запятые...), и их не надо включать в строку }
until upcase(ch) in ['A'..'Z', '0'..'9'];
s := s + ch;
end;
volvo, спасибо, сейчас подредактирую, мне нужна как раз только латиница и цифры. Я просто в самой задаче в первом сообщении забыла изменить, русских букв на английских..
а на счет integer.... просто я уже сгенерировала n, и если не integer, то придется вводить новую переменную, а так n у меня уже есть, используется в др. месте, а переменых уже...... очень много :D
что-то у меня немного не получается с 4, так как я уже сделала ее для ввода с клавы и из файла, у меня программа для str {char}, вот теперь не знаю, что делать для случайно генерации, так как не хочется опять писать новую программу для генерации, а в старой при замене некоторых переменых типы не подходят....... а сдавать завтра....
вот моя программа, может кто подскажет:
begin
cifri:=0;
bukvi:=0;
repeat
repeat
read (str);
if str in ['a'..'z'] then
bukvi:=bukvi + 1;
if str in ['0'..'9'] then
cifri:=cifri + 1;
until eoln;
until str='*';
readln;
if bukvi>cifri then
writeln ('V dannoi stroke bol`she bukv');
if cifri>bukvi then
writeln ('V dannoi stroke bol`she cifr');
if cifri=bukvi then
writeln ('V dannoi stroke bukv i cifr porovnu');
writeln ('Dlja prodolgenija nagmite enter');
end;
Попробуй вот так:
begin
str_ok := True; { введи новую переменную }
case t of { t - твой выбор, откуда читать строку }
1: begin
{ читаешь строку с клавиатуры (только читаешь, не обрабатываешь !!!) }
end;
2: begin
{ Чтение строки из файла }
end;
3: begin
{ генерация случайной строки }
end;
4: begin
{ сообщение о выходе }
str_ok := False;
end;
end {case}
{ а здесь - собственно обработка строки (если нужно) }
if(str_ok) then begin
cifri:=0; bukvi:=0;
for i := 1 to length(str) do
if upcase(str[i]) in ['A'..'Z'] then bukvi:=bukvi + 1
else if str[i] in ['0'..'9'] then cifri:=cifri + 1;
if bukvi>cifri then writeln ('V dannoi stroke bol`she bukv')
else if cifri>bukvi then writeln ('V dannoi stroke bol`she cifr');
else writeln ('V dannoi stroke bukv i cifr porovnu');
end;
end;
if (t=1) or (t=2) or (t=3) or (t=4) then
volvo, спасибо, куда писать, я знаю, но эта переменная чем мне поможет? если при генерацци случайной у меня все записывается в переменную s, как вы показали, а если изменить, чтобы все читалось в str, то типы не подходят! А так суть программы-то не меняется..... все равно надо что-то делать с вводом случайно или я что-то не понимаю? Готова признать, что неправа, если это так.....
Я что-то не вижу где здесь переменная S...
writeln ('Vvedite nomer stroki');
write ('Vibrana stroka: ');
readln (k);
min:=mx[k][1];
jmin:=1;
for i:=k to k do {не знаю, как записать иначе, мне нужна лишь одна строка}
for j:=1 to size_col do
if mx[k][j]<min then begin
swap_cols(mx,jmin,j);
min:=mx[k][j];
jmin:=jmin+1;
end
else
j:=j+1;
{end;}
k := 3; { заменяем по 3-й строке, допустим. }
for j:=1 to size_col do
if mx[j, k]<min then begin
swap_cols(mx,jmin,j);
min:=mx[j, k];
jmin:=jmin+1;
end
else
j:=j+1;
mx[k][j] - такой формы записи в Паскале не существует. Так только в языке C пишут.
Надо так: mx[j, k]
j - столбец.
s := s + ch. Если изменить даже тип переменной str на string (было char), то почему-то не идет сама программа.....
[if str in ['a'..'z'] then
procedure print (var mx: tmatrix);
var i, j: integer;
begin
for i:=1 to size_col do
begin
for J:=1 to size_col do
write(mx[j][i]:4);
writeln;
end;
end;
Понятно. У тебя матрица определена по-другому. Значит всё нормально.
Вольво писал:
for i := 1 to length(str) do
if upcase(str[i]) in ['A'..'Z'] then bukvi:=bukvi + 1
else if str[i] in ['0'..'9'] then cifri:=cifri + 1;
или я что-то не понимаю, но нужные столбцы он менять не хочет все равно....
Какие столбцы ???? О чем речь вообще? Об обработке матриц или строк? Я вообще уже ничего не понимаю...
В-общем, так: подобных тем ("4 задачи и куча вопросов") больше НЕ создавать. Одна тема - один вопрос. Эту тему я скорее всего закрою, ибо здесь уже полный балаган.
volvo, я не знаю, что делать..... а столбцы это я с Romtek`ом обсуждала........ у меня ничего не идет.............. :bye2: в строках у меня при любой случайной генерации выдается сообщение, что букв и цифр поровну................................
My fault ... Извиняюсь, я просто поставил лишнюю запятую... Вот так измени (то, что я тебе раньше давал):
{ а здесь - собственно обработка строки (если нужно) }
if(str_ok) then begin
cifri:=0; bukvi:=0;
for i := 1 to length(str) do
if upcase(str[i]) in ['A'..'Z'] then bukvi:=bukvi + 1
else if str[i] in ['0'..'9'] then cifri:=cifri + 1;
if bukvi>cifri then writeln ('V dannoi stroke bol`she bukv')
else if cifri>bukvi then writeln ('V dannoi stroke bol`she cifr') {; <--- запятой быть НЕ ДОЛЖНО !!! }
else writeln ('V dannoi stroke bukv i cifr porovnu');
end;
volvo, я ее и не ставила..... правила я знаю...... но мне от этого не легче....
Проверь PM ...