| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Требуется превести две программы
Необходимо перевести две программы с паскаля на си++.
Код:
const
dx = 30; dy = 2; xn = 90; xk = 300; yn = 4; yk = 16;
var
x, y, z: real;
function f(x,y:real):real;
begin
f:=(exp((2/3)*ln(pi))+(ln((exp(3)*ln(y))-1)))/(exp((exp(1)-1))*(ln(x)));
end;
begin
x:=xn;
y:=yn;
writeln(' x y z');
writeln('-----------------');
repeat
z:=f(x,y);
writeln( x:1:1, ' ':3, y:1:1, ' ':3, z:5:3);
x:=x+dx;
y:=y+dy;
until (x>xk)and(y>yk);
readln;
end.
Код:
int dx=30, dy=2, xn=90, xk=300, yn=4, yk=16;
float x, y, z;
char other;
float func(float x, float y)
{
return exp((2/3)*LnXP1(3.1451))+(LnXP1((exp(3)*LnXP1(y))-1))/(exp((exp(1)-1))*(LnXP1(x)));
}
int main(int argc, char* argv[])
{
x=xn;
y=yn;
printf("x y z\n");
printf("_____________\n");
do
z = func(x, y);
cout << x, y, z;
x = x + dx;
y = y + dy;
while ((x > xk) && (y > yk));
scanf("%d", other);
return 0;
}
|
|
|
# 4 |
|
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Чего то у тебя конкретно глючит. Не может оно зацикливаться!
Кроме того, не вижу у тебя блоковых скобок в цикле {} между do и while. Ещё очень некрасиво смешиваешь С и С++ вывод (printf и cout). И отформатируй вывод результатов хотябы так: Код:
cout << x << " " << y << " " << z; Последний раз редактировалось ЕЖ; 29.05.2005 в 13:26. |
|
|
|
|
# 5 |
|
Guest
Сообщения: n/a
|
Гым, спасибо, заработало. Смешение стилей произошло из-за пока нечеткого знания ообоих языков, но стремлюсь к этому.
И еще одну, последнюю программу помогите перевести Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
s,tmp: string;
i, predl, slov, slovk: integer;
begin
readln(s);
s:=s+' ';
tmp:='';
i:=0;
predl:=0;
slov:=0;slovk:=0;
while i<>length(s) do
begin
inc(i);
case s[i] of
'.','!': if s[i+1]=' ' then
begin
inc(predl);
if slovk<slov then slovk:=slov;
slov:=0;
end;
' ': inc(slov);
end;
end;
if predl>slovk then s:='>' else s:='<';
if predl=slovk then s:='=';
writeln('otdelnih predlosenii ',predl,s,slovk,' slov v samom bolsom predlosenii');
readln;
end.
Код:
/*
* Определяет чего в строке больше: отдельных предложений
* или слов в самомо большом предложежнии. Самое большое придложение
* определеяется по кол-ву отельных слов, а не символов.
*/
AnsiString s, tmp;
int i, predl, slov, slovk;
int main(int argc, char* argv[])
{
scanf("%d", s);
// s = "asdsd s dad as dad a d";
s = s + " ";
tmp = "";
i = 0;
predl = 0;
slov = 0;
slovk = 0;
while (i != s.Length())
{
i = i++;
switch (s[i])
{
case '.', ',', '!':
{
if (s[i + 1] == ' ')
{
predl = predl++;
if (slovk < slov){slovk = slov;}
slov = 0;
}
break;
};
case ' ':
{
slov = slov++;
break;
}
}
}
if (predl > slovk){s = ">";}
else s = "<";
if (predl = slovk) s = "=";
cout << "otdelnih predlozheniy\n", predl, s, slovk, " slov v samom bolshm predlozhenii";
return 0;
}
|
|
|
# 8 |
|
Junior Member
Регистрация: 16.04.2004
Сообщения: 53
![]() |
Первое строка малость не так считываеться в С, если уж scanf''ом то так scanf("%s", s.c_str());
Второе cout тоже малость не так работает, ему вроде нельзя через запятую переменные задавать, пиши вот так : cout << "otdelnih predlozheniy\n" << predl << s << slovk << " slov v samom bolshm predlozhenii"; А вообще scanf(), на сколько я помню, строку считает только до пробела Можно еще так считывать cin << s; но тоже строка только до пробела считаться будет Используй лучше gets(s.c_str()); |
|
|