Форум - Программирование
Форум

Форум (http://barca.ru/forum/index.php)
-   Hi-tech (http://barca.ru/forum/forumdisplay.php?f=40)
-   -   Программирование (http://barca.ru/forum/showthread.php?t=976)

Catala 06.04.2011 21:57

Паскаль не помню, надеюсь C знаешь.

Код:

#include
#include

void main()
{
        int * mat;
        int rows, cols;
        int row, col;
        int value;
        int dir;//0 - rigt; 1 - down; 2 - left; 3 - up
        printf("Input matrix dimensions: ");
        scanf("%d%d",&rows, &cols);
        mat = (int*)malloc(sizeof(int) * cols * rows);
        for(row = 0; row < rows; row++)
                for(col = 0; col < cols; col++)
                        mat[row*cols + col] = 0;
        value = 1;
        dir = 0;
        row = 0;
        col = 0;
        while(value <= rows*cols)
        {
                mat[row*cols + col] = value;
                switch(dir){
                case 0:
                                col++;
                                if(mat[row*cols + col] != 0 || col >= cols)
                                {
                                        col--;
                                        row++;
                                        dir = 1;
                                }break;
                case 1:
                                row++;
                                if(mat[row*cols + col] != 0 || row >= rows)
                                {
                                        row--;
                                        col--;
                                        dir = 2;
                                }break;
                case 2:
                                col--;
                                if(mat[row*cols + col] != 0 || col < 0)
                                {
                                        col++;
                                        row--;
                                        dir = 3;
                                }break;
                case 3:
                                row--;
                                if(mat[row*cols + col] != 0 || row < 0)
                                {
                                        row++;
                                        col++;
                                        dir = 0;
                                }break;
                }
                value++;
               
        }
        for(row = 0; row < rows; row++)
        {
                for(col = 0; col < cols; col++)
                        printf("%d ", mat[row*cols + col]);
                printf("\n");
        }
}


К@t@LoNeЦ 06.04.2011 22:01

Цитата:

Сообщение от Catala
надеюсь C знаешь.

к сожалению нет, но все равно спасибо.

Будем искать (с)

RIVALDO 06.04.2011 22:08

Цитата:

Сообщение от К@t@LoNeЦ
но сможет ли институт качественно обучить разбираться в компе и программировании,сможет ли подготовить специалиста??

Если на серьёзном уровне компами увлекаешься, надо поступать в Бауманский технологический университет на факультет ИУ, у меня там пару хороших друзей учились, они к 5 курсу уже программировали на языке ассемблера, я не особо силён в этих терминологиях, но как мне сказали программировать на этом языке это очень круто, потому как сложно. :D

Catala 06.04.2011 22:08

Собственно в Паскале почти все эти операторы есть, кроме ++. Алгоритм:
  • Заполняешь массив нулями
  • Задаешь переменную направление, я сделал 0 вправо, 1 вниз, 2 влево, 3 вверх
  • В соответствии с направлением увеличиваешь или уменьшаешь текущий индекс
  • Если в индексе не ноль или вылез за границу меняешь направление на следующее
  • Иначе записываешь значение и продвигаешь его на единицу.

RIVALDO 06.04.2011 22:18

Catala, к слову, язык ассемблера это самый сложный язык или нет?

Catala 06.04.2011 22:27

Ассемблер это машинный код. Любая программа, написанная на языке высокого уровня(все языки, используемые на рынке) проходят этап компиляции, то есть перевода на машинный код. На ассемблере нужно программировать только для работы с железом, он дает полный прямой доступ и максимальную свободу. Сложность языка заключается в том, что он предназначен для понимания компьютером, а не человеком. Как бинарная система представления чисел, человек может ее понимать, но предпочитает работать в десятичной, а компьютер понимает только бинарную(нолики и единички).

К@t@LoNeЦ 30.11.2011 17:02

Помогите с заданием.
Нужно протабулировать функцию (см.рисунок 1)
Т.е как дано из рисунка, мне нужно подставить все значения х из интервала от "-8" до "8" с шагом 2.5 в данную функцию и посчитать.

http://barca.ru/forum/attachment.php...3&d=1322654339

Программу я написал:
Вот она:

var x,y: Real;
i:Integer;

Begin
writeln('Табуляция:');

x:=-8;

while x<8 do

begin

if (2*sqr(x)-5*x+3)<0 then Writeln('x=',x :4:2, ' Нет решения')

else

Writeln('x=',x :4:2 ,' y=',(20*cos(sqr(x)))/(sqrt(2*sqr(x)-5*x +3)) :4:2 );
x:=x+2.5;

end;

End.



Но он считает функцию не правильно - в этом и проблема (См. рисунок 2)

http://barca.ru/forum/attachment.php...4&d=1322654416
Вроде все правильно в коде. Единственное в чем могла быть ошибка, так это в записи самой функции.

К@t@LoNeЦ 14.03.2012 19:21

Вложений: 1
Задание по С++:
Среди двузначных чисел найти те, сумма квадратов цифр которых делится на 13

На Паскале цикл выглядит так:
for i:= 10 to 99 do
if (Sqr(i div 10) + Sqr(i mod 10)) mod 13 = 0 then WriteLn (i);


На С++ диф и мод , основываясь статье из Википедии выглядят так - modf(x,p) и divf(x,p)
http://ru.wikipedia.org/wiki/Math.h

Так что на С++ программа выглядит так:

#include
#include
#include
#include
void main()
{

int x;

for(x=10; x <= 99; x++)
{
if (modf(pow(mod(x,10),2)+pow(divf(x,10),2),13)==0)
printf("x=%lf", &x);
}


getch();
}



НО вылазиют две ошибки (См.рисунок)

Помогите разобраться в них, потому что ошибка в этих модах и дифах


ЗЫ: Заголовочные файлы в сообщении не отображаются (после #include), так что смотреть надо на картинку

Catala 14.03.2012 19:52

Картинку с телефона не вижу, но див и мод это / и % соответственно.

К@t@LoNeЦ 14.03.2012 20:45

Catala, можешь показать действие обоих на примере? А то, я так понял, / - это и обычное деление и див


13 апреля 2025 года. Воскресенье - 14:32 (Часовой пояс GMT +4).

Русский vBulletin v3.5.2, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Перевод сделал zCarot