Файлы и рекурсия - Форум
Воскресенье, 04.12.2016, 04:52
Задачи по информатике
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ignorer, KOT_B_MEIIIKE, PASCAL26, atvrider 
Форум » Решение задач по информатике » Задачи по программированию + блок-схемы » Файлы и рекурсия (Поиогите плиз доауск к экзамену получаю!!!)
Файлы и рекурсия
RAFAELДата: Воскресенье, 23.05.2010, 06:40 | Сообщение # 1
Полковник
Группа: Участник
Сообщений: 38
[ 0 ]
Статус: Offline
Файлы:
1. Добавить в указанное место файла заданное количество записей, начиная с указанного места другого файла. Место задается номером записи.
2. В отсортированный файл добавить новую запись, не
нарушив его упорядоченность.

Рекурсия:
Написать программу с рекурсивной функцией, вычисляющей: (картинка прикреплена) используя n-корней.
И задачу помагите отредактировать, я её написал но она неправильно матрицу приобразовывет(( где ошибка:
Дана целочисленная прямоугольная матрица.
1) Определить количество столбцов, не содержащих ни одного нулевого элемента (оформить в виде функции).
2) Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик (оформить в виде процедуры).

Code
Program mas3;
const
n=3;
m=4;
type
mas1=array [1..n,1..m] of integer;
var
i,j,kol:integer;
a:mas1;
function Nul(a:mas1):integer;
var
i,j:integer;
chis:integer;
mas2:array [1..m] of boolean;
begin
chis:=0;
for i:=1 to m do
mas2[i]:=true;
for j:=1 to m do
for i:=1 to n do
if a[i,j]=0 then mas2[j]:=false;
for j:=1 to m do
if mas2[j]=true then chis:=chis+1;
Nul:=chis;
end;
procedure perestanovka(var a:mas1);
var
mas2:array[1..n] of integer;
min,min_el,l,save:integer;
begin
for i:=1 to n do
mas2[i]:=0;

for i:=1 to n do
for j:=1 to m do
if (a[i,j]>0) and (odd(a[i,j])=false) then {Функция Odd возвращает истину, если данное число нечетно}
mas2[i]:=mas2[i]+a[i,j];
for j:=1 to n do
begin
min:=j;
min_el:=mas2[j];
for i:=j+1 to n do
begin
if mas2[i]<min_el then
begin
min:=i;
min_el:=mas2[i];
end;
end;
for l:=1 to m do
begin
save:=a[min,l];
a[min,l]:=a[j,l];
a[j,l]:=save;
end;
end;
End;
begin
randomize;
write('Исходная матрица');
for i:=1 to n do
begin
writeln;
for j:=1 to m do
begin
a[i,j]:=random(15)-8;
write (a[i,j],'  ');
end;
end;
kol:=Nul(a);
writeln;
write('Кол-во столбцов не содержащих ни одного нулевого элемента: ');
writeln(kol);
Perestanovka(a);
writeln('Преобразованная матрица');
for i:=1 to n do
begin
writeln;
for j:=1 to m do
write (a[i,j],'  ');
end;
End.
Прикрепления: 8877226.jpg(11Kb)


Сообщение отредактировал RAFAEL - Воскресенье, 23.05.2010, 07:28
 
ignorerДата: Воскресенье, 23.05.2010, 10:35 | Сообщение # 2
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
здравствуй, вот код проги с рисунка:
Code
var n, i : integer;
function koren(n : integer; var i : integer) : real;
begin
  if i<n then begin
   inc(i);
   koren:=sqrt(koren(n,i)+3);
  end;
end;
begin
  cls;
  read(n);
  write(koren(n,i));
end.
 
