Войти

Показать полную графическую версию : Перевод с Pascal на C++


Snake750
28-03-2009, 16:23
Всем привет.начал переводить прогу с паскаля на си и вот такая вот проблемка встала.нужно перевести вот эту процедуру

Procedure Print (n:byte; a:longint);
Begin {вывод числа a}
Write(' ':n);
Write(a);
End;
а как задать размерность поля вывода пробелов(выделено жирным) на си я не знаю.переведите пожалуйста эту процедурку.буду очень благодарен

pva
28-03-2009, 20:48
2 варианта:

long n = 100;
double f=100.2345;

// C
printf("%10ld", n);
printf("%10.2lf", f); // целые + дробные

// C++
cout.width(10);
cout << n;

cout.width(13); // общая длина поля
cout.precision(2);
cout << f;

процедурка: (она разве выдаёт n пробелов, а за ними число?)

void __pascal Print(unsigned char n, int a)
{ /*Вывод числа а*/
cout << setw(n) << ' ' << a;
}

Если надо вывести число, в поле из (итого) N символов, то нужно установить флаг width(N), который действует только на один operator<<, а затем сбрасывается в N=0 (то есть выведется столько, сколько минимум необходимо). Заполнение будет происходить символом, указанным в fill(), по умолчанию пробел. Пример:

// setfill(...) вызывает ostream::fill(...);
// setw(...) вызывает ostream::width(...);
cout << setfill('0') << setw(10) << 123;

Snake750
29-03-2009, 03:31
спс)).тему можно закрывать

mozgabyte
12-06-2009, 16:37
Помогите пожалуйста перевести задачи с Pascal'я на C++

1. Вычислить A и B

program lab1;
var a,b,x,y,z,x1,x2,x3,x4,x5,x6,y1,y2:real;
begin
x:=pi/7;
y:=3.017;
z:=-2.69;
x1:=exp(ln(sin(x))*2);
x2:=2*exp(ln(x1)/3);
x3:=0.001*y*1.5;
x4:=x2-x3;
x5:=(2*x)/2.7;
x6:=1/3+x5;
a:=x4/x6;
writeln('A=',a:2:3);
y1:=sqr(z)/5;
y2:=x-y1;
b:=y2+1/3+x5;
writeln('B=',b:2:3);
readln
end.


2. Является ли введенное 4-значное число палидромом?

program lab2;
var x,c1,c2,c3,c4:integer;
begin
repeat
write('vvedite 4-znachnoe chislo: ');
readln(x);
until(x<9999);
c1:=trunc(x/1000);
c2:=trunc((x-c1*1000-c2*100)/100);
c3:=trunc((x-c1*1000-c2*100)/10);
c4:=trunc((x-c1*1000-c2*100-c3*10)/1);
if (x=c4*1000+c3*100+c2*10+c1) then
writeln('Eto palidrom!') else writeln('Eto ne palidrom!');
readln
end.


3. Определить сумму введенных цифр

program lab3;
var c:char; sum,x:integer; i:byte;
begin
write('Enter symbols: '); readln(c);
sum:=0;
while c<>'.' do begin
x:=-1;
for i:=0 to 9 do
if (ord(c)=(48+i)) then x:=1;
if x<>-1 then sum:=sum+x;
write('Enter symbols: '); readln(c);
end;
writeln('Resul: ',sum);
readln
end.


4. Вычислить сумму чисел введенных до последнего отрицательного

program lab4;
const Nmax=255;
var i:byte; n:integer; m:byte;
mass:array [0..Nmax] of integer;
begin
repeat
readln(N);
mass[i]:=N;
inc(i);
until n=0;
for i:=0 to Nmax do if mass[i]<0 then m:=i;
for i:=0 to m-1 do
N:=N+mass[i];
writeln(N);
readln
end.


5. Определить число пар соседних элементов массива имеющих одинаковый знак

program lab5;
var i:byte;
mass:array [0..255] of integer;
plus:byte;
minus:byte;
begin
plus:=0;
minus:=0;
randomize;
for i:=0 to 255 do mass[i]:=random(512)-256;
for i:=1 to 255 do begin
if (mass[i-1]>0) and (mass[i]>0) then inc(plus);
if (mass[i-1]<0) and (mass[i]<0) then inc(minus);
end;
writeln('kol-vo par s (+) = ',plus);
writeln('kol-vo par s (-) = ',minus);
readln
end.


Заранее огромнейшее спасибо! :)

Alan85
12-06-2009, 20:54
Первое как то так:

#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
const float pi=3.14;
float x=pi/7;
float y=3.017;
float z=-2.69;
float x1=exp(log(sin(x))*2);
float x2=2*exp(log(x1)/3);
float x3=0.001*y*1.5;
float x4=x2-x3;
float x5=2*x/2.7;
float x6=1.0/3.0+x5;
float a=x4/x6;
float y1=z*z/5;
float y2=x-y1;
float b=y2+1.0/3.0+x5;
printf("A= %.3f\n",a);
printf("B= %.3f\n",b);
getchar();
return 0;
}

Alan85
12-06-2009, 21:18
2. Является ли введенное 4-значное число палидромом? »
а тут ошибка
c2:=trunc((x-c1*1000-c2*100)/100);
с2 используется для своего же определиния
а вот на си уже с исправлениями:

#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
int x=0;
do {
printf("vvedite 4-znachnoe chislo:");
scanf("%d",&x);getchar();
} while (x>9999);
int c1=x/1000;
int c2=(x-c1*1000)/100;
int c3=(x-c1*1000-c2*100)/10;
int c4=(x-c1*1000-c2*100-c3*10)/1;
// printf("%d %d %d %d",c1,c2,c3,c4);
if (x==c4*1000+c3*100+c2*10+c1) printf("Eto palidrom!"); else printf("Eto ne palidrom!");
getchar();
return 0;
}

Alan85
12-06-2009, 21:40
В третей тоже ошибка
if (ord(c)=(48+i)) then x:=1;
в конце должно быть x:=i;
вот на си

#include <stdio.h>
int main(int argc, char* argv[])
{
char c;
// printf("Enter symbols: "); scanf("%c",&c);
int x, sum=0;
while (c!='.')
{

printf("Enter symbols: ");
scanf(" %c",&c);

x=-1;
for (int i = 0; i <= 9; i++) if (c==48+i) x=i;
if (x!=-1) sum+=x;
}

printf("Result: %d",sum);getchar();getchar();
return 0;
}

Alan85
12-06-2009, 21:57
4:

#include <stdio.h>
#define N 255
int main(int argc, char* argv[])
{
int mass[N]={0};
int n,i=0;
do
{
scanf("%d",&n);
mass[i]=n; i++;
} while (n!=0);
int m=0;
for (i = 0; i <= N; i++)
if (mass[i]<0) m=i;
n=0;
for (i = 0; i <= m-1; i++) n+=mass[i] ;
printf("%d",n);
getchar(); getchar();
return 0;
}

Alan85
12-06-2009, 22:12
Ну и последний:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[])
{
int mass[255]={0};
int plus=0;
int minus=0;
time_t t;
srand((unsigned) time(&t));
for (int i=0; i < 255; i++) mass[i]=random(512)-256;
for (int i=1; i < 255; i++)
{
if (mass[i-1]>0&&mass[i]>0) plus++;
if (mass[i-1]<0&&mass[i]<0) minus++;
}
printf("kol-vo par s (+) = %d\n",plus);
printf("kol-vo par s (-) = %d\n",minus);
getchar();
return 0;
}

mozgabyte
12-06-2009, 22:21
Alan85, огромнейшее Спасибо!! :) Очень выручили Вы меня.. :up

Alan85
12-06-2009, 22:25
Да незашто... Давно не программировал ничего - вот решил вспомнить как это да и за одно помочь . Все довольны :)

Balthazar
06-12-2010, 17:27
помогите перевести эту задачу пожалуйста:
uses crt;
var st:string;
i,j:byte;
begin
writeln('Введите арифметическое выражение: ');
readln(st);
for i:=2 to length(st) do begin
if st[i-1] in ['+','-','*','/'] then
if st[i] in ['+','-','*','/'] then
inc(j);
end;
for i:=2 to length(st) do begin
if (st[i-1] in ['0'..'9']) and (st[i] in [' '])
and (st[i+1] in ['0'..'9'])then inc(j);
if (st[i-1] in ['+','-','*','/']) and (st[i] in [' '])
and (st[i+1] in ['+','-','*','/'])then inc(j);
end;
if j=0 then
writeln('Данное выражение записано верно!')
else
writeln('Данное выражение записано не верно!');
end.
как не пытался постоянно выдаёт какую-то ошибку

samira040694@vk
01-11-2013, 19:01
помогите пожалуйста перевести программу в си ++

Program pr1;
Uses crt;
Var n:integer;
a,c,k,ka,kc,kr:byte;
m:set of byte;
Begin
clrscr;
repeat
write('Введите натуральное число n=');
readln(n);
until n>0;
repeat
write('Введите цифру a=');
readln(a);
until a in [0..9];
k:=0;//cколько всего цифр
ka:=0;//сколько=а
kc:=0;//сколько четных
kr:=0;//сколько разных
m:=[];
while n>0 do
begin
k:=k+1;
c:=n mod 10;
if c mod 2=0 then kc:=kc+1;
if c=a then ka:=ka+1;
if not (c in m) then
begin
kr:=kr+1;
m:=m+[c];
end;
n:=n div 10;
end;
writeln('Четных цифр=',kc);
writeln('Разных цифр=',kr);
if ka>2 then write('Цифра ',a,' встречается больше 2 раз')
else write('Цифра ',a,' встречается не больше 2 раз');
readln
end.

Бородай Роман
13-09-2015, 10:52
program Boolean4;
var
A,B: Integer;
begin
Write('Введите число A: ');
Readln(A);
Write('Введите число B: ');
Readln(B);
Writeln((A>2) and (B <=3));
end.

mrcnn
14-09-2015, 04:48
program Boolean4; »


#include <stdio.h>

void main()
{
int A,B;
printf("'Введите число A: ");
scanf("%d", &A);
printf("'Введите число B: ");
scanf("%d", &B);
printf("%d\n", A>2 && B<=3);

}




© OSzone.net 2001-2012