|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
28.01.2010, 18:03 | #1 (permalink) |
Member
Регистрация: 29.09.2009
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль. Задачи на строки
Вывести в алфавитном порядке всех мужчин, з/п которых выше средней." Я вот написал пока что процедуры ввода/вывода и процедуру сортировки мужчин. Теперь, как мне сказали, нужно написать функцию выделения из строки з/п. Затем нужно как-то применять эту функцию к всему массиву и выбирать те, что больше средней.. Помогите, пожалуйста, написать эти функции. Вот, что я пока что сделал: Код:
Program ZP; uses crt; Type MAS=array[1..15] of string; Var A,B:MAS; N:byte; y:real; Procedure Vvod(var x:MAS;N:byte); Var i:byte; s:string; begin For i:=1 to N do begin Writeln ('Vvedite imy'); Readln (x[i]); Writeln ('Vvidite pol:m ili j'); Readln (s); x[i]:=x[i]+' '+s; Writeln ('Vvedite z/p'); Readln (s); x[i]:=x[i]+' '+s; Writeln ('Vvedite dolzhnost'); readln (s); x[i]:=x[i]+' '+s; end; end; Procedure Vivod (var x:MAS; N:byte); Var i:byte; begin For i:=1 to N do begin Writeln (x[i]:20); end; Writeln; Readln; end; Procedure M(var x:MAS; N:byte); var i,p:byte; s,dub:string; Fl:boolean; begin If s='m'then begin Fl:=true; While Fl do begin Fl:=false; For i:=1 to N do If x[i]>x[i+1] then begin Fl:=true; dub:=x[i]; x[i]:=x[i+1]; x[i+1]:=dub; end; end; end; end; Begin clrscr; Writeln('vvedite kol-vo rabotnikov'); readln(N); vvod(A,N); vivod(A,N); M(A,N); vivod (A,N); end. |
28.01.2010, 18:03 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Обращаю ваше внимание на то, что на нашем форуме уже были похожи темы Задачи на строки Паскаль, символы и строки |
31.01.2010, 15:51 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
Program ZP; uses crt; Type MAS=array[1..15] of string; Var A,B,C:MAS; N,Nm:byte; Procedure Vvod(var x:MAS; Nvvod:byte); Var i:byte; s:string; begin For i:=1 to Nvvod do begin Writeln('Vvedite imy'); Readln(x[i]); Writeln('Vvedite pol:m ili j'); Readln(s); x[i]:=x[i]+' '+s; Writeln('Vvedite z/p'); Readln(s); x[i]:=x[i]+' '+s; Writeln('Vvedite dolzhnost'); readln(s); x[i]:=x[i]+' '+s; WriteLn; end; end; Procedure Vivod (x:MAS; Nvivod:byte); Var i:byte; begin For i:=1 to Nvivod do begin Writeln(x[i]); end; Writeln; Readln; end; Procedure Select(x:MAS; Ns:byte; var y:Mas; var Nms:byte); Var i,j:byte; f:TEXT; Surn:array[1..15] of String; Sex:array[1..15] of Char; Money:array[1..15] of Word; ZPmed:Real; begin Assign(f,'C:\xxx'); For i:=1 to Ns do begin ReWrite(f); j:=1; Repeat Write(f,x[i][j]); Inc(j); Until x[i][j]=' '; Inc(j); WriteLn(f); WriteLn(f,x[i][j]); Inc(j,2); Repeat Write(f,x[i][j]); Inc(j); Until x[i][j]=' '; WriteLn(f); Close(f); ReSet(f); ReadLn(f,Surn[i]); ReadLn(f,Sex[i]); ReadLn(f,Money[i]); Close(f); end; Erase(f); ZPmed:=0; For i:=1 to Ns do ZPmed:=ZPmed+1.0*Money[i]/Ns; Nms:=0; For i:=1 to Ns do If (Sex[i]='m') and (1.0*Money[i]>ZPmed) then begin Inc(Nms); y[Nms]:=Surn[i]; end; end; Procedure Ordering(x:MAS; Nor:byte; var y:MAS); var i,j:byte; dub:string; begin y:=x; For i:=1 to Nor do For j:=1 to Nor-i do If ORD(y[j][1])>ORD(y[j+1][1]) then begin dub:=y[j]; y[j]:=y[j+1]; y[j+1]:=dub; end; end; Begin clrscr; Writeln('vvedite kol-vo rabotnikov'); readln(N); vvod(A,N); vivod(A,N); select(A,N,B,Nm); ordering(B,Nm,C); vivod(C,Nm); End. |
|
02.02.2010, 20:47 | #5 (permalink) |
Member
Регистрация: 29.09.2009
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Часть задачи, видимо в ней нужно реализовать несколько подпрограмм:
Дана информация по жителям N городов в таком виде: Фамилия Имя год рождения пол. Для тех из них, у которых средний возраст жителя не более Q(задается с клавиат.) упорядочить жителей в порядке убывания возрастов. Помогите пожалуйста. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
02.02.2010, 21:28 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Citrus, а самостоятельно? Тем более, что задача аналогична предыдущей, только проще. Во всяком случае, тут не указано, что информация забита в строки, поэтому можно ее расположить в виде отдельных массивов, а лучше полей массива записей. А в остальном - всё то же.
|
02.02.2010, 22:00 | #7 (permalink) | |
Member
Регистрация: 29.09.2009
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
так вот я и запутался в написании этой подпрограммы в том, что какой массив объявлять в локальных переменных.. Мысли таковы: из каждой строки (фамилия имя г.р. пол) вытащить г.д. в новый массив и уже там дальше искать средний возраст и упорядовачивать. Тогда получается, что вводить в подпрограмму нужно какой-то из массивов, а выводом будет массив, содержащий г.р. всех жителей. Вот не пойму, что и как объявить тогда Код:
Procedure KM (Var x:MAS; s:MAS; N:byte); Var i,t:byte; Begin s[i]:=''; For i:=1 to N do Begin For t:=1 to 2 do Begin delete(x[i],1, pos(' ',x[i])); s[i]:=copy(x[i],1, pos(' ',x[i])-1); end; end; end; |
|
02.02.2010, 22:36 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Прекрасно, продолжайте. Вот Вы используете команды Delete (еще можно Insert), а я их никогда не употреблял и потому намертво про них забыл. Действительно, с ними можно и без файла обойтись. А вы пробуйте, ищите, пишите маленькие программки-фрагменты - только так и научитесь. А желание, как я вижу, у Вас есть, и это главное. И не надо при малейшем затруднении бежать на форумы "ой, не получается!" да "ах, запутался!". Смелее - у Вас всё получится. Удачи!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|