1 :
デフォルトの名無しさん :
2005/12/09(金) 20:41:33
>1 乙
3 :
デフォルトの名無しさん :2005/12/09(金) 21:12:30
[1]授業単元:プログラミング [2]問題文:名前、年齢、住所をメンバーとする構造体をつくり、学籍番号下二桁を引数として値を返す関数をもつプログラムを作成せよ(三名の情報) [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト [3.3]言語:C [4]期限:今週中 [5]その他の制限:適当に値など入れて下さい 今度こそよろしくお願いします
やらんよ
>>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] 特にありません よろしくお願いします
>>7 【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 <-------------------- ココ
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
[1] 授業単元:プログラム技術 [2] 問題文(含コード&リンク):自由課題で今までの勉強で学んだことを生かしてプログラムを作るというものです。 プログラムは発売日、商品名、ジャンル、値段を入力し閲覧、日付抽出をするスケジュール帖のようなプログラムです。ジャンルはdatファイル で管理し番号を入力して対応したものを入れるようにしています。またスケジュールのデータも全てdatで管理しています 上記の閲覧、入力はできるのですがtime.hを使いメニュー画面でその日対応するものがあれば 「今日は○○の購入予定日です」と表示させたいのですがうまくいきません。 また日付抽出も西暦月日と完璧に入れないと抽出されないのですがこれは何文字分抽出するか調整すればできるのでしょうか? [3] 環境 [3.1] OS:WinXP [3.2] コンパイラ名とバージョン:borland [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: 12月13日 アップローダーにアップしたのですが誤ってスレッドタイトルが54代目のままになってしまいました。削除キーも入れ忘れ てしまい自分ではどうしようもなくなってしまいました、本当に申し訳ありません。どうにかできる方がいらっしゃったら本当に お手数ですが修正をお願いできないでしょうか
とりあえず前スレ使いきれよ
[1] 授業単元: プログラミング実習 [2] 問題文(含コード&リンク): 日本と4時間30分時差のある街の現在の時刻を求めるプログラムを作成せよ。 ただし、日本の時刻が進んでいるとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年12月12日 scanfで時間[hour]、分[min]を入力するところまで完成しました。 (全くの初心者で申し訳ございません) よろしくお願い致します。
>>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;
}
15 :
14 :2005/12/09(金) 23:50:11
逆だった、日本が進んでいるのか。
16 :
デフォルトの名無しさん :2005/12/09(金) 23:50:54
とりあえず、前スレの問題で片付けてないのは、820、838、912か? 912はもう完成間近か
17 :
14 :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;
}
18 :
11 :2005/12/10(土) 00:00:27
>>14 さん
14さんのコードを書いて動かしてみたら正常に働きました!!
本当にありがとうございます。
今後はこのスレのお世話にならないように精進致します。
てゆーかtime.hつかわんでよろしいのかそれは
scanf がどーとか言ってるレヴェルだからいいんじゃねーの?
22 :
11 :2005/12/10(土) 00:16:38
>19さん そんな殺生な・・・
23 :
デフォルトの名無しさん :2005/12/10(土) 00:54:30
俺が学生の時代にもこういうスレがあったら、 3年間も学校いかず遊んでいなかったのにな・・・
おっさん何かあったの?
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日) 全くの初心者なので、どうしたらいいのかわかりません・・・ 何卒よろしく御願いします
>>7 B, n が与えられたときに φ=|B - A^n| を最小化する
二重対角行列 A を求めればいいんだよね? | | は二乗ノルムあたりで.
アルゴリズムのオーダーを問わない(A^nを厭わない)なら,
数値微分して最急降下法を使うのが簡単かな.
何度も A^n したくないなら,多分かなり真面目に考えないと駄目っぽい.
どんな文脈でその問題が出てきたのか書いてくれると少しは何かなるかも.
>>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
前スレを使い切れって
32 :
デフォルトの名無しさん :2005/12/10(土) 13:06:40
>>26 マルコフ性をもつ一年間の推移行列Bが与えられていて、それから一週間(一日)の
推移行列Aを推定したいという問題です。
マルコフ性を仮定すれば、B=A^4が成立しますが、実際の方程式では厳密に解がでな
いので、最小二乗法などを使って推定してAを求めます。
Aは二重対角行列と書きましたが、とりあえずB=A^nを満たす行列であれば構いません。
推定するアルゴリズムは他で実装してあるので、そこへ渡すA^nをどうやって記述すれ
ばよいのかわからないため質問しました。
もしなにかわかりましたらお願いします。
>>32 推定するアルゴリズムが何を入力にとって何を出力するのか書いてくれないとどうしようもなさげ
A^n を計算するのは力技で何とかなるが、 何に近似させればいいのかよくわかんない。
A^n の表現方法が分からないというのなら、 Bの推定アルゴリズムで行列を表現するデータ構造を 使っているはずだから、それに習えばいいんじゃねーの?
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 推定するアルゴリズムの部分はソフトウェアのソルバーとして組み込まれているので、
どういった構造になっているのかわからないという問題があります。
説明不足ですいません。
>>37 何がわからないのがさっぱりわからんぞ。
推定のアルゴリズムが「行列 B を取って |B-A^n|^2 を最小にする A を返すのなら、
それを使うだけじゃないのか?何が不満なんだ?
[1] 授業単元: コンピュータ基礎 [2] 問題文:文章を小文字入力し。それを大文字に変換するプログラム ただし、小文字以外は変換しない。 また、連続する複数のスペースは一つに縮める。 実行例 ? To be TO BE [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月11日20時 [5] その他の制限:
>>39 ctypeのtoupperは使っていいのか?
>>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;
}
(゚Д゚)ノ ァィ
43 :
42 :2005/12/10(土) 18:09:29
ゴメンなさい 大文字は大文字のまま出力ですか
44 :
42 :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度目の正直(゚Д゚)ノ ァィ
>>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;
}
EBCDICには対応
なんの話だ
文字コードが連続していないって話だろ。
toupper使うなって指示がある時点でそこは仕方ないだろ つーか大文字・小文字の変換法ぐらいは知識として知っておいても損はないが そういうのを埋めて可搬性を高めるために標準ライブラリがあるのに この程度の物をわざわざ実装しろって課題を見る度にアフォかと思うな
まぁ、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 > proguraming
本当にこんなつづり?
programming
>>54 ありがとうございました。
しかし、自分で、課題1があなた様と同じにできたことがなりより
うれしかったです。
ホントありがとうございました。やっぱ、SEのかたですか?
>>55
【FM−V】\(・。・;lllll)反省
>>56
うぜ
>>57 同じってことは、あなたも間違えてるのか。
59 :
54 :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日
[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; }
>>63 マルチスレッド下での busy wait な気がするが、それだけじゃわからん。
65 :
63 :2005/12/11(日) 17:21:02
>>64 Petersonのアルゴリズムとか言ってたような・・・
違ってるかも。
>>65 そうみたいね。そんな名前がついてるなんて知らなんだ。
67 :
63 :2005/12/11(日) 17:34:04
>>66 どういったアルゴリズムか分かりますか?
調べたら、相互排除を保障するとか書いてあったのですが、
どうやって保障してるのか分かりません。
70 :
68 :2005/12/11(日) 17:45:00
>>69 書式とはなんでしょう?アスキーとかバイナリってことですか?
拡張子は.datになってます
ごめんね適切な言葉使えてなくてごめんね データファイルの中身はどういう風になってるの? 例をあげてみて、ってことがいいたかったんだ
73 :
63 :2005/12/11(日) 18:01:17
>>68 ,70
ありがとうございます。
検索したときつづりが間違っていたようで、ヒットしなかったみたいです。
74 :
デフォルトの名無しさん :2005/12/11(日) 18:24:05
すみません、またまた60です。出力までやっといったのですが。なぜか、ゼロが出力されます。なんででしょうか?教えてください、お願いします。
75 :
デフォルトの名無しさん :2005/12/11(日) 18:26:53
>>74 現状のソース上げてみたら?
そうすればエスパー以外の人も答えてくれるかもしれないよ
77 :
62 :2005/12/11(日) 18:56:21
>>72 TokyoTokyo 6.8
Shinagawa Tokyo22.0
Shin-YokohamaKanagawa 55.1
こんな感じです
>>77 悪い聞いたものの答える時間がなさそうだ
別の人に答えてもらってくれ
>>77 どこで駅名が区切れるかわからんので俺には無理。
TAB区切りです 貼り付けたら間がなくなってしまいました すみません
82 :
62 :2005/12/11(日) 20:06:18
81は俺じゃないです Tokyo Tokyo 6.8 Shinagawa Tokyo 22.0 Shin-Yokohama Kanagawa 55.1 こんな感じです
>>82 半角スペースが何個かなのか、全角スペースが何個かなのか、Tabなのか、
それとも入り混じってるのか。
>>84 半角スペースなのか、全角スペースなのか、Tabなのか.
( ゚д゚ )
とりあえずそのテキストファイルうpしたら?
TAB区切りだね。パソコン触り始めて何年目か聞いたほうがよかったのかな?
>>91 宿題やってあげん俺がいうのは
大きなお世話かもしれないけど、
HT ::= <水平タブ>
PRINTABLE-CHAR ::= <印字可能な US-ASCII>
word ::= +PRINTABLE-CHAR
word *HT word *HT word
みたいな、微妙な TAB 区切りだね。
きっと、スキップ、スキップ、らんらんなコードになるんだろね
もしかしてホワイトスペース区切り? /etc/fstab みたいな…
94 :
61 :2005/12/11(日) 21:41:22
>>75 様
コンパイルエラーが出ました。
どうしてでしょうか?
>>93 /etc/fstab の SP を HT に置換えたみたいな
厳密にはは 8 文字 TAB でぴったり揃えてるっていうか
>>94 そのコンパイルエラーの内容を貼り付けると
どこかのやさしいおじさんが助けてくれるかも
>>94 俺の環境(gcc 4.0.2)だとエラーなんて出なかったぞ
エラー内容とコンパイルオプションを晒してみ
>>90 あぷろだの調子が悪いのかコピペもできないのかどっちだ
そもそも90に対してのレスではなかったのだが
98 :
デフォルトの名無しさん :2005/12/11(日) 22:14:48
プログラミングの課題です、もぅ難しいすぎてOTL ここ天元台スキー場では、スキー・スノボーのシーズンとなり、積雪情報に人々の関心が高まっている。そこで、今日の積雪量(cm)を入力し、下記の滑降条件を基にして、お客様に本日スキー・スノボは可能か、可能でないかを案内するメッセージを出力するプログラム。 ・積雪量と滑降条件 積雪量: 50cm未満: 不可 積雪量: 50cm以上、100cm未満: 一部可 積雪量: 100cm以上: 可
>>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
それから回答ありがとうございます、参考にしてがんばってみます。
>>100 次からはメール欄には"sage"と入力しよう
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");}
何の指定もないみたいだしこんな形でもいいんじゃないの?
どこがわからなかったのか参考までに聞かせて欲しい
期限が近いのでもしよければお願いします…
>>51 前スレ838ねえ、、、
win 32 アプリか?
109 :
デフォルトの名無しさん :2005/12/12(月) 00:52:35
>>107 mindataにはFLT_MAXとか、大きな値を入れておかないと。
できればmaxdataには-FLT_MAXを。float.hをインクルードしておけ。
【質問テンプレ】
[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時間考えても動きませんでした。
誰か私を助けてください!
>>107 関数の名前が重複しているから。名前を変えれ。
[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] その他の制限:標準関数を使わずに消していく。 宜しければお願いします。
>>111 っていうかさ、[5] のリンク貼ってるから、君にとって非常にマズイと思うよ。
ここは、こっそり帰ってもう一度どうするか考えたほうがいいと思うよ。
もういちど考えて来ます(+д+)
こういうのって削除依頼って通るのかな?
削除したいなら一応出しておけばいいんじゃね?
>>111 ssortって名前から考えるとシェルか単純選択か?
どっちにしてもアドレス出したのはやばすぎるな
アドレス出るとなんでやばいん?
教官にメール
つか、もうされてるだろ。
[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です。 過去ログと似たような課題で申し訳ないのですがどうか宜しくお願いします。
>>134 なぬ!a[]の中身をずらせってか。マンドクセ('A`)
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です
お金払ってもいいくらい悩んでます。
これができないと留年する可能性があるんで。
>>136 puts(&a[n]);
みたいな書き方なら
ポインタ使ったとは言わせない
139 :
98 :2005/12/12(月) 02:10:39
>>104 プログラミングがまだまだ初心者でIFを使った作り方がわかりませんでしたTT
もっと勉強したいと思います。
>>109 違いますよ〜OTL
>>139 まず入門書を読め。人に聞くのはその後だ。
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 次からは全角文字を入れないようにしてね。コピペで使えなくなるから。
>>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
>>143 そこのサイトも若干自己流の解釈に基づいている部分があるから要注意。
配列とポインタの辺りは特に。
おー、こういう嘘もあるね。
>typedef で宣言される新しい型名は一般に大文字を使用する。
[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
154 :
デフォルトの名無しさん :2005/12/12(月) 13:12:05
155 :
デフォルトの名無しさん :2005/12/12(月) 13:14:09
156 :
デフォルトの名無しさん :2005/12/12(月) 13:17:28
>>151 ただのコード晒しても意味わからんし
直リン禁じてる糞アップローダー使うくらいなら
>>1 のローダーを使え。
>>151 質問:
(1)queueをどう使って
(2)どう与えられた姓名を
(3)どう格納して
(4)どう出力して欲しいのか
158 :
デフォルトの名無しさん :2005/12/12(月) 13:23:41
一応このソースはstackを使ってるんですけど、これをqueueに変えて 姓 名からなる数行のテキストを構造体にセットして、メモリを動的に確保するって問題です。
出力は、入力されたテキストが行ごとに出力されれば問題ないです。
ぱっと見たところstackじゃなくて単方向listのような気がするのだが。
どう見ても線形リストです
[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] その他の制限: 特になし よろしくお願いします。
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); }
fibonacci(int n, int* count) { (*count)++; ...
167 :
デフォルトの名無しさん :2005/12/12(月) 16:31:23
>>166 main()で表示させるやり方がわからないです(>_<) 。
168 :
129 :2005/12/12(月) 17:38:09
>>149 様、どうもありがとうございます。
早速使用してみたのですが、コンパイルはうまくいくのですが、./a.ouを実行すると
「セグンメンテーション違反です」と表示され動作しません。
どうすればいいのでしょうか?
環境はlinuxのFedoraCore3と特にいじっていない状況なのですが・・・
ちなみに
>>61 さんと条件が似ていたので75さんのプログラムも実行してみたのですがそちらではセグメンテーション違反は起きませんでした。
169 :
149 :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文字以上のケースがある場合バグる。
フォーマットが異なる行があるとバグる。例えば最終行が改行のみとか空白とか。
170 :
129 :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をぬきだせるようにできないでしょうか?
大変申し訳ないのですが、どうかよろしくお願いします。
ただなのに仕様追加変更の多い、クライアントさんだなぁ、おぃ ま、俺がやるわけじゃないから、別にいいんだけどね
仕様変更をしないクライアントなんぞいないしな
仕様変更が限度を超える顧客はブラックリスト行きですよ(・∀・)
174 :
dai ◆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問でも結構ですのでどうかどうか、よろしくお願いします。
>>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;
}
>>167 printf("fibonacci(%d)=%d\n",i,fibonacci(i));
を
fprintf(stderr, "fibonacci(%d)=%d\n",i,fibonacci(i));
にかえてふぃぼナッチ。
画面に出んことが問題のようだから、後は君自身が考えるのだ。
177 :
151 :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 上記が問題文になります。明日中の提出なのでかなり焦ってます。どうかお願いします。
俺にとって、問題文から分かるのは、 struct _NODE { char *line; NODE *next; char sei[MAXLEN_SEI]; char mei[MAXLEN_MEI]; }; にするってことぐらいなんだよな
>>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;
}
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]; } } }
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] その他の制限: 繰り返し文まで習っています
>>141-142 ,144様
ほんとにありがとうございます。
何か俺にできるお礼みたいなことってありますか?
>>183 エロ画像うp。
は冗談として何もしなくていいと思う。
>>178 さん
一応構造体の宣言の方はなんとかできそうなんです、
queueにするためのプログラムが解らないのでまた何かわかりましたら教えてください。
貴重な意見サンクスです。
>>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");
}
}
187 :
129 :2005/12/12(月) 21:21:57
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さんありがとうございます。
大変、助かりました。
>>185 いや、なんつうか、queue として扱えるプログラムに既になってると思うから、
入力の仕様と、出力の仕様を出すと誰かに作ってもらえるかもしれない
と思ったりするんだけどね
191 :
dai ◆U6.AsIbFBU :2005/12/12(月) 21:51:40
>>175 ,179
ありがとうございました。すごくたすかりました。
192 :
151 :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] その他の制限: 繰り返し文まで習っています。
for(i=0; i<=50; i++) for(j=0; j<50; j++) printf("%2d ",50-i);
>>188 オーバーロードが上手く行ってないので、デフォルトのコンストラクタが呼ばれているね
main.cpp の double hoge(int& n) の result_type に const が付いていないのが原因
196 :
62 :2005/12/12(月) 22:50:28
お願いします。せっぱ詰まってます
197 :
デフォルトの名無しさん :2005/12/12(月) 22:51:31
198 :
195 :2005/12/12(月) 22:52:01
あぁ、それか CMyFunctor の const メンバの表記方法を間違えてるのか コンストメンバを宣言する場合正しくはこうね。result_type (* const func)(argument_type& arg)
>>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] その他の制限: どなたか、よろしくお願いします。
[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で上げました。どうかお願いします
203 :
190 :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;
}
204 :
190 :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; } で満足できんか ?
>>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;
}
[1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク): C言語でモンテカルロ法を使って円周率の近似値の計算(10000回繰り返す)、 また、同じくC言語で台形公式を使って円周率の近似値の計算(分割数は1000、sqrt使用) を完成させなさい。 [3] 環境 [3.1] OS:Windows(XP) [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:明後日の12月14日 実質2題聞く事になってしまうのですが、これができないと単位落とされてしまうので かなり切羽つまっています・・ 1問だけでもなんとかよろしくお願いします。
207 :
188 :2005/12/12(月) 23:35:55
208 :
188 :2005/12/12(月) 23:39:24
あ,定義もすべてnamespaceの中に書かなくっちゃ!! すまそ. 自己解決!
209 :
190 :2005/12/12(月) 23:42:35
>>192 >>203 >>204 ごめん、よくみるとこのソース、スタックだね。
> /* 新しいノードを最後尾に付ける */
> pivot->next = head;
> /* 最後尾を新しいノードにする */
> head = pivot;
last->next = pivot;
last = pivot;
みたいなことすると、que になると思う。
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
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が文字の場合を判別するものを入れればいいと思うのですが、 それがわからないので教えていただけないでしょうか。
[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
何でこんなに宿題多いんだ?
年末だからじゃね?
218 :
61 :2005/12/13(火) 00:41:35
>>75 様ありがとうございました。
プログラム正常に動作できました。
最後に質問なんですが、プログラムのはじめにある
getAvr()とは固有の関数なのでしょうか?それとも文章中にあるavrが関係しているのでしょうか?
検索したところあまりhitしなかったもので・・よければ教えていただけませんか?
>>218 ただのプロトタイプ(前方宣言)。で、ファイル中頃にあるgetAvrがその定義
>>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;}
>>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);
}
>>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);
}
>>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;
}
>>224 > fflush(stdin);
これだめ。入力ストリームにfflushは結果がundefinedだから。
226 :
デフォルトの名無しさん :2005/12/13(火) 02:26:31
正数1〜10の合計をwhile文の反復処理により求め、 数式の形で表示するプログラムを作成しなさい。 また、同じ内容をfor文を用いて表現しなさい。
>>222-223 さん
ありがとうございます、本当に助かりました!
これで単位は落とさずに済みそうです。
[1] 授業単元:計算機科学 [2] 問題文: 正数1〜10の合計をwhile文の反復処理により求め、 数式の形で表示するプログラムを作成しなさい。 また、同じ内容をfor文を用いて表現しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C++ [4] 期限:2005年12月13日 [5] その他の制限: よろしくお願いします。
さてCで書いていたのが無駄になってしまったわけだが
すいません
232 :
デフォルトの名無しさん :2005/12/13(火) 02:49:18
>>229 これ、ほんとにできないの?まずくない?
授業ぜんぜん出てなくて… どうかお願いします
授業に出ないんだったら、入門書の一冊でも読んでおけよ
ごめんなさい
どうかお願いします
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; }
C++って言ってるから、cout のほうがよくね? まぁ、たいした違いじゃないんだけどな。
>>237 =238
ありがとうございます。
でもできればcoutでお願いします。
お願いしている立場でこんなこと言って申し訳ないです。
241 :
デフォルトの名無しさん :2005/12/13(火) 03:38:03
>>240 贅沢なやつだwそれくらい自分で考えろ!
ごめんなさい。 本当にわからない…
後だし糞ウザス
244 :
237 :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は使ったことがない。これでいいか?
ありがとうございます!! 本当にありがとう
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 ; }
#include <stdio.h> int main(void) { return puts(getchar() & 1 ? "odd" : "even"); }
少しわからないことがあるので教えていただきたいのですが、 printf("数値をいれてください:");のような文の、「:」について なのですがこのスレで教えてもらったものをコピーで使うと 実行したときに改行されるのですが、自分で「:」を入力すると 「:」が出力されるだけで改行されません、どなたかわかる方 いたらよろしくお願いします。
scanf が原因
251 :
デフォルトの名無しさん :2005/12/13(火) 09:35:15
213です 期限間違ってました。 05年12月14日が期限です どうぞよろしくお願いいたします
できたよ
[1] 授業単元:情報管理論のゼミで出された課題です。 [2] 問題文:テンプレートマッチング(目のテンプレート)を用いた 顔認証のためのプログラムを作らなくてはなりません。 最終的に原画像がどのテンプレートにマッチしたのか ファイル名を表示せよ、という課題でした。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 今週中です。 [5] その他の制限:特にありません。 完全にお手上げ状態です。ヒントになるような事でも助かりますので どなたかよろしくお願いします。
とりあえず目のテンプレートをかこうや。 話はそれからだ
画像認識は門外漢だが、アルゴリズムがあるならその通りコーディングするだけでいいんじゃねーの?
>>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人分書かれており、これをリダイレクトして実行する。 おねがいします。
259 :
253 :2005/12/13(火) 13:53:48
>>254 >>255 >>256 ありがとうございます。
目のテンプレートや原画像の件ですが
2値化等の前処理はPhotoshopで良いとの事でした。
>>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;
}
コメントを消し忘れた。"/*fp*/"は無視していいよ。
262 :
たべちゃう :2005/12/13(火) 14:18:39
>>261 ありがとうございました。助かりました。
[1] 授業単元:情報処理 [2] 問題文:e^xとそのテーラー展開(6次まで)をxの定義域[0,1]で 0.05刻みで表示させ比較せよ。 [3] 環境 OS:UNIX 言語:C [4] 期限:17年12月15日 [5] その他の制限:配列の利用(テーラー展開の係数) おねがいします。
というよりマクローリン展開です。
>>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));
}
ありがとうございます。 参考にさせていただきました。
268 :
デフォルトの名無しさん :2005/12/13(火) 19:31:30
【質問テンプレ】 [1] 授業単元:情報処理U [2] 問題文(含コード&リンク): オセロを自動実行させるプログラムを作れ。 一手ごとに表示を止め、石を置いた場所の情報を表示するようにせよ。 なお、手は相手の石を最もひっくり返せるような手を選ばせるようにすること。 複数の手がある場合には任意の手でよい。 [3] 環境 [3.1] OS:Windows [3.2] VC 6.0 [3.3] 言語: C [4] 期限:今年中 お願いします。
269 :
268 ◆1QORIEwSUM :2005/12/13(火) 19:32:01
とり忘れてました
[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; } }
>>265 俺的にマクローリン展開は
テーラー展開の特定の条件の元での展開なような気がするんだよな
つうことで、マクローリン展開はテーラー展開の一種の感じがする
満足してもらえてるようだし、宿題も解決してるようだし、まぁ、どうでもいいよな
>>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;
}
>>270 printf("F(%d)=%d,G(%d)=%g\n",i,x,i,(double) y/x);
>>268 質問
(1) GUI?CUI?そもそも盤面を表示する必要がない(手のみ)?
(2-1) GUIなら何を使うように指示されている?ex)Win32APIなど
(2-2) CUIならどう表示したらいい?全角の●○□とか、表示に使う
.. 文字の指定をよろしく。
(3) 自動実行というのは両方をコンピュータが思考するようにせよということ?
275 :
268 ◆1QORIEwSUM :2005/12/13(火) 20:19:49
>>274 コンソールで両方ともCOMが思考です。
>>275 質問(1)について手のみの表示?盤面のみの表示?
追加質問:「一手ごとに表示を止め」とは、何らかの入力を求めてから
次の表示をせよということ?
>>275 宿題頼むんだからちゃんと質問に答えなさいよ。
278 :
268 ◆1QORIEwSUM :2005/12/13(火) 20:31:42
>>277 277 は 276 じゃないと思うけど
そんなに押し付けがましい、いいかたせんでもいい気がするんだけどね
ずっと、PC の前に張り付いてるわけでもないと思うし
宿題やりたい人が勝手にやってるんだしさ
280 :
270 :2005/12/13(火) 20:45:54
せめて、質問されたことをちゃんと読んでもらさず回答するくらいは当然だよな。 つーか、中途半端に答えるって、馬鹿にしてるんちゃう?
[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日 よろしくお願いします
>>281 > せめて、質問されたことをちゃんと読んでもらさず回答するくらいは当然だよな。
おっしゃるとおりだと思います
> つーか、中途半端に答えるって、馬鹿にしてるんちゃう?
と思われるんだったら、ほっときゃいいと思います
[1]授業単元:プログラミング [2]問題文:キーボードから入力した検索対象の文字列の中に、キーボードから入力した特定 の文字が含まれるかどうか調べるプログラム a.out 検索対象文字列 ABCD enter 検索文字 A 文字列にAはあります。 a.out 検索対象文字列 ABCD enter 検索文字 F 文字列にFはありません。 [3]環境 [3.1]OS:Linux [3.2]言語:C [4]期限:今週中 よろしくお願いします
287 :
282 :2005/12/13(火) 21:21:53
>>282 [5]その他 の所に、配列とポインタを利用して作成
と書くのを忘れていました・・・orz
お手数掛けますがよろしくおねがいします(´・ω・`
#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; }
289 :
288 :2005/12/13(火) 21:39:57
charstr1[256]; → char str1[256]; charstr2[256]; → char str2[256];
290 :
62 :2005/12/13(火) 21:41:41
解答できればお願いします。バイトと他のレポートで考える暇がありません。 明日までです。なんとかお願いします
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で扱える範囲を超えているからでしょうか? またこれを解決できるような型はありますでしょうか?
>>291 関数powの戻り値がdoubleだから
295 :
291 :2005/12/13(火) 22:09:59
>>293 さん
ありがとうございます。
大きい桁も表示できました。
ただprintfの%dところを%lfとしてみたのですが
12299・・・・・00000000.0000のような答えになりました。
66の66乗の下の方の桁が0になるとは思えないのですが
これは正確な答えを出せるのでしょうか?
XXXXXX . 000000000000000000 ↑この点はなんでしょう。
>>295 66の66乗の正解はこれ。
1229984803535237425357460579824952453848609953896821302286319065669207712270213276022808840210306942692366529569453244416
まずは「浮動小数点」でぐぐれ。
298 :
291 :2005/12/13(火) 22:15:50
>>294 さん
ありがとうございます。
戻り値の問題だったのですね。
>>296 さん
小数点です^^;
すみません、書き方が悪かったです。
小数点以下はよいのですがXXXXXX.000000の
XXXXXX(整数部)の下のほうの桁が・・・0000と
なっている、ということです。
感謝!!ありがとうございました。
300 :
201 ◆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 さん、解等ありがとうございます。ただ、ところどころ省略して書いてもらっているようで
なかなかコンパイルすることが出来ません……。自分でもいろいろと頑張ってみたのですが……
どなたか、全文をお願いできないでしょうか。なんどもすいません。
[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項に拡張しても柔軟に対応できるプログラムにする必要があります。 説明不足かもしれませんが、よろしくお願いします。
Linuxなんだけど、巨大ファイル1Tとかをオープンするには、fopen()系は 使えないんですか?
304 :
291 :2005/12/13(火) 22:36:17
>>297 さん
ありがとうございます。
浮動小数点でぐぐってみました。
丸め誤差ってのがあることは理解できました。
結局printfで表示するには%eとかで表示するしか
ないのでしょうか?
1229984803535237425357460579824952453848609953896821302286319065669207712270213276022808840210306942692366529569453244416
のように表示したいのですがよく分かりませんでした。
>>303 ありがとうございます。バイト終わったら検討してみます!
>>291 有効桁数とかあるから。
多倍長整数とかでググる
自分で多倍長演算ライブラリでも作れば?
>>303 実行してみたんですが、累計距離が0kmになってしまいます
>>309 303 じゃないけど、実行してみたらこんなふうになったぞ。
Input data filename:data.dat
Tokyo駅から下り方面は以下の通りです。
------------------------------
駅名:Tokyo
所在地:Tokyo
距離:6.800000km
駅名:Shinagawa
所在地:Tokyo
距離:28.800000km
駅名:Shin-Yokohama
所在地:Kanagawa
距離:83.900000km
>>310 コピペし直してみたら出ました
あと
if( ptr == NULL ){
*line = ptr_tmp;
}else{
/*ここを完成*/
}
/*ここを完成 */
}
のここを完成の部分が単文らしいんですが、そのように直せませんか?
312 :
291 :2005/12/13(火) 23:20:46
>>306 さん
>>307 さん
多倍長!なるほど、調べてみます。
アドバイスくださった方々、ありがとうございました。
313 :
303 :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;はいらない。
>>303 (*line)->down = ptr_tmp;
}
*line = ptr_tmp;
}
(*line)->down = NULL;
*line = ptr;
この変もなんか変じゃないか?
316 :
dai ◆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] その他の制限: 配列、関数、ポインタまで学習済みです。 きのうも質問させてもらったのですが、今日そのレポートを提出したところ、 なぜか、上記の課題を出されました……。 昼からずっと考えているのですが、やっぱり全然分かりません。 関数、配列がなんとなく分かる程度の自分にとってレベルが高すぎます…… お手数おかけしてすいませんが、どなたかお願いいたします。
>>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;
}
318 :
179 :2005/12/13(火) 23:45:03
>>316 ここが見られているんじゃないかね?
だとしたら自力で解くしかないと思うけど
まあ、個人的にはある程度自力でやってみて駄目出しするほうが好きなんだがね
気分転換代わりにやるかもしれないけど
319 :
デフォルトの名無しさん :2005/12/13(火) 23:54:48
>>316 君だけに与えられた課題ならここで晒された解答を教官は知っているな。
今回も丸写しだと・・・・
[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] その他の制限: 配列とポインタを一通り習いましたが、まだまだ理解できない部分が多いです・・・ よろしくです。
>>316 その教官タシーロだなw
2chは有名すぎるから他のとこで晒すとか。
>>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;
}
323 :
316dai ◆U6.AsIbFBU :2005/12/14(水) 00:20:26
なぜか、ですませちゃいましたが 課題を出された理由としては、試験の結果が悪かったため、 レポート点でカバーする必要があるらしいんです。 この板を見てるってことはないと思います。たぶんですけど。
>>323 コードの書き方が揺れてると怪しまれるから気を付けろよ
>>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);
}
[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] 一般化したプログラムで作るという条件付き。
質問ラッシュみたいになっててスルーされちゃったと思ったのでもう1回カキコしました。 連投スマソ
気長に待て。 無理にせかすと余計答えてもらえなくなるぞ。
>>332 どこに構造体を使うのか指定されてんの?
339 :
デフォルトの名無しさん :2005/12/14(水) 03:20:59
[1] 授業単元:情報処理演習2 [2] 問題文(含コード&リンク): 配列を使って、二分探索のプログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows2000 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今週中まで [5] その他の制限: 配列を使って解く
>>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;}}
>>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);
}
>322 ありがとうございました。 もしよければ、#include <stdlib.h> を使用しない方法での プログラムも教えて欲しいのですが・・・
条件・制限の後出しはだめです
344 :
デフォルトの名無しさん :2005/12/14(水) 09:26:12
>>342 atofに対応するもの作れってか。
また面倒くさいこと言うなぁ。
[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();
>初心者っぽくお願いします。 ワロタw
348 :
212 :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番と同じような書き方でお願いします。
自前のqsort()作れってか('A`)
趣味のおじさんプログラマなんだけど、ここを練習用に使っちゃだめなのかな ?
どうぞどうぞ
ありがとう。 プロじゃないし、バグが入っちゃうかもしんないけど、堪忍してね。
>>348 質問:
(1) qsortの使用可否
(2) 「完成せよ」とはどういう意味か。整列せよという意味か?
(2-1) 整列するとすれば昇順(小さい順)か降順(大きい順)か?
[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のみでお願いします。 どうも調べても配列を使ったものしか解説がないので…。
>>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;
}
>>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]));
}
}
つづく
つづき 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; } で、いいかな ? 無駄な外部変数とか残してみたんだけど。
361 :
360 :2005/12/14(水) 13:19:09
あと、median って中央値な気がするんだけど、 求めるのは平均でいいんだよね ?
>>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;
}
364 :
デフォルトの名無しさん :2005/12/14(水) 15:02:47
>>341 341さんありがとうございます!!
助かりました
[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] その他の制限:無し よろしくお願いします
[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] データはテキストファイルから読み込ませます。 区切るというのは数字でではなく上から何番目で区切るという意味です。 ファイルを読み込ませるとこまでは出来ます。 こんな課題を出されたけどどうすればいいのかさっぱり分かりません。 とりあえず区切り方が分からないので先にも進めません。 どうかお願いします。
>>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;
}
>>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);
}
}
>>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;
}
370 :
349 :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 ありがとうございます!
無事実行出来て答えも出ました。
371 :
349 :2005/12/14(水) 18:11:34
追加: 上に表示されたコードは、インデント(でしたっけ?)されていませんが、 実際のコードはインデントされています。
372 :
349 :2005/12/14(水) 18:14:08
さらに追加:
>>357 さんはちょっと勘違いされているようです。
表示させないのは { と } だけです。
書き方が悪かったようです。すみません。
373 :
349 :2005/12/14(水) 18:29:51
>>357 さんのコードを参考にして自分で作ってみたら、出来ました。
ちなみに、
if(strstr(str,"{")==NULL&&strstr(str,"}")==NULL )
{
puts(str);
}
これで出来ました。
ありがとうございます。
374 :
332 :2005/12/14(水) 18:45:03
すみません、説明不足でした。
>>333 構造体は年、月、日にちです。
>>336 閏年も考えてください。
よろしくお願いします
[1]授業単元:プログラミング [2]問題文:キーボードから文字列を入力し、その文字列を下記のような"流れるメッセージ"を 表示するプログラム。 a.out Enter ABCDE Enter ABCDE ABCD ABC AB A [3]環境 [3.1]OS:Linux [3.2]言語:C [4]期限:今週中 よろしくお願いします
>>375 ABCDE
ABCD
ABC
AB
A
は右揃えでおねがいします。
>>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;
}
>>374 例が間違ってるんだが、条件は本当にそれであってるか?
その例だと8091日ではなく8466日になると思うんだが。
379 :
デフォルトの名無しさん :2005/12/14(水) 19:57:08
すまん、NETに1ヶ月ほど繋がってなかったんだが、未解決の問題のリストを教えてくれんかね?
>>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;
}
>>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;
}
>>377 助かりました。 ありがとうございます!!
384 :
デフォルトの名無しさん :2005/12/14(水) 20:37:43
>>378 あっ。すみませんでした。今日の日にちは、関数でゲットして、生年月日は入力です!おそらく、そちらのミスかと思われます。
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言語に追われて泣きそう……
389 :
356 :2005/12/14(水) 21:05:47
>>356 追記
・スタック・キューは使わないで下さい。
お願いします。
[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日
>>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;
}
>>391 それst2に\0入ってなくね?
それにstring.h使ってないみたいだしstrcatもまずくね?
393 :
379 :2005/12/14(水) 21:58:44
>>380 リストでバブルソート、クイックソートは聞いたこと無いな。面白そうね。
>>385 Aが定義されてるとき、AA^(-1)=EなるA^(-1)を・・ああ、求め方わすれてるなぁ・・・
ありがと。飯買って来たらぼちぼちやってみますわ。
>>390 問題文からみると連結もint mystrcopy()
内でやらないといけなそうだし。
リストのソートか・・・ 俺ならリストのノード数カウントした後で、その分の配列作って そこに全ノードへのポインタ保存→ソートをやった後でリストを再構築する 直にリストにクイック適用してたら効率悪すぎるだろ(とゆうかできるのか?) 少なくとも俺はランダムアクセスイテレータ無しのデータ構造に対して 直にクイックを実装するようなアイディアは思いつかんな
>>395 多分リストで書いたほうが効率気にしなければ綺麗に書けるよ。
リストを簡単に扱える言語、例えば Haskell なんかだと
sort [] = []
sort (x:xs) = sort [y | y <- xs, y <= x] ++ [x] ++ sort [y | y <- xs, x <= y]
だけ。C で実装するとリストの連結とかフィルタを簡単にかけないからもっと長くなっちゃうけど、
同じ配列内で swap 連打するよりは、何をやってるかの見通しはいいはず。
>>384 そういうことじゃなくて、その例の実行結果が実際の日数と食い違ってるんだが。問題が間違ってるんじゃないか?
>>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 のインバースになる。
>>396 リストを言語レベルで扱えるならそれがいいかもな
でもCだと直にやるとリストの連結だの切り離しだので発生する
オーバーヘッドがでかくなって洒落にならん悪寒
>>398 それより元の行列Aを使って行列[A E]を作って
Aの部分を行列変換でEにした方がわかりやすくね?
プログラムにするのは面倒な気がするが(;´Д`)
401 :
360 :2005/12/14(水) 22:35:14
>>399 つうか、宿題は Haskell じゃなくて C でリストを使ったクイックソートが前提な気がするんだけどね。
俺も、
>>395 ぐらいのしか思いつかないな。shell sort ちっくではだめなんだよな、きっと。
402 :
360 :2005/12/14(水) 22:36:14
あっ、360 は気にしないでね。
また、やってるし。
問題の原文が分からんのでどうとも言い難いが、
>>395 の方式でいいんじゃね?
敢えてリストを直にクイックソートすることの意味が理解できん
とゆうか俺がそんな課題出されたら間違いなく
>>395 方式でやる
405 :
379 :2005/12/14(水) 22:44:32
リストのソートで。。。ってことならマージソートかのぅ・・・(なお、飯=言い訳寿司+焼酎でした)
>>399 実際
>>396 は「洒落にならん」コストをひっかぶって
それでも効率を気にしない実装なんだが。
407 :
356 :2005/12/14(水) 22:47:14
>404 皆さんを悩ませてすいません…。 まだノードはやっていないです… マージソートはやらなくてよいです。バブルとクイックでヨロシクお願いします。
>>406 うは・・・そんな実装いらなくね('A`)?
>>407 むしろバブルとクイックの方が難しくなると思われ
マージならリストみたいなデータ構造とも相成れやすいしな
リストならったのにノードという言葉がわからんのか
410 :
356 :2005/12/14(水) 22:51:25
>409 無知ですいません。ウチラではnodeではなくcellと呼んでます(爆
>>408 ちゃんとチューンされた実装を何十行かかけて書くよりも
無駄の多い実装を二行で書いた方がいい場面もあるだろう。
すれ違いスマソ
洒落にならんって本当にパフォーマンス計測したのか?
>>406 クイックソートが遅いってこともないだろ。
何を元にそう判断したのか?
きっと、406 はそんなこといってない気がする
クックソートはランダムアクセスが前提だし。 リストのソートには向かないんじゃね?
>>416 >クックソートはランダムアクセスが前提だし
ソースは?
やけに美味そうだな。
っつーかリストから要素取り出して配列にするのは無駄 リストから二分木に再構築する→リストに戻すが良い
[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 さっぱり分かっていない状況です。時間は全然ありませんが、なにか助言を頂ければと思います。
そもそも
>>356 は宿題じゃなくて趣味だと思ってたんだが、違うのかよ。
テンプレにも沿わなかったのも授業単元を書き様がなかったからだと解釈してたんだが…
424 :
356 :2005/12/14(水) 23:52:29
>>423 すいません…科目は伏せたかったのでテンプレ使いませんでした…
一応宿題です…
>>421 要素取り出して配列にする→リストに戻す
リストから二分木に再構築する→リストに戻す
かえって、効率が悪い気がするんだけど
あっ、ごめん。 要素取り出して配列にする→クイックソート→リストに戻す リストから二分木に再構築する→リストに戻す だね。
トリップを付け忘れました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 要するに、二次元配列の受け取り方が知りたいわけだな?
int (*a)[Y] か、もしくは int a[][Y] でいいよ。
432 :
デフォルトの名無しさん :2005/12/15(木) 00:24:22
433 :
379 :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])
みたいな感じで作ろうとしていたのですが……
読み出し、戻り値みたいなのがよく理解できてないもので。
435 :
356 :2005/12/15(木) 00:34:58
バブルソートはこんなカンジで while(入れ替えが発生しなくなるまで) { while(n-1番目までのセルについて) { if(入れ替え必要?){ 入れ替え!! } } } かなりnextのつなぎ替えをしなければいけませんが…
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;
} } }
}
>>437 ありがとうございました。実行できました。
>>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;
}
>>424 テンプレの[1]は別に「教科名」が知りたいのではなく、今どういう
内容をやっていてその課題が出されたのかを知ることで、問題を
解く際に出題者の意図に沿った解答をできるだけ出せるように配慮
して作った項目なんだけどなぁ。
どなたか
>>388 を解いて下さらんか。ずっと、考えてるが全くといっていいほどワカンネ
お礼は何もできないけど、死ぬほどカンシャします。偉そうでゴメンなさい
配列を引き数として受け取ることはできませんが。
できますよ
#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]; }
>>441 基本的にプログラムはmain関数から読みはじめるので
main関数が無いとどうにもなりません。
int main(void){
KochCurve(a,b,c,d,e);
Draw_graph();
Draw();
}
とか、適当に読み出したい順に引数を与えてmain関数の中で関数を呼び出してください。
それと、
void KochCurve(n, x1, y1, x2, y2){←カッコの位置が変なとこいってるよ。正しくはここ
>>445 ありがd。豆腐の角に頭打って死ぬぐらいカンシャしまつ
おやすみなさい
引数を「いんすう」と読んでもいいですか?
ひきすう です
二次元配列を関数に渡す方法を教えてください。 あー、ポインタで渡すのは不許可です。 また、配列へのポインタを渡すのも当然ダメです。
>>446 気持ちの悪いコーディングスタイルを他人に押し付けるのはやめてください。
452 :
デフォルトの名無しさん :2005/12/15(木) 03:08:25
>>450 /* 二次元配列を受け取る関数 */
void func(char array[][20])
{
}
/* funcの呼び出し */
char array [10][20];
func(array);
>>451 気持ちのいいコーディングスタイルを教えてください。
455 :
oll :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]その他の制限:学部と全く関係ない教養科目で全く分かってません お願いします
456 :
455 :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); }
459 :
oll :2005/12/15(木) 04:43:30
>>457 早くもありがとうございます!!!感謝
あとlal<10~-8で終了する条件を加えたいのですが・・・
重ね重ね申し訳ないです><
460 :
デフォルトの名無しさん :2005/12/15(木) 04:47:29
abs(sin(x)(N)-sin(x)(N+1)) < 10^-8 のつもりじゃないかな?
条件後付氏ね
463 :
oll :2005/12/15(木) 08:45:32
追加すんません その分はスルーしてください ありがとうございました
464 :
デフォルトの名無しさん :2005/12/15(木) 09:06:36
465 :
店長 :2005/12/15(木) 09:51:10
CASLU わかりますか?
>>355 >>362 ありがとうございます。
でも見たこともない単語ばっかりでした。
他にもやり方があればお願いします。
467 :
デフォルトの名無しさん :2005/12/15(木) 10:48:57
>>439 ありがとうございます。できれば、ろだの1242の実行するのに何秒かかるかというプログラムを教えていただけませんか?
>>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] その他の制限: 木構造を習い始めたところです。
>>468 一般大学の受業じゃ<stddef.h>なんてまずでてこないと思うぞ
ポインタを返す関数ってのもあまりやらないと思う
と、自大学基準で言ってみる
見たこともない単語
472 :
365 :2005/12/15(木) 11:35:30
473 :
dai ◆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] その他の制限: 口頭で与えられた問題なので、上手に問題を書けなくてすいません。 行列の内容などは自分で決めてプログラムを作成せよ、とのことです。 あまり、難しくならないプログラムをお願いします。 ポインタとかが入ってくると、あまり理解できないです。 よろしくお願いします。
>>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にしたいです タスク管理に近いと思うのですが、先生が言うには常駐型のタスク管理なのですが(もしくは、タスクマネージャに近いソフト でも、常駐ソフト化の方法がわかりません アイコンを作成してクリック時に表示させたいのです クリック時に動作するなら常駐でなくともかまいません どうか、お願いいたします
>>475 その手のプログラムはテストも面倒だし仕様も曖昧だからそのままではレスないぞ。
もう少し具体的に何をしたいか書くとか、いっそ初心者質問スレで方法だけ聞くとかした方がいい。
>>473 対称行列かどうかってどうやって判断するんだ?
行列は普段使わないから調べるのがめんどいのよ。
>>469 このスレか過去スレで似たようなプログラムがあるはずだから探して味噌。
>>465 このスレのタイトルは読めますか?
>>467 時間計測プログラムを作ればいいの?
「ろだの1242の実行する」では何のことか判りませんが。
>>466 です。いろいろ調べたら理解できました。ありがとうございました。
本当に迷惑かけてすいません。
479 :
デフォルトの名無しさん :2005/12/15(木) 13:12:46
>>476 基本的には、起動アイコンをクリックした時に決まったHPから情報を取得して表示するソフトをつくりたいのです
常駐とかは先生の説明なので無視可能です
決まったHPはどこなんだよ
ああこれか www.nnh.to
[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日 全くの初心者なので、解説などのコメントも頂けると有り難いです。 何卒宜しくお願い致します。
未解決の問題はどれ〜? おじさんがなるべく簡単な解答書いてあげるよ〜。
なんだと
>>473 ポインタ使わずにどうやって行列の問題を解けって?
できないことはないが非常に面倒くさい。配列使って外部の関数に
一切渡さずに全部main関数内で(ry
488 :
デフォルトの名無しさん :2005/12/15(木) 15:38:30
積分してほしいのですが・・・・。
モンテカルロ法を用いて∫0〜3の1/3xの2乗を積分するソースを教えてください
なんだこいつ
おまえこそなんだ 偉そうに
495 :
483 :2005/12/15(木) 16:13:17
>>486 わかり難く書いてしまい申し訳御座いません。
記載されているプログラムがtypedefによる構造体型CPLXと
複素数の和を関数値とする関数AddComplexの例で、
この様な形式でdouble AbsComplex(CPLX x);と
CPLX ProdComplex(CPLX a,CPLX b);のプログラムを作成して欲しいのだと思います。
どなたか宜しくお願いします。
ちょっと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] その他の制限: 初心者です。 よろしくお願いします。
九大落ちコンプ持ちの俺を虐めるな
>>497 まず十進数に変換して、それから二進数に変換すればいいんだよ
それならできるだろ
ごめんなさいどうやって質問していいかわかりませんでした。 出直してきます
このスレにいるのは低学歴だけですから高学歴様は二度と来ないでください。 もちろん質問にも来ないでくださいね。
[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です。 わからないです。 プログラム初心者なんです。 おねがいします。
初心者にこんな問題は無理だ!って先生を叱ってやれ。 先生は無理難題を課すマゾなんだよ。
507 :
483 :2005/12/15(木) 16:40:35
>>503 ありました!
>>486 コメント付きのわかり易いプログラムを作成して頂き、有り難う御座いました。
実行、解答共に出来、助かりました。
>>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;
}
>>508 せめてこのくらいにしとけば…
printf("%.5s", digit * 5 + "0000 0001 0010 0011 0100 0101 0110 0111 "
"1000 1001 1010 1011 1100 1101 1110 1111 ");
[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] その他の制限: 特に無し
マゾってのは叱ってもらうまでの時間が焦らされてるようで快感らしいぜ
515 :
356 :2005/12/15(木) 17:25:41
>>509 ありがとうございます。木でやっているようですが、これを参考に単方向リストnextでがんばってみます。
[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] 無期限
>>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;
}
>>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);
}
521 :
518 :2005/12/15(木) 18:48:07
>>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;
}
>>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 っていうかどうやって君の頭をemulateして考察をせよと。
526 :
524 :2005/12/15(木) 20:09:40
>>525 すいません、考察はいらないです。
プログラムのみお願いします。
527 :
475 :2005/12/15(木) 20:23:00
再帰的に考察するのか。
また信州大か。
信州大のテキストには 分 か ら な け れ ば 2ch で 聞 け と書いてあります
>>486 ちょっと難しい日本語だけどなw
「手本にして」とかだろ
典範的な日本語なら「上記にならい」だろ。
>>526 だからお前が考察しないとプログラムを作るのは無理。
アルゴリズムを考える→プログラムを作るっていう流れ。
[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] その他の制限: プログラムリストとそれによってできたグラフを印刷して提出といわれますた。 グラフのソフト等も特に制限はないそうです。 よろしくお願いします
538 :
デフォルトの名無しさん :2005/12/15(木) 23:02:02
すみませんが教えてください。よろしくお願いします。
[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
よろしくお願いします。
>>536 ヒント:
プロット座標と幾何平面座標との相互変換式を利用
>>539 // マーク付与
argv[argc] = NULL;
ここ argc = 4 のときメモリ壊すよ
なんで信州大の課題はNGなんですか? 宿題なんだからどの質問だってどこかの大学か専門学校の課題だと思うんですけど。
>>542 だれがNGと言った?
信州大の問題が多いなあって思ってるだけ。
信州大の講義の資料があまりに酷いからNG
>>541 ソース構造の偽装か?!
たしかにUNIXのシェルとして明らかに強度不足な造りだと思う。
信州関係者は証人喚問だな。
>>542-545 講義の質が悪いのか学科生の質が悪いのか・・・どっちなんだ。
>>512 リストの表現(構造体等)を指定してください
うーん、平面曲線のスプライン補間はわかるが、端点で微分係数を 指定する方法がわからん・・・・・
このスレ限定で信州大人気だなw
講義の質が悪いのは目に見えて明らかだが、 学生の質もそれに比例して悪いようだな。
信州の特産物って何? それ食ってうまかったら回答してあげてもいいお(^ω^;)
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言語がまったくわかりません。 誰か作ってくれませんか??
556 :
キングボンビー :2005/12/16(金) 10:31:15
>>548 >524で提示されている資料が、余りにも酷い。
例えば、char data[3]に対して「data と &data[0] は同じ意味です。」と書かれている。
>>551 それは「信州、大人気」なのか「信州大、人気」なのかどっちだ?w
>>553 林檎とか蝗とか野沢菜とか。信州大の辺りになにがあるかは知らん。
>>516 「参考にして」の意味がわからない.そのコード片に適当な main をつければ動作する気がするが?
プログラムできなくてもホントは単位に関係ないんだろ? > 信州
>>522 申し訳ありません。もしかしたらCかもしれません。実行したらできなかったので。
お手数かけて申し訳ありません。
563 :
554 :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] その他の制限: (なし)
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 それ前にあったな。
そんで教官が当該スレの存在を認識しているはず。
#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); } } }
インデントに失敗しました
571 :
デフォルトの名無しさん :2005/12/16(金) 15:24:37
>>524 ・木構造にもいろいろあるが、どういう木なのか
・追加と挿入はどう違うのか
573 :
デフォルトの名無しさん :2005/12/16(金) 16:06:30
ホップフィールドの課題なんですが、 ポインタと関数をつかって W=1/K・(α=1からKまで)]α(]α)t を実現せよ。 ]α(]α)tは]ベクトルとその転置ベクトルの外積です αはパターン数です。 力不足の自分がだめなんですがあと数時間のうちに終わらせないと 本当に危ないので誰か助けてください、お願いします・・・
574 :
536 :2005/12/16(金) 16:13:11
575 :
536 :2005/12/16(金) 16:20:45
御礼も満足に言えないのか
printf("x = %lg ± %lgi\n", p, q); のが良かったかな
>>567-569 C99より前 : printfの書式指定に%lgを使った場合の動作は未定義
C99 : 関数の戻り型を省略した場合の動作は未定義
579 :
536 :2005/12/16(金) 18:04:52
>>562 ,540,550,558
すいません、有難う御座います。
だったら%lfを使って 後C99って何だ
%lfもC99より前では未定義 printfのdouble型の書式指定は%fか%eか%gだ。 >後C99って何だ ぐぐれ
シラネエよ なんかの行番号か何かだと思ったんだよ
あらあら うふふ。
あらあら、無知って怖い。
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
-------ここまで
みたいなフォーマットでも要求されるデータコンバートに必要な情報はそろっている訳だが。
>>571 私は次のように問題を解釈したが、あっているか?
『ノイズが入っているデータ列があり、全てのデータは必ず1行単位である。
書式は必ず次のようになっている。
求めるデータ:「(index=1つ以上の数字)(\t=タブ文字)(data=1つ以上の数字)」
ノイズ:「(求めるデータ以外の書式のデータ全て)」
求めるデータを各indexごとに整理し、データを「index\tdata\tdata\tdata…」の
形式に変形し、indexの昇順に整列してCSVという拡張子で保存する。』
補足:タブ区切りファイルは通常CSV(Comma-Separated Values)ではなく、TSV
(Tab-Separated Values)と呼ぶ。
>>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";
}
>>587 例がコンパイル通らないけど。NodePointerに勝手にkeyなるメンバの存在を
仮定していたりとか…
1から作ってくれってこと?
>>589 その通りです。したの方に問題文と実行結果が書いてあります。参照してください。構造体のところです。
ふざけているのはあなたです。 邪魔するなら書き込まなくて結構。
よろしくお願いします
わかったらさっさと答えを書き込め能無しどもめ。
>>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;
597 :
554 as キングボンビー :2005/12/17(土) 09:43:19
>>597 SUNXは失礼だろうよ。>567に対しても企業に対しても。
599 :
524 :2005/12/17(土) 12:24:58
>>572 >木構造にもいろいろあるが、どういう木なのか
二分探索木です。すいません。
>追加と挿入はどう違うのか
追加と挿入は同じ意味です。すいません。
600 :
あき :2005/12/17(土) 13:43:52
何でもいいから、プログラムを作って来いという宿題が出ました。 プロジェクト Win32 Console Application ファイル C++ ソースファイル を使えとのことです。 すみませんが、力をかしてください。
602 :
あき :2005/12/17(土) 13:49:28
わー簡単!! って、おい!! もっと長いほうが好きかな?
int main() {return main();}
604 :
あき :2005/12/17(土) 13:53:30
長くなった!! って、おい!! 同じパターン!! 言い方が悪かったです。 素直に、100行以上のをお願いいたします。
>>604 ウザイ('A`)
最低でもテンプレに従え。
適当に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] その他の制限: 初心者でもわかりやすいプログラム。
>>607 囚人のジレンマのしっぺ返しアルゴリズムでも作っとけ
>>607 Visual C++って制限があるのか・・・・・
俺はgccだから、力になれんな。残念でした。
>>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;}
613 :
512 :2005/12/17(土) 16:28:06
#include <iostream> int main() { std::cout << "Hello Work!\n"; }
>>613 ハイハイ。後から条件追加厨は逝ってよし。
[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] その他の制限: 特にありませんが、初心者が読んで少し考えるくらいでわかるようなものをお願いします。
期限を書けやボケ
618 :
616 :2005/12/17(土) 17:38:30
>>617 わかりました。
では期限は2005/12/17 19:00迄でおねがいします。
>>618 わかりました。料金は壱万円になります。
>>616 int型はともかくとして、
float,doubleの論理和、論理積はどないすれば良いんでしょう?
621 :
デフォルトの名無しさん :2005/12/17(土) 17:54:10
>>598 ありがとうございました。あとそのプログラムに入力した名前とIDとクラスを削除する関数を付け加えてほしいのですけど。たぶん、最初にスキャンしたファイルのノードが一致したなら消すみたいな処理になるとおもわれるんですけど?
623 :
616 :2005/12/17(土) 17:57:51
>>620 私はまだ素人でよくわからないのですが、float型とdouble型で論理和、論理積が求められない場合はスルーしても良いかと思います。
0に偽、それ以外に真を対応させとけばいいんじゃない? なんかあんまりスマートじゃないけど
625 :
620 :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);}
626 :
620 :2005/12/17(土) 18:08:40
あーエラー処理忘れてた。 scanfの戻り値が2以外だったらエラーと表示するようするのと、 bがゼロだったらエラーと表示するように適当に書き加えといて
>>624 スマートじゃないも何もないだろ
論理的OR演算子と論理的AND演算子の仕様は
真だの偽だのは関係なくて
あくまで0との比較で結果を決めるというものなんだから。
>>627 いやまあ演算子の仕様からいくとそうなんだけどね
double型の変数に論理演算を入れるという行為自体が
あんまりスマートじゃないと思ったわけです
非整数の論理演算を有効に使ってる例がすぐには思いつかなかったんで・・
629 :
616 :2005/12/17(土) 18:25:14
>>620 ,
>>625 ,
>>626 せっかく書いていただいたのに申し訳ないのですが、これはそれぞれの型で別々にプログラムを書いてますよね?
問題文では、『確認する際は、標準関数を使用し、型変換を行いなさい。』とあり、このままじゃ駄目かと思うのですが…
>>629 なんだとう!タダで書いてやったのに文句付ける気か。
>>629 標準関数を使用し、型変換を行うってのがイマイチ意味が理解できないんだけど。
どういう意味でしょうか?
型変換するのに標準関数は使いませんですし。
632 :
616 :2005/12/17(土) 18:51:03
>>631 私にもわからないのです。
一体どうすればいいのやら……
>>475 スルーされてるなw
まあ、22日までだしな
とりあえず、毎日分のURL打ち込んだら?
そこから、時間取得して、同じ日のHP表示を行うやつか、、、
exeでまとめるとまずい?
>>597 訂正
floatをdoubleに直しといて
なんか最近いい流れだな。 未解決リストがあるとわかりやすい。
638 :
デフォルトの名無しさん :2005/12/17(土) 21:07:08
639 :
539 :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] その他の制限:追加、改変は自由。
>>512 リストってのはデータ構造をリストにするってこと?それとも配列を
使ってもいいの?
643 :
641 :2005/12/17(土) 21:52:28
失礼
許さん。
645 :
デフォルトの名無しさん :2005/12/17(土) 21:53:53
>>634 "アルファベット区切り"でぐぐると4件しかヒットしないがそれなんて用語?
>>645 今のプログラムだと、ファイルを読みこんで単語リストを生成するんです。
それを単語ではなく、アルファベットごと(aが6文字…etc)となるように
すればよいのだと思うのですが…お願いします。
>>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;
}
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] その他の制限:特にありません よろしくお願いいたします。
>>649 括弧のずれ,たとえば ( [ ) ] に対する出力は?
テスト
652 :
名無し :2005/12/17(土) 22:59:31
>>650 問題にはそのような場合に対しての対処法はなにものってません。
どのようにしたら よいプログラムになりますか?
>>652 「括弧の始めと終わりが対応していません」とメッセージを出すのが適当じゃない?
655 :
634 :2005/12/17(土) 23:24:22
656 :
名無し :2005/12/17(土) 23:34:17
657 :
641 :2005/12/18(日) 00:58:34
658 :
641 :2005/12/18(日) 01:27:41
すまん、main()の最後にreturn 0;付けといてくれ。
>>649 質問:
(1) pop()、push()の引数や戻り値に関して指定は何もない?
(2) スタックには、値を返しつつpopする流派と、topの値を得る関数とpopのみする
. 関数に分ける流派とがある。どっち?
>>659 Cなんだから(2)は値を返しつつpopした方が見通しがいいんじゃない?
>>660 それは分かるんだが、そうするとエラー処理が面倒くさくなって。
例外安全性なぞ無視してassert。これに限る。
みんなの連携無視プレイに笑った 475かわいそうなやつだ
>>663 そういえば未解決リストにも入ってないな。
だれか宿題登録・未解決宿題検索DBをCで作る香具師はおらんか。
>>665 足し算の評価順序は決められていないので、再起呼び出しの順序は未定義
668 :
667 :2005/12/18(日) 10:43:37
ってスマン。評価順序を説明する問題なのか。 確かに無茶な質問ですね。
2通りに分けて説明すればいいんじゃね
>>669 評価順序が固定されてるとも限らない 極端な話,秒の下1桁の偶奇で左右評価を切り替えても仕様に反さない
ので、場合わけは 2 通りどころか 2^n とおり。
671 :
名無し :2005/12/18(日) 11:58:06
>>659 どちらがいいかあまりわかりませんので、やりやすいほうでお願いします。
[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関数で実装が不可能な場合(もしかしたら、先生が間違っているかもしれないので)は変更していただいてかまいません。
よろしくお願いします。
673 :
512 :2005/12/18(日) 12:08:07
>>657 本当にありがとうございます。
もの凄く助かりました。
宿題じゃなくて仕事を質問しても良いでしょうか? NECソフト部の新入社員の者なんですが…
質問ではなく丸投げをする限りにおいて、 何を依頼しようが勝手です。
>>670 再帰なんだからコンパイル時にどちらの関数が先に評価されるかは確定するだろ?
実行時に切り替わってるわけじゃあるまいし、2通りでいいと思われ。
>>676 実装レベルの話なら、最適化が入ってループを変形する可能性も考えると、2通りとは言えない。
理論レベルなら
>>670 のように2^nの組み合わせが考えられる。
いずれにせよ情報が足り無すぎて現段階では答えを出すのは不可能
679 :
デフォルトの名無しさん :2005/12/18(日) 13:45:16
[1] 授業単元: プログラム演習 [2] 標準入力から空白を含まない英文字を入力し、この文字列中に使用されている アルファベットの種類とその使用回数を表示するプログラムを作成せよ。 ただし、大文字と小文字の区別はせず、使用回数が0回の文字は出力しない。 また、プログラムにおいて使用回数を求める際には文字種ごとに別々の選択機構を適用 するようなことはせず、文字コードの並びに着目し、配列を用いて効率のよい処理を心がけよ。 [3] 環境 [3.1] Unix [3.2] gcc [3.3] C [4] 期限: 2006年12月19日12:00 [5] 配列の復習、ということで出されましたがお手上げでした・・・。 よろしくお願いします。
>>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ですが、よろしくお願いします。
>>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;
}
>>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;
}
[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>のみ
>>653 誰かお願いします。
問題といてあげてください。
>>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] お願いします
>>688 そうなのか、指摘ありがとう。
こういうミスすると自分の英語力の無さに呆れる......orz
691 :
デフォルトの名無しさん :2005/12/18(日) 16:01:33
>>685 レスありがとうございます。あの、1つ質問なんですが include<stlib.h>というのを始めて見たんですが何でしょうか・・?
学校のテキストを見たんですが載っていませんでした。これを使わずにプログラムは組めるんでしょうか?質問ばかりですいません・・・。
>>681 なるべくは自分で考えようとしているのですが、なかなか期限中に
終わらないもので・・・。1つ1つの課題に時間を掛けすぎてしまっているようです。
>>684 回答ありがとうございます。
お手数なのですが
#include <ctype.h> 、#define BUFFER_SIZE 1024
を使用しないプログラムもご教授願えないでしょうか?
693 :
デフォルトの名無しさん :2005/12/18(日) 16:09:09
695 :
685 :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;
}
>>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;
}
699 :
デフォルトの名無しさん :2005/12/18(日) 16:46:06
>>695 >>696 レスありがとうございます。すいません・・。一応本を一通りやったので、そのような発言をしてしまいました。
すいません。わからない点があるので、お二人のプログラムを参考にしてもう1度調べて作ってみます。もし、それでも
不明な点があったら質問していいでしょうか?
>>697 有難うございました。
続けて質問で申し訳無いのですが
int main( int argc, char **argv )
は定義しても使用していないように見えるのですが・・・
>>700 その行は int main( void ) でもいいよ。
でも普通何となく int main( int argc, char **argv ) って書かない?
C言語の仕様だからこう書いても問題ないと思うよ。
>>701 即レス有難うございました。
しっかり理解してから提出させていただきます!
>>701 最近
int main( ) { で始まるのが流行りらしい
>>704 流行りとかあるんだ (笑)
個人的には関数名書いてある行に { が書いてあるの気持ちわるい
まぁ void main() とかよりはましだけど。
int main()はC++じゃないか? Cでも許容されてることは確かだが。
C と C++ で main 関数に違いがあるの? 言われてみれば Java だと func( void ) みたいなのはエラーになるから int main(void) じゃなく int main() が流行ってるっていうのは分かるな
>>701 Cの仕様ではint main(void)とint main(int argc, char **argv)のどちらでもよいとなっている。
それに加えそのた処理系定義の方式でも良いとあってvoid main(はこれに該当する。
>>708 ホントに? Ansi だと main の返り値は int でなくてもint 互換じゃないと
ダメじゃなかったっけ? これまで「void main() 許すまじ」で生きてきたん
だけど…。
>>707 ()が(void)の意味になるのはC++の仕様なんだけどね。
C99ではどうなんだっけ?
>>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;
}
>>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.
>>533 どうもありがとうございます。
>(1)あることを ”手本として” 同様に行う。まねる。
ちゃんとそのまま書いてあるのを引用してくれて。
implementation-defined mannerに該当ということで。
>>710 関数定義では()はno parameter、関数宣言では()は情報なし。
だったと思う。
715 :
709 :2005/12/18(日) 17:51:37
>>712 ありがとう!
ずーと読んでって最後の ``or in some other implementation-defined manner''
のとこで「なんでもありかよ!」ってなった。
そうなんだ。なんかショックだ。これまで void main() て書いてるヤツ見つけたら
総攻撃してたのに。これから何を心の支えにして生きていけばいいんだ。
>>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) に準じる.
>>715 敢えて言うなら、戻り値がintとcompatibleでなければ(たとえばvoid)、
どんな値がhost environmentに返るかはunspecified。
だからといって間違いではないわけだが、portabilityの点では問題がある。
>>709 これからも「void main() 許すまじ」で生きてください。
>>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 に準じる.
722 :
721 :2005/12/18(日) 18:12:29
ごめんページ番号間違えた. p.97 が正しい.
>>721 んじゃC99では変更になってるのかな。
>>714 だと思ってたよ。
C89のPDF持ってないんだよね…
725 :
634 :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] その他の制限:特になし
よろしくお願いします。
727 :
634 :2005/12/18(日) 19:35:00
>>726 申し訳ありません...。気づきませんでしたorz
>>648 様
今まで気づかず、申し訳ありませんでしたm(__)m
728 :
デフォルトの名無しさん :2005/12/18(日) 20:38:59
>>653 誰かやってください。お願いします。さっきからシカトされてるんですけどどこか不具合でもあるんですか?
>>728 このスレでは気が向いた奴がいなければコードは出ない。
730 :
デフォルトの名無しさん :2005/12/18(日) 20:45:16
>>729 まじっすか。今やってるんですけど、窓から飛び出したい気分っすよ。
>>728 1.指定の多すぎる問題はモチベーション下がる。(仕様だけ出して、コードは全部かかせろよ。)
2.いい加減リンクリストは飽きた。(そんな車輪の最発明やってもつまらん。STL使えばいいじゃん)。
以上の理由で、やる気がおきないヤシ多数。
732 :
634 :2005/12/18(日) 20:46:12
634です。
>>648 様
アルファベットごとに並べるには、どこを書き換えたらうまくいくのでしょうか。
ex)
a・・・ 6
b・・・ 9
c・・・ 12
といった具合にです。
教えて下さい。よろしくお願いします。
733 :
709 :2005/12/18(日) 20:49:15
>>731 全く同意。
途中までコード書いてあって変更しろとかいう問題はやる気おきないよね。
普段から保守にうんざりしてるからね、皆w
>>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;
}
[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してもデリートの表示を呼ぶことは出来ないのはなぜでしょうか?設定の違いとか。やっていただきこんなことをいうのもなんですが。
>>737 Ctrl+Zを2回ならどう?もしそれでいけるなら、そっちの問題。
>>686 質問:
(1) 入力される数値は正の実数か実数か整数か自然数か?
(2) 数値の上限・加減は?
(3) 個数は'+'が1個当たり何個を表すのか?
(4) C言語を始めて3ヶ月でもピンからキリまである。君がどれだけできるのか
誰にも分からない。もっと具体的な指定を。
740 :
デフォルトの名無しさん :2005/12/18(日) 22:34:02
>>738 コントロールZのほうでもだめでした。ファイルループがでられないのでしょうか?ほんとやっていただきありがとうございます
741 :
名無し :2005/12/18(日) 22:37:26
742 :
702 :2005/12/18(日) 22:40:07
745 :
デフォルトの名無しさん :2005/12/18(日) 22:51:58
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日 授業聞いてないから全く分かりません 誰か救いの手を。。。
>>739 回答:
(1)正の実数です(1.25とか)
(2)0〜3でお願いします
(3)一個です。
(4)習ったものは宣言や入出力や関数や配列やポインタです。(あまり理解はできてませんが)
よろしくお願いします。
750 :
デフォルトの名無しさん :2005/12/18(日) 22:59:47
>>743 リターンはしてないです。こっちもサッパリです。
>>750 こっちでは問題なく動いてる。よって分からん。他の人の助言を待て。
授業単元:プログラミングです。 誕生石: 生まれ月に因んで定めた宝石。起こりはユダヤ教の祭司の胸板の12の宝石によるとも、 新約聖書ヨハネ黙示録の「新しきエルサレムの東西南北12の門の12の石垣の基礎石」によるとも言われる。 1月ガーネット、2月アメジスト(紫水晶)、3月アクアマリーン・ブラッドストーン、4月ダイヤモンド、5月エメラルド、 6月真珠・ムーン‐ストーン(月長石)、7月ルビー、8月サードニックス・かんらん石、9月サファイア、10月オパール・トルマリン、 11月トパーズ、12月トルコ石・ラビス‐ラズリ。(1912年アメリカ宝石同業組合で決めたもの) 広辞苑による 上記データに基づいて、誕生月をキーボードから入力しその人の「誕生石」を画面に出力するプログラムを作れ。
>>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] の * はいらない
>>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;
}
755 :
736 :2005/12/18(日) 23:21:34
>>748 正しいと思われる結果はでましたが習ったことが
>>747 と同程度の自分にはどのような動作をしているかわかりません・・・orz
>>755 見てみたけど、すごく教育的。これで分からないなら、教科書をイチから
読み直した方がいい。
>>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]);
759 :
デフォルトの名無しさん :2005/12/18(日) 23:30:13
>>751 先ほどかいてもらったメインのほうなんですけど。どこから、挿入ですか?
内容: [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〜を使用しないプログラムを組んでいただけると助かります。 よろしくお願いいたします・・・。
762 :
744 :2005/12/18(日) 23:44:47
>>753 ,757
ありがとうございました。
おかげで解決しました。
>>754 さん回答ありがとうございます、
こんな条件がついていたのですが、誕生月を表す整数を m とし、この m に scanf 関数 を使ってキーボードから誕生月を入力する。
次に、 switch文 を使って 各誕生月ごとに分岐する。
>>763 あとから条件を加えた場合、たいてい答えてもらえない。
765 :
754 :2005/12/19(月) 00:22:45
>>763 最初から言えよ、馬鹿。
「誕生日を表す整数を m」は
>>754 で month になってるところを m に
変えるだけ。
switch 文に関しては、この問題のような処理で switch を使うヤツは馬鹿だと
教授に言え。その度胸がないなら自分でなんとかしなさい。
>>760 >1234の5進数
ってのは、
1.10進数の1234を5進数に変換した物
2.5進数表記で1234
のどっち?
[1] 授業単元: プログラミング演習 [2] 問題文: 文中の連続するスペースを1個のスペースに置き換え、また、 文末には4個のスペースがくるように置き換えて出力するような プログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限:2005年12月21日 12:00 [5] プログラムの初歩中の初歩を学んでいるような状況です。 どうぞよろしくお願いします。
>>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;
}
てけとー。脳内こんぱいる。 int prev = 0; /* 空白以外の値ならなんでもよい */ int c; while ((c = fgetc()) != EOF) { if (c == ' ' && prev == ' ') { /* 空白が連続するなら2つ目以降は出力しない */ } else if (c == '\n') { printf(" \n"); } else { putchar(c); } prev = c; }
771 :
767 :2005/12/19(月) 01:23:36
>>769 ソースコードを入力してコンパイルし、テキストファイルに対して
実行するという形です。初心者なのできちんとしたお答えができなくて
すみません…。
>>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");
}
}
>>771 テキストファイルから読み込んで、そのテキストファイルに上書きするの?
774 :
767 :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] その他の制限:あまりに高等なことをしなければよいとは思いますが。。。 もしかしたら問題に不備があるかもしれませんが、問題は写しただけですので解釈できる範囲内でつくるとよいと思います。 いろいろやってもうまくいかないので、教えていただければ幸いです。 よろしくお願いします。
>>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;
}
[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] その他の制限: よろしくおねがいします
>>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;
}
>>760 また丸投げキター
おれんとこききにくれば教えるのに
答えもらったらちゃんと理解してから提出しろよ〜
>>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;
}
オートマトンを使うと楽だな。 スキャナとも言うか。
>>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にしたいです
無視されてたから再記
>>782 >無視されてたから再記
教えて厨の癖に態度でかいな。また無視するか。
無能は…どんなにバラバラにしてやっても…石の下から…ミミズのようにはい出てくる
>>782 だから、常駐ソフトはめんどいんだって
仕様わかんねえし
日付を取得して対応したHP開くのでいいだろ?
786 :
752 :2005/12/19(月) 06:43:44
先生に意見できるほどの生徒ではないので・・・ switch文を使ってのやり方を教えていただけないでしょうか? あとから条件を足してしまって申し訳ないと思っているのですが わかる方いたらよろしくお願いします。
>>786 本当に申し訳ないと心から思っているなら、書くな
788 :
752 :2005/12/19(月) 07:13:55
今日の授業で提出なので、お願いしますOTL
ヒント: switch(m){ case 1:puts("ガーネット");
ヒント: char const * stone; switch (m) { case 1: stone = "ガーネット"; break; case 2: stone = "アメジスト"; break; ... case 12: stone = "トルコ石"; break; default: stone = ""; break; } puts(stone);
791 :
760 :2005/12/19(月) 08:45:12
>>766 恐らく、10進数の1234を5進数に変換した物だと思います。
(1234)5 + (1234)5 (5は()の右下にありました)
と書かれていたので・・・。
よろしくお願いいたします。
>>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;
}
>>697 先程実行してみました。コンパイルは通るのですが、どうもうまく実行してくれません。
英文を打ち込んでも反応無しでした…。
どなたか
>>516 お願いしますm(__)m
mainをつけるだけでもいいんで
>>772 ありがとうございます。有効利用させていただきます。
もしよければ3行目のc[3] = {0}; と 8行目の ++c[(int)d]; を
もう少しわかりやすく書き直していただけないでしょうか
796 :
752 :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; } どこがいけないかご指摘お願いします。
797 :
672 :2005/12/19(月) 10:11:49
>>694 ,698
ありがとうございます。
やっぱりremoveをvoid型にすると出来ませんよね。
自分もremove_nodeをstruct node*型の値を関数にして、main関数内とかを変更してやってみたところ、プログラムがちゃんと動くようになりました。
>>796 printf( "誕生月を入力してください" );
scanf( "%d", &m );
ここを
switch(m){
case 1:printf("ガーネット\n");
break;
}
の前に持ってくれば良いんじゃない?
switchでmの値を参照しても、scanfで値を代入してないから、何も値が入っていない(入っていてもでたらめな値)から、caseが正しく動作しない。
799 :
599 :2005/12/19(月) 10:22:12
>>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を整数化(小数点以下切り捨て)してそれを配列のインデックスに使っている。
インクリメント演算子については説明不要だよな?
>>800 ありがとうございます。
理解できました。
802 :
748 :2005/12/19(月) 13:04:52
803 :
748 :2005/12/19(月) 13:14:50
>>755 もう提出時間を過ぎたあとに言うのもなんだけど
>>748 の 12行目は
for ( tail = end; tail > start; --tail ) {
じゃなくて
for ( tail = end; tail > head; --tail ) {
だった。
[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>のみでお願いします。
>>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分以内
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)はこのヒントに沿った形でお願いします。
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;}
>>717 その引用のどこにも「() は (void) に準じる.」という意味のことは書かれていないが?
実際にはK&R時代の関数定義だと解釈されて、定義の場合は引数がないとみなされる訳だね。
K&R方式の関数定義は廃止予定事項だから voidはちゃんと書かなきゃそのうち動かなくなる。
>>805 コンパイルはできるのですが、英文字を入力しても動作しませんでした。
sizeofをつかわずに作成できませんか?
>>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;
}
>>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;
}
>>813 sizeof 使わなくても書けるけど使った方がエレガントだ。
動作する。
実行して何か入力し終わったら最後に Ctrl+D 押せ。
>>816 すみません。それもやったんですけど動きませんでした。
もしよかったらエレガントじゃない方もお願いします。
818 :
809 :2005/12/19(月) 16:25:56
>>814-815 ウホッ……
早速のご解答ありがとうございます。
でもちょっと、やってることが授業のレベルより高度で、それで提出したら誰かに教えてもらったのがすぐバレそうです。
最初の「into main」は()の中にはvoidが入る形しか知りませんし……unsignedなんて関数は聞いたこともないですし……
もっと「素人が書いてる感じ」にしていただけるとありがたいんですけどお願いできますか?
>>811 int int_bits(void)
int count_bits(unsigned x)
822 :
809 :2005/12/19(月) 16:32:05
>>821 わかりました。どうもありがとうございました。
>>818 >>814 のint main(int argc, char **argv)はint main(void)に書き換えて構わない。
それから
>>814 ,
>>815 とも、unsignedを全てintに置換し、同時に
%uを全て%dに置換しても問題ない。
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; } お願いします。
>>824 試してみましたが、それも無意味でした。
>>820 ありがとうございます。そのままコンパイル(もちろん行番号などは消しましたが)したら失敗でしたので、
考察や理解しながらいろいろ試してみます。
>>826 コマンドラインから echo Tanaka | abc.exe とかしても無理?
ソースは
>>820 の "Download as file" というリンクからダウンロードしよう
>>827 echo Tanaka | abc.exe は成功しました。
ありがとうございました。
[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] その他の制限: なし。
うはwww うちの大学の課題だらけじゃんwww 同一人物か?www
>>835 そんなやつもいるだろ。
そんな大学に行った意味のないやつは無視してやれ。
あそでそいつが困るだけだ。
>>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]文字列
>>839 似たコードは何度か出てるが、もう一度。
char *del_digit(char *str)
{
char *from, *to;
for (from = to = str; *from; from++) {
if (!isdigit(*from))
*to++ = *from;
}
*to = '\0';
return str;
}
842 :
839 :2005/12/19(月) 19:25:38
>>841 さん MinGWでは無理みたいです。fromはまだ習ってません・・・。せっかくやっていただいたのにすいません・・・。
>>819 ありがとうございます。
関数宣言時に注意を怠ってました。
>>842 >MinGWでは無理みたいです。fromはまだ習ってません
工エエェェ(´゚д゚`)ェェエエ工
845 :
839 :2005/12/19(月) 20:00:54
他のやり方は無理でしょうか・・・。
846 :
839 :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]文字列
847 :
839 :2005/12/19(月) 20:17:34
何回もすみません;;#argvではなくて*argvでした;;
>>847 mingwのエラーの内容でも書いたら。どうせ、必要なヘッダをincludeしていないとか、プロトタイプが無いとかだろうけど
849 :
デフォルトの名無しさん :2005/12/19(月) 20:55:34
>>838 ありがとうございます!。
あと文字列と一文字をユーザが任意で入力できるように
するにはどうしたらいいのでしょう?。
[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
>>846 839と一緒じゃないの?
841とか似たコードが何度も既出。
>>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
『|=』『&=』の意味ってなんなんでしょうか?
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'
ってでます・・・。
>>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日 今関数を習ってます。 値渡しを使うみたいです。 おねがいします。
>>859 手持ちの環境で、いわゆるhello, worldはコンパイルできるのか?
>>860 グラフィックス系はライブラリ指定のこと。
あと、手書きでもいいからサンプル画像をつけてくれるとよろし。
てゆか今関数習ってますとかいう段階でこの問題ってどうよ?
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> は使うみたいです。 一つの輪を作る処理を関数として書き、複数回呼び出すらしいです。
866 :
質問君 :2005/12/20(火) 01:31:15
質問です。時間が。。。 あさってまでの宿題です。 まだ習い始めたばかりのCなんですが、 #include <stdio.h> int main() { printf("test"); return 0; } をコンパイルして、EXEファイルができました。 それを開くとコマンドプロントが開いて、 testと表示させるにはどうしたらいいのでしょうか?
>>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&)' 何がいけないのでしょうか?
>>866 printf("test\n");
としても表示されないか?
871 :
デフォルトの名無しさん :2005/12/20(火) 01:38:52
>>870 回答ありがとうございます。
でもごめんなさい、うそ書きました。
std:string str = "hoge";
に訂正します。。。
872 :
質問君 :2005/12/20(火) 01:41:08
はい 普通にコマンドプロンプトでexeフォルダ名を入れてインターキーを押すと 実行できるのですが、そのexeフォルダのアイコンをダブルクリックしたら コマンドプロンプトが一瞬表示されるのですが、何も表示されません。
>>872 それはそういうものだからそうなるんだよ。
874 :
質問君 :2005/12/20(火) 01:44:42
>>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
>>874 それは実は表示されていて、一瞬で消えているだけです。コマンドプロンプトを起動して、
そこからexeを指定すればきちんと表示されているのが分かるはずですよ。
877 :
質問君 :2005/12/20(火) 01:49:15
>>876 それを一瞬で消えないようにするにはどうするのでしょうか?
878 :
868 :2005/12/20(火) 01:50:43
>>875 確認ありがとうございます。
うーん、、、実際はmain の前にint が書いてありまして
それでも上記のエラーが
A a( str );
の部分ででてしまいます。。。
引数が( const std::string &fuga )
の関数呼び出しは
呼び出し時に
std::string hoge = "文字列";
関数名( hoge );
の記述で問題ないのでしょうか?
最後の行に getc();
880 :
868 :2005/12/20(火) 01:51:33
>>876 スタートメニューのアクセサリからMS−DOSプロンプトを起動して
そこにexe ファイルをドラッグアンドドロップしてみそ。
881 :
質問君 :2005/12/20(火) 01:54:05
882 :
質問君 :2005/12/20(火) 01:56:12
>>881 そうではなくてexeファイルをクリックするだけで、
勝手にコマンドプロンプトが開いて、testと表示させたいんです。
883 :
質問君 :2005/12/20(火) 01:56:53
>>882 #include <stdio.h>
int main()
{
puts("test");
getchar();
}
>>878 問題ない。
「実際は」とさっきから言っている以上、かなり簡略化したソースを
提示しているんだろう。丸ごと出したら?それが出来ないなら、君の
環境(OS、コンパイラ)と共に、エラーが起きるできる限り最低限の
ソースを提示したらいい。
886 :
質問君 :2005/12/20(火) 02:01:10
>>884 ありがとうございます!!
でもどうしてそのようになるのでしょうか?
それと警告が出てきました
人の話はちゃんと聞こうな
>>886 いま君の詰まっていたところは初歩的すぎる段階のところだ。
もうちょっと自分で勉強してから聞きなさい。
>>886 getchar()について調べなさい。
890 :
868 :2005/12/20(火) 02:04:25
>>885 アドバイスありがとうございます。
それが今すぐできない状況ですので、じっくり確認して報告したいと思います。
891 :
質問君 :2005/12/20(火) 02:08:13
それでは少しくぐってきます。 またここでお世話になると思うのでよろしくです
>>891 ここは宿題丸投げスレで質問は別に質問用のスレがあるからそっちの
ほうがちゃんと応えてくれると思うよ。
このスレの解答住人は暇潰しにプログラムが書きたいだけで 必ずしも人にプログラミングを教えたいわけではないからな。 少なくとも俺は。
なにをいきなり… というかそりゃそうだろ
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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
>>896 l=i;//count[i];
printf("%c", alp_count(str, size) );
>896 母校の課題みたいだ。まだ同じ課題やってんのか。
902 :
850 :2005/12/20(火) 09:56:55
>>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"は行方不明。
まちがっていたらスマソ
908 :
907 :2005/12/20(火) 12:38:49
間違ってた!スマソ
909 :
デフォルトの名無しさん :2005/12/20(火) 12:47:14
標準入力から入力した文字列の順序を逆さまにして、標準出力へ表示するCプログラムを作成せよ。例えば、"abc"と入力すると"cba"と出力する。
910 :
840 :2005/12/20(火) 12:52:38
何方か840お願いします… なんとか入力された日から曜日を割り出すものまでは作ったんですが後が分かりません。
scanf("%d%d%d",&a&b&c); printf("%d%d%d",c,b,a);
>>909 そんなプログラムならすぐ書けるけど (てかもう書いてある)
テンプレないからちゃんと出来てるかわかんない。
独学者は門前払いですか?
次スレはやめに誘導おながいね
初心者ですが、ココの課題勝手にやっていいですか? 課題がないと何していいかわからないし。 まだ見てないけど初心者向けの課題って結構あるのかな。
眠い中逆に入力するプログラム書いたのに テンプレ茄子&マルチかお(´・ω・`) 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
921 :
903 :2005/12/20(火) 14:21:54
>>904 よかったらそれをC言語で書いていただけないでしょうか?
>>907 URLのプログラムは参考書に載っていたものです。
[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++)を使ってもいいということでしょう。その先が分かりません。 今日中なのですが、どうか宜しくお願いします。
そのヒントとヒントの解釈はむちゃくちゃだな。
924 :
922 :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
>>925 > void main(void)
> scanf(s);
何言語で書いているんだ?厨房臭いソースだな
>>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);
}
}
>>926 東京電機大学の中の人も大変だな...
何でsleep()を使わずに、ループさせるんだろう?
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; } }
933 :
932 :2005/12/20(火) 17:19:54
上のプログラムですが、 callocで確保したaの配列の各要素に4桁の整数を入力していくプログラムです。 paはaの値の入っている部分の末尾をさすポインタです。 l_setiではpaは上手くaの末尾をさしていたのですが mainに戻ると、paはaの先頭を指してます。 paをそのまま維持してmainに戻るにはどうすればよいでしょうか?
void l_seti(...)をshort * l_seti(...)に変更、 関数の最後でreturn pa; main()の l_seti(...)をpa = l_seti(...)に変更。 つーか、関数と変数について勉強しなおせ。
935 :
932 :2005/12/20(火) 17:25:22
936 :
922 :2005/12/20(火) 17:42:27
>>928 氏
>>931 氏
本当にどうもありがとうございます。これで課題が出せます。
>>928 分かり易いプログラムありがとうございます。
見てすぐに何をやっているのか分かりました。
>>931 高度なプログラムありがとうございます。
main()の中で double min のような定義の仕方があるのですね。
初めて知りました。勉強しなおしてきます。
>>936 >931のプログラムには欠点がある。
・Bが0.1のときのCを事前に計算しているため、Cの計算ロジックが二箇所に現れる。
このため、直感的でないばかりか素人っぽくない。
・実数値の足し算を繰り返す形になるため、誤差が累積しやすい。
ま、>936のレベルなら>928でいいんでない?
#B/10が多すぎるけど。
939 :
デフォルトの名無しさん :2005/12/20(火) 21:55:01
[1]授業単元:情報処理 [2]問題文:キーボードより自分の名前をローマ字で入力し、先頭から指定した文字数でのアルファベットを表示するプログラムを作れ。 [3]言語:C [4]期限:2005年12月21日(水)明日まで このプログラムをよろしくお願いします。
hiroyuki で 4文字だとしたら hiro を表示しろってことか?
hiroyuki で 4文字だとしたら o を表示しろ とも読めるな…
レス待つより両方作ってしまった方が早いような
仕様が曖昧なままでは作る気がしない
こんな感じかな? #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:¥〉終了 みたいなかんじです。
#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); } こんな感じ…?勉強中なんでもっとよいのあったら教えてください
>>946 例は本当にそれで正しいのか?めちゃくちゃだぞ
というか一連の流れの中で何文字目がいくつかを複数表示するの?
>>947 恒例だがscanfの戻り値チェック
それと勿体ないからintじゃなくてchar
もっともAlignmentの関係で意味ないかもしれんがな
951 :
デフォルトの名無しさん :2005/12/20(火) 22:38:18
例はプリントにかいてあるまま書きました。
>>947 num が 0 以下の時の処理が抜けてるよ。 ついでに num が 257 以上でもヤバイ
"C:¥〉"を毎回出すのもわすれている
#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]); } }
955 :
947 :2005/12/20(火) 22:52:32
>>953 実は毎度 %PROMPT% を展開して表示せよだったりsくぁwせdrftgyふじこlp;
ユーザは 「C:> 4」って打他ないとエラーが返って来るかもよ。
【質問テンプレ】 [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文は使用しない
>>938 ありがとうございます。
最悪未完成レポート提出になるかと思いました…。
あとこのscanfはcinで書き換えるとどうなるんでしょうか?
960 :
デフォルトの名無しさん :2005/12/20(火) 23:38:47
みなさんありがとうございますm(_ _)m なんとかなりました。
誰だお前は
962 :
デフォルトの名無しさん :2005/12/20(火) 23:40:55
long型のデータを-10とセットし、その情報をビットの上位から下位に入れる変数を用意し、 関数に渡すmainとビット展開し、セットするvoid型の関数を作成する。 この問題わかる方いますか? ビット情報を上位から下位に入れる変数という意味が正直わかりませんorz
せめてテンプレには従って欲しいがね long型が 32bit 長なら 32個の変数を用意して その変数に 0 or 1 をセットせよ ってことか? ビットフィールド使うのはマズイんかな
1100を0011にせよ。って事では無くて?
>>963 日本語で良いよ
966 :
963 :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)); と思ってるのですがよくわからないので空欄にしときます。どなたかお願いします。
968 :
938 :2005/12/21(水) 00:32:30
>>959 cin じゃないとダメなの? cin 使っても atoi() のために #include
<stdlib.h>しないとダメだから scanf() 使って #include <stdio.h> でいい
かな、と思ったんだけど。
main の中は割と適当だから偉い人書き直して。
969 :
963 :2005/12/21(水) 00:35:23
関数の中でセットするわけだからおそらくグローバル変数使うか アドレス使うのは間違いないと思い込んでるんですよね。 前者は問題に >その情報をビットの上位から下位に入れる変数を用意し、関数に渡すmain と書かれているのでグローバル変数はまずありえないと思います。 よってアドレスで参照渡しをさせるプログラムだという事は想像できるんですが。 ビットの上位から下位に入れる。 ビット展開し、セットする。 この二つが全くわからないのです。('A`)
>>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;
}
971 :
963 :2005/12/21(水) 00:44:44
>>970 レス有難うございます。
limits.hは使ったことないんですが、それはこっちで何とかして調べます。
やはりシフトビット使うんですね(´・ω・`)
[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
>>972 数の入力はどういう風にすればいいの?
scanf() 的なこと? コマンドライン引数?
>>973 入力方法は指定されていませんが、おそらくscanf()で10進数を入力するものだと思います。
975 :
963 :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;
}
976 :
963 :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); }
>>975 >>976 細かいところはまだ多少わかりませんが、調べてみます。レスありがとうございました。
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))); 一応動作確認したけど・・・不安
979 :
978 :2005/12/21(水) 06:04:53
負の値が変になるねwwwwごめぽorz
int って 16bit ですか?
>>980 CHAR_BIT * sizeof(int)
#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.
馬鹿馬鹿しい
[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] その他の制限: なし 朝までがんばってもできませんでした。。。どなたかお願いします。
>>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));
}
>>985 > A=B*(C-(D))
これをどうエラーにせよと?
俺も思た
[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
>>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;
}
}
>>991 自分で考えたやつでコンパイルして味噌。
もしかしたら(1)はコンパイラが(警告として)教えてくれるよ。
994 :
990 :2005/12/21(水) 11:40:59
>992 ありがとうございました。 あれだけ自分が悩んでたのにこんなに簡単に作れちゃうんですね。 しかも、途中まで自分が作ってた奴よりスリムなできす。 またソース見ながら悩みます。 まだC始めて3日目ですがもっともっと勉強しなければ。ノシ
>>991 (1)return 0;
あとはあってる。
996 :
素人 ◆g5knElKWAw :2005/12/21(水) 12:22:44
次のスレの3-4で質問しました。どなたかお願いします。
997 :
972 :2005/12/21(水) 12:55:52
レス下さった皆さん、ありがとうございます。 これで提出できます(^^ゞ
998 :
デフォルトの名無しさん :2005/12/21(水) 17:37:33
埋め
うめー
printf("1000");
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。