Пятница, 18.10.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Гостевая книга [ Добавить запись ]

Страницы: « 1 2 ... 15 16 17 18 19 ... 123 124 »
Показано 241-255 из 1848 сообщений
1608. Евгений   (10.05.2008 15:19)
0  
Здравствуйте, Борис!
С прошедшим Вас праздником!

Подскажите, пожалуйста, как можно определить нахождение какого-либо символа, в моем случае - пробела (а так любой символ) при счете справа налево. Путанно?
Попробую объяснить.

Дана строка:
drdg ygbkjdfgffygd gawe yzyg yyg

Надо найти положение первого справа пробела (ну или буквы z, например).
Если использовать что-то типа:
For i := length(St) downto 1 do
begin
z := pos('' '', St);
break
end;
то z показывает положение пробела слева, т.е. цифру 5, а мне надо, чтобы или 4, если справа считать, или 29, если считать слева (а для буквы z значения будет: 26, а надо 7).

Прогонять же всю строку, чтобы в переменной осталось последнее значение, которое будет искомым - не рационально.
Типа такого примера:
For i := 1 to length(St) do z := pos('' '', St);

Как решить? Помогите, пожалуйста!
===============================================
*** Евгений ***
Ответ: Да нет, как раз "прогонять" будет самым рациональным решением. Тем более, что произойдёт очень быстро:

CONST
Space_needed: Integer = 4;
VAR
Space_pos, Space_count: Integer;
.....
BEGIN
Space_count:=0;
for i:=1 to length(St) do
if St[i] = '' '' then begin
inc(Space_count);
if (Space_count) = SpaceNeeded then
Space_pos:=i; Break
end;
END.

1607. Павел   (10.05.2008 13:33)
0  
Хочу всех поздравить с прошедшим праздником 9 мая.
Помогите решить задачи:
Вариант №1
1,Дано натуральное число:
а)найти сумму цифр этого числа;
б)верно ли, что число начинается и заканчивается одной и той же цифрой.
2,Найти все трёхзначные цифры, такие, что сумма цифр равна А, а само число делится на В (А и В вводятся с клавиатуры).
3,Найти количество делителей натурального числа. Сколько из них чётных?
4,Найти все натуральные числа a, b и c из интервала от 1 до 20, для которых выполняется равенство: a2 + b2 = c2.

Спасибо!

1606. Евгений   (09.05.2008 15:44)
0  
Здравствуйте, Борис!
Подскажите, пожалуйста, как надо изменить программу, чтобы при вводе неправильного значения происходило повторное приглашение на ввод до тех пор, пока оно не будет введено правильно.
В качестве примера выкладываю программку.
==========================================================

{ P_K-P-2.PAS
Kontrol''naya rabota 2, zadanie 20,
vypolnil Евгений.
}
Program Summa;

Uses CRT;

Const
M = 255;

Var
sum, d, Q, R, Z : Real;
i : byte;
N : integer;

BEGIN
{ === VVOD I VYVOD ISHODNYH DANNYH === }
WriteLn;
WriteLn(''Vvedite chislo ot 0 do 255 vklyuchitel''''no:'');
Read(N);
WriteLn(''Vy vveli chislo: '',N:2);
WriteLn(''***********************'');

If ((n > 0) and ( N <= M)) then { Uslovie vypolneniya programmy }

begin
{ === VYCHISLENIE === }
Q := 1; R := 1; Z := 1; { Ishodnye dannye }
sum := 0; { Nachal''''noe znachenie summy }

For i := 1 to N do
begin
d := 0.7*sqr(Q)*Q + 0.3*R - 0.1*Z; { Formula posledovatel''nosty }
sum := sum + d; { Nakoplenieh summy }
Z := R; R := Q; Q := d; { Sdvig znacheniy }
end;

{ === VYVOD REZUL''''TATOV NA EKRAN === }
WriteLn(''Summa '',N,'' elementov posledovatel''''nosti sostavlyaet: '',sum:9:6);
WriteLn(''=================================================='');
end;

If ((N > M) or (N <= 0)) then { Uslovie ostanovki programmy }

begin
WriteLn(''Chislo '',N:2,'' nevernoe.'');
WriteLn(''Vvedite chislo v diapazone ot 0 do 255 vklyuchitel''''no.'')
end;

ReadKey;

END.

==========================================================
Евгений.
Ответ: Для решения проблемы нужно отключить контроль операций ввода/вывода с помощью директивы {$I-}. При этом не происходит аварийного завершения программы при неправильном вводе, но генерируется код ошибки. Его можно узнать с помощью вызова функции IOResult. Про нее достаточно знать только три вещи:
1) правильный ввод = 0. Все остальные ошибки не 0.
2) вызов функции - это тоже операция ввода/вывода, а потому следующий вызов ее даст 0 (ведь успешно прошло!). Аналогично, вызов других функций также обновляет буфер, где хранится код ошибки, считываемый IoResult. Следовательно, нужно сразу же прочитать код и сохранить
3) Надолго отключать контроль операций нельзя. Любой другой вывод/ввод - на дискету, сигналы системы о неправильной работе нуждаются во включенном контроле.
(Замечу, что это было страшно в DOS, там это отключение действовало глобально. У Windows своя система. Ее этим не нарушишь).
Итак, нужно действовать так:
VAR
Code, Num: Integer; {к примеру, у Вас байты, но Code должен иметь тип Integer}
BEGIN
Write(''Input of integer: '');
repeat
{$I-} ReadLn(Num); {$I+}
Code := IOResult;
if Num > 255 then Code := 0; {к примеру}
if Code <> 0 then WriteLn(''Error. Try again'');
until Code = 0;
...
END.

1605. Татьяна   (08.05.2008 14:51)
0  
n и k задаются с клавиатуры, матрицы тоже

1604. Павел   (08.05.2008 13:43)
0  
Вот задачи:
1. Дано натуральное число:
a. найти произведение цифр числа;
b. верно ли, что в данном числе нет данной цифры А (цифру А вводить с клавиатуры).
2. Найти все трёхзначные цифры, которые при увеличении на 1 делятся на 2, при увеличении на 2 делятся на 3, при увеличении на 3 делятся на 4, а при увеличении на 4 делятся на 5.
3. Из данного натурального числа удалить все цифры А (а вводятся с клавиатуры).
4. Найти сумму нечётных делителей натурального числа.
5. Найти все равновеликие прямоугольники, стороны которых выражены целыми числами a и b, а площадь равна S (a и b принадлежит интервалу от 1 до 20, а S вводится с клавиатуры).

Заранее спасибо!
Ответ: Ответы - решения найдёте в разделе "Простые программы" от № 56 до 63

1603. Павел   (08.05.2008 13:33)
0  
За 2 вариант Контрольная работа №1
контрольная работа "2, а те решены за 8 вариант

1602. Павел   (08.05.2008 08:21)
0  
в паскале
Ответ: :) Это-то понятно. Делал ведь
Что решать-то, какие задания? Те, что ниже приведены - уже сделаны

1601. Павел   (07.05.2008 16:30)
0  
Помогите пожалуйста решить контрольную работу 1 и
контрольную работу 2
За вариант №2!
заранее спасибо!

Я в пскале вообще ничего не понимаю. а задают вообще много!
Ответ: А что это такое?

1600. nextmaniac   (07.05.2008 10:54)
0  
почему при попытке запустить исходники дурака он выдает kovaj на тему eror. че за?
Ответ: Взяли на http://borlpasc.narod.ru/igra.htm?
Сейчас скачаю, посмотрю. Но, скорее, к вечеру поближе

1599. red-white forces   (07.05.2008 09:51)
0  
Есть какя нибудь прога для перевода текста из шрифта TERMINAL в TIMES NEW ROMAN? А то Паскаль работает с терминалом, а редактировать удобнее times new roman
Ответ: Не забывайте, когда был написан Borland Pascal!! Тогда доминировал DOS.
Можно использовать более современные редакторы, например, Notepad++, Programmers Notepad, ... их много сейчас. А написанное передавать строчному компилятору bpc.exe.
Но появятся проблемы с русскими буквами (кодировки разные)

1598. Павел   (05.05.2008 19:07)
0  
Где можно найти решения к контрольным работам?
Ответ: :( Плохо со временем
Решение первого задания можно взять в разделе "Простые программы" № 53
:) И решения всех = номера от 53 по 57

1597. Павел   (05.05.2008 07:38)
0  
Помогите пожалуйста решить задачи!
Пожалуйста все отдельно! и самм легким способом!!!

1. Дано натуральное число:
найти количество цифр данного числа, больших А (А вводится с клавиатуры);
верно ли, что данное число принадлежит промежутку от А до В и кратно 3, 4 и 5 (А и В вводятся с клавиатуры).
2. Найти сумму всех чисел из промежутка от А до В, кратных 13 и 5 (А и В вводятся с клавиатуры).
3. Найти все симметричные натуральные числа из промежутка от А до В (А и В вводятся с клавиатуры).
4. Найти все натуральные числа из промежутка от a до b, у которых количество делителей превышает заданное число К.
5. Найти все натуральные числа a, b и c из интервала от 1 до 20, для которых выполняется равенство: a + b = c2.

1596. Татьяна   (04.05.2008 18:53)
0  
Здравствуйте, помогите, пожалуйста, решить задачу: необходимо написать программу для нахождения произведения n (n<=10)матриц размерности k*k (k<=10).
Ответ: Как задаются n и k?

1595. Евгений   (29.04.2008 15:27)
0  
Борис!
5) Помучаетесь сами? Или пришлете задание?
Мучаться я все-таки буду, а вот само задание то есть в тексте программы, вначале...
Вот оно:
Dana stroka simvolov St, sostoyaschcaya iz latinskih bukv. Gruppy simvolov,
razdelennye probelami i ne soderzhaschie probelov vnutri sebya, budem
nazyvat` slovami.
Preobrazovat` ishodnuyu stroku v strki St1 i St2
v sootvetstvii s punktami 1 i 2 zadaniya.
Esli kakaya-libo is itogovyh
strok okazhetsya pustoy, vyvodit` sootvetstvuyuschee soobschenie.

p.1 Napechatat` slova,otlichnye ot poslednego slova,
kotorye simmetrichny.

p.2 Napechtat` vse slova, otlichnye ot poslednego slova,
zameniv pervoe vhozhdenie X na KX, esli takoe est`.
Ответ: Начну понемногу помогать :)
В разделе "Простые программы" под № 52 пример того, как нужно удалять двойные, тройные и т.д. пробелы
---
Вот текст:
{Простой способ удалить двойные, тройные и т.д. пробелы
Читаем из заданного файла или, если его нет, то
используем предпределенное значение}
CONST
FileName: String = ''Strings.txt'';
S: String = '' sadfghj D Gajds ghs ASDHJg sdhgjhsad '';
VAR
f: Text;
S: String;
BEGIN
Assign(f, FileName); {$I-}Reset(f); {$I+}
if IOResult = 0 then begin ReadLn(f, S); Close(f) end;
WriteLn(S);
while (POS('' '', S) > 0) do delete(S, POS('' '',S), 1);
{Первый и последний пробелы}
if (lenght(S) > 1) and (S[1] = '' '') then Delete(S, 1, 1);
if (length(S)>1) and (S[length(S)] = '' '') then Delete(S, length(S), 1);
END.

1594. Евгений   (29.04.2008 13:30)
0  
Здравствуйте, Борис!
Вынужден снова обратиться за помощью.
В данной программе не происходит удаление delete(St5, 1 n) в разделе четного слова с количеством знаков больше двух.
Исходная строка для программы: thdf gf ffff jj kkkkk ssfss rr qweewq vde vde

По контролю переменных (Ctrl+F7) найти причину не могу (все прееменные показывают правильные значения), а именно, в момент должного удаления символов (в данном случае 5 символов) удаляется только 2 символа, хотя я в самой программе прописал использовать переменную "n" и она высвечиваетется в Ctrl+F7 (просмоторщик что ли...) цифрой 5, а удаляется только 2 символа.

Я пытался по разному составлять алгоритм, примером другого варианта является блок:
-----------------
{ Esly v nechetnom slove znakov bol`she 2 }


If ((z mod 2 <> 0) and (z > 2)) then
begin
Repeat

if SlY[a] = SlY[b] then flag2:=true
else flag2:=false;
If (flag2=false) then begin
delete(St5, 1, n); exit end;
c:=b-a; inc(a); dec(b);

Until ((b=a) or (flag2=false));

If (flag2=true) then begin
St3:=St3+SlY+pr;
WriteLn(''Нечетные слова St3:'',St3);
delete(St5, 1, n) end;
end;

-----------------
Интересно получается, если я в выражении delete(St5, 1 n) принудительно ставлю число вместо переменной "n", то удаление символов происходит.
Написал много, подведу итог:
- При использовании в программе слов с одинаковыми буквами (четная или нечетная длина) все проходило
нормально;
- При внесении в строку хоть одного несимметричного (с четной длиной слова) работа нарушается;
- Проблема только с блоком: { --- ЧЕТНОСТЬ И НЕЧЕТНОСТЬ СЛОВ --- } (так мне кажется...)
====================

{ File: STR-1_1.PAS
** OAIP **
Laboratornaya rabota 2, variant 3.

Dana stroka simvolov St, sostoyaschcaya iz latinskih bukv. Gruppy simvolov,
razdelennye probelami i ne soderzhaschie probelov vnutri sebya, budem
nazyvat` slovami.
Preobrazovat` ishodnuyu stroku v strki St1 i St2
v sootvetstvii s punktami 1 i 2 zadaniya.
Esli kakaya-libo is itogovyh
strok okazhetsya pustoy, vyvodit` sootvetstvuyuschee soobschenie.

p.1 Napechatat` slova,otlichnye ot poslednego slova,
kotorye simmetrichny.

p.2 Napechtat` vse slova, otlichnye ot poslednego slova,
zameniv pervoe vhozhdenie X na KX, esli takoe est`.
}

Program Stroki_STR_1;
Uses CRT;
Var
St, tempSt, tempSt1, St_no_prob, Posl_Sl,
Razn_no_posl_Sl, SlY, St2, St3, St4, St5, St6 : string;

i, x, x1, n, a, b, c, z : byte;
f_in : text;
pr : char;
flag1, flag2, flag3 : boolean;
BEGIN
{ *************************************************************** }

{ --- OTKRYTIE TEKSTOVOGO FAYLA --- }
{$I-}
Assign(f_in,''e:pasStroki.txt''); Reset(f_in);
if IOResult <> 0 then begin
WriteLn(''OSHIBKA PRI OTKRYTII FAYLA e:pasStroki.txt''); exit; end;
While not EOF(f_in) do begin
readLn(f_in, St); WriteLn(St);
end;
{$I+}

{ *************************************************************** }
{ UDALENIE NACHAL`NYH I KONECHNYH PROBELOV V STROKE }
pr:='' '';
WriteLn(''** КОНТРОЛЬ ** St='',St);

Repeat
if (copy(St, 1, 1) = pr) then delete(St, 1, 1);
if (copy(St, length(St), 1) = pr) then delete(St, length(St), 1);
until (copy(St, 1, 1) <> pr) and (copy(St, length(St), 1) <> pr);

{ UDALENIE LISHNIH PROBELOV VNUTRI STROKI,
VYDELENIE POSLEDNEGO SLOVA }
Repeat
x:=pos(pr, St);
if (copy(St, x+1, 1) = pr) then delete(St, x, 1)
else begin
St_no_prob := St_no_prob + copy(St, 1, x);
delete(St, 1, x);
end;
Until (pos(pr, St)=0);

WriteLn(''Stroka bez lishnih probelov:'',St_no_prob);
Posl_Sl:=St;
WriteLn(''Последнее слово:'',St);

{ POISK SLOV OTLICHNYH OT POSLEDNEGO I NE SODERZH. POSLEDNEGO SLOVA }

Razn_no_posl_Sl:='''';
Repeat
x1:=pos(pr, St_no_prob);
if (copy(St_no_prob, 1, x1-1)) <> Posl_Sl then
Razn_no_posl_Sl:=Razn_no_posl_Sl+copy(St_no_prob, 1, x1);
delete(St_no_prob, 1, x1);
Until (St_no_prob = '''');
WriteLn(''Все отличн. от посл. и без последнего:'',Razn_no_posl_Sl);
{ *************************************************************** }

{ --- ЧЕТНОСТЬ И НЕЧЕТНОСТЬ СЛОВ --- }

St2:=''''; St3:=''''; St6:='''';
St5:=Razn_no_posl_Sl; { ВРЕМЕННО !!! }

Repeat

n:=pos('' '', St5);
SlY:=copy(St5, 1,n-1);
a:=1; z:=length(SlY);
b:=z;
{ ------------------------------------------- }
{ Esly v slove tol`ko odin znak }

If z=1 then delete(St5, 1, n);

{ ------------------------------------------- }
{ Esly v slove tol`ko dva znaka }

If ((z = 2) and (SlY[a]=SlY[b])) then
begin
flag3:=true;
St6:=St6+SlY+pr;
delete(St5, 1, n);

if (flag3=false) then delete(St5, 1, n);
end;

{ ------------------------------------------- }
{ V chetnom slove znakov bol`she 2 } {FLAG 1}

If ((z mod 2 = 0) and (z > 2)) then
begin
if SlY[a] <> SlY[b] then begin
delete(St5, 1, n); break end;
For a:=1 to b do begin

if SlY[a] = SlY[b] then begin
flag1:=true; c:=b-a; inc(a); dec(b) end;
end;

If (flag1=true) then begin
St2:=St2+SlY+pr;
WriteLn(''Четные слова St2='',St2);
delete(St5, 1, n) end;
end;

{ ------------------------------------------- }
{ Esly v nechetnom slove znakov bol`she 2 }


If ((z mod 2 <> 0) and (z > 2)) then
begin
Repeat

if SlY[a] = SlY[b] then flag2:=true
else flag2:=false;
If (flag2=false) then begin
delete(St5, 1, n); exit end;
c:=b-a; inc(a); dec(b);

Until ((b=a) or (flag2=false));

If (flag2=true) then begin
St3:=St3+SlY+pr;
WriteLn(''Нечетные слова St3:'',St3);
delete(St5, 1, n) end;
end;

{ ------------------------------------------- }


St4:=St2+St3+St6;

flag1:=false;
flag2:=false;
flag3:=false;

Until (St5='''');

WriteLn(''St2:'',St2);
WriteLn(''St3:'',St3);
WriteLn(''St6:'',St6);
If (St4='''') then writeLn(''Вышла пустая строка (строка St4)'')
else WriteLn(''Получена первая строка (п.1__St4):'',St4);

WriteLn('' ---------------------------------------------- '');

WriteLn(''***********************'');
WriteLn;
ReadKey

END.
==================
Ответ: 1) А зачем сравнивать буквы? Из задания не понял. Сроки можно сравнивать целиком как цифры, что ли: if String1 <> String2 then ...
2) удобнее завести счетчик слов или простую булевскую переменную, которую, как только слово началось переключать
bool := NOT bool;
И удалять, если ИСТИНА.
3) Надо завести счетчик - положение в строке и разбирать буквы, пока значение этого счетчика меньше длины строки k <= length(...);
4) если удалить нужно только те, что не совпадают с последним, то сначала найти это слово перебирая буквы с конца. И лишь потом по буквам перебирая исходное слово, составлять слова. И удалять тут же (не забывая про счетчик). Конечно, можно завести массив строк, но это как-то дико
5) Помучаетесь сами? Или пришлете задание?


Имя *:
Email *:
WWW:
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Copyright MyCorp © 2024
    Конструктор сайтов - uCoz