Старый 26.08.2003, 10:41   #1   
Модератор
 
Сообщений: 665
Регистрация: 09.01.2002

Kerish вне форума Не в сети
Question Помогите по Паскалю!

Срочно нужна помощь за большое вознаграждение пивом!
Надо решить пару задач на паскале...
Очень надо, пожалуйста помогите!
Помогите решить хоть одну...Пиво гарантирую!

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

2)Пусть даны : натуральное число n и символьная квадратная матрица порядка n. Получите последовательность B1..., Bn из нулей и едениц, в которой Bi = 1 тогда и только тогда, когда в i-ой строке число символов звездочки "*" не меньше числа пробелов.

3) На рекурсию:
A0=1 , A1 = 2; An = (An-1 + An-2) / 2
  Ответить с цитированием
Старый 26.08.2003, 18:21   #2   
Форумец
 
Сообщений: 4
Регистрация: 21.08.2003
Возраст: 37

sedunov вне форума Не в сети
#1

program Students;

uses
CRT;

const
MAX_STUDENTS = 150;

type
TFamilyName = String[12];
TGroup = 1..7;
TMark = 1..5;
TSubjects = array[1..3] of TMark;
TStudentData = record
FamilyName : TFamilyName;
Group : TGroup;
Subjects : TSubjects;
end;
TStudentList = array[1..MAX_STUDENTS] of TStudentData;

var
StudentList : TStudentList;
nStudents : Word;

function GetStudentData(var sd : TStudentData) : Boolean;
var
S : String;
C : Integer;
N : Integer;
Ret : Boolean;
i : Word;
begin
Ret := True;
ClrScr;
WriteLn('******* ADD NEW STUDENT *******');
WriteLn;
Write('Family Name: ');
ReadLn(sd.FamilyName);
if Length(sd.FamilyName) < 12 then
for i := 1 to 12 - Length(sd.FamilyName) do
sd.FamilyName := sd.FamilyName + ' ';
Write('Group #: ');
ReadLn(S);
Val(S, N, C);
if (C = 0) and (N >= 1) and (N <= 7) then
begin
sd.Group := N;
Write('Functional Analyze Mark: ');
ReadLn(S);
Val(S, N, C);
if (C = 0) and (N >= 1) and (N <= 5) then
begin
sd.Subjects[1] := N;
Write('Numeric Methods Mark: ');
ReadLn(S);
Val(S, N, C);
if (C = 0) and (N >= 1) and (N <= 5) then
begin
sd.Subjects[2] := N;
Write('Economics Mark: ');
ReadLn(S);
Val(S, N, C);
if (C = 0) and (N >= 1) and (N <= 5) then
begin
sd.Subjects[3] := N;
end
else
Ret := False;
end
else
Ret := False;
end
else
Ret := False;
end
else
Ret := False;
if Ret then
WriteLn('Input operation has been done successfully')
else
WriteLn('Input operation has been failed: Invalid data');
GetStudentData := Ret;
end;

function AddStudent(const sd : TStudentData) : Boolean;
begin
if nStudents = MAX_STUDENTS then
AddStudent := False
else
begin
Inc(nStudents);
StudentList[nStudents] := sd;
AddStudent := True;
end;
end;

procedure PrintFailedStudents(Columns : Byte);
var
i : Word;
col : Byte;
begin
ClrScr;
WriteLn('******* FAILED STUDENTS *******' : 12);
WriteLn;
col := 0;
if nStudents > 0 then
for i := 1 to nStudents do
begin
if col = Columns - 1 then
WriteLn;
with StudentList[i] do
begin
if (Subjects[1] <= 2) or (Subjects[2] <= 2) or (Subjects[3] <= 2) then
begin
Write(FamilyName + ' ');
col := (col + 1) mod Columns;
end;
end;
end;
end;

procedure Start;
var
Command : String;
sd : TStudentData;
begin
Command := '';
while (Command <> 'quit') do
begin
Write('Command > ');
ReadLn(Command);
if Command = 'add' then
begin
if GetStudentData(sd) then
if AddStudent(sd) then
WriteLn('Add operation has been done successfully')
else
WriteLn('Add operations has been failed: Too many students');
WriteLn;
end
else
if Command = 'print' then
begin
PrintFailedStudents(6);
WriteLn;
ReadLn;
end
else
WriteLn('Command is not recognized');
end;
end;

begin
ClrScr;
WriteLn('******* COMMANDS *******');
WriteLn('add - add new student');
WriteLn('print - print families of failed students');
WriteLn('quit - exit program');
ReadLn;
ClrScr;
Start;
end.

#3

{$N+}

program Recur;

type
TNatural0 = 0..$7FFFFFFF;

function GetA(Index : TNatural0) : Double;
begin
case Index of
0 : GetA := 1.0;
1 : GetA := 2.0;
else
GetA := (GetA(Index - 2) + GetA(Index - 1))/2;
end;
end;

var
N : TNatural0;

begin
Write('Index: ');
ReadLn(N);
WriteLn(GetA(N):10:3);
ReadLn;
end.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind