Pascalの宿題は俺にやらせろ!!Part2 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
06/01/12 00:45:25
教育用(?)プログラムPascalの宿題をやって頂くスレ

■丸投げOK
■全く分かってない阿呆も放置しないで優しく対応
■他言語はよそ逝け( ゚Д゚)ゴルァ
■DelphiもTurbo Pascalも完全対応

【本家】

URLリンク(www.borland.co.jp)

【前スレ】

スレリンク(tech板)

【関連スレ】

くだすれDelphi(超初心者用)その15
スレリンク(tech板)l50

Pascal の初心者用の質問・相談所
スレリンク(tech板)l50

【Delphi初心者】今から始めるDelphi Part01
スレリンク(tech板)l50


2:デフォルトの名無しさん
06/01/12 00:48:20
2getズサー

3:デフォルトの名無しさん
06/01/12 00:49:03
3getズザー

4:デフォルトの名無しさん
06/01/12 00:49:30
スレの趣旨に反するだろ
バカかお前

5:デフォルトの名無しさん
06/01/12 02:01:50
>前スレ978

URLリンク(kansai2channeler.hp.infoseek.co.jp)
今見たら49行目にいらんFormatが付いてたから消しといて。


6:taihenda
06/01/12 02:52:40
>5
ありがとうございます!!
Q2を表示させるためにはどうしたらいいんですか?
すぐに実行画面が消えてしまいます。

7:デフォルトの名無しさん
06/01/12 03:52:59
>6
可能性1.コマンドプロンプト(通称DOS窓)が理解できていない。
可能性2.49行目をFormatだけで無く、全部消している。
まあ、想定内だが。

1.なら、コマンドプロンプトでググるか、以下の内容のテキストファイルを解凍したフォルダに作成して、Project1.batって名前に変更し、ダブルクリックするよろし。
Project1
pause.
2.なら元にもどしといて。

8:taihenda
06/01/12 04:41:43
>7
2でした。
お陰で完了しました。ありがとうございます。
何だか自分でももう一度組んでみようという気になれました☆

9:デフォルトの名無しさん
06/01/12 07:32:28
うはwwwwwこんなスレあったのかwwwww

10:デフォルトの名無しさん
06/01/12 22:06:13
age

11:デフォルトの名無しさん
06/01/13 09:04:08
自然数 N が与えられたとき、
1 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Pascal で書くとどうなりますか?

例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。


12:デフォルトの名無しさん
06/01/13 21:46:33
for counter=1 to N do
begin
for counter=1 to N do
begin

end;
end;
まずこれが思い浮かんだ。

13:12
06/01/13 21:47:16
修正。

for 1 to N do
begin
for counter=1 to N do
begin

end;
end;

14:デフォルトの名無しさん
06/01/13 21:48:26
for i := 1 to N do
 for j := 1 to N do
 begin

 end;

だろ。


15:12
06/01/13 22:43:54
間違えた。

for counter1 := 1 to N do
begin
for counter2 := 1 to N do
begin

end;
end;

だった。

16:デフォルトの名無しさん
06/01/13 22:58:59
なにこのデジャヴ

17:12
06/01/14 00:10:11
はっ!!!人に見つかってしまった。

18:デフォルトの名無しさん
06/01/14 04:54:00
ここはアフォしかおらんのか

19:デフォルトの名無しさん
06/01/14 05:16:31
クオリティを求めるなら他言語スレ行ってください
CやJavaがお勧めです

20:デフォルトの名無しさん
06/01/14 05:26:26
>>18
うっさいボケ!自分もでけへんからひがんで荒らしてんのちゃうんか!
アホ↓↓

21:デフォルトの名無しさん
06/01/14 05:57:40
>>18
Pascal は教科書にしか出てこない研究用言語ですから
プロの実用に耐えません。
ここにいるのはアマチュア以下の人ばかりです。

22:デフォルトの名無しさん
06/01/14 06:06:16
今じゃPascal=Delphiみたいなもんだろ
objective-PascalとしてDelphiに上塗られて生きていくのさ

23:デフォルトの名無しさん
06/01/16 01:32:30
n個並べるなんて、階乗使って終わりだろ

24:デフォルトの名無しさん
06/01/16 12:32:34
>>23
個数がでるだけだろw

25:デフォルトの名無しさん
06/01/16 23:13:21
1〜nをn個並べるのには何通りあるかってnの階乗で終わりじゃないのか?
1〜nをn−1個並べるのには何通りあるかなら知らんけど
いや、nCn-1か

26:デフォルトの名無しさん
06/01/16 23:14:07
あぁ全部書き出すのか
忘れてくれwww

27:デフォルトの名無しさん
06/01/17 15:37:23
>>25,26
全部書き出されたかのチェックには良いかもしれない、と横からフォロー。

28:デフォルトの名無しさん
06/01/17 20:27:20
>21
本当のプログラマはPascalを使わない、ってのがあったな。
じゃあ何を使うのか? 21への宿題。

29:デフォルトの名無しさん
06/01/17 20:57:57
お前ら宿題やってやれw
誰もやらないから作ってみた↓

program test(input,output);
type
bb=array[1..100] of integer;
usee=array[1..100] of boolean;
var
b:bb;
use:usee;
n,i,p,count:integer;

begin
count:=0;
p:=0;
readln(n);
for i:=1 to n do
b[i]:=i;
for i:=1 to n do
use[i]:=false;
a(p,n,count,b,use);
end.

これに次のprocedureを付ければ多分使える↓

30:デフォルトの名無しさん
06/01/17 20:58:41
procedure a(p,x,count:integer;z:bb;m:usee);
var
i,l:integer;judge:boolean;
begin
count:=count+1;judge:=true;
for i:=1 to x do
begin
if m[i]=false then
begin
judge:=false;
end;end;
if judge=false then
begin
for i:=1 to x do
begin
if m[i]=false then
begin
z[count]:=i;
if count=x then
begin
for l:=1 to x do
write(z[l]);
end;
m[i]:=true;
a(i,x,count,z,m);
m[i]:=false;
end;end;end;
if count=x then
writeln;
end;


31:デフォルトの名無しさん
06/01/17 21:17:07
あと
>>Pascal は教科書にしか出てこない研究用言語ですから
>>プロの実用に耐えません。
>>ここにいるのはアマチュア以下の人ばかりです。
とか言ってるがpascalの宿題を書けなかったら
javaやC言語やdelhiでも書けるわけないだろw
結局はCUI仕様をGUI仕様にしただけだし

32:デフォルトの名無しさん
06/01/18 04:06:51
俺もpascalは使えるけどdelhiは無理。

33:デフォルトの名無しさん
06/01/18 16:38:43
よく分からないけどDelphiでグラフィックが動くプログラム誰か作ってくらはい。
線が移動しながら伸び縮むするとか、多角形とかダイヤみたいなマークが移動するだけのでもいいです。

34:デフォルトの名無しさん
06/01/18 17:14:03
>>33
必要としているのなら、必要としている人が作るのが一番。人に依頼する
のなら、それなりの対価としっかりした仕様書を出さないと相手にされない。

35:774RR
06/01/18 17:38:45
テスト墨。MaxNplus1はMaxNより1大きい数ね。TP懸かってるから、
標準Pにしてちょ。
Program Enjoy2chtest;
const MaxNplus1 = 5; MaxN = 4;
type
range = 1..MaxNplus1;
range0 = 0..MaxNplus1;
using = set of range;
var
data : array[range] of range0;
use : using;

procedure initialise;
var i : range;
begin
use := [];
for i := 1 to MaxNplus1 do data[i] := 0
end;

procedure display;
var i : range;
begin
for i := 1 to MaxN do write(data[i] : 4);
writeln
end;



36:774RR
06/01/18 17:39:59
これが都筑。部分反鋳型、習合型、再帰予備出といろいろ浸かってる。番兵定石もね。
procedure add(idx : range0);
var ii : range0;
begin
if idx = MaxNplus1 then display
else begin
while data[idx] < MaxNplus1 do begin
ii := data[idx];
repeat ii := succ(ii) until not (ii in use);
data[idx] := ii;
if ii < MaxNplus1 then begin
use := use + [ii];
add(succ(idx));
use := use - [ii]
end
end;
data[idx] := 0
end
end;

begin
initialise;
add(1)
end.


37:774RR
06/01/18 17:41:40
あ、これは>>11のχね。MaxN以下の任意の数に制限しても動作するけど、
その改造くらいはやってみよー

38:774RR
06/01/18 17:47:35
>28の宿題どうなった? >>21

まあ、永遠不滅の漢の言語だな、あれは。

39:デフォルトの名無しさん
06/01/18 20:22:49
initialise;
とinitialiseのprocedureなしでも作動した
あと>>11の宿題は>>29にもあるぞー


40:デフォルトの名無しさん
06/01/19 06:30:46
>initialise

sかよw

41:デフォルトの名無しさん
06/01/19 09:37:54
パスカルだからフランス語にしたんだろう。



42:774RR
06/01/19 12:40:06
>40
Que si?
普通の英語だおー

>39
処理系によっては、メモリ領域をOSから貰う時にゼロフィルするのがあるの。

43:& ◆D3ra0B2LiQ
06/01/19 23:14:18
すいません電卓のプログラミングの宿題が出ました
負数も扱えるようにしたいのですがどこに追加したらよろしいのでしょうか
下に与えられたものをすべて書きます
program calc(input, output);
var
NULLTOKEN: char; {文字がないことを表す文字コード}
CurrentToken: char; {現在処理中の字句}
result: integer; {値を評価した結果}
error: Boolean; {エラーが生じたことを示す論理型変数}

procedure GetToken; {字句があれば1字句読みこむ手続き}
var
ch: char;
begin
if eoln(input) then
CurrentToken := NULLTOKEN
else
begin
read(ch);
if ((ord('0') <= ord(ch)) and (ord(ch) <= ord('9')))
or (ch = '+') or (ch = '-') or (ch = '*') or (ch = '/')
or (ch = '(') or (ch = ')') then {読み込んだchが字句ならば,}
CurrentToken := ch {CurrentTokenにいれる.}
else
begin {そうでなければ, エラー.}
error := TRUE;
writeln('Not a token.')
end
end
end;

44:43
06/01/19 23:18:36
program calc(input, output);
var
NULLTOKEN: char; {文字がないことを表す文字コード}
CurrentToken: char; {現在処理中の字句}
result: integer; {値を評価した結果}
error: Boolean; {エラーが生じたことを示す論理型変数}

procedure GetToken; {字句があれば1字句読みこむ手続き}
var
ch: char;
begin
if eoln(input) then
CurrentToken := NULLTOKEN
else
begin
read(ch);
if ((ord('0') <= ord(ch)) and (ord(ch) <= ord('9')))
or (ch = '+') or (ch = '-') or (ch = '*') or (ch = '/')
or (ch = '(') or (ch = ')') then {読み込んだchが字句ならば,}
CurrentToken := ch {CurrentTokenにいれる.}
else
begin {そうでなければ, エラー.}
error := TRUE;
writeln('Not a token.')
end
end
end;
;

45:43
06/01/19 23:20:58
function expr: integer; {<式>を評価する関数}
var value: integer;
function term: integer; {<項>を評価する関数}
var value: integer;
function factor: integer; {<因子>を評価する関数}
var value: integer;
function digit: integer; {<数字>を評価する関数}
begin
if (ord('0') <= ord(CurrentToken)) and (ord(CurrentToken) <= ord('9'))
then {CurrentTokenが<数字>ならば,}
begin {その<数字>の順序数 - `0'の順序数}
digit := ord(CurrentToken) - ord('0');
GetToken {を, その数字の評価値とする.}
end
else {そうでなければ, エラー.}
begin
error := TRUE;
writeln('Error at digit.')
end
end;


46:43
06/01/19 23:22:37
begin {factor}
if CurrentToken = '(' then { <因子> が ( で始まるならば, }
begin
GetToken;
factor := expr; {それ以降を <式>として評価し,}
if CurrentToken = ')' then {その後に ) があることを確認する.}
GetToken
else { )がなければ, エラー.}
begin
error := TRUE;
writeln('Error at factor.')
end
end
else { <因子> が ( で始まらないならば,}
factor := digit { その因子は<数字>として評価.}
end;
begin {term}
value := factor; { <項> のはじめにあるはずの<因子>を評価する.}
while (CurrentToken = '*') or (CurrentToken = '/') do {その後, <乗除演算子>が}
case CurrentToken of {あるかぎり,<乗除演算子><因子>の繰り返し}
'*':
begin {として評価する.}
GetToken;
value := value * factor
end;
'/':
begin
GetToken;
value := value div factor
end end; term := value end;


47:43
06/01/19 23:23:38
begin {expr}
value := term; { <式> のはじめにあるはずの<項>を評価する.}
while (CurrentToken = '+') or (CurrentToken = '-') do {その後, <加減演算子>が }
case CurrentToken of {あるかぎり, <加減演算子><項>の繰り返し}
'+':
begin {として評価する.}
GetToken;
value := value + term
end;
'-':
begin
GetToken;
value := value - term
end end; expr := value end;

48:43
06/01/19 23:24:24
begin {main}
{初期化}
{定数}
NULLTOKEN := chr(0); {字句がないことを表す文字コード.}
{大域変数}
error := FALSE;
CurrentToken := NULLTOKEN;
{評価}
GetToken; {最初の字句があれば, 読み込む.}
if CurrentToken = NULLTOKEN
then
writeln('Nothing input.')
else
begin
result := expr; {字句の列を <式> として評価する.}
if not error
then {エラーが起きていなければ結果を表示する.}
writeln(result)
else
writeln('Error occured.')
end
end.

49:デフォルトの名無しさん
06/01/20 08:31:13
とりあえず
GetTokenの
if ((ord('0') <= ord(ch)) and (ord(ch) <= ord('9')))
or (ch = '+') or (ch = '-') or (ch = '*') or (ch = '/')
or (ch = '(') or (ch = ')') then
でマイナスの場合はエラーを出すようになってるからそこをマイナスでもいけるようにすればいい

その場合charだと一文字しか入らないから-1とかだと2文字を入れることになる

このプログラムの場合2桁の数字をいれてもエラーがでるな

50:43
06/01/20 23:29:26
すいません45のところ間違ってました。訂正します。
function expr: integer; {<式>を評価する関数}
var value: integer;
function term: integer; {<項>を評価する関数}
var value: integer;
function factor: integer; {<因子>を評価する関数}
var value: integer;
function constant:integer;
var value:integer;
function digit: integer; {<数字>を評価する関数}
begin{digit}
if (ord('0') <= ord(CurrentToken)) and (ord(CurrentToken) <= ord('9'))
then {CurrentTokenが<数字>ならば,}
begin {その<数字>の順序数 - `0'の順序数}
digit := ord(CurrentToken) - ord('0');
GetToken {を, その数字の評価値とする.}
end
else {そうでなければ, エラー.}
begin
error := TRUE;
writeln('Error at digit.')
end
end;
begin{consstant}
value:=digit;
while (ord('0') <= ord(CurrentToken))
and (ord(CurrentToken) <= ord('9')) do
begin
value:=value*10+digit;
end;
constant:=value;
end;

51:43
06/01/20 23:32:23
46も訂正しました。これなら2桁以上扱えるはずです。
マイナスは '-'ではいけないのでしょうか?
begin {factor}
if CurrentToken = '(' then { <因子> が ( で始まるならば, }
begin
GetToken;
factor := expr; {それ以降を <式>として評価し,}
if CurrentToken = ')' then {その後に ) があることを確認する.}
GetToken
else { )がなければ, エラー.}
begin
error := TRUE;
writeln('Error at factor.')
end
end
else { <因子> が ( で始まらないならば,}
factor := constant { その因子は<定数>として評価.}
end;



52:デフォルトの名無しさん
06/01/21 00:22:19
これじゃ駄目?

function constant:integer;
var value:integer;
 minus: boolean;

 function digit: integer;
 begin{digit}
  …
 end;
begin
 minus := CurrentToken='-';
 if minus then GetToken;
 value:=digit;
 while (ord('0') <= ord(CurrentToken)) and (ord(CurrentToken) <= ord('9')) do value:=value*10+digit;
 if minus then constant := -value else constant := value;
end;



53:43
06/01/21 22:47:29
たぶんできると思います。
学校じゃないとできないんで月曜日試してみます。
ありがとうございました。

54:デフォルトの名無しさん
06/01/23 05:22:35
二つの変数の値を交換する手続きを作成する。
2数を変数渡しにしたswap1(var a,b:real)
2数を値渡しにしたswap2(a,b:real)
簡単ですよね。

55:デフォルトの名無しさん
06/01/23 05:30:09
簡単ですね。

56:デフォルトの名無しさん
06/01/23 06:08:19
簡単すぎてヘドが出ますね。

57:デフォルトの名無しさん
06/01/23 09:49:36
値渡しはわかるが変数渡しはわからないな。
まあ俺も始めたばかりのど素人だけどな。

58:デフォルトの名無しさん
06/01/23 11:18:36
>>57
5分勉強してください^^

59:デフォルトの名無しさん
06/01/23 11:39:05
値渡しでは交換のしようがないと思うのだが。

60:デフォルトの名無しさん
06/01/23 16:09:19
練習なんだからいいんだろ

61:デフォルトの名無しさん
06/01/23 16:36:52
z:=a;
a:=b;
b:=z;
これでいいか?w

62:デフォルトの名無しさん
06/01/23 17:17:03
わかりました。ありがとうございます。

63:デフォルトの名無しさん
06/01/24 17:50:27
デルフィです。正多角形の頂点をすべて結んでダイアモンドパターンを描くプログラムらしいんですが、動きません。
どうやったら動きますか。修正していただけるとうれしいです。


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


64:デフォルトの名無しさん
06/01/24 17:51:28

procedure TForm1.Button1Click(Sender: TObject);
const max=50;
procedure line(x1,y1,x2,y2:integer);
begin canvas.MoveTo(x1,y1);canvas.lineTo(x2,y2) end;
procedure dia(x0,y0,r,n:integer)
var xs,ys:integer;{始点}
xe,ye:integer;{終点}
i,j:integer; {ループ変数}
t:real; {角度}
begin
t:=2*pi/n;
for i:=1 to n-1 do begin
xs := x0 + round(r*cos(t*i));
ys := y0 + round(r*sin(t*i));
for j:=i+1 to n do begin
xe := x0 + round(r*cos(t+j));
ye := y0 + round(r*sin(t+j));
line(xs,ys,xe,ye)
end
end
end;
begin
dia(300,20,70,11)
end;


65:デフォルトの名無しさん
06/01/24 17:59:53
>>63
xe := x0 + round(r*cos(t+j));
ye := y0 + round(r*sin(t+j));
ではなく
xe := x0 + round(r*cos(t*j));
ye := y0 + round(r*sin(t*j));
じゃね?

66:デフォルトの名無しさん
06/01/24 18:47:56
>>65
ありがとうございます。教科書を再確認したらちょうどそこで間違えてました。

だけど、いまだにvarの直後にカーソルが来てエラーが出るんですが
どこがまだ間違ってるとおもいますか?

>[エラー]Unit1.pas(31):';'が必要な場所に’VAR’があります
>[エラー]Unit1.pas(51):宣言が必要な場所にファイルの末尾があります
>[致命的エラー]Project2.dpr(5):'Unit1.pas'ユニットはコンパイルできませんでした

って言うエラーメッセージが出てきます

67:774RR
06/01/24 18:50:14
procedure dia(x0,y0,r,n:integer) ;←

68:デフォルトの名無しさん
06/01/24 18:58:26
>>67
ありがとうございます!
こんな簡単なことでつまづいてたなんて恥ずかしいです。

69:ささ ◆6KVcpBNXy.
06/01/27 01:44:14
パスカルの宿題がわかりません。どうやってつくったらいいかも…

こっちに誘導されてきました…↓下記にカキコあります↓
スレリンク(tech板:965-番)

お願いします

70:デフォルトの名無しさん
06/01/27 02:21:23
>>69
まずは平均点を求めるための式を考えてみましょう

71:デフォルトの名無しさん
06/01/27 02:28:33
なんかバカにしてるみたいなこと書いてしまったけど、
レスくれたらちゃんと答えに導くつもりなので

72:デフォルトの名無しさん
06/01/27 03:12:52
Score :array[0..1000] of integer; 
begin
writeln('入力得点の平均と偏差値を計算します'); writeln('入力後、負の数を入力すると…終了します。');
kazu :=0;
repeat
write('点数は?'); readln(data);
if data >= 0 then
begin 
kazu := kazu + 1; score[kazu] := data
end;
until data < 0;
goukei := 0;
for i := 1 to kazu do 
goukei := goukei + score[i];heikin :=goukei / kazu; goukei :=0;
for i := 1 to kazu do
goukei := goukei + Sqr(score[i]);hensa := sqrt(goukei /kazu - sqr(heikin));
writeln('点数  偏差値');
for i := 1 to kazu do
writeln(score[i]:4, 50 +10 * (score[i]-heikin)/ hensa:10:1);
writeln(' 平 均 =',heikin:5:1);  writeln('標準偏差=',hensa:5:1);
readln;
end.
・・・こ、このプログラミングは・・・!!!直すとこ多すぎて説明めんどい・・・!!!!!!
とりあえず、for文でもif文でもuntilでもいいんだけど、for 〜 do とかのあとが2行以上になる場合は必ずbegin
をつけろ。あと、3科目データが入力されてない。最後のreadlnもwritelnの間違い。
そこも直せ。話はそれからだ




73:ささ ◆6KVcpBNXy.
06/01/27 09:55:45
教科書のプログラミングをそのまま書いたのですが…
三科目のデータを入力する言葉?がわかりません。

var
Score :array[0..1000] of integer; i, kazu, data : integer; goukei, heikin, hensa : real;
begin
writeln('入力得点の平均と偏差値を計算します');
writeln('入力後、負の数を入力すると…終了します。');
kazu :=0;
repeat
write('点数は?');
readln(data);
if data >= 0 then
begin
kazu := kazu + 1;
score[kazu] := data
end
until data < 0;
goukei := 0;
for i := 1 to kazu do
goukei := goukei + score[i];
heikin :=goukei / kazu;


74:ささ ◆6KVcpBNXy.
06/01/27 09:56:33
goukei :=0;
for i := 1 to kazu do
goukei := goukei + Sqr(score[i]);
hensa := sqrt(goukei /kazu - sqr(heikin));
writeln('点数  偏差値');
for i := 1 to kazu do
writeln(score[i]:4, 50 +10 * (score[i]-heikin)/ hensa:10:1);
writeln(' 平 均 =',heikin:5:1);
writeln('標準偏差=',hensa:5:1);
readln;
end.

秋学期試験前に難しい宿題出て四苦八苦してます

75:デフォルトの名無しさん
06/01/27 21:08:45
ひとりの3教科の点数を一度にくれてやったらだめなのか

const
  kyouka = 3;
  Kazu = 10;
  kyoukaNames: Array[0..(kyouka-1)] of String = ('国語', '理科', '数学');
var
  ScoreArray: Array[0..(Kazu-1), 0..(kyouka-1)] of Integer;
  i, j, Sum1: Integer;
  Sum2: Extended;
begin
  writeln('入力得点の合計と教科ごとの平均を計算します');

  for i := 0 to (Kazu-1) do
  begin
    writeln(Format('%d人目の得点を入力してください', [i+1]));
    readln(ScoreArray[i, 0], ScoreArray[i, 1], ScoreArray[i, 2]);
    Sum1 := ScoreArray[i, 0]+ScoreArray[i, 1]+ScoreArray[i, 2];
    writeln(Format('%d人目の合計点は%d', [i+1, Sum1]));
  end;

  for j := 0 to (kyouka-1) do
  begin
    Sum2 := 0;
    writeln(KyoukaNames[j]+'の平均は');
    for i := 0 to (Kazu-1) do Sum2 := Sum2+ScoreArray[i, j];
    Sum2 := Sum2 / Kazu;
    writeln(Format('%.4f点です', [Sum2]));
  end;

  readln;
end.

76:ささ ◆6KVcpBNXy.
06/01/28 00:50:20
回答ありがとうございます。
constって習っていません
formatがDelphi6では未定義となります。
これだと終了しないのでは?。。

77:デフォルトの名無しさん
06/01/28 05:59:41
>>76
const は定数で、リードオンリー。
format が未定義と出るのは、uses に SysUtils ユニットが入ってないからと思われ。

78:ささ ◆6KVcpBNXy.
06/01/28 13:03:27
返答ありがとうございます。

formatと%dの意味がわかりません。
もしn人目の三科目の平均を表示するなら下記でよろしいですか?
writeln(Format('%d人目の得点を入力してください', [i+1]));
readln(ScoreArray[i, 0], ScoreArray[i, 1], ScoreArray[i, 2]);
Sum1 := ScoreArray[i, 0]+ScoreArray[i, 1]+ScoreArray[i, 2];
  heikin= sum1/3;
writeln(Format('%d人目の合計点は%d点', [i+1, Sum1]));
writeln(Format('%d人目の平均点は%d点',[i+1,heikin]));
end;

%.4fとはどういう意味ですか?
小数点以下が4桁も表示されるので表示しないようにしたいのですが…

'%.4f点です', [Sum2]));

79:デフォルトの名無しさん
06/01/28 13:21:35
ヘルプを見ずに質問するのがこのスレの流儀です。

80:デフォルトの名無しさん
06/01/28 13:25:18
むしろヘルプをみるとすぐに答えが分かってしまうため、ヘルプを見るのは御法度です。

81:ささ ◆6KVcpBNXy.
06/01/28 14:28:52
>>79-80ヘルプに載っていたのですね。安易に質問してすいません。
もしn人目の三科目の平均を表示するなら下記でよろしいですか?
writeln(Format('%d人目の得点を入力してください', [i+1]));
readln(ScoreArray[i, 0], ScoreArray[i, 1], ScoreArray[i, 2]);
Sum1 := ScoreArray[i, 0]+ScoreArray[i, 1]+ScoreArray[i, 2];
  heikin= sum1 / 3;
writeln(Format('%d人目の合計点は%d点', [i+1, Sum1]));
writeln(Format('%d人目の平均点は%d点',[i+1,heikin]));


82:75
06/01/28 16:10:47
>>78
わかんないんならムリに Format を使う必要ないだろう
ただ単に文字列の体裁を整えているだけなので、これは IntToStr 等に置き換えられる。

writeln(IntToStr(i+1)+'人目の合計点は'+IntToStr(Sum1)+'点'); 

>>81
n人目なら i じゃなくて n だけどな
小数点以下を必要としないときは3で割る部分を

var
  heikin: Integer;  //整数型で充分
begin
  heikin := Sum1 div 3;

などとする。こうすると整数の割り算になるから小数点以下は捨てられる。
こういう総論的なことは教科書が手元にあるんだったら載ってるはずだから確認してみれ
つか試験とか大丈夫なのか?

83:ささ ◆6KVcpBNXy.
06/01/28 16:38:49
>>82返答ありがとうございます。できました!
大学秋試験は大丈夫ですよ〜ノートとかきっちりとってますので。。。
ありがとうございました。

84:デフォルトの名無しさん
06/01/28 16:45:56
>>82
> writeln(IntToStr(i+1)+'人目の合計点は'+IntToStr(Sum1)+'点');
何故
  writeln(i+1, '人目の合計点は', Sum1, '点');
と書かないの?

85:75
06/01/28 16:48:45
>>84
えーだってこっちのほうが分かりいいと思って
引数の数が不定のFormatがわかんないっていうし

86:デフォルトの名無しさん
06/01/28 23:15:49
「フィボナッチ数列を生成するプログラムを、再帰呼び出しを使って作成したい。数列の長さを入力させ、その長さの結果を出力するように、プログラムしなさい。
フィボナッチ数列は、1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , … のような数列である。」
という問題です。
私は以下のようなプログラムを作りました。いちおう実行できるのですが、もっと簡潔な美しいプログラムが書けるのでしたら教えてくださると助かります。
よろしくお願いします。

program fibonacci(input,output);

var i,n : integer;

function fibonacci(n : integer):integer;

begin
if n>=3 then
begin
fibonacci:=fibonacci(n-1)+fibonacci(n-2)
end
else
begin
fibonacci:=1
end
end; { fibonacci }

begin
writeln('数列の長さを入力してください');
readln(n);
for i:=1 to n do
begin
write(fibonacci(i):3,', ')
end;
writeln;
end.

87:86
06/01/28 23:22:30
連続ですいません。こちらもよろしくお願いします。
「2個の整数値の最大公約数を計算するアルゴリズムを使って、n個の整数値を入力し、それらの最大公約数を出力するプログラムを
再帰呼び出しの形式で作れ。ただし、入力は最大10個までとし、値を0読み込む前までの正の整数を入力値とする。」
という問題です。
再帰呼び出しを使わないプログラムは以下のように書けたのですが、これをどう変換すればいいのかがわからなくて、、、orz

program gcd(input,output);

var p,q,n : integer;

function gcd(a,b: integer ):integer;

var tmp : integer ;

begin
if a < b then
begin
tmp := b ;
b := a;
a := tmp;
end;
repeat
tmp := b;
b := a mod b ;
a := tmp ;
until b = 0 ;
gcd := a;
end { gcd };


88:86
06/01/28 23:23:29
87のつづき


begin
n:=1;
repeat
writeln('整数値を入力してください。(',n:2,'回目)');
readln(q);
if (q > 0 ) then
begin
if ( n = 1 ) then
p:=q
else
p:=gcd(p,q);
n:=n+1;
end;
until ( n > 10 ) or ( q = 0 );
writeln('最大公約数は',p,'です。') ;
end.

89:774RR
06/01/28 23:23:43
Program fibonacci(input,output);
var i,n : integer;

function fibonacci(n : integer):integer;
begin
if n>=3 then fibonacci:=fibonacci(n-1)+fibonacci(n-2)
else fibonacci:=1
end; { fibonacci }

begin
writeln('数列の長さを入力してください');
readln(n);
for i:=1 to n do write(fibonacci(i):3,', ');
writeln
end.

複文を変えた程度で、ほとんどいじる所がない。
誰でも同じように書ける言語つーのがPascalつーかhぃると先生の流儀。

90:774RR
06/01/28 23:26:27
>87
AとBとCとのGCDは
(AとBとのGCD)とCとのGCD、って発想かと。
末尾再帰になりそうだから、ループに展開するのが普通じゃないかな。
(書いてみてないのでぼそっと)

91:デフォルトの名無しさん
06/01/28 23:35:25
function gcd(a, b: integer): integer;
begin
 if b = 0 then gcd := a
 else gcd := gcd(b, a mod b)
end;

92:86
06/01/28 23:54:02
program gcd(input, output);

var
i,x,answer : integer;

function gcd(a,b : integer):integer;

begin
if b=0 then gcd:=a
else gcd:=gcd(b,a mod b)
end; { gcd }

begin
i:=1;
repeat
writeln(i:2,'番目の値を入力');
readln(x);
if x>0 then
begin
if i=1 then
answer:=x
else
begin
answer:=gcd(answer,x);
i:=i+1
end;
end;
until (i>10) or (x=0);
writeln('最大公約数は',answer:3);
end.

93:86
06/01/28 23:55:01
(上のつづき)としたら、実行結果が

1番目の値を入力
10
1番目の値を入力
20
1番目の値を入力
30
1番目の値を入力
40
1番目の値を入力
50
1番目の値を入力
60
1番目の値を入力
70
1番目の値を入力
80
1番目の値を入力
0
最大公約数は 80

・・・orz


94:デフォルトの名無しさん
06/01/29 05:29:24
64の図形をウィンドウの端まで行くと、入射角=反射角で跳ね返る
っていうのを繰り返すように組むことってできますか?
例えばボタン1で図形が現われて、ボタン2で上記の動きを始めるみたいな・・・

95:デフォルトの名無しさん
06/01/29 15:36:24
3桁の整数を入力し、その英語読みを出力するようなプログラム
ってどう書くんですかまったくわかりませんorz

96:デフォルトの名無しさん
06/01/29 21:49:13
>>95
超適当だけど
program f(input, output);
var v: Integer;
procedure writeOne(d: Integer);
begin
 case d of
  0: begin end; 1: write('one'); 2: write('two');
  3: write('three'); 4: write('four'); 5: write('five');
  6: write('six'); 7: write('seven'); 8: write('eight');
  9: write('nine'); 10: write('ten'); 11: write('eleven');
  12: write('twelve'); 13: write('thirteen'); 14: write('fourteen');
  15: write('fifteen'); 16: write('sixteen'); 17: write('seventeen');
  18: write('eighteen'); 19: write('nineteen');
 end;
end;
begin
 readln(v);
 if v=0 then write('zero');
 if v>=100 then begin
  writeOne(v div 100); write(' hundred ');
  v := v mod 100;
 end;
 if v>=20 then begin
  case v div 10 of
   2: write('twenty '); 3: write('thirty '); 4: write('forty '); 5: write('fifty ');
   6: write('sixty '); 7: write('seventy '); 8: write('eighty '); 9: write('ninety ');
  end;
  v := v mod 10;
 end;
 writeOne(v); writeln;
end.

97:デフォルトの名無しさん
06/01/29 22:08:46
>>95
とりあえず作ってみた。

URLリンク(www.uploda.org)
pass:pascal

98:デフォルトの名無しさん
06/01/29 22:25:09
>>97
自己レス。

 TOneToNine = 0..9; ←型名と範囲がずれているけど、細かいことは気にしてはいけない
 TTwoTo99 = 0..99; ←型名と範囲がずれているのは、直すのを忘れたから

・DelphiとFreePascalでコンパイルできると思う。
・できたプログラムを実行すると、プログラムと同じディレクトリにある
 "hoeee.txt"を上書きしてしまう。ソースを読めばわかるだろうけど、一応注意ってことで。

99:デフォルトの名無しさん
06/01/29 22:49:15
>>95, >>96
ありがとうございます!!(感涙)
>>87のほうも是非お願いします!!

100:デフォルトの名無しさん
06/01/29 22:53:06
100

101:デフォルトの名無しさん
06/01/29 23:03:23
>>99
program g(input, output);

var
i,x,answer : integer;
function gcd(a,b : integer):integer;
begin
if b=0 then gcd:=a
else gcd:=gcd(b,a mod b)
end; { gcd }

begin
i:=1;
repeat
writeln(i:2,'番目の値を入力');
readln(x);
if x>0 then
begin
if i=1 then
answer:=x
else
answer:=gcd(answer,x);
i:=i+1
end;
until (i>10) or (x=0);
writeln('最大公約数は',answer:3);
readln;
end.


102:デフォルトの名無しさん
06/01/30 00:26:02
>>101
禿しくサンクスです!!
ありがたく拝見させていただいて学習します。

103:デフォルトの名無しさん
06/01/30 20:38:06
お、こんなとこで同級生ハケーン。
ガンガレ。

104:デフォルトの名無しさん
06/01/31 14:08:43
>PASCALの宿題は俺にやらせろ!!
やらせはせんよ!

105:デフォルトの名無しさん
06/02/05 02:10:49
入力された値を大きい順に並べて出力するプログラムのつもりで作りました。
0で入力停止のはずなのに止まらないし、なんか変な結果が出ます。
どこに問題があるのでしょうか??

program k(input,output);
var count,x,i : integer;
data : array[1..100]of integer;
procedure swap(a,b : integer);
var tmp : integer;
begin
readln(a,b);
if a<b then
begin
tmp:=a;
a:=b;
b:=tmp
end;
end; { swap }





106:デフォルトの名無しさん
06/02/05 02:11:20
105つづき

begin
count:=0;
readln(x);
while x<>0 do
begin
count:=count+1;
data[count]:=x;
for i:=(count-1) downto 1 do
begin
swap(data[i],data[i+1])
end;
readln(x);
end;
for i:=1 to count do
begin
writeln(data[i])
end;
end.

107:デフォルトの名無しさん
06/02/05 03:08:37
>>105
procedure swap(var a, b: integer); (* var で書き換え可能にする *)
var
 tmp : integer;
begin
(* readln(a,b); これは必要ない *)
 if a<b then
  :
  :

108:デフォルトの名無しさん
06/02/05 12:10:58
5次元のベクトル A と B のデータを読み込み、それらの和ベクトル C とそれらの内積の値 D を求めて出力するプログラムを作れ。
ベクトルの要素のデータ型は、整数、実数のどちらかに統一しなさい。データはキーボードから読み込むものとする。また、 writeln を用いて、データの型、入力のさせ方をメッセージの形で記述せよ。


これお願いします。
なんか俺プログラミングの教材読んでもとりあえず理解できたけど問題出されると解けないんですが、これってもうそっち方面の考える力がないんですかねえ。
他の理系科目は普通にこなせるんですが、離散もできないし。
数こなせば出来るようになんの?

109:デフォルトの名無しさん
06/02/05 18:36:30
ベクトルと内積というのがよくわからん・・・
数学的問題は基本的に苦手だが
とりあえず5次元だから
Data:array[1..n][1..n][1..n][1..n][1..n] of real;
型ってことか・・・?(笑)
AとB読み込んでA+BをCに入れて内積の計算 |a|*|b|*cosθ をDに入れて出力するだけなら
Data:array[1..4] of real;
でいいと思う

writeln('Aの入力');
readln(Data[1]);
writen('Bの入力');
readln(Data[2]):
Data[3]:=Data[1]+Data[2];
Data[4]:=ABS(Data[1])*ABS(Data[2])*COS(θ);
writeln('和ベクトル',Data[3]);
writeln('内積の値',Data[4]);

みたいな感じかな・・?
数学得意じゃないのでいまいちわからんからあとはがんばれ


110:デフォルトの名無しさん
06/02/05 20:19:47
>>108
とりあえず作ってみた。
URLリンク(www.uploda.org)

・入力のエラーチェックはしていない。
・ FiveVector1→A
 FiveVector2→B
 FiveVectorSum→C
 hoeee→D
という対応になってるんで、必要ならテキスト置換でも使って変換してくだちい。

111:デフォルトの名無しさん
06/02/05 20:21:21
111

112:105
06/02/05 21:19:38
>>107
ありがとうございます。ご指摘の通り直したら動きました。
ところで
procedure swap(var a, b: integer); (* var で書き換え可能にする *)
とありますが、varをつけるとプログラム本文のところで別の文字を使って使える
ということですか?
なんか実引数とか仮引数とかがわかってないことを見せつける質問ですいませんorz

113:デフォルトの名無しさん
06/02/06 02:31:16
ハローパスカル始めることにしたから、よろしく。

114:デフォルトの名無しさん
06/02/06 18:53:02
>>112
program none(output);
var a,b:integer;
procedure add(var a,b:integer);
begin
a := a + 1;
b := a + 2;
end;

begin
a:=2;
b:=3;
add(a,b);
writeln(a,b:2);
end.

ってしたら最終的にaが3で、bが5になってる。
procedure add(a,b:integer);
だったらadd(a,b)が実行されても値は変化しない。つまりaが2で、bが3。

115:デフォルトの名無しさん
06/02/06 19:09:04
それにしても暇だ。
大学一年生にもできそうでちょっと難しいような宿題が投下されないだろうか。

116:774RR
06/02/06 19:31:50
>115
じゃあCASLのアセンブラと仮装機械w

117:デフォルトの名無しさん
06/02/06 19:50:04
d
最初見たとき言葉遣いとhoeeeにうけましたw

