0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
|
||||||
1 | ||||||
Задача на строки, немогу разобраться19.05.2008, 18:39. Показов 1498. Ответов 8
Метки нет Все метки)
(
В строке заданы через двоеточие 2 оператора присваивания общего вида: "первый:=число1+число2:второй:=число3-число4" (например:"A:=3+4:B:=7-2"). Вычислить значения переменых и распечатать их.
Вот решение задачи примерно такова типа только для знаков +,-,*,/ и выражения вида "первый:=число1 знак число2"
0
|
|
19.05.2008, 18:39 | |
Ответы с готовыми решениями:
8
Задача по теории вероятности, немогу разобраться Строки немогу найти решения или нехватает литературы чтоб самому разобраться Немогу разобраться Немогу разобраться с директивами |
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
|
|
19.05.2008, 21:21 | 2 |
Подправил вашу программу. Во-первых в приведенном коде выражение не "первый:=число1 знак число2", а число1 знак число2". Поскольку у вас два выражения, поэтому чтобы не писать два раза длинный код, оформил определение результата в процедуру, поэтому поменял некоторые переменные. Оставил два знака.
Код
[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 [ТС] | 3 |
Мне кажеться программа выводит совсем не то что нужно?
0
|
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
|
|
20.05.2008, 06:50 | 4 |
0
|
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
|
|
21.05.2008, 21:27 [ТС] | 5 |
А ну да точно, спасибо огромное всё отлично работает.
Добавлено через 22 часа 19 минут Подскажи плиз как эту задачу записать без процедур и функций?
0
|
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
|
|
21.05.2008, 22:10 | 6 |
Во-первых без процедур и функций вообще практически программ не бывает, особенно при работе со строками. Например в этой программе использованы функции pos и copy. Если вы имеете в виду подпрограммы, то подпрограмм-функций нет, а только одна подпрограмма-процедура. Можно, если пальцы не отнимутся, написать и без нее, только то, что в ней написано, нужно будет написать два раза, что совершенно бессмысленно.
Если есть желание займись, ничего сложного.
0
|
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 21
|
|||||||||||
21.05.2008, 23:35 [ТС] | 7 | ||||||||||
Просто тут такая ситуация, процедуры мы ещё непроходили, и когда эту задачу показываеш учителю она говорит "переделывай без процедур" её не волнует что она правильно работет. вот так вот.
Глянь я попробовал переделать но неправильно работать стала помоги плиз.
Просто тут такая ситуация, процедуры мы ещё непроходили, и когда эту задачу показываеш учителю она говорит "переделывай без процедур" её не волнует что она правильно работет. вот так вот. Глянь я попробовал переделать но неправильно работать стала помоги плиз.
![]()
0
|
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
|
|
22.05.2008, 06:40 | 8 |
Переписывать тоже с умом надо. Переменная a это формальный параметр процедуры, а раз убрал процедуру, то вместо него нужно писать фактические переменные: сначала s1. когда для нее все сделаем, то второй раз s. И результат для каждой строки разный, значит нужно две переменных. Я сказал что писать нужно два раза, для каждой строки-формулы отдельно, как бы две программы, а не дословно переписывать процедуру два раза.
Код
[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 [ТС] | 9 |
Благодарю, круче учителя обьясняеш
![]()
0
|
22.05.2008, 22:21 | |
Помогаю со студенческими работами здесь
9
немогу разобраться с переменной C++ Немогу разобраться с делегатом! Немогу разобраться с прогой Немогу разобраться с кодом.. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |