Pascalの宿題は俺にやらせろ!!Part2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
教育用(?)プログラムPascalの宿題をやって頂くスレ

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

【本家】

http://www.borland.co.jp/delphi/

【前スレ】

http://pc8.2ch.net/test/read.cgi/tech/1089719714

【関連スレ】

くだすれDelphi(超初心者用)その15
http://pc5.2ch.net/test/read.cgi/tech/1087823906/l50

Pascal の初心者用の質問・相談所
http://pc5.2ch.net/test/read.cgi/tech/1009903617/l50

【Delphi初心者】今から始めるDelphi Part01
http://pc5.2ch.net/test/read.cgi/tech/1062422335/l50
2デフォルトの名無しさん:2006/01/12(木) 00:48:20
2getズサー
3デフォルトの名無しさん:2006/01/12(木) 00:49:03
3getズザー
4デフォルトの名無しさん:2006/01/12(木) 00:49:30
スレの趣旨に反するだろ
バカかお前
5デフォルトの名無しさん:2006/01/12(木) 02:01:50
>前スレ978

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1432.lzh
今見たら49行目にいらんFormatが付いてたから消しといて。
6taihenda:2006/01/12(木) 02:52:40
>5
ありがとうございます!!
Q2を表示させるためにはどうしたらいいんですか?
すぐに実行画面が消えてしまいます。
7デフォルトの名無しさん:2006/01/12(木) 03:52:59
>6
可能性1.コマンドプロンプト(通称DOS窓)が理解できていない。
可能性2.49行目をFormatだけで無く、全部消している。
まあ、想定内だが。

1.なら、コマンドプロンプトでググるか、以下の内容のテキストファイルを解凍したフォルダに作成して、Project1.batって名前に変更し、ダブルクリックするよろし。
Project1
pause.
2.なら元にもどしといて。
8taihenda:2006/01/12(木) 04:41:43
>7
2でした。
お陰で完了しました。ありがとうございます。
何だか自分でももう一度組んでみようという気になれました☆
9デフォルトの名無しさん:2006/01/12(木) 07:32:28
うはwwwwwこんなスレあったのかwwwww
10デフォルトの名無しさん:2006/01/12(木) 22:06:13
age
11デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/13(金) 21:46:33
for counter=1 to N do
begin
for counter=1 to N do
begin

end;
end;
まずこれが思い浮かんだ。
1312:2006/01/13(金) 21:47:16
修正。

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

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

 end;

だろ。
1512:2006/01/13(金) 22:43:54
間違えた。

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

end;
end;

だった。
16デフォルトの名無しさん:2006/01/13(金) 22:58:59
なにこのデジャヴ
1712:2006/01/14(土) 00:10:11
はっ!!!人に見つかってしまった。
18デフォルトの名無しさん:2006/01/14(土) 04:54:00
ここはアフォしかおらんのか
19デフォルトの名無しさん:2006/01/14(土) 05:16:31
クオリティを求めるなら他言語スレ行ってください
CやJavaがお勧めです
20デフォルトの名無しさん:2006/01/14(土) 05:26:26
>>18
うっさいボケ!自分もでけへんからひがんで荒らしてんのちゃうんか!
アホ↓↓
21デフォルトの名無しさん:2006/01/14(土) 05:57:40
>>18
Pascal は教科書にしか出てこない研究用言語ですから
プロの実用に耐えません。
ここにいるのはアマチュア以下の人ばかりです。
22デフォルトの名無しさん:2006/01/14(土) 06:06:16
今じゃPascal=Delphiみたいなもんだろ
objective-PascalとしてDelphiに上塗られて生きていくのさ
23デフォルトの名無しさん:2006/01/16(月) 01:32:30
n個並べるなんて、階乗使って終わりだろ
24デフォルトの名無しさん:2006/01/16(月) 12:32:34
>>23
個数がでるだけだろw
25デフォルトの名無しさん:2006/01/16(月) 23:13:21
1〜nをn個並べるのには何通りあるかってnの階乗で終わりじゃないのか?
1〜nをn−1個並べるのには何通りあるかなら知らんけど
いや、nCn-1か
26デフォルトの名無しさん:2006/01/16(月) 23:14:07
あぁ全部書き出すのか
忘れてくれwww
27デフォルトの名無しさん:2006/01/17(火) 15:37:23
>>25,26
全部書き出されたかのチェックには良いかもしれない、と横からフォロー。
28デフォルトの名無しさん:2006/01/17(火) 20:27:20
>21
本当のプログラマはPascalを使わない、ってのがあったな。
じゃあ何を使うのか? 21への宿題。
29デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/17(火) 21:17:07
あと
>>Pascal は教科書にしか出てこない研究用言語ですから
>>プロの実用に耐えません。
>>ここにいるのはアマチュア以下の人ばかりです。
とか言ってるがpascalの宿題を書けなかったら
javaやC言語やdelhiでも書けるわけないだろw
結局はCUI仕様をGUI仕様にしただけだし
32デフォルトの名無しさん:2006/01/18(水) 04:06:51
俺もpascalは使えるけどdelhiは無理。
33デフォルトの名無しさん:2006/01/18(水) 16:38:43
よく分からないけどDelphiでグラフィックが動くプログラム誰か作ってくらはい。
線が移動しながら伸び縮むするとか、多角形とかダイヤみたいなマークが移動するだけのでもいいです。
34デフォルトの名無しさん:2006/01/18(水) 17:14:03
>>33
必要としているのなら、必要としている人が作るのが一番。人に依頼する
のなら、それなりの対価としっかりした仕様書を出さないと相手にされない。
35774RR:2006/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;

36774RR:2006/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.
37774RR:2006/01/18(水) 17:41:40
あ、これは>>11のχね。MaxN以下の任意の数に制限しても動作するけど、
その改造くらいはやってみよー
38774RR:2006/01/18(水) 17:47:35
>28の宿題どうなった? >>21

まあ、永遠不滅の漢の言語だな、あれは。
39デフォルトの名無しさん:2006/01/18(水) 20:22:49
initialise;
とinitialiseのprocedureなしでも作動した
あと>>11の宿題は>>29にもあるぞー
40デフォルトの名無しさん:2006/01/19(木) 06:30:46
>initialise

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

42774RR:2006/01/19(木) 12:40:06
>40
Que si?
普通の英語だおー

>39
処理系によっては、メモリ領域をOSから貰う時にゼロフィルするのがあるの。
43& ◆D3ra0B2LiQ :2006/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;
4443:2006/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;
;
4543:2006/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;
4643:2006/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;
4743:2006/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;
4843:2006/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デフォルトの名無しさん:2006/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桁の数字をいれてもエラーがでるな
5043:2006/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;
5143:2006/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デフォルトの名無しさん:2006/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;

5343:2006/01/21(土) 22:47:29
たぶんできると思います。
学校じゃないとできないんで月曜日試してみます。
ありがとうございました。
54デフォルトの名無しさん:2006/01/23(月) 05:22:35
二つの変数の値を交換する手続きを作成する。
2数を変数渡しにしたswap1(var a,b:real)
2数を値渡しにしたswap2(a,b:real)
簡単ですよね。
55デフォルトの名無しさん:2006/01/23(月) 05:30:09
簡単ですね。
56デフォルトの名無しさん:2006/01/23(月) 06:08:19
簡単すぎてヘドが出ますね。
57デフォルトの名無しさん:2006/01/23(月) 09:49:36
値渡しはわかるが変数渡しはわからないな。
まあ俺も始めたばかりのど素人だけどな。
58デフォルトの名無しさん:2006/01/23(月) 11:18:36
>>57
5分勉強してください^^
59デフォルトの名無しさん:2006/01/23(月) 11:39:05
値渡しでは交換のしようがないと思うのだが。
60デフォルトの名無しさん:2006/01/23(月) 16:09:19
練習なんだからいいんだろ
61デフォルトの名無しさん:2006/01/23(月) 16:36:52
z:=a;
a:=b;
b:=z;
これでいいか?w
62デフォルトの名無しさん:2006/01/23(月) 17:17:03
わかりました。ありがとうございます。
63デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/24(火) 18:47:56
>>65
ありがとうございます。教科書を再確認したらちょうどそこで間違えてました。

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

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

って言うエラーメッセージが出てきます
67774RR:2006/01/24(火) 18:50:14
procedure dia(x0,y0,r,n:integer) ;←
68デフォルトの名無しさん:2006/01/24(火) 18:58:26
>>67
ありがとうございます!
こんな簡単なことでつまづいてたなんて恥ずかしいです。
69ささ ◆6KVcpBNXy. :2006/01/27(金) 01:44:14
パスカルの宿題がわかりません。どうやってつくったらいいかも…

こっちに誘導されてきました…↓下記にカキコあります↓
http://pc8.2ch.net/test/read.cgi/tech/1135866929/965-

お願いします
70デフォルトの名無しさん:2006/01/27(金) 02:21:23
>>69
まずは平均点を求めるための式を考えてみましょう
71デフォルトの名無しさん:2006/01/27(金) 02:28:33
なんかバカにしてるみたいなこと書いてしまったけど、
レスくれたらちゃんと答えに導くつもりなので
72デフォルトの名無しさん:2006/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. :2006/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. :2006/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デフォルトの名無しさん:2006/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. :2006/01/28(土) 00:50:20
回答ありがとうございます。
constって習っていません
formatがDelphi6では未定義となります。
これだと終了しないのでは?。。
77デフォルトの名無しさん:2006/01/28(土) 05:59:41
>>76
const は定数で、リードオンリー。
format が未定義と出るのは、uses に SysUtils ユニットが入ってないからと思われ。
78ささ ◆6KVcpBNXy. :2006/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デフォルトの名無しさん:2006/01/28(土) 13:21:35
ヘルプを見ずに質問するのがこのスレの流儀です。
80デフォルトの名無しさん:2006/01/28(土) 13:25:18
むしろヘルプをみるとすぐに答えが分かってしまうため、ヘルプを見るのは御法度です。
81ささ ◆6KVcpBNXy. :2006/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]));
8275:2006/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. :2006/01/28(土) 16:38:49
>>82返答ありがとうございます。できました!
大学秋試験は大丈夫ですよ〜ノートとかきっちりとってますので。。。
ありがとうございました。
84デフォルトの名無しさん:2006/01/28(土) 16:45:56
>>82
> writeln(IntToStr(i+1)+'人目の合計点は'+IntToStr(Sum1)+'点');
何故
  writeln(i+1, '人目の合計点は', Sum1, '点');
と書かないの?
8575:2006/01/28(土) 16:48:45
>>84
えーだってこっちのほうが分かりいいと思って
引数の数が不定のFormatがわかんないっていうし
86デフォルトの名無しさん:2006/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.
8786:2006/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 };
8886:2006/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.
89774RR:2006/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ぃると先生の流儀。
90774RR:2006/01/28(土) 23:26:27
>87
AとBとCとのGCDは
(AとBとのGCD)とCとのGCD、って発想かと。
末尾再帰になりそうだから、ループに展開するのが普通じゃないかな。
(書いてみてないのでぼそっと)
91デフォルトの名無しさん:2006/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;
9286:2006/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.
9386:2006/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デフォルトの名無しさん:2006/01/29(日) 05:29:24
64の図形をウィンドウの端まで行くと、入射角=反射角で跳ね返る
っていうのを繰り返すように組むことってできますか?
例えばボタン1で図形が現われて、ボタン2で上記の動きを始めるみたいな・・・
95デフォルトの名無しさん:2006/01/29(日) 15:36:24
3桁の整数を入力し、その英語読みを出力するようなプログラム
ってどう書くんですかまったくわかりませんorz
96デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/29(日) 22:08:46
>>95
とりあえず作ってみた。

http://www.uploda.org/uporg299109.lzh.html
pass:pascal
98デフォルトの名無しさん:2006/01/29(日) 22:25:09
>>97
自己レス。

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

・DelphiとFreePascalでコンパイルできると思う。
・できたプログラムを実行すると、プログラムと同じディレクトリにある
 "hoeee.txt"を上書きしてしまう。ソースを読めばわかるだろうけど、一応注意ってことで。
99デフォルトの名無しさん:2006/01/29(日) 22:49:15
>>95, >>96
ありがとうございます!!(感涙)
>>87のほうも是非お願いします!!
100デフォルトの名無しさん:2006/01/29(日) 22:53:06
100
101デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/30(月) 00:26:02
>>101
禿しくサンクスです!!
ありがたく拝見させていただいて学習します。
103デフォルトの名無しさん:2006/01/30(月) 20:38:06
お、こんなとこで同級生ハケーン。
ガンガレ。
104デフォルトの名無しさん:2006/01/31(火) 14:08:43
>PASCALの宿題は俺にやらせろ!!
やらせはせんよ!
105デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/05(日) 12:10:58
5次元のベクトル A と B のデータを読み込み、それらの和ベクトル C とそれらの内積の値 D を求めて出力するプログラムを作れ。
ベクトルの要素のデータ型は、整数、実数のどちらかに統一しなさい。データはキーボードから読み込むものとする。また、 writeln を用いて、データの型、入力のさせ方をメッセージの形で記述せよ。


これお願いします。
なんか俺プログラミングの教材読んでもとりあえず理解できたけど問題出されると解けないんですが、これってもうそっち方面の考える力がないんですかねえ。
他の理系科目は普通にこなせるんですが、離散もできないし。
数こなせば出来るようになんの?
109デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/05(日) 20:19:47
>>108
とりあえず作ってみた。
http://www.uploda.org/uporg304927.lzh.html

・入力のエラーチェックはしていない。
・ FiveVector1→A
 FiveVector2→B
 FiveVectorSum→C
 hoeee→D
という対応になってるんで、必要ならテキスト置換でも使って変換してくだちい。
111デフォルトの名無しさん:2006/02/05(日) 20:21:21
111
112105:2006/02/05(日) 21:19:38
>>107
ありがとうございます。ご指摘の通り直したら動きました。
ところで
procedure swap(var a, b: integer); (* var で書き換え可能にする *)
とありますが、varをつけるとプログラム本文のところで別の文字を使って使える
ということですか?
なんか実引数とか仮引数とかがわかってないことを見せつける質問ですいませんorz
113デフォルトの名無しさん:2006/02/06(月) 02:31:16
ハローパスカル始めることにしたから、よろしく。
114デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/06(月) 19:09:04
それにしても暇だ。
大学一年生にもできそうでちょっと難しいような宿題が投下されないだろうか。
116774RR:2006/02/06(月) 19:31:50
>115
じゃあCASLのアセンブラと仮装機械w
117デフォルトの名無しさん:2006/02/06(月) 19:50:04
d
最初見たとき言葉遣いとhoeeeにうけましたw
118115:2006/02/06(月) 22:56:00
>>116
調子こいてました(><

でも単純に機械語に翻訳するだけならなんとかなるのだろうか。
そこからプログラムを動かすってのが明らかに不可能です
本当にありがとうございました。
119デフォルトの名無しさん:2006/02/07(火) 02:24:54
みんなのところもポインタで逆ポーランドの電卓つくるのがゴールかな?
120デフォルトの名無しさん:2006/02/07(火) 05:03:24
>>119
は?バカ?
121デフォルトの名無しさん:2006/02/07(火) 05:33:32
>>119
え?このスレってそんなレベル?
122デフォルトの名無しさん:2006/02/07(火) 08:50:04
逆ポーランドってなんだ?
123デフォルトの名無しさん:2006/02/07(火) 09:51:23
あっはっはっはw
124774RR:2006/02/07(火) 12:16:18
逆ポーランドなつかすいな。
HPの電卓もかっこよかたな。

1 ENTER 2 + 3 * 4 - ....
125デフォルトの名無しさん:2006/02/07(火) 13:29:25
ポインタをつかって逆ポーランドの電卓をつくってください。
識者の方どうかおねがいします(><)
126デフォルトの名無しさん:2006/02/07(火) 17:59:15
電卓って?標準入力で入力していいのか?
127774RR:2006/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;
128774RR:2006/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;
129774RR:2006/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;
130774RR:2006/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.
131774RR:2006/02/07(火) 18:43:26
1
2
+
3
4
+
*
...
って感じに入力していくと逆ポな計算機になるよ。
スタックを線形リストで表現してるのが一応演習課題に則ってる。

本当なら、文字列→数の変換もスタックを使うんだが、めんどい。
そこまですると、電卓の+/-キー(符号反転キー)が二項演算子の-キーと
分かれている理由がよく理解できる。
132デフォルトの名無しさん:2006/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;
じゃない?
133774RR:2006/02/07(火) 18:45:30
いけねえ、最初のconstは見なかった事にしてくれ。
前回投稿した消し残りだw
134774RR:2006/02/07(火) 18:47:19
>132
その通りだけど、何でコンパイルできたんだろうw
拡張構文なのかコンパイラのバグかww
135デフォルトの名無しさん:2006/02/07(火) 22:56:20
めちゃくちゃ初心者なのですが・・・。
問題聞いてもらってもよろしいでしょうか?
136135:2006/02/07(火) 23:04:50
一応問題を書かせて頂きます。

1 一方向リストの中のp番目とNEXT(p)番目の位置の要素を交換するプログラムを
手続きを用いて書け。
関数NEXTの定義:リストLで位置pの直後の位置を返す関数
とありますが、NEXTという関数はPascalに標準であるのでしょうか?
私の使っているCPad for free pascalだとないと言われるのですが・・。
137デフォルトの名無しさん:2006/02/07(火) 23:53:23
無いんじゃない?
138デフォルトの名無しさん:2006/02/07(火) 23:57:04
>>137 ですよね・・。
ということは、自分でNEXT関数を自分で定義しろということですか?
139デフォルトの名無しさん:2006/02/08(水) 00:02:10
いや、俺もそんな詳しくないけど聞いたことはないよね。
一方向リストってどういう構造なん?
ポインタで繋いでるなら別段難しいことはないと思うんだけど。
140デフォルトの名無しさん:2006/02/08(水) 00:05:31
>>139
ポインタを使ったリスト構造のことだと思います。
141デフォルトの名無しさん:2006/02/08(水) 00:16:52
type
list = ^listcell
listcell = record
e : element;
point : listCell;
end;

var
p : list;

みたいな感じに定義してlistcell型の要素が繋がってるんなら、たとえばp^.pointが
pの要素の次の位置を指しているんじゃないの?
なんだかいまいち俺には分からないんだ。
問題を全部書いてくれれば分かるかもしれない。
あれで全部?
142デフォルトの名無しさん:2006/02/08(水) 00:24:02
双方向じゃないやつだな<一方向
143デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/08(水) 00:28:28
>>142
じゃあ、ポインタとはまた違うものだってことでしょうか?
まったく習っていないのでわかりません。
145デフォルトの名無しさん:2006/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;

に訂正
146141:2006/02/08(水) 00:40:57
そっから

new(init);
new(current);
init^pointer := current;

みたいな感じで繋げていくんだよな?
そのあと値を入れていったとする。

>1 一方向リストの中のp番目とNEXT(p)番目の位置の要素を交換するプログラムを
>手続きを用いて書け。
>関数NEXTの定義:リストLで位置pの直後の位置を返す関数

ってことだけど、例えばp=1番目の直後の位置ってのはこの例でいくと
init^.pointerが指してるもののことじゃないの?
あと交換するだけなら要素の内容をレコード型変数かなにかに一旦格納して
入れ替えればいいんじゃないかと思うんだけど、どのあたりを俺は勘違いしているのか。
147デフォルトの名無しさん:2006/02/08(水) 00:48:50
>>146
> そっから
> new(init);
> new(current);
> init^pointer := current;
> みたいな感じで繋げていくんだよな?
> そのあと値を入れていったとする。
この部分はわかります。

next関数に関してですが、p=1の場合と最後の時、それから途中の場合で
場合わけしなければいけないと思うのですが、
入れ替える位置というのが名前とか、idだとできると思うんですがこの問題の場合
p番目といわれるとわかりません・・・。
148デフォルトの名無しさん:2006/02/08(水) 00:51:39
あ、while current^.pointer <> nil do begin
でまわしてるときに、
n:=n+1していけばいいのかな?
149141:2006/02/08(水) 00:59:43
n := n + 1;
でいいだろうね。
それとnext関数を最初と最後で場合わけしないといけないってことだけど、
最初と最後になにも入ってないダミーセルを配置しておけば例外処理を
行わなくてもできるんじゃない?
つまり実際に値を格納しておくものよりも二つぶん多めにnewしとく。
150デフォルトの名無しさん:2006/02/08(水) 01:19:17
>>149
ダミーセルをつくるのはたぶんだめっていわれます。
151デフォルトの名無しさん:2006/02/08(水) 01:57:34
とりあえず、リストの作成と書き出しをやってみましたが、終了条件を'end'にしているのに
endで終わらない・・・。

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

begin
new(init);
current:=init;
write('名前を入力してください'); readln(datname);
write('IDを入力してください'); readln(datid);
while datname <> 'end' do begin
current^.name:=datname;
current^.id:=datid;
new(current^.pointer);
current:=current^.pointer;
write('名前を入力してください: '); readln(datname);
write('IDを入力してください: '); readln(datid);
end;
current^.pointer:=nil;
{リストの書き出し}
current:=init;
while current^.pointer <> nil do begin
write(current^.name,' ',current^.id);
current:=current^.pointer
end;
writeln
end.
152デフォルトの名無しさん:2006/02/08(水) 02:11:37
なんかいろいろセミコロンが抜けてるように見えるんだけど
153デフォルトの名無しさん:2006/02/08(水) 02:12:25
直りました。


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

begin
new(init);
current:=init;
write('名前を入力してください: '); readln(datname);
current^.name:=datname;
while datname <> 'end' do begin
write('IDを入力してください: '); readln(datid);
current^.id:=datid;
new(current^.pointer);
current:=current^.pointer;
write('名前を入力してください: '); readln(datname);
current^.name:=datname
end;
current^.pointer:=nil;
{リストの書き出し}
current:=init;
while current^.pointer <> nil do begin
write(current^.name,' ',current^.id,' ');
current:=current^.pointer
end;
writeln
end.
154デフォルトの名無しさん:2006/02/08(水) 02:14:15
問題はここからですね。入れ替える位置pを入力して、p番目の要素とp番目の次の
要素を入れ替えなさい。
155デフォルトの名無しさん:2006/02/08(水) 12:31:22
できない・・・。currentの前を指すpreviousを用意して
currentとpreviousのpointerを入れ替えればできるか思ったのですが
無限ループになってしまいます。
削除と挿入ならできるのに・・。
156774RR:2006/02/08(水) 12:32:36
この手の課題でリストの頭と尻尾にダミーをいれておいて、
必ず3個以上の要素が存在するようにするのは
極普通のプログラミングテクニックで、やらないほうが変だと思うが…

「次」を示すフィールドがnextだとするね。
p-1番目の要素を見つける所から始める。
これはwhile文で頭から律儀に数えるしかない。

その上で、

ppred ← p-1番目の要素を指すポインタ
pp:=ppred^.next ← p番目の要素を指すポインタ
psucc:=pp^.next ← p+1番目の要素を指すポインタ

をまずやっとく。

pwork := psucc^.next;
ppred^.next := psucc;
psucc^.next := pp;
pp^.next := pwork;

これでppred->psucc->pp->元のpsuccの次って順序になった。
psucc, pp, ppred, pworkは全部局所変数でおけ。

>146
record型のデータの部分がでかい場合、コピするのにマシンサイクルを
使い過ぎる。簡単に張り替えられるのがリストの利点よん。
157デフォルトの名無しさん:2006/02/08(水) 19:46:04
ありがとうございます。
currentとpreviousとtempのほかにもうひとつ必要だったのですか。
そうすると、メインプログラムも変えないとだめってことでしょうか?
158デフォルトの名無しさん:2006/02/08(水) 19:54:31
メイン変えなくてもできますね。とりあえず、できました。次を示すフィールドをpointerとして
ppred・・previous
pp・・current
psucc・・next
pwork・・tempになってます。

procedure change;
var p,n:integer;
previous,temp,next:list;
begin
n:=1;
write('入れ替える位置を指定しなさい'); readln(p);
current:=init;
while current^.pointer <> nil do begin
previous:=current;
current:=current^.pointer;
next:=current^.pointer;
n:=n+1;
if n=p then begin
temp:=next^.pointer;
previous^.pointer:=next;
next^.pointer:=current;
current^.pointer:=temp
end;
end;
current:=init;
while current^.pointer <> nil do begin
write(current^.name,' ',current^.id,' ');
current:=current^.pointer
end;
writeln
end;
159774RR:2006/02/08(水) 20:44:27
手続きを仕えってなら、こんなのはどうだ?
Program Enjoy2chList;
type
plist = ^listitem;
listitem = record
data : string;
next : plist
end;
var
top, tail : plist;
s : string;
toend : boolean;

procedure addtolist(s : string);
var p : plist;
begin
new(p);
p^.data := s;
p^.next := top^.next;
top^.next := p
end;
160774RR:2006/02/08(水) 20:45:13
procedure exchange(pprev : plist);
var pnext, ptemp : plist;
begin
if pprev<>nil then begin
ptemp := pprev^.next;
pnext := ptemp^.next;
if pnext <> tail then begin
ptemp^.next := pnext^.next;
pnext^.next := ptemp;
pprev^.next := pnext
end else
writeln('The item is at the tail of the list...')
end
end;

function findprev(key : string) : plist;
var p : plist;
begin
tail^.data := key;
p := top;
while p^.next^.data <> key do p := p^.next;
if p^.next <> tail then
findprev := p
else begin
writeln(key, ' is not found ... Orz');
findprev := nil
end
end;
161774RR:2006/02/08(水) 20:45:49
procedure disp;
var p : plist;
i : integer;
begin
p := top^.next;
i := 0;
while p<>tail do begin
i := succ(i);
writeln(i, ' ', p^.data);
p := p^.next
end
end;

procedure initlist;
begin
new(top);
new(tail);
top^.next := tail;
tail^.next := nil
end;

162774RR:2006/02/08(水) 20:46:44
procedure disposelist;
var p : plist;
begin
p := top;
while top<>nil do begin
p := top^.next;
dispose(top);
top := p
end
end;
163774RR:2006/02/08(水) 20:47:23
begin
initlist;
toend := false;
repeat
write('ENTER Any word to add or NULL to quit: '); readln(s);
if s='' then toend := true
else begin
addtolist(s);
disp
end
until toend;
toend := false;
repeat
write('ENTER Any word to exchange or NULL to quit: '); readln(s);
if s='' then toend := true
else begin
exchange(findprev(s));
disp
end
until toend;
disposelist
end.
164デフォルトの名無しさん:2006/02/08(水) 20:53:39
読まずにすまそ。壱から書く方がらくなんで…
粘着もすまそでつ。
最近もの書きばっかやっているんで
たまにプログラムを書かないと脳が腐る ●rz
165774RR:2006/02/08(水) 20:54:35
↑いけねえハン忘れた orz
ともかく帰依まつ
166デフォルトの名無しさん:2006/02/08(水) 20:57:01
ありがとうございます。
この問題はもう解けました。
次の問題は、カーソルによるリスト構造の実現で、INSERT、DELETE,配列SPACEの全
セルを使用可能スペースリストにつなぐinitializeの手続きにエラーチェックを加え、メインプログラム
にて確認しなさい。という問題なのですが、これからそれぞれの手続きを書きますのでよろしく
お願いします。
参考:ttp://www.elect.chuo-u.ac.jp/automount/tsuki/Tsuki-lab/tsuki/Chap-2/2.4.pdf
これはC?で書いてあります。
167デフォルトの名無しさん:2006/02/08(水) 21:01:46
まず、基本的な型宣言から
var
SPACE:array[1..maxlegth] of record
element:elementtype;
next:integer
end

elementtypeって何?って感じです・・・。

次にセルを移動するmove関数
function move(var p,q:integer):boolean;
var temp:integer;
begin
if p=0 then begin
writeln('セルがない');
return(false) {retuenってなに?}
end
else begin
temp:=q;
q:=p;
p:=SPACE[q].next:=temp;
retuen(true)
end
end;
168デフォルトの名無しさん:2006/02/08(水) 21:11:53
手続きINSERT
procedure INSERT(x:elementtype;p:position;var L:LIST);
begin
if p=0 then begin{最初の位置に挿入}
if move(available,L) then
SPACE[L].element:=x
end
else{最初以外の位置に挿入}
if move(available,SPACE[p].next)then
{xのセルをSPACE[p].nextがさしている}
SPACE[SPACE[p].next].element:=x
end;{INSERT}

次に手続きDELETE
procedure DELETE(p:position;var L:LIST);
begin
if p=0 then
move(L,available)
else
move(SPACE[p].next,available)
end;{DELETE}

最後に手続きinitialize
procedure initialize;
var
i:integer;
begin
for i:=mazsize-1 downto 1 do
SPACE[i].next:=i+1;
available:=1;
SPACE[maxsize].next:=0
end;{inisialize}
169デフォルトの名無しさん:2006/02/09(木) 16:05:59
誰か識者の方、166-168の問題解いてもらえませんか?
よろしくお願いします。
170デフォルトの名無しさん:2006/02/10(金) 12:46:42
与えられた自然数 n(n>=3) に対し、正n角形とその対角線を表示するプログラムを作れ。
ただし、Readlnでnの値を読み込んでから作図するようにせよ。

TopPascalのこのような課題が出ました。
どうか皆様の力をお貸しください。
171デフォルトの名無しさん:2006/02/16(木) 09:43:19
170に答えてください。お願いします。
172デフォルトの名無しさん:2006/02/16(木) 10:08:26
>>171
お前は1週間何やってたんだと小一時間説教してやる。
173デフォルトの名無しさん:2006/02/16(木) 11:18:23
そろそろ説教も終わった頃かね
TopPascalもコマンドラインで描画の方法も知らんけど、
Delphi で n 角形の各頂点の位置なら

procedure GetApex(ApexCount: Integer;// 頂点の数
 Radius: Integer;                              // 外接円の半径
 Center: TPoint;                              // 外接円の中心
 var Apexes: array of TPoint);            // 結果
var
 i: Integer;
 CurAngle: Double;
begin
 // 初期値
 CurAngle   := 0;

 for i := 0 to ApexCount - 1 do
 begin
  Apexes[i].X := Center.X + Trunc(Radius * Cos(CurAngle));
  Apexes[i].Y := Center.Y + Trunc(Radius * Sin(CurAngle));
  CurAngle    := CurAngle + 2 * PI / ApexCount;
 end;
end;

てけとーに真似してやってみれ
174デフォルトの名無しさん:2006/02/16(木) 20:41:13
ありがたいのですが、Delpiってのはわからないんで…。
できればどなたかコピペしてランすればできるのを提供していただけないでしょうか?
175デフォルトの名無しさん:2006/02/16(木) 21:26:19
プギャ━━━m9。゚゚(゚^Д^≡^Д^゚)゚゚。9m━━━━!!!!
176デフォルトの名無しさん:2006/02/17(金) 00:14:19
デルピ
177デフォルトの名無しさん:2006/02/17(金) 02:40:34
もうデルピーは居ないんだよ・・・
178デフォルトの名無しさん:2006/02/17(金) 05:12:41
次はデルピーって言うのか出るのが楽しみだ(ノ´∀`*)
179デフォルトの名無しさん:2006/02/20(月) 01:59:19
「■全く分かってない阿呆も放置しないで優しく対応」という
ことに甘えまして、宜しくお願いいたします。

文字列型(あくまで)で、00〜ffに対し、
最終integer型で0〜255に変換したいのですが・・。
たとえば、

var
a:string;
b:integer;
begin
a:='2f';




write(b);
end.

ここでのCRT出力を
「47」
としたい訳です。
どのような手法で可能でしょうか?ご教示下さい。
180デフォルトの名無しさん:2006/02/20(月) 08:45:30
0-fの文字を0-15の整数に変換する関数hogeを書く。
hogeを使って一文字づつ変換して16倍するループを書く。
181デフォルトの名無しさん:2006/02/20(月) 19:40:25
>>180
有り難うございます、一寸やってみます。
182デフォルトの名無しさん:2006/02/22(水) 01:09:37
こんなのどうですか。

function HexToInt(const S: string): Integer;
const
 Table: array['0'..'F'] of Integer =
  (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
  -1, 10, 11, 12, 13, 14, 15);
var
 I: Integer;
begin
 Result := 0;
 for I := 1 to Length(S) do
  Result := Result shl 4 + Table[UpCase(S[I])];
end;
183デフォルトの名無しさん:2006/02/22(水) 04:56:14
解析してアセンブラまで戻すにはするにはどうしたらいいですか?
184デフォルトの名無しさん:2006/02/22(水) 10:52:30
ファイト
185デフォルトの名無しさん:2006/02/24(金) 19:58:02
一発
186デフォルトの名無しさん:2006/03/24(金) 06:02:22
―u
187デフォルトの名無しさん:2006/04/11(火) 17:32:22
時、分、秒で表した時間の和を計算するプログラムを作成したい。 但し、以下の条件を満たすように作成し、
プログラムと適当なデータを入力した結果と一緒に提出せよ。

1. データは日、時間、分、秒を表す整数型のフィールド名 day, hour, minute, second のレコード型で定義し、
レコード名を time とせよ。プログラム名を Toi2 とし、 秒と分の計算課程は同一であるため、
その個所は手続きを使って表現せよ。
2. 入力として、時、分、秒の 3個のデータを 2セット入力し、その和を出力せよ。
3. もし、 hour の値が 24 以上であれば day に1の値を、 24未満であれば零にせよ。
188デフォルトの名無しさん:2006/04/11(火) 17:34:13
フィボナッチ数列の項は、その直前の連続する二つの項の和である。

f( n ) = f( n - 1 ) + f( n - 2 )

但し、 f(0) = 0, f(1) = 1 である。

フィボナッチ数列の連続する項の差の比

z(n) = { f( n - 1 ) - f( n - 2 ) }/ { f( n ) - f( n - 1 ) }

は、 n が大きくなれば、ある値に収束する。この値の近似値を求める プログラムを書き、その値を示せ。この値は黄金分割比と呼ばれる。

プログラム名を Toi3 とし、フィボナッチ数列は関数 fibonacci を作って求め、項は配列に表せ。数列は 100項まで とする。

1. まず f(30)の項まで求めz(n)の値を出力させるプログラムを作り、その値が 収束していく様子を出力して確かめよ。
2. 次に、1.のプログラムを書き換えて、収束判定のために定数 dif = 1.0 e -6 を宣言し、
連続する z(n-1),z(n) の差の 絶対値が dif 以下になったとき、収束したとして計算を終了する プログラムを作り、
プログラムとその計算結果を提出せよ。
もし、n=100でも 収束しない場合、z(100)の値と”収束しなかった”文を出力せよ。
189774RR:2006/04/11(火) 18:52:31
Program Toi2;
type
time = record
day, hour, minute, second : integer
end;
var t1, t2, t3 : time;

procedure add60(a, b : integer; var c : integer; var carry : boolean);
(* a + b must be less than 120 *)
begin
c := a + b;
carry := (c >= 60);
c := c mod 60
end;

begin
(* データを読む1 -> t1 *)(* データを読む2 -> t2 *)
add60(t1.second, t2.second, t3.second, cry);
add60(t1.minute, t2.minute + ord(cry), t3.minute, cry);
with t3 do begin
hour := t1.hour + t2.hour + ord(cry);
if hour >= 24 then begin
day := 1; hour := hour -24
end else
day := 0
end;
(* 表示 *)
end.
190デフォルトの名無しさん:2006/04/11(火) 19:43:31
>>189
carryとcryをintegerにしてcarry:=(c>=60);をcarry:=c div 60;にすれば
(* a + b must be less than 120 *)の注意書きも要らなくなると思う。

そうすれば+ord(cry)をそのまま+cryに出来るし。
191デフォルトの名無しさん:2006/04/12(水) 12:14:53
>>189
cryって何ですか?
ほかにもコンパイルエラー出てるんですけど?
192190:2006/04/12(水) 13:40:29
>>191
少しは自分で考えて。宣言がいくつか足りないのと、初期化やデータの
入出力をどうするのかは>>187に出ていないのでその部分は自分で書く
必要がある。
193188:2006/04/12(水) 15:19:52
program Toi3(input,output);

var
i,n: integer;
f,z: array [0..1000] of integer;

function fibonacci(n : integer):integer;

begin
case n of
3..1000 : fibonacci:=fibonacci(n-1)+fibonacci(n-2);
1,2 : fibonacci:=1;
0 : fibonacci:=0
end; { case }
end;

begin
write('n=');
readln(n);
for i:=0 to n do
begin
f[i]:=fibonacci(i);
z[i]:=(f[n-1]-f[n-2])div(f[n]-f[n-1]);
writeln('f(',i:2,')=',f[i]:1,', ');
writeln();
writeln('z(',i:2,')=',z[i]:1,', ');
end;
end.

というのを作ったのですが、コンパイルはできるのに値を入力しても答えが出力されませんorz
194188:2006/04/12(水) 15:20:31
program Toi3(input,output);

var
i,n: integer;
f,z: array [0..1000] of integer;

function fibonacci(n : integer):integer;

begin
case n of
3..1000 : fibonacci:=fibonacci(n-1)+fibonacci(n-2);
1,2 : fibonacci:=1;
0 : fibonacci:=0
end; { case }
end;

begin
write('n=');
readln(n);
for i:=0 to n do
begin
f[i]:=fibonacci(i);
z[i]:=(f[n-1]-f[n-2])div(f[n]-f[n-1]);
writeln('f(',i:2,')=',f[i]:1,', ');
writeln();
writeln('z(',i:2,')=',z[i]:1,', ');
end;
end.

というのを作ったのですが、コンパイルはできるのに値を入力しても答えが出力されませんorz
195188:2006/04/12(水) 15:29:40
z[i]:=(f[n-1]-f[n-2])div(f[n]-f[n-1]);
は,
z[i]:=(f[i-1]-f[i-2])div(f[i]-f[i-1]);
の間違いです。
しかしまだ何かがおかしいらしい。
196デフォルトの名無しさん:2006/04/12(水) 15:41:52
パスカルでおしえて大学生を抹殺するプログラムを作ろうと思いますが、
コメントの記念すべき一文字目は何にしようか迷ってます。
197774RR:2006/04/12(水) 17:10:04
>190
そりゃそーなんだけど、キャリーはやっぱりフラグでしょw

>195
fibonacci関数は動くはずだから、それだけテストしてみるといい。
fibonacci(1)
fibonacci(2)
fibonacci(3)
と増やしていって、
fibonacci(100)の計算にどれだけ時間かがかかるか、ためしてごらん。
どうしてこんなに遅いのか、どうしたら効率良くできるのか。

そうすると for i:=0 to n do f[i]:=fibonacci(i); てのが
原理的には正しくても酷く悪いコーディングだと気付く。
それが勉強だよ。
198デフォルトの名無しさん:2006/04/12(水) 17:17:40
俺は詳しくないからどうすればいいプログラムになるかというレベルではアドバイスできないんだけど
for文の中で"i"が"0"のときに
z[i]:=(f[i-1]-f[i-2])div(f[i]-f[i-1]);
というのは
z[0]:=(f[-1]-f[-2])div(f[0]-f[-1]);
ってことになってないかい?
あと整数型における"div"ってのは商を求める演算子であって
実数型における"/"とは違うってことは分かってる?
199188:2006/04/13(木) 14:58:02
すっごい効率が悪いこととか、i=0のこととか、わかってるのですがどうすればいいのかがわからないすorz
200デフォルトの名無しさん:2006/04/13(木) 15:50:10
3..1000 : fibonacci:=f[n-1]+f[n-2];
201デフォルトの名無しさん:2006/04/13(木) 19:22:52
case文で、例えば「nの値が0の時は■、1の時は▲、2以上の時は●」としたいとき、
「2以上の時は●」のところはどうやって表記すればいいのですか?

case n of
0 : ■;
1 : ▲;
>=2 : ●;

とするとコンパイルエラーになってしまうのです(泣)
202デフォルトの名無しさん:2006/04/13(木) 21:55:02
>>201
caseは順序型だから、下限、上限が決まっている。で、2からその上限まで
を指定すればいいってことになる。具体的には
case n of
  0 : ■;
  1 : ▲;
  2..100 : ●;
とすればいい(上限値が100の場合)。
203デフォルトの名無しさん:2006/04/13(木) 23:26:19
case n of
 0 : ■;
 1 : ▲;
else
 if n >= 2 then
  ●;
end;
204202:2006/04/13(木) 23:35:57
>>203
それ通らない処理系もある(というか標準Pascalだとcase節にelseは無い)。
205デフォルトの名無しさん:2006/04/13(木) 23:42:30
caseのどの条件にも該当しなかったことを検出するにはどうすればいいのですか?
206デフォルトの名無しさん:2006/04/13(木) 23:53:14
>>205
論理型変数を一つ用意して最初にfalseにしておく。
そのあとでcase文中の任意の条件にマッチした場合はtrueに変更してやる。
そうすれば該当しなかった場合はfalseのままだからfalseの場合なにかするっていうように
すれば一応できるんじゃない?
207202:2006/04/13(木) 23:58:22
>>205
だからcase節の変数部(上記nの所)は順序型しか指定できないわけ
だから、上限、下限が決まっていて、個数も自ずと出てくるわけ。

だから「どの部分にも該当しなかった」という部分を抜き出すことも可能
でしょ。それをどこかで指定してやればいいわけ。例えば以下のような
感じで。

case n of
  5 : ■;
  8 : ▲;
  15 : ●;
  0..4, 6, 7, 9..14, 16..100 : ×;  (* どの条件にも該当しない場合 *)

これは、nが0から100までの値を取る順序型の場合。範囲がそれ以外
の場合は適宜指定してやればいい。
208デフォルトの名無しさん:2006/04/14(金) 06:54:53
pascal ha erai mendou na gengo desune.
209201:2006/04/14(金) 16:04:04
>>202
上限がないから困っているわけでw
if文で書くしかないですかね?
210デフォルトの名無しさん:2006/04/14(金) 17:00:59
if n >= 2 then
begin
  ●;
end else begin
case n of
  0 : ■;
  1 : ▲;
end;
じゃダメなのか?
211188:2006/04/14(金) 17:06:52
フィボナッチを以下のように書き換えたのですが、確かに走るし100項でもすぐ出るんですが、マイナスの値がでてくるんです。なぜでしょうか?
program kadai14_2(input,output);
var
m,k : integer;
function fibonacci(n : integer):integer;
function fib(i,old,new : integer):integer;
begin
if i=n then
fib:=new
else
fib:=fib(i+1,new,old+new)
end; { fib }

begin
if n<=1 then
fibonacci:=n
else
fibonacci:=fib(1,0,1)
end; { fibonacci }

begin
writeln('数列の長さを入力してください');
readln(m);
for k:=1 to m do
begin
write(fibonacci(k):1);
write(',')
end;
writeln;
end.
212デフォルトの名無しさん:2006/04/14(金) 17:42:07
>>211
整数がオーバーフローしてるんじゃないかと思われ。
213188:2006/04/14(金) 17:50:53
>>212
詳しくお願いします!!
214デフォルトの名無しさん:2006/04/14(金) 18:02:22
>>209
Pascalには上限のない順序型などない
215デフォルトの名無しさん:2006/04/14(金) 20:15:52
>>213
何を詳しくお願いしてるんだ?
オーバーフローじゃないか?って言ってるじゃん。
216212:2006/04/15(土) 00:33:08
>>213
integer が符号付き32ビットだったとすると、範囲は -2^31..2^31-1
つまり、-2147483648..2147483647。

フィボナッチ数列を計算してみると、

Fibonacci(45) = 1134903170
Fibonacci(46) = 1836311903
Fibonacci(47) = 2971215073 ←ここで32ビット版integerの範囲を超える
Fibonacci(48) = 4807526976

になるみたいなので、Fibonacci(47) 以降は値がおかしくなると思われ。

二進数で書くと、
.         ↓このビットが1になると32ビット版 integer ではマイナスの値
Fibonacci(47) = 10110001000110010010010011100001
絶対値は
    (100000000000000000000000000000000
     - 10110001000110010010010011100001)
  =  (11111111111111111111111111111111
     - 10110001000110010010010011100001) + 1
  =   01001110111001101101101100011110 + 1
十進数に直すと
|Fibonacci(47)| = 1323752222 + 1 = 1323752223 ←これにマイナスがついた値になってしまう

http://www.edm2.com/0409/introc2.html
の Conclusion の手前に同じようなことが書いてある。(Cの例だけど)
217212:2006/04/15(土) 00:36:57
数字がずれた…

>   =  (11111111111111111111111111111111
>     - 10110001000110010010010011100001) + 1
>   =   01001110111001101101101100011110 + 1
> 十進数に直すと
218デフォルトの名無しさん:2006/04/17(月) 02:50:02
age
219188:2006/04/17(月) 14:42:17
>>216
じゃあどうすればよいのですか?
220774RR:2006/04/17(月) 18:17:43
多倍長整数演算るーちんをかく
221デフォルトの名無しさん:2006/04/17(月) 18:59:09
必要なのは加算だけだから文字列のまま加算すればいい

文字列+整数型の加算の例
function AddN(s:string;N:Integer):string;
var i,M:Integer;
var r:string;
procedure afunc;
begin
  M:=((N mod 10)+10) mod 10;
  r:=Char( ord('0') +M)+r;
  N:=N-M;
  N:=N div 10;
end;
begin
  r:='';
  for i := length(s) downto 1 do begin
  N:=N+StrToInt(s[i]);
  afunc;
  end;
  while N<>0 do begin
  M:=((N mod 10)+10) mod 10;
  afunc;
  end;
  Result:=r;
end;
文字列同士は、ループが3つ必要
222デフォルトの名無しさん:2006/04/17(月) 21:00:09
function AddAB(a,b:string):string;
var i,j,N,M:Integer;
var r:string;
 procedure afunc;
 begin
  M:=((N mod 10)+10) mod 10;
  r:=Char( ord('0') +M)+r;
  N:=N-M;
  N:=N div 10;
 end;
begin
r:='';
j:=length(b);
N:=0;
for i := length(a) downto 1 do begin
N:=N+StrToInt(a[i]);
if j>=1 then N:=N+StrToInt(b[j]);
afunc;
dec(j);
end;
for i := j downto 1 do begin
N:=N+StrToInt(b[i]);
afunc;
end;
while N<>0 do begin
M:=((N mod 10)+10) mod 10;
afunc;
end;
Result:=r;
end;
223デフォルトの名無しさん:2006/04/17(月) 21:01:15
function fibonacci(n : string):string;
function fib(i,old,new : string):string;
begin
if i=n then
fib:=new
else
fib:=fib(AddN(i,1),new,AddAB(old,new))
end; { fib }

begin
if (length(n)<2) and(StrToInt(n)<=1) then
fibonacci:=n
else
fibonacci:=fib('1','0','1')
end; { fibonacci }



begin
for k := 1 to 100 do writeLn(k:5,':', fibonacci(IntToStr(k))) ;
224デフォルトの名無しさん:2006/04/18(火) 03:29:41
>>189
まだ完成されていないみたいですが何が足りないのでしょうか?
4月からPascal始めたものですが・・・
225デフォルトの名無しさん:2006/04/18(火) 03:32:26
>>187の問題のコト?
226デフォルトの名無しさん:2006/04/20(木) 13:21:36
「名前」と「電話番号」をキーボードから入力すると、 それらのデータをUNIX上の ファイル 'teldata' に出力するプログラムを作成せよ。なお、 'teldata' に書き込まれた内容を全て表示させる手続きを加え、 完成したプログラムと実行例をつけて提出せよ。
ただし、1人当たりのデータの記憶にはレコード型を用い、 'teldata' はこのレコード型を成分とするファイルとすること。 また、データ入力の終了は「名前」として文字列 'end' を与えることで表現し、 入力可能なデータ数(人数)の上限は特に定めないこと。

この問題で

program kadai21(input , output , opfile);
type Kojindate = record
name : packed array [1..10] of char;
tel : packed array [1..15] of char;
end;
var opfile : file of Kojindate;
a : Kojindate;
begin
repeat
rewrite( opfile , 'intdate' );
writeln('名前:');
readln( a.name );
writeln('電話番号');
readln( a.tel);
write(opfile , a);
until a.name = 'end';
reset ( opfile , 'intdate' );
while not eof(opfile) do begin
repeat
read( opfile , a );
writeln( '名前:',a.name , '電話番号:' , a.tel);
until a.name = 'end'
end
end.

どこがまずいですかね?
227デフォルトの名無しさん:2006/04/20(木) 13:23:31
それと
課題 2-1 では、 登録された電話番号データを全て出力した。 これを、 検索したい人の名前をキーボードから入力し、 対応する電話番号を答えるように変更せよ。
ただし、該当するデータが未登録の場合は検索に失敗したことを 通知するプログラムとすること。 (例えば「該当者なし」と表示するなど)

さらに、 名前として 'end' を入力するまで何回でも検索できるように拡張すると、 なお良い。

こいつお願いします。
228デフォルトの名無しさん:2006/04/20(木) 18:00:09
キーボードから正の奇数を小さい順に入力し、 それらのデータをUNIX上の ファイル 'oddsequence' に書込む。
次に 正の偶数を同じく小さい順に入力し、ファイル 'evensequence' に 書込むプログラムを作れ。
更に、この二つのファイルの内容を合わせて、正の整数が小さい順に書込まれた ファイル 'sequence' を作り、その内容を全て表示するプログラム を作れ。

ただし、データは3、7、13など、小さい値から入力すればよい。また、データ入力の 終了は 値 0 を与えることで表現し、入力可能なデータ数の上限は特に定めないこと。

229デフォルトの名無しさん:2006/04/22(土) 03:56:29
>>226多分こうだと思う。
Assign(opfile, 'teldata');
Rewrite(opfile);
repeat
writeln('名前:');
readln( a.name );
if a.name <> 'end' then begin
writeln('電話番号');
readln( a.tel);
write(opfile , a);
end;
until a.name = 'end';
Close(opfile);
230デフォルトの名無しさん:2006/04/22(土) 04:16:37
>>227
procedure search;
var name : packed array [1..10] of char;
c : boolean;
begin
Readln(name);
while name <> 'end' do begin
Reset(opfile);
c := true;
while not eof(opfile) do begin
Read(opfile, a);
if a.name = name then begin
Writeln(a.tel);
c := false;
end;
end;
Close(opfile);
if c then Writeln('該当者なし');
Readln(name);
end;
end; { search }
231デフォルトの名無しさん:2006/04/22(土) 05:04:10
>>228
program test1(input);
var o,e : file of integer; i:integer;begin
Assign(o,'oddsequence');Rewrite(o);
Read(i);while i <> 0 do begin Write(o,i); Read(i); end;
Assign(e,'evensequence');Rewrite(e);
Read(i);while i <> 0 do begin Write(e,i); Read(i); end;
Close(o);Close(e);end.

program test2(output);
var o,e,s : file of integer; i,j:integer;begin
Assign(o,'oddsequence');Reset(o);
Assign(e,'evensequence');Reset(e);
Assign(s,'sequence');Rewrite(s);i := 0; j := 0;
while not (eof(o) and eof(e) and (i = 0) and (j = 0)) do begin
if not eof(o) and (i = 0) then Read(o,i);
if not eof(e) and (j = 0) then Read(e,j);
if (i <> 0) and (i < j) then begin Write(s,i); i := 0;
end else if j <> 0 then begin Write(s,j); j := 0; end; end;
Reset(s); while not eof(s) do begin Read(s,i);Write(i);Write(' ');
end;Close(o);Close(e);Close(s);end.
232デフォルトの名無しさん:2006/04/22(土) 17:02:18
はあ?
233デフォルトの名無しさん:2006/04/23(日) 18:09:59
>>229
夜遅くにご苦労様です。
そこにif入れればよかったのか。
234デフォルトの名無しさん:2006/04/24(月) 05:32:37
フィボナッチ数列の項は、その直前の連続する二つの項の和である。
f( n ) = f( n - 1 ) + f( n - 2 )
但し、 f(0) = 0, f(1) = 1 である。
フィボナッチ数列の連続する項の差の比
z = { f( n - 1 ) - f( n - 2 ) }/ { f( n ) - f( n - 1 ) }
は、 n が大きくなれば、ある値に収束する。この値の近似値を求める プログラムを書き、その値を示せ。この値は黄金分割比と呼ばれる。
フィボナッチ数列は関数 fibonacci を作って求め、項は配列に表せ。まず 30 項まで求め、黄金分割比の値が収束していく様子を出力して
確かめよ。収束判定のために定数 dif = 1.0 e -6 を宣言し、 連続する z の差の絶対値が dif 以下になったとき、
収束したとして計算を終了するプログラムを作り、プログラムとその 計算結果を提出せよ
235デフォルトの名無しさん:2006/04/24(月) 05:34:47
コンパイルはできるんだけど、何かがおかしいです。
すみませんがわかる方教えてくれませんか?

program pe1_2(input,output);
const dif = 1.0e-6;
var i,m, g : integer;
f, z,q : array [0..500] of real;
function fibonacci(n: integer):integer;
begin
if (n >=0) and (n <=1) then fibonacci:=n
else fibonacci:=fibonacci(n-1)+fibonacci(n-2);
end; { fibonacci }
begin
f[i]:=fibonacci(i);
writeln('30項まで求めます ');
for i :=1 to 30 do
begin
writeln('f(',i:2,')=',f[i]:1);
end;
write('m=');
readln(m);
for i:= 3 to m do
repeat z[i]:=(f[i-1]-f[i-2])/(f[i]-f[i-1]);
until dif >= z[i]-z[i-1];
writeln(z[i]);
{writeln('z(',i:3,')=',z[i]:1,','); }
end.
236デフォルトの名無しさん:2006/04/24(月) 06:10:31
こんな感じじゃないのか?

program pe1_2(input,output);
const
 dif = 1.0e-6;
var
 i : integer;
 f,z : array [1..30] of real;

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

begin
 writeln('30項まで求めます');
 for i :=1 to 30 do
 begin
  f[i]:=fibonacci(i);
  writeln('f(',i:2,')=',f[i]:1);
 end;

 for i:= 3 to 30 do
 begin
  z[i]:=(f[i-1]-f[i-2])/(f[i]-f[i-1]);
  writeln('z(',i:2,')=',z[i]);
  if (i > 3) and (dif >= abs(z[i]-z[i-1])) then
   break;
 end;
end.
237デフォルトの名無しさん:2006/04/24(月) 23:06:40
>>236
言われたとおりにしましたが前と同じ結果でした。
コンパイル結果
f(1)=0.0e+00
   :
   :
f(27)=0.0e+00
f(28)=0.0e+00
f(29)=0.0e+00
f(30)=0.0e+00
m=30

この後何も動きませんでした。
どこがおかしいのでしょうか?
わかる人教えてくれませんか?
238デフォルトの名無しさん:2006/04/24(月) 23:28:52
if (n <=1) then fibonacci:=n
239デフォルトの名無しさん:2006/04/25(火) 04:27:48
あんまり変わってないんじゃない?
240デフォルトの名無しさん:2006/04/25(火) 06:56:08
⇒ if (n >=0) and (n <=1) then fibonacci:=n
>但し、 f(0) = 0, f(1) = 1 である。
   if (n <=1) then fibonacci:=1;

としても、ゼロになるというのは変だね
もしかして ちゃんとループさせてないんじゃないの? >>236をそのまま実行させてないでしょ

それから integerのビット幅はいくら? 16bitだとビット数が不足するよ


function fibonacci(n: real):real;
begin
  if (n >=0) and (n <=1) then fibonacci:=1
  else fibonacci:=fibonacci(n-1)+fibonacci(n-2);
end; { fibonacci }

begin
  writeln('30項まで求めます');
  for i :=1 to 30 do
  begin
  f[i]:=fibonacci(i);
  writeln('f(',i:2,')=',f[i]:10:0);
  end;

 for i:= 3 to 30 do
 begin
  z[i]:=(f[i-1]-f[i-2])/(f[i]-f[i-1]);
  writeln('z(',i:2,')=',z[i]);
  if (i > 3) and (dif >= abs(z[i]-z[i-1])) then
   break;
 end;
end.
241デフォルトの名無しさん:2006/04/25(火) 15:18:46
function fibonacci(n: integer):real;
242デフォルトの名無しさん:2006/04/26(水) 23:23:49
program kadai(input , output);

type intri = ^real;

var ip : intri;
a : real;

begin
new( ip );
write(  `値:` );
readln( a );
ip^ := a;
writeln( ip );
dispose( ip )
end.

簡単なやつなんですが実行しても入力した値そのままが出力せず、5桁の数字が出力してしまうという状況です。
ご指摘お願いします。
243デフォルトの名無しさん:2006/04/26(水) 23:53:19
program kadai(input , output);

type intri = ^real;

var ip : intri;
a : real;

begin
  new( ip );
  write( '値: ' );
  readln( a );
  ip^ := a;
  writeln( ip^ );
  dispose( ip );
  readln;
end.
244デフォルトの名無しさん:2006/04/29(土) 21:58:58
>>243
ポインタをまだ理解しきれてなかったみたいです。
ありがとうございました。
245デフォルトの名無しさん :2006/05/04(木) 16:37:24
本当に初歩的な質問なんですが…
x:=6*(1+3div2)mod5
とあったら、6×(1+1)÷5=2...2より、答えは2でいいんでしょうか?
また、m:=((x>z)and(y<z))
とあって、これはfalse and falseとなるんですが、
このあとは具体的にどうすればいいんでしょう?
ちなみにmは整数です。
助けていただければ幸いです…。
246デフォルトの名無しさん:2006/05/04(木) 16:47:42
1、四則演算はカッコが最優先、乗除算がその次だからあってると思うよ

2、pascal は型に厳しいから 論理型を整数型に代入できないと思うのだが?
247デフォルトの名無しさん:2006/05/04(木) 16:57:42
ご回答ありがとうございます。
最初は合ってましたか…よかった。
次なんですが(すいません書くならば正しくはfalse and trueでした)
mは整数、x,y,zは変数で、
具体的には m:=((2>10) and (5<10))
なんですが、これは…どうすればいいんでしょうか…。。。
248デフォルトの名無しさん:2006/05/04(木) 17:05:19
申し訳ありません。見間違えていました…
mがbooleanでx,y,zが整数でした。本当にすいません…
そうしたら結局mはfalseということでよいのでしょうか?
249デフォルトの名無しさん:2006/05/04(木) 18:25:24
and だから false だよね
250デフォルトの名無しさん:2006/05/04(木) 21:24:02
どうもありがとうございました。そそっかしくてすいません…
251デフォルトの名無しさん:2006/05/11(木) 19:39:47
2個の1次方程式が入力されたとき、その和を 出力するプログラムを作成しなさい。ただし、変数名はアルファベット1文字とし、 その係数値は整数1文字とせよ。

たとえば、2 x - 5 y を1文字ずつ入力(改行で区切る)し、ピリオド '.'が入力 されたならば、次の式、 - 9 y + 2 z を同じように入力する。プログラムはそれら の和、2 x - 14 y + 2 z を出力する。

252モグラ介:2006/05/11(木) 19:49:23
すべてのパスワードを解読するプログラムがあったらすごい・・・
ありえないか。
253デフォルトの名無しさん:2006/05/11(木) 20:03:30
すべてのって言うのが引っかかりますが、
総当りでやればいいんじゃないのか?
254デフォルトの名無しさん:2006/05/11(木) 20:07:22
総当りならどんな難解なパスワードも必ず解析できるね。






何百年とか掛かるかもしれないけど。
255デフォルトの名無しさん:2006/05/11(木) 21:00:59
まともなシステムなら連続で複数回間違えた時点でパスワードが無効になるような対策がなされているから無理
256デフォルトの名無しさん:2006/05/12(金) 00:39:03
しばらくしたら正規のユーザーが管理者に申告して復活するでしょ
257デフォルトの名無しさん:2006/05/12(金) 21:57:42
>>251 の答えまーだ?
258デフォルトの名無しさん:2006/05/13(土) 00:35:23
キーボードからいくつもの「文字」を入力した時、各文字が何回入力されたかを結果として返すプログラムを、入力データの記憶にリスト構造を利用して作れ。なお、入力は1文字ずつ return で区切って入力し、その終了は '.' (ピリオド) で示すものとする。


と、


課題4 - 1を参考にして、2個の1次方程式が入力されたとき、その和を出力するプログラムを作成しなさい。ただし、変数名はアルファベット1文字とし、その係数値は整数1文字とせよ。

たとえば、2 x - 5 y を1文字ずつ入力(改行で区切る)し、ピリオド '.'が入力されたならば、次の式、 - 9 y + 2 z を同じように入力する。プログラムはそれらの和、2 x - 14 y + 2 z を出力する。


2つの問題お願いします。
259デフォルトの名無しさん:2006/05/13(土) 09:29:22
>>251
なんか良く判らんけど 適当に

{構造体の定義}
type TData=record c:char;a:Integer;next:Pointer;end;
type PData=^TData;
var root:PData;

{リストの印刷}
procedure writes;
var p:PData;
begin
p:=root;
while p<>nil do begin
if p^.a>0 then write('+');
write(p^.a,p^.c);
p:=p^.next;
end;
writeln;
end;
260デフォルトの名無しさん:2006/05/13(土) 09:31:29
procedure func(s:string);
var w:TData;
var p:PData;
var sgn:-1..1;
var num:string;
begin
sgn:=1; w.next:=nil; num:='';
while s<>'' do begin
w.c:=s[1]; delete(s,1,1);
case w.c of
'+': begin sgn:= 1;num:=''; end;
'-': begin sgn:=-1;num:=''; end;
'0'..'9': begin
num:=num+w.c;
end;
'a'..'z','A'..'Z': begin
if num<>'' then w.a:=sgn*StrToInt(num) else w.a:=sgn;
p:=root;
while p<>nil do begin
if p^.c=w.c then begin p^.a:=p^.a+w.a; break; end;
p:=p^.next;
end;
if p=nil then begin w.next:=root; root:=@w; func(s); exit; end;
end;
'.': writes;
end;
end;
writes; readln(s);  if s<>'' then func(s); {続けて処理するなら}
end;
261デフォルトの名無しさん:2006/05/13(土) 09:33:13
なんか、改行が多すぎますが厄介だなあ
で、呼び出し部

var s:string;
begin
root:=nil;
readln(s);
func(s);
end;

素直に、ヒープか配列使った方がいいかもね
262デフォルトの名無しさん:2006/05/13(土) 19:27:11
このコード提出した奴からは、動作説明させるからな
263デフォルトの名無しさん:2006/05/13(土) 22:59:34
偽者はだまれ!自分独り占めにするな!
本物ならここに書き込まず裏で減点しているわ!
264デフォルトの名無しさん:2006/05/13(土) 23:22:26
でも、単にメモリ確保の為にわざわざ再帰してるようなコードは、ちょっと目立つぞ
265デフォルトの名無しさん:2006/05/14(日) 01:01:30
だれかエラトステネス篩について、具体例を交えながら分かりやすく解説してくれませんか?
もう訳が分かりません…
266ミ,,゚Д゚ミノ ◆A6VzDeLphI :2006/05/14(日) 01:24:54
エラトステネスの篩の概念は、次のようになります。
1  2  3  4  5  6  7  8  9  10 11 12 13 ...
このような数値列を用意して
まず最初の2は素数としてチェックして
2の倍数は素数じゃないから、フラグを立てます。
1  2  3  4  5  6  7  8  9  10 11 12 13 ...
  O    X    X    X    X    X   
次に素数の可能性のある3は素数としてチェックして、
3の倍数はやはり素数じゃないから、フラグを立てます
1  2  3  4  5  6  7  8  9  10 11 12 13 ...
  O    X    X    X    X    X   
    O      X      X      X
4にはすでに×がついているので、素数ではなく
次に素数だと思われる5は素数としてチェック。
5の倍数は素数ではないフラグを立てて…
1  2  3  4  5  6  7  8  9  10 11 12 13 ...
  O    X    X    X    X    X   
    O      X      X      X
        O          X
と続けていくとチェックされていない所に
〇がつき、素数列が求まるという手法です。
267ミ,,゚Д゚ミノ ◆A6VzDeLphI :2006/05/14(日) 01:29:05
具体例を交えながらわかりやすく解説するほど
労力をかけたくないから、適当に勉強汁

http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E3%81%B5%E3%82%8B%E3%81%84&num=50

上記例では、1〜13の箱を用意するために
Booleanの配列を定義して
1〜13全部をTrueにしてから
4,6,8,10,12の箱をFalseにして、
6,9,12の箱をFalseにして、
という処理をする方法よ。
268265:2006/05/14(日) 13:48:56
どうもありがとうございました。
プログラムで読んだ時、なにがtrueやfalseなのかがよく分からなかったんですが、
やっとなんとかわかりました。ありがとうございました。
269269:2006/05/20(土) 16:27:59
キーボードからいくつもの「文字」を入力した時、 各文字が何回入力されたかを結果として返すプログラムを、 入力データの記憶に2分木を利用して作れ。 なお、入力の終了は '.' (ピリオド) で示すものとし、 結果はアルファベット順に出力するものとする。



program bi( input , output );

type tree = ^node;
node = record
moji : char; kaisu : integer; left , right : tree; end;

var p , head : tree; a : char;

procedure append(var t : tree; x : char );

begin
if t = nil then begin
new( t );
t^.moji := x;
t^.kaisu := 1;
t^.left := nil;
t^.right := nil
end
else if t^.moji = x then
t^.kaisu := t^.kaisu + 1
else if ord( t^.moji ) > ord( x ) then
append( t^.left , x )
else
append( t^.right , x )
end; { append }
270269:2006/05/20(土) 16:28:56
procedure printl(t : tree );
begin
if t <> nil then begin
writeln( t^.moji , t^.kaisu );
printl( t^.left );
end
end; { printl }
procedure printr(t : tree );
begin
if t <> nil then begin
writeln( t^.moji , t^.kaisu );
printr( t^.right );
end
end; { printr }
begin
new( head );
new( p );
head := nil;
p := head;
repeat
write( '文字: ');
readln( a );
append( p , a )
until a = '.';
printl( head );
write( p^.moji , p^.kaisu );
printr( head );
dispose( head );
dispose( p )
end.
271269:2006/05/20(土) 16:35:39
キーボードから「整数」を読込み、 入力データを2分探索木に書込め。 書き込んだ結果を出力せよ。 なお、整数は正または負のデータとし、入力の終了は '0' (ゼロ) で 示すものとする。同じ値が入力されることはないものとせよ。

program kadai5no2( input , output );
type tree = ^node;   node = record  kazu : integer; left , right : tree; end;
var p , root : tree; a : integer;
procedure data(var t : tree; x : integer );
begin
if t = nil then begin
new( t );
t^.kazu := x;
t^.left := nil;
t^.right := nil
end
else if t^.kazu > x then
data( t^.left , x )
else
data( t^.right , x )
end; { data }
procedure printl(t : tree );
begin
if t <> nil then begin
if t^.right <> nil then begin
write( t^.right );
printl( t^.right )
end
else begin
write( t^.kazu );
printl( t^.left )
end
end
end; { print }
272269:2006/05/20(土) 16:36:48
begin
new( root );
new( p );
root := nil;
p := root;
repeat
write( ' 数: ');
readln( a );
data( p , a);
until a = 0;
printl( p );
dispose( p );
dispose( root )
end.
としたのですがどちらも出力をどうすればいいか分かりません。出力の他にも変なところがあれば指摘してくれると嬉しいです。
273デフォルトの名無しさん:2006/05/21(日) 18:28:02
とりあえず上はそれだと白丸のところが出力されないはず
   ●
   /\
  ● ●
 /|  |\


○ ○ ●

火曜提出でしょ?
もう少し悩んでみてもいいと思われ。

あと線形リストや二分木の先頭だけdisposeすると、
2番目以降は解放じゃなくて参照不可になるんじゃなかったっけ?
274273:2006/05/21(日) 18:28:57
ウホッ、ずれまくったorz
275デフォルトの名無しさん:2006/05/23(火) 18:55:46
キーボードから「英文」を読込み、空白(スペース)を英単語の 区切りと見做して、英単語辞書を整順リストの形式で作成するプログラム を作りなさい。

なお、入力の終了は '.' (ピリオド) で示すものとし、 同じ英単語が入力される場合は辞書に登録してはいけない。

a. 英文はアルファベット小文字のみの単語、スペース、ピリオドだけで 作られている場合を、まず考えよ。各単語の文字数は20文字以内とせよ。

b. 次に、大文字が含まれる場合には、その文字を小文字に変換するよう に拡張せよ。

c. 最後に、数字、疑問符?、感嘆符!、クオート’、ダブルクオート"、 ハイフン-、コロン:、セミコロン;などの特殊文字が含まれている文 などを処理できれば完全である。
276デフォルトの名無しさん:2006/05/23(火) 18:56:56
英単語辞書の問題において、 整順リストを2分木表現とするプログラムを作成せよ。

ポーランド記法で入力した四則演算式を2分木で表現し、 演算式の係数値を入力したときに、その計算結果を出力する プログラムを作れ。但し、演算式はアルファベット一文字の 変数と四則演算子のみで表現されている。

a.演算式が定数は含まない場合を考えよ。

b.整数の定数を含む場合に拡張せよ。
277デフォルトの名無しさん:2006/05/24(水) 02:38:31
課題丸投げ早すぎw
278デフォルトの名無しさん:2006/05/24(水) 22:20:26
>>277
そんな突っ込みより
答えキボンヌ。
279デフォルトの名無しさん:2006/05/25(木) 20:51:54
電通大C科乙w
280デフォルトの名無しさん:2006/05/25(木) 22:08:22
>>279
去年につづきまたあそこか
馬鹿しかいないのか?
281デフォルトの名無しさん:2006/05/25(木) 22:36:28
馬鹿が教えてるからしょうがない。
282デフォルトの名無しさん:2006/05/25(木) 22:46:23
>>281
言えてる…。
283デフォルトの名無しさん:2006/05/26(金) 02:25:45
>>278
ヒント

program database( input , output );
type a = ^b ; b = record c : packed array [1..20] of char ; d : a ;
var e, f : packed array [1..20] of char ;
bagin
readln(e);
readln(f);
if e < f then
begin writeln( e , f ); end else begin writeln( f , e ); end;
end.

2単語入力のみ対応
284デフォルトの名無しさん:2006/05/26(金) 03:29:15
電通大生なんだが・・評判落とすような事はやめてくれ!
少しは考えろよ!!
言っておくが、これくらい普通に出来ないと後々の課題なんて出来ないぞ!
その時はまた写すのか?
お前それでいいのか?
285デフォルトの名無しさん:2006/05/26(金) 03:39:15
>>284

       、--‐冖'⌒ ̄ ̄`ー-、
     /⌒`         三ミヽー-ヘ,_
   __,{ ;;,,             ミミ   i ´Z,
   ゝ   ''〃//,,,      ,,..`ミミ、_ノリ}j; f彡
  _)        〃///, ,;彡'rffッ、ィ彡'ノ从iノ彡
  >';;,,       ノ丿川j !川|;  :.`7ラ公 '>了
 _く彡川f゙ノ'ノノ ノ_ノノノイシノ| }.: '〈八ミ、、;.)
  ヽ.:.:.:.:.:.;=、彡/‐-ニ''_ー<、{_,ノ -一ヾ`~;.;.;)
  く .:.:.:.:.:!ハ.Yイ  ぇ'无テ,`ヽ}}}ィt于 `|ィ"~
   ):.:.:.:.:|.Y }: :!    `二´/' ; |丶ニ  ノノ
    ) :.: ト、リ: :!ヾ:、   丶 ; | ゙  イ:}    逆に考えるんだ
   { .:.: l {: : }  `    ,.__(__,}   /ノ
    ヽ !  `'゙!       ,.,,.`三'゙、,_  /´   「電通大の課題が 2ch ねらーのヒマ潰しになっている」と
    ,/´{  ミ l    /゙,:-…-〜、 ) |
  ,r{   \ ミ  \   `' '≡≡' " ノ        考えるんだ
__ノ  ヽ   \  ヽ\    彡  ,イ_
      \   \ ヽ 丶.     ノ!|ヽ`ヽ、
         \   \ヽ `¨¨¨¨´/ |l ト、 `'ー-、__
            \  `'ー-、  // /:.:.}       `'ー、_
          `、\   /⌒ヽ  /!:.:.|
          `、 \ /ヽLf___ハ/  {
              ′ / ! ヽ
286デフォルトの名無しさん:2006/05/26(金) 08:48:45
>>283

b a g i n
287デフォルトの名無しさん:2006/05/26(金) 08:50:54
>>283
ほとんどヒントになってないし。
リスト構造も木構造も実装されてないし。
読み込み部分にしたって、
空白区切りをまったく無視してくれちゃってるし。
まったく、なにやってるんだか。
288デフォルトの名無しさん:2006/05/26(金) 20:00:58
>>287
丸写しするお馬鹿さんには関係ないこと。成績表を見て泣くだけ。
289デフォルトの名無しさん:2006/05/27(土) 10:12:38
290デフォルトの名無しさん:2006/05/28(日) 21:18:58
答えまーだ?
291デフォルトの名無しさん:2006/06/02(金) 02:07:04
やっと落ち着いたか
292デフォルトの名無しさん:2006/06/04(日) 09:06:23

Javaなどの新しい言語がある中で、電通大が未だにPascalを使ってプログラミングの講義をしているのは一種の男気の現れですか?
293デフォルトの名無しさん:2006/06/04(日) 09:31:21
教えるヒトがそれ以外の言語を知らないので仕方がないのです。
294デフォルトの名無しさん:2006/06/04(日) 17:23:42
今まさにPascal習ってる電通大生ですよっと
Pascal習う理由として、
@複数の言語を学んだほうが体系的に(で言葉あってるのか?)文法を理解できる。
APascalは教育用言語としてはふさわしい
とか言ってた気がする。

ただ、俺は大学入って初めてプログラミングに触れるようになったため、
教授の考えがきちんと伝わっていないかも知れない。
要は公式見解ではないということ
295デフォルトの名無しさん:2006/06/04(日) 17:24:00
>>293

男気の正反対ですね。
296デフォルトの名無しさん:2006/06/04(日) 17:25:52

今プログラミング教育用として主流になってる言語って何ですかね?
297デフォルトの名無しさん:2006/06/04(日) 19:11:57
授業で使われている数はc/c++とJavaが圧倒的でしょう。
298デフォルトの名無しさん:2006/06/06(火) 08:27:39

Javaはまだいいとして、C/C++って教育用途には向いてるんでしょうかね?
299デフォルトの名無しさん:2006/06/06(火) 10:22:47

Javaが向いてる?ご冗談を

JavaよりC/C++の方が向いてるに決まってるじゃないか
300デフォルトの名無しさん:2006/06/06(火) 18:17:03
C++がプログラミング入門用として最適の言語。










とかのたまうメルマガ鵜呑みにして強引にC++から入った俺が来ましたよ。
301デフォルトの名無しさん:2006/06/08(木) 08:24:55
Cは良いけどC++は教育用としてはどうかとおもう
302デフォルトの名無しさん:2006/06/10(土) 23:49:37
C++の方が明らかにCより使いやすいし。
教育用としても
オブジェクト指向のC++の方がいいに決まってるし。
303デフォルトの名無しさん:2006/06/11(日) 05:55:38

PerlほどじゃないけどC++のオブジェクト指向もひどいぞ

「オブジェクト指向の教育」という観点からは薦められない
304774RR:2006/06/12(月) 19:47:05
本物のプログラマはPascalを使わない。真の漢は黙ってFORTRAN77。
305デフォルトの名無しさん:2006/06/12(月) 20:57:38
来年から電通はCになるらしいけどな
まじで頭おかしいだろあそこ
306デフォルトの名無しさん:2006/06/13(火) 07:31:40
Rubyにすればいいのに
307デフォルトの名無しさん:2006/06/13(火) 17:53:09
HSPにすればいいのに
308デフォルトの名無しさん:2006/06/15(木) 12:12:15
pascalの文法には、変数名とか関数名の非終端記号があるらしんだけど
これはすべて名前(識別子)であって文法を簡単にするものであると。

原始プログラム中のその名前をみただけではどの名前であるか
判別できない。これの解決策はなにですか?
309デフォルトの名無しさん:2006/06/15(木) 13:35:24
俺のESPを試す時がきたようだ。

例えば次のようなソースがあるとします。
if (0 < hoge) then ...
このhogeが変数なのか関数なのかはここから判別する事はできないと思います。
コンパイラはどうやっているんでしょうか?

こんな感じか?
310デフォルトの名無しさん:2006/06/15(木) 18:01:22
ネストしたスコープの話なのかな?
311デフォルトの名無しさん:2006/06/16(金) 00:50:41
pascalは事前に変数も関数も宣言する必要があるので問題無い。
312デフォルトの名無しさん:2006/06/26(月) 15:11:34
モンテカルロ法を用いて1/3を求めよ。
そのときモンテカルロ法を試行する回数を、プログラム実行時に選択できるようにせよ。
313デフォルトの名無しさん:2006/06/26(月) 18:50:02
いやです。
314デフォルトの名無しさん:2006/06/26(月) 19:28:36
やってやらんこともないが

なぜ 1/3 なんだ?
315デフォルトの名無しさん:2006/06/27(火) 14:23:43
パスカルの問題でわからないので教えて下さい。
問1
任意の人数に対してBMI(肥満度を判定する指標)を計算し、その平均値を出力させる。ここで,BMIとは
体重/身長/身長
で定義されるため,体重および身長を人数分だけ標準入力せよ。ここで,人数の最大は10名としてよい。なお,関数あるいは手続きを用いること。

問2
10名分のクラスの学生名前(アルファベット)を配列に保存せよ。また、最後にそれを標準出力せよ。
また、ファイル出力の場合も考えよ。
*stringを使いなさい。
316デフォルトの名無しさん:2006/06/27(火) 14:25:35
パスカルの問題でわからないので教えて下さい。
問1
任意の人数に対してBMI(肥満度を判定する指標)を計算し、その平均値を出力させる。ここで,BMIとは
体重/身長/身長
で定義されるため,体重および身長を人数分だけ標準入力せよ。ここで,人数の最大は10名としてよい。なお,関数あるいは手続きを用いること。

問2
10名分のクラスの学生名前(アルファベット)を配列に保存せよ。また、最後にそれを標準出力せよ。
また、ファイル出力の場合も考えよ。
*stringを使いなさい。
317デフォルトの名無しさん:2006/06/27(火) 23:08:41
このスレまだあったのか
318デフォルトの名無しさん:2006/07/01(土) 08:42:13
リスト構造ってむずい部類?
319デフォルトの名無しさん:2006/07/01(土) 17:20:31
>>318
リストによっては。

単純な線形ならそんなに難しくないけど、双方向になると少し難しくなって、
ツリー構造とかになると結構難しくなって。バランス木くらいになると相当
難しくなる。
320デフォルトの名無しさん:2006/07/02(日) 01:05:23
どうむずかしいの
321319:2006/07/02(日) 10:29:29
>>320
自分で実装してみれば分かる。
322デフォルトの名無しさん:2006/07/03(月) 02:05:51
なんで?
323デフォルトの名無しさん:2006/07/04(火) 01:23:08
Delphiの課題なのですが

乱数を生成して 正方形 と 円(四分円)の面積を比較することにより,
    円周率 π の近似値を求める方法がある。
    以下は,この方法に関する問いである。

(1) 乱数によって定まる点の分布の状況を PaintBox 上に図示せよ。

(2) 円周率 π の近似値を計算せよ。

という問題が出されました
取っ掛かりからわからないという初心者ぶりです
ご教授願えませんでしょうか
324デフォルトの名無しさん:2006/07/04(火) 01:38:04
> 乱数を生成して 正方形 と 円(四分円)の面積を比較することにより,
> 円周率 π の近似値を求める方法がある。

この方法については理解してる?
325デフォルトの名無しさん:2006/07/04(火) 01:42:41
ランダムに点を打ってくんじゃなかったか?

まずアルゴリズムをはっきりさせること。
326デフォルトの名無しさん:2006/07/04(火) 01:49:15
rを半径とすると、
円の面積は Pi*r*r
正方形の面積 r*r
円の公式 x*x + y*y <= r*4

を使うんじゃないの?
327デフォルトの名無しさん:2006/07/04(火) 01:52:04
1辺の長さがRの正方形とそれに内接する四分円とを描画する。
正方形内にランダムに点を打ち、打った点の総数と、
そのうち四分円の中に入った点の数をそれぞれカウントする。
あとはその比率から円周率を近似するくらいはわかるだろう。
328デフォルトの名無しさん:2006/07/04(火) 17:21:07
もんてかるろ法だわな
329デフォルトの名無しさん:2006/07/04(火) 23:09:09
円の公式は x*x + y*y <= r*r
でした。
330323:2006/07/05(水) 00:34:12
ご教授レスありがとうございました。

自宅にDelphiがないのですが(学校にある)、
取り敢えずモンテカルロ法について調べてみました。

結果イメージとしては理解できたのですが
点を打つ方法、点を数える方法がともにわかりませんでした。
(乱数関係から検索したのですが)

何もしてないと言われても仕方ない有様ですが、
どうかその二つの作業の方法だけでも教えていただけませんでしょうか。


331デフォルトの名無しさん:2006/07/05(水) 00:37:35
332デフォルトの名無しさん:2006/07/05(水) 01:37:50
>>330
>>331にほとんど答えが載っているが
せっかく文章練ったので。

http://sylphys.ddo.jp/upld2nd/pc2/src/1152029914998.png

乱数 x, y を別々に発生させ、>>329の式で
4半円(図の白い部分)の中にあるか判定する。

4半円の中に入った点の数・外になった点の数をそれぞれ
変数にもって、判定結果に従ってカウントアップ。
ある程度の数の点を計算したら、点の数の比を計算すれば、面積比が出てくる。

後は、既知の円の面積の公式 4πr^2 からπを求める。

PaintBoxは自分でやってください。
333デフォルトの名無しさん:2006/07/05(水) 07:30:25
自分で考えないと馬鹿になるぉ
334デフォルトの名無しさん:2006/07/05(水) 21:57:17
>既知の円の面積の公式

これがクセモノ

トートロジー
335デフォルトの名無しさん:2006/07/05(水) 22:44:29
円の面積の公式も分からないとはいくらゆとり世代でも酷すぎる
336デフォルトの名無しさん:2006/07/05(水) 23:01:56
>>335
というか、「Piを求めるのにPiを使った円の面積の公式を使う」
というのは問題じゃないのかと>>334は言いたいんだろう。
337デフォルトの名無しさん:2006/07/05(水) 23:05:04
338332:2006/07/05(水) 23:20:13
いや、式がおかしいです。
モロゆとり世代ですんません
339デフォルトの名無しさん:2006/07/05(水) 23:36:31
4πr^2って球の話なの^^
340デフォルトの名無しさん:2006/07/06(木) 18:01:24
>>339

>>332 のは 1/4 だから
点の数の比を計算するのに
4πr^2 になるってだけの話だと思う
341323:2006/07/06(木) 21:05:51
おかげさまで課題できました。
皆さんお世話になりました。
342デフォルトの名無しさん:2006/07/06(木) 22:07:28
パスカルの問題でわからないのですが、教えてください。

・学籍番号と点をデータとして入力し、これを得点の高い順に並べ替え、
 順位をつけて表示する。

高い順に並べ替えるまではできるのですが、それを点じゃなくて学籍番号
で表示することができません。
343デフォルトの名無しさん:2006/07/06(木) 22:14:41
配列2個用意して、両方並べ替える。
Delphi的に正しいのは record 使う。
344デフォルトの名無しさん:2006/07/06(木) 22:15:12
学籍番号と得点を組にして持って、並べ替えるときに一緒に動かすんだ。
345デフォルトの名無しさん:2006/07/06(木) 22:15:53
ワーォ
346デフォルトの名無しさん:2006/07/06(木) 22:36:50
すいません。よくわかりません。
347デフォルトの名無しさん:2006/07/06(木) 22:37:41
とりあえずコード書いて晒してみれ。
348デフォルトの名無しさん:2006/07/07(金) 17:20:06
これであと学籍番号を一緒に表示したいにですが、どうすればいいですか?
SysUtils;
type rec=record
name:String;
ten:integer;
end;var stud:array[1..5]of rec;
i,j,w:integer;

begin
{ TODO -oUser -cConsole Main : この下にコードを記述してください }
for i:=1 to 5 do begin
write('no.',i,' 学籍番号:');
readln(stud[i].name);
write('no.',i,' 点数:');
readln(stud[i].ten) end;

for i:=1 to 5-1 do
for j:= i+1 to 5 do
if stud[j].ten>stud[i].ten then
begin
w:=stud[i].ten;
stud[i].ten:=stud[j].ten;
stud[j].ten:=w
end;

writeln;
for i:=1 to 5 do writeln(stud[i].ten);
writeln;
readln;
end.
349デフォルトの名無しさん:2006/07/07(金) 19:50:11
ここまで出来ててなんでそれが出来ないんだw
350デフォルトの名無しさん:2006/07/07(金) 20:24:19
分からんままコピペしただけかな?

最後の
for i:=1 to 5 do writeln(stud[i].ten);
に、点数を出力する文を加えればいい。
351デフォルトの名無しさん:2006/07/07(金) 22:12:36
みなさんのおかげで何とかできました。
ありがとうございました。
352デフォルトの名無しさん:2006/07/08(土) 01:52:57
手続きや関数での変数宣言で、varをつけるのとつけないのの違いがよくわからないです。
誰か教えてください。
353デフォルトの名無しさん:2006/07/08(土) 01:56:06
参照渡しと値渡し
354デフォルトの名無しさん:2006/07/10(月) 01:44:09
アホですみませんがこの2つの問題がわかりません
ぜひ教えてください



5教科のテストを行いました。それぞれのテストの点数を入力してもらい、
それぞれの点数と5教科の合計と平均をわかりやすく表示するプログラムを作成しなさい。





プログラムを作成していて、次のような関数"printAns()"が必要となりました。
printAns()は第一引数としてint型を受け、受け取った整数に50をかけて
”答えは○○です”と表示してから、その答えをint型で返します。
このような関数printAns()を製作してください。
メインとなるプログラムは次のものを流用するように。

var
a,b:Integer;

begin
Write(Output,'n ? |');
Read(Input,a);
Writeln(Output,'ここから関数');
b :=Culculate(a);
Writeln(Output,'ここまで関数');
Writeln(Output,'戻り値は ',b);

end.
355デフォルトの名無しさん:2006/07/10(月) 02:30:58
いくらなんでも丸投げ過ぎ
356デフォルトの名無しさん:2006/07/10(月) 02:57:04
解答者がやりたくなるような質問の仕方を研究して来い

話はそれからだ
357デフォルトの名無しさん:2006/07/10(月) 06:41:46
>>354
>>348 を改良すれば作れるよ。
358デフォルトの名無しさん:2006/07/14(金) 01:40:21
課題内容:

新幹線に乗るために阪急電鉄・石橋駅から梅田経由で地下鉄御堂筋線・新大
阪駅まで行きたいとする.新大阪駅に到着したい時刻を入力すると,石橋駅
で何時何分発の列車に乗ればよいかを教えてくれるプログラムを以下の3段
階に分けて作成せよ.ただし,以下の2つの条件を満たすこと.

条件:

(1) 手続きもしくは関数を用いること.
(プログラムを分かりやすくするため)

(2) 少なくとも以下の情報を出力すること.
(ユーザが使いやすいように,出力を工夫すること)

・阪急電鉄・石橋駅の発車時刻
・阪急電鉄・梅田駅への到着時刻
・地下鉄御堂筋線・梅田駅の発車時刻
・地下鉄御堂筋線・新大阪駅への到着時刻

359デフォルトの名無しさん:2006/07/14(金) 01:41:18
段階:

(1) 平日ダイヤのみに対応する.阪急は急行しか利用しない(普通列車な
ど,急行以外の列車は無視する).

(2) 段階 (1) に加えて,阪急の全列車(特急,特急日生エクスプレス,
通勤特急,急行,準急,庄内・曽根通過待ちなしの普通,庄内・曽根
通過待ちありの普通)を利用可能にする.ただし,普通列車が後発の
特急などに追い越される可能性は無視する(追い越される普通列車を
出力してよい).さらに,土曜・休日ダイヤに対応する.

(3) 段階 (2) に加えて,後発の特急などに追い越される普通列車でなく,
後発の特急を出力するようにする
360デフォルトの名無しさん:2006/07/14(金) 01:52:31
358、359の者なんですが、PASCALの課題で下のような時刻表を与えられていてこれ以外にもたくさんあって、
配列に一つ一つ打ち込むにはあまりに多すぎるんで、どうにかファイルを呼び出したいんですが、
教科書のようなものを読んでみていじってみても上手くいきません。
どなたか少しわかりやすく説明していただけたら嬉しいんですが…
361デフォルトの名無しさん:2006/07/14(金) 01:53:44
急行
6 4 22 33 44 51
7 1
829 49 56
9 7 16 27 39 49 59
10 9 19
1558
16 8 18 28 38 48 58
17 7 16 26 36 46 56
18 6 17 26 36 48 57
19 8 17 28 37 48 57
20 8 17 28 38 48 58
21 8 18 28 38 48 58
22 8 18 28 38 48
23 2 14

362デフォルトの名無しさん:2006/07/14(金) 03:55:01
>>318
リストだけに超絶に難しい。

>>360
>>228-232 あたりに載ってる。
実用的な問題ですね。
363デフォルトの名無しさん:2006/07/14(金) 12:47:24
1行ずつスキャンして、ansiナントカで解析していけばよい
364デフォルトの名無しさん:2006/07/14(金) 23:49:29
二分探索法を手続き宣言して使用する場合、
procedureとfunctionのどちらを使えば良いでしょうか?

また、それらに処理に必要なデータを引数として渡すようにする場合、
どういった形式が望ましいのでしょうか?

いろいろ試してみましたが、うまくいかないので…
応えて頂けると幸いです。

365デフォルトの名無しさん:2006/07/15(土) 00:53:39
とりあえずCとかのサンプルコードを移植したら?
それからDelphiスタイルに変えればいいかと。
366デフォルトの名無しさん:2006/07/15(土) 08:25:12
Pascal過疎ってるなぁ。
367デフォルトの名無しさん:2006/07/15(土) 15:01:00
>>364
procedure(手続き)とfunction(関数)は値を返すか返さないか
の違いだけしかないから、値を返したいんだったらfunctionにして
値が要らないんだったらprocedureにすればいいのでは。

処理に必要なデータは渡さなきゃならないけど、どうやって渡す
かは実装する人の自由だから、好きにすればいいと思う。
368デフォルトの名無しさん:2006/07/15(土) 22:06:51
長文で失礼します。

(1) 配列にしまわれたいくつかの整数をデータとして,
棒グラフを作成するプログラムをかけ。
(入力データ x は 0<= x <=100 をみたすとする。)
Hint:
以下の作業を,i=1 から i=n まで,
n 回繰り返す ( for 文や repeat 文を用いる)
作業:
x 方向に位置をずらしながら,
a[i] に応じた高さの細長い長方形を n 個描く

50 未満のデータに対する「棒」は赤色で表示し,
50 以上のデータに対する「棒」は青色で表示するようにせよ。

という課題なのですが

369デフォルトの名無しさん:2006/07/15(土) 22:07:29
var n : integer;
a : array[1..20] of integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(Edit1.Text);
n := n + 1;
a[n] := StrToInt(Edit1.Text);

Edit1.Clear; Edit1.SetFocus;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
with PaintBox1.Canvas do
begin
for i= 1 to n do

//棒グラフ作成?

370368 369:2006/07/15(土) 22:08:25
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Clear;
Edit1.Clear; Edit1.SetFocus;
end;

end.
という状態です。
ここまでに誤りがあるのか、また、肝心の空欄部分はどうすればいいか
教えていただけたら幸いです。

371デフォルトの名無しさん:2006/07/15(土) 22:17:31
垢と阿保はどうすれば出ますか?
372デフォルトの名無しさん:2006/07/15(土) 22:50:27
>>368-370
nは初期化されている? PaintBox1.Canvasはクリアされている?
棒グラフを書く前に座標軸を書かなきゃ。

棒グラフはまず「グラフ用紙に自分出てで書いて」みれば、どう
書けばいいか分かると思う。その書く手順そのままCanvasに
書けばいいだけ。

手で書く時に位置情報(ピクセル単位)を意識しながら書けば
簡単に出来ると思う。
373364:2006/07/16(日) 10:18:47
いくつかのご指摘ありがとうございます。
なんとかがんばってみます。
374デフォルトの名無しさん:2006/07/17(月) 01:53:46
C言語で書かれたプログラムをpascalに変換する何かってないですか?
375デフォルトの名無しさん:2006/07/17(月) 02:53:35
Cを読む事が出来、pascalを書く事が出来る人間の脳と手
376デフォルトの名無しさん:2006/07/17(月) 10:13:21
簡単だから自分で覚えた方がいいよ

Pascalがいかに面倒かってよく分かる
377デフォルトの名無しさん:2006/07/17(月) 11:21:48
すごく間抜けた質問かもしれませんが
pascalのプログラムを家で作成したいのですがどこか置いてるサイトとかありますか?
378デフォルトの名無しさん:2006/07/17(月) 11:32:06
Pascalコンパイラがどこにあるかってこと?
379デフォルトの名無しさん:2006/07/17(月) 11:36:13
http://www.jp.freepascal.org/download.html

16bit だったような気がするけど
380デフォルトの名無しさん:2006/07/17(月) 11:39:35
純正 pascal にこだわらないなら
Delphi / kylix あたりでいいんじゃない?
381377:2006/07/17(月) 11:53:57
>>379>>380
どうもありがとう。
>>379のはなんか落とせないから>>380のやつみてみます。
382デフォルトの名無しさん:2006/07/17(月) 11:55:10
pascalのコンパイラで有名なのは

1、Delphi 6 http://www.vector.co.jp/soft/win95/prog/se205882.html
  登録が必要 http://www.borland.com/downloads/download_delphi.html

2、FreePascal
 http://www.jp.freepascal.org/
 IDEで有名なのはlazarus http://www.lazarus.freepascal.org/

3、HelloPascal
 http://members.jcom.home.ne.jp/yurizaka/soft/

4、カベソン
http://www.tokumaru.org/plang/cabezon/cabezon.htm

5、gpc  GNU Pascal Compiler
383377:2006/07/17(月) 12:22:37
>>382
すごく参考になりました。どうもありがとう。
384デフォルトの名無しさん:2006/07/18(火) 08:53:43
うわーカベソンで今もあったんだ。
なつかしー
385デフォルトの名無しさん:2006/07/18(火) 20:58:22
Pascalとか、わけわかないっすお
386デフォルトの名無しさん:2006/07/18(火) 22:08:05
for文くらいまでしか理解してません、もうダメポorz
誰か助けてください。。。○投げですいませんOTL

(i) 自然数(整数)で表記される「キー」、および、8文字までの文字列で表現される「データ」を、2分木の構造で管理するプログラムであること。
*常に左右のバランスを保つAVL木であること。
(ii) プログラムの実行開始直後に、可能な操作のメニューが表示され、自在に選択でき、1つの操作が実行された後、そのメニューが再表示され、入力待ち状態になること。
(iii) 「キー」「データ」の値を入力することによりデータの登録ができること。
(iv) 二重登録を防止し、その際警告メッセージを出すこと。
(v) 「キー」の値の入力することにより、データの削除ができること。
(vi) 登録されていないデータを削除しようとすると、メニューに戻る前に警告メッセージを出すこと。
(vii) 「キー」の値を入力することにより、そのキーの値をもつデータを参照できること。
(viii) 2分木の構造(頂点間の接続関係)を表示できること。
(ix) 登録されている全データを、キーの小さい順に列挙できること。
(x) 2分木内の各頂点の(木の根からの)深さを表示できること。
---------------------------------------
*はできるとボーナス点

要解説書。手続きの処理内容、変数の説明など
解説書〆7/24
プログラムソース〆7/21
orz
387デフォルトの名無しさん:2006/07/18(火) 22:11:39

Pascalです。。。
388デフォルトの名無しさん:2006/07/18(火) 22:15:41
recordを使う
389デフォルトの名無しさん:2006/07/18(火) 22:21:03
俺もレポートやんないと
390デフォルトの名無しさん:2006/07/22(土) 13:26:54
391デフォルトの名無しさん:2006/07/23(日) 07:33:13
ime.st のまま貼るなよ
392デフォルトの名無しさん:2006/07/26(水) 12:25:21
Pascalでプログラムの実行実時間を調べるコマンドがわからないのですが、
誰かご存知でしょうか?
393デフォルトの名無しさん:2006/07/26(水) 20:23:22
開始時と終了時に時間を取得して差を求める
394デフォルトの名無しさん:2006/07/31(月) 05:26:56
WindowsならtimeGetTimeがms単位で測定できる。
395774RR:2006/08/31(木) 20:25:00
やっとXcodeでFPC走るようにしたよん。記念にたまにはあげよう。

>394
それが信頼できるかはまた別物。リアルタイム処理を今のビジネス/ホビー用パソコンでやるのは
かなり無理があるよ。

DOSでTurbo Pascal使った方がいいくらい。
396デフォルトの名無しさん:2006/08/31(木) 20:27:43
で?
397デフォルトの名無しさん:2006/09/13(水) 15:24:53
Turbo Delphi で Pascal のコンパイルは出来ますか?
398デフォルトの名無しさん:2006/09/16(土) 00:17:39
できます
399デフォルトの名無しさん:2006/10/06(金) 04:12:13
integerで扱える範囲を越えた数値を代入すると、
誤った値を返したりすることってありますか?
また、そういうことを防ぐ、というかせめて
間違った値が出るということを予測できるといいなあと思うのですが

どういう文献を調べればよいのかも教えていただけると助かります!
400デフォルトの名無しさん:2006/10/06(金) 15:33:01
integerの範囲を超えないように注意することで防げます。
401デフォルトの名無しさん:2006/10/06(金) 15:49:03
ふつうは例外が出ると思う
402デフォルトの名無しさん:2006/10/06(金) 17:51:51
>>400

integerの範囲?
403デフォルトの名無しさん:2006/10/06(金) 23:07:14
low(integer)..high(integer)
404デフォルトの名無しさん:2006/10/08(日) 03:38:29
引数のパラメータにconstを付けるのは、どういう意味(違い)があるのですか。
varなら分かりますが。
405デフォルトの名無しさん:2006/10/08(日) 12:49:14
const も var も参照渡しだが、constは値の変更ができない。
406デフォルトの名無しさん:2006/10/15(日) 21:14:10
すんません
手元にパスカルないんですけど
パスカルにおける論理式が真の時の返り値って
1でしょうか、それともー1でしょうか?
407デフォルトの名無しさん:2006/10/15(日) 21:47:39
実装によりますが-1が多いです。
408デフォルトの名無しさん:2006/10/15(日) 21:51:18
True です。
409デフォルトの名無しさん:2006/10/15(日) 22:26:48
>>407
いやdelphiでもfpcでもord(true)は1だろ。
410デフォルトの名無しさん:2006/10/15(日) 23:30:28
PInteger(@b)^ だと $FFFFFFFF
411デフォルトの名無しさん:2006/10/15(日) 23:42:31
BooleanとIntegerではバイト長が異なるのでそのキャストは無意味
412デフォルトの名無しさん:2006/10/15(日) 23:57:14
PByte(@b)^ だと $FF
413デフォルトの名無しさん:2006/10/16(月) 00:18:18
>>408が正しいと思う。論理式は論理値しか返さないから、true
もしくはfalseしかない。1か-1かで比較すると「型が違います」と
怒られる。
414デフォルトの名無しさん:2006/10/16(月) 00:47:39
Booleanは順序型だよ
415デフォルトの名無しさん:2006/10/16(月) 00:56:54
だから何?
416デフォルトの名無しさん:2006/10/16(月) 01:21:44
全ての順序型は数値とと互換性がある
417デフォルトの名無しさん:2006/10/16(月) 01:24:20
そう。良かったね。
418デフォルトの名無しさん:2006/10/16(月) 01:28:51
>>413
ord使えよ
419デフォルトの名無しさん:2006/10/16(月) 01:33:50
それで?
420デフォルトの名無しさん:2006/10/16(月) 09:04:17
>>406
0以外としか定義されてないよ。だからどっちかは風任せ
421774RR:2006/10/16(月) 18:02:05
言語としては>408が正解だろう。
実装としては>420の言う通り取説嫁としかいいようがない。

fpcだと
boolean - false : 0 / true : 1
bytebool, wordbook, longbool - false : 0 / true : 0以外のなんでも
となっている。
422デフォルトの名無しさん:2006/10/17(火) 00:16:06
ふーん、それが何か?
423デフォルトの名無しさん:2006/10/26(木) 17:14:30
ユーグリッド互除法のプログラムを変更することにより正整数x、yを読み取りux+vy=gcd(x,y)
を満たす整数の組(u,v)を一つ出力するプログラムを作れ。ただし配列は用いない。

わからないのでお願いします!
424423:2006/10/26(木) 17:42:23
program gcd(input, output);
var x0, y0, x, y, w, a1, b1, a, b, q1, u, v : integer;
begin
readln(x0, y0);
if (x0 > 0) and (y0 > 0) then begin
x := x0; y := y0; a := 1; b := 0;
while x <> 0 do begin
w := y mod x; y := x; x :=w;
q1 := y0 div x0;
a1 := b - q1 * a;
b := a;
a := a1
end;
u := b;
v := ( y - u * x0 ) div y0;
writeln('gcd(', x0:1, ', ', y0:1, ') = ', y:1);
writeln('(u,v)=(', u:1, ',', v:1, ')')
end
end.

こう作ったんですけど、x、yの値が大きくなると正しく動きません。
添削してください。
425デフォルトの名無しさん:2006/11/14(火) 02:20:00
ポインタを使った2つの線形リストにそれぞれアルファベットを入れて、
その2つの共通部分を別の線形リストに入れて出力するプログラム

を書きたいのですが、よくわかりません。
まず、線形リストに文字を入力して、それを出力するだけのプログラムを
書いたのですが、コンパイルはできるものの実行すると無限ループになります。
何がいけないのかご指摘いただけると助かります。

↓↓つづく↓↓
426デフォルトの名無しさん:2006/11/14(火) 02:20:58
program intersection(input,output);

type
pointer = ^celltype;
celltype = record
element : char;
next : pointer;
end;

var
listA,listB,listC : pointer;
x : char;

427デフォルトの名無しさん:2006/11/14(火) 02:22:42
procedure insert(var p : pointer; a : char);

var
q : pointer;

begin
new(q);
q^.element:=a;
q^.next:=p;
p:=q;
end; { insert }

procedure print(p : pointer);

begin
while p<>nil do begin
write(p^.element,' ');
print(p^.next)
end
end; { print }
428デフォルトの名無しさん:2006/11/14(火) 02:24:02
begin
readln(x);
while x<>'.' do begin
insert(listA,x);
readln(x)
end;
if listA^.element<>'.' then begin
print(listA)
end;
writeln();
dispose(listA)
end.

429デフォルトの名無しさん:2006/11/14(火) 02:45:11
>while p<>nil do begin
>write(p^.element,' ');
>print(p^.next)
>end

pが変化してないようだが。while→ifじゃ無いか?
430デフォルトの名無しさん:2006/11/14(火) 02:57:57
>>429
ifにしたらうまくいきました!!
逆順に出力されるけど・・・

共通要素を探す手続きのほうもがんばって作ってみます。
ありがとうございました。
431デフォルトの名無しさん:2006/11/14(火) 22:31:52
で、その共通要素を探す手続きなのですが・・・
これのどこがだめなのかご指摘願います。

procedure search(var p,q,r : pointer);

var
found : boolean;

begin
while p<>nil do
begin
found:=false;
while q<>nil do
begin
if p^.element=q^.element then found:=true
else q:=q^.next
end;
if found then
begin
new(r);
insert(r,p^.element)
end;
p:=p^.next
end
end; { search }


432デフォルトの名無しさん:2006/11/14(火) 22:35:54
あと、メインプログラムで

if listA^.element<>'.' then begin
print(listA)
end;

とありますが、このif文て必要ないですよね?
それから、listA,Bについてnewしてないのですが、これって問題あります、よね?
なぜか値が格納されてるみたいなのですけど・・・


433デフォルトの名無しさん:2006/11/15(水) 01:20:23
age
434デフォルトの名無しさん:2006/11/15(水) 13:37:51
リストに要素の重複は無いんだな。

>procedure search(var p,q,r : pointer); 
p,qは呼び出し元の値を変えんな。var取れ。

>if p^.element=q^.element then found:=true 
>else q:=q^.next 
ifが真の時、q:=q^.nextは実行されない(無限ループ)。

>new(r);
不要。

>とありますが、このif文て必要ないですよね? 
無い。

>listA,Bについてnewしてないのですが、これって問題あります、よね?
無い。むしろdispose(listA)しかしてないのが気になる。
435デフォルトの名無しさん:2006/11/21(火) 12:46:41
>>434
大変遅ればせながらありがとうございます。
無限ループはどうすれば回避できるのでしょうか?
それから、なぜlistA,Bをnewしなくてもよいのでしょうか?
質問ばかりですいません
436デフォルトの名無しさん:2006/11/22(水) 01:04:41
>>431
ある文字がリストにあるかどうかを調べる関数を作れば
解りやすくなると思う。
437デフォルトの名無しさん:2006/11/24(金) 22:39:39
実数が格納されている配列があって、その実数を配列の最初から順に
足し合わせていく関数を作りたいのですが、以下の関数だとうまくいきません。
ご教授願います。

function wa(f:hairetu):real;{hairetuは100項ある実数型の配列}

var i:integer;

begin
for i:=1 to 100 do begin
wa:=wa+f[i];
i:=i+1
end
end

438デフォルトの名無しさん:2006/11/24(金) 22:45:05
wa は何?
439デフォルトの名無しさん:2006/11/24(金) 23:25:39
関数の名前です
440デフォルトの名無しさん:2006/11/24(金) 23:33:39
function wa(f: hairetu): Real;
var
i: Integer;
sum: Real;
begin
sum := 0.0;
for i := 1 to 100 do sum := sum + f[i];
result := sum;
end;

こんなのはどうですか。
441デフォルトの名無しさん:2006/11/24(金) 23:37:47
waに直接足し合わせていくのはだめなんですかね?
sumみたいな変数を用意しないとだめなんでしょうか?
442デフォルトの名無しさん:2006/11/25(土) 00:38:40
じゃこれ。

function wa(f: hairetu): Real;
var
i: Integer;
begin
for i := 2 to 100 do f[1] := f[1] + f[i];
wa := f[1];
end;

wa := wa + f[i] とやると、右辺の wa はDelphiでは関数呼び出しと解釈されるから、無理。
443デフォルトの名無しさん:2006/12/03(日) 00:36:41
配列に入れた値をヒープソートで絶対値とった小さい順にするプログラム教えてください。
444デフォルトの名無しさん:2006/12/03(日) 04:23:41
ヒープソート難しいよ。
445某TA:2006/12/04(月) 22:36:21
>>443
Wikipedia逝け
アルゴリズム載ってるから
446デフォルトの名無しさん:2006/12/05(火) 00:08:56
>>445
そんなのもう見ました。
447デフォルトの名無しさん:2006/12/05(火) 03:55:22
私もよく解らないけど、
配列を二分木のように解釈するみたい。
配列の先頭=二分木の根っこで、ここに一番大きい値を持ってくるみたい。

ここまではOK?

ttp://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/heap-sort.html
ttp://su10.sgu.ac.jp/~morita/Seminar/6thStudent/entani/sort/heap/heap.html
448デフォルトの名無しさん:2006/12/11(月) 01:00:08
実行時に0〜9以外のキーを入力した場合、
自動的に消えるようにしたいんだけどどうしたらいいかな?
わかる人いますか?
449デフォルトの名無しさん:2006/12/11(月) 16:18:07
何が消えるようにしたいの?
450デフォルトの名無しさん:2006/12/11(月) 23:30:37
Editへの入力からじゃないかな。
ようは数値入力専用Editを作りたいのかと。
OnKeyDownイベントで、いらないキー入力は Key := 0; で無効に出来る。
451デフォルトの名無しさん:2006/12/13(水) 00:32:15
448 ですけど、質問下手ですいません。
具体的に言うと、

program Keisan(input,output);
var a,b,wa:integer;
begin
a:=30;
writeln('数字を入力してください');
readln(b);
wa:=a+b;
writeln('a=',a,' b=',b);
writeln('a+b=',wa)
end.

で実行して、間違ってアルファベットとか打つとエラーになるでしょ?
そうじゃなくって「再度入力してくれ」と表示してもう一回って感じに
自動的に持ってきたいんです。
charでどのキーも入力OKにしてから0〜9を数値型に変換するのかなと
考えたんだけど、いまいちやり方わかりません
452デフォルトの名無しさん:2006/12/13(水) 00:51:47
function ReadInt: Integer;
var
 S: strting;
begin
 repeat
  WriteLn('数字を入力してください');
  ReadLn(S);
 until TryStrToInt(S, Result);
end;
453初心者:2006/12/16(土) 11:06:08
すみません。学校でパスカルにちょこっとふれただけなのですが、課題がでて、もうどうしてよいか分かりません。
助けてください。
入力されたn個の数を大きい順に並び替えるプログラムを作れ。

お願いします。
454デフォルトの名無しさん:2006/12/16(土) 13:48:36
n個の配列を用意して二重ループで大きい順に入れればいい。
455デフォルトの名無しさん:2006/12/17(日) 04:10:08
こんなんどうだ?

function FindMax(A: array of Integer; Start: Integer): Integer;
var
 Max, I: Integer;
begin
 Max := Start;
 for I := Start + 1 to High(A) do
  if A[I] > A[Max] then
   Max := I;
 FindMax := Max;
end;

procedure Swap(var A, B: Integer);
var
 Temp: Integer;
begin
 Temp := A;
 A := B;
 B := Temp;
end;

procedure Sort(var A: array of Integer);
var
 I: Integer;
begin
 for I := 0 to High(A) do
  Swap(A[I], A[FindMax(A, I)]);
end;
456デフォルトの名無しさん:2006/12/19(火) 01:21:31
GNU PascalをOS X上のXcodeで使ってます。
時間の計算をしたいと思いますが、如何すればいいですか?
457デフォルトの名無しさん:2006/12/19(火) 01:36:32
求むエスパー
458デフォルトの名無しさん:2006/12/19(火) 03:02:53
ミリ秒に変換して計算すれば良いと思う。
459デフォルトの名無しさん:2006/12/20(水) 02:21:31
>>458
回答ありがとうございます。それでは、ミリ秒に変換するには如何すればよいのでしょうか。
460デフォルトの名無しさん:2006/12/20(水) 02:41:03
何がしたいのか具体的に書かないと誰も答えられないよ。
461デフォルトの名無しさん:2006/12/20(水) 17:41:23
1 sec = 1000msec
1 min = 60 sec
1 hour = 60 min
462光速エスパー世代774RR:2006/12/26(火) 17:59:23
バッババババビューンと空を逝くw
463 【ぴょん吉】 【1736円】 :2007/01/01(月) 01:08:04
さて、明けたことだし宿題やろ
464q:2007/01/21(日) 20:19:40
[質問]
「上から○(円)が落ちてきて、
ウィンドウの1番下に達したら
その円は止まり、新しい円が
また落ちてくるプログラムを作れ
(ただしfor文を使うこと)。」
という宿題が出たのですが、
よく分かりません。

どなたか分かる方、教えて下さいm(__)m
465デフォルトの名無しさん:2007/01/21(日) 20:33:00
やだ
466デフォルトの名無しさん:2007/01/22(月) 00:04:54
ヒント
Form1.Canvas, Ellipse, Timer, Form1.ClientHeight
467デフォルトの名無しさん:2007/01/22(月) 00:20:44
ここはいつからDelphiスレになったんだ?
468デフォルトの名無しさん:2007/01/22(月) 00:21:29
あぁ、Delphiも対応であったか。失礼。
469デフォルトの名無しさん:2007/01/25(木) 19:06:01
パスカルの入門書でおすすめありませんか?
http://www.saiensu.co.jp/books-htm/ISBN4-7819-0757-1.htm
これを買おうかな、と今は思っているのですが。
470デフォルトの名無しさん:2007/01/26(金) 03:47:12
やめとけ
471光速エスパー世代774RR:2007/01/26(金) 12:38:49
つーか、今からPascalを勉強しようというのが… 授業かなんかかい?

Pascalの教科書は何冊か使ったけれど、てもとにあるのは森口さん他の
「Pascalプログラミング講義」(共立出版)
だ。これ、ちょっと内容が薄いかな。

思い出してみればボーランドのTurbo Tutorが結構優れた教科書だった。
TP5.5はフリーになってるけど、Turbo Tutorってネットに流れてない?

定番アルゴリズムは奥村さんのアルゴリズム事典で勉強したね。
ttp://oku.edu.mie-u.ac.jp/~okumura/algo/algo_pas.html

あれだ、今日びは言語自体より、(一昔前なら)API、(出るちゃん以降は)
コンポーネントの使い方の方が大事だってゆー、つまらないといえばつまらない
世の中になったもんだよ。
472469:2007/01/26(金) 15:20:07
いえ、授業ではなくてただの興味です。
レスありがとうございますm(__)m
473デフォルトの名無しさん:2007/01/27(土) 00:53:01
授業でないなら、その手の教科書本は初心者にはしんどいと思うよ。
興味を持ち続けられないと思う。
474デフォルトの名無しさん:2007/01/27(土) 00:56:26
Delphi言語や、教育目的、古いプログラムの保守は別として、
Pascalもまだまだ現役で使われてるんですか?
475デフォルトの名無しさん:2007/01/27(土) 01:01:17
全く。
476デフォルトの名無しさん:2007/01/28(日) 09:25:11
DelphiってもしかしてObjectPASCALのことですか?
477光速エスパー世代774RR:2007/01/28(日) 15:15:58
>476
その辺は複雑で、ボーランドはBorland Pascal がサポートする言語を
Object Pascal と呼んでいた。Borland Pascalは消滅して、ご存知Delphiが現行なんだが、
これが実装している言語は今では「Delphi言語」と呼ばれているはず。

Delphi言語はプログラミング言語Pascalをオブジェクト指向を用いて
拡張したものだから、Object Pascalの一種であり、最も普及したものだね。
既にPascal言語の de facto standard といっていいと思う。
478デフォルトの名無しさん:2007/01/31(水) 11:03:06
すいません、お初です。
学校課題でπの近似値を求めろ、言われました。マチンの公式使ってやってみようと思ったんですけど、数字を何乗かしたいとおもったっとき、使えるコマンドはあったでしょうか?
たとえば、2のN乗がしたいとき、read(n)で読み込んで、計算させたいということなんですけど。
教えてください。
479光速エスパー世代774RR:2007/01/31(水) 12:33:49
標準的にはないけど、処理系のおまけでついている可能性がある。
なくても自分で書けばおっけー。
480デフォルトの名無しさん:2007/01/31(水) 12:54:08
えーと、どうやれば書けますか?
ちょっと想像がつかないので教えてください。
481光速エスパー世代774RR:2007/01/31(水) 17:29:14
再帰的な定義をそのまま実装(普通は末尾再帰→繰り返しにする)するか、
a ^ bのbが実数の場合は標準函数(だったよね)としてlnとexpがあることを利用すると、ln(a^b) = ln(a) * bだから a^b = exp(ln(a) * b)

冪乗の演算子/函数がないのに対数、指数関数があるというのがWirth先生。
以下FPCでテスト墨

Program PowerTest;
var a, b : real;

function power(a : real; b : integer) : real;
begin
if b > 0 then power := a * power(a, pred(b))
else if b = 0 then power := 1
else power := 1 / power(a, -b)
end;

function RealPower(a, b : real) : real;
begin
RealPower := exp(ln(a) * b)
end;

begin
write('a ^ b, a= , b= '); readln(a, b);
writeln(power(a, round(b)), ' ', RealPower(a, b))
end.
482デフォルトの名無しさん:2007/01/31(水) 18:38:46
ありがとうございました。後はもう少し自分であがいて見ます。
483デフォルトの名無しさん:2007/04/14(土) 09:10:23
落ちてる?
484デフォルトの名無しさん:2007/04/14(土) 18:35:39
GPCのバグを発見してしまったage

整数演算の結果がオペランドのビット巾で丸められちまう。
485デフォルトの名無しさん:2007/04/26(木) 06:38:45
丸められるって?
486デフォルトの名無しさん:2007/06/18(月) 23:59:09
質問です。
大学入ってPascalプログラミングやってるんですが、
『選択ソートのプログラムを作成せよ。
ただし、データ数を最初に入力するように変更すること。
また、データ数は1個から最大10000個まで対応できるようにすること』
とあるのですが、サッパリです。
かなり初心者な質問で申し訳ないのですが、どなたか教えてください
487デフォルトの名無しさん:2007/06/19(火) 00:09:14
>ただし、データ数を最初に入力するように変更すること。

元のソースが無いと変更しようが無い。
488デフォルトの名無しさん:2007/06/19(火) 00:44:47
すみません。元のソースは

program sort(input,putput);
const numofdata=893;
var d: array [1..numofdata] of integer;
i,j,k: integer;
tmp: integer;
begin
for i:=1 to numofdata do
begin
read(d[i]);
end;

for i:=1 to numofdata-1 do
begin
j:=i;
for k:=i+1 to numofdata do
begin
if d[j]>d[k] then j:=k;
end;
tmp:=d[j];
d[j]:=d[i];
d[i]:=tmp;
end;

for i:=1 to numofdata do
begin
writeln(d[i])
end
end.

です
489光速エスパー世代774RR:2007/06/19(火) 13:02:24
ほれ。FreePascalでテスト済み。

Program sort(input, output); (* putputってぉぃw *)
const numofdata = 893; (* 嗤いどころかこれ。これを10000に汁 *)
type dataindex = 1..numofdata;
var d: array [dataindex] of integer;
datanum : dataindex; (* データ数を貯めとく変数を用意するのが肝な *)
i, j, k: integer;
tmp: integer;
begin
write('n (max ', numofdata, ')= '); readln(datanum);
for i := 1 to datanum do read(d[i]); (* begin endブロックいらね *)
for i := 1 to pred(datanum) do begin
j := i;
for k := succ(i) to datanum do
if d[j] > d[k] then j := k;
tmp := d[j]; d[j] := d[i]; d[i] := tmp (* セミコロンいらね *)
end;
for i := 1 to datanum do writeln(d[i]);
writeln('...so modified and tested by 2channelers ;-)')
(* このまま提出するなよ *)
end.
490デフォルトの名無しさん:2007/06/19(火) 14:51:42
ありがとうございます!
491デフォルトの名無しさん:2007/06/19(火) 21:05:37
ローカルのファイルにアクセスするにはどうすればいいですか?
492デフォルトの名無しさん:2007/06/19(火) 22:06:37
>>491
Pascalには標準的な方法がありません。処理系とファイルシステム依存です。

UCSD-Pascal, Pascal/MT, MT+, Turbo/Borland Pascal, FreePascal では
assign手続きを実行しといて、resetなりrewriteなりします。

assign(ファイル変数, ファイル名);
reset(ファイル変数);
...
close(ファイル変数)

GPCだと上のBorland方言に加えて、ISO拡張Pascal標準のbind手続きが使えます。
493デフォルトの名無しさん:2007/06/19(火) 23:26:50
PASCALでCGIは作れますか?
494486&488:2007/06/19(火) 23:34:10
>>datanum : dataindex; (* データ数を貯めとく変数を用意するのが肝な *)
申し訳ないのですが、なぜデータ数を溜めておく変数が必要なのか教えていただけませんか
495デフォルトの名無しさん:2007/06/20(水) 00:17:35
変数に保存しとかなきゃ何回入力を受け入れるべきか解からなくなるじゃn
496光速エスパー世代774RR:2007/06/20(水) 12:43:41
>>493
俺はCP/M世代の棺桶片足なおさんだから、そういう今様なものは
良く知らんのだが、perlやRubyの本をチラリズムしたカンジダと、
httpdとの間でデータをやり取りする規格さえ合ってれば、
文字列操作ができさえすれば良くて、
言語自体はLISPでもCOBOLでもALGOLでもPL/Iでもいいんじゃまいか。
実際、FreePascalでCGI作ってる例があったなあ。

ttp://courses.cs.vt.edu/~cs3304/FreePascal/doc/user/node12.html

ttp://www.erg.slf.th.schule.de/informatik/c/cgi-vortrag/index.html
に説明があるけど、uncgiユニットてのを使うと便利らしい。

ttp://www.is-hanko.co.jp/info/welcome.html
も面白い。茨の道へGO!
497デフォルトの名無しさん:2007/06/22(金) 19:52:22
PASCALの問題です

問題1

西暦を入力して、「1989年は平成2年です」というように年号や年を出力するプログラムを作りなさい。
ただし各年号の境目は両方の年号を出力するようにすること。(1988年は昭和64年でも、平成元年でもある)


問題2
下記を表示するプログラムを作れ

(1)
**********
*********
********
*******
******
*****
****
***
**
*
498デフォルトの名無しさん:2007/06/22(金) 19:57:27
(2)
*
**
***
****
*****
******
*******
********
*********

問題3
Nを入力して1からNまでの和を計算するプログラムを作れ。
また1からNまでの奇数の和を計算するプログラムも作れ。


問題1はif文,2・3はfor文を使用します。
一週間ほど足りない頭で粘ってみてもわかりません。
先生は非常勤だから質問する相手もいないので
皆さんの知恵をお貸ししていただけたら幸いですm(__)m
499デフォルトの名無しさん:2007/06/22(金) 20:21:54
ふーん
こういう宿題出るもんなんだな(´・ω・`)
500デフォルトの名無しさん:2007/06/22(金) 22:28:21
Program LotsOfStars(output);
var i : integer;

procedure StarBar(n : integer);
var i : integer;
begin
for i := 1 to n do write('*');
writeln
end;

begin
for i := 10 downto 1 do StarBar(i);
for i := 1 to 10 do StarBar(i)
end.


おまけ
Program SingleStar(output);
var i : integer;
begin
for i := 10 downto 1 do writeln('*' : i);
for i := 1 to 10 do writeln('@' : i)
end.
501デフォルトの名無しさん:2007/06/23(土) 14:01:19
問題3の前半
Program NeverTested(input, output);
var n : integer;
begin
read(n); write((n * (n+1)) div 2)
{ don't trust me ;-p }
end.
502497,498:2007/06/24(日) 16:49:06
>>500-501
大きなヒントを下さってありがとうございます♪
教養科目で卒業が掛かっているのでとても嬉しいです

問1を自分なりにやってみたのですが、
program gengou(input,output);
var a:integer;
begin
readln(a);
writeln('西暦',a,'年の元号は?');
if a>1988
then writeln('平成',a-1988,'年です')
else if a>1926
then writeln('昭和',a-1926,'年です')
else if a>1910
then writeln('大正',a-1910,'年です')
else if a>1867
then writeln('明治',a-1867,'年です')
else writeln('江戸時代です')
end.

何がダメなのかすらわかりません><
助けてください・・・
503デフォルトの名無しさん:2007/06/24(日) 18:28:48
別に何もダメじゃなくね?
504デフォルトの名無しさん:2007/06/24(日) 18:33:10
強いて言えば問いかけの前にreadlnしてるとこ。
505デフォルトの名無しさん:2007/06/24(日) 18:38:36
あ、元号境界の処理と+1してない。
506デフォルトの名無しさん:2007/06/24(日) 19:41:59
>>505
INC(年号)は俺も気づかなかった
507デフォルトの名無しさん:2007/06/24(日) 22:34:49
>502
1989年は平成元年かつ昭和64年ってのを、最初のif文で判定する必要があると思う。
508デフォルトの名無しさん:2007/06/25(月) 23:25:06
なんとなく年号のテーブルがずれてる気がした。

program gengou;
{$APPTYPE CONSOLE}

var a, i: integer;
const
era: array[0..3] of Integer = (1989, 1926, 1912, 1868);
eraname: array[0..3] of array[0..10] of char = ('平成', '昭和', '明治', '大正');
begin
readln(a);
writeln('西暦', a, '年の元号は:');
for i := 0 to 3 do
if a >= era[i] then
begin
writeln(eraname[i], a - era[i] + 1, '年');
if a = era[i] then
writeln(eraname[i + 1], a - era[i + 1] + 1, '年');
break
end

end.
509デフォルトの名無しさん:2007/06/25(月) 23:30:14
一応コンパイラはdelphi使って確認したけどコンパイラ指示除いてBorland拡張は使っていない・・・と思う。
510デフォルトの名無しさん:2007/06/25(月) 23:32:37
例題から察するに、配列はまだ習ってないんじゃないか
511デフォルトの名無しさん:2007/06/25(月) 23:34:46
>>508
>const
>era: array[0..3] of Integer = (1989, 1926, 1912, 1868);
>eraname: array[0..3] of array[0..10] of char = ('平成', '昭和', '明治', '大正');

ここでもうBorland方言でつ。
512デフォルトの名無しさん:2007/06/25(月) 23:37:46
む、そうなるとかなり長いif文の羅列になるな・・・スマンそのコードは俺の性には合わない。
513デフォルトの名無しさん:2007/06/25(月) 23:39:22
な、な、定数配列はBorland方言とな!標準Pascalじゃやっぱり書けん!
514デフォルトの名無しさん:2007/06/25(月) 23:41:54
>>513
大域変数として名前を確保し、変数初期化手続きを書いて、
大域変数はそこでまとめて面倒を見ておく、てのが常道だった。
まーそこまでストリクトに標準Pascalの流儀を守る必要もないんだけどw

あと、文字列型を使っていいのかも不明なんだよな。
515デフォルトの名無しさん:2007/06/25(月) 23:55:10
久しぶりにヴィルトの原書開いてみたらやっぱり載ってなかった。
なるほどK&Rのどちらかだったか、「これじゃ書けねえ・・・」と思った気持ちもわかる。
いや、嫌いじゃないんだよPascal。むしろ好き。
ありがとう僕の友達Pascalに会わせてくれて。
516デフォルトの名無しさん:2007/06/26(火) 00:03:33
>>515
それはラスカルだ
517デフォルトの名無しさん:2007/06/26(火) 00:03:38
>>515
定数配列や変数宣言での初期化は便利だし、可読性も高くなるんだよね。

言語仕様を出来るだけ小さくしようと言うのがヴィルト先生の狙いだったのと、
原始Pascalでは宣言の順序が決まっているから、
定数宣言の中にユーザ定義型の識別子を書けないというのがあったのかな。

518デフォルトの名無しさん:2007/06/26(火) 00:04:48
>>516
歳がバレるぞww
519デフォルトの名無しさん:2007/06/26(火) 00:10:27
いや歌は違うだろうけど最近もやってるよ。
ttp://www.nippon-animation.co.jp/pocapoca/
520デフォルトの名無しさん:2007/06/26(火) 04:24:17
テラキモスw
521光速エスパー世代774RR:2007/06/26(火) 12:41:47
break文もBorland方言だな。標準Pならgoto文で抜け出すことになるね(こういう時のためにgotoを残してあるんで)。
era回りだけど、record型を使う方が原則的で美しいよな。それと、効率は少し落ちるけど、
eraname = packed array [1..10] of char;
era = record
beginyear, endyear : integer;
name ; eraname
end;
eraarray = array[1..4] of era;

とやってあげて、eをeraarray型の変数として、
for i := 1 to 4 do with e[i] do begin
if (a >= beginyear) and (a <= endyear) then begin
j := a - beginyear;
if j = 0 then write(name, '元年 ') else write(name, succ(j), '年 ')
end
end;
writeln

も手だな。eがソートされていなくても動くし、元年の処理の特殊性が減る。課題とは動作が違うけどね。
522デフォルトの名無しさん:2007/07/01(日) 08:58:27
ファイル型の要素にtreeは使えないの?

program test (input,output,IntFile);
type tree=^node; node=record name:char; tel:integer; left,right:tree; end;
var IntFile:file of tree; r:tree;
begin
reset(IntFile,'tel-data');
read(IntFile,r);

rewrite(IntFile,'tel-data');
write(IntFile,r);
end.

こんな感じで
523デフォルトの名無しさん:2007/07/01(日) 21:14:24
使えるけど無意味だよ。
524デフォルトの名無しさん:2007/07/04(水) 00:48:58
大学ではpascalの講義の後lisp, prologと続くのか?最近はjavaとかもやるのか?
525デフォルトの名無しさん:2007/07/04(水) 01:50:44
っていうかpascal教えてる大学ってどういうところ?
情報系だとJavaを最初に教えると思うし。
526デフォルトの名無しさん:2007/07/04(水) 13:46:13
最終的にpascal処理系を作成させる為に最初にpascalやるんじゃなかろうか?
527デフォルトの名無しさん:2007/07/10(火) 21:03:36
↓の問題なのですが、どなたか教えていただけないでしょうか?

『下記のプログラムを参考にして、ファイルからデータを読み、それを整列し、その後、
”入力された値をデータの中から二分探索によって探索する”ことを繰り返すプログラムを作成せよ』


↓↓↓↓↓下記のプログラム↓↓↓↓↓

program sort(input,output);
var d:array [1..10000] of integer;
numofdata:integer;
i,j,k:integer;
tmp:integer;
begin
read(numofdata)
for i:=1 to numofdata do
begin
read(d[i]);
end;     ↓続きます
528デフォルトの名無しさん:2007/07/10(火) 21:05:07
for i:=1 to numofdata-1 do
begin
j:=i;
for k:=i+1 to numodata do
begin
if d[j]>d[k] then j:=k;
end;
tmp:=d[j];
d[j]:=d[i];
d[i]:=tmp;
end;

for i:=1 to numofdata do
begin
writeln(d[i])
end
end.

どなたかお願いしますm(_ _)m
529光速エスパー世代774RR:2007/07/11(水) 00:09:35
ちょいと書き直すと、
Program sort(input,output);
var d:array [1..10000] of integer;
numofdata:integer;
i,j,k:integer;
tmp:integer;
begin
read(numofdata);
for i:=1 to numofdata do read(d[i]); (* begin end いらね *)
for i:=1 to numofdata-1 do begin
j:=i;
for k:=i+1 to numofdata do if d[j]>d[k] then j:=k; (* begin end いらね *)
tmp:=d[j]; d[j]:=d[i]; d[i]:=tmp
end;

for i:=1 to numofdata do writeln(d[i]) (* begin end いらね *)
end.

ここで
tmp:=d[j]; d[j]:=d[i]; d[i]:=tmp
が肝な。その上のfor文で、i<=jで最も小さいd[j]になるようなjを探し出している。
d[i]をそのd[j]と入れ替えれば、d[i]はi以降の最小値になるわけだ。
これをバブルソートって呼ぶことは知っているよな。
530光速エスパー世代774RR:2007/07/11(水) 00:11:20
ついでだからばぶるな挿入な。さて、新しい値を p とする

d[numofdata + 1] := p;
i := 1;
while p < d[i] do i := i + 1;

これで i は p>=d[i]を満たす最小の値になった(もうソートしてあるから)
p がたまたま d の最大値だったら、これ以上処理は必要ない。そうでなければ、
d の i 番目に p をそうぬうする。

for j := numofdata downto succ(i) do d[succ(j)] := d[j];
d[i] := p;

でそうぬう官僚。実は、p がたまたま d の最大値だった場合もこれを走らせていい。
しかし、課題は二分探索であった。あんま奇麗じゃないがfpcで試してはある。
531光速エスパー世代774RR:2007/07/11(水) 00:13:50
procedure binarysearch(p : データの型; mini, maxi : integer);
begin
i := (mini + maxi) div 2; (* mini と maxi の間の数ならなんでも *)
if p = d[i] then writeln('Found at ', i)
else
if maxi = mini then begin
write('Not found. Must be inserted ');
if p > d[i] then write('after ')
else write('before ');
writeln(i, ' th number.')
end else
if p > d[i] then binarysearch(p, succ(i), maxi)
else binarysearch(p, mini, pred(i))
end;

これをメインプログラムから binarysearch(調べたい数, 1, numofdata)

と呼ぶ。文字列型が使えると、少し奇麗になる。d[i]を何度も評価しているから、
d[i]の評価にコストがかかる場合はローカルにコピーしとく。
532光速エスパー世代774RR:2007/07/11(水) 12:44:57
>>531は局所変数 i を宣言する行を落としていたな。

でだ、>>530と一緒に考えると、次のような改造をすぐ思いつく。

procedure insert(p ; データの型; i : integer);
var j : integer;
begin
numofdata ;= succ(numofdata);
for j := numofdata downto succ(i) do d[j] := d[pred(j)]; (* >>530は間違いだ orz *)
d[i] := p
end;

これは p を d の i 番目にそうぬうする手続な。>>531の真ん中へんでこれを呼ぶ。
if maxi = mini then begin
i := i + ord(p > d[i]);
writeln('Not found, then instert it as ', i, ' th number.');
insert(p, i)
end

新しい数が現れたらずんずん配列に追加していく改造な。
533デフォルトの名無しさん:2007/07/11(水) 22:10:21
>>527
二分探索って何か分かってる?
534デフォルトの名無しさん:2007/07/11(水) 22:46:19
どんな巨大なデータも2分で探索できる高速アルゴリズムのことです
535光速エスパー世代774RR:2007/07/11(水) 22:56:04
データ数が1でも2分かかったりしてw
536光速エスパー世代774RR:2007/07/12(木) 03:35:40
それはないq
537光速エスパー世代774RR:2007/07/12(木) 22:43:26
俺の偽者がずいぶんいるな。おまいらちゃんと名前修飾しろw
538デフォルトの名無しさん:2007/08/03(金) 15:50:40
初めまして、いきなりで申し訳ないんですが教えてください(_ _)

入力された論理式の充足可能性を判定するプログラムを作成せよ。
論理式は, 充足可能性判定の計算量を考慮し, 最大10変数までにする。
という問題です。
以下は注釈です。
「論理式」とは論理変数 x0,x1,x2,・・・に, 論理演算「¬(否定)」,「∧(論理積)」,「∨(論理和)」を有限回適用したものである。
論理式 F(x1,...,xn) が「充足可能である」とは, F(a1,...,an) = true となる変数割当て (a1,...,an)∈{true, false}n が存在することをいいます。
作成するプログラムには, 以下の機能を付加すること。

1:入力された論理式を,通常の式のように表示する機能
「x1∨x2」, 「¬x0」, 「(x2∨¬x3)∧x1」など

2:論理式が true となる(すべての)変数値割当てを表示する機能

「F = x1∨x2 が true になるのは
x1=true, x2=true のとき
x1=true, x2=false のとき
x1=false, x2=true のとき
よって F は充足可能である」

ちなみに入力方法はキーボードで直接入力です。
例として、
例えば, (x1∧x2)∨x3, x1∧¬x1 などはいずれも論理式です。
例えば, F1 = (x1∧x2)∨x3 とすると, x1 = true, x2 = false, x3 = true のとき F1 = true となるので, 論理式 F1 は充足可能です。 一方, F2 = x1∧¬x1 とすると, どのような x1 に対しても F2 = false となるので, F2 は充足可能ではありません。

お願いします(_ _)
539光速エスパー世代774RR:2007/08/03(金) 21:05:34
めんどいから逆ポで式を書くことにする。
例えば a b & c ¥ | ならば (a and b) or (not c) な。変数の個数は maxvar で与える。
Program Viva2chan;
const maxvar = 'c';
type
pnode= ^node;
node = record value : boolean; next : pnode end;
var
stack : pnode;
variables : array ['a'..maxvar] of boolean;
i : integer; s : string; c : char;

procedure push(v : boolean);
var nd : pnode;
begin
new(nd);
nd^.value := v; nd^.next := stack; stack := nd
end;

function pop : boolean;
var v : boolean; nd : pnode;
begin
nd := stack; v := nd^.value; stack := nd^.next; pop := v;
dispose(nd)
end;
540光速エスパー世代774RR:2007/08/03(金) 21:07:01
procedure ope(operation : char);
var operand : boolean;
begin
if operation in ['&', '|', '#'] then operand := pop;
with stack^ do
case operation of
'&' : value := value and operand;
'|' : value := value or operand;
'#' : value := value xor operand;
'¥' : value := not value
end
end;

function calc(source : string) : boolean;
var i : integer; c : char;
begin
for i := 1 to length(source) do begin
c := source[i];
if c in ['a'..maxvar] then push(variables[c])
else if c in ['&', '|', '#', '¥'] then ope(c)
end;
calc := pop
end;

541光速エスパー世代774RR:2007/08/03(金) 21:08:28
procedure SetVarSet(n : integer);
var c : char;
begin
for c := 'a' to maxvar do begin
variables[c] := odd(n);
n := n div 2
end
end;

function powerof(n : integer) : integer;
begin
if n > 0 then powerof := powerof(pred(n)) * 2
else powerof := 1
end;

begin
stack := nil;
write('Enter term :'); readln(s);
for i := 1 to powerof(ord(maxvar) - ord('a') + 1) do begin
SetVarSet(i);
for c := 'a' to maxvar do write(variables[c], ' ');
writeln(calc(s))
end
end.
542光速エスパー世代774RR:2007/08/03(金) 21:13:10
つうわけで、n個の論理型変数が張る空間を全部舐めて、結果を表示する。
ここでは手抜きでやってるけど、空間なめにはハフマン距離を使うとかっこいい。

実際には全部舐める必要はなくて、最初にtrueが帰った時に終了すればいい。
中置気泡対応は任せた。
543デフォルトの名無しさん:2007/08/04(土) 14:14:45
学校の宿題が

電車をA駅からB駅で乗り換えて、C駅に行きたい。
C駅での到着希望時刻を入力したらA駅での時刻が出力されるプログラムを作れ。

なのですが、行数300越え+時刻表からデータ取り込みなんで質問しようにもどこがおかしいのかいまいち分かりません。
怪しいところを抜粋して書き込むのでアドバイスよろしくお願いします。
544543:2007/08/04(土) 14:28:19

procedure Minteger( var int: integer);
begin
repeat read(f, c) until c in['1','2','3','4','5','6','7','8','9','0'];
if c in['1','2','3','4','5','6','7','8','9','0'] then
int := ord(c) - ord('0');
end

procedure Extfile(var a:data; i :count);
var
x,y,z: integer;
begin
i := 0;
while not eof(f) do begin { ファイル末尾でない限り }
Minteger(int);
x := int;
Minteger(int);
y := int;
x := (10*x)+y;
while not eoln(f) do begin
i := i + 1;
Minteger(int); y := int;
Minteger(int); z := int;
a[i] := (x*60) + (y*10) + z + 6;
end;
readln(f); { 改行文字を読み飛ばす }
end;
n := i;
writeln(output);
end;
545543:2007/08/04(土) 14:36:38
時刻表の数字の部分をinteger型に直す手続き(procedure Minteger)と、それぞれの時間を
分の単位に直してa[i]の配列に放り込む手続き(procedure Extfile)のつもりです。

時刻表のファイル自体はちゃんと開けています。
時刻表は
08 09 19 29 39 51
09 01 11 21 31 41 51
10 01 11 21 31 41 51
のようにすべて二桁になるようにつくっています。
546543(2):2007/08/04(土) 14:43:37
procedure ArriveSin(var Ax:integer);
var
x,y,z,mi: integer;
k: count;
begin
if (d = 1) then begin
reset(f, 'HolyUmeda'); writeln('Holyを読み込み増した。')
end
else begin
reset(f, 'WeekUmeda'); { ファイルを開く }
writeln('Weekを読み込み増した。')
end;

Extfile(a, i);

if (h < 14) then begin
k := 1;
while a[k] <= mi do
k := k+1;
Ax := a[k-1];
end
else begin
k := n;
while a[k] > mi do
k := k-1;
writeln('a[',k,'] = ',a[k]);
Ax := a[k];
end;
close(f)
end;
547543(2):2007/08/04(土) 14:59:52
さっきのa[i]の配列の中でmi(到着希望時刻を分単位になおしたもの)より小さいものの中で、一番大きなものを探してAxに代入しています。

hは時刻(時)で14時より早いなら前から、遅いなら後ろから調べるようにしているつもりです。
548538:2007/08/04(土) 15:54:03
>>538です。
答えありがとうございます!
実際の入力は例えば「ab&cdl&」と入力すればいいってことですね(゚∀゚)
出力が(a∧b)∧(c∨d) となる感じですね。

あと、プログラムの解説も書いて提出しなければならないのですが・・・
もしよろしければ、解説をしていただけるとありがたいです。

549光速エスパー世代774RR:2007/08/04(土) 17:24:23
node = record
value : boolean; term : string; next : pnode
end;

てなかんじに項を文字列としてスタックに積めるようにする。
逆ポはそれ自体構文解析してるようなもんだから、次のようにすれば中置紀宝に
できるよ。

procedure term(operation : char);
var operand, tempterm : string;
begin
if operation in ['&', '|', '#'] then operand := popt;
with stack^ do begin
case operation of
'&' : tempterm := term + ' and ' + operand;
'|' : tempterm := term + ' or ' + operand;
'#' : tempterm := term + ' xor ' + operand;
'¥' : tempterm := 'not ' + term
end;
term := '(' + tempterm +')'
end
end;
550光速エスパー世代774RR:2007/08/04(土) 17:37:26
function disp(source : string) : string;
var i : integer; c : char;
begin
for i := 1 to length(source) do begin
c := source[i];
if c in ['a'..maxvar] then pusht(c)
else if c in ['&', '|', '#', '¥'] then term(c)
end;
disp := popt
end;

push, pop類はスタックを実装している。RPNだから単純なスタックマシンで
好きなだけ複雑な式を計算させられる。calcが手抜きパーザで、変数名を見ると
スタックに値を積み、演算子を見ると、opeで演算を行いスタックトップに値を残す。
最後にpopすれば式全体の値になる。
変数空間を舐めるのはSetVarSetで、0から始まる2^変数個の整数を生成して、
得られた整数の各ビットを変数の値に代入している。
551光速エスパー世代774RR:2007/08/04(土) 17:54:07
for i := 1 to powerof(ord(maxvar) - ord('a') + 1) do
はこれでもいいけど、
for i := 0 to pred(powerof(ord(maxvar) - ord('a') + 1)) do
の方が見栄えがいいな。

「変数空間を舐めるのはSetVarSetで、0から始まる2^変数個の整数を生成して、
得られた整数の各ビットを変数の値に代入している。」は
「変数空間を舐めるために、0から始まる2^変数個の整数を生成して、得られた
整数の各ビットをSetVarSetで各変数の値に代入している。」
552光速エスパー世代774RR:2007/08/04(土) 18:15:10
>>543
時刻表ってのは基本的に列車の配列なのな。
列車をどうデータ化するかが問題じゃな。
別線を通ったり、優等列車だったりして特定の駅に停まらないことを表現するのも
忘れてはいけないのな。

駅乙にある時刻までに到着する、
駅乙に到着する前に駅甲に停車する列車のうちで、
駅甲の発車時刻が一番遅いものを見つける。この操作を二回繰り返せばいい。
553デフォルトの名無しさん:2007/08/06(月) 17:29:56
>>548です。ありがとうございます。
実際に実行してみました。
Enter term: の後に a b & c \ | と入力すると
TRUE FALSE FALSE TRUE
FALSE TRUE FALSE TRUE
TRUE TRUE FALSE TRUE
FALSE FALSE TRUE FALSE
TRUE FALSE TRUE FALSE
FALSE TRUE TRUE FALSE
TRUE TRUE TRUE TRUE
FALSE FALSE FALSE TRUE
と表示されました。これは左から a, b, c, [(a and b) or (not c)]
となっているとわかりました。
実はプログラムへの要求事項があって
入力された論理式を,通常の式のように表示する機能
(例えば 入力が「a b |」 ならば 出力で「(a∨b」と表示される)
論理式が true となる(すべての)変数値割当てを表示する機能
の二つの機能、まとめると
「F = a∨b が true になるのは
a=true, b=true のとき
a=true, b=false のとき
a=false, b=true のとき
よって F は充足可能である」
こういうような形で表示しなければならないらしいんです。
こうするにはどうしたらいいのでしょうか?
何度もすみません^^;



554光速エスパー世代774RR:2007/08/07(火) 00:35:55
「普通の式」で書くのは549-550のを久美こんでくれたまへ
もひとつのは、式の評価がtrueな時だけ出力すればいいから簡単。

ただねえ、10変数まで許すんでしょ、変数の値の集合には1024個の
元があって、式(変数1)を真にするのは500個、変数1-10の論理和をとれば
1023個で真になる。そんなのを表示しろというのも、若干野蛮な問題だと
思うなww
555デフォルトの名無しさん:2007/08/07(火) 15:51:13
>>553です。ありがとうございます。
教えていただいたプログラムに549ー550を加えてみました。
Program Viva2chan;
const maxvar = 'c';
type
pnode= ^node;
node = record
value : boolean; term : string; next : pnode
end;
var
stack : pnode;
variables : array ['a'..maxvar] of boolean;
i : integer; s : string; c : char;

procedure push(v : boolean);
var nd : pnode;
begin
new(nd);
nd^.value := v; nd^.next := stack; stack := nd
end;

function pop : boolean;
var v : boolean; nd : pnode;
begin
nd := stack; v := nd^.value; stack := nd^.next; pop := v;
dispose(nd)
end;

556デフォルトの名無しさん:2007/08/07(火) 15:52:20
procedure ope(operation : char);
var operand : boolean;
begin
if operation in ['&', '|'] then operand := pop;
with stack^ do
case operation of
'&' : value := value and operand;
'|' : value := value or operand;
'\' : value := not value
end
end;






557デフォルトの名無しさん:2007/08/07(火) 15:53:13
function disp(source : string) : string;
var i : integer; c : char;
begin
for i := 1 to length(source) do begin
c := source[i];
if c in ['a'..maxvar] then pusht(c)
else if c in ['&', '|', '#', '\'] then term(c)
end;
disp := popt
end;

function powerof(n : integer) : integer;
begin
if n > 0 then powerof := powerof(pred(n)) * 2
else powerof := 1
end;

begin
stack := nil;
write('Enter term :'); readln(s);
for i := 1 to powerof(ord(maxvar) - ord('a') + 1) do begin
SetVarSet(i);
for c := 'a' to maxvar do write(variables[c], ' ');
writeln(calc(s))
end
end.
558デフォルトの名無しさん:2007/08/07(火) 15:54:01
5ー7行目を549のように書き換えました。
60ー83行目に549ー550を追加しました。
コンパイルすると
push, pop, ope, calc, SetVarSet, term
"datakozo.p", line 62: Warning: Symbol 'POPT' is not defined [221]
"datakozo.p", line 62: Warning: Mixing non-strings with strings [170]
, disp
"datakozo.p", line 80: Warning: Symbol 'PUSHT' is not defined [221]
"datakozo.p", line 83: Warning: Symbol 'POPT' is not defined [221]
"datakozo.p", line 83: Warning: Mixing non-strings with strings [170]
, powerof, Viva2chan

Translation completed.
datakozo.c: 関数 `term' 内:
datakozo.c:116: `popt' が宣言されていません (この関数内で最初に利用)
datakozo.c:116: (未宣言の各変数については、それが最初に現われたそれぞれの関数
datakozo.c:116: に対して一度だけ報告されます。)
datakozo.c: 関数 `disp' 内:
datakozo.c:162: `popt' が宣言されていません (この関数内で最初に利用)

となりました。この場合はどうなのでしょうか?
あと、trueのときだけを表示するには下から4行目を換えればいいのかなと思ったのですがどうでしょうか?
559デフォルトの名無しさん:2007/08/23(木) 16:57:39
約分をするプログラムの作り方を教えてください
560光速エスパー世代774RR:2007/08/24(金) 01:34:38
最近はBASIC屋に化けてるww

約分ってのは分母子を最大公約数で割ればいいわけだから、
よーするに最大公約数を求める問題にいきつく。
これは二千年以上前から判っている方法で溶ける。FPCでテスト墨。

Program Euclid;

function GCD(m, n : integer) : integer;
begin
if n = 0 then GCD := m
else if m mod n = 0 then GCD := n
else GCD := GCD(n, m mod n)
end;

begin
writeln(GCD(123, 12))
end.

エウクレイデス先生はとても偉かったし、算法も高効率だが、
このコード自体の効率はわるいよ。
561デフォルトの名無しさん:2007/08/24(金) 16:43:39
有賀と
562nao:2007/08/24(金) 17:03:06
data.txt(100個の英単語がアルファベット順)というファイルに、
新しく単語を入力、またはそのファイルから単語を削除するプログラムを
どなたか作ってください。お願いします。
563デフォルトの名無しさん:2007/08/24(金) 17:24:41
おい!誰ぞ!

パスカルの後継言語ヘクトパスカル作れよ!
564デフォルトの名無しさん:2007/08/24(金) 17:59:51
そこはあえてバールと言おうぜ。
565光速エスパー世代774RR:2007/08/24(金) 21:40:07
どんなに気圧が低くても、愛の風は風力3w
566デフォルトの名無しさん:2007/09/20(木) 18:01:08
program EX01(input,output);
var D1,D2,S,D,P,Q:integer;
begin
read(D1,D2);
S:=D1+D2;D:=D1-D2;P:=D1*D2;Q:=D1 dir D2;
writeln(D1,D2);
writeln(S,D,P,Q);
end.
整数の四則演算なのですが、Windowsで保存するときの拡張子を教えてください。
567566:2007/09/20(木) 22:50:15
急いでいたので、言葉が足りなかったかもしれません…。
今日から大学での講義がスタートして、教科書もなんにもなく、いきなり出された宿題なので、さっぱり分かんないのです。
C言語でやっていたように、Windowsのメモ帳でプログラムを作って、
【.cpp】ではない何かで保存→コマンドプロンプトで実行
というようにやりたいのですが、いろいろと教えていただきたいです。
568デフォルトの名無しさん:2007/09/20(木) 22:51:10
EX01.pasじゃだめなの?
569デフォルトの名無しさん:2007/09/20(木) 23:06:12
>>567
開発環境、つか、コンパイラは何を使っているんですか?
570デフォルトの名無しさん:2007/09/20(木) 23:07:14
コマンドプロンプトでは、
C:\Documents and Settings\user>cd My Documents
C:\Documents and Settings\user\My Documents>bcc32 EX01.pas
C:\Documents and Settings\user\My Documents>EX01.exe
って感じでおkですか?
571567:2007/09/20(木) 23:10:24
>>569
見てみたら、C++ Builderってやつでした。
これじゃPascalは無理か…
572デフォルトの名無しさん:2007/09/20(木) 23:30:40
>>566
そのソースプログラムをFree Pascal Compiler 2.0で
コンパイルしてみたらエラーが出たよ。dirはdivだね。

誤 Q:=D1 dir D2;
正 Q:=D1 div D2;
573デフォルトの名無しさん:2007/09/20(木) 23:38:05
>>571
ぼくはLinuxユーザーですが、
Free PascalにはWindows用のものもあるようですから
Free Pascalをインストールして試してみられてはいかがでしょう?

http://www.freepascal.org/
このサイトのDownloadというリンクをクリックしてみてください。
Win32, Win64 and WinCEというのがあるはずです。
574デフォルトの名無しさん:2007/09/20(木) 23:42:41
ちなみに、Free Pascalについてはこのページが参考になります。
ttp://www.ss.u-tokai.ac.jp/~onishi/lecture/freepascal.html
575567:2007/09/21(金) 00:00:08
>>572
板書の写し間違いですね。ありがとうございます。

>>573
dです!今すぐダウンロード&インストールします!
576567:2007/09/21(金) 01:00:56
うおおおおおおおおお!!!!!!!!
できました!!!!!!!!マジdクス!

来週からもよろしくお願いしますwww
577567:2007/09/21(金) 01:14:12
てへ、もういっちょ教えてくださいw
さっきのを、整数じゃなくて実数にするのですが、
program PR01(input,output);
real D1,D2,S,D,P,Q:integer;
begin
read(D1,D2);
S:=D1+D2;D:=D1-D2;P:=D1*D2;Q:=D1/D2;
writeln(D1,D2);
writeln(S,D,P,Q);
end.
だとエラーが出るんですけど、どこが違うのでしょう?
578567:2007/09/21(金) 01:20:25
2行目は
var D1,D2,S,D,P,Q:real;
ですね。でもまだ上手くいかない気が…。
579567:2007/09/21(金) 02:11:32
うお、S:6:2とかにしないと、桁数がおかしなことになるんですね。
解決しました!
580デフォルトの名無しさん:2007/09/30(日) 19:15:06
 
581デフォルトの名無しさん:2007/10/03(水) 00:21:35
一番短いパスカルのプログラムってどんなのですか?
文字数が一番少ないものを作れという課題が出たのですが…
582デフォルトの名無しさん:2007/10/03(水) 00:22:35
ageてしまえ
583デフォルトの名無しさん:2007/10/03(水) 00:28:23
program a;
begin
end.
584デフォルトの名無しさん:2007/10/03(水) 13:45:25
>>583
改行コードをスペースにすれば(環境によっては)1文字分減るかも。
585デフォルトの名無しさん:2007/10/03(水) 17:01:06
短すぎてびっくりしましたw それでもいいんですね。ありがとうございます。
ついでにこれも…。
☆頭書きをBNF記法で表せ。
☆整数「43221」を読み込み、逆順にして、元のデータと共に出力せよ
☆次の余剰を調べよ
14 mod 4
-14 mod 4
14 mod -4
-14 mod -4
586光速エスパー世代774RR:2007/10/03(水) 18:35:48
program a;begin end.

Pascalのセミコロンは区切り子なので、改行もスペースもいらない。
587デフォルトの名無しさん:2007/10/03(水) 19:09:53
>>585
>☆頭書きをBNF記法で表せ。
何の頭書き?

>☆整数「43221」を読み込み、逆順にして、元のデータと共に出力せよ
正数を文字列にしてひっくり返せばいいの?

>☆次の余剰を調べよ
何が分からないの?その式をそのまま実行して出力したんじゃダメなの?
588デフォルトの名無しさん:2007/10/04(木) 00:44:16
program PR0203(input,output);
var W,L,H,V,S:integer;
begin
readln(W,L);raldln(H);writeln(W,L,H);
V:=W*L*H;S:=2*(W*(L+H)+L*H);
writeln(V,S);
end.

これでエラーが出るのは何故なんでしょう?

PR0203.pas(4,21) Error: Identifier not found "raldln"
PR0203.pas(4,24) Error: Illegal expression
PR0203.pas(4,25) Warning: Variable "H" does not seem to be initialized
PR0203.pas(8) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
Error: C:\FPC\2.2.0\bin\i386-Win32\ppc386.exe returned an error exitcode (normal
if you did not specify a source file to be compiled)

と出たのですが、よくわかりません。
589デフォルトの名無しさん:2007/10/04(木) 00:46:47
コンパイラ「raldln なんて関数ねーよ」
590光速エスパー世代774RR:2007/10/04(木) 00:47:49
>>588
>raldln(H)

そらー単純にミスタイプづら。
「raldlnなんつー識別子はないどごるぁ」ってコンパイラが逝ってるじゃん。
591光速エスパー世代774RR:2007/10/04(木) 00:51:47
>>589
うふっ、けこーんね♥
こんど一緒にゐると先生の所にいきませんこと?
ねぇってば、ねぇ、ねぇ

それにしても、どう指を動かすとイク^H^Hこんなtypoするんだろうなw
592デフォルトの名無しさん:2007/10/04(木) 00:54:51
ひゃー、タイプミスはずかし…。
>>585の頭書きなんですけど、

program ●●●(input,output)

の事らしいです。BNFをぐぐってもいまいち理解出来なくて。
593デフォルトの名無しさん:2007/10/04(木) 01:08:58
<頭書き> ::= <名前> "(input,output)"

こんなんでいいのけ??
594デフォルトの名無しさん:2007/10/04(木) 02:03:34
http://imepita.jp/20071004/062300

とっさに書きました。
これをBNFに書き換えるのを教えてください!!
お願いします!!!!!
595デフォルトの名無しさん:2007/10/04(木) 02:14:44
596デフォルトの名無しさん:2007/10/04(木) 02:44:32
>>585の2個目

program PR0231(input,output);
var D,X,S:integer;
begin
read(D);
X:=D;S:=0;

S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;

writeln(D,S);
end.

これで出ないのはなぜ、、、。
597デフォルトの名無しさん:2007/10/04(木) 07:05:52
できました!
ありがとうです!!
598デフォルトの名無しさん:2007/10/04(木) 09:03:54
いいよいいよ。どんどん宿題をオープンにしちゃって! 他の人も勉強になるから。
599デフォルトの名無しさん:2007/10/04(木) 09:16:42
バッカス・ナウア記法って、そういや昔『やさしいコンピュータ科学』を読んだときに
Turbo Pascalの概要が解説されているところで使われていたのを思い出した。
<> -> <> こんな感じの<>を使った記述。ちがったっけ?


600光速エスパー世代774RR:2007/10/04(木) 19:18:53
>>596

>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;

次は、「自動化ちうのをしたくて電算機プログラムやってるのに、
なんでオラさはこんな5回も6回もコピペしなきゃなんねえだべ」と思ってみよう。

手抜きとぐうたら根性こそプログラミングの推薬ww
601デフォルトの名無しさん:2007/10/08(月) 02:02:31
exp(x)とかodd(x)みたいな感じで、even(x)って存在するの?
602デフォルトの名無しさん:2007/10/08(月) 07:27:53
not odd(x) でいいーぶん
603デフォルトの名無しさん:2007/10/08(月) 10:02:52
>>602
初めて知った!d!
ついでに。
なにが違うんじゃー
全部0って出てくるー

program PR0331(input,output);
var D1,D2:real;
var T1,T2,T3,T4,R1,R2,R3,R4:integer;
begin
read(D1,D2);
T1:=trunc(D1);T2:=trunc(D2);T3:=trunc(-D1);T4:=trunc(-D2);
R1:=round(D1);R2:=round(D2);R3:=round(-D1);R4:=round(-D2);
writeln('trunc(',D1:2:1,')=',T1:2,'trunc(',D2:2:1,')=',T2:2,'trunc(',-D1:2:1,')=',T3:2,'trunc(',-D2:2:1,')=',T4:2);
writeln('round(',D1:2:1,')=',R1:2,'round(',D2:2:1,')=',R2:2,'round(',-D1:2:1,')=',R3:2,'round(',-D2:2:1,')=',R4:2);
end.

あと、もうちょいシンプルにできないのかな、これw
604光速エスパー世代774RR:2007/10/09(火) 12:48:18
>D1:2:1
少なくとも三桁は確保しないと表示できないと思われ。
負数だったら少なくとも四桁。

こういうのはシンプルにしようがないんだけど、元数値を別に表示すると少しは見やすいかな。

writeln('Data Entered : ', D1, D2);
writeln('Trunc''s of them are ', trunc(D1), ' and ', trunc(D2), ' respectivly.');
writeln('Trunc''s of negated them are ', trunc(-D1), ' and ', trunc(-D2), ' respectivly.');
writeln('Round''s of them are ', round(D1), ' and ', round(D2), ' respectivly.');
writeln('Round''s of negated them are ', round(-D1), ' and ', round(-D2), ' respectivly.');
writeln('Thus, both functions are (different from / same for) each other in case of (you must fill this parenthesis ).')
605デフォルトの名無しさん:2007/10/09(火) 21:31:21
program PR0331(input,output);
const D1=0.4;D2=0.5;D3=-0.4;D4=-0.5;
var T1,T2,T3,T4,R1,R2,R3,R4:integer;
begin
T1:=trunc(D1);T2:=trunc(D2);T3:=trunc(D3);T4:=trunc(D4);
R1:=round(D1);R2:=round(D2);R3:=round(D3);R4:=round(D4);
writeln('trunc(',D1:4:1,')=',T1:2,' trunc(',D2:4:1,')=',T2:2,' trunc(',-D1:4:1,')=',T3:2,' trunc(',-D2:4:1,')=',T4:2);
writeln('round(',D1:4:1,')=',R1:2,' round(',D2:4:1,')=',R2:2,' round(',-D1:4:1,')=',R3:2,' round(',-D2:4:1,')=',R4:2);
end.

にしたら、

trunc( 0.4)= 0 trunc( 0.5)= 0 trunc(-0.4)= 0 trunc(-0.5)= 0
round( 0.4)= 0 round( 0.5)= 0 round(-0.4)= 0 round(-0.5)= 0

ってなっちゃう…やっぱり全部ゼロだ…
606デフォルトの名無しさん:2007/10/09(火) 21:37:07
>>605
えーと、何が問題なの?
607デフォルトの名無しさん:2007/10/09(火) 21:45:37
0.4,0.5,-0.4,-0.5をtruncとroundで出力?したいのです。
truncは少数点以下切り捨てだから、全部0になっておkなのですが、
roundは四捨五入だから、

round( 0.4)= 0 round( 0.5)= 1 round(-0.4)= 0 round(-0.5)=-1

ってなるはずなんですよ。
608デフォルトの名無しさん:2007/10/09(火) 22:33:59
program PR0311(input,output);
ver D1,D2:integer;
ver O1,O2,E1,E2:Boolean;
begin
read(D1,D2);
O1:=odd(D1);D2:=odd(D2);
E1:=even(D1);E2:=even(D2);
writeln(' odd(',D1,')=',O1);writeln(' odd(',D2,')=',O2);
writeln('even(',D1,')=',E1);writeln('even(',D2,')=',E2);
end.

これのどこがエラーなんでしょう??
609デフォルトの名無しさん:2007/10/09(火) 22:44:50
>>607
>roundは四捨五入
ダウト
roundは Banker's rounding

>>608
エラーメッセージが示す通り
610606:2007/10/09(火) 22:47:16
>>607
処理系は?
611デフォルトの名無しさん:2007/10/09(火) 22:58:11
>>668を短くしたんですが、まだエラーっす

program PR0311(input,output);
ver D1,D2:integer;
begin
read(D1,D2);
writeln(' odd(',D1,')=',odd(D1));writeln(' odd(',D2,')=',odd(D2));
writeln('even(',D1,')=',even(D1));writeln('even(',D2,')=',even(D2));
end.

エラーメッセージ
Free Pascal Compiler version 2.2.0 [2007/09/09] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Win32 for i386
Compiling PR0311.pas
Fatal: Syntax error, "BEGIN" expected but "identifier VER" found
Fatal: Compilation aborted
Error: C:\FPC\2.2.0\bin\i386-Win32\ppc386.exe returned an error exitcode (normal
if you did not specify a source file to be compiled)
612デフォルトの名無しさん:2007/10/09(火) 23:10:27
ver
. ~
613611:2007/10/09(火) 23:21:03
orz<d
614デフォルトの名無しさん:2007/10/09(火) 23:40:05
>>609
Banker's rounding とは??
615デフォルトの名無しさん:2007/10/09(火) 23:41:59
全板全スレ全質問対応テンプレ
Q.○○って何ですか?
A.ググレカス
616光速エスパー世代774RR:2007/10/10(水) 21:09:07
Q.ググレカスって何ですか?
A.再帰汁
617デフォルトの名無しさん:2007/10/13(土) 03:41:28
618大学の課題:2007/10/18(木) 12:20:53
 大学の課題ですが、よく分らないのでお願いします。

ディスプレー上から、A, a, Bなどを入力し,ord()にて
順序型に変換したらどのような数字が表れるかを検討せよ.

プログラムを作成したのち、そのファイルの最後に検討結
果を記述し、提出せよ。

以上が、課題です。
大変困っています。
よろしくお願いします。
619デフォルトの名無しさん:2007/10/18(木) 17:52:27
まず大学名と学部、学科を
620光速エスパー世代774RR:2007/10/18(木) 19:29:18
Program ILoveWirth(input, output);
var c : char;
begin
repeat
read(c); writeln(ord(c))
until c = ' '
end.

(* results and discussion *)
(* conclusion *)
621デフォルトの名無しさん:2007/10/18(木) 20:24:20
本当に、有難うございました。
もう一つ、課題が出されたのですが、光速エスパー世代774RRさんにやってい
ただいたのを参考に、もう一度やってみたいと思います。
また、よろしくお願いします。
622デフォルトの名無しさん:2007/10/24(水) 13:01:33
ディスプレー上から、A, a, Bなどを入力し,ord()にて順序型に変換したらどのような数字が表れるかを検討せよ.

A君,B君,C君の3人が,programming(プログラミング基礎),algebra(代数),circuit(電気回路),english(英語),electromagnetics(電磁気学)の5科目のうちのいくつかを選択している。
3人が一緒になる授業、A君が一人のみで出席する授業を調べるプログラムを作成せよ。
但し、3人が選択している科目は各自設定してよい。

教えてください。
623デフォルトの名無しさん:2007/10/24(水) 13:47:18
65,97,66
624デフォルトの名無しさん:2007/10/24(水) 13:53:05
programming = 16;
algebra = 8;
circuit = 4;
english = 2;
electromagnetics = 1;

a = algebra + english + electromagnetics;
b = programming + circuit + english;
c = algebra + circuit + english;

3人一緒 = a & b & c;
a君のみ = a & ~b & ~c;
625たく:2007/10/24(水) 14:32:25
XPでvisualstudioを使ってます。
問題:長さ100のint型配列 int a[100]がある。a[0]〜a[99]には整数が収められているする。
この100個の中で一番小さい数を求め、画面に出力するプログラムを作成せよ。
出力形式は「ans.=???」とせよ。???の部分は答え。

なんですが、全くわからないので教えて下さい。
626デフォルトの名無しさん:2007/10/24(水) 18:29:39
大学の課題で、
ニュートン法により2の立方根(三乗根2)を少数点以下第5位まで求めるプログラムを作りなさい。
と出たのですが、全く分からずにとても困っています。
よろしくお願いします。
627光速エスパー世代774RR:2007/10/24(水) 20:50:24
>>625
XPて何ですか
intって何ですか
(C)void

>>626
にゅーとん法はやったことがないなあ。いま書類書きで脳があぼんしてるので
気力が出たらやってみる。
628デフォルトの名無しさん:2007/10/24(水) 20:58:20
ニュートン法って最初に与える初期値の妥当性はどうやって検証したらいいのですか?
629光速エスパー世代774RR:2007/10/24(水) 21:05:42
>>624
折角なので集合型を使いましょうやw

Program Viva2chan(output);
type
courses = (programming, algebra, circuit, english, electromagnetics);
coursset = set of courses;
var
studentA,
studentB,
studentC : coursset;

procedure DispSet(s : coursset);
begin
if programming in s then write('Programming');
if algebra in s then write('Algebra');
if circuit in s then write('Circuit');
if english in s then write('English');
if electromagnetics in s then write('Electromagnetics');
writeln
end;

begin
studentA := [programming, algebra, electromagnetics];
studentB := [programming, english, electromagnetics];
studentC := [english, circuit, electromagnetics];
DispSet(studentA * studentB * studentC);
DispSet(studentA - (studentB + studentC))
end.
630625:2007/10/24(水) 21:56:06
>>627
windowsXPです。
intは整数って事ですかね。
明日締め切りなんです。お願いします!
631デフォルトの名無しさん:2007/10/24(水) 23:33:00
失礼します〜

program PR0501(input,output);
var C:char;N:integer;
begin
readln(N);
c:=chr(N);
writeln(N-1,' ',chr(N-1),' ',N,' ',chr(N),' ',N+1,chr(N+1));
writeln(N-1,' ',pred(N),' ',N,' ',chr(N),' ',N+1,' ',cuss(N));
end.

これ、なにがちがうんでしょう?そもそも何をやっているのかわかってないのですが…
632デフォルトの名無しさん:2007/10/24(水) 23:34:30
cussじゃなくてsuccだったwww
633光速エスパー世代774RR:2007/10/25(木) 12:59:16
>>630
 ヘ_ヘ
ミ・・ ミ  
(   )〜
Pascalは滅んだことにしたいのですね(C)void
(まあ事実だけどさwww)

>>631
勝手に解説すると(俺は電線マンか)

・Pascalには順序型というものがある
・文字型も整数型も順序型である(論理型も>>629の courses も順序型だよん)
・succは順序型の「次の要素」、predは「前の要素」を返す関数である

ということを理解しろというわけ。これって結構大事でさ、順序型はfor文の
制御変数に使えるとか、case文に使えるとかあるから。

他にも、例えば文字型と文字列型の区別がない言語が結構あるんだけど、
ある文字列の「次の文字列」なんて簡単には定義できないから、
そういう言語ではfor c := 'a' to 'z' do なんてのは考えることが難しい。
634デフォルトの名無しさん:2007/10/30(火) 03:36:29
var atai : word; から上1バイト下1バイトを取得する場合は
ue := atai shr 8;
shita := word(atai shl 8) shr 8;
これでよいのでしょうか?
635デフォルトの名無しさん:2007/10/30(火) 17:36:40
・正の整数nを読み込み
  1+(1/1!)+(1/2!)+.....+(1/n!)
 の値を計算して出力するプログラムを作りなさい。

だれか教えてください。計算式が作れません。
636デフォルトの名無しさん:2007/10/30(火) 17:40:26
function factorial(i : integer) : real;
を別に作ると楽。
637デフォルトの名無しさん:2007/10/30(火) 17:50:20
今こんな感じです。どう直せばいいですか?

function factrial(i:integer): real;
begin
if n=1 then begin
factrial := 1;
end else begin
factrial := i*factrial(i-1);
end;
begin
write('Enter n : ');
readln(n);
For i:=1 to n do
begin
ANS:=1+(1/factrial);
end;
end;
638デフォルトの名無しさん:2007/10/30(火) 17:52:48
ANS:=1;
For i:=1 to n do
ANS:=ANS+(1/factorial(i));
639デフォルトの名無しさん:2007/10/30(火) 17:53:24
あ、申し訳ない
ANS:=1; は要らないや
640デフォルトの名無しさん:2007/10/30(火) 18:01:31
エラーが消えません。どうしたらいいですか?
 たびたびすいません

i : real;
n : integer;
ANS : real;

function factrial(i:integer): real;
begin
if n=1 then begin
factrial := 1;
end else begin
factrial := i*factrial(i-1);
end;
begin
write('Enter n : ');
readln(n);
For i:=1 to n do
begin
ANS:=ANS+(1/factorical(i));
end;
end;
begin

writeln('N = ', ' ANS = ', ANS:8:6);
end.
641デフォルトの名無しさん:2007/10/30(火) 18:05:20
1を1. ←小数点付き にしたらどう?
642デフォルトの名無しさん:2007/10/30(火) 18:07:58
だめでした・・・どこが間違ってるのかわかりません
643デフォルトの名無しさん:2007/10/30(火) 18:13:28
俺もわからなくなったからdelphi立ち上げて作り直したよ

var
i, n : integer;
ANS : real;

function factorial(i:integer) : real;
begin
if i = 1 then
factorial := 1
else
factorial := i * factorial(i - 1)
end;
begin
write('Enter n : ');
readln(n);
For i := 1 to n do
ANS := ANS + (1. / factorial(i));
writeln('N = ', n, ' ANS = ', ANS:8:6);
readln;
end.
644デフォルトの名無しさん:2007/10/30(火) 18:15:48
いけました!ありがとうがざいました。
645デフォルトの名無しさん:2007/10/30(火) 19:09:17
>>634ですが、 良いのか悪いのか、他に方法があるのか
教えてください
646光速エスパー世代774RR:2007/10/30(火) 19:21:08
>>634
>var atai : word; から上1バイト下1バイトを取得する場合は
>ue := atai shr 8;
>shita := word(atai shl 8) shr 8;
>これでよいのでしょうか?

単に

shita := atai and $FF

でいい。

Turbo Pascal以来のおまけ関数にhi、loってのがあるから、
Unit Reference Manual を詠むといいよ。hi、loってMT+にもあった気がする。
647光速エスパー世代774RR:2007/10/30(火) 19:26:46
>>640
>i : real;
>n : integer;
>ANS : real;
>
>function factrial(i:integer): real;
>begin
>if n=1 then begin
>factrial := 1;

begin endを使いすぎてるw

まあそーゆー趣味的な所はおいといて、
なぜエラーになる(多分暴走するか、スタックあっぷあっぷで停まる)か判った?

648634:2007/10/30(火) 19:29:53
>>646 ありがとうございました。感激です!
649デフォルトの名無しさん:2007/11/02(金) 13:14:37
日本円を他の国の通貨に変換するプログラを記述せよ。ただし、用いるレートは次の通りである
USD 118.94
GBP 186.53
CNY 13.93
EUR 129.60
RUB 3.73
なお、補助単位もつけよ。
誰か↑をやってください、お願いします。
650デフォルトの名無しさん:2007/11/02(金) 13:20:49
実行例が
********************
d--USDOLLAR
P--British Pound
y--Chinese Yuan(gen)
e--Euro
r--Russian Rouble
*****************
Exchange to :d
Enter the amout of money in JPY : 1000
USD = $ 8.40
651デフォルトの名無しさん:2007/11/02(金) 15:07:14
解りにくい説明ですいません。
652光速エスパー世代774RR:2007/11/02(金) 17:33:04
ルーブリは元の綴りがрубльだから、roubleってのはちょっち違和感があるzo

補助単位って、円に対する銭、ドルに対するセントみたいな奴だっけ。
8.40ドルみたいな十進の小数で書いていいなら簡単だと思うけど、
昔は(今でも?)60進法とかそういうのってあったよな、
そういうのに対応するならめんどいな。
あるいは日本だったら銭・厘・毛の形で出せとか。

type
currencies = (YEN, USD, GBP, CNY, EUR, RUB);
var
exchangerates : array(currencies) of real;
begin
exchangerates[YEN] := 1;
exchangerates[USD] := 118.94;
...
なんてやっといて、日本円 / exchangerates[変換先通過] を計算させればいい。
Turbo Pascal方言を使っていいなら、わざわざ代入分書かないで、いきなり初期値ぶちこみでいいよ。
653デフォルトの名無しさん:2007/11/02(金) 17:47:39
const
USD = 118.94; GBP = 186.53;
CNY = 13.93; EUR = 129.60;
RUB = 3.73;
var
JPY : integer;
currency : char;
money1 : real; money2 : real; money3 : real;
money4 : real; money5 : real;
begin
write('***************');
write('d -- US Dollar');
write('p -- British Pound');
write('y -- Chinese Yuan (Gen)');
write('e -- Euro');
write('r -- Russian Rouble');
write('Exchange to : '); readln(currency);
write('Enter the amout of money in JPY : '); readln(JPY);
begin
Case currency of
d : money1:=JPY/USD;
write('USD = $ ',money1:8:5);
p : money2:=JPY/GBP;
write('GBP = p ',money2:8:5);
.
.
.
end; { case }
今こんな風にやってるんですけど・・・どうすればいいでしょうか?
654デフォルトの名無しさん:2007/11/02(金) 18:00:44
>>653
俺もそんな感じになったよ。
Cならポインタが使えるのでもう少し簡潔になるんだが
655デフォルトの名無しさん:2007/11/02(金) 18:05:40
>>654
エラーがまだ12〜3個残っててもうお手上げ状態です。
656光速エスパー世代774RR:2007/11/02(金) 18:11:33
だから配列を使えってば。
今のレベルでは配列 = 表だと考えるといい。

そのうち、Cみたいな配列 = ポインタという捉え方もできるようになる。
657デフォルトの名無しさん:2007/11/02(金) 18:18:22
const
USD = 118.94; GBP = 186.53;
CNY = 13.93; EUR = 129.60;
RUB = 3.73;
var
c : char;
j, k : real;
begin
repeat
writeln('********************');
writeln('d--USDOLLAR');
writeln('P--British Pound');
writeln('y--Chinese Yuan(gen)');
writeln('e--Euro');
writeln('r--Russian Rouble');
writeln('*****************');
write('Exchange to : ');
readln(c);
until (c = 'd') or (c = 'P') or (c = 'y') or (c = 'e') or (c = 'r');
write('Enter the amout of money in JPY : ');
readln(j);
case c of
'd' : begin
k := j / USD;
writeln('USD = $', k : 8 : 2)
end;
'P' : begin
k := j / GBP;
writeln('GBP = ', k : 8 : 2, ' pound')
end;
658デフォルトの名無しさん:2007/11/02(金) 18:18:37
'y' : begin
k := j / CNY;
writeln('CNY = ', k : 8 : 2, ' Yuan(gen)')
end;
'e' : begin
k := j / EUR;
writeln('EUR = ', k : 8 : 2, ' Euro')
end;
'r' : begin
k := j / RUB;
writeln('RUB = ', k : 8 : 2, ' Rouble')
end;
end;
readln
end.
659光速エスパー世代774RR:2007/11/02(金) 18:25:41
たとえばこういうやり方がある。次は換算表(=配列)をファイルから読むとか、
ネットから得るとか、そういう風に発展させる。

Program Viva2chan2;
type
currencies = (YEN, USD, GBP, CNY, EUR, RUB);
RateTable = array[currencies] of real;
var
CurrencyName : array[currencies] of string = ('Yen', 'USD', 'GBP', 'CNY', 'EUR', 'RUB');
JpyToRate : RateTable = (1, 118.94, 186.53, 13.93, 129.60, 3.73);
source : real;
target : currencies;
begin
source := 1000;
for target := YEN to RUB do
writeln(CurrencyName[target], source / JpyToRate[target] : 8:2)
end.

Borland Pascal 互換前提な。FPCでテスト済み
660光速エスパー世代774RR:2007/11/02(金) 18:28:08
それとさ、

(c = 'd') or (c = 'P') or (c = 'y') or (c = 'e') or (c = 'r')



c in ['d', 'P', 'y', 'e', 'r'] でいい。BASICでもCでもねえんだから。
661デフォルトの名無しさん:2007/11/02(金) 18:30:37
>>660
能書き垂れるだけならフルソース書けよ
人の書いたソースにケチを付けるだけなら誰でも出来る
662デフォルトの名無しさん:2007/11/02(金) 18:31:52
光速エスパー世代774RBさん、657,658の人、ありがとうございます!
おかげでできそうです。
663光速エスパー世代774RR:2007/11/02(金) 18:32:39
>>661
俺は棺桶に片足突っ込んでるロートルだといつも書いてるだろw
そーゆー面倒なことを期待するなww
664デフォルトの名無しさん:2007/11/02(金) 18:35:25
>>663
だったら最初から余計な口を突っ込むな
ここは宿題スレだ
回答者はフルソースのみを求めている
部分的な口出しなど不要
665光速エスパー世代774RR:2007/11/02(金) 18:38:04
なるほど、そういう所だったか。なら俺の誤解だったな。
申し訳なかった。これで消えることにする。
666デフォルトの名無しさん:2007/11/02(金) 18:39:21
わかったら消えろ
667デフォルトの名無しさん:2007/11/05(月) 19:52:38
堀ちえみ
668デフォルトの名無しさん:2007/11/06(火) 14:56:37
3次元の配列を用意し、その中にx*y*zのデータを格納せよ。
そして格納されたデータを出力する。ただし、データ値(x、y、z)の
それぞれの範囲は1〜9とする。

この問題をお願いします。
669デフォルトの名無しさん:2007/11/06(火) 15:42:57
入力されたデータ集合から,n番目に大きな数字を出力し,同時にその個数も
出力するプログラムを作成せよ。(集合型変数ではなく配列を用いること)
ただし,同じ大きさのデータが複数個あるときは同じ順位とする。


 入力されたデータが(2,45,5,9,32,5,6,1,4)の集合のとき,
 入力されたデータ集合の1番目から4番目の順番は(45,32,9,6)になる。
 しかしこの集合には5が2個あり,このとき5が5番目と6番目になり
 4は7番目になる。つまり6番目のデータを呼び出したときは5が返される。

この問題もお願いします。
670デフォルトの名無しさん:2007/11/06(火) 22:16:37
>>668
program prog1(input, output);
var i,j,k : integer;
    a:array[1..9] of array[1..9] of array[1..9] of integer;
begin
    for i := 1 to 9 do
        for j :=1 to 9 do
            for k :=1 to 9 do a[i,j,k]:=i*j*k;

    for i := 1 to 9 do
    begin
        writeln('i=',i);
        for j := 1 to 9 do
        begin
            for k :=1 to 9 do write(a[i,j,k]:6);
            writeln();
        end
    end
end.
671デフォルトの名無しさん:2007/11/08(木) 04:10:24
ニュートン方で√x(xの二乗根)と√3x(xの三乗根)を求めるプログラムを教えてください。
672デフォルトの名無しさん:2007/11/08(木) 12:24:28
>>671
program prog1(input, output);
var x,c: real;
function f(x,c : real) :real;
begin
    f := x*x-c;
end;

function fd(x : real) :real;
begin
    fd := 2*x;
end;
begin
    writeln('xの平行根の近似値を求めます');
    write('x : ');
    read(c);
    x := c;
    while abs(f(x,c)) >0.0001do
    begin
        writeln(x,' ',f(x,c));
         x := x-f(x,c)/fd(x);
    end;
    writeln(c,'の平行根の近似値は',x);
end.
673デフォルトの名無しさん:2007/11/11(日) 20:58:09
1つ以上の任意の個数の正の値を入力として受け取り、それらの値を第1引数として与えた配列変数に、要素数を第2引数として与えた(普通の)変数にそれぞれ格納する手続き(手続き名は read_array とすること)。
ただし、入力は 0 以下の値によりその完了を表わすものとする。また、入力された要素の数が n個であったとき、それらを格納する配列の添字は 1 〜 n であるものとする。

をお願いします
674デフォルトの名無しさん:2007/11/13(火) 15:02:29
10文字以内の文字列を読み込み、次のように変換するプログラムを作成せよ。ただし
、入力された文字がアルファベット以外の時はそのまま出力すること。
(a) すべて大文字
(b) 最初の1文字のみ大文字、あとはすべて小文字
(c) すべて小文字

出力例
Enter a word : KeYWOrD
a : KEYWORD
b : Keyword
c : keyword で困っているのでお願いします。
675デフォルトの名無しさん:2007/11/17(土) 22:01:04
鶴亀算のプログラムをつくりたいのですが・・
676デフォルトの名無しさん:2007/11/18(日) 00:12:52
色々解き方がありますがどのような方法がお好みですか?
(1)普通に解く(小学生のやり方)
(2)鶴と亀の数を変化させて解く(力技、これが一番簡単)
(3)ただの2元連立1次方程式だろGuss〜法を使うまでも無い。クラメールの公式で解いちゃえ
(4)真面目?にGuss〜法などを使って解く
(5)その他
677デフォルトの名無しさん:2007/11/18(日) 01:32:00
では(1)をお願いします。
678デフォルトの名無しさん:2007/11/18(日) 19:39:17
>>677
鶴亀算は忘れたので以下を参考にした
ttp://www.kanshin.com/keyword/33148

program prog1(input, output);
var kame, turu, goukei, asi, tasi,sa: integer;
begin
write('鶴と亀の数は?');
readln(goukei);
write('足の数は?');
readln(asi);
tasi :=2*goukei;
writeln('全部鶴だと仮定すると足の数は',tasi);
sa := asi-tasi;
writeln('実際の足の本数との差は', sa);
writeln('鶴の代わりに亀が一匹入ると2本足が増える');
kame := trunc(sa/2);
writeln('だから亀の数は', sa, '÷2=',kame);
turu := goukei-kame;
writeln('鶴の数は',turu);
end.

>>676のGussはGaussのタイプミス
679デフォルトの名無しさん:2007/11/19(月) 00:25:35
>>678
できました。
本当にありがとうございます。
680デフォルトの名無しさん:2007/11/19(月) 18:39:06
プログラム途中で行き詰ったのでどなたかご教授おながいすます

数当てゲーム:
1.数字の入力は5回まで
2.各入力に対して、入力した数字が「当たり」か「大きい」か「小さい」かをディスプレイに出力
3.当たっていたら(5回入力しなくても)終了

というものなんですが・・・

program ensyu9(input,output);
var i,data,answer : integer;
begin
randomize;
answer := random(5);
if data = answer then
for i:=1 to 5 do
begin
readln(data);
if data > answer then
writeln('大きい')
else
if data < answer then
writeln('小さい')
else
if data = answer then
writeln('当たり')
end;
end.

まで考えたんですが、当たっていたときに終了させる方法が
どうしてもわからないんです。よろしくお願いします
681デフォルトの名無しさん:2007/11/19(月) 21:57:18
>>680
for文ではなくwhile文を使う。
あたりカウントを数える変数を宣言して、あたり毎に増やしてwhileの判断条件にする。

これで何とかなると思う。
682デフォルトの名無しさん:2007/11/19(月) 22:16:34
>>680
>>681がWhileなら俺はrepeat〜untilで行こうかな。
program ensyu9(input,output);
var i,data,answer : integer;
begin
randomize;
answer := random(5);
i:=1;
repeat
readln(data);
if data > answer then
writeln('大きい')
else
if data < answer then
writeln('小さい')
else
if data = answer then
writeln('当たり');
i:=i+1;
until (i>5) or (data = answer)
end.

Pascalの良い教科書無い?
683681:2007/11/19(月) 23:14:01
>>682
標準なら以下2冊。

PASCAL(K.イェンゼン・N.ヴィルト)培風館
アルゴリズム+データ構造=プログラム(Niklaus Wirth)日本コンピュータ協会

多分両方とも絶版
684デフォルトの名無しさん:2007/11/19(月) 23:24:50
>>681-682
ありがとうございます。参考にさせて頂きます。
因みにif文だけでも可能でしょうか?
685デフォルトの名無しさん:2007/11/19(月) 23:59:55
5回までと上限が分かってるなら単純にループ内を展開すればおk。
686デフォルトの名無しさん:2007/11/20(火) 00:53:36
>>683
d
アルゴリズム+データ構造=プログラムってなかなか面白そうな本ですね。
古本屋探してみます。
687デフォルトの名無しさん:2007/11/20(火) 15:59:48
分からないのでお願いします。
問1
ひと月ごとにバイト代を払うための学生アルバイトの労務管理システムを作りたい。
全てのアルバイトデータが、日付、学生氏名、職種、労働時間の3項目を持つ場合に
これらのデータを格納する型をレコード型により定義せよ。
ただし、職種はr(レジ係),p(配送係),i(接客係),c(清掃係)のいずれかとする。

この問いで困っているのでお願いします。
688デフォルトの名無しさん:2007/11/20(火) 16:05:55
tarbo pascalです。
あるクラスの身長データを入力し、以下のような平均を計算して、
人数とともに出力する。
170cm以上の 人数n1 平均値a1
170cm未満の 人数n2 平均値a2
全体の 人数n 平均値a
(入力データ)
167,187,173,158,188,171,178,168,154,-1

こんな感じの問題です。最後の-1はプログラムを終了させるためにあるようです。
使用する処理は、while ifあたりを指定されています。
自分は以下のように作ったのですが、runtime error 200 at 0001:017E
というエラーが表示されてしまい、実行できませんでした。

689688:2007/11/20(火) 16:07:52
program kadai06(input,output);
uses wincrt;
const
kijun=170;
var
n,n1,n2:integer;
a1,a2,a,x,s1,s2:real;
begin
n1:=0;
n2:=0;
a1:=0;
a2:=0;
read(x);
while x>=0 do
begin
if x>=kijun
then
begin
s1:=a1*n1;
n1:=n1+1;
a1:=(s1+x)/n1;
end
else
begin
s2:=(a2*n2);
n2:=n2+1;
a2:=(s2+x)/n2;
end;
690688:2007/11/20(火) 16:09:03
n:=n1+n2;
a:=((a1*n1)+(a2*n2))/n;
end;
writeln('身長170cm以上の学生の人数',n1,'人の平均身長は',round(a1),'cmです。');
writeln('身長170cm未満の学生の人数',n2,'人の平均身長は',round(a2),'cmです。');
writeln('学生全体の人数',n,'人の平均身長は',round(a),'cmです。');
end.

長々と書いてしまい申し訳ありません。
正直、プログラムのことはよくわからないので、へんな部分が多いと思いますが、
よろしくお願いします。
691デフォルトの名無しさん:2007/11/20(火) 18:26:13
>>685
できますた。
ありがとうございました。
692デフォルトの名無しさん:2007/11/21(水) 23:05:49
687の問題をお願いします。m(_ _)m
693デフォルトの名無しさん:2007/11/21(水) 23:19:23
なぜインデントを下げないのか
いくら宿題でもこれはひどい
694デフォルトの名無しさん:2007/11/21(水) 23:45:25
>>693
貼り付ける前はインデントしてるよ。2chの仕様で消えてるだけ。
前はインデントを再現するようにしてたが今は面倒なのでしてない。
まあ大した手間じゃないけどな。&nbsp;×4(&は半角)でタブを全置換するだけ
695デフォルトの名無しさん:2007/11/21(水) 23:51:16
>>693
Vimにコピペして

gg=G

これサイキョウ。
696デフォルトの名無しさん:2007/11/22(木) 00:56:26
>>687
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5314.txt
課題は型を定義するだけだから必要なのはTypeの部分だけ、他はテストプログラム
697デフォルトの名無しさん:2007/11/22(木) 01:03:04
>日付、学生氏名、職種、労働時間の3項目
どう見ても4項目あるんだが
698デフォルトの名無しさん:2007/11/22(木) 01:57:36
>>688
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5315.txt

処理の流れを考えないでプログラム組むからおかしくなるんだよな。
フロ−チャート書けとは言わないけど流れを良く考えて欲しい。
どうこう言える立場じゃないけどそう感じた。
699698:2007/11/22(木) 02:17:40
>>688
偉そうな事を言って置きながら、重大なミスを見逃してましたよ。
>>698はn,n1,n2が0だと平均値の計算でerrorを吐く。n,n1,n2が0の時は
平均値を計算せずに0とするようにしときました。もうミスは無いよな?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5316.txt
700デフォルトの名無しさん:2007/11/25(日) 21:25:47
Pascalは現役なのに、子孫の方はアレだな。
701デフォルトの名無しさん:2007/12/01(土) 02:45:16
大学の課題がわからないのでお願いします。
線形リスト上、スタックを使う問題なのですが
@整数データを昇順に挿入する手続きを示せ。
A与えられた整数データを検索し、そのデータがリスト内にあれば削除する。

です。PUSHやPOPといった手続きを使うとのことですが、@の「昇順に挿入」
からして詰ってしまいました。
どうかお願いします。
702デフォルトの名無しさん:2007/12/04(火) 02:36:15
age
703デフォルトの名無しさん:2007/12/04(火) 15:36:14
7マスのニムゲームの対戦プログラムを作成するので困っているので教えて下さい。
ちなみに規則は、プレイヤーは交互にマスに左端から書き込む。一度に書き込める
マスの数は1〜3だそうです。   お願いします。
704デフォルトの名無しさん:2007/12/16(日) 11:14:49
初項がa、公差がbの等差数列をつくり、最初の20項を表示させる
という内容のプログラムをつくりたいです。
お願いします。
705デフォルトの名無しさん:2007/12/16(日) 12:00:47
>>704
program prog1(input, output);
var n,a,b : integer;
begin
    write('初項a : ');
    read(a);
    write('公差b : ');
    read(b);
    for n := 1 to 20 do writeLn(n:3, (a+b*(n-1)):10);
end.
706デフォルトの名無しさん:2007/12/16(日) 23:29:34
日付データを入力したらその前の月の日付データを出力するプログラムを作りたいのですがよくわかりません。
12/16(日)だったら11/16(金)てな感じです。前の月に同じ日が無い場合はその月の最後の日のデータを出力する。
月と曜日は列挙型にしろとのことです。
よろしくお願いします。



707704:2007/12/17(月) 21:14:25
>>705
ありがとうございます!

しかしやってみたところ初項と公比を入力したあと画面が消えてしまうのですが・・
708デフォルトの名無しさん:2007/12/17(月) 22:56:34
>>707
コンソールから実行するか、For文の後に以下のコードを付け加えればOK
write('整数を入力すると終了します');
read(a);

詳しい環境を書いて置けば誰かが他の解決策を提示してくれるかもな。
709704:2007/12/19(水) 21:55:59
解決できました。
これで来週の提出に間に合いそうです
710デフォルトの名無しさん:2007/12/23(日) 23:38:54
ダイアを描くプログラムですが、これを壁に当たれば入射角=反射角で跳ね返るように動かすことはできませんか?
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(100,400,70,11)
end;

end.
711デフォルトの名無しさん:2007/12/24(月) 01:24:03
問題を分離しよう
・描いた図形を動かす
・壁に衝突した事を検出
・角度とか
わからんのはどれよ
712デフォルトの名無しさん:2007/12/24(月) 12:54:18
>>711
嫌われる技術系の見本だな。出来るか出来無いか聞かれているんだから
出来る、出来無いで答えてやればいい。出来るならコードを添えると好感度UP
713デフォルトの名無しさん:2007/12/24(月) 22:41:40
>711
書いた図形を動かすのはできるのですが、あとの二つができません。
714デフォルトの名無しさん:2007/12/26(水) 08:15:07
だったらくだらねえカキコしないでおめーが書きゃいいだろ、フルソース厨の>>712さんよ。
715デフォルトの名無しさん:2008/01/16(水) 11:53:47
グラフィックの宿題です。
ボールの大きさが変化しながら動いていくプログラムを作りたいのですが、初心者で全くお手上げです。
お願いします。
716デフォルトの名無しさん:2008/01/16(水) 19:49:40
p2cコンパイラをcygwin環境で使う場合どのようにすればいいんですか?
717デフォルトの名無しさん:2008/01/16(水) 20:02:05
>>715
円を描くことは出来るんだよね?
だったら、
1、前回の中心と半径を覚えておく
2、次の半径と、中心座標を求める。
3、前に描いた円を消す。
 それには前に描いた中心、半径で
  背景と同じ色で塗ればいい。

4、新しい半径と中心の違う円を描く、

5、Sleepとかでお休みする。

これで許してくれるだろ。 チラツクとか言われたら困るが
718デフォルトの名無しさん:2008/01/17(木) 10:24:09
正三角形を描くプログラムを教えてください。
719デフォルトの名無しさん:2008/01/17(木) 11:41:57
DelphiのVCLを使えるの? なら
procedure PaintAngle(Canvas:TCanvas;x0,y0,r0,deg:Integer);
var w:Extended;
i:Integer;
pt:array [0..2] of TPoint;
begin
w:=PI/180.0*deg;
for i:=0 to 3-1 do begin
pt[i].x:=round(x0+r0*sin(w));
pt[i].y:=round(y0+r0*cos(w));
w:=w+2*PI/3;
end;
Canvas.Polygon(pt);
end;
//試験コード
var x0:Integer=200;
y0:Integer=200;
r0:Integer=100;
deg:Integer=0;
///////////// タイマーを貼り付けてダブルクリック
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Invalidate;
deg:=deg+10;
end;
///////////// フォームのOnPaintに
procedure TForm1.FormPaint(Sender: TObject);
begin
PaintAngle(Canvas,x0,y0,r0,deg);
end;
720デフォルトの名無しさん:2008/01/26(土) 01:03:54
>>719
VCLなしバージョンをお願いしたいです・・
721デフォルトの名無しさん:2008/01/26(土) 02:58:54
>>720
計算部分は書かれてるんだからあとは何とでもなるだろ
722デフォルトの名無しさん:2008/01/28(月) 14:36:07
配列でDELETE(p,L)をするプログラムを教えてください。
723デフォルトの名無しさん:2008/01/29(火) 19:54:19
ではまずDELETEとpとLを定義してください。
724デフォルトの名無しさん:2008/02/04(月) 16:36:18
丸投げオッケーすか?
725デフォルトの名無しさん:2008/02/04(月) 16:46:48
やってみればいいと思うよ。 出題側もこのスレ見てる筈で、
あなたは十分過ぎるリスクを背負ってるわけだから、
その勇気まで否定するものではない。
726デフォルトの名無しさん:2008/02/05(火) 00:29:02
>>724
このコードを改造してくださいとか、やり方教えてくださいと
言う依頼より丸投げの方が良いな。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):()
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (Delphi6、FreePascal、GNU Pascal等)
 [3.3] GUI/CUI:
  (GUI:ウィンドウにボタンなどがあってマウスで操作するタイプ)
  (CUI:殺風景な画面に文字が表示されるタイプ)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、使用/使用禁止ライブラリ等)
727デフォルトの名無しさん:2008/02/07(木) 02:53:41
探索ニ分木で、tree型の変数tが指している節の2つ上の親を表したい時はどうすればよいのでしょうか。
728:2008/05/21(水) 11:43:07
元金M円と年利率xを端末から読み込み、M円を年利率xの複利で預けたときの1〜20年後の元利合計を計算して出力するプログラムなんですが・・・
program Fukuri(input,output);
{複利計算}
const Gankin=    ;
Nensu =     ;
var riritu, gokei : real;
begin
write(output, '利率は?'); readln(input, riritu);
gokei :=Gankin *exp(Nensu *ln(1+riritu));
writeln(output, Gankin:1, '円を' ,   *riritu:3:1, '%の利率で'
,Nensu:1, '年預けると',gokei:4:2,'円となる')
end.

ここまでやったんですが・・・式がわかりません教えてください。
729デフォルトの名無しさん:2008/05/21(水) 11:52:29
複利といっても、 log /exp 使っていいの?
手計算とあわせるなら円単位で丸める必要はないの?

で式が判りませんって、どういう意味?
730デフォルトの名無しさん:2008/05/21(水) 12:21:44
別に日割りとか必要はないんだろ?
そうなら単純に繰り返し文使えば良いんじゃないのか?
731:2008/05/21(水) 17:29:39
1〜20年というのを繰り返し文でやるってことですか?
732デフォルトの名無しさん:2008/05/21(水) 20:25:59
うん for 文使って M := M*(1+x/100) を繰り返すといい
ただ 小数点以下が出て来るから、これをどう丸めたらいいの?
733:2008/05/21(水) 22:11:50
for文はどこにどうやってすればいいんですか?小数点はそのままでいいと思います。
へたにroundとかつかうと自分はわからないんで。。。
734デフォルトの名無しさん:2008/05/22(木) 00:09:48
program Fukuri(input, output);
{複利計算}
var
riritu, kingaku: Double;
Nensu: Integer;
begin
write(output, '利率は?'); readln(input, riritu);
write(output, '金額は?'); readln(input, kingaku);
writeln(output, kingaku: 4: 2, '円を', riritu: 3: 1, '%の利率で');
for Nensu := 1 to 20 do
begin
kingaku:=kingaku+kingaku*riritu/100;
writeln(output, Nensu: 1, '年預けると', kingaku: 4: 2, '円となる')
end;
end.
735:2008/05/22(木) 15:40:39
ありがとうございます。まだたくさんあるんですが・・・
736:2008/05/22(木) 19:48:31
正整数Nを読み込み、x^2≦N<(x+1)^2となる整数x、つまり√Nの近似値を求めるプログラムを、
sqrtなどの標準関数を使わないで作りなさいという問題なんですが。。。
わかりません。教えてもらえませんか?√のプログラムってなにをすればいいんでしょうか?

737デフォルトの名無しさん:2008/05/22(木) 21:15:32
Delphiスレでサンプルコード書いてやったし
方法も書いてあげたでしょ?
738:2008/05/23(金) 17:12:51
すみません・・・よくわからなかったんで。
739デフォルトの名無しさん:2008/05/23(金) 17:18:30
よくわからなかったら別スレに投げるのか?
常識的には同じスレに質問するものじゃないのか。
740デフォルトの名無しさん:2008/05/23(金) 19:41:00
ああ $ ついた文字は何かって質問か?

ようするに整数の最大値の平方根までループすれば十分って事だ
で、pascalはループ抜けたらループ変数は不定だから
ホントは i を返すのは間違えている。

で、奇数を合計するのは昔は掛け算が遅かったからやってた事で
別に今なら x*x と比較したって同じだ。
順に x*x と比較してゆけばいい
741:2008/05/23(金) 21:57:09
詳しい説明ありがとうございます。でも自分には難しすぎます。
まだ全然習ってないことがたくさんで。。。
742デフォルトの名無しさん:2008/05/24(土) 07:21:44
はあ、で、どこが判らないんだ?
743:2008/05/24(土) 12:19:18
(1)2次方程式x2(二乗)+3x+k=0が異なる2つの実数の解をもつとき、定数kの値の範囲を求めよ。

(2)2次方程式x2(二乗)−2x+a−1=0が実数の解をもたないとき、定数aの値の範囲を求めよ。

(3)一個180円のケーキと一個240円のケーキを合わせて10個買い、代金を2000円以下にしたい。240円の
 ケーキをできるだけ多く買うとすれば、240円のケーキは何個買えるか。(消費税は考えない)

(4)A町から20キロメートル離れたB町へ行くのに、自転車で時速12キロメートルで走っていたが、途中
 で自転車が故障したので、それからは時速4キロメートルで歩いたところ、B町に着くまでの所要時
 間は3時間以下であった。自転車が故障したのは、A町から何キロメートル以上の地点か。

(5)一の位の数が6である2けたの自然数で、十の位と一の位の数の和を4倍すると、もとの数より大き
 くなるものがある。
 十の位の数をxとして不等式を作り、このような自然数をすべて求めよ。
744デフォルトの名無しさん:2008/05/24(土) 12:50:54
それpascalの問題なのか?
745:2008/05/24(土) 15:39:18
あの問題はもう諦めます。ありがとうございました。
次はこの問題で・・。       n
正整数Sを端末から読み込み、初めて1/i≧SとなるNを求めるプログラム
なんですが・・・        i=1
狽フプログラムってなにをするんですか?

746デフォルトの名無しさん:2008/05/24(土) 16:51:26
取り憑かれちゃってるな。
実装はスレの性質上仕方ないがアルゴリズムも数学知識も人任せか。
そしてひとの説明を理解しようとする気さえないときてる。
747デフォルトの名無しさん:2008/05/24(土) 17:04:51
Σの部分は
function kansu(n:Integer):double;
var i:Integer;
begin
Result:=0;
for i:=1 to n do Result:=Result+1/i;
end;

になる。 これをループで呼び出して s と比較して大きくなれば終了とやればいい
748:2008/05/24(土) 21:44:54
すみません・・・あとは自分で頑張ってやります。
function、double、Resultとかまだ習ってないのでわからないんです。
たぶん使わないでできると思うんですが・・・
とりあえず教科書読みながらやってみます。ありがとうございました。
749デフォルトの名無しさん:2008/05/25(日) 19:39:47
標準入力から1行分だけ入力した文字が母音であるかを判定し、その下に(-)を付けるプログラミングを書きなさい。
ただし行の最後にはピリオドが入力されるとする。
<実行例>
I am a pen.
- - - -

おそらくordを使うと思うんですが、まったく分かりません。
お願いします。
750デフォルトの名無しさん:2008/05/25(日) 20:07:11
var
s: string;
i: Integer;
begin
ReadLn(s);
for i := 1 to Length(s) - 1 do
if s[i] in ['a', 'i', 'u', 'e', 'o'] then
Write('-')
else
Write(' ');
end.
751デフォルトの名無しさん:2008/05/30(金) 02:25:58
正方行列に対して、P,L,Uを与えるoctaveのプログラムを作成せよ。

お願いします。
752デフォルトの名無しさん:2008/05/30(金) 10:55:40
PLUってなんだ?
定義が出てないぞ。
753751:2008/05/30(金) 13:27:00
申し訳ありません。
Pが置換行列、Lが下三角行列、Uが上三角行列です。
お願いします。
754デフォルトの名無しさん:2008/06/09(月) 01:23:14
[l, p, u] = lu(A)
以上。
755デフォルトの名無しさん:2008/06/12(木) 15:28:24
a[1..n]を昇順で整列するプログラムを直接挿入整列、直接選択整列の二通りで作成せよ

お願いします。
756デフォルトの名無しさん:2008/06/25(水) 11:40:29
横入りすいません

学校の課題で、パスカルで課題が出たんですがさっぱりわかりません;;

教えてもらってもいいですか?
757デフォルトの名無しさん:2008/06/25(水) 15:43:02
いいですよ。
758756:2008/06/25(水) 16:53:39
バカなんで1から教えてください;;


今日の夜12時ぐらいに問題文うpします
759デフォルトの名無しさん:2008/06/25(水) 21:35:35
何様なのだ!
760デフォルトの名無しさん:2008/06/26(木) 13:04:36
バカは努力すべきだ
761デフォルトの名無しさん:2008/07/02(水) 22:45:18
学校でパスカルやってるけどパスカルの限界を感じ始めた・・・
めんどくてもいいからまともなゲームの一つでも作れないのこの言語・・・
762デフォルトの名無しさん:2008/07/02(水) 23:25:06
うちの大学の課題が大量にあってワロタw
763デフォルトの名無しさん:2008/07/03(木) 17:22:17
>>761素のpascalは厳しいかもしれないけど
DelphiやLazarusなら出来るでしょ。
764デフォルトの名無しさん:2008/07/03(木) 19:21:54
Port[ ]、PortW[ ]、MemW[ ]の解説お願い。
ググってみても分らん。
765デフォルトの名無しさん:2008/07/04(金) 19:56:51
Port/PortW は I/O 命令 でしょ?

それは 16bitの頃の奴じゃないのか? 今そんなの使ってるの?
環境は何?
766デフォルトの名無しさん:2008/07/07(月) 12:26:26
カエサル暗号とは、各文字をアルファベット順で3つ後の文字に置き換える暗号方式である。
カエサル暗号を拡張し、標準入力から入力された数字だけ平文の文字をずらす暗号化を実現せよ。
平文(暗号化前の文章)が書かれたファイルを入力とし暗号化されたものを出力ファイルに書き出すプログラムを作成せよ。
(例) 6が入力された場合 
I am a pen. →O gs g vkt.

長桁計算を行う手続きPowerReal(A,x,n)を完成させよ。
Nは整数であるが、xは実数であるものとする。また、Aはxのn乗の長桁表記であるとする。
整数部、小数部ともに100桁を超えないx, nが与えられると仮定してよい。


上の2つの問題をお願いします。
767デフォルトの名無しさん:2008/07/08(火) 23:45:20
ファイル変数fにどうやって自分の入れたいテキストファイルをいれたらいいのか分かりません。
大学のだとreset(f,'ファイル名');という方言(?)でよみこめるのですが、
自宅のだとこうしているとコンパイルが通りません
詳しい方教えてください
ちなみにコンパイラはfreepascalをつかっています。
768デフォルトの名無しさん:2008/07/09(水) 00:13:39
>>767
解決しますた
スルーでお願いいたします
769rat pt 01:2008/07/13(日) 16:18:39
ハッシュ法でのデータ管理をするプログラムを作りたいんですが長いことPASCALに触ってなかったせいか全く分かりません。
どなたか教えていただけないでしょうか??問題の概要は以下のようなものです。
表に登録するデータについては、キーは英数字からなる長さ8までの文字列でデータ本体は整数(型名はintegerでよい)です。
ハッシュ表のサイズは11とします。
ハッシュ関数は文字列xの各文字のASCIIコードの総和を11で割った余りとします。
さらにメニュー表示として入力した文字により行う操作を決定します。
どの文字がどのような操作を行うのかは以下のとおりです。

's' の場合: ハッシュ表に登録されている全レコードを,ハッシュ関数値毎に(キーの値とデータの両方を)すべて表示します.

'r' の場合: さらに「キーの値」と「データ」を入力し,すでに同じキーをもつデータがあれば「二重登録」として検出し,そうでなければ,そのレコードをハッシュ表に登録します.

'e' の場合: さらに「キーの値」を入力し,そのキーをもつデータがハッシュ表に登録されているならば,
そのデータを表示します.さらに削除するかどうかを入力させて,削除する選択をした場合にはそのレ
コードを削除します.そのキーをもつデータがハッシュ表にない場合には「そのキーをもつレコードが
ないこと」を出力しますが,ハッシュ表には操作を加えません.

'i' の場合: ハッシュ表に登録されている全レコードを,キーの値が小さい順に表示します.ここで「キー
の値の順」とは,文字列の辞書順のことを意味します.Pascal では,文字列a,b に対して,a がb より
辞書的順序が先(小さい) ときには「a<b」で表現できます.

'd' の場合: 「'i' の場合」の逆で,キーの値が大きい順に表示します.

'q' の場合: プログラムを終了します.具体的には,実行文部の最後の「end.」の直前までジャンプ*2し
ます.

長くなってすいません。ちょっとしたヒントでもいいので教えていただければ幸いです。
770デフォルトの名無しさん:2008/07/22(火) 16:32:51
100!は?
771デフォルトの名無しさん:2008/07/23(水) 16:05:04
質問です。
nの値を入力してもらって
n*nの二次元配列を作りたいのですがどうしたらいいでしょうか?
772デフォルトの名無しさん:2008/07/23(水) 23:58:15
>>766の下の問題をお願いできませんか?
773デフォルトの名無しさん:2008/07/24(木) 05:45:40
qはブーリアン型、x、yは整数で
q := x = y
てどういう意味ですか?
774デフォルトの名無しさん:2008/07/24(木) 13:01:07
x=yがtrueならばqにtrueを
x=yがfalseならばqにfalseを代入
775デフォルトの名無しさん:2008/07/31(木) 06:21:34
>>766
阪大生乙
776デフォルトの名無しさん:2008/09/22(月) 11:17:39
case文と 部分列挙を使って星座を判断するプログラムを作るにはどーすれば??
777デフォルトの名無しさん:2008/10/13(月) 21:12:49
何から星座を判断するんだ?
778デフォルトの名無しさん:2008/10/25(土) 15:47:12
Pascalで、要素の列挙によって配列を宣言することは
可能でしょうか?たとえば

var ZeroToFour : array of integer =(0, 1, 2, 3, 4);

のように。また可能な場合には添字の範囲はどうなるので
しょうか?(上の例だと
ZeroToFour[0]=0, ...ZeroToFour[4]=4 (0オリジン)
となるのでしょうか。それとも
ZeroToFour[1]=0, ...ZeroToFour[5]=4 (1オリジン)
となるのでしょうか。)

どうぞよろしくお願いします。
779デフォルトの名無しさん:2008/10/26(日) 18:40:55
>>778
処理系は何だろ?標準PASCALだとその宣言は出来ないはず。

type A = array[T1] of T2;

が宣言方法だから、オリジンはT1の宣言による。っていうか、どうしたいか
自分で宣言する。
780デフォルトの名無しさん:2008/10/27(月) 19:25:43
パスカルの問題でわからないものがあるので教えていただけないでしょうか。

関数f(x0)=0、a 以上 x0 未満の値 x について
f(x)<0 x0 より大きく b 以下の値 x について
f(x)>0 の時、 f(a) と f(b) を通る直線と x 軸との交点を求め、その値を c
としたとき
f(c)<0 であれば c を新たな a とし、f(c)>0 であれば c を新たな b とする
この操作を回数繰り返しいずれかの値を x0 とする。

関数 f としてはy=x2-x02 を用いて解け

とあります。

かなり難易度の高い問題ですが、どうかこのプログラミングを教えていただけないでしょうか。
781デフォルトの名無しさん:2008/10/27(月) 19:55:18
この操作を回数繰り返し

この操作を数回繰り返し

関数f=x^2−x。^2
です。
すみません。
782デフォルトの名無しさん:2008/10/27(月) 23:07:36
>>780
問題が理解できないんだが…
f(x) ってのは直線って書いてあるから一次関数ですよね?
function f(x:integer):integer
って事かな?
x0 ってのがx:=0と解釈すると
x=0の時、y=0の一次関数の事かな?

a<x<0 について
f(x)のxに0からbの値を入れると f(x)は0より小さい値を返す
f(a),f(b)とx軸との交点を求めと言われても
f(x)がy=axの直線ならy=0となってしまい問題があまりにも簡単すぎます。
なにか文章を間違えている気がします。

普通の人が読んで理解できる文章にするか、
問題文のまる写しを乗せない事には解けません。
x^2はXの二乗って分かるけど、x。^2は見たことないです。
783デフォルトの名無しさん:2008/10/27(月) 23:14:15
あー大分理解できました。
前言撤回です。
x。^2だけ意味不明です。
784デフォルトの名無しさん:2008/10/28(火) 02:13:25
ご迷惑をおかけしてすみません。
表示がうまくいかなくて…。
x。:「エックスゼロ」です。

関数f(x0)=0、a 以上 x。 未満の値 x について
f(x)<0 x。 より大きく b 以下の値 x について
f(x)>0 の時、 f(a) と f(b) を通る直線と x 軸との交点を求め、その値を c
としたとき
f(c)<0 であれば c を新たな a とし、f(c)>0 であれば c を新たな b とする
この操作を数回繰り返しいずれかの値を x。 とする。

関数 f としてはy=x^2-x。^2 を用いて解け

問題についてはこの通りに出題されており、
どうやら平方根を回りくどく求めろと言っているようです。
xの範囲を表すと
a<x<x。<x<b
となるのですが、これではxが2回出ており、
どのようにプログラムを書けばよいのか困っています。
785778:2008/10/28(火) 11:41:24
>>779
うっかり遅くなりましたが御教示ありがとうございます。
786デフォルトの名無しさん:2008/10/28(火) 14:59:04
//2点を通る直線とX軸の交点Yを求める
function xCross(ax,ay,bx,by:Double):Double;
var
a,b:Double;
begin
a := (ay*bx - by*ax)/(bx-ax);
b := ay - a*ax;
Result:=-b/a;
end;
//問題中のf(x)式、初期値をx0とする。
function f(x,x0:Double):Double;
begin
Result:= x*x - x0*x0;
end;
//今回の問題を解くメインループ
function test(x,a,b:Double):Double;
var
x0,c,fa,fb:Double;
begin
x0:=0;
while ((a<x) and (x<x0) and (f(x,x0)<0)) or
((x0<x) and (x<b) and (f(x,x0)>0)) do
begin
c := xCross(a,f(a,x0),b,f(b,x0));
if f(c,x0)<0 then
a:=c else
if f(c,x0)>0 then
b:=c;
x0:=c;
end;
Result:=x0;
end;
787デフォルトの名無しさん:2008/10/28(火) 15:01:06
>>784,786
翻訳すると
f(x0)=0
(a<x<x0)でかつf(x)<0
(x0<x<b)でかつf(x)>0
のどちらかの場合
f(a)とf(b)を通る直線とx軸との交点を求めcとおき
f(c)<0 なら a:=c
f(c)>0 なら b:=c
という計算を繰り返す
と解釈しましたこれはどう見ても平方根を求めていません。
ソースにするとこんな感じ、
何の計算式かはわかりません。
これ計算の目的を問題の最初に示すべきだと思います、目的が分かりません。
788デフォルトの名無しさん:2008/10/28(火) 15:58:43
ご教授ありがとうございます。
コンパイルしてみたのですが 
In function `xCross':
についてのエラーが出てきて手直ししても動かないのですがどうすれば良いので
しょうか。

あと、問題のタイトルには

以下の考え方に基づいて与えられた正の数の平方根の値を求めるプログラムを作
成せよ。
789デフォルトの名無しさん:2008/10/28(火) 16:08:35
へぇ、これで平方根が求まるんですか
ならば、平方根が求まるように手直ししておきます。
あとコンパイル環境を教えてください、私はDelphi7で動作を確認しました。
790デフォルトの名無しさん:2008/10/28(火) 16:31:00
ありがとうございます。
コンパイルはターミナルで行っています。
791デフォルトの名無しさん:2008/10/28(火) 17:54:59
>>784
これ、ニュートン法と呼ばれる平方根を求めるアルゴリズムですね
問題が非常に不鮮明で最初の一文が無いと到底理解できない設問です。
ハッキリ言って悪題ですね。
きわめてシンプルにするとこんな感じになります。
function fSqrt(x:Double):Double;
var
s,last:Double;
begin
Result:=0;
if x<=0 then exit;
if x>1 then s:=x else s:=1;
repeat
last := s;
s := (x/s+s) * 0.5;
until s<last;
Result:=last;
end;
原理は簡単なので「平方根、ニュートン法」で調べてください。
ターミナルはwindowsのネットワーク越しにコンパイルを行う通信クライアントだと思われます。
もしかしたら、コンパイラはPascalじゃなくCかもしれません。
使用言語やコンパイル自体が分からない場合は友達と相談してください。
でわでわ。
792デフォルトの名無しさん:2008/10/28(火) 18:40:46
分かりやすい解説ありがとうございました。
非常に参考になりました。
793デフォルトの名無しさん:2008/10/29(水) 22:29:54
>>792
同じ学校の生徒かな?
それならコンパイル環境はたぶんgpcって言えばおk

にしてもf(x) = x^2 - (平方根を求める数)^2で
f(c) = 0のときcを解をするって平方根を求める問題なのにおかしいよなjk
794793:2008/10/30(木) 23:46:38
>>793の下2行僕の勘違いでした、ごめんなさい
795デフォルトの名無しさん:2008/11/03(月) 01:50:51
質問です
テキストファイルに書かれた数字を
「文字」として読み込むのではなく「数」として読み込むときも
file(f, c)として文字として読み込んだ後に
ord('c')-ord('0')のようにして数に変換するんですか?
796ORZ:2008/11/06(木) 15:22:35
大学でpascalの課題が出たのですが、配列に関してさっぱりわかりません。
こんな私ですが、教えてください。

問題「N x N 行列を2つ読み込み、その積を計算し、標準出力に出力するプログラムを作りなさい」
ただし、入出力の部分は関数か手続きを使用せよ、とのことです。
(Nは定数で10とする)

よろしくお願いします。
797ORZ:2008/11/06(木) 15:26:52
↑の続きですが、delphiを使っています。

何度もすみません・・・
798デフォルトの名無しさん:2008/11/06(木) 23:25:37
数学での行列の積は理解しているのか?
799ORZ:2008/11/08(土) 16:56:46
はい。計算の仕方はわかります。

それをどうやってプログラムするのかが浮かばなくて・・・
800デフォルトの名無しさん:2008/11/08(土) 19:05:30
const n=10
type index=1..n;
var
a,b,c :array[index,index] of real;
i,j,k : index;
s :real

for i:=1 to n do
for j:=1 to n do
begin
s:=0;
for k:=1 to n do s:=s+a[i,k]*b[k,j]
c[i,j]:=s
end
801デフォルトの名無しさん:2008/11/10(月) 16:45:07
関数の問題なんですがまったくわかりません。

キーボードで入力された2つの整数の最大公約数を求める関数(function)を作り、
その関数を用いて分数の約分を行うプログラムを作成せよ。
(例) 分子を5、分母を10と入力した場合、結果として1/2を表示する。
とのことです。
よろしくお願いします。
802デフォルトの名無しさん:2008/11/10(月) 17:15:43
ユークリッドの互除法と再起呼び出し
803デフォルトの名無しさん:2008/11/10(月) 17:22:57
>>87-
804デフォルトの名無しさん:2008/11/13(木) 09:03:42
emacsでプログラム書いてるのですが、
error: invalid operands to `+'
error: incompatible type for argument 2 of `ace'
error: routine declaration
error: result of function `check' not assigned
↑のエラーの消し方がわからないのです
教えていただけないでしょうか
805デフォルトの名無しさん:2008/11/13(木) 14:10:59
閏年計算のプログラムですが、変数iが初期化されないというエラーが出ました
Delphi6を使っています

var i:integer;
begin
if ((i mod 4=0) and (i mod 100<>0)) or (i mod 400=0)
then writeln('leap year')
else writeln('NOT leap year')
end.

どこが間違っているでしょうか?
806デフォルトの名無しさん:2008/11/13(木) 15:07:37
初期化すれば?
807デフォルトの名無しさん:2008/11/27(木) 13:51:47
どうやってプログラムしたらよいのか分かりません。
教えていただけないでしょうか。

配列の全要素のうち最小のものを配列の先頭の要素と入れ替える。 次に、配列
の 2 番目以降の要素のうち最小のものを配列の 2 番目の要素と入れ替える。
このような処理を配列の要素数から 1 引いた回数繰り返すと、すべての要素が
整列した状態となる。

このアルゴリズムに従って配列を整列させる(ソートする)プログラムを作成せ
よ。 ただし、「配列の n 番目以降の要素のうち最小のものを配列の n 番目の
要素と入れ替える」という処理をサブルーチンとして作成すること。
808デフォルトの名無しさん:2008/11/30(日) 09:05:02
選択ソートで検索すればcで書かれたプログラムが沢山見つかるから
それ参考にすればいいんじゃないかな
特に難しい事はないはず
809デフォルトの名無しさん:2008/11/30(日) 09:09:59
ていうか>>488で入れ替える所だけ関数にすればいいだけだね
810デフォルトの名無しさん:2008/11/30(日) 13:19:38
プログラミング以前に問題文を理解してないのでは?
まずは手計算でやれるか試してみ
811デフォルトの名無しさん:2008/11/30(日) 16:19:39
アドバイスありがとうございました。
クイックソートのプログラム自体、なかなか理解しづらくて困っています。
「以下に示す2つのプログラムを完成させよ」という宿題で行き詰っています。
どうかプログラム例を示していただけませんでしょうか。

「T」
procedure quicksort( var ar: intarray; var i, j: integer );
var
{b1 はサブリスト sub1 の始めの要素番号、e1 は終わりの要素番号}
{b2 はサブリスト sub2 の始めの要素番号、e2 は終わりの要素番号}
b1, e1, b2, e2: integer;
begin
if i < j then
begin
b1 := i;
e2 := j;
divide( ar, b1, e1, b2, e2 );
quicksort( ar, b1, e1 );
quicksort( ar, b2, e2 );
end;
end;
812デフォルトの名無しさん:2008/11/30(日) 16:20:16
「U」
procedure divide( var A: intarray; var b1, e1, b2, e2: integer );
var
x, y, temp: integer;
begin
x := b1;
y := e2;
while x < y do
begin
if A[x] > A[x+1] then
begin
temp := A[x];
A[x] := A[x+1];
A[x+1] := temp;
x := x + 1;
end
else
begin
temp := A[y];
A[y] := A[x+1];
A[x+1] := temp;
y := y - 1;
end;
end;
e1 := x - 1;
b2 := y + 1;
end;
813デフォルトの名無しさん:2008/12/01(月) 05:14:06
>>811-812をそのまま使って
program aaa(input, output);
const n=10 ;
type intarray= array[1..n] of integer ;
var A : intarray;
begin 
    Aにデータ入力
    quicksort(A,1,n);
    データ出力
end.
でいいんじゃないかな
814デフォルトの名無しさん:2008/12/08(月) 03:22:22
A・B・Cの部屋があり、AとB、BとCは通路で繋がっている。
最初、ねずみはAの部屋にいるものとする。
その後、1秒ごとにねずみは隣の部屋に移るか同じ部屋にいる。
以下のような確率で動く時、ねずみが10秒後に、Aにいる確率を求めよ。

・Aにいるとき、Bに移る確率は二分の一
・Bにいるとき、A及びCに移る確率は共に三分の一
・Cにいるとき、Bに移る確率は三分の二

二分法のところの問題です。答えがなくてこまっています。
教えていただけないでしょうか。
815デフォルトの名無しさん:2008/12/08(月) 19:08:32
10病後にAに居ない確率もとめれば
816デフォルトの名無しさん:2008/12/08(月) 19:16:42
求めてる方法と違うだろうけど
3*3行列
1/2 , 1/3 , 0
1/2 , 1/3 , 2/3
 0 , 1/3 , 1/3
のn乗を計算して、初期位置がAなら
1
0
0
を掛ければ
n秒後にABCにいる確率がそれぞれ
a
b
c
って出るよね?
817デフォルトの名無しさん:2008/12/08(月) 19:58:48
二分法と言うのはこれのはずだが、合ってるだろうか?
http://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E6%B3%95

この方法と確率の計算は、関係ないのでは?
818デフォルトの名無しさん:2008/12/09(火) 05:35:56
>>816
よかったら解答のせてもらえませんか?
方針を理解したのですが、
行列のあたり苦手なのでコンパイルできません^^;
819デフォルトの名無しさん:2008/12/09(火) 14:10:44
program test(input, output);
const m=3;n=10;
type index=1..m;
var a : array[index,index] of real;
   x ,y : array[index] of real;
   i,k,h : index ;
   s :real ;

begin
{数値代入}
 a[1,1] := 1/2 ; a[1,2] := 1/3 ; a[1,3] := 0  ; x[1] := 1 ;
 a[2,1] := 1/2 ; a[2,2] := 1/3 ; a[2,3] := 2/3 ; x[2] := 0 ;
 a[3,1] := 0  ; a[3,2] := 1/3 ; a[3,3] := 1/3 ; x[3] := 0 ;

{ y =Ax の計算を10回}
 for h:= 1to n do
 begin
{ y =Ax の計算1回分}
   for i := 1 to m do
   begin
     s := 0;
     for k:=1 to m do
     begin
       s := s + a[i,k] * x[k] ;
     end;
     y[i] := s ;
   end;
   x:=y ;
 end;
{n秒後にA,B,Cにいる確率、順に}
 for i := 1 to m do writeln(x[i]);
end.
820デフォルトの名無しさん:2008/12/09(火) 17:24:10
Delphiの宿題があるのですが、ダイヤモンドパターンのプログラムを教えてください(泣)
821デフォルトの名無しさん:2008/12/09(火) 18:37:49
>>63-
822デフォルトの名無しさん:2008/12/12(金) 00:29:38
課題で1〜nの総和計算の発展形の1〜n^2の総和計算を求める、というものがありました。
1〜nの挿話計算が
var i,sum,n:integer;
begin
write('n='); readln(n);
sum := 0;
for i:=1 to n do sum := sum +i;
writeln('Sum(1〜n)=',sum)
end;
となるのはわかったんですが、これをn^2にするときは、
上のプログラムのnをsqr(n)に変えるだけでできますか?
823デフォルトの名無しさん:2008/12/12(金) 00:58:27
822です。引き続け申し訳ないですが、
6つの4,89,6,2,23,21という数字を小さいものから並び替えるプログラム
procedure sort;
const N = 6;
const d: array[1 .. N] of integer = (4,89,6,2,23,21);
var i, j, w: integer;
sd: array[1 .. N] of integer;
begin
for i := 1 to N do sd[i] := d[i];
for i := 1 to N do
for j := 1 to N - i do
if sd[j] > sd[j+1] then begin
w := sd [j];
sd[j] := sd[j+1];
sd[j+1] := w
end;
writeln('Sorted date :');
for i := 1 to N do write('sd[',i:3,'] '); writeln;
for i := 1 to N do write(sd[i]:7,' ');writeln;
readln
end;
を改良して、6つの数字のうち初めのM個だけを並び替えるという
プログラムのつくりかたがわかりません。
どなたか教えていただけたら幸いです。
824デフォルトの名無しさん:2008/12/12(金) 03:43:02
>>822
sum := sum +sqr(i);

>>823
const M = ;
for i := 1 to N do sd[i] := d[i];
for i := 1 to M do
for j := 1 to M - i do
825822:2008/12/12(金) 03:50:58
>>824
ありがとうございます!助かりました!
826デフォルトの名無しさん:2008/12/13(土) 00:44:55
文字列に対して、任意の位置に新たな文字列お挿入する。入力は、挿入対象の文字列(text1)、挿入文字列(text2)、挿入開始位置(pointer),
及び挿入する文字列の長さ(length)とし、出力は、挿入済みの文字列(text)とする。
挿入例
text1:=`abcdef____`;
text2:=`ghi_______`;
pointer:=4;
length:=3;

text=`abcghidef_`

この問題を教えてください。



827デフォルトの名無しさん:2008/12/13(土) 10:16:41
いやです
828デフォルトの名無しさん:2008/12/13(土) 15:45:28
何故ですか?
829デフォルトの名無しさん:2008/12/13(土) 21:04:05
日本語も満足に書けないやつがなんでプログラミングなんかやってんの?
830デフォルトの名無しさん:2008/12/14(日) 00:51:19
いや、教科書をそのまま載せたのですが…
831デフォルトの名無しさん:2008/12/14(日) 02:02:03
日本語も満足に書けないやつがなんで教科書なんか書いてんの?
832デフォルトの名無しさん:2008/12/14(日) 02:48:55
おめこ
833デフォルトの名無しさん:2008/12/17(水) 16:48:34
再帰のプログラムが苦手で次の2つのプログラムの書き方が分かりません。
再帰を使用してプログラム例を示していただけないでしょうか。


値の配列を受け取り,その並べ替え(順列)をすべて出力する再帰の手法を
使用したプログラムを書きなさい.ただし,値は1からnまでの数値であり、
n<=10とする. n=1,n=2,n=3の場合についてプログラムを実行しなさい。


「ハノイの塔」のパズルを解く再帰の手法を使用したプログラムを書きなさ
い。(円盤の枚数はnとする)n=2,n=3,n=4の場合についてプログラムを実行
しなさい。
834デフォルトの名無しさん:2008/12/17(水) 18:54:16

program prog1(input, output);
var n : integer;

 procedure hanoi(var n:integer ; a,b,c:char);
 begin
  if n>0 then
  begin
   hanoi(n-1,a,c,b);
   writeln(n,'番の板を',a,'から',b,'に移動');
   hanoi(n-1,c,b,a);
  end;
 end;

begin
  write('円板の枚数n=');
  read(n);
  hanoi(n, 'a' , 'b' , 'c' );
end.
835デフォルトの名無しさん:2008/12/17(水) 18:55:39
× procedure hanoi(var n:integer ; a,b,c:char);
○ procedure hanoi(n:integer ; a,b,c:char);
836デフォルトの名無しさん:2008/12/18(木) 11:42:26
>>834
すみません。
コンパイルをしてみたら「char」の部分がエラーになって動かないのですが・・・
なにぶん古いコンパイラですので・・・、お手数をおかけいたします。
837デフォルトの名無しさん:2008/12/18(木) 11:43:40
835の通りに直しても動きませんでした。
どうやら定義されてない・・・みたいです。
838デフォルトの名無しさん:2008/12/18(木) 11:44:54
なにが定義されてないって出たの?
839デフォルトの名無しさん:2008/12/18(木) 12:35:23
全角スペースのままとか?
840デフォルトの名無しさん:2008/12/19(金) 19:25:58
>>839
スペース消してみたら上手くいきました。
ありがとうございます。

「1」の方はやはり難しいのでしょうか。

値の配列を受け取り,その並べ替え(順列)をすべて出力する再帰の手法を
使用したプログラムを書きなさい.ただし,値は1からnまでの数値であり、
n<=10とする
841デフォルトの名無しさん:2008/12/20(土) 01:18:37
>>840
アクセスでお菓子とジュース
842デフォルトの名無しさん:2008/12/20(土) 01:26:13
>>841
被るといけねーから少し中を変えとけよ
843デフォルトの名無しさん:2008/12/20(土) 01:43:23
>>842
おkk
844デフォルトの名無しさん:2008/12/20(土) 02:51:41
m,h, : permutation
与えられたリストの要素を並べ替えてできる全てのリストのリストを返す関数。

ほぼHaskell版のコピー。リストをシフトさえるshift関数などがちょっと違っている。

(* Standard ML *)
fun permutation [] = [[]]
| permutation list =
let
fun revolve [] = [[]]
| revolve l = let
fun shift 0 _ = []
| shift n (x::xs) = (x::xs) :: (shift (n-1) (xs@[x]))
in
shift (length l) l
end
fun permutation' [] = [[]]
| permutation' (x::xs) = map (fn y => x::y) (permutation xs)
in
foldr (op @) [] (map permutation' (revolve list))
end;

(* 実行結果 *)
- permutation [1,2,3];
val it = [[1,2,3],[1,3,2],[2,3,1],[2,1,3],[3,1,2],[3,2,1]] : int list list
- permutation [1,2,3,4];
val it =
[[1,2,3,4],[1,2,4,3],[1,3,4,2],[1,3,2,4],[1,4,2,3],[1,4,3,2],[2,3,4,1],
[2,3,1,4],[2,4,1,3],[2,4,3,1],[2,1,3,4],[2,1,4,3],...] : int list list
-
845841,843:2008/12/20(土) 09:25:22
>>842
どこで渡すー?
846デフォルトの名無しさん:2008/12/20(土) 10:13:13
program prog1(input, output);
 var i,n : integer;
   p : array[1..10] of integer ;

 procedure perm(i,n:integer);
  var j,t :integer;
  begin
   if i<n+1 then
    begin
     for j:=i to n do
     begin
      t:=p[i] ; p[i]:=p[j] ; p[j]:=t ;
      perm(i+1,n);
      t:=p[i] ; p[i]:=p[j] ; p[j]:=t ;
     end;
    end
   else
    begin
     for j :=1 to n do write(p[ j ],' ');
     writeln('');
    end;
  end;

begin
  write('n='); read(n);
  for i := 1 to n do p[i]:=i;
  perm(1,n);
end.
847デフォルトの名無しさん:2008/12/20(土) 10:32:15
>>845
どこで?
おれはフツーにレポboxに放り込むけど…
848デフォルトの名無しさん:2008/12/20(土) 10:40:57
>>846
アルゴリズム事典かな?
もれも、ほとんど同じになった。

849デフォルトの名無しさん:2008/12/20(土) 10:46:37
1、2共にちゃんと動作しました。
ありがとうございました。
850デフォルトの名無しさん:2008/12/20(土) 10:47:40
C言語によるはじめてのアルゴリズム入門の初版
851デフォルトの名無しさん:2008/12/20(土) 10:58:01
>>849
引数で配列渡すようにしないとだよ
852デフォルトの名無しさん:2008/12/20(土) 11:13:48
そうなのですか?
853デフォルトの名無しさん:2008/12/20(土) 12:14:24
>値の配列を受け取り
って書かれてるから渡したほうがいいかなーと
854デフォルトの名無しさん:2008/12/20(土) 19:25:00
855デフォルトの名無しさん:2008/12/20(土) 20:04:33
>>846の8行目
×  if i<n+1 then
○  if i<n then
動作結果は同じだけど一応訂正
856デフォルトの名無しさん:2008/12/25(木) 20:10:48
丸投げOKですか?
Delphi使用で、for、if、arrayまで習っています。

・生年月日と今日の日付を計算して、満年齢を計算する
・sin,cos,tanの数表を作る
857デフォルトの名無しさん:2008/12/25(木) 20:14:24
どうでもいいミスですが一応訂正

×生年月日と今日の日付を計算して、満年齢を計算する
○生年月日と今日の日付を入力して、満年齢を計算する
858デフォルトの名無しさん:2008/12/25(木) 20:34:15
宿題の季節っつーか来年提出か
締切日は書いた方がいい
859856:2008/12/25(木) 21:12:39
>>858
すいません。締切は1月5日です。
諸事情で締切日までDelphiが使えない状態になりました。
860デフォルトの名無しさん:2008/12/26(金) 12:30:36
パスカルだけど
program prog1(input, output);
var birthday,today,y: integer ;
begin
writeln('ex. 20081226');
write('birthday = ');readln(birthday);
write('today = ');readln(today);
y:=trunc((today-birthday)/10000);
writeln(y);
end.

誕生日が来て1才年をとる場合なら簡単。
誕生日の前日に1才年をとる場合は難しいな
861デフォルトの名無しさん:2008/12/26(金) 12:35:53
program prog1(input, output);
const pi=3.1415926535;
var i:integer;
s,c,t:real;
begin
writeln('deg','sin':8,'cos':10,'tan':10);
for i := 0 to 360 do
begin
s := sin(i*2*pi/360);
c := cos(i*2*pi/360);
if (i mod 15) = 0 then
begin
if (i mod 180 = 90) or (c= 0) then
writeln(i:3,s:10:5,c:10:5,'-------':10)
else
writeln(i:3,s:10:5,c:10:5,s/c:10:5) ;
end;
end;
end.
862856:2008/12/26(金) 16:46:53
どうもありがとうございました
863デフォルトの名無しさん:2009/01/08(木) 01:10:29
来週火曜までにお願いします。Delphiです。

・誕生日まで何日あるかを計算する。ただしarrayでなくcase文を使って設定すること。
・何個かのデータをもらって、その平均、総和、最大値、最小値、標準偏差を計算する。
・プロ野球などのプロスポーツのデータ(勝ち数、負け数、引き分け数)を入力したら、
 各チームの勝率を計算し、順位をつける。
・学籍番号と得点をデータとして入力し、これを得点の高い順に並べ替え、順位を付けて表示する。
864デフォルトの名無しさん:2009/01/08(木) 15:23:00
お断りします
865デフォルトの名無しさん:2009/01/10(土) 11:48:11
>> 863
arrayではなくCaseを使って設定するって、どういう意味?

 
866デフォルトの名無しさん:2009/01/10(土) 12:12:23
【 課題 】100マス計算をするプログラムを書いてください。
【 用語 】下記
【 期限 】1/15くらいまで
【 Ver  】
【 補足 】
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11〜99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。
867863:2009/01/11(日) 20:32:54
>>865
以下のような設定は不可とのことです。

var days array[1..12] ofinteger;
var
:
:
begin
 days[1]:=31;days[2]:=29;...(同様に);days[12]:=31;
868デフォルトの名無しさん:2009/01/11(日) 21:16:31
>>863
で、どの課題が残ってるのかね?


869デフォルトの名無しさん:2009/01/12(月) 22:18:35
program prog1(input, output);
var i ,x1,x2,x3,y1,m1,d1,y2,m2,d2: integer;

 function calcd(y,m,d:integer):integer;
 var i,leapday,years,days,mdays:integer;
 begin
  years := y-1;
  days := d;
  days := days + years * 365;
  days := days + trunc (years/4) - trunc (years/100) + trunc (years/400);
  if ( (y mod 4 =0) and (y mod 100 <>0) and (y mod 400 =0) ) then
    leapday := 1
  else
    leapday := 0;
  for i:=1 to m - 1 do begin
    case i of
     1,3,5,7,8,10,12 : mdays := 31;
     4,6,9,11 : mdays := 30;
     2 : mdays := 28 + leapday ;
    end;
    days := days + mdays;
  end;
calcd:=days;
 end;

begin
  writeln('next birthday'); write('year=');readln(y1); write('month=');readln(m1); write('day=');readln(d1);
  writeln('today'); write('year=');readln(y2); write('month=');readln(m2); write('day=');readln(d2);
  x1:=calcd(y1,m1,d1); x2:=calcd(y2,m2,d2); x3:=x1-x2;
  write('tanjobi made ',x3,' nichi');
end.
870デフォルトの名無しさん:2009/01/19(月) 02:10:07
4行4列の行列の各要素を読み込み、ファイルへ行列形式で書き込ませるプログラムを作れ。

全然わかりません。お願いします。
火曜日までです。
871デフォルトの名無しさん:2009/01/19(月) 02:16:16
cat 行列1.txt > 行列2.txt
872デフォルトの名無しさん:2009/01/19(月) 19:06:58
ファイルの入出力関係って難しいよね
873デフォルトの名無しさん:2009/01/19(月) 20:09:01
高校数学では行列を教えなくなるらしいね。
874空落ち ◆SniperBHgo :2009/01/21(水) 20:17:38
>>870
行列形式ってなんだろう

program Mat(input,output,ExtFile);
const
 COL = 4;
 ROW = 4;

type
 Matrix = packed array [1..COL,1..ROW] of integer;
 MatrixFile = file of Matrix;

var
 ExtFile : MatrixFile;
 i : 1..COL;
 j : 1..ROW;
 InputMatrix : Matrix;

begin
 rewrite( ExtFile, 'ExtFile' );
 for i := 1 to COL do begin
  for j := 1 to ROW do begin
   write( '[', i, ',', j, ']?:' );
   readln( InputMatrix[i,j] )
  end
 end;
 write( ExtFile, InputMatrix )
end.
875デフォルトの名無しさん:2009/01/27(火) 16:40:44
Delphi6.0で
(1)2つの自然数nとmが与えられたとき、
nとmの最大公約数を出力するプログラムを書け。

(2)与えられた3×3行列の行列式を計算するプログラムを書け
(行列は2次元配列で表すこと。)

という課題はどうやってとけばいいのでしょうか?
876デフォルトの名無しさん:2009/01/27(火) 18:36:09
頭を使って解けばいいと思います
877デフォルトの名無しさん:2009/01/27(火) 21:48:58
頭じゃなくてDelphi6.0でって書いてあるのに・・・
878デフォルトの名無しさん:2009/01/28(水) 02:31:19
>>875
動作確認なんてしてないから間違ってたらすまん
改行大杉って怒られたんでつめて書く
type
  TMatrix3x3 = array[0..2][0..2]of Double;
function det3x3(Mat:TMatrix3x3):Double;
var
  i,j:Integer;
  hoge:Extended;
begin
  Result:=0;
//Plus
  for i:=0 to 2 do begin
    hoge:=1;


    for j:=0 to 2 do
      hoge:=hoge*Mat[j][(i+j)mod 3];

    Result:=Result+hoge;
  
end;
//Minus
  for i:=0 to 2 do begin
    hoge:=1;
    for j:=0 to 2 do
      
hoge:=hoge*Mat[j][(3+i-j)mod 3];
  
  Result:=Result-hoge;
  end;
end;
879デフォルトの名無しさん:2009/01/28(水) 02:32:32
我ながら改行とかインデント崩れすぎワロタ
880デフォルトの名無しさん:2009/01/28(水) 08:59:15
大丈夫、環境によってはキチンとインデントされて見えてるから。
半角2文字づつ綺麗にインデントされたやつが。
881デフォルトの名無しさん:2009/01/28(水) 10:09:12
俺のとこもちゃんとなってるよ
882123:2009/02/11(水) 17:58:34
440!を881で割ったときの余りをRを求めよ。また、R2を881で割ったときの余りを求めよ。
883デフォルトの名無しさん:2009/02/12(木) 01:16:47
program prog1(input, output);
var i,ans:integer;
begin
ans := 1;
for i := 1 to 440 do
begin
ans := ans * i mod 881;
end;
writeln(ans);
readln;
end.
884123:2009/02/12(木) 10:02:40
さすがです!!!任務完了!
885デフォルトの名無しさん:2009/02/13(金) 01:09:04
[1] 授業単元:Pascal
[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:

534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
886デフォルトの名無しさん:2009/02/13(金) 01:25:52
547 名前: デフォルトの名無しさん [sage] 投稿日: 2009/02/12(木) 17:07:40
Python の宿題ここで答えます Part 1
http://pc11.2ch.net/test/read.cgi/tech/1153585095/785
C/C++の宿題片付けます 122代目
http://pc11.2ch.net/test/read.cgi/tech/1232029287/542
Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/476

こんなんで数独の掲載料もらえるなら俺だって問題送りたい
887デフォルトの名無しさん:2009/02/13(金) 20:40:20
数独の条件はそれだけじゃないだろ。
888デフォルトの名無しさん:2009/02/15(日) 13:11:36
課題が全部列挙だとするとマジキチなサイズのレポートが出来上がる
889デフォルトの名無しさん:2009/04/09(木) 22:29:02
ほしゅ
890デフォルトの名無しさん:2009/04/27(月) 06:28:11
891デフォルトの名無しさん:2009/04/29(水) 17:09:24
>>882
おまいらpascalでなくlispでプログラムを書け

(labels ((fact (n) (if (= n 1) 1 (* n (fact (1- n))))))
(let* ((r (fact 440)) (r2 (* r r)))
(list (mod r 881) (mod r2 881))))

はい糸冬
892デフォルトの名無しさん:2009/04/29(水) 20:39:17
これはひどい
893デフォルトの名無しさん:2009/04/29(水) 23:49:10
7の(7の7乗)乗
の下一桁の数字は?

nの(nのn乗)乗
の下一桁の数字は?
894空落ち ◆SniperBHgo :2009/04/30(木) 00:35:53
>>893

program test(output);
const
 N = 7;

var
 i, x : integer;

function Power(a,b:integer):integer;{aのb乗}
 var
  t, i : integer;
 begin
   t := 1;
   for i := 1 to b do begin
    t := t * a
   end;
   Power := t
 end;


begin
x := 1;
for i := 1 to Power( N, N ) do begin
 x := ( x * N ) mod 10
end;

writeln( x )
end.
895デフォルトの名無しさん:2009/04/30(木) 08:15:17
>>894のプログラムはnが大きくなるとダメポ
896デフォルトの名無しさん:2009/04/30(木) 18:15:07
どうやってプログラム作ってもそれは同じことだと思うが
それともNが無限に近い数でも保持できる計算機がこの世に存在するの?バカなの?
897デフォルトの名無しさん:2009/04/30(木) 18:39:42
7の7乗なんて全部計算する必要ない。
中途の計算で下一桁だけ求め続ければいい。
898デフォルトの名無しさん:2009/04/30(木) 20:20:53
>>896
そんなあなたに

(labels
((ps (n m) (if (= m 0) (mod n 10) (mod (expt (ps n (1- m)) n) 10))))
(defun pg (n) (ps n n)))

そんで

(pg 7)

ってやってみ 速攻で求まるから

899デフォルトの名無しさん:2009/04/30(木) 22:01:09
計算間違いがあるようです
900デフォルトの名無しさん:2009/04/30(木) 23:06:30
計算まちがい以前にpascalのプログラムなんてNが2桁になると計算できないじゃん

ところでNが100以上の時の値を計算できる人いる?
901空落ち ◆SniperBHgo :2009/05/01(金) 00:33:48
N^Nを計算することによる桁溢れの問題をなくしました.
でも,アルゴリズムを全く工夫していないから計算がとても重い.

program test(output);
const
 N = 10;
type
 ZeroToN = 0..N;
 OneToN = 1..N;
 OneToNPlusOne = 1..N+1;
 CountArr = array [1..N+1] of ZeroToN;
var
 count : CountArr;
 i, x : integer;
 EndFlag : boolean;

procedure Increment( var count : CountArr; a : OneToNPlusOne );
begin
 if ( count[a] <> N-1 ) then begin
  count[a] := count[a] + 1
 end
 else begin
  count[a] := 0;
  Increment( count, a+1 )
 end
end;
902空落ち ◆SniperBHgo :2009/05/01(金) 00:35:03
begin{main}
for i := 1 to N+1 do begin
 count[i] := 0
end;

x := 1;
EndFlag := false;
repeat
 x := ( x * N ) mod 10;
 Increment( count, 1 );
 if ( count[N+1] = 1 ) then begin
EndFlag := true
 end
until EndFlag;

writeln( x )
end.
903デフォルトの名無しさん:2009/05/01(金) 03:25:08
N=100 test=0 N=101 test=1
N=102 test=6 N=103 test=7
N=104 test=6 N=105 test=5
N=106 test=6 N=107 test=3
N=108 test=6 N=109 test=9
N=110 test=0 N=111 test=1
N=112 test=6 N=113 test=3
N=114 test=6 N=115 test=5
N=116 test=6 N=117 test=7
N=118 test=6 N=119 test=9
N=120 test=0 N=121 test=1
N=122 test=6 N=123 test=7
N=124 test=6 N=125 test=5
N=126 test=6 N=127 test=3
N=128 test=6 N=129 test=9
N=130 test=0

Real time: 0.028037 sec.
Run time: 0.026363 sec.
Space: 593392 Bytes
GC: 1, GC time: 0.011386 sec.

N=100~130の値を求めました。

そんなに重くなかったっす。
904デフォルトの名無しさん:2009/05/01(金) 03:33:49
lispで4行で済むプログラムがなぜにpascalだと
アホほど長いんだ?
しかも遅いしな。
905デフォルトの名無しさん:2009/05/01(金) 05:42:29
0 1
6 7
6 5
6 3
6 9
0 1
6 3
6 5
6 7
6 9
906デフォルトの名無しさん:2009/05/01(金) 06:50:36
7^n≡{7,9,3,1} (mod 10)
とループするので、指数の7^7が4で割っていくつ余るかが問題になる。
7^n≡{3,1} (mod 4)
から、
7^7≡3 (mod 4)
従って、
7^(7^7)≡3 (mod 10)
となる。
907デフォルトの名無しさん:2009/05/01(金) 07:09:50
ある国のお話。
この国は一夫多妻制です。
しかし現在この国には男女はほぼ同じ割合いるので当然男が余ってしまいます。
そこで王様は一計を案じました。
次のような法律を作ったのです。

1.女児を産んだ者には経済的に援助し更に子作りに励んでもらう。
2.一度でも男児を産んだ者は以後決して子供を作ってはならない。

これには国の男性たちも大喜び。
数十年もたてば国は女性の比率がぐんと上がるだろうとみな思いました。

問題。
実際には男女比はどうなると思いますか?
908デフォルトの名無しさん:2009/05/01(金) 07:54:05
一つの正三角形をうまく切って、相似比1:1:2
の相似な図形3つに分けるにはどうしたらよいか。
909デフォルトの名無しさん:2009/05/01(金) 13:13:25
>>907
なんだっけ
女が上になってビンタしながらSEXすると
女が産まれやすいとか聞いた
910デフォルトの名無しさん:2009/05/01(金) 13:36:53
いや、ポイントは、

(1) 女をよろこばせない
(2) 浅いところで出す

だよ。
女が喜ぶほど酸が薄くなるらしい(=酸に弱いY 染色体が生き残りやすくなる)。
深いところに出す(=卵子への到達距離が短い)と、瞬発力のある
Y 染色体が勝つ可能性が高くなる。
911デフォルトの名無しさん:2009/05/01(金) 13:44:11
女を増やすには>>910の方法を実践しなければダメだということだな。
>>907を実践しても男女の出生確立は変わらないので結局、女は増えないしな。

というわけでプログラムを考えるまでもなく結論が出てしまいました。
912デフォルトの名無しさん:2009/05/01(金) 13:48:36
×確立
○確率
913デフォルトの名無しさん:2009/05/02(土) 14:26:42
>>910
ためになるスレだがあと1年早く聞きたかったな
914代記:2009/05/26(火) 15:40:21
二個の自然数nとkを適当に定めて、k個の黒石1と(n-k)この白石0を一列に並べる並べ方を、重複なくすべて列挙するプログラム
を作成して欲しいです。丸投げをしてしまって申し訳ないんですが、お願いします。
915デフォルトの名無しさん:2009/05/26(火) 17:35:21
nPk?
916デフォルトの名無しさん:2009/05/26(火) 18:57:27
>>914
1〜nの自然数からk個選ぶプログラムを考えればいいだけ
917デフォルトの名無しさん:2009/06/02(火) 17:47:21
ax2+bx+c=0の解を計算するプログラム(判別式D=b2-4acが負のときは、解が複素数であると出力するようにする)の作り方がわかりません。
丸投げですみませんが、どなたか知恵を貸してくださいです。お願いします。
918デフォルトの名無しさん:2009/06/02(火) 18:40:51
解の公式をプログラムで表現するだけだろ。
919デフォルトの名無しさん:2009/06/02(火) 23:15:50
>>917
もう諦めた方がいいかもな。
920デフォルトの名無しさん:2009/06/03(水) 03:31:29
知恵だけなら

ぐぐれ

答えはある
921デフォルトの名無しさん:2009/06/03(水) 13:41:11
初歩的な問題だったorz
できました。ありがとうございます
922デフォルトの名無しさん:2009/06/03(水) 21:17:29
まだ解決してません!早く答えをお願いします。
期限は明日の朝くらいでいいです。
923デフォルトの名無しさん:2009/06/04(木) 10:08:48
>>922
パスカルは使った事が無いのでLispで作っときました。

(defun d (a b c)
(if (< (- (* b b) (* 4l0 a c)) 0l0) (print "解が複素数である")))

勝手にパスカルに直してください。
924デフォルトの名無しさん:2009/06/05(金) 01:20:32
言語はLispでも良かったのでそのまま提出しました。
ありがとうございます。
925デフォルトの名無しさん:2009/06/16(火) 01:52:25
123456789の順に数字を並べて,数字の間に+,−を補うことで式を作り, その値が100になる組み合わせをすべて求め,その式を出力するプログラムを作成しなさい.
お願いします
926デフォルトの名無しさん:2009/06/16(火) 18:08:51
組み合わせはゼロだな。
全て足し合わせても100には満たない.
927デフォルトの名無しさん:2009/06/16(火) 19:28:33
小町算でしょ
928デフォルトの名無しさん:2009/06/16(火) 20:12:12
>>926
頭固いなw
929デフォルトの名無しさん:2009/06/17(水) 00:09:26
12345+6789だと少なくとも100は越えるな
930デフォルトの名無しさん:2009/06/17(水) 20:00:47
>>925に挑戦してるんだけど、プログラミング初心者には、難しめですか?
配列をfor文で回すので、良いのかな?
配列とかfor文って基本的な処理だと思うんだけど、うまく使えないんだよなぁ。
ネストしたループ文がゴチャゴチャしちゃって。

どなたかヒントいただけないでしょうか?
基本的な構造は、配列を使ったループ文で作ればいいのでしょうか?
931デフォルトの名無しさん:2009/06/17(水) 23:52:53
ネストが嫌ならある程度の処理でまとめて関数にしなさい
932デフォルトの名無しさん:2009/06/18(木) 01:40:24
>>925 Pascalじゃないけど。
1:12-3-4+5-6+7+89=
2:123-4-5-6-7+8-9=
3:123-45-67+89=
4:123+4-5+67-89=
5:123+45-67+8-9=
6:12+3-4+5+67+8+9=
7:12+3+4+5-6-7+89=
8:1+23-4+56+7+8+9=
9:1+23-4+5+6+78-9=
10:1+2+3-4+5+6+78+9=
11:1+2+34-5+67-8+9=
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9479.txt
933930:2009/06/18(木) 02:20:11
>>932
おぉ、C言語ですね。
俺の頭では、難しすぎました。面白そうな例題だったんで、取り組んでみたんだけど。
最初は、配列とFor文の組み合わせで、やっていたんですけど、配列を連結するとなると、
どんどん複雑になって、分けわからなくなりました。
簡単に紙の上の手書きでやってみたんですけど、数回やっている内に組み合わせが
多くなってきて、混乱しました。

+、−、連結の3種類に分類すると言うことが、肝ですね。
連結がパターンの中の一つと考えられなかったのが、残念です。
掲載された処理、読んでみます。
934930:2009/06/18(木) 02:44:28
これは、自分が思ってるよりも複雑でした。
パターンが3種類ということ以外にも、配列を複数個使って回してるようです。
Delphi6 personalで、C言語からPascalに書き換えてみたいと思います。

>>925さんじゃないですけど、非常に勉強になります。
932さん、ありがとうございました。
935デフォルトの名無しさん:2009/06/18(木) 18:04:27
 Pascalで書いてみた。
 932氏のプログラムと違うのは式を計算する方法だけ。
 ・・・だと思うんだけど、どう違うかまではまだ読みきれてない。
 結果は同じでした。

 FreePascalなんで変なオプション入ってる。
 あと、同じ理由で文字コードUTF-8です。
http://one.freespace.jp/amber_ale/text/kadai.pas
936デフォルトの名無しさん:2009/06/18(木) 22:53:12
>>935
932さんも、935さんもネストが深くても、全体的にコードがすっきりして見やすいです。
課題をいかに分解し、一つ一つの処理にするかが、センスなんだなぁと思いました。
初心者には、勉強になります。

935さんのコードは、文字コードをSJISにして、オプションを一つ削除することで、
Delphi6 personalで実行できました。
937デフォルトの名無しさん:2009/06/23(火) 14:31:05
integer変数nに適当な与えてnを素因数分解し、
その結果を表示するプログラムを作りなさい。

神様まってますっ!!
938デフォルトの名無しさん:2009/06/23(火) 17:39:32
そんな簡単なものも思いつかないようだとプログラム関係への道は止めた方が良い。
939デフォルトの名無しさん:2009/06/23(火) 18:08:16
>>938
スレタイをいちおくまんかい嫁。
940デフォルトの名無しさん:2009/06/24(水) 16:08:26
>>939
お前は>>1を同じ数だけ読んでこい
>■全く分かってない阿呆も放置しないで優しく対応
これをやっただけだろ
941デフォルトの名無しさん:2009/06/24(水) 16:42:38
>>937
できますた
lispで作るとこんなもんです。

(defun p (n)
(do ((x 2 (1+ x)) (y n))
((= y 1))
(do ((z x))
((/= 0 (mod y z)))
(print z)
(setf y (/ y z)))))
942デフォルトの名無しさん:2009/06/24(水) 20:51:42
>>937 C言語
/*
(defun p (n)
  (do ((x 2 (1+ x)) (y n))
    ((= y 1))
    (do ((z x))
      ((/= 0 (mod y z)))
      (print z)
      (setf y (/ y z))
    )
  )
)
*/
void p(int n) {
  int x, y, z;
  for(x=2, y=n; y != 1; x++) {
    for(z=x; y % z == 0; ) {
      printf("*%d", z);
      y = y / z;
    }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  printf("1");
  p(n);
}
943デフォルトの名無しさん:2009/06/30(火) 14:09:37
おまいらこれすぐできんのか!?
ガウス消去法で次の連立方程式を解くプログラム
x+y+z=33
2x+4y+6z=100
3x+9y+21z=225
cpad for free pascal用だお!
944デフォルトの名無しさん:2009/06/30(火) 16:35:03
>>943
問題が面白くないっす。
945デフォルトの名無しさん:2009/06/30(火) 16:39:23
946デフォルトの名無しさん:2009/06/30(火) 16:50:17
x=20
y=9
z=4
947デフォルトの名無しさん:2009/07/04(土) 23:04:38
pascalを本格的に勉強しようと思ってるんだけど、おすすめの本とかない?
文法はもうだいたい知ってるから、問題を解きながら勉強したいんだけど

俺にもPASCALの勉強をさせてよ
948デフォルトの名無しさん:2009/07/05(日) 12:39:33
>>947
取り合えずProject Eulerの問題でも解いとけ
949デフォルトの名無しさん:2009/07/05(日) 19:13:06
pascal centralにでも行け
950デフォルトの名無しさん:2009/07/06(月) 14:07:49
>>947
俺のような懐古厨が Pascal にすがりつくのはわかるけど、
新規に Pascal を勉強する意義がよくわからん。
メインの開発言語を持ってないと(だいたい C 系だわな)
苦労するだけだと思うが。

気に入ったと言うならまあ止めはしないが。
951947の毒男:2009/07/07(火) 01:13:49
>>948
ありがとう
そのホームページめっちゃいいなぁ でも、答えはないの?

>>949
あれ?pascal centralに入ってみたけど、どこに問題があんの?
英語のせいで、今頭がぐるぐるしてる…

>>950
懐古趣味とかじゃなくて大学でPASCALを習ってんねん。
俺の学科が情報科学科やからなぁ
だから、試験勉強にもなるし、早くうまくなりたいなぁと思ってさ
まぁ、とにかく答えてくれてありがとう
952デフォルトの名無しさん:2009/07/07(火) 03:54:49
>>950
Pascalに萌えちゃう人もいるんですよ。
953デフォルトの名無しさん:2009/07/07(火) 09:39:20
まあ、俺も BCB のデバッグ中に VCL のソース読んでて
Pascal に萌えちゃったんだけどね。
954デフォルトの名無しさん:2009/07/14(火) 13:39:04
pascal pcpad
1個の自然数nを適当決めて、nチームが参加する
リーグ戦の全試合を表示するプログラムを書きなさい。
955デフォルトの名無しさん:2009/07/15(水) 20:34:35
>947
アルゴリズム+データー構造=PASCAL
http://www.fukkan.com/fk/VoteDetail?no=8797
廃刊だがおいらはBookOffで100円で買った。古本屋にあるかも。
 問題等ではないが、この本のプログラムを位置から組めば非常に
勉強になると思われます。 

 この手の本は他にもあるんじゃないかな?

 PascalじゃなくてDelphiだけど、しかもオブジェクト指向の本だから全然関係ないけど、
 これ↓は読んどいた方がいいと思う。
 Delphiオブジェクト指向プログラミング
 
956デフォルトの名無しさん:2009/07/16(木) 01:35:49
Delphi=ObjectPASCAL
957デフォルトの名無しさん:2009/07/29(水) 11:07:25
N88basicとかの時代はpascalは重宝されたけど今の時代はどうなん?
958デフォルトの名無しさん:2009/07/29(水) 12:23:09
昔も今も勉強用
delphiだけ例外
959デフォルトの名無しさん:2009/07/30(木) 06:41:15
秀丸の16bit版はターパスで書かれてるそうな。32bit版はVC++
960デフォルトの名無しさん:2009/07/30(木) 07:18:14
そのころから4000円ですか?
961デフォルトの名無しさん:2009/07/30(木) 07:23:27
yes
962デフォルトの名無しさん:2009/07/31(金) 19:29:12
質問です。
外部ファイルを扱う手続きをつくり、その手続きをプログラム内で複数回使って別々のテキストファイルを読み込みたいのですが
仮引数で外部ファイル名を指定できるようにするにはどうすればよいでしょうか。

すみません、仮引数の意味すらあいまいなので
書いてることが滅茶苦茶かも知れません。。。
963デフォルトの名無しさん:2009/07/31(金) 20:11:35
procedure 外部ファイルを扱う手続き(ファイル名: string);
964デフォルトの名無しさん:2009/08/01(土) 06:09:59
>>960-961
パスワードも当時から変わってないかとw
965デフォルトの名無しさん:2009/08/07(金) 11:03:31
1、逆ポーランド記法で入力された式を計算し、それを通常の表記とともに
出力する。ただし、入力する数式の各要素は、半角スペース一つで区切る事。
2、演算は整数型の範囲で行い、加算、減算、乗算、除算(div および mod)とし、
それぞれ、+、ー、*、d、m で表現する事。
3、使用できない文字が含まれる入力に対して、エラーの旨を出す事。
4、入力された式を計算、出力した後、再度入力待ち状態になり、空の文字列を
入力するとプログラムが終了する事。
以上の条件をみたすプログラムを組んでください!できるだけ早めに
お願いしますm(_ _)m
966デフォルトの名無しさん:2009/08/08(土) 16:14:39
明後日なら暇ですよ^^
967デフォルトの名無しさん:2009/09/20(日) 01:13:51
.
968デフォルトの名無しさん:2009/11/11(水) 12:47:12
n個の地点を結ぶ道路網がある。始点1から終点nに至る経路で、
同じ地点を2度以上通らずにいくものを全てあげ、一番近い経路を示せ。
道路網の形状、地点数n、距離は与えられるものとする。
という問題です。
よろしくお願いします。
969デフォルトの名無しさん:2009/11/11(水) 13:05:20
わかりました
970デフォルトの名無しさん:2009/11/11(水) 22:04:10
NP
971デフォルトの名無しさん:2009/11/12(木) 04:08:32
質問です。
function内で再帰は可能のようですが、
procedureでの再帰は可能ですか?
うまくコンパイルできません。。

>>968
同士
972デフォルトの名無しさん:2009/11/12(木) 14:58:53
>>971
再帰の意味分かってる?

あとソース貼れ
973デフォルトの名無しさん:2009/11/13(金) 00:05:28
>>968 をやってみた。汚いけど
ttp://www1.axfc.net/uploader/Sc/so/54364.txt
pass:akaso
974デフォルトの名無しさん:2009/11/13(金) 00:49:15
thx!
975デフォルトの名無しさん:2009/11/17(火) 15:05:17
二分法とニュートン法で次の非線形方程式の解を求めるプログラムを作成せよ

x=2+logx (x≧1)

pascalでよろしくお願いします。
976デフォルトの名無しさん:2009/11/18(水) 02:05:16
ちょっとまちなー
977デフォルトの名無しさん:2009/12/11(金) 20:02:41
ターミナル上でテキストを編集するプログラムを作成せよ
以下のコマンドも使えるようにする事

i =テキスト挿入
p =単語の手前にポインタ移動
d =入力した数だけポインタの後ろの文字を消す
c =入力した文字列をポインタの後の文字列に置き換える
s =ポインタの後に空白挿入
q =終了

16日までです。よろしくお願いします。
978デフォルトの名無しさん:2009/12/12(土) 00:35:05
分かりました。1日だけ待って下さい。
979>>977:2009/12/13(日) 18:27:06
あう・・・>>978の人が1日たったけど来ないのでどなたか別の人お願いします・・・
980デフォルトの名無しさん:2009/12/13(日) 18:40:34
分かりました。あと1日だけ待って下さい。
981デフォルトの名無しさん:2009/12/13(日) 21:12:02
>>979
ああ、いいよ
でも今手元に環境がないから多少遅れると思うけどそれでいいなら
982デフォルトの名無しさん:2009/12/14(月) 01:47:50
>>981
ありがとうございます。何時ごろになりそうですか?
983デフォルトの名無しさん:2009/12/14(月) 04:53:18
締め切りまであと何日かあるんじゃないの?
984デフォルトの名無しさん:2009/12/14(月) 08:23:13
多少遅れるというので締め切りを過ぎるかと思いましたw
985デフォルトの名無しさん:2009/12/14(月) 13:40:25
16日中にできればいいの?16日提出?
986デフォルトの名無しさん:2009/12/14(月) 18:01:37
16日の夜9時までに提出なのでそれまでに出来ればいいです。
987デフォルトの名無しさん:2009/12/15(火) 01:01:17
わかった
ギリギリになるかもしれないけどおk?
988デフォルトの名無しさん:2009/12/15(火) 01:59:56
おkです
よろしくお願いします。
989デフォルトの名無しさん:2009/12/15(火) 15:50:15
やる気が無いなら放置しろよ
からかってないで
990デフォルトの名無しさん:2009/12/15(火) 16:23:24
えっ
991デフォルトの名無しさん:2009/12/15(火) 18:34:32
産め
992デフォルトの名無しさん:2009/12/15(火) 19:25:27
分かりました。もう1日だけ待って下さい。
993デフォルトの名無しさん:2009/12/15(火) 21:42:35
お願いします、どなたか>>977やってください・・・
994デフォルトの名無しさん:2009/12/15(火) 23:19:49
ちょっとまちなー
995デフォルトの名無しさん:2009/12/15(火) 23:59:48
kwsk
996デフォルトの名無しさん:2009/12/16(水) 00:49:01
 トランプには一つのスートに13枚の札がある。Aから10までの数札と、ジャック・クイーン・キングの合計13枚である。ここでは、ジャックは11、クイーンは12、キングは13と数えよう。では1から13までの数字を全て足して頂きたい。
1+2+3+4+5+6+7+8+9+10+11+12+13=91
トランプには、四つのスートがあるので、合計の数を更に4倍してみよう。
91×4=364
この数字、何処かで見たことはなかろうか? そう実は、太陽の周期、一年間の日数なのである。トランプは正に、一年と言う時間を支配しているのだ。
え? 一日足りない? ふーむ・・・では、良くトランプのデッキを確認して見よう。何やら他とは違った、奇妙なカードは無いだろうか? そう、ジョーカーである。ジョーカーを入れると丁度一年間、365日になるのだ。
え? ジョーカーが2枚入っているって? ふむ。お忘れだろうか? 一年が366日になる年があることを。そう、四年に一度の閏年である。それでジョーカーは、基本的に2枚入っているのである。
997デフォルトの名無しさん:2009/12/16(水) 02:39:26
産め
998デフォルトの名無しさん:2009/12/16(水) 06:13:48
de?
999デフォルトの名無しさん:2009/12/16(水) 06:15:11
!
1000デフォルトの名無しさん:2009/12/16(水) 06:15:52
.
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。