C/C++の宿題を片付けます 55代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 54代目
http://pc8.2ch.net/test/read.cgi/tech/1133406672/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
2デフォルトの名無しさん:2005/12/09(金) 20:53:48
>1 乙
3デフォルトの名無しさん:2005/12/09(金) 21:12:30
>>1

4デフォルトの名無しさん:2005/12/09(金) 21:13:38
[1]授業単元:プログラミング
[2]問題文:名前、年齢、住所をメンバーとする構造体をつくり、学籍番号下二桁を引数として値を返す関数をもつプログラムを作成せよ(三名の情報)
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト
[3.3]言語:C
[4]期限:今週中
[5]その他の制限:適当に値など入れて下さい

今度こそよろしくお願いします
5デフォルトの名無しさん:2005/12/09(金) 21:21:02
やらんよ
6前スレ820:2005/12/09(金) 21:55:02
>>4は別人です
流れを見ればわかると思いますが

>>4
何が今度こそだよ
7デフォルトの名無しさん:2005/12/09(金) 22:09:04
[1] 研究
[2]
|0 a 0 0 0 0 0|
|b 0 c 0 0 0 0|
|0 d 0 e 0 0 0|
A=|0 0 f 0 g 0 0| B=A^n
|0 0 0 h 0 i 0|
|0 0 0 0 j 0 k|
|0 0 0 0 0 l 0|

行列Bが与えられているときに、二重対角行列行列Aを推定するプログラムを作る。
問題の意図は、n乗して行列Bとなるような行列Aを推定するという問題です。
推定方法(最小二乗法)のアルゴリズムはあるのですが、どのようにして制約式
B=A^nをC言語で記述すればよいのかわかりません。

[3] 環境
 [3.1] OS: Windows
 [3.2] VC++ 2000
 [3.3] 言語: どちらでも可
[4] 無期限
[5] 特にありません

よろしくお願いします
8デフォルトの名無しさん:2005/12/09(金) 22:19:24
>>7
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 <-------------------- ココ
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
9 ◆hBCBOVKVEc :2005/12/09(金) 23:26:32
[1] 授業単元:プログラム技術
[2] 問題文(含コード&リンク):自由課題で今までの勉強で学んだことを生かしてプログラムを作るというものです。

プログラムは発売日、商品名、ジャンル、値段を入力し閲覧、日付抽出をするスケジュール帖のようなプログラムです。ジャンルはdatファイル
で管理し番号を入力して対応したものを入れるようにしています。またスケジュールのデータも全てdatで管理しています

上記の閲覧、入力はできるのですがtime.hを使いメニュー画面でその日対応するものがあれば
「今日は○○の購入予定日です」と表示させたいのですがうまくいきません。
また日付抽出も西暦月日と完璧に入れないと抽出されないのですがこれは何文字分抽出するか調整すればできるのでしょうか?
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: 12月13日

アップローダーにアップしたのですが誤ってスレッドタイトルが54代目のままになってしまいました。削除キーも入れ忘れ
てしまい自分ではどうしようもなくなってしまいました、本当に申し訳ありません。どうにかできる方がいらっしゃったら本当に
お手数ですが修正をお願いできないでしょうか
10デフォルトの名無しさん:2005/12/09(金) 23:29:36
とりあえず前スレ使いきれよ
11デフォルトの名無しさん:2005/12/09(金) 23:38:39
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): 日本と4時間30分時差のある街の現在の時刻を求めるプログラムを作成せよ。
                   ただし、日本の時刻が進んでいるとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月12日

scanfで時間[hour]、分[min]を入力するところまで完成しました。
(全くの初心者で申し訳ございません)

よろしくお願い致します。
12デフォルトの名無しさん:2005/12/09(金) 23:40:10
>>11
時・分だけ?
13デフォルトの名無しさん:2005/12/09(金) 23:43:17
【狂牛情報】アルツハイマーによる死者が50倍以上に アメリカ

159 - 衆 - 農林水産委員会 - 13号 平成16年04月27日 ○山田委員

エール大学神経病理学科外科部門の研究チームの検討を含め複数の研究で、剖検によりアルツハイマー病
あるいは痴呆症と診断されていた患者の三―一三%が実際はクロイツフェルト・ヤコブ病に罹患していた
ことが判明したとしている。米国では毎年アルツハイマー病と診断される患者が四百万人、痴呆症患者は
数十万人が発生していることから、最も少なく見積もって一万二千人以上のクロイツフェルト・ヤコブ病患者
が検出されず、公式統計に含まれない可能性がある。 注:12万人以上と思われる
                           
実際、アルツハイマー病と診断された死亡患者数は一九七九年には八百五十七例であったものが、
二〇〇〇年には五十倍以上の五万例近くとなった。

159 - 衆 - 農林水産委員会 - 7号 平成16年03月18日 ○松木委員 

記事の中に、アメリカでは、アルツハイマー病あるいは痴呆症と診断される人が年間四百万人いるそう
なんです。複数の研究機関の合同研究によると、このうち三から一三%が実際はヤコブ病であったことが
判明しております。少なく見積もっても十二万人はヤコブ病の公式統計に含まれていない可能性がある。

「アルツハイマーや若年性痴呆の中に変異型ヤコブ病患者が」・・米国牛輸入再開に京大医学部教授衝撃的指摘
http://news18.2ch.net/test/read.cgi/dqnplus/1120196765/

【vCJD】牛海綿状脳症(BSE)と同じ病気“日本人発症しやすい”…厚労省研究班
http://news16.2ch.net/test/read.cgi/scienceplus/1088575874/l50


輸血を拒否した厚生官僚  薬害エイズ年表
http://human5.2ch.net/test/read.cgi/ms/1131724453/10-

14デフォルトの名無しさん:2005/12/09(金) 23:49:11
>>11
#include <stdio.h>
int main(){
  int diffmin = 4*60+30;
  int h,m;
  scanf("%d:%d", &h, &m);
  m += 60 * h + diffmin;
  h = m / 60;
  m %= 60;
  if( h > 23 ) h -= 24;
  printf("%d:%d\n", h, m);
  return 0;
}
1514:2005/12/09(金) 23:50:11
逆だった、日本が進んでいるのか。
16デフォルトの名無しさん:2005/12/09(金) 23:50:54
とりあえず、前スレの問題で片付けてないのは、820、838、912か?
912はもう完成間近か
1714:2005/12/09(金) 23:52:11
訂正版
>>11
#include <stdio.h>
int main(){
  int diffmin = 4*60+30;
  int h,m;
  scanf("%d:%d", &h, &m);
  m += 60 * h - diffmin;
  if( m < 0 ) m += 24*60;
  h = m / 60;
  m %= 60;
  printf("%d:%d\n", h, m);
  return 0;
}
1811:2005/12/10(土) 00:00:27
>>14さん
14さんのコードを書いて動かしてみたら正常に働きました!!
本当にありがとうございます。

今後はこのスレのお世話にならないように精進致します。
19デフォルトの名無しさん:2005/12/10(土) 00:03:03
>>18
君はまたココに来るよ。断言できる。
20デフォルトの名無しさん:2005/12/10(土) 00:04:41
てゆーかtime.hつかわんでよろしいのかそれは
21デフォルトの名無しさん:2005/12/10(土) 00:12:02
scanf がどーとか言ってるレヴェルだからいいんじゃねーの?
2211:2005/12/10(土) 00:16:38
>19さん
そんな殺生な・・・
23デフォルトの名無しさん:2005/12/10(土) 00:54:30
俺が学生の時代にもこういうスレがあったら、
3年間も学校いかず遊んでいなかったのにな・・・
24デフォルトの名無しさん:2005/12/10(土) 01:15:41
おっさん何かあったの?
25デフォルトの名無しさん:2005/12/10(土) 03:35:00
[1] 授業単元:プログラミング
[2] 問題文:テーブル「A1」「A2」「A3」に登録されているデータを昇順、降順
      にソートし昇順の配列で「B」テーブルに、降順の配列で「C」のテーブルに格納する
      A1[11][99][16][18][20][25]
A2[12][14][88][19][21][24]
A3[13][15][17][0][22][23]

出力例
      B[0][11][12][13][.......][25][28][99]
C[99][88][25][..........][13][12][11][0]
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ:BCC
 [3.3] 言語:C
[4] 期限: ([2005年12月12日)

全くの初心者なので、どうしたらいいのかわかりません・・・
何卒よろしく御願いします
26デフォルトの名無しさん:2005/12/10(土) 05:32:28
>>7
B, n が与えられたときに φ=|B - A^n| を最小化する
二重対角行列 A を求めればいいんだよね? | | は二乗ノルムあたりで.

アルゴリズムのオーダーを問わない(A^nを厭わない)なら,
数値微分して最急降下法を使うのが簡単かな.
何度も A^n したくないなら,多分かなり真面目に考えないと駄目っぽい.

どんな文脈でその問題が出てきたのか書いてくれると少しは何かなるかも.
27デフォルトの名無しさん:2005/12/10(土) 05:38:38
>>25
ソート方法は何を習った?
28デフォルトの名無しさん:2005/12/10(土) 05:41:18
>>27
qsortでつ
29デフォルトの名無しさん:2005/12/10(土) 06:19:27
>>25
はい qsort 。
#include <stdio.h>
#include <stdlib.h>
#define N1 6
#define N2 6
#define N3 6
#define M N1+N2+N3
int comp(const void *x, const void *y) { return *(int*)x - *(int*)y; }
int main() {
  int i, j;
  int A1[N1] = {11,99,16,18,20,25};
  int A2[N2] = {12,14,88,19,21,24};
  int A3[N3] = {13,15,17,0,22,23};
  int B[M], C[M];
  j = 0;
  for (i = 0; i < N1; ++i, ++j) B[j] = A1[i];
  for (i = 0; i < N2; ++i, ++j) B[j] = A2[i];
  for (i = 0; i < N3; ++i, ++j) B[j] = A3[i];
  qsort(B, M, sizeof(int), comp);
  for (i = 0; i < M; ++i) C[M-i-1] = B[i];
  printf("B"); for (i = 0; i < M; ++i) printf("[%d]", B[i]); printf("\n");
  printf("C"); for (i = 0; i < M; ++i) printf("[%d]", C[i]); printf("\n");
  return 0;
}
30デフォルトの名無しさん:2005/12/10(土) 11:29:49
>>29さん!!本当にありがとうございます!!
31デフォルトの名無しさん:2005/12/10(土) 12:21:08
前スレを使い切れって
32デフォルトの名無しさん:2005/12/10(土) 13:06:40
>>26
マルコフ性をもつ一年間の推移行列Bが与えられていて、それから一週間(一日)の
推移行列Aを推定したいという問題です。
マルコフ性を仮定すれば、B=A^4が成立しますが、実際の方程式では厳密に解がでな
いので、最小二乗法などを使って推定してAを求めます。
Aは二重対角行列と書きましたが、とりあえずB=A^nを満たす行列であれば構いません。
推定するアルゴリズムは他で実装してあるので、そこへ渡すA^nをどうやって記述すれ
ばよいのかわからないため質問しました。
もしなにかわかりましたらお願いします。
33デフォルトの名無しさん:2005/12/10(土) 14:43:24
>>32
推定するアルゴリズムが何を入力にとって何を出力するのか書いてくれないとどうしようもなさげ
34デフォルトの名無しさん:2005/12/10(土) 14:54:17
A^n を計算するのは力技で何とかなるが、
何に近似させればいいのかよくわかんない。
35デフォルトの名無しさん:2005/12/10(土) 14:55:33
A^n の表現方法が分からないというのなら、
Bの推定アルゴリズムで行列を表現するデータ構造を
使っているはずだから、それに習えばいいんじゃねーの?
36デフォルトの名無しさん:2005/12/10(土) 15:03:05
あと20レスだけど使い切ってやってください。
C/C++の宿題を片付けます 54代目
http://pc8.2ch.net/test/read.cgi/tech/1133406672/
37デフォルトの名無しさん:2005/12/10(土) 17:16:58
>>33
アルゴリズムは、行列Bを入力して(B−A^n)^2が最小となるような行列Aを
出力するアルゴリズムです。

>>34
たしかに、n=3ぐらいなら行列Bの各要素をAの各要素の多項式で書けますが、n=10と
なったときには、膨大な数になりますし、ましてnも含んだ多項式で書くにはどうした
ら良いのかと思いまして。
また、最小二乗法を使って推定するのは、B(1,1)=Aの要素の多項式をして書けたとし
ても、実際にその方程式を解くことはできないので、最小二乗法を用いています。

>>35
推定するアルゴリズムの部分はソフトウェアのソルバーとして組み込まれているので、
どういった構造になっているのかわからないという問題があります。

説明不足ですいません。
38デフォルトの名無しさん:2005/12/10(土) 17:27:12
>>37
何がわからないのがさっぱりわからんぞ。
推定のアルゴリズムが「行列 B を取って |B-A^n|^2 を最小にする A を返すのなら、
それを使うだけじゃないのか?何が不満なんだ?
39デフォルトの名無しさん:2005/12/10(土) 17:31:57
[1] 授業単元: コンピュータ基礎
[2] 問題文:文章を小文字入力し。それを大文字に変換するプログラム
      ただし、小文字以外は変換しない。
      また、連続する複数のスペースは一つに縮める。

      実行例
      ? To be
      TO BE

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月11日20時
[5] その他の制限:
40デフォルトの名無しさん:2005/12/10(土) 17:33:55
>>39
ctypeのtoupperは使っていいのか?
41デフォルトの名無しさん:2005/12/10(土) 17:53:34
>>40
使わないでお願いします
42デフォルトの名無しさん:2005/12/10(土) 18:08:33
>>39
#include<stdio.h>
int main(void){
int c,h=0;
while((c=getchar())!='\n'){
if(c==32){
if(h==0){
printf(" ");
h=1;
}
}
else if('a'<=c&&'z'>=c){
printf("%c",c+'A'-'a');
if(h==1)
h=0;
}
}
return 0;
}
(゚Д゚)ノ ァィ
4342:2005/12/10(土) 18:09:29
ゴメンなさい
大文字は大文字のまま出力ですか
4442:2005/12/10(土) 18:12:19
>>39
#include<stdio.h>
int main(void){
int c,h=0;
while((c=getchar())!='\n'){
if(c==32){
if(h==0){
printf(" ");
h=1;
}
}
else if('a'<=c&&'z'>=c){
printf("%c",c+'A'-'a');
if(h==1)h=0;
}
else if('A'<=c&&'Z'>=c){
printf("%c",c);
if(h==1)h=0;
}
}
return 0;
}
2度目の正直(゚Д゚)ノ ァィ
45デフォルトの名無しさん:2005/12/10(土) 18:14:59
>>39
もう答え出てるけど、俺も考えてみたから貼り。
#include <stdio.h>
#include <string.h>
int main(void)
{
char input[256];
int i;
printf("> ");
fgets(input, sizeof(input), stdin);
for(i = 0; i < strlen(input); i++){
if(('a' <= input[i]) && (input[i] <= 'z')){
printf("%c", input[i] + ('A' - 'a'));
} else if(input[i] == ' ' && input[i + 1] == ' '){
/* nothing to do. */
} else {
printf("%c", input[i]);
}
}
return 0;
}
46デフォルトの名無しさん:2005/12/10(土) 21:23:29
EBCDICには対応
47デフォルトの名無しさん:2005/12/10(土) 21:26:01
なんの話だ
48デフォルトの名無しさん:2005/12/11(日) 00:34:58
文字コードが連続していないって話だろ。
49デフォルトの名無しさん:2005/12/11(日) 00:42:16
toupper使うなって指示がある時点でそこは仕方ないだろ
つーか大文字・小文字の変換法ぐらいは知識として知っておいても損はないが
そういうのを埋めて可搬性を高めるために標準ライブラリがあるのに
この程度の物をわざわざ実装しろって課題を見る度にアフォかと思うな
50デフォルトの名無しさん:2005/12/11(日) 00:53:13
まぁ、Windowsとgccって書いてあるわけだし。
51デフォルトの名無しさん:2005/12/11(日) 02:44:36
前スレの未完成が、、、

>>838
問題文
曜日ごとに設定された時間になったらダイアログを表示し、知らせる
設定した時間をカウントダウンして、ダイアログを表示し、知らせる
上記の2機能を併せ持つタイマーを作れ
環境
OS:XP
コンパイル:Visual C++ 6.0
言語:C++のみ
期限:2005年12月25日
その他の制限は特にありません

>>900
1] 授業単元: 基礎プログラミング演習
[2] 問題文
 オセロゲームの盤面を表示するプログラムを作成せよ。
 人間が二人で対戦し,その盤面の結果を表示するプログラムを作成せよ。
 (コンピュータが相手をするものも追加してもよい)
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 12月13日まで
[5] その他の制限: プログラムは適当な関数を定義して、盤面は2次元配列を用いること。

>>820
わけわからん
52デフォルトの名無しさん:2005/12/11(日) 03:09:01
[1] 授業単元: proguraming
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1252.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: Cのみでお願いします。
[4] 期限: 2005年12月12日までです。
[5] その他の制限: 構造体のところです。ぜんぜん、わからないので
解説つけていただくと折りがたいです。よろしくお願いします。




http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1252.txt
53デフォルトの名無しさん:2005/12/11(日) 05:00:19
54デフォルトの名無しさん:2005/12/11(日) 06:01:24
>>52
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1254.txt
時間計測用のループとか表示のコメントアウトは自分でやってくれ。
考えるところは簡単に言うと、
最初のだと「箱をもらってその中で操作しました。」
2つ目のは「箱のある場所を聞いたので、そこにあった箱で操作しました。後でmain関数の人が何やったか知りません。」
3つ目のは「箱をもらって操作して、返しました。」
んで時間計測の結果については(作ってないんで多分だが)3つ目の方が時間がかかる。理由はメモリをコピーする量の違い。
2はポインタ1個(一般的に4バイト)なのに3だとデータ全体で約2万バイト。
55デフォルトの名無しさん:2005/12/11(日) 10:40:30
>>52
> proguraming
本当にこんなつづり?
56デフォルトの名無しさん:2005/12/11(日) 12:11:28
programming
57デフォルトの名無しさん:2005/12/11(日) 13:50:16
>>54
ありがとうございました。
しかし、自分で、課題1があなた様と同じにできたことがなりより
うれしかったです。
ホントありがとうございました。やっぱ、SEのかたですか?
>>55
【FM−V】\(・。・;lllll)反省
>>56
うぜ
58デフォルトの名無しさん:2005/12/11(日) 15:43:02
>>57
同じってことは、あなたも間違えてるのか。
5954:2005/12/11(日) 16:27:12
>>57
そうそう、意図的に入れた訳じゃないけど(PCの電源落とした後に気づいたんで訂正面倒くさくて)
>>58の言うとおりちょっとバグが潜んでるから気をつけてね。
60デフォルトの名無しさん:2005/12/11(日) 16:59:48
52です。バグがある見たいです。コンパイルが通りません。FINDMEMBER1がおかしいとでました。やっぱだめぽでした。かれこれ三時間戦ってまつ。
61デフォルトの名無しさん:2005/12/11(日) 17:00:19
[1] 授業単元: 基礎プログラミングU
[2] 問題文(含コード&リンク): A.txtファイル内の以下の文章から平均点のみを検出し,1行ずつ
B.txtに書き込むプログラムを作成せよ。
no 1 name AAA avr 78 zenkai 88
no 2 name BBB avr 82 zenkai 80
no 3 name CCC avr 67 zenkai 75
(略)
no 26 name ZZZ avr 77 zenkai 74

学籍番号、名前、平均点、前平均点となっています。
avrとzenkaiを検索してその間の文字をB.txtに書き込んでいこうとおもったのですが、初心者なのですでに行き詰まりです。
どうかお願いします。no 4〜25に関しては名前がアルファベットに、平均点、前平均点はランダムだったので省略しました。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月15日
62デフォルトの名無しさん:2005/12/11(日) 17:09:49
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1255.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Borland BCC
 [3.3] 言語: C
[4] 期限: 2日後
[5] その他の制限: 構造体までならいました


駅名
駅所在都道府県
下り方面次の駅までの距離を
メンバにもつリストをファイルからデータを入力して作成し、始発駅(リストにおける最初)から下り方面にリストをたどって
駅名
駅所在都道府県
始発駅から当該駅までの累計距離
当該駅から次の駅までの距離(当該駅が終着駅の場合は表示しない)
を標準出力に出力するようにソースを完成させよ

お願いします
63デフォルトの名無しさん:2005/12/11(日) 17:11:53
これ何のプログラムか分かる人いませんか?
有名なアルゴリズムらしいのですが。
分かる方どういったアルゴリズムか教えてください!!

int turn;  
int interested[2]; 
void enter_region(int process)
{
  int other;    
other=1-precess; 
  interested[process]=1;   
  turn=process;
  while(turn == process && interested[other] == 1);
}

void leave_region(int process)  
{
  ineterested[process]=0;  
}
64デフォルトの名無しさん:2005/12/11(日) 17:15:59
>>63
マルチスレッド下での busy wait な気がするが、それだけじゃわからん。
6563:2005/12/11(日) 17:21:02
>>64
Petersonのアルゴリズムとか言ってたような・・・
違ってるかも。
66デフォルトの名無しさん:2005/12/11(日) 17:25:15
>>65
そうみたいね。そんな名前がついてるなんて知らなんだ。
6763:2005/12/11(日) 17:34:04
>>66
どういったアルゴリズムか分かりますか?
調べたら、相互排除を保障するとか書いてあったのですが、
どうやって保障してるのか分かりません。
68デフォルトの名無しさん:2005/12/11(日) 17:38:46
69デフォルトの名無しさん:2005/12/11(日) 17:41:26
>>62
想像はつくけどデータファイルの書式は?
7068:2005/12/11(日) 17:45:00
71デフォルトの名無しさん:2005/12/11(日) 17:46:19
>>69
書式とはなんでしょう?アスキーとかバイナリってことですか?
拡張子は.datになってます
72デフォルトの名無しさん:2005/12/11(日) 17:51:28
ごめんね適切な言葉使えてなくてごめんね
データファイルの中身はどういう風になってるの? 例をあげてみて、ってことがいいたかったんだ
7363:2005/12/11(日) 18:01:17
>>68,70
ありがとうございます。
検索したときつづりが間違っていたようで、ヒットしなかったみたいです。
74デフォルトの名無しさん:2005/12/11(日) 18:24:05
すみません、またまた60です。出力までやっといったのですが。なぜか、ゼロが出力されます。なんででしょうか?教えてください、お願いします。
75デフォルトの名無しさん:2005/12/11(日) 18:26:53
76デフォルトの名無しさん:2005/12/11(日) 18:44:31
>>74
現状のソース上げてみたら?
そうすればエスパー以外の人も答えてくれるかもしれないよ
7762:2005/12/11(日) 18:56:21
>>72
TokyoTokyo 6.8
Shinagawa       Tokyo22.0
Shin-YokohamaKanagawa       55.1

こんな感じです
78デフォルトの名無しさん:2005/12/11(日) 19:14:41
>>77
悪い聞いたものの答える時間がなさそうだ
別の人に答えてもらってくれ
79デフォルトの名無しさん:2005/12/11(日) 19:23:21
>>57
お前だけのスレじゃないんだよアホ
80デフォルトの名無しさん:2005/12/11(日) 19:23:48
>>77
どこで駅名が区切れるかわからんので俺には無理。
81デフォルトの名無しさん:2005/12/11(日) 19:37:40
TAB区切りです
貼り付けたら間がなくなってしまいました
すみません
8262:2005/12/11(日) 20:06:18
81は俺じゃないです

Tokyo          Tokyo        6.8
Shinagawa       Tokyo       22.0
Shin-Yokohama    Kanagawa    55.1

こんな感じです
83デフォルトの名無しさん:2005/12/11(日) 20:07:51
>>82
半角スペースが何個かなのか、全角スペースが何個かなのか、Tabなのか、
それとも入り混じってるのか。
84デフォルトの名無しさん:2005/12/11(日) 20:19:10
85デフォルトの名無しさん:2005/12/11(日) 20:20:34
>>84
半角スペースなのか、全角スペースなのか、Tabなのか.
86デフォルトの名無しさん:2005/12/11(日) 20:22:48
>>85
どういういみなんでしょうか?
87デフォルトの名無しさん:2005/12/11(日) 20:25:01
( ゚д゚ )
88デフォルトの名無しさん:2005/12/11(日) 20:42:34
とりあえずそのテキストファイルうpしたら?
89デフォルトの名無しさん:2005/12/11(日) 20:45:38
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1257.txt
UPしたんですが、なんかずれます。
90デフォルトの名無しさん:2005/12/11(日) 20:50:44
>>72
あげます。
よろしくお願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1259.txt
91デフォルトの名無しさん:2005/12/11(日) 20:53:31
TAB区切りだね。パソコン触り始めて何年目か聞いたほうがよかったのかな?
92デフォルトの名無しさん:2005/12/11(日) 21:03:02
>>91

宿題やってあげん俺がいうのは
大きなお世話かもしれないけど、

HT ::= <水平タブ>
PRINTABLE-CHAR ::= <印字可能な US-ASCII>
word ::= +PRINTABLE-CHAR

word *HT word *HT word

みたいな、微妙な TAB 区切りだね。
きっと、スキップ、スキップ、らんらんなコードになるんだろね
93デフォルトの名無しさん:2005/12/11(日) 21:36:30
もしかしてホワイトスペース区切り? /etc/fstab みたいな…
9461:2005/12/11(日) 21:41:22
>>75
コンパイルエラーが出ました。
どうしてでしょうか?
95デフォルトの名無しさん:2005/12/11(日) 21:51:10
>>93
/etc/fstab の SP を HT に置換えたみたいな
厳密にはは 8 文字 TAB でぴったり揃えてるっていうか
>>94
そのコンパイルエラーの内容を貼り付けると
どこかのやさしいおじさんが助けてくれるかも
96デフォルトの名無しさん:2005/12/11(日) 21:55:27
>>94
俺の環境(gcc 4.0.2)だとエラーなんて出なかったぞ
エラー内容とコンパイルオプションを晒してみ
97デフォルトの名無しさん:2005/12/11(日) 22:04:05
>>90
あぷろだの調子が悪いのかコピペもできないのかどっちだ
そもそも90に対してのレスではなかったのだが
98デフォルトの名無しさん:2005/12/11(日) 22:14:48
プログラミングの課題です、もぅ難しいすぎてOTL

ここ天元台スキー場では、スキー・スノボーのシーズンとなり、積雪情報に人々の関心が高まっている。そこで、今日の積雪量(cm)を入力し、下記の滑降条件を基にして、お客様に本日スキー・スノボは可能か、可能でないかを案内するメッセージを出力するプログラム。
・積雪量と滑降条件
  積雪量: 50cm未満: 不可
  積雪量: 50cm以上、100cm未満: 一部可
  積雪量: 100cm以上: 可

99デフォルトの名無しさん:2005/12/11(日) 22:22:30
>>98
>>1をよく読んでくれ

#include <stdio.h>

int main(void)
{
int s;

printf("積雪量を入力しれ:");
scanf("%d", &s);

if(s < 50)printf("不可\n");
else if(s >= 50 && s < 100)printf("一部可\n");
else printf("可\n");

return 0;
}
100デフォルトの名無しさん:2005/12/11(日) 22:35:01
>>99 あ、質問テンプレを使わないのがいけなかったのでしょうか?
次回から気をつけたいと思います。すみませんでしたTT
それから回答ありがとうございます、参考にしてがんばってみます。
101デフォルトの名無しさん:2005/12/11(日) 22:36:52
>>100
次からはメール欄には"sage"と入力しよう
102デフォルトの名無しさん:2005/12/11(日) 22:37:24
>>101
まじで?
103デフォルトの名無しさん:2005/12/11(日) 22:42:56
>>102
質問だからいっか、別に。
104デフォルトの名無しさん:2005/12/11(日) 22:57:08
ちょ、>>98はどこでつまづいたんだ

scanf("%d", &s);
if(s < 50) {printf("不可\n");}
if(s >= 50 && s < 100)printf("一部可\n"); /* if( 50<=s){ if(s<100){ printf("一部可\n");} }  でもOK*/
if(100<=s){ printf("可\n");}

何の指定もないみたいだしこんな形でもいいんじゃないの?
どこがわからなかったのか参考までに聞かせて欲しい
1059 ◆hBCBOVKVEc :2005/12/11(日) 23:53:29
期限が近いのでもしよければお願いします…
106デフォルトの名無しさん:2005/12/11(日) 23:56:51
>>51
前スレ838ねえ、、、
win 32 アプリか?
107デフォルトの名無しさん:2005/12/12(月) 00:42:08
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1259.txt
お願いします。これのどこがいけないんでしょうか?
さきほどあげたのですが、レスがありません。
問題文は>52です。
108デフォルトの名無しさん:2005/12/12(月) 00:52:10
>>107
ソースが汚すぎて見る気なくなった
109デフォルトの名無しさん:2005/12/12(月) 00:52:35
>>98
山形大学ですか?
110デフォルトの名無しさん:2005/12/12(月) 00:53:12
>>107
mindataにはFLT_MAXとか、大きな値を入れておかないと。
できればmaxdataには-FLT_MAXを。float.hをインクルードしておけ。
111mmmu ◆AoRvjgE0uE :2005/12/12(月) 00:56:30
【質問テンプレ】
[1] 授業単元:基礎情報処理
[2] 問題文(含コード&リンク):(1)まずseikei.txtという、0.01から0.99まで一行ずつランダムに並んだテキスト文章を作りなさい。
(2)また、そのseikei.txtのデータをdouble型の配列で読み込み、小さい順に並べ替えてkekka.txtというファイルに書き出しなさい。
ただし、ssort()という名前の関数を作成し、配列をその関数に渡し、関数内で並べ替えて結果をmain()に戻して出力すること。

※この問題文の(2)が分かりません!

[3] 環境
 [3.1] OS: ウインドウズXP
 [3.2] コンパイラ名とバージョン: ボーランド
 [3.3] 言語:C言語(C++では無い)
[4] 期限: 13日の朝までです。
[5] その他の制限: http://const.civil.chuo-u.ac.jp/lab/highway/C_language/08Dec05.pdfの23ページ目を参考にしろということです

プログラムに詳しい方々。今までプログラムが苦手な私も一生懸命やってどうにか切り抜けてきたのですが、この問題は何故かエラーが出て5時間考えても動きませんでした。
誰か私を助けてください!


112デフォルトの名無しさん:2005/12/12(月) 00:57:57
>>107
関数の名前が重複しているから。名前を変えれ。
113デフォルトの名無しさん:2005/12/12(月) 00:59:53
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
スペースまでを消していく問題だと思います。

char a[]=" abc def ghi";

実行結果
abc def ghi
abc def ghi
def ghi
ghi
[3] 環境
 [3.1]OS:Windows
 [3.2]Borland BCC
 [3.3]言語:C
[4] 期限:
[5] その他の制限:標準関数を使わずに消していく。

宜しければお願いします。
114デフォルトの名無しさん:2005/12/12(月) 01:07:33
>>111

っていうかさ、[5] のリンク貼ってるから、君にとって非常にマズイと思うよ。
ここは、こっそり帰ってもう一度どうするか考えたほうがいいと思うよ。
115mmmu ◆AoRvjgE0uE :2005/12/12(月) 01:12:57
もういちど考えて来ます(+д+)
116デフォルトの名無しさん:2005/12/12(月) 01:14:46
こういうのって削除依頼って通るのかな?
117デフォルトの名無しさん:2005/12/12(月) 01:16:47
削除したいなら一応出しておけばいいんじゃね?
118デフォルトの名無しさん:2005/12/12(月) 01:18:56
>>111
ssortって名前から考えるとシェルか単純選択か?
どっちにしてもアドレス出したのはやばすぎるな
119デフォルトの名無しさん:2005/12/12(月) 01:19:01
>>111
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1261.txt

もう解いてしまったから、こいつをどうするかはそちらで決めてくれ。
120デフォルトの名無しさん:2005/12/12(月) 01:20:23
>>116
削除事由に当たらないんじゃね?
121デフォルトの名無しさん:2005/12/12(月) 01:29:09
122デフォルトの名無しさん:2005/12/12(月) 01:34:36
123デフォルトの名無しさん:2005/12/12(月) 01:35:32
アドレス出るとなんでやばいん?
124デフォルトの名無しさん:2005/12/12(月) 01:36:11
教官にメール
125デフォルトの名無しさん:2005/12/12(月) 01:37:15
>>113
ポインタがだめならこちらで。
もしa[]そのものの中身を変更する必要があるのなら言ってくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1264.txt
126デフォルトの名無しさん:2005/12/12(月) 01:38:52
>>82 より >>81 の方が的確な件について
127mmmu ◆AoRvjgE0uE :2005/12/12(月) 01:39:21
>>124
それだけは勘弁です( >Д<;)
128デフォルトの名無しさん:2005/12/12(月) 01:43:40
つか、もうされてるだろ。
129デフォルトの名無しさん:2005/12/12(月) 01:44:53
[1] パソコン実習
[2] 以下の様に記述されたアクセスログのファイルより送信元IPアドレスを抜き出し、アクセス制限をせよ。
12/01 TCP connection attempt to 182.177.162.111 from 192.164.233.222:80
12/01 TCP connection attempt to 131.107.31.91 from 122.134.13.62:80

[3] 環境
 [3.1] Linux
 [3.2] gcc [3.3] C言語
[4]12/18

IPアドレスを記述したファイルからIPを読み込みアクセス制限をかけるというプログラムは出来たのですが、肝心の文章中から送信元のIPアドレスだけを抜き取り
別のファイルに記述するというところが出来ません。fromを検索し、:までの間の文字を切り出せばいいらしいので、処理の流れは>61さん課題と似ていると思います。

