Помощь - Поиск - Пользователи - Календарь
Полная версия: Транслировать программу.
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
BND
Такая проблемка:
Написали программку на паскале и ее надо перетранслировать на язык СИ (препод требует в двух вариантах сдавать). То есть ту же самую, но чтобы была на СИ написана. МОжет кто-нибудь помоч ? А то я в СИ вапще дилетант )
volvo
Ты бы программу-то присоединил, а то пустой разговор получается какой-то...
BND
Цитата(volvo @ 27.04.2007 19:46) *

Ты бы программу-то присоединил, а то пустой разговор получается какой-то...


Тебе она знакома, ты принимал посильное участие в ее написании =)
Вот задание какое:
Найти все двузначные и трехзначные десятичные числа, которые в другой системе счисления записаны теми же цифрами, что и в десятичной системе, но в обратном порядке.

Код

program SS;

var
  j, i: integer;
  s, s_dec: string;
  f_out: text;

function DecToOther(x:longint;R:word):string;
var ost:longint;
    s,st,chislo:string;
    i:integer;
begin
     chislo:='';s:='';st:='';
     repeat
        ost:=x mod R;
        x:=x div R;
        if ost>9 then
          st:=chr(ord('A')-10+ost)
        else str(ost,st);
           s:=s+st;
     until x=0;
     for i:=1 to length(s) do
       chislo:=chislo+s[length(s)-i+1];
     DecToOther:=chislo;
end;

Function SwapSymbols(s: string): string;
Var
  i:integer;
  Temp: String;
begin
  Temp := '';
  For i:=1 to Length(s)do
    Temp:=s[i] + Temp;
  SwapSymbols:=Temp;
end;

begin
  assign(f_out, 'res.txt');
rewrite(f_out);

  for j := 2 to 16 do
  begin

    if j = 10 then continue;
writeln(j,'-ja sistema schislenia');
    for i := 10 to 999 do
    begin
      s_dec := DecToOther(i, 10);
      s := DecToOther(i, j);

      if SwapSymbols(s) = s_dec then begin
        Writeln(       's(10) = ', s_dec:5, ' s(':5, j:2, ') = ', s:10);
        Writeln(f_out, 's(10) = ', s_dec:5, ' s(':5, j:2, ') = ', s:10);
      end;
    end;
  end;
  close(f_out);
end.
volvo
smile.gif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

int i, j;
char s[20], s_dec[20];
FILE *f_out;
if ((f_out = fopen("res.txt", "wt")) == NULL) {
return 1;
}

for(j = 2; j <= 16; ++j) {
if(j == 10) continue;

printf("%d-ja sistema schislenia\n", j);
for(i = 10; i < 1000; ++i) {

itoa(i, s_dec, 10);
itoa(i, s, j);
if(!(strcmp(strrev(s), s_dec))) {

strrev(s);
printf( "s(10) = %5s %5s%2d) = %10s\n", s_dec, "s(", j, s);
fprintf(f_out, "s(10) = %5s %5s%2d) = %10s\n", s_dec, "s(", j, s);

}
}
}
fclose(f_out);
return 0;

}

BND
Цитата(volvo @ 27.04.2007 21:30) *

skiped


blink.gif и это всё ? ничего себе уменьшилась в размерах ! опять благодарен, второй раз за вечер smile.gif
а можно еще пару коментариев к некоторым строчкам ?
volvo
Ну, дело-то все в том, что в С есть уже готовые функции, которых в Паскале, к сожалению, нет... Например вместо DecToOther просто подключаем stdlib.h, и пользуемся itoa, да и функция "разворота" строки strrev уже есть готовая...

Что именно не понятно в программе? Алгоритм-то остался такой же, как и был ...
BND
хорошо. а остальные подключенные функции например, что обозначают: ?
#include <stdio.h
#include <string.h

И вот эти строчки прокоментировать можно: что в них происходит ?

itoa(i, s_dec, 10);
itoa(i, s, j);
if(!(strcmp(strrev(s), s_dec))) {



А еще интересен вопрос, что обозначают вот эти знаки "}" ?
это типо "{" - начало, а это "}" конец ?

И наконец последний вопрос: что можешь мне порекомендовать почитать вначале про СИ ?
Там где основы какие-нибудь даны чтобы были..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.