Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Записи. Ввод информации и печать определённых данных

Автор: Гость 6.05.2007 17:47

Задача
Сведения о студентах ВУЗа записаны в массиве и содержит следующую информацию: фамилия, имя отчество, пол (М или Ж), возраст (от 16 до 35), курс (от 1-го до 5-го). Напишите программу, которая вводит эту информацию и печатает следущие данные: номер курса, на котором наибольший процент мужчин.

Для решения нужно использовать записи и оператор присоединения.

FAQ смотрел, но т.к. там только основа, то не разобрался. Как объявить - понятно. Как ввести информацию тоже понятно, но как оперировать ими в теле программы не очень понятно. Помогите кодом пожалуйста

Автор: мисс_граффити 6.05.2007 17:56

Цитата
Как объявить - понятно. Как ввести информацию тоже понятно

Сделай это для начала.

Цитата
оператор присоединения

что это?

Автор: volvo 6.05.2007 18:50

Цитата
что это?
With ? blink.gif

Автор: мисс_граффити 6.05.2007 20:34

буду знать, что он так называется smile.gif первый раз слышу...

Автор: Гость 8.05.2007 1:44

Ну а дальше что?

Автор: мисс_граффити 8.05.2007 2:03

Показать, что сделал.

Автор: *alt 10.05.2007 15:51

Цитата(мисс_граффити @ 7.05.2007 23:03) *

Показать, что сделал.

Код

uses
  SysUtils,
  windows;

const n=3;
type
  Tpol = (m,w);
  TRec = record
     name : string [31];
     age : 16..35;
     kurs : 1..5;
     sex : Tpol;
  end;

  TBase = array [1..n] of TRec;
var x:Trec; c:char;
    base : TBase;
procedure Input(var b : TBase);
var
   i,j : integer;  c:char;
begin
  writeln('ввод базы данных. ');
  for i := 1 to n do
    with b[i] do begin
      writeln('Студент N ',i);
      writeln('Имя : ');
      readln(name);
      writeln('Возраст: ');
      readln (age);
      writeln('Курс: ');
      readln (kurs);
      writeln('Пол (m/w): ');
      readln (c);
      case c of
        'm':x.sex:=m;
        'w':x.sex:=w
      end;
      writeln;
    end;
end;


Я гостем был. Вот ввод сделал...
Посчитайте мужчин..

Автор: samec 10.05.2007 16:10

вот как то так (набивал сдесь, так что могут быть ошибки!)


procedure percent(b : TBase);
var
i,max : integer;
kur:array[1..5,1..2] of integer;
temp:real;
begin
for i:=1 to 5 do
begin
kur[i,1]:=0;
kur[i,2]:=0;
end;
for i := 1 to n do
with b[i] do
case sex of
'm':inc(kur[kurs,1]);
'w':inc(kur[kurs,2]);
end;
max:=1;
temp:=100*kur[1,1]/(kur[1,1]+kur[1,2]);
for i:=2 to 5 do
if (100*kur[i,1]/(kur[i,1]+kur[i,2]))>temp then
begin
temp:=100*kur[i,1]/(kur[i,1]+kur[i,2]);
max:=i;
end;
writeln('На ',i,'-ом курсе наибольший процент мужчин');
end;


Автор: *alt 10.05.2007 17:16

samec спасибо, но есть трудность.
Посмотрите код. Вылетает

Код

program page126num15a;

{$APPTYPE CONSOLE}
uses
  SysUtils,
  windows;

const n=3;
type
  Tpol = (m,w);
  TRec = record
     name : string [31];
     age : 16..35;
     kurs : 1..5;
     sex : Tpol;
  end;

  TBase = array [1..n] of TRec; // База данных : информация о студентах.
var x:Trec;
    base : TBase;
procedure Input(var b : TBase); // ввод базы даннх
var
   i : integer;  c:char;
begin
  writeln('Ввод базы данных. ');
  for i := 1 to n do
    with b[i] do begin
      writeln('Студент N ',i);
      writeln('Имя : ');
      readln(name);
      writeln('Возраст: ');
      readln (age);
      writeln('Курс: ');
      readln (kurs);
      writeln('Введите пол (m/w): ');
      readln (c);
      case c of
        'm':x.sex:=m;
        'w':x.sex:=w
      end;
      writeln;
    end;
end;
procedure percent(b : TBase);
var
   i,max : integer;
   kur:array[1..5,1..2] of integer;
   temp:real;
begin
  for i:=1 to 5 do
   begin
    kur[i,1]:=0;
    kur[i,2]:=0;
   end;
  for i := 1 to n do
    with b[i] do
      case sex of
        m:inc(kur[b[i].kurs,1]);
        w:inc(kur[b[i].kurs,2]);
      end;

{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ВОТ тут почему-то вылетает!!!!!!!!!!!!!!!!!!!!!}
max:=1;

temp:=100*kur[1,1]/(kur[1,1]+kur[1,2]);
for i:=2 to 5 do
  if (100*kur[i,1]/(kur[i,1]+kur[i,2]))>temp then
   begin
    temp:=100*kur[i,1]/(kur[i,1]+kur[i,2]);
    max:=i;
   end;
writeln('На ',i,'-ом курсе наибольший процент мужчин');
readln;
end;

begin
  {обращение к русскому языку}
  setconsoleCp(1251);
  setconsoleOutputCp(1251);
  input(base);
  percent(base);
  readln
end.

Автор: samec 10.05.2007 18:30

вот:


program page126num15a;

const n=3;
type
Tpol = (m,w);
TRec = record
name : string [31];
age : 16..35;
kurs : 1..5;
sex : Tpol;
end;

TBase = array [1..n] of TRec;
var x:Trec;
base : TBase;
procedure Input(var b : TBase);
var
i : integer; c:char;
begin
writeln('Ввод базы данных. ');
for i := 1 to n do
with b[i] do begin
writeln('Студент N ',i);
writeln('Имя : ');
readln(name);
writeln('Возраст: ');
readln (age);
writeln('Курс: ');
readln (kurs);
writeln('Введите пол (m/w): ');
readln ©;
case c of
'm':sex:=m; {вот тут я не понял, почему ты писал 'm':x.sex:=m;}
'w':sex:=w {'w':x.sex:=w ?????}
end;
writeln;
end;
end;
procedure percent(b : TBase);
var
i,max : integer;
kur:array[1..5,1..2] of integer;
temp:real;
begin
for i:=1 to 5 do
begin
kur[i,1]:=0;
kur[i,2]:=0;
end;
for i := 1 to n do
with b[i] do
case sex of
m:inc(kur[kurs,1]);
w:inc(kur[kurs,2]);
end;

max:=0; {сдесь небольшие дороботачки}
temp:=0;
for i:=1 to 5 do
if (kur[i,1]>0) then
if (100*kur[i,1]/(kur[i,1]+kur[i,2]))>temp then
begin
temp:=100*kur[i,1]/(kur[i,1]+kur[i,2]);
max:=i;
end;
writeln('На ',max,'-ом курсе наибольший процент мужчин');
end;

begin
input(base);
percent(base);
readln
end.


Автор: volvo 10.05.2007 18:42

samec, а теперь посмотри на НАЗВАНИЕ раздела! Еще одна не компилящаяся в TP программа - пеняй на себя.

То же самое касается и автора вопроса - думать надо, прежде, чем размещать вопросы где попало...

Автор: samec 10.05.2007 19:04

volvo исправил, а делал я её в именно в Паскале, просто те строки кода, которые в паскале не компилируются я убирал. А сдесь их поставил, для того, чтобы автор темы ещё раз не спрашивал: "а почему у меня не работает???" . вот и всё. Изините, если что не так.

Автор: Гость 10.05.2007 20:06

volvo, а кстати, где написано в каком компиляторе должна компилиться прога. Писали-то люди на паскале, чего и требует раздел.

Автор: klem4 10.05.2007 20:19

Гость

Исходные тексты, выкладываемые в этот раздел должны обязательно компилироваться под 16б компилятором. Для 32б есть отдельный раздел.