ログファイルはlog.txt、アドレスを保管するファイルはip.txtです。
過去ログと似たような課題で申し訳ないのですがどうか宜しくお願いします。
130デフォルトの名無しさん:2005/12/12(月) 01:46:42
>>125
普通strtok使わないか?
131デフォルトの名無しさん:2005/12/12(月) 01:48:10
>>129
右から検索する方が速い
132デフォルトの名無しさん:2005/12/12(月) 01:48:46
>>113
悪いけど、俺もう寝るから、a[]そのものの中身を、strcpy()などを
一切使わず、ポインタも使わず、変更していくプログラムをうpしておくよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1265.txt
133デフォルトの名無しさん:2005/12/12(月) 01:49:13
>>130
標準関数使っちゃだめなんだって。
134デフォルトの名無しさん:2005/12/12(月) 01:50:47
>>132
配列を使ってる時点でポイ(ry
135デフォルトの名無しさん:2005/12/12(月) 01:53:04
>>134
なぬ!a[]の中身をずらせってか。マンドクセ('A`)
136デフォルトの名無しさん:2005/12/12(月) 01:58:15
>>113
>>134
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1266.txt
これで許せ。もう寝る。
ポインタ使いたいよ〜。でも後から「ポインタはだめです。」とか言われそうだし。
137 ◆IQdhGAhozo :2005/12/12(月) 01:58:30
[1] 授業単元:プログラム演習
[2] 問題文:http://www.borujoa.org/upload/source/upload3738.zip
に入っているpdfのday9のほうです。二問あります。
day8を参考にしてやるそうです。
[3] 環境
 [3.1] OS:TURBO UNIX
 [3.2] コンパイラ名とバージョン:
すみませんよくわかんないです。 UNIXの端末エミュレーターでccとやってます
 [3.3] 言語: Cのみです
[4] 期限:12/15(木)18:00です
お金払ってもいいくらい悩んでます。
これができないと留年する可能性があるんで。
138デフォルトの名無しさん:2005/12/12(月) 02:06:00
>>136
puts(&a[n]);
みたいな書き方なら
ポインタ使ったとは言わせない
13998:2005/12/12(月) 02:10:39
>>104 プログラミングがまだまだ初心者でIFを使った作り方がわかりませんでしたTT
もっと勉強したいと思います。
>>109 違いますよ〜OTL
140デフォルトの名無しさん:2005/12/12(月) 02:15:55
>>139
まず入門書を読め。人に聞くのはその後だ。
141デフォルトの名無しさん:2005/12/12(月) 03:18:52
>>137
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1267.txt

二問目の方が複雑そうなので、とりあえず二問目だけやりました。
添え字が怪しいかもしれませんので、正しい結果と比較してください。
一問目は、どうしようかな、簡単なモンテカルロ法なので、他の人にお願いしようかな。
142デフォルトの名無しさん:2005/12/12(月) 03:33:12
>>137
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1268.txt

ついでなので一問目の方もやってみました。NUMBER=100,1000,10000の
各結果は連続して表示するようにしておきました。
143デフォルトの名無しさん:2005/12/12(月) 03:43:46
>>139
さっき見つけたページやるよ。ここで勉強するといい。
ttp://www9.plala.or.jp/sgwr-t/index.html

個人的にc言語の解説系HPで一番分かりやすかったかも。
144デフォルトの名無しさん:2005/12/12(月) 04:21:35
145デフォルトの名無しさん:2005/12/12(月) 09:52:47
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
下記Test1クラスのメンバ関数print()を, メンバ変数dataの値の二倍を表示するように変更して下さい. その際, charとstringに関してだけは値の二倍でなく, 同じものを二つ表示するようにして下さい.
※charやstring以外で演算子に不備がある(*や<<が使えない)ものを考慮する必要はありません.
#include <iostream>
#include <string>
using namespace std;
template<class T>
class Test1 {
T data;
public:
Test1(T x){ data = x; }
virtual ~Test1(){ }
void print() {
cout << data << endl; } };
template<>
class Test1<char>{
char data;
public:
Test1(char x){ data = x; }
virtual ~Test1(){ }
void print() {
cout << '\'' << data << '\'' << endl; } };
int main(){
Test1<int> a(0);
Test1<char> b('a');
a.print();
b.print();
return 0; }
[3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio [3.3] 言語: C++
[4] 期限: 12月19日
146デフォルトの名無しさん:2005/12/12(月) 09:55:15
>>145
読みにくくてすみません。
147デフォルトの名無しさん:2005/12/12(月) 10:03:27
>>145
次からは全角文字を入れないようにしてね。コピペで使えなくなるから。
148デフォルトの名無しさん:2005/12/12(月) 10:14:14
>>145
#include <iostream>
#include <string>
using namespace std;
template<class T> class Test1 {
    T data;
public:
    Test1(T x) {data = x;}
    virtual ~Test1() {}
    void print() {cout << 2 * data << endl;}
};
template<> class Test1<char> {
    char data;
public:
    Test1(char x) {data = x;}
    virtual ~Test1() {}
    void print() {cout << '\'' << data << data << '\'' << endl;}
};
template<> class Test1<string> {
    string data;
public:
    Test1(string x) {data = x;}
    virtual ~Test1() {}
    void print() {cout << '\"' << data << data << '\"' << endl;}
};
int main() {
    Test1<int> a(3);
    Test1<char> b('a');
    Test1<string> c("hoge");
    a.print(); b.print(); c.print();
    return 0;
}
149デフォルトの名無しさん:2005/12/12(月) 11:54:04
>>129
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1271.txt

>>94
当方のgentoo i686-pc-linux-gnu-3.3.6 では動作を確認済み
150デフォルトの名無しさん:2005/12/12(月) 12:04:20
>>143
そこのサイトも若干自己流の解釈に基づいている部分があるから要注意。
配列とポインタの辺りは特に。

おー、こういう嘘もあるね。
>typedef で宣言される新しい型名は一般に大文字を使用する。
151デフォルトの名無しさん:2005/12/12(月) 12:57:47
[1] 授業単元:プログラム実習 
[2] 問題文(含コード&リンク): queueを使い名前の姓名をわける。構造体とcalloc使用。
[3] 環境 
 [3.1] OS: WindowsXP 
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 
 [3.3] 言語: C 
[4] 期限: 12/13
[5] その他の制限: メモリの動的確保までは習っています。あとqueueとstackの理論は一応理解しています。
             どうかよろしくお願いします。必死っす‥


152デフォルトの名無しさん:2005/12/12(月) 13:08:27
>>151

問題文です。見てくださった方どうかお力添えを。

http://up.spawn.jp/file/up7467.txt
153デフォルトの名無しさん:2005/12/12(月) 13:09:54
>>152
403。上げ直せ
154デフォルトの名無しさん:2005/12/12(月) 13:12:05
155デフォルトの名無しさん:2005/12/12(月) 13:14:09
一番上です、何度も申し訳ないです

ttp://up.spawn.jp/index.html
156デフォルトの名無しさん:2005/12/12(月) 13:17:28
>>151
ただのコード晒しても意味わからんし
直リン禁じてる糞アップローダー使うくらいなら
>>1のローダーを使え。
157デフォルトの名無しさん:2005/12/12(月) 13:20:59
>>151
質問:
(1)queueをどう使って
(2)どう与えられた姓名を
(3)どう格納して
(4)どう出力して欲しいのか
158デフォルトの名無しさん:2005/12/12(月) 13:23:41
一応このソースはstackを使ってるんですけど、これをqueueに変えて
姓 名からなる数行のテキストを構造体にセットして、メモリを動的に確保するって問題です。
159デフォルトの名無しさん:2005/12/12(月) 13:26:00
出力は、入力されたテキストが行ごとに出力されれば問題ないです。
160デフォルトの名無しさん:2005/12/12(月) 13:29:14
ぱっと見たところstackじゃなくて単方向listのような気がするのだが。
161デフォルトの名無しさん:2005/12/12(月) 13:31:40
どう見ても線形リストです
162デフォルトの名無しさん:2005/12/12(月) 14:25:45
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
(1)2が1番小さい素数、3が2番目に小さい素数、…、
i番目に小さい素数を返す関数nthprime(i)をつくり、500番目に小さい素数を求めよ。
ただし関数nthprimeは再帰呼び出しを用いて作成すること。
(2)入力された整数n以下の素数の個数を求める関数prcount(n)をつくり、1000以下の素数の個数を求めよ。
ただし関数prcountは再帰呼び出しを用いて作成すること。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: Cでお願いします
[4] 期限: 12月14日まで
[5] その他の制限: 特になし

よろしくお願いします。
163デフォルトの名無しさん:2005/12/12(月) 15:17:12
>>155
ttp://up.spawn.jp/file/up7468.jpg
一番上ってこれか?
ひゅー、すごいコード。
164デフォルトの名無しさん:2005/12/12(月) 15:28:11
>>151

一応ちゃんとしたのはっときます。何方かお願いいたします。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1272.txt
165デフォルトの名無しさん:2005/12/12(月) 15:38:21
すいませんフィボナッチ数を再帰で求めるプログラミングなんですが、
fibonacci()の呼び出し回数を数えるにはどうすればいいんですか??

#include <stdio.h>

int fibonacci(int n);

int main()
{
int i;

for(i=1;i<=40;i++){

printf("fibonacci(%d)=%d\n",i,fibonacci(i));
}
return 0;
}

int fibonacci(int n)
{
if(n==1||n==2)
return 1;

return fibonacci(n-1)+fibonacci(n-2);
}
166デフォルトの名無しさん:2005/12/12(月) 15:47:37
fibonacci(int n, int* count) {
(*count)++;
...
167デフォルトの名無しさん:2005/12/12(月) 16:31:23
>>166
main()で表示させるやり方がわからないです(>_<) 。
168129:2005/12/12(月) 17:38:09
>>149様、どうもありがとうございます。
早速使用してみたのですが、コンパイルはうまくいくのですが、./a.ouを実行すると
「セグンメンテーション違反です」と表示され動作しません。
どうすればいいのでしょうか?
環境はlinuxのFedoraCore3と特にいじっていない状況なのですが・・・
ちなみに>>61さんと条件が似ていたので75さんのプログラムも実行してみたのですがそちらではセグメンテーション違反は起きませんでした。
169149:2005/12/12(月) 17:57:38
>>168
試験用に使ったlog.txtは以下の通り

12/01 TCP connection attempt to 182.177.162.111 from 192.164.233.222:80
12/01 TCP connection attempt to 131.107.31.91 from 122.134.13.62:80

一行の長さが256文字以上のケースがある場合バグる。
フォーマットが異なる行があるとバグる。例えば最終行が改行のみとか空白とか。
170129:2005/12/12(月) 18:22:52
>>169
149様ありがとうございます。確かに改行を消すことで起動しました。
どうやら今回使用するログファイルが最後に必ず改行がはいってしまうのですが、改行が着たら終了という具合にはできないでしょうか?
また、後付で申し訳ないのですが
12/01 TCP connection attempt to 182.177.162.111 from 192.164.233.222 [ports 1921,1923,1925,....]
といったlogが混入されている場合でも送信元IPをぬきだせるようにできないでしょうか?
大変申し訳ないのですが、どうかよろしくお願いします。

171デフォルトの名無しさん:2005/12/12(月) 18:27:30
ただなのに仕様追加変更の多い、クライアントさんだなぁ、おぃ
ま、俺がやるわけじゃないから、別にいいんだけどね
172デフォルトの名無しさん:2005/12/12(月) 18:31:28
仕様変更をしないクライアントなんぞいないしな
173デフォルトの名無しさん:2005/12/12(月) 18:39:34
仕様変更が限度を超える顧客はブラックリスト行きですよ(・∀・)
174dai ◆U6.AsIbFBU :2005/12/12(月) 18:57:24
内容
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

1.forループを用いて10次元のベクトルx、yから、配列を引数として受け取って
P=x^t・y(xの転置行列×y)を求める関数を定義せよ
(見やすい配列と計算結果の出力を含む)
ただし、x(i)=i^2,y(i)=-1/(i+1) (i=1,2...10)とする

2.forループを用いて5行5列の行列を定義し、この関数を因数として受け取って
転置行列を求める関数を定義せよ。(置き換える前・後の見やすい行列の出力を
含む)ただし、行列Aの第i行第j列の要素を a(i,j)=(i-1)*5+j とする。
     
[3] 環境
[3.1] OS:Windows(XP)
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:2005年12月14日
[5] その他の制限: 配列、関数、ポインタまで学習済みです。

2問も質問して申し訳ありません。明日、明後日中に提出しなければならず、
今まで考えつづけていたのですが、全くといっていいほど分かりません。
このレポートを提出しなければ、単位が成立しなくなるので…

どちらか、1問でも結構ですのでどうかどうか、よろしくお願いします。
175デフォルトの名無しさん:2005/12/12(月) 19:31:53
>>174の1
#include <stdio.h>
double keisan(double x[],double y[]);
int main(void){
int i;
double x[10],y[10];
double P;
for(i=1;i<=10;i++){
x[i-1]=i*i;
y[i-1]=-1.0/(i+1);
}
printf("x\n");
for(i=0;i<10;i++){
printf("%lf\n",x[i]);
}
printf("y\n");
for(i=0;i<10;i++){
printf("%lf\n",y[i]);
}
P=keisan(x,y);
printf("P=x^t・y=%lf\n",P);
return 0;
}
double keisan(double x[],double y[]){
double temp=0;
int i;
for(i=0;i<10;i++){
temp+=x[i]*y[i];
}
return temp;
}
176デフォルトの名無しさん:2005/12/12(月) 19:35:22
>>167

printf("fibonacci(%d)=%d\n",i,fibonacci(i));



fprintf(stderr, "fibonacci(%d)=%d\n",i,fibonacci(i));

にかえてふぃぼナッチ。
画面に出んことが問題のようだから、後は君自身が考えるのだ。
177151:2005/12/12(月) 19:36:30
何度もすみません。ちょっとバラバラになってわかりにくいかと思いましたのでまとめます。

[1] 授業単元:プログラム実習  
[2] 問題文(含コード&リンク): queueを使い名前の姓名をわける。構造体とcalloc使用。 
[3] 環境  
 [3.1] OS: WindowsXP  
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1  
 [3.3] 言語: C  
[4] 期限: 12/13 
[5] その他の制限: メモリの動的確保までは習っています。あとqueueとstackの理論は一応理解しています。 
             どうかよろしくお願いします。必死っす‥ 

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1272.txt
上記が問題文になります。明日中の提出なのでかなり焦ってます。どうかお願いします。
178デフォルトの名無しさん:2005/12/12(月) 19:58:08
俺にとって、問題文から分かるのは、

struct _NODE {
char *line;
NODE *next;
char sei[MAXLEN_SEI];
char mei[MAXLEN_MEI];
};

にするってことぐらいなんだよな
179デフォルトの名無しさん:2005/12/12(月) 20:04:41
>>174の2
#include <stdio.h>
void tenchi(double a[][5],double at[][5]);
int main(void){
int i,j;
double a[5][5],at[5][5];
for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
a[i-1][j-1]=(i-1)*5+j;
}
}
tenchi(a,at);
printf("A\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%lf\t",a[i][j]);
}
printf("\n");
}
printf("A^t\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%lf\t",at[i][j]);
}
printf("\n");
}
return 0;
}
180179のつづき:2005/12/12(月) 20:05:07
void tenchi(double a[][5],double at[][5]){
int i,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
at[j][i]=a[i][j];
}
}
}
181デフォルトの名無しさん:2005/12/12(月) 20:06:09
>>170
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1273.txt
一行中で"from "以降[0-9]|[.]にマッチする文字を抽出するようにした。
改行のみの行がまばらにあってもかまわない。だから改行で検索を終了することは無い。
中途半端に"from "以降の整合性が崩れれば意味の無い文字列を抽出することになる。
182デフォルトの名無しさん:2005/12/12(月) 20:48:16
[1] 授業単元:情報処理演習2
[2] 問題文(含コード&リンク):

50 × 50 ドットの 2値画像で、白黒の線を交互にする画像の作成

EX:■■■■■■■■■■■■■■
   □□□□□□□□□□□□□□
   ■■■■■■■■■■■■■■

[3] 環境
 [3.1] OS:Windows2000 (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2005年12月16日まで
[5] その他の制限: 繰り返し文まで習っています
183 ◆IQdhGAhozo :2005/12/12(月) 20:52:56
>>141-142,144様
ほんとにありがとうございます。
何か俺にできるお礼みたいなことってありますか?
184デフォルトの名無しさん:2005/12/12(月) 20:54:56
>>183
エロ画像うp。
は冗談として何もしなくていいと思う。
185デフォルトの名無しさん:2005/12/12(月) 21:06:26
>>178さん

一応構造体の宣言の方はなんとかできそうなんです、
queueにするためのプログラムが解らないのでまた何かわかりましたら教えてください。
貴重な意見サンクスです。
186デフォルトの名無しさん:2005/12/12(月) 21:10:23
>>182
#include <stdio.h>

int main(void)
{
int i,j,gazou[50][50];
for(i=0;i<50;i++){
for(j=0;j<50;j++){
if(i%2==0)
gazou[i][j]=1;
else
gazou[i][j]=0;
}
}
for(i=0;i<50;i++){
for(j=0;j<50;j++){
if(gazou[i][j]==1)
printf("■");
else
printf("□");
}
printf("\n");
}
}
187129:2005/12/12(月) 21:21:57
>>181
本当にありがとうございました!
188デフォルトの名無しさん:2005/12/12(月) 21:26:14
[1] 授業単元:授業の宿題ではないです.趣味です,趣味.

[2] 問題文(含コード&リンク):
下のコードがコンパイルエラーになるのですが,どなたかどこが悪いか指摘してください.
よろしくお願いします.

エラーメッセージは以下の通りです:
(フォルダ名)\main.cpp(14): error C2440: '型キャスト' : 'double (__cdecl *)(int &)' から 'CMyFunctor<T>' に変換できません。
with
[
T=int
]
当方にとっては,きわめて不本意なエラーメッセージです.
コンストラクタの引数のことでエラーが発生しているようですが,仮引数の型はプロトタイプ宣言よりdouble (*)(T&)で,実引数の方も一致させているつもりなんですけど...

不要かもしれませんが,概要を説明すると...
1. プログラマ側が何らかの関数を定義して(ここではmain.cpp内のhoge関数)
2. 関数オブジェクトCMyFunctorクラスのインスタンス化の際に,hoge関数のエントリポイントを引数として与える
3. operator()内で,CMyFunctorクラスのメンバfuncを介してhogeを実行する
ってな感じです.

ソースは以下:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1275.txt

[3] 環境:
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VC++ .NET(Visual Studio .NET 2003)
 [3.3] 言語:C++
[4] 期限:今週中でお願いします(特に期限はありません)
[5] その他の制限:特になし
189デフォルトの名無しさん:2005/12/12(月) 21:43:56
>>186
186さんありがとうございます。
大変、助かりました。
190デフォルトの名無しさん:2005/12/12(月) 21:49:34
>>185
いや、なんつうか、queue として扱えるプログラムに既になってると思うから、
入力の仕様と、出力の仕様を出すと誰かに作ってもらえるかもしれない
と思ったりするんだけどね
191dai ◆U6.AsIbFBU :2005/12/12(月) 21:51:40
>>175,179
ありがとうございました。すごくたすかりました。
192151:2005/12/12(月) 22:03:00
>>190さん
一応ソースの方も、見て考えてレポートしないと駄目なんすよ。
main関数とMakeNode関数がよくわからないんですよ‥
よかったら意見聞かしてください。
193デフォルトの名無しさん:2005/12/12(月) 22:13:07
[1] 授業単元:情報処理演習2
[2] 問題文(含コード&リンク):

50 × 50 ドットで以下のようなだんだん数字が
小さくなるように表示させなさい。

EX:50 50 50 50 50 50 50 50 50・・・・
   49 49 49 49 49 49 49 49 49・・・・
             ・
             ・
             ・
   0  0  0  0  0  0  0 0 0・・・・・

[3] 環境
 [3.1] OS:Windows2000 (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2005年12月16日まで
[5] その他の制限: 繰り返し文まで習っています。
194デフォルトの名無しさん:2005/12/12(月) 22:31:57
for(i=0; i<=50; i++)
for(j=0; j<50; j++)
printf("%2d ",50-i);
195デフォルトの名無しさん:2005/12/12(月) 22:40:39
>>188
オーバーロードが上手く行ってないので、デフォルトのコンストラクタが呼ばれているね
main.cpp の double hoge(int& n) の result_type に const が付いていないのが原因
19662:2005/12/12(月) 22:50:28
お願いします。せっぱ詰まってます
197デフォルトの名無しさん:2005/12/12(月) 22:51:31
>>194
ありがとうございますm(_ _)m
198195:2005/12/12(月) 22:52:01
あぁ、それか CMyFunctor の const メンバの表記方法を間違えてるのか
コンストメンバを宣言する場合正しくはこうね。result_type (* const func)(argument_type& arg)
199デフォルトの名無しさん:2005/12/12(月) 23:06:54
>>183
お礼なんかいらんから、もっと勉強にいそしんでね(はぁと
200デフォルトの名無しさん:2005/12/12(月) 23:08:33
よーし、勉強するぞ!!
201デフォルトの名無しさん:2005/12/12(月) 23:14:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
10行10列の単位行列を求める関数を定義せよ(初期値代入して)
(@)for を用いて
(A)while を用いて
[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限:2005年 12月14日
[5] その他の制限:

どなたか、よろしくお願いします。
202 ◆bPFZPdrjnM :2005/12/12(月) 23:15:07
[1] 授業単元:プログラム技術
[2] 問題文(含コード&リンク):
datファイル、sc.datに入っているスケジュールデータを全閲覧、日付抽出をして閲覧するプログラムを作りなさい。
日付は西暦4桁月2桁日にち2桁になっています。
日付抽出は8桁の完全指定、西暦を指定して当てはまる年数を抽出、西暦と月を入力して当てはまる項目を抽出
のように3つのモードをつくること

datファイルを見ると解りますが項目は西暦、内容(半角英数20文字)になっています。11行目からは1〜10行目のコピーが
4つ並んでいます

[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: 12月15日

datファイル:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1278.txt
datでアップできないようなので申し訳ありませんがtxtで上げました。どうかお願いします
203190:2005/12/12(月) 23:23:01
>>192
int main(void) {
char buffer[kBufferSize];
NODE *head = NULL;

/* ひたすら、待ち行列を作る */
while (fgets(buffer, kBufferSize, stdin) != NULL) {
NODE *pivot;
/* 入力文字列の正規化 */
RemoveReturnCode(buffer);
/* 新しいノードの生成 */
pivot = MakeNode(buffer);
if (pivot == NULL) /* 生成失敗 */ return FreeNodeList(head);
/* 新しいノードを最後尾に付ける */
pivot->next = head;
/* 最後尾を新しいノードにする */
head = pivot;
}
/* 待ち行列を先頭から順番に印字 */
PrintNodeList(head);
/* 待ち行列の順序を逆にする */
ReverseNodeList(&head);
/* 待ち行列を先頭から順番に印字 */
PrintNodeList(head);
/* ノードのメモリを全て解放 */
FreeNodeList(head);

return 0;
}
204190:2005/12/12(月) 23:23:33
/* 失敗 : NULL、成功 : 動的に確保されたノードの構造体へのポインタ */
NODE *MakeNode(char *str) {
NODE *node;

if (str == NULL) return NULL;
/* データを格納するメモリ領域を動的に確保 */
node = (NODE*)calloc(1, sizeof(NODE));

if (node != NULL) /* メモリ確保に成功 */ {
/* 文字列を格納するメモリ領域を動的に確保 */
char *p = (char*)calloc(strlen(str)+1, sizeof(char));
if (p != NULL)/* メモリ確保に成功 */ {
/* 入力から受け取った文字列をメモリにコピー */
node->line = strcpy(p, str);
/* 最後尾の目印に NULL を入れとく */
node->next = NULL;
}
else /* メモリ確保に失敗 */ {
/* free() ここではいらんはずだと思う。 */
free(node);
node = NULL; // returnNULL;
}
}

return node;
}

で満足できんか ?
205デフォルトの名無しさん:2005/12/12(月) 23:30:02
>>201
int i,j;
int det_for(int dat[10][]){
for(i=0; i<10; i++)for(j=0; j<10; j++)dat[i][j]=0;
for(i=0; i<10; i++)dat[i][i]=1;
return 1;
}
int det_whl(int dat[10][]){
i=0;
while(i<10){
j=0;
while(j<10){
dat[i][j]=0;
if(i==j)dat[i][j]=1;
j++;
}
i++;
}
return 1;
}
main(){
int data1[10][10], data2[10][10];
det_for(data1[10][]);
for(i=0; i<10; i++)for(j=0; j<10; j++)
printf("%d ", data1[i][j]);
det_whl(data2[10][]);
for(i=0; i<10; i++)for(j=0; j<10; j++)
printf("%d ", data2[i][j]);
return 0;
}
206デフォルトの名無しさん:2005/12/12(月) 23:30:37
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
C言語でモンテカルロ法を使って円周率の近似値の計算(10000回繰り返す)、
また、同じくC言語で台形公式を使って円周率の近似値の計算(分割数は1000、sqrt使用)
を完成させなさい。
[3] 環境
[3.1] OS:Windows(XP)
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:明後日の12月14日

実質2題聞く事になってしまうのですが、これができないと単位落とされてしまうので
かなり切羽つまっています・・
1問だけでもなんとかよろしくお願いします。
207188:2005/12/12(月) 23:35:55
>>195
ありがd
確かにconstの使い方が間違っていた.

ということで
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1279.txt
のようにした.

これでもいいんだけど,できればmain.cppのhoge関数を無名名前空間に押し込めたい.
しかし,そうするとリンカエラー:
MyFunctor error LNK2001: 外部シンボル ""double __cdecl `anonymous namespace'::hoge(int &)" (?hoge@?A0x8ecf564e@@YANAAH@Z)" は未解決です。
で怒られる.
なして?だれかおせーて.
208188:2005/12/12(月) 23:39:24
あ,定義もすべてnamespaceの中に書かなくっちゃ!!
すまそ.
自己解決!
209190:2005/12/12(月) 23:42:35
>>192
>>203
>>204
ごめん、よくみるとこのソース、スタックだね。

> /* 新しいノードを最後尾に付ける */
> pivot->next = head;
> /* 最後尾を新しいノードにする */
> head = pivot;

last->next = pivot;
last = pivot;

みたいなことすると、que になると思う。
210デフォルトの名無しさん:2005/12/12(月) 23:50:29
printf("1:yyymmdd 2:yyyy 3:yyyymm\n");
printf("chose input type(1,2,3): ");scanf("%d",&sw);

switch(sw){
case 1:printf("input date (yyyymmdd) :");
scanf("%4d%2d%2d",&y,&m,&d);
str[0]=itoa(y);str[4]=itoa(m);str[6]=itoa(d);
len=8;
break;
case 2:printf("input date (yyyy) :");
scanf("%4d",&y);
str[0]=itoa(y);
len=4;
break;
case 3:printf("input date (yyyymm) :");
scanf("%4d%2d",&y,&m);
str[0]=itoa(y);str[4]=itoa(m);
len=6;
}
while(〜〜!=EOF)
if( strncmp(str,ファイルからとってきた文字列(行頭8文字),len) )
puts(getline);

こんな感じか?ってか大雑把杉?w
211デフォルトの名無しさん:2005/12/12(月) 23:50:37
scanf関数を用い、数字を10回入力してその最大値を出力するプログラムを今作っているのですが、
文字を入力した場合に数字を入力させなおす方法がわかりません。
以下に今できているソースを書きます。

#include <stdio.h>
main()
{
int i = 0;
int no;
int max = 0;

puts("数字を10回入力してください。\n");

for(i = 0; i < 10; i++){
printf("数字%d:",i + 1);
scanf("%d",&no);

if(???){
printf("数字を入力してください。\n");
printf("数字%d:",i + 1);
scanf("%d",&no);
}

max = (max > no) ? max : no;
}

printf("あなたが入力した数字の最大値は%dです。\n",max);
getchar();
}

if(???)の???中にnoが文字の場合を判別するものを入れればいいと思うのですが、
それがわからないので教えていただけないでしょうか。
212デフォルトの名無しさん:2005/12/12(月) 23:53:22
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
8 3 9 5 4 2 1 6
これをクイックソート法のプログラムで完成せよ
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 2005年12月14日
[5] その他の制限:
よろしくおねがいします
213デフォルトの名無しさん:2005/12/12(月) 23:55:39
[1] 授業単元:アセンブラ
[2] 問題文(含コード&リンク):
与えられた英文に対して,各長さの単語の発生頻度のヒストグラムを作成するプロ
グラムを作成せよ。
文字列はchar[]で読み込み、ポインタを使うこと。
但し,次の仮定をしてよい.
・対象とする英文は1個の文字列で,長さは150 字以下とする.
・英文は,アルファベットと空白のみを含み,最後にピリオドがある.
・英文に含まれる単語の長さは,10 以下.従って,ヒストグラムは10 行となる.
・単語間の空白は複数かもしれず,最後のピリオドの前に空白があるかもしれない.

[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2005年1月21日
[5] その他の制限:

アセンブラに書き換えるまでが課題です。そのまえのcがうまくかけませんorz
214デフォルトの名無しさん:2005/12/12(月) 23:56:57
何でこんなに宿題多いんだ?
215デフォルトの名無しさん:2005/12/13(火) 00:00:31
年末だからじゃね?
216デフォルトの名無しさん:2005/12/13(火) 00:26:16
>>62
>>192
>>196
>>203
>>204

満足してもらったものして俺は寝るよ
おやすみん
217デフォルトの名無しさん:2005/12/13(火) 00:34:13
>>203
>>204
>>209
の方々の貴重な意見大変thanksです


21861:2005/12/13(火) 00:41:35
>>75様ありがとうございました。
プログラム正常に動作できました。
最後に質問なんですが、プログラムのはじめにある
getAvr()とは固有の関数なのでしょうか?それとも文章中にあるavrが関係しているのでしょうか?
検索したところあまりhitしなかったもので・・よければ教えていただけませんか?

219デフォルトの名無しさん:2005/12/13(火) 00:52:09
>>151
よう山の上の教育大生
220デフォルトの名無しさん:2005/12/13(火) 00:54:48
>>218
ただのプロトタイプ(前方宣言)。で、ファイル中頃にあるgetAvrがその定義
221デフォルトの名無しさん:2005/12/13(火) 01:12:10
>>212
#include<stdio.h>
#include<stdlib.h>
#define kArraySize 8
int int_cmp(int *a,int *b) ;

int main(void)
{
int i, array[kArraySize]={8, 3, 9, 5, 4, 2, 1, 6};
qsort( array ,kArraySize,sizeof(int),(int (*)(const void*,const void*))int_cmp);
for(i=0; i<kArraySize;i++ ) printf("%d\n",array[i]);
return 0;
}
int int_cmp(int *a,int *b) { return *a-*b;}
222デフォルトの名無しさん:2005/12/13(火) 01:35:47
>>206
んじゃ1だけ。精度悪いけど宿題ならこんなもんでしょ。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000
int main(void) {
    double x, y;
    int count_in = 0, count_out = 0, i;
    srand((unsigned int)time(NULL));
    for (i = 0; i < N; i++) {
        x = (double)rand() / RAND_MAX; y = (double)rand() / RAND_MAX;
        if (x * x + y * y < 1) count_in++;
        else count_out++;
    }
    printf("PI nearly equals %f", 4. * count_in / N);
}
223デフォルトの名無しさん:2005/12/13(火) 01:43:55
>>206
やっぱり2もしてみた。かなり効率悪いけど、教育向け。
#include <math.h>
#include <stdio.h>
#define N 1000
int main(void) {
    int i;
    double sum = 0;
    for (i = 0; i < N; i++) {
        sum += (sqrt(1 - (double)i * i / N / N) + sqrt(1 - (double)(i + 1) * (i + 1) / N / N)) * (1. / N) / 2;
    }
    printf("PI nearly equals %f", 4 * sum);
}
224デフォルトの名無しさん:2005/12/13(火) 02:02:40
>>211
#include <stdio.h>
#include <ctype.h>

int main(void)
{
int i = 0,max=0,no[10];

printf("数字を10回入力してください。\n");

while(1){
printf("数字%d:",i + 1);
if(scanf("%d",&no[i])!=1){
printf("入力が間違っています。\n");
fflush(stdin);
continue;
}
if(i>8)
break;
i++;
}
for(i=0;i<10;i++){
if(no[i]>max)
max=no[i];
}

printf("あなたが入力した数字の最大値は%dです。\n",max);

return 0;
}
225デフォルトの名無しさん:2005/12/13(火) 02:12:12
>>224
> fflush(stdin);
これだめ。入力ストリームにfflushは結果がundefinedだから。
226デフォルトの名無しさん:2005/12/13(火) 02:26:31
正数1〜10の合計をwhile文の反復処理により求め、
数式の形で表示するプログラムを作成しなさい。
また、同じ内容をfor文を用いて表現しなさい。
227デフォルトの名無しさん:2005/12/13(火) 02:29:12
>>222-223さん
ありがとうございます、本当に助かりました!
これで単位は落とさずに済みそうです。
228デフォルトの名無しさん:2005/12/13(火) 02:31:45
229デフォルトの名無しさん:2005/12/13(火) 02:37:22
[1] 授業単元:計算機科学
[2] 問題文: 正数1〜10の合計をwhile文の反復処理により求め、
数式の形で表示するプログラムを作成しなさい。
また、同じ内容をfor文を用いて表現しなさい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C++
[4] 期限:2005年12月13日
[5] その他の制限: よろしくお願いします。
230デフォルトの名無しさん:2005/12/13(火) 02:40:11
さてCで書いていたのが無駄になってしまったわけだが
231デフォルトの名無しさん:2005/12/13(火) 02:42:45
すいません
232デフォルトの名無しさん:2005/12/13(火) 02:49:18
>>229
これ、ほんとにできないの?まずくない?
233デフォルトの名無しさん:2005/12/13(火) 02:54:29
授業ぜんぜん出てなくて…
どうかお願いします
234デフォルトの名無しさん:2005/12/13(火) 02:58:26
授業に出ないんだったら、入門書の一冊でも読んでおけよ
235デフォルトの名無しさん:2005/12/13(火) 02:59:30
ごめんなさい
236デフォルトの名無しさん:2005/12/13(火) 03:07:51
どうかお願いします
237デフォルトの名無しさん:2005/12/13(火) 03:13:26
>>229
こんなんでどう?

/* while文版 */
#include <stdio.h>

int main(void)
{
int i, sum;

sum = 0;
i = 1;
while (i <= 10) {
sum += i; i++;
}

printf("1+2+3+4+5+6+7+8+9+10=%d\n", sum);

return 0;
}
238デフォルトの名無しさん:2005/12/13(火) 03:13:47
/* for文版 */
#include <stdio.h>

int main(void)
{
int i, sum;

sum = 0;
for (i = 1; i <= 10; i++) {
sum += i;
}

printf("1+2+3+4+5+6+7+8+9+10=%d\n", sum);

return 0;
}
239デフォルトの名無しさん:2005/12/13(火) 03:15:46
C++って言ってるから、cout のほうがよくね?
まぁ、たいした違いじゃないんだけどな。
240デフォルトの名無しさん:2005/12/13(火) 03:24:39
>>237=238
ありがとうございます。
でもできればcoutでお願いします。
お願いしている立場でこんなこと言って申し訳ないです。
241デフォルトの名無しさん:2005/12/13(火) 03:38:03
>>240
贅沢なやつだwそれくらい自分で考えろ!
242デフォルトの名無しさん:2005/12/13(火) 03:40:40
ごめんなさい。
本当にわからない…
243デフォルトの名無しさん:2005/12/13(火) 03:41:00
後だし糞ウザス
244237:2005/12/13(火) 03:41:58
>>240
printf("1+2+3+4+5+6+7+8+9+10=%d\n", sum);

cout << "1+2+3+4+5+6+7+8+9+10=" << sum << endl;
になおしてね。

実は、オレはCからC++に入ったんでcoutは使ったことがない。これでいいか?
245デフォルトの名無しさん:2005/12/13(火) 03:43:34
ありがとうございます!!
本当にありがとう
246デフォルトの名無しさん:2005/12/13(火) 04:02:54
[1] 授業単元:プログラム基礎
[2] 問題文: キーボードから整数を入力しー2で割り切れるときは「偶数」、
割り切れないときは「奇数」と表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: わからないです。VB?
 [3.3] 言語:C++
[4] 期限:2005年12月14日 12時まで
[5] その他の制限:特になし
247デフォルトの名無しさん:2005/12/13(火) 04:29:24
>[3.2] コンパイラ名とバージョン: わからないです。VB?

ワロタ
何もわからないということが伝わってくる。
笑わしてもらったお礼に

#include <iostream>

int main()
{
int n ;
std::cin >> n ;
if ( n%2 ) std::cout << "奇数" << std::endl ;
else std::cout << "偶数" << std::endl ;

return 0 ;
}
248デフォルトの名無しさん:2005/12/13(火) 04:31:06
#include <stdio.h>

int main(void)
{
    return puts(getchar() & 1 ? "odd" : "even");
}
249デフォルトの名無しさん:2005/12/13(火) 04:55:56
少しわからないことがあるので教えていただきたいのですが、
printf("数値をいれてください:");のような文の、「:」について
なのですがこのスレで教えてもらったものをコピーで使うと
実行したときに改行されるのですが、自分で「:」を入力すると
「:」が出力されるだけで改行されません、どなたかわかる方
いたらよろしくお願いします。
250デフォルトの名無しさん:2005/12/13(火) 04:59:39
scanf が原因
251デフォルトの名無しさん:2005/12/13(火) 09:35:15
213です
期限間違ってました。
05年12月14日が期限です
どうぞよろしくお願いいたします
252デフォルトの名無しさん:2005/12/13(火) 09:55:05
できたよ
253デフォルトの名無しさん:2005/12/13(火) 13:08:53
[1] 授業単元:情報管理論のゼミで出された課題です。
[2] 問題文:テンプレートマッチング(目のテンプレート)を用いた
      顔認証のためのプログラムを作らなくてはなりません。
      最終的に原画像がどのテンプレートにマッチしたのか
      ファイル名を表示せよ、という課題でした。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 今週中です。
[5] その他の制限:特にありません。

完全にお手上げ状態です。ヒントになるような事でも助かりますので
どなたかよろしくお願いします。 
254デフォルトの名無しさん:2005/12/13(火) 13:17:57
とりあえず目のテンプレートをかこうや。
話はそれからだ
255デフォルトの名無しさん:2005/12/13(火) 13:18:40

むかーし、むかし、エッジ抽出についてお勉強した気がする。
(お魚の雄雌の判断ぐらいには使えたみたい)
役に立つかどうか分かんないけど、

http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLC,GGLC:1970-01,GGLC:ja&q=%E3%82%A8%E3%83%83%E3%82%B8%E6%8A%BD%E5%87%BA

で徘徊してみて使えるかどうか、自分で判断するのがいいかもねん。
256デフォルトの名無しさん:2005/12/13(火) 13:20:17
画像認識は門外漢だが、アルゴリズムがあるならその通りコーディングするだけでいいんじゃねーの?
257デフォルトの名無しさん:2005/12/13(火) 13:25:20
>>213
これをどうアセンブリ言語に書き換えるかはシラネ。

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
char buf[256], input[256], *p;
int hist[10] = {0}, len, i, j;

fgets(input, sizeof(input), stdin);
for(p = input;;) {
sscanf(p, "%[ ,.\n]", buf);
p += strlen(buf);

if(sscanf(p, "%[^ ,.\n]", buf) != 1) {break;}
len = strlen(buf);
hist[len-1]++;
p += len;
}

for(i = 0; i < 10; i++) {
printf("%d:", i+1);
for(j = 0; j < hist[i]; j++) {
putchar('*');
}
putchar('\n');
}
return 0;
}
258たべちゃう:2005/12/13(火) 13:34:12
[1] 授業単元:情報処理
[2] 問題文:成績表の点数の降順(高いものà低いものの順)に並べ替えよ。
  7桁整数をゼロ詰で出力する書式は“%07d”である。
[3] 環境
OS:UNIX
言語:C
[4] 期限:17年12月15日
[5] その他の制限:配列の利用、成績表は
  学籍番号(7桁のゼロ詰整数)(1桁空白)(3桁整数(点数))(改行)
  という形で30人分書かれており、これをリダイレクトして実行する。

おねがいします。
259253:2005/12/13(火) 13:53:48
>>254
>>255
>>256
ありがとうございます。
目のテンプレートや原画像の件ですが
2値化等の前処理はPhotoshopで良いとの事でした。
260デフォルトの名無しさん:2005/12/13(火) 13:59:02
>>258
#include <stdio.h>
typedef struct seiseki_tag {
int gakuseki;
int ten;
} seiseki;
int main(void)
{
char buf[64];
int i, j, gn, sc, num = 0;
seiseki rep[30];
while (fgets(buf, 256, stdin/*fp*/) != NULL) {
sscanf(buf, "%d %d", &gn, &sc);
rep[num].gakuseki = gn;
rep[num].ten = sc;
num++;
}
for(i = 0; i < num; i++){
for(j = i + 1; j < num; j++){
if(rep[i].ten < rep[j].ten){
seiseki temp = rep[i];
rep[i] = rep[j];
rep[j] = temp;
}
}
}
for(i = 0; i < num; i++){
printf("%07d %d\n", rep[i].gakuseki, rep[i].ten);
}
return 0;
}
261デフォルトの名無しさん:2005/12/13(火) 14:01:15
コメントを消し忘れた。"/*fp*/"は無視していいよ。
262たべちゃう:2005/12/13(火) 14:18:39
>>261
ありがとうございました。助かりました。
>>261
僕も参考になりました
264& ◆LMRaV4nJQQ :2005/12/13(火) 16:07:12
[1] 授業単元:情報処理
[2] 問題文:e^xとそのテーラー展開(6次まで)をxの定義域[0,1]で
0.05刻みで表示させ比較せよ。
[3] 環境
OS:UNIX
言語:C
[4] 期限:17年12月15日
[5] その他の制限:配列の利用(テーラー展開の係数)

おねがいします。
265デフォルトの名無しさん:2005/12/13(火) 16:09:48
というよりマクローリン展開です。
266デフォルトの名無しさん:2005/12/13(火) 16:40:14
>>264
#include <math.h>
/* exp(x) = sum_k x^k / k! */
double myexp(double x) {
  int i;
  static double a[7] = {1.0};
  static int k = 1;
  double y;
  for (; k < 7; ++k) a[k] = a[k-1] / k;
  y = 0;
  for (i = 0; i < 7; ++i) y += a[i] * pow(x,i);
  return y;
}
int main() {
  double x;
  for (x = 0; x <= 1.0; x += 0.05) 
    printf("%lf %lf %lf\n", x, exp(x), myexp(x));
}
267デフォルトの名無しさん:2005/12/13(火) 16:51:11
ありがとうございます。
参考にさせていただきました。
268デフォルトの名無しさん:2005/12/13(火) 19:31:30

【質問テンプレ】
[1] 授業単元:情報処理U
[2] 問題文(含コード&リンク): オセロを自動実行させるプログラムを作れ。
一手ごとに表示を止め、石を置いた場所の情報を表示するようにせよ。
なお、手は相手の石を最もひっくり返せるような手を選ばせるようにすること。
複数の手がある場合には任意の手でよい。
[3] 環境
 [3.1] OS:Windows
 [3.2] VC 6.0
 [3.3] 言語: C
[4] 期限:今年中

お願いします。
269268 ◆1QORIEwSUM :2005/12/13(火) 19:32:01
とり忘れてました
270デフォルトの名無しさん:2005/12/13(火) 19:32:25
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
フィボナッチ級数&黄金比の20番目の要素までを計算せよ。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2005年12月14日
[5] その他の制限:(float)またはfibを使用する。

黄金比の部分が全然分からないです・・明日が期限なのに・・
ちなみに(float)を使用した時の今できてる部分です。
これだと黄金比の計算が変になってしまいます・・
よろしくお願いします。

/* fibonacci & gold */

#include<stdio.h>
   main(){

   int i,x=1,y=1,z;
   for(i=1;i<20;i++)

 {
   printf("F(%d)=%d,G(%d)=%d\n",i,x,i,(float) y/x);

   z=x+y;x=y;y=z;
 }

}
271デフォルトの名無しさん:2005/12/13(火) 19:39:41
>>265
俺的にマクローリン展開は
テーラー展開の特定の条件の元での展開なような気がするんだよな
つうことで、マクローリン展開はテーラー展開の一種の感じがする
満足してもらえてるようだし、宿題も解決してるようだし、まぁ、どうでもいいよな
272デフォルトの名無しさん:2005/12/13(火) 19:44:48
>>270
計算は変になっちゃいません。表示が変なだけです。
#include <stdio.h>

int main(void)
{
  float x = 1, y = 0;
  int   i;
  for (i = 1; i <= 20; i++) {
    printf("F(%d)=%g,G(%d)=%f\n", i, x, i, y / x);

    x = x + y;
    y = x - y;
  }

  return 0;
}
273デフォルトの名無しさん:2005/12/13(火) 19:46:42
>>270
   printf("F(%d)=%d,G(%d)=%g\n",i,x,i,(double) y/x);
274デフォルトの名無しさん:2005/12/13(火) 19:51:55
>>268
質問
(1)   GUI?CUI?そもそも盤面を表示する必要がない(手のみ)?
(2-1) GUIなら何を使うように指示されている?ex)Win32APIなど
(2-2) CUIならどう表示したらいい?全角の●○□とか、表示に使う
..   文字の指定をよろしく。
(3)   自動実行というのは両方をコンピュータが思考するようにせよということ?
275268 ◆1QORIEwSUM :2005/12/13(火) 20:19:49
>>274
コンソールで両方ともCOMが思考です。
276デフォルトの名無しさん:2005/12/13(火) 20:27:26
>>275
質問(1)について手のみの表示?盤面のみの表示?
追加質問:「一手ごとに表示を止め」とは、何らかの入力を求めてから
次の表示をせよということ?
277デフォルトの名無しさん:2005/12/13(火) 20:28:14
>>275
宿題頼むんだからちゃんと質問に答えなさいよ。
278268 ◆1QORIEwSUM :2005/12/13(火) 20:31:42
>>276
>>277
失礼しました。
エンターキー等で、一手ずつ手を進めていく感じです。
279デフォルトの名無しさん:2005/12/13(火) 20:40:14
>>277
277 は 276 じゃないと思うけど
そんなに押し付けがましい、いいかたせんでもいい気がするんだけどね
ずっと、PC の前に張り付いてるわけでもないと思うし
宿題やりたい人が勝手にやってるんだしさ
280270:2005/12/13(火) 20:45:54
>>272>>273

ありがとうございます。
おかげで問題を解くことができました。
281デフォルトの名無しさん:2005/12/13(火) 20:47:09
せめて、質問されたことをちゃんと読んでもらさず回答するくらいは当然だよな。
つーか、中途半端に答えるって、馬鹿にしてるんちゃう?
282デフォルトの名無しさん:2005/12/13(火) 20:49:23
[1] 授業単元:プログラム円周
[2] 問題文(含コード&リンク):
コマンドの引数として与えられた文字列を数値に変換し、整数部と少数部に
分けて出力するプログラムを作成せよ。引数が無い場合のエラー処理も行うこと。
*実行例*
$ ./a.out 123.45 67.89
123.45 = 123 + 0.450000
67.89 = 67 + 0.890000
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2005年12月15日
よろしくお願いします
283デフォルトの名無しさん:2005/12/13(火) 20:51:55
>>282
modf()
284デフォルトの名無しさん:2005/12/13(火) 20:59:55
>>281
> せめて、質問されたことをちゃんと読んでもらさず回答するくらいは当然だよな。
おっしゃるとおりだと思います
> つーか、中途半端に答えるって、馬鹿にしてるんちゃう?
と思われるんだったら、ほっときゃいいと思います
285デフォルトの名無しさん:2005/12/13(火) 21:10:34
286デフォルトの名無しさん:2005/12/13(火) 21:21:17
[1]授業単元:プログラミング
[2]問題文:キーボードから入力した検索対象の文字列の中に、キーボードから入力した特定
の文字が含まれるかどうか調べるプログラム
a.out
検索対象文字列 ABCD enter
検索文字 A
文字列にAはあります。
a.out
検索対象文字列 ABCD enter
検索文字 F
文字列にFはありません。
[3]環境
[3.1]OS:Linux
[3.2]言語:C
[4]期限:今週中

よろしくお願いします
287282:2005/12/13(火) 21:21:53
>>282
[5]その他 の所に、配列とポインタを利用して作成
と書くのを忘れていました・・・orz
お手数掛けますがよろしくおねがいします(´・ω・`
288>>286:2005/12/13(火) 21:37:15
#include <stdio.h>
#include <string.h>
int main()
{
charstr1[256];
charstr2[256];
printf("検索対象文字列");
scanf("%s",str1);
printf("検索文字");
scanf("%s",str2);
if(strchr(str1,str2[0])){
printf("文字列に%cはあります。\n",str2[0]);
}else{
printf("文字列に%cはありません。\n",str2[0]);
}
return 0;
}
289288:2005/12/13(火) 21:39:57
charstr1[256]; → char str1[256];
charstr2[256]; → char str2[256];
29062:2005/12/13(火) 21:41:41
解答できればお願いします。バイトと他のレポートで考える暇がありません。
明日までです。なんとかお願いします
291デフォルトの名無しさん:2005/12/13(火) 21:56:37
C言語なんですが
#include <stdio.h>
#include<math.h>
void main(void)

{
int a,b=66,c=66;
a=pow(b,c);
printf("%d\n",a);

}

↑こういうプログラムを書くと表示がa=0となってしまいます。
これはintで扱える範囲を超えているからでしょうか?
またこれを解決できるような型はありますでしょうか?
292デフォルトの名無しさん:2005/12/13(火) 21:59:58
>>273 をみて考えるのがいい気がする
293デフォルトの名無しさん:2005/12/13(火) 22:00:56
>>291

intじゃなくてdouble
294デフォルトの名無しさん:2005/12/13(火) 22:04:11
>>291
関数powの戻り値がdoubleだから
295291:2005/12/13(火) 22:09:59
>>293さん
ありがとうございます。
大きい桁も表示できました。
ただprintfの%dところを%lfとしてみたのですが
12299・・・・・00000000.0000のような答えになりました。
66の66乗の下の方の桁が0になるとは思えないのですが
これは正確な答えを出せるのでしょうか?
296デフォルトの名無しさん:2005/12/13(火) 22:11:24
XXXXXX . 000000000000000000
     ↑この点はなんでしょう。
297デフォルトの名無しさん:2005/12/13(火) 22:15:19
>>295
66の66乗の正解はこれ。
1229984803535237425357460579824952453848609953896821302286319065669207712270213276022808840210306942692366529569453244416

まずは「浮動小数点」でぐぐれ。
298291:2005/12/13(火) 22:15:50
>>294さん
ありがとうございます。
戻り値の問題だったのですね。

>>296さん
小数点です^^;
すみません、書き方が悪かったです。
小数点以下はよいのですがXXXXXX.000000の
XXXXXX(整数部)の下のほうの桁が・・・0000と
なっている、ということです。
299>>288:2005/12/13(火) 22:18:10
感謝!!ありがとうございました。
300201 ◆VhBVomHUSw :2005/12/13(火) 22:26:26
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
10行10列の単位行列を求める関数を定義せよ(初期値代入して)
(@)for を用いて
(A)while を用いて
[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限:2005年 12月14日
[5] その他の制限:

>>205さん、解等ありがとうございます。ただ、ところどころ省略して書いてもらっているようで
なかなかコンパイルすることが出来ません……。自分でもいろいろと頑張ってみたのですが……

どなたか、全文をお願いできないでしょうか。なんどもすいません。
301デフォルトの名無しさん:2005/12/13(火) 22:27:17
[1]数値計算
[2]ある関数上の5つの座標点が次のように与えられたとき、ニュートンの補間法によりこの関数を近似し、x=2.7における
  近似値を求めよ。
(0, -1) (1, 1) (2, -11) (3, -61) (4, -125)

[3]
[3.1] Windows
[3.2] Borland C++ Compiler 5.5
[3.3] C
[4] 2005年12月13日  1日遅れるごとに1点づつ減点
[5] この問題だけを解けるプログラムではなくて、n項に拡張しても柔軟に対応できるプログラムにする必要があります。

説明不足かもしれませんが、よろしくお願いします。
302デフォルトの名無しさん:2005/12/13(火) 22:28:15
Linuxなんだけど、巨大ファイル1Tとかをオープンするには、fopen()系は
使えないんですか?
303デフォルトの名無しさん:2005/12/13(火) 22:33:52
304291:2005/12/13(火) 22:36:17
>>297さん
ありがとうございます。
浮動小数点でぐぐってみました。
丸め誤差ってのがあることは理解できました。
結局printfで表示するには%eとかで表示するしか
ないのでしょうか?
1229984803535237425357460579824952453848609953896821302286319065669207712270213276022808840210306942692366529569453244416
のように表示したいのですがよく分かりませんでした。
305デフォルトの名無しさん:2005/12/13(火) 22:40:07
>>303
ありがとうございます。バイト終わったら検討してみます!
306デフォルトの名無しさん:2005/12/13(火) 22:40:48
>>291
有効桁数とかあるから。
多倍長整数とかでググる
307デフォルトの名無しさん:2005/12/13(火) 22:40:51
自分で多倍長演算ライブラリでも作れば?
308デフォルトの名無しさん:2005/12/13(火) 22:45:51
>>302
Linux 版に行ったほうがいいぞ
309デフォルトの名無しさん:2005/12/13(火) 22:48:52
>>303
実行してみたんですが、累計距離が0kmになってしまいます
310デフォルトの名無しさん:2005/12/13(火) 23:01:19
>>309
303 じゃないけど、実行してみたらこんなふうになったぞ。

Input data filename:data.dat
Tokyo駅から下り方面は以下の通りです。
------------------------------
駅名:Tokyo
所在地:Tokyo
距離:6.800000km
駅名:Shinagawa
所在地:Tokyo
距離:28.800000km
駅名:Shin-Yokohama
所在地:Kanagawa
距離:83.900000km
311デフォルトの名無しさん:2005/12/13(火) 23:17:41
>>310
コピペし直してみたら出ました
あと

if( ptr == NULL ){
*line = ptr_tmp;
}else{
/*ここを完成*/
}
/*ここを完成 */

}
のここを完成の部分が単文らしいんですが、そのように直せませんか?
312291:2005/12/13(火) 23:20:46
>>306さん
>>307さん
多倍長!なるほど、調べてみます。
アドバイスくださった方々、ありがとうございました。
313303:2005/12/13(火) 23:22:32
>>311
if( ptr == NULL ){
*line = ptr_tmp;
ptr = *line;
}else{
if(ptr == NULL)ptr = *line;
(*line)->down = ptr_tmp;
}
*line = ptr_tmp;
のif(ptr == NULL)ptr = *line;はいらない。
314デフォルトの名無しさん:2005/12/13(火) 23:28:00
>>303
(*line)->down = ptr_tmp;
}
*line = ptr_tmp;
}
(*line)->down = NULL;
*line = ptr;
この変もなんか変じゃないか?
315デフォルトの名無しさん:2005/12/13(火) 23:28:32
>>313
どうもです!
316dai ◆U6.AsIbFBU :2005/12/13(火) 23:36:55
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

1.forループを用いて5行5列の行列を定義し、この行列を引数として受け取って
逆行列を求める関数を定義せよ。(置き換える前・後の見やすい行列の出力を含む)
ただし、行列Aの第i行第j列の要素を a(i,j)=(i-1)*5+j とする。

2.forループを用いて5行5列の行列を定義し、この行列を引数として受け取って
行列式の値を求める関数を定義せよ。(置き換える前・後の見やすい行列の出力を含む)
ただし、行列Aの第i行第j列の要素を a(i,j)=(i-1)*5+j とする。

     
[3] 環境
[3.1] OS:Windows(XP)
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:2005年12月14日中
[5] その他の制限: 配列、関数、ポインタまで学習済みです。

きのうも質問させてもらったのですが、今日そのレポートを提出したところ、
なぜか、上記の課題を出されました……。
昼からずっと考えているのですが、やっぱり全然分かりません。
関数、配列がなんとなく分かる程度の自分にとってレベルが高すぎます……

お手数おかけしてすいませんが、どなたかお願いいたします。
317俺は205ではないが:2005/12/13(火) 23:39:13
>>300
問題文は一度書けば分かる。
#include <stdio.h>
void det_for(int dat[10][10]) {
    int i, j;
    for (i = 0; i < 10; i++) for (j = 0; j < 10; j++) if (i == j) dat[i][j] = 1; else dat[i][j] = 0;
}
void det_whl(int dat[10][10]) {
    int i = 0, j;
    while (i < 10) {
        j = 0;
        while (j < 10) {
            if (i == j) dat[i][j] = 1; else dat[i][j] = 0;
            j++;
        }
        i++;
    }
}
int main(void) {
    int data1[10][10], data2[10][10], i, j;
    det_for(data1);
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) printf("%d ", data1[i][j]);
        printf("\n");
    }
    det_whl(data2);
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) printf("%d ", data2[i][j]);
        printf("\n");
    }
    return 0;
}
318179:2005/12/13(火) 23:45:03
>>316
ここが見られているんじゃないかね?
だとしたら自力で解くしかないと思うけど

まあ、個人的にはある程度自力でやってみて駄目出しするほうが好きなんだがね
気分転換代わりにやるかもしれないけど
319デフォルトの名無しさん:2005/12/13(火) 23:54:48
>>316
君だけに与えられた課題ならここで晒された解答を教官は知っているな。
今回も丸写しだと・・・・
320デフォルトの名無しさん:2005/12/13(火) 23:59:21
[1]プログラム基礎
[2]コマンドの引数として、
<実数><演算子><実数>
の形で与えられた四則演算式を計算し、結果を出力するプログラムを作成せよ
実行例: $./kadai 1.2 \* 0.5
     0.60000
     $./kadai 1.2 + 0.5
     1.70000
[3] 環境
OS:UNIX
言語:C
[4] 期限:17年12月15日
[5] その他の制限:
配列とポインタを一通り習いましたが、まだまだ理解できない部分が多いです・・・
よろしくです。
321デフォルトの名無しさん:2005/12/14(水) 00:05:30
>>316
その教官タシーロだなw
2chは有名すぎるから他のとこで晒すとか。
322デフォルトの名無しさん:2005/12/14(水) 00:09:31
>>320
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
double operand1, operand2, result;
char op;
operand1 = atof(argv[1]);
operand2 = atof(argv[3]);
sscanf(argv[2], "%c", &op);
switch(op){
case '+':
result = operand1 + operand2;
break;
case '-':
result = operand1 - operand2;
break;
case '*':
result = operand1 * operand2;
break;
case '/':
result = operand1 / operand2;
break;
default:
printf("error");
break;
}
printf("%lf\n", result);
return 0;
}
323316dai ◆U6.AsIbFBU :2005/12/14(水) 00:20:26
なぜか、ですませちゃいましたが
課題を出された理由としては、試験の結果が悪かったため、
レポート点でカバーする必要があるらしいんです。

この板を見てるってことはないと思います。たぶんですけど。
324デフォルトの名無しさん:2005/12/14(水) 00:22:10
>>323
コードの書き方が揺れてると怪しまれるから気を付けろよ
325デフォルトの名無しさん:2005/12/14(水) 01:21:19
[1] 授業単元: 情報処理基礎
[2] 問題文: 整列されたn 個の数列から二分探索でデータを探索する場合、
        与えるデータによって比較する回数は異なるはずである。
        そこで、nを1〜10万まで変化させ、その都度、最悪の比較回数を求めるプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 12月14日9:00まで
[5] その他の制限:
二分探索自体は↓のでできたのですがどう書き換え、書き足しを行えばよいのかわかりません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1282.txt
326デフォルトの名無しさん:2005/12/14(水) 01:53:27
>>325
これでいいんかな。

#include<stdio.h>
#define N 100000
#define siki ((max-min)/2)+min
main()
{
int max,min,k,x=0,n;

for(n=1; n<=N; n++) {
max=n; min=0; k=1;
while(1){
if(siki==x){
break;
}
else if(siki>x){
max=max/2+min/2;
k++;
}
else if(siki<x){
min=max/2+min/2;
k++;
}
}
printf("データ件数=%d, 比較回数最大値=%d\n", n, k);
}
return(0);
}
327デフォルトの名無しさん:2005/12/14(水) 02:04:49
[1]数値計算
[2]ある関数上の5つの座標点が次のように与えられたとき、ニュートンの補間法によりこの関数を近似し、x=2.7における
  近似値を求めよ。
(0, -1) (1, 1) (2, -11) (3, -61) (4, -125)

[3]
[3.1] Windows
[3.2] Borland C++ Compiler 5.5
[3.3] C
[4] 2005年12月14日
[5] 一般化したプログラムで作るという条件付き。

328デフォルトの名無しさん:2005/12/14(水) 02:22:10
>>327
激しく最近見たぞ、それ
329デフォルトの名無しさん:2005/12/14(水) 02:23:55
330デフォルトの名無しさん:2005/12/14(水) 02:38:19
質問ラッシュみたいになっててスルーされちゃったと思ったのでもう1回カキコしました。
連投スマソ
331デフォルトの名無しさん:2005/12/14(水) 02:57:54
気長に待て。
無理にせかすと余計答えてもらえなくなるぞ。
332デフォルトの名無しさん:2005/12/14(水) 02:58:57
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1283.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: Cのみでおねがいします。
[4] 期限: 2005、12、15 20:00まで
[5] その他の制限: 構造体を使ってお願いします。
333デフォルトの名無しさん:2005/12/14(水) 03:06:40
>>332
どこに構造体を使うのか指定されてんの?
334デフォルトの名無しさん:2005/12/14(水) 03:07:29
>>327
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1284.txt

与えられた5つの座標点も手で入力するようにした(一般化という条件付きのため)。
335デフォルトの名無しさん:2005/12/14(水) 03:10:44
>>62
もう見てないかもしれんが・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1285.txt
336デフォルトの名無しさん:2005/12/14(水) 03:15:14
>>332
うるう年も考慮に入れる?
337デフォルトの名無しさん:2005/12/14(水) 03:16:30
>>327
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1286.txt

>>334のバグ取りと、項数に0を入力した時は、問題文に与えられている
5個の座標点を元に計算するように変更。
338デフォルトの名無しさん:2005/12/14(水) 03:19:37
>>334
>>337
ありがとうございました。
339デフォルトの名無しさん:2005/12/14(水) 03:20:59
[1] 授業単元:情報処理演習2
[2] 問題文(含コード&リンク):
配列を使って、二分探索のプログラムを作成しなさい。

[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今週中まで
[5] その他の制限: 配列を使って解く
340>>274 == >>276:2005/12/14(水) 03:38:57
>>268
六行オセロ作成者に捧ぐ。ということで。

#include <stdio.h>
int*i,p,t,a,d,v,m[91]={-10,-9,-8,-1,1,8,9,10},s,n,x,w;int k(){if(m[p]==0)for(i=
m;*i;i++){for(v=p+*i;m[v]==9-t;v+=*i){}if(v-p-*i&&m[v]==t){s=a=v=p;do d?m[v]=t:
n++,v+=*i;while(m[v]-t);--n;}}return 0;}void c(){for(w=p=8,x=d=0;++p<82;)n=0,k(
),x<n?w=p,x=n:0;d=9;p=w;printf("%d:(%d,%d);",t-6?1:2,p%9,p/9);}int main(void){
for(m[40]=m[50]=s=t=3,m[41]=m[49]=6;s-1;a=d=0){for(p=8;++p<82;)p%9?k():m[p]=9;
getchar();for(a?d=a=p=9:s?s=0:s++;a==9;k())c();t=9-t;}}
341デフォルトの名無しさん:2005/12/14(水) 04:37:16
>>339
一応配列をmain関数に使っている
#include <stddef.h>
#include <stdio.h>
int * binary_search(int *p, ptrdiff_t len, int x) {
    int *m;
    ptrdiff_t l;
    while (len > 0) {
        l = len / 2;
        m = p + l;
        if (*m < x) {
            p = ++m;
            len -= l + 1;
        }
        else
            len = l;
    }
    return p;
}
int main(void) {
    int a[] = {1,3,4,6,7,9,10};
    int x = 3;
    int *p = binary_search(a, sizeof(a) / sizeof(a[0]), x);
    if (p == a + sizeof(a) / sizeof(a[0]) || *p != x)
        printf("%dは見つかりませんでした", x);
    else
        printf("%dが%d番目に見つかりました", *p, p - a + 1);
}
342デフォルトの名無しさん:2005/12/14(水) 08:40:17
>322
ありがとうございました。
もしよければ、#include <stdlib.h> を使用しない方法での
プログラムも教えて欲しいのですが・・・
343デフォルトの名無しさん:2005/12/14(水) 09:15:47
条件・制限の後出しはだめです
344デフォルトの名無しさん:2005/12/14(水) 09:26:12
>>342
atofに対応するもの作れってか。
また面倒くさいこと言うなぁ。
345デフォルトの名無しさん:2005/12/14(水) 09:44:59
>>344
sscanf使えばいいんでない?
346yuu ◆qMuXz8UNv6 :2005/12/14(水) 11:28:41
[1] プログラミング入門
[2]• 3×3の2次元配列を用意する.これは外部変
数とする.
• キーボードから任意の実数を9個入力し,順番
に配列にいれる.([0][0]->[0][1]->[0][2]->....)
• その入力データから3×3の配列の縦と横のそ
れぞれの平均(実数)を求め,画面に表示する.
なお,平均を求めるプログラムは関数化するこ
と.(引数は使わないように)
• 入力データ
– 1.1 1.2 1.3 1.4 1.5 ・・・・
[3] 環境
 [3.1] Windows
 [3.2] コマンドプロンプト 秀丸
 [3.3]C
[4] 本日中
[5] 初心者っぽくお願いします。
このあたりまで習いました。

#include <stdio.h>

int data[5];

void inpdata( void );
int median( void );

void main( void )
{
int data;

inpdata();
347デフォルトの名無しさん:2005/12/14(水) 11:37:36
>初心者っぽくお願いします。
ワロタw
348212:2005/12/14(水) 11:49:14
>>221のプログラムで動いたんですがクイックソートに見えないって言われました。
どなたかもう一度よろしくおねがいします。
349デフォルトの名無しさん:2005/12/14(水) 11:59:25
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
(1)ファイル名をキーボードから入力し、’{’、’}’が含まれていない行のみを画面に表示するプログラムを作成せよ。
(2)10名の指名と誕生日のデータをファイルから読み込んで、配列に格納するプログラムを作成せよ。
[3]
 [3.1] WinXP
 [3.2]VC++.NET 2003
 [3.3]C
[4] 期限:2005年12月16日中
[5]ファイル操作まで習っていますが、ファイルの読み込み、書き込みは全てテキストファイルでお願いします。
includeして良いのは、stdio.h、stdlib.h、string.h、math.h位です。
ちなみに1番はここまで出来ました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
の1287番
2番もmain関数などは1番と同じような書き方でお願いします。


350デフォルトの名無しさん:2005/12/14(水) 12:01:38
自前のqsort()作れってか('A`)
351デフォルトの名無しさん:2005/12/14(水) 12:09:58
趣味のおじさんプログラマなんだけど、ここを練習用に使っちゃだめなのかな ?
352デフォルトの名無しさん:2005/12/14(水) 12:20:19
どうぞどうぞ
353デフォルトの名無しさん:2005/12/14(水) 12:24:37
ありがとう。
プロじゃないし、バグが入っちゃうかもしんないけど、堪忍してね。
354デフォルトの名無しさん:2005/12/14(水) 12:40:46
>>348
質問:
(1)   qsortの使用可否
(2)   「完成せよ」とはどういう意味か。整列せよという意味か?
(2-1) 整列するとすれば昇順(小さい順)か降順(大きい順)か?
355デフォルトの名無しさん:2005/12/14(水) 12:53:17
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

適当な長さの文字列を初期設定として設定し、

sent[100] = {"This is the test program ......

キーボードから何か文字列を入力して、入力した
文字列が初期設定として設定した文字列(上の例ではsent)
に含まれるかどうか判定するプログラムを strchrを
使って作りなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月15日12:00まで
[5] その他の制限: 特にないです。お願いします。
356デフォルトの名無しさん:2005/12/14(水) 13:02:27
文字列(変数宣言はa[●])、その次の構造体を示すアドレス(変数宣言はnext)からなる構造体(変数宣言はcell)[要するに自己参照構造体]のリストを用いて

リストを昇順に
(i)バブルソート
(ii)クイックソート
するprogramを教えていただければと思います。使用言語はCのみでお願いします。
どうも調べても配列を使ったものしか解説がないので…。
357デフォルトの名無しさん:2005/12/14(水) 13:07:24
>>349
(1)はこんなんじゃダメ?

void list(FILE *fp)
{
char str[256];
char x[][3] = {"’", "{", "’", "、", "’", "}", "’"};
int len, i;

while(fgets(str,256,fp)!=NULL){
len=(int)strlen(str);
str[len-1]='\0';

for (i = 0; i < 5; i++){
if (strstr(str, x[i]) != NULL) {
break;
} else if (i == 4) {
printf("%s\n", str);
}
}
}
return;
}
358デフォルトの名無しさん:2005/12/14(水) 13:13:30
>>356
これ参考にすりゃ良いんじゃないかな。

>266 :デフォルトの名無しさん :2005/12/04(日) 11:58:18
>>>211>>260
>ほれ。
>ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1193.zip
>
>ちょっと遊んだから適当に書き直してから提出した方がいいかも知れない。
359デフォルトの名無しさん:2005/12/14(水) 13:14:50
>>346
#include <stdio.h>

double data[5] = {1.1, 1.2, 1.3, 1.4, 1.5};
double data1[3][3];

void inpdata(void);
int median(void);

void main(void)
{
inpdata();
median();
}

void inpdata(void)
{
int i;
int j;

for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
scanf("%lf", &(data1[i][j]));
}
}

つづく
360デフォルトの名無しさん:2005/12/14(水) 13:15:31
つづき

int median(void)
{
int i;
int j;
double f_valance;

for (i = 0; i < 3; i++)
{
f_valance = 0.0;

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

printf("tate%d %lf\n", i, f_valance / 3.0);

f_valance = 0.0;

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

printf("yoko%d %lf\n", i, f_valance / 3.0);

}
return 0;
}

で、いいかな ?
無駄な外部変数とか残してみたんだけど。
361360:2005/12/14(水) 13:19:09
あと、median って中央値な気がするんだけど、
求めるのは平均でいいんだよね ?
362デフォルトの名無しさん:2005/12/14(水) 13:47:55
>>355
#include <stddef.h>
#include <stdio.h>
#include <string.h>
char *strsearch(const char *s1, const char *s2) {
    size_t s2len;
    if (*s2 == '\0')
        return (char *) s1;
    s2len = strlen(s2);
    for (; (s1 = strchr(s1, *s2)) != NULL; s1++)
        if (memcmp(s1, s2, s2len) == 0)
            return (char *) s1;
    return NULL;
}
int main(void) {
    char source[] = "I am a liar.", input[256], *result;
    scanf("%255s", input);
    if ((result = strsearch(source, input)) != NULL)
        printf("found at position %d", result - source + 1);
    else
        printf("not found");
    return 0;
}
363デフォルトの名無しさん:2005/12/14(水) 13:58:04
364デフォルトの名無しさん:2005/12/14(水) 15:02:47
>>341
341さんありがとうございます!!
助かりました
365デフォルトの名無しさん:2005/12/14(水) 15:10:22
[1] 授業単元:数値計算
[2] 問題文:
オイラー法を用いてy'=2(x+1)yを初期値y(0)=2で、刻み幅h=0.1でx=0.0〜1.0まで
計算するプログラムを作成せよ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:12/19まで
[5] その他の制限:無し

よろしくお願いします
366デフォルトの名無しさん:2005/12/14(水) 15:12:38
[1]プログラミング
[2]100個のデータを任意の数値で2つに区切って平均を出すプログラム。
(例:50で区切ったら1+2+3+〜+50、51+52+53+〜+100の平均)

[3]
[3.1] Windows XP
[3.2] Borland C++ Compiler 5.5
[3.3] C
[4] 2005年12月15日  
[5] データはテキストファイルから読み込ませます。
区切るというのは数字でではなく上から何番目で区切るという意味です。
ファイルを読み込ませるとこまでは出来ます。

こんな課題を出されたけどどうすればいいのかさっぱり分かりません。
とりあえず区切り方が分からないので先にも進めません。
どうかお願いします。

367デフォルトの名無しさん:2005/12/14(水) 16:24:44
>>366
動くかは知らん。

#include<stdio.h>
int main(int argc, char* argv[]) {
FILE* fh;
int from, to;
if(argc <= 1) {
puts("a TEXTFILE");
return 0;
}
if((fh = fopen(argv[1], "") == NULL) return 1;
fscanf(fh, "%d %d", &from, &to);
fclose(fh);
printf("average: %d\n", (from + to) / 2);
return 0;
}
368デフォルトの名無しさん:2005/12/14(水) 16:37:51
>>365
int main() {
  double y, x, h = 0.1;
  for (y = 2, x = 0; x <= 1.0; x += h) {
    y += 2 * (x+1) * y * h;
    printf("%lf %lf\n", x, y);
  }
}
369デフォルトの名無しさん:2005/12/14(水) 17:56:31
>>366
#include <stdio.h>
#define DATA_NUM 100
int main(int argc, char **argv)
{
FILE *fp;
double w, sum[2] = {0};
int i, n = 0;
if(argc < 2) {
fprintf(stderr, "usage: %s file-name\n", argv[0]);
return -1;
}
if(!(fp = fopen(argv[1], "r"))) {
fprintf(stderr, "cannot open file, %s\n", argv[1]);
return -1;
}
while(printf("separate pos.> "),scanf("%d", &n) != 1 || n < 1 || n > (DATA_NUM-1)) {
fprintf(stderr, "input error\n"); scanf("%*[^\n]%*c");
}

for(i = 0; fscanf(fp, "%lf", &w) == 1; i++) {
if(i < n) {sum[0] += w;} else {sum[1] += w;}
}
fclose(fp);

printf("average1 = %g, average2 = %g\n", sum[0]/n, sum[1]/(DATA_NUM-n));
return 0;
}
370349:2005/12/14(水) 18:10:14
>>357
ありがとうございます。
でも、実行してみましたが、違うようです。。。
たとえば、
#include<stdio.h>

int main(void)
{
int i;
for(i=0;i<10;i++)
{
printf("%d\n",i);
}
return 0;
}
こういう内容のファイルを読み込んだら、
#include<stdio.h>

int main(void)
int i;
for(i=0;i<10;i++)
printf("%d\n",i);
return 0;

こういう風に表示されるはずなんですが、
そのコードでは、微妙に}が残ってしまいました。

>>363
ありがとうございます!
無事実行出来て答えも出ました。
371349:2005/12/14(水) 18:11:34
追加:
上に表示されたコードは、インデント(でしたっけ?)されていませんが、
実際のコードはインデントされています。
372349:2005/12/14(水) 18:14:08
さらに追加:
>>357さんはちょっと勘違いされているようです。
表示させないのは { と } だけです。
書き方が悪かったようです。すみません。
373349:2005/12/14(水) 18:29:51
>>357さんのコードを参考にして自分で作ってみたら、出来ました。
ちなみに、
if(strstr(str,"{")==NULL&&strstr(str,"}")==NULL )
{
 puts(str);
}
これで出来ました。
ありがとうございます。
374332:2005/12/14(水) 18:45:03
すみません、説明不足でした。>>333構造体は年、月、日にちです。>>336 閏年も考えてください。
よろしくお願いします
375デフォルトの名無しさん:2005/12/14(水) 18:48:18
[1]授業単元:プログラミング
[2]問題文:キーボードから文字列を入力し、その文字列を下記のような"流れるメッセージ"を
表示するプログラム。
a.out Enter
ABCDE Enter
ABCDE
ABCD
ABC
AB
A
[3]環境
[3.1]OS:Linux
[3.2]言語:C
[4]期限:今週中

よろしくお願いします
376デフォルトの名無しさん:2005/12/14(水) 18:52:14
>>375
ABCDE
ABCD
ABC
AB
A
は右揃えでおねがいします。
377デフォルトの名無しさん:2005/12/14(水) 19:14:56
>>375

#include <stdio.h>

int main(void)
{
char str[256];
int i = 0, j = 0,k = 0;
int spaces, max;

scanf("%s", str);
while(str[i] != '\0')i++;

max = i;
while(k++ < max){
j = 0;
spaces = max - i;
while(spaces--)printf(" ");
while(j != i){
printf("%c",str[j++]);
}
printf("\n");
i--;
}
return 0;
}
378デフォルトの名無しさん:2005/12/14(水) 19:28:45
>>374
例が間違ってるんだが、条件は本当にそれであってるか?
その例だと8091日ではなく8466日になると思うんだが。
379デフォルトの名無しさん:2005/12/14(水) 19:57:08
すまん、NETに1ヶ月ほど繋がってなかったんだが、未解決の問題のリストを教えてくれんかね?
380デフォルトの名無しさん:2005/12/14(水) 20:00:16
>>379
>>356くらいかな
381デフォルトの名無しさん:2005/12/14(水) 20:06:08
>>375
#include <stdio.h>
#include <string.h>

int main(void)
{
  int   space, len;
  char  msg[256];
  fgets(msg, sizeof(msg), stdin);
  for (len = strlen(msg) - 1, space = 0; len > 0; len--, space++) {
    printf("%*s%.*s\n", space, "", len, msg);
  }

  return 0;
}
382デフォルトの名無しさん:2005/12/14(水) 20:14:26
>>375
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
  int   space, len;
  char  msg[256];
  fgets(msg, sizeof(msg), stdin);
  setbuf(stdout, NULL);
  for (len = strlen(msg) - 1, space = 0; len >= 0; len--, space++) {
    printf("\r%*s%.*s", space, "", len, msg);
    usleep(200000);
  }
  putchar('\r');

  return 0;
}
383デフォルトの名無しさん:2005/12/14(水) 20:14:42
>>377
助かりました。 ありがとうございます!!
384デフォルトの名無しさん:2005/12/14(水) 20:37:43
>>378
あっ。すみませんでした。今日の日にちは、関数でゲットして、生年月日は入力です!おそらく、そちらのミスかと思われます。
385デフォルトの名無しさん:2005/12/14(水) 20:38:38
>>379
>>316もかな? 時間が無いけど
386デフォルトの名無しさん:2005/12/14(水) 20:46:14
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ω=exp(2πi / n) を1の原始n乗根とするとき
f(ωi) = Σ K=0からn-1 の Xk * ωのjk乗 (0<j<n)
から
Xk = 1/n Σ j=0からn-1 の f(ωi) * ωの-jk乗 (0<k<n)
を求めよ。
f , g をそれぞれ n , m 次の多項式とする。入力として f , g の計数が配列で与えられているのものとする。出力は m+n 次の多項式 f・g 配列行列である。
なお入力となる関数 f , g を外部入力でなくプログラム中に含めて下さい。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 4*atan(1.0)

typedef struct complex complex;
struct complex{
double real; //実数部分
double imaginary; //虚数部分
};

/*/複素演算 (未完成)

//フーリエ変換 (未完成)
complex* FFT(int n, complex *x){
complex *result, *u, *v;
complex *evenarray, *oddarray;
int i,j;

}
//逆フーリエ変換 (未完成){
}
387デフォルトの名無しさん:2005/12/14(水) 20:47:13

//多項式関数の乗算 (未完成)
int* multi_poly
(int m, int *a, int n, int *b, int *p){
complex *f, *g, *fft_f, *fft_g, *z, *zz;
int i, *multi_p;
const double eps = 1E-15L;

}

//Main (未完成)
int main(int argc, char* argv[]){

}

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0
 [3.3] 言語: C
[4] 期限: 2005年12月19日23:59まで
[5] その他の制限:複素演算、フーリエ変換、逆フーリエ変換、多項式関数の乗算
         それぞれの関数を作らなければいけません。よろしくお願いします。
388しゃんぷーはっと ◆lo0Ni729yM :2005/12/14(水) 21:02:42
[1] 授業単元:プログラミング
[2] 問題文:
Aij=i+0.1*jで表される、5×5の行列を定義し、配列を引数として受け取り
それらのトレースTr(A) (=[1,1]+[2,2]+[3,3]+[4,4]+[5,5])を求める関数定義、
プログラム作成を行え。

[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年12月16日
[5] その他の制限:forループを用いて

よろしくお願いします。最近C言語に追われて泣きそう……
389356:2005/12/14(水) 21:05:47
>>356
追記
・スタック・キューは使わないで下さい。
お願いします。
390デフォルトの名無しさん:2005/12/14(水) 21:22:18
[1] 授業単元: プログラミング実習
[2] 問題文 文字列をコピーする部分を関数化し、2つの文字列
を連結したプログラム。四角(□)の中をうめよ(□の中は1文とは限らない)
#include <stdio.h>
int mystrcopy(□)
{

}
int main()
{
char str1[100],str2[200];
int i;
scanf(□);
i=mystrcopy(□);
printf("コピー元の文字列は%sです。\n",□);
printf("コピー先の文字列は%sです。\n",□);
printf("連結した文字列は%sです。\n",□);
return 0;
}

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月22日
391デフォルトの名無しさん:2005/12/14(水) 21:35:50
>>390

#include <stdio.h>
int mystrcopy(char st1[], char st2[])
{
int i = 0;
while(st1[i] != '\0'){
st2[i] = st1[i];
i++;
}
return i;
}
int main()
{
char str1[100],str2[200];
int i;
scanf("%s", str1);
i=mystrcopy(str1, str2);
printf("コピー元の文字列は%sです。\n",str1);
printf("コピー先の文字列は%sです。\n",str2);
printf("連結した文字列は%sです。\n",strcat(str2,str1));
return 0;
}
392デフォルトの名無しさん:2005/12/14(水) 21:54:25
>>391
それst2に\0入ってなくね?
それにstring.h使ってないみたいだしstrcatもまずくね?
393379:2005/12/14(水) 21:58:44
>>380 リストでバブルソート、クイックソートは聞いたこと無いな。面白そうね。
>>385 Aが定義されてるとき、AA^(-1)=EなるA^(-1)を・・ああ、求め方わすれてるなぁ・・・
ありがと。飯買って来たらぼちぼちやってみますわ。
394デフォルトの名無しさん:2005/12/14(水) 21:59:19
>>390
問題文からみると連結もint mystrcopy()
内でやらないといけなそうだし。
395デフォルトの名無しさん:2005/12/14(水) 22:03:32
リストのソートか・・・
俺ならリストのノード数カウントした後で、その分の配列作って
そこに全ノードへのポインタ保存→ソートをやった後でリストを再構築する
直にリストにクイック適用してたら効率悪すぎるだろ(とゆうかできるのか?)
少なくとも俺はランダムアクセスイテレータ無しのデータ構造に対して
直にクイックを実装するようなアイディアは思いつかんな
396デフォルトの名無しさん:2005/12/14(水) 22:23:09
>>395
多分リストで書いたほうが効率気にしなければ綺麗に書けるよ。
リストを簡単に扱える言語、例えば Haskell なんかだと
 sort [] = []
 sort (x:xs) = sort [y | y <- xs, y <= x] ++ [x] ++ sort [y | y <- xs, x <= y]
だけ。C で実装するとリストの連結とかフィルタを簡単にかけないからもっと長くなっちゃうけど、
同じ配列内で swap 連打するよりは、何をやってるかの見通しはいいはず。
397デフォルトの名無しさん:2005/12/14(水) 22:25:13
>>384
そういうことじゃなくて、その例の実行結果が実際の日数と食い違ってるんだが。問題が間違ってるんじゃないか?
398デフォルトの名無しさん:2005/12/14(水) 22:27:03
>>385
連立方程式 A x = b を解くプログラムを作る。それを用いて b = (1, 0, 0, .., 0) の解 x_1 , b = (0,1,0, ..., 0) の解 x_2,……
を求め、それを並べて作られる行列 [ x_1 x_2 ... x_n ] を作ると、それが A のインバースになる。
399デフォルトの名無しさん:2005/12/14(水) 22:28:18
>>396
リストを言語レベルで扱えるならそれがいいかもな
でもCだと直にやるとリストの連結だの切り離しだので発生する
オーバーヘッドがでかくなって洒落にならん悪寒
400デフォルトの名無しさん:2005/12/14(水) 22:30:45
>>398
それより元の行列Aを使って行列[A E]を作って
Aの部分を行列変換でEにした方がわかりやすくね?


プログラムにするのは面倒な気がするが(;´Д`)
401360:2005/12/14(水) 22:35:14
>>399
つうか、宿題は Haskell じゃなくて C でリストを使ったクイックソートが前提な気がするんだけどね。
俺も、>>395 ぐらいのしか思いつかないな。shell sort ちっくではだめなんだよな、きっと。
402360:2005/12/14(水) 22:36:14
あっ、360 は気にしないでね。
403デフォルトの名無しさん:2005/12/14(水) 22:36:43
また、やってるし。
404デフォルトの名無しさん:2005/12/14(水) 22:42:12
問題の原文が分からんのでどうとも言い難いが、>>395の方式でいいんじゃね?
敢えてリストを直にクイックソートすることの意味が理解できん

とゆうか俺がそんな課題出されたら間違いなく>>395方式でやる
405379:2005/12/14(水) 22:44:32
リストのソートで。。。ってことならマージソートかのぅ・・・(なお、飯=言い訳寿司+焼酎でした)
406デフォルトの名無しさん:2005/12/14(水) 22:47:03
>>399
実際>>396は「洒落にならん」コストをひっかぶって
それでも効率を気にしない実装なんだが。
407356:2005/12/14(水) 22:47:14
>404
皆さんを悩ませてすいません…。
まだノードはやっていないです…
マージソートはやらなくてよいです。バブルとクイックでヨロシクお願いします。
408デフォルトの名無しさん:2005/12/14(水) 22:49:14
>>406
うは・・・そんな実装いらなくね('A`)?

>>407
むしろバブルとクイックの方が難しくなると思われ
マージならリストみたいなデータ構造とも相成れやすいしな
409デフォルトの名無しさん:2005/12/14(水) 22:49:16
リストならったのにノードという言葉がわからんのか
410356:2005/12/14(水) 22:51:25
>409
無知ですいません。ウチラではnodeではなくcellと呼んでます(爆
411デフォルトの名無しさん:2005/12/14(水) 22:52:31
>>408
ちゃんとチューンされた実装を何十行かかけて書くよりも
無駄の多い実装を二行で書いた方がいい場面もあるだろう。
すれ違いスマソ
412デフォルトの名無しさん:2005/12/14(水) 22:53:52
洒落にならんって本当にパフォーマンス計測したのか?
413デフォルトの名無しさん:2005/12/14(水) 22:53:55
>>411
なるほどな、ためになった。サンクス
414デフォルトの名無しさん:2005/12/14(水) 23:04:50
>>406
クイックソートが遅いってこともないだろ。
何を元にそう判断したのか?
415デフォルトの名無しさん:2005/12/14(水) 23:08:50
きっと、406 はそんなこといってない気がする
416デフォルトの名無しさん:2005/12/14(水) 23:17:13
クックソートはランダムアクセスが前提だし。
リストのソートには向かないんじゃね?
417デフォルトの名無しさん:2005/12/14(水) 23:25:15
>>416
>クックソートはランダムアクセスが前提だし
ソースは?
418デフォルトの名無しさん:2005/12/14(水) 23:38:16
やけに美味そうだな。
419デフォルトの名無しさん:2005/12/14(水) 23:39:36
>>417
http://www.google.co.jp/search?q=quick+sort
>>416
そうだね。
俺の結論としては、宿題の問題に信憑性に問題がある気がする。
420デフォルトの名無しさん:2005/12/14(水) 23:46:15
>>419
それのどこがソース?
421デフォルトの名無しさん:2005/12/14(水) 23:47:14
っつーかリストから要素取り出して配列にするのは無駄
リストから二分木に再構築する→リストに戻すが良い
422デフォルトの名無しさん:2005/12/14(水) 23:48:07
[1] 授業単元:コンピュータ基礎
[2] 問題文(含コード&リンク):コッホ曲線を描画せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:2005年12月15日10時半まで
[5] その他の制限:構造体まではざっと説明されたがグラフの表し方がサンプルにあっただけで説明されていない。
サンプル(Debugフォルダは除いてあります)  ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1289.zip

さっぱり分かっていない状況です。時間は全然ありませんが、なにか助言を頂ければと思います。
423デフォルトの名無しさん:2005/12/14(水) 23:48:59
そもそも>>356は宿題じゃなくて趣味だと思ってたんだが、違うのかよ。
テンプレにも沿わなかったのも授業単元を書き様がなかったからだと解釈してたんだが…
424356:2005/12/14(水) 23:52:29
>>423
すいません…科目は伏せたかったのでテンプレ使いませんでした…
一応宿題です…
425デフォルトの名無しさん:2005/12/14(水) 23:54:32
>>421
要素取り出して配列にする→リストに戻す
リストから二分木に再構築する→リストに戻す

かえって、効率が悪い気がするんだけど
426デフォルトの名無しさん:2005/12/14(水) 23:56:42
あっ、ごめん。

要素取り出して配列にする→クイックソート→リストに戻す
リストから二分木に再構築する→リストに戻す

だね。
427422 ◆08lgoIqnQg :2005/12/14(水) 23:59:56
トリップを付け忘れましたorz
428プル ◆/p5iT5UtQ6 :2005/12/15(木) 00:12:44
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 5×5の単位行列を関数を用いて作成せよ
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005,12,16
[5] その他の制限:

#include <stdio.h>
#define X (5)
#define Y (5)
int main(void)
{
int i,j,a[X][Y];
for(i=0;i<X;i++){
for(j=0;j<Y;j++){
if(i==j){
a[i][j]=1;
} else {
a[i][j]=0;
} } }
for(i=0;i<X;i++){
for(j=0;j<Y;j++){
printf("%6d",a[i][j]);
}
printf("\n");
} }

なにか、難しい議論されてるところすいません。上記のようにプログラムを作成したのですが、
どなたか、関数を用いた形に書き直して頂けないでしょうか。関数が入ってくると、うまくいかなくて。
429デフォルトの名無しさん:2005/12/15(木) 00:15:42
>>397
すみません、実際計算したら、例題がおかしかったみたいです。
締め切り近いのでよろしくお願いします。
430デフォルトの名無しさん:2005/12/15(木) 00:19:35
>>428
関数の仕様は?
431デフォルトの名無しさん:2005/12/15(木) 00:23:10
>>428
要するに、二次元配列の受け取り方が知りたいわけだな?

int (*a)[Y] か、もしくは int a[][Y] でいいよ。
432デフォルトの名無しさん:2005/12/15(木) 00:24:22
この問題の下の実行時間の計算のプログラミングがまだなんですけど。
>どなたかやっていただけませんか?
>http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1252.txt
433379:2005/12/15(木) 00:27:28
酔っ払いつつ、アルゴリズムのやりかた案
1.リストのクイックソート
とりあえず・・・・
リンクリスト中から中間値を得る
中間値未満と以下でグループ分けして再帰

2.リストのバブルソート
・・・すんません。挿入ソートなら出来そうなんですが、バブルソートは分かりません

3.行列に関して・・・開始が0行0列から始まるのと、1行1列で始まるのとどっちなんでしょうねぇ・・・?
(記憶では)逆行列を求められる行列って制約があった気が・・・・まぁ・調べてない私が悪いのでしょうけど。
434プル ◆/p5iT5UtQ6 :2005/12/15(木) 00:33:39
>>430
関数の仕様というのは>>431さんのおっしゃるようなことでしょうか?
初心者ですいません。

void tani_gyouretu(int a[5][5])
みたいな感じで作ろうとしていたのですが……
読み出し、戻り値みたいなのがよく理解できてないもので。
435356:2005/12/15(木) 00:34:58
バブルソートはこんなカンジで
while(入れ替えが発生しなくなるまで)
{
while(n-1番目までのセルについて)
{
if(入れ替え必要?){
入れ替え!!
}
}
}
かなりnextのつなぎ替えをしなければいけませんが…
436デフォルトの名無しさん:2005/12/15(木) 00:34:59
void tani_gyouretu(int a[][5])
437デフォルトの名無しさん:2005/12/15(木) 00:50:15
>>434
これでいいのか?
#include <stdio.h>
#define X (5)
#define Y (5)
void tani_gyouretu(int a[X][Y]);
int main(void)
{
int i,j,a[X][Y];
tani_gyouretu(a);
for(i=0;i<X;i++){
for(j=0;j<Y;j++){
printf("%6d",a[i][j]);
}
printf("\n");
} }

void tani_gyouretu(int a[X][Y])
{
inti,j;
for(i=0;i<X;i++){
for(j=0;j<Y;j++){
if(i==j){
a[i][j]=1;
} else {
a[i][j]=0;
} } }
}
438プル ◆/p5iT5UtQ6 :2005/12/15(木) 01:12:19
>>437
ありがとうございました。実行できました。
439デフォルトの名無しさん:2005/12/15(木) 01:18:32
>>429
生まれてからの日数。あまり構造体にする意味はない。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct date {
    int year, month, day;
};
int ut_to_julian_day(int year, int month, int day) {
    if (month <= 2) {
        year--;
        month += 12;
    }
    return 1720996 + year * 365 + year / 4 - year / 100 + year / 400 + (month + 1) * 30 + (month + 1) * 3 / 5 + day;
}
int main(void) {
    time_t today;
    struct tm *today_tm;
    char buf[256];
    struct date birthday;
    today = time(NULL);
    today_tm = localtime(&today);
    strftime(buf, 256, "今日の日付は %Y年 %m月 %d日 です", today_tm);
    printf("%s\n生年月日を入力して下さい。\n", buf);
    printf("年(西暦): "); scanf("%d", &birthday.year);
    printf("月: "); scanf("%d", &birthday.month);
    printf("日: "); scanf("%d", &birthday.day);
    printf("%d/%d/%d\n", birthday.year, birthday.month, birthday.day);
    printf("%d/%d/%d\n", today_tm->tm_year + 1900, today_tm->tm_mon + 1, today_tm->tm_mday);
    printf("今日は生まれてから%d日です。", ut_to_julian_day(today_tm->tm_year + 1900, today_tm->tm_mon + 1, today_tm->tm_mday) - ut_to_julian_day(birthday.year, birthday.month, birthday.day));
    return 0;
}
440Addicted to C++ ◆nrBjarne.g :2005/12/15(木) 01:28:18
>>424
テンプレの[1]は別に「教科名」が知りたいのではなく、今どういう
内容をやっていてその課題が出されたのかを知ることで、問題を
解く際に出題者の意図に沿った解答をできるだけ出せるように配慮
して作った項目なんだけどなぁ。
441422 ◆08lgoIqnQg :2005/12/15(木) 01:41:08
サンプルと見比べたりしながらやっているのですが、

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1290.txt

↑のように進めたところ
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
とエラーが出て実行できません。どのようにmain関数を入れればいいのでしょうか?
それとも根本的に間違っているのでしょうか?
442しゃんぷーはっと ◆lo0Ni729yM :2005/12/15(木) 01:44:49
どなたか>>388を解いて下さらんか。ずっと、考えてるが全くといっていいほどワカンネ
お礼は何もできないけど、死ぬほどカンシャします。偉そうでゴメンなさい
443デフォルトの名無しさん:2005/12/15(木) 01:54:56
配列を引き数として受け取ることはできませんが。
444デフォルトの名無しさん:2005/12/15(木) 02:00:10
できますよ
445デフォルトの名無しさん:2005/12/15(木) 02:01:51
#include <stdio.h>

double trace(double (*a)[5]);
int main(void)
{
int i,j;
double a[5][5];

for(i=0;i<5;i++){
for(j=0;j<5;j++)
a[i][j]=i+0.1*j;
}

printf("%f\n",trace(a));

return 0;
}
double trace(double (*a)[5])
{
return a[0][0]+a[1][1]+a[2][2]+a[3][3]+a[4][4];
}
446デフォルトの名無しさん:2005/12/15(木) 02:26:22
>>441
基本的にプログラムはmain関数から読みはじめるので
main関数が無いとどうにもなりません。

int main(void){
KochCurve(a,b,c,d,e);
Draw_graph();
Draw();
}
とか、適当に読み出したい順に引数を与えてmain関数の中で関数を呼び出してください。
それと、
void KochCurve(n, x1, y1, x2, y2){←カッコの位置が変なとこいってるよ。正しくはここ
447しゃんぷーはっと ◆lo0Ni729yM :2005/12/15(木) 02:28:36
>>445
ありがd。豆腐の角に頭打って死ぬぐらいカンシャしまつ
おやすみなさい
448デフォルトの名無しさん:2005/12/15(木) 02:29:51
引数を「いんすう」と読んでもいいですか?
449デフォルトの名無しさん:2005/12/15(木) 02:34:40
ひきすう

です
450デフォルトの名無しさん:2005/12/15(木) 02:51:03
二次元配列を関数に渡す方法を教えてください。
あー、ポインタで渡すのは不許可です。
また、配列へのポインタを渡すのも当然ダメです。
451デフォルトの名無しさん:2005/12/15(木) 02:52:16
>>446
気持ちの悪いコーディングスタイルを他人に押し付けるのはやめてください。
452デフォルトの名無しさん:2005/12/15(木) 03:08:25
>>450
/* 二次元配列を受け取る関数 */
void func(char array[][20])
{
}

/* funcの呼び出し */
char array [10][20];

func(array);
453デフォルトの名無しさん:2005/12/15(木) 03:19:25
>>451
気持ちのいいコーディングスタイルを教えてください。
454デフォルトの名無しさん:2005/12/15(木) 03:35:36
>>356
>>358にあるコード弄ってクイックソートだけ作って見た。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1291.c

おそろしく効率悪いけどな。
455oll:2005/12/15(木) 03:38:44
[1]授業単元:プログラミング入門
[2]問題文:sinx、cosxの近似値を求めるプログラムを作れ(テイラー展開利用?)
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト
[3.3]言語:Cです
[4]期限 できれば早く(来週中)
[5]その他の制限:学部と全く関係ない教養科目で全く分かってません お願いします
456455:2005/12/15(木) 03:42:01
↑すいません 来週は隔週休講でした
 明日か明後日までにお願いします
457デフォルトの名無しさん:2005/12/15(木) 04:18:43
>>455
コンパイルもデバッグもしてないけど、こんなんでどう?

#include <stdio.h>

#define N 10

/* テイラー展開によるsinの近似 */
double sin_by_taylor(double x, int n)
{
int i;
double s = x;
double a = x;

for (i = 3; i < n; i += 2) {
a = (-1) * a * x * x / (i * (i-1));
s += a;
}

return s;
}
458デフォルトの名無しさん:2005/12/15(木) 04:19:43
/* テイラー展開によるcosの近似 */
double cos_by_taylor(double x, int n)
{
int i;
double s = 1.0;
double a = 1.0;

for (i = 2; i < n; i += 2) {
a = (-1) * a * x * x / (i * (i-1));
s += a;
}

return s;
}

/* メイン関数 */
void main(void)
{
double sin_val, cos_val, x;

printf("%s", "x=>");
scanf("%f", &x);

sin_val = sin_by_tailor(x, N);
cos_val = cos_by_tailor(x, N);

printf("sin(%f)=%lf\n", sin_val);
printf("cos(%f)=%lf\n", cos_val);
}
459oll:2005/12/15(木) 04:43:30
>>457
早くもありがとうございます!!!感謝
あとlal<10~-8で終了する条件を加えたいのですが・・・
重ね重ね申し訳ないです><
460デフォルトの名無しさん:2005/12/15(木) 04:47:29
>>459
lal<10~-8
これなに?
461デフォルトの名無しさん:2005/12/15(木) 05:23:25
abs(sin(x)(N)-sin(x)(N+1)) < 10^-8
のつもりじゃないかな?
462デフォルトの名無しさん:2005/12/15(木) 05:38:22
条件後付氏ね
463oll:2005/12/15(木) 08:45:32
追加すんません その分はスルーしてください
ありがとうございました
464デフォルトの名無しさん:2005/12/15(木) 09:06:36
>>463
あとは自分で考えれ
465店長:2005/12/15(木) 09:51:10
CASLU わかりますか?
466デフォルトの名無しさん:2005/12/15(木) 10:18:27
>>355
>>362
ありがとうございます。
でも見たこともない単語ばっかりでした。
他にもやり方があればお願いします。
467デフォルトの名無しさん:2005/12/15(木) 10:48:57
>>439
ありがとうございます。できれば、ろだの1242の実行するのに何秒かかるかというプログラムを教えていただけませんか?
468デフォルトの名無しさん:2005/12/15(木) 11:06:11
>>466
漏れは>355じゃないが>362は特に変なコードとも思えないが、どの辺が見たこともない単語なんだ?
469デフォルトの名無しさん:2005/12/15(木) 11:17:30
[1] 授業単元: プログラミングII
[2] 二分探索木における挿入、削除、検索のアルゴリズムを簡潔に説明し、そのプログラムを作成せよ。
   ただし、挿入、削除、検索はそれぞれ再帰を用いた関数でプログラムを作れ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2005/12/15 12:50
[5] その他の制限: 木構造を習い始めたところです。
470デフォルトの名無しさん:2005/12/15(木) 11:25:09
>>468
一般大学の受業じゃ<stddef.h>なんてまずでてこないと思うぞ
ポインタを返す関数ってのもあまりやらないと思う
と、自大学基準で言ってみる
471デフォルトの名無しさん:2005/12/15(木) 11:30:22
見たこともない単語
472365:2005/12/15(木) 11:35:30
>>368
ありがとうございます。
473dai ◆U6.AsIbFBU :2005/12/15(木) 12:12:34
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):対称行列かどうかを調べる関数を定義しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2005年12月15日午後4時まで
[5] その他の制限:

口頭で与えられた問題なので、上手に問題を書けなくてすいません。
行列の内容などは自分で決めてプログラムを作成せよ、とのことです。

あまり、難しくならないプログラムをお願いします。
ポインタとかが入ってくると、あまり理解できないです。
よろしくお願いします。
474デフォルトの名無しさん:2005/12/15(木) 12:18:59
>>470
ポインタを返す関数をやらない?
どうしようもない大学だな。
#そうか、fopen()もstrcpy()も扱わないのか。
475デフォルトの名無しさん:2005/12/15(木) 12:28:54
[1] 授業単元:プログラミング応用
[2] 問題文:タイマーで今日が何の日なのかHPより情報を取得し表示する常駐ソフト
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] VC 6.0
 [3.3] 言語:C++のみ
[4] 期限: [2005年12月22日18:00まで]
[5] その他の制限:情報取得先はwww.nnh.toにしたいです

タスク管理に近いと思うのですが、先生が言うには常駐型のタスク管理なのですが(もしくは、タスクマネージャに近いソフト
でも、常駐ソフト化の方法がわかりません
アイコンを作成してクリック時に表示させたいのです
クリック時に動作するなら常駐でなくともかまいません
どうか、お願いいたします
476デフォルトの名無しさん:2005/12/15(木) 12:54:10
>>475
その手のプログラムはテストも面倒だし仕様も曖昧だからそのままではレスないぞ。
もう少し具体的に何をしたいか書くとか、いっそ初心者質問スレで方法だけ聞くとかした方がいい。

>>473
対称行列かどうかってどうやって判断するんだ?
行列は普段使わないから調べるのがめんどいのよ。

>>469
このスレか過去スレで似たようなプログラムがあるはずだから探して味噌。
477デフォルトの名無しさん:2005/12/15(木) 12:55:50
>>465
このスレのタイトルは読めますか?

>>467
時間計測プログラムを作ればいいの?
「ろだの1242の実行する」では何のことか判りませんが。
478デフォルトの名無しさん:2005/12/15(木) 12:58:06
>>466です。いろいろ調べたら理解できました。ありがとうございました。
本当に迷惑かけてすいません。
479デフォルトの名無しさん:2005/12/15(木) 13:12:46
>>476
基本的には、起動アイコンをクリックした時に決まったHPから情報を取得して表示するソフトをつくりたいのです
常駐とかは先生の説明なので無視可能です
480デフォルトの名無しさん:2005/12/15(木) 13:18:45
決まったHPはどこなんだよ
481デフォルトの名無しさん:2005/12/15(木) 13:19:27
ああこれか
www.nnh.to
482デフォルトの名無しさん:2005/12/15(木) 13:21:49
なんか使いにくいページの気がするが
今日なら
http://www.nnh.to/12/15.html
にアクセスしてこのページを表示すればいい訳ね
483デフォルトの名無しさん:2005/12/15(木) 14:43:50
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
typedef struct{double real;double img;}CPLX;
CPLX AddComplex(CPLX a, CPLX b){
CPLX ans;
ans.real = a.real + b.real;
ans.img = a.img + b.img;
return(ans);
}
上記をならい、複素数の絶対値を関数double AbsComplex(CPLX x);と
2つの複素数の積を関数値とする関数CPLX ProdComplex(CPLX a,CPLXb);
とともに動作テストのためのプログラムを作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月16日

全くの初心者なので、解説などのコメントも頂けると有り難いです。
何卒宜しくお願い致します。
484デフォルトの名無しさん:2005/12/15(木) 15:16:43
未解決の問題はどれ〜?
おじさんがなるべく簡単な解答書いてあげるよ〜。
485デフォルトの名無しさん:2005/12/15(木) 15:23:25
なんだと
486デフォルトの名無しさん:2005/12/15(木) 15:26:34
487デフォルトの名無しさん:2005/12/15(木) 15:31:50
>>473
ポインタ使わずにどうやって行列の問題を解けって?
できないことはないが非常に面倒くさい。配列使って外部の関数に
一切渡さずに全部main関数内で(ry
488デフォルトの名無しさん:2005/12/15(木) 15:38:30
積分してほしいのですが・・・・。
489デフォルトの名無しさん:2005/12/15(木) 15:50:21
>>488
>>1読め
490デフォルトの名無しさん:2005/12/15(木) 16:06:04
モンテカルロ法を用いて∫0〜3の1/3xの2乗を積分するソースを教えてください
491デフォルトの名無しさん:2005/12/15(木) 16:07:34
>>490
>>1読め
492デフォルトの名無しさん:2005/12/15(木) 16:10:02
>>1読めやボケが
493デフォルトの名無しさん:2005/12/15(木) 16:11:52
なんだこいつ
494デフォルトの名無しさん:2005/12/15(木) 16:12:45
おまえこそなんだ
偉そうに
495483:2005/12/15(木) 16:13:17
>>486
わかり難く書いてしまい申し訳御座いません。

記載されているプログラムがtypedefによる構造体型CPLXと
複素数の和を関数値とする関数AddComplexの例で、
この様な形式でdouble AbsComplex(CPLX x);と
CPLX ProdComplex(CPLX a,CPLX b);のプログラムを作成して欲しいのだと思います。

どなたか宜しくお願いします。
496デフォルトの名無しさん:2005/12/15(木) 16:13:48
ちょっとC言語ができるからって調子に乗るなよ
俺は天下の九州大学の学生なんだからお前らみたいなのは顎で使って最終的に切り捨ててやるよ
ははは
497デフォルトの名無しさん:2005/12/15(木) 16:15:19
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): 16進数を2進数に変換せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: C言語
[4] 期限: ([2005年12月15日17:00まで]
[5] その他の制限: 初心者です。
よろしくお願いします。
498デフォルトの名無しさん:2005/12/15(木) 16:16:29
九大落ちコンプ持ちの俺を虐めるな
499デフォルトの名無しさん:2005/12/15(木) 16:16:42
>>497
変換する必要がないじゃないか
500デフォルトの名無しさん:2005/12/15(木) 16:17:23
>>497
まず十進数に変換して、それから二進数に変換すればいいんだよ
それならできるだろ
501デフォルトの名無しさん:2005/12/15(木) 16:17:25
ごめんなさいどうやって質問していいかわかりませんでした。
出直してきます
502デフォルトの名無しさん:2005/12/15(木) 16:19:08
このスレにいるのは低学歴だけですから高学歴様は二度と来ないでください。
もちろん質問にも来ないでくださいね。
503デフォルトの名無しさん:2005/12/15(木) 16:23:31
>>495
>486に回答があるような希ガス。
504さっきの初心者:2005/12/15(木) 16:30:13
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
[3] 環境 モンテカルロ法を用いて∫0〜3の1/3xの2乗を積分するソースを教えてください
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0
 [3.3] 言語: C++
[4] 期限: 無期限
[5] その他の制限:2ch初心者

よろしくお願いします
505デフォルトの名無しさん:2005/12/15(木) 16:33:15
497です。
わからないです。
プログラム初心者なんです。
おねがいします。
506デフォルトの名無しさん:2005/12/15(木) 16:39:13
初心者にこんな問題は無理だ!って先生を叱ってやれ。
先生は無理難題を課すマゾなんだよ。
507483:2005/12/15(木) 16:40:35
>>503
ありました!

>>486
コメント付きのわかり易いプログラムを作成して頂き、有り難う御座いました。
実行、解答共に出来、助かりました。
508デフォルトの名無しさん:2005/12/15(木) 16:55:28
>>497
起動後、標準入力から16進数値を一回入力すると結果を出力する。
#include <stdio.h>
#include <stdlib.h>

int main()
{
printf("Input hexadecimal value(use 0-9a-f):");
char buf[100];
fgets(buf, sizeof(buf), stdin);
for (char * p = buf; !(*p == '\0' || *p == '\n'); ++p) {
int digit;
if (*p >= '0' && *p <= '9') {
digit = *p - '0';
} else if (*p >= 'a' && *p <= 'f') {
digit = *p - 'a' + 10;
} else {
fprintf(stderr, "Can't convert: illegal character?\n");
return EXIT_FAILURE;
}
printf("%.5s", & (digit * 5)["0000 0001 0010 0011 0100 0101 0110 0111 "
"1000 1001 1010 1011 1100 1101 1110 1111 "]);
}
return EXIT_SUCCESS;
}
509デフォルトの名無しさん:2005/12/15(木) 16:57:42
>>356

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1293.c

リストのクイックソートなんて関数プログラミングの基本だぞ。
と無茶苦茶言ってみる。
510デフォルトの名無しさん:2005/12/15(木) 16:58:11
>>508
せめてこのくらいにしとけば…
printf("%.5s", digit * 5 + "0000 0001 0010 0011 0100 0101 0110 0111 "
"1000 1001 1010 1011 1100 1101 1110 1111 ");
511デフォルトの名無しさん:2005/12/15(木) 17:02:27
>>506
回りくどいマゾだなあ
512デフォルトの名無しさん:2005/12/15(木) 17:07:11
[1] 授業単元: プログラミング演習
[2] リストのデータがすべて自然数であるリストAとリストBを作成し、(それぞれのデータはキーボードから入力するものとする)
 二つのリストの先頭のデータの値の、大きい方をリストCに格納し、
 次に二つのリストの二番目のデータの大きい方をリストCに格納し……を繰り返し、リストCを作り出して表示するプログラムを書け。
 ただし、リストAとリストBのデータの数はそれぞれ5つとする。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年1月10日
[5] その他の制限: 特に無し
513デフォルトの名無しさん:2005/12/15(木) 17:08:17
マゾってのは叱ってもらうまでの時間が焦らされてるようで快感らしいぜ
514デフォルトの名無しさん:2005/12/15(木) 17:09:47
[1] 授業単元:C言語U
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1294.txt
                 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1295.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC6.0
 [3.3] 言語:C
[4] 期限:2005年12月18日まで
[5] その他の制限:特に無いです

よろしくお願いします
515356:2005/12/15(木) 17:25:41
>>509
ありがとうございます。木でやっているようですが、これを参考に単方向リストnextでがんばってみます。
516デフォルトの名無しさん:2005/12/15(木) 17:30:18
[1] 授業単元:cプログラミング
[2]以下のコードを参考にしてナップザック問題を解く
プログラムを作成せよ。

for(s = 0; s <= knapsize; s++) maxsofar[s] = 0;
for(i = 0; i < n; i++){
for(s = size[i]; s <= knapsize; s++){
space = s - size[i];
newvalue = maxsofar[space] + price[i];
if(newvalue > maxsofar[s]){
maxsofar[s] = newvalue; newitem[s] = i;
}
}
}
printf("品目 価格\n");
for(s = knapsize; s >= smallest; s -= size[newitem[s]]);
printf("%4d %5d\n", newitem[s], price[newitem[s]]);
printf("合計 %5d\n", maxsofar[knapsize]);

[3] [3.1] linux [3.2] gcc [3.3] c
[4] 無期限
517デフォルトの名無しさん:2005/12/15(木) 17:41:51
>>497
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* to_radix_2(unsigned int x, char* s) {
    int index = 0, left = 0;
    char temp;
    do s[index++] = (x & 1) + '0'; while (x >>= 1);
    s[index--] = '\0';
    while (left < index) {
        temp = s[left];
        s[left++] = s[index];
        s[index--] = temp;
    }
    return s;
}
unsigned int from_radix_16(char* s) {
    unsigned int x = 0, i, len;
    for (i = 0, len = strlen(s); i < len; i++) {
        x <<= 4;
        x += isdigit(s[i]) ? s[i] - '0' : toupper(s[i]) - 'A' + 10;
    }
    return x;
}
int main(void) {
    char s1[256], s2[256];
    printf("Enter Number:"); scanf("%255s", s1);
    printf("%s(16) = %s(2)\n", s1, to_radix_2(from_radix_16(s1), s2));
    return 0;
}
51861,170:2005/12/15(木) 18:04:10
以前>>61,>>170でプログラムを作ってもらった者です。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1256.txt

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1273.txt
上記のプログラムを作ってもらったのですが、アルゴリズムがどうしてもわかりません。
それぞれどういう手順でIPを検出しているのでしょうか?
どなたか教えてください。お願いします。
またプログラム中にchar* やFILE*というものがよくでてくるのですが、これはポインタなのでしょうか?
本などではchar *p といったのはよくみるのですが、直接charに*がついたものを見たことがないので。。。
519デフォルトの名無しさん:2005/12/15(木) 18:18:13
>>518
char*と書いてもchar *と書いても同じ事。
520デフォルトの名無しさん:2005/12/15(木) 18:25:53
>>514 上のはこんなのでいいのかな
#include<stdio.h>
void change_uplow(char *str)
{
do {
if (*str >= 'A' && *str <= 'Z'){
*str += 'a' - 'A';
} else if (*str >= 'a' && *str <= 'z'){
*str -= 'a' - 'A';
}
} while(*str++);
}

int main(void){
char str[100];
printf("文字列を入力してください:");
scanf("%s",str);

change_uplow(str);
printf("%s\n", str);
return(0);
}
521518:2005/12/15(木) 18:48:07
指定先を間違えていました。
>>129>>170でIPアドレスを抜き出すプログラムを作成してもらったものです
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1271.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1273.txt



522デフォルトの名無しさん:2005/12/15(木) 18:54:53
>>504
本当にC++でいいんだな?
#include <cstdlib>
#include <ctime>
#include <iostream>
int main() {
    static const int trial_n = 10000;
    std::srand(static_cast<unsigned int>(std::time(0)));
    int count_in = 0;
    for (int i = 0; i < trial_n; ++i)
        if ((double)std::rand() / RAND_MAX < (double)std::rand() / RAND_MAX * 3 / 3) ++count_in;
    std::cout << 3. * count_in / trial_n << std::endl;
    return 0;
}
523デフォルトの名無しさん:2005/12/15(木) 19:10:48
>>514
/* 1294.txt */
#include <ctype.h>
#include <stdio.h>
void str_flip_uplow(char*str) {
    while (*str) {
        if (islower(*str)) *str = toupper(*str); else *str = tolower(*str);
        str++;
    }
}
int main(void) {
    char str[100];
    printf("文字列を入力してください:"); scanf("%s",str);
    str_flip_uplow(str);
    printf("結果:%s\n",str);
    return 0;
}
/* 1295.txt */
#include <stddef.h>
#include <stdio.h>
char * str_chr(const char *str,int c) {
    for (; *str; str++) if (*str == c) return (char*)str;
    return NULL;
}
int main(void) {
    char str[10], uletter[1024], *p1, *p2;
    printf("英文字列を入力してください:"); scanf("%1023s", uletter);
    printf("英文字列を入力してください:"); scanf("%9s", str);
    p1 = str_chr(uletter, str[0]); p2 = str_chr(uletter, str[1]) + 1;
    for (; p1 < p2; ++p1) putchar(*p1);
    return 0;
}
524デフォルトの名無しさん:2005/12/15(木) 20:00:18
[1] 授業単元:プログラミング演習U
[2] 問題文:
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/c/e_07-05-09.html

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:12/22まで
[5] その他の制限:プログラムも作成してください。

どなたかご教授お願いします。
525デフォルトの名無しさん:2005/12/15(木) 20:05:58
>>524
っていうかどうやって君の頭をemulateして考察をせよと。
526524:2005/12/15(木) 20:09:40
>>525
すいません、考察はいらないです。
プログラムのみお願いします。
527475:2005/12/15(木) 20:23:00
>>482
はいそうです
お願いいたします
528デフォルトの名無しさん:2005/12/15(木) 21:09:11
再帰的に考察するのか。
529デフォルトの名無しさん:2005/12/15(木) 21:12:51
また信州大か。
530デフォルトの名無しさん:2005/12/15(木) 21:41:07
信州大のテキストには

 分 か ら な け れ ば 2ch で 聞 け

と書いてあります
531デフォルトの名無しさん:2005/12/15(木) 21:51:25
>>486
ちょっと難しい日本語だけどなw
「手本にして」とかだろ
532デフォルトの名無しさん:2005/12/15(木) 21:56:07
典範的な日本語なら「上記にならい」だろ。
533デフォルトの名無しさん:2005/12/15(木) 22:20:51
534デフォルトの名無しさん:2005/12/15(木) 22:31:53
>>526
だからお前が考察しないとプログラムを作るのは無理。
アルゴリズムを考える→プログラムを作るっていう流れ。
535デフォルトの名無しさん:2005/12/15(木) 22:36:25
536デフォルトの名無しさん:2005/12/15(木) 22:58:06
[1] 授業単元:生産工学
[2] 問題文(含コード&リンク):
次の4点
(0,0),(1,0),(1,1),(0,1)
を順に通る3次のSPLINE曲線とそのグラフを描くプログラムを作成せよ。
始点と終点の接線の方向はそれぞれ(1,1)と(-1,0)とする。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラは何でもいいっていわれました
 [3.3] 言語: C
[4] 期限: 2005年12月10日まで
[5] その他の制限: プログラムリストとそれによってできたグラフを印刷して提出といわれますた。
            グラフのソフト等も特に制限はないそうです。

よろしくお願いします
537デフォルトの名無しさん:2005/12/15(木) 23:00:43
>>536
締め切り過ぎてますよ
538デフォルトの名無しさん:2005/12/15(木) 23:02:02
>>537
しまった

締め切りは22日でつ。
539デフォルトの名無しさん:2005/12/16(金) 00:33:52
すみませんが教えてください。よろしくお願いします。

[1] 授業単元:UNIXシステム概論B
[2] 問題コード:http://www.kita-wa.com/up_2/src/up0056.txt

問題文:提示したプログラム(シェル)を&&,&(バックグラウンド),>(リダイレクション)を盛り込め。

[3] 環境
 [3.1] OS:Red hat Linux 7.0以降
 [3.2] コンパイラ:コンパイラの指定は特になし
 [3.3] 言語:C
[4] 期限: 2005年12月19日 19:00
[5] その他の制限:追加、改変は自由。


教授曰く、そこまで深く考えなくても良いといわれましたが…。お手上げでしたorz
よろしくお願いします。
540デフォルトの名無しさん:2005/12/16(金) 06:04:12
>>536
ヒント:
プロット座標と幾何平面座標との相互変換式を利用
541デフォルトの名無しさん:2005/12/16(金) 07:39:04
>>539
// マーク付与
argv[argc] = NULL;

ここ argc = 4 のときメモリ壊すよ
542デフォルトの名無しさん:2005/12/16(金) 08:10:19
なんで信州大の課題はNGなんですか?
宿題なんだからどの質問だってどこかの大学か専門学校の課題だと思うんですけど。
543デフォルトの名無しさん:2005/12/16(金) 08:11:35
>>542
だれがNGと言った?

信州大の問題が多いなあって思ってるだけ。
544デフォルトの名無しさん:2005/12/16(金) 08:12:21
>>542
これまでの流れ的にNGになってる
545デフォルトの名無しさん:2005/12/16(金) 08:14:30
信州大の講義の資料があまりに酷いからNG
546デフォルトの名無しさん:2005/12/16(金) 08:21:49
未解決

>>473 2005/12/15 16:00 (期限切れ)
>>512 2006/01/10
>>516 ----/--/--
>>524 2005/12/22 (信州大)
>>536 2005/12/22
>>539 2005/12/19
547デフォルトの名無しさん:2005/12/16(金) 09:08:17
>>539
つーかwait.hって何よ?
548デフォルトの名無しさん:2005/12/16(金) 09:09:55
>>541
ソース構造の偽装か?!
たしかにUNIXのシェルとして明らかに強度不足な造りだと思う。
信州関係者は証人喚問だな。

>>542-545
講義の質が悪いのか学科生の質が悪いのか・・・どっちなんだ。
549デフォルトの名無しさん:2005/12/16(金) 09:18:43
>>512
リストの表現(構造体等)を指定してください
550デフォルトの名無しさん:2005/12/16(金) 09:27:27
うーん、平面曲線のスプライン補間はわかるが、端点で微分係数を
指定する方法がわからん・・・・・
551デフォルトの名無しさん:2005/12/16(金) 09:29:37
このスレ限定で信州大人気だなw
552デフォルトの名無しさん:2005/12/16(金) 10:00:34
講義の質が悪いのは目に見えて明らかだが、
学生の質もそれに比例して悪いようだな。
553デフォルトの名無しさん:2005/12/16(金) 10:06:15
信州の特産物って何?
それ食ってうまかったら回答してあげてもいいお(^ω^;)
554キングボンビー:2005/12/16(金) 10:12:49
二次方程式ax^2+bx+c をとくプログラムを作成せよ。
ただしa b cはそれぞれ任意の定数とする(なるべくは整数で)
a=0 とa=0でない場合に分ける。またa=b=0の場合は解なしと表示する
a=0でない場合は判別式Dを用いて実数解、虚数解、二重解にわけて解の公式を用いて
解を表示する

↑というプログラムを作りたいのですがC言語がまったくわかりません。
 誰か作ってくれませんか??
555デフォルトの名無しさん:2005/12/16(金) 10:14:29
>>554
テンプレ嫁
556キングボンビー:2005/12/16(金) 10:31:15
>>555 須磨祖 でなおしてきまつ
557デフォルトの名無しさん:2005/12/16(金) 10:45:19
>>548
>524で提示されている資料が、余りにも酷い。
例えば、char data[3]に対して「data と &data[0] は同じ意味です。」と書かれている。

>>551
それは「信州、大人気」なのか「信州大、人気」なのかどっちだ?w

>>553
林檎とか蝗とか野沢菜とか。信州大の辺りになにがあるかは知らん。
558デフォルトの名無しさん:2005/12/16(金) 10:45:49
>>550
「三次スプライン」ってのは三次式で区分的に補間してく方法ね.

三次式であって,始点と終点の値と微係数に縛りをつけると,曲線は一意に決定する.
それを順次計算していく方法を,三次スプラインという.詳しくは
http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal1/node16.html
559デフォルトの名無しさん:2005/12/16(金) 10:51:59
>>516
「参考にして」の意味がわからない.そのコード片に適当な main をつければ動作する気がするが?
560デフォルトの名無しさん:2005/12/16(金) 11:22:31
プログラムできなくてもホントは単位に関係ないんだろ? > 信州
561さっきの初心者:2005/12/16(金) 11:34:27
>>522申し訳ありません。もしかしたらCかもしれません。実行したらできなかったので。
お手数かけて申し訳ありません。
562デフォルトの名無しさん:2005/12/16(金) 11:51:43
563554:2005/12/16(金) 12:31:42

【質問テンプレ】
[1] 授業単元: 判別式の作成
[2] 問題文(含コード&リンク): 二次方程式ax^2+bx+c をとくプログラムを作成せよ。
ただしa b cはそれぞれ任意の定数とする(なるべくは整数で)
a=0 とa=0でない場合に分ける。またa=b=0の場合は解なしと表示する
a=0でない場合は判別式Dを用いて実数解、虚数解、二重解にわけて解の公式を用いて
解を表示する

[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: (不明)
 [3.3] 言語: (C)
[4] 期限: ([2006年1月8日まで] )
[5] その他の制限: (なし)
564デフォルトの名無しさん:2005/12/16(金) 13:30:04
>>559
mainを付けて欲しいんじゃね?
565初心者です・・・・:2005/12/16(金) 14:00:04
化学科で4ヶ月C言語を習っても、全く理解できませんでした(;;)
課題が私には難しすぎて、どうしようもできません。
よろしくお願いします。
[1] 授業単元: 計算機化学
[2] 問題文(含コード&リンク): Buffon の針の問題をMonte Carlo法によって解くプログラム(C++)を作れ。
 すなわち、間隔1の平行線を引き(線の巾は無視する)、上から無作為に長さ1の針を落とす。これを多数回繰り返したとき、針が線を跨ぐ確率は、2/πに等しい。
 このことを利用して、107 回試行を続けて行い、10回、100回、1000回….、107回ごとの値を出力せよ。
また、用いた計算機の名前と、107までの計算時間と、プログラム作成に要した時間も申告せよ。(回答例:計算機名:自宅パソコンIBM ThinkPad、計算時間:1分30秒、作成時間:正味約5時間)。
「ヒント・注意」など、
(1)第2回目のレポートの課題の(授業で示した)解答も参考にせよ。
(2)πを求めるのだから、入力にπの値を使ってはいけない。つまり角度を入力するようなプログラムは駄目である。
(3)結局、針の一方の端の位置は0〜1の間の、任意の(乱数!)1次元の値に還元される。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:分かりません・・・
 [3.3] 言語:C++
[4] 期限:12月18日
[5] その他の制限:本当に基礎の基礎しか習っていません・・・すみません。
566デフォルトの名無しさん:2005/12/16(金) 14:16:13
>>565
それ前にあったな。
そんで教官が当該スレの存在を認識しているはず。
567デフォルトの名無しさん:2005/12/16(金) 14:44:27
#include<stdio.h>
#include<math.h>

main()
{
int a, b, c;
int D;
double x1, x2;  /* xの2解  */
double p, q;   /* 複素数用 */

printf("a = ? ");
scanf("%d", &a);

printf("b = ? ");
scanf("%d", &b);

printf("c = ? ");
scanf("%d", &c);
568デフォルトの名無しさん:2005/12/16(金) 14:46:45
printf("\n");
if (a == 0)
{
if (b == 0)
  {
   printf("解なし\n");   /* 実際には c = 0 なら解あるけどね */
  }
   else
  {
   x1 = -(float)c / b;
   printf("x = %lg\n", x1);
  }
}
569デフォルトの名無しさん:2005/12/16(金) 14:48:52
else
{
  D = b * b - 4 * a * c;

  if  (D > 0)
{
  x1 = (-b + sqrt(D)) / (a * 2);
  x2 = (-b - sqrt(D)) / (a * 2);
  printf("x = %lg, %lg\n", x1, x2);
}
  else if  (D == 0)
{
  x1 = -(float)b / (a * 2);
  printf("x = %lg\n", x1);
}
  else
{
  p = -(float)b / (a * 2);
  q = (sqrt(-D)) / (a * 2);
  printf("x = %lg + %lgi, %lg - %lgi\n", p, q, p, q);
}
}
}
570デフォルトの名無しさん:2005/12/16(金) 15:04:32
インデントに失敗しました
571デフォルトの名無しさん:2005/12/16(金) 15:24:37
[2] 問題文(含コード&リンク):
長いので他所に書きました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1296

[3] 環境
 [3.1] OS:windows2000
 [3.2] borland c++
 [3.3] 言語: C
[4] 期限: 2005年12月18日
[5] その他の制限:なし
572デフォルトの名無しさん:2005/12/16(金) 15:26:31
>>524
・木構造にもいろいろあるが、どういう木なのか
・追加と挿入はどう違うのか
573デフォルトの名無しさん:2005/12/16(金) 16:06:30
ホップフィールドの課題なんですが、
ポインタと関数をつかって

W=1/K・(α=1からKまで)]α(]α)t
を実現せよ。

]α(]α)tは]ベクトルとその転置ベクトルの外積です
αはパターン数です。
力不足の自分がだめなんですがあと数時間のうちに終わらせないと
本当に危ないので誰か助けてください、お願いします・・・
574536:2005/12/16(金) 16:13:11
>>562

サンクスコ!!!
575536:2005/12/16(金) 16:20:45
>>540,550,558
サンクス子です!
576デフォルトの名無しさん:2005/12/16(金) 16:40:23
御礼も満足に言えないのか
577デフォルトの名無しさん:2005/12/16(金) 17:28:40
  printf("x = %lg ± %lgi\n", p, q);
のが良かったかな
578デフォルトの名無しさん:2005/12/16(金) 17:53:02
>>567-569

C99より前 : printfの書式指定に%lgを使った場合の動作は未定義
C99    : 関数の戻り型を省略した場合の動作は未定義
579536:2005/12/16(金) 18:04:52
>>562,540,550,558

すいません、有難う御座います。
580デフォルトの名無しさん:2005/12/16(金) 19:19:08
だったら%lfを使って
後C99って何だ
581デフォルトの名無しさん:2005/12/16(金) 19:40:06
%lfもC99より前では未定義
printfのdouble型の書式指定は%fか%eか%gだ。

>後C99って何だ
ぐぐれ
582デフォルトの名無しさん:2005/12/16(金) 19:47:18
シラネエよ
なんかの行番号か何かだと思ったんだよ
583デフォルトの名無しさん:2005/12/16(金) 19:53:40
あらあら うふふ。
584デフォルトの名無しさん:2005/12/16(金) 21:49:43
あらあら、無知って怖い。
585デフォルトの名無しさん:2005/12/16(金) 22:42:40
>>571
12
3

ahoaho
の意味がわからないのだが

はっきり言って
-------ここから
1\t10
2\t15
3\t12
:
:
n\t99
1\t20
2\t23
3\t27
:
:
n\tFF
-------ここまで
みたいなフォーマットでも要求されるデータコンバートに必要な情報はそろっている訳だが。
586デフォルトの名無しさん:2005/12/16(金) 23:06:47
>>571
私は次のように問題を解釈したが、あっているか?

『ノイズが入っているデータ列があり、全てのデータは必ず1行単位である。
書式は必ず次のようになっている。
求めるデータ:「(index=1つ以上の数字)(\t=タブ文字)(data=1つ以上の数字)」
ノイズ:「(求めるデータ以外の書式のデータ全て)」
求めるデータを各indexごとに整理し、データを「index\tdata\tdata\tdata…」の
形式に変形し、indexの昇順に整列してCSVという拡張子で保存する。』

補足:タブ区切りファイルは通常CSV(Comma-Separated Values)ではなく、TSV
(Tab-Separated Values)と呼ぶ。
587デフォルトの名無しさん:2005/12/17(土) 00:05:02
[1] 授業単元: 情報基礎U
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1301.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: Cのみでおねがいします。
[4] 期限: 2005、12、18まで
[5] その他の制限:コメントつけてもらえるとありがたいです。
よろしくお願いします。

588デフォルトの名無しさん:2005/12/17(土) 00:46:56
>>571
#!/bin/perl -w
use strict;
my %data;
while(<>){
  push @{$data{$1}}, $2 if /^(\d+)\t(\d+)/;
}
foreach(sort {$a<=>$b } keys %data){
  print "$_\t", join("\t", @{$data{$_}}), "\n";
}
589デフォルトの名無しさん:2005/12/17(土) 01:03:01
>>587
例がコンパイル通らないけど。NodePointerに勝手にkeyなるメンバの存在を
仮定していたりとか…
1から作ってくれってこと?
590デフォルトの名無しさん:2005/12/17(土) 01:54:29
>>589
その通りです。したの方に問題文と実行結果が書いてあります。参照してください。構造体のところです。
591デフォルトの名無しさん:2005/12/17(土) 03:05:07
>>590
ふざけんな
592デフォルトの名無しさん:2005/12/17(土) 03:10:15
ふざけているのはあなたです。
邪魔するなら書き込まなくて結構。
593デフォルトの名無しさん:2005/12/17(土) 03:11:30
よろしくお願いします
594デフォルトの名無しさん:2005/12/17(土) 04:06:45
わかったらさっさと答えを書き込め能無しどもめ。
595デフォルトの名無しさん:2005/12/17(土) 04:40:13
>>594
プギャー
596デフォルトの名無しさん:2005/12/17(土) 07:54:54
>>587
ロダ面倒なんでレス。自分でスペース・改行等は調整してくれ。仕様は満たしてるはず。
#include <stdio.h>
#include <stdlib.h>
#include "prog02.h"
int main(void) { int i; Record data = {"", 0, ""}; FILE* fp; printf("[Initial]\n"); head = make_1node(data, NULL); if( (fp = fopen("Student.dat", "r")) == NULL ) { printf("Error in opening the file \"Student.dat\"\n"); exit(6); }
while (fscanf(fp, "%s %d %s", data.name, &data.ID, data.class) == 3) { insert(data); } fclose(fp); listprint(); while (!feof(stdin)) { printf("Insert new data: (name ID class) -> ");
if (scanf("%s %d %s", data.name, &(data.ID), data.class) == 3) { if (insert(data) == NULL) { printf("Data %d is already on the list\n", data.ID); } listprint(); } } }
NodePointer insert(Record data) { NodePointer newnode; if (finditem(data.ID) == NULL) { newnode = make_1node(data, head->next); head->next = newnode; return newnode; } else { return NULL; } }
void listprint(void) { NodePointer n; printf("Head -\n"); for (n = head->next; n != NULL; n = n->next) { printf("%20s %10d %5s\n", n->data.name, n->data.ID, n->data.class); } }
NodePointer finditem(int data_id) { NodePointer n; for (n = head; n->next != NULL; n = n->next) { if (n->next->data.ID == data_id) { return n; } } return NULL; }
NodePointer make_1node(Record data, NodePointer p) { NodePointer n; if ((n = malloc(sizeof(struct node))) == NULL) { printf("Error in memory allocation\n"); exit(8); } n->data = data; n->next = p; return n; }
/*この行から下がprog02.h*/
typedef struct{ char name[20]; int ID; char class[5]; } Record;
typedef struct node *NodePointer;
struct node { Record data; NodePointer next; };
NodePointer insert(Record);
NodePointer finditem(int);
void listprint(void);
NodePointer make_1node(Record, NodePointer);
NodePointer head;
597554 as キングボンビー:2005/12/17(土) 09:43:19
>>567-569
SUNX!!
598デフォルトの名無しさん:2005/12/17(土) 11:14:42
>>597
SUNXは失礼だろうよ。>567に対しても企業に対しても。
599524:2005/12/17(土) 12:24:58
>>572
>木構造にもいろいろあるが、どういう木なのか
二分探索木です。すいません。

>追加と挿入はどう違うのか
追加と挿入は同じ意味です。すいません。
600あき:2005/12/17(土) 13:43:52
何でもいいから、プログラムを作って来いという宿題が出ました。
プロジェクト Win32 Console Application
ファイル C++ ソースファイル
を使えとのことです。
すみませんが、力をかしてください。
601デフォルトの名無しさん:2005/12/17(土) 13:46:40
>>600
int main() {}
602あき:2005/12/17(土) 13:49:28
わー簡単!!
って、おい!!
もっと長いほうが好きかな?

603デフォルトの名無しさん:2005/12/17(土) 13:50:11
int main() {return main();}
604あき:2005/12/17(土) 13:53:30
長くなった!!
って、おい!!
同じパターン!!
言い方が悪かったです。
素直に、100行以上のをお願いいたします。

605デフォルトの名無しさん:2005/12/17(土) 13:55:54
>>604
ウザイ('A`)
最低でもテンプレに従え。
606デフォルトの名無しさん:2005/12/17(土) 14:00:26
適当にvector当たりのヘッダーをコピペしろよ
楽に数千行いくぜ
607あき:2005/12/17(土) 14:03:26
すいません。調子に乗りすぎました
[1] 授業単元:計算機
[2] 問題文(含コード&リンク):プログラムを作ってきなさい。(100行以上)
[3] 環境
 [3.1] Windows XP 
 [3.2] コンパイラ名とバージョン:Visual C++
プロジェクト Win32 Console Application
ファイル C++ ソースファイル

 [3.3] 言語:C++
[4] 期限:すぐにでも。
[5] その他の制限: 初心者でもわかりやすいプログラム。
608デフォルトの名無しさん:2005/12/17(土) 14:11:29
>>607
囚人のジレンマのしっぺ返しアルゴリズムでも作っとけ
609デフォルトの名無しさん:2005/12/17(土) 14:13:10
>>607
Visual C++って制限があるのか・・・・・
俺はgccだから、力になれんな。残念でした。
610デフォルトの名無しさん:2005/12/17(土) 14:47:07
>>599
ロダ面倒なんでレス。自分でスペース・改行・命名・プロトタイプ・インクルード等は調整してくれ。仕様は満たしてるはず。
void*malloc(),free(); typedef struct N N;struct N{int i;N*l;N*r
;};int a(N**r,int i) {if(*r){if(i<(*r)->i)return a(&(*r)->l,i);
if((*r)->i<i) return a(&(*r)->r,i);return 0;}*r=malloc(sizeof(N
)); (*r)->i=i;(*r)->l=(*r)->r=0;return 1;}void o(N**r){N*t=(*r)
->l; (*r)->l=(*r)->l->r;t->r=*r;*r=t;} N*d(N**r,int i) {if(!*r)
return 0; if (i < (*r)->i) return d(&(*r)->l, i); if((*r)->i<i)
return d(&(*r)->r,i); if(!(*r)->l) {N*e=*r;*r=(*r)->r;return e;
}o(r); return d(&(*r)->r,i);}void l(N*r){if(r){l(r->l);l(r->r);
free(r);}} int printf(),scanf(),puts();void i(N*r) {printf("(")
;if(r){ i(r->l); printf(" %d ", r->i); i(r->r); } printf(")");}
int main(){N*r=0;int v;while (printf("number>"),scanf("%d", &v)
==1){if(!a(&r,v)){free(d(&r,v));}i(r);puts("");}l(r);return 0;}
611デフォルトの名無しさん:2005/12/17(土) 15:36:08
612デフォルトの名無しさん:2005/12/17(土) 15:43:38
>>611
ワロタ
613512:2005/12/17(土) 16:28:06
>>549
一方向リストにせよとのことです。
614デフォルトの名無しさん:2005/12/17(土) 16:35:27
#include <iostream>

int main()
{
  std::cout << "Hello Work!\n";
}
615デフォルトの名無しさん:2005/12/17(土) 16:46:23
>>613
ハイハイ。後から条件追加厨は逝ってよし。
616デフォルトの名無しさん:2005/12/17(土) 17:21:27
[1] 授業単元:プログラム言語演習
[2] 問題文(含コード&リンク): scanf関数を使用し、コマンドラインからの数字を2つ入力し、四則演算、剰余算、及び論理和、論理積を求め、それぞれ出力しなさい。
また、それぞれの変数を、int型、float型、double型にした場合の演算結果の違いを確認しなさい。
(確認する際は、標準関数を使用し、型変換を行いなさい。)
※小数点以下が入力できるようにする事。
※入力桁数のエラーについて対処する事。

[3] 環境
 [3.1] Windows XP 
 [3.2] コンパイラ名とバージョン:Cpad for LSI C-68 Version 2.31
 [3.3] 言語:C言語
[4] 期限:すぐにでも。
[5] その他の制限: 特にありませんが、初心者が読んで少し考えるくらいでわかるようなものをお願いします。
617デフォルトの名無しさん:2005/12/17(土) 17:31:50
期限を書けやボケ
618616:2005/12/17(土) 17:38:30
>>617
わかりました。
では期限は2005/12/17 19:00迄でおねがいします。
619デフォルトの名無しさん:2005/12/17(土) 17:48:37
>>618
わかりました。料金は壱万円になります。
620デフォルトの名無しさん:2005/12/17(土) 17:52:18
>>616
int型はともかくとして、
float,doubleの論理和、論理積はどないすれば良いんでしょう?
621デフォルトの名無しさん:2005/12/17(土) 17:54:10
>>598
ありがとうございました。あとそのプログラムに入力した名前とIDとクラスを削除する関数を付け加えてほしいのですけど。たぶん、最初にスキャンしたファイルのノードが一致したなら消すみたいな処理になるとおもわれるんですけど?
622デフォルトの名無しさん:2005/12/17(土) 17:55:30
>>621
>>1を読んだか?
623616:2005/12/17(土) 17:57:51
>>620
私はまだ素人でよくわからないのですが、float型とdouble型で論理和、論理積が求められない場合はスルーしても良いかと思います。
624デフォルトの名無しさん:2005/12/17(土) 18:00:38
0に偽、それ以外に真を対応させとけばいいんじゃない?
なんかあんまりスマートじゃないけど
625620:2005/12/17(土) 18:04:34
>>623
とりあえず論理和,積はboolにしといた。
改行は適宜しといて
--int
#include<stdio.h>
main(){int a,b;scanf("%d %d",&a,&b);
printf("a+b=%d\na-b=%d\na*b=%d\na/b=%d\na%%b=%d\na&&b=%d\na||b=%d\n",
a+b,a-b,a*b,a/b,a%b,a&&b,a||b);}
--float
#include<stdio.h>
#include<math.h>
main(){float a,b;scanf("%f %f",&a,&b);
printf("a+b=%f\na-b=%f\na*b=%f\na/b=%f\na%%b=%f\na&&b=%d\na||b=%d\n",
a+b,a-b,a*b,a/b,fmod(a,b),a&&b,a||b);}
--double
#include<stdio.h>
#include<math.h>
main(){double a,b;scanf("%lf %lf",&a,&b);
printf("a+b=%f\na-b=%f\na*b=%f\na/b=%f\na%%b=%f\na&&b=%d\na||b=%d\n",
a+b,a-b,a*b,a/b,fmod(a,b),a&&b,a||b);}
626620:2005/12/17(土) 18:08:40
あーエラー処理忘れてた。
scanfの戻り値が2以外だったらエラーと表示するようするのと、
bがゼロだったらエラーと表示するように適当に書き加えといて
627デフォルトの名無しさん:2005/12/17(土) 18:10:08
>>624

スマートじゃないも何もないだろ
論理的OR演算子と論理的AND演算子の仕様は
真だの偽だのは関係なくて
あくまで0との比較で結果を決めるというものなんだから。
628デフォルトの名無しさん:2005/12/17(土) 18:25:12
>>627
いやまあ演算子の仕様からいくとそうなんだけどね
double型の変数に論理演算を入れるという行為自体が
あんまりスマートじゃないと思ったわけです
非整数の論理演算を有効に使ってる例がすぐには思いつかなかったんで・・
629616:2005/12/17(土) 18:25:14
>>620,>>625,>>626
せっかく書いていただいたのに申し訳ないのですが、これはそれぞれの型で別々にプログラムを書いてますよね?
問題文では、『確認する際は、標準関数を使用し、型変換を行いなさい。』とあり、このままじゃ駄目かと思うのですが…
630デフォルトの名無しさん:2005/12/17(土) 18:28:02
>>629
なんだとう!タダで書いてやったのに文句付ける気か。
631デフォルトの名無しさん:2005/12/17(土) 18:40:57
>>629
標準関数を使用し、型変換を行うってのがイマイチ意味が理解できないんだけど。
どういう意味でしょうか?
型変換するのに標準関数は使いませんですし。
632616:2005/12/17(土) 18:51:03
>>631
私にもわからないのです。
一体どうすればいいのやら……
633デフォルトの名無しさん:2005/12/17(土) 18:59:02
>>475
スルーされてるなw
まあ、22日までだしな
とりあえず、毎日分のURL打ち込んだら?
そこから、時間取得して、同じ日のHP表示を行うやつか、、、
exeでまとめるとまずい?
634デフォルトの名無しさん:2005/12/17(土) 20:04:27
[1] 授業単元:アルゴリズムと構造論
[2] 問題文(含コード&リンク):
問題文:以下のプログラムを単語区切りによるカウントからアルファベット区切りになるように改良しなさい。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1303.txt

[3] 環境
 [3.1] OS: Linux Red Hat 9.0
 [3.2] コンパイラ方式 gcc -wall -ansi
 [3.3] C言語
[4] 期限: 2005年12月20日 18:00
[5] その他の制限:特になし

どなたかご教授ください。よろしくお願いします。
635デフォルトの名無しさん:2005/12/17(土) 20:24:07
>>597
訂正
floatをdoubleに直しといて
636デフォルトの名無しさん:2005/12/17(土) 20:58:58
未解決

>>512 2006/01/10
>>516 期限なし
>>524 2005/12/22
>>536 2005/12/22
>>539 2005/12/19
637デフォルトの名無しさん:2005/12/17(土) 21:03:17
なんか最近いい流れだな。
未解決リストがあるとわかりやすい。
638デフォルトの名無しさん:2005/12/17(土) 21:07:08
>>585-586さん
カメレスすいません。
33-232行目の二列と352-551行目の二列が必要となるデータ部分に相当します。

12
3

ahoaho

はDate of Receiving :とか 9.54534827765288E-0321とかの
必要の無い文字列or数値が入っているので記載しました。
実際にサンプルデータをローダのほうにうpしましたのでよろしければプログラムお願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1296

CSVとTSVの件指摘ありがとうございました。
639539:2005/12/17(土) 21:12:37
提出率が悪く、延期の連絡(Web掲示)がありました。

改めて、皆様方のご教授をよろしくお願いします。


[1] 授業単元:UNIXシステム概論B
[2] 問題コード:http://www.kita-wa.com/up_2/src/up0056.txt

問題文:提示したプログラム(シェル)を&&,&(バックグラウンド),>(リダイレクション)を盛り込め。

[3] 環境
 [3.1] OS:Red hat Linux 7.0以降
 [3.2] コンパイラ:コンパイラの指定は特になし
 [3.3] 言語:C
[4] 期限: 2005年12月21日 23:00
[5] その他の制限:追加、改変は自由。
640デフォルトの名無しさん:2005/12/17(土) 21:20:39
641デフォルトの名無しさん:2005/12/17(土) 21:26:50
>>512
リストってのはデータ構造をリストにするってこと?それとも配列を
使ってもいいの?
642デフォルトの名無しさん:2005/12/17(土) 21:31:55
643641:2005/12/17(土) 21:52:28
失礼
644デフォルトの名無しさん:2005/12/17(土) 21:53:21
許さん。
645デフォルトの名無しさん:2005/12/17(土) 21:53:53
>>634
"アルファベット区切り"でぐぐると4件しかヒットしないがそれなんて用語?
646デフォルトの名無しさん:2005/12/17(土) 22:01:01
>>645

今のプログラムだと、ファイルを読みこんで単語リストを生成するんです。
それを単語ではなく、アルファベットごと(aが6文字…etc)となるように
すればよいのだと思うのですが…お願いします。
647デフォルトの名無しさん:2005/12/17(土) 22:23:42
>>646
#include <stdio.h>
#include <ctype.h>
char count[('z'-'a'+1) * 2];
int ReadAlpha(FILE *fp){
  int ch;
  while(EOF != (ch = fgetc(fp))){
    if( !isalpha(ch) )
      continue;
    if( islower(ch) )
      count[ch - 'a']++;
    else
      count[ch - 'A' + ('z' - 'a' + 1)]++;
  }
  return 1;
}
648デフォルトの名無しさん:2005/12/17(土) 22:25:38
649名無し:2005/12/17(土) 22:41:56
[1] 授業単元:データタイプ・スタック
[2] 問題文:入力:(,),{,},[,]の3種類の括弧始めと括弧終わりが沢山含まれた数式を文字列として入力する。
処理:データタイプ・スタックを使って括弧始めと括弧終わりに過不足がないかチェックする。
出力:括弧に過不足がなければ"G"、過不足がある場合は多い括弧と多すぎる数を出力。
説明:データタイプ・スタックの関数push、関数popを配列で実現し、関数push、関数popを使って括弧の過不足をチェックせよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2005年12月20日12:00まで]
[5] その他の制限:特にありません
よろしくお願いいたします。
650デフォルトの名無しさん:2005/12/17(土) 22:43:47
>>649
括弧のずれ,たとえば ( [ ) ] に対する出力は?
651デフォルトの名無しさん:2005/12/17(土) 22:59:03
テスト
652名無し:2005/12/17(土) 22:59:31
>>650
問題にはそのような場合に対しての対処法はなにものってません。
どのようにしたら よいプログラムになりますか?
653デフォルトの名無しさん:2005/12/17(土) 23:20:31
[1] 授業単元: 情報基礎U
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1307.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: Cのみでお願いします。
[4] 期限: 2005、12、19、19:00まで
[5] その他の制限: コメントつけていただくとありがたいです。
よろしくお願いします。


654デフォルトの名無しさん:2005/12/17(土) 23:22:24
>>652
「括弧の始めと終わりが対応していません」とメッセージを出すのが適当じゃない?
655634:2005/12/17(土) 23:24:22
>>645様,>>647

大変申し訳ありません。実はプログラムリストが落ちていました...。
以下が正しいプログラムリストです。再度、ご教授いただけないでしょうか。
よろしくお願いいたします。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1308.txt
656名無し:2005/12/17(土) 23:34:17
>>654の方法でおねがいします。
657641:2005/12/18(日) 00:58:34
658641:2005/12/18(日) 01:27:41
すまん、main()の最後にreturn 0;付けといてくれ。
659デフォルトの名無しさん:2005/12/18(日) 02:32:25
>>649
質問:
 (1) pop()、push()の引数や戻り値に関して指定は何もない?
 (2) スタックには、値を返しつつpopする流派と、topの値を得る関数とpopのみする
  .   関数に分ける流派とがある。どっち?
660デフォルトの名無しさん:2005/12/18(日) 02:55:55
>>659
Cなんだから(2)は値を返しつつpopした方が見通しがいいんじゃない?
661デフォルトの名無しさん:2005/12/18(日) 03:14:11
>>660
それは分かるんだが、そうするとエラー処理が面倒くさくなって。
662デフォルトの名無しさん:2005/12/18(日) 03:15:47
例外安全性なぞ無視してassert。これに限る。
663デフォルトの名無しさん:2005/12/18(日) 05:03:25
みんなの連携無視プレイに笑った
475かわいそうなやつだ
664デフォルトの名無しさん:2005/12/18(日) 05:10:02
>>663
そういえば未解決リストにも入ってないな。
だれか宿題登録・未解決宿題検索DBをCで作る香具師はおらんか。
665デフォルトの名無しさん:2005/12/18(日) 09:22:17
[1] 授業単元:プログラム演習U
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1310.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:2005年12月19日3:00まで
[5] その他の制限:特に無し

よろしくお願いします
666デフォルトの名無しさん:2005/12/18(日) 09:51:25
>>665
足し算の評価順序は決められていないので、再起呼び出しの順序は未定義
667デフォルトの名無しさん:2005/12/18(日) 10:42:03
>>666
評価順序が未定義なのは事実だけど、
>>665の場合はどちらが先でも問題ないのでは?
668667:2005/12/18(日) 10:43:37
ってスマン。評価順序を説明する問題なのか。
確かに無茶な質問ですね。
669デフォルトの名無しさん:2005/12/18(日) 10:46:59
2通りに分けて説明すればいいんじゃね
670デフォルトの名無しさん:2005/12/18(日) 11:00:19
>>669
評価順序が固定されてるとも限らない 極端な話,秒の下1桁の偶奇で左右評価を切り替えても仕様に反さない
ので、場合わけは 2 通りどころか 2^n とおり。
671名無し:2005/12/18(日) 11:58:06
>>659
どちらがいいかあまりわかりませんので、やりやすいほうでお願いします。
672デフォルトの名無しさん:2005/12/18(日) 12:06:19
[1] 授業単元: プログラム言語
[2] 双方向リストのプログラムの実装。関数insert、remove_nodeを下記のmain関数で実行できるように実装しなさい。ただし、insertはリストの任意の場所にノードを追加、remove_nodeは任意の場所のノードを削除できるものとする。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1311.txt
[3] 環境
 [3.1] WinXP
 [3.2] Visual Studio.NET 2003
 [3.3] C
[4] 期限: 2006年1月10日23:59
[5] 一応、insert関数は出来たのですが、remove_node関数が出来ません。一応main関数等は変更しないようお願いします。
でも、もしこのmain関数で実装が不可能な場合(もしかしたら、先生が間違っているかもしれないので)は変更していただいてかまいません。
よろしくお願いします。
673512:2005/12/18(日) 12:08:07
>>657
本当にありがとうございます。
もの凄く助かりました。
674デフォルトの名無しさん:2005/12/18(日) 12:37:07
宿題じゃなくて仕事を質問しても良いでしょうか?
NECソフト部の新入社員の者なんですが…
675デフォルトの名無しさん:2005/12/18(日) 12:46:17
質問ではなく丸投げをする限りにおいて、
何を依頼しようが勝手です。
676デフォルトの名無しさん:2005/12/18(日) 13:12:16
>>670
再帰なんだからコンパイル時にどちらの関数が先に評価されるかは確定するだろ?
実行時に切り替わってるわけじゃあるまいし、2通りでいいと思われ。
677デフォルトの名無しさん:2005/12/18(日) 13:17:35
>>676
>>670は理念の話をしてるんだと思うが。
678デフォルトの名無しさん:2005/12/18(日) 13:33:59
>>676
実装レベルの話なら、最適化が入ってループを変形する可能性も考えると、2通りとは言えない。
理論レベルなら>>670のように2^nの組み合わせが考えられる。

いずれにせよ情報が足り無すぎて現段階では答えを出すのは不可能
679デフォルトの名無しさん:2005/12/18(日) 13:45:16
680デフォルトの名無しさん:2005/12/18(日) 14:29:11
[1] 授業単元: プログラム演習
[2] 標準入力から空白を含まない英文字を入力し、この文字列中に使用されている
アルファベットの種類とその使用回数を表示するプログラムを作成せよ。
ただし、大文字と小文字の区別はせず、使用回数が0回の文字は出力しない。
また、プログラムにおいて使用回数を求める際には文字種ごとに別々の選択機構を適用
するようなことはせず、文字コードの並びに着目し、配列を用いて効率のよい処理を心がけよ。
[3] 環境
 [3.1] Unix
 [3.2] gcc
 [3.3] C
[4] 期限: 2006年12月19日12:00
[5] 配列の復習、ということで出されましたがお手上げでした・・・。
よろしくお願いします。
681デフォルトの名無しさん:2005/12/18(日) 14:47:48
>>680
その調子だと課題の後半もここでききそうだなw

カウント方法は前回の度数分布表の考え方に似てるんだけどさ、
小文字と大文字にわけて考えると、きっとわかるはずだよ。

それとそれの差があれになることに気づければ早い。

自力で頑張って欲しいな
一応取り組んでるから、考えもせずコピーしてだすやつよりはいいんだけど。

きっと他の人が片付けてくれちゃうんだろうなぁ
682デフォルトの名無しさん:2005/12/18(日) 15:19:33
[1] 授業単元: 構造体
[2] 問題文:分数を表す構造体を定義し、それを要素とする配列を宣言する。次にその配列に標準入力から分数の分母と分子を読み込む。そしてその配列を分数の値の小さい順にソートするプログラムを作成せよ。
ただし、入力する分数は3つ。分数は正とする。
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: CMachine
 [3.3] 言語: (C言語)
[4] 期限: 明日
[5] 大体一通りやりました。覚えてるかどうかは別ですが・・・
683デフォルトの名無しさん:2005/12/18(日) 15:21:24
682ですが、よろしくお願いします。
684デフォルトの名無しさん:2005/12/18(日) 15:28:33
>>680

#include <stdio.h>
#include <ctype.h>

#define BUFFER_SIZE 1024

int main( int argc, char **argv )
{
char buf[BUFFER_SIZE];
unsigned counts[ 'Z' - 'A' + 1 ];
char *p;
int i;

for ( i = 0; i < sizeof(counts)/sizeof(counts[0]); ++i )
counts[i] = 0;

while ( fgets( buf, sizeof(buf), stdin ) )
for ( p = buf; *p; ++p )
if ( isalpha(*p) )
++counts[ toupper(*p) - 'A' ];

for ( i = 0; i < sizeof(counts)/sizeof(counts[0]); ++i )
if ( counts[i] )
printf( "%c occurred %d times.\n", i+'A', counts[i] );

return 0;
}
685デフォルトの名無しさん:2005/12/18(日) 15:37:17
>>682
#include<stdio.h>
#include<stdlib.h>
typedef struct{
    int molecule;
    int denominator;
} rational;
int compare_rational(const void*a,const void*b){
    rational*pa = (rational*)a,*pb = (rational*)b;
    return pa->molecule * pb->denominator - pa->denominator * pb->molecule;
}
int main(){
    rational a[3];int i;
    for(i=0;i<3;++i) scanf("%d %d",&i[a].molecule,&i[a].denominator);
    qsort(a,3,sizeof(rational),compare_rational);
    for(i=0;i<3;++i) printf("%d/%d ",i[a].molecule,i[a].denominator);
    return 0;
}
686デフォルトの名無しさん:2005/12/18(日) 15:48:23
[1] 授業単元:プログラミング演習U
[2] 問題文: 標準入力から数値を読み込み表にして出すプログラム
(結果例)
度数|個数
-----------
0-1 | +++
1-2 | ++
2-3 | none

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:12/20まで
[5] その他の制限:C言語を始めて3ヶ月の人にもわかるようなもの+#includeは<stdio.h>のみ
687デフォルトの名無しさん:2005/12/18(日) 15:48:32
>>653
誰かお願いします。
問題といてあげてください。
688デフォルトの名無しさん:2005/12/18(日) 15:50:34
>>685
分数の分子は numerator
molecule だと化学の分子になる
689デフォルトの名無しさん:2005/12/18(日) 15:51:15
[1] 授業単元: プログラミング演習U
[2] 問題文:学生番号(3桁の整数)、氏名(アルファベットで姓のみ)、身長,体重,肥満度のメンバ(いずれも浮動小数点数)を加えた構造体を新たに定義する.
また,あらかじめ5名分の学生番号と氏名のデータ(任意、実際の学生番号と一致する必要は全くない)で初期化しておく.まず,この5名のデータにキーボードから身長[m],体重[kg]のデータ(任意)を入力する.
次に,個人ごとの構造体データへのポインタを受け取り,身長,体重から肥満度[%] を計算する関数を作成し,その関数を用いて各人の肥満度を表示するプログラムを作成しなさい.
ただし,肥満要注意の人(肥満度30%以上)には,任意の注意マークをつけること.肥満度は次の式で計算され,0%のとき標準体重,正の値は肥満型,負の値は痩せ型を表わす(BMI (Body Mass Index)の計算式より).
肥満度[%] = {体重/(身長×身長×22)}×100−100
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: Visual C++ 6.0
 [3.3] 言語: (C言語)
[4] 期限: 今日中
[5] お願いします
690デフォルトの名無しさん:2005/12/18(日) 15:54:36
>>688
そうなのか、指摘ありがとう。
こういうミスすると自分の英語力の無さに呆れる......orz
691デフォルトの名無しさん:2005/12/18(日) 16:01:33
>>685
レスありがとうございます。あの、1つ質問なんですが include<stlib.h>というのを始めて見たんですが何でしょうか・・?
学校のテキストを見たんですが載っていませんでした。これを使わずにプログラムは組めるんでしょうか?質問ばかりですいません・・・。
692デフォルトの名無しさん:2005/12/18(日) 16:05:00
>>681
なるべくは自分で考えようとしているのですが、なかなか期限中に
終わらないもので・・・。1つ1つの課題に時間を掛けすぎてしまっているようです。

>>684
回答ありがとうございます。
お手数なのですが
#include <ctype.h> 、#define BUFFER_SIZE 1024
を使用しないプログラムもご教授願えないでしょうか?
693デフォルトの名無しさん:2005/12/18(日) 16:09:09
>>685
>>691の学校のテキストとは明快C言語入門編です。
694デフォルトの名無しさん:2005/12/18(日) 16:11:48
>>672
先頭と終端のノードを削除するとmain関数が落ちるので、
その部分を回避する修正をしてみた。
あとremove_nodeの戻り値も変えた。

リストに存在しないポジションを削除指定されたときにリストの総数が
おかしくなる不具合があるけどw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1312.txt
695685:2005/12/18(日) 16:17:58
>>691
えーとstdlib.hを使ってないのに>>682で一通りやったとか言うのはどうかと。
まぁ良いや。stdlib.hはクイックソートをする関数を利用するために使いました。
とりあえず、stdlib.hの代わりに適当にソートしたらこんな感じ。

#include<stdio.h>
typedef struct{
    int numerator;
    int denominator;
} rational;
int main(){
    rational a[3];int i,j;
    for(i=0;i<3;++i) scanf("%d %d",&i[a].numerator,&i[a].denominator);
    for(i=0;i<3;++i)
        for(j=i;j<3;++j)
            if(a[i].numerator * a[j].denominator > a[j].numerator * a[i].denominator){
                rational c=a[i];a[i]=a[j];a[j]=c;
            }
    for(i=0;i<3;++i) printf("%d/%d ",i[a].numerator,i[a].denominator);
    return 0;
}

696デフォルトの名無しさん:2005/12/18(日) 16:20:30
697デフォルトの名無しさん:2005/12/18(日) 16:25:45
>>692
#include <stdio.h>
int isalpha( int c )
{
if ( ( 'A' <= c && c <= 'Z') || ( 'a' <= c && c <= 'z' ) )
return 1;
return 0;
}
int toupper( int c )
{
if ( 'a' <= c && c <= 'z' )
c += 'A' - 'a';
return c;
}
int main( int argc, char **argv )
{
char buf[ 1024 ];
unsigned counts[ 'Z' - 'A' + 1 ];
char *p;
int i;
for ( i = 0; i < sizeof(counts)/sizeof(counts[0]); ++i )
counts[i] = 0;
while ( fgets( buf, sizeof(buf), stdin ) )
for ( p = buf; *p; ++p )
if ( isalpha(*p) )
++counts[ toupper(*p) - 'A' ];
for ( i = 0; i < sizeof(counts)/sizeof(counts[0]); ++i )
if ( counts[i] )
printf( "%c occurred %d times.\n", i+'A', counts[i] );
return 0;
}
698デフォルトの名無しさん:2005/12/18(日) 16:37:57
>>672
暇だったんで>>694記載の不具合直してみますた。
またもやmainとremove_node変更。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1316.txt
699デフォルトの名無しさん:2005/12/18(日) 16:46:06
>>695
>>696
レスありがとうございます。すいません・・。一応本を一通りやったので、そのような発言をしてしまいました。
すいません。わからない点があるので、お二人のプログラムを参考にしてもう1度調べて作ってみます。もし、それでも
不明な点があったら質問していいでしょうか? 
700デフォルトの名無しさん:2005/12/18(日) 16:58:46
>>697
有難うございました。

続けて質問で申し訳無いのですが
int main( int argc, char **argv )
は定義しても使用していないように見えるのですが・・・
701デフォルトの名無しさん:2005/12/18(日) 17:02:56
>>700
その行は int main( void ) でもいいよ。
でも普通何となく int main( int argc, char **argv ) って書かない?
C言語の仕様だからこう書いても問題ないと思うよ。
702>>654 = >>659:2005/12/18(日) 17:03:14
703デフォルトの名無しさん:2005/12/18(日) 17:04:40
>>701
即レス有難うございました。
しっかり理解してから提出させていただきます!
704デフォルトの名無しさん:2005/12/18(日) 17:06:41
>>701
最近
int main( ) { で始まるのが流行りらしい
705デフォルトの名無しさん:2005/12/18(日) 17:11:48
>>704
流行りとかあるんだ (笑)
個人的には関数名書いてある行に { が書いてあるの気持ちわるい
まぁ void main() とかよりはましだけど。
706デフォルトの名無しさん:2005/12/18(日) 17:14:02
int main()はC++じゃないか?
Cでも許容されてることは確かだが。
707デフォルトの名無しさん:2005/12/18(日) 17:20:12
C と C++ で main 関数に違いがあるの?
言われてみれば Java だと func( void ) みたいなのはエラーになるから
int main(void) じゃなく int main() が流行ってるっていうのは分かるな
708デフォルトの名無しさん:2005/12/18(日) 17:20:38
>>701
Cの仕様ではint main(void)とint main(int argc, char **argv)のどちらでもよいとなっている。
それに加えそのた処理系定義の方式でも良いとあってvoid main(はこれに該当する。
709デフォルトの名無しさん:2005/12/18(日) 17:32:48
>>708
ホントに? Ansi だと main の返り値は int でなくてもint 互換じゃないと
ダメじゃなかったっけ? これまで「void main() 許すまじ」で生きてきたん
だけど…。
710デフォルトの名無しさん:2005/12/18(日) 17:32:57
>>707
()が(void)の意味になるのはC++の仕様なんだけどね。
C99ではどうなんだっけ?
711デフォルトの名無しさん:2005/12/18(日) 17:36:45
>>689
#include <stdio.h>
typedef struct gakusei_tag {
    int bango;
    char shimei[64];
    double shincho;
    double taiju;
    double himando;
} gakusei;
double himando(gakusei *p) {
    return (p->taiju / (p->shincho * p->shincho * 22)) * 100 - 100;
}
int main(void) {
    gakusei g[5] = {{1, "a"}, {2, "b"}, {3, "c"}, {4, "d"}, {5, "e"}};
    int i;
    for (i = 0; i < 5; i++) {
        printf("%3d,%s:", g[i].bango, g[i].shimei);
        scanf("%lf%lf", &g[i].shincho, &g[i].taiju);
        g[i].himando = himando(&g[i]);
    }
    for (i = 0; i < 5; i++) {
        printf("%3d,%s,height:%f,weight,%f,degree of obesity:%f", g[i].bango, g[i].shimei, g[i].shincho, g[i].taiju, g[i].himando);
        if (g[i].himando >= 30.)
            printf("(注意)\n");
        else
            printf("\n");
    }
    return 0;
}
712デフォルトの名無しさん:2005/12/18(日) 17:43:45
>>709
ANSI ISO/IEC 9899, p.12 より
The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
 int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
 int main(int argc, char *argv[]) { /* ... */ }
or equivalent; or in some other implementation-defined manner.

というわけなので,void main() も ok.
713デフォルトの名無しさん:2005/12/18(日) 17:46:20
>>533
どうもありがとうございます。

>(1)あることを ”手本として” 同様に行う。まねる。

ちゃんとそのまま書いてあるのを引用してくれて。
714デフォルトの名無しさん:2005/12/18(日) 17:46:56
implementation-defined mannerに該当ということで。

>>710
関数定義では()はno parameter、関数宣言では()は情報なし。
だったと思う。
715709:2005/12/18(日) 17:51:37
>>712
ありがとう!
ずーと読んでって最後の ``or in some other implementation-defined manner''
のとこで「なんでもありかよ!」ってなった。
そうなんだ。なんかショックだ。これまで void main() て書いてるヤツ見つけたら
総攻撃してたのに。これから何を心の支えにして生きていけばいいんだ。
716デフォルトの名無しさん:2005/12/18(日) 17:55:14
717デフォルトの名無しさん:2005/12/18(日) 17:57:52
>>710
ANSI ISO/IEC 9899, p.141 より
If the declarator includes a parameter type list, the declaration of each parameter shall include an identifier,
except for the special case of a parameter list consisting of a single parameter of type void, in which case
there shall not be an identifier. No declaration list shall follow.

ということなので,() は (void) に準じる.
718デフォルトの名無しさん:2005/12/18(日) 18:02:44
>>715
敢えて言うなら、戻り値がintとcompatibleでなければ(たとえばvoid)、
どんな値がhost environmentに返るかはunspecified。
だからといって間違いではないわけだが、portabilityの点では問題がある。
719デフォルトの名無しさん:2005/12/18(日) 18:03:28
>>717
definitionでも同じ?
720デフォルトの名無しさん:2005/12/18(日) 18:05:06
>>709
これからも「void main() 許すまじ」で生きてください。
721デフォルトの名無しさん:2005/12/18(日) 18:10:22
>>719 A(略) p.142,
A definition of an identifier is a declaration for that identifier that:
- for an object, causes storage to be reserved for that object;
- for a function, includes the function body;
- for an enumeration constant or typedef name, is the (only) declaration of the identifier.
なので,definition は完全に declaration に準じる.
722721:2005/12/18(日) 18:12:29
ごめんページ番号間違えた. p.97 が正しい.
723デフォルトの名無しさん:2005/12/18(日) 18:14:51
>>721
んじゃC99では変更になってるのかな。>>714 だと思ってたよ。
C89のPDF持ってないんだよね…
724デフォルトの名無しさん:2005/12/18(日) 18:28:36
>>716
あ〜、ロン点違った?罰符?
725634:2005/12/18(日) 19:07:42
度々申し訳ありません。
期限が誤っていたため、テンプレとともに再度載せさせていただきます。
みなさまのお力をどうか分けてください、お願いします。

[1] 授業単元:アルゴリズムと構造論
[2] 問題文(含コード&リンク):
問題文:以下のプログラムを単語区切りによるカウントからアルファベット区切りになるように改良しなさい。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1303.txt

補足:現行のプログラムでは、ファイルを読みこんで単語リストを生成します。
   それを単語リストではなく、アルファベットリスト(aが6文字…etc)となるように
   していただきたく思います。

[3] 環境
 [3.1] OS: Linux Red Hat 9.0
 [3.2] コンパイラ方式 gcc -wall -ansi
 [3.3] C言語
[4] 期限: 2005年12月18日 24:00
[5] その他の制限:特になし

よろしくお願いします。
726デフォルトの名無しさん:2005/12/18(日) 19:15:12
>>725
>>648は無視?
727634:2005/12/18(日) 19:35:00
>>726
申し訳ありません...。気づきませんでしたorz

>>648
今まで気づかず、申し訳ありませんでしたm(__)m
728デフォルトの名無しさん:2005/12/18(日) 20:38:59
>>653
誰かやってください。お願いします。さっきからシカトされてるんですけどどこか不具合でもあるんですか?
729デフォルトの名無しさん:2005/12/18(日) 20:43:00
>>728
このスレでは気が向いた奴がいなければコードは出ない。
730デフォルトの名無しさん:2005/12/18(日) 20:45:16
>>729
まじっすか。今やってるんですけど、窓から飛び出したい気分っすよ。
731デフォルトの名無しさん:2005/12/18(日) 20:45:16
>>728
1.指定の多すぎる問題はモチベーション下がる。(仕様だけ出して、コードは全部かかせろよ。)
2.いい加減リンクリストは飽きた。(そんな車輪の最発明やってもつまらん。STL使えばいいじゃん)。


以上の理由で、やる気がおきないヤシ多数。
732634:2005/12/18(日) 20:46:12
634です。

>>648

アルファベットごとに並べるには、どこを書き換えたらうまくいくのでしょうか。

ex)

a・・・ 6
b・・・ 9
c・・・ 12

といった具合にです。
教えて下さい。よろしくお願いします。
733709:2005/12/18(日) 20:49:15
>>731
全く同意。
途中までコード書いてあって変更しろとかいう問題はやる気おきないよね。
734デフォルトの名無しさん:2005/12/18(日) 20:51:23
普段から保守にうんざりしてるからね、皆w
735デフォルトの名無しさん:2005/12/18(日) 21:12:45
>>653
しょうがないなぁ。変更点の差分だけ。テストしてない(データ作るのが面倒)から
あってる保証はない。
int main(void) {
    /* …末尾に追加 */
    clearerr(stdin);
    while (!feof(stdin)) {
        printf("Delete ID -> ");
        if (scanf("%d", &data.ID) == 1) {
            if (delete(data.ID) == NULL) {
                printf("Data %d is not found\n", data.ID);
            }
            listprint();
        }
    }
}
NodePointer delete(int data_id) {
    NodePointer n, p;
    for (n = head; n->next != NULL; n = n->next) {
        if (n->next->data.ID == data_id) {
            p = n->next;
            n->next = n->next->next;
            free(p);
            return n;
        }
    }
    return NULL;
}
736デフォルトの名無しさん:2005/12/18(日) 21:34:40
[1] 授業単元: ソート
[2] 問題文: 乱数を用いてデータを1000 個用意して、
        バブルソートとシェーカーソートでデータを整列させ、
        比較回数のカウントを行うプログラムを作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 12月19日9:00
[5] その他の制限:
まだまだ初心者なのでできるだけ簡単なプログラムでお願いします。

737デフォルトの名無しさん:2005/12/18(日) 21:38:46
>>735
やっていただきありがとうございます。コントロール+Dしてもデリートの表示を呼ぶことは出来ないのはなぜでしょうか?設定の違いとか。やっていただきこんなことをいうのもなんですが。
738デフォルトの名無しさん:2005/12/18(日) 22:22:15
>>737
Ctrl+Zを2回ならどう?もしそれでいけるなら、そっちの問題。
739デフォルトの名無しさん:2005/12/18(日) 22:26:44
>>686
質問:
(1) 入力される数値は正の実数か実数か整数か自然数か?
(2) 数値の上限・加減は?
(3) 個数は'+'が1個当たり何個を表すのか?
(4) C言語を始めて3ヶ月でもピンからキリまである。君がどれだけできるのか
  誰にも分からない。もっと具体的な指定を。
740デフォルトの名無しさん:2005/12/18(日) 22:34:02
>>738
コントロールZのほうでもだめでした。ファイルループがでられないのでしょうか?ほんとやっていただきありがとうございます
741名無し:2005/12/18(日) 22:37:26
>>649の課題
>>650の場合は>>654の方法で
>>659は特に指定はなし
でお願いします。
742702:2005/12/18(日) 22:40:07
>>741
>>702で何か不具合でもあった?
743デフォルトの名無しさん:2005/12/18(日) 22:40:42
>>740
入力後にリターンしてる?
744デフォルトの名無しさん:2005/12/18(日) 22:44:11
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
下記のプログラムには間違いが4つあります。間違いを見つけて正しく直しなさい
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++ )
 [3.3] 言語: C++
[4] 期限: 12月20日
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1318.txt

よろしくお願いします。
745デフォルトの名無しさん:2005/12/18(日) 22:51:58
>>711
ありがとうございます。助かりました
746デフォルトの名無しさん:2005/12/18(日) 22:52:21
[1] 授業単元:プログラミング
[2] 問題文:
C言語でキー入力を判断し、同時に起動しているメモ帳にそのキーを打つ動作をする
プログラムを作成せよ(ファンクションキーなど文字として出ないキーも打つ事)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++ )
 [3.3] 言語: C
[4] 期限: 12月29日

授業聞いてないから全く分かりません
誰か救いの手を。。。
747デフォルトの名無しさん:2005/12/18(日) 22:53:01
>>739

回答:
(1)正の実数です(1.25とか)
(2)0〜3でお願いします
(3)一個です。
(4)習ったものは宣言や入出力や関数や配列やポインタです。(あまり理解はできてませんが)

よろしくお願いします。
748デフォルトの名無しさん:2005/12/18(日) 22:58:28
749デフォルトの名無しさん:2005/12/18(日) 22:59:39
[1] 授業単元:C言語U
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1319.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC++6.0
 [3.3] 言語:C
[4] 期限:2005年月12日19日12時まで
[5] その他の制限:特に無し
750デフォルトの名無しさん:2005/12/18(日) 22:59:47
>>743
リターンはしてないです。こっちもサッパリです。
751デフォルトの名無しさん:2005/12/18(日) 23:05:55
>>750
こっちでは問題なく動いてる。よって分からん。他の人の助言を待て。
752デフォルトの名無しさん:2005/12/18(日) 23:09:49
授業単元:プログラミングです。
誕生石: 生まれ月に因んで定めた宝石。起こりはユダヤ教の祭司の胸板の12の宝石によるとも、
新約聖書ヨハネ黙示録の「新しきエルサレムの東西南北12の門の12の石垣の基礎石」によるとも言われる。
1月ガーネット、2月アメジスト(紫水晶)、3月アクアマリーン・ブラッドストーン、4月ダイヤモンド、5月エメラルド、
6月真珠・ムーン‐ストーン(月長石)、7月ルビー、8月サードニックス・かんらん石、9月サファイア、10月オパール・トルマリン、
11月トパーズ、12月トルコ石・ラビス‐ラズリ。(1912年アメリカ宝石同業組合で決めたもの) 広辞苑による


上記データに基づいて、誕生月をキーボードから入力しその人の「誕生石」を画面に出力するプログラムを作れ。

753デフォルトの名無しさん:2005/12/18(日) 23:10:31
>>744
てゆか、コンパイルしてみたらエラー出るからすぐ分かるじゃん。

(1) 16行目、"木" とすべきところを 木" としている
(2) 27行目から
if(input[0]=='e' || input[0]=='E'&&
input[1]=='n' || input[1]=='N'&&
input[2]=='d' || input[2]=='D')
break;
でなく
if((input[0]=='e' || input[0]=='E') &&
(input[1]=='n' || input[1]=='N') &&
(input[2]=='d' || input[2]=='D'))
break;
(3) 32行目、input[10]='\0' でなく input[10]=='\0'
(4) 48行目、*youbi[total_day % WEEK_CNT] の * はいらない
754デフォルトの名無しさん:2005/12/18(日) 23:18:10
>>752
#include <stdio.h>

int main( void )
{
static const char *jewels[] = {
"ガーネット", "アメジスト(紫水晶)",
"アクアマリーン・ブラッドストーン", "ダイヤモンド",
"エメラルド", "真珠・ムーン‐ストーン(月長石)",
"ルビー", "サードニックス・かんらん石",
"サファイア", "オパール・トルマリン"
"トパーズ", "トルコ石・ラビス‐ラズリ" };
int month;

printf( "Input your month of birth (1-12) > " );
scanf( "%d", &month );

puts( jewels[month-1] );

return 0;
}
755736:2005/12/18(日) 23:21:34
>>748
正しいと思われる結果はでましたが習ったことが>>747と同程度の自分にはどのような動作をしているかわかりません・・・orz
756デフォルトの名無しさん:2005/12/18(日) 23:25:25
>>755
見てみたけど、すごく教育的。これで分からないなら、教科書をイチから
読み直した方がいい。
757デフォルトの名無しさん:2005/12/18(日) 23:25:40
>>744
間違いはたくさんある。
@@ -16,2 +16,2 @@
- char *youbi[WEEK_CNT]={ 
-  "日","月","火","水",木","金","土"};
+ const char *youbi[WEEK_CNT]={ 
+  "日","月","火","水","木","金","土"};
@@ -25 +25 @@
-   printf("(yyy/mm/dd):");
+   printf("(yyyy/mm/dd):");
@@ -28,3 +28,3 @@
-   if(input[0]=='e' || input[0]=='E'&&
-    input[1]=='n' || input[1]=='N'&&
-    input[2]=='d' || input[2]=='D')
+   if((input[0]=='e' || input[0]=='E')&&
+    (input[1]=='n' || input[1]=='N')&&
+    (input[2]=='d' || input[2]=='D'))
@@ -33 +33 @@
-   if(input[4]=='/' && input[7]=='/' && input[10]='\0'){
+   if(input[4]=='/' && input[7]=='/' && input[10]=='\0'){
@@ -41,2 +41,2 @@
-       total_day = year-1 / 4-year-1 / 100+year-1 / 400;
-       total_day += year-1 * 365;
+       total_day = (year-1) / 4-(year-1) / 100+(year-1) / 400;
+       total_day += (year-1) * 365;
@@ -49 +49 @@
-       printf("入力された%d年%d月%d日は%s曜日\n",year,month,day,*youbi[total_day % WEEK_CNT]);
+       printf("入力された%d年%d月%d日は%s曜日\n",year,month,day,youbi[total_day % WEEK_CNT]);
758デフォルトの名無しさん:2005/12/18(日) 23:26:29
>>747
もう一個質問:入力回数は?
759デフォルトの名無しさん:2005/12/18(日) 23:30:13
>>751
先ほどかいてもらったメインのほうなんですけど。どこから、挿入ですか?
760デフォルトの名無しさん:2005/12/18(日) 23:37:00
内容:
[1] 授業単元:プログラム演習
[2] 問題:n進数の整数を考える。これを配列a[]を用い、a[0]に1の位の数値、
a[1]にnの位の数値、a[2]にn^2の位の数値の様に格納する。
2つのn進数x[],y[]を加算しその結果をz[]に格納する関数を作成せよ。ここで
x[],y[]の桁数は10桁(つまりn^10)まで保証すること。またこの関数を用いて
1234の5進数 + 1234の5進数
の計算をするプログラムを作成せよ。ここで、配列x[],y[],z[]はブロック有効範囲とする。
[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2005年月12日20日12時まで
[5] その他の制限:なるべく特別な#include〜を使用しないプログラムを組んでいただけると助かります。
よろしくお願いいたします・・・。
761デフォルトの名無しさん:2005/12/18(日) 23:41:31
>>758
きりよく10個でお願いします。
762744:2005/12/18(日) 23:44:47
>>753,757
ありがとうございました。
おかげで解決しました。
763デフォルトの名無しさん:2005/12/18(日) 23:51:58
>>754さん回答ありがとうございます、
こんな条件がついていたのですが、誕生月を表す整数を m とし、この m に scanf 関数 を使ってキーボードから誕生月を入力する。
次に、 switch文 を使って 各誕生月ごとに分岐する。
764デフォルトの名無しさん:2005/12/18(日) 23:56:22
>>763
あとから条件を加えた場合、たいてい答えてもらえない。
765754:2005/12/19(月) 00:22:45
>>763
最初から言えよ、馬鹿。
「誕生日を表す整数を m」は >>754 で month になってるところを m に
変えるだけ。
switch 文に関しては、この問題のような処理で switch を使うヤツは馬鹿だと
教授に言え。その度胸がないなら自分でなんとかしなさい。
766デフォルトの名無しさん:2005/12/19(月) 00:27:28
>>760
>1234の5進数
ってのは、
1.10進数の1234を5進数に変換した物
2.5進数表記で1234
のどっち?
767デフォルトの名無しさん:2005/12/19(月) 01:10:21
[1] 授業単元: プログラミング演習
[2] 問題文: 
文中の連続するスペースを1個のスペースに置き換え、また、
文末には4個のスペースがくるように置き換えて出力するような
プログラムを作成しなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限:2005年12月21日 12:00
[5] プログラムの初歩中の初歩を学んでいるような状況です。
  どうぞよろしくお願いします。
768デフォルトの名無しさん:2005/12/19(月) 01:16:58
>>746
こんなんでいいのかどうかは分からんが。
#include <windows.h>
HWND hNP, hE;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0); break;
case WM_KEYDOWN: case WM_KEYUP: case WM_SYSKEYDOWN: case WM_SYSKEYUP:
PostMessage(hE, msg, wParam, lParam); break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR, int nCmdShow) {
HWND hWnd; MSG msg; WNDCLASS wndClass; TCHAR className[] = "メモ帳にキー操作を送信"; BOOL bRet;
if ((hNP = FindWindow("Notepad", NULL)) == NULL || (hE = FindWindowEx(hNP, NULL, "Edit", NULL)) == NULL) {
MessageBox(0, "ハンドル取得に失敗しました", "", MB_OK); return FALSE;
}
if (!hPrevInstance) {
wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.hInstance = hInstance; wndClass.lpszClassName = className; wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hIcon = NULL; wndClass.hCursor = NULL; wndClass.lpszMenuName = NULL;
if (!RegisterClass(&wndClass)) return FALSE;
}
hWnd = CreateWindow(className, "", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) if (bRet == -1) return FALSE; else {TranslateMessage(&msg); DispatchMessage(&msg);}
return (int)msg.wParam;
}
769デフォルトの名無しさん:2005/12/19(月) 01:17:33
>>767
入力はどこから?出力はどこへ?
770デフォルトの名無しさん:2005/12/19(月) 01:18:40
てけとー。脳内こんぱいる。

int prev = 0; /* 空白以外の値ならなんでもよい */
int c;
while ((c = fgetc()) != EOF) {
if (c == ' ' && prev == ' ') {
/* 空白が連続するなら2つ目以降は出力しない */
} else if (c == '\n') {
printf("    \n");
} else {
putchar(c);
}
prev = c;
}
771767:2005/12/19(月) 01:23:36
>>769
ソースコードを入力してコンパイルし、テキストファイルに対して
実行するという形です。初心者なのできちんとしたお答えができなくて
すみません…。
772デフォルトの名無しさん:2005/12/19(月) 01:27:40
>>761
#include <stdio.h>
int main(void) {
    int i, j, c[3] = {0};
    double d;
    for (i = 0; i < 10; i++) {
        scanf("%lf", &d);
        ++c[(int)d];
    }
    printf("度数|個数\n-----------\n");
    for (i = 0; i < 3; i++) {
        printf("%d-%d |", i, i + 1);
        if (c[i] == 0) printf("none");
        else for (j = 0; j < c[i]; j++) printf("+");
        printf("\n");
    }
}
773デフォルトの名無しさん:2005/12/19(月) 01:28:20
>>771
テキストファイルから読み込んで、そのテキストファイルに上書きするの?
774767:2005/12/19(月) 01:37:49
>>773
…すみません、よく分かりませんorz
実行の時に読み込んだテキストファイルの文章が
問題文通りに(スペース云々)表示されればいいです。

775デフォルトの名無しさん:2005/12/19(月) 01:44:04
【質問テンプレ】
[1] 授業単元: プログラミング(ファイル出入力)
[2] 問題文(含コード&リンク):
5つのデータをファイルから読み込んで、最大値・最小値を求め、ファイルに保存せよ。
ただし、最大値・最小値を求める部分は関数で記述せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: よくわかりませんが、わたしはVisual Studio 2003を使っております。
 [3.3] 言語: C言語
[4] 期限: 2005年12月20日まで
[5] その他の制限:あまりに高等なことをしなければよいとは思いますが。。。

もしかしたら問題に不備があるかもしれませんが、問題は写しただけですので解釈できる範囲内でつくるとよいと思います。
いろいろやってもうまくいかないので、教えていただければ幸いです。
よろしくお願いします。
776デフォルトの名無しさん:2005/12/19(月) 01:59:18
>>775
#include <stdio.h>
#define N 5
int main(void) {
    double d[5], temp;
    int i, j;
    FILE *fp = fopen("data.dat", "r");
    if (fp == NULL) return 1;
    for (i = 0; i < N; i++) fscanf(fp, "%lf", d + i);
    fclose(fp);
    for (i = 0; i < N - 1; i++)
        for (j = 0; j < N - 1 - i; j++)
            if (d[j + 1] < d[j])
            {
                temp = d[j];
                d[j] = d[j + 1];
                d[j + 1] = temp;
            }
    fp = fopen("result.dat", "w");
    fprintf(fp, "Max:%f\nMin:%f\n", d[0], d[N - 1]);
    fclose(fp);
    return 0;
}
777デフォルトの名無しさん:2005/12/19(月) 02:25:09
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
文字列を入力し、別の文字配列に複写した後、入力した文字列と複写した文字列を
出力するプログラムを作りなさい。
但し、2つの文字型ポインタs,tを因数としてtの指す文字列(ヌル文字までの文字データ)
をsの指す領域に複写する関数(mycpy)を作り、main関数ではその関数を呼び出すようにしなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005.12.20まで
[5] その他の制限:
よろしくおねがいします
778デフォルトの名無しさん:2005/12/19(月) 02:37:25
>>777
#include <stdio.h>

char * mycpy(char * s, const char * t) {
    char *dest = s;
    const char *src = t;
    while ((*dest++ = *src++) != '\0') {}
    return s;
}

int main(void) {
    char s1[1024], s2[1024];
    scanf("%1023[^\n]", s2);
    mycpy(s1, s2);
    printf("s1:%s\ns2:%s\n", s1, s2);
    return 0;
}
779デフォルトの名無しさん:2005/12/19(月) 02:40:50
>>760
また丸投げキター

おれんとこききにくれば教えるのに
答えもらったらちゃんと理解してから提出しろよ〜
780デフォルトの名無しさん:2005/12/19(月) 03:52:36
>>774
>>770をてけとーにインスパイヤ
#include <stdio.h>
#define FILENAME "data.txt"
int main(void) {
    int prev = 0, c;
    FILE *fp = fopen(FILENAME, "r");
    while ((c = fgetc(fp)) != EOF) {
        if (c == ' ' && prev == ' ') {
            /**/
        } else if (c == '\n') {
            if (prev == ' ') {
                printf("   \n");
            } else {
                printf("    \n");
            }
        } else {
            putchar(c);
        }
        prev = c;
    }
    fclose(fp);
    return 0;
}
781デフォルトの名無しさん:2005/12/19(月) 03:59:41
オートマトンを使うと楽だな。
スキャナとも言うか。
782デフォルトの名無しさん:2005/12/19(月) 05:46:29
>>475
[1] 授業単元:プログラミング応用
[2] 問題文:タイマーで今日が何の日なのかHPより情報を取得し表示する常駐ソフト
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] VC 6.0
 [3.3] 言語:C++のみ
[4] 期限: [2005年12月22日18:00まで]
[5] その他の制限:情報取得先はwww.nnh.toにしたいです

無視されてたから再記
783デフォルトの名無しさん:2005/12/19(月) 06:02:04
>>782
>無視されてたから再記

教えて厨の癖に態度でかいな。また無視するか。
784デフォルトの名無しさん:2005/12/19(月) 06:10:16
無能は…どんなにバラバラにしてやっても…石の下から…ミミズのようにはい出てくる
785デフォルトの名無しさん:2005/12/19(月) 06:41:28
>>782
だから、常駐ソフトはめんどいんだって
仕様わかんねえし
日付を取得して対応したHP開くのでいいだろ?
786752:2005/12/19(月) 06:43:44
先生に意見できるほどの生徒ではないので・・・
switch文を使ってのやり方を教えていただけないでしょうか?
あとから条件を足してしまって申し訳ないと思っているのですが
わかる方いたらよろしくお願いします。
787デフォルトの名無しさん:2005/12/19(月) 07:01:37
>>786
本当に申し訳ないと心から思っているなら、書くな
788752:2005/12/19(月) 07:13:55
今日の授業で提出なので、お願いしますOTL
789デフォルトの名無しさん:2005/12/19(月) 07:17:57
ヒント:
switch(m){
case 1:puts("ガーネット");
790デフォルトの名無しさん:2005/12/19(月) 08:08:46
ヒント:
char const * stone;
switch (m) {
case 1: stone = "ガーネット"; break;
case 2: stone = "アメジスト"; break;
...
case 12: stone = "トルコ石"; break;
default: stone = ""; break;
}
puts(stone);
791760:2005/12/19(月) 08:45:12
>>766
恐らく、10進数の1234を5進数に変換した物だと思います。
(1234)5 + (1234)5 (5は()の右下にありました)
と書かれていたので・・・。
よろしくお願いいたします。
792デフォルトの名無しさん:2005/12/19(月) 09:09:04
>>791 それだと5進数表記の1234だと思うんで、その方向で作ってみた。
n>10 の場合は(表記が)対応してない。
#include <stdio.h>
#define N 10 // 有効桁数(下から数えるので有効桁数という言葉が正しいのやら…)
int ladd(int z[], int x[], int y[], int base)
{
int i, carry = 0;
for( i = 0 ; i < N ; i++ ) {
z[i] = x[i] + y[i] + carry;
if( z[i] >= BASE ) {
z[i] -= BASE;
carry = 1;
} else carry = 0;
}
return carry; // 桁あふれが出たら1を返す
}
void lprint(int x[])
{
int i;
for( i = N - 1 ; x[i] == 0 ; i-- ) ;
for( ; i >= 0 ; i-- ) putchar('0' + x[i]);
}
int main(void)
{
int x[10] = {4,3,2,1}, y[10] = {4,3,2,1}, z[10]; // 下から入れるので逆順表記
int n = 5; // n進表記のn
ladd(z, x, y, n);
lprint(x); printf(" + "); lprint(y); printf(" = "); lprint(z); printf("\n");
return 0;
}
793デフォルトの名無しさん:2005/12/19(月) 09:39:21
>>697
先程実行してみました。コンパイルは通るのですが、どうもうまく実行してくれません。
英文を打ち込んでも反応無しでした…。
794デフォルトの名無しさん:2005/12/19(月) 10:05:04
どなたか>>516お願いしますm(__)m
mainをつけるだけでもいいんで
795デフォルトの名無しさん:2005/12/19(月) 10:08:43
>>772
ありがとうございます。有効利用させていただきます。

もしよければ3行目のc[3] = {0};  と 8行目の ++c[(int)d]; を
もう少しわかりやすく書き直していただけないでしょうか
796752:2005/12/19(月) 10:10:18
ヒントとても助かりました。
1月の文だけで少しやってみたのですがうまくいきませんでした。
#include <stdio.h>

int main( void )
{

int m;
switch(m){
case 1:printf("ガーネット\n");
break;
}

printf( "誕生月を入力してください" );
scanf( "%d", &m );


return 0;
}
どこがいけないかご指摘お願いします。
797672:2005/12/19(月) 10:11:49
>>694,698
ありがとうございます。
やっぱりremoveをvoid型にすると出来ませんよね。
自分もremove_nodeをstruct node*型の値を関数にして、main関数内とかを変更してやってみたところ、プログラムがちゃんと動くようになりました。
798デフォルトの名無しさん:2005/12/19(月) 10:15:11
>>796
printf( "誕生月を入力してください" );
scanf( "%d", &m );
ここを
switch(m){
case 1:printf("ガーネット\n");
break;
}
の前に持ってくれば良いんじゃない?
switchでmの値を参照しても、scanfで値を代入してないから、何も値が入っていない(入っていてもでたらめな値)から、caseが正しく動作しない。
799599:2005/12/19(月) 10:22:12
>>610
ありがとうございます!
800≠772:2005/12/19(月) 10:31:35
>>795
> int i, j, c[3] = {0};
int i, j;
int c[3] = {0, 0, 0};
と等価。配列の初期化はこれ以上判りやすく書き様がない。

> ++c[(int)d];
{
int tmp = (int) d;
++c[tmp];
}
と等価。要は、dを整数化(小数点以下切り捨て)してそれを配列のインデックスに使っている。
インクリメント演算子については説明不要だよな?
801デフォルトの名無しさん:2005/12/19(月) 11:28:18
>>800
ありがとうございます。
理解できました。
802748:2005/12/19(月) 13:04:52
>>756
俺の書いたつたないソースを誉めてくれてありがとう
>>755
がんばって
803748:2005/12/19(月) 13:14:50
>>755
もう提出時間を過ぎたあとに言うのもなんだけど
>>748 の 12行目は
for ( tail = end; tail > start; --tail ) {
じゃなくて
for ( tail = end; tail > head; --tail ) {
だった。
804デフォルトの名無しさん:2005/12/19(月) 13:28:50
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 標準入力から入力された英文字の種類と回数を表示するプログラム。
(実行例)
Tanaka
'A' = 3
'K' = 1
'N' = 1
'T' = 1
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Borland BCC
 [3.3] 言語: C
[4] 期限: 今日の23時59分
[5] その他の制限: 大文字と小文字の区別はなし。0回は表示しない。#includeは<stdio.h>のみでお願いします。
805デフォルトの名無しさん:2005/12/19(月) 13:39:27
>>804
#include <stdio.h>

int toupper( int c )
{
if ( 'a' <= c && c <= 'z' )
c += 'A' - 'a';
return c;
}

int main( int argc, char **argv )
{
char buf[ 1024 ];
unsigned counts[ 'Z' - 'A' + 1 ];
char *p;
int i;
for ( i = 0; i < sizeof(counts)/sizeof(counts[0]); ++i )
counts[i] = 0;
while ( fgets( buf, sizeof(buf), stdin ) )
for ( p = buf; *p; ++p )
if ( ( 'A' <= *p && *p <= 'Z') || ( 'a' <= *p && *p <= 'z' ) )
++counts[ toupper(*p) - 'A' ];
for ( i = 0; i < sizeof(counts)/sizeof(counts[0]); ++i )
if ( counts[i] )
printf( "\'%c\' = %d\n", i+'A', counts[i] );
return 0;
}
806デフォルトの名無しさん:2005/12/19(月) 15:07:01
[1] プログラミング2
[2]オイラー法で du/dx=-u+x , u(0)=1を解け
[3] 環境
 [3.1] WindowsXp
 [3.3] C
[4] 30分以内
807デフォルトの名無しさん:2005/12/19(月) 15:27:51
>>806
ワロタ
808デフォルトの名無しさん:2005/12/19(月) 15:28:37
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
(1)配列を用いて3行3列と3行1列のベクトルの積を計算するプログラムを作成せよ。
(2)3行3列の逆行列を求めるプログラムを作成せよ。  
[3] 環境
 [3.1] OS: Windows XP
 [3.2] c++Builder6
 [3.3] 言語: C++
[4] 期限: 今日(早めでお願いします)
[5] その他の制限:#includeは<iostream.h>でお願いします。
809よろしくお願いします:2005/12/19(月) 15:40:01
[1]授業単元:プログラミングT
[2]問題文:(1)nをキーボードから入力し、1からnまでの和を求めて表示するプログラムを作成せよ。
(2)数値aとbをキーボードから入力し、その最大公約数を求めて表示するプログラムを作成せよ。
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:bcc32
[3.3]言語:C
[4]期限:今日中
[5]その他の制限: (2)について以下のようなヒントが与えられています。
『a、bをそれぞれ変数m、nに入れる。mをnで割った余りをkとして、k=0ならnの値が最大公約数である。
kが0でないなら、kの値をnに入れ、mをnで割ることを繰り返す。余りが0になったときnの値が最大公約数である』
なので、(2)はこのヒントに沿った形でお願いします。
810デフォルトの名無しさん:2005/12/19(月) 15:42:34
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):http://making-gold-princessmaki.hp.infoseek.co.jp/510.html
計3問
[3] 環境
 [3.1] OS: WindowsXp
 [3.2] コンパイラ名とバージョン: V.C 6.0
 [3.3] 言語:C++
[4] 期限: 早ければ早いほど助かります。
[5] その他の制限:問題文にいくつか記載されています。
よろしくお願いします。
811デフォルトの名無しさん:2005/12/19(月) 15:56:26
宿題ではないのですが以下の文でint int_bits(void)の宣言を確認してくださいとコンパイル時
エラーが出るのですが、どう対処したら良いでしょうか、教えてください
//unsigned(0〜4294967295)が表現できるすべての整数を2進数、8進数、10進数、16進数で表示する。
#include<stdio.h>
#include<limits.h>

void print_bits(unsigned x);
int int_bits(void);
void count_bits(unsigned x);

int main(){
unsigned i;
for(i=0;i<UINT_MAX;i++){
print_bits(i);
printf("%6o %5u %4X \n",i,i,i);
}
return 0;}
void print_bits(unsigned x){
int i;
for(i =int_bits()-1;i>=0;i++)
putchar(((x>>i) & 1U) ? '1' : '0' );}
int int_bits(void){
return ( count_bits(~0U) );}
void count_bits(unsigned x){
int count=0;
while (x){
if(x&1U) count++;
x >>=1;
}
return count;}
812デフォルトの名無しさん:2005/12/19(月) 16:03:43
>>717
その引用のどこにも「() は (void) に準じる.」という意味のことは書かれていないが?

実際にはK&R時代の関数定義だと解釈されて、定義の場合は引数がないとみなされる訳だね。
K&R方式の関数定義は廃止予定事項だから voidはちゃんと書かなきゃそのうち動かなくなる。
813デフォルトの名無しさん:2005/12/19(月) 16:04:47
>>805
コンパイルはできるのですが、英文字を入力しても動作しませんでした。

sizeofをつかわずに作成できませんか?
814デフォルトの名無しさん:2005/12/19(月) 16:09:34
>>809
(1) から

#include <stdio.h>

int main( int argc, char **argv )
{
unsigned n, i;
unsigned sum = 0;

printf( "Input n > " );
scanf( "%u", &n );

for ( i = 1; i <= n; ++i )
sum += i;
printf( "The sum (1..%d) is %d.\n", n, sum );

return 0;
}
815デフォルトの名無しさん:2005/12/19(月) 16:11:00
>>809
で、(2) ね

#include <stdio.h>

int get_gcd( int m, int n )
{
if ( !m )
return n;

if ( m > n )
return get_gcd( m%n, n );
else
return get_gcd( n%m, m );
}

int main( void )
{
unsigned a, b;

printf( "Input a > " );
scanf( "%u", &a );
printf( "Input b > " );
scanf( "%u", &b );

printf( "The gcd between %d and %d is %d\n", a, b, get_gcd(a,b) );

return 0;
}
816デフォルトの名無しさん:2005/12/19(月) 16:16:05
>>813
sizeof 使わなくても書けるけど使った方がエレガントだ。
動作する。
実行して何か入力し終わったら最後に Ctrl+D 押せ。
817デフォルトの名無しさん:2005/12/19(月) 16:19:11
>>816
すみません。それもやったんですけど動きませんでした。

もしよかったらエレガントじゃない方もお願いします。
818809:2005/12/19(月) 16:25:56
>>814-815
ウホッ……
早速のご解答ありがとうございます。
でもちょっと、やってることが授業のレベルより高度で、それで提出したら誰かに教えてもらったのがすぐバレそうです。
最初の「into main」は()の中にはvoidが入る形しか知りませんし……unsignedなんて関数は聞いたこともないですし……
もっと「素人が書いてる感じ」にしていただけるとありがたいんですけどお願いできますか?
819デフォルトの名無しさん:2005/12/19(月) 16:26:52
>>811
int int_bits(void)
int count_bits(unsigned x)
820デフォルトの名無しさん:2005/12/19(月) 16:28:04
>>817
動く。動かないなら君のやり方がおかしい。
sizeof 使わないとか言うわけわからん要求に応えるとこれ↓
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26522
821デフォルトの名無しさん:2005/12/19(月) 16:29:58
>>818
断る。難しくないから自分で >>814>>815 が理解できるようになりなさい。
unsigned は関数じゃなくて型です。
822809:2005/12/19(月) 16:32:05
>>821
わかりました。どうもありがとうございました。
823デフォルトの名無しさん:2005/12/19(月) 16:34:37
>>818
>>814のint main(int argc, char **argv)はint main(void)に書き換えて構わない。
それから>>814,>>815とも、unsignedを全てintに置換し、同時に
%uを全て%dに置換しても問題ない。
824デフォルトの名無しさん:2005/12/19(月) 16:35:03
>>817

Ctrl+Zは試したか?
825デフォルトの名無しさん:2005/12/19(月) 16:38:38
[1] プログラミングC++
[2] strtokの例外処理。
[3] 環境
 [3.1] OS: windowsXP
 [3.2] .NET 2003
 [3.3] どちらでもか。
[4] 期限: 12月20日
[5] その他の制限:strtokを使用する。
読み込む文字列はシフトJISを想定
ソースです。
#include <stdio.h>
#include <string.h>

int main(void)
{
char str[]= "警察署 パーキング 豊田";
wchar_t *tp;

/* スペース.を区切りに文字列を抽出 */
tp = strtok((wchar_t*) str, " . " );
puts( tp );
while ( tp != NULL ) {
tp = strtok( NULL," , " );
if ( tp != NULL ) puts( tp );
}

return 0;
}
お願いします。
826デフォルトの名無しさん:2005/12/19(月) 16:41:09
>>824
試してみましたが、それも無意味でした。

>>820
ありがとうございます。そのままコンパイル(もちろん行番号などは消しましたが)したら失敗でしたので、
考察や理解しながらいろいろ試してみます。
827デフォルトの名無しさん:2005/12/19(月) 16:45:00
>>826
コマンドラインから echo Tanaka | abc.exe とかしても無理?
ソースは >>820 の "Download as file" というリンクからダウンロードしよう
828デフォルトの名無しさん:2005/12/19(月) 17:02:39
>>827
echo Tanaka | abc.exe は成功しました。
ありがとうございました。
829 ◆0z2eQUL9ek :2005/12/19(月) 17:11:09
[1] 授業単元:情報通信工学演習
[2] 問題文:ファイルの内容を行を単位としてアスキーコード順にソートするプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月21日18:00まで
[5] その他の制限: なし

よろしくお願いしますm(_ _)m
830けい ◆G8KDWKzFWs :2005/12/19(月) 17:18:32
[1] プログラミング入門
[2• 複数人の学生の成績を入力し,それぞれの教科
の平均点,それぞれの学生の平均点を算出する.
• それぞれの学生の平均点はaverage に入れる
• 今回の入力データは3件で以下の通り.
– 001 番国語30 点,数学40 点物理45 点
– 002 番国語80 点,数学77 点物理63 点
– 003 番国語55 点,数学38 点物理87 点
[3] 環境
 [3.1] Windows
 [3.2] コマンドプロンプト 秀丸
 [3.3]C
[4] 水曜日まで
[5]【 】の穴埋めをお願いします。
勉強してないのでまったくわかりません。入門なので基本的なやつでお願いします。
831けい ◆G8KDWKzFWs :2005/12/19(月) 17:19:17
#include "stdio.h"

struct seiseki {
int number;
int japanese;
int math;
int physics;
float average;
};

float math_ave, japanese_ave, physics_ave;

#define MAX 100

struct seiseki g[MAX];

int data_input( void )
{
int i;
int end_flag = 0;

for(i=0 ; i<MAX ; i++ )
{
printf("出席番号 -> (終了は0)");
scanf("%d",&g[i].number);
832けい ◆G8KDWKzFWs :2005/12/19(月) 17:21:28
if( g[i].number == 0 )
{
end_flag = i;
printf("%d 人分のデータが入力されました\n", i);
break;
}
printf("国語 ->");
【 】; /* 国語の点数の入力 */
printf("数学 ->");
【 】; /* 数学の点数の入力 */
printf("物理 ->");
【 】; /* 物理の点数の入力 */

printf("出席番号 %d :国語 %d, 数学 %d,物理 %d\n", g[i].number,g[i].japanese, g[i].math, g[i].physics );

g[i].average = (float)(g[i].japanese + g[i].math + g[i].physics)/3.0;
}

if( end_flag == 0 )
printf("入力数が範囲を超えました.%d 人分のデータで集計します\n", i-1 );

return end_flag;
}

void calic_ave( int ave_num )
{
/* 3科目の各平均点を求める( japanese_ave, math_ave, physics_ave )*/

}
833けい ◆G8KDWKzFWs :2005/12/19(月) 17:23:09
void main ( void )
{
int i;
int ave_num;

ave_num = data_input();
calic_ave( ave_num );

for( i=0 ; i<ave_num ; i++ )
{
printf("%d さんの平均点は %f です\n", g[i].number, g[i].average);
}

printf("国語の平均点は %f です\n", japanese_ave);
printf("数学の平均点は %f です\n", math_ave);
printf("物理の平均点は %f です\n", physics_ave);
}

834デフォルトの名無しさん:2005/12/19(月) 17:35:55
[1] 授業単元: C++言語U
[2] 問題文(含コード&リンク): 文字列、1文字が与えられた時、これをポインタで
               で入力し文字列中に含まれる文字の個数を計算する
               関数、およびmain関数を記述せよ 
  
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C++
[4] 期限:明日まで
[5] その他の制限: なし。
835デフォルトの名無しさん:2005/12/19(月) 17:35:59
うはwww


うちの大学の課題だらけじゃんwww


同一人物か?www


836デフォルトの名無しさん:2005/12/19(月) 17:38:53
>>835
どこ?
837デフォルトの名無しさん:2005/12/19(月) 18:05:05
>>835
そんなやつもいるだろ。
そんな大学に行った意味のないやつは無視してやれ。
あそでそいつが困るだけだ。
838デフォルトの名無しさん:2005/12/19(月) 18:07:00
>>834
#include <stdio.h>

int count(const char *str, const char ch)
{
    int cnt=0;
    while (*str!='\0')
    {
        if (*str==ch)
            cnt++;
        str++;
    }
    return cnt;
}

int main()
{
    const char *str="hello,world!";
    const ch='o';

    int cnt;

    cnt=count(str, ch);

    printf("%s中に%cは%d個です\n", str, ch, cnt);


    return 0;
}
839デフォルトの名無しさん:2005/12/19(月) 18:30:30
[1]C言語
[2]
#include <stdio.h>

int main(int argc, char #argv; i++) {

int i;

for (i = 0; i < argc; i++) {
printf("%s\n",argv[i]);
}

return 0;
}
文字列str内の全ての数字文字を削除する関数
  void del_digit(char *str) { /* … */ }
を、添字演算子を用いずに作成せよ(例、"AB1C9"を受け取ったら、"ABC"とする)
[3]環境
[3.1]WindowsXP
[3.2]ttgcc
[3.3]C
[4]早ければ早いほど助かります。よろしくお願いしますm(__)m
[5]文字列
840デフォルトの名無しさん:2005/12/19(月) 18:56:34
[1] 授業単元: プログラミング応用
[2] 問題文(含コード&リンク):

実行例など含め結構長いのでこちらに置かせていただきます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1320.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C++
[4] 期限: [2005年12月21日9:00まで]
[5] その他の制限:必ず問題文に沿ったプログラムを作ること…だそうです。

メンバを簡単に説明されただけなので正直サッパリです…。
何方かご教示お願いします。
841デフォルトの名無しさん:2005/12/19(月) 18:57:10
>>839 似たコードは何度か出てるが、もう一度。
char *del_digit(char *str)
{
char *from, *to;
for (from = to = str; *from; from++) {
if (!isdigit(*from))
*to++ = *from;
}
*to = '\0';
return str;
}
842839:2005/12/19(月) 19:25:38
>>841さん MinGWでは無理みたいです。fromはまだ習ってません・・・。せっかくやっていただいたのにすいません・・・。
843デフォルトの名無しさん:2005/12/19(月) 19:41:23
>>819

ありがとうございます。
関数宣言時に注意を怠ってました。
844デフォルトの名無しさん:2005/12/19(月) 19:48:52
>>842
>MinGWでは無理みたいです。fromはまだ習ってません
工エエェェ(´゚д゚`)ェェエエ工
845839:2005/12/19(月) 20:00:54
他のやり方は無理でしょうか・・・。
846839:2005/12/19(月) 20:05:25
少しミスがあったので直しました><
[1]C言語
[2]
#include <stdio.h>

int main(int argc, char #argv[])

int i;

for (i = 0; i < argc; i++) {
printf("%s\n",argv[i]);
}

return 0;
}
文字列str内の全ての数字文字を削除する関数
  void del_digit(char *str) { /* … */ }
を、添字演算子を用いずに作成せよ(例、"AB1C9"を受け取ったら、"ABC"とする)
[3]環境
[3.1]WindowsXP
[3.2]ttgcc
[3.3]C
[4]早ければ早いほど助かります。よろしくお願いしますm(__)m
[5]文字列
847839:2005/12/19(月) 20:17:34
何回もすみません;;#argvではなくて*argvでした;;
848デフォルトの名無しさん:2005/12/19(月) 20:24:57
>>847
mingwのエラーの内容でも書いたら。どうせ、必要なヘッダをincludeしていないとか、プロトタイプが無いとかだろうけど
849デフォルトの名無しさん:2005/12/19(月) 20:55:34
>>838

ありがとうございます!。
あと文字列と一文字をユーザが任意で入力できるように
するにはどうしたらいいのでしょう?。
850デフォルトの名無しさん:2005/12/19(月) 21:21:16
[1] 情報処理演習
[2] 2つの分数a/bとc/dが与えられたとき、
(a/b)+(c/d) (a/b)-(c/d) (a/b)*(c/d) (a/b)/(c/d)
を計算するプログラムを作成しなさい。ただし、a,b,c,dは自然数とする。
可能であれば訳文した結果が表示されるようにする。(分母、分子の最大公約数GCDで割る。)
  
和だったら分子=ad+bc、分母=bdとおいて割ろうとしたんですが、
どうしても分子/分母の形にならず、切り捨てられて0になります。
分母、分子の値を保持する2つの変数を用いて表現できるそうなんですがどうすればよいのでしょう?
[3] 環境
 [3.1] Linux
 [3.2] すいません、わかりません
 [3.3] C言語
[4] 12/21
851デフォルトの名無しさん:2005/12/19(月) 21:37:31
>>846
839と一緒じゃないの?
841とか似たコードが何度も既出。
852デフォルトの名無しさん:2005/12/19(月) 21:41:59
>>850
1つの関数の返り値は1つ
副作用を利用してポインタ使うか
intメンバを複数持つ構造体を使うか

さすがにこれではダメだろうと思うが一応あげとく
#include<stdio.h>

int d_add1(int,int,int,int);
int d_add2(int,int,int,int);
int gcd(int,int);
int main(void){
    int a,b,c,d;
    scanf("%d/%d",&a,&b);
    scanf("%d/%d",&c,&d);
    printf("%d/%d+%d/%d=%d/%d\n",a,b,c,d,d_add1(a,b,c,d),d_add2(a,b,c,d));
}
int d_add1(int a,int b,int c,int d){
    int p=a*d+b*c,q=b*d;
    return p/gcd(p,q);
}

int d_add2(int a,int b,int c,int d){
    int p=a*d+b*c,q=b*d;
    return q/gcd(p,q);
}
int gcd(int a,int b){return 1;/* 自分で考えてね */}
853デフォルトの名無しさん:2005/12/19(月) 22:00:55
[1] 授業単元: 情報処理演習1
[2] 問題文: meibo.txtにある名簿(ローマ字)をグループmeibo_aを作成して
       全員をmeibo_aに所属させてユーザ登録せよ。ただし、'ん'は'n'一文字とする
[3] 環境
 [3.1] Linux
 [3.2]
 [3.3] Cもしくはシェルスクリプト
[4] 期限: 12月22日まで
[5] Linuxのインストールの流れの問題の一つです。
  1.su コマンドで管理者になる
  2.グループ作成は
# /usr/sbin/group meibo_a
と入力
  3.名簿の登録には、suzukiなら
   # /usr/sbin/useradd -g meibo_a suzuki
と入力
  この作業をプログラムでします。
  ディレクトリがややこしいかもしれないですが
  よろしくお願いします。
854デフォルトの名無しさん:2005/12/19(月) 22:06:30
『|=』『&=』の意味ってなんなんでしょうか?
855デフォルトの名無しさん:2005/12/19(月) 22:10:55
>>854

a += b
a = a + b

a |= b;
a = a | b;

a &= b;
a = a & b

| &の演算子がわからないのならお手上げ

>>851
>副作用を利用してポインタ使うか 
>intメンバを複数持つ構造体を使うか 
のあたり
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1321.zip
856デフォルトの名無しさん:2005/12/19(月) 22:16:50
>>850
素人っぽく書いてみた。
http://sourcepost.sytes.net/sourcepost/sourcedownload.aspx?source_id=26526
もっとエレガントなのがいい?
857デフォルトの名無しさん:2005/12/19(月) 22:24:41
>>848さん
c:/MinGW/bin/../lib/gcc-lib/mingw32/3.2.3/../../../libmingw32.a(main.o)(.text+0x
97):main.c: undefined reference to `WinMain@16'
ってでます・・・。
858デフォルトの名無しさん:2005/12/19(月) 22:39:02
>>857
君がわれわれの想像を上回る初歩的ミスを犯しているであろうことは分かった。
859デフォルトの名無しさん:2005/12/19(月) 23:03:44
>>858さん
どこがミスってるのかもわからないです・・。
860デフォルトの名無しさん:2005/12/19(月) 23:08:52
1] 授業単元: プログラミング
[2] 問題文 円周上に複数の輪(円)を書くプログラムをつくりなさい
[3] 環境
 [3.1] Windows
 [3.2] lcc
 [3.3] c
[4] 期限:12月20日
今関数を習ってます。
値渡しを使うみたいです。
おねがいします。
861デフォルトの名無しさん:2005/12/19(月) 23:12:09
>>859
手持ちの環境で、いわゆるhello, worldはコンパイルできるのか?

>>860
グラフィックス系はライブラリ指定のこと。
あと、手書きでもいいからサンプル画像をつけてくれるとよろし。
862デフォルトの名無しさん:2005/12/19(月) 23:14:44
てゆか今関数習ってますとかいう段階でこの問題ってどうよ?
863デフォルトの名無しさん:2005/12/19(月) 23:21:31
[1] プログラミングC++
[2] strtokの例外処理。
[3] 環境
 [3.1] OS: windowsXP
 [3.2] .NET 2003
 [3.3] どちらでもか。
[4] 期限: 12月20日
[5] その他の制限:strtokを使用する。
読み込む文字列はシフトJISを想定
ソースです。
#include <stdio.h>
#include <string.h>

int main(void)
{
char str[]= "警察署 パーキング 豊田";
wchar_t *tp;

/* スペース.を区切りに文字列を抽出 */
tp = strtok((wchar_t*) str, " . " );
puts( tp );
while ( tp != NULL ) {
tp = strtok( NULL," , " );
if ( tp != NULL ) puts( tp );
}

return 0;
}
お願いします。
864デフォルトの名無しさん:2005/12/19(月) 23:33:17
>860
     ○
   ○   ○
 ○       ○
   ○   ○
     ○
こんな感じです。うちの教授さっぱりわかんないんですよ。自分で関数作ったりしてますし。
おねがいします。
#include <stdio.h>
#include <math.h>
は使うみたいです。
一つの輪を作る処理を関数として書き、複数回呼び出すらしいです。
865デフォルトの名無しさん:2005/12/20(火) 01:27:12
>>859
>>1のロダにソース上げて見ろ
866質問君:2005/12/20(火) 01:31:15
質問です。時間が。。。
あさってまでの宿題です。
まだ習い始めたばかりのCなんですが、
#include <stdio.h>
int main()
{
printf("test");
return 0;
}
をコンパイルして、EXEファイルができました。
それを開くとコマンドプロントが開いて、
testと表示させるにはどうしたらいいのでしょうか?
867デフォルトの名無しさん:2005/12/20(火) 01:33:08
>>864
math.hは使ってない。cxが中心のx座標。cyが中心のy座標。radiusが半径。
#include <stdio.h>
int m[50][50];
void draw_circle(int cx, int cy, int radius) {
    int x, y, d;
    d = 3 - 2 * radius;
    y = radius;
    m[cx][radius + cy] = m[cx][-radius + cy] = m[radius + cx][cy] = m[-radius + cx][cy] = 1;
    for (x = 0; x <= y; x++) {
        if (d < 0) d += 6 + 4 * x;
        else d += 10 + 4 * x - 4 * y--;
        m[y + cx][x + cy] = m[x + cx][y + cy] = m[-x + cx][y + cy] = m[-y + cx][x + cy] = m[-y + cx][-x + cy] = m[-x + cx][-y + cy] = m[x + cx][-y + cy] = m[y + cx][-x + cy] = 1;
    }
}
int main(void) {
    int cx = 10, cy = 10, radius = 10;
    int i, j;
    draw_circle(cx, cy, radius);
    for (i = 0; i < cy + radius + 1; i++) {
        for (j = 0; j < cx + radius + 1; j++)
            if (m[i][j] == 1) printf("○");
            else printf(" ");
        printf("\n");
    }
}
868デフォルトの名無しさん:2005/12/20(火) 01:34:05
#include <string>

class A
{
public:
A( const std::string &path );
private:
std::string m_path;
};

A::A( const std::string &path )
: m_path( path )
{
}


main() {
std::string str = "c:\";
A a( str );
}

のコンパイルが通りません。
エラーメッセージは、
undefined reference to `A::A(std::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&)'

何がいけないのでしょうか?
869デフォルトの名無しさん:2005/12/20(火) 01:34:19
>>866
printf("test\n");
としても表示されないか?
870デフォルトの名無しさん:2005/12/20(火) 01:37:16
>>868
"c:\\"
871デフォルトの名無しさん:2005/12/20(火) 01:38:52
>>870 回答ありがとうございます。

でもごめんなさい、うそ書きました。
std:string str = "hoge";
に訂正します。。。
872質問君:2005/12/20(火) 01:41:08
はい
普通にコマンドプロンプトでexeフォルダ名を入れてインターキーを押すと
実行できるのですが、そのexeフォルダのアイコンをダブルクリックしたら
コマンドプロンプトが一瞬表示されるのですが、何も表示されません。
873デフォルトの名無しさん:2005/12/20(火) 01:42:39
>>872
それはそういうものだからそうなるんだよ。
874質問君:2005/12/20(火) 01:44:42
・・・
>>873
875デフォルトの名無しさん:2005/12/20(火) 01:46:09
>>871
main()の前にintさえいれればまともにコンパイル通るんだが。
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Metrowerks C/C++ Compiler for Windows/x86. Version 3.0.3 build 343
876デフォルトの名無しさん:2005/12/20(火) 01:47:01
>>874
それは実は表示されていて、一瞬で消えているだけです。コマンドプロンプトを起動して、
そこからexeを指定すればきちんと表示されているのが分かるはずですよ。
877質問君:2005/12/20(火) 01:49:15
>>876
それを一瞬で消えないようにするにはどうするのでしょうか?
878868:2005/12/20(火) 01:50:43
>>875
確認ありがとうございます。

うーん、、、実際はmain の前にint が書いてありまして
それでも上記のエラーが
A a( str );
の部分ででてしまいます。。。
引数が( const std::string &fuga )
の関数呼び出しは
呼び出し時に
std::string hoge = "文字列";
関数名( hoge );
の記述で問題ないのでしょうか?
879デフォルトの名無しさん:2005/12/20(火) 01:51:20
最後の行に getc();
880868:2005/12/20(火) 01:51:33
>>876
スタートメニューのアクセサリからMS−DOSプロンプトを起動して
そこにexe ファイルをドラッグアンドドロップしてみそ。
881質問君:2005/12/20(火) 01:54:05
>>879
エラーになりますが、、、
882質問君:2005/12/20(火) 01:56:12
>>881
そうではなくてexeファイルをクリックするだけで、
勝手にコマンドプロンプトが開いて、testと表示させたいんです。
883質問君:2005/12/20(火) 01:56:53
間違いました>>880です
884デフォルトの名無しさん:2005/12/20(火) 01:57:58
>>882

#include <stdio.h>
int main()
{
puts("test");
getchar();
}
885デフォルトの名無しさん:2005/12/20(火) 01:58:16
>>878
問題ない。
「実際は」とさっきから言っている以上、かなり簡略化したソースを
提示しているんだろう。丸ごと出したら?それが出来ないなら、君の
環境(OS、コンパイラ)と共に、エラーが起きるできる限り最低限の
ソースを提示したらいい。
886質問君:2005/12/20(火) 02:01:10
>>884
ありがとうございます!!
でもどうしてそのようになるのでしょうか?
それと警告が出てきました
887デフォルトの名無しさん:2005/12/20(火) 02:02:47
人の話はちゃんと聞こうな
888デフォルトの名無しさん:2005/12/20(火) 02:03:15
>>886
いま君の詰まっていたところは初歩的すぎる段階のところだ。
もうちょっと自分で勉強してから聞きなさい。
889デフォルトの名無しさん:2005/12/20(火) 02:04:12
>>886
getchar()について調べなさい。
890868:2005/12/20(火) 02:04:25
>>885
アドバイスありがとうございます。
それが今すぐできない状況ですので、じっくり確認して報告したいと思います。
891質問君:2005/12/20(火) 02:08:13
それでは少しくぐってきます。
またここでお世話になると思うのでよろしくです
892デフォルトの名無しさん:2005/12/20(火) 02:11:53
>>891
ここは宿題丸投げスレで質問は別に質問用のスレがあるからそっちの
ほうがちゃんと応えてくれると思うよ。
893デフォルトの名無しさん:2005/12/20(火) 02:15:08
>>891
何を“くぐって”くるのやら
894デフォルトの名無しさん:2005/12/20(火) 02:29:26
このスレの解答住人は暇潰しにプログラムが書きたいだけで
必ずしも人にプログラミングを教えたいわけではないからな。
少なくとも俺は。
895デフォルトの名無しさん:2005/12/20(火) 02:32:56
なにをいきなり…
というかそりゃそうだろ
896デフォルトの名無しさん:2005/12/20(火) 04:23:57
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク)
 文字列を引数として受け付けて,その文字列中に現れる一番出現頻度の高い文字を返す関
数を作成せよ。ただし,受け付ける文字列は全て小文字のアルファベットから構成されると
仮定して良い

自作コード
http://up.viploader.net/mini/src/viploader1744.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々) windowsxp
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) vc6
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 12/20
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
897デフォルトの名無しさん:2005/12/20(火) 04:57:02
>>896
l=i;//count[i];
printf("%c", alp_count(str, size) );
898デフォルトの名無しさん:2005/12/20(火) 05:03:08
899デフォルトの名無しさん:2005/12/20(火) 06:01:45
900デフォルトの名無しさん:2005/12/20(火) 07:06:34
>>896
同じ学校wうはw
901デフォルトの名無しさん:2005/12/20(火) 09:31:55
>896
母校の課題みたいだ。まだ同じ課題やってんのか。
902850:2005/12/20(火) 09:56:55
>>852
>>856
ありがとうございます
903デフォルトの名無しさん:2005/12/20(火) 11:07:36
[1] 授業単元:プログラミングU
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1296.txt
上の二分探索木のプログラムに対して、ノードを削除する機能を実現する関数を作成せよ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:12/24まで
[5] その他の制限:(1)挿入 (2)探索 (3)表示 (4)削除 (0)終了と表示して、
4を入力するとデータを削除できるようにしてください。

さっぱりわからないのでお手上げ状態です。
どなたか教えてください。
904デフォルトの名無しさん:2005/12/20(火) 11:56:00
>>903
・ 削除するノードを見つける
・ 削除するノードの右が無ければ左の木を代わりとして繋ぐ
・ 削除するノードの左が無ければ右の木を代わりとして繋ぐ
・ 両方あれば、とりあえず右の木を代わりとして繋ぎ、
 その木の左端に左の木を繋ぐ
 (逆でもいい)
905デフォルトの名無しさん:2005/12/20(火) 11:58:52
ところで木ってなに?おいしい?
906デフォルトの名無しさん:2005/12/20(火) 12:09:51
たくましいよ
907デフォルトの名無しさん:2005/12/20(火) 12:29:01
>>903
その前に、ノードの追加の処理(ApndNode)はこれでいいの?

たとえば"A"、"B"の順でを追加するとする。"A"はOK。でも"B"の追加をすると
"B"がrootになって、"A"は行方不明。

まちがっていたらスマソ
908907:2005/12/20(火) 12:38:49
間違ってた!スマソ
909デフォルトの名無しさん:2005/12/20(火) 12:47:14
標準入力から入力した文字列の順序を逆さまにして、標準出力へ表示するCプログラムを作成せよ。例えば、"abc"と入力すると"cba"と出力する。
910840:2005/12/20(火) 12:52:38
何方か840お願いします…
なんとか入力された日から曜日を割り出すものまでは作ったんですが後が分かりません。
911デフォルトの名無しさん:2005/12/20(火) 13:39:49
>>909
sage天ぷら

Cしかわかんね
912デフォルトの名無しさん:2005/12/20(火) 13:51:56
scanf("%d%d%d",&a&b&c);
printf("%d%d%d",c,b,a);
913デフォルトの名無しさん:2005/12/20(火) 13:53:26
>>909
そんなプログラムならすぐ書けるけど (てかもう書いてある)
テンプレないからちゃんと出来てるかわかんない。
914デフォルトの名無しさん:2005/12/20(火) 13:57:06
独学者は門前払いですか?
915デフォルトの名無しさん:2005/12/20(火) 13:57:36
916デフォルトの名無しさん:2005/12/20(火) 13:59:13
917デフォルトの名無しさん:2005/12/20(火) 13:59:32
次スレはやめに誘導おながいね
918デフォルトの名無しさん:2005/12/20(火) 14:00:04
初心者ですが、ココの課題勝手にやっていいですか?
課題がないと何していいかわからないし。

まだ見てないけど初心者向けの課題って結構あるのかな。
919デフォルトの名無しさん:2005/12/20(火) 14:03:28
920デフォルトの名無しさん:2005/12/20(火) 14:04:08
眠い中逆に入力するプログラム書いたのに
テンプレ茄子&マルチかお(´・ω・`)

int InputRevers(char *str)
{
char *temp;
temp=(char*)malloc(strlen(str)+1);

for(int i=1;i<=strlen(str);i++)
temp[i-1] = str[strlen(str)-i];
temp[strlen(str)]='\0';
strcpy(str,temp);
free(temp);
return 0;
}

('A
921903:2005/12/20(火) 14:21:54
>>904
よかったらそれをC言語で書いていただけないでしょうか?

>>907
URLのプログラムは参考書に載っていたものです。
922デフォルトの名無しさん:2005/12/20(火) 14:57:37
[1] 授業単元:プログラミング
[2] 問題文:
次のプログラムを改良し、(ヒント:double D を使ってもよい)
それぞれの1から20までの自然数Aにつき、
Bを0.1から5.0まで0.1刻みに計算させ、
それぞれのAでCを最小にする場合を求め、
その時のAとBとCをファイルに出力するプログラムを作成しなさい。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
FILE *dis;
double B,C;
int A;
main()
{
dis = fopen("1.txt","w");
for (A = 1; A <=20; A++){

C = B + A / B;

fprintf (dis,"%d\t%.1f\t%f\n", A , B , C);
}
}
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:CとC++のどちらでも可
[4] 期限: 2005年12月20日まで(すいません今日です)
[5] その他の制限: なし
多分、ヒントはfor (D = 1; D<=50; D++)を使ってもいいということでしょう。その先が分かりません。
今日中なのですが、どうか宜しくお願いします。
923デフォルトの名無しさん:2005/12/20(火) 15:18:36
そのヒントとヒントの解釈はむちゃくちゃだな。
924922:2005/12/20(火) 15:31:35
>>923
すいません。
ヒントについては、誰かがしゃべっていたのを勝手に付け加えたものです。
B = D / 10;
とするつもりだそうです。

後は問題文はそのままです。

よりよい方法があったら、教えてください。お願いします。
925デフォルトの名無しさん:2005/12/20(火) 15:46:27
>>909 >>1
漢字対応はしていないから

#include <stdio.h>
#include <string.h>

void main(void)
{
char s[512];
int i;

printf("文字列を入力してください。\n");
scanf(s);

for (i = strlen(s)-1; i >= 0; i--) {
putchar(s[i]);
}
putchar('\n');
}
926デフォルトの名無しさん:2005/12/20(火) 15:54:01
[1] 授業単元:プログラミング演習
[2] 問題文
http://www.r.dendai.ac.jp/~kotoh/datastr/Dspln-4.pdf
http://www.r.dendai.ac.jp/~kotoh/datastr/Data04.txt

[3] 言語:C++
[4]期限:本日中でおねがいします。

927デフォルトの名無しさん:2005/12/20(火) 15:55:05
>>925
> void main(void)
> scanf(s);
何言語で書いているんだ?厨房臭いソースだな
928デフォルトの名無しさん:2005/12/20(火) 15:57:54
>>922
ためしに計算してみて当たってたら使ってw(今習ってる途中だし、ヘッダは習ってません。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
FILE *dis;
double B,C;
int A;
double D;
int main()
{
dis = fopen("1.txt","w");
for (A = 1; A <=20; A++){
D=B=0.1;
C=(B/10) + A / (B/10);

for(B=2;B<=50;B++)
{
if((B/10) + A / (B/10)<C)
{
C=(B/10) + A / (B/10);
D=B/10;
}
}


fprintf (dis,"%d\t%.1f\t%f\n", A , D , C);
}
}
929デフォルトの名無しさん:2005/12/20(火) 16:02:19
>>928
やべ、最適化できまくれる・・・
930デフォルトの名無しさん:2005/12/20(火) 16:10:58
>>926
東京電機大学の中の人も大変だな...
何でsleep()を使わずに、ループさせるんだろう?
931デフォルトの名無しさん:2005/12/20(火) 16:10:59
932デフォルトの名無しさん:2005/12/20(火) 17:19:22
#define LSIZ5000
int main(void)
{
short *a,*pa;
a=(short *)calloc(LSIZ,sizeof(short));
pa = a;
l_seti(a,19999,pa);
return 0;
}
void l_seti(short a[],int n,short *pa)
{
pa+=2;
if(n>100000000)
{ a=pa;
*a = n/100000000; n = n%100000000;
a--; *a = n/10000; n = n%10000;
a--; *a = n;
}
else if(n>10000)
{ pa -=1;
a=pa; *a = n/10000; n = n%10000;
a--; *a = n;
}
else
{ pa-=2; *a = n; }
}
933932:2005/12/20(火) 17:19:54
上のプログラムですが、
callocで確保したaの配列の各要素に4桁の整数を入力していくプログラムです。
paはaの値の入っている部分の末尾をさすポインタです。
l_setiではpaは上手くaの末尾をさしていたのですが
mainに戻ると、paはaの先頭を指してます。
paをそのまま維持してmainに戻るにはどうすればよいでしょうか?
934デフォルトの名無しさん:2005/12/20(火) 17:23:57
void l_seti(...)をshort * l_seti(...)に変更、
関数の最後でreturn pa;
main()の
l_seti(...)をpa = l_seti(...)に変更。

つーか、関数と変数について勉強しなおせ。
935932:2005/12/20(火) 17:25:22
>>934
はい・・・ありがとう。
936922:2005/12/20(火) 17:42:27
>>928 氏 >>931
本当にどうもありがとうございます。これで課題が出せます。

>>928
分かり易いプログラムありがとうございます。
見てすぐに何をやっているのか分かりました。

>>931
高度なプログラムありがとうございます。
main()の中で double min のような定義の仕方があるのですね。
初めて知りました。勉強しなおしてきます。
937デフォルトの名無しさん:2005/12/20(火) 18:05:27
>>936
>931のプログラムには欠点がある。
・Bが0.1のときのCを事前に計算しているため、Cの計算ロジックが二箇所に現れる。
このため、直感的でないばかりか素人っぽくない。
・実数値の足し算を繰り返す形になるため、誤差が累積しやすい。
ま、>936のレベルなら>928でいいんでない?
#B/10が多すぎるけど。
938デフォルトの名無しさん:2005/12/20(火) 18:38:33
>>840 (= >>910)
「必ず問題文に沿ったプログラムを作ること」というのを守ってたら時間かかっ
た。というか俺は >>840 の教授はまともな仕様も作れない素人だとしか思えな
い。英語の文法もめちゃくちゃだし、こんな能無しが大学で教えているかと思う
と実に腹立たしい。
まぁ >>840 の伝達が悪かったのだだけかもね。

前置き長くなったけどソース↓
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26534
"Download as file" っていうリンクをクリックしてね。
939デフォルトの名無しさん:2005/12/20(火) 21:55:01
[1]授業単元:情報処理
[2]問題文:キーボードより自分の名前をローマ字で入力し、先頭から指定した文字数でのアルファベットを表示するプログラムを作れ。
[3]言語:C
[4]期限:2005年12月21日(水)明日まで


このプログラムをよろしくお願いします。
940デフォルトの名無しさん:2005/12/20(火) 22:04:49
>>939
先頭から指定した文字数まで表示?
941デフォルトの名無しさん:2005/12/20(火) 22:09:07
hiroyuki で 4文字だとしたら hiro を表示しろってことか?
942デフォルトの名無しさん:2005/12/20(火) 22:10:33
hiroyuki で 4文字だとしたら o を表示しろ とも読めるな…
943デフォルトの名無しさん:2005/12/20(火) 22:16:17
レス待つより両方作ってしまった方が早いような
944デフォルトの名無しさん:2005/12/20(火) 22:17:16
仕様が曖昧なままでは作る気がしない
945デフォルトの名無しさん:2005/12/20(火) 22:18:49
こんな感じかな?

#include <stdio.h>
int main(){
char c;
scanf("%*3c%c",&c);
printf("%c\n",c);
return 0;
}
946デフォルトの名無しさん:2005/12/20(火) 22:24:11
スイマセン、例がありました。

C:¥〉○○○.exe
C:¥〉tokyo
C:¥〉4
C:¥〉4文字目はyです。
C:¥〉5
C:¥〉5文字目はoです。
C:¥〉25
C:¥〉文字列の大きさより大きい値です。
C:¥〉0
C:¥〉終了

みたいなかんじです。
947デフォルトの名無しさん:2005/12/20(火) 22:32:58
#include<stdio.h>

int main(void)
{
char name[256] = "";
int num;
int c;

scanf("%s" , name);
scanf("%d" , &num);
if(name[num-1] == '\0')
printf("字数オーバー");
else
printf("%d番目の文字は%c\n" ,num, name[num-1]);
return(0);
}
こんな感じ…?勉強中なんでもっとよいのあったら教えてください
948デフォルトの名無しさん:2005/12/20(火) 22:33:15
>>946
例は本当にそれで正しいのか?めちゃくちゃだぞ
949デフォルトの名無しさん:2005/12/20(火) 22:35:04
というか一連の流れの中で何文字目がいくつかを複数表示するの?
950デフォルトの名無しさん:2005/12/20(火) 22:36:24
>>947
恒例だがscanfの戻り値チェック
それと勿体ないからintじゃなくてchar
もっともAlignmentの関係で意味ないかもしれんがな
951デフォルトの名無しさん:2005/12/20(火) 22:38:18
例はプリントにかいてあるまま書きました。
952デフォルトの名無しさん:2005/12/20(火) 22:39:23
>>947
num が 0 以下の時の処理が抜けてるよ。 ついでに num が 257 以上でもヤバイ
953デフォルトの名無しさん:2005/12/20(火) 22:43:14
"C:¥〉"を毎回出すのもわすれている
954デフォルトの名無しさん:2005/12/20(火) 22:48:03
#include <stdio.h>
#include <string.h>

int main(void){
int max, num;
char name[256];

scanf("%s", name);

for(;;){
scanf("%d", &num);
if(num == 0)break;
else if(strlen(name) < num)printf("文字列の大きさより大きい値です。\n");
else printf("%d文字目は%cです\n", num, name[num-1]);
}
}
955947:2005/12/20(火) 22:52:32
>>950 >>952 >>954
ああ・・なるほど〜 見直してみます
というか人の宿題で勉強してる俺って(;´Д`)
956デフォルトの名無しさん:2005/12/20(火) 22:54:19
>>953
実は毎度 %PROMPT% を展開して表示せよだったりsくぁwせdrftgyふじこlp;
957デフォルトの名無しさん:2005/12/20(火) 23:13:00
ユーザは 「C:> 4」って打他ないとエラーが返って来るかもよ。
958デフォルトの名無しさん:2005/12/20(火) 23:27:15
【質問テンプレ】
[1] 授業単元: 不明
[2] 問題文(含コード&リンク): 1:Cプログラムファイルと出力結果ファイル(プログラムの実行結果)を結合して1つのファイルに出力するプログラムを作成。
                     プログラムフィアル名はコマンドラインから入力。
                   2:問い1のプログラムに次の機能を追加「コマンドラインパラメータに[-n]を指定した場合には、プログラムファイルには行番号をつけて出力させなさい。
                     (〜〜〜〜% cat -n ファイル名)と同等の機能
                   3:問い2のプログラムに次の機能を追加「コマンドラインパラメータに[-c]を指定したばあにはプログラムファイルの英小文字が、英大文字に変換
                     されるようにする。
                   4:プログラムファイル(ファイル名はコマンドラインより入力)を入力し、英小文字(英字は全て大文字に変換する)、数字の利用頻度を出力
                     させる。また利用頻度をグラフ化する。
                    a: 3 ***
b: 5 *****
c: 3 ***
d: 1 *
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: ([2005年12月21日18:00まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
プログラムにはGOTO文は使用しない
959デフォルトの名無しさん:2005/12/20(火) 23:28:08
>>938
ありがとうございます。
最悪未完成レポート提出になるかと思いました…。

あとこのscanfはcinで書き換えるとどうなるんでしょうか?
960デフォルトの名無しさん:2005/12/20(火) 23:38:47
みなさんありがとうございますm(_ _)m
なんとかなりました。
961デフォルトの名無しさん:2005/12/20(火) 23:40:10
誰だお前は
962デフォルトの名無しさん:2005/12/20(火) 23:40:55
>>926
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1324.txt
qsortで雛形を作ってみた。
あとはバブルなり自前でソート毎に考察してみてくれ。
963デフォルトの名無しさん:2005/12/20(火) 23:51:46
long型のデータを-10とセットし、その情報をビットの上位から下位に入れる変数を用意し、
関数に渡すmainとビット展開し、セットするvoid型の関数を作成する。

この問題わかる方いますか?
ビット情報を上位から下位に入れる変数という意味が正直わかりませんorz

964デフォルトの名無しさん:2005/12/21(水) 00:13:28
せめてテンプレには従って欲しいがね
long型が 32bit 長なら 32個の変数を用意して その変数に 0 or 1 をセットせよ
ってことか?

ビットフィールド使うのはマズイんかな
965デフォルトの名無しさん:2005/12/21(水) 00:24:24
1100を0011にせよ。って事では無くて?
>>963
日本語で良いよ
966963:2005/12/21(水) 00:27:51
むちゃむちゃ意図に反したコード書いてると自分でも思うんですが
足掻きに足掻いて書いた結果がこれです

#include <stdio.h>

void Set(long *, long *);

int main(void)
{
int ret;
long lg, olg;
ret = 0;
lg = -10;

Set(&lg, &olg);
printf("%ld\t%ld\n", lg, olg);

return ret;
}

void Set(long *p, long *q)
{
*q = *p;
}

でもビットを上位から買いに入れろって言う事だから
FFF6をF6FFにしろってことなのかな・・・(´・ω・`)
正直俺一人じゃこれが限界ですよ('A`)
967デフォルトの名無しさん:2005/12/21(水) 00:27:55
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
7の階乗を再帰的に計算する次のプログラムの空欄を埋めよ。
#include<stdio.h>
#include<stdlib.h>
int factorial(int n);
int main(void)
{
int n=7;
printf("%d!の答えは%d\n",n,factorial(n));
(1)
}
int factorial(int i)
{
printf("factorial(%d)\n",i);
if ((2))
return 1;
else
(3)
}
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc?
 [3.3] 言語: C
[4] 期限: 2005年12月22日午前8時まで
(1)はよくわかりません。
(2)はn==1
(3)はreturn(n*factorial(n-1));
と思ってるのですがよくわからないので空欄にしときます。どなたかお願いします。

968938:2005/12/21(水) 00:32:30
>>959
cin じゃないとダメなの? cin 使っても atoi() のために #include
<stdlib.h>しないとダメだから scanf() 使って #include <stdio.h> でいい
かな、と思ったんだけど。
main の中は割と適当だから偉い人書き直して。
969963:2005/12/21(水) 00:35:23
関数の中でセットするわけだからおそらくグローバル変数使うか
アドレス使うのは間違いないと思い込んでるんですよね。

前者は問題に

>その情報をビットの上位から下位に入れる変数を用意し、関数に渡すmain

と書かれているのでグローバル変数はまずありえないと思います。
よってアドレスで参照渡しをさせるプログラムだという事は想像できるんですが。

ビットの上位から下位に入れる。
ビット展開し、セットする。

この二つが全くわからないのです。('A`)
970デフォルトの名無しさん:2005/12/21(水) 00:37:25
>>963
こんなかんじでどうよ。
#include <limits.h>
#include <stdio.h>
void reverse_bit_long(const long src, long *dst){
  unsigned long src_mask = 1 << (sizeof(long) * CHAR_BIT - 1);
  unsigned long dst_mask = 1;
  for(*dst = 0; src_mask; src_mask >>= 1, dst_mask <<= 1)
    if( src & src_mask ) *dst |= dst_mask;
}
void print_bit(long n){
  unsigned long mask = 1 << (sizeof(long) * CHAR_BIT - 1);
  for(; mask; mask >>= 1)
    printf("%d", !!(n & mask));
  printf("\n");
}
int main(){
  long n = -10, m;
  reverse_bit_long(n, &m);
  print_bit(n);
  print_bit(m);
  return 0;
}
971963:2005/12/21(水) 00:44:44
>>970
レス有難うございます。
limits.hは使ったことないんですが、それはこっちで何とかして調べます。

やはりシフトビット使うんですね(´・ω・`)
972デフォルトの名無しさん:2005/12/21(水) 01:37:16
[1] 授業単元:プログラミング
[2] 問題文: int型の変数の内容を、10進数、16進数、2進数にして出力するプログラムを作成せよ。
出力例
10sin 16sin 2sin
1234 04D2 0000100 11010010
-1 FFFF 1111111 11111111
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C言語
[4] 期限: 2005年12月22日まで
[5] その他の制限: なし
x進数間の変換をどう書けばいいかよくわかりませんorz
973デフォルトの名無しさん:2005/12/21(水) 01:42:05
>>972
数の入力はどういう風にすればいいの?
scanf() 的なこと? コマンドライン引数?
974デフォルトの名無しさん:2005/12/21(水) 01:44:18
>>973
入力方法は指定されていませんが、おそらくscanf()で10進数を入力するものだと思います。
975963:2005/12/21(水) 01:51:51
>>972
前課題で作った奴です。
入力じゃないですけど参考にでもしてください。
#include <stdio.h>
void print(short);
int main(void)
{
int ret;
ret = 0;
short sdt = 10;

sdt |= 0x0003;
print(sdt);
sdt &= 0xFFF1;
print(sdt);
sdt ^= 0x000E;
print(sdt);

return ret;
}
976963:2005/12/21(水) 01:52:25
void print(short st)
{
int i, j, k;
short tmp[16];
printf("%d\n", st);
for(i = 0, k = st; ; i++)
{
tmp[i] = k%2;
if(k < 2)
{
for(j = 0;j <= i; j++)
{
printf("%d", tmp[j]);
}
break;
}
k /= 2;
}
printf("\n%x\n", st);
}

977デフォルトの名無しさん:2005/12/21(水) 01:59:36
>>975 >>976
細かいところはまだ多少わかりませんが、調べてみます。レスありがとうございました。
978デフォルトの名無しさん:2005/12/21(水) 05:59:19
double DecimalToBinary(int decimal,int byte)
{
  double BinaryNumber=0;
  double a=1;

  for(int i=0;i<byte*8;i++)
    if(decimal&1<<i){
      for(int j=0;j<i;j++) a*=10;
      BinaryNumber += a;
      a=1;
    }

  return BinaryNumber;
}

引数
int decimal
2進数にする数値が格納されたint型の変数
int byte
decimalのサイズ(sizeof演算子か4を指定すればok);

戻り値
2進数として格納されたdouble型の値


int hoge=21;
printf("%f",DecimalToBinary(hoge,sizeof(int)));

一応動作確認したけど・・・不安
979978:2005/12/21(水) 06:04:53
負の値が変になるねwwwwごめぽorz
980デフォルトの名無しさん:2005/12/21(水) 06:40:56
int って 16bit ですか?
981デフォルトの名無しさん:2005/12/21(水) 06:59:15
>>980
CHAR_BIT * sizeof(int)
982デフォルトの名無しさん:2005/12/21(水) 07:01:06
#include <stdio.h>

#define BUFSIZE 1024

int main(void)
{
int h2b[] = {0, 1, 10, 11, 100, 101, 110, 111,
1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111};
char buf[BUFSIZE];
int data, i;

while(1){
fprintf(stdout, "int [exit: n] ? ");
fgets(buf, BUFSIZE, stdin);
if(buf[0] == '\0' || buf[0] == 0x0D || buf[0] == 0x0A){
fprintf(stderr, "Illegal input\n");
continue;
}
if(buf[0] == 'n'){
fprintf(stdout, "See you, thanks.\n");
break;
}
983デフォルトの名無しさん:2005/12/21(水) 07:02:27
if(!sscanf(buf, "%d", &data)){
fprintf(stderr, "Please input int value\n");
continue;
}
fprintf(stdout, "%12s%12s%36s\n", "10sin", "16sin", "2sin");
fprintf(stdout, "%12d", data);
sprintf(buf, "%08X", data);
fprintf(stdout, "%12s", buf);
fprintf(stdout, "%4s", "");
for(i = 0; i < 8; i++){
data = buf[i] - '0';
data -= (data > 9) ? 7 : 0;
fprintf(stdout, "%04d", h2b[data]);
}
fprintf(stdout, "\n");
}

return 0;
}
%gcc -o baka baka.c ; ./baka
int [exit: n] ? 2147483647
10sin 16sin 2sin
2147483647 7FFFFFFF 01111111111111111111111111111111
int [exit: n] ? 2147483648
10sin 16sin 2sin
-2147483648 80000000 10000000000000000000000000000000
int [exit: n] ? n
See you, thanks.
984デフォルトの名無しさん:2005/12/21(水) 07:22:55
馬鹿馬鹿しい
985デフォルトの名無しさん:2005/12/21(水) 08:55:34
[1] 授業単元: ソフトウェア
[2] 問題文(含コード&リンク):

(C、FORTRAN)の代入文が入力データとして与えられたとき、
(1) ポーランド記法に変換して出力する構文解析プログラムを作成する。
(2) 木構造表現に変換して出力する構文解析プログラムを作成する。

ただし、(C、FORTRAN)の代入文は、「単純変数=算術式」であり、算術式は、
単純変数(英字1文字)の演算数と、「+、−、*、/」の4種類の演算子および
「(」,[)]によって表現される任意の数式とする。
「+」、「-」は単純演算子としても使用されるとする。
演算子間の優先順位は{*,/}>{+,-}>{=}とする。

入力された代入文の文法的な誤りはできるだけ検出すること。
例えば、A=B+*C、A=B*(C-(D)) などをエラーとする。

[3] 環境
 [3.1] OS: windouws
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:どちらでも可
[4] 期限: 今日の夜まで
[5] その他の制限: なし

朝までがんばってもできませんでした。。。どなたかお願いします。
986デフォルトの名無しさん:2005/12/21(水) 09:36:07
987デフォルトの名無しさん:2005/12/21(水) 10:16:30
>>972
#include <stdio.h>
char* to_radix_n(unsigned int x, char* s, int n) {
    int index = 0, left = 0, digit;
    char temp;
    do {
        digit = x % n;
        s[index++] = digit > 9 ? digit - 10 + 'A' : digit + '0';
    } while (x /= n);
    s[index--] = '\0';
    while (left < index) {
        temp = s[left];
        s[left++] = s[index];
        s[index--] = temp;
    }
    return s;
}
int main(void) {
    char s1[256], s2[256];
    int x = 1024;
    printf("10shin 16shin 2shin\n");
    printf("%d %s %s\n", x, to_radix_n(x, s1, 16), to_radix_n(x, s2, 2));
    x = -1;
    printf("%d %s %s\n", x, to_radix_n(x, s1, 16), to_radix_n(x, s2, 2));
}
988デフォルトの名無しさん:2005/12/21(水) 10:19:42
>>985
> A=B*(C-(D))
これをどうエラーにせよと?
989デフォルトの名無しさん:2005/12/21(水) 10:41:32
俺も思た
990デフォルトの名無しさん:2005/12/21(水) 10:54:25
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):

次の規則に従い、入力された文字列を変換して表示する。
T ・・・タブとして空白を2つ入れる(Tは表示しない)
N ・・・改行する(Nは表示しない)
+ ・・・空白を1つ入れる(+と空白を置きかえる)
その他・・・そのまま表示する。
$ ・・・¥に変換する。($は表示しない。)
$の後に入力されてる数値を円に換算する。換算率は1$を120円とする。
行の先頭の英小文字は英大文字に変換する。

実行結果
データを入力してください:aprilT$012-NmayTT$023+Njune T$026+N
April \01440-
May \02760
june \03120

[3] 環境
 [3.1] OS: windouws
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:どちらでも可
[4] 期限: 今夜まで。
[5] その他の制限: なし

レベルの低い課題ですが、どうしてもできなかったのでおねがいします。
991デフォルトの名無しさん:2005/12/21(水) 11:19:51
どなたか>>967お願いできないでしょうか?
992デフォルトの名無しさん:2005/12/21(水) 11:26:47
>>990
#include<ctype.h>
#include<stdio.h>
int main(){
    int ch,is_not_first=0;
    printf("データを入力してください:");
    for(;;){
        switch(ch=getchar()){
            case EOF:case '\n':return 0;
            case 'T':putchar(' ');
            case '+':putchar(' ');break;
            case 'N':putchar('\n');is_not_first=0;continue;
            case '$':putchar('\\');scanf("%d",&ch);printf("0%d",ch*120);break;
            default :putchar(is_not_first?ch:toupper(ch));
        }
        is_not_first = 1;
    }
}
993デフォルトの名無しさん:2005/12/21(水) 11:33:50
>>991
自分で考えたやつでコンパイルして味噌。
もしかしたら(1)はコンパイラが(警告として)教えてくれるよ。
994990:2005/12/21(水) 11:40:59
>992
ありがとうございました。
あれだけ自分が悩んでたのにこんなに簡単に作れちゃうんですね。
しかも、途中まで自分が作ってた奴よりスリムなできす。

またソース見ながら悩みます。
まだC始めて3日目ですがもっともっと勉強しなければ。ノシ
995デフォルトの名無しさん:2005/12/21(水) 11:51:02
>>991
(1)return 0;
あとはあってる。
996素人 ◆g5knElKWAw :2005/12/21(水) 12:22:44
次のスレの3-4で質問しました。どなたかお願いします。
997972:2005/12/21(水) 12:55:52
レス下さった皆さん、ありがとうございます。
これで提出できます(^^ゞ
998デフォルトの名無しさん:2005/12/21(水) 17:37:33
埋め
999デフォルトの名無しさん:2005/12/21(水) 18:01:25
うめー
1000デフォルトの名無しさん:2005/12/21(水) 18:01:55
printf("1000");
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。