Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Паскаль, проверочная работа (http://www.tehnari.ru/f41/t45671/)

matrinishna 16.01.2011 16:04

Паскаль, проверочная работа
 
Вложений: 1
5.Даны действительные числа А, В, С. По трём сторонам с длинами А, В, С можно построить треугольник.Найти площадь треугольника.
6.Определить, является ли натуральное число N степенью числа 4 или нет.
7.В приложении
8.Дана квадратная матрица А(n,n).Найти сумму максимальных элементов столбца матрицы

shrek=) 16.01.2011 16:43

Цитата:

Сообщение от matrinishna (Сообщение 447160)
5.Даны действительные числа А, В, С. По трём сторонам с длинами А, В, С можно построить треугольник.Найти площадь треугольника.

Код:

var
a,b,c:integer;
s,p:real;
begin
write ('a=');
readln(a);
write ('b=');
readln (b);
write ('c=');
readln(c);
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
writeln ('S=',s);
readln
end.


Vladimir_S 16.01.2011 17:51

Цитата:

Сообщение от matrinishna (Сообщение 447160)
6.Определить, является ли натуральное число N степенью числа 4 или нет.

Код:

VAR
 N,M:LongInt;
BEGIN
 Write('N= ');
 ReadLn(N);
 M:=1;
 Repeat
  M:=M*4;
 Until M>=N;
 If M=N then WriteLn('Yes!') else WriteLn('No!');
 ReadLn;
END.


Mr.Програмист 28.01.2011 14:03

Последняя задача:
Код:

Var a:array[1..1000,1..1000] of longint;
b:array[1..1000] of longint;
i,j,n,m,max,v:longint;
Begin
Writeln('Vvedite storony kvadrata'); {no comment}
Readln(n);
m:=n;
v:=0;
Writeln('Zapolnenie massiva');  {no comment}
For i:=1 to n do
For j:=1 to n do
Readln(a[i,j]);
max:=a[1,1];
For j:=1 to n do
For i:=1 to n do
begin
if a[j,i]>max
Then max:=a[j,i];
If n=m
then b[j]:=a[j,i];
end;
For i:=1 to j do
v:=v+b[i];
Writeln(v:2)  ;
Readln;
End.

Писал на Pascal ABC ( и она заработала сразу!!!):tehnari_ru_509:

Vladimir_S 28.01.2011 15:16

Цитата:

Сообщение от Mr.Програмист (Сообщение 454350)
Последняя задача:

Как всегда, полным-полно ошибок.
Значит, сделаем так.
Даю Вам 3 дня на то, чтобы отладить программу. Если в течение указанного срока не появится исправленный, отлаженный (оттестированный) вариант, мы с Вами расстаемся.
Не обижайтесь, но задача программиста (да-да, это слово пишется с двумя "м") на форуме - помочь, а не продемонстрировать "ай, какой я молодец!".
Есть, знаете ли, такое слово - "ответственность". Не попадалось?
Так вот - информирую. Это такое чувство, которое есть у всех членов нашего сообщества программистов, причем не только за результаты своего творчества, но и за репутацию форума в целом.

Mr.Програмист 29.01.2011 04:55

Вот исправленно:
Var a:array[1..1000,1..1000] of longint;
b:array[1..1000] of longint;
i,j,n,m,max,v:longint;
Begin
Writeln('Vvedite storony kvadrata');
Readln(n);
m:=n;
v:=0;
Writeln('Zapolnenie massiva');
For i:=1 to n do
For j:=1 to n do
Readln(a[i,j]);
max:=a[1,1];
For j:=1 to n do
For i:=1 to n do
begin
if a[i,j]>max
Then max:=a[j,i];
If n=m
then b[j]:=a[i,j];
end;
For i:=1 to j do
v:=v+b[i];
Writeln(v:2);
End.
Запускать на Pascal ABC.

Яркий пример "индусского кода" :))

Vladimir_S 29.01.2011 08:36

Не пойдет. Ошибок существенно меньше не стало. Ладно, кое-какие подсказки:
1. (не ошибка, но тем не менее) Вводить двумерный массив "вслепую", не имея на экране подсказок - страшно неудобно. Потрудитесь организовать подсказки, чтобы было ясно, какой элемент вводится.
2. Вы вводите с консоли размерность матрицы n, затем присваиваете параметру m значение этого m (m:=n;) и в дальнейшем ни тот, ни другой параметр не меняются. А потому условие "If n=m then" абсолютно бессмысленно. И вообще, что собой представляет параметр m и зачем он был введен - ведомо только Вам.
3. Путаница с индексами массива A[i,j], A[j,i].
И это еще не полный перечень.

Значит, так. Настоятельно рекомендую взять лист бумаги, нарисовать на нем квадратную матрицу размером 3х3, 4х4 или 5х5, заполнив произвольными числами (при этом избегая каких бы то ни было симметрий), далее выписать максимальные значения в столбцах и просуммировать их. Потом запустить программу, ввести в нее матрицу и сверить результат.
Проделать это несколько раз для разных матриц разных размеров.
И только убедившись в том, что программа всегда выдает правильный ответ, выложить сюда код.

А пока перспектива расставания остается в силе.

Mr.Програмист 30.01.2011 15:44

Мозги скрипели, выдавали синий экран и кричали остановись, но я зделал её:
Код:

Uses CRT;
Var a:array[1..1000,1..1000] of longint;
b:array[1..1000] of longint;
i,j,n,max,v:longint;
Begin
Writeln('Введите сторону квадрата');
Readln(n);
v:=0;
Writeln('Заполнение массива');
For i:=1 to n do
For j:=1 to n do
Readln(a[i,j]);
max:=a[1,1];
For j:=1 to n do
For i:=1 to n do
begin
if a[i,j]>max
Then max:=a[i,j];
b[j]:=max;
end;
For i:=1 to n do
v:=v+b[i];
Writeln(v:2);
for i:=1 to n do
begin
for j:=1 to n do
begin
Write(a[i,j],' ');
end;
Writeln;
end;
End.


shrek=) 30.01.2011 15:52

Mr.Програмист у меня к вам вопрос: Вы программу тестировали?
При запуске программы срузу же ошибка:
Цитата:

a:array[1..1000,1..1000] of longint;
слишком большая структура.
Цитата:

Сообщение от Vladimir_S (Сообщение 454922)
Вводить двумерный массив "вслепую", не имея на экране подсказок - страшно неудобно.

жаль что не послушали совета.
И для задержки вместо writeln используется readln

Mr.Програмист 30.01.2011 16:06

МИХА Я ТЕСТИРОВАЛ НА PASCAL ABC И У МЕНЯ ОНА РАБОТАЛА

Mr.Програмист 30.01.2011 16:10

Код:

Uses CRT;
Var a:array[1..100,1..100] of INTEGER;
b:array[1..100] of INTEGER;
i,j,n,max,v:longint;
Begin
Writeln('Введите сторону квадрата');
Readln(n);
v:=0;
Writeln('Заполнение массива');
For i:=1 to n do
For j:=1 to n do
Readln(a[i,j]);
max:=a[1,1];
For j:=1 to n do
For i:=1 to n do
begin
if a[i,j]>max
Then max:=a[i,j];
b[j]:=max;
end;
For i:=1 to n do
v:=v+b[i];
Writeln(v:2);
for i:=1 to n do
begin
for j:=1 to n do
begin
Write(a[i,j],' ');
end;
Writeln;
end;
End.


Vladimir_S 30.01.2011 18:06

Цитата:

Сообщение от Mr.Програмист (Сообщение 455906)
Код:

Uses CRT;
Var a:array[1..100,1..100] of INTEGER;
b:array[1..100] of INTEGER;
i,j,n,max,v:longint;
Begin
Writeln('Введите сторону квадрата');
Readln(n);
v:=0;
Writeln('Заполнение массива');
For i:=1 to n do
For j:=1 to n do
Readln(a[i,j]);
max:=a[1,1];
For j:=1 to n do
For i:=1 to n do
begin
if a[i,j]>max
Then max:=a[i,j];
b[j]:=max;
end;
For i:=1 to n do
v:=v+b[i];
Writeln(v:2);
for i:=1 to n do
begin
for j:=1 to n do
begin
Write(a[i,j],' ');
end;
Writeln;
end;
End.


А другие замечания Миши (Shrek) Вы проигнорировали? Напрасно. Всего-то и нужно было, что
Код:

Uses CRT;
Var
 a:array[1..100,1..100] of INTEGER;
 b:array[1..100] of INTEGER;
 i,j,n,max,v:longint;
Begin
 Writeln('Введите сторону квадрата');
 Readln(n);
 v:=0;
 Writeln('Заполнение массива');
 For i:=1 to n do
  For j:=1 to n do
  begin
    Write('a[',i:2,',',j:2,']= ');
    Readln(a[i,j]);
  end;

 For j:=1 to n do
  begin
  max:=a[1,j];
  For i:=1 to n do
    begin
    if a[i,j]>max then
    max:=a[i,j];
    end;
  b[j]:=max;
  end;

 For i:=1 to n do
  v:=v+b[i];
 Writeln(v:2);
 for i:=1 to n do
  begin
  for j:=1 to n do
    Write(a[i,j],' ');
  Writeln;
  end;

 Readln;
End.

Еще исправлены ошибки в построении циклов.

Теперь про другие дела.
Несмотря на то, что Вы так и не довели программу до ума, я не хочу отлучать Вас от форума.
Вместе с тем, прошу понять - до права выкладывать свои программы Вы явно не доросли, поэтому убедительно прошу (пока прошу) воздержаться от этого. Учитесь, взрослейте - а там посмотрим.
P.S. Между прочим, слова "программа", программист" и т.д. пишутся с двумя "м". Кроме того, в русском языке нет приставки "з", есть приставка "с", а потому не "зделал", а "сделал". Очень рекомендую и русский язык "подтянуть" - в жизни пригодится.


Часовой пояс GMT +4, время: 11:33.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.