Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Закрытая тема
 
Опции темы Опции просмотра
Старый 20.05.2009, 10:47   #31 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Kosmos Посмотреть сообщение
2. Размерности массивов следует задать именованными константами.
Задание:
Дана целочисленная прямоугольная матрица. Определить:
1. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрица¬тельный элемент.
2. Найти номер первого из столбцов, не содержащих ни одного положительного элемента.
CONST
N=8;
M=10;
VAR
A:ARRAY[1..N,1..M] of INTEGER;
ColNum,ColSum:ARRAY[1..M] of INTEGER;
i,j,Ncur,p,Number_Neg, Number_Pos:INTEGER;

BEGIN
Randomize;
FOR i:=1 TO N DO
FOR j:=1 TO M DO
A[i,j]:=Random(100)-50;

Number_Neg:=0;
FOR j:=1 TO M DO
BEGIN
p:=0;
i:=0;
REPEAT
INC(i);
IF A[i,j]<0 THEN p:=1;
UNTIL (p=1) OR (i=N);
IF p=1 THEN
BEGIN
INC(Number_Neg);
ColNum[Number_Neg]:=j;
ColSum[Number_Neg]:=0;
FOR i:=1 TO N DO
ColSum[Number_Neg]:=ColSum[Number_Neg]+A[i,j];
END;
END;

Number_Pos:=0;
j:=0;
REPEAT
INC(j);
p:=0;
FOR i:=1 TO N DO
IF A[i,j]>0 THEN p:=1;
IF p=0 THEN Number_Pos:=j;
UNTIL (p=0) OR (j=M);

FOR i:=1 TO N DO
BEGIN
FOR j:=1 TO M DO
Write(A[i,j]:4);
Writeln;
END;

Write('Column number ');
FOR i:=1 TO Number_Neg DO
Write(ColNum[i]:6);
Writeln;
Write(' Column Sums ');
FOR i:=1 TO Number_Neg DO
Write(ColSum[i]:6);
Writeln;

IF Number_Pos=0 THEN
WriteLn('The matrix contains no negative columns') ELSE
Writeln('First negative column number is ',Number_Pos:2);
ReadLn;
END.
Vladimir_S вне форума  
Старый 20.05.2009, 12:26   #32 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Kosmos Посмотреть сообщение
3.Задана строка символов.
Задание:
определить длину самого короткого слова.
CONST
Max_Number_of_Words=200;
VAR
L:ARRAY[1..Max_Number_of_Words] of BYTE;
i,Number_of_Words,Min_Lng:Integer;
file_inp, file_out, file_interm, file_inf:TEXT;
Ch_bef,Ch_aft:Char;
S:STRING;

BEGIN
Assign(file_inp,'D:\x1');
ReSet(file_inp);
Assign(file_interm,'D:\x2');
ReWrite(file_interm);

Ch_bef:=' ';
REPEAT
Read(file_inp, Ch_aft);
IF ((Ch_bef=' ') AND (Ch_aft<>' ')) OR
((Ch_bef<>' ') AND (Ch_aft<>' ')) OR
((Ch_bef<>' ') AND (Ch_aft=' ')) THEN
Write(file_interm, Ch_aft);
IF ((Ch_bef<>' ') AND (Ch_aft=' ')) OR (EOLN(file_inp)) THEN
WriteLn(file_interm);
Ch_bef:=Ch_aft;
UNTIL EOLN(file_inp);
Close(file_inp);
Close(file_interm);
ReSet(file_interm);
i:=0;
REPEAT
INC(i);
ReadLn(file_interm, S);
L[i]:=Length(S);
UNTIL EoF(file_interm);
Close(file_interm);
Erase(file_interm);
Number_Of_Words:=i;
Min_Lng:=255;
FOR i:=1 TO Number_Of_Words DO
IF L[i]<Min_Lng THEN Min_Lng:=L[i];
Writeln('The shortest word length is ', Min_Lng);
Readln;
END.

Анализируемая строка должна находится в файле с именем "x1". Впрочем, имена файлов и пути можно изменить. Файл "х2" - временный.
Vladimir_S вне форума  
Старый 20.05.2009, 14:59   #33 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Kosmos Посмотреть сообщение
8. Вычислить и вывести на экран в виде таблицы значения функции, заданной с по¬мощью ряда Тейлора, на интервале от хнач до xкон с шагом dx с точностью е. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содер¬жать значение аргумента, значение функции и количество просуммированных членов ряда. Номер варианта задания равен номеру компьютера.

Задание:
http://www.tehnari.ru/imagehosting/2...3185c8291a.jpg
CONST
ACC=3;
VAR
x1,x2,Step,x,y:REAL;
Nt:INTEGER;

FUNCTION X2np(X:Extended; n:INTEGER):Extended;
Var i:INTEGER;
Y:Extended;
BEGIN
IF n=0 THEN X2np:=1 ELSE
IF n=1 THEN X2np:=X ELSE
BEGIN
Y:=X;
FOR i:=2 TO n DO Y:=Y*X;
X2np:=Y;
END;
END;