RAFAELДата: Среда, 26.05.2010, 10:39 | Сообщение # 3
Полковник
Группа: Участник
Сообщений: 38
[ 0 ]
Статус: Offline
Спасибо большое))
А остольные задачи не поможешь, прост у меня работы куча, 7 блоков надо здать+контрольная+тестирование, лишняя голова бы не помешала, а то отчилят нафиг ппц боюсь(((


Сообщение отредактировал RAFAEL - Среда, 26.05.2010, 10:50
 
ignorerДата: Среда, 26.05.2010, 14:51 | Сообщение # 4
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
ну файлы сделать не смогу, а вот ваша программа, код которой вы выложили, работает правильно. по крайней мере я тестил её очень много раз и всё время всё получалось.
 
RAFAELДата: Среда, 26.05.2010, 17:58 | Сообщение # 5
Полковник
Группа: Участник
Сообщений: 38
[ 0 ]
Статус: Offline
Понятно, спасибо))
А на процедуры и функции? Буду очень презнателен:
1. Разработать функцию поиска минимального элемента одномерного массива. Разработать процедуру поиска номера максимального элемента одномерного массива. Написать программу сортировки одномерного массива с использованием разработанных вспомогательных алгоритмов (оба вспомогательных алгоритма должны использоваться одновременно).
2. Разработать функцию, которая определяет: пересекаются, касаются или не касаются окружность с центром, заданным координатами вершин и заданного радиуса, и прямая, за¬данная координатами двух ее точек. Разработать процедуру, опре¬деляющую уравнение перпендикуляра от центра окружности до прямой. Написать программу, подсчитывающую количество ок¬ружностей, которые пересекаются сданной прямой.

Если нужно задачи обьяснить я обьясню все формулы найду.

 
ignorerДата: Пятница, 04.06.2010, 18:22 | Сообщение # 6
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
вот должно быть код:
Code
Var a : array[1..100] of integer;
     i, n, x, b : integer;

procedure max(a : array[1..100] of integer; n, x : integer; var b : integer);
var i : integer;
begin
  b:=x;
  for i:=x to n-x+1 do
   if a[b]>a[i] then b:=i;
end;

function min(a : array[1..100] of integer; n, x : integer) : integer;
var i, b : integer;
begin
  b:=x;
  for i:=x to n-x+1 do
   if a[b]<a[i] then b:=i;
  min:=b;
end;

procedure swap(var a, b : integer);
var c : integer;
begin
  c:=a;
  a:=b;
  b:=c;
end;

begin
  cls;
  read(n);
  for i:=1 to n do begin
   a[i]:=random(40);
   write(a[i], ' ');
  end;
  for x:=1 to trunc(n/2) do begin
   max(a, n, x, b);
   swap(a[x], a[b]);
   swap(a[n-x+1], a[min(a, n, x)]);
  end;
  writeln;
  for i:=1 to n do write(a[i], ' ');
end.

массив упорядочивается по возрастанию. ну а теперь "немножко" о самом алгоритме (если я не прав где-то, исправь):
есть 3 вспомогательных алгоритма (процедура swap - меняет местами 2 переменные, процедура max - ищет наибольший элемент массива из промежутка от x до n-x+1, где x изменяется в ходе работы программы с 1 до trunc(n/2), функция min - по сути, тоже самое, что и max, только ищет минимальный элемент).
вот пример сортировки массива таким способом:
изначальный массив (кстати забыл сказать, вводится кол-во элементов массива, а массив генерируется случайным образом):
27 49 19 4 38
сначала x=1. ищем наибольший элемент массива в промежутке с x до n-x+1 (т.е. с 1 до 5) при помощи процедуры max. его номер - 2. меняем его с элементом с номером n-x+1 (т.е. с последним элементом) при помощи вспомогательной процедуры swap. сейчас массив такой - 27 38 19 4 49. теперь ищем наименьший с помощью функции min в таком же промежутке. номер наименьшего - 4. меняем его с элементом с номером x (т.е. с первым) также при помощи swap. сейчас массив такой - 4 38 19 27 49.
увеличиваем x. теперь x равно 2. повторяем те же действия, только не нужно забывать, что поиск наибольшего и наименьшего будет проходить не с 1 до 5, а с 2 по 4, и менять местами мы будем уже не с первым элементом, а со вторым, и не с последним, а с предпоследним. после второго шага цикла у нас получается массив: 4 19 27 38 49.
всё, цикл заканчивается, т.к. x=2=trunc(5/2)=trunc(n/2). теперь массив выводится на экран. конец программы smile

мдаа, давно я столько не писал smile удачи на экзаменах! biggrin

 
Форум » Решение задач по информатике » Задачи по программированию + блок-схемы » Файлы и рекурсия (Поиогите плиз доауск к экзамену получаю!!!)
Страница 1 из 11
Поиск:

Copyright MyCorp © 2016