|
#1
|
|||
|
|||
6 задач по Delphi
Попросили сделать задачи, а времени их делать нет(( Некоторые несложные... А вот с №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 ...; //тут выводим их... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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
|
|||
|
|||
Меня раскусили)
|