Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Проверьте перевод

Ответить
Настройки темы
C/C++ - Проверьте перевод

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Пожалуйста проверти перевод и исправте мои ошибки, превожу программу с Паскаля на Си.

Код: Выделить весь код
Program alg_greedy;
Uses Crt{*, Graph*};
Type Graph  = Array[1..100,1..100] Of Integer;
     List   = Array[1..100] Of Integer;
Const Bukwy : Array[1..16] Of String = ('AA','AB','AC','AD','BB','BA','BC','BD','CC','CA','CB','CD','','','','');
Var  g      : Graph;    {matriza Grapha}
     newclr : List;     {mnogestvo zakrashenyx vershin Grapha}
     ver_g  : List;     {mnogestvo vershin Grapha}
     n, temp: Integer;  {kolichestvo vershin Grapha}
     i, j, k: Integer;
     otvet  : Integer;
     flag   : Boolean;
{**********************************************}
Procedure greedy(Var ver_g:List; Var newclr:List);
Label 1;
Var found:Boolean;
    v, w :Integer;      {v - vershiny ver_g, w - versiny newclr}
    ch_v, ch_w:Integer; {chetchik v, chetchik w}
begin
  for i:=1 to n do
    newclr[i]:=0;
  ch_v:=1;
  v:=ver_g[ch_v];
  while (v<>0) do
    begin
      found:=false;
      ch_w:=1;
      w:=newclr[ch_w];
      while(w<>0) do
        begin
          if (g[v,w] = 1) then
            begin
              found:=true;
              ch_w := n;
            end;
          ch_w:=ch_w+1;
          w:=newclr[ch_w];
        end;
      if (found = false) then
        for ch_w:=1 to n do
          if (newclr[ch_w]=0) then
            begin
              newclr[ch_w]:=v;
              goto 1;
            end;
     1:ch_v:=ch_v+1;
      v:=ver_g[ch_v];
    end;
  for i:=1 to n do
    if (newclr[i]<>0) then
      for j:=1 to n do
        if (newclr[i] = ver_g[j]) then
          for k:=j to n do
            ver_g[k]:=ver_g[k+1];
End;
{**********************************************}
Begin
  ClrScr;
  Writeln('');
  Writeln('');
  Writeln('');
  Writeln('     Osnovnaj programma');
  Write('     Vvedite kolichestvo vershin Grapha -> ');
  Read(n);

  g[1,6] := 1;
  g[1,10] := 1;
  g[2,5] := 1;
  g[2,7] := 1;
  g[2,8] := 1;
  g[2,10] := 1;
  g[2,11] := 1;
  g[2,12] := 1;
  g[3,7] := 1;
  g[3,8] := 1;
  g[3,9] := 1;
  g[3,12] := 1;
  g[4,8] := 1;
  g[4,12] := 1;
  g[5,2] := 1;
  g[5,11] := 1;
  g[6,1] := 1;
  g[6,10] := 1;
  g[7,2] := 1;
  g[7,3] := 1;
  g[7,9] := 1;
  g[7,10] := 1;
  g[7,12] := 1;
  g[8,2] := 1;
  g[8,3] := 1;
  g[8,4] := 1;
  g[8,10] := 1;
  g[8,12] := 1;
  g[9,3] := 1;
  g[9,7] := 1;
  g[10,1] := 1;
  g[10,2] := 1;
  g[10,6] := 1;
  g[10,7] := 1;
  g[10,8] := 1;
  g[11,2] := 1;
  g[11,5] := 1;
  g[12,2] := 1;
  g[12,3] := 1;
  g[12,4] := 1;
  g[12,7] := 1;
  g[12,8] := 1;
  
  
  For i:=1 To n Do
  For j:=1 To n Do
    If (g[i,j] = 1) Then
      g[j,i] := 1;

  Write('     Ispolzuem greedy  !!!  1 or 0  !!! -> ');
  Read(otvet);
  If (otvet = 1) Then
    For i:=1 To n Do
      ver_g[i] := i
  Else
    Begin
      Writeln('');
      Writeln('     No greedy !!!');
      For i:=1 To n Do
        Begin
          g[i,n+2] := i;
          For j:=1 To n Do
            If (g[i,j] = 1) Then
              g[i,n+1] := g[i,n+1] + 1;
        End;

      flag := true;
      i := 1;
      While (flag) Do
        Begin
          flag := false;
          For j:=n Downto (i+1) Do
            If (g[j-1,n+1] < g[j,n+1]) Then
              Begin
                temp       := g[j-1,n+1];
                g[j-1,n+1] := g[j,n+1];
                g[j,n+1]   := temp;

                temp       := g[j-1,n+2];
                g[j-1,n+2] := g[j,n+2];
                g[j,n+2]   := temp;
                flag := true;
              End;
          i := i + 1;
        End;

      For i:=1 To n Do
        ver_g[i] := g[i,n+2];
    End;

  Writeln('');
  While (ver_g[1] <> 0) Do
    Begin
      Write('     newclr = ');
      greedy(ver_g,newclr);
      For i:=1 To n Do
        If (newclr[i] <> 0) Then
          Write(' ',Bukwy[newclr[i]]:2);
      Writeln('');
      Write('     ver_g  = ');
      For i:=1 To n Do
        If (ver_g[i] <> 0) Then
          Write(' ',Bukwy[ver_g[i]]:2);
      Writeln('');
      Writeln('');
      Readkey;
    End;
  Writeln('     ** Enter **');
  Readkey;
End.
а вот мой код на си.

Код: Выделить весь код
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
int g[11][11];  // {matriza Grapha}
int newclr[100];  //  {mnogestvo zakrashenyx vershin Grapha}
const char *Bukwy[]={"AA","AB","AC","AD","BB","BA","BC","BD","CC","CA","CB","CD"};
int ver_g[100];  //  {mnogestvo vershin Grapha}
int n,temp;		//	{kolichestvo vershin Grapha}
int i,j,k;
int otvet;
bool flag;
void greedy(int	ver_g[], int newclr[])
{   
    int i;
	bool found;
	int v, w;	//      {v - vershiny ver_g, w - versiny newclr}
	int ch_v, ch_w;// {chetchik v, chetchik w}

  for (i=0;i<n;i++)
    newclr[i]=0;
  ch_v=1;
  v=ver_g[ch_v];
  while (v!=0)
    {
      found=false;
      ch_w=1;
      w=newclr[ch_w];
      while(w!=0)
        {
          if (g[v][w] == 1)
            {
              found=true;
              ch_w = n;
            }
          ch_w=ch_w+1;
          w=newclr[ch_w];
        }
      if (found == false)
        for (ch_w=0; ch_w<n;ch_w++)
          if (newclr[ch_w]==0)
            {
              newclr[ch_w]=v;
              break;
              //goto 1;
            }
     //1:
      ch_v=ch_v+1;
      v=ver_g[ch_v];
    }
  for (i=0;i<n;i++)
    if (newclr[i]!=0)
      for (j=0;j<n;j++)
        if (newclr[i] == ver_g[j])
          for (k=j;k<n;k++)
            ver_g[k]=ver_g[k+1];
}

//{**********************************************}

void main()
{
  cout<<" "<<endl;
  cout<<" "<<endl;
  cout<<" "<<endl;
  cout<<("     Osnovnaj programma")<<endl;
  cout<<("     Vvedite kolichestvo vershin Grapha -> ");
  cin>>n;

  g[0][5] = 1;
  g[0][3] = 1;
  g[1][4] = 1;
  g[1][6] = 1;
  g[1][7] = 1;
  g[1][9] = 1;
  g[1][10] = 1;
  g[1][11] = 1;
  g[2][6] = 1;
  g[2][7] = 1;
  g[2][8] = 1;
  g[2][11] = 1;
  g[3][7] = 1;
  g[3][11] = 1;
  g[4][1] = 1;
  g[4][10] = 1;
  g[5][0] = 1;
  g[5][9] = 1;
  g[6][1] = 1;
  g[6][2] = 1;
  g[6][8] = 1;
  g[6][9] = 1;
  g[6][11] = 1;
  g[7][1] = 1;
  g[7][2] = 1;
  g[7][3] = 1;
  g[7][9] = 1;
  g[7][11] = 1;
  g[8][2] = 1;
  g[8][6] = 1;
  g[9][0] = 1;
  g[9][1] = 1;
  g[9][5] = 1;
  g[9][6] = 1;
  g[9][7] = 1;
  g[10][1] = 1;
  g[10][4] = 1;
  g[11][1] = 1;
  g[11][2] = 1;
  g[11][3] = 1;
  g[11][6] = 1;
  g[11][7] = 1;

  for (i=0;i<n;i++)
  for (j=0;j<n;j++)
    if (g[i][j] == 1)
      g[j][i] = 1;

  cout<<("     Ispolzuem greedy  !!!  1 or 0  !!! -> ");
  cin>>(otvet);
  if (otvet == 1)
    for (i=0;i<n;i++)
      ver_g[i] = i;
  else
    {
      cout<<""<<endl;
      cout<<("     No greedy !!!")<<endl;
      for (i=0; i<n;i++)
        {
          g[i][n+2] = i;
          for (j=0; j<n; j++)
            if (g[i][j] == 1)
              g[i][n+1] = g[i][n+1] + 1;
        }

      flag = true;
      i = 1;
      while (flag)
        {
          flag = false;
		  //for j:=n Downto (i+1) Do
          for (j=n; j>(i+1); --j)
            if (g[j-1][n+1] < g[j][n+1])
              {
                temp       = g[j-1][n+1];
                g[j-1][n+1] = g[j][n+1];
                g[j][n+1]   = temp;

                temp       = g[j-1][n+2];
                g[j-1][n+2] = g[j][n+2];
                g[j][n+2]   = temp;
                flag = true;
              }

          i = i + 1;
        }

      for (i=0; i<n; i++)
        ver_g[i] = g[i][n+2];
    }

  cout<<" "<<endl;
  while (ver_g[1] != 0)
    {
      cout<<"     newclr = ";
      greedy(ver_g,newclr);
      for (i=0;i<n;i++)
        if (newclr[i] != 0)
          cout<<" "<<Bukwy[newclr[i]];
      cout<<" "<<endl;
      cout<<"     ver_g  = ";
      for (i=0;i<n;i++)
        if (ver_g[i] != 0)
          cout<<" "<<Bukwy[ver_g[i]];
      cout<<""<<endl;
      cout<<""<<endl;
    }

  cout<<"     ** Enter **";
  getch();
  
}

Отправлено: 14:55, 01-05-2011

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Проверьте перевод

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Проверьте решение mike38 Программирование и базы данных 5 27-03-2011 15:01
Разное - Проверьте тест по программированию. Ритка Программирование и базы данных 3 24-01-2011 18:37
Проверьте логи, пожалуйста Soalnik Лечение систем от вредоносных программ 3 04-09-2009 19:06
Проверьте пожалуйста логи patamba Лечение систем от вредоносных программ 3 26-05-2009 19:37
Проверьте скриптик Kosiak Вебмастеру 8 25-04-2003 23:42




 
Переход