С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21

Задача на строки, немогу разобраться

19.05.2008, 18:39. Показов 1687. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В строке заданы через двоеточие 2 оператора присваивания общего вида: "первый:=число1+число2:второй:=число 3-число4" (например:"A:=3+4:B:=7-2"). Вычислить значения переменых и распечатать их.

Вот решение задачи примерно такова типа только для знаков +,-,*,/ и выражения вида "первый:=число1 знак число2"

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
program expression;
var s:string[50];ss:string[4];si:Char;a1,a2,is,i,p1,p2:integer;res:real;
begin
  writeln('‚ўҐ¤ЁвҐ бва®Єг б ўла ¦Ґ*ЁҐ¬.');
  readln(S);
  ss:='+-*/';si:=' ';
  for i:=1 to 4 do
  if pos(ss[i],s)>0then
   begin is:=pos(ss[i],s);
   si:=ss[i]
   end;
  if si=''then
   writeln('ЌҐЇа ўЁ«м*®Ґ ўла ¦Ґ*ЁҐ!')
  else
   begin
    val(copy(s,1,is-1),a1,p1);
    val(copy(s,is+1,length(s)-is),a2,p2);
    if (p1<>0) or (p2<>0) then
     writeln('ЌҐЇа ўЁ«м*®Ґ ўла ¦Ґ*ЁҐ!')
    else
     begin
      case si of
       '+': res:=a1+a2;
       '-': res:=a1-a2;
       '*': res:=a1*a2;
       '/': res:=a1 div a2
      end;
     writeln(s,'=',res)
    end
   end
  end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2008, 18:39
Ответы с готовыми решениями:

Задача по теории вероятности, немогу разобраться
Доброе время суток, помогите пожалуйста решить задачку.. Два игрока А и В поочередно бросают монету. Выигравшим считается тот, у кого...

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

Немогу разобраться
Нужно записать в файл массив строк #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &lt;windows.h&gt; #include &lt;winbase.h&gt; ...

8
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
19.05.2008, 21:21
Подправил вашу программу. Во-первых в приведенном коде выражение не "первый:=число1 знак число2", а "число1 знак число2". Поскольку у вас два выражения, поэтому чтобы не писать два раза длинный код, оформил определение результата в процедуру, поэтому поменял некоторые переменные. Оставил два знака.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
uses crt;
var s,s1:string;
i,k,rez:integer;
Procedure Rezult(a:string;var rz:integer);
var ss:string[2]; //строка знаков
si:char; //сам знак
is,a1,a2,p1,p2,res:integer;
begin
ss:='+-';
for i:=1 to 2 do
if pos(ss[i],a)>0 then
begin
is:=pos(ss[i],a);//находим позицию знака в выражении
si:=ss[i] //определяем знак
end;
if si=''then writeln('Nevernoe vyrazenie!')
else
begin
val(copy(a,4,is-4),a1,p1); //превращаем числа из строк в integer
val(copy(a,is+1,length(s)-is),a2,p2);
if (p1<>0) or (p2<>0) then
writeln('Nevernoe vyrazenie!')
else
begin
case si of /выполняем децствия
'+': rz:=a1+a2;
'-': rz:=a1-a2;
end;
end;
end;
end;
begin //начало программы
clrscr;
writeln('Vvedite vyrazenie:');//типа a:=12+56:b:104-56
readln(S);
for i:=1 to length(s)do
if (s[i]=':')and(s[i+1]<>'=')then
begin
s1:=copy(s,1,i-1); //выделяем первое выражение
delete(s,1,i); //удаляем его, остается второе
end;
writeln('Rezultat:');
Rezult(s1,rez); //вызываем процедуру для первого выражения
writeln(s1[1]+'=',rez);
Rezult(s,rez); //вызываем процедуру для второго выражения
writeln(s[1]+'=',rez);
readln
end.
0
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
19.05.2008, 23:18  [ТС]
Мне кажеться программа выводит совсем не то что нужно?
Миниатюры
Задача на строки, немогу разобраться  
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
20.05.2008, 06:50
В строке заданы через двоеточие 2 оператора присваивания общего вида: "первый:=число1+число2:второй:=число 3-число4" (например:"A:=3+4:B:=7-2"). Вычислить значения переменых и распечатать их.
У вас же написано, что нужно вводить типа a:=5+9:b:=6-3, а вы вводите 5+9:6-3, поэтому неправильно и выводит. Если вам нужно вводить, так как вы хотите, надо немного переделать.
0
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
21.05.2008, 21:27  [ТС]
А ну да точно, спасибо огромное всё отлично работает.

Добавлено через 22 часа 19 минут
Подскажи плиз как эту задачу записать без процедур и функций?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
21.05.2008, 22:10
Во-первых без процедур и функций вообще практически программ не бывает, особенно при работе со строками. Например в этой программе использованы функции pos и copy. Если вы имеете в виду подпрограммы, то подпрограмм-функций нет, а только одна подпрограмма-процедура. Можно, если пальцы не отнимутся, написать и без нее, только то, что в ней написано, нужно будет написать два раза, что совершенно бессмысленно.
Если есть желание займись, ничего сложного.
0
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
21.05.2008, 23:35  [ТС]
Просто тут такая ситуация, процедуры мы ещё непроходили, и когда эту задачу показываеш учителю она говорит "переделывай без процедур" её не волнует что она правильно работет. вот так вот.
Глянь я попробовал переделать но неправильно работать стала помоги плиз.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ss:='+-';
for i:=1 to 2 do
if pos(ss[i],a)>0 then
begin
is:=pos(ss[i],a);{находим позицию знака в выражении}
si:=ss[i] {определяем знак}
end;
if si=''then writeln('Nevernoe vyrazenie!')
else
begin
val(copy(a,4,is-4),a1,p1); {превращаем числа из строк в integer}
val(copy(a,is+1,length(s)-is),a2,p2);
if (p1<>0) or (p2<>0) then
writeln('Nevernoe vyrazenie!')
else
begin
case si of {выполняем децствия}
'+': rz:=a1+a2;
'-': rz:=a1-a2;
end;
end;
end;
Добавлено через 6 минут
Просто тут такая ситуация, процедуры мы ещё непроходили, и когда эту задачу показываеш учителю она говорит "переделывай без процедур" её не волнует что она правильно работет. вот так вот.
Глянь я попробовал переделать но неправильно работать стала помоги плиз.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
program wersadfg;
uses crt;
var s,s1:string;
i,k,rez:integer;
a:string;var rz:integer;
var ss:string[2]; {строка знаков}
si:char; {сам знак}
is,a1,a2,p1,p2,res:integer;
begin {начало программы}
clrscr;
writeln('Vvedite vyrazenie:');{типа a:=12+56:b:104-56}
readln(S);
for i:=1 to length(s)do
if (s[i]=':')and(s[i+1]<>'=')then
begin
s1:=copy(s,1,i-1); {выделяем первое выражение}
delete(s,1,i); {удаляем его, остается второе}
end;
writeln('Rezultat:');
ss:='+-';
for i:=1 to 2 do
if pos(ss[i],a)>0 then
begin
is:=pos(ss[i],a);{находим позицию знака в выражении}
si:=ss[i] {определяем знак}
end;
if si=''then writeln('Nevernoe vyrazenie!')
else
begin
val(copy(a,4,is-4),a1,p1); {превращаем числа из строк в integer}
val(copy(a,is+1,length(s)-is),a2,p2);
if (p1<>0) or (p2<>0) then
writeln('Nevernoe vyrazenie!')
else
begin
case si of {выполняем децствия}
'+': rz:=a1+a2;
'-': rz:=a1-a2;
end;
end;
end; 
writeln(s1[1]+'=',rez);
ss:='+-';
for i:=1 to 2 do
if pos(ss[i],a)>0 then
begin
is:=pos(ss[i],a);{находим позицию знака в выражении}
si:=ss[i] {определяем знак}
end;
if si=''then writeln('Nevernoe vyrazenie!')
else
begin
val(copy(a,4,is-4),a1,p1); {превращаем числа из строк в integer}
val(copy(a,is+1,length(s)-is),a2,p2);
if (p1<>0) or (p2<>0) then
writeln('Nevernoe vyrazenie!')
else
begin
case si of {выполняем децствия}
'+': rz:=a1+a2;
'-': rz:=a1-a2;
end;
end;
end;
writeln(s[1]+'=',rez);
readln
end.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
22.05.2008, 06:40
Переписывать тоже с умом надо. Переменная a это формальный параметр процедуры, а раз убрал процедуру, то вместо него нужно писать фактические переменные: сначала s1. когда для нее все сделаем, то второй раз s. И результат для каждой строки разный, значит нужно две переменных. Я сказал что писать нужно два раза, для каждой строки-формулы отдельно, как бы две программы, а не дословно переписывать процедуру два раза.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
uses crt;
var s,s1:string;
i,k,rez,rez1:integer;
ss:string[2];
si:char;
is,a1,a2,p1,p2:integer;
begin
clrscr;
writeln('Vvedite vyrazenie:'); {делим строку на две}
readln(S);
for i:=1 to length(s)do
if (s[i]=':')and(s[i+1]<>'=')then
begin
s1:=copy(s,1,i-1);
delete(s,1,i);
end;
ss:='+-';      {обрабатываем певое выражение}
for i:=1 to 2 do
if pos(ss[i],s1)>0 then
begin
is:=pos(ss[i],s1);
si:=ss[i]
end;
if si=''then writeln('Nevernoe vyrazenie!')
else
begin
val(copy(s1,4,is-4),a1,p1);
val(copy(s1,is+1,length(s1)-is),a2,p2);
if (p1<>0) or (p2<>0) then
writeln('Nevernoe vyrazenie!')
else
begin
case si of
'+': rez1:=a1+a2;
'-': rez1:=a1-a2;
end;
end;
end;
for i:=1 to 2 do    {обрабатываем второе выражение}
if pos(ss[i],s)>0 then
begin
is:=pos(ss[i],s);
si:=ss[i]
end;
if si=''then writeln('Nevernoe vyrazenie!')
else
begin
val(copy(s,4,is-4),a1,p1);
val(copy(s,is+1,length(s)-is),a2,p2);
if (p1<>0) or (p2<>0) then
writeln('Nevernoe vyrazenie!')
else
begin
case si of
'+': rez:=a1+a2;
'-': rez:=a1-a2;
end;
end;
end;
writeln('Rezultat:');
writeln(s1[1]+'=',rez1);
writeln(s[1]+'=',rez);
readln;
end.
Procedure Rezult(a:string;var rz:integer);
var ss:string[2];
si:char;
is,a1,a2,p1,p2,res:integer;
begin
ss:='+-';
for i:=1 to 2 do
if pos(ss[i],a)>0 then
begin
is:=pos(ss[i],a);
si:=ss[i]
end;
if si=''then writeln('Nevernoe vyrazenie!')
else
begin
val(copy(a,4,is-4),a1,p1);
val(copy(a,is+1,length(s)-is),a2,p2);
if (p1<>0) or (p2<>0) then
writeln('Nevernoe vyrazenie!')
else
begin
case si of
'+': rz:=a1+a2;
'-': rz:=a1-a2;
end;
end;
end;
end;
begin
clrscr;
writeln('Vvedite vyrazenie:');
readln(S);
for i:=1 to length(s)do
if (s[i]=':')and(s[i+1]<>'=')then
begin
s1:=copy(s,1,i-1);
delete(s,1,i);
end;
writeln('Rezultat:');
Rezult(s1,rez);
writeln(s1[1]+'=',rez);
Rezult(s,rez);
writeln(s[1]+'=',rez);
readln
end.
0
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
22.05.2008, 22:21  [ТС]
Благодарю, круче учителя обьясняеш
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2008, 22:21
Помогаю со студенческими работами здесь

Немогу разобраться с директивами
Люди есть проблема. (с++) Значит учусь я в универе. А там IDE у нас короче очень древняя борланд`овская (для win 3.1). Так как для изучения...

немогу разобраться с переменной C++
Объясните пожалуйста, вот есть переменные int, char, float и т.д а, в некоторых функциях есть параметр, для которого надо указать...

Немогу разобраться с делегатом!
Привет всем! Помогите разобраться с делегатом : monitor.NotifyOnChanged(delegate { ...

Немогу разобраться с прогой
Подскажите как сделать необходимо В Форме данные1) при открытии поля сосписком Наити ФИО и чтобы те данные которые в ней содержаться то...

Немогу разобраться с кодом..
помогите разобраться с кодом! по идеи должно копировать только поля имя и фам, а копируется вся таблица. не могу понять. вот код: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru