Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2009, 21:32
mAnah mAnah вне форума
Прохожий
 
Регистрация: 15.06.2007
Сообщения: 14
Репутация: -7
По умолчанию 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  
Старый 12.05.2009, 22:26
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

номер 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  
Старый 12.05.2009, 23:18
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

mAnah, тут большинство задач элементарно решаються.
При чем такие уже заезженные, основные элементы которых можно найти в любом учебнике.

Другое дело решать какую-то уникальную интересную задачу.
Если найдешь такую - пиши, решу.

А так тебе прямяком в раздел "Работа"

Последний раз редактировалось Konrad, 12.05.2009 в 23:20.
Ответить с цитированием
  #4  
Старый 13.05.2009, 02:27
mAnah mAnah вне форума
Прохожий
 
Регистрация: 15.06.2007
Сообщения: 14
Репутация: -7
По умолчанию

№1
В матрице А (N,K) удалить строки и столбцы, в которых есть хотя бы один нулевой элемент (процедурой, чтоение из файла + запись в файл)

Вот эту не представляю, как элементарно решить...
Ответить с цитированием
  #5  
Старый 13.05.2009, 05:06
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Очень даже элементарно. Только тут надо знать структуру файла в котором храниться матрица.
Допустим структура текстового файла такая:
в первых двух строках хранятся размеры 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  
Старый 13.05.2009, 23:33
mAnah mAnah вне форума
Прохожий
 
Регистрация: 15.06.2007
Сообщения: 14
Репутация: -7
По умолчанию

Задача про студентов. Делаю в Паскале)

Код:
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  
Старый 14.05.2009, 00:17
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

1. Странно как-то вы считаете средний балл. Среднее считается как сумма всех баллов деленое на их количество. Т.е.
Код:
a := a/3

2. НО! Целое число для результата деления использовать нельзя, т.к. вы потеряете дробную часть и результат будет неверен. Если нехотите создавать новую переменную, то вычисляте среднее при выводе в консоль.
Код:
writeln('Средний балл', a/3:3:2)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 14.05.2009, 01:17
mAnah mAnah вне форума
Прохожий
 
Регистрация: 15.06.2007
Сообщения: 14
Репутация: -7
По умолчанию

Так а мне ж надо средний и по университету:
Сумма всех баллов всех студентов / (число студентов * 3)
Ответить с цитированием
  #9  
Старый 14.05.2009, 07:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Виноват, невнимателен.
Кстати, а почему оценка от 1 до 10 ? Теперь не пятибальная система?
И такой вариает проверки несколько элегантнее:
Код:
if not t[i].oc[j] in [1..10] then
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 15.05.2009, 19:17
mAnah mAnah вне форума
Прохожий
 
Регистрация: 15.06.2007
Сообщения: 14
Репутация: -7
По умолчанию

Задача №5:
Надо использовать case of для поиска согласных?)
Ответить с цитированием
  #11  
Старый 15.05.2009, 20:12
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Пятая задача — на множества, если я правильно поняла. Причем там не просто любые согласные, а именно глухие трубуются.
Код:
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;
Процедура в качестве параметра принимает строку, из которой формируются множества y и y1.
Ответить с цитированием
  #12  
Старый 15.05.2009, 21:09
mAnah mAnah вне форума
Прохожий
 
Регистрация: 15.06.2007
Сообщения: 14
Репутация: -7
По умолчанию

№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  
Старый 02.06.2009, 01:30
mAnah mAnah вне форума
Прохожий
 
Регистрация: 15.06.2007
Сообщения: 14
Репутация: -7
По умолчанию

Меня раскусили)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter