- 締切済み
コンパイラの授業課題で分からない問題があります。教えてください
「簡単な例」の仕様を各自で拡張し(少なくとも2項目)、それが処理できるようにスキャナソース、パーザソースを作成せよ。 仕様の拡張の例としては、例えば次のようなものがある(が、これらの例以外を行うこと)。 変数に、さらに"PP", "QQ"が使えるようにする。プログラム例は下記の通り。 A=3*4-4; PP=A*A; QQ=PP+A; print PP; print QQ; print文の文法に、複数(任意個)の変数が使えるような拡張する。プログラム例は下記の通り。 A=3*4-4; B=A*A; print A, B; 冪乗計算(**)が使えるようにする。 A=10; B=3; C=A**B; print C; いくつかの初等関数(sqrtなど)が使えるようにする。 A=10*10; B=sqrt(A); print B; 「簡単な例」を参考に、 1次元配列を使えるようにするにはどのようにソースを変更すれば良いか考えよ。なお、配列は"dimension"を使って宣言する。配列名は"AA","BB","CC","DD"に限定する。 dimension AA[3]; A=9; B=2; AA[0]=2; AA[1]=A*A; AA[B]=A*A*A; print AA[0]; print AA[1]; print AA[2]; お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- R_Earl
- ベストアンサー率55% (473/849)
関連するQ&A
- 正規表現でパターン部分を変数処理できますか?
正規表現でパターン部分を変数にできるのでしょうか? $source = qq{*** テスト ***}; $pattern = qq{テスト}; if($source =~ /$pattern/g){ print "match"; }
- ベストアンサー
- Perl
- 配列のコピー及び printの .と,の挙動の違い
以下、Perlの仕様についてわからないことが2点あります。 1) 配列のコピーは実態をコピーするようですが、参照扱いになるのは引数で与えた時でしょうか? 2) 下の例で@aは 6という個数を返し、@bは 1bcという配列の中身を返します。printの.と,で挙動が変わる理由が知りたいです。 例) my @a = qw(1 2 3 a b c); my @b = @a; splice @b, 1, 3; print @a . "\n"; # 6 print @b , "\n"; # 1bc
- ベストアンサー
- Perl
- 正規表現の書き方に困っております。
あるSQLのダンプを変換するプログラムをPerlで書いているのですが、 うまく正規表現が書けなくて困っております。 データの途中に,が有ると、うまくいきません。 ''の中に囲まれた,は無視するという正規表現を書きたいのです。 また、'''B'も正しく処理できれば、完璧です。 #!/usr/bin/perl use strict; use warnings; #my $a = qq{'A','B',1}; --> うまくいく ['A']['B'][1] #my $a = qq{'A,','B',1}; --> うまくいかない ['A] ['] ['] my $a = qq{',','''B',1}; --> もっとうまくいかない ['][']['] if($a =~ /(.+?),(.+?),(.+?)/){ print "[$1]\n"; print "[$2]\n"; print "[$3]\n"; }else{ print "ERR!\n"; } exit; __END__
- ベストアンサー
- Perl
- スモールコンパイラの制作という参考書について
現在大学で, 「スモールコンパイラの制作で学ぶプログラムのしくみ」という参考書を勉強しているのですが, 出題された課題の中でどうしても解らない問題があるのです.上記の参考書を学習した方だけではなく, 幅広い方からご教授を頂きたいと思っておりますので何卒宜しくお願いいたします. 課題の内容は, (1) 関数の引数として 1 次元配列を渡せるように機能拡張せよ. 渡し方は C言語の方法に習え.すなわち, 配列の要素全体のコピーを渡すのではなく, 配列の先頭の番地を渡せ.以下のプログラム ( 配列の要素の和と配列のコピー ) で動作を確認せよ. I sum(aI a[], I n){ vI s = 0, i; for(i = 0; i < n; i = i+1;){ s = s + a[i]; } return s; } aI a[16]; for(i = 0; i < 16; i = i+1;){ a[i] = i * i; } println sum(a, 16); }$ { I copy(aI a[], aI b[], I n){ vI i; for(i = 0; i < n; i = i+1;){ b[i] = a[i]; } return 0; } vI i; aI a[16], b[16]; for(i = 0; i < 16; i = i+1;){ a[i] = i; } dummy = copy(a, b, 16); for(i = 0; i < 16; i = i+1;){ println b[i]; } }$ 用いるコンパイラは Java 言語で記述されており, ソースファイルは, http://book.gihyo.co.jp/s-com/ から取得できるようになっております.宜しくお願いいたします.
- 締切済み
- Java
- 変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を
変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか,具体的な例を用 いて説明しなさい.という課題があるのですが、特に「問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか」というのがものすごくわかりにくいです。申し訳ありませんが教えてください。
- 締切済み
- 数学・算数
- if と配列の組み合わせ
なにやら思いつかなかったのでこちらで相談します。 配列のaと変数bがこんな感じだったとします。 int a[4]={1,3,4,7}; b=6; もしbが配列aのどの数字にも当てはまらないならこうしますよ もしbが配列aのどれかの数字に当てはまるならこうしますよ といったプログラムを作りたいのですが短く処理できる プログラムを思いつきません。(理論演算子を使えば長くなる) どうすれば短く処理できますか?
- ベストアンサー
- C・C++・C#
- 数A背理法のもんだいについて
【問題】 √6が無理数であることを、背理法を用いて証明せよ。 という問題の解答について質問です 【解答】 √6=b/a(a、bは整数)と表せると仮定すると、√6a=bより、両辺を2乗して、 6aa=bb・・・(1) ★aa,bbにふくまれる素数2の累乗の指数は、いずれも偶数であるから 6aa=2・3・aaに含まれる2の累乗の指数は奇数、bbに含まれる2の累乗の指数は偶数であり、素因数分解の一意性より6aa≠bbとなり、(1)に矛盾★ ゆえに、√6は無理数である ★ではさんだ部分がよくわかりません… あと、別解として √6が有理数だとすれば、√6=q/p(p,qは互いに素な自然数(整数?))と表せる。 これより、6pp=qq ☆左辺が2で割り切れるので右辺も2で割り切れなければならず、qは2で割り切れる。 よって、右辺が4で割り切れるので左辺も4で割り切れなければならず、qも4で割り切れる。☆ これは、p、qが互いに素であることに矛盾する。 ゆえに、(背理法により、)√6は無理数である も可能でしょうか? でも☆の部分で、「左辺に6ってあるから2じゃなくて3で割り切れるので~」という風にもなる…?とか考え出したらよくわからなくなっちゃって… ★の部分と☆の部分についてお願いします(> <)
- ベストアンサー
- 数学・算数
- 配列の数を途中で増やすには?
はじめまして。 この度、以下のようなプログラムを作りました。 が、途中で配列の数を増やすことになってしまいました。 ------------------------------------------------ struct a{ int int_a; long int_b; }; struct b{ a *aa; }; void main(void){ b *bb; bb = new b[3]; bb[0].aa = new a[5]; bb[1].aa = new a[4]; . . . } ------------------------------------------------ 具体的には、'bb'の配列を3から5に増やすようなやり方を探しています。 元の配列より大きい配列をつくり、そこにコピーすればいいと考えたのですが、 'bb'内の'aa'の配列も動的に作成しているため、それも出来ない状況です。 どなたかやり方を知っている方がいましたら、教えていただきたいです。 下手な説明ですいません。
- ベストアンサー
- C・C++・C#
- 変数名を $_ にしたくない
&xxx("AA","BB"); sub xxx{print @_} ↑のソースで sub に @_ という名前の配列に 引数を渡すことができたけど、@z という名前の配列に 引数を渡したい場合はどういうソースになるんですか? {print @_} は {print @_;} のようにセミコロンを 書いてあるのが普通だと思うけど、このような場合は セミコロンを省略して問題があったりしますか? 下の foreach についても $_ というのを $z にするには どういうソースにしたらいいか教えてください。 $xx{"A"}= "aaa"; $xx{"B"}= "bbb"; $xx{"C"}= "ccc"; foreach(keys %xx){print "添え字は$_で値は$xx{$_}<br>"}
- ベストアンサー
- CGI