Pascalの宿題は俺にやらせろ!!Part2
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/01/12(木) 00:45:25■丸投げ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
0002デフォルトの名無しさん
2006/01/12(木) 00:48:200003デフォルトの名無しさん
2006/01/12(木) 00:49:030004デフォルトの名無しさん
2006/01/12(木) 00:49:30バカかお前
0005デフォルトの名無しさん
2006/01/12(木) 02:01:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1432.lzh
今見たら49行目にいらんFormatが付いてたから消しといて。
0006taihenda
2006/01/12(木) 02:52:40ありがとうございます!!
Q2を表示させるためにはどうしたらいいんですか?
すぐに実行画面が消えてしまいます。
0007デフォルトの名無しさん
2006/01/12(木) 03:52:59可能性1.コマンドプロンプト(通称DOS窓)が理解できていない。
可能性2.49行目をFormatだけで無く、全部消している。
まあ、想定内だが。
1.なら、コマンドプロンプトでググるか、以下の内容のテキストファイルを解凍したフォルダに作成して、Project1.batって名前に変更し、ダブルクリックするよろし。
Project1
pause.
2.なら元にもどしといて。
0008taihenda
2006/01/12(木) 04:41:432でした。
お陰で完了しました。ありがとうございます。
何だか自分でももう一度組んでみようという気になれました☆
0009デフォルトの名無しさん
2006/01/12(木) 07:32:280010デフォルトの名無しさん
2006/01/12(木) 22:06:130011デフォルトの名無しさん
2006/01/13(金) 09:04:081 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Pascal で書くとどうなりますか?
例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
0012デフォルトの名無しさん
2006/01/13(金) 21:46:33begin
for counter=1 to N do
begin
end;
end;
まずこれが思い浮かんだ。
001312
2006/01/13(金) 21:47:16for 1 to N do
begin
for counter=1 to N do
begin
end;
end;
0014デフォルトの名無しさん
2006/01/13(金) 21:48:26for j := 1 to N do
begin
end;
だろ。
001512
2006/01/13(金) 22:43:54for counter1 := 1 to N do
begin
for counter2 := 1 to N do
begin
end;
end;
だった。
0016デフォルトの名無しさん
2006/01/13(金) 22:58:59001712
2006/01/14(土) 00:10:110018デフォルトの名無しさん
2006/01/14(土) 04:54:000019デフォルトの名無しさん
2006/01/14(土) 05:16:31CやJavaがお勧めです
0020デフォルトの名無しさん
2006/01/14(土) 05:26:26うっさいボケ!自分もでけへんからひがんで荒らしてんのちゃうんか!
アホ↓↓
0021デフォルトの名無しさん
2006/01/14(土) 05:57:40Pascal は教科書にしか出てこない研究用言語ですから
プロの実用に耐えません。
ここにいるのはアマチュア以下の人ばかりです。
0022デフォルトの名無しさん
2006/01/14(土) 06:06:16objective-PascalとしてDelphiに上塗られて生きていくのさ
0023デフォルトの名無しさん
2006/01/16(月) 01:32:300024デフォルトの名無しさん
2006/01/16(月) 12:32:34個数がでるだけだろw
0025デフォルトの名無しさん
2006/01/16(月) 23:13:211〜nをn−1個並べるのには何通りあるかなら知らんけど
いや、nCn-1か
0026デフォルトの名無しさん
2006/01/16(月) 23:14:07忘れてくれwww
0027デフォルトの名無しさん
2006/01/17(火) 15:37:23全部書き出されたかのチェックには良いかもしれない、と横からフォロー。
0028デフォルトの名無しさん
2006/01/17(火) 20:27:20本当のプログラマはPascalを使わない、ってのがあったな。
じゃあ何を使うのか? 21への宿題。
0029デフォルトの名無しさん
2006/01/17(火) 20:57:57誰もやらないから作ってみた↓
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を付ければ多分使える↓
0030デフォルトの名無しさん
2006/01/17(火) 20:58:41var
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;
0031デフォルトの名無しさん
2006/01/17(火) 21:17:07>>Pascal は教科書にしか出てこない研究用言語ですから
>>プロの実用に耐えません。
>>ここにいるのはアマチュア以下の人ばかりです。
とか言ってるがpascalの宿題を書けなかったら
javaやC言語やdelhiでも書けるわけないだろw
結局はCUI仕様をGUI仕様にしただけだし
0032デフォルトの名無しさん
2006/01/18(水) 04:06:510033デフォルトの名無しさん
2006/01/18(水) 16:38:43線が移動しながら伸び縮むするとか、多角形とかダイヤみたいなマークが移動するだけのでもいいです。
0034デフォルトの名無しさん
2006/01/18(水) 17:14:03必要としているのなら、必要としている人が作るのが一番。人に依頼する
のなら、それなりの対価としっかりした仕様書を出さないと相手にされない。
0035774RR
2006/01/18(水) 17:38:45標準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;
0036774RR
2006/01/18(水) 17:39:59procedure 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.
0039デフォルトの名無しさん
2006/01/18(水) 20:22:49とinitialiseのprocedureなしでも作動した
あと>>11の宿題は>>29にもあるぞー
0040デフォルトの名無しさん
2006/01/19(木) 06:30:46sかよw
0041デフォルトの名無しさん
2006/01/19(木) 09:37:540042774RR
2006/01/19(木) 12:40:06Que si?
普通の英語だおー
>39
処理系によっては、メモリ領域をOSから貰う時にゼロフィルするのがあるの。
0043& ◆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;
004443
2006/01/19(木) 23:18:36var
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;
;
004543
2006/01/19(木) 23:20:58var 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;
004643
2006/01/19(木) 23:22:37if 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;
004743
2006/01/19(木) 23:23:38value := 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;
004843
2006/01/19(木) 23:24:24{初期化}
{定数}
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.
0049デフォルトの名無しさん
2006/01/20(金) 08:31:13GetTokenの
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桁の数字をいれてもエラーがでるな
005043
2006/01/20(金) 23:29:26function 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;
005143
2006/01/20(金) 23:32:23マイナスは '-'ではいけないのでしょうか?
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;
0052デフォルトの名無しさん
2006/01/21(土) 00:22:19function 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;
005343
2006/01/21(土) 22:47:29学校じゃないとできないんで月曜日試してみます。
ありがとうございました。
0054デフォルトの名無しさん
2006/01/23(月) 05:22:352数を変数渡しにしたswap1(var a,b:real)
2数を値渡しにしたswap2(a,b:real)
簡単ですよね。
0055デフォルトの名無しさん
2006/01/23(月) 05:30:090056デフォルトの名無しさん
2006/01/23(月) 06:08:190057デフォルトの名無しさん
2006/01/23(月) 09:49:36まあ俺も始めたばかりのど素人だけどな。
0058デフォルトの名無しさん
2006/01/23(月) 11:18:365分勉強してください^^
0059デフォルトの名無しさん
2006/01/23(月) 11:39:050060デフォルトの名無しさん
2006/01/23(月) 16:09:190061デフォルトの名無しさん
2006/01/23(月) 16:36:52a:=b;
b:=z;
これでいいか?w
0062デフォルトの名無しさん
2006/01/23(月) 17:17:030063デフォルトの名無しさん
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}
0064デフォルトの名無しさん
2006/01/24(火) 17:51:28procedure 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;
0065デフォルトの名無しさん
2006/01/24(火) 17:59:53xe := 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));
じゃね?
0066デフォルトの名無しさん
2006/01/24(火) 18:47:56ありがとうございます。教科書を再確認したらちょうどそこで間違えてました。
だけど、いまだにvarの直後にカーソルが来てエラーが出るんですが
どこがまだ間違ってるとおもいますか?
>[エラー]Unit1.pas(31):';'が必要な場所に’VAR’があります
>[エラー]Unit1.pas(51):宣言が必要な場所にファイルの末尾があります
>[致命的エラー]Project2.dpr(5):'Unit1.pas'ユニットはコンパイルできませんでした
って言うエラーメッセージが出てきます
0067774RR
2006/01/24(火) 18:50:140068デフォルトの名無しさん
2006/01/24(火) 18:58:26ありがとうございます!
こんな簡単なことでつまづいてたなんて恥ずかしいです。
0069ささ ◆6KVcpBNXy.
2006/01/27(金) 01:44:14こっちに誘導されてきました…↓下記にカキコあります↓
http://pc8.2ch.net/test/read.cgi/tech/1135866929/965-
お願いします
0070デフォルトの名無しさん
2006/01/27(金) 02:21:23まずは平均点を求めるための式を考えてみましょう
0071デフォルトの名無しさん
2006/01/27(金) 02:28:33レスくれたらちゃんと答えに導くつもりなので
0072デフォルトの名無しさん
2006/01/27(金) 03:12:52begin
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の間違い。
そこも直せ。話はそれからだ
0073ささ ◆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;
0074ささ ◆6KVcpBNXy.
2006/01/27(金) 09:56:33for 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.
秋学期試験前に難しい宿題出て四苦八苦してます
0075デフォルトの名無しさん
2006/01/27(金) 21:08:45const
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.
0076ささ ◆6KVcpBNXy.
2006/01/28(土) 00:50:20constって習っていません
formatがDelphi6では未定義となります。
これだと終了しないのでは?。。
0077デフォルトの名無しさん
2006/01/28(土) 05:59:41const は定数で、リードオンリー。
format が未定義と出るのは、uses に SysUtils ユニットが入ってないからと思われ。
0078ささ ◆6KVcpBNXy.
2006/01/28(土) 13:03:27formatと%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]));
0079デフォルトの名無しさん
2006/01/28(土) 13:21:350080デフォルトの名無しさん
2006/01/28(土) 13:25:180081ささ ◆6KVcpBNXy.
2006/01/28(土) 14:28:52もし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]));
008275
2006/01/28(土) 16:10:47わかんないんならムリに Format を使う必要ないだろう
ただ単に文字列の体裁を整えているだけなので、これは IntToStr 等に置き換えられる。
writeln(IntToStr(i+1)+'人目の合計点は'+IntToStr(Sum1)+'点');
>>81
n人目なら i じゃなくて n だけどな
小数点以下を必要としないときは3で割る部分を
var
heikin: Integer; //整数型で充分
begin
heikin := Sum1 div 3;
などとする。こうすると整数の割り算になるから小数点以下は捨てられる。
こういう総論的なことは教科書が手元にあるんだったら載ってるはずだから確認してみれ
つか試験とか大丈夫なのか?
0083ささ ◆6KVcpBNXy.
2006/01/28(土) 16:38:49大学秋試験は大丈夫ですよ〜ノートとかきっちりとってますので。。。
ありがとうございました。
0084デフォルトの名無しさん
2006/01/28(土) 16:45:56> writeln(IntToStr(i+1)+'人目の合計点は'+IntToStr(Sum1)+'点');
何故
writeln(i+1, '人目の合計点は', Sum1, '点');
と書かないの?
0086デフォルトの名無しさん
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.
008786
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 };
008886
2006/01/28(土) 23:23:29begin
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.
0089774RR
2006/01/28(土) 23:23:43var 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ぃると先生の流儀。
0090774RR
2006/01/28(土) 23:26:27AとBとCとのGCDは
(AとBとのGCD)とCとのGCD、って発想かと。
末尾再帰になりそうだから、ループに展開するのが普通じゃないかな。
(書いてみてないのでぼそっと)
0091デフォルトの名無しさん
2006/01/28(土) 23:35:25begin
if b = 0 then gcd := a
else gcd := gcd(b, a mod b)
end;
009286
2006/01/28(土) 23:54:02var
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.
009386
2006/01/28(土) 23:55:011番目の値を入力
10
1番目の値を入力
20
1番目の値を入力
30
1番目の値を入力
40
1番目の値を入力
50
1番目の値を入力
60
1番目の値を入力
70
1番目の値を入力
80
1番目の値を入力
0
最大公約数は 80
・・・orz
0094デフォルトの名無しさん
2006/01/29(日) 05:29:24っていうのを繰り返すように組むことってできますか?
例えばボタン1で図形が現われて、ボタン2で上記の動きを始めるみたいな・・・
0095デフォルトの名無しさん
2006/01/29(日) 15:36:24ってどう書くんですかまったくわかりませんorz
0096デフォルトの名無しさん
2006/01/29(日) 21:49:13超適当だけど
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.
0097デフォルトの名無しさん
2006/01/29(日) 22:08:46とりあえず作ってみた。
http://www.uploda.org/uporg299109.lzh.html
pass:pascal
0098デフォルトの名無しさん
2006/01/29(日) 22:25:09自己レス。
TOneToNine = 0..9; ←型名と範囲がずれているけど、細かいことは気にしてはいけない
TTwoTo99 = 0..99; ←型名と範囲がずれているのは、直すのを忘れたから
・DelphiとFreePascalでコンパイルできると思う。
・できたプログラムを実行すると、プログラムと同じディレクトリにある
"hoeee.txt"を上書きしてしまう。ソースを読めばわかるだろうけど、一応注意ってことで。
0100デフォルトの名無しさん
2006/01/29(日) 22:53:060101デフォルトの名無しさん
2006/01/29(日) 23:03:23program 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.
0102デフォルトの名無しさん
2006/01/30(月) 00:26:02禿しくサンクスです!!
ありがたく拝見させていただいて学習します。
0103デフォルトの名無しさん
2006/01/30(月) 20:38:06ガンガレ。
0104デフォルトの名無しさん
2006/01/31(火) 14:08:43やらせはせんよ!
0105デフォルトの名無しさん
2006/02/05(日) 02:10:490で入力停止のはずなのに止まらないし、なんか変な結果が出ます。
どこに問題があるのでしょうか??
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 }
0106デフォルトの名無しさん
2006/02/05(日) 02:11:20begin
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.
0107デフォルトの名無しさん
2006/02/05(日) 03:08:37procedure swap(var a, b: integer); (* var で書き換え可能にする *)
var
tmp : integer;
begin
(* readln(a,b); これは必要ない *)
if a<b then
:
:
0108デフォルトの名無しさん
2006/02/05(日) 12:10:58ベクトルの要素のデータ型は、整数、実数のどちらかに統一しなさい。データはキーボードから読み込むものとする。また、 writeln を用いて、データの型、入力のさせ方をメッセージの形で記述せよ。
これお願いします。
なんか俺プログラミングの教材読んでもとりあえず理解できたけど問題出されると解けないんですが、これってもうそっち方面の考える力がないんですかねえ。
他の理系科目は普通にこなせるんですが、離散もできないし。
数こなせば出来るようになんの?
0109デフォルトの名無しさん
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]);
みたいな感じかな・・?
数学得意じゃないのでいまいちわからんからあとはがんばれ
0110デフォルトの名無しさん
2006/02/05(日) 20:19:47とりあえず作ってみた。
http://www.uploda.org/uporg304927.lzh.html
・入力のエラーチェックはしていない。
・ FiveVector1→A
FiveVector2→B
FiveVectorSum→C
hoeee→D
という対応になってるんで、必要ならテキスト置換でも使って変換してくだちい。
0111デフォルトの名無しさん
2006/02/05(日) 20:21:210112105
2006/02/05(日) 21:19:38ありがとうございます。ご指摘の通り直したら動きました。
ところで
procedure swap(var a, b: integer); (* var で書き換え可能にする *)
とありますが、varをつけるとプログラム本文のところで別の文字を使って使える
ということですか?
なんか実引数とか仮引数とかがわかってないことを見せつける質問ですいませんorz
0113デフォルトの名無しさん
2006/02/06(月) 02:31:160114デフォルトの名無しさん
2006/02/06(月) 18:53:02program 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。
0115デフォルトの名無しさん
2006/02/06(月) 19:09:04大学一年生にもできそうでちょっと難しいような宿題が投下されないだろうか。
0116774RR
2006/02/06(月) 19:31:50じゃあCASLのアセンブラと仮装機械w
0117デフォルトの名無しさん
2006/02/06(月) 19:50:04最初見たとき言葉遣いとhoeeeにうけましたw
0118115
2006/02/06(月) 22:56:00調子こいてました(><
でも単純に機械語に翻訳するだけならなんとかなるのだろうか。
そこからプログラムを動かすってのが明らかに不可能です
本当にありがとうございました。
0119デフォルトの名無しさん
2006/02/07(火) 02:24:540120デフォルトの名無しさん
2006/02/07(火) 05:03:24は?バカ?
0121デフォルトの名無しさん
2006/02/07(火) 05:33:32え?このスレってそんなレベル?
0122デフォルトの名無しさん
2006/02/07(火) 08:50:040123デフォルトの名無しさん
2006/02/07(火) 09:51:230124774RR
2006/02/07(火) 12:16:18HPの電卓もかっこよかたな。
1 ENTER 2 + 3 * 4 - ....
0125デフォルトの名無しさん
2006/02/07(火) 13:29:25識者の方どうかおねがいします(><)
0126デフォルトの名無しさん
2006/02/07(火) 17:59:150127774RR
2006/02/07(火) 18:34:57TP互換環境なら走るだろう。その壱
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;
0128774RR
2006/02/07(火) 18:36:15var 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;
0129774RR
2006/02/07(火) 18:38:30begin
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;
0130774RR
2006/02/07(火) 18:39:31initstack;
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.
0131774RR
2006/02/07(火) 18:43:262
+
3
4
+
*
...
って感じに入力していくと逆ポな計算機になるよ。
スタックを線形リストで表現してるのが一応演習課題に則ってる。
本当なら、文字列→数の変換もスタックを使うんだが、めんどい。
そこまですると、電卓の+/-キー(符号反転キー)が二項演算子の-キーと
分かれている理由がよく理解できる。
0132デフォルトの名無しさん
2006/02/07(火) 18:44:36var s : pstack;
begin
while stack<>nil do begin
s := stack.next;
dispose(stack);
stack := s
end;
initstack
end;
s := stack.next;
じゃなくて
s := stack^.next;
じゃない?
0133774RR
2006/02/07(火) 18:45:30前回投稿した消し残りだw
0134774RR
2006/02/07(火) 18:47:19その通りだけど、何でコンパイルできたんだろうw
拡張構文なのかコンパイラのバグかww
0135デフォルトの名無しさん
2006/02/07(火) 22:56:20問題聞いてもらってもよろしいでしょうか?
0136135
2006/02/07(火) 23:04:501 一方向リストの中のp番目とNEXT(p)番目の位置の要素を交換するプログラムを
手続きを用いて書け。
関数NEXTの定義:リストLで位置pの直後の位置を返す関数
とありますが、NEXTという関数はPascalに標準であるのでしょうか?
私の使っているCPad for free pascalだとないと言われるのですが・・。
0137デフォルトの名無しさん
2006/02/07(火) 23:53:230138デフォルトの名無しさん
2006/02/07(火) 23:57:04ということは、自分でNEXT関数を自分で定義しろということですか?
0139デフォルトの名無しさん
2006/02/08(水) 00:02:10一方向リストってどういう構造なん?
ポインタで繋いでるなら別段難しいことはないと思うんだけど。
0140デフォルトの名無しさん
2006/02/08(水) 00:05:31ポインタを使ったリスト構造のことだと思います。
0141デフォルトの名無しさん
2006/02/08(水) 00:16:52list = ^listcell
listcell = record
e : element;
point : listCell;
end;
var
p : list;
みたいな感じに定義してlistcell型の要素が繋がってるんなら、たとえばp^.pointが
pの要素の次の位置を指しているんじゃないの?
なんだかいまいち俺には分からないんだ。
問題を全部書いてくれれば分かるかもしれない。
あれで全部?
0142デフォルトの名無しさん
2006/02/08(水) 00:24:020143デフォルトの名無しさん
2006/02/08(水) 00:27:39e:elementってelementってどういう変数か知りませんが、要素って
名前とかじゃだめですかね?
type
list=^listcell
listcell=record
name:string[10];
id:integer;
pointer:list
end;
var init,current:list;
datname,datid:string[10];
こんな感じでもいいかな?
0144デフォルトの名無しさん
2006/02/08(水) 00:28:28じゃあ、ポインタとはまた違うものだってことでしょうか?
まったく習っていないのでわかりません。
0145デフォルトの名無しさん
2006/02/08(水) 00:29:32list=^listcell
listcell=record
name:string[10];
id:integer;
pointer:list
end;
var init,current:list;
datname:string[10];
datid:integer;
に訂正
0146141
2006/02/08(水) 00:40:57new(init);
new(current);
init^pointer := current;
みたいな感じで繋げていくんだよな?
そのあと値を入れていったとする。
>1 一方向リストの中のp番目とNEXT(p)番目の位置の要素を交換するプログラムを
>手続きを用いて書け。
>関数NEXTの定義:リストLで位置pの直後の位置を返す関数
ってことだけど、例えばp=1番目の直後の位置ってのはこの例でいくと
init^.pointerが指してるもののことじゃないの?
あと交換するだけなら要素の内容をレコード型変数かなにかに一旦格納して
入れ替えればいいんじゃないかと思うんだけど、どのあたりを俺は勘違いしているのか。
0147デフォルトの名無しさん
2006/02/08(水) 00:48:50> そっから
> new(init);
> new(current);
> init^pointer := current;
> みたいな感じで繋げていくんだよな?
> そのあと値を入れていったとする。
この部分はわかります。
next関数に関してですが、p=1の場合と最後の時、それから途中の場合で
場合わけしなければいけないと思うのですが、
入れ替える位置というのが名前とか、idだとできると思うんですがこの問題の場合
p番目といわれるとわかりません・・・。
0148デフォルトの名無しさん
2006/02/08(水) 00:51:39でまわしてるときに、
n:=n+1していけばいいのかな?
0149141
2006/02/08(水) 00:59:43でいいだろうね。
それとnext関数を最初と最後で場合わけしないといけないってことだけど、
最初と最後になにも入ってないダミーセルを配置しておけば例外処理を
行わなくてもできるんじゃない?
つまり実際に値を格納しておくものよりも二つぶん多めにnewしとく。
0150デフォルトの名無しさん
2006/02/08(水) 01:19:17ダミーセルをつくるのはたぶんだめっていわれます。
0151デフォルトの名無しさん
2006/02/08(水) 01:57:34endで終わらない・・・。
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.
0152デフォルトの名無しさん
2006/02/08(水) 02:11:370153デフォルトの名無しさん
2006/02/08(水) 02:12:25var 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.
0154デフォルトの名無しさん
2006/02/08(水) 02:14:15要素を入れ替えなさい。
0155デフォルトの名無しさん
2006/02/08(水) 12:31:22currentとpreviousのpointerを入れ替えればできるか思ったのですが
無限ループになってしまいます。
削除と挿入ならできるのに・・。
0156774RR
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型のデータの部分がでかい場合、コピするのにマシンサイクルを
使い過ぎる。簡単に張り替えられるのがリストの利点よん。
0157デフォルトの名無しさん
2006/02/08(水) 19:46:04currentとpreviousとtempのほかにもうひとつ必要だったのですか。
そうすると、メインプログラムも変えないとだめってことでしょうか?
0158デフォルトの名無しさん
2006/02/08(水) 19:54:31ppred・・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;
0159774RR
2006/02/08(水) 20:44:27Program 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;
0160774RR
2006/02/08(水) 20:45:13var 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;
0161774RR
2006/02/08(水) 20:45:49var 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;
0162774RR
2006/02/08(水) 20:46:44var p : plist;
begin
p := top;
while top<>nil do begin
p := top^.next;
dispose(top);
top := p
end
end;
0163774RR
2006/02/08(水) 20:47:23initlist;
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.
0164デフォルトの名無しさん
2006/02/08(水) 20:53:39粘着もすまそでつ。
最近もの書きばっかやっているんで
たまにプログラムを書かないと脳が腐る ●rz
0165774RR
2006/02/08(水) 20:54:35ともかく帰依まつ
0166デフォルトの名無しさん
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?で書いてあります。
0167デフォルトの名無しさん
2006/02/08(水) 21:01:46var
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;
0168デフォルトの名無しさん
2006/02/08(水) 21:11:53procedure 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}
0169デフォルトの名無しさん
2006/02/09(木) 16:05:59よろしくお願いします。
0170デフォルトの名無しさん
2006/02/10(金) 12:46:42ただし、Readlnでnの値を読み込んでから作図するようにせよ。
TopPascalのこのような課題が出ました。
どうか皆様の力をお貸しください。
0171デフォルトの名無しさん
2006/02/16(木) 09:43:190172デフォルトの名無しさん
2006/02/16(木) 10:08:26お前は1週間何やってたんだと小一時間説教してやる。
0173デフォルトの名無しさん
2006/02/16(木) 11:18:23TopPascalもコマンドラインで描画の方法も知らんけど、
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;
てけとーに真似してやってみれ
0174デフォルトの名無しさん
2006/02/16(木) 20:41:13できればどなたかコピペしてランすればできるのを提供していただけないでしょうか?
0175デフォルトの名無しさん
2006/02/16(木) 21:26:190176デフォルトの名無しさん
2006/02/17(金) 00:14:190177デフォルトの名無しさん
2006/02/17(金) 02:40:340178デフォルトの名無しさん
2006/02/17(金) 05:12:410179デフォルトの名無しさん
2006/02/20(月) 01:59:19ことに甘えまして、宜しくお願いいたします。
文字列型(あくまで)で、00〜ffに対し、
最終integer型で0〜255に変換したいのですが・・。
たとえば、
var
a:string;
b:integer;
begin
a:='2f';
・
・
・
・
write(b);
end.
ここでのCRT出力を
「47」
としたい訳です。
どのような手法で可能でしょうか?ご教示下さい。
0180デフォルトの名無しさん
2006/02/20(月) 08:45:30hogeを使って一文字づつ変換して16倍するループを書く。
0181デフォルトの名無しさん
2006/02/20(月) 19:40:25有り難うございます、一寸やってみます。
0182デフォルトの名無しさん
2006/02/22(水) 01:09:37function 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;
0183デフォルトの名無しさん
2006/02/22(水) 04:56:140184デフォルトの名無しさん
2006/02/22(水) 10:52:300185デフォルトの名無しさん
2006/02/24(金) 19:58:020186デフォルトの名無しさん
2006/03/24(金) 06:02:220187デフォルトの名無しさん
2006/04/11(火) 17:32:22プログラムと適当なデータを入力した結果と一緒に提出せよ。
1. データは日、時間、分、秒を表す整数型のフィールド名 day, hour, minute, second のレコード型で定義し、
レコード名を time とせよ。プログラム名を Toi2 とし、 秒と分の計算課程は同一であるため、
その個所は手続きを使って表現せよ。
2. 入力として、時、分、秒の 3個のデータを 2セット入力し、その和を出力せよ。
3. もし、 hour の値が 24 以上であれば day に1の値を、 24未満であれば零にせよ。
0188デフォルトの名無しさん
2006/04/11(火) 17:34:13f( 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)の値と”収束しなかった”文を出力せよ。
0189774RR
2006/04/11(火) 18:52:31type
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.
0190デフォルトの名無しさん
2006/04/11(火) 19:43:31carryとcryをintegerにしてcarry:=(c>=60);をcarry:=c div 60;にすれば
(* a + b must be less than 120 *)の注意書きも要らなくなると思う。
そうすれば+ord(cry)をそのまま+cryに出来るし。
0191デフォルトの名無しさん
2006/04/12(水) 12:14:53cryって何ですか?
ほかにもコンパイルエラー出てるんですけど?
0192190
2006/04/12(水) 13:40:29少しは自分で考えて。宣言がいくつか足りないのと、初期化やデータの
入出力をどうするのかは>>187に出ていないのでその部分は自分で書く
必要がある。
0193188
2006/04/12(水) 15:19:52var
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
0194188
2006/04/12(水) 15:20:31var
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
0195188
2006/04/12(水) 15:29:40は,
z[i]:=(f[i-1]-f[i-2])div(f[i]-f[i-1]);
の間違いです。
しかしまだ何かがおかしいらしい。
0196デフォルトの名無しさん
2006/04/12(水) 15:41:52コメントの記念すべき一文字目は何にしようか迷ってます。
0197774RR
2006/04/12(水) 17:10:04そりゃそーなんだけど、キャリーはやっぱりフラグでしょw
>195
fibonacci関数は動くはずだから、それだけテストしてみるといい。
fibonacci(1)
fibonacci(2)
fibonacci(3)
と増やしていって、
fibonacci(100)の計算にどれだけ時間かがかかるか、ためしてごらん。
どうしてこんなに遅いのか、どうしたら効率良くできるのか。
そうすると for i:=0 to n do f[i]:=fibonacci(i); てのが
原理的には正しくても酷く悪いコーディングだと気付く。
それが勉強だよ。
0198デフォルトの名無しさん
2006/04/12(水) 17:17:40for文の中で"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"ってのは商を求める演算子であって
実数型における"/"とは違うってことは分かってる?
0199188
2006/04/13(木) 14:58:020200デフォルトの名無しさん
2006/04/13(木) 15:50:100201デフォルトの名無しさん
2006/04/13(木) 19:22:52「2以上の時は●」のところはどうやって表記すればいいのですか?
case n of
0 : ■;
1 : ▲;
>=2 : ●;
とするとコンパイルエラーになってしまうのです(泣)
0202デフォルトの名無しさん
2006/04/13(木) 21:55:02caseは順序型だから、下限、上限が決まっている。で、2からその上限まで
を指定すればいいってことになる。具体的には
case n of
0 : ■;
1 : ▲;
2..100 : ●;
とすればいい(上限値が100の場合)。
0203デフォルトの名無しさん
2006/04/13(木) 23:26:190 : ■;
1 : ▲;
else
if n >= 2 then
●;
end;
0205デフォルトの名無しさん
2006/04/13(木) 23:42:300206デフォルトの名無しさん
2006/04/13(木) 23:53:14論理型変数を一つ用意して最初にfalseにしておく。
そのあとでcase文中の任意の条件にマッチした場合はtrueに変更してやる。
そうすれば該当しなかった場合はfalseのままだからfalseの場合なにかするっていうように
すれば一応できるんじゃない?
0207202
2006/04/13(木) 23:58:22だからcase節の変数部(上記nの所)は順序型しか指定できないわけ
だから、上限、下限が決まっていて、個数も自ずと出てくるわけ。
だから「どの部分にも該当しなかった」という部分を抜き出すことも可能
でしょ。それをどこかで指定してやればいいわけ。例えば以下のような
感じで。
case n of
5 : ■;
8 : ▲;
15 : ●;
0..4, 6, 7, 9..14, 16..100 : ×; (* どの条件にも該当しない場合 *)
これは、nが0から100までの値を取る順序型の場合。範囲がそれ以外
の場合は適宜指定してやればいい。
0208デフォルトの名無しさん
2006/04/14(金) 06:54:530209201
2006/04/14(金) 16:04:04上限がないから困っているわけでw
if文で書くしかないですかね?
0210デフォルトの名無しさん
2006/04/14(金) 17:00:59begin
●;
end else begin
case n of
0 : ■;
1 : ▲;
end;
じゃダメなのか?
0211188
2006/04/14(金) 17:06:52program 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.
0212デフォルトの名無しさん
2006/04/14(金) 17:42:07整数がオーバーフローしてるんじゃないかと思われ。
0213188
2006/04/14(金) 17:50:53詳しくお願いします!!
0214デフォルトの名無しさん
2006/04/14(金) 18:02:22Pascalには上限のない順序型などない
0215デフォルトの名無しさん
2006/04/14(金) 20:15:52何を詳しくお願いしてるんだ?
オーバーフローじゃないか?って言ってるじゃん。
0216212
2006/04/15(土) 00:33:08integer が符号付き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の例だけど)
0217212
2006/04/15(土) 00:36:57> = (11111111111111111111111111111111
> - 10110001000110010010010011100001) + 1
> = 01001110111001101101101100011110 + 1
> 十進数に直すと
0218デフォルトの名無しさん
2006/04/17(月) 02:50:020219188
2006/04/17(月) 14:42:17じゃあどうすればよいのですか?
0220774RR
2006/04/17(月) 18:17:430221デフォルトの名無しさん
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つ必要
0222デフォルトの名無しさん
2006/04/17(月) 21:00:09var 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;
0223デフォルトの名無しさん
2006/04/17(月) 21:01:15function 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))) ;
0224デフォルトの名無しさん
2006/04/18(火) 03:29:41まだ完成されていないみたいですが何が足りないのでしょうか?
4月からPascal始めたものですが・・・
0225デフォルトの名無しさん
2006/04/18(火) 03:32:260226デフォルトの名無しさん
2006/04/20(木) 13:21:36ただし、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.
どこがまずいですかね?
0227デフォルトの名無しさん
2006/04/20(木) 13:23:31課題 2-1 では、 登録された電話番号データを全て出力した。 これを、 検索したい人の名前をキーボードから入力し、 対応する電話番号を答えるように変更せよ。
ただし、該当するデータが未登録の場合は検索に失敗したことを 通知するプログラムとすること。 (例えば「該当者なし」と表示するなど)
さらに、 名前として 'end' を入力するまで何回でも検索できるように拡張すると、 なお良い。
こいつお願いします。
0228デフォルトの名無しさん
2006/04/20(木) 18:00:09次に 正の偶数を同じく小さい順に入力し、ファイル 'evensequence' に 書込むプログラムを作れ。
更に、この二つのファイルの内容を合わせて、正の整数が小さい順に書込まれた ファイル 'sequence' を作り、その内容を全て表示するプログラム を作れ。
ただし、データは3、7、13など、小さい値から入力すればよい。また、データ入力の 終了は 値 0 を与えることで表現し、入力可能なデータ数の上限は特に定めないこと。
0229デフォルトの名無しさん
2006/04/22(土) 03:56:29Assign(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);
0230デフォルトの名無しさん
2006/04/22(土) 04:16:37procedure 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 }
0231デフォルトの名無しさん
2006/04/22(土) 05:04:10program 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.
0232デフォルトの名無しさん
2006/04/22(土) 17:02:180233デフォルトの名無しさん
2006/04/23(日) 18:09:59夜遅くにご苦労様です。
そこにif入れればよかったのか。
0234デフォルトの名無しさん
2006/04/24(月) 05:32:37f( 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 以下になったとき、
収束したとして計算を終了するプログラムを作り、プログラムとその 計算結果を提出せよ
0235デフォルトの名無しさん
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.
0236デフォルトの名無しさん
2006/04/24(月) 06:10:31program 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.
0237デフォルトの名無しさん
2006/04/24(月) 23:06:40言われたとおりにしましたが前と同じ結果でした。
コンパイル結果
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
この後何も動きませんでした。
どこがおかしいのでしょうか?
わかる人教えてくれませんか?
0238デフォルトの名無しさん
2006/04/24(月) 23:28:520239デフォルトの名無しさん
2006/04/25(火) 04:27:480240デフォルトの名無しさん
2006/04/25(火) 06:56:08>但し、 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.
0241デフォルトの名無しさん
2006/04/25(火) 15:18:460242デフォルトの名無しさん
2006/04/26(水) 23:23:49type intri = ^real;
var ip : intri;
a : real;
begin
new( ip );
write( `値:` );
readln( a );
ip^ := a;
writeln( ip );
dispose( ip )
end.
簡単なやつなんですが実行しても入力した値そのままが出力せず、5桁の数字が出力してしまうという状況です。
ご指摘お願いします。
0243デフォルトの名無しさん
2006/04/26(水) 23:53:19type intri = ^real;
var ip : intri;
a : real;
begin
new( ip );
write( '値: ' );
readln( a );
ip^ := a;
writeln( ip^ );
dispose( ip );
readln;
end.
0244デフォルトの名無しさん
2006/04/29(土) 21:58:58ポインタをまだ理解しきれてなかったみたいです。
ありがとうございました。
0245デフォルトの名無しさん
2006/05/04(木) 16:37:24x:=6*(1+3div2)mod5
とあったら、6×(1+1)÷5=2...2より、答えは2でいいんでしょうか?
また、m:=((x>z)and(y<z))
とあって、これはfalse and falseとなるんですが、
このあとは具体的にどうすればいいんでしょう?
ちなみにmは整数です。
助けていただければ幸いです…。
0246デフォルトの名無しさん
2006/05/04(木) 16:47:422、pascal は型に厳しいから 論理型を整数型に代入できないと思うのだが?
0247デフォルトの名無しさん
2006/05/04(木) 16:57:42最初は合ってましたか…よかった。
次なんですが(すいません書くならば正しくはfalse and trueでした)
mは整数、x,y,zは変数で、
具体的には m:=((2>10) and (5<10))
なんですが、これは…どうすればいいんでしょうか…。。。
0248デフォルトの名無しさん
2006/05/04(木) 17:05:19mがbooleanでx,y,zが整数でした。本当にすいません…
そうしたら結局mはfalseということでよいのでしょうか?
0249デフォルトの名無しさん
2006/05/04(木) 18:25:240250デフォルトの名無しさん
2006/05/04(木) 21:24:020251デフォルトの名無しさん
2006/05/11(木) 19:39:47たとえば、2 x - 5 y を1文字ずつ入力(改行で区切る)し、ピリオド '.'が入力 されたならば、次の式、 - 9 y + 2 z を同じように入力する。プログラムはそれら の和、2 x - 14 y + 2 z を出力する。
0252モグラ介
2006/05/11(木) 19:49:23ありえないか。
0253デフォルトの名無しさん
2006/05/11(木) 20:03:30総当りでやればいいんじゃないのか?
0254デフォルトの名無しさん
2006/05/11(木) 20:07:22何百年とか掛かるかもしれないけど。
0255デフォルトの名無しさん
2006/05/11(木) 21:00:590256デフォルトの名無しさん
2006/05/12(金) 00:39:030257デフォルトの名無しさん
2006/05/12(金) 21:57:420258デフォルトの名無しさん
2006/05/13(土) 00:35:23と、
課題4 - 1を参考にして、2個の1次方程式が入力されたとき、その和を出力するプログラムを作成しなさい。ただし、変数名はアルファベット1文字とし、その係数値は整数1文字とせよ。
たとえば、2 x - 5 y を1文字ずつ入力(改行で区切る)し、ピリオド '.'が入力されたならば、次の式、 - 9 y + 2 z を同じように入力する。プログラムはそれらの和、2 x - 14 y + 2 z を出力する。
2つの問題お願いします。
0259デフォルトの名無しさん
2006/05/13(土) 09:29:22なんか良く判らんけど 適当に
{構造体の定義}
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;
0260デフォルトの名無しさん
2006/05/13(土) 09:31:29var 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;
0261デフォルトの名無しさん
2006/05/13(土) 09:33:13で、呼び出し部
var s:string;
begin
root:=nil;
readln(s);
func(s);
end;
素直に、ヒープか配列使った方がいいかもね
0262デフォルトの名無しさん
2006/05/13(土) 19:27:110263デフォルトの名無しさん
2006/05/13(土) 22:59:34本物ならここに書き込まず裏で減点しているわ!
0264デフォルトの名無しさん
2006/05/13(土) 23:22:260265デフォルトの名無しさん
2006/05/14(日) 01:01:30もう訳が分かりません…
0266ミ,,゚Д゚ミノ ◆A6VzDeLphI
2006/05/14(日) 01:24:541 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
と続けていくとチェックされていない所に
〇がつき、素数列が求まるという手法です。
0267ミ,,゚Д゚ミノ ◆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にして、
という処理をする方法よ。
0268265
2006/05/14(日) 13:48:56プログラムで読んだ時、なにがtrueやfalseなのかがよく分からなかったんですが、
やっとなんとかわかりました。ありがとうございました。
0269269
2006/05/20(土) 16:27:59を
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 }
0270269
2006/05/20(土) 16:28:56begin
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.
0271269
2006/05/20(土) 16:35:39を
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 }
0272269
2006/05/20(土) 16:36:48new( root );
new( p );
root := nil;
p := root;
repeat
write( ' 数: ');
readln( a );
data( p , a);
until a = 0;
printl( p );
dispose( p );
dispose( root )
end.
としたのですがどちらも出力をどうすればいいか分かりません。出力の他にも変なところがあれば指摘してくれると嬉しいです。
0273デフォルトの名無しさん
2006/05/21(日) 18:28:02●
/\
● ●
/| |\
●
○ ○ ●
火曜提出でしょ?
もう少し悩んでみてもいいと思われ。
あと線形リストや二分木の先頭だけdisposeすると、
2番目以降は解放じゃなくて参照不可になるんじゃなかったっけ?
0274273
2006/05/21(日) 18:28:570275デフォルトの名無しさん
2006/05/23(火) 18:55:46なお、入力の終了は '.' (ピリオド) で示すものとし、 同じ英単語が入力される場合は辞書に登録してはいけない。
a. 英文はアルファベット小文字のみの単語、スペース、ピリオドだけで 作られている場合を、まず考えよ。各単語の文字数は20文字以内とせよ。
b. 次に、大文字が含まれる場合には、その文字を小文字に変換するよう に拡張せよ。
c. 最後に、数字、疑問符?、感嘆符!、クオート’、ダブルクオート"、 ハイフン-、コロン:、セミコロン;などの特殊文字が含まれている文 などを処理できれば完全である。
0276デフォルトの名無しさん
2006/05/23(火) 18:56:56ポーランド記法で入力した四則演算式を2分木で表現し、 演算式の係数値を入力したときに、その計算結果を出力する プログラムを作れ。但し、演算式はアルファベット一文字の 変数と四則演算子のみで表現されている。
a.演算式が定数は含まない場合を考えよ。
b.整数の定数を含む場合に拡張せよ。
0277デフォルトの名無しさん
2006/05/24(水) 02:38:310278デフォルトの名無しさん
2006/05/24(水) 22:20:26そんな突っ込みより
答えキボンヌ。
0279デフォルトの名無しさん
2006/05/25(木) 20:51:540280デフォルトの名無しさん
2006/05/25(木) 22:08:22去年につづきまたあそこか
馬鹿しかいないのか?
0281デフォルトの名無しさん
2006/05/25(木) 22:36:280282デフォルトの名無しさん
2006/05/25(木) 22:46:23言えてる…。
0283デフォルトの名無しさん
2006/05/26(金) 02:25:45ヒント
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単語入力のみ対応
0284デフォルトの名無しさん
2006/05/26(金) 03:29:15少しは考えろよ!!
言っておくが、これくらい普通に出来ないと後々の課題なんて出来ないぞ!
その時はまた写すのか?
お前それでいいのか?
0285デフォルトの名無しさん
2006/05/26(金) 03:39:15、--‐冖'⌒ ̄ ̄`ー-、
/⌒` 三ミヽー-ヘ,_
__,{ ;;,, ミミ i ´Z,
ゝ ''〃//,,, ,,..`ミミ、_ノリ}j; f彡
_) 〃///, ,;彡'rffッ、ィ彡'ノ从iノ彡
>';;,, ノ丿川j !川|; :.`7ラ公 '>了
_く彡川f゙ノ'ノノ ノ_ノノノイシノ| }.: '〈八ミ、、;.)
ヽ.:.:.:.:.:.;=、彡/‐-ニ''_ー<、{_,ノ -一ヾ`~;.;.;)
く .:.:.:.:.:!ハ.Yイ ぇ'无テ,`ヽ}}}ィt于 `|ィ"~
):.:.:.:.:|.Y }: :! `二´/' ; |丶ニ ノノ
) :.: ト、リ: :!ヾ:、 丶 ; | ゙ イ:} 逆に考えるんだ
{ .:.: l {: : } ` ,.__(__,} /ノ
ヽ ! `'゙! ,.,,.`三'゙、,_ /´ 「電通大の課題が 2ch ねらーのヒマ潰しになっている」と
,/´{ ミ l /゙,:-…-〜、 ) |
,r{ \ ミ \ `' '≡≡' " ノ 考えるんだ
__ノ ヽ \ ヽ\ 彡 ,イ_
\ \ ヽ 丶. ノ!|ヽ`ヽ、
\ \ヽ `¨¨¨¨´/ |l ト、 `'ー-、__
\ `'ー-、 // /:.:.} `'ー、_
`、\ /⌒ヽ /!:.:.|
`、 \ /ヽLf___ハ/ {
′ / ! ヽ
0286デフォルトの名無しさん
2006/05/26(金) 08:48:45b a g i n
0287デフォルトの名無しさん
2006/05/26(金) 08:50:54ほとんどヒントになってないし。
リスト構造も木構造も実装されてないし。
読み込み部分にしたって、
空白区切りをまったく無視してくれちゃってるし。
まったく、なにやってるんだか。
0288デフォルトの名無しさん
2006/05/26(金) 20:00:58丸写しするお馬鹿さんには関係ないこと。成績表を見て泣くだけ。
0289デフォルトの名無しさん
2006/05/27(土) 10:12:380290デフォルトの名無しさん
2006/05/28(日) 21:18:580291デフォルトの名無しさん
2006/06/02(金) 02:07:040292デフォルトの名無しさん
2006/06/04(日) 09:06:23Javaなどの新しい言語がある中で、電通大が未だにPascalを使ってプログラミングの講義をしているのは一種の男気の現れですか?
0293デフォルトの名無しさん
2006/06/04(日) 09:31:210294デフォルトの名無しさん
2006/06/04(日) 17:23:42Pascal習う理由として、
�@複数の言語を学んだほうが体系的に(で言葉あってるのか?)文法を理解できる。
�APascalは教育用言語としてはふさわしい
とか言ってた気がする。
ただ、俺は大学入って初めてプログラミングに触れるようになったため、
教授の考えがきちんと伝わっていないかも知れない。
要は公式見解ではないということ
0295デフォルトの名無しさん
2006/06/04(日) 17:24:00男気の正反対ですね。
0296デフォルトの名無しさん
2006/06/04(日) 17:25:52今プログラミング教育用として主流になってる言語って何ですかね?
0297デフォルトの名無しさん
2006/06/04(日) 19:11:570298デフォルトの名無しさん
2006/06/06(火) 08:27:39Javaはまだいいとして、C/C++って教育用途には向いてるんでしょうかね?
0299デフォルトの名無しさん
2006/06/06(火) 10:22:47Javaが向いてる?ご冗談を
JavaよりC/C++の方が向いてるに決まってるじゃないか
0300デフォルトの名無しさん
2006/06/06(火) 18:17:03とかのたまうメルマガ鵜呑みにして強引にC++から入った俺が来ましたよ。
0301デフォルトの名無しさん
2006/06/08(木) 08:24:550302デフォルトの名無しさん
2006/06/10(土) 23:49:37教育用としても
オブジェクト指向のC++の方がいいに決まってるし。
0303デフォルトの名無しさん
2006/06/11(日) 05:55:38PerlほどじゃないけどC++のオブジェクト指向もひどいぞ
「オブジェクト指向の教育」という観点からは薦められない
0304774RR
2006/06/12(月) 19:47:050305デフォルトの名無しさん
2006/06/12(月) 20:57:38まじで頭おかしいだろあそこ
0306デフォルトの名無しさん
2006/06/13(火) 07:31:400307デフォルトの名無しさん
2006/06/13(火) 17:53:090308デフォルトの名無しさん
2006/06/15(木) 12:12:15これはすべて名前(識別子)であって文法を簡単にするものであると。
原始プログラム中のその名前をみただけではどの名前であるか
判別できない。これの解決策はなにですか?
0309デフォルトの名無しさん
2006/06/15(木) 13:35:24例えば次のようなソースがあるとします。
if (0 < hoge) then ...
このhogeが変数なのか関数なのかはここから判別する事はできないと思います。
コンパイラはどうやっているんでしょうか?
こんな感じか?
0310デフォルトの名無しさん
2006/06/15(木) 18:01:220311デフォルトの名無しさん
2006/06/16(金) 00:50:410312デフォルトの名無しさん
2006/06/26(月) 15:11:34そのときモンテカルロ法を試行する回数を、プログラム実行時に選択できるようにせよ。
0313デフォルトの名無しさん
2006/06/26(月) 18:50:020314デフォルトの名無しさん
2006/06/26(月) 19:28:36なぜ 1/3 なんだ?
0315デフォルトの名無しさん
2006/06/27(火) 14:23:43問1
任意の人数に対してBMI(肥満度を判定する指標)を計算し、その平均値を出力させる。ここで,BMIとは
体重/身長/身長
で定義されるため,体重および身長を人数分だけ標準入力せよ。ここで,人数の最大は10名としてよい。なお,関数あるいは手続きを用いること。
問2
10名分のクラスの学生名前(アルファベット)を配列に保存せよ。また、最後にそれを標準出力せよ。
また、ファイル出力の場合も考えよ。
*stringを使いなさい。
0316デフォルトの名無しさん
2006/06/27(火) 14:25:35問1
任意の人数に対してBMI(肥満度を判定する指標)を計算し、その平均値を出力させる。ここで,BMIとは
体重/身長/身長
で定義されるため,体重および身長を人数分だけ標準入力せよ。ここで,人数の最大は10名としてよい。なお,関数あるいは手続きを用いること。
問2
10名分のクラスの学生名前(アルファベット)を配列に保存せよ。また、最後にそれを標準出力せよ。
また、ファイル出力の場合も考えよ。
*stringを使いなさい。
0317デフォルトの名無しさん
2006/06/27(火) 23:08:410318デフォルトの名無しさん
2006/07/01(土) 08:42:130319デフォルトの名無しさん
2006/07/01(土) 17:20:31リストによっては。
単純な線形ならそんなに難しくないけど、双方向になると少し難しくなって、
ツリー構造とかになると結構難しくなって。バランス木くらいになると相当
難しくなる。
0320デフォルトの名無しさん
2006/07/02(日) 01:05:230322デフォルトの名無しさん
2006/07/03(月) 02:05:510323デフォルトの名無しさん
2006/07/04(火) 01:23:08乱数を生成して 正方形 と 円(四分円)の面積を比較することにより,
円周率 π の近似値を求める方法がある。
以下は,この方法に関する問いである。
(1) 乱数によって定まる点の分布の状況を PaintBox 上に図示せよ。
(2) 円周率 π の近似値を計算せよ。
という問題が出されました
取っ掛かりからわからないという初心者ぶりです
ご教授願えませんでしょうか
0324デフォルトの名無しさん
2006/07/04(火) 01:38:04> 円周率 π の近似値を求める方法がある。
この方法については理解してる?
0325デフォルトの名無しさん
2006/07/04(火) 01:42:41まずアルゴリズムをはっきりさせること。
0326デフォルトの名無しさん
2006/07/04(火) 01:49:15円の面積は Pi*r*r
正方形の面積 r*r
円の公式 x*x + y*y <= r*4
を使うんじゃないの?
0327デフォルトの名無しさん
2006/07/04(火) 01:52:04正方形内にランダムに点を打ち、打った点の総数と、
そのうち四分円の中に入った点の数をそれぞれカウントする。
あとはその比率から円周率を近似するくらいはわかるだろう。
0328デフォルトの名無しさん
2006/07/04(火) 17:21:070329デフォルトの名無しさん
2006/07/04(火) 23:09:09でした。
0330323
2006/07/05(水) 00:34:12自宅にDelphiがないのですが(学校にある)、
取り敢えずモンテカルロ法について調べてみました。
結果イメージとしては理解できたのですが
点を打つ方法、点を数える方法がともにわかりませんでした。
(乱数関係から検索したのですが)
何もしてないと言われても仕方ない有様ですが、
どうかその二つの作業の方法だけでも教えていただけませんでしょうか。
0331デフォルトの名無しさん
2006/07/05(水) 00:37:35ttp://www.wikihouse.com/DelphiVIP/index.php?%A5%B3%A5%E9%A5%E0%2F%A5%D1%A5%A4%A5%D1%A5%A4%A5%E2%A5%F3%A5%C6%A5%AB%A5%EB%A5%ED%A4%BF%A4%F3
0332デフォルトの名無しさん
2006/07/05(水) 01:37:50>>331にほとんど答えが載っているが
せっかく文章練ったので。
http://sylphys.ddo.jp/upld2nd/pc2/src/1152029914998.png
乱数 x, y を別々に発生させ、>>329の式で
4半円(図の白い部分)の中にあるか判定する。
4半円の中に入った点の数・外になった点の数をそれぞれ
変数にもって、判定結果に従ってカウントアップ。
ある程度の数の点を計算したら、点の数の比を計算すれば、面積比が出てくる。
後は、既知の円の面積の公式 4πr^2 からπを求める。
PaintBoxは自分でやってください。
0333デフォルトの名無しさん
2006/07/05(水) 07:30:250334デフォルトの名無しさん
2006/07/05(水) 21:57:17これがクセモノ
トートロジー
0335デフォルトの名無しさん
2006/07/05(水) 22:44:290336デフォルトの名無しさん
2006/07/05(水) 23:01:56というか、「Piを求めるのにPiを使った円の面積の公式を使う」
というのは問題じゃないのかと>>334は言いたいんだろう。
0337デフォルトの名無しさん
2006/07/05(水) 23:05:040338332
2006/07/05(水) 23:20:13モロゆとり世代ですんません
0339デフォルトの名無しさん
2006/07/05(水) 23:36:310340デフォルトの名無しさん
2006/07/06(木) 18:01:24>>332 のは 1/4 だから
点の数の比を計算するのに
4πr^2 になるってだけの話だと思う
0341323
2006/07/06(木) 21:05:51皆さんお世話になりました。
0342デフォルトの名無しさん
2006/07/06(木) 22:07:28・学籍番号と点をデータとして入力し、これを得点の高い順に並べ替え、
順位をつけて表示する。
高い順に並べ替えるまではできるのですが、それを点じゃなくて学籍番号
で表示することができません。
0343デフォルトの名無しさん
2006/07/06(木) 22:14:41Delphi的に正しいのは record 使う。
0344デフォルトの名無しさん
2006/07/06(木) 22:15:120345デフォルトの名無しさん
2006/07/06(木) 22:15:530346デフォルトの名無しさん
2006/07/06(木) 22:36:500347デフォルトの名無しさん
2006/07/06(木) 22:37:410348デフォルトの名無しさん
2006/07/07(金) 17:20:06SysUtils;
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.
0349デフォルトの名無しさん
2006/07/07(金) 19:50:110350デフォルトの名無しさん
2006/07/07(金) 20:24:19最後の
for i:=1 to 5 do writeln(stud[i].ten);
に、点数を出力する文を加えればいい。
0351デフォルトの名無しさん
2006/07/07(金) 22:12:36ありがとうございました。
0352デフォルトの名無しさん
2006/07/08(土) 01:52:57誰か教えてください。
0353デフォルトの名無しさん
2006/07/08(土) 01:56:060354デフォルトの名無しさん
2006/07/10(月) 01:44:09ぜひ教えてください
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.
0355デフォルトの名無しさん
2006/07/10(月) 02:30:580356デフォルトの名無しさん
2006/07/10(月) 02:57:04話はそれからだ
0357デフォルトの名無しさん
2006/07/10(月) 06:41:46>>348 を改良すれば作れるよ。
0358デフォルトの名無しさん
2006/07/14(金) 01:40:21新幹線に乗るために阪急電鉄・石橋駅から梅田経由で地下鉄御堂筋線・新大
阪駅まで行きたいとする.新大阪駅に到着したい時刻を入力すると,石橋駅
で何時何分発の列車に乗ればよいかを教えてくれるプログラムを以下の3段
階に分けて作成せよ.ただし,以下の2つの条件を満たすこと.
条件:
(1) 手続きもしくは関数を用いること.
(プログラムを分かりやすくするため)
(2) 少なくとも以下の情報を出力すること.
(ユーザが使いやすいように,出力を工夫すること)
・阪急電鉄・石橋駅の発車時刻
・阪急電鉄・梅田駅への到着時刻
・地下鉄御堂筋線・梅田駅の発車時刻
・地下鉄御堂筋線・新大阪駅への到着時刻
.
0359デフォルトの名無しさん
2006/07/14(金) 01:41:18(1) 平日ダイヤのみに対応する.阪急は急行しか利用しない(普通列車な
ど,急行以外の列車は無視する).
(2) 段階 (1) に加えて,阪急の全列車(特急,特急日生エクスプレス,
通勤特急,急行,準急,庄内・曽根通過待ちなしの普通,庄内・曽根
通過待ちありの普通)を利用可能にする.ただし,普通列車が後発の
特急などに追い越される可能性は無視する(追い越される普通列車を
出力してよい).さらに,土曜・休日ダイヤに対応する.
(3) 段階 (2) に加えて,後発の特急などに追い越される普通列車でなく,
後発の特急を出力するようにする
0360デフォルトの名無しさん
2006/07/14(金) 01:52:31配列に一つ一つ打ち込むにはあまりに多すぎるんで、どうにかファイルを呼び出したいんですが、
教科書のようなものを読んでみていじってみても上手くいきません。
どなたか少しわかりやすく説明していただけたら嬉しいんですが…
0361デフォルトの名無しさん
2006/07/14(金) 01:53:446 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
0362デフォルトの名無しさん
2006/07/14(金) 03:55:01リストだけに超絶に難しい。
>>360
>>228-232 あたりに載ってる。
実用的な問題ですね。
0363デフォルトの名無しさん
2006/07/14(金) 12:47:240364デフォルトの名無しさん
2006/07/14(金) 23:49:29procedureとfunctionのどちらを使えば良いでしょうか?
また、それらに処理に必要なデータを引数として渡すようにする場合、
どういった形式が望ましいのでしょうか?
いろいろ試してみましたが、うまくいかないので…
応えて頂けると幸いです。
0365デフォルトの名無しさん
2006/07/15(土) 00:53:39それからDelphiスタイルに変えればいいかと。
0366デフォルトの名無しさん
2006/07/15(土) 08:25:120367デフォルトの名無しさん
2006/07/15(土) 15:01:00procedure(手続き)とfunction(関数)は値を返すか返さないか
の違いだけしかないから、値を返したいんだったらfunctionにして
値が要らないんだったらprocedureにすればいいのでは。
処理に必要なデータは渡さなきゃならないけど、どうやって渡す
かは実装する人の自由だから、好きにすればいいと思う。
0368デフォルトの名無しさん
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 以上のデータに対する「棒」は青色で表示するようにせよ。
という課題なのですが
0369デフォルトの名無しさん
2006/07/15(土) 22:07:29a : 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
//棒グラフ作成?
0370368 369
2006/07/15(土) 22:08:25procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Clear;
Edit1.Clear; Edit1.SetFocus;
end;
end.
という状態です。
ここまでに誤りがあるのか、また、肝心の空欄部分はどうすればいいか
教えていただけたら幸いです。
0371デフォルトの名無しさん
2006/07/15(土) 22:17:310372デフォルトの名無しさん
2006/07/15(土) 22:50:27nは初期化されている? PaintBox1.Canvasはクリアされている?
棒グラフを書く前に座標軸を書かなきゃ。
棒グラフはまず「グラフ用紙に自分出てで書いて」みれば、どう
書けばいいか分かると思う。その書く手順そのままCanvasに
書けばいいだけ。
手で書く時に位置情報(ピクセル単位)を意識しながら書けば
簡単に出来ると思う。
0373364
2006/07/16(日) 10:18:47なんとかがんばってみます。
0374デフォルトの名無しさん
2006/07/17(月) 01:53:460375デフォルトの名無しさん
2006/07/17(月) 02:53:350376デフォルトの名無しさん
2006/07/17(月) 10:13:21Pascalがいかに面倒かってよく分かる
0377デフォルトの名無しさん
2006/07/17(月) 11:21:48pascalのプログラムを家で作成したいのですがどこか置いてるサイトとかありますか?
0378デフォルトの名無しさん
2006/07/17(月) 11:32:060379デフォルトの名無しさん
2006/07/17(月) 11:36:1316bit だったような気がするけど
0380デフォルトの名無しさん
2006/07/17(月) 11:39:35Delphi / kylix あたりでいいんじゃない?
0382デフォルトの名無しさん
2006/07/17(月) 11:55:101、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
0383377
2006/07/17(月) 12:22:37すごく参考になりました。どうもありがとう。
0384デフォルトの名無しさん
2006/07/18(火) 08:53:43なつかしー
0385デフォルトの名無しさん
2006/07/18(火) 20:58:220386デフォルトの名無しさん
2006/07/18(火) 22:08:05誰か助けてください。。。○投げですいませんOTL
(i) 自然数(整数)で表記される「キー」、および、8文字までの文字列で表現される「データ」を、2分木の構造で管理するプログラムであること。
*常に左右のバランスを保つAVL木であること。
(ii) プログラムの実行開始直後に、可能な操作のメニューが表示され、自在に選択でき、1つの操作が実行された後、そのメニューが再表示され、入力待ち状態になること。
(iii) 「キー」「データ」の値を入力することによりデータの登録ができること。
(iv) 二重登録を防止し、その際警告メッセージを出すこと。
(v) 「キー」の値の入力することにより、データの削除ができること。
(vi) 登録されていないデータを削除しようとすると、メニューに戻る前に警告メッセージを出すこと。
(vii) 「キー」の値を入力することにより、そのキーの値をもつデータを参照できること。
(viii) 2分木の構造(頂点間の接続関係)を表示できること。
(ix) 登録されている全データを、キーの小さい順に列挙できること。
(x) 2分木内の各頂点の(木の根からの)深さを表示できること。
---------------------------------------
*はできるとボーナス点
要解説書。手続きの処理内容、変数の説明など
解説書〆7/24
プログラムソース〆7/21
orz
0387デフォルトの名無しさん
2006/07/18(火) 22:11:39Pascalです。。。
0388デフォルトの名無しさん
2006/07/18(火) 22:15:410389デフォルトの名無しさん
2006/07/18(火) 22:21:030390デフォルトの名無しさん
2006/07/22(土) 13:26:54http://ime.st/zetubou.mine.nu/itoshiki/nozomu/zetubou26032.txt
0391デフォルトの名無しさん
2006/07/23(日) 07:33:130392デフォルトの名無しさん
2006/07/26(水) 12:25:21誰かご存知でしょうか?
0393デフォルトの名無しさん
2006/07/26(水) 20:23:220394デフォルトの名無しさん
2006/07/31(月) 05:26:560395774RR
2006/08/31(木) 20:25:00>394
それが信頼できるかはまた別物。リアルタイム処理を今のビジネス/ホビー用パソコンでやるのは
かなり無理があるよ。
DOSでTurbo Pascal使った方がいいくらい。
0396デフォルトの名無しさん
2006/08/31(木) 20:27:430397デフォルトの名無しさん
2006/09/13(水) 15:24:530398デフォルトの名無しさん
2006/09/16(土) 00:17:390399デフォルトの名無しさん
2006/10/06(金) 04:12:13誤った値を返したりすることってありますか?
また、そういうことを防ぐ、というかせめて
間違った値が出るということを予測できるといいなあと思うのですが
どういう文献を調べればよいのかも教えていただけると助かります!
0400デフォルトの名無しさん
2006/10/06(金) 15:33:010401デフォルトの名無しさん
2006/10/06(金) 15:49:030402デフォルトの名無しさん
2006/10/06(金) 17:51:51integerの範囲?
0403デフォルトの名無しさん
2006/10/06(金) 23:07:140404デフォルトの名無しさん
2006/10/08(日) 03:38:29varなら分かりますが。
0405デフォルトの名無しさん
2006/10/08(日) 12:49:140406デフォルトの名無しさん
2006/10/15(日) 21:14:10手元にパスカルないんですけど
パスカルにおける論理式が真の時の返り値って
1でしょうか、それともー1でしょうか?
0407デフォルトの名無しさん
2006/10/15(日) 21:47:390408デフォルトの名無しさん
2006/10/15(日) 21:51:180409デフォルトの名無しさん
2006/10/15(日) 22:26:48いやdelphiでもfpcでもord(true)は1だろ。
0410デフォルトの名無しさん
2006/10/15(日) 23:30:280411デフォルトの名無しさん
2006/10/15(日) 23:42:310412デフォルトの名無しさん
2006/10/15(日) 23:57:140413デフォルトの名無しさん
2006/10/16(月) 00:18:18もしくはfalseしかない。1か-1かで比較すると「型が違います」と
怒られる。
0414デフォルトの名無しさん
2006/10/16(月) 00:47:390415デフォルトの名無しさん
2006/10/16(月) 00:56:540416デフォルトの名無しさん
2006/10/16(月) 01:21:440417デフォルトの名無しさん
2006/10/16(月) 01:24:200418デフォルトの名無しさん
2006/10/16(月) 01:28:51ord使えよ
0419デフォルトの名無しさん
2006/10/16(月) 01:33:500420デフォルトの名無しさん
2006/10/16(月) 09:04:170以外としか定義されてないよ。だからどっちかは風任せ
0421774RR
2006/10/16(月) 18:02:05実装としては>420の言う通り取説嫁としかいいようがない。
fpcだと
boolean - false : 0 / true : 1
bytebool, wordbook, longbool - false : 0 / true : 0以外のなんでも
となっている。
0422デフォルトの名無しさん
2006/10/17(火) 00:16:060423デフォルトの名無しさん
2006/10/26(木) 17:14:30を満たす整数の組(u,v)を一つ出力するプログラムを作れ。ただし配列は用いない。
わからないのでお願いします!
0424423
2006/10/26(木) 17:42:23var 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の値が大きくなると正しく動きません。
添削してください。
0425デフォルトの名無しさん
2006/11/14(火) 02:20:00その2つの共通部分を別の線形リストに入れて出力するプログラム
を書きたいのですが、よくわかりません。
まず、線形リストに文字を入力して、それを出力するだけのプログラムを
書いたのですが、コンパイルはできるものの実行すると無限ループになります。
何がいけないのかご指摘いただけると助かります。
↓↓つづく↓↓
0426デフォルトの名無しさん
2006/11/14(火) 02:20:58type
pointer = ^celltype;
celltype = record
element : char;
next : pointer;
end;
var
listA,listB,listC : pointer;
x : char;
0427デフォルトの名無しさん
2006/11/14(火) 02:22:42var
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 }
0428デフォルトの名無しさん
2006/11/14(火) 02:24:02readln(x);
while x<>'.' do begin
insert(listA,x);
readln(x)
end;
if listA^.element<>'.' then begin
print(listA)
end;
writeln();
dispose(listA)
end.
0429デフォルトの名無しさん
2006/11/14(火) 02:45:11>write(p^.element,' ');
>print(p^.next)
>end
pが変化してないようだが。while→ifじゃ無いか?
0430デフォルトの名無しさん
2006/11/14(火) 02:57:57ifにしたらうまくいきました!!
逆順に出力されるけど・・・
共通要素を探す手続きのほうもがんばって作ってみます。
ありがとうございました。
0431デフォルトの名無しさん
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 }
0432デフォルトの名無しさん
2006/11/14(火) 22:35:54if listA^.element<>'.' then begin
print(listA)
end;
とありますが、このif文て必要ないですよね?
それから、listA,Bについてnewしてないのですが、これって問題あります、よね?
なぜか値が格納されてるみたいなのですけど・・・
0433デフォルトの名無しさん
2006/11/15(水) 01:20:230434デフォルトの名無しさん
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)しかしてないのが気になる。
0435デフォルトの名無しさん
2006/11/21(火) 12:46:41大変遅ればせながらありがとうございます。
無限ループはどうすれば回避できるのでしょうか?
それから、なぜlistA,Bをnewしなくてもよいのでしょうか?
質問ばかりですいません
0436デフォルトの名無しさん
2006/11/22(水) 01:04:41ある文字がリストにあるかどうかを調べる関数を作れば
解りやすくなると思う。
0437デフォルトの名無しさん
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
0438デフォルトの名無しさん
2006/11/24(金) 22:45:050439デフォルトの名無しさん
2006/11/24(金) 23:25:390440デフォルトの名無しさん
2006/11/24(金) 23:33:39var
i: Integer;
sum: Real;
begin
sum := 0.0;
for i := 1 to 100 do sum := sum + f[i];
result := sum;
end;
こんなのはどうですか。
0441デフォルトの名無しさん
2006/11/24(金) 23:37:47sumみたいな変数を用意しないとだめなんでしょうか?
0442デフォルトの名無しさん
2006/11/25(土) 00:38:40function 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では関数呼び出しと解釈されるから、無理。
0443デフォルトの名無しさん
2006/12/03(日) 00:36:410444デフォルトの名無しさん
2006/12/03(日) 04:23:410446デフォルトの名無しさん
2006/12/05(火) 00:08:56そんなのもう見ました。
0447デフォルトの名無しさん
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
0448デフォルトの名無しさん
2006/12/11(月) 01:00:08自動的に消えるようにしたいんだけどどうしたらいいかな?
わかる人いますか?
0449デフォルトの名無しさん
2006/12/11(月) 16:18:070450デフォルトの名無しさん
2006/12/11(月) 23:30:37ようは数値入力専用Editを作りたいのかと。
OnKeyDownイベントで、いらないキー入力は Key := 0; で無効に出来る。
0451デフォルトの名無しさん
2006/12/13(水) 00:32:15具体的に言うと、
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を数値型に変換するのかなと
考えたんだけど、いまいちやり方わかりません
0452デフォルトの名無しさん
2006/12/13(水) 00:51:47var
S: strting;
begin
repeat
WriteLn('数字を入力してください');
ReadLn(S);
until TryStrToInt(S, Result);
end;
0453初心者
2006/12/16(土) 11:06:08助けてください。
入力されたn個の数を大きい順に並び替えるプログラムを作れ。
お願いします。
0454デフォルトの名無しさん
2006/12/16(土) 13:48:360455デフォルトの名無しさん
2006/12/17(日) 04:10:08function 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;
0456デフォルトの名無しさん
2006/12/19(火) 01:21:31時間の計算をしたいと思いますが、如何すればいいですか?
0457デフォルトの名無しさん
2006/12/19(火) 01:36:320458デフォルトの名無しさん
2006/12/19(火) 03:02:530459デフォルトの名無しさん
2006/12/20(水) 02:21:31回答ありがとうございます。それでは、ミリ秒に変換するには如何すればよいのでしょうか。
0460デフォルトの名無しさん
2006/12/20(水) 02:41:030461デフォルトの名無しさん
2006/12/20(水) 17:41:231 min = 60 sec
1 hour = 60 min
0462光速エスパー世代774RR
2006/12/26(火) 17:59:230464q
2007/01/21(日) 20:19:40「上から○(円)が落ちてきて、
ウィンドウの1番下に達したら
その円は止まり、新しい円が
また落ちてくるプログラムを作れ
(ただしfor文を使うこと)。」
という宿題が出たのですが、
よく分かりません。
どなたか分かる方、教えて下さいm(__)m
0465デフォルトの名無しさん
2007/01/21(日) 20:33:000466デフォルトの名無しさん
2007/01/22(月) 00:04:54Form1.Canvas, Ellipse, Timer, Form1.ClientHeight
0467デフォルトの名無しさん
2007/01/22(月) 00:20:440468デフォルトの名無しさん
2007/01/22(月) 00:21:290469デフォルトの名無しさん
2007/01/25(木) 19:06:01http://www.saiensu.co.jp/books-htm/ISBN4-7819-0757-1.htm
これを買おうかな、と今は思っているのですが。
0470デフォルトの名無しさん
2007/01/26(金) 03:47:120471光速エスパー世代774RR
2007/01/26(金) 12:38:49Pascalの教科書は何冊か使ったけれど、てもとにあるのは森口さん他の
「Pascalプログラミング講義」(共立出版)
だ。これ、ちょっと内容が薄いかな。
思い出してみればボーランドのTurbo Tutorが結構優れた教科書だった。
TP5.5はフリーになってるけど、Turbo Tutorってネットに流れてない?
定番アルゴリズムは奥村さんのアルゴリズム事典で勉強したね。
ttp://oku.edu.mie-u.ac.jp/~okumura/algo/algo_pas.html
あれだ、今日びは言語自体より、(一昔前なら)API、(出るちゃん以降は)
コンポーネントの使い方の方が大事だってゆー、つまらないといえばつまらない
世の中になったもんだよ。
0472469
2007/01/26(金) 15:20:07レスありがとうございますm(__)m
0473デフォルトの名無しさん
2007/01/27(土) 00:53:01興味を持ち続けられないと思う。
0474デフォルトの名無しさん
2007/01/27(土) 00:56:26Pascalもまだまだ現役で使われてるんですか?
0475デフォルトの名無しさん
2007/01/27(土) 01:01:170476デフォルトの名無しさん
2007/01/28(日) 09:25:110477光速エスパー世代774RR
2007/01/28(日) 15:15:58その辺は複雑で、ボーランドはBorland Pascal がサポートする言語を
Object Pascal と呼んでいた。Borland Pascalは消滅して、ご存知Delphiが現行なんだが、
これが実装している言語は今では「Delphi言語」と呼ばれているはず。
Delphi言語はプログラミング言語Pascalをオブジェクト指向を用いて
拡張したものだから、Object Pascalの一種であり、最も普及したものだね。
既にPascal言語の de facto standard といっていいと思う。
0478デフォルトの名無しさん
2007/01/31(水) 11:03:06学校課題でπの近似値を求めろ、言われました。マチンの公式使ってやってみようと思ったんですけど、数字を何乗かしたいとおもったっとき、使えるコマンドはあったでしょうか?
たとえば、2のN乗がしたいとき、read(n)で読み込んで、計算させたいということなんですけど。
教えてください。
0479光速エスパー世代774RR
2007/01/31(水) 12:33:49なくても自分で書けばおっけー。
0480デフォルトの名無しさん
2007/01/31(水) 12:54:08ちょっと想像がつかないので教えてください。
0481光速エスパー世代774RR
2007/01/31(水) 17:29:14a ^ 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.
0482デフォルトの名無しさん
2007/01/31(水) 18:38:460483デフォルトの名無しさん
2007/04/14(土) 09:10:230484デフォルトの名無しさん
2007/04/14(土) 18:35:39整数演算の結果がオペランドのビット巾で丸められちまう。
0485デフォルトの名無しさん
2007/04/26(木) 06:38:450486デフォルトの名無しさん
2007/06/18(月) 23:59:09大学入ってPascalプログラミングやってるんですが、
『選択ソートのプログラムを作成せよ。
ただし、データ数を最初に入力するように変更すること。
また、データ数は1個から最大10000個まで対応できるようにすること』
とあるのですが、サッパリです。
かなり初心者な質問で申し訳ないのですが、どなたか教えてください
0487デフォルトの名無しさん
2007/06/19(火) 00:09:14元のソースが無いと変更しようが無い。
0488デフォルトの名無しさん
2007/06/19(火) 00:44:47program 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.
です
0489光速エスパー世代774RR
2007/06/19(火) 13:02:24Program 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.
0490デフォルトの名無しさん
2007/06/19(火) 14:51:420491デフォルトの名無しさん
2007/06/19(火) 21:05:370492デフォルトの名無しさん
2007/06/19(火) 22:06:37Pascalには標準的な方法がありません。処理系とファイルシステム依存です。
UCSD-Pascal, Pascal/MT, MT+, Turbo/Borland Pascal, FreePascal では
assign手続きを実行しといて、resetなりrewriteなりします。
assign(ファイル変数, ファイル名);
reset(ファイル変数);
...
close(ファイル変数)
GPCだと上のBorland方言に加えて、ISO拡張Pascal標準のbind手続きが使えます。
0493デフォルトの名無しさん
2007/06/19(火) 23:26:500494486&488
2007/06/19(火) 23:34:10申し訳ないのですが、なぜデータ数を溜めておく変数が必要なのか教えていただけませんか
0495デフォルトの名無しさん
2007/06/20(水) 00:17:350496光速エスパー世代774RR
2007/06/20(水) 12:43:41俺は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!
0497デフォルトの名無しさん
2007/06/22(金) 19:52:22問題1
西暦を入力して、「1989年は平成2年です」というように年号や年を出力するプログラムを作りなさい。
ただし各年号の境目は両方の年号を出力するようにすること。(1988年は昭和64年でも、平成元年でもある)
問題2
下記を表示するプログラムを作れ
(1)
**********
*********
********
*******
******
*****
****
***
**
*
0498デフォルトの名無しさん
2007/06/22(金) 19:57:27*
**
***
****
*****
******
*******
********
*********
問題3
Nを入力して1からNまでの和を計算するプログラムを作れ。
また1からNまでの奇数の和を計算するプログラムも作れ。
問題1はif文,2・3はfor文を使用します。
一週間ほど足りない頭で粘ってみてもわかりません。
先生は非常勤だから質問する相手もいないので
皆さんの知恵をお貸ししていただけたら幸いですm(__)m
0499デフォルトの名無しさん
2007/06/22(金) 20:21:54こういう宿題出るもんなんだな(´・ω・`)
0500デフォルトの名無しさん
2007/06/22(金) 22:28:21var 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.
0501デフォルトの名無しさん
2007/06/23(土) 14:01:19Program NeverTested(input, output);
var n : integer;
begin
read(n); write((n * (n+1)) div 2)
{ don't trust me ;-p }
end.
0502497,498
2007/06/24(日) 16:49:06大きなヒントを下さってありがとうございます♪
教養科目で卒業が掛かっているのでとても嬉しいです
問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.
何がダメなのかすらわかりません><
助けてください・・・
0503デフォルトの名無しさん
2007/06/24(日) 18:28:480504デフォルトの名無しさん
2007/06/24(日) 18:33:100505デフォルトの名無しさん
2007/06/24(日) 18:38:360506デフォルトの名無しさん
2007/06/24(日) 19:41:59INC(年号)は俺も気づかなかった
0507デフォルトの名無しさん
2007/06/24(日) 22:34:491989年は平成元年かつ昭和64年ってのを、最初のif文で判定する必要があると思う。
0508デフォルトの名無しさん
2007/06/25(月) 23:25:06program 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.
0509デフォルトの名無しさん
2007/06/25(月) 23:30:140510デフォルトの名無しさん
2007/06/25(月) 23:32:370511デフォルトの名無しさん
2007/06/25(月) 23:34:46>const
>era: array[0..3] of Integer = (1989, 1926, 1912, 1868);
>eraname: array[0..3] of array[0..10] of char = ('平成', '昭和', '明治', '大正');
ここでもうBorland方言でつ。
0512デフォルトの名無しさん
2007/06/25(月) 23:37:460513デフォルトの名無しさん
2007/06/25(月) 23:39:220514デフォルトの名無しさん
2007/06/25(月) 23:41:54大域変数として名前を確保し、変数初期化手続きを書いて、
大域変数はそこでまとめて面倒を見ておく、てのが常道だった。
まーそこまでストリクトに標準Pascalの流儀を守る必要もないんだけどw
あと、文字列型を使っていいのかも不明なんだよな。
0515デフォルトの名無しさん
2007/06/25(月) 23:55:10なるほどK&Rのどちらかだったか、「これじゃ書けねえ・・・」と思った気持ちもわかる。
いや、嫌いじゃないんだよPascal。むしろ好き。
ありがとう僕の友達Pascalに会わせてくれて。
0516デフォルトの名無しさん
2007/06/26(火) 00:03:33それはラスカルだ
0517デフォルトの名無しさん
2007/06/26(火) 00:03:38定数配列や変数宣言での初期化は便利だし、可読性も高くなるんだよね。
言語仕様を出来るだけ小さくしようと言うのがヴィルト先生の狙いだったのと、
原始Pascalでは宣言の順序が決まっているから、
定数宣言の中にユーザ定義型の識別子を書けないというのがあったのかな。
0518デフォルトの名無しさん
2007/06/26(火) 00:04:48歳がバレるぞww
0519デフォルトの名無しさん
2007/06/26(火) 00:10:27ttp://www.nippon-animation.co.jp/pocapoca/
0520デフォルトの名無しさん
2007/06/26(火) 04:24:170521光速エスパー世代774RR
2007/06/26(火) 12:41:47era回りだけど、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がソートされていなくても動くし、元年の処理の特殊性が減る。課題とは動作が違うけどね。
0522デフォルトの名無しさん
2007/07/01(日) 08:58:27program 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.
こんな感じで
0523デフォルトの名無しさん
2007/07/01(日) 21:14:240524デフォルトの名無しさん
2007/07/04(水) 00:48:580525デフォルトの名無しさん
2007/07/04(水) 01:50:44情報系だとJavaを最初に教えると思うし。
0526デフォルトの名無しさん
2007/07/04(水) 13:46:130527デフォルトの名無しさん
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; ↓続きます
0528デフォルトの名無しさん
2007/07/10(火) 21:05:07begin
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
0529光速エスパー世代774RR
2007/07/11(水) 00:09:35Program 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以降の最小値になるわけだ。
これをバブルソートって呼ぶことは知っているよな。
0530光速エスパー世代774RR
2007/07/11(水) 00:11:20d[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で試してはある。
0531光速エスパー世代774RR
2007/07/11(水) 00:13:50begin
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]の評価にコストがかかる場合はローカルにコピーしとく。
0532光速エスパー世代774RR
2007/07/11(水) 12:44:57でだ、>>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
新しい数が現れたらずんずん配列に追加していく改造な。
0533デフォルトの名無しさん
2007/07/11(水) 22:10:21二分探索って何か分かってる?
0534デフォルトの名無しさん
2007/07/11(水) 22:46:190535光速エスパー世代774RR
2007/07/11(水) 22:56:040536光速エスパー世代774RR
2007/07/12(木) 03:35:400537光速エスパー世代774RR
2007/07/12(木) 22:43:260538デフォルトの名無しさん
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 は充足可能ではありません。
お願いします(_ _)
0539光速エスパー世代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;
0540光速エスパー世代774RR
2007/08/03(金) 21:07:01var 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;
0541光速エスパー世代774RR
2007/08/03(金) 21:08:28var 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.
0542光速エスパー世代774RR
2007/08/03(金) 21:13:10ここでは手抜きでやってるけど、空間なめにはハフマン距離を使うとかっこいい。
実際には全部舐める必要はなくて、最初にtrueが帰った時に終了すればいい。
中置気泡対応は任せた。
0543デフォルトの名無しさん
2007/08/04(土) 14:14:45電車をA駅からB駅で乗り換えて、C駅に行きたい。
C駅での到着希望時刻を入力したらA駅での時刻が出力されるプログラムを作れ。
なのですが、行数300越え+時刻表からデータ取り込みなんで質問しようにもどこがおかしいのかいまいち分かりません。
怪しいところを抜粋して書き込むのでアドバイスよろしくお願いします。
0544543
2007/08/04(土) 14:28:19procedure 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;
0545543
2007/08/04(土) 14:36:38分の単位に直してa[i]の配列に放り込む手続き(procedure Extfile)のつもりです。
時刻表のファイル自体はちゃんと開けています。
時刻表は
08 09 19 29 39 51
09 01 11 21 31 41 51
10 01 11 21 31 41 51
のようにすべて二桁になるようにつくっています。
0546543(2)
2007/08/04(土) 14:43:37var
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;
0547543(2)
2007/08/04(土) 14:59:52hは時刻(時)で14時より早いなら前から、遅いなら後ろから調べるようにしているつもりです。
0548538
2007/08/04(土) 15:54:03答えありがとうございます!
実際の入力は例えば「ab&cdl&」と入力すればいいってことですね(゚∀゚)
出力が(a∧b)∧(c∨d) となる感じですね。
あと、プログラムの解説も書いて提出しなければならないのですが・・・
もしよろしければ、解説をしていただけるとありがたいです。
0549光速エスパー世代774RR
2007/08/04(土) 17:24:23value : 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;
0550光速エスパー世代774RR
2007/08/04(土) 17:37:26var 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^変数個の整数を生成して、
得られた整数の各ビットを変数の値に代入している。
0551光速エスパー世代774RR
2007/08/04(土) 17:54:07はこれでもいいけど、
for i := 0 to pred(powerof(ord(maxvar) - ord('a') + 1)) do
の方が見栄えがいいな。
「変数空間を舐めるのはSetVarSetで、0から始まる2^変数個の整数を生成して、
得られた整数の各ビットを変数の値に代入している。」は
「変数空間を舐めるために、0から始まる2^変数個の整数を生成して、得られた
整数の各ビットをSetVarSetで各変数の値に代入している。」
0552光速エスパー世代774RR
2007/08/04(土) 18:15:10時刻表ってのは基本的に列車の配列なのな。
列車をどうデータ化するかが問題じゃな。
別線を通ったり、優等列車だったりして特定の駅に停まらないことを表現するのも
忘れてはいけないのな。
駅乙にある時刻までに到着する、
駅乙に到着する前に駅甲に停車する列車のうちで、
駅甲の発車時刻が一番遅いものを見つける。この操作を二回繰り返せばいい。
0553デフォルトの名無しさん
2007/08/06(月) 17:29:56実際に実行してみました。
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 は充足可能である」
こういうような形で表示しなければならないらしいんです。
こうするにはどうしたらいいのでしょうか?
何度もすみません^^;
0554光速エスパー世代774RR
2007/08/07(火) 00:35:55もひとつのは、式の評価がtrueな時だけ出力すればいいから簡単。
ただねえ、10変数まで許すんでしょ、変数の値の集合には1024個の
元があって、式(変数1)を真にするのは500個、変数1-10の論理和をとれば
1023個で真になる。そんなのを表示しろというのも、若干野蛮な問題だと
思うなww
0555デフォルトの名無しさん
2007/08/07(火) 15:51:13教えていただいたプログラムに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;
0556デフォルトの名無しさん
2007/08/07(火) 15:52:20var 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;
0557デフォルトの名無しさん
2007/08/07(火) 15:53:13var 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.
0558デフォルトの名無しさん
2007/08/07(火) 15:54:0160ー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行目を換えればいいのかなと思ったのですがどうでしょうか?
0559デフォルトの名無しさん
2007/08/23(木) 16:57:390560光速エスパー世代774RR
2007/08/24(金) 01:34:38約分ってのは分母子を最大公約数で割ればいいわけだから、
よーするに最大公約数を求める問題にいきつく。
これは二千年以上前から判っている方法で溶ける。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.
エウクレイデス先生はとても偉かったし、算法も高効率だが、
このコード自体の効率はわるいよ。
0561デフォルトの名無しさん
2007/08/24(金) 16:43:390562nao
2007/08/24(金) 17:03:06新しく単語を入力、またはそのファイルから単語を削除するプログラムを
どなたか作ってください。お願いします。
0563デフォルトの名無しさん
2007/08/24(金) 17:24:41パスカルの後継言語ヘクトパスカル作れよ!
0564デフォルトの名無しさん
2007/08/24(金) 17:59:510565光速エスパー世代774RR
2007/08/24(金) 21:40:070566デフォルトの名無しさん
2007/09/20(木) 18:01:08var 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で保存するときの拡張子を教えてください。
0567566
2007/09/20(木) 22:50:15今日から大学での講義がスタートして、教科書もなんにもなく、いきなり出された宿題なので、さっぱり分かんないのです。
C言語でやっていたように、Windowsのメモ帳でプログラムを作って、
【.cpp】ではない何かで保存→コマンドプロンプトで実行
というようにやりたいのですが、いろいろと教えていただきたいです。
0568デフォルトの名無しさん
2007/09/20(木) 22:51:100569デフォルトの名無しさん
2007/09/20(木) 23:06:12開発環境、つか、コンパイラは何を使っているんですか?
0570デフォルトの名無しさん
2007/09/20(木) 23:07:14C:\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ですか?
0572デフォルトの名無しさん
2007/09/20(木) 23:30:40そのソースプログラムをFree Pascal Compiler 2.0で
コンパイルしてみたらエラーが出たよ。dirはdivだね。
誤 Q:=D1 dir D2;
正 Q:=D1 div D2;
0573デフォルトの名無しさん
2007/09/20(木) 23:38:05ぼくはLinuxユーザーですが、
Free PascalにはWindows用のものもあるようですから
Free Pascalをインストールして試してみられてはいかがでしょう?
http://www.freepascal.org/
このサイトのDownloadというリンクをクリックしてみてください。
Win32, Win64 and WinCEというのがあるはずです。
0574デフォルトの名無しさん
2007/09/20(木) 23:42:41ttp://www.ss.u-tokai.ac.jp/~onishi/lecture/freepascal.html
0576567
2007/09/21(金) 01:00:56できました!!!!!!!!マジ�dクス!
来週からもよろしくお願いしますwww
0577567
2007/09/21(金) 01:14:12さっきのを、整数じゃなくて実数にするのですが、
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.
だとエラーが出るんですけど、どこが違うのでしょう?
0578567
2007/09/21(金) 01:20:25var D1,D2,S,D,P,Q:real;
ですね。でもまだ上手くいかない気が…。
0579567
2007/09/21(金) 02:11:32解決しました!
0580デフォルトの名無しさん
2007/09/30(日) 19:15:060581デフォルトの名無しさん
2007/10/03(水) 00:21:35文字数が一番少ないものを作れという課題が出たのですが…
0582デフォルトの名無しさん
2007/10/03(水) 00:22:350583デフォルトの名無しさん
2007/10/03(水) 00:28:23begin
end.
0584デフォルトの名無しさん
2007/10/03(水) 13:45:25改行コードをスペースにすれば(環境によっては)1文字分減るかも。
0585デフォルトの名無しさん
2007/10/03(水) 17:01:06ついでにこれも…。
☆頭書きをBNF記法で表せ。
☆整数「43221」を読み込み、逆順にして、元のデータと共に出力せよ
☆次の余剰を調べよ
14 mod 4
-14 mod 4
14 mod -4
-14 mod -4
0586光速エスパー世代774RR
2007/10/03(水) 18:35:48Pascalのセミコロンは区切り子なので、改行もスペースもいらない。
0587デフォルトの名無しさん
2007/10/03(水) 19:09:53>☆頭書きをBNF記法で表せ。
何の頭書き?
>☆整数「43221」を読み込み、逆順にして、元のデータと共に出力せよ
正数を文字列にしてひっくり返せばいいの?
>☆次の余剰を調べよ
何が分からないの?その式をそのまま実行して出力したんじゃダメなの?
0588デフォルトの名無しさん
2007/10/04(木) 00:44:16var 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)
と出たのですが、よくわかりません。
0589デフォルトの名無しさん
2007/10/04(木) 00:46:470590光速エスパー世代774RR
2007/10/04(木) 00:47:49>raldln(H)
そらー単純にミスタイプづら。
「raldlnなんつー識別子はないどごるぁ」ってコンパイラが逝ってるじゃん。
0591光速エスパー世代774RR
2007/10/04(木) 00:51:47うふっ、けこーんね♥
こんど一緒にゐると先生の所にいきませんこと?
ねぇってば、ねぇ、ねぇ
それにしても、どう指を動かすとイク^H^Hこんなtypoするんだろうなw
0592デフォルトの名無しさん
2007/10/04(木) 00:54:51>>585の頭書きなんですけど、
program ●●●(input,output)
の事らしいです。BNFをぐぐってもいまいち理解出来なくて。
0593デフォルトの名無しさん
2007/10/04(木) 01:08:58こんなんでいいのけ??
0594デフォルトの名無しさん
2007/10/04(木) 02:03:34とっさに書きました。
これをBNFに書き換えるのを教えてください!!
お願いします!!!!!
0595デフォルトの名無しさん
2007/10/04(木) 02:14:440596デフォルトの名無しさん
2007/10/04(木) 02:44:32program 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.
これで出ないのはなぜ、、、。
0597デフォルトの名無しさん
2007/10/04(木) 07:05:52ありがとうです!!
0598デフォルトの名無しさん
2007/10/04(木) 09:03:540599デフォルトの名無しさん
2007/10/04(木) 09:16:42Turbo Pascalの概要が解説されているところで使われていたのを思い出した。
<> -> <> こんな感じの<>を使った記述。ちがったっけ?
0600光速エスパー世代774RR
2007/10/04(木) 19:18:53>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
0601デフォルトの名無しさん
2007/10/08(月) 02:02:310602デフォルトの名無しさん
2007/10/08(月) 07:27:530603デフォルトの名無しさん
2007/10/08(月) 10:02:52初めて知った!�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
0604光速エスパー世代774RR
2007/10/09(火) 12:48:18少なくとも三桁は確保しないと表示できないと思われ。
負数だったら少なくとも四桁。
こういうのはシンプルにしようがないんだけど、元数値を別に表示すると少しは見やすいかな。
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 ).')
0605デフォルトの名無しさん
2007/10/09(火) 21:31:21const 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
ってなっちゃう…やっぱり全部ゼロだ…
0606デフォルトの名無しさん
2007/10/09(火) 21:37:07えーと、何が問題なの?
0607デフォルトの名無しさん
2007/10/09(火) 21:45:37truncは少数点以下切り捨てだから、全部0になっておkなのですが、
roundは四捨五入だから、
round( 0.4)= 0 round( 0.5)= 1 round(-0.4)= 0 round(-0.5)=-1
ってなるはずなんですよ。
0608デフォルトの名無しさん
2007/10/09(火) 22:33:59ver 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.
これのどこがエラーなんでしょう??
0609デフォルトの名無しさん
2007/10/09(火) 22:44:50>roundは四捨五入
ダウト
roundは Banker's rounding
>>608
エラーメッセージが示す通り
0611デフォルトの名無しさん
2007/10/09(火) 22:58:11program 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)
0612デフォルトの名無しさん
2007/10/09(火) 23:10:27. ~
0613611
2007/10/09(火) 23:21:030614デフォルトの名無しさん
2007/10/09(火) 23:40:05Banker's rounding とは??
0615デフォルトの名無しさん
2007/10/09(火) 23:41:59Q.○○って何ですか?
A.ググレカス
0616光速エスパー世代774RR
2007/10/10(水) 21:09:07A.再帰汁
0617デフォルトの名無しさん
2007/10/13(土) 03:41:280618大学の課題
2007/10/18(木) 12:20:53ディスプレー上から、A, a, Bなどを入力し,ord()にて
順序型に変換したらどのような数字が表れるかを検討せよ.
プログラムを作成したのち、そのファイルの最後に検討結
果を記述し、提出せよ。
以上が、課題です。
大変困っています。
よろしくお願いします。
0619デフォルトの名無しさん
2007/10/18(木) 17:52:270620光速エスパー世代774RR
2007/10/18(木) 19:29:18var c : char;
begin
repeat
read(c); writeln(ord(c))
until c = ' '
end.
(* results and discussion *)
(* conclusion *)
0621デフォルトの名無しさん
2007/10/18(木) 20:24:20もう一つ、課題が出されたのですが、光速エスパー世代774RRさんにやってい
ただいたのを参考に、もう一度やってみたいと思います。
また、よろしくお願いします。
0622デフォルトの名無しさん
2007/10/24(水) 13:01:33A君,B君,C君の3人が,programming(プログラミング基礎),algebra(代数),circuit(電気回路),english(英語),electromagnetics(電磁気学)の5科目のうちのいくつかを選択している。
3人が一緒になる授業、A君が一人のみで出席する授業を調べるプログラムを作成せよ。
但し、3人が選択している科目は各自設定してよい。
教えてください。
0623デフォルトの名無しさん
2007/10/24(水) 13:47:180624デフォルトの名無しさん
2007/10/24(水) 13:53:05algebra = 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;
0625たく
2007/10/24(水) 14:32:25問題:長さ100のint型配列 int a[100]がある。a[0]〜a[99]には整数が収められているする。
この100個の中で一番小さい数を求め、画面に出力するプログラムを作成せよ。
出力形式は「ans.=???」とせよ。???の部分は答え。
なんですが、全くわからないので教えて下さい。
0626デフォルトの名無しさん
2007/10/24(水) 18:29:39ニュートン法により2の立方根(三乗根2)を少数点以下第5位まで求めるプログラムを作りなさい。
と出たのですが、全く分からずにとても困っています。
よろしくお願いします。
0627光速エスパー世代774RR
2007/10/24(水) 20:50:24XPて何ですか
intって何ですか
(C)void
>>626
にゅーとん法はやったことがないなあ。いま書類書きで脳があぼんしてるので
気力が出たらやってみる。
0628デフォルトの名無しさん
2007/10/24(水) 20:58:200629光速エスパー世代774RR
2007/10/24(水) 21:05:42折角なので集合型を使いましょうや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.
0630625
2007/10/24(水) 21:56:06windowsXPです。
intは整数って事ですかね。
明日締め切りなんです。お願いします!
0631デフォルトの名無しさん
2007/10/24(水) 23:33:00program 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.
これ、なにがちがうんでしょう?そもそも何をやっているのかわかってないのですが…
0632デフォルトの名無しさん
2007/10/24(水) 23:34:300633光速エスパー世代774RR
2007/10/25(木) 12:59:16ヘ_ヘ
ミ・・ ミ
( )〜
Pascalは滅んだことにしたいのですね(C)void
(まあ事実だけどさwww)
>>631
勝手に解説すると(俺は電線マンか)
・Pascalには順序型というものがある
・文字型も整数型も順序型である(論理型も>>629の courses も順序型だよん)
・succは順序型の「次の要素」、predは「前の要素」を返す関数である
ということを理解しろというわけ。これって結構大事でさ、順序型はfor文の
制御変数に使えるとか、case文に使えるとかあるから。
他にも、例えば文字型と文字列型の区別がない言語が結構あるんだけど、
ある文字列の「次の文字列」なんて簡単には定義できないから、
そういう言語ではfor c := 'a' to 'z' do なんてのは考えることが難しい。
0634デフォルトの名無しさん
2007/10/30(火) 03:36:29ue := atai shr 8;
shita := word(atai shl 8) shr 8;
これでよいのでしょうか?
0635デフォルトの名無しさん
2007/10/30(火) 17:36:401+(1/1!)+(1/2!)+.....+(1/n!)
の値を計算して出力するプログラムを作りなさい。
だれか教えてください。計算式が作れません。
0636デフォルトの名無しさん
2007/10/30(火) 17:40:26を別に作ると楽。
0637デフォルトの名無しさん
2007/10/30(火) 17:50:20function 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;
0638デフォルトの名無しさん
2007/10/30(火) 17:52:48For i:=1 to n do
ANS:=ANS+(1/factorial(i));
0639デフォルトの名無しさん
2007/10/30(火) 17:53:24ANS:=1; は要らないや
0640デフォルトの名無しさん
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.
0641デフォルトの名無しさん
2007/10/30(火) 18:05:200642デフォルトの名無しさん
2007/10/30(火) 18:07:580643デフォルトの名無しさん
2007/10/30(火) 18:13:28var
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.
0644デフォルトの名無しさん
2007/10/30(火) 18:15:480645デフォルトの名無しさん
2007/10/30(火) 19:09:17教えてください
0646光速エスパー世代774RR
2007/10/30(火) 19:21:08>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+にもあった気がする。
0647光速エスパー世代774RR
2007/10/30(火) 19:26:46>i : real;
>n : integer;
>ANS : real;
>
>function factrial(i:integer): real;
>begin
>if n=1 then begin
>factrial := 1;
begin endを使いすぎてるw
まあそーゆー趣味的な所はおいといて、
なぜエラーになる(多分暴走するか、スタックあっぷあっぷで停まる)か判った?
0648634
2007/10/30(火) 19:29:530649デフォルトの名無しさん
2007/11/02(金) 13:14:37USD 118.94
GBP 186.53
CNY 13.93
EUR 129.60
RUB 3.73
なお、補助単位もつけよ。
誰か↑をやってください、お願いします。
0650デフォルトの名無しさん
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
0651デフォルトの名無しさん
2007/11/02(金) 15:07:140652光速エスパー世代774RR
2007/11/02(金) 17:33:04補助単位って、円に対する銭、ドルに対するセントみたいな奴だっけ。
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方言を使っていいなら、わざわざ代入分書かないで、いきなり初期値ぶちこみでいいよ。
0653デフォルトの名無しさん
2007/11/02(金) 17:47:39USD = 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 }
今こんな風にやってるんですけど・・・どうすればいいでしょうか?
0654デフォルトの名無しさん
2007/11/02(金) 18:00:44俺もそんな感じになったよ。
Cならポインタが使えるのでもう少し簡潔になるんだが
0655デフォルトの名無しさん
2007/11/02(金) 18:05:40エラーがまだ12〜3個残っててもうお手上げ状態です。
0656光速エスパー世代774RR
2007/11/02(金) 18:11:33今のレベルでは配列 = 表だと考えるといい。
そのうち、Cみたいな配列 = ポインタという捉え方もできるようになる。
0657デフォルトの名無しさん
2007/11/02(金) 18:18:22USD = 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;
0658デフォルトの名無しさん
2007/11/02(金) 18:18:37k := 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.
0659光速エスパー世代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でテスト済み
0660光速エスパー世代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でもねえんだから。
0661デフォルトの名無しさん
2007/11/02(金) 18:30:37能書き垂れるだけならフルソース書けよ
人の書いたソースにケチを付けるだけなら誰でも出来る
0662デフォルトの名無しさん
2007/11/02(金) 18:31:52おかげでできそうです。
0663光速エスパー世代774RR
2007/11/02(金) 18:32:39俺は棺桶に片足突っ込んでるロートルだといつも書いてるだろw
そーゆー面倒なことを期待するなww
0664デフォルトの名無しさん
2007/11/02(金) 18:35:25だったら最初から余計な口を突っ込むな
ここは宿題スレだ
回答者はフルソースのみを求めている
部分的な口出しなど不要
0665光速エスパー世代774RR
2007/11/02(金) 18:38:04申し訳なかった。これで消えることにする。
0666デフォルトの名無しさん
2007/11/02(金) 18:39:210667デフォルトの名無しさん
2007/11/05(月) 19:52:380668デフォルトの名無しさん
2007/11/06(火) 14:56:37そして格納されたデータを出力する。ただし、データ値(x、y、z)の
それぞれの範囲は1〜9とする。
この問題をお願いします。
0669デフォルトの名無しさん
2007/11/06(火) 15:42:57出力するプログラムを作成せよ。(集合型変数ではなく配列を用いること)
ただし,同じ大きさのデータが複数個あるときは同じ順位とする。
例
入力されたデータが(2,45,5,9,32,5,6,1,4)の集合のとき,
入力されたデータ集合の1番目から4番目の順番は(45,32,9,6)になる。
しかしこの集合には5が2個あり,このとき5が5番目と6番目になり
4は7番目になる。つまり6番目のデータを呼び出したときは5が返される。
この問題もお願いします。
0670デフォルトの名無しさん
2007/11/06(火) 22:16:37program 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.
0671デフォルトの名無しさん
2007/11/08(木) 04:10:240672デフォルトの名無しさん
2007/11/08(木) 12:24:28program 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.
0673デフォルトの名無しさん
2007/11/11(日) 20:58:09ただし、入力は 0 以下の値によりその完了を表わすものとする。また、入力された要素の数が n個であったとき、それらを格納する配列の添字は 1 〜 n であるものとする。
をお願いします
0674デフォルトの名無しさん
2007/11/13(火) 15:02:29、入力された文字がアルファベット以外の時はそのまま出力すること。
(a) すべて大文字
(b) 最初の1文字のみ大文字、あとはすべて小文字
(c) すべて小文字
出力例
Enter a word : KeYWOrD
a : KEYWORD
b : Keyword
c : keyword で困っているのでお願いします。
0675デフォルトの名無しさん
2007/11/17(土) 22:01:040676デフォルトの名無しさん
2007/11/18(日) 00:12:52(1)普通に解く(小学生のやり方)
(2)鶴と亀の数を変化させて解く(力技、これが一番簡単)
(3)ただの2元連立1次方程式だろGuss〜法を使うまでも無い。クラメールの公式で解いちゃえ
(4)真面目?にGuss〜法などを使って解く
(5)その他
0677デフォルトの名無しさん
2007/11/18(日) 01:32:000678デフォルトの名無しさん
2007/11/18(日) 19:39:17鶴亀算は忘れたので以下を参考にした
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のタイプミス
0679デフォルトの名無しさん
2007/11/19(月) 00:25:35できました。
本当にありがとうございます。
0680デフォルトの名無しさん
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.
まで考えたんですが、当たっていたときに終了させる方法が
どうしてもわからないんです。よろしくお願いします
0681デフォルトの名無しさん
2007/11/19(月) 21:57:18for文ではなくwhile文を使う。
あたりカウントを数える変数を宣言して、あたり毎に増やしてwhileの判断条件にする。
これで何とかなると思う。
0682デフォルトの名無しさん
2007/11/19(月) 22:16:34>>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の良い教科書無い?
0683681
2007/11/19(月) 23:14:01標準なら以下2冊。
PASCAL(K.イェンゼン・N.ヴィルト)培風館
アルゴリズム+データ構造=プログラム(Niklaus Wirth)日本コンピュータ協会
多分両方とも絶版
0684デフォルトの名無しさん
2007/11/19(月) 23:24:50ありがとうございます。参考にさせて頂きます。
因みにif文だけでも可能でしょうか?
0685デフォルトの名無しさん
2007/11/19(月) 23:59:550686デフォルトの名無しさん
2007/11/20(火) 00:53:36�d
アルゴリズム+データ構造=プログラムってなかなか面白そうな本ですね。
古本屋探してみます。
0687デフォルトの名無しさん
2007/11/20(火) 15:59:48問1
ひと月ごとにバイト代を払うための学生アルバイトの労務管理システムを作りたい。
全てのアルバイトデータが、日付、学生氏名、職種、労働時間の3項目を持つ場合に
これらのデータを格納する型をレコード型により定義せよ。
ただし、職種はr(レジ係),p(配送係),i(接客係),c(清掃係)のいずれかとする。
この問いで困っているのでお願いします。
0688デフォルトの名無しさん
2007/11/20(火) 16:05:55あるクラスの身長データを入力し、以下のような平均を計算して、
人数とともに出力する。
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
というエラーが表示されてしまい、実行できませんでした。
0689688
2007/11/20(火) 16:07:52uses 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;
0690688
2007/11/20(火) 16:09:03a:=((a1*n1)+(a2*n2))/n;
end;
writeln('身長170cm以上の学生の人数',n1,'人の平均身長は',round(a1),'cmです。');
writeln('身長170cm未満の学生の人数',n2,'人の平均身長は',round(a2),'cmです。');
writeln('学生全体の人数',n,'人の平均身長は',round(a),'cmです。');
end.
長々と書いてしまい申し訳ありません。
正直、プログラムのことはよくわからないので、へんな部分が多いと思いますが、
よろしくお願いします。
0691デフォルトの名無しさん
2007/11/20(火) 18:26:13できますた。
ありがとうございました。
0692デフォルトの名無しさん
2007/11/21(水) 23:05:490693デフォルトの名無しさん
2007/11/21(水) 23:19:23いくら宿題でもこれはひどい
0694デフォルトの名無しさん
2007/11/21(水) 23:45:25貼り付ける前はインデントしてるよ。2chの仕様で消えてるだけ。
前はインデントを再現するようにしてたが今は面倒なのでしてない。
まあ大した手間じゃないけどな。&nbsp;×4(&は半角)でタブを全置換するだけ
0695デフォルトの名無しさん
2007/11/21(水) 23:51:16Vimにコピペして
gg=G
これサイキョウ。
0696デフォルトの名無しさん
2007/11/22(木) 00:56:26ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5314.txt
課題は型を定義するだけだから必要なのはTypeの部分だけ、他はテストプログラム
0697デフォルトの名無しさん
2007/11/22(木) 01:03:04どう見ても4項目あるんだが
0698デフォルトの名無しさん
2007/11/22(木) 01:57:36ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5315.txt
処理の流れを考えないでプログラム組むからおかしくなるんだよな。
フロ−チャート書けとは言わないけど流れを良く考えて欲しい。
どうこう言える立場じゃないけどそう感じた。
0699698
2007/11/22(木) 02:17:40偉そうな事を言って置きながら、重大なミスを見逃してましたよ。
>>698はn,n1,n2が0だと平均値の計算でerrorを吐く。n,n1,n2が0の時は
平均値を計算せずに0とするようにしときました。もうミスは無いよな?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5316.txt
0700デフォルトの名無しさん
2007/11/25(日) 21:25:470701デフォルトの名無しさん
2007/12/01(土) 02:45:16線形リスト上、スタックを使う問題なのですが
�@整数データを昇順に挿入する手続きを示せ。
�A与えられた整数データを検索し、そのデータがリスト内にあれば削除する。
です。PUSHやPOPといった手続きを使うとのことですが、�@の「昇順に挿入」
からして詰ってしまいました。
どうかお願いします。
0702デフォルトの名無しさん
2007/12/04(火) 02:36:150703デフォルトの名無しさん
2007/12/04(火) 15:36:14ちなみに規則は、プレイヤーは交互にマスに左端から書き込む。一度に書き込める
マスの数は1〜3だそうです。 お願いします。
0704デフォルトの名無しさん
2007/12/16(日) 11:14:49という内容のプログラムをつくりたいです。
お願いします。
0705デフォルトの名無しさん
2007/12/16(日) 12:00:47program 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.
0706デフォルトの名無しさん
2007/12/16(日) 23:29:3412/16(日)だったら11/16(金)てな感じです。前の月に同じ日が無い場合はその月の最後の日のデータを出力する。
月と曜日は列挙型にしろとのことです。
よろしくお願いします。
0708デフォルトの名無しさん
2007/12/17(月) 22:56:34コンソールから実行するか、For文の後に以下のコードを付け加えればOK
write('整数を入力すると終了します');
read(a);
詳しい環境を書いて置けば誰かが他の解決策を提示してくれるかもな。
0709704
2007/12/19(水) 21:55:59これで来週の提出に間に合いそうです
0710デフォルトの名無しさん
2007/12/23(日) 23:38:54procedure 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.
0711デフォルトの名無しさん
2007/12/24(月) 01:24:03・描いた図形を動かす
・壁に衝突した事を検出
・角度とか
わからんのはどれよ
0712デフォルトの名無しさん
2007/12/24(月) 12:54:18嫌われる技術系の見本だな。出来るか出来無いか聞かれているんだから
出来る、出来無いで答えてやればいい。出来るならコードを添えると好感度UP
0713デフォルトの名無しさん
2007/12/24(月) 22:41:40書いた図形を動かすのはできるのですが、あとの二つができません。
0714デフォルトの名無しさん
2007/12/26(水) 08:15:070715デフォルトの名無しさん
2008/01/16(水) 11:53:47ボールの大きさが変化しながら動いていくプログラムを作りたいのですが、初心者で全くお手上げです。
お願いします。
0716デフォルトの名無しさん
2008/01/16(水) 19:49:400717デフォルトの名無しさん
2008/01/16(水) 20:02:05円を描くことは出来るんだよね?
だったら、
1、前回の中心と半径を覚えておく
2、次の半径と、中心座標を求める。
3、前に描いた円を消す。
それには前に描いた中心、半径で
背景と同じ色で塗ればいい。
4、新しい半径と中心の違う円を描く、
5、Sleepとかでお休みする。
これで許してくれるだろ。 チラツクとか言われたら困るが
0718デフォルトの名無しさん
2008/01/17(木) 10:24:090719デフォルトの名無しさん
2008/01/17(木) 11:41:57procedure 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;
0720デフォルトの名無しさん
2008/01/26(土) 01:03:54VCLなしバージョンをお願いしたいです・・
0721デフォルトの名無しさん
2008/01/26(土) 02:58:54計算部分は書かれてるんだからあとは何とでもなるだろ
0722デフォルトの名無しさん
2008/01/28(月) 14:36:070723デフォルトの名無しさん
2008/01/29(火) 19:54:190724デフォルトの名無しさん
2008/02/04(月) 16:36:180725デフォルトの名無しさん
2008/02/04(月) 16:46:48あなたは十分過ぎるリスクを背負ってるわけだから、
その勇気まで否定するものではない。
0726デフォルトの名無しさん
2008/02/05(火) 00:29:02このコードを改造してくださいとか、やり方教えてくださいと
言う依頼より丸投げの方が良いな。
【質問テンプレ】
[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] その他の制限: (どこまで習っているか、使用/使用禁止ライブラリ等)
0727デフォルトの名無しさん
2008/02/07(木) 02:53:410728k
2008/05/21(水) 11:43:07program 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.
ここまでやったんですが・・・式がわかりません教えてください。
0729デフォルトの名無しさん
2008/05/21(水) 11:52:29手計算とあわせるなら円単位で丸める必要はないの?
で式が判りませんって、どういう意味?
0730デフォルトの名無しさん
2008/05/21(水) 12:21:44そうなら単純に繰り返し文使えば良いんじゃないのか?
0731k
2008/05/21(水) 17:29:390732デフォルトの名無しさん
2008/05/21(水) 20:25:59ただ 小数点以下が出て来るから、これをどう丸めたらいいの?
0733k
2008/05/21(水) 22:11:50へたにroundとかつかうと自分はわからないんで。。。
0734デフォルトの名無しさん
2008/05/22(木) 00:09:48{複利計算}
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.
0735k
2008/05/22(木) 15:40:390736k
2008/05/22(木) 19:48:31sqrtなどの標準関数を使わないで作りなさいという問題なんですが。。。
わかりません。教えてもらえませんか?√のプログラムってなにをすればいいんでしょうか?
0737デフォルトの名無しさん
2008/05/22(木) 21:15:32方法も書いてあげたでしょ?
0738k
2008/05/23(金) 17:12:510739デフォルトの名無しさん
2008/05/23(金) 17:18:30常識的には同じスレに質問するものじゃないのか。
0740デフォルトの名無しさん
2008/05/23(金) 19:41:00ようするに整数の最大値の平方根までループすれば十分って事だ
で、pascalはループ抜けたらループ変数は不定だから
ホントは i を返すのは間違えている。
で、奇数を合計するのは昔は掛け算が遅かったからやってた事で
別に今なら x*x と比較したって同じだ。
順に x*x と比較してゆけばいい
0741k
2008/05/23(金) 21:57:09まだ全然習ってないことがたくさんで。。。
0742デフォルトの名無しさん
2008/05/24(土) 07:21:440743り
2008/05/24(土) 12:19:18(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として不等式を作り、このような自然数をすべて求めよ。
0744デフォルトの名無しさん
2008/05/24(土) 12:50:540745k
2008/05/24(土) 15:39:18次はこの問題で・・。 n
正整数Sを端末から読み込み、初めて1/i≧SとなるNを求めるプログラム
なんですが・・・ i=1
狽フプログラムってなにをするんですか?
0746デフォルトの名無しさん
2008/05/24(土) 16:51:26実装はスレの性質上仕方ないがアルゴリズムも数学知識も人任せか。
そしてひとの説明を理解しようとする気さえないときてる。
0747デフォルトの名無しさん
2008/05/24(土) 17:04:51function kansu(n:Integer):double;
var i:Integer;
begin
Result:=0;
for i:=1 to n do Result:=Result+1/i;
end;
になる。 これをループで呼び出して s と比較して大きくなれば終了とやればいい
0748k
2008/05/24(土) 21:44:54function、double、Resultとかまだ習ってないのでわからないんです。
たぶん使わないでできると思うんですが・・・
とりあえず教科書読みながらやってみます。ありがとうございました。
0749デフォルトの名無しさん
2008/05/25(日) 19:39:47ただし行の最後にはピリオドが入力されるとする。
<実行例>
I am a pen.
- - - -
おそらくordを使うと思うんですが、まったく分かりません。
お願いします。
0750デフォルトの名無しさん
2008/05/25(日) 20:07:11s: 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.
0751デフォルトの名無しさん
2008/05/30(金) 02:25:58お願いします。
0752デフォルトの名無しさん
2008/05/30(金) 10:55:40定義が出てないぞ。
0753751
2008/05/30(金) 13:27:00Pが置換行列、Lが下三角行列、Uが上三角行列です。
お願いします。
0754デフォルトの名無しさん
2008/06/09(月) 01:23:14以上。
0755デフォルトの名無しさん
2008/06/12(木) 15:28:24お願いします。
0756デフォルトの名無しさん
2008/06/25(水) 11:40:29学校の課題で、パスカルで課題が出たんですがさっぱりわかりません;;
教えてもらってもいいですか?
0757デフォルトの名無しさん
2008/06/25(水) 15:43:020758756
2008/06/25(水) 16:53:39今日の夜12時ぐらいに問題文うpします
0759デフォルトの名無しさん
2008/06/25(水) 21:35:350760デフォルトの名無しさん
2008/06/26(木) 13:04:360761デフォルトの名無しさん
2008/07/02(水) 22:45:18めんどくてもいいからまともなゲームの一つでも作れないのこの言語・・・
0762デフォルトの名無しさん
2008/07/02(水) 23:25:060763デフォルトの名無しさん
2008/07/03(木) 17:22:17DelphiやLazarusなら出来るでしょ。
0764デフォルトの名無しさん
2008/07/03(木) 19:21:54ググってみても分らん。
0765デフォルトの名無しさん
2008/07/04(金) 19:56:51それは 16bitの頃の奴じゃないのか? 今そんなの使ってるの?
環境は何?
0766デフォルトの名無しさん
2008/07/07(月) 12:26:26カエサル暗号を拡張し、標準入力から入力された数字だけ平文の文字をずらす暗号化を実現せよ。
平文(暗号化前の文章)が書かれたファイルを入力とし暗号化されたものを出力ファイルに書き出すプログラムを作成せよ。
(例) 6が入力された場合
I am a pen. →O gs g vkt.
長桁計算を行う手続きPowerReal(A,x,n)を完成させよ。
Nは整数であるが、xは実数であるものとする。また、Aはxのn乗の長桁表記であるとする。
整数部、小数部ともに100桁を超えないx, nが与えられると仮定してよい。
上の2つの問題をお願いします。
0767デフォルトの名無しさん
2008/07/08(火) 23:45:20大学のだとreset(f,'ファイル名');という方言(?)でよみこめるのですが、
自宅のだとこうしているとコンパイルが通りません
詳しい方教えてください
ちなみにコンパイラはfreepascalをつかっています。
0768デフォルトの名無しさん
2008/07/09(水) 00:13:39解決しますた
スルーでお願いいたします
0769rat pt 01
2008/07/13(日) 16:18:39どなたか教えていただけないでしょうか??問題の概要は以下のようなものです。
表に登録するデータについては、キーは英数字からなる長さ8までの文字列でデータ本体は整数(型名はintegerでよい)です。
ハッシュ表のサイズは11とします。
ハッシュ関数は文字列xの各文字のASCIIコードの総和を11で割った余りとします。
さらにメニュー表示として入力した文字により行う操作を決定します。
どの文字がどのような操作を行うのかは以下のとおりです。
's' の場合: ハッシュ表に登録されている全レコードを,ハッシュ関数値毎に(キーの値とデータの両方を)すべて表示します.
'r' の場合: さらに「キーの値」と「データ」を入力し,すでに同じキーをもつデータがあれば「二重登録」として検出し,そうでなければ,そのレコードをハッシュ表に登録します.
'e' の場合: さらに「キーの値」を入力し,そのキーをもつデータがハッシュ表に登録されているならば,
そのデータを表示します.さらに削除するかどうかを入力させて,削除する選択をした場合にはそのレ
コードを削除します.そのキーをもつデータがハッシュ表にない場合には「そのキーをもつレコードが
ないこと」を出力しますが,ハッシュ表には操作を加えません.
'i' の場合: ハッシュ表に登録されている全レコードを,キーの値が小さい順に表示します.ここで「キー
の値の順」とは,文字列の辞書順のことを意味します.Pascal では,文字列a,b に対して,a がb より
辞書的順序が先(小さい) ときには「a<b」で表現できます.
'd' の場合: 「'i' の場合」の逆で,キーの値が大きい順に表示します.
'q' の場合: プログラムを終了します.具体的には,実行文部の最後の「end.」の直前までジャンプ*2し
ます.
長くなってすいません。ちょっとしたヒントでもいいので教えていただければ幸いです。
0770デフォルトの名無しさん
2008/07/22(火) 16:32:510771デフォルトの名無しさん
2008/07/23(水) 16:05:04nの値を入力してもらって
n*nの二次元配列を作りたいのですがどうしたらいいでしょうか?
0772デフォルトの名無しさん
2008/07/23(水) 23:58:150773デフォルトの名無しさん
2008/07/24(木) 05:45:40q := x = y
てどういう意味ですか?
0774デフォルトの名無しさん
2008/07/24(木) 13:01:07x=yがfalseならばqにfalseを代入
0775デフォルトの名無しさん
2008/07/31(木) 06:21:34阪大生乙
0776デフォルトの名無しさん
2008/09/22(月) 11:17:390777デフォルトの名無しさん
2008/10/13(月) 21:12:490778デフォルトの名無しさん
2008/10/25(土) 15:47:12可能でしょうか?たとえば
var ZeroToFour : array of integer =(0, 1, 2, 3, 4);
のように。また可能な場合には添字の範囲はどうなるので
しょうか?(上の例だと
ZeroToFour[0]=0, ...ZeroToFour[4]=4 (0オリジン)
となるのでしょうか。それとも
ZeroToFour[1]=0, ...ZeroToFour[5]=4 (1オリジン)
となるのでしょうか。)
どうぞよろしくお願いします。
0779デフォルトの名無しさん
2008/10/26(日) 18:40:55処理系は何だろ?標準PASCALだとその宣言は出来ないはず。
type A = array[T1] of T2;
が宣言方法だから、オリジンはT1の宣言による。っていうか、どうしたいか
自分で宣言する。
0780デフォルトの名無しさん
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 を用いて解け
とあります。
かなり難易度の高い問題ですが、どうかこのプログラミングを教えていただけないでしょうか。
0781デフォルトの名無しさん
2008/10/27(月) 19:55:18↓
この操作を数回繰り返し
関数f=x^2−x。^2
です。
すみません。
0782デフォルトの名無しさん
2008/10/27(月) 23:07:36問題が理解できないんだが…
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は見たことないです。
0783デフォルトの名無しさん
2008/10/27(月) 23:14:15前言撤回です。
x。^2だけ意味不明です。
0784デフォルトの名無しさん
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回出ており、
どのようにプログラムを書けばよいのか困っています。
0786デフォルトの名無しさん
2008/10/28(火) 14:59:04function 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;
0787デフォルトの名無しさん
2008/10/28(火) 15:01:06翻訳すると
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
という計算を繰り返す
と解釈しましたこれはどう見ても平方根を求めていません。
ソースにするとこんな感じ、
何の計算式かはわかりません。
これ計算の目的を問題の最初に示すべきだと思います、目的が分かりません。
0788デフォルトの名無しさん
2008/10/28(火) 15:58:43コンパイルしてみたのですが
In function `xCross':
についてのエラーが出てきて手直ししても動かないのですがどうすれば良いので
しょうか。
あと、問題のタイトルには
以下の考え方に基づいて与えられた正の数の平方根の値を求めるプログラムを作
成せよ。
0789デフォルトの名無しさん
2008/10/28(火) 16:08:35ならば、平方根が求まるように手直ししておきます。
あとコンパイル環境を教えてください、私はDelphi7で動作を確認しました。
0790デフォルトの名無しさん
2008/10/28(火) 16:31:00コンパイルはターミナルで行っています。
0791デフォルトの名無しさん
2008/10/28(火) 17:54:59これ、ニュートン法と呼ばれる平方根を求めるアルゴリズムですね
問題が非常に不鮮明で最初の一文が無いと到底理解できない設問です。
ハッキリ言って悪題ですね。
きわめてシンプルにするとこんな感じになります。
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かもしれません。
使用言語やコンパイル自体が分からない場合は友達と相談してください。
でわでわ。
0792デフォルトの名無しさん
2008/10/28(火) 18:40:46非常に参考になりました。
0793デフォルトの名無しさん
2008/10/29(水) 22:29:54同じ学校の生徒かな?
それならコンパイル環境はたぶんgpcって言えばおk
にしてもf(x) = x^2 - (平方根を求める数)^2で
f(c) = 0のときcを解をするって平方根を求める問題なのにおかしいよなjk
0795デフォルトの名無しさん
2008/11/03(月) 01:50:51テキストファイルに書かれた数字を
「文字」として読み込むのではなく「数」として読み込むときも
file(f, c)として文字として読み込んだ後に
ord('c')-ord('0')のようにして数に変換するんですか?
0796ORZ
2008/11/06(木) 15:22:35こんな私ですが、教えてください。
問題「N x N 行列を2つ読み込み、その積を計算し、標準出力に出力するプログラムを作りなさい」
ただし、入出力の部分は関数か手続きを使用せよ、とのことです。
(Nは定数で10とする)
よろしくお願いします。
0797ORZ
2008/11/06(木) 15:26:52何度もすみません・・・
0798デフォルトの名無しさん
2008/11/06(木) 23:25:370799ORZ
2008/11/08(土) 16:56:46それをどうやってプログラムするのかが浮かばなくて・・・
0800デフォルトの名無しさん
2008/11/08(土) 19:05:30type 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
0801デフォルトの名無しさん
2008/11/10(月) 16:45:07キーボードで入力された2つの整数の最大公約数を求める関数(function)を作り、
その関数を用いて分数の約分を行うプログラムを作成せよ。
(例) 分子を5、分母を10と入力した場合、結果として1/2を表示する。
とのことです。
よろしくお願いします。
0802デフォルトの名無しさん
2008/11/10(月) 17:15:430803デフォルトの名無しさん
2008/11/10(月) 17:22:570804デフォルトの名無しさん
2008/11/13(木) 09:03:42error: invalid operands to `+'
error: incompatible type for argument 2 of `ace'
error: routine declaration
error: result of function `check' not assigned
↑のエラーの消し方がわからないのです
教えていただけないでしょうか
0805デフォルトの名無しさん
2008/11/13(木) 14:10:59Delphi6を使っています
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.
どこが間違っているでしょうか?
0806デフォルトの名無しさん
2008/11/13(木) 15:07:370807デフォルトの名無しさん
2008/11/27(木) 13:51:47教えていただけないでしょうか。
配列の全要素のうち最小のものを配列の先頭の要素と入れ替える。 次に、配列
の 2 番目以降の要素のうち最小のものを配列の 2 番目の要素と入れ替える。
このような処理を配列の要素数から 1 引いた回数繰り返すと、すべての要素が
整列した状態となる。
このアルゴリズムに従って配列を整列させる(ソートする)プログラムを作成せ
よ。 ただし、「配列の n 番目以降の要素のうち最小のものを配列の n 番目の
要素と入れ替える」という処理をサブルーチンとして作成すること。
0808デフォルトの名無しさん
2008/11/30(日) 09:05:02それ参考にすればいいんじゃないかな
特に難しい事はないはず
0809デフォルトの名無しさん
2008/11/30(日) 09:09:590810デフォルトの名無しさん
2008/11/30(日) 13:19:38まずは手計算でやれるか試してみ
0811デフォルトの名無しさん
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;
0812デフォルトの名無しさん
2008/11/30(日) 16:20:16procedure 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;
0813デフォルトの名無しさん
2008/12/01(月) 05:14:06program aaa(input, output);
const n=10 ;
type intarray= array[1..n] of integer ;
var A : intarray;
begin
Aにデータ入力
quicksort(A,1,n);
データ出力
end.
でいいんじゃないかな
0814デフォルトの名無しさん
2008/12/08(月) 03:22:22最初、ねずみはAの部屋にいるものとする。
その後、1秒ごとにねずみは隣の部屋に移るか同じ部屋にいる。
以下のような確率で動く時、ねずみが10秒後に、Aにいる確率を求めよ。
・Aにいるとき、Bに移る確率は二分の一
・Bにいるとき、A及びCに移る確率は共に三分の一
・Cにいるとき、Bに移る確率は三分の二
二分法のところの問題です。答えがなくてこまっています。
教えていただけないでしょうか。
0815デフォルトの名無しさん
2008/12/08(月) 19:08:320816デフォルトの名無しさん
2008/12/08(月) 19:16:423*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
って出るよね?
0817デフォルトの名無しさん
2008/12/08(月) 19:58:48http://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E6%B3%95
この方法と確率の計算は、関係ないのでは?
0818デフォルトの名無しさん
2008/12/09(火) 05:35:56よかったら解答のせてもらえませんか?
方針を理解したのですが、
行列のあたり苦手なのでコンパイルできません^^;
0819デフォルトの名無しさん
2008/12/09(火) 14:10:44const 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.
0820デフォルトの名無しさん
2008/12/09(火) 17:24:100821デフォルトの名無しさん
2008/12/09(火) 18:37:490822デフォルトの名無しさん
2008/12/12(金) 00:29:381〜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)に変えるだけでできますか?
0823デフォルトの名無しさん
2008/12/12(金) 00:58:276つの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個だけを並び替えるという
プログラムのつくりかたがわかりません。
どなたか教えていただけたら幸いです。
0824デフォルトの名無しさん
2008/12/12(金) 03:43:02sum := 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
0826デフォルトの名無しさん
2008/12/13(土) 00:44:55及び挿入する文字列の長さ(length)とし、出力は、挿入済みの文字列(text)とする。
挿入例
text1:=`abcdef____`;
text2:=`ghi_______`;
pointer:=4;
length:=3;
text=`abcghidef_`
この問題を教えてください。
0827デフォルトの名無しさん
2008/12/13(土) 10:16:410828デフォルトの名無しさん
2008/12/13(土) 15:45:280829デフォルトの名無しさん
2008/12/13(土) 21:04:050830デフォルトの名無しさん
2008/12/14(日) 00:51:190831デフォルトの名無しさん
2008/12/14(日) 02:02:030832デフォルトの名無しさん
2008/12/14(日) 02:48:550833デフォルトの名無しさん
2008/12/17(水) 16:48:34再帰を使用してプログラム例を示していただけないでしょうか。
1
値の配列を受け取り,その並べ替え(順列)をすべて出力する再帰の手法を
使用したプログラムを書きなさい.ただし,値は1からnまでの数値であり、
n<=10とする. n=1,n=2,n=3の場合についてプログラムを実行しなさい。
2
「ハノイの塔」のパズルを解く再帰の手法を使用したプログラムを書きなさ
い。(円盤の枚数はnとする)n=2,n=3,n=4の場合についてプログラムを実行
しなさい。
0834デフォルトの名無しさん
2008/12/17(水) 18:54:16program 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.
0835デフォルトの名無しさん
2008/12/17(水) 18:55:39○ procedure hanoi(n:integer ; a,b,c:char);
0836デフォルトの名無しさん
2008/12/18(木) 11:42:26すみません。
コンパイルをしてみたら「char」の部分がエラーになって動かないのですが・・・
なにぶん古いコンパイラですので・・・、お手数をおかけいたします。
0837デフォルトの名無しさん
2008/12/18(木) 11:43:40どうやら定義されてない・・・みたいです。
0838デフォルトの名無しさん
2008/12/18(木) 11:44:540839デフォルトの名無しさん
2008/12/18(木) 12:35:230840デフォルトの名無しさん
2008/12/19(金) 19:25:58スペース消してみたら上手くいきました。
ありがとうございます。
「1」の方はやはり難しいのでしょうか。
1
値の配列を受け取り,その並べ替え(順列)をすべて出力する再帰の手法を
使用したプログラムを書きなさい.ただし,値は1からnまでの数値であり、
n<=10とする
0841デフォルトの名無しさん
2008/12/20(土) 01:18:37アクセスでお菓子とジュース
0842デフォルトの名無しさん
2008/12/20(土) 01:26:13被るといけねーから少し中を変えとけよ
0843デフォルトの名無しさん
2008/12/20(土) 01:43:23おkk
0844デフォルトの名無しさん
2008/12/20(土) 02:51:41与えられたリストの要素を並べ替えてできる全てのリストのリストを返す関数。
ほぼ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
-
0846デフォルトの名無しさん
2008/12/20(土) 10:13:13var 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.
0847デフォルトの名無しさん
2008/12/20(土) 10:32:15どこで?
おれはフツーにレポboxに放り込むけど…
0848デフォルトの名無しさん
2008/12/20(土) 10:40:57アルゴリズム事典かな?
もれも、ほとんど同じになった。
0849デフォルトの名無しさん
2008/12/20(土) 10:46:37ありがとうございました。
0850デフォルトの名無しさん
2008/12/20(土) 10:47:400851デフォルトの名無しさん
2008/12/20(土) 10:58:01引数で配列渡すようにしないとだよ
0852デフォルトの名無しさん
2008/12/20(土) 11:13:480853デフォルトの名無しさん
2008/12/20(土) 12:14:24って書かれてるから渡したほうがいいかなーと
0854デフォルトの名無しさん
2008/12/20(土) 19:25:00http://jp.youtube.com/watch?v=yzJqYl9EHgA
0855デフォルトの名無しさん
2008/12/20(土) 20:04:33× if i<n+1 then
○ if i<n then
動作結果は同じだけど一応訂正
0856デフォルトの名無しさん
2008/12/25(木) 20:10:48Delphi使用で、for、if、arrayまで習っています。
・生年月日と今日の日付を計算して、満年齢を計算する
・sin,cos,tanの数表を作る
0857デフォルトの名無しさん
2008/12/25(木) 20:14:24×生年月日と今日の日付を計算して、満年齢を計算する
○生年月日と今日の日付を入力して、満年齢を計算する
0858デフォルトの名無しさん
2008/12/25(木) 20:34:15締切日は書いた方がいい
0859856
2008/12/25(木) 21:12:39すいません。締切は1月5日です。
諸事情で締切日までDelphiが使えない状態になりました。
0860デフォルトの名無しさん
2008/12/26(金) 12:30:36program 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才年をとる場合は難しいな
0861デフォルトの名無しさん
2008/12/26(金) 12:35:53const 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.
0862856
2008/12/26(金) 16:46:530863デフォルトの名無しさん
2009/01/08(木) 01:10:29・誕生日まで何日あるかを計算する。ただしarrayでなくcase文を使って設定すること。
・何個かのデータをもらって、その平均、総和、最大値、最小値、標準偏差を計算する。
・プロ野球などのプロスポーツのデータ(勝ち数、負け数、引き分け数)を入力したら、
各チームの勝率を計算し、順位をつける。
・学籍番号と得点をデータとして入力し、これを得点の高い順に並べ替え、順位を付けて表示する。
0864デフォルトの名無しさん
2009/01/08(木) 15:23:000865デフォルトの名無しさん
2009/01/10(土) 11:48:11arrayではなくCaseを使って設定するって、どういう意味?
0866デフォルトの名無しさん
2009/01/10(土) 12:12:23【 用語 】下記
【 期限 】1/15くらいまで
【 Ver 】
【 補足 】
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11〜99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。
0867863
2009/01/11(日) 20:32:54以下のような設定は不可とのことです。
var days array[1..12] ofinteger;
var
:
:
begin
days[1]:=31;days[2]:=29;...(同様に);days[12]:=31;
0868デフォルトの名無しさん
2009/01/11(日) 21:16:31で、どの課題が残ってるのかね?
0869デフォルトの名無しさん
2009/01/12(月) 22:18:35var 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.
0870デフォルトの名無しさん
2009/01/19(月) 02:10:07全然わかりません。お願いします。
火曜日までです。
0871デフォルトの名無しさん
2009/01/19(月) 02:16:160872デフォルトの名無しさん
2009/01/19(月) 19:06:580873デフォルトの名無しさん
2009/01/19(月) 20:09:010874空落ち ◆SniperBHgo
2009/01/21(水) 20:17:38行列形式ってなんだろう
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.
0875デフォルトの名無しさん
2009/01/27(火) 16:40:44(1)2つの自然数nとmが与えられたとき、
nとmの最大公約数を出力するプログラムを書け。
(2)与えられた3×3行列の行列式を計算するプログラムを書け
(行列は2次元配列で表すこと。)
という課題はどうやってとけばいいのでしょうか?
0876デフォルトの名無しさん
2009/01/27(火) 18:36:090877デフォルトの名無しさん
2009/01/27(火) 21:48:580878デフォルトの名無しさん
2009/01/28(水) 02:31:19動作確認なんてしてないから間違ってたらすまん
改行大杉って怒られたんでつめて書く
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;
0879デフォルトの名無しさん
2009/01/28(水) 02:32:320880デフォルトの名無しさん
2009/01/28(水) 08:59:15半角2文字づつ綺麗にインデントされたやつが。
0881デフォルトの名無しさん
2009/01/28(水) 10:09:120882123
2009/02/11(水) 17:58:340883デフォルトの名無しさん
2009/02/12(木) 01:16:47var i,ans:integer;
begin
ans := 1;
for i := 1 to 440 do
begin
ans := ans * i mod 881;
end;
writeln(ans);
readln;
end.
0884123
2009/02/12(木) 10:02:400885デフォルトの名無しさん
2009/02/13(金) 01:09:04[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
例
534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
0886デフォルトの名無しさん
2009/02/13(金) 01:25:52Python の宿題ここで答えます 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
こんなんで数独の掲載料もらえるなら俺だって問題送りたい
0887デフォルトの名無しさん
2009/02/13(金) 20:40:200888デフォルトの名無しさん
2009/02/15(日) 13:11:360889デフォルトの名無しさん
2009/04/09(木) 22:29:020890デフォルトの名無しさん
2009/04/27(月) 06:28:110891デフォルトの名無しさん
2009/04/29(水) 17:09:24おまいら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))))
はい糸冬
0892デフォルトの名無しさん
2009/04/29(水) 20:39:170893デフォルトの名無しさん
2009/04/29(水) 23:49:10の下一桁の数字は?
nの(nのn乗)乗
の下一桁の数字は?
0894空落ち ◆SniperBHgo
2009/04/30(木) 00:35:53program 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.
0895デフォルトの名無しさん
2009/04/30(木) 08:15:170896デフォルトの名無しさん
2009/04/30(木) 18:15:07それともNが無限に近い数でも保持できる計算機がこの世に存在するの?バカなの?
0897デフォルトの名無しさん
2009/04/30(木) 18:39:42中途の計算で下一桁だけ求め続ければいい。
0898デフォルトの名無しさん
2009/04/30(木) 20:20:53そんなあなたに
(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)
ってやってみ 速攻で求まるから
0899デフォルトの名無しさん
2009/04/30(木) 22:01:090900デフォルトの名無しさん
2009/04/30(木) 23:06:30ところでNが100以上の時の値を計算できる人いる?
0901空落ち ◆SniperBHgo
2009/05/01(金) 00:33:48でも,アルゴリズムを全く工夫していないから計算がとても重い.
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;
0902空落ち ◆SniperBHgo
2009/05/01(金) 00:35:03for 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.
0903デフォルトの名無しさん
2009/05/01(金) 03:25:08N=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の値を求めました。
そんなに重くなかったっす。
0904デフォルトの名無しさん
2009/05/01(金) 03:33:49アホほど長いんだ?
しかも遅いしな。
0905デフォルトの名無しさん
2009/05/01(金) 05:42:296 7
6 5
6 3
6 9
0 1
6 3
6 5
6 7
6 9
0906デフォルトの名無しさん
2009/05/01(金) 06:50:36とループするので、指数の7^7が4で割っていくつ余るかが問題になる。
7^n≡{3,1} (mod 4)
から、
7^7≡3 (mod 4)
従って、
7^(7^7)≡3 (mod 10)
となる。
0907デフォルトの名無しさん
2009/05/01(金) 07:09:50この国は一夫多妻制です。
しかし現在この国には男女はほぼ同じ割合いるので当然男が余ってしまいます。
そこで王様は一計を案じました。
次のような法律を作ったのです。
1.女児を産んだ者には経済的に援助し更に子作りに励んでもらう。
2.一度でも男児を産んだ者は以後決して子供を作ってはならない。
これには国の男性たちも大喜び。
数十年もたてば国は女性の比率がぐんと上がるだろうとみな思いました。
問題。
実際には男女比はどうなると思いますか?
0908デフォルトの名無しさん
2009/05/01(金) 07:54:05の相似な図形3つに分けるにはどうしたらよいか。
0909デフォルトの名無しさん
2009/05/01(金) 13:13:25なんだっけ
女が上になってビンタしながらSEXすると
女が産まれやすいとか聞いた
0910デフォルトの名無しさん
2009/05/01(金) 13:36:53(1) 女をよろこばせない
(2) 浅いところで出す
だよ。
女が喜ぶほど酸が薄くなるらしい(=酸に弱いY 染色体が生き残りやすくなる)。
深いところに出す(=卵子への到達距離が短い)と、瞬発力のある
Y 染色体が勝つ可能性が高くなる。
0911デフォルトの名無しさん
2009/05/01(金) 13:44:11>>907を実践しても男女の出生確立は変わらないので結局、女は増えないしな。
というわけでプログラムを考えるまでもなく結論が出てしまいました。
0912デフォルトの名無しさん
2009/05/01(金) 13:48:36○確率
0913デフォルトの名無しさん
2009/05/02(土) 14:26:42ためになるスレだがあと1年早く聞きたかったな
0914代記
2009/05/26(火) 15:40:21を作成して欲しいです。丸投げをしてしまって申し訳ないんですが、お願いします。
0915デフォルトの名無しさん
2009/05/26(火) 17:35:210916デフォルトの名無しさん
2009/05/26(火) 18:57:271〜nの自然数からk個選ぶプログラムを考えればいいだけ
0917デフォルトの名無しさん
2009/06/02(火) 17:47:21丸投げですみませんが、どなたか知恵を貸してくださいです。お願いします。
0918デフォルトの名無しさん
2009/06/02(火) 18:40:510919デフォルトの名無しさん
2009/06/02(火) 23:15:50もう諦めた方がいいかもな。
0920デフォルトの名無しさん
2009/06/03(水) 03:31:29ぐぐれ
答えはある
0921デフォルトの名無しさん
2009/06/03(水) 13:41:11できました。ありがとうございます
0922デフォルトの名無しさん
2009/06/03(水) 21:17:29期限は明日の朝くらいでいいです。
0923デフォルトの名無しさん
2009/06/04(木) 10:08:48パスカルは使った事が無いのでLispで作っときました。
(defun d (a b c)
(if (< (- (* b b) (* 4l0 a c)) 0l0) (print "解が複素数である")))
勝手にパスカルに直してください。
0924デフォルトの名無しさん
2009/06/05(金) 01:20:32ありがとうございます。
0925デフォルトの名無しさん
2009/06/16(火) 01:52:25お願いします
0926デフォルトの名無しさん
2009/06/16(火) 18:08:51全て足し合わせても100には満たない.
0927デフォルトの名無しさん
2009/06/16(火) 19:28:330928デフォルトの名無しさん
2009/06/16(火) 20:12:12頭固いなw
0929デフォルトの名無しさん
2009/06/17(水) 00:09:260930デフォルトの名無しさん
2009/06/17(水) 20:00:47配列をfor文で回すので、良いのかな?
配列とかfor文って基本的な処理だと思うんだけど、うまく使えないんだよなぁ。
ネストしたループ文がゴチャゴチャしちゃって。
どなたかヒントいただけないでしょうか?
基本的な構造は、配列を使ったループ文で作ればいいのでしょうか?
0931デフォルトの名無しさん
2009/06/17(水) 23:52:530932デフォルトの名無しさん
2009/06/18(木) 01:40:241: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
0933930
2009/06/18(木) 02:20:11おぉ、C言語ですね。
俺の頭では、難しすぎました。面白そうな例題だったんで、取り組んでみたんだけど。
最初は、配列とFor文の組み合わせで、やっていたんですけど、配列を連結するとなると、
どんどん複雑になって、分けわからなくなりました。
簡単に紙の上の手書きでやってみたんですけど、数回やっている内に組み合わせが
多くなってきて、混乱しました。
+、−、連結の3種類に分類すると言うことが、肝ですね。
連結がパターンの中の一つと考えられなかったのが、残念です。
掲載された処理、読んでみます。
0934930
2009/06/18(木) 02:44:28パターンが3種類ということ以外にも、配列を複数個使って回してるようです。
Delphi6 personalで、C言語からPascalに書き換えてみたいと思います。
>>925さんじゃないですけど、非常に勉強になります。
932さん、ありがとうございました。
0935デフォルトの名無しさん
2009/06/18(木) 18:04:27932氏のプログラムと違うのは式を計算する方法だけ。
・・・だと思うんだけど、どう違うかまではまだ読みきれてない。
結果は同じでした。
FreePascalなんで変なオプション入ってる。
あと、同じ理由で文字コードUTF-8です。
http://one.freespace.jp/amber_ale/text/kadai.pas
0936デフォルトの名無しさん
2009/06/18(木) 22:53:12932さんも、935さんもネストが深くても、全体的にコードがすっきりして見やすいです。
課題をいかに分解し、一つ一つの処理にするかが、センスなんだなぁと思いました。
初心者には、勉強になります。
935さんのコードは、文字コードをSJISにして、オプションを一つ削除することで、
Delphi6 personalで実行できました。
0937デフォルトの名無しさん
2009/06/23(火) 14:31:05その結果を表示するプログラムを作りなさい。
神様まってますっ!!
0938デフォルトの名無しさん
2009/06/23(火) 17:39:320939デフォルトの名無しさん
2009/06/23(火) 18:08:16スレタイをいちおくまんかい嫁。
0940デフォルトの名無しさん
2009/06/24(水) 16:08:26お前は>>1を同じ数だけ読んでこい
>■全く分かってない阿呆も放置しないで優しく対応
これをやっただけだろ
0941デフォルトの名無しさん
2009/06/24(水) 16:42:38できますた
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)))))
0942デフォルトの名無しさん
2009/06/24(水) 20:51:42/*
(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);
}
0943デフォルトの名無しさん
2009/06/30(火) 14:09:37ガウス消去法で次の連立方程式を解くプログラム
x+y+z=33
2x+4y+6z=100
3x+9y+21z=225
cpad for free pascal用だお!
0944デフォルトの名無しさん
2009/06/30(火) 16:35:03問題が面白くないっす。
0945デフォルトの名無しさん
2009/06/30(火) 16:39:23http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9580.txt
0946デフォルトの名無しさん
2009/06/30(火) 16:50:17y=9
z=4
0947デフォルトの名無しさん
2009/07/04(土) 23:04:38文法はもうだいたい知ってるから、問題を解きながら勉強したいんだけど
俺にもPASCALの勉強をさせてよ
0948デフォルトの名無しさん
2009/07/05(日) 12:39:33取り合えずProject Eulerの問題でも解いとけ
0949デフォルトの名無しさん
2009/07/05(日) 19:13:060950デフォルトの名無しさん
2009/07/06(月) 14:07:49俺のような懐古厨が Pascal にすがりつくのはわかるけど、
新規に Pascal を勉強する意義がよくわからん。
メインの開発言語を持ってないと(だいたい C 系だわな)
苦労するだけだと思うが。
気に入ったと言うならまあ止めはしないが。
0951947の毒男
2009/07/07(火) 01:13:49ありがとう
そのホームページめっちゃいいなぁ でも、答えはないの?
>>949
あれ?pascal centralに入ってみたけど、どこに問題があんの?
英語のせいで、今頭がぐるぐるしてる…
>>950
懐古趣味とかじゃなくて大学でPASCALを習ってんねん。
俺の学科が情報科学科やからなぁ
だから、試験勉強にもなるし、早くうまくなりたいなぁと思ってさ
まぁ、とにかく答えてくれてありがとう
0952デフォルトの名無しさん
2009/07/07(火) 03:54:49Pascalに萌えちゃう人もいるんですよ。
0953デフォルトの名無しさん
2009/07/07(火) 09:39:20Pascal に萌えちゃったんだけどね。
0954デフォルトの名無しさん
2009/07/14(火) 13:39:041個の自然数nを適当決めて、nチームが参加する
リーグ戦の全試合を表示するプログラムを書きなさい。
0955デフォルトの名無しさん
2009/07/15(水) 20:34:35アルゴリズム+データー構造=PASCAL
http://www.fukkan.com/fk/VoteDetail?no=8797
廃刊だがおいらはBookOffで100円で買った。古本屋にあるかも。
問題等ではないが、この本のプログラムを位置から組めば非常に
勉強になると思われます。
この手の本は他にもあるんじゃないかな?
PascalじゃなくてDelphiだけど、しかもオブジェクト指向の本だから全然関係ないけど、
これ↓は読んどいた方がいいと思う。
Delphiオブジェクト指向プログラミング
0956デフォルトの名無しさん
2009/07/16(木) 01:35:490957デフォルトの名無しさん
2009/07/29(水) 11:07:250958デフォルトの名無しさん
2009/07/29(水) 12:23:09delphiだけ例外
0959デフォルトの名無しさん
2009/07/30(木) 06:41:150960デフォルトの名無しさん
2009/07/30(木) 07:18:140961デフォルトの名無しさん
2009/07/30(木) 07:23:270962デフォルトの名無しさん
2009/07/31(金) 19:29:12外部ファイルを扱う手続きをつくり、その手続きをプログラム内で複数回使って別々のテキストファイルを読み込みたいのですが
仮引数で外部ファイル名を指定できるようにするにはどうすればよいでしょうか。
すみません、仮引数の意味すらあいまいなので
書いてることが滅茶苦茶かも知れません。。。
0963デフォルトの名無しさん
2009/07/31(金) 20:11:350964デフォルトの名無しさん
2009/08/01(土) 06:09:59パスワードも当時から変わってないかとw
0965デフォルトの名無しさん
2009/08/07(金) 11:03:31出力する。ただし、入力する数式の各要素は、半角スペース一つで区切る事。
2、演算は整数型の範囲で行い、加算、減算、乗算、除算(div および mod)とし、
それぞれ、+、ー、*、d、m で表現する事。
3、使用できない文字が含まれる入力に対して、エラーの旨を出す事。
4、入力された式を計算、出力した後、再度入力待ち状態になり、空の文字列を
入力するとプログラムが終了する事。
以上の条件をみたすプログラムを組んでください!できるだけ早めに
お願いしますm(_ _)m
0966デフォルトの名無しさん
2009/08/08(土) 16:14:390967デフォルトの名無しさん
2009/09/20(日) 01:13:510968デフォルトの名無しさん
2009/11/11(水) 12:47:12同じ地点を2度以上通らずにいくものを全てあげ、一番近い経路を示せ。
道路網の形状、地点数n、距離は与えられるものとする。
という問題です。
よろしくお願いします。
0969デフォルトの名無しさん
2009/11/11(水) 13:05:200970デフォルトの名無しさん
2009/11/11(水) 22:04:100971デフォルトの名無しさん
2009/11/12(木) 04:08:32function内で再帰は可能のようですが、
procedureでの再帰は可能ですか?
うまくコンパイルできません。。
>>968
同士
0972デフォルトの名無しさん
2009/11/12(木) 14:58:53再帰の意味分かってる?
あとソース貼れ
0973デフォルトの名無しさん
2009/11/13(金) 00:05:28ttp://www1.axfc.net/uploader/Sc/so/54364.txt
pass:akaso
0974デフォルトの名無しさん
2009/11/13(金) 00:49:150975デフォルトの名無しさん
2009/11/17(火) 15:05:17x=2+logx (x≧1)
pascalでよろしくお願いします。
0976デフォルトの名無しさん
2009/11/18(水) 02:05:160977デフォルトの名無しさん
2009/12/11(金) 20:02:41以下のコマンドも使えるようにする事
i =テキスト挿入
p =単語の手前にポインタ移動
d =入力した数だけポインタの後ろの文字を消す
c =入力した文字列をポインタの後の文字列に置き換える
s =ポインタの後に空白挿入
q =終了
16日までです。よろしくお願いします。
0978デフォルトの名無しさん
2009/12/12(土) 00:35:050979>>977
2009/12/13(日) 18:27:060980デフォルトの名無しさん
2009/12/13(日) 18:40:340981デフォルトの名無しさん
2009/12/13(日) 21:12:02ああ、いいよ
でも今手元に環境がないから多少遅れると思うけどそれでいいなら
0982デフォルトの名無しさん
2009/12/14(月) 01:47:50ありがとうございます。何時ごろになりそうですか?
0983デフォルトの名無しさん
2009/12/14(月) 04:53:180984デフォルトの名無しさん
2009/12/14(月) 08:23:130985デフォルトの名無しさん
2009/12/14(月) 13:40:250986デフォルトの名無しさん
2009/12/14(月) 18:01:370987デフォルトの名無しさん
2009/12/15(火) 01:01:17ギリギリになるかもしれないけどおk?
0988デフォルトの名無しさん
2009/12/15(火) 01:59:56よろしくお願いします。
0989デフォルトの名無しさん
2009/12/15(火) 15:50:15からかってないで
0990デフォルトの名無しさん
2009/12/15(火) 16:23:240991デフォルトの名無しさん
2009/12/15(火) 18:34:320992デフォルトの名無しさん
2009/12/15(火) 19:25:270993デフォルトの名無しさん
2009/12/15(火) 21:42:350994デフォルトの名無しさん
2009/12/15(火) 23:19:490995デフォルトの名無しさん
2009/12/15(火) 23:59:480996デフォルトの名無しさん
2009/12/16(水) 00:49:011+2+3+4+5+6+7+8+9+10+11+12+13=91
トランプには、四つのスートがあるので、合計の数を更に4倍してみよう。
91×4=364
この数字、何処かで見たことはなかろうか? そう実は、太陽の周期、一年間の日数なのである。トランプは正に、一年と言う時間を支配しているのだ。
え? 一日足りない? ふーむ・・・では、良くトランプのデッキを確認して見よう。何やら他とは違った、奇妙なカードは無いだろうか? そう、ジョーカーである。ジョーカーを入れると丁度一年間、365日になるのだ。
え? ジョーカーが2枚入っているって? ふむ。お忘れだろうか? 一年が366日になる年があることを。そう、四年に一度の閏年である。それでジョーカーは、基本的に2枚入っているのである。
0997デフォルトの名無しさん
2009/12/16(水) 02:39:260998デフォルトの名無しさん
2009/12/16(水) 06:13:480999デフォルトの名無しさん
2009/12/16(水) 06:15:111000デフォルトの名無しさん
2009/12/16(水) 06:15:5210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。