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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2013, 02:04   #1
fanat2011
 
Регистрация: 18.03.2013
Сообщений: 5
По умолчанию Pascal - Си

Доброй ночи!

Условия задания:
Используя генератор случайных чисел, сформировать массив размерностью NxN (размерность задается с клавиатуры и N<=20) таким образом, чтобы всего его элементы лежали в диапазоне от -10 до 10. Разработать программу, определяющую в данной целочисленной квадратной матрице порядка N квадрат размером M x M (1<=M<=N) c наибольшей суммой элементов.

Готовое решения на языке Pascal:
Код:
uses crt;
const nmax=20;
var a:array[1..nmax,1..nmax] of integer;
    f:text;
    n,i,j,m,s,mx,imx,jmx,k,p:integer;
begin
clrscr;
randomize;
assign(f,'matrica.txt');
rewrite(f);
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
writeln(f,'Ishodnaya matrica:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=-10+random(21);
    write(a[i,j]:4);
    write(f,a[i,j]:4);
   end;
  writeln;
  writeln(f,'');
 end;
repeat
write('Размер квадрата от 1 до ',n,' m=');
readln(m);
until m in [1..n];
writeln(f,'M=',m);
{поиск квадрата}
mx:=a[1,1];
imx:=1;
jmx:=1;
for i:=1 to n-m+1 do
for j:=1 to n-m+1 do
 begin
  s:=0;
  for k:=i to i+m-1 do
  for p:=j to j+m-1 do
  s:=s+a[k,p];
  if s>mx then
   begin
    mx:=s;
    imx:=i;
    jmx:=j;
   end;
 end;
writeln(f,'Koordinaty [',imx,',',jmx,'] summa=',mx);
close(f);
{это для проверки, можно не писать}
writeln('Найденный квадрат:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    if (i in [imx..imx+m-1])and (j in [jmx..jmx+m-1])
    then textcolor(12)
    else textcolor(15);
    write(a[i,j]:4);
   end;
  writeln;
 end;
textcolor(15);
write('Координаты [',imx,',',jmx,'] сумма=',mx);
readln
end.
Мне же это задания нужно переписать на язык СИ, только что бы на экран выводился квадрат сумма значений которая самая большая из всех других квадратов
Запись в файл и тд не нужно, основное я написал выше

Собственно переделал код под СИ, только вот работает он не так как надо
Можете посмотреть где у меня ошибка?

СИ:
Код:
#include <stdio.h>
#include <time.h>

#define NMAX 20

void main()
{
	int a[NMAX][NMAX], i, j, m, n, s, mx, imx = 1, jmx = 1, k, p;
	srand(time(NULL));

	do
	{
	printf("Rozmir matru4i do %d n = ", NMAX);
	scanf("%d", &n);

	if (n >= 1 && n <= NMAX - 1)
		break;
	}
	while(1);

	printf("Sformovana matru4a:\n");
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			a[i][j] = rand()% 20 + 1 - 10;
			printf("%3d", a[i][j]);
		}
		printf("\n");
	}

	do
	{
		printf("\nRormir kvadrata vid 1 do %d: ", n);
		scanf("%d", &m);

		if (m >= 1 && m <= n)
			break;
	}
	while(1);

	mx = a[0][0];
	for (i = 0; i < m - n + 1; i++)
		for (j = 0; i < m - n + 1; j++)
		{
			s = 0;
			for (k = i; k < i + m - 1; i++)
				for (p = j; p < j + m - 1; j++)
					s += a[p][k];
			if (s > mx)
			{
				mx = s;
				imx = i;
				jmx = j;
			}
		}

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			if
			(
			!(( (i>=imx) && (i<=imx+m-1) )
			&&
			( (j>=jmx) && (j<=jmx+m-1) ))
			)
				printf("%d ", a[i][j]);
			
		}
		printf("\n");
	}

	printf("\a\nKoordunatu [%d][%d] summa = %d\n", imx, jmx, mx);

	system("pause");
}
Буду благодарен!

Последний раз редактировалось fanat2011; 18.03.2013 в 09:23.
fanat2011 вне форума Ответить с цитированием
Старый 20.03.2013, 00:37   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

В основном, опечатки:
Код:
#include <stdio.h>
#include <time.h>
#include <windows.h>

#define NMAX 20
#define MIN -4001

void
SetColor(int ForgC)
{
    WORD wColor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    {
        wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
        SetConsoleTextAttribute(hStdOut, wColor);
    }
    return;
}

void
main()
{
    int a[NMAX][NMAX], i, j, m, n, s, mx, imx = 1, jmx = 1, k, p;
    srand(time(NULL));
    do
    {
        printf("Rozmir matru4i do %d n = ", NMAX);
        scanf("%d", &n);
        if (n >= 1 && n <= NMAX)
            break;
    }
    while(1);
    printf("\nSformovana matru4a:\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            a[i][j] = rand()% 20 + 1 - 10;
            printf("%3d", a[i][j]);
        }
        printf("\n");
    }
    do
    {
        printf("\nRormir kvadrata vid 1 do %d: ", n);
        scanf("%d", &m);
        if (m >= 1 && m <= n)
            break;
    }
    while(1);
    mx = MIN;
    for (i = 0; i < n - m + 1; i++)
        for (j = 0; j < n - m + 1; j++)
        {
            s = 0;
            for (k = i; k < i + m; k++)
                for (p = j; p < j + m; p++)
                    s += a[k][p];
            if (s > mx)
            {
                mx = s;
                imx = i;
                jmx = j;
            }
        }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (i >= imx && i < imx + m && j >= jmx && j < jmx + m)
                SetColor(12);
            else
                SetColor(7);
            printf("%3d", a[i][j]);
        }
        printf("\n");
    }
    SetColor(7);
    printf("\nKoordunatu [%d][%d] summa = %d\n", imx, jmx, mx);
    system("pause");
}
Может быть и пропустил что-нибудь, так что тестируйте тщательнее.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача turbo pascal на тему: файлы с произвольным доступом в Pascal ExCiTeC Паскаль, Turbo Pascal, PascalABC.NET 0 28.01.2013 20:36
Pascal: Массивы, подпрограммы, текст на языке Pascal WarriorCow Помощь студентам 4 22.02.2012 15:28
Программы в Pascal, среда pascal ABC. Лабораторные работы Одинокая Волчица Фриланс 8 10.02.2012 20:09
Неудобство ABC Pascal и глюк Borland Pascal proser93 Помощь студентам 0 19.11.2011 19:01
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28