Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.05.2017, 17:31   #1
leonid_spartak
Пользователь
 
Регистрация: 18.02.2017
Сообщений: 43
По умолчанию Массивы - Си - перевод

Помогите перевести с Паскаль на Си( Код Паскаль полностью рабочий)
Мой результат указан ниже, помогите найти ошибки, вектор задает неверно

Код Паскаль:
Код:
uses crt;
const nmax=15;
type mtr=array[1..nmax,1..nmax]of integer;
     vec=array[1..2*nmax-1] of integer;
procedure form_vec(a:mtr;n:byte;var b:vec);
var i,j,k:byte;
    max:integer;
begin
for j:=1 to 2*n-1 do{количество диагоналей}
 begin
  if j<=n then {идем с низу до главной включитнльно}
   begin
    max:=a[n-j+1,1];
    for i:=n-j+1 to n do
    if a[i,i-n+j]>max then max:=a[i,i-n+j];
    b[j]:=max;
   end
  else if j>n then {идем вправо до конца}
   begin
    max:=a[1,j-n+1];
    for i:=1 to 2*n-j do
    if a[i,i+j-n]>max then max:=a[i,i+j-n];
    b[j]:=max;
   end
 end;
end;

var a:mtr;
    b:vec;
    n,i,j:byte;
begin
clrscr;
randomize;
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Матрица:');
for i:=1 to n do
 begin
  for j:=1 to n  do
   begin
    a[i,j]:=random(50);
    write(a[i,j]:4);
   end;
  writeln;
 end;
 
form_vec(a,n,b);
writeln('Максимальные элементы диагоналей, параллельных главной:');
for i:=1 to 2*n-1 do
write(b[i]:4);
readln
end.
Код Си:
Код:
#include <stdio.h> 
int v[40];
int massiv[50][50];
 
void Vector(int a[20][20],int n)
{
  int x, y, i, max;
  max=x-y+1;
 
   for (i = 0; i < n * 2 - 1; i++)
  {
    if (i < n)
    {
      x = i;
      y = 0;
    }
    else
    {
      x = n-1;
      y = i-n+1;
    }
 
    while (x >= 0 && y < n)
    {
      if (a[x][y] > max)
        max = a[x][y];
      x--;
      y++;
    }
 
    v[i] = max;
   }
}
void main()
{
 
int i, j,n, massiv_min, massiv_max;
 
 
    printf("\nInput number of rows and columns: "); scanf("%d", &n);
    printf("\nInput the lower border of range: ");  scanf("%d", &massiv_min);
    printf("\nInput the upper border of range: ");  scanf("%d", &massiv_max);
 
    int massiv[n][n];
 
    printf("\nSource massive:\n");
 
    for (i=0; i<n; i++) // getting of random number in range
     {
        for (j=0; j<n; j++)
            {
                massiv[i][j]=rand()%(massiv_max-massiv_min + 1) + massiv_min;
                printf("%7d", massiv[i][j]);
            }
    printf("\n");
    }
 
 Vector(massiv,n);
 
  printf("Vector:\n");
  for (i = 0; i < n * 2 - 1; i++)
  printf("%d ", v[i]);
  printf("\n");
}
leonid_spartak вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать программу массивы (C++) - Даны два массива, скопировать эти массивы в 3-й результирующий (размером 10 элементов) так, что Саша1990 Помощь студентам 1 02.02.2015 16:03
Массивы. Перевод кода из Pascal в C++ Ilepekyp Помощь студентам 2 09.03.2012 23:42
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12