Pascal- кто может...

Регистрация на сайте
GRATIS форум > Архивы > ** Компьютер
PlayBoy1989
Если не трудно, помогите, чем сможете, особенно последние...

7.1. Ввести целое положительное число n, большее 100. Найти сумму ряда 1+1/2+1/3+1/4+….+1/n. Вывести на экран число n и сумму ряда.

7.2. Сформировать с помощью генератора случайных чисел двумерный массив M размером 10х10. Определить сумму всех элементов массива S и максимальный элемент массива.

7.3. Сформировать с помощью генератора случайных чисел двумерный массив M размером 10х10. Сформировать массив А, каждый элемент которого равен сумме элементов соответствующей строки массива М. Вывести на экран оба массива.

7.4. Сформировать с помощью генератора случайных чисел двумерный массив M размером 10х10. Определить минимальный элемент массива MIN и сформировать массив О из элементов равных отклонению соответствующих элементов массива M от MIN.

7.5. Сформировать с помощью генератора случайных чисел двумерный массив M размером 10х10. Определить сумму элементов каждой строки массива и найти максимальную из этих сумм. Вывести на экран эту сумму и номер строки.

7.6. Сформировать с помощью генератора случайных чисел двумерный массив M размером 10х10. Определить сумму элементов каждого столбца массива и найти максимальную из этих сумм. Вывести на экран эту сумму и номер столбца.

7.7. Сформировать с помощью генератора случайных чисел двумерный массив M размером 20х20. Определить сумму элементов каждого столбца массива и найти минимальную из этих сумм. Поменять очередность элементов в этом столбце на обратную. Вывести на экран номер этого столбца, исходную таблицу и измененную

7.8. Ввести с клавиатуры массив целых чисел А, состоящий из 10 элементов. Ввести целое число L. Сформировать массив B, каждый элемент которого равен соответствующему элементу массива А, если он не превышает значения L и нулю в противном случае. Вывести на экран оба массива и число L.

7.9. Сформировать с помощью генератора случайных чисел массивы А и В, состоящие из 100 элементов каждый. Сформировать массив С, каждый элемент которого находится по следующей формуле:C[i]=(A[i]+B[i])/(max(A)+max(cool.gif), где max(A) и max(cool.gif максимальные элементы массивов А и В соответственно.

7.10. Сформировать с помощью генератора случайных чисел массивы А и В, состоящие из 100 элементов каждый. Сформировать массив С, каждый элемент которого находится по следующей формуле:C[i]=(A[i]+B[i])/(min(A)+min(cool.gif), где min(A) и min(cool.gif минимальные элементы массивов А и В соответственно.

7.11. Дан целочисленный массив А из N>=3 элементов. Определить количество и номера элементов, больших среднего арифметического двух соседних элементов справа и слева. (Примечание – для первого и последнего элементов взять по два справа и слева соответственно).

7.12. Дан двумерный массив А размером NхM элементов. Получить два одномерных массива В и С, каждый элемент которых формируется по следующим правилам:
а) i-й элемент массива В равен числу перестановок, которые нужно сделать в i-й строке массива А для сортировки ее по возрастанию методом «пузырька»;
б) j-й элемент массива C равен числу перестановок, которые нужно сделать в j-м столбце массива А для сортировки его по убыванию методом «пузырька».

7.13. В классе учится 20 учеников. Они изучают 8 предметов. По каждому предмету каждый ученик может получить итоговую оценку от «2» до «5». Определить:
а) лучшую пятерку учеников по среднему баллу по всем предметам;
б) тройку самых трудных предметов (по наименьшему среднему баллу);
в) трех лучших учеников по трем самым трудным предметам (по среднему баллу по этим предметам);
г) количество учеников и их номера в списке, входящих одновременно в группы, полученные в пп. а) и в)

7.14. Разработать программу перевода целого десятичного числа в двоичную систему счисления.

7.15. Разработать программу перевода целого десятичного числа в произвольную систему счисления.

7.16. Разработать программу перевода целого десятичного числа в двоичную систему счисления, представить получившееся число в дополнительном коде в формате integer.

reper
Вот тебе прога 7.1 :

program cym;
uses crt;
var
x,k,s:integer;
y:real;
begin
clrscr;
write('‚ўҐ¤ЁвҐ 楫®Ґ Ї®«®¦ЁвҐ«м­®Ґ зЁб«® >100 n= ');
readln (x);
y:=0;
for k:=1 to x do
y:=y+1/k;
writeln('n=',x, ' y=',y:5:5);
readkey;
end.

rolleyes.gif
Лесандр
Реализация задания 7.2:

CODE

program randomize_massive;
uses crt;

const
m=10;

var
Matrix [1..m, 1..m] of integer; {Здесь можно вместо целого использщовать вещественное}
i, j:integer;
Sum, MaxValue, MaxI, MaxJ:integer;