118:115
06/02/06 22:56:00
>>116
調子こいてました(><

でも単純に機械語に翻訳するだけならなんとかなるのだろうか。
そこからプログラムを動かすってのが明らかに不可能です
本当にありがとうございました。

119:デフォルトの名無しさん
06/02/07 02:24:54
みんなのところもポインタで逆ポーランドの電卓つくるのがゴールかな?


120:デフォルトの名無しさん
06/02/07 05:03:24
>>119
は?バカ?

121:デフォルトの名無しさん
06/02/07 05:33:32
>>119
え?このスレってそんなレベル?

122:デフォルトの名無しさん
06/02/07 08:50:04
逆ポーランドってなんだ?

123:デフォルトの名無しさん
06/02/07 09:51:23
あっはっはっはw

124:774RR
06/02/07 12:16:18
逆ポーランドなつかすいな。
HPの電卓もかっこよかたな。

1 ENTER 2 + 3 * 4 - ....

125:デフォルトの名無しさん
06/02/07 13:29:25
ポインタをつかって逆ポーランドの電卓をつくってください。
識者の方どうかおねがいします(><)

126:デフォルトの名無しさん
06/02/07 17:59:15
電卓って?標準入力で入力していいのか?

127:774RR
06/02/07 18:34:57
手抜きで標準入力、文字列から数への変換も手抜きだ。
TP互換環境なら走るだろう。その壱

Program Enjoy2chCalc;
const MaxNplus1 = 5; MaxN = 4;
type
pstack = ^stackitem;
stackitem = record
data : real;
next : pstack
end;
var
stack : pstack;
s : string;
r : real;
i : longint;
toend : boolean;

procedure push(r : real);
var s : pstack;
begin
new(s);
s^.data := r;
s^.next := stack;
stack := s
end;


128:774RR
06/02/07 18:36:15
procedure pop(var r : real);
var s : pstack;
begin
if stack <> nil then begin
s := stack;
r := s^.data;
stack := s^.next;
dispose(s)
end else
writeln('Stack underrun.')
end;

procedure calc(opr : char);
var r1, r2 : real;
begin
pop(r2);
pop(r1);
case opr of
'+' : r2 := r1 + r2;
'-' : r2 := r1 - r2;
'*' : r2 := r1 * r2;
'/' : r2 := r1 / r2
end;
push(r2)
end;


129:774RR
06/02/07 18:38:30
procedure disp;
begin
if stack<>nil then writeln('>>', stack^.data)
else writeln('Stack underrun.')
end;

procedure initstack;
begin
new(stack);
stack^.data := 0;
stack^.next := nil
end;

procedure allclear;
var s : pstack;
begin
while stack<>nil do begin
s := stack.next;
dispose(stack);
stack := s
end;
initstack
end;


130:774RR
06/02/07 18:39:31
begin
initstack;
toend := false;
repeat
disp;
write('ENTER Number, +-*/, q-quit, c-clear, a-AC : '); readln(s);
if (length(s) = 1) and (s[1] in ['+','-','*','/','q','c','a']) then
case s[1] of
'+','-','*','/' : calc(s[1]);
'c' : pop(r);
'a' : allclear;
'q' : toend := true
end
else begin
val(s, r, i);
push(r)
end
until toend;
allclear;
dispose(stack)
end.


131:774RR
06/02/07 18:43:26
1
2
+
3
4
+
*
...
って感じに入力していくと逆ポな計算機になるよ。
スタックを線形リストで表現してるのが一応演習課題に則ってる。

本当なら、文字列→数の変換もスタックを使うんだが、めんどい。
そこまですると、電卓の+/-キー(符号反転キー)が二項演算子の-キーと
分かれている理由がよく理解できる。


132:デフォルトの名無しさん
06/02/07 18:44:36
procedure allclear;
var s : pstack;
begin
while stack<>nil do begin
s := stack.next;
dispose(stack);
stack := s
end;
initstack
end;


s := stack.next;
じゃなくて

s := stack^.next;
じゃない?

133:774RR
06/02/07 18:45:30
いけねえ、最初のconstは見なかった事にしてくれ。
前回投稿した消し残りだw

134:774RR
06/02/07 18:47:19
>132
その通りだけど、何でコンパイルできたんだろうw
拡張構文なのかコンパイラのバグかww

135:デフォルトの名無しさん
06/02/07 22:56:20
めちゃくちゃ初心者なのですが・・・。
問題聞いてもらってもよろしいでしょうか?

136:135
06/02/07 23:04:50
一応問題を書かせて頂きます。

1 一方向リストの中のp番目とNEXT(p)番目の位置の要素を交換するプログラムを
手続きを用いて書け。
関数NEXTの定義:リストLで位置pの直後の位置を返す関数
とありますが、NEXTという関数はPascalに標準であるのでしょうか?
私の使っているCPad for free pascalだとないと言われるのですが・・。

137:デフォルトの名無しさん
06/02/07 23:53:23
無いんじゃない?

138:デフォルトの名無しさん
06/02/07 23:57:04
>>137 ですよね・・。
ということは、自分でNEXT関数を自分で定義しろということですか?

139:デフォルトの名無しさん
06/02/08 00:02:10
いや、俺もそんな詳しくないけど聞いたことはないよね。
一方向リストってどういう構造なん?
ポインタで繋いでるなら別段難しいことはないと思うんだけど。

140:デフォルトの名無しさん
06/02/08 00:05:31
>>139
ポインタを使ったリスト構造のことだと思います。

141:デフォルトの名無しさん
06/02/08 00:16:52
type
list = ^listcell
listcell = record
e : element;
point : listCell;
end;

var
p : list;

みたいな感じに定義してlistcell型の要素が繋がってるんなら、たとえばp^.pointが
pの要素の次の位置を指しているんじゃないの?
なんだかいまいち俺には分からないんだ。
問題を全部書いてくれれば分かるかもしれない。
あれで全部?

142:デフォルトの名無しさん
06/02/08 00:24:02
双方向じゃないやつだな<一方向

143:デフォルトの名無しさん
06/02/08 00:27:39
えっと、あれで全部です・・・。
e:elementってelementってどういう変数か知りませんが、要素って
名前とかじゃだめですかね?

type
list=^listcell
listcell=record
name:string[10];
id:integer;
pointer:list
end;

var init,current:list;
datname,datid:string[10];

こんな感じでもいいかな?

144:デフォルトの名無しさん
06/02/08 00:28:28
>>142
じゃあ、ポインタとはまた違うものだってことでしょうか?
まったく習っていないのでわかりません。

145:デフォルトの名無しさん
06/02/08 00:29:32
type
list=^listcell
listcell=record
name:string[10];
id:integer;
pointer:list
end;

var init,current:list;
datname:string[10];
datid:integer;

に訂正


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5174日前に更新/280 KB
担当:undef