トップページ⇒tech
1001コメント358KB

宿題手伝います

レス数が1000を超えています。これ以上書き込みはできません。
0001RinaNGNG
夏休みなので厨対策に新スレ立てました.
前スレ:http://pc3.2ch.net/test/read.cgi/tech/1026138039/

前スレより抜粋.

1 :かおる :02/07/08 23:20
こんにちは。えれなの妹のかおるです。

前スレは恭祐さんの「ほう、宿題とはな。」です。
http://pc.2ch.net/test/read.cgi/tech/1024592344/
それ以前の人たちは、>>2-10あたりにかかれるでしょう。

宿題とか手伝いますけど、以下の事項は守ってほしいです。
・マルチポストは厳禁です。
・キーワードが分かっているなら、http://www.google.co.jp を活用すること
・質問内容がちゃんと日本語になっていること
・言語名を入れること。
・自分の力で頑張ってみたことを伝えられる人。
・どこまでわかったのかを書くこと。
以上です。このスレだけのおつきあいですが、よろしくおながいします。

2 :デフォルトの名無しさん :02/07/08 23:21
手助けはするな、助言はしてやれ。

3 :かおる :02/07/08 23:22
登場人物&過去スレ 1/2

●お姉さん
あなたの宿題、お姉さんが答えます
http://piza.2ch.net/tech/kako/972/972032579.html
で登場。

●麻衣
お兄ちゃんの宿題、私が答えるよ
http://pc.2ch.net/tech/kako/982/982853418.html
で初登場。可愛い妹キャラ

●お兄ちゃん(名称不明)
宿題見てやるよ
http://pc.2ch.net/tech/kako/1003/10038/1003838158.html
で初登場。しかし、女性がいいという影の圧力により
1以外には登場せず。

●怜
宿題みてあげるっ
http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
で初登場。お兄ちゃんの恋人。
結構親切に答えてくれる年上キャラ。
0002デフォルトの名無しさんNGNG
にげっとかな?
0003デフォルトの名無しさんNGNG
>>1
乙
対応が早いね。
0004Rina ◆tI333vNE NGNG
1です.
前スレ常駐してたわけではないので,
常連さんで気がついたリンクあったら書き足しておいてください.
0005デフォルトの名無しさんNGNG
>>4
前スレの内積、
 if (n == 0) {
  return 0.0;
 }
↑これいらなくない?
0006Rina ◆tI333vNE NGNG
ちなみにRinaはJavaとCとPHPぐらいしかできません.
C/C++の宿題は専用スレがあるのでこちらへどうぞ.
  http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0007Rina ◆tI333vNE NGNG
>>5 ボタン押してから気がついたので突っ込まないようにw
0008デフォルトの名無しさんNGNG
前スレは『かおる』ですが何か?
0009おねがいします!NGNG
大学の課題でどーしてもわからないのがあります。
(問題)数を12個読み込む。それぞれが車の月間売り上げ数だとする。
売り上げが一番多かった月、売り上げが一番伸びた月を見つけて印刷する
プログラム(Hanbai)を書きなさい。というものです。おそらく配列を使う
らしいのですが。言語はjavaです。

言語はjavaです。
0010デフォルトの名無しさんNGNG
印刷するの?
0011デフォルトの名無しさんNGNG
>>10
多分日本人に理解しやすいように和訳してくれてるんだと思われ。
0012デフォルトの名無しさんNGNG
一月の売上の伸びが分からないという罠
0013おねがいします!NGNG
印刷というか多分それを書き出すプログラム?なのかなあ。
自分でもよくわかりません。はあーー。
0014デフォルトの名無しさんNGNG
(・∀・)
0015デフォルトの名無しさんNGNG
>>14
ワラタ
0016デフォルトの名無しさんNGNG
>>9
どこがわからないんだ。(複数可)
1) 数の読み込み
2) 12個の読み込み
3) 売り上げの一番多かった月の見つけ方
4) 売り上げの一番伸びた月の見つけ方
5) 3) 4) の結果の印刷(標準出力への表示でいいのか?)の仕方
6) Javaのコンパイル、実行
7) Javaのソースの書き方

配列は1)2)で読み込んだ月間売り上げ数を保持するのに使用し、
それを3)4)で使う。
0017名無しさん@カラアゲうまうまNGNG
売り上げの伸びって前月比? だと>>12の問題がある。
0018デフォルトの名無しさんNGNG
>>17
無論、1月は除外でしょ?って解釈は駄目なん?
0019名無しさん@カラアゲうまうまNGNG
>>18
つーことを明確にしてない問題が欠陥仕様。
0020デフォルトの名無しさんNGNG
「仕様が不明確です」と言うかどうかも採点対象という罠
0021デフォルトの名無しさんNGNG
書き込もうと思ったら改行が多すぎって突っ込まれた罠.
0022デフォルトの名無しさんNGNG
すまん、sage忘れた. 意ってきます.
0023デフォルトの名無しさんNGNG
普段Javaをメインで使っている人物が、今は出払っている罠
0024Rina ◆tI333vNE NGNG
いや、テケトーに作ったのがあるんだけど書き込めない…(汗
いっそ改行とっぱらって書き込もうか…。
0025デフォルトの名無しさんNGNG
>>24
いくつかのレスに分けたらよいのでは?
0026Rina ◆tI333vNE NGNG
import java.io.*;

//エラー処理は一切してない.
public class Hanbai {
/**
* 12ヶ月分のデータを読む.
*
* データフォーマットの指定がなかったので, 1行につき1月分の
* 売り上げが書き込まれたテキストファイルだと仮定.
*/
public static int[] readData(String dataFileName) {
BufferedReader in = null;
// 開ける
try {
FileReader fileReader =
new FileReader(dataFileName);
in = new BufferedReader(fileReader);
} catch (Exception e) {
e.printStackTrace();
System.out.println("も、もうだめぽ…");
System.exit(1);
}

// 読む
int[] result = new int[12];
for (int i = 0 ; i < result.length ; i++) {
try {
String tmp = in.readLine();
result[i] = Integer.parseInt(tmp);
} catch (Exception e) {
e.printStackTrace();
System.out.println("データファイルがなってねーよ, ハゲ");
System.exit(1);
}
}

// 閉じる
try {
in.close();
} catch (Exception e) {
// do nothing.
}

return result;
}
0027Rina ◆tI333vNE NGNG
// main
public static void main(String[] args) {
int[] tmp = readData("datafile");

printMax(tmp);

printMaxDiff(tmp);
}

/**
* 最大売り上げの月を表示
*/
public static void printMax(int[] data) {
System.out.println("売り上げが最大なのは");
System.out.print(" ");

int max = data[0];
for (int i = 1 ; i < data.length ; i++) {
if (data[i] > max) {
max = data[i];
}
}

for (int i = 0 ; i < data.length ; i++) {
if (data[i] == max) {
System.out.print((i + 1) + "月 ");
}
}
System.out.println();
}


/**
* 差分が最大な月を求める.
*/
public static void printMaxDiff(int[] data) {
System.out.println("売り上げの伸びが最大なのは");

int maxDiff = data[1] - data[0];
for (int i = 1 ; i < data.length - 1 ; i++) {
int diff = data[i + 1] - data[i];
if ( diff > maxDiff) {
maxDiff = diff;
}
}

for (int i = 0 ; i < data.length - 1 ; i++) {
if ((data[i + 1] - data[i]) == maxDiff) {
System.out.println(" " + (i + 1) + "月 -> " + (i + 2) + "月");
}
}
}
}
0028デフォルトの名無しさんNGNG
けっこう長くなるんだね。
0029Rina ◆tI333vNE NGNG
もっと短く, かつ効率的にできるけどやってない.
コメントの分もあると思われ.
必要なら>>9がやるでしょう.
0030デフォルトの名無しさんNGNG
てか、配列使う必要性あんの?
0031おねがいします!NGNG
ありがとうございます!!
かなり助かりました。ちょっと感動。。。
0032Rina ◆tI333vNE NGNG
使わない方法教えて, 気になる.
使った方がコードの見通しがいいと思ったんだけど.
0033デフォルトの名無しさんNGNG
>>32
最大値の候補だけ保持しとくとか?
0034デフォルトの名無しさんNGNG
>>33
売上の最大の月が複数あったらどうすんだ ? 結局配列が必要だよ。
0035Rina ◆tI333vNE NGNG
>>34
だよね…あせったよw
0036デフォルトの名無しさんNGNG
>>35
脱げ
0037Rina ◆tI333vNE NGNG
マジですか(汗
当方、ぶちゃいくなので止めといたほうがいいと思われ.
0038デフォルトの名無しさんNGNG
>>37
ブス専もいるんだよ。この世には。
0039Rina ◆tI333vNE NGNG
ガクガクブルブルΣ((((゜Д゜)))ガクガクブルブル
0040デフォルトの名無しさんNGNG
>配列
Collections Framework を使えということではないか?
0041Rina@Nethack ◆tI333vNE NGNG
…納得.
0042Rina ◆tI333vNE NGNG
実は私が厨だというワナ
0043おねがいします!NGNG
もう一つ。日付けを2つ記入して、その間の日数を書き出すプログラム(Nissuu.Java)を作りなさい。
という問題です。何度もごめんなさい。
実行例はこんなかんじらしい。
日付けを2つ記入してください。
何年? 2002
何月? 7
何日? 27
何年? 2003
何月? 7
何日? 27
日数は365日です。
その年はうるう年かどうかを考えなきゃいけないし。。。
何月は何日あるのかということは、
int month[]=new int[12];
month[0]=31; month[1]=28; month[2]=31; month[3]=30;
month[4]=31; month[5]=30; month[6]=31; month[7]=31;
month[8]=30; month[9]=31; month[10]=30; month[11]=31;
でたぶん配列を使うのかなー。
こうしておくとX月Y日が1月1日から数えて何日目かは、
days=0;
for(i=0; i< x-1; i++)days= days+month[i];
days=days+y-1;
2002年の4月1日と2002年の7月27日の間に何日あるかは、2002年の
4月1日が1月1日からP日あって、2002年の7月27日がQ日あるとすると
Q-Pで求まると書いてあります。
0044デフォルトの名無しさんNGNG
>>43
素直にtimeに頼りなさい。
0045Rina ◆tI333vNE NGNG
今Windows起動しててJavaかけないんで
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/Calendar.html
これで我慢してください。
0046▽・w・▽NGNG
いつのまにか新しくなってる・・。
0047デフォルトの名無しさんNGNG
>>43
それだけ分かってれば書けるだろ?
何が分からないんだ?
0048おねNGNG
閏年の時はどうすればいいかわからなかった(泣)
0049Rina ◆tI333vNE NGNG
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
// うるう年
}
0050デフォルトの名無しさんNGNG
何故Winを起動しえいたらJavaが書けないのだ?
0051Rina ◆tI333vNE NGNG
>>50
Windows版のSDKが入ってなかったり、デュアルブートだから
再起動が面倒だったり、Meadowの使い心地がイマイチだったり。
0052デフォルトの名無しさんNGNG
>>51
この程度のコードにコンパイル確認なんかいらんだろ。
0053Rina ◆tI333vNE NGNG
メモ帳で打つのも嫌。
ごめんなさい、emacsマンセーなんです。
0054デフォルトの名無しさんNGNG
xyzzyを薦めてみる・・・
0055デフォルトの名無しさんNGNG
>>53
俺なんかココでお試しコード書くときは、このテキストエリアに
直書きするぞ(藁
0056デフォルトの名無しさんNGNG
環境に優しい>>55のいるスレ
0057Rina ◆tI333vNE NGNG
>>54
これいいね。五目並べまでついてるのは笑ったw

んじゃー早速コードを。

import java.util.*;

public class Nissuu {
public static void main(String[] args) {
hoge();
}

public abstract void hoge();
}

これを継承すれば問題ない。

・・・すんません、ネタです。ご飯食べたら書きますので
何卒ご容赦を。
0058デフォルトの名無しさんNGNG
Cです。

int i;
if(&i) ;

この条件式が必ず真となることを証明せよ。


全然分かりません・・・
0059デフォルトの名無しさんNGNG
>>58

・auto変数はスタックに確保される
・そのアドレスは当然ながら、NULL(0)ではない
0060デフォルトの名無しさんNGNG
if(&i)はif(&i!=0)と等価です。
0はpointerとしてはヌルポインタを表すため、&iがヌルポインタで
ないことを判定しているわけです。ヌルポインタはいかなるオブジェクトも
指し示さないポインタであることが保証されているためiというオブジェクト
を指す&iとは絶対に一致しません。よってif(&i)は真となります。
0061デフォルトの名無しさんNGNG
>>58

つーか、こんなのを課題に出す意図がちょっと不明。
「C言語」そのものを学ぶことにどういう必要性があるんだろう?
0062デフォルトの名無しさんNGNG
>>61
どういう授業の課題かにもよるんじゃない?
0063Rina ◆tI333vNE NGNG
Athron1G,メモリ256での結果。
Java>gcc>.NET 71回
Java=gcc>.Net 6回
gcc>Java>.Net 23回

とりあえず100回やってみました。

じゃークライアントから電話掛かってきたのでお仕事いってきます。
…行きたくない。
0064Rina ◆tI333vNE NGNG
誤爆しました、逝ってきます。
0065デフォルトの名無しさんNGNG
>>63
スレチガイ
0066デフォルトの名無しさんNGNG
>>1に長文書くな
このスレ立てた香具師は回線で首吊って氏ね
0067デフォルトの名無しさんNGNG
>>66
さっきまでいたけどお仕事に出かけていったよ
0068デフォルトの名無しさんNGNG
強気な女(・∀・)イイ!!
>>1
ケコーンしてください。
0069デフォルトの名無しさんNGNG
66はRinaに構ってもらいたいんだね、きっと (・∀・)ニヤニヤ
0070デフォルトの名無しさんNGNG
まあ、ネカ(以下略
0071デフォルトの名無しさんNGNG
Rinaさんって女性なの?
じつは稲川亮二→R・inaとか?
0072デフォルトの名無しさんNGNG
>じつは稲川亮二→R・inaとか?
いやーん
0073デフォルトの名無しさんNGNG
すいません私も丸書きさせてもらいます。本当に分かりません。
誰か助けてください。
「x円(x>=0)を1円玉、5円玉、10円玉、50円玉、100円玉、500円玉 
で両替する方が何通りあるかを調べるプログラムを作成せよ。」
0円を両替する方法は1通り、マイナスの金額を両替する方法は0通りにしろ
とのヒントがついています。どなたかよろしくお願いします。
0074デフォルトの名無しさんNGNG
言語は?
0075デフォルトの名無しさんNGNG
すいません73、C言語です
0076デフォルトの名無しさんNGNG
500円から割っていって、その個数を1ずつ減らしていけば
いいんじゃない...?
007773NGNG
すいません、、、なんとか書いていただけないでしょうか。
ずうずうしいこと言って本当にすいません。
0078デフォルトの名無しさんNGNG
数式書いてよ。
そしたら、実装するよ。
0079こんなんどう?NGNG
#include <stdio.h>


int ryogae(int x, int coin, int d)
{
if( coin <= 1 ) return 1;

int c = 0;

int max_i = x / coin;

int i;
for(i = 0; i <= max_i; ++i)
{
c += ryogae(x - coin * i, coin / d, 7 - d);
}

return c;
}


int ryogaesousuu(int x)
{
if( x <= 0 ) return 1;

return ryogae(x, 500, 5);
}


int main()
{
int x = 0;

scanf("%d", &x);

printf("%d\n", ryogaesousuu(x));

return 0;
}
008079NGNG
あ、だめっぽいすまん
008179NGNG
いや、あっているとおもう
0082分かりやすさ優先NGNG
>>73
#include <stdio.h>

int exchange(int x){
int c=0,y1,y5,y10,y50,y100,y500;

if(c<0) return 0 ;

for(y500=0;y500<=x;y500+=500)
for(y100=0;y500+y100<=x;y100+=100)
for(y50=0;y500+y100+y50<=x;y50+=50)
for(y10=0;y500+y100+y50+y10<=x;y10+=10)
for(y5=0;y500+y100+y50+y10+y5<=x;y5+=5)
for(y1=0;y500+y100+y50+y10+y5+y1<=x;y1+=1)
if(y500+y100+y50+y10+y5+y1==x) c++;

return c ;
}

int main(){
int x;
printf("いくら?");scanf("%d",&x);
printf("%d通り\n",exchange(x)) ;
return 0 ;
}
0083デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>

static int coins[] = { 1, 5, 10, 50, 100, 500 };
static int n_coins = sizeof(coins)/sizeof(coins[0]);

int countup( int x, int n ) {
if ( x == 0 ) return 1;
if ( x < 0 || n < 0 ) return 0;
return countup( x - coins[n], n ) + countup( x, n - 1 );
}

int main( int argc, char **argv ) {
int x, ans;
if ( argc != 2 )
return 1;
x = atoi( argv[1] );
if ( x < 0 )
ans = 0;
else
ans = countup( x, n_coins - 1 );
printf( "%d\n", ans );
return 0;
}
008479NGNG
いまさらながら、さっきの直した。
#include <stdio.h>

int ryogae(int x, int coin, int d)
{
if( coin <= 1 ) return 1;

int c = 0;

int max_i = x / coin;

int i;
for(i = 0; i <= max_i; ++i) c += ryogae(x - coin * i, coin / d, 7 - d);

return c;
}

int ryogaesousuu(int x) { if( x < 0 ) return 0; return ryogae(x, 500, 5); }

int main()
{
int x = 0;

scanf("%d", &x);

printf("%d\n", ryogaesousuu(x));

return 0;
}
0085デフォルトの名無しさんNGNG
forの6重ループ。
ここに直で書いてたら、もう出てたという罠。
008683NGNG
if ( x < 0 )
ans = 0;
else
これいらないやゴメン
008779NGNG
>他の回答者さんたち
テストがてら、各xに対する組み合わせ数でもはりませんか?
008883NGNG
あってるかな?
x = 10 => 4
x = 50 => 37
x = 100 => 159
x = 150 => 451
x = 500 => 19162
008979NGNG
>>88(>>83)
同じになりました!
009082NGNG
x=10 => 4
x=50 => 37
x=100 => 159
x=150 => 451
x=500 => 19162
009179NGNG
をを!いいかんじ。
ただ、>>73はどこにいったのか?
009282NGNG
しかしなんというか…、つっこみたくなる
> 7 - d
009379NGNG
>>92
だめっすか?
009483NGNG
(;´∀`)=3 よかった。ってSchemeで書いてあった見本をCに翻訳しただけなんだけど
x = 1000 => 248908
5000とか入れると止まっちゃうねえ。もっと速いアルゴリズムないのかな
009582NGNG
いや…、よく気づくね
009679NGNG
>>95
思いついたときはうれしかったっす。
0097デフォルトの名無しさんNGNG
再帰と7-dによる>>79と、6重ループの>>82では、
どっちが評価高いんでしょ。
cの宿題的には、>>79もありかもネ。
009879NGNG
速さは>>82が一番だろうね。
009982NGNG
いやいや>>82は一番遅い。

82を5重ループにすれば、
オーダーで言えば再帰にしろループにしろ
全てカウントするタイプだからどれも同じ程度
010082NGNG
と思ったら>>83もそのままだと>>82程度だった
010179NGNG
他人の宿題ながら、なんだか楽しかった。
010273NGNG
すいません73です。徹夜でこの問題考えていたもんでいつの間にか机につっぷしてました。
 
010373NGNG
みなさんこんな時間に本当にありがとう!!!
しかも私意識飛んじゃってて本当にすいませんでした。
010483NGNG
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ 計ってみたらダントツで遅かった.......鬱氏
  ∪∪
0105デフォルトの名無しさんNGNG
二日酔いで昼過ぎに起きたら、
今日締め切りのレポートが完成して机の上に置いてあった。
という心境だな。
010679NGNG
わしも徹夜でしたので体力使い果たしました。
寝ます
010773NGNG
うっ、、、返す言葉もございません。
010882NGNG
速さ云々はたいした問題じゃないな
解析的に求まるし

おやすみ
010973NGNG
本当にありがとうです。
0110デフォルトの名無しさんNGNG
>>73
どうでもいいけど徹夜で考える前に google で調べてみたの?

"小銭の払い方 C"

で検索してみ。
0111デフォルトの名無しさんNGNG
>>110
かかるのか・・・?
0112質問ですNGNG
質問です。下のプログラムと同じ結果を表示するように、
グローバル変数を用いて書くのってどうやりますか?

#include<stdio.h>
int func(int *a,int *b)
{
*a-=3;
*b+=3;
return(*a+*b);
}
void main(void)
{
int a=5,b=5,c;

c=func(&a,&b);
printf("a:%d,b:%d,c:%d\n",a,b,c);
}
0113デフォルトの名無しさんNGNG
>>112
素直にポインタマスターしなさい。
0114デフォルトの名無しさんNGNG
お聞きしたいことがあります。
流れ図というのは必ずしも最適なものではないということなのですが、何故なのでしょうか?
また、流れ図が最適でないのなら何を利用すればいいのでしょうか?
よろしくお願いします。
0115デフォルトの名無しさんNGNG
>>112
#include<stdio.h>

int a=5,b=5,c;
int func(int *a,int *b)
{
*a-=3;
*b+=3;
return(*a+*b);
}
void main(void)
{
c=func(&a,&b);
printf("a:%d,b:%d,c:%d\n",a,b,c);
}
0116 NGNG
>>112
#include <stdio.h>
int global;
int main() {
 puts("a:2,b:8,c:10");
 return 0;
}
0117デフォルトの名無しさんNGNG
>>114
まずはその「最適」の意味を教えてくれ。
0118デフォルトの名無しさんNGNG
>>116
詰めが甘いな。>>112の main の返り血が
void になっているのに気が付いていたか?
0119116NGNG
>>118
同じ結果が表示されることしか要求されていないはずだが?
0120デフォルトの名無しさんNGNG
>>119
同じ結果が表示される事を「保証した」文章(=規格)ってある?
0121デフォルトの名無しさんNGNG
<2つの配列に含まれる共通の要素をプリントするプログラム>
配列aに10個のデータを入力しそれを大きい順番に並べ、その中に同じ値のものがあれば
消去して,空いたスペースに次の要素をシフトするという部分を関数するのがわかりません。
下のプログラムを完成させてやってください。お願いします。
#include<stdio.h>
#define SIZE 10
int main(void)
{
int a[SIZE],b[SIZE];
int i,j,work,k;

for(i=0;i<SIZE;i++)
{printf("a=");scanf("%d",&a[i]);}

for(k=0;k<SIZE;k++)
{printf("b=");scanf("%d",&b[k]);}

for(i=0;i<SIZE-1;i++)
{for(j=i+1;j<SIZE;j++)
{if(a[i]<a[j]){work=a[i];a[i]=a[j];a[j]=work;}}}

for(i=0;i<SIZE;i++)
{printf("%d ",a[i]);}

printf("\n");

for(k=0;k<SIZE;k++)
{printf("%d ",b[k]);}

printf("\n");

printf("共通の要素は");
for(i=0;i<SIZE;i++)
{for(k=0;k<SIZE;k++)
{if(a[i]==b[k])

{printf("%d ",a[i]);}}}}
0122デフォルトの名無しさんNGNG
>>83をループに改良してみた。
速度的にひけをとらないはず。
2000円札もへっちゃらだよう。
x = 10 => 4
x = 50 => 37
x = 100 => 159
x = 150 => 451
x = 500 => 19162
x = 1000 => 248908
x = 5000 => 285913936

int countup(int x, int *coin) {
int n = 0;
if (*coin == 1) return 1;
for (; x > 0; x -= *coin)
n += countup(x, coin+1);
return (x == 0) ? n+1 : n;
}

int ryogae(int x) {
int coins[] = {500, 100, 50, 10, 5, 1};

return countup(x, coins);
}
0123デフォルトの名無しさんNGNG
i番目以降をシフト。
void shift(int i) {
for (; i < SIZE-1; i++)
a[i] = a[i+1];
a[i] = ...; /* <= 最後を埋める値。 */
}
0124デフォルトの名無しさんNGNG
誰もいないの? >>121はこんなもんでどう?
#include <stdio.h>
#define SIZE 10
void input(char *s, int *p) {
int i = 0; for(;i<SIZE;i++) { printf(s); scanf("%d",&p[i]); } }
void sort(int *p) {
int i, j; for (i = 0; i < SIZE; i++) for (j = i+1; j < SIZE; j++)
if(p[i]<p[j]) {int work = p[i]; p[i]=p[j]; p[j]=work; } }
void display(int *p) {
int i = 0; for (; i < SIZE; i++) printf("%d ", p[i]); printf("\n"); }
void shift(int *p) {
int i = 1; for (; i < SIZE; i++) while (p[i-1] != p[i])
{ int j = i; for (; j < SIZE-1; j++) p[j] = p[j+1]; p[j] = 0;} }
void answer(int *p, int *q) {
int i, k; printf("共通の要素は"); for(i=0; i< SIZE; i++)
for (k=0; k< SIZE; k++) if (p[i] == q[k] && p[i] != 0)
printf("%d ", p[i]); }
int main(void) {
int a[SIZE],b[SIZE];
input("a=", a); input("b=", b);
sort(a); sort(b);
display(a); display(b);
shift(a); shift(b);
answer(a, b);
}
0125デフォルトの名無しさんNGNG
>123
121のプログラムに入れ込んでもらえませんか?あほですんまそん。
0126デフォルトの名無しさんNGNG
>>125
宿題肩代わりスレではない。
0127デフォルトの名無しさんNGNG
>>125
>>124の
void shift(int *p) {
int i = 1; for (; i < SIZE; i++) while (p[i-1] != p[i])
{ int j = i; for (; j < SIZE-1; j++) p[j] = p[j+1]; p[j] = 0;} }
を使って shift(a); を置けば。
0128127NGNG
void shift(int *p) {
int i = 1; for (; i < SIZE; i++) while (p[i-1] == p[i] && p[i] != 0)
{ int j = i; for (; j < SIZE-1; j++) p[j] = p[j+1]; p[j] = 0;} }
だな。
0129121NGNG
>>124 どうもです。でもきちんと実行できませんでした。
>>126 そのとおりです。すみません。
>>127 おき方がわからないんです。
0130127NGNG
shift はソートしたあとにしか動かないので
sort(a); shift(a); でないとダメ。
shift 直したら124は動いたよ。テストしなかったな。>>124

1 2 3 4 5 6 7 8 9 1
1 2 3 4 5 1 2 3 4 5
↑sort shift の前、入力したまんま
↓結果
9 8 7 6 5 4 3 2 1 0
5 4 3 2 1 0 0 0 0 0
共通の要素は5 4 3 2 1

これでいいんでしょう?
0131127NGNG
関数の置き方がわからないのか?
使う前にmainの前に void shift(int *p) { .... } を置いて
main の中で shift(a); ってやればいいんだけど。
よく分からんので124を直したの書いておくよ。
#include <stdio.h>
#define SIZE 10
void input(char *s, int *p) {
int i = 0; for(;i<SIZE;i++) { printf(s); scanf("%d",&p[i]); } }
void sort(int *p) {
int i, j; for (i = 0; i < SIZE; i++) for (j = i+1; j < SIZE; j++)
if(p[i]<p[j]) {int work = p[i]; p[i]=p[j]; p[j]=work; } }
void display(int *p) {
int i = 0; for (; i < SIZE; i++) printf("%d ", p[i]); printf("\n"); }
void shift(int *p) {
int i = 1; for (; i < SIZE; i++) while (p[i-1] == p[i] && p[i] != 0)
{ int j = i; for (; j < SIZE-1; j++) p[j] = p[j+1]; p[j] = 0;} }
void answer(int *p, int *q) {
int i, k; printf("共通の要素は"); for(i=0; i< SIZE; i++)
for (k=0; k< SIZE; k++) if (p[i] == q[k] && p[i] != 0)
printf("%d ", p[i]); }
int main(void) {
int a[SIZE],b[SIZE];
input("a=", a); input("b=", b);
display(a); display(b);
sort(a); sort(b);
shift(a); shift(b);
display(a); display(b);
answer(a, b);
}
0132デフォルトの名無しさんNGNG
>>131
インデント付けろとはいわんが空行くらい入れてください・・・。
0133121NGNG
>>130
 そうです!でも0はいりません。すみません、説明不足でした。
0134127NGNG
>>133
うーん、この宿題は0が入力されたらどうするの?(0も有効なの?)
0を無視していいなら表示するときに飛ばせばいいと思うけど。
そうでなかったら、配列の長さを変数で保持して、shiftで減らすとか・・・。

>>132
上の修正ができたら、空行いれるよ。
つーか、文句は124に言ってくれ。
0135121NGNG
>>134入力された0は有効です。
 例 1、3、5、0、7、5
        ↓
   7、5、3、1、0 
0136127NGNG
できたよ。テストしてね。
1 0 3 4 2 1 6 3 0 2
0 5 2 1 6 4 7 1 0 0
6 4 3 2 1 0
7 6 5 4 2 1 0
共通の要素は6 4 2 1 0

#include <stdio.h>
#define SIZE 10

void input(char *s, int *p) {
int i = 0;

for(;i<SIZE;i++) {
printf(s);
scanf("%d",&p[i]);
}
}

void sort(int *p) {
int i, j;

for (i = 0; i < SIZE; i++)
for (j = i+1; j < SIZE; j++)
if(p[i]<p[j]) {
int work = p[i];
p[i]=p[j];
p[j]=work;
}
}

void display(int *p, int p_size) {
int i = 0;

for (; i < p_size; i++)
printf("%d ", p[i]);
printf("\n");
}
0137127NGNG


void shift(int *p, int *p_size) {
int i = 1;

for (; i < *p_size; i++)
while (p[i-1] == p[i]) {
int j = i;
for (; j < SIZE-1; j++)
p[j] = p[j+1];
p[j] = 12346789; /* チェック用 */
--*p_size;
}
}

void answer(int *p, int p_size, int *q, int q_size) {
int i, k;

printf("共通の要素は");
for(i=0; i< p_size; i++)
for (k=0; k< q_size; k++)
if (p[i] == q[k])
printf("%d ", p[i]);
}

int main(void) {
int a[SIZE],b[SIZE];
int a_size = SIZE, b_size = SIZE;

input("a=", a); input("b=", b);
display(a, a_size); display(b, b_size);

sort(a); sort(b);
shift(a, &a_size); shift(b, &b_size);
display(a, a_size); display(b, b_size);

answer(a, a_size, b, b_size);

return 0;
}
0138121NGNG
>>127 ありがとうございました!完璧です!
0139127NGNG
137のshiftだと12345678 で全部入力されてると
動かないよなあ。でも直せん。
0140デフォルトの名無しさんNGNG
C言語で任意の整数を定義するにはどうしたらいいのでしょうか?
0141127NGNG
これでお茶をにごしとこう。
void shift(int *p, int *p_size) {
int i = 1, check = p[0] + 1;

for (; i < *p_size; i++)
while (p[i-1] == p[i]) {
int j = i;
for (; j < SIZE-1; j++)
p[j] = p[j+1];
p[j] = check; /* チェック用 */
--*p_size;
}
}
0142デフォルトの名無しさんNGNG
>>140
無理です。それは無限長のデータです。

0143デフォルトの名無しさんNGNG
>>140
とりあえずは文字列として表現するのが手っ取り早い。

char *add(char *a1, char *a2);

main(){add("123", "456");}

みたいな(中身を書くのは面倒臭いから勘弁。
また関数が返す値は関数内部で新規にメモリを
確保したとこに書く(形に実装したほうが手離れが良い?)から、
使用後は free するのをお忘れなく)。

それが嫌(速度・メモリ etc. の為)なら
その部分だけアセンブラで書くのが吉。
0144140NGNG
>>142,>>143
レスどうもです
まだかなーりの初学者なのでアセンブラとかもよくわかりませんが
143を参考にやってみます
ありがとうございました
0145デフォルトの名無しさんNGNG
原点を通る直線に関して線対称な位置に三角形を移動させるプログラムを作りたいんですけど
完成しません。どなたかお助けを!
(1)三角形の頂点の座標を入力させ、それらの値をa[3][2]に代入する。
(2)直線lがx軸となす角theta(=t)をたずね、それをラジアンに換算した値を変数phiに代入する。
(3)配列bは2×2の行列で頂点(x,y)は点(x',y')に移し、(2)で得られたphiから配列bの
   要素を求める。
   (ちなみにx'=xcos2t+ysin2t y'=xsin2t-ycos2t)
(4)配列a,bを用いて対称変換後の頂点の座標を計算し、結果を配列c[3][2]に代入する。
(5)配列aと配列cの要素をプリントする。
  #include <stdio.h>
#include <math.h>
void kan(float x[3][2],float y[2][2],float z[3][2])
#define pai 3.14
int main(void)
{
int i;
float a[3][2],b[2][2],c[3][2],theta,phi;

for(i=0;i<3;i++)
{
scanf("%d,%d",&a[i][0],&a[i][1]);
}

scanf("%d",&theta);

phi=(pai*theta)/180;

b[0][0]=cos(2*phi);
b[0][1]=sin(2*phi);
b[1][0]=sin(2*phi);
b[1][1]=-cos(2*phi);
kan(a,b,c);
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%f",a[i][j]);
}
printf("/n");
}
void kan (float x[3][2],float y[2][2],float z[3][2])
{
int i;
for(i=0;i<3;i++)
{
z[i][0]=y[0][0]*x[i][0]+y[0][1]*x[i][1];
z[i][1]=y[1][0]*x[i][0]+y[1][1]*x[i][1];
}
}
0146 ◆aCDPDEl2 NGNG
この問題は俺が一番初めに答えてみせる。
0147 ◆aCDPDEl2 NGNG
誰かほかにやってる人いる?
0148デフォルトの名無しさんNGNG
>145
完成してるやん
あとはcを表示するだけちゃうの?
0149 ◆aCDPDEl2 NGNG
#include <stdio.h>
#include <math.h>
#define pai 3.14

int main(void){
int i;
float a[2][3],b[2][2],c[2][3],theta,phi;
for(i=0;i<3;i++){
printf("%d個目の点を入力してください\n x = ",i+1);
scanf("%f",&a[i][0]);
printf(" y = ");
scanf("%f",&a[i][1]);
}
printf("θ = ");
scanf("%f",&theta);
phi=(pai*theta)/180.0;
b[0][0]=cos(2*phi);
b[0][1]=sin(2*phi);
b[1][0]=sin(2*phi);
b[1][1]=-cos(2*phi);

for(i=0;i<3;i++){
c[i][0]=b[0][0]*a[i][0]+b[0][1]*a[i][1];
c[i][1]=b[1][0]*a[i][0]+b[1][1]*a[i][1];
}

for(i=0;i<3;i++){
printf("(%10f,%10f)→(%10f,%10f)\n",a[i][0],a[i][1],c[i][0],c[i][1]);
}

return 0;
}
0150148NGNG
あ、あとscanfの%d→%fかな
0151 ◆aCDPDEl2 NGNG
で、>>149はbを使ってることになるのかな?
あと、△形かどうかの判定は無くて良し?
0152 ◆aCDPDEl2 NGNG
次の宿題カモーン
0153 ◆aCDPDEl2 NGNG
age
0154デフォルトの名無しさんNGNG
C言語
2^50を求めて表示させなさい。
0155デフォルトの名無しさんNGNG
いつも通りprintfだけで終わるヨカソ
0156デフォルトの名無しさんNGNG
>154
貴様の処理系で sizeof long はいくつ?
もしあれば sizeof long long も。話はそれからじゃない?
0157デフォルトの名無しさんNGNG
>>156
うちはWinXP、学校はNT。
bccで試したところ、longは4バイトです。
long longはエラーになったので多分ないです。
0158 ◆aCDPDEl2 NGNG
>>154 この問題は俺が一番初めに解く。
0159154NGNG
>>158
よろしくおながいします。

ご飯食べてくるのでしばらく消えます。
0160デフォルトの名無しさんNGNG
double ans = pow(2.0, 50.0);
じゃだめなの?
0161デフォルトの名無しさんNGNG
cout << 2i64*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2*
    2*2*2*2*2*2*2*2*2*2 << endl;
0162 ◆aCDPDEl2 NGNG
>>160 それでいいっぽい。
0163デフォルトの名無しさんNGNG
8503589813642624になったけど
#include <stdio.h>
#include <math.h>

#define SIZE 10
#define VAC 100000
typedef int bignum[SIZE];

void regular_bignum(bignum n)
{
int i;
for (i=0; i < SIZE-1; i++)
if (n[i] >= VAC) {
n[i+1] += n[i] / VAC;
n[i] %= VAC;
}
}

void write_bignum(bignum n)
{
int i = SIZE-1;

regular_bignum(n);

for (; i>=0; i--)
if (n[i] != 0) {
printf("%u", n[i]);
i--;
break;
}
for (; i>=0; i--)
printf("%05u", n[i] % VAC);
printf("\n");
}

void make_bignum(bignum b, int n)
{
int i;

b[0] = n;
for (i=1; i < SIZE; i++)
b[i] = 0;
}

0164163NGNG

void mul(bignum b, int n)
{
int i;

for (i=0; i<SIZE; i++) {
b[i] *= n;
regular_bignum(b);
}
}

int main(void)
{
int i;
bignum b;

make_bignum(b, 1);

for(i=0; i<50; i++)
mul(b, 2);

write_bignum(b);

return 0;
}
0165 ◆aCDPDEl2 NGNG
1125899906842624じゃない?
0166163NGNG
間違えた。
下ので
1125899906842624
になったす。
void mul(bignum b, int n)
{
int i;

for (i=0; i<SIZE; i++)
b[i] *= n;
regular_bignum(b);
}
0167デフォルトの名無しさんNGNG
sizeof long long == 8 な環境なので

#include <stdio.h>

int main()
{
printf("%lld\n", 1LL<<50);
}

をやったら 1125899906842624 となりますた。
関数電卓でやっても 1.125899e+15 です。

163 は下の方が一致してるよね。上位桁の扱いに問題がありそう。
0168デフォルトの名無しさんNGNG
うわ、書いてる間にちゃんと訂正されてた。鬱。
0169 ◆aCDPDEl2 NGNG
次はまだか?
0170デフォルトの名無しさんNGNG
>>149 遅レスすみません。やっと自分のミスがわかりました!ありがとうございました!
0171デフォルトの名無しさんNGNG
<!--#exec cgi="counter.cgi"--> をもとに、画像の数字を使ったカウンターは
どう作ればいいんですか?
0172デフォルトの名無しさんNGNG
星スタンプで宿題免除です。
0173デフォルトの名無しさんNGNG
↑ロリ発見
0174デフォルトの名無しさんNGNG
解るヤシも同類。

モチロンオレモナー
0175 ◆aCDPDEl2 NGNG
俺の分かる(Cの易しいやつ)宿題カモーン
0176デフォルトの名無しさんNGNG
切羽詰ってます。助けてください!
3×3のマスの中にチェスのナイトが置かれている。
(1) 3×3の配列aを定義して、すべての要素を0に初期化。ナイトの位置は1で、空欄は0で配列に記録。
スクリーン上には、□で空欄を、★でナイトの現在位置を表示する。(ナイトの最初の位置はプログラマーが選択してよい)
(2) チェスのナイトは、将棋の桂馬と同じ動きをするが、前だけでなく左右や後ろにも桂馬飛びができる。
そこで、3×3の配列bとcを宣言して、それぞれに現在位置(i,j)から移動できるマスの番号を2桁の整数で入力する。
移動できるマスが(3,1)ならば31と入力する。(この問題では移動できるマスは常に2つなので配列bとcを使います。)
(3) 現在のナイトがいる配列bの要素を10で割った商と余りを利用して、移動できるマスを(i,j)の形でプリントする。
同様に、配列cの要素をプリントする。
(4) ユーザーからの入力を読み、上の(3)で求めた(i,j)のどちらかならばナイトを移動して、新しい状態をプリントする。
入力が-1,-1ならばプログラムを終了する。
(5) 上の(3)と(4)を繰りかえす。
条件:配列aを引数として、現在ナイトがいる場所をプリントする関数を作製すること。
0177 ◆aCDPDEl2 NGNG
うっ!問題の意味がわからない。
0178154NGNG
みなさまありがとうございます。

>>160
doubleでできるんですね。。。

>>163
いまいち理解できてませんが、ありがとうございます。
これからじっくり読みます。
0179デフォルトの名無しさんNGNG
>>176
で、どう助けろと??
0180 ◆aCDPDEl2 NGNG
(2) チェスのナイトは、将棋の桂馬と同じ動きをするが、前だけでなく左右や後ろにも桂馬飛びができる。
そこで、3×3の配列bとcを宣言して、それぞれに現在位置(i,j)から移動できるマスの番号を2桁の整数で入力する。
移動できるマスが(3,1)ならば31と入力する。(この問題では移動できるマスは常に2つなので配列bとcを使います。)

ここの意味が分からん。
0181デフォルトの名無しさんNGNG
とりあえずナイトを真中に置いたら手詰まりだってことはわかった。
0182デフォルトの名無しさんNGNG
>>176
よし、助け船を出そう。

こう回答しとけ。
「設計自体が悪いので却下します」

それが角が立つので嫌だというならこういうのもあるぞ。
「一体貴方はプログラマを育成したいのですか?
それともキーパンチャーを育成したいのですか?」
0183デフォルトの名無しさんNGNG
どうでもいいけど、コード貼り付ける時
全角スペースで字下げしてくれないかなぁ…
読み辛いです
ダメならいいけどさ
0184145NGNG
>>149 3個目の点の値を入力して実行すると値が変わるんですけどどうすればいいですか?
0185 ◆aCDPDEl2 NGNG
paiの値をより正確にすればいいと思う。
0186デフォルトの名無しさんNGNG
ナップサック問題です。「総重量が与えられた値以下という制約の中で、価値の和を最大にするように荷物を選択する」というものです。

問題1
荷物| a  b  c  d  e
――+――――――――――
重量| 4 5 2 1 6
価値|450 570 225 110 670


重量制限8
ってな感じです。


解けます?ほかのスレから持ってきたんだけど解答がでなくて…

ttp://pc3.2ch.net/test/read.cgi/tech/1027353004/
で、いくつかプログラムが出てるんですけど、いかがでしょうか?
こちらの方のほうがスキルありそうなので…
0187デフォルトの名無しさんNGNG
マルチスレッドかマルチプロセスどちらかを使ってCでシェルソート作れ
って言われたんですがCでマルチスレッドってどうやるんですか?

調べてみたら、内のNTくんだとforkという関数?を
使えるらしいところまでは分かりました。

また、シェルソート自体のコードは検索して見つけたので
printfを使いながら力技で勉強中です。
0188デフォルトの名無しさんNGNG
>>180
こういう事だと思われ。
しかし、やる気が失せるぐらい(出題者の)センスが悪いな。

int a[3][3]={
1,0,0,
0,0,0,
0,0,0,
};

int b[3][3]={
12, 2,12,
20,-1, 0,
21, 0,10,
};
int c[3][3]={
21,22, 1,
22,-1, 2,
10,20, 1,
};
0189デフォルトの名無しさんNGNG
すごいと思われるjava appletを作って!
0190 ◆aCDPDEl2 NGNG
>>188 なるほど。
0191デフォルトの名無しさんNGNG
>>189
それが宿題か?
0192デフォルトの名無しさんNGNG
>>191 いえす。
0193デフォルトの名無しさんNGNG
>>186
キーワード「線形計画法」でいくらでもでてくるYO!!
http://lecture.ecc.u-tokyo.ac.jp/~okatu/planning/30lp.html
とか
0194デフォルトの名無しさんNGNG
>>193
あれ? ナップザック問題って「線形計画法」で解くんだっけ?
0195デフォルトの名無しさんNGNG
>>194
動的計画法では?
0196デフォルトの名無しさんNGNG
動的
0197195NGNG
かぶった
しかも、レス付け間違えた
0198デフォルトの名無しさんNGNG
>>186

#include <stdio.h>

#define LIMIT 8
#define N 5
#define MIN_SIZE 1

void main(void)
{
 static struct body
 {
  char *name;
  int size;
  long price;
 } a[]={{"a",4,450},{"b",5,570},{"c",2,225},
    {"d",1,110},{"e",6,670}};

 long newvalue,value[LIMIT+1];
 int item[LIMIT+1],i,s,p;

 for(s = 0;s <= LIMIT;s++)
 {
  value[s]=0;
 }

 for(i = 0;i < N;i++)
 {
  for(s = a[i].size;s <= LIMIT;s++)
  {
   p = s - a[i].size;
   newvalue = value[p] + a[i].price;
   if(newvalue > value[s])
   {
    value[s] = newvalue;
    item[s]=i;
   }
  }
 }

 printf(" 品 目 重量 価格\n");
 for(s = LIMIT,p=0;s >= MIN_SIZE;s-=a[item[s]].size)
 {
  printf("%10s %5d %5ld\n",a[item[s]].name,a[item[s]].size,a[item[s]].price);
  p += a[item[s]].size;
 }
 printf(" 合 計 %5d %5ld\n",p,value[LIMIT]);
}

参考文献:改訂 C言語によるはじめてのアルゴリズム入門(河西朝雄 著,技術評論社)
0199 ◆aCDPDEl2 NGNG
#include<stdio.h>

int main(void){
int i,j,x,y,next;

int a[3][3]={{1,0,0},
{0,0,0},
{0,0,0}};
int b[3][3]={{12,20,10},
{2,-1, 0},
{2, 0, 1}};
int c[3][3]={{21,22,21},
{22,-1,20},
{12, 2,10}};

while(1){
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(a[i][j]==0){ printf("□"); }
else{
x=i;
y=j;
printf("★");}
}
printf("\n");
}

for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(a[i][j]==1) printf("(%d,%d)",b[i][j]/10,b[i][j]%10);
}
}
printf("\n");

for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(a[i][j]==1) printf("(%d,%d)",c[i][j]/10,c[i][j]%10);
}
}
printf("\n next : ");

scanf("%d",&next);

if(next==b[x][y]){
a[x][y]=0;
a[b[x][y]/10][b[x][y]%10]=1;
}else if(next==c[x][y]){
a[x][y]=0;
a[c[x][y]/10][c[x][y]%10]=1;
}else if(next==-1)break;
}
return 0;
}
0200デフォルトの名無しさんNGNG
長いですがお願いします。どうしてもわかりません。助けてください。
データが0と1しか含まないと仮定して以下の方法で圧縮されたデータを解凍
するプログラムを作成してください。
圧縮前 0 0 0 1 1 1 0 0 0 0
圧縮後 3 , 3 , 4 \n

1、読んだ数字の数を数えるカウンターの値を1に初期化して、文字を読む前
  に整数型の変数numを0に初期化します。
2、データは3,3,4のようにカンマ区切りでファイルに記憶されており、左端
  は必ず0から始まっているいるものとしています。従って入力データの種類
  は以下の3種類です。
  (1)1から9までの数字
  (2)カンマ
  (3)行末記号。EOLともよばれ、\nのことです。
  そこで、getcharコマンドで、入力データの1行目を1文字ずつ読み取ります。
  読んだ文字がカンマか行末記号で無い間は、numを10倍した値に、呼んだ文字を
  数字に変更して加えます。(読んだ文字を数字に変更するには、文字の'0'を引きます。)
   num=0×10+5(numの値は5になります)
   num=5×10+9(numに値は59になります)
3、読んだ数字を配列aに代入し、カウンターの値に1を加えます。
4、読んだ文字が行末記号になるまで2から3までを繰り返します。
5、配列aの要素の値だけ、0や1を交互にプリントとします。データが入っている配列の要素数
  は、カウンターで数えてあります。
6、上の方法を繰り返して後19行処理しています。(入力データファイルには20行のデータが
  あります。)
7、配列aを引数といて、0もたは1の数をプリントする関数を作成してください。
8、サンプルデータsample3を入力としてプログラムを実行してください。

サンプルデータ
62,
35,4,23
30,14,18
32,2,6,2,20
33,2,4,2,21
34,2,2,2,22
34,6,12,4,6
1,5,26,4,2,4,8,2,3,2,5
6,4,20,5,4,5,5,2,5,2,4
11,3,14,4,10,4,2,2,7,2,3
13,5,9,3,14,5,9,2,2
16,4,5,3,18,3,10,2,1
18,9,20,4,8,2,1
20,6,22,4,6,2,2
22,4,22,4,3,3,4
23,4,20,8,7
25,3,18,3,13
28,4,10,4,16
32,10,20
62
    
0201すごい手抜きNGNG
>>189
public class sugoi extends java.applet.Applet {}
0202デフォルトの名無しさんNGNG
>>185 それでもなりませんでした。たとえばx=5,y=6と入れれば(5,6)と出るはずなんですが
(0.50・・,0.86・・)となるんですが・・・
0203 ◆aCDPDEl2 NGNG
>>202 θの値は?
0204デフォルトの名無しさんNGNG
>>203 30度です。
0205 ◆aCDPDEl2 NGNG
θ=30なら、(5,6)→(7.696857, 1.326041)になるけど?
0206デフォルトの名無しさんNGNG
sin30=0.5
cos30=0.86・・・
0207 ◆aCDPDEl2 NGNG
>>206 何を言ってるのかさっぱりわからん。

何を求めたいんだ?(5、6)という点がθ=30のときに
どこへ移るかを求めるんじゃないの?
0208デフォルトの名無しさんNGNG
>>205それが3つめの点のときだけx=5,y=6といれても(5,6)→(7.69,1.32)とならずに
(0.5・・,0.86・・)→(1.000,0.000)になるんです。
0209デフォルトの名無しさんNGNG
int data[MAX_DATA];
int data_n;
int f=1;

while(data_n){
  for(i=0;i<data[data_n];i++){
    printf("%d ",f);
  }
  data_n--;
  f ^= 1;
}
0210 ◆aCDPDEl2 NGNG
(0.5・・,0.86・・)→(1.000,0.000)でいいんじゃない?
0211デフォルトの名無しさんNGNG
>>210そうなんですか?しばらく考えてみます。
0212デフォルトの名無しさんNGNG
>>211
float a[2][3],b[2][2],c[2][3],theta,phi;
↓
float a[3][2],b[2][2],c[3][2],theta,phi;
0213デフォルトの名無しさんNGNG
>>212どうもです!次々とすみませんが、配列a,b,cを引数として、配列cに
   データを代入する関数を使うにはどうすればいいんですか?
0214 ◆aCDPDEl2 NGNG
void asdf(float a[2][3], float b[2][2] , float c[2][3]){
int i;
for(i=0;i<3;i++){
c[i][0]=b[0][0]*a[i][0]+b[0][1]*a[i][1];
c[i][1]=b[1][0]*a[i][0]+b[1][1]*a[i][1];
}
}

asdf(a,b,c);
0215デフォルトの名無しさんNGNG
>209
f~=1が渋めだけどdata_nの初期化が抜けてるやん 70点
0216名無しのだれかさん。NGNG
宿題のソースはここに置いてね
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433

スレ立ててみました。良かったら使ってくださいませ。

かなり長いソースでもOK。全角スペースで再インデントする必要もなし!
添付ファイルもできちゃうゾ!
0217デフォルトの名無しさんNGNG
198さんのとおりにやったんだけど、うまくいきませんでした。
んで自分でちょっといじくったらセグメンテーション違反って結果が。。。

初心者で申し訳ないのですが、一体どうすればいいのでしょうか?
0218デフォルトの名無しさんNGNG
>>214
>>149もそうだけど、なしてa[2][3]にするの?
0219 ◆aCDPDEl2 NGNG
>>218 別に[3][2]でもいいけど
行列を考えたときそのほうがわかりやすかったからでふ。
0220 ◆aCDPDEl2 NGNG
なんかおかしぃ
0221213NGNG
>>214関数の入れ方がわからないんですけど・・・。すみません。
0222 ◆aCDPDEl2 NGNG
[3][2]のほうがわかりやすいね。
0223 ◆aCDPDEl2 NGNG
#include <stdio.h>
#include <math.h>
#define pai 3.14

void asdf(float a[3][2], float b[2][2] , float c[3][2]){
int i;
for(i=0;i<3;i++){
c[i][0]=b[0][0]*a[i][0]+b[0][1]*a[i][1];
c[i][1]=b[1][0]*a[i][0]+b[1][1]*a[i][1];
}
}

int main(void){
int i;
float a[3][2],b[2][2],c[3][2],theta,phi;
for(i=0;i<3;i++){
printf("%d個目の点を入力してください\n x = ",i+1);
scanf("%f",&a[i][0]);
printf(" y = ");
scanf("%f",&a[i][1]);
}
printf("θ = ");
scanf("%f",&theta);
phi=(pai*theta)/180.0;
b[0][0]=cos(2*phi);
b[0][1]=sin(2*phi);
b[1][0]=sin(2*phi);
b[1][1]=-cos(2*phi);

/* for(i=0;i<3;i++){
c[i][0]=b[0][0]*a[i][0]+b[0][1]*a[i][1];
c[i][1]=b[1][0]*a[i][0]+b[1][1]*a[i][1];
}*/


asdf(a,b,c);
for(i=0;i<3;i++){
printf("(%10f,%10f)→(%10f,%10f)\n",a[i][0],a[i][1],c[i][0],c[i][1]);
}

return 0;
}

これであってるかな?
0224213NGNG
>>223ありがとうございます!助かりました!
0225グチNGNG
C使いはじめてから十数年、全部構造体の配列でやってるなぁ。
だから、多次元配列なんて一度も使ったこと無いんだ。

だいたい、ミスってても分かりづらいからバグの温床になるんだよな。
経験上、他人のソースをレビューしてて真っ先に注目するのってソレ。
一番ありがちなのは次元を間違えて別領域書き潰し。
スタックぶっ潰してるから、関数から戻ったときに訳のわからんアクセス
違反でアボート。

Cではヤメにしない?多次元配列。
移植性損なわずに、ベクトル演算できるわけでもなし。
少なくとも宿題レベルで必要無いと言い切りたい。
0226225 改行規制くらったNGNG

例えば >>223 のソースならこんな風にさ。

#include <stdio.h>
#include <math.h>
#define pai 3.14

typedef struct {
float x;
float y;
} point;

typedef struct {
float a00,a01,a10,a11;
} matrix;

void asdf(point pnt[3], matrix mat , point res[3]){
int i;
for(i=0;i<3;i++){
res[i].x = mat.a00*pnt[i].x+mat.a01*pnt[i].y;
res[i].y = mat.a10*pnt[i].x+mat.a11*pnt[i].y;
}
}

int main(void){
int i;
float theta,phi;
matrix mat;
point pnt[3];
point res[3];
for(i=0;i<3;i++){
printf("%d個目の点を入力してください\n x = ",i+1);
scanf("%f",&pnt[i].x);
printf(" y = ");
scanf("%f",&pnt[i].y);
}
printf("θ = ");
scanf("%f",&theta);
phi=(pai*theta)/180.0;
mat.a00 = cos(2*phi);
mat.a01 = sin(2*phi);
mat.a10 = sin(2*phi);
mat.a11 = -cos(2*phi);

asdf(pnt,mat,res);
for(i=0;i<3;i++){
printf("(%10f,%10f)→(%10f,%10f)\n",
pnt[i].x, pnt[i].y, res[i].x, res[i].y );
}

return 0;
}
0227デフォルトの名無しさんNGNG
あ、宿題の元テキスト >>145 見たら配列使うような指示が・・・
0228名無しのだれかさん。NGNG
>>226

>>216 に貼れば改行制限がゆるいし、インデントも保持されるよ。
0229デフォルトの名無しさんNGNG
2次元くらいなら問題ないと思うけどね。図にもできるし。
3次元以上は使わないけど。
まあ、実際のメモリを考えると2次元もおかしいんだけど。
0230200NGNG
200ですがどなたかおねがいします・・・
0231デフォルトの名無しさんNGNG
>>226
俺がその問題解いてたときは
#define SIZE 2
typedef float point[SIZE];
typedef float matrix[SIZE][SIZE];
ってして、point関係の関数作ってあまり考えなくても
いいようにしてたよ。
0232231NGNG
>>200 いまからやってみるよ。
0233名無しさん@XEmacsNGNG
>200

君にはPythonで十分だ。

foo.py
----------------------------------------------
import sys
import string

for line in sys.stdin.readlines():
list = string.split(string.strip( line ) , ',' )
even = 1
for data in list:
even += 1
sys.stdout.write( chr( ord('0' ) + even % 2 ) * int(data) )
sys.stdout.write( '\n' )
-----------------------------------------------
data.txt
62
35,4,23
30,14,18
32,2,6,2,20
33,2,4,2,21
34,2,2,2,22
34,6,12,4,6
1,5,26,4,2,4,8,2,3,2,5
6,4,20,5,4,5,5,2,5,2,4
11,3,14,4,10,4,2,2,7,2,3
13,5,9,3,14,5,9,2,2
16,4,5,3,18,3,10,2,1
18,9,20,4,8,2,1
20,6,22,4,6,2,2
22,4,22,4,3,3,4
23,4,20,8,7
25,3,18,3,13
28,4,10,4,16
32,10,20
62

-------------------------------
python foo.py < data.txt
0234デフォルトの名無しさんNGNG
>>200
じゃC++
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>

main(){
std::string s ;
while(std::getline(std::cin,s,'\n'),std::cin){
bool f=false ;
typedef boost::tokenizer<boost::char_separator<char> > tokenizer ;
boost::char_separator<char> sep(",") ;
tokenizer tok(s,sep) ;
for(tokenizer::iterator ti=tok.begin();ti!=tok.end();ti++,f=!f) try {
std::fill_n(std::ostream_iterator<bool>(std::cout),boost::lexical_cast<int>(*ti),f) ;
} catch(...) {}
std::cout << std::endl ;
}
}
0235200NGNG
>>233 >>234 Cは・・・?
0236デフォルトの名無しさんNGNG
>200
じゃあ、Ruby

while line = gets
  i = 1
  puts line.split(',').map{|n| i *= -1; (i == 1 ? '1' : '0') * n.to_i}.join
end
0237231NGNG
やっとできた。ループがカッコ悪いのでだれか直して。
#include <stdio.h>
#define SIZE 10000

int a[SIZE];
int counter = 1;

void write_a(int *a)
{
int i, j, x=0;

for (i=1; i<counter; i++) {
for (j=a[i]; j--;)
printf("%d ", x);
x = (x) ? 0 : 1;
}
printf("\n");
}

int main(void)
{
int ch;
int num;

do {
counter = 1;
do {
num = 0;
while ((ch = getchar()) != ',' && ch != '\n' && ch != EOF) {
num *= 10;
num += ch - '0';
}
a[counter++] = num;
} while (ch != '\n' && ch != EOF);
write_a(a);
} while (ch != EOF);

return 0;
}
0238デフォルトの名無しさんNGNG
>>200
#include <stdio.h>
#include <ctype.h>

int main(){
int c, prev=0 ;
int flag=0 ;
while(c=getchar(),c!=EOF){
if(isdigit(c))
prev = prev*10+(c-'0') ;
else if(c==',' || c=='\n') {
while(prev--) printf("%d",flag) ;
prev = 0 ;
flag = !flag ;

if(c=='\n') {
printf("\n") ;
flag = 0 ;
}
}
}
return 0 ;
}
0239238NGNG
しまった配列を使えというのか
0240 NGNG
>>200
じゃ、awk。

BEGIN{FS=","}
{
for (i = 1; i <= NF; i++)
for (j = 0; j < $i; j++)
printf("%d", 1 - (i % 2));
print "";
}
0241デフォルトの名無しさんNGNG
>>237
こんなところか。ただ、ファイルの末尾が\nでないと最終行が出力されない既知のバグあり(w
#include <stdio.h> 
#define SIZE 10000 

static int a[SIZE]; 

void write_a(int *a, int counter) 
{ 
  int i, j, x=0; 

  for (i=0; i < counter; i++) { 
    //    printf("%d ", a[i]); 
    for (j = 0; j < a[i]; j++)
      printf("%d", x); 
    x = (x) ? 0 : 1; 
  } 
  printf("\n"); 
}

int main(void) 
{ 
  int ch; 
  int num = 0; 
  int counter = 0; 

  while ((ch = getchar()) != EOF) {
    switch (ch) {
    case ',':
      a[counter++] = num;
      num = 0;
      break;
    case '\n':
      a[counter++] = num;
      write_a(a, counter);
      counter = 0;
      num = 0;
      break;
    default:
      num *= 10; 
      num += ch - '0';
      break;
    }
  }
  return 0; 
} 
0242名無しさん@XEmacsNGNG
んじゃ pike

int main()
{
while(string s=Stdio.stdin.gets()){
string x;
int count = 1;
foreach( s/",",x ){
count++;
write( (string)(count%2) * (int)x );
}
write("\n");
}
}

0243241NGNG
つか、もう全然違うものになってしまったな(w
しかもバグ取りに使ったprintf残ってるし(恥
0244Rina ◆tI333vNE NGNG
夜中に目が覚めてチラっと見にきたらレスの数がが増えまくってる…。
おそるべし2ch…。
0245241NGNG
>>244
ちみも>>200の問題をC以外で解きなされ(w
0246デフォルトの名無しさんNGNG
java applet つくって。
0247デフォルトの名無しさんNGNG
>>176

#include <stdio.h>

int a[3][3]={{1,0,0},
{0,0,0},
{0,0,0}};
int b[3][3]={{12,20,10},
{2,-1, 0},
{2, 0, 1}};
int c[3][3]={{21,22,21},
{22,-1,20},
{12, 2,10}};

void print_moveto(int b[3][3], int x, int y)
{
printf("(%d,%d)", b[x][y] / 10, b[x][y] % 10);
}

void print_knight(void)
{
int i, j, x=3, y=3;

for (i=0; i<3; i++) {
for (j=0; j<3; j++)
if (a[i][j] == 1) {
x = i; y = j;
printf("★");
} else {
printf("□");
}
printf("\n");
}

printf("move to ");
print_moveto(b, x, y);
printf(" or ");
print_moveto(c, x, y);
printf(".\n");
}
0248246NGNG

int check(int b[3][3], int x, int y)
{
int i, j;

for (i=0; i<3; i++)
for(j=0; j<3; j++)
if (a[i][j] == 1) {
return (b[i][j] / 10 == x) && (b[i][j] % 10 == y);
}

return 0;
}

void move(int x, int y)
{
int i, j;

for (i=0; i<3; i++)
for(j=0; j<3; j++)
a[i][j] = 0;

a[x][y] = 1;
}

int moveto(void)
{
int x, y;

scanf("%d,%d", &x, &y);

if (x == -1 && y == -1)
return 0;

if (check(b, x, y)) { move(x, y); return 1;}
if (check(c, x, y)) { move(x, y); return 1;}

printf("cannot move to (%d,%d).\n", x, y);

return 1;
}

int main(void)
{
do print_knight();
while (moveto());

return 0;
}
0249248=247NGNG
間違えた。
0250Rina ◆tI333vNE NGNG
import java.io.*;
import java.util.*;

public class Main {
public static void main(String[] args)
throws Exception {
BufferedReader in = null;
{
FileReader fr = new FileReader(args[0]);
in = new BufferedReader(fr);
}

String line;
while( (line = in.readLine()) != null ) {
int c = 0;

StringTokenizer token = new StringTokenizer(line, ",");
while( token.hasMoreTokens() ) {
String tmp = token.nextToken();
int n = Integer.parseInt(tmp);
for (int i = 0 ; i < n ; i++) {
System.out.print( (c % 2) );
}

c++;
}
System.out.println();
}

}
}

これでいいの?
最早Javaとは呼べないソース…w
実行は
  $ java Main sample
でどうぞ。
0251デフォルトの名無しさんNGNG
>>246
>>201 なんかどだ?
0252 ◆JAPH9PWA NGNG
Perlはまだだよね。
#!perl
$\ = "\n";
while(<>)
{
my $i = 1;
print join '', map { $i ^= 1; ($i ? 1 : 0) x $_ } split /,/;
}
0253デフォルトの名無しさんNGNG
すみません。課題なのですが全くわかりません。誰か教えてください。お願いします。
データが0と1しか含まないと仮定して、以下の方法でプログラムを作成し
てください。
getcharコマンドで、入力データの1行目を読み取り、配列aに代入(1行に38文字あるが、最後の1文字は改行文字と仮定)してカウンターの値を1に初期化する。<最初に読んだ文字(a[0]の値)が続いている間は、カウンタ
ーの値輪1ずつ増やして読んだ文字が今までと違った(文字の連続が終わっ
た)時点でカウンターの値をプリントして1の場合にはそのまま数字をプリ
ントして0の場合には、符号をマイナスにしてプリントする。カウンター
の値を1に再初期化>して<>の間を繰り返す。2行目以降を同時に処理し
てください。
条 件:・配列aを引数として、0または1の数をプリントする関数を作成してください。
・サンプルデータは
 0000000000000000111100000000000000000
 0000000000011111111111111000000000000
 0000000000001100000000110000000000000
 0000000000000111000011100000000000000
 0000000000000011100111000000000000000
 0000000000000011100111000000000000000
 0000000000000001111110000000000000000
 0000000000000001111110000000000000000
 0000000000000111111111100000000000000
 0000000000011111000011111000000000000
 0000000001111000000000011110000000000
 0000000011100000000000000111000000000
 0000001110000000000000000001110000000
 0000111100000000000000000000111100000
 0001111000000000000000000000011110000
 0001111000000000000000000000011110000
 0000111100000000000000000000111100000
 0000001110000000000000000001110000000
 0000000001111111111111111111000000000
 0000000000000111111111100000000000000
 0000000000000000000000000000000000000

#include<stdio.h>
int main(void)
{
int i, j ,counter;
int a[20][38];
char ch;

for(i=0; i<21; i++){
for(j=0; j<38; j++){
a[i][j]=getchar();
}}
for(i=0; i<21; i++){
for(j=0; j<38; j++){
printf("%c",a[i][j]);
}}}

このプログラムの後に1行目は0が16個、1が4個、0が17個であるので16,4,17というように表示したいのですがで
きません。
16,4,17
11,14,12
:
:
:
:
と表示したいのです。どうぞお願いします。
0254241NGNG
>>253
貴様、>>200だな(w
にしても「getcharコマンド」てのはなんかイヤな呼び方だなあ。
getchar関数か(実装にもよるが)getcharマクロと呼んでほしい。
出題者のセンス悪いぞ。

とかいってる間に解いてみようかな。

あ、そうそう、

for(i=0; i<21; i++){
for(j=0; j<38; j++){
a[i][j]=getchar();
}}

なんかの部分、最後の}}はよしとけ。ひとつずつ改行しとけ。
あとインデントちゃんとやってる?
つまり、

for(i=0; i<21; i++){
  for(j=0; j<38; j++){
    a[i][j]=getchar();
  }
}

みたいに書けってこと。
0255254NGNG
う。名前が残ってた。
0256200NGNG
>>237>>238>>241遅レスすみません。きちんと解いてくれた方ありがとうございました。
微妙に嫌がらせしてくれた方、微妙におもしろかったです!
0257200NGNG
>>254どうも!241さん!(w
   そうですね。今度からそうします!
   この問題もよろしくおねがいします!
 
0258デフォルトの名無しさんNGNG
186のナップサック問題を未だに悩んでるんですが、198さんのプログラムを参考にいじってたらわけわかんなくなりました…

実行してもセグメンテーション違反と表示されてしまいます。
↓僕がいじったものを修正してくださいませんか?

#include <stdio.h>

#define LIMIT 8
#define NUMBER 5
#define MIN_SIZE 1

struct nimotu
 {
  char *name;
  int size;
  int price;
 } data[]={{"a",4,450},{"b",5,570},{"c",2,225},
    {"d",1,110},{"e",6,670}};

int main(void)
 int newvalue,value[LIMIT+1];
 int item[LIMIT+1],i,s,p;

 for(s = 0;s <= LIMIT;s++)
 {
  value[s]=0;
 }

 for(i = 0;i < N;i++)
 {
  for(s = data[i].size;s <= LIMIT;s++)
  {
   p = s - data[i].size;
   newvalue = value[p] + data[i].price;
   if(newvalue > value[s])
   {
    value[s] = newvalue;
    item[s]=i;
   }
  }
 }

 printf(" 品 目 重量 価格\n");
 for(s = LIMIT,p=0;s >= MIN_SIZE;s-=data[item[s]].size)
 {
  printf("%10s %5d %5d\n",data[item[s]].name,data[item[s]].size,data[item[s]].price);
  p += data[item[s]].size;
 }
 printf(" 合 計 %5d %5d\n",p,value[LIMIT]);
}

できればコメントつけていただくとうれしいのですが…
0259254NGNG
>>253
とりあえずRubyで。

while line = gets
  puts line.scan(/1+|0+/).map{|s| s.length}.join(',')
end

次Cいくから待ってろ(w
0260254NGNG
>>253
えーと、問題を見ると、配列aは
char a[38];
と定義するように見えるんだけど違うのかな。

Cのコードは問題に含まれてる? それとも君が書いた?
0261200NGNG
>>254僕が書きました!
0262254NGNG
>>261
なるほど。じゃあこれでいいのかな。
サンプルデータの一行目は
0000000000000000111100000000000000000
になってるけど、これは
-16,4,-17,
と出力したらいいんだよね。問題にはそうしろと書いてあるように読める。
#include <stdio.h>

static void print_a(const char *a, size_t size)
{
  char state = a[0];
  int i, count = 1;

  for (i = 1; i < size; i++) {
    if (a[i] != state) {
      if (state == '0') {
        count = -count;
      }
      printf("%d,", count);
      state = a[i];
      count = 1;
    }
    else {
      count++;
    }
  }
  printf("\n");
}

int main(int argc, char * argv[])
{
  char a[38];
  int i = 0, ch;

  while ((ch = getchar()) != EOF) {
    if (ch == '\n') {
      print_a(a, i);
      i = 0;
    }
    else {
      a[i++] = ch;
    }
  }
  if (i) {
    print_a(a, i);
  }
  return 0;
}
0263デフォルトの名無しさんNGNG
>>258
まずそのままではコンパイルすら通らなかったぞ

int main(void) のあとに { 追加
for(i = 0;i < N;i++) の N を NUMBER に変更

したら、普通に動いたが?以下出力

品 目 重量 価格
d 1 110
c 2 225
b 5 570
合 計 8 905
0264200NGNG
>>254
ホントにありがとうございました。
0265258NGNG
263さん。指摘どおりに修正しました。が!やはりセグメンテーション違反とでます…

#include <stdio.h>

#define LIMIT 8
#define NUMBER 5
#define MIN_SIZE 1

struct nimotu
 {
  char *name;
  int size;
  int price;
 } data[]={{"a",4,450},{"b",5,570},{"c",2,225},
    {"d",1,110},{"e",6,670}};

int main(void)
 {
int newvalue,value[LIMIT+1];
 int item[LIMIT+1],i,s,p;

 for(s = 0;s <= LIMIT;s++)
 {
  value[s]=0;
 }

 for(i = 0;i < NUMBER;i++)
 {
  for(s = data[i].size;s <= LIMIT;s++)
  {
   p = s - data[i].size;
   newvalue = value[p] + data[i].price;
   if(newvalue > value[s])
   {
    value[s] = newvalue;
    item[s]=i;
   }
  }
 }

 printf(" 品 目 重量 価格\n");
 for(s = LIMIT,p=0;s >= MIN_SIZE;s-=data[item[s]].size)
 {
  printf("%10s %5d %5d\n",data[item[s]].name,data[item[s]].size,data[item[s]].price);
  p += data[item[s]].size;
 }
 printf(" 合 計 %5d %5d\n",p,value[LIMIT]);
}


これに応じたコンパイルの仕方というのがあるのでしょうか?
gcc -oでやっているのですが、おかしいですか?
↑ちなみに意味もわかっていないものなので…
0266名無しさん@カラアゲうまうまNGNG
>>265
オレんとこでもちゃんと動いたけどな。
コンパイルの手順と実行結果を省略せずに貼ってみ。
0267デフォルトの名無しさんNGNG
つか、coreができたなら、gdbでも動かして
自分でデバグしろよ。
0268258NGNG
266>>
ほんと素人ですいません…

コンパイルはgcc -o test test.cとやって別にエラーも出てきません。

で、実行結果は

品 目 重量 価格
    d 1 110
    c 2 225
セグメンテーション違反です

と表示されるんです。
0269デフォルトの名無しさんNGNG
>>268
こっちでも試してみたけど、違反は起きないなあ。
0270デフォルトの名無しさんNGNG
MDIのアプリケーションなんかで(ワードとか)、
複数枚のウィンドウを表示してる状態でそのウィンドウを閉じると
その前にアクティブだったウィンドウにフォーカスが映りますよね。

あのように、その前にアクティブだったウィンドウのハンドル
って、どうやってとれば良いんでしょうか?
よろしくお願いします。<(__)>
0271258NGNG
269さんありがとうございます。
でもやっぱり動かないんですよねぇ。

いったい何がいけないんだろう?
もう少しいろいろがんばってみます!
0272デフォルトの名無しさんNGNG
全角スペースは半角に変えた?

#define LIMIT 8
#define NUMBER 5
#define MIN_SIZE 1
で
gcc -Wall -o test test.c
やってみて。
0273258NGNG
272さん
それでコンパイルしてみたら

test.c:In function 'main':
test.c:warning:control reaches end of non-void function

と出ます。
0274名無しさん@カラアゲうまうまNGNG
>>272
そしたらコンパイル通らないだろ。
0275272NGNG
>>273
それはmainの最後にreturn 0; をいれればいいだけ。
0276258NGNG
return0;もつけて、実行するとやはりセグメンテーション違反って出ます(鬱)

こういう場合って書いてるプログラムのどこかがみなさんとちがう箇所とかがあるってことなんでしょうか?
スペースの空け方に問題があるとか…?
0277名無しさん@カラアゲうまうまNGNG
gcc -ggdb -g3 -o test test.c でコンパイル、
gdb test でデバッガから
runしてみ。
SEGVで止まったら
p s
p item
0278272NGNG
全角スペースとったののせとくよ。
bccでは動いたけどなあ。
#include <stdio.h>

#define LIMIT 8
#define NUMBER 5
#define MIN_SIZE 1

struct nimotu
{
char *name;
int size;
int price;
} data[]={{"a",4,450},{"b",5,570},{"c",2,225},
{"d",1,110},{"e",6,670}};

int main(void)
{
int newvalue,value[LIMIT+1];
int item[LIMIT+1],i,s,p;

for(s = 0;s <= LIMIT;s++)
{
value[s]=0;
}

for(i = 0;i < NUMBER;i++)
{
for(s = data[i].size;s <= LIMIT;s++)
{
p = s - data[i].size;
newvalue = value[p] + data[i].price;
if(newvalue > value[s])
{
value[s] = newvalue;
item[s]=i;
}
}
}

printf(" 品 目 重量 価格\n");
for(s = LIMIT,p=0;s >= MIN_SIZE;s-=data[item[s]].size)
{
printf("%10s %5d %5d\n",data[item[s]].name,data[item[s]].size,data[item[s]].price);
p += data[item[s]].size;
}
printf(" 合 計 %5d %5d\n",p,value[LIMIT]);
}
0279258NGNG
277さん
こんな風に表示されました

Program received signal SIGEGV,Segmentaion fault.
0x080485ca in main () at test.c:41
41 printf("%10s %5 %5d\n",data[item[s]].name,data[item[s]].size,data[item[s]].price);


と出ました。
原因は41行目ってことですね?
0280272NGNG
item[s] が範囲外を指してるのかなあ。
がんばれ。
0281デフォルトの名無しさんNGNG
その printf の直前で念のため s と item[s] の値も
表示してみるといいかもしんない。
0282198NGNG
>>278
見やすい方が良いかと、全角でインデント付けてみたけど、
かえって悪かったみたい。スマソ

>>279
漏れはVCだから、助けられないけどガンガレ
0283名無しさん@カラアゲうまうまNGNG
>>279
> 原因は41行目ってことですね?
そう。そこでp sとp itemしてみ。
0284デフォルトの名無しさんNGNG
プログラムよく読んでないから分からんけど、item[]を初期化してないなんてこたぁないよな?
0285258NGNG
283さん
p sとp itemを行ったら

p s
$1=5

p item
$2={0,1073832704,3,2,-1073743552,1073795766,3,2,3}

と出ました。
いったいこれはどういうことなんでしょうか?
ほんとに何度もすいません
0286デフォルトの名無しさんNGNG
>>285
284の言う初期化し忘れだな。
for(s = 0;s <= LIMIT;s++) {
item[s] = 0;
}
を入れて。
0287デフォルトの名無しさんNGNG
ところでこの問題って同じ荷物を二回選んでいいの?
そういう風に解いてるように見えるけど。
0288258NGNG
キタ━━━━━━(゚∀゚)━━━━━━!!
なったぁ〜〜〜〜〜〜〜〜〜〜〜〜〜

ありがとうございます!

for(s = 0;s <= LIMIT;s++) {
item[s] = 0;
value[s]=0;
}

って書いたけどいいでしょうか?
問題ないならこれでオッケーなんですけど。

とにかくうれしいです!
いろいろ協力してくださったみなさんありがとうございます!
今心の底から本当に感謝しています。ちょと涙。

プログラムの勉強をはじめて間もない素人相手にこれだけの助言をいただけてうれしいです。
これからもっと自分でできるようにがんばります!
0289258NGNG
荷物| a b c d e f g h i j
――+―――――――――――――――――
重量| 39 13 68 15 10 20 31 15 41 16
価値| 42 12 45 5 2 61 89 32 47 18

で重量制限121の問題になるとさっきのプログラムを

#define LIMIT 121
#define NUMBER 10
#define MIN_SIZE 10

にして
data[NUMBER]=・・・のとこに問題の数値を入力すればいいと思ってたら
実行結果が

f 20 61
f 20 61
f 20 61
f 20 61
f 20 61
合計120 366

ってなってしまいました…ガッテム
287さんの指摘する部分はこういうことなんでしょうか?
0290287NGNG
>>289
はい。誠に悲しいことですが、アルゴリズムを根本から直さないと、
その現象は直りません。
0291258NGNG
ガーン
そうなんですか…

その修正は難しいのでしょうか?
どのあたりを書き換えたらいいでしょうか?
よろしければ教えてください…
0292デフォルトの名無しさんNGNG
正直、どの辺を直せばいいってレベルじゃない気はする。
0293デフォルトの名無しさんNGNG
うちのではitem初期化なしで
prime = 0 110 225 335 450 570 680 795 905
item = 4235264 3 2 3 0 1 3 2 3
になってたけど・・・
0294258NGNG
もう全部書き換えるしかないってことですか…

293さんもう少し詳しく教えていただけませんか?
0295デフォルトの名無しさんNGNG
http://tdweb.cssa.chs.nihon-u.ac.jp/semi4/2001/kase.htm
参考にどうぞ。
0296デフォルトの名無しさんNGNG
>>294
ほぼ全部書き直すことになると思います。
方針としては
●計算量を無視して、全ての組み合わせを試す。(サイズ10なら、2^10なので
なんとかなる)
●ちゃんとした手法(>>295で書いているような手法のどれか)を使う。
の二通りだと思います。
0297デフォルトの名無しさんNGNG
ほかのスレにあったのですが、考え方としてダメ?258じゃなけど
#include <stdlib.h>
#define LEN 5
#define MAX 8 

struct NIMOTU {
  char name;  char used;  int size;   int points; 
} data[LEN]={{'a',0,4,450},{'b',0,5,570},{'c',0,2,225},{'d',0,1,110},{'e',0,6,670}};

char solution[LEN];
int  max_points = -1;
int  max_size = 0;

int less(const void *x, const void *y) {
  int n, m;
  if ((n = ((struct NIMOTU *) x)->size) <= 0) n = 1;
  if ((m = ((struct NIMOTU *) y)->size) <= 0) m = 1;
  return ((struct NIMOTU *) y)->points/m - ((struct NIMOTU *) x)->points/n;
}

int eval(int i, int rest) {
  int j, s = 0;
  for (j = i; j < LEN; j++)
    if (data[j].size <= rest)
      s += data[j].points;
  return s;
}

void knap(int i, int size, int points) {
  int j;
  if (points + eval(i, MAX - size) <= max_points) {
    return;
  }
  if (max_points < points) {
    max_points = points;
    max_size = size;
    for (j = 0; j < LEN; j++)
      solution[j] = data[j].used;
  }
  if (i >= LEN)
    return;
  for (j = i; j < LEN; j++) { /* 重複を省く */
    if (size + data[j].size <= MAX) {
      data[j].used = 1;  /* 入れる */
      knap(i+1, size + data[j].size, points + data[j].points);
      data[j].used = 0;  /* 出す */
    }
  }
}

int main() {
  int i;
  qsort(data, LEN, sizeof(struct NIMOTU), less);
  knap(0, 0, 0);
  for (i = 0; i < LEN; i++)
    if (solution[i])
      printf("%c", data[i].name);
  printf("\nTotal size = %d, Total points = %d\n", max_size, max_points);
}
0298258NGNG
上の参考のやつをみたのですが、かなり僕には厳しいです…

すべての組み合わせを試す方法でいきたのですが、どういうプログラムを書いていいのか方向性が見えません・・・

組み合わせってどうやって求めるのでしょうか?
またその重複を省く方法というのはどうすればいいのでしょうか?
0299デフォルトの名無しさんNGNG
>>298
って言うか、
同じのを入れてはいけないことになってんの?
その課題ではさ。
0300デフォルトの名無しさんNGNG
>>298
つまり、全ての荷物について、入れるか入れないかの二択をするわけです。
で、重量制限にかかっていないうちから、価値が最大になる組み合わせを見つける
わけです。
0301デフォルトの名無しさんNGNG
>258
これでいい?>すべての組み合わせを試す方法
#include <stdio.h>

#define LIMIT 121
#define N_STUFF (sizeof(stuff)/sizeof(stuff[0]))

static struct Stuff {
 char c;
 int weigh;
 int value;
} stuff[] = {
 { 'a', 39, 42 }, { 'b', 13, 12 }, { 'c', 68, 45 }, { 'd', 15, 5 }, { 'e', 10, 2 },
 { 'f', 20, 61 }, { 'g', 31, 89 }, { 'h', 15, 32 }, { 'i', 41, 47 }, { 'j', 16, 18 }
};

static int total_value[1 << N_STUFF];

int main(void) {
 int i, max_value = -1;
 for ( i = 0; i < (1 << N_STUFF); i++ ) {
  int j, total_weigh = 0;
  for ( j = 0; j < (int)N_STUFF; j++ ) {
   if ( i & (1 << j) ) {
    total_weigh += stuff[j].weigh;
    total_value[i] += stuff[j].value;
   }
  }
  if ( total_weigh > LIMIT )
   total_value[i] = -1;
  if ( total_value[i] > max_value )
   max_value = total_value[i];
 }
 for ( i = 0; i < (1 << N_STUFF); i++ ) {
  if ( total_value[i] == max_value ) {
   int j;
   printf( "Choise:" );
   for ( j = 0; j < (int)N_STUFF; j++ )
    if ( i & (1 << j) )
     printf( " %c", stuff[j].c );
   printf( "\ttotal value: %d\n", total_value[i] );
  }
 }
 return 0;
}
0302デフォルトの名無しさんNGNG
ていうかさ、いくら言っても素人なんだろ?
つくってやればいいじゃん。それで解決するだろ
0303デフォルトの名無しさんNGNG
#include <stdio.h>

#define LIMIT 8
#define NUMBER 5
#define MIN_SIZE 1

int ans[NUMBER];
int maxvalue;

struct nimotu
{
  char *name;
  int size;
  int price;
} data[]={{"a",4,450},{"b",5,570},{"c",2,225},
{"d",1,110},{"e",6,670}};

int cvalue(int index, int space, int value){
  int n, c1, c2;
  if(index == NUMBER){
     if(value > maxvalue){
       maxvalue = value;
       return 1;
     }
     return 0;
  }
  c1 = cvalue(index + 1, space, value);
  if(data[index].size > space){
    if(c1) ans[index] = 0;
    return c1;
  }else{
    c2 = cvalue(index + 1, space - data[index].size, value + data[index].price);
    if(c2){
      ans[index] = 1;
      return 1;
    }else{
      if(c1) ans[index] = 0;
      return c1;
    }
  }
}

int main(void)
{
  int i, value;
  int maxvalue = 0;
  cvalue(0, LIMIT, 0);

  printf(" 品 目 重量 価格\n");
  for(i = 0; i < NUMBER; i++){
    if(ans[i]) printf("%10s %5d %5d\n", data[i].name, data[i].size, data[i].price);
  }
  printf(" 合 計 %5d", maxvalue);
}
0304デフォルトの名無しさんNGNG
ぶひょ。
すでにつくってあげてた人がいた。スマソ

逝って来る
0305301NGNG
ゲッ、Choceの綴り間違えた(w
あ、total weighも表示したかったら自分で改良してね
ってその前にこれで合ってるのか知らんけど
0306258NGNG
301,303>>
ありがとうございます!
これを参考にもっとがんばってみます!
0307デフォルトの名無しさんNGNG
>>297
これって実質上、全検に毛の生えたようなもの
(ちょこっと枝狩りが付いている?)と解釈していいのか?

枝狩りが結構ヒューリスティックな方法(だと思う・・・)なので
まだ良く理解できん。

アルゴリズムの説明キボンヌ(特に eval の所)
0308名無しのだれかNGNG
長いソースは >>216 のソース置き場をご利用いただけます。
0309デフォルトの名無しさんNGNG
俺も作ってみた。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=5&fi=no

品 目 重量 価格
a 39 42
f 20 61
g 31 89
h 15 32
j 16 18
合 計 121 242
0310309NGNG
俺のコードは2重ループ。
一回目のループで最大値を求め、
二回目で最大値な組み合わせを求めたつもり。
0311309NGNG
二重じゃなくて2回ループ
0312デフォルトの名無しさんNGNG
ただ全検するだけならこんなんで良いのでは?

#include <stdio.h>

#define item_NUM 5
#define MAXWEIGHT 8

struct { int weight, point; } item[ item_NUM ] =
  { {4,450,}, {5,570,}, {2,225,}, {1,110,}, {6,670,}, };

int main( void )
{
  int i, j;
  int maxpoint = -1, maxi = -1;

  for( i = 0 ; i < ( 1 << item_NUM ) ; i ++ ) {
    int weight = 0, point = 0;

    for( j = 0 ; j < item_NUM ; j ++ )
      if( ( i >> j ) & 1 ) {
        weight += item[ j ].weight;
        point += item[ j ].point;
      }
    if( weight <= MAXWEIGHT && maxpoint <= point ) {
      maxpoint = point;
      maxi = i;
    }
  }
  if( maxi == -1 )
    printf( "not found\n" );
  else {
    for( j = 0 ; j < item_NUM ; j ++ )
      if( ( maxi >> j ) & 1 )
        printf( "%c", 'A' + j );
    printf( " point=%d\n", maxpoint );
  }
  return 0;
}
0313デフォルトの名無しさんNGNG
>312
それって最適解が2つ以上あっても大丈夫か?
0314デフォルトの名無しさんNGNG
>>313
とりあえず1つだけ。
複数解を表示する必要があれば、その分の記憶域を確保すれば良い
(ちょっとコードをいじる必要があるが)。
0315 ◆aCDPDEl2 NGNG
またきたよぉ。
0316デフォルトの名無しさんNGNG
誰よ?
0317 ◆aCDPDEl2 NGNG
宿題をくれぇぇぇぇえええええ!!!!!!!!!!!!!!!!
0318デフォルトの名無しさんNGNG
applet 作って。
0319 ◆aCDPDEl2 NGNG
Cの易しい問題カモーン
0320デフォルトの名無しさんNGNG
宿題というか、ム板プログラムコンテストでもする?
実行時間競うとか。
0321デフォルトの名無しさんNGNG
>>320
テーマは?
0322デフォルトの名無しさんNGNG
>>320
おまえら作ったプログラムをウプせよ
http://pc3.2ch.net/test/read.cgi/tech/1027938403/
てのがあるけど
0323デフォルトの名無しさんNGNG
うーん、
●実行時間を競うもの
●なんかのゲームを対戦させるもの

どっちがいいかな?
0324デフォルトの名無しさんNGNG
>323
実行時間で比較されるのはあんまし好きじゃないなあ。俺は保守性、可読性マンセーなんで
0325デフォルトの名無しさんNGNG
囚人のジレンマゲームとか、そういう類?
0326デフォルトの名無しさんNGNG
宿題を出してみよう。暇な人はどうぞ。

次のような形式で地形(迷路)が表されている。
32
11
1111111110111111111111111111100G
10000000001111111111100000000011
11111011111110000000001111101111
11110000000000101111111111101111
10110111111111101111111111101111
10110000000000101110000011101111
10111111111110100000111000001101
10110000000000111011111100111101
10010111111111111011111110000001
11110111111000000000000000111111
S0000111111111111111111111111111

ここで、1が壁を表し、0は通路を表す。SはスタートでGはゴールを表している。
最初の32と11は、横・縦のサイズである。
このときスタートからゴールまでの最短距離を求めるプログラムをかけ。
縦横には移動できるが、斜めには移動できない。迷路のデータは標準入力から
入力するものとする。
0327デフォルトの名無しさんNGNG
#include <stdio.h>

#define item_NUM 5
#define MAXWEIGHT 8

struct { int weight, point; } item[ item_NUM ] =
{ {4,450,}, {5,570,}, {2,225,}, {1,110,}, {6,670,}, };

int main( void )
{
int i, j;
int maxpoint = -1, maxi = -1;

for( i = 0 ; i < ( 1 << item_NUM ) ; i ++ ) {
int weight = 0, point = 0;

for( j = 0 ; j < item_NUM ; j ++ )
if( ( i >> j ) & 1 ) {
weight += item[ j ].weight;
point += item[ j ].point;
}
if( weight <= MAXWEIGHT && maxpoint <= point ) {
maxpoint = point;
maxi = i;
}
}
if( maxi == -1 )
printf( "not found\n" );
else {
for( j = 0 ; j < item_NUM ; j ++ )
if( ( maxi >> j ) & 1 )
printf( "%c", 'A' + j );
printf( " point=%d\n", maxpoint );
}
return 0;
}

312が書いたプログラムなのだが、これでは組み合わせが表示されないうえに組み合わせたものの数だけ答えが表示されてしまう。
これを改善してみよう。

0328 NGNG
>>324
つまり、クイックソートよりバカソートが好きと。
0329デフォルトの名無しさんNGNG
>>324
俺もだ。
>>328
クイックソートって再帰で書かれてるのがちょっとね。再帰で書かない方法
もあるけど、本見て再帰で書かれていて嫌になった事がアルヨ。
0330324NGNG
>328
たかが十数個の要素をソーティングするのにqsort()つかったり、
ましてやクイックソート関数を自作するようなヤシは即頃すけど
0331>>327NGNG
>>301
0332デフォルトの名無しさんNGNG
>>330
え、そう? 要素数10数個程度にこそqsortを使うけど。
要素数が数万とかそれくらいになってくるとさすがに自前でソートすることを考える。

確実に動くものを作っておいて性能に問題が出たときに改めて
そういうところを見直すもんだと思ってた。
せっかく便利な関数があるんだから使わないと損だよ(w

いや、無論ソート前にquick sortの苦手な配列になっていることが確実なら、
最初から自前のソートを実装するかもしらんが。
4321→1234みたいなソートね。

で、確かqsortってquick sortで実装することは求められてなかったんじゃなかったっけ。
0333デフォルトの名無しさんNGNG
331>>
327は夏厨なんだからもっとわかりやすく教えてやれよ。
0334324NGNG
>332
数10と十数は大違いだから覚えとくように
要素数が20以下ならqsortより自前のbubble sortのほうが速い
0335デフォルトの名無しさんNGNG
>>334
>>330も>>332もどっちも10数(十数)だけど?

要素数20以下つったら、バブルソートの方が速いつったって、
そんな少ない要素数ならどっちも誤差じゃないのかな。
ループのなかで何度も何度もソートするというなら、
そりゃ自前でソートするしアルゴリズムも検討するよ。
そうでなければ誤差だと思うけど考え方間違ってる?
0336324NGNG
>335
>>>330も>>332もどっちも10数(十数)だけど?
すまん。アホった

当然俺の言ってるのは
>ループのなかで何度も何度もソートするというなら
これだが?
0337デフォルトの名無しさんNGNG
>>336
了解、それなら納得です。
0338Rina ◆tI333vNE NGNG
JavaならArrays.sort(). 要素数が少ない場合でも
なんかゴニョゴニョやって効率の良いソートをしてくれる…らしい.

Cならqsort(). ただし, 要素数が少ないってことがコーディングの
段階で分かってる場合はバブルソートをベタ書き(関数にしないってことね).
注釈で
  // 要素数が少ないのでバブルソート:N>=20になったらqsort() :)
って書いておく.

以上, うちのコーディング規約より.
0339デフォルトの名無しさんNGNG
以下の二分法を利用してsinx=0の一つの解であるπの近似値を求めよ。
二分法では、次の中間値の定理を用いる。
「関数f(x)が区間[x0,x1]で連続であり、f(x0)*f(x1)<0であるとすると、f(x)=0は、区間(x0,x1)に根を持つ」
1.f(x0)*f(x1)<0となる適当な初期値x0,x1を与える。
2.くかん[x0,x1]の中点での関数の値と中間値の定理を利用することで、(少なくとも一つの)根が存在する範囲を区間[x0,x1]の半分に確定することができる。
3.そのような範囲の中点xmでの関数の絶対値|f(xm)|が十分に小さいときxmを方程式の根とする。
4.そうでないときは2,3の操作を繰り返し、範囲を徐々に狭めながら方程式の根を探す。

言語はcです。
全然わかんない、、、、どなたかプログラム書いてください
よろしくお願いします
0340デフォルトの名無しさんNGNG
#include <stdio.h>
#include <math.h>

#define VERYSMALL 0.000001

int main(){
  float x0, x1, xm, sinx;;
  x0 = 1;
  x1 = 5;

  while (1){
    xm = (x0 + x1) / 2;
    sinx = sin(xm);
    if(sinx < VERYSMALL && sinx > -VERYSMALL){
      printf("%f\n", xm);
      break;
    }else{
      if(sinx * sin(x0) < 0){
        x1 = xm;
      }else{
        x0 = xm;
      }
    }
  }
}
0341339NGNG
はやっっっっ!!!!
ありがとうございました!!
0342デフォルトの名無しさんNGNG
#include <stdio.h>
#include <math.h>

#define EPS 0.0000000001

double x0 = 3.0, x1 = 4.0;

int main(void)
{
double xm;

do {
xm = (x0 + x1) / 2.0;

if (sin(x0)*sin(xm) < 0)
x1 = xm;
else
x0 = xm;
} while (fabs(sin(xm)) > EPS);

printf("pi = %.10g\n", xm);

return 0;
}

0343デフォルトの名無しさんNGNG
いやん先越されたー。しょっくー
#include <stdio.h>
#include <math.h>

int main()
{
const double eps = 0.000001;

double x0, x, x1;

double sin_x;

x0 = 3;
x1 = 4;

while( x = ( x0 + x1 ) / 2, sin_x = sin(x), fabs(sin_x) >= eps ) *( sin_x > 0 ? &x0 : &x1 ) = x;

printf("pi is nearly equal to %lf", x);

return 0;
}
0344339NGNG
もう一つお願いしてもよろしいでしょうか
「適当な実数aに対して、指数関数のテイラー展開を利用してeのa
乗の近似値を求めよ」
です。お願いできますでしょうか、、、、
こちらも言語はcです。
0345デフォルトの名無しさんNGNG
#include <stdio.h>
#include <math.h>

#define EPS 0.0000000001

double a = 7.0;

int main(void)
{
int n = 1;
double s = 1, ds = 1;

do {
ds /= n;
ds *= a;
n++;
s += ds;
} while (fabs(ds) > EPS);

printf("e^%g = %.15g\n", a, s);

return 0;
}
0346339NGNG
ううっ、、、あんなに悩んでた問題が一瞬で、、、、、
ありがとうございました。
0347デフォルトの名無しさんNGNG
>>345
速いねぇ。
0348Rina ◆tI333vNE NGNG
早すぎw
いちおう, 私が書いたのを.

#include<stdio.h>
#include<math.h>

#define EPS (1e-15)

#define x1 3.0
#define x2 4.0

/*
* @param a, b: x1, x2
* @param func: 計算用の関数
*/
double BesectionMethod(double a, double b, double (*func)()) {
double fa, fb;
double tmp;
double x;

do {
tmp = (a + b) / 2.0;
x = sin(tmp);

if ( fabs(x) < EPS ) {
return tmp;
}

if((*func)(a) * x < 0){
b = tmp;
} else {
a = tmp;
}
} while (1); /* infinity */
}

int main(void) {
printf("答え: %lf\n", BesectionMethod(x1, x2, sin));
}
0349デフォルトの名無しさんNGNG
>>348
汎用ですな。
0350デフォルトの名無しさんNGNG
実は同じ学校だったとかだったらおもしろいかも
0351Rina ◆tI333vNE NGNG
Rina.mottou == 汎用

一番のりじゃなかったのが実は悔しいw
0352デフォルトの名無しさんNGNG
>>351
まあ、依頼レスを見た時刻にもよるけどねぇ。
それにしても345とかは速い。
0353Rina ◆tI333vNE NGNG
にしても, 大の大人がこんな時間に何やってんだか…w
…とかいいつつ, 次の宿題に秘かに期待している自分がここに(苦笑
0354デフォルトの名無しさんNGNG
>>353
同意w
0355デフォルトの名無しさんNGNG
>>348
sin のままのとこあるよ。
あと (*func)(a) は func(a) でもいいね。

0356Rina ◆tI333vNE NGNG
うわー、しまったw > sin(tmp)

一度π用に書いて, その後書き直したんで見落としちゃったか.
仕事中にやったら殺されるなw ガタガタブルブル(((゜Д゜)))ガタガタブルブル

関数ポインタって(*func)()じゃなくてfunc()でコールできるの?
それは初耳.
0357Rina ◆tI333vNE NGNG
あ、func()でもコールできるんだねぇ…一つ賢くなりますた.
0358339NGNG
調子に乗ってもう一問だけお願いいたします。
言語はcです。
「正の整数nに対して、0<=i<=nなるiのうち、gcd(i,n)=1となるiの個数をψ(n)とする。適当な正の整数mに関して、1<=a<=mなるすべてのaについて、(aのψ(n)乗)*(modm)、gcd(a,m)を計算せよ。」
ヒントで、「ψ(n)、gcd(a,b)、(aのk乗)*(modm)を計算する関数をそれぞれ定義するとよい。」
「aのk乗を計算する場合には、kの2進数展開を利用するとよい」
「(aのk乗)*(modm)を計算する際に、aのk乗を計算してから(modm)を計算しないこと」
とあります。よろしくお願いします。
0359デフォルトの名無しさんNGNG
modmの前の*の意味がわからん
0360Rina ◆tI333vNE NGNG
そもそも何がしたいのか分からん<マテ
gcdって暗号だっけ…とりあえず数学のお勉強から始めますかw
>>351に期待age
0361339NGNG
*は掛けるのつもりで書きました。
わたしもmod,gcdの意味さえ分からないです。
何とか調べますんでちょっと待ってください。
0362Rina ◆tI333vNE NGNG
Rinaたんは今回は捨ての方向で(ぉい).
0363デフォルトの名無しさんNGNG
modはモジュロ、gcdは最大公約数だっけか?
ヒントの意味がまるでわからん。
0364Rina ◆tI333vNE NGNG
うん, 確かそう.
modとgcdは作ったけど, 捨ての方向でw

いまノートで作業してる間横で, さっきまで使ってたマシンが
逝かれました…. 買い替えるかぁ….
0365339NGNG
二つ目のヒントでしょうか
kの2進数展開とは、
aのk乗=(i=0からの)Πaの(ki*2のi乗)乗
k=(i=0からの)Σ(ki*2のi乗)
三つ目のヒントはaが大きな数の場合にすぐ破綻してしまうため
とあります。
ものすごくわかりにくい書き方しかできずすいません。
だれか〜本当にお願いします〜!!!
0366デフォルトの名無しさんNGNG
>仕事中にやったら殺されるなw ガタガタブルブル(((゜Д゜)))ガタガタブルブル
>
>関数ポインタって(*func)()じゃなくてfunc()でコールできるの?
>それは初耳.
おめ−、学生さんだろ。学生さんが悪いとはいわんが
なんで「仕事中」なんて書くんだ?
0367Rina ◆tI333vNE NGNG
学生?私が?
…あの〜、いちおう社会人なんですけど(ヘタレですが).
0368339NGNG
みんな〜捨てないで、、、
捨てないでくだせ〜〜〜〜〜
0369デフォルトの名無しさんNGNG
>>368
>*は掛けるのつもりで書きました
って、mod m はかけるものじゃないでしょ?
0370339NGNG
ううううぁぁぁぁぁぁぁ!!!!!
そっっっそうか!!(mod m)のまえの*いらないですね
全く分かってないまま質問してすいません。。。。
0371 NGNG
>>358
ひとまず・・・。

unsigned gcd(int x, int y)
{
 unsigned i = x >= 0 ? x : -x;
 unsigned j = y >= 0 ? y : -y;
 if (i < j) {
  unsigned t = i;
  i = j;
  j = t;
 }
 while (j) {
  unsigned k = j;
  j = i % j;
  i = k;
 }
 return i;
}

int psi(int n)
{
 int r = 0, i;
 for (i = 1; i < n; i++)
  if (gcd(i, n) == 1)
   r++;
 return r;
}
0372デフォルトの名無しさんNGNG
>>366
いや、まあ関数ポインタfuncが
(*func)();
ではなく、
func();
で呼べてしまうのがもともと気持ち悪いんであって。
funcが*funcと同値であるならば、**funcだって同値だし、
だったら(***************************************func)();
でも呼べてしまうわけで、さすがにこれは気持ち悪いでしょ。

それに昔のCだと当然のごとく(*func)();でしか呼べなかったんだし。
ま、不勉強は否めないにしてもな(w

そういう漏れはC99のことほとんどしらん。
0373 NGNG
>>371
nが1のときのことを考えてなかった。

int psi(int n)
{
int r = 0, i;
for (i = 0; i <= n; i++)
if (gcd(i, n) == 1)
r++;
return r;
}
0374Rina ◆tI333vNE NGNG
つまり, 今まで通り (*func)() 書いた方がいいってことですな.
0375372NGNG
>>374
気持ち悪いにしても、意図は明確なんだしfunc();って書きましょうよ(w
0376Rina ◆tI333vNE NGNG
>>375
あ, 可読性を重視してfunc()って書けってレスだったのね.
てっきり互換性を重視して(*func)()って書けって文章かと
早合点しちゃったよw
内容もスレ違いだし, 逝ってきます.
0377デフォルトの名無しさんNGNG
>>358
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=7&fi=no
こんな感じか?
2進数処理とかよくわからん。
0378デフォルトの名無しさんNGNG
>>358
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=8&fi=no
やってみた
0379デフォルトの名無しさんNGNG
>>358
int f( int a ) // (aのψ(n)乗)*(modm)を計算する関数
{ return 1; }

詳しくは「オイラーの定理」を検索しれ。
0380 ◆aCDPDEl2 NGNG
おはよう。誰か>>326やってる人いる?
0381デフォルトの名無しさんNGNG
>>379
問題よく見れ
0382デフォルトの名無しさんNGNG
オイラーの定理

 自然数nに対して、1,2,3,…,nの中でnと互いに素な数の個数をφ(n)

 とすれば、(a,n)=1なる整数aに対して

     a^φ(n)≡1(mod n)

となる。

また、この時のφをオイラー関数と言う。
0383デフォルトの名無しさんNGNG
だめなやつ
0384デフォルトの名無しさんNGNG
>>326
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=10&fi=no
0385377NGNG
こうしろってこと?
pow_psi_mod(int a, int n, int m)
{
if (n == m && gcd(a, n) == 1) return 1;

return pow_mod(a, psi(n), m);
}
0386326NGNG
>>384
こんな感じの巨大な地形にも対応させてと言って見ます、
32
10
0000000000100000100000000000000G
00000000000000001111111111001100
11011111111100001000000001110100
00000000000100001000000001000100
00000000000100000000000000000100
11111111011111111000000001000100
00000000000000001000000001000000
00000000000000001000000001000100
00000000000000001000000000000100
S0000000000000001000000000000000
0387 ◆aCDPDEl2 NGNG
>>326=386 おはよう。俺にまかせとけ。一週間あればできそう。
0388デフォルトの名無しさんNGNG
どなたかこのプログラム書いてください。
cの勉強を始め、いきなり壁に衝突、、、、助けてください。
「ディレクトリを指定すると、そのディレクトリのファイルの詳細一覧を表示するプログラムを作成せよ。なお「.」で始まるファイルも表示に含めること。」言語はcです。
次のようなヒントがあります。プログラム内でsystem()という関数を用いると、シェルを介してコマンドを実行できる。system()の引数として文字列を与えると、その文字列をコマンドとして実行する。
system()を用いるには、プログラムの先頭に#include<stdlib.h>を記述する必要がある。
また文字列操作関数を用いるには、同様に#include<string.h>を記述する必要があることに注意せよ
0389デフォルトの名無しさんNGNG
上のほうでやってたナップサック問題のプログラムなんですけど、わけわかんないんでコメントつけてもらえませんか?
#include <stdio.h>

#define LIMIT 121
#define NUMBER 10

struct nimotu { 
 char name;
 int weight;
 int value;
} nimotu[] = {
 { 'a', 39, 42 }, { 'b', 13, 12 }, { 'c', 68, 45 }, { 'd', 15, 5 }, { 'e', 10, 2 },
 { 'f', 20, 61 }, { 'g', 31, 89 }, { 'h', 15, 32 }, { 'i', 41, 47 }, { 'j', 16, 18 }
};

int total_value[1 << NUMBER];  /*[]の中身は?*/

int main(void) {
 int i, max_value = -1; /*なんで−1なのでしょう?*/
 for ( i = 0; i < (1 << NUMBER); i++ ) { /*ここの<<の部分*/
  int j, total_weight = 0;
  for ( j = 0; j < NUMBER; j++ ) { 
   if ( i & (1 << j) ) {        /*ここの<<の部分*/
    total_weight += mimotu[j].weight;
    total_value[i] += nimotu[j].value;
   }
  }
  if ( total_weight > LIMIT )
   total_value[i] = -1;
  if ( total_value[i] > max_value )
   max_value = total_value[i];
 }
 for ( i = 0; i < (1 << NUMBER); i++ ) { /*ここの<<*/ 
  if ( total_value[i] == max_value ) {
   int j;
   printf( "Choise:" );
   for ( j = 0; j < (int)NUMBER; j++ )
    if ( i & (1 << j) )
     printf( " %c", nimotu[j].c );
   printf( "total value: %d\n", total_value[i] );
  }
 }
 return 0;
}


疑問のところ特によろしくお願いします・・・
0390デフォルトの名無しさんNGNG
>>388
unix linux cygwin dos? 実行環境(OSとか)を書きなさいよ。

詳細情報まで表示する ls -l (dir)コマンドを system で実行して
1行づつ(スペース or TAB) で切り分けて表示してみれ。
0391デフォルトの名無しさんNGNG
>>389
ビットシフト演算子がわからんだけ?
max_value = -1の理由は、これから
0よりも大きい数を入れていって、
それを最大値としていくから。
0392デフォルトの名無しさんNGNG
2out-of5符号による表示。5ビットからなる符合で、その中の2ビットが1である
符号を2out-of5符号という。この条件を満足する符号語はちょうど10個存在するので、
0から9までの10種類の数字を表すことができる。たとえば数と符号を次のように対応
させる。
0=00011 1=00101 2=01001 3=10001 4=00110
5=01010 6=10010 7=01100 8=10100 9=11000
(1)ユーザーに、整数を2out-of5符号に変換するか、逆変換するかを尋ねる。(入力
が1ならば変換、2ならば逆変換とする。)
(2)変換の場合:3桁の整数をユーザーに入力させて、それを変数xに代入します。
(3)10で割った商と余りを利用して、xを3つの整数に分離します。
(4)それぞれの整数を2out-of5符号に変換して表示する。ヒント:2次元配列
a[10][5]の中にそれぞれの数の2out-of5符号を0や1で0入れておくと便利です。
(5)逆変換の場合:5桁の2進数を読み込んで、配列yに代入する。(1桁ずつよんでよい。)
(6)yの値を上の表と比較して、同じものがあればその数字をプリントする。該当する
ものがなければ「2out-of5符号ではありません。」とプリントする。
条件
1.配列yを2out-of5符号の配列と比較する部分を関数にする。

上の文章が問題です。自分で考えても全然わかりません。
お願いします。
0393デフォルトの名無しさんNGNG
<`∀´>ウリナラマンセ
0394デフォルトの名無しさんNGNG
>>388
で、
ttp://www.ncad.co.jp/~komata/c-kouza3.htm
に非常に良く似た課題に対する解説がある。参考になされ。
0395デフォルトの名無しさんNGNG
391>>
ビットシフト演算子もわからないのですが、全体的にどういう流れでどういうことをしているのかを知りたいのです。
ここはこういう計算をしてるみたいな…
0396200NGNG
>>262
すみません。昨日といてもらった問題がちゃんと実行されないのですが
0397人行知能NGNG
>>366
> すみません。昨日といてもらった問題がちゃんと実行されないのですが
エラー:「ちゃんと」という言葉が曖昧です。
エラー1、警告0、要求は受理されませませんでした。
0398デフォルトの名無しさんNGNG
>397
0399デフォルトの名無しさんNGNG
>>389は
http://pc3.2ch.net/test/read.cgi/tech/1026281505/975-979
0400309NGNG
>>389
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=6&fi=no
俺のやつはみてもらえたのだろうか?
がんばって書いたのだけれど・・・
0401254NGNG
>>396
>>397も書いてるけど、「ちゃんと実行されない」の意味がわからない。

・コンパイルエラーになる
・コンパイルできたけど実行時エラーになる
・実行できたけど出力されたものが期待したものと違う
・それ以外

どれ? 前者ふたつのエラーの場合はエラーメッセージをコピペして。
後者ふたつの場合はもうちょっと状況を詳しく書いてみて。
一応こっちはコンパイル&実行して正しく動くことを確認してあるよ。
0402デフォルトの名無しさんNGNG
>358
一応必要な関数は書いたよ。問題は意味が分からんので却下
(aのψ(n)乗)(modm)
ここに出てくるnて何だよ?

#include <stdio.h>
#include <math.h>

int square( int x ) {
 return x * x;
}

/* (a^k)%m */
int expmod( int a, int k, int m ) {
 if ( k == 0 ) return 1;

 if ( k%2 == 0 )
  return ( square(expmod(a, k/2, m)) % m );
 else
  return ( (a * expmod(a, k-1, m)) % m );
}

int gcd( int x, int y ) {
 while ( y != 0 ) {
  int tmp = y;
  y = x % y;
  x = tmp;
 }
 return x;
}

int psi( int n ) {
 int i, ans = 0;
 for ( i = 0; i <= n; i++ )
  if ( gcd(i, n) == 1 ) ans++;
 return ans;
}
0403デフォルトの名無しさんNGNG
>>401
コンパイルはできるんですが思う通り出力されないんですが
0404200NGNG
#include <stdio.h>

static void print_a(const char *a, size_t size)
{
char state = a[0];
int i, count = 1;

for (i = 1; i < size; i++) {
if (a[i] != state) {
if (state == '0') {
count = -count;
}
printf("%d,", count);
state = a[i];
count = 1;
}
else {
count++;
}
}
printf("\n");
}

int main(int argc, char * argv[])
{
char a[38];
int i = 0, ch;

while ((ch = getchar()) != EOF) {
if (ch == '\n') {
print_a(a, i);
i = 0;
}
else {
a[i++] = ch;
}
}
if (i) {
print_a(a, i);
}
return 0;
}
0405254NGNG
>>403
もちっと詳しく書いてもらえないとこっちとしても対処のしようがないよ。
・なにをして
・どうなった
・どうなってほしい
くらいは書いておくれ。

仕事が立て込んでるのでレスポンス悪いよ、すまんな。
0406デフォルトの名無しさんNGNG
直接宿題とは関係ないんですが、プログラミングを勉強すると
将来どのようなことに役立つのでしょうか?今大学で教わって
いるのですが、学習意義がまだよくわかりません。
大雑把な質問ですみませんがどなたか教えてください。
僕は理工学部の二年生です。
0407デフォルトの名無しさんNGNG
>>406
プログラムできない奴よりはできる奴のほうが職業選択の
幅は広い
0408384NGNG
>>386
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=11&fi=no
0409デフォルトの名無しさんNGNG
俺さ。
厨房の時に「なんで三角関数なんて勉強するんだ?」って思ったんだよ。
工房の時に「なんで微分積分なんて勉強するんだ?」って思ったんだよ。
ところがさ。PGになって「なんで色々勉強しなかったんだ?」って思ったんだよ。
要するにさ。やりたいことが決まってるなら、それを勉強すれば良いと思うよ。
やりたいことが決まってないなら、なんでも勉強すると良いよ。
ということを若いころに言われた気がするけど、俺は理解していなかったからさ。
多分>>406も理解できないんじゃないかな。
0410デフォルトの名無しさんNGNG
>>406
理工学部であれば、将来何らかの技術職に就くつもりかな。
であれば、道具として計算機を使うだろう。
そのためにプログラミングを学ぶのは決して無駄じゃないと思うよ。
ちょっと条件を変えて同じような計算を何度もやったりとかなんて結構あるんじゃなかな。
電卓でいちいちその計算をなぞるよりも、ちょっとプログラム組んで自動化させたら楽だしね。

多分、技術職になれば嫌でもプログラミングを覚えないと仕事にならんと思う。
研究職ならなおさらだ。基礎体力だと思っておいたほうがいい。

それ以前にプログラミングは楽しいものだが、それは人によるか(w

大雑把な質問なんで大雑把な答を返してみた。
0411406NGNG
>>407、409、410
ありごとうございました。とても参考になりました。
0412デフォルトの名無しさんNGNG
>>406
漏れも似たような境遇なんだけどさ、
正直なんでそう思えるのかがわからんよ。
将来ってか今必要じゃない?研究とかでさ。
漏れは逆になんでこんな基本的なことしか教えてくれないんだろう、と思ってるよ。
授業で習ったことだけじゃ研究に使うプログラムも満足に書けないからね。
理工系だろ?プログラム書けないっつーことは、英文科行ってて英語喋れない奴と同類だぜ?
0413デフォルトの名無しさんNGNG
>>406
おまえ自身が将来何の役にもたたなくて
存在意義がないと思う。
0414200NGNG
0000000000000000111100000000000000000
を入力すると16,4,17,と出力して
 0000000000011111111111111000000000000
を入力すると11,14,12,と出力して以下同じように出力したいです
 0000000000001100000000110000000000000
 0000000000000111000011100000000000000
 0000000000000011100111000000000000000
 0000000000000011100111000000000000000
 0000000000000001111110000000000000000
 0000000000000001111110000000000000000
 0000000000000111111111100000000000000
 0000000000011111000011111000000000000
 0000000001111000000000011110000000000
 0000000011100000000000000111000000000
 0000001110000000000000000001110000000
 0000111100000000000000000000111100000
 0001111000000000000000000000011110000
 0001111000000000000000000000011110000
 0000111100000000000000000000111100000
 0000001110000000000000000001110000000
 0000000001111111111111111111000000000
 0000000000000111111111100000000000000
 0000000000000000000000000000000000000
要するに
16,4,17,
11,14,12,
:
:
と出力したいです
0415デフォルトの名無しさんNGNG
したいんですかそうですか
0416デフォルトの名無しさんNGNG
したいんですかたいへんですね
0417200NGNG
>>401
0000000000000000111100000000000000000
を入力すると16,4,17,と出力して
 0000000000011111111111111000000000000
を入力すると11,14,12,と出力して以下同じように出力したいです
 0000000000001100000000110000000000000
 0000000000000111000011100000000000000
 0000000000000011100111000000000000000
 0000000000000011100111000000000000000
 0000000000000001111110000000000000000
 0000000000000001111110000000000000000
 0000000000000111111111100000000000000
 0000000000011111000011111000000000000
 0000000001111000000000011110000000000
 0000000011100000000000000111000000000
 0000001110000000000000000001110000000
 0000111100000000000000000000111100000
 0001111000000000000000000000011110000
 0001111000000000000000000000011110000
 0000111100000000000000000000111100000
 0000001110000000000000000001110000000
 0000000001111111111111111111000000000
 0000000000000111111111100000000000000
 0000000000000000000000000000000000000
要するに
16,4,17,
11,14,12,
:
:
と出力したいです
0418デフォルトの名無しさんNGNG
ほらよ。mainは前のままでいい。

static void print_a(const char *a, size_t size)
{
 char state = a[0];
 int i = 1, count = 1;

 for (i = 1; i < size; i++){
  if (a[i] != state) {
   printf("%d,", count);
   state = a[i];
   count = 1;
  }
  else{
   count++;
  }
 }
 if(size){
  printf("%d,\n",count);
 }
 else{
  printf("\n");
 }
}
0419デフォルトの名無しさんNGNG
>>200
答えてやるから二度とくるな

#include<stdio.h>

#defineBUF_SIZE(1024)

intmain( int argc, char *argv[] )
{
charbuf[BUF_SIZE], *cp, *pp;
intcnt, i, n;

while(1){
while(1){
gets( buf );
if( strlen(buf) )
break;
}
if( !strcmp( buf, "0" ) )
break;

for( pp = cp = buf, n = 0; cp = strchr( cp, ',' ); pp = ++cp, n++ ){
*cp = '\0';
cnt = atoi( pp );
if( !cnt )
break;
for( i = 0; i < cnt; i++ )
printf( "%d", (n%2)?1:0 );
}

printf( "\n" );
}

return 0;
}
0420デフォルトの名無しさんNGNG
tabが消えた
#include <stdio.h>
#define BUF_SIZE (1024)

int main( int argc, char *argv[] )
{
char buf[BUF_SIZE], *cp, *pp;
int cnt, i, n;

while(1){
while(1){
gets( buf );
if( strlen(buf) )
break;
}
if( !strcmp( buf, "0" ) )
break;

for( pp = cp = buf, n = 0; cp = strchr( cp, ',' ); pp = ++cp, n++ ){
*cp = '\0';
cnt = atoi( pp );
if( !cnt )
break;
for( i = 0; i < cnt; i++ )
printf( "%d", (n%2)?1:0 );
}

printf( "\n" );
}

return 0;
}
0421254NGNG
>>414
うん、始めは>>200の逆の操作をすれば良いのかな、とおもってた。
そのつもりで、>>259のプログラムを書いたんだけどよくよく>>253を読んでみると、

>カウンターの値をプリントして1の場合にはそのまま数字をプリ
>ントして0の場合には、符号をマイナスにしてプリントする。

って書いてあるのよ。だから、0の連続では-符号つけて出してみた。
これ、問題が悪いよ。たぶん。お、おれは悪くない(必死だな)。

で、回答については既に出てるようなので略。
0422デフォルトの名無しさんNGNG
C言語の課題です。わかりません。誰か、教えてください!!
『4000未満の4桁のアラビア数字を読み込んでローマ数字に変換せよ。
入力された数字を10で割った時の商と余りを利用せよ。
尚、アラビア数字、ローマ数字は、順に1=�T、5=�X、10=�]、50=L、100=C、500=D、1000=Mとなる。
たとえば、MMDCL�]�X�T�T=1000+1000+500+100+50+10+5+1+1=2667です。
また、桁の数が4、9の場合は、引き算を適用します。たとえば、�T�X=5−1=4、�T�]=10−1=9です。
対話的に入力しますので、その入力誤りに対しては、再度入力するように表示して再入力させます。     』
0423デフォルトの名無しさんNGNG
なにが分からないのか明記せよ
0424422NGNG
プログラムを作れません…。作成してください。お願いします!
0425デフォルトの名無しさんNGNG
いやだから、プログラムのどの部分がわからんのよ?
まさか、課題が出るような場所にいるのにコンパイルの仕方すらワカランとは言わないよな?
0426422NGNG
コンパイルの仕方は、わかるんですが、コンパイルするまでのプログラムが、どう作ったらいいのかわからなくって…。
0427デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int i;

scanf("%d", &i);
if (i == 0x0a6b) {
puts("MMDCLXVII");
}
else {
puts("わかりません");
}
}

とりあえず、例に関しては正しい答えを返しますが、何か?
0428デフォルトの名無しさんNGNG
1.テキストエディタでソースファイルを開く
2.C言語のプログラムを書く

あとは、アンタの知ってるコンパイル。
ていうか、main()関数も書けないの?
どこまでできんのよ? はっきりしろよ。
0429デフォルトの名無しさんNGNG
>>426
入力を求めて、入力の誤りを検出してメッセージを出すくらいなら作れるんじゃないの?
それもダメ?
0430デフォルトの名無しさんNGNG
すいません。自分の書き方がおかしかったです。2667ってのは、あくまで、ヒントの部分で、問題自体は、一行です。
『4000未満の4桁のアラビア数字を読み込んでローマ数字に変換せよ。
ヒント(入力された数字を10で割った時の商と余りを利用せよ。
尚、アラビア数字、ローマ数字は、順に1=�T、5=�X、10=�]、50=L、100=C、500=D、1000=Mとなる。
たとえば、MMDCL�]�X�T�T=1000+1000+500+100+50+10+5+1+1=2667です。
また、桁の数が4、9の場合は、引き算を適用します。たとえば、�T�X=5−1=4、�T�]=10−1=9です。
対話的に入力しますので、その入力誤りに対しては、再度入力するように表示して再入力させます。   )  』
0431デフォルトの名無しさんNGNG
>>422
もしかして、「ローマ数字」が何なのかも知らなかったりしないか?
知っていれば問題文を丸写ししたりしないだろう。
自分の生まれた年(西暦)がローマ数字でどう表現されるか、答えられるか?
0432デフォルトの名無しさんNGNG
>>430
1) アラビア数字を読み込む
2) 4000未満でなければ、再度入力するよう表示して、1)へいく
3) 入力された数字を10で割ったときの商と余りを求めることで
  桁毎の数字を求める
  2667 : int → { 2, 6, 6, 7 } : int[4]
4) int roma[4][10] = { {略}, {略}, {略}, {"I", "II", "III", "IV", 略}};
  という配列と3)の結果を使ってローマ数字を表示する。

という方針で作るといいと思うよ。
0433デフォルトの名無しさんNGNG
MCML�T�T�T�T�T(1982)ですかね…
0434432NGNG
間違えた
4) char* roma[4][10] = { {略}, {略}, {略}, {"I", "II", "III", "IV", 略}};
  という配列と3)の結果を使ってローマ数字を表示する。
0435デフォルトの名無しさんNGNG
>>432
2)4000以上もしくは1000未満の数字が入力されたら
 再度入力するように表示して1)へいく

一応、問題に「4桁の数字」ってあるんで。
0436432NGNG
更に間違えてた
4) char* roma[4][9] = { {略}, {略}, {略}, {"I", "II", "III", "IV", 略}};
  という配列と3)の結果を使ってローマ数字を表示する。
0437430NGNG
>>432
0438430NGNG
>>432
プログラム書いてください。
0439デフォルトの名無しさんNGNG
  彡 ビュー
     @@@@
    (゜д゜3
>>439
0440デフォルトの名無しさんNGNG
なんとなくそれっぽいものができたんですが、
ここでいきなり貼ったら教育的効果ゼロですかね。
0441430NGNG
お願いします。
0442manko_chinko ◆c2rpKRNM NGNG
>>441
エロ画像ください
0443430NGNG
貼ってもらえませんか?自分には、解けそうにないんです。
0444440NGNG
教育効果ゼロはいやなので、422 = 430 には少し課題を出したい気分。

まず、整数の入力を受け取り、
1000 未満でも 4000 以上でもないことを確認し
そのまま(ローマ数字に変換せず)画面に表示するコードくらい書いてみろ。

それがイヤならやっぱりエロ画像だな。
0445430NGNG
>>430
やっぱり、わからないです。
0446デフォルトの名無しさんNGNG
>>445
わからないなりに何かやってみた?
もし何かやってみたのなら、そのコードを貼ってみれ。
0447440NGNG
422 は学校の課題だとして、何かテキストがあったんだろう。
どんなテキストで、いままで何を習ってきたのか、
そのくらいは説明できないか?
0448430NGNG
教えてください。
0449ネタNGNG
>>444 さて、何カ所間違いがあるでしょう?
void main(void)
{
int n;
scanf("%d", n);
if(1000 <= n < 4000) printf("%d\n", n);
}
0450430NGNG
答えを聞いてるのに問題だされても・・・
0451デフォルトの名無しさんNGNG
�Yとか使ったソースもらってて、学校の環境がUNIXとかで表示できなかったら
おもろいなぁ。つーか環境くらい書くもんだよ。>>430
0452デフォルトの名無しさんNGNG
プログラム書いてください。
お願いします。
やっぱり、わからないです。
教えてください。

マッシーンですか?
0453デフォルトの名無しさんNGNG
さっさと終わらせろよ。
0454デフォルトの名無しさんNGNG
>>430
ここは
 宿題を「手伝う」スレッドです
宿題を答えるスレッドではありません。
0455デフォルトの名無しさんNGNG
>>422
できたよー

TABLE = {
  1 => 'I',
  5 => 'V',
  10 => 'X',
  50 => 'L',
  100 => 'C',
  500 => 'D',
  1000 => 'M',
  5000 => '',
  10000 => ''
}
  
def convert_one(value)
  value = value.to_i
  case value
  when 4
    '15'
  when 5
    '5'
  when 9
    '10'
  else
    if value < 4
      '1' * value
    elsif value < 9
      '5' + '1' * (value - 5)
    else
      raise
    end # if
  end # case
end # def

def int_to_roman(value)
  digit = 1
  result = []
  value.to_s.scan(/./).reverse.each do |d|
    result.push(convert_one(d).tr('150', "#{TABLE[digit]}#{TABLE[digit * 5]}#{TABLE[digit * 10]}"))
    digit *= 10
  end
  result.reverse.join
end # def

while line = gets
  value = line.to_i
  if value < 1000 || 4000 < value
    puts "1000〜4000の数字を入力しろや、な。"
  else
    puts int_to_roman(value)
  end # if
end

Rubyだけどな(w
参考にはなるんじゃないかな。
0456デフォルトの名無しさんNGNG
複素数行列の積を求める関数と動作を確認するプログラムを作成せよ
行列積は、N*M行列とM*L行列の積を計算し、N*L行列を求める
ものである。
複素数は次の構造体型定義したcomplex型を用いる。また、複素数の和
、積を求める関数を作成し、それらを用いること。
typedef struct{
double re; /*実数部*/
double im; /*虚数部*/
}complex;
この問題がわかりません。よろしくお願いします。
0457デフォルトの名無しさんNGNG
ローマ数字はアルファベットの組み合わせで良いのか?
0458デフォルトの名無しさんNGNG
宿題丸投げの場合はさ、学校・学部・学科・科目・先生の名前を書いてもらえると楽しいと思わない?
0459430NGNG
>>457
読解力のない人ですか?
0460デフォルトの名無しさんNGNG
>>430
すみません。読解力無いので、手伝えません。
そんなわけで、この宿題は終了〜。
0461デフォルトの名無しさんNGNG
>456
複素数値の入出力に関しては指定はないの?
「3.0 + 4.0 i」とか、「(3.0,4.0)」とか、これだけでも面倒。
それから、456 は(プログラムとは関係なしに)
行列の積の求め方とか、複素数についての知識とかはあるの?
0462デフォルトの名無しさんNGNG
>>422
できたけど。>>455では分からんのか?
0463デフォルトの名無しさんNGNG
>>461
禿道。
複素数や行列がわからないのか、structの意味がわからないのが、
プログラミングをしたことがないのか、
それがわからないと答えようがない。

答えそのものを書いちゃうって手はあるけどね。
0464デフォルトの名無しさんNGNG
>>422
#include <stdio.h>
main(){int n;struct{int c,n;}r[]={77,1000,68,500,67,100,76,50,88,10,86,5,73,1},
*p=r;for(scanf("%d",&n);n<3999&n>0;)n>=p->n?putchar(p->c),n-=p->n:p++;}
0465デフォルトの名無しさんNGNG
>>459 457は「ローマ数字は、�[とか使うと環境依存なプログラムになって
やくにたたんときがあるけど、VIIIとしないでもいい環境なのか? 」って
意味だろ。
0466デフォルトの名無しさんNGNG
>>422
>>455では、わからなかったです。
それと、430って名前いくつか騙られてるから、名無しのままにします
0467デフォルトの名無しさんNGNG
>>466
どこまでわかって、どこがわからなかったのか、書け。
0468デフォルトの名無しさんNGNG
>>464
すげえ、アルゴリズムわかんねえ、とか思ってとりあえず実行してみたけど
これじゃダメじゃん(w
0469デフォルトの名無しさんNGNG
>>466
トリップつけれ
0470デフォルトの名無しさんNGNG
466
ほとんど初めて見るのばっかです。
0471デフォルトの名無しさんNGNG
トリップってなんでしょう?
0472ともっちNGNG
実はともっちです。
0473デフォルトの名無しさんNGNG
知るかいな!
0474デフォルトの名無しさんNGNG
http://www.2ch.net/guide/faq.html#C7
0475200NGNG
>>418
コンパイルはできるんですが入力(00000011111100000のような)できません
0476440NGNG
(特に解答者は)sage進行でいった方がいいと思うのは漏れだけ?

>422
432 のアイディアはぜんぜん参考にならない?
461 にも書いたけど、問題そのものがわからないのか、
それをプログラムにする段階でわからないのか、
そのくらいはハッキリしてくれないとどうにもならないし、
いくらなんでも18歳にもなればそのくらい答えられて当然でしょう。
0477464NGNG
>>468 3999かな?4000ですよね。ボケてました。
0478デフォルトの名無しさんNGNG
>>476
プログラムがわからないです。
0479デフォルトの名無しさんNGNG
>>478
なぜ、プログラムが分からないのに、プログラムの宿題があるの?
理解できない...。
0480455NGNG
>>455でやってることを解説する。とりあえず何をすればプログラム作れるか理解してくれ。

まず一番下のwhileループから
・一行読み込んで、数字に変換し、入力チェックしている。
・条件に合えばint_to_roman関数を呼び出して整数値をローマ数字に変換している。

int_to_roman関数
・整数を受け取り、ローマ数字に変換する関数
・まず整数を一桁ずつに分解し、それぞれの桁について右側から
 「正規化したローマ数字表現」(後で解説する)を得る
・正規化したローマ数字表現を、その桁にあったローマ数字表現に変換する。
 たとえば、1の桁の場合、1->I、5->V、0->Xに置換する。
 10の桁だった場合は1->X、5→L、0->Cというふうに置換していく。
・これを一番左の桁に達するまで繰り返す
・得られたそれぞれの桁のローマ数字表現を結合して返す

convert_one関数
・一桁の整数を受け取り、「正規化したローマ数字表現」を返す。
・正規化したローマ数字表現とは、
 0 ->
 1 -> 1
 2 -> 11
 3 -> 111
 4 -> 15
 5 -> 5
 6 -> 51
 7 -> 511
 8 -> 5111
 9 -> 10
のようになっている(つか変にcaseとかで分けるより、テーブルから取り出したほうがよかったな)。

書いてはみたものの、わかりづらいなあ。日本語は難しいよ・・・
0481440NGNG
>>464
コンパイルもしないで質問するけど、これって
4 を IV にしてくれないんじゃないですか?
0482デフォルトの名無しさんNGNG
>>479
出てない講義のレポートなんじゃねーの。
0483デフォルトの名無しさんNGNG
英語でお願いします。
0484440NGNG
>478
で、その、「プログラムがわからない」とは、
もっと具体的に説明できないの?
0485デフォルトの名無しさんNGNG
>>482
納得。それじゃどうしようもないね。終了?
0486デフォルトの名無しさんNGNG
>>477
いや、それもそうなんだけど、
たとえば、1004はMIVと表示しなければならないのに、
464のプログラムだとMIIIIになってしまう。
0487464NGNG
>481
あひゃ!とうとう俺もボケ始めたらしい。さらば。
0488デフォルトの名無しさんNGNG
一人脱落。。。ラベル低いよ
0489200NGNG
>>418
ありがとうござうました。コンパイルはできました。しかしうまくいきません
0000000000000000111100000000000000000
0000000000011111111111111000000000000
11,14,12
と実行されます。1行がでません。
0490デフォルトの名無しさんNGNG
>>430
>>455以外の書き方でソース書いて下さい。
0491デフォルトの名無しさんNGNG
>>456
部分的に作ってみたよ。参考にしてね。
ただしコンパイルもしてみてないから間違ってるかもね。

void mul(struct complex *a, struct complex *b, struct complex *c, int n, int m, int l)
{
int i,j,k;
for(i=0;i<n;i++){
for(j=0;j<l;j++){
(c+i*l+j).re=0;
(c+i*l+j).im=0;
for(k=0;k<m;k++){
*(c+i*l+j)=addcomp(*(c+i*l+j),mulcomp(*(a+i*m+k),*(b+k*l+j));
}
}
}
}
0492464NGNG
これで駄目なら…
#include <stdio.h>
main(){int(*p)()=putchar,n;struct{int c,n;}r[]={77,1000,68,500,67,100,76,50,88,
10,86,5,73,1,0,0},*t=r;for(scanf("%d",&n);n<4000&n>0;)n>=t->n?p(t->c),n-=t->n:t
->n==t[1].n*5&n>=t->n-t[1].n?p(t[1].c),p(t->c),n-=t->n+t[1].n:t++;}
0493デフォルトの名無しさんNGNG
>>492
ttp://www.ioccc.org/
にエントリすれ(w
0494デフォルトの名無しさんNGNG
>>492
妙な答えがでてきまつ。
0495440NGNG
長すぎるってさ。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int *i = malloc(sizeof(int)),
j, k;

input_loop:
fscanf(stdin, "%d", i);
if (1000 > *i || *i > 0xf9f) goto input_loop;
j = *i;
free(i);

label1000:
if (j < 1000) goto label900;
putchar('M');
j = j - 1000;
goto label1000;
label900:
if (j < 900) goto label500;
putchar('C');
putchar('M');
for (k = 0; k < 900; ++k) --j;
label500:
if (j < 500) goto label400;
putchar('D');
j -= 500;
label400:
if (j < 400) goto label100;
putchar('C');
j = j- - -400;
putchar('D');
label100:
if (j < 100) goto label90;
putchar('C');
j = j - 100;
goto label100;

(次へ続く)
0496デフォルトの名無しさんNGNG
寝た方が良さそう。
0497440NGNG
(前からの続き)

label90:
if (j < 90) goto label50;
putchar('X');
putchar('C');
j = j - 90;
label50:
if (j < 50) goto label40;
putchar('L');
j = j - 0x32;
label40:
if (j >= 40) {
putchar('X');
j -= 40;
putchar('L');
}
label10:
for (; j >= 10; j -= 10) putchar('X');
label9:
if (j != 9) goto label5;
(putchar('I')), j-=9, (putchar('X'));
label5:
if (j < 5) goto label4;
putchar('V');
j -= 5.0;
label4:
if (j == 4) putchar('I'), putchar('V');
else for (; j > 0; j--) putchar('I');

putchar('\n');
return 0;
}

仕様どおり動かないところがあったらじゃんじゃん指摘してくれ。
0498デフォルトの名無しさんNGNG
    うえーん 440がカコイイ!
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            ∧_∧
          ( ´Д⊂ヽ
          ⊂    ノ
           人  Y
          し (_) ヤバスギル・・・
0499デフォルトの名無しさんNGNG
>>491
ありがとうございます
一応、複素数、行列の考え方はわかってます。
出力は3.0 + 4.0 iのような形です。
複素数の積と和のプログラムはできたのですが
それを行列と組み合わせるのがわからないです。
よろしくお願いします。
0500491NGNG
>>499
491が行列の積を求める部分だよ。積と和のプログラム
が出来たのなら関数名の部分を変えて、mainルーチンを
ちょちょっと書いてコンパイルすればいいのでは?
0501440NGNG
>>498 サンクス! デモ デバッグガ タイヘン ダターヨ.
0502デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>

int main(void)
{
int n;
char buf[1024] = "";
int i;

do scanf("%4d", &n);
while ((n > 4000) || (n < 1000));

for (i = n/1000; i--; )
strcat(buf, "M");
n %= 1000;

for (i = n/500; i--; )
strcat(buf, "D");
n %= 500;

for (i = n/100; i--; )
strcat(buf, "C");
n %= 100;

for (i = n/50; i--; )
strcat(buf, "L");
n %= 50;

for (i = n/10; i--; )
strcat(buf, "X");
n %= 10;

if ((n >= 1) && (n <=3))
for (i = 0; i < n; i++)
strcat(buf, "I");
if (n == 4)
strcat(buf, "IV");
if ((n >= 5) && (n <= 8)) {
strcat(buf, "V");
for (i = n-5; i--; )
strcat(buf, "I");
}
if (n == 9)
strcat(buf, "IX");

printf("%s", buf);

return 0;
}
0503デフォルトの名無しさんNGNG
complex add(complex, complex);
complex mul(complex, complex);
を作って行列の計算するんじゃないの?

0504440NGNG
>502
そのコードで 3444 を与えると結果はどうなる?
0505デフォルトの名無しさんNGNG
MMMCCCCXXXXIVだが
MMMCDXLIVにするのか?
0506440NGNG
>>505
>>422
0507デフォルトの名無しさんNGNG
>>495
数字の入力を受け付けてくれません。
ずっと入力待ちなんですが・・・。
0508440NGNG
>507
とりあえず、OS とコンパイラの名称およびバージョン、
具体的なコンパイル・実行の手順について
少し詳しく書いてほしい。
手元では一応動いているので。
0509デフォルトの名無しさんNGNG
>>508
スマソ。ソースよく見たら1000未満は再入力だったのね。
できますた。
0510デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>

void convert(char *buf, char *s, char *t, char *u, int n)
{
int i;

if ((n >= 1) && (n <=3))
for (i = 0; i < n; i++)
strcat(buf, s);
if (n == 4) {
strcat(buf, s);
strcat(buf, t);
}
if ((n >= 5) && (n <= 8)) {
strcat(buf, t);
for (i = n-5; i--; )
strcat(buf, s);
}
if (n == 9) {
strcat(buf, s);
strcat(buf, u);
}
}

int main(void)
{
int n;
char buf[1024] = "";
int i;

do scanf("%4d", &n);
while ((n > 4000) || (n < 1000));

for (i = n/1000; i--; )
strcat(buf, "M");
n %= 1000;

convert(buf, "C", "D", "M", n/100); n %= 100;
convert(buf, "X", "L", "C", n/10); n %= 10;
convert(buf, "I", "V", "X", n);

printf("%s", buf);

return 0;
}
0511440NGNG
ナルホド。やっぱり再入力の時は「再入力しろやゴルァ」と表示すべきですかね。
その場合は

if (1000 > *i || *i > 0xf9f) {
fputs("再入力しろや(゚Д゚)ゴルァ\n", stdout);
goto input_loop;
}

と書き直せばいいはずです。
0512464NGNG
やはり仕様はきちんと読まないと駄目ということで。
しかし完璧とはいえない。
あと>>440さん萌え。
#include <stdio.h>
main(){struct{int c,n;}r[]={77,1000,68,500,67,100,76,50,88,10,86,5,73,1,0,0},*t
=r;int(*p)()=putchar,n,i;while(scanf("%d",&n),n<0|n>3999);for(;n;)n>=t->n?p(t->
c),n-=t->n:(t->n==t[1].n*2&&(i=2)||t->n==t[1].n*5&&(i=1))&&n>=t->n-t[i].n?p(t[i
].c),p(t->c),n-=t->n-t[i].n:t++;}
0513デフォルトの名無しさんNGNG
ところで >422=430 は 495-497 を提出するのか?
0514440NGNG
>464=512 ありがと。漏れも 464 のアイディアにはリスペクトしてもしきれない。
やっぱり「7行プログラミング」スレの出身者ですか?

>513 作者としてはぜひともそれを希望する。(w
とりあえずバグは未発見だから。

ところで、>440 で発表しようとしていたコードは
もう発表する必要なしですかね。
>432 さんのアイディアほぼそのままなので無用でしょうか。

なんか 495-497 を書いてからナチュラル・ハイになってきた。
0515デフォルトの名無しさんNGNG
 3余り符号は、2進化10進符号に3を加えて得られる符号である。各符号は、次のような値をとる。

0=0011  1=0100  2=0101  3=0110  4=0111
5=1000  6=1001  7=1010  8=1011  9=1100

この符号を用いると、各桁の1と0を入れ替えたものが9の補数になる。
そこで、3桁の整数を読み込んで、3余り符号とその補数をプリントするプログラムを以下の方法で作製せよ。

(1)3桁の整数をユーザーに入力させて、それを変数xに代入します。

(2)10で割った商と余りを利用して、xを3つの整数に分離します。

(3)それぞれの整数を3余り符号変換して表示せよ。2次元配列a[10][4]の中に
   それぞれの数の3余り符号符号を0や1で0入れておくと便利です。

(4)9の補数を求めたい数字と配列を引数として、9の補数をプリントする関数
   を作製せよ。たとえば1の補数は8で、各桁の1と0を入れ替えた数になって
   います。

(5)上の(4)で作製した関数を用いて、3余り符号の補数を2進数でプリントせよ。

条件
 1.9の補数を求めたい数字と配列を引数として、9の補数をプリントする部分を関数に
   すること。

友達に聞いても誰もわかりませんでした。どうかこの問題を解いてください。お願いします。
0516デフォルトの名無しさんNGNG
デジャブ?
0517464NGNG
>514
もちろん七行スレ出身、七行スレ育ちでチャキチャキの酔っ払いです(w
どうも夜になると頭が回らなくなるね。
0518432NGNG
>>514
440さんおつかれでした。
なんか私がコードを書き始める前に、>>440 の書き込みがあったので、
完全におまかせモードに入っていました。
0519デフォルトの名無しさんNGNG
問題を教えてもらおうとして、
問題を書いたのですが、改行が多すぎますといわれて
載せれません。どうしたらいいでしょうか?
0520 NGNG
>>519
改行を減らせ。
0521デフォルトの名無しさんNGNG
>>515
例えば 345 と入力されたらどう表示されるの?

あと言語は?
05228クインNGNG
問題は下のプログラムをすべての解を表示するようにする事です。
ただし、点対称・線対称の解は排除します。
では、よろしくお願いします。
#include <stdio.h>
#define N 8
void show(int board[])
{int i, j;
for(i = 0; i < N; i++) {
for (j = 0; j < N; j++) {putchar('+');putchar('-');putchar('-'); }
putchar('+');putchar('\n');

for (j = 0; j < N; j++) {putchar('|');
if (board[i] == j)
printf("★");
else
printf(" "); }
putchar('|');
putchar('\n'); }

for (j = 0; j < N; j++) {
putchar('+');putchar('-');putchar('-'); }putchar('+');putchar('\n');
exit(0);}
void solve(int board[], int n)
{ int i, j;

if (n == N) {
show(board);
}

for (i = 0; i < N; i++) {
for (j = 0; j < n; j++) {
if (board[j] == i)
goto cont;
if (board[j] - i == n - j)
goto cont;
if (i - board[j] == n - j)
goto cont;
}
board[n] = i;
solve(board, n + 1);

cont:; }}
int main(void)
{
int board[N];
int i;

for (i = 0; i < N; i++) {
board[i] = 0;
}

solve(board, 0);

exit(0);}
0523デフォルトの名無しさんNGNG
>>519

>>216 使えはよろし。
0524デフォルトの名無しさんNGNG
>>522
いったい何の授業の宿題なんだ。
05258クインNGNG
>>524
C言語のプログラムの授業です。
0526デフォルトの名無しさんNGNG
8女王問題!
昔 MSX-FAN で高速なアルゴリズムを募集してたなー。
Z80 程度のおもちゃ(今では)であっさり答えが出てきたのには感動した。
0527デフォルトの名無しさんNGNG
N王妃問題なら、
「C言語による最新アルゴリズム辞典」
に載ってるのでそれ参照。
0528デフォルトの名無しさんNGNG
8クイーンのソースなんてさまざまな言語であちこちに落ちてるだろ・・・
0529515NGNG
>>521
c言語です。すみませんが自分もあまり問題が理解できていません。
0530440NGNG
>518=432 ありがと!

それでは 432 さんのアイディアをもとにした
まともなコードをここに貼って、わたくしはまた名無しに戻ります。
(といいつつ、440 の時点よりコードがさらに進化している)

#include <stdio.h>

static const char *roma[4][10] = {
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
{"", "M", "MM", "MMM"}
};

int main(void)
{
int i, arabic, digits[4];

for (;;) {
scanf("%d", &arabic);
if (1000 <= arabic && arabic < 4000)
break;
fprintf(stderr, "value must be in [1000,4000).\n");
}

for (i = 0; i < 4; ++i) {
digits[i] = arabic % 10;
arabic /= 10;
}

for (i = 3; i >=0; --i) {
printf(roma[i][digits[i]]);
}
putchar('\n');
return 0;
}
05318クインNGNG
>>528
それはそうなんですが、理解できないうえに
与えたものを改良しろという問題なので・・・
すいません。
0532521NGNG
>>529
その辺わかっていないと嘘教えられると困るよ。
問題文もまぎらわしいけど。

んじゃ、345 が入力されたら、
011001111000 3余り符号
100110000111 3余り符号の補数
と表示されるって解釈で話を進めるよ。

っていっても >>530 と似たようなプログラムになるはずなので、
まずこれを読んだ上での感想やわからない点などを
いってくれ。
0533529NGNG
>>521
530のプログラムを見ましたが理解できませんでした。そちらの解釈通りで結構なので
プログラムを進めて下さい。お願いします。
0534デフォルトの名無しさんNGNG
>>522と全く同じ課題、ソースを持っている。
こんなとこで訊いてんじゃねえボケ。検索すればすぐ見つかるだろうが。
0535デフォルトの名無しさんNGNG
>>534
そういうときは黙って見守って、あとでコソーリ教官に報告しておくものだよ。
どうせこのスレは丸投げ厨にはまともな答えを返さないから。
0536521NGNG
>>533
マルチしてんじゃん。せっかく対応してるのに…
なんかやる気失せた。
途中だけど、貼り付けてあげるからあとやれ。
0537521NGNG
#include <stdio.h>

static const int a[10][4] = {
{ 0, 0, 1, 1 }, { 0, 1, 0, 0 }, { 0, 1, 0, 1 }, { 0, 1, 1, 0 }, { 0, 1, 1, 1 },
{ 1, 0, 0, 0 }, { 1, 0, 0, 1 }, { 1, 0, 1, 0 }, { 1, 0, 1, 1 }, { 1, 1, 0, 0 }
};

void print_fugo(int x, const int a[10][4])
{
int i, j, digits[3];
for (i = 0; i < 3; ++i) {
digits[i] = x % 10;
x /= 10;
}
for (i = 2; i >=0; --i) {
for (j = 0; j < 4; j++) {
putchar('0' + a[digits[i]][j]);
}
}
putchar('\n');
}

void print_hosu(int x, const int a[10][4])
{
int i, j, digits[3];
for (i = 0; i < 3; ++i) {
digits[i] = x % 10;
x /= 10;
}
for (i = 2; i >=0; --i) {
for (j = 0; j < 4; j++) {
putchar('0' + 1 - a[digits[i]][j]);
}
}
putchar('\n');
}

int main(void)
{
int x;
for (;;) {
scanf("%d", &x);
if (100 <= x && x <= 999)
break;
fprintf(stderr, "value must be in [100,999].\n");
}
print_fugo(x, a);
print_hosu(x, a);
return 0;
}
~
0538Rina ◆tI333vNE NGNG
なんだかんだ言って, 今までやった分を張り付けてあげるところが
優しいねw
0539515NGNG
>>529ありがとうございました。
0540デフォルトの名無しさんNGNG
#include <stdio.h>

void convert(char c1, char c5, char c10, int n)
{
int i;

if ((n >= 1) && (n <=3))
for (i = 0; i < n; i++)
putchar(c1);
if (n == 4) {
putchar(c1);
putchar(c5);
}
if ((n >= 5) && (n <= 8)) {
putchar(c5);
for (i = n-5; i--; )
putchar(c1);
}
if (n == 9) {
putchar(c1);
putchar(c10);
}
}

int main(void)
{
int n;
int i;

while (scanf("%d", &n), (n > 4000) || (n < 1000))
printf("?");

for (i = n/1000; i--; )
putchar('M');
n %= 1000;

convert('C', 'D', 'M', n/100); n %= 100;
convert('X', 'L', 'C', n/10); n %= 10;
convert('I', 'V', 'X', n);

return 0;
}
0541デフォルトの名無しさんNGNG
>>499
複素数の積と和はできたって言うけど、
Cスレで教えてもらったんじゃん。正直に言いなよ。
0542デフォルトの名無しさんNGNG
>>515
>>537 の方が条件に沿って作られている。
深夜の0時ごろにレスがぽんぽんつくわけないっつーのに。
#include <stdio.h>
void hyouji(int n,int i){
    if(i < 3)
        hyouji(n>>1,i+1);
    putchar('0'+(n&1));
}
void amari(int n){
    if(n/10)
        amari(n/10);
    hyouji(n%10+3,0);
    putchar(' ');
}
void hosu(int n,int a[]){
    if(n/10)
        hosu(n/10,a);
    hyouji(~(n%10+3),0);
    putchar(' ');
}
int main(int x, char *argv[]){
    do{
        puts("3桁の整数を入力してください");
        scanf("%d",&x);
    }while(x>999||x<100);
    puts("3余り符号は");
    amari(x);
    puts("\n3余り符号の補数は");
    hosu(x,(int*)*argv);
    return 0;
}
0543デフォルトの名無しさんNGNG
#include <stdio.h>

char *a[] = { "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", };
int x[3];

int main(void)
{
int n, i;

do {
puts("三ケタの数字を入力してください");
scanf("%d", &n);
} while ((n > 999) || (n < 100));

for (i = 3; i--; n /= 10)
x[i] = n % 10;

for (i = 0; i < 3; i++)
printf("%s", a[x[i]]);
printf("\n");

for (i = 0; i < 3; i++) {
char *s = a[x[i]];
for (; *s; s++)
putchar((*s == '0') ? '1' : '0');
}

return 0;
}
0544デフォルトの名無しさんNGNG
#include <stdio.h>

static const int a[10][4] = {
{ 0, 0, 1, 1 }, { 0, 1, 0, 0 }, { 0, 1, 0, 1 }, { 0, 1, 1, 0 }, { 0, 1, 1, 1 },
{ 1, 0, 0, 0 }, { 1, 0, 0, 1 }, { 1, 0, 1, 0 }, { 1, 0, 1, 1 }, { 1, 1, 0, 0 }
};
int x[3];

void print_fugo(int x)
{
int i;

for (i = 0; i < 4; i++)
putchar(a[x][i] ? '1' : '0');
}

void print_hosu(int x)
{
int i;

for (i = 0; i < 4; i++)
putchar(a[x][i] ? '0' : '1');
}

int main(void)
{
int n, i;

do {
puts("三ケタの数字を入力してください");
scanf("%d", &n);
} while ((n > 999) || (n < 100));

for (i = 3; i--; n /= 10)
x[i] = n % 10;

for (i = 0; i < 3; i++)
print_fugo(x[i]);
printf("\n");

for (i = 0; i < 3; i++)
print_hosu(x[i]);
printf("\n");

return 0;
}
0545デフォルトの名無しさんNGNG
#include <stdio.h>

void print_fugo(int x)
{
int i = 4;

for (x += 3; i--; x <<= 1)
putchar((x & 8) ? '1' : '0');
}

void print_hosu(int x)
{
int i = 4;

for (x += 3; i--; x <<= 1)
putchar((x & 8) ? '0' : '1');
}

int main(void)
{
int n, i, x[3];

do {
puts("三ケタの数字を入力してください");
scanf("%d", &n);
} while ((n > 999) || (n < 100));

for (i = 3; i--; n /= 10)
x[i] = n % 10;

for (i = 0; i < 3; i++)
print_fugo(x[i]);
printf("\n");

for (i = 0; i < 3; i++)
print_hosu(x[i]);
printf("\n");

return 0;
}
0546デフォルトの名無しさんNGNG
デバッグエラーがでます。何でですか?

typedef int (*PP_RECV)(SOCKET , char FAR * , int , int );
PP_RECV dd_recv;
HINSTANCE h_original;

int WINAPI d_recv(SOCKET s, char FAR * buf, int len, int flags){
   int int_buf=0;

   h_original = LoadLibrary( "c:\\windows\\system\\WSOCK32.DLL" );
   dd_recv = (PP_RECV)GetProcAddress( h_original, "recv" );

   int_buf =(*dd_recv)(s, buf,len, flags); //ここでデバッグエラーになる。

   FreeLibrary( h_original );
   return int_buf;
}
0547名無しさん@カラアゲうまうまNGNG
dd_recvが正しくないとか
0548デフォルトの名無しさんNGNG
>>546
ちゃんとエラーチェックせいや
0549デフォルトの名無しさんNGNG
どこのエラーチェックですか?
0550デフォルトの名無しさんNGNG
夏はバカが増えるなぁ。
あーウザッ。
0551デフォルトでない名無しさんNGNG
typedef int (*PP_RECV)(SOCKET , char FAR * , int , int );
ここ間違ってるとか
0552デフォルトの名無しさんNGNG
typedef int (WINAPI *PP_RECV)(SOCKET , char FAR * , int , int );
0553デフォルトの名無しさんNGNG
>>552
できました。
ありがとうございました。
0554デフォルトの名無しさんNGNG
解説
ふつうのCの関数はcdeclだけど、APIはstdcallです。
WINAPIはstdcallになってます。

cdecl は、引数渡しに使ったスタックを呼び出した側がクリア。
stdcall は、引数渡しに使ったスタックは呼び出された側がクリア。

dd_recv = (PP_RECV)GetProcAddress( h_original, "recv" );
で(PP_RECV)はずすとコンパイルエラーださない?
0555デフォルトの名無しさんNGNG
>>554
でます。
0556521NGNG
ねらいがはずれた模様。

>>539
最後の最後まで失礼な奴…
0557デフォルトの名無しさんNGNG
ラインエディタを改良する課題をやってます。(C言語)
ラインエディタ自体はソースがあります。
機能として
w:保存
q:終了
n:次のファイルへ
a:現在の行の後に行を追加
i:現在の行の前に行を挿入
d:行を削除
p:行を移動
-:前の行を表示
リターンのみ:次の行を表示

これに「3,10d」と入力すると
3行目から10行目までを削除する機能を付けるという課題です。
ようするにこの「3」と「10」をわけて受け取りたいのですが、そのへんがよくわかりません。
ここらへんをいじればいいと思われる所のソースを載せます。

char cbuf[256];
char *p;
int n;

*a = -1;
if (fgets(cbuf), 256, stdin)==NULL)
return(NULL);
p = cbuf;
if (isdigit(*p)) {
for (n = 0; isdigit(*p); p++) ←ここからがよくわかりません。
n = n * 10 + (*p - '0');  ←特にここ
*a = n;
}

コマンドをcbufに読み込んでその後の処理です。
あぁ、説明もあってるのか?(汗

的外れじゃないことを祈りつつよろしくお願いします。
0558デフォルトの名無しさんNGNG
>>557
そりゃ数字の文字列を整数にする処理だ。
終わった後が","かどうかとかやればできるんじゃないの?
0559Rina ◆tI333vNE NGNG
一文字ずつ読み込んでるんじゃない?
int n;
char *p = "234";

for(n = 0 ; isdigit(*p) ; p++) {
printf("*p = \'%c\'\n", *p);
printf(" n = %d (before)\n", n);

n = n * 10 + (*p - '0');

printf(" n = %d (after)\n\n", n);
}
こんなコードを書いたら何やってるか分かると思う.
0560デフォルトの名無しさんNGNG
>>557
> n = n * 10 + (*p - '0');  ←特にここ
2つに分解して考えてみよう。
tmp = (*p - '0'); ←1文字を数値に変換する
n = n * 10 + tmp; ←nを10倍し、変換した数値を足す。
つまり「123」という文字列が来た場合
    tmp  n
1回目:1   1
2回目:2   12
3回目:3   123

となる。
0561デフォルトの名無しさんNGNG
>>557
始めにある程度分析しておかないと行き詰まるぞ。
dに関しては「3,10d」という入力例が出ているからいいけど、
他の機能がどう入力されるか予め明らかにしておいた方がいいぞ。
0562デフォルトの名無しさんNGNG
#include <stdio.h>
#define IN 1;
#define OUT 0;

main()
{
int c, flag, nc;

flag = OUT;
nc = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t') {
if (flag == IN) {
flag = OUT;
}
}
else {
flag = IN;
nc++;
}
}

printf("%d\n", nc);
getchar();
}

↑これ、エラーでるんですけど、なんで?
見て分かると思いますが、C言語
0563デフォルトの名無しさんNGNG
なんでdefineにセミコロンが?
0564デフォルトの名無しさんNGNG
>>563
サンキュー&ソーリー
ボクは糞でした(;´Д`)
0565デフォルトの名無しさんNGNG
>>562
おそらく
> #define IN 1;
> #define OUT 0;
で最後にセミコロンが入っているからだろうが
エラーメッセージぐらい書け。

あと、そのソースならflagは必要ないだろ?
continueを使えばもっとすっきり書けるはずだ。
0566デフォルトの名無しさん NGNG
はじめまして、オラクル製品FORMSに関する質問です。
画面を移動する際、変数を渡したいのですが、どのように渡したらよいのか
わかりません。
グローバル変数ではなく、パラメーターを使って
との事なのですが、
パラメーターリストを作ることまではできたのですが、
そのパラメーターリストをどう使っていいのか
わかりません。

わかる方教えてください・・・(涙)
0567デフォルトの名無しさんNGNG
かわった宿題だなぁ
0568デフォルトの名無しさんNGNG
>567
会社の研修用の宿題なんです(涙)
できなくて、ほんと泣いてます・・・。
0569557NGNG
>>558-561
どうもありがとうございます!理解できました。
あとは自分でがんばってみます。
でも課題があと2つあるので、行き詰まったらまたお願いします。
0570562NGNG
皆さん、ありがとうございます!宿題できました!

#include <stdio.h>
#define IN 1
#define OUT 0

main()
{
int c, flag, nc, i;
int dim[80];

for (i = 0; i < 80; i++) {
dim[i] = 0;
}

flag = OUT;
nc = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t') {
if (flag == IN) {
flag = OUT;
dim[nc + 1]++;
nc = 0;
}
}
else {
if (flag == OUT) {
flag = IN;
}else {
nc++;
}
}
}

for (i = 0; i < 80; i++) {
printf("%2d文字の単語 = %d\n", i, dim[i]);
}
getchar();
}
0571デフォルトの名無しさんNGNG
>570
別に貼らんでも。
0572デフォルトの名無しさんNGNG
>566
たぶん、ウィンドウプロシージャみたいなのがあるでないの?
イベント割り込みみたいなー
0573566NGNG
>572
どうなんでしょう?(すいません初心者なんでよくわからないんです・・・)

一応、ソース書いておいてみます。
DECLARE
PL_ID PARAMLIST;
PL_NAME VARCHAR2(10):='AA';
BEGIN

PL_ID:=CREATE_PARAMETER_LIST(PL_NAME);
ADD_PARAMETER(PL_ID,'BB',TEXT_PARAMETER,'CC');
CALL_FORM('MODULE4');
END;
0574デフォルトの名無しさんNGNG
ねぇねぇ〜、ヒストグラムってなにさ?
詳しく教えてくれ。
0575デフォルトの名無しさんNGNG
>>574
折れ線グラフ
0576572NGNG
>573
それって、変数定義してだけだろ????

いや、オラクルやったことないから分からんけど、
>画面を移動する際、変数を渡したいのですが、どのように渡したらよいのか
>わかりません。
画面を移動したり、キャレットがテキストボックスに表示されたりすると、
イベントが発生して、それをうけとるんじゃないの?
ORACLEのHPから、ドキュメントが見れるから、それ見れば?
ttp://otn.oracle.co.jp/document/products/forms/
これぐらい、自分で探せると思われ。
0577557NGNG
すいません、さっそく。
>>557で書いた関数(command())の戻り値が*aなんですけど、この後この関数の戻り値で
行指定があったかどうかを判別してます。

cp = command(&a_no)
if (a_no > 0)

cpはswitch()に渡してます。(コマンド判別)

戻り値を引数にしてる???
ちなみに「3d」のような行指定は標準装備です。
わけわからんくなってきた・・・
0578566NGNG
>576
もちろん、リファレンスは見てるのですが、
その解釈もできなくて・・・(涙)
イベントはcall_formで発生はさせています。
変数(とは違うと思うけど、この場合パラメータ)は宣言してるだけ
っていうのはわかってるんですが、
それをどう使っていいのかがわからないのです。
0579デフォルトの名無しさんNGNG
>>577
こっちも全然わからないんだが…

関数commandの定義はどうなってる?
char* command(int* a) てな感じ?

「3d」と入力された場合と、「3,10d」と入力された場合とで、
cp と a_no の内容はどうなる?
0580557NGNG
>>579
char *cp;
int a_no;
「3d」の場合
char *command(int *);
cp = command(&a_no)
a_no = 3
cp=d
です。とりあえず、課題はクリアできそうです。バグだらけだけど・・・
「3,10d」の場合、(char *command int *a, int *b)
a_noとb_noにそれぞれ3と10が入るようにしました。
cpには「d」が入ります。(cp = command(&a_no, b_no)

command(&a_no)はいまだにわかりません。
0581デフォルトの名無しさんNGNG
>>580
cp = command(&a_no, &b_no)
こうじゃないのか。

>>557 の *a っていうのがどういうものかは
わかってる?
0582557NGNG
>>581
>cp = command(&a_no, &b_no)
そうです。間違えました。

command関数の*aがcommand(&a_no)の&a_noにアドレスとして戻ってくるんですよね?あってます?
その&a_noをcommand()に引数として渡すということじゃないんですか?
ここが、ループ?って感じでわからないんです。
command関数で「3d」などのコマンドを標準入力から受けているので引数いらないですよね?
0583デフォルトの名無しさんNGNG
>>418。もう一度挑戦してくれなせんか。
#include <stdio.h>

static void print_a(const char *a, size_t size)
{
 char state = a[0];
 int i = 1, count = 1;

 for (i = 1; i < size; i++){
  if (a[i] != state) {
   printf("%d,", count);
   state = a[i];
   count = 1;
  }
  else{
   count++;
  }
 }
 if(size){
  printf("%d,\n",count);
 }
 else{
  printf("\n");
 }
}

int main(int argc, char * argv[])
{
char a[38];
int i = 0, ch;

while ((ch = getchar()) != EOF) {
if (ch == '\n') {
print_a(a, i);
i = 0;
}
else {
a[i++] = ch;
}
}
if (i) {
print_a(a, i);
}
return 0;
}
コンパイルはできました。しかしうまくいきません
0000000000000000111100000000000000000
0000000000011111111111111000000000000
11,14,12
と実行されます。1行がでません。
0584デフォルトの名無しさんNGNG
これは
1111110000011111
みたいなのはどうするの?
0,6,5,5
って出さなくていいの?
0585デフォルトの名無しさんNGNG
>>580
今すぐにとは言わんけど、ポインタの勉強したほうがいいかも。

ところで、完成したプログラムは"10,3d"とか入力しても平気?
"3,5d"とかやると、3,5,7行目が消えたりしない?(藁
0586デフォルトの名無しさんNGNG
>>522
8クイーン解いたよ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=12&fi=no

ここ見ながら解いたけど。
http://www.pro.or.jp/~fuji/puzzlestudy/recursive/index.html
0587デフォルトの名無しさんNGNG
>>582
ちょっと飯食ってた。

> command関数の*aがcommand(&a_no)の&a_noにアドレスとして戻ってくるんですよね?あってます?

一番わかっていなさそうなのがこの辺だと思う。

戻ってはこない。あくまでも渡す。
何を渡すかというと &a_no つまり変数a_noのアドレス(位置)を渡している。

そこにある箱の中に行指定を入れといてくれやという感じ。

これでもわからなかったいってくれ。
0588557NGNG
>>585
ズバリです!これだけの情報でそこまでわかるんですか!?
嗚呼、なんてアホな俺。課題の提出は明日。ハァ・・・
急にヤル気がなく(以下略
0589584NGNG
うちではこれで動いたよ。
#include <stdio.h>

static void print_a(const char *a, size_t size)
{
char state = a[0];
int i = 1, count = 1;

if (a[0] != '0') printf("0,");

for (; i < size; i++) {
if (a[i] != state) {
printf("%d,", count);
state = a[i];
count = 1;
} else {
count++;
}
}
if(size){
printf("%d,\n",count);
} else{
printf("\n");
}
}

int main(int argc, char * argv[])
{
char a[38];
int i = 0, ch;

while ((ch = getchar()) != EOF) {
if (ch == '\n') {
print_a(a, i);
i = 0;
} else {
a[i++] = ch;
}
}
if (i) {
print_a(a, i);
}
return 0;
}
05908クインNGNG
>>586
ほんとうにありがとうございました。
0591デフォルトの名無しさんNGNG
>>583
#include <stdio.h>
main(){int c,n=1,i=0;while((c=getchar())-EOF)c-'0'!=i?printf("%d",n),i=1-i,n=1,
putchar(c-'\n'?',':(i=0,'\n')):n++;}
0592557NGNG
>>587
アドレスを確保しとくから処理が終わったらここに(&a_no)にいれてくれ
ってことですか?
うぅ、一回寝ようかな?頭回らなくなってきたし、座りっぱなでケツが痛ひ
0593デフォルトの名無しさんNGNG
>>592
処理が終わったらでなく、入れるタイミングはcommand()の方におまかせ。
今回の場合、command()の *a = -1; や *a = n; で a_no に -1 や nの値が入る。
0594557NGNG
>>592
なるほど、わかったようなわからんような・・・うーむ

>>585
そこっ!そこさえわかれば。
どこでわかるんですか?
0595585NGNG
>>594
全部で8行のテキストに対して"3,5d"だとすると
12345678
↓3行目を消す
1245678
↓4行目を消す
124678
↓5行目を消す
12468(マズー)
分かる?で、

12345678
5行目を消す
1234678
4行目を消す
123678
3行目を消す
12678(ウマー!)
後の行から消せばいい
3行目を3回消すって手もある
0596デフォルトの名無しさんNGNG
for (i = 0; i < b-a; )
del(a);

for (i = a; i < b; i++)
del(i);

delは行を詰めるから、この二つは別もの。
0597557NGNG
>>595
うおぉぉぉ!できたっ!!
ありがとうございます!

では、また次の課題でくるかもしれません。と言うかくるでしょうw
バイトいってきます。 イツネヨウカナァ
0598585NGNG
>>597
この慌てぶりだと、今度は"3d"が機能しなくなってたりして…
0599585NGNG
>>589
あなたの環境はなんですか?
0600583NGNG
>>584
6,5,5でいいですよ
0601589NGNG
>>599
bccです。

>>600
じゃあ、
if (a[0] != '0') printf("0,");
のところ消しといて。
0602601NGNG
>>601
やっぱりできないです
>>591
それはなんですか?
0603499NGNG
>>541
複素数の積と和は「C言語なら俺に聞け」で聞いてできるようになりました。
そこで教わった
complex add(complex alpha, complex beta)
{
complex gamma;
gamma.re = alpha.re + beta.re;
gamma.im = alpha.im + beta.im;
return gamma;
}

complex mul(complex alpha, complex beta)
{
complex gamma;
gamma.re = alpha.re*beta.re - alpha.im*beta.im;
gamma.im = alpha.im*beta.re + alpha.re*beta.im;
return gamma;
}
と>>491で教わった関数を組み合わせてmain関数をどのように書けばいいのか
わかりません。よろしくお願いします。
0604 NGNG
>>603
理解していないものを「できるようになった」とは言わないんじゃない?
0605デフォルトの名無しさんNGNG
行列を入力して、計算して出力すればいいだけでは?
0606デフォルトの名無しさんNGNG
合ってるかどうか知らんぞ。

#include <stdio.h>

struct complex {
double re;
double im;
};

complex add(complex alpha, complex beta);
complex mul(complex alpha, complex beta);
void mat_mul(complex a[][2], complex b[][2], complex c[][2]);
void print_mat(complex a[][2], char *str);

int main(void)
{
struct complex a[][2] = {{{1.0, 1.0}, {2.0, 1.0}}, {{-1.0, 1.0}, {1.0, -1.0}}};
struct complex b[][2] = {{{3.0,-1.0}, {-1.0,1.0}}, {{ 1.0, 2.0}, {-2.0, 3.0}}};
struct complex c[2][2];

print_mat(a, "a");
print_mat(b, "b");

mat_mul(a, b, c);

print_mat(c, "a * b");
return 0;
}
0607デフォルトの名無しさんNGNG
void mat_mul(complex a[][2], complex b[][2], complex c[][2])
{
int i, j, k;
struct complex s, t;

for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++) {
s.re = s.im = 0.0;
for (k = 0; k < 2; k++) {
t = mul(a[i][k], b[k][j]);
s = add(s, t);
}
c[i][j] = s;
}
}

void print_mat(complex a[][2], char *str)
{
int i, j;

printf("%s = \n", str);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%+f + %+fi ", a[i][j].re, a[i][j].im);
printf("\n");
}
}
0608デフォルトの名無しさんNGNG
void mat_mul(complex a[][2], complex b[][2], complex c[][2])
{
int i, j, k;
struct complex s, t;

for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++) {
s.re = s.im = 0.0;
for (k = 0; k < 2; k++) {
t = mul(a[i][k], b[k][j]);
s = add(s, t);
}
c[i][j] = s;
}
}

void print_mat(complex a[][2], char *str)
{
int i, j;

printf("%s = \n", str);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%+f + %+fi ", a[i][j].re, a[i][j].im);
printf("\n");
}
}
0609デフォルトの名無しさんNGNG
スマソ。>>608はナシ。

complex add(complex alpha, complex beta)
{
complex gamma;

gamma.re = alpha.re + beta.re;
gamma.im = alpha.im + beta.im;

return gamma;
}

complex mul(complex alpha, complex beta)
{
complex gamma;

gamma.re = alpha.re*beta.re - alpha.im*beta.im;
gamma.im = alpha.im*beta.re + alpha.re*beta.im;

return gamma;
}
0610デフォルトの名無しさんNGNG
>>606-609
complexの前に全部structキーワードを付けてくれ。
0611デフォルトの名無しさんNGNG
>>610
それよりは
struct complex {
double re;
double im;
};
を
typedef struct {
double re;
double im;
} complex;
にすべきであろう。
0612suckaNGNG
javacsripts, xml, xsl, htmlなどを使ったプログラム
ってどういうのがやりやすいでしょうか?
上の物を使って自由にプログラムしろって言われても・・・・なんですよ。
よきアドバイスもとむ。
0613デフォルトの名無しさんNGNG
>>612
どれくらいの難易度のものを作ればいいのかよく分からんが、
html+javascriptでグラフィカルな電卓というのはどうだ。
0614suckaNGNG
難易度は易しめ。xml、xslとか習って2ヶ月程度。
グラフィカルな電卓って言うと?
ってかどっかにXMLとJavascriptsのプログラミング
のexampleみたいなのないのかな。参考にしてー
0615557NGNG
>>598
はい、"3d"なくなってました。なんか手のひらで弄ばれてる感じだw
一応それもクリアしました。

次は行指定じゃなく /単語/で検索後に処理ができるようにします。
/abc/p
で"abc"を含む行を表示。"d"についても同じです。
とりあえず、今からやってみますけどなんかヒントがあったらお願いします。

提出まであと7時間・・・
0616デフォルトの名無しさんNGNG
>>602
ちょっと3行でテストしてみてくれないか?
たぶん最後の1行鹿結果がでてこないと思うぞ。
もしそうならmainのなかをもう一度確認してごらん。
0617デフォルトの名無しさんNGNG
>>602
というか環境は何よ?
Cmachineなら今すぐやめな。
0618557NGNG
>>615の/文字列/で文字列の取り出し方がよくわかりません。
どなたか教えてください。よろしくお願いします。
0619デフォルトの名無しさんNGNG
>>618
まぁ手抜きなんだけど。
if (strstr(行, 文字列) == NULL) {
 /* 見つからなかった */
} else {
 /* 見つかった */
}
0620619NGNG
>>618
あれ、解釈みすったかな?

> /文字列/で文字列の取り出し方

i = 0;
while ("/文字列/"[i + 1] != '\0') {
 if ("/文字列/"[i + 1] == '/') break;
 buffer[i] = "/文字列/"[i + 1];
 i++;
}
buffer[i] = '\0';
0621557NGNG
>>619
その前の処理がわからないんです。
コマンドラインかで
/任意の文字列/p
と入力したとき、コマンドから文字列を取り出してその後>>619の処理ですよね?
command()は>>557です。ここのcbufなりpから文字列だけを取り出したいのです。
0622デフォルトの名無しさんNGNG
>>621
なんか下手に改造するよりも、edのソースを(以下略)
0623557NGNG
いちおう
if (*p == '/'){
++p;
while (*p != '/')
*str++ = *p++;
*str = '\0';
}
でやってみたんですができません。あと
/文字列
のように、/でくくるのを忘れた時の処理にも迷ってます。
0624デフォルトの名無しさんNGNG
処理としては間違ってないような
if (*p == '/'){
  ++p;
  while (*p != '/' && *p != '\n' && *p != '\0')
    *str++ = *p++;
  *str = '\0';
}
とでもすれば間違って読みすぎることは無いかな。
あとstrの中はどうなってる?printしてみれ
0625557NGNG
>>624
何も入ってないです。しかも普通の動作もおかしくなりました。
うぅっ、あと4時間・・・
0626名無しさん@カラアゲうまうまNGNG
strはどう確保してる?
0627デフォルトの名無しさんNGNG
その周りのソースを貼れるかい?
その部分をはずしたら動作は戻るのかい?
てかifぶんの後にelseをつけてないとか。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433
0628557NGNG
/abcd/を入力
p=abcd/ ,str=a"
p=bcd/ , str="
p=cd/, str="
p=d/, str=d"

どういうことでしょう?
0629名無しさん@カラアゲうまうまNGNG
まさかstr++していって、最初のポインタを保存してないってことはないよな。
0630557NGNG
>>626
確保と言いますと?char *strですか?

>>627
そこはまだ考えてないので後で考えます。
とりあえずstrの挙動がわからないです。
0631デフォルトの名無しさんNGNG
if (*p == '/'){
  char *a = str;
  ++p;
  while (*p != '/' && *p != '\n' && *p != '\0')
    *a++ = *p++;
  *a = '\0';
}
どうだ?
0632557NGNG
どこか根本的に間違ってる気がしてきた
0633557NGNG
>>631
できました!ありがとうございます。
>char *a = str;
これが確保ということですか?
0634デフォルトの名無しさんNGNG
strを
char *str = malloc(256);
などと確保しておいて
その下に
char *a = str;
とすればaをいくらいじってもstrは変わらん。

strを書き換えると後で使うときになってそんな風になって非常に困る。
0635デフォルトの名無しさんNGNG
あ、確保ってのは
str[256]とかstr = malloc(256)とかね。
char *a = strってのは確保ではないな。
0636499NGNG
>>606-611
stroage size of "a" isint known
っていうエラーがでるんですが、これはどういう意味なんでしょうか?
0637デフォルトの名無しさんNGNG
>>499
a[][2]では配列のサイズが確定できないということ。
配列の要素数を省略できるのは一番最後だけのはずなので、きちんと要素数を宣言すればいいよ。
桶?
0638499NGNG
>>637
ありがとうございます。試してみます
0639499NGNG
>>637
すいません、要素数の宣言とはa[][2]を例えばa[2][2]とかにすれば
いいということですか?
0640637NGNG
ごめん、嘘だ。
正しくは最初だけが省略できる。
逝ってくる。
0641499NGNG
>>640
あ、そうなんですか、そうなると
エラー stroage size of "a" isn't known
はどうしたらいいかまったくわからなくなってしまった。
0642デフォルトの名無しさんNGNG
>>641
そのエラーはソースのどのあたりで出てる?
0643デフォルトの名無しさんNGNG
>>499
ためしにやってみた。
構造体の宣言を

typedef struct {
double re;
double im;
} complex;

に変更とのこりのstructを全部取っただけで動いたけど?
0644デフォルトの名無しさんNGNG
>>643
うちでも動いた。
コンパイラは、

% gcc -v
Using builtin specs.
gcc version 2.95.4 20020320 [FreeBSD]
0645499NGNG
>>643
言われたとおりやってみたらコンパイルはできました。
実行してみたら行列aと行列bの値はでるのですが、
aとbの積がでませんでした。
0646デフォルトの名無しさんNGNG
1.オブジェクト指向型ソフトウェア開発のメリットとデメリットについて

2.Java言語の現状と今後の動向について

という課題に現在取り組んでます。
でもあまりわからないので、どういったことをかけばよいのか、
そして他の人の意見もほしくて投稿してます。
なにかないでしょうか?
0647499NGNG
mainでmat_mul(a,b,c)が呼び出せてないみたいなんですが、
どうしたらいいのでしょうか
0648デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数:120141人 発行日:2002/07/25
どもどもー、ロスタイムに身悶える、とっても苦しいひろゆきですー。。。

昨年5月、珍走団に「文句があったらいつでも来い!バーカ!バーカ!」といいつつ、本当に来られたら、土下座をしてしまったおいらですが、実は他にもあるですよー。恥ずかしい話は、、、うぅうぅ
昨年6月のことですが、おいらに批判的なチョンに「ボコる」「焼き入れる」「殺す」と慣れないセリフを使って一生懸命脅してみたですけど、チョンってば全然ビビッってくれないで「相手になってやる!」なんて言うですよー、、、うぅうぅ
おいらってば焦って必死に逃げ回って激ヤセしちゃったですよー、、、うぅうぅ

“歴史は繰り返す”といいますが“おいらの歴史”も繰り返しまくりですよー、、、うぅうぅ
皆さんご存知のとおり、おいらってばネットや電話では結構勇敢なんですが、どうも面と向かってしまうとすっかりドテチンになっちゃうみたいなんですよー、、、うぅうぅ
でも今はなんとか気を取り直してチョンに反撃をはじめたですよー、、、えっへん
イタズラ電話やウィルス爆弾とか家族への嫌がらせとか色々やってますですー。。。

ところで、おいらの病的な臆病さの原因は「腕力に自信がないから」だけではないんですー、、、
それはそれは、、本当に、、本当に、、根深い問題があるんですよー、、、うぅうぅうぅ
臆病さだけではありません。決断力のなさも笑われ始めてます、、、うぅうぅ
元削除人の皆さん!あんまりおいらの秘密言いふらすのやめてよー、、、うぅうぅ

んじゃ!
0649名無しさん@カラアゲうまうまNGNG
>>648
意味不明。先生に問題の意味を確認してこい。
0650デフォルトの名無しさんNGNG
あれ?>>648 きてないよ。
0651デフォルトの名無しさんNGNG
なんだ、>>648はまたサボリか。
0652499NGNG
#include <stdio.h>

typedef struct {
double re;
double im;
} complex;

complex add(complex alpha, complex beta);
complex mul(complex alpha, complex beta);
void mat_mul(complex a[][2], complex b[][2], complex c[][2]);
void print_mat(complex a[][2], char *str);

int main(void)
{
complex a[][2] = {{{1.0, 1.0}, {2.0, 1.0}}, {{-1.0, 1.0}, {1.0, -1.0}}};
complex b[][2] = {{{3.0,-1.0}, {-1.0,1.0}}, {{ 1.0, 2.0}, {-2.0, 3.0}}};
complex c[2][2];

print_mat(a, "a");
print_mat(b, "b");

mat_mul(a, b, c);

print_mat(c, "a * b");
return 0;
}
0653499NGNG
void mat_mul(complex a[][2], complex b[][2], complex c[][2])
{
int i, j, k;
complex s, t;

for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++) {
s.re = s.im = 0.0;
for (k = 0; k < 2; k++) {
t = mul(a[i][k], b[k][j]);
s = add(s, t);
}
c[i][j] = s;
}
}

void print_mat(complex a[][2], char *str)
{
int i, j;

printf("%s = \n", str);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%+f + %+fi ", a[i][j].re, a[i][j].im);
printf("\n");
}
}

complex add(complex alpha, complex beta)
{
complex gamma;

gamma.re = alpha.re + beta.re;
gamma.im = alpha.im + beta.im;

return gamma;
}
0654499NGNG
complex mul(complex alpha, complex beta)
{
complex gamma;

gamma.re = alpha.re*beta.re - alpha.im*beta.im;
gamma.im = alpha.im*beta.re + alpha.re*beta.im;

return gamma;
}
これで実行すると、mat_mul呼び出す所でとまってしまいます。
0655デフォルトの名無しさんNGNG
>>654
とまる?
もっと状況を詳細に書いて。
0656557NGNG
結局、時間が無いので未完成のまま提出してきます。
助言してくださった方々、どうもありがとうございました。
0657デフォルトの名無しさんNGNG
みんなが>>557ぐらいの気概があればこっちも楽だ。
0658499NGNG
>>655
実行すると、
a =
+1.000000 + +1.000000i+2.000000 + +1.000000i
-1.000000 + +1.000000i+1.000000 + -1.000000i
b =
+3.000000 + -1.000000i-1.000000 + +1.000000i
+1.000000 + +2.000000i-2.000000 + +3.000000i
と出たところで止まってしまいます。
0659499NGNG
>>655
一応動くようになりました。あと、このプログラムをn*m行列とm*l行列
を入力し、この積を計算してn*l行列を求めるようにできれば、完成なの
ですが、この場合どこを変えればできるようになるのでしょうか?
よろしくお願いします。
0660デフォルトの名無しさんNGNG
>>658
プログラムは終了していないという解釈でよいですか?

mat_mul()の t = mul(a[i][k], b[k][j]); ところに
i, j, kを表示するprintf()を埋め込んで実行し、
どう表示されたか教えて下さい。


0661デフォルトの名無しさんNGNG
おいらのWin+Cygwin環境では
a + b =の結果まで出たぞ

0662660NGNG
>>659
遅かったか。660 は忘れてくれ。
どう直したら動くようになったの?
0663499NGNG
本当にちょっとしたミスでmat_mul関数内でiの所にjを書いてしまって
いました。本当にすいませんでした。
0664デフォルトの名無しさんNGNG
>>661
> Win+Cygwin

CygwinってWindows以外で使えるのか?
0665デフォルトの名無しさんNGNG
>>663
>>653 にそういうところはなさそうだけど、
どうなってるの?

>>659
n, m, l はどういう扱いにするの?
固定にするの?それとも、入力するようにするの?
0666499NGNG
>>665
プログラムの方は他のパソコンでやってまして、そっちで間違えてしまって
いました。
n,m,lですが、入力するようにしたいです。2*3と3*4や、3*2*と2*2など
n*mとm*lの形の行列の積に対応できるようにしたいです。
0667デフォルトの名無しさんNGNG
C++で関数ポインタをやっているのですが、
クラス内の関数のポインタはどのように取得すればよいのでしょうか?

例えば
class CXXXX {
 void get();
 void (* funcPtr);
};

として
void CXXXX::get() {
 funcPtr = get;
}
では
error C2440: '=' : 'void (__thiscall CCommonProcess::* )(void)' から 'void (__cdecl *)(void)' に変換できません。
と出てしまいます。

他に
class CXXXX {
 void get();
 void (* CXXXX::funcPtr);
};

として
void CXXXX::get() {
 funcPtr = get;
}
も試してみたのですが、こちらも無理なようでした。

何か方法はあるのでしょうか?
0668デフォルトの名無しさんNGNG
>>667
void (* funcPtr);って関数ポインタの宣言か?
0669デフォルトの名無しさんNGNG
>>666
おお!茨の道を進むと。

C言語では、n,m,lがコンパイル時に決定されていないような多次元配列を
扱うのは非常に面倒です。この場合よく使われるのは、以下の2つです。

・1次元配列を指すポインタの配列を使う
・1次元配列を2次元配列とみなして使う

前者は下準備が大変ですが、見た目はきれいに書けます。
後者は見た目は悪いですが、いろいろなと応用が効くように思います。

どちらにします?別に他のアイデアがあればそれでもかまいませんが。
0670デフォルトの名無しさんNGNG
>>668
すいません。記述ミスです。
元々の記述はこちらの様になっていました。
 void (* funcPtr)();

二番目に書いた方法で解決すると思ったのですが、
こちらでもうまくいきません。

どうかよろしくお願いします
0671デフォルトの名無しさんNGNG
>>669
課題の内容がポインタとデータ構造となっているので、できれば
ポインタを使うほうが良いです。
0672デフォルトの名無しさんNGNG
>>671
1次元の配列をn*m次元の配列として扱う一般的な方法。

a11 a12 a13
a21 a22 a23

という配列を一次元配列に入れてみる。各要素はintとすると、

int a[] = {a11, a12, a13, a21, a22, a23};

// 要素a[n,m]を返す関数。

int elem(int *a, int xsize, int n, int m)
{
 return *(a + n * x + m);
}

elem(a, 3, 2, 3); // a23が返ってくる

こんな感じで扱えばいい。
0673デフォルトの名無しさんNGNG
672>>
どうもありがとうございます。
できれば、先ほどのプログラムも使用していきたいのですが、
それは可能なのでしょうか?
0674デフォルトの名無しさんNGNG
行列積の関数は2×2固定なんだから
引数で渡すかしないと。

0675デフォルトの名無しさんNGNG
>>667
一応↓のようにしたらコンパイル通った。望み通りの結果になるかは知らんが
class A {
void get();
void (A::*funcPtr)();
};

void A::get() {
funcPtr = &A::get;
}
0676669NGNG
>>671
では、前者の方ということですね。
先程もいったようにn,m,lがコンパイル時に決定されないので、
当然、行列のサイズもコンパイル時にはわかりません。
そのため、malloc()を使って動的に行列を確保するようにします。

double** allocate(int n, int m)
{
 double** p;
 double* t;
 int i;

 p = (double**)malloc(sizeof(double*) * n + sizeof(double) * n * m);
 t = (double*)&p[n];
 for (i = 0; i < n; i++) {
  p[i] = &t[i * m];
 }
 return p;
}

とりあえずこれが下準備部分となります。
0677669NGNG
>>676
間違えました。
doubleを全てcomplexに修正してください。
0678669NGNG
void mat_mul(complex** a, complex** b, complex** c, int n, int m, int l)
というように変更し、2をnなりmなりlに置き換えてください。
print_mat()に関しても同様に修正してください。
0679667NGNG
>>675
こちらでもコンパイルすることができました。
なんとか動くように頑張りたいと思います。
本当にありがとうございました。
0680499NGNG
>>678
どうもありがとうございます。
さっそく試してみます。
0681ぽえーNGNG
waveファイルの結合のアルゴリズムと手法を教えてください。
かなり、ネットで探したんですが、見つかりません。
0682499NGNG
void mat_mul(complex** a, complex** b, complex** c, int n, int m, int l)

{
int i, j, k;
complex s, t;

for (i = 0; i < n; i++)
for (j = 0; j < m; j++) {
s.re = s.im = 0.0;
for (k = 0; k < l; k++) {
t = mul(a[i][k], b[k][j]);
s = add(s, t);
}
c[i][j] = s;
}
}

void print_mat(complex** a,int n,int m,char *str)
{
int i, j;

printf("%s = \n", str);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++)
printf("%+f + %+fi ", a[i][j].re, a[i][j].im);
printf("\n");
}
}
というように変更すれば良いのでしょうか?
あと下準備を書く場所はどこでも良いのですか?
よろしくお願いします。
0683669NGNG
>>682
>>659 と話を合わせておいた方が混乱しにくくなりますよ。

入力部分は後で実装するようにして、デバッグし、動作確認をしてみましょう。

complex a[][2] = {{{1.0, 1.0}, {2.0, 1.0}}, {{-1.0, 1.0}, {1.0, -1.0}}};

を

n = 2; m = 3;
a = allocate(n, m);
for (i = 0, i < n; i++) {
for (j = 0, j < m; j++) {
a[i][j].re = 1.0 * (i * n + j);
a[i][j].im = 1.0 * (i * n + j);
}
}

という感じに。b, cも同様にしてみてください。
0684499NGNG
#include <stdio.h>

typedef struct {
double re;
double im;
} complex;

complex add(complex alpha, complex beta);
complex mul(complex alpha, complex beta);
void mat_mul(complex** a, complex** b, complex** c);
void print_mat(complex** a, char *str);

int main(void)
{
int n,m;
n = 2; m = 3;
a = allocate(n, m);
for (i = 0, i < n; i++) {
for (j = 0, j < m; j++) {
a[i][j].re = 1.0 * (i * n + j);
a[i][j].im = 1.0 * (i * n + j);
}
}

b = allocate(n, m);
for (i = 0, i < n; i++) {
for (j = 0, j < m; j++) {
b[i][j].re = 1.0 * (i * n + j);
b[i][j].im = 1.0 * (i * n + j);
}
}

complex c[2][2];

print_mat(a, "a");
print_mat(b, "b");

mat_mul(a, b, c);

print_mat(c, "a * b");
return 0;
}
0685499NGNG
double** allocate(int n, int m)
{
 double** p;
 double* t;
 int i;

 p = (double**)malloc(sizeof(double*) * n + sizeof(double) * n * m);
 t = (double*)&p[n];
 for (i = 0; i < n; i++) {
  p[i] = &t[i * m];
 }
 return p;
}

void mat_mul(complex** a, complex** b, complex** c, int n, int m, int l)

{
int i, j, k;
complex s, t;

for (i = 0; i < n; i++)
for (j = 0; j < m; j++) {
s.re = s.im = 0.0;
for (k = 0; k < l; k++) {
t = mul(a[i][k], b[k][j]);
s = add(s, t);
}
c[i][j] = s;
}
}

void print_mat(complex** a,int n,int m,char *str)
{
int i, j;

printf("%s = \n", str);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++)
printf("%+f + %+fi ", a[i][j].re, a[i][j].im);
printf("\n");
}
}
>>683
この様に変更してみました。
これ以下は以前のプログラムのままです。
0686584NGNG
>>591
遅レスすいません。昨日はありがとうございました。申し訳ございませんが次の条件でもう一度解いてもらえませんでしょうか
getcharコマンドで、入力データの1行目を読み取り、配列aに代入(1行に38文字あるが、最後の1文字は改行文字と仮定)してカウンターの値を1に初期化する。<最初に読んだ文字(a[0]の値)が続いている間は、カウンタ
ーの値輪1ずつ増やして読んだ文字が今までと違った(文字の連続が終わっ
た)時点でカウンターの値をプリントして1の場合にはそのまま数字をプリ
ントして0の場合には、符号をマイナスにしてプリントする。カウンター
の値を1に再初期化>して<>の間を繰り返す。2行目以降を同時に処理し
てください。
条 件:・配列aを引数として、0または1の数をプリントする関数を作成してください。
0687669NGNG
>>684
プロトタイプ宣言を修正してください。
a, b, cの変数宣言を加えてください。
l = 4を加えて b の部分を直してください。
c もallocate()を使うようにしてください。
mat_mul()などを呼び出している部分も修正してください。

そこら辺を修正したら、一度コンパイルしてみましょう。
0688669NGNG
>>685
allocate()のところのdoubleを全てcomplexに修正してください。
0689デフォルトの名無しさんNGNG
>>686 二行目以降同時に…

無理。
0690デフォルトの名無しさんNGNG
>>686
一応やってやったがこれが最後だ。動かなくても知らん(今後も知らん)。
自分のレス番は間違えないように。非常に迷惑だ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=13&fi=no
0691デフォルトの名無しさんNGNG
やばい、夏休みの宿題の絵日記つけるの忘れてた・・・
どなたか20日以降のお天気をおしえてください。
0692デフォルトの名無しさんNGNG

 厨房の夏

  2chの夏
0693 NGNG
>>686
#include <stdio.h>
void print(int n, const int *a) {
 printf("%d", n);
}
int main() {
 int a[1], n = 0, c = 0;
 while (~(a[0] = getchar()))
  {
   if (a[0] == c)
    n++;
   else {
    if (c)
     print(n, a);
    if (a[0] == '\n') {
     putchar('\n');
     c = 0;
    } else {
     if (c)
      putchar(',');
     c = a[0];
     n = 1;
    }
   }
  }
 if (c) {
  print(n, a);
  putchar('\n');
 }
 return 0;
}
0694デフォルトの名無しさんNGNG
>>688
21時頃に停電になってしまい、レス遅れてすいませんでした。
allocate()のところのdoubleは全てcomplexに修正しました。
0695デフォルトの名無しさんNGNG
688>>
687>>の修正をやってみます。
0696686NGNG
>>690
すみませんでした。できました。ありがとうございます
0697デフォルトの名無しさんNGNG
#include <stdio.h>

typedef struct {
double re;
double im;
} complex;

complex add(complex alpha, complex beta);
complex mul(complex alpha, complex beta);
void mat_mul(complex** a, complex** b, complex** c, int n, int m, int l);
void print_mat(complex** a,int n,int m,char *str);

int main(void)
{
int n,m,l,i,j;
n = 2; m = 3; l = 4;
double a,b,c;

a = allocate(m, l);
for (i = 0; i < m; i++) {
for (j = 0; j < l; j++) {
a[i][j].re = 1.0 * (i * n + j);  *
a[i][j].im = 1.0 * (i * n + j);  *
}
}

b = allocate(n, m);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
b[i][j].re = 1.0 * (i * n + j);  *
b[i][j].im = 1.0 * (i * n + j);  *
}
}

c = allocate(n, l);
for (i = 0; i < n; i++) {
for (j = 0; j < l; j++) {
b[i][j].re = 1.0 * (i * n + j);  *
b[i][j].im = 1.0 * (i * n + j);  *
}
}

print_mat(a, n, m, "a");      *
print_mat(b, m, l, "b");      *

mat_mul(a, b, c, n,m,l);      *

print_mat(c,n,l, "a * b");     *
return 0;
}

>>688
>>687で言われた修正をしてみましたが、*の部分でエラーが
でます。どう直せば良いかわからないので、よろしくお願いします。
0698 NGNG
>>685
>  p = (double**)malloc(sizeof(double*) * n + sizeof(double) * n * m);
>  t = (double*)&p[n];

これ、環境によっては動かないよ。
0699デフォルトの名無しさんNGNG
>697
double a,b,c; -> complex **a,**b,**c;
0700499NGNG
#include <stdio.h>

typedef struct {
double re;
double im;
} complex;

complex add(complex alpha, complex beta);
complex mul(complex alpha, complex beta);
void mat_mul(complex** a, complex** b, complex** c, int n, int m, int l);
void print_mat(complex** a,int n,int m,char *str);

int main(void)
{
int n,m,l,i,j;
n = 2; m = 3; l = 4;
double a,b,c;

a = allocate(m, l);
for (i = 0; i < m; i++) {
for (j = 0; j < l; j++) {
a[i][j].re = 1.0 * (i * n + j);  
a[i][j].im = 1.0 * (i * n + j);  
}
}

b = allocate(n, m);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
b[i][j].re = 1.0 * (i * n + j);  
b[i][j].im = 1.0 * (i * n + j);  
}
}

c = allocate(n, l);
for (i = 0; i < n; i++) {
for (j = 0; j < l; j++) {
b[i][j].re = 1.0 * (i * n + j);  
b[i][j].im = 1.0 * (i * n + j);  
}
}

print_mat(a, n, m, "a");     
print_mat(b, m, l, "b");      *

mat_mul(a, b, c, n,m,l);      

print_mat(c,n,l, "a * b");     *
return 0;
}

>>699
あと二つ*の場所のエラーが残ります。これは、どう直せばよいので
しょうか。よろしくお願いします。
>>685
そうなんですか、動くことを信じてみます。
0701デフォルトの名無しさんNGNG
呼び出している関数、print_matは
void print_mat(complex** a,int n,int m,char *str)
{
int i, j;

printf("%s = \n", str);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++)
printf("%+f + %+fi ", a[i][j].re, a[i][j].im);
printf("\n");
}
}
です。
エラーは、parse eror before string constantと出ます。
0702デフォルトの名無しさんNGNG
>700
double a,b,c;
が直ってない気がするが気のせいか?
文字列("b"と"a * b")の前に変な文字が混じってないか確認して
0703669NGNG
>>700
行列a は何*何ですか?行列b は何*何ですか?
つじつまがあっていませんよ。

>>699 で言われたように直してください。
c = allocate(n, l); の後のforは要らないです。
0704669NGNG
>>698
もしかしてアライメントの問題ですか?
0705499NGNG
#include <stdio.h>

typedef struct {
double re;
double im;
} complex;

complex add(complex alpha, complex beta);
complex mul(complex alpha, complex beta);
void mat_mul(complex** a, complex** b, complex** c, int n, int m, int l);
void print_mat(complex** a,int n,int m,char *str);

int main(void)
{
int n,m,l,i,j;
n = 2; m = 3; l = 4;
complex **a,**b,**c;

a = allocate(n, m);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
a[i][j].re = 1.0 * (i * n + j);  
a[i][j].im = 1.0 * (i * n + j);  
}
}

b = allocate(m, l);
for (i = 0; i < m; i++) {
for (j = 0; j < l; j++) {
b[i][j].re = 1.0 * (i * n + j);  
b[i][j].im = 1.0 * (i * n + j);  
}
}

c = allocate(n, l);

print_mat(a, n, n, "a");     
print_mat(b, m, l, "b");      *

mat_mul(a, b, c, n,m,l);      

print_mat(c,n,l, "a * b");     *
return 0;
}

>>702-703
変更してみましたが、やはりあと二つのエラーがなくなりません。
0706デフォルトの名無しさんNGNG
>705
ここの部分だけでいいから(自分の手で打つんじゃなく)ファイルからそのままコピペしてくれ
print_mat(a, n, n, "a");
print_mat(b, m, l, "b");

mat_mul(a, b, c, n,m,l);

print_mat(c,n,l, "a * b");
0707499NGNG
間違えました
print_mat(a, n, n, "a");-->print_mat(a, n, m, "a");

です。
0708落ちこぼれNGNG
配列に入っている整数の和を求める関数を完成せよという問題です。
提出が今日までなので必死なんです(;´Д`)
お願いします。

#include<stdio.h>

int sum(int, int, int *);


int sum(int first, int last, int *array)
{
if(first==last)
return array[first];
else
return array[first] + sum(�@, �A, �B);
}


int main(void){
int a[]={10, 2, 1, 3, 4};

printf("%d\n", sum(0, 4, a) );
return 0;
}
0709デフォルトの名無しさんNGNG
>708
このコードを元にすればよいということか?
0710デフォルトの名無しさんNGNG
なぜに再帰?
0711デフォルトの名無しさんNGNG
>>708 こういう事か?
#include <stdio.h>

int sum(int, int, int *);

int sum(int first, int last, int *array)
{
if(first==last)
return array[first];
else
return array[first] + sum(first + 1, last, array);
}


int main(void){
int a[]={10, 2, 1, 3, 4};

printf("%d\n", sum(0, 4, a) );
return 0;
}
0712499NGNG
>>705
どうもすいませんでした。,が抜けてた箇所があったみたいです。
コンパイルすることはできたのですがaとbの行列を出力したところで
core cumped してしまいました
0713デフォルトの名無しさんNGNG
>708
1. first+1
2. last
3. array
センセがLisperなんじゃね?
0714デフォルトの名無しさんNGNG
>712
とりあえずmat_mul()を↓に変えてみな

void mat_mul(complex** a, complex** b, complex** c, int n, int m, int l) {
int i, j, k;
complex s, t;

for (i = 0; i < n; i++)
for (j = 0; j < l; j++) {
s.re = s.im = 0.0;
for (k = 0; k < m; k++) {
t = mul(a[i][k], b[k][j]);
s = add(s, t);
}
c[i][j] = s;
}
}
0715デフォルトの名無しさんNGNG
動きましたー。どうもありがとうございます。
あとは行列を入力できるようにするだけなので、
やってみます。もしかしたら、また来ることになるかもしれませんが・・。
>>714さん>>669さん本当にありがとうございました。
0716落ちこぼれNGNG
>>711
>>713
ありがとうございました!
何とか単位取れそうです。
0717デフォルトの名無しさんNGNG
配列a,bをいっしょにした、配列cを小さい順に表示したいんですが、うまくいきません。
どこを直したらいいのか、指摘して下さい。
#include <stdio.h>

void kansu( int a[5]);

int main( void ){

int a[5], b[5], c[10], i, j, k, e, f, g, min;

printf("配列 a に,5つの数を入力して下さい。\n");

for( i=0; i<5; i++){

scanf("%d",&a[i]);
}

printf("配列 b に,5つの数を入力して下さい。\n");

for( j=0; j<5; j++){

scanf("%d",&b[j]);
}

kansu( a );

for( i=0; i<5; i++){

e = i;
min=10000000;

for( j=e; j<5; j++){

if(min >= b[j]){

min = b[j];
f = j;
}
}
g = b[i];
b[i] = b[f];
b[f] = g;
}
printf("\n");
printf("配列 c の要素を順番に表示する。\n");

0718デフォルトの名無しさんNGNG
つづきです。
i = 0;
j = 0;

for( k=0; k<10; k++){

if( a[i] <= b[j] ){
c[k] = a[i];
i++;
}
else if( a[i] > b[j] ){
c[k] = b[j];
j++;
}
else if( i==5 ){
c[k] = b[j];
j++;
}
else if( j==5 ){
c[k] = a[i];
i++;
}
}
for( k=0; k<10; k++){

printf("%d\n", c[k]);
}
}
void kansu( int a[5]){

int i, j, e, f, g, min;

for( i=0; i<5; i++){

e = i;
min=10000000;

for( j=e; j<5; j++){

if(min >= a[j]){

min = a[j];
f = j;
}
}
g = a[i];
a[i] = a[f];
a[f] = g;
}
return;
}
見づらくなってすいません。
0719デフォルトの名無しさんNGNG
>>717>>718
マージソートだな。
0720デフォルトの名無しさんNGNG
>718
とりあえず↓ここは
if( a[i] <= b[j] ){
c[k] = a[i];
i++;
}
else if( a[i] > b[j] ){
c[k] = b[j];
j++;
}
else if( i==5 ){
c[k] = b[j];
j++;
}
else if( j==5 ){
c[k] = a[i];
i++;
}

↓こうしないとダメだろ
if( i==5 ){
c[k] = b[j];
j++;
}
else if( j==5 ){
c[k] = a[i];
i++;
}
else if( a[i] <= b[j] ){
c[k] = a[i];
i++;
}
else if( a[i] > b[j] ){
c[k] = b[j];
j++;
}
0721デフォルトの名無しさんNGNG
>718
なんでkansu()を一回しか使ってないんだよ。
0722だれかさん。NGNG
長いソースは >>216 が便利だよ。
0723デフォルトの名無しさんNGNG
なんかソート方法が変だよ。

少なくともバブルソートか交換ソートで、a[]とb[]をまず整列しる。
それからマージソートでa[]とb[]をミックスしる。
0724デフォルトの名無しさんNGNG
>723
a[]はkansu()でb[]はmain()内で(アフォ)選択ソートしてるよ
0725デフォルトの名無しさんNGNG
>>724
この選択ソートあまり見かけないやり方だね。
それに、もし入力に10000000を越える数字を入れると、動作が
おかしくなるぞ。
0726デフォルトの名無しさんNGNG
誰も書かないからうpしてみる。間違い訂正ヨロスク。
#include <stdio.h>

void s_sort(int a[]);
void m_sort(int a[], int b[], int c[]);

int main(void)
{
int a[5], b[5], c[10], i, j;

printf("配列 a に,5つの数を入力して下さい。\n");
for (i = 0; i < 5; i++) scanf("%d", &a[i]);

printf("配列 b に,5つの数を入力して下さい。\n");
for (j = 0; j < 5; j++) scanf("%d", &b[j]);

s_sort(a);
s_sort(b);

m_sort(a, b, c);

printf("配列 c の要素を順番に表示する。\n");

for (i = 0; i < 10; i++)
printf("%d ", c[i]);
printf("\n");

return 0;
}
0727デフォルトの名無しさんNGNG
void s_sort(int a[]) /* 単純選択ソート */
{
int i, j, t;

for (i = 0; i < 4; i++)
for (j = i + 1; j < 5; j++)
if (a[i] > a[j]) {
t = a[i]; a[i] = a[j]; a[j] = t;
}
}

void m_sort(int a[], int b[], int c[]) /* マージソート */
{
int i = 0, j = 0, k = 0;

while (i < 5 || j < 5) {
if (i == 5) c[k++] = b[j++];
else if (j == 5) c[k++] = a[i++];
else if (a[i] < b[j]) c[k++] = a[i++];
else c[k++] = b[j++];
}
}
0728デフォルトの名無しさんNGNG
>>720
ありがとうございます。なりました。
でも、なぜこうしたらなるんですか?
0729デフォルトの名無しさんNGNG
>>728
a[]とb[]をマージする時に、どちらかの添え字が境界を越えてしまわないか
どうか先にチェックする必要があるのです。
0730デフォルトの名無しさんNGNG
あっ、なるほど。言われてみれば、当然のことですね。
自分では、気付きませんでした…。
ありがとうございます。
勉強させていただきました。
(あまりに基本的なことですみませんでした。)
0731デフォルトの名無しさんNGNG
テキスト内に複数回現れる最長文字列を探せ。
C言語でお願いします。出来るだけ早く動くように・・・
0732デフォルトの名無しさんNGNG
>731
キョーダイセイ
0733デフォルトの名無しさんNGNG
>>731
sageてるけど、ネタなのかな?
改行、空白文字の扱いはどーなの?
0734デフォルトの名無しさんNGNG
>733
デキレバ 「カイギョウ」->「クウハクモジ」 ト スル
テキスト ハ スウヒャクキロバイト ノ エイブンショウセツ
0735デフォルトの名無しさんNGNG
>732
やっぱ誰か見てるのね
0736デフォルトの名無しさんNGNG
ワードが最長?センテンスが最長?
0737デフォルトの名無しさんNGNG
センスが最低?
0738デフォルトの名無しさんNGNG
よくわからんけど、圧縮のアルゴリズムがほとんどそのまま使えるのかな。
0739デフォルトの名無しさんNGNG
>738
ハァ?
0740 NGNG
>>731
文字列が重なっている場合はどうなるんだ?
テキストが abcabcabc のとき、最長文字列は
abcabc か abc かどちらだ?
0741デフォルトの名無しさんNGNG
>>731もしくわ>>732
仕様を詳しく言え馬鹿京大生
0742デフォルトの名無しさんNGNG
>740
abcabc
0743デフォルトの名無しさんNGNG
>741
モレ ハ モウ デキテルカラ ベツニ イインダガ......

「1冊の本の中に複数回出現する最長部分文字列を探せ。本は、Project Gutenberg
(http://promo.net/pg/)から選ぶこと。」
0744デフォルトの名無しさんNGNG
どのようなアルゴリズムを用いても圧縮不可能な
ビット列を生成するアルゴリズムを教えてくれ。
0745デフォルトの名無しさんNGNG
>744
アルゴリズムがある時点で圧縮可能なんじゃ?
0746デフォルトの名無しさんNGNG
>>744
いろんな圧縮アルゴリズムで圧縮しまくって、縮まなくなるまで
これを繰り返す
0747デフォルトの名無しさんNGNG
>>744
00000001
00000010
00000011
00000100
...
0748デフォルトの名無しさんNGNG
>>747
% ruby -e '256.times{|n| puts "%08b" % n}' > temp
% ls -l temp
-rw-r--r-- 1 hoge user 2304 8 3 01:15 temp
% gzip temp
% ls -l temp.gz
-rw-r--r-- 1 hoge user 469 8 3 01:15 temp.gz

圧縮できたYO
0749733NGNG
>>731
結局、詳細がよくわからんのでなんとも言えんが・・・
まずは「ハッシュ法 探索 文字列」あたりで検索かけて参考にしてくれ。
詰まったらここか、>>732にでも聞けばいい。
わしゃ眠いから寝る
0750デフォルトの名無しさんNGNG
>>748
ビット列なので、>>747のはすべて1バイト。
なのでこれ以上圧縮は無理とかいいたいんじゃないの?
0751748NGNG
>>750
ネタだよ(w

実際にバイナリのビット列作ってみてgzipかけたら元よりデカくなったよ。
一応「おお」と驚いてみたよ。
0752デフォルトの名無しさんNGNG
>>744
回答するなら、こんなところでしょうね。
いずれも情報理論の基本かと思われ。

1:どんなビットパターンを生成しても、
  そのビットパターンを圧縮できるアルゴリズムは必ず存在する
2:nビット以下で表現されるビット列を、
  すべて、nビット未満に圧縮できるアルゴリズムは存在しない

2:は>>748>>750さんの示す通り。
1:は、たとえば 000 001 010 011 ... 111 のうち、
どれか一つだけを1ビットに圧縮できるが、
他はすべて4ビットに伸張してしまうようなアルゴリズムの存在を考えれば、
任意のビット列を1ビットに圧縮できるアルゴリズムが存在する、と言えるため。
0753デフォルトの名無しさんNGNG
>>744
シャノンの定義ではエントロピーが最大になればいいんだから
完全に偏りのない乱数のようなデータは圧縮できない

たとえばランダムに与えられる8ビットの整数 n は圧縮できない。
0754752NGNG
番号間違えた

2:は>>747>>750
1:もすでにありますね。>>745
0755デフォルトの名無しさんNGNG
>753
結局その乱数もコンピュータがなんらかのアルゴリズムに基づいて生成したものだから
そのアルゴリズムに基いて圧縮可能
0756デフォルトの名無しさんNGNG
>>753>>755
それが「真の乱数」ならばいいのだろうけどね。
でも、「真の乱数」などこの世に存在しないという罠。
0757デフォルトの名無しさんNGNG
>744
ただ1ビット
 0
だ(1でも良いけどな)。これ以上圧縮しようが無い。
0758デフォルトの名無しさんNGNG
>>756
真の乱数ではないかもしれないが、面白い製品があるぞ。
http://www2.toshiba.co.jp/efort/market/rmaster/index_j.htm
0759デフォルトの名無しさんNGNG
禿しく亀レスな上に、限りなくどうでもいいのだが、
>>727
それ選択ソートじゃなくてバブルソート
0760デフォルトの名無しさんNGNG
>>759
禿しく亀レスで、限りなくどうでもいいのだが、>>727は選択ソートだよ。
バブルソートは次のようになる。

void b_sort(int a[]) /* バブルソート */
{
int i, j, t;

for (i = 0; i < 4; i++)
for (j = 4; j > i; j--)
if (a[i] > a[j]) {
t = a[i]; a[i] = a[j]; a[j] = t;
}
}
0761デフォルトの名無しさんNGNG
>>760
限りなくどうでもいいのだが、それもバブルソートじゃないよ。
0762デフォルトの名無しさんNGNG
>>761
限りなくどうでもいいのだが、ではバブルソートの一例を具体的に
示してくれないか。
0763デフォルトの名無しさんNGNG
for (i = 0; i < 4; i++)
for (j = i; j < 4-1; j++)
if (a[j+1] > a[j]) {
t = a[j+1]; a[j+1] = a[j]; a[j] = t;
}
}
0764デフォルトの名無しさんNGNG
>>763
納得しますた。
0765753NGNG
>>756
いかなる高性能な圧縮にも・・なら定義上は乱数列だけど、
実用上は圧縮プログラムで予測不能な数列程度で良いね。
質のいい擬似乱数ならほとんど圧縮できなくなるよ。
0766デフォルトの名無しさんNGNG
限りなくどうでもいいのだが、バブルソートの例。

void b_sort(int a[]) /* バブルソート */
{
int i, j, t;

for (i = 0; i < 4; i++)
for (j = 4; j > i; j--)
if (a[j-1] > a[j]) {
t = a[j-1]; a[j-1] = a[j]; a[j] = t;
}
}

>>762
限りなくどうでもいいのだが、レスが早いね。
0767763NGNG
しまった、sage入れ忘れた。ごめん
0768763NGNG
しかも、話題が終わってるし。鬱、逝ってきます。
0769デフォルトの名無しさんNGNG
連続書き込み申し訳ない。
>>761と>>766-768は漏です。>>763は別の方です。

>>762を読んで>>766のレスを書いたのですが、
表示された>>763を自分のレスと勘違いして変な
連続書き込みをしてしまいました。
スレ汚しお詫びします。

今日はどうかしている。本当にもう逝く。
0770デフォルトの名無しさんNGNG
>>763は間違い。ソートできてない
0771デフォルトの名無しさんNGNG
(一行に書かれた二桁までの四則演算ができるプログラム)
が、課題なんですけど、全然わからないんです、、、
どなたか教えて下さい。
0772デフォルトの名無しさんNGNG
>>771
それって例えば

1 + 2 * 3

と入れたら、ちゃんと 7 を返すようなもの?
0773デフォルトの名無しさんNGNG
>>771
既出じゃないか?
0774デフォルトの名無しさんNGNG
#!/usr/bin/perl
while(<>){
print eval $_
}
0775デフォルトの名無しさんNGNG
>>773
同じ学校の人なんじゃないの?(藁
0776731NGNG
仕様は>743位、細かいところは適当にしてください。
一様、出来たことには出来たんだけど、とても遅い
0777肉と急得るNGNG
はじめまして、最近JAVAを勉強しだした者です。
アプレット上でCanvasクラス承継したクラスをインナークラスにしてインナークラスを
内包するクラスにインナークラスのインスタンスを生成し、内包する
クラスにrepaintメソッドを記述して、インナークラスのupdateメソッド
を呼び出しキャンバス上に描画したいのですがうまく呼び出されません。
Canvasクラスを扱うには何かコツがあるのでしょうか?

ちなみに問題の内容は

表示ボタンをクリックすると、テキストフィールドに入力された文字列が、
指定されたフォントでキャンバスに表示される。です。

ボタンなどの部品とリスナはすべて作りました、あとはキャンバスに表示
するだけなのですが、どうでしょうか?
0778デフォルトの名無しさんNGNG
>>777
まず、4行にも渡る1文を書く癖から改めた方がいいかなと。
0779デフォルトの名無しさんNGNG
>>777
まくしたてすぎ
0780デフォルトの名無しさんNGNG
>>777
a.innerclass(extend(canvas)) = new a.innerclass(extend(canvas))
0781732NGNG
>>776(==731)
遅いってどれくらい?
多分suffix array構成時のソート方法に問題があるんだろうけど
0782デフォルトの名無しさんNGNG
>>731の補題

以下の様な文字列があったとする。

abc123abcd

この文字列の中では 123 という組み合わせは
一度しか現れていない。
その為、最長一致文字列を検索する際に
123 を含む文字列( abc123a, 123ab, ... )は
検索の対象から外す事ができるので、
これらを事前に見つけておく事ができれば
検索時間を大幅に削減する事が出来る。

このような文字列のうち、(全ての組み合わせに対して
検索をするアルゴリズムと比較して)
最大限に検索対象を削減できる文字列を見つける
プログラムを作成しなさい。
0783デフォルトの名無しさんNGNG
>>782
要はn文字以上でである文字列が入ってないのだけを抽出すればいいんだろ?
0784デフォルトの名無しさんNGNG
>>783
ここ嫁。

このような文字列のうち、(全ての組み合わせに対して
検索をするアルゴリズムと比較して)
最大限に検索対象を削減できる文字列を見つける
プログラムを作成しなさい。
0785肉と急得るNGNG
>>780さん
書き込みありがとうございます。あと長文を書いてしまうのは癖でして、
見苦しい文章をカキコしてすいませんでした。

a.innerclass(extend(canvas)) = new a.innerclass(extend(canvas))

なのですが、キャンバスクラスを承継したクラスのインスタンスを
作成する時には、普通に記述した後に(extend(Canvas))と書き加える
という事でしょうか?。
自分で試してみたのですがエラーが出てコンパイル出来ませんでした。
気が向いて暇があったら教えてくださいm(__)m
今度は読みにくくないですよね?(~_~;)

0786デフォルトの名無しさんNGNG
>>785(777) 氏へ

 >>778も言うように
 複文でだらだら書いた仕様(のようなもの)を
 単文の箇条書きに切り分けるとかして
 整理して考えてみ?
 そのうえでどの部分が問題なのかもう一回質問してみれ。
 
例)
>アプレット上でCanvasクラス承継したクラスをインナークラスにしてインナークラスを
>内包するクラスにインナークラスのインスタンスを生成し、〔以下略〕

1、 Canvasクラスを継承したクラスを作る。
2、 1、で作ったクラスは(???)クラスのインナークラスとする。
3、 1,2で定義したクラスのインスタンスを生成する。
    :
    :
0787デフォルトの名無しさんNGNG
プログラミングを必死に勉強しているものです
ですがまだぜんぜんわかってません
ここで頼んでもしょうがないのですが、有志の方がいたらどうぞ簡単なのをひとつ依頼してもよろしいでしょうか?
ひとつの改行までの文のうしろ5バイト文字を消すプログラムを作っていただきたいのですが
作れるでしょうか?


すみませんみなさんの会話を崩してしまい・・・
ここにお詫び申し上げます
0788787NGNG
例を挙げると
I am japanese
というのを
I am jap

と、半角5文字分消せるようにしていただきたいのです
0789デフォルトの名無しさんNGNG
>>787
どの言語を使っているかくらいかけよ。
0790デフォルトの名無しさんNGNG
Java以外だろうな。>5バイト文字を消す
0791787NGNG
HSPです
おねがいします
0792デフォルトの名無しさんNGNG
氏ね
0793787NGNG
>>791
偽者はやめてください  私を騙ったってしょうがありませんよ
>>789
別にどれでも構わないのですが。。。。
0794787(793 ◆31SOL0D. NGNG
えっと。。。確かHSPってフリーのあのソフトだっけなぁ
私は画像を表示するだけとかの意味がないソフトくらいしかつくれないのですよ(;゚Д゚)
0795デフォルトの名無しさんNGNG
>>798
あほたれ。どれか構えっつの。教えた結果がまったくの無駄になるとむかつくからな。
0796デフォルトの名無しさんNGNG
798はあほたれが決定済み。
0797デフォルトの名無しさんNGNG
↓
0798795NGNG
>>795
おれもあほだ。>>798じゃなくて>>793だった。逝ってきます。
0799795=798NGNG
うーん、どつぼにはまった。
0800デフォルトの名無しさんNGNG
ワラタ
0801787(793 ◆31SOL0D. NGNG
作りやすいのってはどれですか??
アセンブラ何か指定しちゃったら何か迷惑だし。。。(この時点で迷惑ですけど(;´Д`)
0802デフォルトの名無しさんNGNG
>>801
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/String.html#substring(int,%20int)
0803デフォルトの名無しさんNGNG
マシン語.
0804787NGNG
なんか厨房さんにたくさん引っかかってしまった。。。
0805787(793 ◆31SOL0D. NGNG
>>804
そんなことして楽しいですか?
0806787(793 ◇31SOL0D.NGNG
なんか厨房さんにたくさん引っかかってしまった。。。
0807デフォルトの名無しさんNGNG
↑面白い
0808デフォルトの名無しさんNGNG
言語がなんでもいい宿題なのか?
5バイトって日本語だったらどうするの?
0809787NGNG
日本語なんて考えなくていいと思いますよ
たぶん
0810デフォルトの名無しさんNGNG
とりあえず後ろ5文字削除(≠5バイト)
public class TrimLast5String {

public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );

while ( true ) {
TrimLast5String.trim( br.readLine() );
}
} catch (Exception e) {

}
}

public static void trim( String line ) {
int length = line.length();

if ( length > 5 ) {
System.out.println( line.substring( 0, length - 5 ) );
}
}
}
0811デフォルトの名無しさんNGNG
>>787
C版。めんどいので、キモのところだけ。
len = strlen(str);
if(len < 5) str[0] = '\0';
else str[len-5]='\0';
char *strの後の5文字(=バイト)を消す(消したかのように見せる)
0812748NGNG
後ろの5文字(≠5バイト)削除

puts ARGF.map{|s| s.sub(/.{5}$/, '')}
0813デフォルトの名無しさんNGNG
import java.io.*;
public class Trim5 {
  public static void main(String[] args) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String line;
    while ((line = in.readLine()) != null) {
      System.out.println(trimTail5(line));
    }
  }
  public static String trimTail5(String s) {
    return s.substring(0, Math.max(0, s.length() - 5));
  }
}
0814デフォルトの名無しさんNGNG
chop;chop;chop;chop;chop;
0815デフォルトの名無しさんNGNG
String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println(s.substring(0, Math.max(0, s.length() - 5)));
これだけでいいか。
0816suckaNGNG
例えばjavascriptsで
<form action="finalForm.htm" method="post "name="frmFillin">
First Name: <input type="text" name="firstName" size="15">
</form>
こんなんあります。どうやってfinalForm.htmのほうでこの情報を表示すればいいんでしょうか?
0817デフォルトの名無しさんNGNG
「method="get"」にしてURLから取得する
それと、板違い→http://pc3.2ch.net/hp/
0818デフォルトの名無しさんNGNG
javascript"s"
0819デフォルトの名無しさんNGNG
javascriptsがjavascriptのtypoだったとして、
>>816がjavascriptとなんか関係あるの?
0820suckaNGNG
ご免上の板からじゃ、書き込めん。
method="get"は分かってたんだけど、中身のほうがさ。
0821デフォルトの名無しさんNGNG
なにがしたいのかわからにゃー
0822suckaNGNG
Aのファイルで名前やら住所やら書き入れます。
<form action="finalForm.htm" method="get "name="frmFillin">
First Name: <input type="text" name="firstName" size="15"></form>
そんでfinalForm.htmでどうやったら、名前やら住所を表示でするん?
0823デフォルトの名無しさんNGNG
>>822
板違いだから簡単に済ますけど、
formで送られた情報を得られるのはサーバ側。

だから、サーバの側でそのfinalForm.htmを加工して、
クライアントに送り返してやらないといけない。
クライアント側(ブラウザ側)だけで何とかしようと思ってもどうにもならない。
それは無理。

CGIの基本ですな。で、それは宿題なの?
0824デフォルトの名無しさんNGNG
>>sucka>>819
「finalForm.htm」ってことは受ける側もJavaScript使うんじゃなく?
0825suckaNGNG
そうそう。
finalForm.htmもjavascript使うんだけど、どうやればいいか。さっぱり。
なんか、XMLとjavascriptでプロジェクトしてんだけど、昔にやったjavascriptをわすれてんのよね。
0826デフォルトの名無しさんNGNG
window.location
0827787(793 ◆31SOL0D. NGNG
やった〜!!
マジでうれしいです ありがとうございました
規制前だったら2chで書き込める串さしあげてました
0828デフォルトの名無しさんNGNG
今日からジャバをダバと呼んでください。
ジャバスクリプトはダバリプトです。よろしく。
0829787(793 ◆31SOL0D. NGNG
HSPって皆さんの目からしてどうですか?
使いやすいですか? 私は最初はこれからやってみようかなと。。。

>>810さん
これってHSPとかでできますか??
0830787NGNG
最初っからHSPって言ってるのにね。
0831787(793 ◆31SOL0D. NGNG
>>830
そうですか。。。
何かエラーでたんでえっ?って感じでした すみません
0832731NGNG
>781
ttp://sary.namazu.org/docs/suffix-array.html
suffix array は正にこんな感じ。INDEXを用意して、そいつを
使ってパケットソートにかけてます。
時間としてはうちのPENTIUM3の533で1.5万字15分くらい。
5万字とかだと、もう待ってられません。
0833731NGNG
>832
嘘だ・・・5千字で15分くらい
0834hoge ◆aLgb/tNY NGNG
VBなんですがお願いします。再帰関数が良く分かりません
Private Sub FindFile(ByVal ほにゃらら As String)
Dim hFind As Long
Dim FindData As WIN32_FIND_DATA
Dim bResult As Long
Dim NameOfFile As String
Const RoutePath = "るーと"
Const FILE_ATTRIBUTE_DIRECTORY = 16
flg = 0

'最初のファイル検索
hFind = FindFirstFile(RoutePath & "*.*", FindData)
'******** エラー終了 ********
If hFind = INVALID_HANDLE_VALUE Then
MsgBox "検索失敗"
Exit Sub
End If
Do
With FindData
'NULL文字を取り除く
.FileName = Left(.FileName, _
InStr(.FileName, vbNullChar) - 1)
.ShortFileName = Left(.ShortFileName, _
InStr(.ShortFileName, vbNullChar) - 1)
NameOfFile = Trim(.FileName)
If NameOfFile = "." Then
flg = 1
ElseIf NameOfFile = ".." Then
flg = 1
End If
'ディレクトリかどうか
If (.Attributes And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then
Else
flg = 1
End If
End With
If Not flg = 1 Then
'【お願い】ここに呼び出したい【please】
Else
flg = 0
End If
'次を検索
bResult = FindNextFile(hFind, FindData)
Loop While bResult <> 0
'検索の終了
FindClose hFind
End Sub
0835732NGNG
>>832(==731)
バケットソートってRadixソートだよね?
おれも最初はそれでやってたんだけど、実際に指定のところから取ってきたファイル(400KB程度)をかけたら
4時間待っても終了しないんでwこれは違うと思ってやめた
よく考えたらRadixソートがO(n)なのはデータ長が定数のときだけで、これみたいに
データ長=データ数=ファイルの大きさnのときはO(n^2)かかっちゃう。当然遅い

で違う方法に変えたら400KBを3sec弱(Crusoe600MHz)ぐらいになった。
パクられたらヤだからネタは明かすつもりないけどw
0836デフォルトの名無しさんNGNG
>>835
うーん、まあ明かすつもりがないのは別にいいけど、
ソートアルゴリズムは研究され尽くされてる分野だから
多分、君の考えたのも既知のアルゴリズムだと思うよ。

だからこそ、10年位前にcomb sortなんてのが考案されたときに
プログラマの間で大ニュースになったわけだし。

あ、でもcomb sortってどんなのだったか忘れちゃった。

#いや、本音は「教えてホスィ」なんだけど、それは内緒(w
0837デフォルトの名無しさんNGNG
>>836
comb sort遅いよ。実装してみたけど。shell sortとアルゴリズムも
似ているし、オーダーも同じくらい。
0838732NGNG
>836
おれはソートアルゴリズム発明するよな天才じゃないYO!
要は使い方の問題。
0839モヒモヒNGNG
誰かつきっきりで教えてくれる人いませんか?
0840デフォルトの名無しさんNGNG
男か女か、それが問題だ。
いくら払うきがあるのかも問題だ。
0841デフォルトの名無しさんNGNG
女ならただでいいな。
ただし、未婚で彼氏なしが条件。
0842デフォルトの名無しさんNGNG
>>841
気弱な男の人妻とかでもいいが。
さえない旦那を優しく包み込む美人妻。
それを奪い取る快感♪

最終的には恨まれて家炎上しそうだが。
じゃあ屈強な旦那にボコられて後腐れない方がいいのか・・・・?
0843デフォルトの名無しさんNGNG
すみません
といれはどこですか?
0844デフォルトの名無しさんNGNG
>>843
少しは自分で調べろ!
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=utf8&oe=utf8&q=%E3%83%88%E3%82%A4%E3%83%AC
0845デフォルトの名無しさんNGNG
>>843
http://dempa.2ch.net/misc/R3_temp.swf?inputStr=%83g%83C%83%8C%90%C0%82%C1%82%C4%82%E6%82%B5
0846デフォルトの名無しさんNGNG
int i; char *d="";
main(){
i++[realloc(d,i+1)]=getc();
}

これって、未定義動作ですか?
0847デフォルトの名無しさんNGNG
>>846
やってはいけないことなのは確かだな。
0848デフォルトの名無しさんNGNG
>>847
ありがとうございます。

getc() は getch() の間違いでした。
i と i++ を使っているのですが、配列の中と外では、
評価が途中で確定するわけではないですよね?
0849デフォルトの名無しさんNGNG
i++[realloc(d,i+1)]

意味不明。
0850デフォルトの名無しさんNGNG
>>849
意味が分かるようになってからレスしれ。
0851デフォルトの名無しさんNGNG
>>850
つぅかint iは配列か?
ポインタですらないが。
0852デフォルトの名無しさんNGNG
849=851
だからぁ、a[2] を 2[a] と書いてもいいんだってばw
0853デフォルトの名無しさんNGNG
>>846
宿題じゃないじゃん(w
0854846NGNG
>>853
いや、未定義動作について調べて来い、というような内容の宿題なので・・・
ちょうど某スレにこの話題が出ていて、確かめさせてもらっているのです。
0855デフォルトの名無しさんNGNG
>>846
何もそんな生々しい(?)例を持ってこなくても・・・
knkタンみたいに i=i++; でいいじゃないか。
0856デフォルトの名無しさんNGNG
>>854
非生産的な宿題ですね。
0857デフォルトの名無しさんNGNG
後は
j = i++ * i++;
とかね。VCとBCCで動作が異なるよ。
0858846NGNG
みなさん、ありがとうございました。
0859デフォルトの名無しさんNGNG
>>858
ありがとうございましたって・・・オィオィ
答えが分かったのか?(w

この問題には、いろいろな落とし穴が複合されているようだが。
0860hoge ◆aLgb/tNY NGNG
>>835-859
 すさまじい無視っぷりをどうもありが�d
 もうこねぇよヽ(`Д´)ノウァーン
0861 ◆.5dNLhBI NGNG

200.164.56.24:80 (総合評価:<font size=+2 color=yellow>?</font><font color=lime>(A 以上 or 生 IP。)</font><font color=Cyan>[2972ミリ秒]</font><BR>
216.231.240.20:8080 (総合評価:<font size=+2 color=yellow>?</font><font color=lime>(A 以上 or 生 IP。)</font><font color=Cyan>[1532ミリ秒]</font><BR>
203.116.111.196:80 (総合評価:<font size=+2 color=yellow>?</font><font color=lime>(A 以上 or 生 IP。)</font><font color=Cyan>[3112ミリ秒]</font><BR>


これの[2972ミリ秒]、[1532ミリ秒]、[3112ミリ秒]を調べて速い順で上から並べるのって作れます?
HSPが手元であるのでそれでお願いしたいのですが、よろしいでしょうか?
0862デフォルトの名無しさんNGNG
>>861
構造解析くらい自分でやってくれ。
substrとindexof、もしくはそれ相当の機能がある言語なら猿でもできる。
0863デフォルトの名無しさんNGNG
どこが宿題だよ。
マジレスするなら、awkとsortと正規表現で2,3行でできる。
0864デフォルトの名無しさんNGNG
086578KNGNG
nachos やって
0866デフォルトの名無しさんNGNG
みなさ〜ん、宿題はこっちですよ。
0867423NGNG
>> 866
宿題じゃないですよハゲ
0868843NGNG
>>844
アリガトウマニアッタヨ
0869デフォルトの名無しさんNGNG
>>867
じゃスレ違い
0870モヒモヒNGNG
Borland C++で自販機作ってください。
0871デフォルトの名無しさんNGNG
鉄板がいっぱい要るな。
0872デフォルトの名無しさんNGNG
それ以前に何の自販機だろ。
エロ本でもいいのか?
0873モヒモヒNGNG
なんでもええ、エロ本でもエロビでも
カモーン、カモーン
0874デフォルトの名無しさんNGNG
自販機板に逝けよ
0875デフォルトの名無しさんNGNG
宿題より僕のオナニーてつだってください。僕の右手じゃもう使いすぎて
ききめがあまりありません。
オトコでも顔みなければそれなりにいけるとおもうのでおねがいします。
しこしこ
0876デフォルトの名無しさんNGNG
> オトコでも顔みなければそれなりにいけるとおもうので

(;´Д`) ウ、ウ、ウソ-ン・・・
0877デフォルトの名無しさんNGNG
左手使え
0878デフォルトの名無しさんNGNG
板違い。オナニー板に逝け、。
0879デフォルトの名無しさんNGNG
   _____
 /::\_____\   
 |: ̄\∩`_´) \ 
 |:   :| ̄ ̄U ̄:|
0880デフォルトの名無しさんNGNG
C++です。直してください。
void item()
{
int item;
int howMuch[6]={100, 100, 125, 75, 75, 100};

cout << " 1 2 3" << endl;
cout << " Coke Sprite Orange Juice" << endl;
cout << "$1.00 $1.00 $1.25" << endl << endl;

cout << " 4 5 6" << endl;
cout << " Mars Oh Henry! Kit-Kat" << endl;
cout << "$0.75 $0.75 $1.00" << endl << endl;

cout << "Select the item:";
cin >> item;
clrscr();

if (item == 1)
cout << "Please deposit $1.00";
else if (item == 2)
cout << "Please deposit $1.00";
else if (item == 3)
cout << "Please deposit $1.25";
else if (item == 4)
cout << "Please deposit $0.75";
else if (item == 5)
cout << "Please deposit $0.75";
else if (item == 6)
cout << "Please deposit $1.00";

deposit();
}


void deposit()
{
int dep, change, i;

cout << endl << endl;
cout << "Enter how much you are going to deposit" << endl;
cin >> dep;

change = dep - howMuch[i - 1];
cout << "Your change is " << change << endl;

}
0881デフォルトの名無しさんNGNG
「直してください」とかいうと、あんたには理解不能な回答が来るぞ。
0882デフォルトの名無しさんNGNG
>>881
答えが得られれば、それでいいのさ。彼は。
0883880NGNG
ごめんさい。直してくださいじゃないや。
ヒントかなんか教えてくだされば・・・
0884デフォルトの名無しさんNGNG
つか、howMuchの定義をdeposit()にもってけ。
0885デフォルトの名無しさんNGNG
商品選んでから金入れる自販機なのか。カナダの自販機ってそうなの?
まとめて金入れて複数買って最後に釣りレバーとかってできないの?
0886デフォルトの名無しさんNGNG
脳内自販機デス
0887880NGNG
itemのvalue1やら3をdepositにパスしたいんですけど、その時は
deposit(int item)にすればいいんですか?
0888デフォルトの名無しさんNGNG
>>887
いいよ。あとプロトタイプ宣言もいりそう。
0889デフォルトの名無しさんNGNG
state machineで書くと何人かは喜んで「完成」させてくれそう。
パズルとしてはあっちのほうが面白い。
0890デフォルトの名無しさんNGNG
C言語のネットワークプログラミングについての質問なんですけど、
無限ループ内でsocket関数を使ってsockfdを生成しようとすると
カウンタが1000を少しこえたところで、エラーを返します。
このエラーを回避して、永久にsockfdを生成し続けるには
どうすればいいのでしょうか?
よろしくお願いします。
0891デフォルトの名無しさんNGNG
>>890
socketの仕様読んでから死のうな。

後、所詮日本の通信回線ではDoSなんて不可能。
0892890NGNG
>>891
別にDoSってわけじゃないんですけど…
単にネットワークの勉強のためにやってるだけです。
0893デフォルトの名無しさんNGNG
ループ1回ごとに1年sleepすれば?
0894デフォルトの名無しさんNGNG
>890
ループ内でちゃんとsocketをcloseしませう。
0895デフォルトの名無しさんNGNG
system関数で実行したコマンドの実行結果を
配列に格納するにはどうすればいいですか?
0896デフォルトの名無しさんNGNG
>>895
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html
0897デフォルトの名無しさんNGNG
>>895
>コマンドの実行結果

何を指すのかさっぱりわからない。

popen
0898デフォルトの名無しさんNGNG
設問に正しく答えた例:
 system内でリダイレクタつけといて、そのファイルをfopen、fgetsする

おそらく意図としてより正しいだろうと思われる例
 パイプ(_popenとか)を使え
0899895NGNG
なるほど、popenか。
どうもです。

>>897
>何を指すのかさっぱりわからない。

system関数で実行したコマンドの実行結果。
これの何がわからんのか。あんたの方が意味不明。

0900デフォルトの名無しさんNGNG
>>899
実行結果って成功/失敗のフラグのこと?
それとも標準出力に吐かれた内容のこと?
0901デフォルトの名無しさんNGNG
>>899
ただのアホだな。
0902デフォルトの名無しさんNGNG
>>899
>>897さんの最終行見ろや。親心に気付いてやれ。取りあえず謝っとけよ。
0903895NGNG
いや、たぶん>>897さんは日本語が理解できなかったんだと
思うな。「さっぱりわからない」とか言ってるし。
でもなぜかpopenってことは解ってる。
不思議だね。
0904デフォルトの名無しさんNGNG
>>903
あんたの言動が不思議
0905デフォルトの名無しさんNGNG
>>897さんは>>895の理解が間違っていることを教えている。
sysytemを使った場合、>>895の言っていることは複数の回答ができてしまう。
たぶんpopenを使うのが>>895の望みんなんだろう、と>>897さんは言っている。

日本語ができないのは、>>895の方
0906デフォルトの名無しさんNGNG
中身が入ったchar型配列を初期化(宣言時の状態に戻す)するには
どうすればいいですか?
0907デフォルトの名無しさんNGNG
>>906
何もしていなければ、宣言時には初期化されていない。
0908デフォルトの名無しさんNGNG
>>903
アホは淘汰される運命にあるのだよ。
0909デフォルトの名無しさんNGNG
>>906
C言語ですよね。まずそれを書きましょう。
あと、「初期化」って言葉はC言語では用法を定義された言葉なので
(906さんの言うところの「宣言時」に値を設定することです。)
勝手に別の意味で使わないようにしましょう。

で、本題ですが、そんな方法はありません。
別の変数に初期化情報を保存しておいて、コピーするしかありません。
0910デフォルトの名無しさんNGNG
>>906
char a[10], c[10];
memcpy(c, a, 10); // 宣言時の a 値を c に保存する
a[0] = 1; a[1] = 2; ...;
...
memcpy(a, c, 10); // ここで a を戻す

ただこんなプログラム書く奴とは付き合いたくないがな
0911906NGNG
なるほど。
では、char型配列の中身を取り除くにはどうすればいいのですか?
0912デフォルトの名無しさんNGNG
>>911
さっきのもそうだが、まず言葉の定義をすること。
「配列の中身」とは?「取り除く」とは?
0913デフォルトの名無しさんNGNG
>>911
無理。せめて'\0'で埋めるなら分かるが。
0914デフォルトの名無しさんNGNG
>>911
もうお前はあふぉかと。

char *a = malloc(10);
...
free(a);

こんなんどうだw
0915デフォルトの名無しさんNGNG
>>911

char a[256];

...
a[0]=0;

たいていはこれで事足りる。
0916デフォルトの名無しさんNGNG
>>908
そう、お前のようなうんこがな。
0917デフォルトの名無しさんNGNG
>>911
煽る気も起きないくらいのアフォ...珍しいくらいのアフォ...
0918デフォルトの名無しさんNGNG
>>911
宿題なら、問題を書け。まだその方が分かる。その上で分からない部分を示せ。
宿題じゃないなら、おまえプログラミングに向かないからやめた方がいい。
0919デフォルトの名無しさんNGNG
>>917
「煽る」とか、そういうおぞましい視点でこのスレを見てるお前のほうが
阿呆。それにキモイ。
0920デフォルトの名無しさんNGNG
>>919
> 阿呆。それにキモイ。
オマエモナー。

久しぶりに使ってみました。
0921デフォルトの名無しさんNGNG
911=919?
0922名無しさん@EmacsNGNG
何でもいいよ. >>918が一番マトモなこと言ってると思うがどうよ.
0923919NGNG
>>921
違う違う。
なんか煽るためだけに、こんなスレに来てる奴がキモくてね。
まあ、俺も>>918には同意だけど。
0924デフォルトの名無しさんNGNG
<`∀´>痔スレはお前が立てるニダ>>950
0925950NGNG
お断りだ, ハゲ!
0926花男NGNG
すみません。宿題でどうしても分からないのですが手伝っていただけませんでしょうか?
C言語の構造体の問題です。
「1:00から5:00まで4時間分の電車の時刻表がある。この時間帯(1:00〜4:00)
のある時刻を入力し、次の電車の到着時刻は何分後で何時何分か表示せよ

(時刻表)
1時 10分 24分 35分  40分 55分 59分
2時 13分 26分 37分  49分 
3時 7分  15分 45分
4時 30分 51分       」

ちなみに自分はプログラムではCが初めてでそれも数ヶ月はじめたばかりの厨房です。
せめてヒントを下さい。よろしくお願いいたします。

  
0927花男NGNG
つーかこのスレもう誰もいないや・・・
新スレに改めてカキコします。
0928デフォルトの名無しさんNGNG
>>927
まだ次スレ立ってなかったと思ったけどおれがED?
0929デフォルトの名無しさんNGNG
>>928
EDなの?
0930デフォルトの名無しさんNGNG
>>926
これ、構造体の問題なの? 単なる配列の問題じゃなくて?
分に直した時間の配列を持って、入力される時間も同様に分に直して、配列と比較すればよいんでは?
0931デフォルトの名無しさんNGNG
>>926
まずその時刻表をどうやって表現するか決めなくてはなるまい。
表は早い順に並べて配列に入れるとして、時刻の表現が問題だ。

1) 午前0時を基準に分で表現する
2) 構造体を使って時、分を入れる

の二通りが考えられる(これ以外にも秒であらわすとかいろいろあるけどいらんだろ)。
構造体の問題というからには2)で表現するんだろうなあ。
時間の比較、大小判定は1)の方が楽なんだけど。

そいで2)で表現するとする。まず構造体を定義する。

typedef struct {
  int h; // hour
  int m; // minute
} atime; // ださい構造体名だ

次にこの構造体を扱う関数を考える。差を分で返す関数があれば十分だろう。
大小の比較はこの関数が返してきた結果を利用すればいい。

// t - uを計算し、結果を分で返す。1時間=60分という事実を使って計算しろ。
int atimesub(atime t, atime u);

時刻表はこういうふうに初期化しとけ。
atime timetable[] = {
  {1, 10},
  {1, 24},
    :
    :
};


入力された時刻もatime型の構造体に入れて扱えばいいだろう。
以上がヒントだ。あとはこれらを使ってなんとかしてくれ。
Cを始めて数ヶ月だったらなんとかなるだろ。
0932928NGNG
>>929
おれだけ勃てないのかな、と思って。




……逝ってきます
0933デフォルトの名無しさんNGNG
>>932
ttp://www.akahige.co.jp/images/index/illust/boss4.jpg
0934花男=926NGNG
926さん 有難うございます。
すみません。こちらのスレッドは終わっていると思っていたものですから
丁寧にヒントを下さる方がいらっしゃるとは思いませんでした。
それで誠に申し訳無いのですが他のスレでかなり具体的な内容のプログラム
を教えて頂いてしまいました。

ただ931さんに教わったことを参考に良く考えてみます。
この電車がくるまでの時間を出す関数がどのようにしたらいいかさっぱり
分からなかったので頂いたヒントで考えて見ます

0935デフォルトの名無しさんNGNG
やけに丁寧なマルチだ。
0936花男NGNG
すみません。上の書きこみ931さん、有難うございますでした。

マルチのつもりはないぽ。<935
0937デフォルトの名無しさんNGNG
>>936
みんな、口をそろえてこう言うんだ。

「結果的にマルチ」
0938花男NGNG
ウワアア━━━━━(`Д´)━━━━━ ン!!!

そ・・そんなつもりじゃ・・
0939デフォルトの名無しさんNGNG
>>938
まぁ気にするなよ。気にしたって「結果的にマルチ」という事実に変わりないわけだし。
0940デフォルトの名無しさんNGNG
(`・∀・´)ハハハ
0941デフォルトの名無しさんNGNG
どうせ結果は同じだとか開き直ってマルチされまくったらなんかやだな
0942デフォルトの名無しさんNGNG
次スレどこー?
0943デフォルトの名無しさんNGNG
>>942
>>925
仕方ないから>>949が立てて.
0944949(予定)NGNG
断る カチャ
  ;y=ー( ゚д゚)・∵. ターン
  \/| y |)
0945デフォルトの名無しさんNGNG
そして誰も立てなかった…と.
0946デフォルトの名無しさんNGNG
予定って
死んだら949取れないがな
0947デフォルトの名無しさんNGNG
やだよ
0948デフォルトの名無しさんNGNG
じわじわとけん制?
0949949NGNG
やはり断る カチャ
  ;y=ー( ゚д゚)・∵. ターン
  \/| y |)
0950デフォルトの名無しさんNGNG
        はぁ〜
    ∧_∧            ((
   ( ´Д`)            ) )
  /    \          ノ
  | |     | \        ((  ((
  | | /⌒|⌒|ヽ二二つ    )    ) 丿パチパチ
  ヽ二二Ο./      \ (( (   ノノ
  (_| |_| |_       \ ∴λ∵ ←>>943
    .(__)__)       //》||ヾミ\
0951デフォルトの名無しさんNGNG
次スレ http://pc3.2ch.net/test/read.cgi/tech/1029422194/
0952デフォルトの名無しさんNGNG
新スレたってる。誰か知らないがお疲れ様です
0953デフォルトの名無しさんNGNG
かえんほおーしゃだ でんげきだー
ちょーのーりょくをー つかうときー
ばびるーにせいの ひとみはもえーえるー
0954デフォルトの名無しさんNGNG
A
0955デフォルトの名無しさんNGNG
10進BASICを使ったプログラムで、こういうのの作り方を教えてください。
連立1次方程式を解く。
初期値(x=0)を与えて、蜘蛛の巣のようにして連立一次方程式を解いてみる。

1)y=2x+4 y=4x
2)y=x-1 y=-2x+2
3)y=5x+4 y=-3x+1
4)y=-x-2 y=1/2x+3

0956デフォルトの名無しさんNGNG
掃き出し法 で検索すれ
0957nanashiNGNG
 99999以下とは限らない正の整数を次々と読み、データの個数と最小値、
2番めに小さい値および3番目に小さい値を印字するプログラムを作れ。ただし、
データがつきたことをあらわすために、0または負の数を入力することにする。

このアルゴリズムのを書いてください。流れ図でも箇条書きでもよいです。書き
方がさっぱりです。
0958デフォルトの名無しさんNGNG
>>957
> 99999以下とは限らない

これの意味わからないな。
とんでもないでかい数字が入ってくるってこと?
0959デフォルトの名無しさんNGNG
ボクの小学校の夏休みの宿題で
夏休みの思い出っていう題名で作文書いてきてっていわれました。
夏休み終わったのにまだ、できてないからてずだってください。
0960デフォルトの名無しさんNGNG
つーか旧スレageんなぼけ
http://pc3.2ch.net/test/read.cgi/tech/1029422194/
0961nanashiNGNG
>>958
よくわからないけど99999より大きい数をよみこむとエラーがでるのかな?
0962デフォルトの名無しさんNGNG
#include <stdio.h>
#define swap(a,b) {int temp=a;a=b;b=temp;}
int num[3];
int main(void){
int count=0, n;
for(;;){
scanf( "%d", &n );
if( n <= 0 ) break;
count ++;
if( num[ 0 ] == 0 ) num[ 0 ] = n;
else if( num[ 1 ] == 0 ) num[ 1 ] = n;
else if( num[ 2 ] == 0 ) num[ 2 ] = n;
else {
if( num[ 1 ] < num[ 0 ] && num[ 2 ] < num[ 0 ] ) num[ 0 ] = n;
else if( num[ 0 ] < num[ 1 ] && num[ 2 ] < num[ 1 ] ) num[ 1 ] = n;
else if( num[ 0 ] < num[ 2 ] && num[ 1 ] < num[ 2 ] ) num[ 2 ] = n;
}
}
if( count < 3 ) printf( "(゚д゚)\n" );
else {
printf( "データの個数:%d\n", count );
if( num[ 1 ] < num[ 0 ] && num[ 1 ] < num[ 2 ] ) swap( num[ 0 ], num[ 1 ] );
else if( num[ 2 ] < num[ 0 ] && num[ 2 ] < num[ 1 ] ) swap( num[ 0 ], num[ 2 ] );
if( num[ 2 ] < num[ 1 ] ) swap( num[ 1 ], num[ 2 ] );
printf( "最小値:%d\n", num[ 0 ] );
printf( "2番め:%d\n", num[ 1 ] );
printf( "3番目:%d\n", num[ 2 ] );
}
return 0;
}
これでいいのか?
リア厨でもできたぜ?(ワラ
0963デフォルトの名無しさんNGNG
>>957
ひょっとして続きものの問題じゃない
それの一つ前に99999以下に限った問題があったとか

scanfを使うことが期待されているような問題だとすれば
文字列として読み込んで数値に変換するのが問題の肝じゃないかな
0964デフォルトの名無しさんNGNG
>>963
釣れた(ワラワラ
0965デフォルトの名無しさんNGNG
だれか助けて。。。
このcleanStringのメソッドをどう作ればいいのかがまったくわかりません。
http://www.cs.okstate.edu/cs1113/programs/pgm04.html
↑ここに宿題があります。。。
0966デフォルトの名無しさんNGNG
電卓で計算させるとこがうまくいかない・・・
気が向いたら誰か助けてください。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Dentaku extends Applet{
TextField display=new TextField("");
Panel keyPanel=new Panel();
String buttonString="789/456*123-0.=+";

public void init(){
setSize(200, 250);
setFont(new Font("Monospaced", Font.BOLD, 14));
setLayout(new BorderLayout());
add(display, "North");
keyPanel.setLayout(new GridLayout(4, 4));
for(int i=0; i<buttonString.length(); i++){
if(i==14 || i%4==3){
keyPanel.add(new OperatorButton(buttonString.substring(i,i+1)));
}else{
keyPanel.add(new NumberButton(buttonString.substring(i,i+1)));
}
}
add(keyPanel, "Center");
add(new ClearButton(),"South");
}
0967デフォルトの名無しさんNGNG
public void actionPerformed(ActionEvent e){
String number=getLabel();
display.setText(display.getText()+number);
}
}

次の計算させるとこがよくわかりません。
0968966 967 988NGNG
public class OperatorButton extends Button
implements ActionListener{
public OperatorButton(String s){
super(s);
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
String operator=getLabel();
double number=(Double.valueOf(display.getText())).doubleValue();
double result=(Double.valueOf(display.getText())).doubleValue();
if(operator.equals("/")){
}else if(operator.equals("*")){
}else if(operator.equals("*")){
}else if(operator.equals("-")){
}else if(operator.equals("+")){
}else if(operator.equals("=")){
number=result;
display.setText(String.valueOf(result));
}
}
}
}
0969966 967 988NGNG
すみません、抜けてました
public class ClearButton extends Button
implements ActionListener{
public ClearButton(){
super("C");
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
display.setEditable(false);
display.setText("");
}
}

訂正967
public class NumberButton extends Button
implements ActionListener{
public NumberButton(String s){
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
String number=getLabel();
display.setText(display.getText()+number);
}
}
0970デフォルトの名無しさんNGNG
すいません教えてください。お願いします。
3つの配列のうち最小のやつを選びたいのですが、

minimum( Gx[i][j-1] , Gx[i-1][j] , Gx[i-1][j-1] );
としてminimumに渡したいのですが、

minimum' : 1 番目の引数を 'unsigned char' から
'int [][512]' に変換できません。

とエラーが出て上手く渡せません。どうしたらよいでしょうか。

ちなみに

#define X_SIZE 512
unsigned char Gx[X_SIZE][X_SIZE];

unsigned char minimum(unsigned char Gx1[X_SIZE][X_SIZE],
  unsigned char Gx2[X_SIZE][X_SIZE],
unsigned char Gx3[X_SIZE][X_SIZE]){
}

と、しているのですが・・・。
0971デフォルトの名無しさんNGNG
>>970
マルチ氏ね
0972デフォルトの名無しさんNGNG
マルチポストじゃなきゃ答えがもらえたかもしれないのにね。
0973デフォルトの名無しさんNGNG
>>970
呼び出し元から呼び出し先へ何を渡したいの?
0974970NGNG
>973

Gx[i][j-1] , Gx[i-1][j] , Gx[i-1][j-1] です。

for (i=0; i<biWidth; i++){
for (j=0; j<biWidth; j++){
Gx[i][j] = gx[i][j] + minimum( Gx[i][j-1] , Gx[i-1][j] , Gx[i-1][j-1] );
}
}

って感じでminimumに Gx[i][j-1] , Gx[i-1][j] , Gx[i-1][j-1] を
渡したいのですが・・・。
0975bloomNGNG

http://www.agemasukudasai.com/bloom/
0976デフォルトの名無しさんNGNG
>>970
とりあえず関数の引数については置いといて・・・

唐突だけど、関数内でGx[i][j-1]を他の変数に
代入するのってどうやる?
0977970NGNG
>>976
A[i][j]にGx[i][j-1]を代入するとして
どちらの配列もグローバルで定義してから、

for (i=0; i<biWidth; i++){
for (j=0; j<biWidth; j++){

A[i][j] = Gx[i][j-1]

}
}


として代入しています。
但しこの場合 , (i==0 || j == 0)のときは
Gx[i][j]は0としているのですが。

初心者なのでよくわからないのですが。
わかりやすくお教えください。

0978デフォルトの名無しさんNGNG
http://japan.pinkserver.com/under/index.html
勝手に他人のサイトを直リンク!!
「法的根拠はない!!」
「だから直リンしてます」
ハァ?
ネチケットも守れない痛い厨のサイト晒し
0979デフォルトの名無しさんNGNG
pinkserverってアダルトサイトじゃなかったっけ? 宣伝か?
0980デフォルトの名無しさんNGNG
>>979
いや、行ってみたが、なんかマジでイタい厨だったよ。
たぶん、ヲチ祭りだろう。。どこでやってんのか知らんが。
0981デフォルトの名無しさんNGNG
埋め
0982デフォルトの名無しさんNGNG
埋め
0983デフォルトの名無しさんNGNG
埋め
0984デフォルトの名無しさんNGNG
埋め
0985デフォルトの名無しさんNGNG
埋め
0986デフォルトの名無しさんNGNG
埋め
0987デフォルトの名無しさんNGNG
埋め
0988デフォルトの名無しさんNGNG
埋め
0989デフォルトの名無しさんNGNG
埋め
0990デフォルトの名無しさんNGNG
埋め
0991デフォルトの名無しさんNGNG
埋め
0992デフォルトの名無しさんNGNG
埋め
0993デフォルトの名無しさんNGNG
埋め
0994デフォルトの名無しさんNGNG
埋め
0995デフォルトの名無しさんNGNG
埋め
0996デフォルトの名無しさんNGNG
埋め
0997デフォルトの名無しさんNGNG
埋め
0998デフォルトの名無しさんNGNG
埋め
0999デフォルトの名無しさんNGNG
埋め
1000デフォルトの名無しさんNGNG
埋め
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。