Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 938 • Страница 42 из 47<  1 ... 39  40  41  42  43  44  45 ... 47  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Advanced member
Статус: Не в сети
Регистрация: 23.10.2003
Откуда: Иркутск/Майкоп
zzz100 писал(а):
Написать программу на языке VBA

В Excel'е?

_________________
Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.



Партнер
 

Junior
Статус: Не в сети
Регистрация: 25.12.2008
Дана задача:
#77
Помогите, вот код программы
Код:
Uses crt;
Const n=100;
X:array[0..3]of -1..1=(0,-1,0,1);
Y:array[0..3]of -1..1=(-1,0,1,0);
Type Mas=array[0..n,0..n]of Integer;
var A:mas;
B:array[0..n,0..n]of Boolean;
m,p,col,rooms,indexX,indexY:integer;
procedure Init(Z:string);
Var f:text;
i,j:integer;
Begin
z:='input.txt';
Assign(f,z);
Reset(f);
ReadLn(f,m,p);
For i:=1 to m do
begin
For j:=1 to p do
Read(f,A[i,j]);
ReadLn(f);
end;
FillChar(B,SizeOf(B),true);
For i:=1 to m do
For j:=1 to p do
B[i,j]:=false;
Close(f);
end;

function Degree2(i:integer):integer;
var j,t:integer;
begin
t:=1;
For j:=1 to i do
t:=t*2;
Degree2:=t;
end;

Procedure Solve(i,j:integer);
Var k:integer;
begin
k:=3;
While k>=0 do
begin
If A[i,j]=1 then
begin
If not B[i+X[k],j+Y[k]] then
begin
Inc(col);
B[i,j]:=true;
Solve(i+X[k],j+Y[k]);
B[i,j]:=False;
end;
end
Else A[i,j]:=A[i,j]-Degree2(k);
Dec(k);
end;
end;
procedure Prosmotr;
var i,j:integer;
begin
For i:=1 to m do
For j:=1 to p do
If A[i,j]=0 then B[i,j]:=True;
end;
begin
clrscr;
Init('A:museum.txt');
rooms:=0;
For indexX:=1 to m do
For indexY:=1 to p do
If not B[indexX,indexY] Then
begin
col:=1;
Inc(rooms);
Solve(indexX,indexY);
Write(Col,' ');
Prosmotr;
end;
WriteLn;
WriteLn(rooms);
readkey;
end.

в чем ошибка????? Может кто-нибудь исправить?
Добавлено спустя 27 минут, 48 секунд
Совмещение ломаных. Две ломаные построены по ребрам сеточной области с целочисленными координатами. Требуется составить алгоритм—программу проверки совпадения двух ломаных, составленных из отрезков, с точностью до параллельного переноса и поворота на 90°, 180°, 270°. Исходные данные — число отрезков ломаных и значения координат их концов — определяются в текстовом файле. Выходной файл результатов должен содержать признак 1, если ломаные совпадают, и 0 — в противном случае.
Пример файла исходных данных:
4 — количество отрезков первой ломаной
0 0 1 0 3 0 2 0 1 0 2 0 3 0 3 1
2 — количество отрезков второй ломаной
1 1 1 4 0 4 1 4
Пример файла результатов:
1 — ломаные совпадают.


Вот ещё задача(


 

Advanced member
Статус: Не в сети
Регистрация: 23.10.2003
Откуда: Иркутск/Майкоп
SaveUS.X29 писал(а):
в чем ошибка???


1) Процедуре Init передается строка, которая никак в этой процедуре не используется. Программа, впрочем, может работать и так.
2)
Код:
If A[i,j]=1 then

Неправильно. Здесь должно проверяться (при помощи and), равен ли нулю бит A[i,j], соответствующий k-му направлению. Т.е.
if A[i,j] and Degree2(k) = 0 then

3)
Код:
Else A[i,j]:=A[i,j]-Degree2(k);
Внутри процедуры Solve почему-то изменяются значения элементов массива A, в котором записано расположение стен.
4)
Код:
B[i,j]:=true;

Должно выполняться в начале рекурсивной процедуры.

Код:
B[i,j]:=False;

Эта строка не нужна. Из-за нее процедура Solve вместо того, чтобы закрашивать все клетки, в которые можно попасть из начальной, вообще не изменяет состояние массива В.

_________________
Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.


Последний раз редактировалось vor 29.12.2008 6:24, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 12.12.2005
Откуда: Москва
есть пару заданий в которых нужна помощь,кто может помогите плиз )

Упростите логическое выражение или укажите его результат (при его однозначности).
(not A or B) and (A or not B) and (A and B)

Упростите логическое выражение или укажите его результат (при его однозначности).
not ((A or B) → not (B or C))

Для какого символьного выражения будет ложным высказывание первая и вторая буквы гласные → not (четвертая буква согласная)? В ответе укажите номер выражения в списке.
REST
FAST
EAST
LAST
TASK

Найти логическую функцию F, зависящую от логических переменных A, B, C, по заданной таблице истинности. Упрощенный вид функции должен содержать не более трех логических операций. В упрощенном виде функции допустимо использовать только операции not, or и and.
A B C F
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
stak5

Хм, а в чем сложность? Вот ответы, но советую решить самому.
(1) A and B
(2) B or (A and C)
(3) EAST
(4) C or (A and (not B))
Надеюсь ничего не напутал.

PS: http://ru.wikipedia.org/wiki/Алгебра_логики , http://ru.wikipedia.org/wiki/Булева_функция


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
SaveUS.X29
Цитата:
Совмещение ломаных...
Могу описать алгоритм, который, как я думаю, должен решать эту задачу, и все функции, кроме одной - поворот точки (отрезка) относительно начала координат на 90, 180 и 270 градусов (т.к. с геометрией у меня плоховато). Думаю это несложная функция для знающего геометрию.
Алгоритм такой:
(1) Читаем данные. Для этого удобно воспользоваться классом (или структурой) и сохранять не только координаты отрезков, а еще и их длины и направление (например, 0 - горизонтальный, 1 - вертикальный). Класс отрезка выглядит примерно так (на C#):
Код:
class Line{
  public int y1, x1, y2, x2, length, direct; //0 - horiz, 1 - vert
  public Line(int y1, int x1, int y2, int x2){
    this.y1 = y1; this.x1 = x1; this.y2 = y2; this.x2 = x2;
    CalcLength();}
  public void CalcLength(){
    if (y2 == y1) { direct = 0; length = Math.Abs(x2 - x1); }
    else { direct = 1; length = Math.Abs(y2 - y1); }}}
Класс ломаной, соответственно, так (пока без доп. функций):
Код:
class PolyLine{
  public int linesNb,yLength=0,xLength=0,xSum,ySum;
  public Line[] lines;
  public PolyLine(int linesNb) { this.linesNb = linesNb; lines = new Line[linesNb]; }}
(2) Теперь "нормализуем" каждую ломаную. Сначала Normalize1() - просто меняем точки, задающие отрезок так, чтобы первая была левее (ниже) второй. Это позволит упростить Normalize2() - которая "сливает" короткие отрезки в большие. Обе функции доб. в класс PolyLine:
Код:
public void Normalize1(){
  int i,t;
  for(i=0;i<linesNb;i++) switch(lines[i].direct){
    case 0: if(lines[i].x1 > lines[i].x2) {t = lines[i].x1; lines[i].x1 = lines[i].x2; lines[i].x2 = t;}; break;
    case 1: if(lines[i].y1 > lines[i].y2) {t = lines[i].y1; lines[i].y1 = lines[i].y2; lines[i].y2 = t;}; break;}}
Код:
public void Normalize2(){
  int i,j,newLinesNb=linesNb;
  bool[] use = new bool [linesNb]; for(i=0;i<linesNb;i++) use[i]=true;
  for (i=0;i<linesNb;i++) for (j=0;j<linesNb;j++) if(i!=j && use[i] && use[j] && lines[i].direct==lines[j].direct)
    switch (lines[i].direct){
      case 0:
        if(lines[i].y1 == lines[j].y1)
          if(lines[i].x2 == lines[j].x1) {lines[i].x2 = lines[j].x2; use[j] = false; newLinesNb--; i--; j = linesNb;}
          else if (lines[i].x1 == lines[j].x2) {lines[i].x1 = lines[j].x1; use[j] = false; newLinesNb--; i--; j = linesNb;}
        break;
      case 1:
        if(lines[i].x1 == lines[j].x1)
          if (lines[i].y2 == lines[j].y1) {lines[i].y2 = lines[j].y2; use[j] = false; newLinesNb--; i--; j = linesNb;}
          else if (lines[i].y1 == lines[j].y2) {lines[i].y1 = lines[j].y1; use[j] = false; newLinesNb--; i--; j = linesNb;}
        break;}

  for(i=0;i<linesNb-1;i++) if(!use[i])
    for (j = i + 1; j < linesNb; j++) if(use[j]){
      lines[i] = lines[j]; use[j] = false;}
 
  linesNb = newLinesNb;
  for (i = 0; i < linesNb; i++) lines[i].CalcLength();}
Сразу после нормализации можно проверить: если linesNb (количество отрезков, из которых состоит ломаная) 2-х ломаных неравны, то ломаные несовместимы (такой вывод можно делать только ПОСЛЕ нормализации).
(3) Теперь посчитаем гориз. и верт. длины ломаной (эта функция добавляется в класс PolyLine):
Код:
public void CalcXYLength(){
   for(int i=0;i<linesNb;i++)
   switch (lines[i].direct){
      case 0: xLength += lines[i].length; break;
      case 1: yLength += lines[i].length; break;}}
(4) Зная эти длины в некоторых случаях можно либо сразу сказать, что ломаные несовместимы, либо ограничить варианты их поворота до 2-х. Т.е. если, например g1=2,v1=3 (gоризонтальная и vертикальная длины первой ломаной), а g2=2 и v2=4, то понятно, что ломаные несовместимы; если g1=g2, v1=v2, то поворачивать вторую ломаную будем только на 0 и 180 гр.; если g1=v2, v1=g2, то будем поворачивать только на 90 и 270 гр., а если g1=v1=g2=v2, то будем поворачивать на все углы.
(5) Теперь в цикле пробуем поворачивать на нужные углы (доб. в класс Line функцию поворота).
(5.1) После каждого поворота считаем сумму координат всех точек ломаной, отдельно по x и по y (для каждой ломаной). Эта функция доб. в класс PolyLine:
Код:
public void CalcSumXY(){
  xSum = ySum = 0;
  for (int i = 0; i < linesNb; i++){
    xSum += (lines[i].x1 + lines[i].x2);
    ySum += (lines[i].y1 + lines[i].y2);}}
Если xSum2-xSum1 (разность сумм по x второй и первой ломаной) и ySum2-ySum1 (аналогично) не делятся нацело на количество точек (т.е. на linesNb*2), то ломаные несовместимы. Если делятся (обе разности), то результат деления - это смещения по x и y соответственно для второй ломаной (смещения нужно отнимать от каждой соответствующей координаты). Небуду писать функцию - надеюсь понятно как это делается.
(5.2) Всё, после смещения можно покоординатно сравнивать ломаные. Т.е. берем каждый отрезок первой ломаной и ищем его с такими же координатами во второй ломаной (можно для удобства сначала сделать Normalize1). Если хоть один не найдем - ломаные НЕсовместимы. Если проверка прошла до конца, то всё - ответ: ломаные совместимы.

PS: Ничего проще придумать не смог. Работоспособность алгоритма тоже не проверял (т.к. нет функции поворота), но думаю что всё должно работать...


 

Junior
Статус: Не в сети
Регистрация: 25.12.2008
Составить алгоритм определения Является ли матрица ортогональной только на Pascal...


 

Member
Статус: Не в сети
Регистрация: 05.08.2008
Откуда: Одесса мама
const
epsilon = 1E-6;//
var
A : array [1..n,1..n] of Real;
D : Real;
I : Integer;
J : Integer;
K : Integer;
Begin
Result := True;
for I:=1 to N do
for J:=1 to N do
begin
D := 0;
for K:=1 to N do
D := D + A[K,I]*A[K,J];
if (I=J) and (Abs(D)<epsilon) then
Result := False;
if (I<>J) and (Abs(D)>=epsilon) then
Result := False;
end;

end;


 

Junior
Статус: Не в сети
Регистрация: 25.12.2008
не пашет


 

Member
Статус: Не в сети
Регистрация: 05.08.2008
Откуда: Одесса мама
В конце проверяй значение Result , если оно осталось TRUE то матрицп ортогональная, что непонятного?


 

Member
Статус: Не в сети
Регистрация: 15.01.2007
Turbo Pascal. Вот текст задачи:

Разбить экран главной диагональю. Окрасить верхнюю часть в красный, нижнюю - в синий. Изобразить желтую окружность диаметра D, перемещающуюся по вертикали через центр экрана.


Очень срочно!!! Помогите кто-нить......((((((((


 

Member
Статус: Не в сети
Регистрация: 22.09.2007
Откуда: Отсюда
Люди, помагите, через пару дней экзамен по ООП.
Надо на делфи написать прогу: моделирование пружинного маятника. вводить массу груза, коэф. жесткости. визуально отображать движени пружины, и строить график зависимость скорости от времени.
Помагите плиз...
з.ы. если поможет, вот моя наработка - http://depositfiles.com/files/fjpqg8nn9


 

Member
Статус: Не в сети
Регистрация: 14.09.2008
Нужно по информатике решить "задачку" на Паскале.Вот условие:В трёхмерном пространстве имеется кубик с единичной длиной ребра.Две противоположные вершины кубика имеют координаты(0,0,0)и(1,1,1).
Вводятся координаты двух произвольных вершин кубика(x,t,z) и (u,y,w)/
Требуется определить,лежат ли вершины с ведёнными координатами на одной ребре,на одной грани,совпадают одна с другой или являются противоположными.


 

Member
Статус: Не в сети
Регистрация: 22.02.2008
Откуда: ниоткуда
dimon1993 писал(а):
Вводятся координаты двух произвольных вершин кубика(x,t,z) и (u,y,w)/ Требуется определить,лежат ли вершины с ведёнными координатами на одной ребре,на одной грани,совпадают одна с другой или являются противоположными.

Сравнивай попарно координаты. Если все разные, то вершины противоположны; пара одинаковых - лежат на одной грани; две пары одинаковых - лежат на одном ребре; три пары одинаковых - совпадают


 

Member
Статус: Не в сети
Регистрация: 14.09.2008
Yubi
Спасибо


 

Advanced member
Статус: Не в сети
Регистрация: 23.10.2003
Откуда: Иркутск/Майкоп
Yubi писал(а):
Сравнивай попарно координаты. Если все разные, то вершины противоположны; пара одинаковых - лежат на одной грани; две пары одинаковых - лежат на одном ребре; три пары одинаковых - совпадают

Это сработает только при условии, что ребра параллельны осям координат. Если допускается поворот кубика вокруг оси, проходящей через вершины (0,0,0) и (1,1,1), тогда задача решается, например, через расчет расстояния между (x,t,z) и (u,y,v).

_________________
Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.


 

Member
Статус: Не в сети
Регистрация: 19.08.2005
Откуда: Москва
помогите плиз , всех переспросил , никто не знает - база данных по access , работа готовая почти , только кое-что исправить
http://webfile.ru/2634057

1 Для записи в таблице Клиентов информации о второй и далее услугах необходимо вводить новый код и писать всю информацию о клиенте заново. В данной задаче это только телефон, но может быть: адрес, номер машины .... Надо сделать так, чтобы клиент был записан один раз с одним кодом, а в БД фиксировались все услуги полученные им от разных сотрудников.
2 Чтобы клиента можно было добавить без использования конструктора
3 Специализация сотрудника должна быть связана с услугой.


 

Member
Статус: Не в сети
Регистрация: 23.12.2004
Откуда: Беларусь, Минск
Нечто вроде курсача-типового расчёта на C по теме "Именованые каналы" - под Windows, но без интерфейса - консольно.
Цитата:
Разработать программу-сервер и программу клиент для обмена сообщениями между двумя компьютерами при помощи именованных каналов. Клиент посылает серверу запрос на выполнение одной из команд: DIR, MKDIR, CD. Сервер принимает команду, выполняет ее, а результат отправляет клиенту.

Под винду... подскажите чтиво какое-нибудь... так-как в пояснении к задаче (5 строк) простенький пример работы каналов под WINNT :shock:

И ещё - для проганья на чистом C для консоли Windows (Vista) какой IDE лучше использовать? А то в универе и у меня под виндой - VS2008. а линухе у меня Анюта и Кдев, но уж больно хардкорные они - добавление простого
Код:
scanf("%d",i)
в "Hello world"-шаблон вызывает segmentation fault...

_________________
ASUS A4M88T-M, Athlon II X3 425, 2GB NCP, video - internal ATI 4250, 200GB Samsung HDD, Win7 x64


 

Member
Статус: Не в сети
Регистрация: 01.05.2007
Откуда: Тель-Авив
Фото: 1
AzaZeo писал(а):
добавление простого Код:
scanf("%d",i)
в "Hello world"-шаблон вызывает segmentation fault...

Может, из-за scanf("%d",&i)
Для Линуха есть SlickEdit, но он небесплатный.


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
AzaZeo писал(а):
И ещё - для проганья на чистом C для консоли Windows (Vista) какой IDE лучше использовать?

тот же VS2008 Express вполне подойдёт. Или что нибудь типа Code::Blocks с mingw (чтобы и под виндой было хардкорно ;) ). По scanf уже подсказали. Если хотите чистого си, то в настройках лучше это явно указать.

AzaZeo писал(а):
Под винду... подскажите чтиво какое-нибудь...

Думаю MSDN содержит подробное описание, смотреть в сторону CreatePipe/CreateNamedPipe.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 938 • Страница 42 из 47<  1 ... 39  40  41  42  43  44  45 ... 47  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan