Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2015, 12:25   #1
skyline17
Новичок
Джуниор
 
Регистрация: 04.01.2015
Сообщений: 4
По умолчанию программа не правильно работает

В группе определить средний балл после зимней сессии и абсолютную успеваемость. Распечатать ФИО студентов, направленных от завода.
Рассортировать студентов по возрастанию среднего балла. Данные Студентов должны вноситься рандомно.

Моя программа:

Код Pascal
Код:
type
  stud=record
    fio: record
      f, im, och : string;
    end;
    oz: array[1..4] of byte;
    Ocenka: string;
  end;
var
  grup: array [1..30] of stud;
  sdali: array [1..30] of stud;
  i,j,k,kolstud,n:integer;
  
function RandomName :String;
var
  j,i:integer;
  ch:char;
begin
  ch:=chr(random(192, 223));
  result:=ch;
  for i:=1 to random(3, 10) do
  begin
    ch:=chr(random(224, 255));
    result:=result+ch;
  end;
end;
function RandomOcenka :String;
begin
 
  result:=result+inttostr(random(1,5))+inttostr(random(1,5))+inttostr(random(1,5)); //Оценки за сессию
end;
 
function PerviySimbol (s: string): String;
begin
  delete(s, 2, length(s)-1);
  result:=s+'.';
end; 
 
begin
  kolstud:=random(15, 30);
  n:=1;
  for i:=1 to kolstud do
  begin
    grup[i].fio.f:=RandomName;
    grup[i].fio.im:=RandomName;
    grup[i].fio.och:=RandomName;
    grup[i].Ocenka:=RandomOcenka;
    k:=0;
    for j:=1 to 4 do
      begin
        grup[i].oz[j]:=random(2, 5);
        if grup[i].oz[j]=2 then inc(k);
      end;
    if k<>0 then writeln(grup[i].fio.f,' ', PerviySimbol(grup[i].fio.im),
' ',PerviySimbol(grup[i].fio.och),' ',grup[i].Ocenka,' ','от завода')
      else
      begin
        sdali[n]:=grup[i];
        inc(n);
      end;
  end;
end.
Прошу проверить и доработать программу или написать свою

Последний раз редактировалось Stilet; 04.01.2015 в 14:51.
skyline17 вне форума Ответить с цитированием
Старый 07.01.2015, 10:21   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

А что за выражение?
Цитата:
random(192, 223)
На паскале такого нет
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 07.01.2015, 15:19   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

У меня другой вопрос:
Код:
function RandomOcenka :String;
begin
 result:=result+inttostr(random(1,5))+inttostr(random(1,5))+inttostr(random(1,5)); //Оценки за сессию
end;
Какова роль result в правой части выражения?


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 07.01.2015, 15:56   #4
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

он наверное в result складывает не только свои оценки, но и оценки других студентов - это для среднего значения или для абсолютной успеваемости - там надо всё сложить и поделить
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 07.01.2015, 17:25   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
У меня другой вопрос:
Правильный вопрос. result:=result+ - это опасное выражение, ибо при заходе в функцию result не всегда инициализируется. В результате значение может быть непредсказуемым.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.01.2015, 17:29   #6
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Не проще сделать так:

вместо
Код:
function PerviySimbol (s: string): String;
begin
  delete(s, 2, length(s)-1);
  result:=s+'.';
end;
сделать
Код:
function PerviySimbol (s: string): String;
begin
  result:=s[1]+'.';
end;
О, БОЖЕ! запускаю эту программу на Delphi 6 консоль и она ПИКАЕТ!!! на строчке if k<>0 then writeln...

Кстати, а что за строки:
Код:
oz: array[1..4] of byte;
Ocenka: string;
Особенно последняя...
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 07.01.2015 в 17:57.
newerow1989 вне форума Ответить с цитированием
Старый 07.01.2015, 18:23   #7
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

типа до функции result может быть равен, скажем в памяти компа, -fcnu587uhruhfrh, и тогда ответ будет бредовым?
обнулять переменные надо ей?
result:='';
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
правильно ли работает программа? ITdocer Паскаль, Turbo Pascal, PascalABC.NET 2 04.11.2011 09:37
Не правильно работает программа sergik-2504 Помощь студентам 1 22.12.2010 09:17
Программа работает не правильно artem611 Паскаль, Turbo Pascal, PascalABC.NET 2 22.09.2010 07:49
программа работает. правильно ли? getUp Общие вопросы C/C++ 10 26.03.2010 07:07
Не правильно работает программа Virus_L Помощь студентам 0 28.12.2009 22:52