begin
Randomize; {Вроде бы так, насколько помнится}
clrscr;
{************Заполняем массив случ. числами*******************}
for i:=1 to m do
begin
for j:=1 to m do
begin
Matrix[i, j]:=Random(10);
end;
end;
{*********************************************************}

{**********Ищем сумму и max элемент*************************}
MaxI:=1;
MaxJ:=1;
MaxValue:=Matrix[1, 1];
Sum:=0;
for i:=1 to m do
begin
for j:=1 to m do
begin
Sum:=Sum + Matrix[i, j]
if Matrix[i, j]>MaxValue then
  begin
MaxValue:=Matrix[i, j];
MaxI:=i;
MaxJ:=j;
  end;
end;
end;
{*********************************************************}

writeln('Сумма массива: ', Sum);
writeln('Максимальный элемент: A', MaxI, MaxJ);

end.

Лесандр
Размышления на тему последних лабораторных работ:

QUOTE (http://algolist.manual.ru)


Общий принцип 1: чтобы перевести число в некоторую систему счисления с основанием M ( цифрами 0, ..., M-1 ), иначе говоря, в M-ичную СС, нужно представить его в виде:



C = an * Mn + an-1 * Mn-1 + ... + a1 * M + a0.

a1..n - цифры числа, из соответствующего диапазона. an - первая цифра, a0 - последняя.
Сравните эту запись с представлением числа, например, в десятичной системе.

Из системы с большим основанием - в систему с меньшим:

Очевидно, чтобы найти такое представление, можно

      1. разделить число нацело на M, остаток - a0.
      2. взять частное и проделать с ним шаг 1, остаток будет a1...
И так, пока частное не равно 0.

    Искомое число будет записано в новой системе счисления полученными цифрами.

Общий принцип 2: Если основание одной системы - степень другого, например, 2 и 16, то перевод можно делать на основании таблицы:
2 -> 16 : собираем с конца числа четверки ( 16 = 2 4 ) чисел, каждая четверка - одна из цифр в 16-ричной с-ме. Пример ниже.

16 -> 2 - наоборот. Создаем четверки по таблице.

Из меньшего основания - к большему:

Просто вычисляем C = an * Mn + an-1 * Mn-1 + ... + a1 * M + a0, где М - старое основание. Вычисления, естественно, идут по в новой системе счисления.

Например: из 2 - в 10: 100101 = 1*25 + 0*24 + 0*23 + 1*22 + 0*21+1=32+4+1=37.

Вообще говоря, можно сделать много хитрых трюков - в примерах реализаций они есть smile.gif


--------------------------------------------------------------------------------

Много вопросов задается относительно дробей и отрицательных чисел.

Отpицательные - модуль числа не меняется при переходе к другой СС, посему: запомнить знак, пpименить стандаpтный метод - поставить знак. Дальше буду говорить уже о положительных числах


Десятичные дроби - пеpеношу запятую, запоминая, на какую степень основания умножил.

Например, перенос в троичном числе запятой с 4-го места от конца - то же, что и умножить его на 34

121201,2112 * 34 = 1212012112.
После стандаpтной пpоцедуpы с положительными числами поделить на этот множитель получившуюся дробь. Получится периобическая дробь - значит судьба Ваша такая. Помните: в 3-чной системе 1/3 = 0.1, а в десятичной - 0,(3). Неблагодарное это дело - с десятичными дробями оперировать.


Обыкновенные - пpавильность дpоби сохpаняется относительно пpеобpазований, значит то же - стандаpт по числителю и знаменателю.


Кстати, замечательнейший сайт с разнообразными алгоритмами:[Для просмотра ссылки зарегистрируйтесь]
PlayBoy1989
Всем СПАСИБО! Если кто сможет, помогите ещё с чем нить...
Леди Аинти
хм, у меня такие же задачки,почти, что-нить решил? делись))) biggrin.gif
PlayBoy1989
QUOTE
хм, у меня такие же задачки,почти, что-нить решил? делись))) 

А можно узнать где тебе они были заданны? Случайно не в КГАУ? На курсах? Какая группа?
Леди Аинти
Случайно там... группа ПИ-2, а у тебя?? не решила ни чего...
Duke
PlayBoy1989
Леди Аинти
Для знакомства есть ПМ. Не засоряйте тему !
PlayBoy1989
QUOTE
Случайно там... группа ПИ-2, а у тебя?? не решила ни чего...

Ну...у меня чисто случайно ПИ-1... Я решил почти все кроме 6,17 , 618, 615,, 614.
WiT[4]eR
Доброго времени суток!
Помогите, пожалуйста, решить задачку на Pascal'e:
Найти S - сумарную площадь N прямоуголных треугольников, если длина меньшего катета равна квадратному корню из длины большего, а длина большего катета составляет последовательность b,b/2,b/3,...,b/n.
Salagin
WiT[4]eR
Математика рулит laugh.gif Сначала составь математическое решение, а на паскале просто будет.
WiT[4]eR
S = 1/2*(a1*b1+a2*b2+a3*b3+...+an*bn)
я не знаю как обозначить сумму состоящую из n слагаемых, а также как обозначить больший катет. (с Паскалем совсем мало знаком просто) huh.gif
PavelAlex
var a,b,s,n: real (вещественный тип)
begin
writeln('ведите n',n)
read(n)
и ведите всё остальное, кром s
s:=1/2.....
writeln('oтвет s=',s)

а в чём сложность?
WiT[4]eR
для меня, на данный, момент сложность заключается в том как присвоить "b" значение в виде последовательности. вот что у меня получилось:
CODE
program primer1;
var a,b,s,n,i: real;
begin
writeln('vvedite n',n);
writeln('vvedite a',a);
writeln('vvedite b',b);
read(n,a,b);
a:= sqrt(b);
for i:= 1 to n do
begin
b:= b/i;
s:= (1/2*(a*B))*n;
end;
writeln('s=',s);
end.

ошибка где-то в цикле FOR, но я не знаком с синтаксисом Паскаля. sad.gif
bestya
Вроде так должно быть, у тебя в циклах использовался вещетвенный тип, а нужно целочисленный.

CODE

program primer1;
var
 a,b,s: real;
 i,n:longint;

BEGIN
write('Введите  n');
readln(n);
write('Введите b');
readln(b);

s:=0;

for i:= 1 to n do
 begin
   b:= b/i;
   a:= sqrt(b);
   s:= s+ (a*b);  
 end;

s:=s*1/2

writeln('s=',s);
END.
PavelAlex
WiT[4]eR

QUOTE

//var a,b,s,n,i: real; так не правильно, правельней так:
var a,b,s:real; //вещественный тип
i,n:integer; //целочисленный тип

read(n,a,b );

s:=0; // перед началом цикла (for i:= 1 to n do) нужно s присвоить 0, для того чтобы значение s
// могло наращиваться

// здесь у тебя a:= sqrt(b ) - это неправильно а нужно её в самом цикле прописать, ведь а у тебя
//постояно изменятся должна

for i:= 1 to n do
begin
b:= b/i;
a:= sqrt(b ); //здесь появилась переменая а
s:= s+(1/2*(a*b ))*n; // изменили s:= (1/2*(a*b ))*n на s:= s+(1/2*(a*b ))*n, только вот непонятно
// скорей всего правильней будет вместо n написать i
// а также здесь не понятно, судя по твоей формуле выше, на фига вообще умножать на n
end;
writeln('s=',s);
WiT[4]eR
что i и n целочисленные я уже понял. в остальном за советы благодарю.
переменная "а" не изменяется, её вводят один раз. формула, написаная выше не совсем корректна, т.к. "а" и "b" не изменяются.=> S:= (1/2*( a*b ))*i (действительно "i" будет вместо "n")
в общем код получился таким:
CODE
program primer1;
var a,b,s: real;
   i,n: integer;
Begin
Write('vvedite n '); ReadLn(n);
Write('vvedite a '); ReadLn(a);
Write('vvedite b '); ReadLn(b);
s:= 0;
For i:= 1 to n do
begin
b:= b/i;
a:= sqrt(b);
s:= (1/2*(a*b))*i;
end;
WriteLn('s= ',s)

только вот в чём проблема. i должно изменяться от 1-го до бесконечности, т.е. до k (n использовать нельзя, т.к. это кол-во треугольников). не подскажите как это реализовать?
PavelAlex
должно быть так:
CODE
For i:= 1 to n do
begin
b:= b/i;
a:= sqrt(b);
s:=s+ (1/2*(a*b))*i;
end;


QUOTE
только вот в чём проблема. i должно изменяться от 1-го до бесконечности, т.е. до k (n использовать нельзя, т.к. это кол-во треугольников).

пускай препод нормально, объснит, где у тебя ещё и k должно быть.
WiT[4]eR
QUOTE
пускай препод нормально, объснит, где у тебя ещё и k должно быть.

препод сказал: "неправильно, внимательно прочти условие задачи" и всё, никакого пояснения не дал. k должно быть, скорее всего, в этой строчке вместо n:
CODE
For i:= 1 to n do
EvgIg
WiT[4]eR
Если еще не поздно...
1) если сделать так:
CODE
For i:= 1 to n do
 begin
 b:= b/i;
 a:= sqrt(b);
 s:=s+ (1/2*(a*b))*i;
end;

то b будет принимать следующие значения(от начального):
b/1; b/2; b/2/3; b/2/3/4... вместо b; b/2; b/3

вобщем b не надо менять в цикле:
CODE
For i:= 1 to n do
 begin
 a:= sqrt(b/i);
 s:=s+ (1/2*(a*b/i))*i;
end;


2) по условиям задачи a вычисляется из b... ее запрашивать незачем.
3) насчет k
если правильно понял, то просто n=1..k
и возможно, просто необходимо ввести проверку n в запросе пользователя на вхождение в диапазон 1..k

примерно так...