imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 29.05.2005, 08:52     # 1
Polygon_w
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;
}
Сие творение не работает как надо. Помогите разобраца. Скорее всего с циклом что-то не то, но не могу понять что именно.
 
Старый 29.05.2005, 12:33     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
В паскале UNTIL означает ПОКЕ НЕ, а в си WHILE - это просто ПОКА. Т.е. тебе нужно просто сделать отрицание условия в while.
Код:
while (x<=xk || y<=yk)
ЕЖ вне форума  
Старый 29.05.2005, 13:03     # 3
Polygon_w
Guest
 
Сообщения: n/a

В таком случае оно зацикливается и печатает число 90 бесконечно.(
 
Старый 29.05.2005, 13:23     # 4
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Чего то у тебя конкретно глючит. Не может оно зацикливаться!
Кроме того, не вижу у тебя блоковых скобок в цикле {} между do и while.
Ещё очень некрасиво смешиваешь С и С++ вывод (printf и cout).
И отформатируй вывод результатов хотябы так:
Код:
cout << x << " " << y << " " << z;
Программу проверял на Borland C++, всё точно работает.

Последний раз редактировалось ЕЖ; 29.05.2005 в 13:26.
ЕЖ вне форума  
Старый 29.05.2005, 19:01     # 5
Polygon_w
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;
}
В такой переаботки значения predl, s, slovk вапще не выводятся. Немогу понять из-за чего, проде бы все правильно.(
 
Старый 29.05.2005, 19:50     # 6
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Цитата:
AnsiString s, tmp;
Это из какой библиотеки?
Trotil вне форума  
Старый 29.05.2005, 20:38     # 7
Polygon_w
Guest
 
Сообщения: n/a

Цитата:
Сообщение от Trotil
Это из какой библиотеки?
В моем случае из dstring.h, компилятор от борланда.
 
Старый 31.05.2005, 12:02     # 8
Vellion
Junior Member
 
Регистрация: 16.04.2004
Сообщения: 53

Vellion Известность не заставит себя ждать
Первое строка малость не так считываеться в С, если уж 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());
Vellion вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 06:03.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.