IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Курсовая для первого курса, спасайте или выгонять меня...
сообщение
Сообщение #21


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Что бы не создавать оттельную тему прошу помоч еще с одной прогой для друга.
Задание
Составить прогу котороя будет печатать имена студентов и предмет с которого получено "2".
_____
Прогу я наисал, но почему то она не пашит =)
В обшем, помогите довести прогу до рабочего состояния.
Перваую ошибку смотрите в коментариях.
program tp14;
uses crt;
type danni=record
predmet:array [1..5] of string; {предметов берем 5}
Mark:array [1..5] of integer; end;
studrec=record
name:string; end;
sub=danni;
var student:array [1..8] of studrec;
am:array [1..8] of string;
k,s,i,n,f,r:integer; min:string;
f2,f1:text;
Begin
assign (f2, 'dano.pas');reset(f2); assign(f1,'rez.pas'); rewrite(f1);
n:=0;
for i:=1 to 2 do begin s:=0; {возьмем к примеру два студента}
with student[i] do begin
readln(f, name);
for k:=1 to 5 do begin
with sub do begin {А вот тут выдает что просит поставить "(" но зачем???)}
readln(f2,predmet[k]); end;
if student[i].danni.mark[k]=2 then
s:=s+1; end;
if s=5 then begin n:=n+1;
am1[n]:=student[i].name;
writeln(f1, am1[n]); end; end; end.

_____
З.Ы.Кстати курсовую я сдал, и все благодаря Вам!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Гость






Цитата(Floyd @ 16.05.05 20:44)
А вот тут выдает что просит поставить "(" но зачем???)

Все правильно выдает... У тебя же Sub это не переменная какого-то типа, а само описание типа. И ты не имеешь права его использовать в программе (за одним исключением, только для того, чтобы привести какую - либо переменную к типу Sub). Вот как раз для приведения нужно, чтобы следом за идентификатором типа в скобках шло имя переменной... Поэтому у тебя и просят скобку.

Выход один - объяви переменную типа Sub, и работай с ней...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Такс, смотри я подправил.. тока не доганяю, например читаю я такую инфу

Grisha
pr1
4
pr2
3
pr3
3
pr4
2
pr5
5
down
pr1
2
pr2
2
pr3
2
pr4
2
pr5
2


А прога выдет только одно "down" и все...
А вот прога сама
program tp14;
              {Vykonav Kravets Artem}
uses crt;
type danni=record
 predmet:array [1..5] of string;
 Mark:array [1..5] of integer; end;
 studrec=record
  name:string;
  sub:danni; end;
  var student:array [1..8] of studrec;
      sub:array [1..5] of danni;
am1:array [1..8] of string;   am:array [1..8] of string;
k,s,i,n,f,r:integer; min:string;
f2,f1:text;
  Begin
  assign (f2, 'dano.pas');reset(f2);   assign(f1,'rez.pas');  rewrite(f1);
    n:=0;
   for i:=1 to 2 do begin s:=0;
   with student[i] do begin
    readln(f2, name);
     for k:=1 to 5 do begin
      with sub  do begin
       readln(f2,predmet[k]);
       readln(f2,mark[k]); end;
if student[i].sub.mark[k]=2 then
s:=s+1; end;
if s=5 then begin n:=n+1;
 am1[n]:=student[i].name;
    writeln(f1, am1[n]); end; end; end;close(f1); end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Гость






Ну, все правильно выдает... Ты же это и просил:
if s=5 then begin
n:=n+1;
am1[n]:=student[i].name;
writeln(f1, am1[n]);
end;

а когда n = 5? Когда 5 двоек !!! У "Гриши"-то не только 2-ки есть smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


А понял, я завтыкал =) А как мне дописать что бы еще предмет выводило по которой двойка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Люди, помогите пожалуйста, как для выше преведеной проги дописать что бы еще показывало с какого предмета двойка...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Гость






Ну, можно просто вместо
if student[i].sub.mark[k]=2 then s:=s+1;

написАть:
if student[i].sub.mark[k]=2 then begin
s:=s+1;
am[s] := student[i].sub.predmet[k];
end;

и потом не
if s=5 then begin
n:=n+1;
am1[n]:=student[i].name;
writeln(f1, am1[n]);
end;

а вот так:

if s > 0 then begin
writeln(f1, student[i].name);
for j := 1 to s do writeln(f1, am[j]);
end;

это будет просто распечатывать для каждого студента, у которого есть 2-ки, по какому предмету они получены...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Спасибо, я исправил текст вот так

uses crt;
type danni=record
 predmet:array [1..5] of string;
 Mark:array [1..5] of integer; end;
 studrec=record
  name:string;
  sub:danni; end;
  var student:array [1..8] of studrec;
      sub:array [1..5] of danni;
am1:array [1..8] of string;   am:array [1..8] of string;
k,s,i,n,f,r,j:integer; min:string;
f2,f1:text;
  Begin
  assign (f2, 'dano.pas'); reset(f2);   assign(f1,'rez.pas');  rewrite(f1);
    n:=0;
   for i:=1 to 2 do begin s:=0;
   with student[i] do begin
    readln(f2, name);
     for k:=1 to 5 do begin
      with sub  do begin
       readln(f2,predmet[k]);
       readln(f2,mark[k]); end;
if student[i].sub.mark[k]=2 then begin
 s:=s+1;
 am1[s] := student[i].sub.predmet[k];
if s > 0 then begin
 writeln(f1, student[i].name); end;
 for j := 1 to s do writeln(f1, am1[j]);
 end; end; end; end;  close(f1);  end.


А выводит мне вот такое
Grisha
pr4
down
pr1
down
pr1
pr2
down
pr1
pr2
pr3
down
pr1
pr2
pr3
pr4
down
pr1
pr2
pr3
pr4
pr5


Где то неправильно закрыт цыкл... но вот где?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Гость






Ну так отформатируй текст как положено - увидишь. С таким расположением как у тебя найти неправильное закрытие просто нереально...

P.S. Это как раз здесь:
if student[i].sub.mark[k]=2 then begin
s:=s+1;
am1[s] := student[i].sub.predmet[k];
{ тут должен быть END }

читай мои сообщения внимательно !
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Спасибо! lol.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


В общем, как я говорл, благодаря Вам я сдал курсач =).
А вот мой друг не сдал, почему то не пашит процедура решения интеграла, выдает ошибку Invalid floating operation 207
А в окне пишит
Runtime error 207 at 000F:0003
____
помогите разобратся в чем проблемка....
Интеграл там рещается двумя способами, способом парралелограмма и Симпсона.
program kursova_robota_PM_41_7_variant;
{Vykonav Schutskiy Pavlo}
uses graph,crt;
type vekt=array[1..1000] of real;
var n:integer; h,itg,g,t,int1,int2,s1,sh,intg,intgs:real; NN,NK,i:integer; w:text; ci,mi:vekt;
const a=0.2; b=0.3;
{_______________________________________}
     function ArcSin(x:real):real;
begin
if Abs(x) = 1 then ArcSin:=0 else
ArcSin:=ArcTan(x/(1-sqr(x))); end;
{---------------------------------------------------------------------------}

function f(x:real):real;
begin
  f:=ArcSin(sqrt(x))/sqrt(x*(1-x));
end;
{--------------------------------------------------------------------------}

procedure Grafika;
var gd, gm: integer;
   x,y: real;
begin
  gd:=detect;
  initgraph(gd, gm, '');
  SetBkColor(white);
  SetColor(4);
  Line(0, 100, 640, 100);
  Line(320, 0, 320, 480);
  SetColor(green);
  outtextxy(50,10,'Kursova Robota');  outtextxy(420,10,'Grafik Funkcii');
  outtextxy(50,20,'Vikonav Schutskiy Pavlo');
  outtextxy(50,30,'PM-41');
  PutPixel(320,240,0);
  outtextxy(325,245,'0');
     x:=0.2;
     While x<=0.9    do
begin
       y:=ArcSin(sqrt(x))/sqrt(x*(1-x));
       PutPixel(round(x*155)+350,round(y*155), 4);
       x:=x+0.00125;
end; repeat until keypressed; cleardevice;  closegraph;end;
{--------------------------------------------------------------------------}
procedure Zn(x,h:real);
var  c:array[1..8] of real;
i:integer; y:real;
begin
assign(w,'dan.pas'); rewrite(w);
writeln(w,'Znachennya funcii dlya kojnogo z X');
x:=0.2;  h:=0.0125;
for i:=1 to 8 do begin x:=x+h;
y:=ArcSin(sqrt(x))/sqrt(x*(1-x));
c[i]:=y;
write(w,'f[',i,']=',c[i]:2 :3,'  ');
end;end;
{--------------------------------------------------------------------------}
procedure MaxMin(n:integer;h:real);
var x,xStart,xStop,xmin,xmax:extended;
begin
writeln(w,'');
writeln(w,'Znahodjennya MAX i MIN funcii:');
     xStart:=0.2;
     xStop:=0.3;
     x:=xStart;
     xmax:=x;   xmin:=x;
     while x<=xStop+h/2 do
begin
     if f(x)>f(xmax) then   xmax:=x;
     if f(x)<f(xmin) then  xmin:=x;
     x:=x+h;
end;
writeln(w,'Maksumalne znachennya funcii=',f(xmax):2 :3);
writeln(w,'Minimalne  znachennya funcii=',f(xmin):2 :3); writeln('');
end;
  {----------------------------------------------------------------------}
procedure Sum(x,h:real);
var Sum,y:real; i:integer; c:array [1..8] of real;
begin
for i:= 1 to 8  do begin
      if i>=6 then begin
   sum:=sum+x; end;
   x:=x+h;
end;
writeln(w,'Summa=',sum:3:3);writeln('');
end;
  {------------------------------------------------------------------------}
{nahogdenie integrala}
 procedure integral(x,y:vekt;var int,ints:real);
   var summa1,summa2,summa3,h:real;w,k,n,b:integer;
 begin
   summa1:=0; summa2:=0; summa3:=0; n:=8; h:=0.0125;
   w:=0;k:=0;n:=0;b:=0;
  for k:=2 to n do
   summa1:=summa1+2*y[k];
   int:=(h/2)*(y[1]+summa1+y[n+1]);
 for w:=2 to n-1 do         begin
   b:=w mod 2;
 if b=0 then
   summa2:=summa2+4*y[w] else
   summa3:=summa3+2*y[w]; end;
   ints:=(h/3)*(y[1]+summa2+summa3+4*y[n]+y[n+1]);
end;

{--------------------------------------------------------------------------}
Begin
   clrscr;
        Grafika;
assign(w,'dan.pas');rewrite(w);
     n:=8; h:=0.0125;
     s1:=0.2;
     Zn(s1,h);
     MaxMin(n,h);
     Sum(s1,h);
ci[1]:=0; n:=8; h:=0.0125;
 for i:=2 to (n+1) do begin
   ci[i]:=ci[i-1]+h;
 for i:=1 to (n+1) do
   mi[i]:=f(ci[i]);
     integral(ci,mi,intg,intgs);  end;
writeln(w,'Pershiy integral= ',intg:3 :3);
writeln(w,'Drugiy integral=  ',intgs:3 :3); reset(w);  end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #32


Гость






И не будет работать:
function f(x:real):real;
begin
f:=ArcSin(sqrt(x))/sqrt(x*(1-x));
end;
...
ci[1]:=0;
for i:=1 to (n+1) do mi[i]:=f(ci[i]); { Деление на 0 как минимум тебе обеспечено... }

 К началу страницы 
+ Ответить 
сообщение
Сообщение #33


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Эх... точно, исправил на 0.2 а n исправил на 7... все равно не пашет...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #34


Гость






2 вещи мешают проекту нормально оаботать:

1 - то, что у тебя ОПЯТЬ неверно расставлены скобки begin ... end. На этот раз - здесь:
for i:=2 to (n+1) do { begin } { <-- Убрать begin }
ci[i]:=ci[i-1]+h;
for i:=1 to (n+1) do
mi[i]:=f(ci[i]);
integral(ci,mi,intg,intgs); { end; } { <-- Убрать end }


2 - файл открывается дважды и из-за этого вывод в файл работает некорректно:
procedure Zn(x,h:real);
var c:array[1..8] of real;
i:integer; y:real;
begin
assign(w,'dan.pas'); rewrite(w); { <--- Убери эту строку }
...


Вот так smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #35


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Ты гений, что я еще могу сказать. Благодарю, очень сильно =) И извиняюсь если надоедаю постоянно=)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.01.2025 7:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name