![]() |
|
|
#1
|
|||
|
|||
|
Попросили сделать задачи, а времени их делать нет(( Некоторые несложные... А вот с №1 я намучался). Но так и не сделал.
№1 В матрице А (N,K) удалить строки и столбцы, в которых есть хотя бы один нулевой элемент (процедурой, чтоение из файла + запись в файл) №2 Составить программу с функцией имеющей 1 параметр (одномерный массив), Функция задана условием: f(x1, x2, ..., xn)= СУММА(i от 1 до n)[ x(i-тое)в_степени_k + 1 ] , если -1<x(i-тое)<1 f(x1, x2, ..., xn)= 0 - иначе Использовать модули. №3 Вычислить значение квадр.корня y=корень из х, для 100 значений х по итер.формуле Герона у(i-тое+1) = 1/2(У(i-тое) + Х(j-тое)/У(i-тое)); У(нулевое)= (1+Х(i-тое))/2 Точность Е = 0,001, где Е = (У(i-тое+1)-У(i-тое)) Использовать рекурсию №4 Дана ведомость абитуриентов, сдавших экзамены в универ-е. В каждой строке данной ведомости - фамилия студента и оценки по 3-м дисциплинам. Определить средний балл по институту и распечатать список абитуриентов, чей балл выше, чем по универ-у. Список сортируется по средн. баллу в порядке убывания. + Возможность добавлять/удалять, смотреть список. №5 Формируем множество y и выделяем из него подмножество y1, которое представляет из себя глухие согласный, входящие в y. №6 Y=(X1\X2) . Вывести y , делящиеся на 3 без остатка. X1 = {1,2,3,4,5,6} X2 = {1,3,4,5,6} ____________ 1-2-3 самые нужные! ____________ Спасибо. |
|
#2
|
||||
|
||||
|
номер 6 прикольнул)
сделай 2 цикла... на х1 и х2... во внутреннем цикле сделай проверку: Код:
if (x1 mod x2 = 0) and //Если остаток от деления х1/х2 не ноль - то при делении на три целого числа мы 100% не получим ((x1 div x2) mod 3 = 0) //Если остаток (x1/x2) / 3 = 0, то числа - искомые then ...; //тут выводим их... |
|
#3
|
||||
|
||||
|
mAnah, тут большинство задач элементарно решаються.
При чем такие уже заезженные, основные элементы которых можно найти в любом учебнике. Другое дело решать какую-то уникальную интересную задачу. Если найдешь такую - пиши, решу. А так тебе прямяком в раздел "Работа" ![]() Последний раз редактировалось Konrad, 12.05.2009 в 23:20. |
|
#4
|
|||
|
|||
|
№1
В матрице А (N,K) удалить строки и столбцы, в которых есть хотя бы один нулевой элемент (процедурой, чтоение из файла + запись в файл) Вот эту не представляю, как элементарно решить... |
|
#5
|
||||
|
||||
|
Очень даже элементарно. Только тут надо знать структуру файла в котором храниться матрица.
Допустим структура текстового файла такая: в первых двух строках хранятся размеры X,Y матрицы, потом идет X*Y строк с данными. Код тогда будет примерно таким: Код:
program MatrixDemo;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TZeroPoint = record
i,j:integer;
end;
var
tf:TextFile;
MaxX,MaxY:integer;
i,j:integer;
m,n:integer;
z:integer;
data:array of array of integer;
zeropoints:array of TZeroPoint;
begin
AssignFile(tf,'F:\trash\matrix.txt');
Reset(tf);
ReadLn(tf,MaxX);
ReadLn(tf,MaxY);
SetLength(data,MaxX);
for i:=Low(data) to High(data) do
SetLength(data[i],MaxY);
//Читаем матрицу
for i:=Low(data) to High(data) do
for j:=Low(data[i]) to High(data[i]) do
begin
Readln(tf,z);
data[i,j]:=z;
if data[i,j]=0 then //Сразу запоминаем позиции ноликов
begin
SetLength(zeropoints,Length(zeropoints)+1);
zeropoints[High(zeropoints)].i:=i;
zeropoints[High(zeropoints)].j:=j;
end;
end;
//Чистим матрицу по позициям
for i:=low(zeropoints) to High(zeropoints) do
begin
for m:=Low(data[zeropoints[i].j]) to High(data[zeropoints[i].j]) do
data[zeropoints[i].j,m]:=0;
for n:=Low(data) to High(data) do
data[n,zeropoints[i].i]:=0;
end;
CloseFile(tf);
AssignFile(tf,'F:\trash\matrix2.txt');
ReWrite(tf);
WriteLn(tf,MaxX);
WriteLn(tf,MaxY);
for i:=Low(data) to High(data) do
for j:=Low(data[i]) to High(data[i]) do
WriteLn(tf,data[i,j]);
CloseFile(tf);
ReadLn;
end.А теперь о насущном Подобные просьбы следует помещать в раздел "Работа", здесь не общество альтруистов. Впредь я буду просто удалять такие темы. |
|
#6
|
|||
|
|||
|
Задача про студентов. Делаю в Паскале)
Код:
Uses crt;
Const fname='students.dat';
n=3; {Кол-во предметов за сессию}
Type st=record
fam:string; {Фамилия}
oc:array [1..n] of integer;{Оценки}
end;
Var t:array[1..30] of st;
i,ch,j,a,b:integer;
h: file of st;
begin
{write('vvedite kol-vo stud-ov: '); readln(b);}
write('Введите кол-во студентов: '); readln(ch);
for i:=1 to ch do begin
writeln('Сведения о ' ,i,'студенте');
write('Фамилия: '); readln(t[i].fam);
writeln('Оценки по предметам: ');
for j:=1 to n do begin
case j of
1:write('Мат: ');
2:write('Культ: ');
3:write('Ист: ');
end;
readln(t[i].oc[j]);
if not ((t[i].oc[j]>0) and (t[i].oc[j]<=10)) then begin
writeln('Неверн. оценка - надо от 1 до 10.');
j:=j-1;
end;
a:=a+t[i].oc[j]; {НАХОЖУ СУММУ ВСЕХ ОЦЕНОК ВСЕХ СТУДЕНТОВ}
end;
writeln;
end;
Assign (h,fname);
{$I-}
reset(h);
If Ioresult<>0 then rewrite(h);
{$I+}
for i:=1 to ch do write(h,t[i]);
writeln('Средний балл',a);
close(h);
writeln('Данные занесены в файл ',fname);
readln;
end.Нашел сумму всех оценок всех студентов. Ср. балл считаю по формуле a:=a/3/ch Но типы не совпадают, конечно же( Что можно сделать? |
|
#7
|
||||
|
||||
|
1. Странно как-то вы считаете средний балл. Среднее считается как сумма всех баллов деленое на их количество. Т.е.
Код:
a := a/3 2. НО! Целое число для результата деления использовать нельзя, т.к. вы потеряете дробную часть и результат будет неверен. Если нехотите создавать новую переменную, то вычисляте среднее при выводе в консоль. Код:
writeln('Средний балл', a/3:3:2) |
|
#8
|
|||
|
|||
|
Так а мне ж надо средний и по университету:
Сумма всех баллов всех студентов / (число студентов * 3) |
|
#9
|
||||
|
||||
|
Виноват, невнимателен.
Кстати, а почему оценка от 1 до 10 ? Теперь не пятибальная система? И такой вариает проверки несколько элегантнее: Код:
if not t[i].oc[j] in [1..10] then |
|
#10
|
|||
|
|||
|
Задача №5:
Надо использовать case of для поиска согласных?) |
|
#11
|
|||
|
|||
|
Пятая задача — на множества, если я правильно поняла. Причем там не просто любые согласные, а именно глухие трубуются.
Код:
procedure GetUnvoiced(Str: string);
type
TUnvoiced = set of Char;
const
// всевозможные глухие
Unvoiced: TUnvoiced = ['к', 'п', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ'];
var
i, Len: Integer;
y, y1: TUnvoiced;
j: Char;
begin
y := []; y1 := [];
Len := Length(Str);
Str := LowerCase(Str);
// формируем множество y
for i := 1 to Len do y := y + [Str[i]];
// выделяем из него множество глухих согласных
y1 := y * Unvoiced;
// можно показать результат...
Str := '';
for j := 'к' to 'щ' do
if (j in y1) then Str := Str + j + #13#10;
ShowMessage(Str);
end; |
|
#12
|
|||
|
|||
|
№3:
Код:
Program geronloh;
Const
eps=0.001;
Var
x:Array[1..100] of integer;
i,b:integer;
y,z:real;
function geron4ik(b:integer;y:real):real;
begin
while (geron4ik(b,y)-geron4ik(b,y-1)>=eps) do
geron4ik:=(geron4ik(b,y-1)+b/geron4ik(b,y-1))/2;
end;
Begin
randomize;
for i:=1 to 100 do begin
x[i]:=random(102); b:=x[i];
y:=(1+b)/2;
geron4ik(b,y);
{while} end;
{readln(i);
for i:=1 to 100 do writeln(x[i])}
End.Переполнение стека...( Как правильно организовать рекурсию? |
|
#13
|
|||
|
|||
|
Меня раскусили)
|