Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2010, 12:18   #1
d.e.w
 
Регистрация: 29.12.2010
Сообщений: 7
По умолчанию Необходимо написать 3 программы на паскале

1. Не используя станадртные функции, за исключением abs вычислить сумму ряда с заданной точностью Е>0 : (-1)^i/5^i; i от 1 до бесконечности.
2.В одномерном массиве заменить все нулевые элементы, предшествующие первому отрицательному на 1 .
3. В квадратной матрице размерностью NxN среди элементов расположенных ниже главной диагонали найти минимальный, а среди элементов, расположенных выше побочной диагонали максимальный, поменять их местами.

Заранее благодарен всем, кто поможет. Пытался сам написать , но так и не смог, а время поджимает.
d.e.w вне форума Ответить с цитированием
Старый 29.12.2010, 12:34   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
Пытался сам написать
А где примеры, покажите, только не выкладывайте какую-нибудь другие левые задачи, а действительно пример где вы пытались решать
А так могу подсказать воспользоваться поиском - задачи легкие и подобных на форуме сотни, или могу подсказать алгоритм
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 29.12.2010, 12:42   #3
d.e.w
 
Регистрация: 29.12.2010
Сообщений: 7
По умолчанию

вот код 1 например
Код:
program lab31;
uses crt;
var a,i,x:integer;
g,e,f,sum:real;

