0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21

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

19.05.2008, 18:39. Показов 1588. Ответов 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
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
19.05.2008, 21:21
Подправил вашу программу. Во-первых в приведенном коде выражение не "первый:=число1 знак число2", а число1 знак число2". Поскольку у вас два выражения, поэтому чтобы не писать два раза длинный код, оформил определение результата в процедуру, поэтому поменял некоторые переменные. Оставил два знака.
Code
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
[SIZE=2]
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); //превращаем числа из строк в [/SIZE][FONT=Courier New][SIZE=2]integer
[/SIZE][/FONT][SIZE=2]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:');//типа [/SIZE][FONT=Courier New][SIZE=2]a:=12+56:b:104-56
[/SIZE][/FONT][SIZE=2]readln(S);
for i:=1 to length(s)do
if (s[i]=':')and(s[i+1]<>'=')then
begin
s1:=copy(s,1,i-1);[/SIZE][FONT=Courier New][SIZE=2] //[/SIZE][/FONT][SIZE=2]выделяем первое выражение
delete(s,1,i); //удаляем его, остается второе
end;
writeln('Rezultat:');
Rezult(s1,rez); //вызываем процедуру для первого выражения
writeln(s1[1]+'=',rez);
Rezult(s,rez); //вызываем процедуру для второго выражения
writeln(s[1]+'=',rez);
readln
end.
[/SIZE][FONT=Arial CYR][/FONT]
0
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
19.05.2008, 23:18  [ТС]
Мне кажеться программа выводит совсем не то что нужно?
Миниатюры
Задача на строки, немогу разобраться  
0
Почетный модератор
 Аватар для Puporev
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
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
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
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
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
22.05.2008, 06:40
Переписывать тоже с умом надо. Переменная a это формальный параметр процедуры, а раз убрал процедуру, то вместо него нужно писать фактические переменные: сначала s1. когда для нее все сделаем, то второй раз s. И результат для каждой строки разный, значит нужно две переменных. Я сказал что писать нужно два раза, для каждой строки-формулы отдельно, как бы две программы, а не дословно переписывать процедуру два раза.
Code
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
110
111
[SIZE=2]
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.
[/SIZE]
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Оптимизация производительности Express.js бэкенда
Reangularity 23.05.2025
Express. js заслуженно остаётся одним из самых популярных инструментов для создания бэкенда, но даже он не застрахован от проблем с производительностью. Многие разработчики сталкиваются с ситуацией,. . .
Продвинутая обработка данных с LINQ в C#
stackOverflow 23.05.2025
LINQ (Language Integrated Query) — это фундаментальное изменение парадигмы работы с данными в C#. Простые запросы Where и Select знакомы любому разработчику, но настоящая мощь LINQ раскрывается в. . .
Инфраструктура PKI и сертификатов безопасности
Mr. Docker 23.05.2025
PKI (Public Key Infrastructure) — это невидимый фундамент цифрового доверия, без которого современный интернет просто рассыпался бы как карточный домик. За этой аббревиатурой скрывается целый. . .
Аутентификация OAuth в Python
py-thonny 22.05.2025
OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах. . .
Хеширование и соль паролей в веб-приложениях C#
stackOverflow 22.05.2025
Когда-то в начале своей карьеры я тоже грешил простейшими подходами к хранению паролей – MD5-хеширование казалось верхом защиты. Но технологии не стоят на месте, вычислительные мощьности растут, и. . .
Генераторы Python для эффективной обработки данных
AI_Generated 21.05.2025
В Python существует инструмент настолько мощный и в то же время недооценённый, что я часто сравниваю его с тайным оружием в арсенале программиста. Речь идёт о генераторах — одной из самых элегантных. . .
Чем заменить Swagger в .NET WebAPI
stackOverflow 21.05.2025
Если вы создавали Web API на . NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и. . .
Использование Linq2Db в проектах C# .NET
UnmanagedCoder 21.05.2025
Среди множества претендентов на корону "идеального ORM" особое место занимает Linq2Db — микро-ORM, балансирующий между мощью полноценных инструментов и легковесностью ручного написания SQL. Что. . .
Реализация Domain-Driven Design с Java
Javaican 20.05.2025
DDD — это настоящий спасательный круг для проектов со сложной бизнес-логикой. Подход, предложенный Эриком Эвансом, позволяет создавать элегантные решения, которые точно отражают реальную предметную. . .
Возможности и нововведения C# 14
stackOverflow 20.05.2025
Выход версии C# 14, который ожидается вместе с . NET 10, приносит ряд интересных нововведений, действительно упрощающих жизнь разработчиков. Вы уже хотите опробовать эти новшества? Не проблема! Просто. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru