Помогите решить задачи в Pascal'e

Страницы: 1 2  ОТВЕТИТЬ НОВАЯ ТЕМА
SheldeN 13 мая 2011 в 13:02
Шутник  •  На сайте 15 лет
Сообщений: 19
5
Прошу помощи в решении данных задач с помощью Pascal'a,заранее благодарен.

1. При помощи оператора цикла вычислить Y=1!+2!+3!+...+N!(N>1).
2. Для массива из N вещественных чисел определить количество элементов,значения которых меньше среднего арифметического всех задааных величин.
3.Двумерный массив. Дана матрица вещественных чисел размерностью MхN,определить максимальный элемент в каждом столбце матрицы и поменять местами с первым элементом соответствующего столбца.
Yap 24.08.2026 - 06:53
Продам слона  •  На сайте 21 год
Все комментарии:
Demigod 14 мая 2011 в 01:18
Воздух  •  На сайте 19 лет
0
А в чем проблема ? Задачи примитивные и требуют тупо знания синтаксиса Паскаля\Делфи.

Так в чем проблема ?
С математикой плохо и непонятно что делать, или что ?
SheldeN автор 14 мая 2011 в 08:50
Шутник  •  На сайте 15 лет
0
с математикой все нормально,беда как раз с синтаксисом
Zlobny 14 мая 2011 в 14:18
аццкий кодер  •  На сайте 15 лет
1
Цитата (SheldeN @ 14.05.2011 - 09:50)
с математикой все нормально,беда как раз с синтаксисом

бида-бида...

1. так какого плана помощь-то? тупо решить задачи? dont.gif

2. или мы таки увидим кусок кода, в котором затык, увидим ошибку компилятора, и, собссно, вопрос: на чо эта сволотчЪ ругаеццо? gigi.gif

3. паскаль-то какой, чувак? фрипаскаль, турбопаскаль, дельфи? телепатируй, штоле, а то тысячи их gigi.gif

ладно, чо это я, я же добрый... kruger.gif
первая задача на дельфях, для разминки.
Код

function FacIterative(n: Word): Longint;
var
 f: LongInt;
 i: Integer;
begin
 f := 1;
 for i := 2 to n do
   f := f * i;
 Result := f;
end;


procedure TForm1.Button1Click(Sender: TObject);
var i,j,r:integer;
begin
 r:=0;
 i:=StrToInt(Form1.Edit1.Text);
 if i>1 then begin

   for j := 1 to i do
   begin
       r := r + FacIterative(j);
   end;
   showmessage(inttostr(r));
 end;
end;

форма, на форме кнопка и текстедит.
обработчик вешай на кнопку, функцию, считающую факториал - перед обработчиком. красявости сам наведешь.

ЗЫ. да, добрая фея набухалась и по второй и третьей задаче такой халявы больше не будет gigi.gif пишешь сам, вываливаешь код - будем разбираццо.

Помогите решить задачи в Pascal'e

Это сообщение отредактировал Zlobny - 14 мая 2011 в 14:23
SheldeN автор 14 мая 2011 в 19:46
Шутник  •  На сайте 15 лет
0
задачи должны быть на языке Free Pascal.
вот мой нерабочий код к 1-й задаче,задача решается с помощью оператора цикла,вся сложность в том, что во фри паскале нет функции factorial от числа:
program sumfak;
var N,i,answer,fact,k:integer;
begin
writeln('vvedite N');
readln(N);
fact:=1;
k:=1;
answer:=0;
for i:=1 to N do
fact:=i*fact*k;
k:=fact;
answer:=answer+fact;
writeln('answer=',answer);
readln;
end.

есть так же код ко 2-й задаче,но он не на языке фрит паскаля и я не могу его понять
program Project2;

uses
SysUtils;

const maxN=1000;
type myArray= array[1..maxN]of real;

var
i:integer;
A:myArray;
n:integer;
avgArray:real;
countElMensheAVG:integer;

function calcAVG(aIn:myArray;N:integer):real;
var i:integer;
begin
result := 0;
for i := 1 to N do
result := result + aIn[i];
result := result / N;
end;

begin
write('N=?');
readln(N);
if N>maxN then
begin
writeln('Vvedennoe N>',maxN);
end else
begin
for i:=1 to N do
begin
write('a[',i,']=?');
readln(a[i]);
end;

avgArray := calcAVG(a,N);
countElMensheAVG:=0;
for i:=1 to N do
begin
if a[i]<avgArray then inc(countElMensheAVG);
end;
writeln('kolichestvo el-tov menshe srednego=',countElMensheAVG);
readln;
end;
end.

Это сообщение отредактировал SheldeN - 14 мая 2011 в 19:48
Zlobny 14 мая 2011 в 21:18
аццкий кодер  •  На сайте 15 лет
0
Цитата (SheldeN @ 14.05.2011 - 20:46)
вся сложность в том, что во фри паскале нет функции factorial от числа

ну, это не проблема, перепишем под фри:
Код

program factorial;
var N,j,r:Longint;

function FacIterative(n: Word): Longint;
var
f,Result: Longint;
j: Integer;
begin
f := 1;
for j := 2 to n do
begin
  f := f * j;
end;
Result := f;
end;


begin
 writeln('Give me, please, N');
 readln(N);
 r:=0;
 for j := 1 to N do
 begin
      r := r + FacIterative(j);
 end;
 writeln(r);
end.


эта конструкция будет работать при N от 1 до 12. От 13 и выше - завалится от переполнения (runtime error 215).
вариантов решения 2:
1 - курим конспекты семинаров (типы значений, ошибки компилятора), и разбираемся (стопудово, это давали). курим гугль (http://www.tp7.info/error2.php)

2 - включаем дурака, и идем к преподу. типа, вот, падает... чо делать -хз pray.gif


Добавлено в 21:24
Цитата (SheldeN @ 14.05.2011 - 20:46)
есть так же код ко 2-й задаче,но он не на языке фрит паскаля и я не могу его понять

блиииин... соберись, ты ж будущий кодер...
должен любую херню читать, даже брейнфак gigi.gif

program Project2; - это ж бубльгум дельфи
ставь дельфу, втыкай код и шпарь отладчиком moderator.gif
SheldeN автор 15 мая 2011 в 17:42
Шутник  •  На сайте 15 лет
0
я не будущий кодер,просто проходим курс информатики,по-этому мне не интересно это изучать,за помощь спасибо,вот бы ещё 3-ю задачку...
дебиловистребитель 15 мая 2011 в 18:35
Блять, ща я пайду за вадой  •  На сайте 15 лет
0
Я вот инога фигею от того чем думают составители программы. У меня знакомая учится на лингвиста, изучает делфи. Нахуя, простите, лингвисту делфи? Или это мудаки в минобразования так понимают компьютерное образование?
Цитата
элемент в каждом столбце матрицы

Если препод расскажет где в многомерном массиве паскаля "столбик" я ему медаль сделаю.

Прогу не тестил ибо нет компилятора, но вроде должно работать
Цитата
program matrix;

const
  MaxN = 1000;
  MaxM = 1000;
var
  iMin, i, j, M,N: integer;
  b, min: real;
  matrix : array[1..MaxM,1..MaxN] of real;

procedure PrintMatrix;
begin
  for i:=1 to N do begin
    for j:=1 to M do begin
      write(matrix[i,j]:8:2);
    end;
    writeln;
  end;
end;

begin
  write('Enter the number of columns M (less than ',MaxM,'): ');
  readln(M);
  write('Enter the number of rows N (less than ',MaxN,'): ');
  readln(N);
  for i:=1 to N do
    for j:=1 to M do begin
      write('A[',i,',',j,'] = ');
      readln(matrix[i, j]);
  end;
  writeln('Before:');
  PrintMatrix;
  writeln;

  min := matrix[1,1];
  iMin := 1;
  for j:=1 to M do begin
    for i:=1 to N do begin
      if matrix[i,j] < min then begin
        min := matrix[i, j];
        iMin := i;
      end;
    end;
    b := matrix[1, j];
    matrix[1, j] := matrix[iMin, j];
    matrix[iMin, j] := b;
  end;
  writeln('After:');
  PrintMatrix;
  writeln;
  readln;
end.
Zlobny 15 мая 2011 в 18:40
аццкий кодер  •  На сайте 15 лет
3
Цитата (дебиловистребитель @ 15.05.2011 - 19:35)
Я вот инога фигею от того чем думают составители программы. У меня знакомая учится на лингвиста, изучает делфи. Нахуя, простите, лингвисту делфи?

оооо.... есть многое на свете, друг Горацио, что неподвластно нашему Фурсенке... gigi.gif
SheldeN автор 15 мая 2011 в 20:15
Шутник  •  На сайте 15 лет
0
благодарствую
SheldeN автор 27 мая 2011 в 21:25
Шутник  •  На сайте 15 лет
0

3.Двумерный массив. Дана матрица вещественных чисел размерностью MхN,определить максимальный элемент в каждом столбце матрицы и поменять местами с первым элементом соответствующего столбца.

есть код,но не хочет работать,помогите пожалуйста найти ошибку

program matrix;

const
MaxN = 1000;
MaxM = 1000;
var
iMin, i, j, M,N: integer;
b, min: real;
matrix : array[1..MaxM,1..MaxN] of real;

procedure PrintMatrix;
begin
for i:=1 to N do begin
for j:=1 to M do begin
write(matrix[i,j]:8:2);
end;
writeln;
end;
end;

begin
write('Enter the number of columns M (less than ',MaxM,'): ');
readln(M);
write('Enter the number of rows N (less than ',MaxN,'): ');
readln(N);
for i:=1 to N do
for j:=1 to M do begin
write('A[',i,',',j,'] = ');
readln(matrix[i, j]);
end;
writeln('Before:');
PrintMatrix;
writeln;

min := matrix[1,1];
iMin := 1;
for j:=1 to M do begin
for i:=1 to N do begin
if matrix[i,j] < min then begin
min := matrix[i, j];
iMin := i;
end;
end;
b := matrix[1, j];
matrix[1, j] := matrix[iMin, j];
matrix[iMin, j] := b;
end;
writeln('After:');
PrintMatrix;
writeln;
readln;
end.

Demigod 28 мая 2011 в 00:17
Воздух  •  На сайте 19 лет
0
Цитата
есть код,но не хочет работать,помогите пожалуйста найти ошибку


Гениально ! bravo.gif

А что за ошибку выдает хоть ? Или что именно не работает ? lol.gif

На вскидку, для каждого нового j надо min := matrix[1,j] без условия if matrix[i,j] < min. А то min остается с предыдущего столбца, а в новом все числа могут оказаться больше !
Zlobny 28 мая 2011 в 07:02
аццкий кодер  •  На сайте 15 лет
0
Цитата (SheldeN @ 27.05.2011 - 22:25)
помогите пожалуйста найти ошибку

ничто так не ограничивает полет мысли программиста, как компилятор gigi.gif

ну смотри (буду приводить только кусок кода):

код в файл, файл открыть средой разработки, запустить.
выпала с ошибкой:

matrix.pas (9,1)Duplicate identifier "matrix"

переводим на русский язык: хазяина, бешельме шайтанама в 9 строке на 1 символе в файле matrix.pas, дублирование идентификатора "matrix" pray.gif


Код
program matrix;

const
 MaxN = 1000;
 MaxM = 1000;
var
 iMin, i, j, M,N: integer;
 b, min: real;
 matrix : array[1..MaxM,1..MaxN] of real;


уже есть подозрение, но - проверим его. стираем пустую строку:

Код
program matrix;
const
 MaxN = 1000;
 MaxM = 1000;
var
 iMin, i, j, M,N: integer;
 b, min: real;
 matrix : array[1..MaxM,1..MaxN] of real;


та же ошибка, но уже в строке 8

вывод: совпали имена переменной в программе и самой программы.
делаем так:

Код
program matrixxx;
const
 MaxN = 1000;
 MaxM = 1000;
var
 iMin, i, j, M,N: integer;
 b, min: real;
 matrix : array[1..MaxM,1..MaxN] of real;


теперь работает

Помогите решить задачи в Pascal'e

Это сообщение отредактировал Zlobny - 28 мая 2011 в 07:20
Zlobny 28 мая 2011 в 07:14
аццкий кодер  •  На сайте 15 лет
0
во избежание подобной херни, чтобы ни себе моск не выносить, ни компилятору (компилятор, он же не может ошибаться - он пытается сделать то, что ему сказали) gigi.gif
ну так вот... чтобы не тратить время на такие баги - категорически рекомендуется почитать конспект или погуглить на тему как правильно задавать имена переменных.
если вкратце - то применяется армейский способ: пусть безобразно, но - единообразно

пример:

matrix - название программы
varMatrix - переменная
globalVarMatrix - глобальная переменная
MATRIX - константа
varArrMatrix - массив
fSetArrMatrix - функция
CSetArrMatrix - класс

если кода достаточно дохера - самому проще разобрать будет

ВАЖНО. в любом языке программирования есть зарезервированные слова dont.gif
попробуй создать переменную if или for или while или foreach или else - узнаешь много новых матюков от компилятора/интерпретатора.

Помогите решить задачи в Pascal'e

Это сообщение отредактировал Zlobny - 28 мая 2011 в 07:16
SheldeN автор 28 мая 2011 в 12:52
Шутник  •  На сайте 15 лет
0
имеется ввиду,что ошибка несет в себе логический характер,т.е. максимальный элемент не меняется местом с первым элементом столбца
Demigod 28 мая 2011 в 13:31
Воздух  •  На сайте 19 лет
0
Цитата
ошибка несет в себе логический характер,т.е. максимальный элемент не меняется местом с первым элементом столбца


Весьма логично, потому что в приведенном коде ищется минимальный, а не максимальный элемент, и именно этот минимальный потом и меняется с первым.

Достаточно в условии поменять знак меньше, на больше, а еще на каждый столбец надо заново переприсваивать значение переменной min (можно назвать ее max, дабы не смущало имя). Иначе как я уже писал выше разные казусы возможны.
SheldeN автор 28 мая 2011 в 13:38
Шутник  •  На сайте 15 лет
0
ух ё,примного благодарен,не обратил внимание на знак
Zlobny 28 мая 2011 в 13:41
аццкий кодер  •  На сайте 15 лет
0
Цитата (SheldeN @ 28.05.2011 - 13:52)
имеется ввиду,что ошибка несет в себе логический характер,т.е. максимальный элемент не меняется местом с первым элементом столбца

ну правильно...
где комментарии кода, или (хотя бы) отступы?
этож, блин, требуется ни потому, что преподу моча с горшком в голову прилетела, а потому, что повышается читаемость кода челавеками
ошибка, действительно логическая - знак неверный gigi.gif

вот так - работает:

Добавлено в 13:43
Demigod , опередил =)


Помогите решить задачи в Pascal'e

Это сообщение отредактировал Zlobny - 28 мая 2011 в 13:42
SheldeN автор 28 мая 2011 в 13:45
Шутник  •  На сайте 15 лет
0
заработало,но когда ввожу матрицу 3 на 3,во втором столбце ничего не меняется
Zlobny 28 мая 2011 в 13:47
аццкий кодер  •  На сайте 15 лет
0
эээм...

Код
program matrixxx;

const
MaxN = 1000;
MaxM = 1000;

var
iMin, i, j, M,N: integer;
b, min: real;
matrix : array[1..MaxM,1..MaxN] of real;

procedure PrintMatrix;
begin
for i:=1 to N do begin
 for j:=1 to M do begin
  write(matrix[i,j]:8:2);
 end;
 writeln;
end;
end;

begin
write('Enter the number of columns M (less than ',MaxM,'): ');
readln(M);
write('Enter the number of rows N (less than ',MaxN,'): ');
readln(N);
for i:=1 to N do
 for j:=1 to M do begin
  write('A[',i,',',j,'] = ');
  readln(matrix[i, j]);
 end;
 writeln('Before:');
 PrintMatrix;
 writeln;
 min := matrix[1,1];
 iMin := 1;
 for j:=1 to M do begin
  for i:=1 to N do begin
   if matrix[i,j] > min then begin
    min := matrix[i, j];
    iMin := i;
   end;
  end;
 b := matrix[1, j];
 matrix[1, j] := matrix[iMin, j];
 matrix[iMin, j] := b;
