Здравствуйте, гость ( Вход | Регистрация )
| InFuz |
11.12.2009, 17:43
Сообщение
#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 |
19.12.2009, 13:20
Сообщение
#2
|
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент |
program Masiv;
uses crt; const Nmax=16; type mas= array [1..Nmax] of integer; var G,M:mas; var N:integer; procedure Enter (var M:mas; Nmax:integer; var N:integer); {ввод массива} var i,x:integer; begin N:=0; for i:=1 to Nmax do begin write ('M[',i,']='); readln (x); if x=0 then break; {0 - индикатор окончания, он не обрабатывается} 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],'; '); {тут появляется ошибка File not open for output когда запускаешь ее и вводишь какие нибудь числа} writeln; end; procedure Work (var M:mas; var G:mas; N:integer); {обраборка} var j,i,b,sym,ost:integer; f,q:boolean; begin for j:=1 to 178 do G[j]:=j*j; {создание мас. G - полные квадраты до <=32000} for i:=1 to N do 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 {проверка числа из мас. М, на наличие его в мас G} 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 i:=i to N do begin m[i]:=m[i+1]; {затерание искомого элем. и сдвиг всех справа на 1 шаг в лево} N:=N-1; {обрезание последнего элем. т.к. он будет повторятся из за сдвига} end; end; end; end; Begin clrscr; {нужно ввести мас., распечатать его до и распечатать его после} Enter (M,Nmax,N); Print (M,N); Work (M,G,N); Print (M,N); readkey End. |
| Julia |
21.12.2009, 8:56
Сообщение
#3
|
|
Ассистент ![]() ![]() ![]() ![]() Группа: Julia Сообщений: 593 Регистрация: 23.2.2007 Город: Улан-Удэ Учебное заведение: БГУ Вы: преподаватель |
program Masiv;
uses crt; const Nmax=16; type mas= array [1..Nmax] of integer; var G,M:mas; var N:integer; procedure Enter (var M:mas; Nmax:integer; var N:integer); {ввод массива} var i,x:integer; begin N:=0; for i:=1 to Nmax do begin write ('M[',i,']='); readln (x); if x=0 then break; {0 - индикатор окончания, он не обрабатывается} 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],'; '); {тут появляется ошибка File not open for output когда запускаешь ее и вводишь какие нибудь числа} writeln; end; procedure Work (var M:mas; var G:mas; N:integer); {обраборка} var j,i,b,sym,ost:integer; f,q:boolean; begin for j:=1 to 178 do G[j]:=j*j; {создание мас. G - полные квадраты до <=32000} for i:=1 to N do 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 {проверка числа из мас. М, на наличие его в мас G} 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 i:=i to N do begin m[i]:=m[i+1]; {затерание искомого элем. и сдвиг всех справа на 1 шаг в лево} {Сдвиг так и не исправили} N:=N-1; {обрезание последнего элем. т.к. он будет повторятся из за сдвига} end; end; end; end; Begin clrscr; {нужно ввести мас., распечатать его до и распечатать его после} Enter (M,Nmax,N); Print (M,N); Work (M,G,N); Print (M,N); readkey End. Исправьте пока эти две ошибки. |
InFuz Помогите написать процедурку (: 11.12.2009, 17:43
InFuz Ну чо слабо помочь что ли? 12.12.2009, 18:51
Inspektor
Ну чо слабо помочь что ли?
А тебе слабо код норм... 12.12.2009, 19:43
InFuz procedure Work (var M:mas; N:integer); {М-сам ма... 12.12.2009, 21:28
Inspektor
отступы зделать нельзя, т.к. они автоматичесли уб... 12.12.2009, 22:03
Julia 1) while b=0 do
Это условие ПРОДОЛЖЕНИЯ цикла. У ... 13.12.2009, 2:35
InFuz procedure Work (var M:mas; N:integer);
var i,b,s... 14.12.2009, 15:24
Julia Заведите множество ПОЛНЫХ квадратов. Это числа 1,4... 16.12.2009, 4:30
InFuz procedure Work (var M:mas; var G:mas; N:integer);
... 16.12.2009, 13:29
Julia Если бы занесли i*i во множество, увеличили бы ско... 19.12.2009, 5:15
InFuz Извиняюсь за тупость :blush: , но вроде for i:=i t... 21.12.2009, 16:04
Julia 1) Nmax=16 явно недостаточно для того, чтобы запол... 22.12.2009, 16:54
InFuz 1) Но Nmax ни где не используется G-массивом. Nmax... 22.12.2009, 19:27
Julia 1) Nmax у вас использовалась при описании типа mas... 23.12.2009, 1:43
InFuz Ну все вроде запахала :beer:
program Masiv;
use... 23.12.2009, 17:05
Julia Неправильно она у вас работает. Возьмите несколько... 24.12.2009, 5:53
InFuz А уже все равно, уже сдал. Ни кто ни чего не замет... 24.12.2009, 11:24![]() ![]() |
|
Текстовая версия | Сейчас: 19.4.2026, 6:59 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru