Решения задач
1. Даны три массива целых чисел A[10] B[15] C[20].
Найтии сумму всех максимальных элементов массива.
2. Пусть дан файл целых чисел F1. Создайте два новых файла F2, F3, из положительных и отрицательных чисел соответственно. Если какой то из созданных файлов окажется пустым, то сообщите об этом.
Народ, помогите плизз, это всего то 1-й курс..
Просто я не рублю в этом.. А допуск к экзамену нужен, сами понимаете.. :-S
Uses Crt;
Var A:Array [1..10] Of Integer;
B:Array [1..15] Of Integer;
C:Array [1..20] Of Integer;
sum,i,max:Integer;
F1,F2,F3:File Of Integer;
Begin
ClrScr;
Randomize;
{1. Даны три массива целых чисел A[10] B[15] C[20].
Найтии сумму всех максимальных элементов массива.}
For i:=1 To 10 Do Begin A[ i]:=Random(10); Write(A[ i]:2); End;
WriteLn;
For i:=1 To 15 Do Begin B[ i]:=Random(10); Write(B[ i]:2); End;
WriteLn;
For i:=1 To 20 Do Begin C[ i]:=Random(10); Write(C[ i]:2); End;
WriteLn;
max:=A[1];
For i:=1 To 10 Do If max<A[ i] Then max:=A[ i];
sum:=max;
max:=B[1];
For i:=1 To 15 Do If max<B[ i] Then max:=B[ i];
Inc(sum,max);
max:=C[1];
For i:=1 To 20 Do If max<C[ i] Then max:=C[ i];
Inc(sum,max);
WriteLn('Сумма максимальных чисел: ',sum);
{2. Пусть дан файл целых чисел F1. Создайте два новых файла F2, F3, из положительных и отрицательных чисел соответственно. Если какой то из созданных файлов окажется пустым, то сообщите об этом.}
Assign(F1,'F1.file');
Assign(F2,'F2.file');
Assign(F3,'F3.file');
ReWrite(F1); ReWrite(F2); ReWrite(F3);
For i:=1 To 1 Do
Begin
max:=Random(10)-9;
Write(F1,max);
If max<0 Then Write(F3,max) Else Write(F2,max);
End;
If FileSize(F2)=0 Then WriteLn('Файл с положительными числами пустой!');
If FileSize(F3)=0 Then WriteLn('Файл с отрицательными числами пустой!');
Close(F1); Close(F2); Close(F3);
ReadKey;
End.
Спасибо тебе.
Но не мог бы ты решить эти задачи на уровне 1-го курса, а то мы такого ваще не проходили..
Преподы скажут, что скатал.. и будут грузить..
Ещё раз, благодарен.
1) вместо Inc(sum,max); напиши sum:=sum+max;
2) вместо Write(#[ i]:2); напиши Write(#[ i]+' '); (# - от A до C)
3) убрать Randomize и Random(), но это для тебя же неудобства будет предоставлять (придется вручную числа в массивы вводить)
А если это не поможет, то надо будет учить Pascal, чтоб препод не загрузил... ;)
LastSoul Спасибо тебе огромное!!
Думал всё..
Но она(преподша) дала ещё одну задачку, сказала, решишь, объяснишь.. поставлю "зачёт".
Если кто возьмётся, то..
Вот задача:
---------------------------------------------
С клавиатуры вводится две последовательности чисел. Завести их в две очереди и выдать ответ - равны ли они ?!
---------------------------------------------
Заранее Благодарен, только пожалуйста, как можно проще, 1-й курс.
---------------------------------------------
С клавиатуры вводится две последовательности чисел. Завести их в две очереди и выдать ответ - равны ли они ?!
---------------------------------------------
Что значит равны???
1) Равны по количеству чисел в последовательностях
2) Равны: сумма чисел пос-ти 1 = сумма чисел пос-ти 2
Что значит равны???
1) Равны по количеству чисел в последовательностях
2) Равны: сумма чисел пос-ти 1 = сумма чисел пос-ти 2
Я думаю, что это значит:
Равен каждому элементу с таким же порядковым номер из другой последовательности.
По идее так должно быть.
Я думаю, что это значит:
Равен каждому элементу с таким же порядковым номер из другой последовательности.
По идее так должно быть.
Uses Crt;
Const n=10;
Var A:Array [1..n] Of Integer;
B:Array [1..n] Of Integer;
i:Integer;
Label Finish,Finish2;
Begin
ClrScr;
WriteLn('Ввод первой последовательности чисел:');
For i:=1 To n Do ReadLn(A[ i]);
ClrScr;
WriteLn('Ввод второй последовательности чисел:');
For i:=1 To n Do ReadLn(B[ i]);
ClrScr;
For i:=1 To n Do If A[ i]<>B[ i] Then GoTo Finish;
WriteLn('Последовательности равны!');
GoTo Finish2;
Finish:
WriteLn('Последовательности не равны!');
Finish2:
ReadLn;
End.
[/COLOR]
Единственная сложность для тебя это метки (Label), если ты конечно не умеешь с ними работать, но и с этим недолго разобраться...
А в остальном - проще некуда
Uses Crt;
Const n=10;
Var A:Array [1..n] Of Integer;
B:Array [1..n] Of Integer;
i:Integer;
Label Finish,Finish2;
Begin
ClrScr;
WriteLn('Ввод первой последовательности чисел:');
For i:=1 To n Do ReadLn(A[ i]);
ClrScr;
WriteLn('Ввод второй последовательности чисел:');
For i:=1 To n Do ReadLn(B[ i]);
ClrScr;
For i:=1 To n Do If A[ i]<>B[ i] Then GoTo Finish;
WriteLn('Последовательности равны!');
GoTo Finish2;
Finish:
WriteLn('Последовательности не равны!');
Finish2:
ReadLn;
End.
[/COLOR]
Единственная сложность для тебя это метки (Label), если ты конечно не умеешь с ними работать, но и с этим недолго разобраться...
А в остальном - проще некуда
Вообще-то код непральный...там нужно было в ОЧЕРЕДИ засылать...а так прога строк на 6..через рекурсию
Вообще-то код непральный...там нужно было в ОЧЕРЕДИ засылать...а так прога строк на 6..через рекурсию
чет я несовсем понял насчет очередей :( :o
чет я несовсем понял насчет очередей :( :o
Ну unitd писал что задание: ввести две последовательности чисел...Записать их в очереди и сравнить...в очереди правда глупо записывать,но в массивы - тоже не выход,а вдруг надо будет ввести последовательность большего размера чем n...короче всё конечно зависит от задания...но такие задачи надо через списки решать, вот.
Program un;
Uses Crt;
type pel=^el;
el=record
a:integer;
next:pel;
end;
var Last1,Och,Last2,First1,First2:pel;
var i,N,j:integer;
begin
j:=0;
Clrscr;
Writeln ('***Vvedite kol-vo elementov ocheredi***');
Readln (N);
Writeln ('Vvedite 1-i element 1-i ocheredi');
new(First1);
Read(First1^.a);
First1^.next:=nil;
last1:=First1;
Writeln ('Vvedite 1-i element2-i ocheredi');
new(First2);
Read(First2^.a);
First2^.next:=nil;
last2:=First2;
if first1^.a=first2^.a then j:=j+1;
for i:=2 to N do
begin
Writeln ('Vvedite',i,'i element 1i ocheredi');
read(och^.a);
och^.next:=nil;
last1^.next:=och;
last1:=och;
New(Och);
Writeln ('Vvedite',i,'i element 2i ocheredi');
read (och^.a);
och^.next:=nil;
last2^.next:=och;
last2:=och;
if last1^.a=last2^.a then j:=j+1;
end;
if j=n then Writeln ('***Ocheredi ravni***') else Writeln ('***Ocheredi HE ravni***');
Readln;
end.
Кому интересно, то вот эта задача на с последовательностями и очередями :)
Program un;
Uses Crt;
type pel=^el;
el=record
a:integer;
next:pel;
end;
var Last1,Och,Last2,First1,First2:pel;
var i,N,j:integer;
begin
j:=0;
Clrscr;
Writeln ('***Vvedite kol-vo elementov ocheredi***');
Readln (N);
Writeln ('Vvedite 1-i element 1-i ocheredi');
new(First1);
Read(First1^.a);
First1^.next:=nil;
last1:=First1;
Writeln ('Vvedite 1-i element2-i ocheredi');
new(First2);
Read(First2^.a);
First2^.next:=nil;
last2:=First2;
if first1^.a=first2^.a then j:=j+1;
for i:=2 to N do
begin
Writeln ('Vvedite',i,'i element 1i ocheredi');
read(och^.a);
och^.next:=nil;
last1^.next:=och;
last1:=och;
New(Och);
Writeln ('Vvedite',i,'i element 2i ocheredi');
read (och^.a);
och^.next:=nil;
last2^.next:=och;
last2:=och;
if last1^.a=last2^.a then j:=j+1;
end;
if j=n then Writeln ('***Ocheredi ravni***') else Writeln ('***Ocheredi HE ravni***');
Readln;
end.
Ну...код на троечку с минусом))и очереди здесь не используются...а сделано при помощи списков.