begin
clrscr;
writeln('Ведите Е');
readln(e);
sum:=0;
i:=1;
a:=5;
while (abs(g/f))>=e Do begin
if (i)mod 2<>0 then g:=1 else g:=-1;
sum:=sum+abs(g/exp(i*ln(a));
i:=i+1;
end;
writeln(sum:6:6);
readkey;
end.

Последний раз редактировалось Stilet; 29.12.2010 в 12:58.
d.e.w вне форума Ответить с цитированием
Старый 29.12.2010, 12:45   #4
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Код:
program lab2;
const MaxLen=100;
var
 a : array [1..MaxLen] of Integer;
 i,N,firstindex,lastindex,sum,count : Integer;
begin
read(N);
for i:=1 to N do read(a[i]);
for i:=1 to N do write(a[i],' ');writeln;

for i:=1 to N do
 begin
 if a[i] < 0 then break;
 if a[i] = 0 then a[i] := 1;
 end;

for i:=1 to N do write(a[i],' ');writeln;
end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 29.12.2010, 12:57   #5
d.e.w
 
Регистрация: 29.12.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Z1000000 Посмотреть сообщение
Код:
program lab2;
const MaxLen=100;
var
 a : array [1..MaxLen] of Integer;
 i,N,firstindex,lastindex,sum,count : Integer;
begin
read(N);
for i:=1 to N do read(a[i]);
for i:=1 to N do write(a[i],' ');writeln;

for i:=1 to N do
 begin
 if a[i] < 0 then break;
 if a[i] = 0 then a[i] := 1;
 end;

for i:=1 to N do write(a[i],' ');writeln;
end.
спасибо. объясни , что за оператор Break(я с таким еще не сталкивался)
d.e.w вне форума Ответить с цитированием
Старый 29.12.2010, 13:02   #6
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Хорошо
Цитата:
if (i)mod 2<>0 then g:=1 else g:=-1;
может быть наоборот? ведь, если выполняется условие if (i)mod 2<>0 значит число нечетное, а т.к. отриц. число в степени нечетного числа будет отрицательным то
Код:
if (i)mod 2<>0 then g:=-1 else g:=1;
Цитата:
while (abs(g/f))
- оно у вас не выдает ошибку деления на ноль?
у вас в программе я не заметил, что бы вы что то делали с переменной f, наверное у вас f это exp(i*ln(a)? так дополните немного программу, например
Код:
f:=exp(i*ln(a));
sum:=sum+f;
По третьей задаче
Определяете лежит ли элемент выше(ниже) главной диагонали, если да - то ищите минимальный (максимальный), запоминия их индексы, а в конце меняете местами,
P.S. на форуме есть подобные задачи, только в большинстве надо просто поменять min и max элементы местами, а у вас с учетем их положения относительно диагонали

Break - оператор досрочного выхода из цикла
в программе от z1000000 он нужен что бы выйти из цикла, при нахождении первого отриц. числа
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Stilet; 29.12.2010 в 13:23.
Niro вне форума Ответить с цитированием
Старый 29.12.2010, 13:09   #7
d.e.w
 
Регистрация: 29.12.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
Хорошо

Код:
if (i)mod 2<>0 then g:=-1 else g:=1;
- оно у вас не выдает ошибку деления на ноль?
у вас в программе я не заметил, что бы вы что то делали с переменной f, наверное у вас f это exp(i*ln(a)? так дополните немного программу, например
Сорри. Просто я случайно не то скинул. Сначало я писал программу где 5^i вычислялось при помощи функции, а потом переделал через exp.

Цитата:
Сообщение от d.e.w Посмотреть сообщение
Сорри. Просто я случайно не то скинул. Сначало я писал программу где 5^i вычислялось при помощи функции, а потом переделал через exp.
Первая работает. Вторая тоже , но незнаю что означает оператор break и что такое count.
3. Я знаю как найти минимальный и максимальный элемент массива. Я не знаю как ограничить поиск по диагоналям.
P.S Еще заметил , что вторая заменяет каждый нулевой элемент на единицу , еслив массиве нет отрицательных элементов

Последний раз редактировалось Stilet; 29.12.2010 в 13:25.
d.e.w вне форума Ответить с цитированием
Старый 29.12.2010, 13:19   #8
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
не знаю как ограничить поиск по диагоналям.
вверху раздела помощи студентов есть тема работа с матрицами
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 29.12.2010, 13:22   #9
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Код:
program lab3;
const MaxLen=100;
var
 a : array [1..MaxLen,1..MaxLen] of Integer;
 i,j,N,mini,minj,maxi,maxj,tmp : Integer;
begin
read(N);
for i:=1 to N do
 for j:=1 to N do a[i,j] := random(100);
 
for i:=1 to N do
 begin
 for j:=1 to N do
  write(a[i,j],' ');
 writeln;
 end;

mini := 2 ; minj := 1;
for i:=2 to N do
 for j:= 1 to i-1 do
  if a[i,j] < a[mini,minj] then begin mini:=i;minj:=j;end;
writeln ( mini,' ',minj);

maxi := 1 ; maxj := 1;
for i:=1 to N do
 for j:= 1 to N-i do
  if a[i,j] > a[maxi,maxj] then begin maxi:=i;maxj:=j;end;
writeln(maxi,' ',maxj);

tmp := a[maxi,maxj];
a[maxi,maxj] := a[mini,minj];
a[mini,minj] := tmp;

writeln;
for i:=1 to N do
 begin
 for j:=1 to N do
  write(a[i,j],' ');
 writeln;
 end;
end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 29.12.2010, 13:38   #10
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
вторая заменяет каждый нулевой элемент на единицу , еслив массиве нет отрицательных элементов
Правильно, давайте посмотрим на строки
Цитата:
if a[i] < 0 then break;
if a[i] = 0 then a[i] := 1;
Тут есть условие прохода по массиву до 1-го отр. числа
и второе если элемент ноль, то заменяем на 1, Но нужно как то объединить эти условия, что бы программа работала верно, например сделайте два цикла в первом ищите первый отрицательный элемент, запомнив его номер, а во втором от 1 до запомненого номера заменяет нули на единицы
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо написать МЕНЮ в паскале!!! A.S.W Помощь студентам 2 21.06.2010 16:47
необходимо написать программу(в Паскале или Бэйсике)через файлы. Mariya0202 Помощь студентам 5 21.05.2010 17:36