PROCEDURE ATG(Xa:REAL; VAR AT:REAL; VAR AN:INTEGER);
VAR
SUM, a:REAL;
i:INTEGER;
BEGIN
SUM:=Pi/2;
i:=-1;
REPEAT
INC(i);
a:=X2np(-1,i+1)/(2*i+1)/X2np(Xa,(2*i+1));
SUM:=SUM+a;
UNTIL ABS(a)<1/X2np(10,ACC+1);
AT:=SUM;
AN:=i+1;
END;

BEGIN
Write('x1 = ');
ReadLn(x1);
Write('x2 = ');
ReadLn(x2);
Write('Step = ');
ReadLn(Step);
Writeln('Argument',' Result ', 'Number of terms ', ' Arctan ');
x:=x1-Step;
REPEAT
x:=x+Step;
ATG(x,y,Nt);
Writeln(x:7:4,y:8:4,Nt:12,Arctan(x):12:4);
UNTIL x>x2;
ReadLn;
END.

Константа АСС - количество значащих цифр после запятой. В последней колонке для сравнения выводится точное значение функции арктангенс.
Vladimir_S вне форума  
Старый 20.05.2009, 20:32   #34 (permalink)
Tamerlaan_Sg
Новичок
 
Регистрация: 26.03.2009
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

найти сумму элементов расположенных ниже главной диагонали матрицы
Tamerlaan_Sg вне форума  
Старый 21.05.2009, 09:09   #35 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Цитата:
Сообщение от Tamerlaan_Sg Посмотреть сообщение
найти сумму элементов расположенных ниже главной диагонали матрицы
Const n=5;
Var a:array[1..n,1..n] of integer;
i,j,S:integer;
BEGIN
S:=0;
For i:=1 to n do
begin
For j:=1 to n do
readln(a[i,j]);
end;
For i:=2 to n do
begin
For j:=1 to n do
If (i=j+1)or(i=j+2)or(i=j+3)or(i=j+4) then S:=S+a[i,j];
end;
writeln('S=',S);
END.
ummasha вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 21.05.2009, 09:25   #36 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
If (i=j+1)or(i=j+2)or(i=j+3)or(i=j+4)
Маш, а попроще никак? И так, чтобы для любого n годилось? А?
Vladimir_S вне форума  
Старый 21.05.2009, 09:48   #37 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Это первое, что пришло мне в голову))) Но программу я обязательно доработаю.
ummasha вне форума  
Старый 21.05.2009, 10:12   #38 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
Это первое, что пришло мне в голову))) Но программу я обязательно доработаю.
Маша, но ведь вся эта цепочка просто эквивалентна if i>j !

Решение, конечно, правильное, и даже в чем-то оригинальное, но не проще ли так:
Вместо
Цитата:
For j:=1 to n do
If (i=j+1)or(i=j+2)or(i=j+3)or(i=j+4) then S:=S+a[i,j];
задать цикл по столбцам в виде:
For j:=1 to i-1 do S:=S+a[i,j];
Vladimir_S вне форума  
Старый 21.05.2009, 10:32   #39 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

Цитата:
Сообщение от diVIZion Посмотреть сообщение
Задание: написать на "Си", модуль для операций с таблицей переменных (на основе кэш таблицы), использовать алгоритм elf.
модуль должен выполнять операции:
1) получить переменную по её имени;
2) установить значение переменной по её имени.
1. ХЕШ-таблица?
2. "Получить переменную по ёё имени" в этом задании значит "получить адрес переменной по ёё имени"?
csbwalker вне форума  
Старый 21.05.2009, 11:51   #40 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

Цитата:
Сообщение от blondinka62733 Посмотреть сообщение
Три миссионера и три каннибала хотят переправиться с левого берега на правый. Как это сделать за минимальное число шагов, если в их распоряжении имеется трехместная лодка и ни при каких обстоятельствах (в лодке или на берегу) миссионеры не должны оставаться в меньшинстве.

Вот результаты нашей работы:

...

Ответ почему-то выдает просто Yes... Помогите пожалуйста, буду очень признательна.
Правильный ответ вот такой: Первыми пересекают реку миссионер и каннибал. После этого миссионер возвращается. Затем пересекают реку два каннибала. Один из них возвращается. Потом два миссионера пересекают реку. Миссионер и каннибал возвращаются. Два миссионера пересекают реку. Один каннибал возвращается. Два каннибала пересекают реку. Один каннибал возвращается. Два оставшихся каннибала пересекают реку.
Код:
go:-go(state(east,east,east,east),state(west,west,west ,west)).
тут всего четыре позиции...а человек всего шесть и остальная часть программы построена на шесть позиций, поэтому как-то так:
Код:
go:-go(state(east,east,east,east,east,east),state(west,west,west ,west,west,west)).
В результате считает довольно долго, но вроде считает...Хотя может и зациклился. Посмотрим.
Как досчитает - напишу результат выполнения, совпал ли он с правильным.
csbwalker вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Закрытая тема

Метки
задачи по информатике, помощь, решение задач, студент

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 06:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.