end;
writeln('After:');
PrintMatrix;
writeln;
readln;
end.


Помогите решить задачи в Pascal'e

Это сообщение отредактировал Zlobny - 28 мая 2011 в 13:53
Demigod 28 мая 2011 в 13:56
Воздух  •  На сайте 19 лет
0
Я ж писал !
Для наглядности - надо еще одну вот такую строчку добавить !


for j:=1 to M do
begin
min := matrix[1,j];
for i:=2 to N do
begin
if matrix[i,j] > min then
begin
min := matrix[i, j];
iMin := i;
end;
end;
b := matrix[1, j];
matrix[1, j] := matrix[iMin, j];
matrix[iMin, j] := b;
end;
SheldeN автор 28 мая 2011 в 13:58
Шутник  •  На сайте 15 лет
0
с вашим кодом все работает,спасибо
Zlobny 28 мая 2011 в 13:59
аццкий кодер  •  На сайте 15 лет
0
SheldeN , если не секрет... чо у тебя за специальность в итоге будет?
нахрена над вами информатикой издеваюццо?
SheldeN автор 28 мая 2011 в 14:03
Шутник  •  На сайте 15 лет
0
специальность:гидроаэродинамика,направление:механника
Zlobny 28 мая 2011 в 14:10
аццкий кодер  •  На сайте 15 лет
0
садизм бля... ну матан, физика, ну сопромат... кодинг-то нахрена???
скорее всего, добирали часы обучения... там по стандарту факультет может называться факультетом, если у него некое минимальное число предметов и некое минимальное число часов по предметам. ну там еще кол-во кафедр и остепененных сотрудников - но это уже вторично.

с другой стороны, радоваться надо что нету геополитики, богословия и еще какой-нить гуманитарки типа архитектурных течений Флоренции... уж это-то точно инженеру-гидродинамику нах не упало... disgust.gif
Понравился пост? Ещё больше интересного в ЯП-Телеграм и ЯП-Max!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 7 088
0 Пользователей:
Страницы: 1 2  ОТВЕТИТЬ НОВАЯ ТЕМА

 
 

Активные темы



Наверх