![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
InFuz |
![]()
Сообщение
#1
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
Задача: Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр.
Условие: Массив целоцисленный от -32000 до 32000. (ни каких real (IMG:style_emoticons/default/smile.gif) ). Массив вводится в другой процедуре и есть M:mas, N-длина массива. Моя процедура которая чот не батрачит )) procedure Work (var M:mas; N:integer); var i,b,sym,ost:integer; f:boolean; begin for i:=1 to N do begin f:=true; sym:=0; ost:=0; b:=m[i]; while b=0 do begin ost:=b mod 10; sym:=sym + ost; b:=b div 10; end; if sym mod 2=0 then f:=false; if (f=true) and (sqrt(m[i]) in integer) then m[i]:=m[i+1]; end; end; |
![]() ![]() |
InFuz |
![]()
Сообщение
#2
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
1) Но Nmax ни где не используется G-массивом. Nmax вообще ограничивает лишь длину цикла M и используется только в процедуре Enter. G же спокойно заполняется
for j:=1 to 178 do G[j]:=j*j; и ни как не касается Nmax. Я решил ее вообще убрать и маненько изменил Enter. 2) Внешний цикл вы имеете виду ...... for i:=1 to N do... ...... ...... end; ....... Если да, то честно говоря не вижу причин его не использовать разве может из за того что в конце может у N отнимется 1, а N уже внесена в услувие цикла? Но я все равно поменял (IMG:style_emoticons/default/smile.gif) 3) Поменял на for w:=i ..... 4) Поменял var N:integer; program Masiv; uses crt; type mas= array [1..16] of integer; var G,M:mas; var N:integer; procedure Enter (var M:mas; var N:integer); var i,x:integer; begin N:=0; for i:=1 to 16 do begin write ('M[',i,']='); readln (x); if x=0 then break; inc (N); M[i]:=x; end; end; procedure Print (var M:mas; N:integer); var i:integer; begin for i:=1 to N do write (M[i],'; '); writeln; end; procedure Work (var M:mas; var G:mas; var N:integer); var j,i,w,b,sym,ost:integer; f,q:boolean; begin for j:=1 to 178 do G[j]:=j*j; while i>N do begin i:=1; begin f:=true; sym:=0; ost:=0; q:=false; b:=m[i]; for j:=1 to 178 do begin if g[j]=m[i] then begin q:=true; break; end; end; repeat ost:=b mod 10; sym:=sym + ost; b:=b div 10; until b=0; if sym mod 2=0 then f:=false; if (f=true) and (q=true) then begin for w:=i to N do m[i]:=m[i+1]; N:=N-1; end; inc(i); end; end; end; Begin clrscr; Enter (M,N); Print (M,N); Work (M,G,N); Print (M,N); readkey End. По прежнему выдает ошибку тамже где и выдовала в Print. Скиньте плиз ваш полный вариант, а то чую не успею отладить до четверга. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.5.2025, 17:56 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru