1 :
デフォルトの名無しさん :
2011/06/22(水) 22:27:21.86
◆QZaw55cn4c
2 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
150スレ記念問題 [1]授業単元:C言語演習 [2] 16個の整数を昇順に整列したものを標準出力する関数 void sort(int a,intb,intc,intd, int e,int f,int g,inth, inti,int j,int k,int l, int m,int n,int o,int p) を書きなさい 但しコードには配列演算子やポインタ演算子が現れてはならない。 [3]Linux(Ubuntu)/gcc4.5/C言語 [4] この150スレが終わるまで [5]どのようなパターンでも確実に整列されることが必要です。 出来るだけ短いコードでお願いします。
◆QZaw55cn4c
それじゃあぼん報告できないしw馬鹿じゃねw
[1] 授業単元:構造体ポインタ[2] 問題文: name (文字列50字) height ←実数 weight ←実数 bmi ←実数 これらをメンバとする構造体 pationdata の配列を定義する(charやintやdoubleなどをそれぞれの前につけます)。 複数の人のデータを入れれる構造体 pationdata の配列を作成する。 datafile.dat からデータを読み込んで、配列に保存していく。 ここで注意するのは、ここで上から下までデータを読み込んだ時、データ数に合わせた配列が出来るようにすること。 以下 datafile.dat の中身例 tom 1.65 59.2 jim 1.80 63.5 (左から名前、身長、体重) 配列に保存したデータを関数 BMI ( ) に渡す。 この中で bmi を計算し、構造体の bmi メンバに保存する。 配列に入っているデータを datafile2.dat に出力する。 以下 datafile2.dat の中身例 tom 1.65 59.2 21.70 jim 1.80 63.9 22.10 (右端にBMI数値を追加) 最後にdatafile2.datを閉じる。 尚、datafile.datの中身は自由に決めてよい。 bmi = weight / height * height (BMIは体重÷身長の2乗)
>>9 続き
[3] 環境
[3.1] OS: Windows7
[3.2] Visua Studio 2008
[3.3] 言語: C
[4] 期限: 6月28日09:00まで
[5] その他の制限:ありません
>>8 そのような発言はいただけませんねぇ。
私には彼女がいますが。それでもあなたは考えをなんでし
どういう了見でしょうかねぇ。
[1] 授業単元:C [2] 問題文(含コード&リンク): 読み込むファイルはinput.txtに固定されていたが、それを拡張する。 プログラム実行時に、ファイル名を入力させ、ファイルが読み込み出来ない場合には、ファイル名を繰り返し再入力させるように改良しなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:今すぐに頼む!
>>12 > 読み込むファイルはinput.txtに固定されていた
何が?
15 :
デフォルトの名無しさん :2011/06/23(木) 22:39:15.54
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): ランダムに100個の実数を表示しよ。 実数の範囲は-10.000<=x<=10.000とする。 [3] 環境 [3.1] OS: Windows7 [3.2] gcc [3.3] 言語:C [4] 期限:6月24 9:00
>>12 どう考えても、それは単一の問題じゃないだろう。
中学生以上の人間なら、それを理解したうえで、前の問題も併せて書きこむと思うが。
とりあえず、それの前のプログラムとの一番大きな違いは、
fopenの引数に書いていたであろう"input.txt"の部分を
文字列として扱うことのできる変数(あえてあいまいな言い方にしてる)にし、その変数に
事前に、外部からの入力を行った結果を格納しておくこと、だな。
そして、fopenの戻り値を調べ、失敗の間は入力とファイルオープンをループをする。
という処理も書いておく必要があるって感じでファイト。
習ってないものは使うなというクズ教師のいる日本に未来はないな 何のための勉強かと
>>19 一応、女です
帰省中だから少しレス遅れちゃいます(´・ω・`)
2chで女アピールする奴これだから痛い
☺ ☺
画像のはピボット選択しなくて解けるの?
なるほど、そうですか…
>>15 期限過ぎたけど
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int i;
for (i = 100; i; i--) {
if (!(i % 10))
putchar('¥n');
printf("%7.3f ", (rand() % 20000 - 10000) / (double) 1000);
}
return 0;
}
>>30 いつもタブ幅8なの?
4が多いのかと思ってたけどそうでも無いのか。
[1] 授業単元:べき乗計算の関数 [2] 問題文(含コード&リンク): この問題では、全て正の整数の入力にのみ対応することとする。 べき乗(nのk乗)を求める関数int power(int n, int k)を作成し、テスト用のmainプログラムを作成して、 咲き制した関数の動作確認を行いなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:来週の金曜日まで
>>32 #include <stdio.h>
int power(int n, int k) {
int sum = 1;
while (k--)
sum *= n;
return sum;
}
void test(int n, int k) {
printf("%d^%d = %d\n", n, k, power(n, k));
}
int main()
{
test(1, 2);
test(10, 4);
test(2, 10);
getchar();
return 0;
}
作成し、作成して、作成(咲き制)した
>ここで注意するのは、ここで上から下までデータを読み込んだ時、データ数に合わせた配列が出来るようにすること これが意味分からん つーか言葉通りだと不可能 reallocして余分無いようにしとけってことなのかなぁ それともデータ数決め打ちってことか?
>>36 読み込むファイルの中身が変化しても、対応出来るようにする。という意味です。
不可能ならば、その『データ数決め打ち』のように、個人の解釈で構いません。
>>37 ありがとう
言われてみればそのほうが自然ですね
変な考えしていたようです
別にこの課題やるわけじゃないが
39 :
デフォルトの名無しさん :2011/06/24(金) 20:38:04.15
41 :
デフォルトの名無しさん :2011/06/24(金) 20:59:27.15
問題文は内容を少しくらいここに書けよ リンク先で見てください?どんだけ上から目線で依頼してんだよ
docx がよめないです。
開くの怖いな 放置
>>40 ありがとうございます!!
本当に助かりました!!
ニュイルスです☆(ゝω・)vキャピ
>>41 内容に支障ないだろうから、問題文をテキストで上げ直すか、ここに書いてみて
48 :
デフォルトの名無しさん :2011/06/24(金) 21:46:06.25
もういいです
>>41 #include <stdio.h>
int main()
{
enum {NAME, TEL};
char s[100][2][100], name[100];
int num = 0, i, flg = 1;
puts("実行結果");
printf("人数 > ");
scanf("%d", &num);
for (i = 0; i < num; i++) {
printf("%d人目:\n", i);
printf("名前 > ");
scanf("%s", s[i][NAME]);
printf("電話番号 > ");
scanf("%S", s[i][TEL]);
}
puts("\n電話帳");
for (i = 0; i < num; i++)
printf("%s, %s\n", s[i][NAME], s[i][TEL]);
printf("\n名前 > ");
scanf("%s", name);
for (i = 0; i < num; i++) {
if (!strcmp(name, s[i][NAME])) {
printf("%s, %s\n", s[i][NAME], s[i][TEL]);
flg = 0;
}
}
if (flg)
puts("該当者なし");
}
[1] 授業単元:階乗計算の関数 [2] 問題文(含コード&リンク): この問題では、全て正の整数の入力にのみ対応することとする。 階乗(n!=n*(n-1)*…*2*1)を求める関数int factorial(int n)を作成し、テスト用のmainプログラムを作成して、 咲き制した関数の動作確認を行いなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:来週の金曜日まで
誤字マッチョ
>>50 #include <stdio.h>
#include <math.h>
int factorial(int n)
{
int result;
for (result = 1; n > 0; n--)
result *= n;
return result;
}
int main(int argc, char **argv)
{
int i;
for (i = 1; i < argc; i++) {
int v = atoi(argv[i]);
if (v > 0) /* 問題の定義通り。一般的な定義ではv >= 0 */
printf("%d! = %d\n", v, factorial(v));
}
return 0;
}
53 :
デフォルトの名無しさん :2011/06/25(土) 10:10:49.68
[1] 授業単元: 構造体
[2] 問題文(含コード&リンク):
問1:極座標形式の複素数を2つ読み込み,それぞれの複素数の絶対値,2つの複素数の和・差・積を出力するプログラムを作成せよ.
問2:名前を読み込み,配列 telbook を検索して,その名前に該当する人の電話番号を出力するプログラムを以下を穴埋めして作成せよ.
問3:問2の関数 search() を以下のように変更せよ.ただし,ドット演算子(.)を使用してはならない.アロー演算子(->)を用いること.
書式
struct person *search(struct person *p, int n, char *name)
返り値
pで指し示されたアドレスから長さnのperson型の構造体の配列に名前nameの人が格納されている要素がある場合はその要素へのポインタ.そうでない場合はNULL.
http://loda.jp/vip2ch/?id=2246 [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:本日中
>>53 入力例がないと解けない
r(cos(θ) + isin(θ))を入力させてパースするの?
極座標(r,θ)を入力させればいいでしょ
俺もファイルなんて落としてないから
>>53 から言っただけだけどな
double absComplex(struct Complex aArg) { return aArg.r; } struct Complex multComplex(struct Complex aArg, struct Complex bArg) { struct Complex ret; ret.r = aArg.r * bArg.r; ret.theta = aArg.theta + bArg.theta; return ret; } struct Complex subComplex(struct Complex aArg, struct Complex bArg) { struct Complex ret; ret.r = sqrt(aArg.r * aArg.r + bArg.r * bArg.r + 2 * aArg.r * bArg.r * cos(bArg.theta)); ret.theta = aArg.theta - acos((aArg.r * aArg.r + ret.r * ret.r - bArg.r * bArg.r) / (2 * aArg.r * ret.r)); return ret; }
なんでわざわざdocとかrtfとかテキストエディタで見られないようなもので平気で出してくるんだろう まさかそこまで素人なの?
釣りだからに決まってるだろうが
[1] 授業単元:文字記号描画によるキャラクタ操作 [2] 問題文(含コード&リンク): 文字や記号を使って、画面にキャラクターの絵を描画する。1,2,3,4の入力を行なった場合に、それぞれ異なる絵に切り替わるようなプログラムを作成しなさい。 なお、0が入力されるまで繰り返し操作ができるものとする。 プログラムは、4種の表示ごとに4つの関数を作成することとする。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:来週の金曜日まで
>>61 なんでdocも読めない素人か口出してくるの?
テキストしか使えない人は引っ込んでたらいいのに・・・
>65 どこの誰が作ったかわからないファイルを開きたくないんだよ。 >65のPCがどんなウィルスにやられているかわからないよ。 すぐにスキャンしたほうがいいかも。 どうしても表とか、スライドにしたいときはgoogle docsという手も あるんだし。
今やツイッターにある「これ絶対チェック!!http〜」をクリックしたらウイルスにかかることもあるぐらいだからな。 慎重にならざるを得ない。
>>66 スキルの低い人はこれだから困る
安全にdocを開く方法をマスターしてくれ
スキルのある人だけが解けばいいじゃない 無理なら文句言わずにスルーでおk
>>63 AAでいいみたい
QBとか好きな奴でいいよ
>>68 >安全にdocを開く方法をマスターしてくれ
kwsk
携帯からだからテンプレに沿ってなくてすまん 簡単なデータベースマネジメントシステムをCで作ってるんだがデータをロードする際の while (fgets(buf, 100, fp) != NULL) { strcpy(p->name, buf); } これは何がいけないんだろう pは構造体を指すポインタでnameはその中のchar型の配列 bufもchar型の配列
>>74 >これは何がいけないんだろう
どのようにいけなかったのか、詳しく。
あと、name のサイズは?
コードを codepad で晒すと回答が早いかも。
しらねえが。 p.nameでないか。
>>74 fgetって改行コードもbufに読み込むんだけどそれは分かってるよね?
nameのサイズは100 実行が泊まっちゃうっていうエラー 改行までをp->nameに入れるライプラリ関数はあるのだろうか
>>80 ソースコードは問題を再現可能な最低限の量にしろ
そうすることで自己解決できる場合がほとんど
fopenの成否に関わらずfgetsしてるけど入力したファイル名はちゃんと存在してる?
ロードの関数がひどすぎw
pが確保されてないんですけお・・・
>>79 そのための◆QZaw55cn4c謹製 char *mygetline(FILE *fp); です。いちどお試しあれ。
>>79 >実行が泊まっちゃうっていうエラー
エラーメッセージもちゃんと伝えられないなら、マ辞めた方がいいかも。
>80 不具合が出るときの操作手順の提示がないとわからないよ。 とりあえずメニューで7のload選択時とします。 >83指摘のリスト用バッファが確保されていないことが、不具合の原因でしょう。 registerの場合はnewListを呼んでノードを確保してリストにつないでいます。 loadListの中では、1レコード読み込むごとに、newListを呼ぶ必要があると思いますよ。
87 :
デフォルトの名無しさん :2011/06/26(日) 09:43:29.44
[1] 授業単元: 構造体
[2] 問題文(含コード&リンク):問1~問3までの問題について解答お願いします。
http://codepad.org/IhwnSjHF [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:明日まで。
>>87 問1って和求める関数ないけどどうでもいいの?
エラーで見れん。 俺だけか?
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
お前もいい加減邪魔だよ
お断りします
[1] 授業単元:プログラミング言語基礎 [2] 問題文(含コード&リンク): 10人分の数学の得点を整数で入力し、60点以上の人数、60点未満の人数を求めるプログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:6月28日まで [5] その他の制限:for文とif〜else文を使っておねがいします
>>95 #include <stdio.h>
int main()
{
int tokuten[10] = {0}, i, ijo60 = 0, miman60 = 0;
for (i = 0; i < 10; i++) {
printf("%d人目: ", i + 1);
scanf("%d", &tokuten[i]);
if (60 <= tokuten[i]) {
ijo60++;
} else if (tokuten[i] < 60) {
miman60++;
}
}
printf("60点以上は%d人\n", ijo60);
printf("60点未満は%d人\n", miman60);
}
>>96 なんで普通に...
if(60 <= tokuten[i]){
ijo60++;
} else {
minan60++;
}
ってしないの?
>>59 ですけどaddComplex()が抜けてるようですが、どう書けばいいですか?
59は間違ってる struct Complex subComplex(struct Complex aArg, struct Complex bArg) { struct Complex ret; ret.r = sqrt(aArg.r * aArg.r + bArg.r * bArg.r - 2 * aArg.r * bArg.r * cos(aArg.theta - bArg.theta)); ret.theta = aArg.theta - acos((ret.r * ret.r + aArg.r * aArg.r - bArg.r * bArg.r) / (2 * ret.r * aArg.r)); return ret; } addは struct Complex addComplex(struct Complex aArg, struct Complex bArg) { struct Complex ret; ret.r = sqrt(aArg.r * aArg.r + bArg.r * bArg.r + 2 * aArg.r * bArg.r * cos(aArg.theta - bArg.theta)); ret.theta = aArg.theta + acos((ret.r * ret.r + aArg.r * aArg.r - bArg.r * bArg.r) / (2 * ret.r * aArg.r)); return ret; }
>>92 ちゃんと◆QZaw55cn4cって付けろよクズ
102 :
デフォルトの名無しさん :2011/06/26(日) 18:25:24.36
◆QZaw55cn4ct
>>97 なんでかって言われれば、最初0-100の範囲だと思って作ってあとから消したからだな
ミスだなすまん
>>103 あ、いや別に責めるつもりはなくて、純粋になんでかなと
思っただけだから、気にしないで。
>60点以上の人数、60点未満の人数 問題文がこうあるから、忠実に反映したのかと思ってた。
107 :
デフォルトの名無しさん :2011/06/26(日) 21:25:25.72
[1] 授業単元: 課題 [2] 問題文(含コード&リンク):名前を読み込み,配列 telbook を検索して,その名前に該当する人の電話番号を出力するプログラムを以下を穴埋めして作成せよ. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:明日
108 :
デフォルトの名無しさん :2011/06/26(日) 21:27:15.22
#include <stdio.h> #include <string.h> #define MAX 100 struct person { char name[MAX]; char telno[MAX]; }; int search(struct person telbook[], int n, char *name) { /* ... */ } int main(void) { char name[MAX]; struct person telbook[] = { {"Taro", "090-111-1111"}, {"Hanako", "090-222-2222"}, {"Ichiro", "090-333-3333"}, {"Jiro", "090-444-4444"}, {"Hanayo", "090-555-5555"} }; int n = 5; /* 電話帳に登録された人数 */ int idx; printf("名前 > "); scanf("%s", name); idx = search(telbook, n, name); if (idx < 0) { printf("該当者なし\n"); } else { printf("%s\n", telbook[idx].telno); } return 0; }
109 :
デフォルトの名無しさん :2011/06/26(日) 21:30:31.08
[1] 授業単元: 課題 [2] 問題文(含コード&リンク): 上のプログラムの関数 search() を以下のように変更せよ.ただし,ドット演算子(.)を使用してはならない.アロー演算子(->)を用いること. 書式 struct person *search(struct person *p, int n, char *name) 返り値 pで指し示されたアドレスから長さnのperson型の構造体の配列に名前nameの人が格納されている要素がある場合はその要素へのポインタ.そうでない場合はNULL. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:明日
何も言わず再掲を繰り返す・・・ コミュ能力欠如しすぎだろ・・・
男は黙ってスルー
>>109 #include <stdio.h>
#include <string.h>
#define MAX 100
struct person {
char name[MAX];
char telno[MAX];
};
struct person *search(struct person *p, int n, char *name)
{
int i;
struct person *pussy = NULL;
for (i = 0; i < n; i++)
if (!strcmp((p+i)->name, name))
return p + i;
return NULL;
}
int main(void){
char penis[MAX];
struct person vagina[] =
{ {"Taro", "090-111-1111"},
{"Hanako", "090-222-2222"},
{"Ichiro", "090-333-3333"},
{"Jiro", "090-444-4444"},
{"Hanayo", "090-555-5555"} };
int n = 5; /* 電話帳に登録された人数 */
struct person *anal;
printf("名前 > "); scanf("%s", penis);
anal = search(vagina, n, penis);
if (anal) { printf("%s\n", anal->telno);
} else { printf("該当者なし\n");}
return 0;}
113 :
デフォルトの名無しさん :2011/06/27(月) 20:45:33.27
[1] 情報処理演習T [2] 整数を読み込み,その整数より小さい3の倍数をすべて表示するプログラムを作りなさい. ただし,for文を用いた方法とwhile文を用いた方法の両方を考えて,ひとつのプログラムにまとめること. [3] 環境 [3.1] MacOS [3.2] xcode [3.3] C言語 [4] 明日の夜10時まで [5] 特になし よろしくお願いします。
すべてとか無理な気がしないでもない
>>113 #include <stdio.h>
#define FOR
int main()
{
int unko = 0;
scanf("%d", &unko);
unko -= unko % 3;
#ifdef FOR
for (; 0 < unko;){
#else
while (0 < unko) {
#endif
printf("%d ", unko);
unko -= 3;
}
}
正の倍数ってことでいいんだろうなってことにしといた
変数名で自己紹介しなくてもいいのにw
pythonコードの汚さは異常だし LL初心者って1行に詰め込みすぎるよね
宗教戦争再開 プロセス終了時にmemset(,0,sizeof(..)を呼び出しmallocする奴は市ね
>>120 しかけかたが下手ですね。宿題の回答をみて、こいつは沸騰しやすいやつだと読み取って、
狙いをつけて急所を逃さずしつこく絡まないと、スルーされるだけですよう。
このスレでそれがうまいのはQZ、しかけられた相手はほとんど例外なく、燃え上がる。
QZが間違っていることのほうが多いが、それと楽しませてくれるのとは、また別の話。
どこがうまいのか具体的に説明して下さい
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
[1] 授業単元:プログラミング演習 1 [2] 問題文(含コード&リンク) 結果が以下のようになるC言語プログラムを作りなさい。 行列A,Bの各要素はscanf関数を使って標準入力から設定すること Matrix A 5.0 4.0 3.0 4.0 3.0 2.0 3.0 2.0 1.0 Matrix B 1.0 2.0 3.0 2.0 3.0 4.0 3.0 4.0 5.0 Matrix C = A - B 4.0 2.0 0.0 2.0 0.0 -2.0 0.0 -2.0 -4.0 Matrix D = A * B 22.0 34.0 46.0 16.0 25.0 34.0 10.0 16.0 22.0 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:6月29日 よろしくお願いします。
126 :
デフォルトの名無しさん :2011/06/28(火) 12:57:42.83
[1] C言語演習
[2] @
http://codepad.org/om7viTIZ を参考に、if文とfor文を使って
3×3の奇数魔方陣を表示するプログラムを作成しなさい。
A @を改良し、奇数を入力してその大きさの魔方陣を表示するプログラムを作成しなさい。
[3.1] Windows7
[3.3] C言語
[4] 期限: @ 今日の19時まで A 明日の19時まで
[5] 配列まで
わかる方どうかよろしくお願いします。
>>125 (1) bは何個あるかも教えてくれる
(2)
http://ideone.com/v2bR1 (3)seachによって見つけた要素の次の要素から先をseachにかけることによってsurveyによって得られた個数をすべて見つけるようにした
全部列挙するならむしろservey要らない気がするんだけど
使えと書いてあるから一応返り値を利用という形にしてみた
>>124 #include <stdio.h>
int main(void)
{
int i, j, k;
double A[3][3], B[3][3], C[3][3], D[3][3];
printf("Matrix A\n");
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) scanf("%lf", A[i] + j);
printf("\nMatrix B\n");
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) scanf("%lf", B[i] + j);
printf("Matrix C = A - B\n");
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) C[i][j] = A[i][j] - B[i][j];
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++) printf("%.1f ", C[i][j]);
printf("\n"); }
printf("\nMatric D = A * B\n");
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++) {
D[i][j] = 0.0;
for(k = 0; k < 3; k++) D[i][j] += A[i][k] * B[k][j]; }
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++) printf("%.1f ", D[i][j]);
printf("\n"); }
return 0; }
>>126 A
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, j, k, n, **m;
scanf("%d", &n);
if(n & 1 == 0) return 0;
m = malloc(n * sizeof(int*));
for(i = 0; i < n; i++) m[i] = calloc(n, sizeof(int));
for(i = 0, j = n / 2, k = 1; k <= n * n; i--, j++, k++) {
if(i < 0) i = n - 1;
if(j == n) j = 0;
if(m[i][j]) {
i = (i + 2) % n;
j = (j + n - 1) % n; }
m[i][j] = k;
}
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) printf("%d ", m[i][j]);
printf("\n");
free(m[i]);
}
free(m);
return 0;
}
131 :
デフォルトの名無しさん :2011/06/28(火) 13:46:38.63
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://codepad.org/EEw71Jn2 [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011/7/1
よろしくおねがいします
132 :
131 :2011/06/28(火) 13:54:04.71
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://codepad.org/DVzYjrvW [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011/7/1
>>131 を改良で作る問題です。
よろしくおねがいします
aa
135 :
デフォルトの名無しさん :2011/06/28(火) 14:52:04.34
>>130 できればif文、for文以外の関数を使用せずに作れませんか?
(習っていない関数は使用できないので)
@の方もわかればお願いします。
ifもforも関数ではありません それよりprintfもscanfもだめなのかよwwwwwww
137 :
デフォルトの名無しさん :2011/06/28(火) 15:01:09.83
>>136 いやそれは大丈夫。さすがに習ってるし。
>>137 #include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, j, k, n, m[100][100] = {0};
scanf("%d", &n);
if(n & 1 == 0) return 0;
for(i = 0, j = n / 2, k = 1; k <= n * n; i--, j++, k++) {
if(i < 0) i = n - 1;
if(j == n) j = 0;
if(m[i][j]) {
i = (i + 2) % n;
j = (j + n - 1) % n; }
m[i][j] = k;
}
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) printf("%d ", m[i][j]);
printf("\n");
}
return 0;
}
じゃぁこんな感じで
ちなみ俺は
>>130 じゃない
139 :
デフォルトの名無しさん :2011/06/28(火) 15:15:42.96
>>138 &演算子は習っていないので、何かで代用できませんか?
n % 2 == 0
>>140 %演算子も習っていないので、他ので代用できませんか?
もう if(n & 1 == 0) return 0; ととっぱらっていいよ もともと不完全なエラー処理だし printf("奇数を入力してください"); に差し替えとけばおk
143 :
デフォルトの名無しさん :2011/06/28(火) 15:26:30.19
>>140 #include <stdlib.h>という文(?)は習ってないのですが、
なんとか書き換えられませんか?
あと、
>>141 は自分ではありません。さすがに習ってるし。
>>143 mallocのためのものなので消していいよ
てか消し忘れてた
145 :
デフォルトの名無しさん :2011/06/28(火) 15:37:09.90
>>144 たびたびすみませんが、return(0); の使用回数を1回にできませんか?
(2回使うのはまだ習っていないので)
146 :
デフォルトの名無しさん :2011/06/28(火) 15:55:56.21
>>145 宿題人に片付けてもらおうっていうアフォのためのスレだからこんなこと言うのはばかられるんだろうが、
「習ってないから」で勉強しない理由にはならんぞw
学校ってのは教えを乞いに行く場所じゃなく勉強方法を学ぶ場所と思えよw
>>146 おいやめろ
馬鹿が量産された方が市場が肥えていいんだよ
148 :
デフォルトの名無しさん :2011/06/28(火) 16:03:46.37
>>146 習ってない文を使ってると突っ返される。
だから嫌でも習ってる文だけを使って作らないとダメなんだ。
課題に制約が明記されていれば別だが、教科書があるんだから自分で先取り してたって不思議じゃない。褒められこそすれ突っ返される理由にはならない。 もちろん程度はある。バカのQZには理解できないだろうが。
150 :
デフォルトの名無しさん :2011/06/28(火) 16:34:17.78
>>149 うちでは基本的に「教えてないことは使ってはいけない」という制約が
あるようなもの。
後、@分かる方お願いします。差し迫ってるので。
(Aも早い方が助かりますが。)
後出しで、あれは習ってないこれも習ってないと言われるんじゃ、やる気は無い。
152 :
デフォルトの名無しさん :2011/06/28(火) 17:14:01.65
>>151 使えるのはif文、if〜else文、for文、あとはprintfとscanfくらい。
それじゃmain関数や変数の宣言できないし、標準ヘッダーもインクルードできないし、 演算子だって何も使えないらしいし、まともなプログラムを作るのは無理だな。
ネタだろ、 レスは出来るのにずっとsageないし
155 :
デフォルトの名無しさん :2011/06/28(火) 17:49:10.45
>>153 #include <stdio.h>
int main(void)
{
変数宣言
プログラム
return 0;
}
みたいな感じ。使える演算子は+,-,*,/,%,=,==,<,>,<=,>=,&&,||,++,--。
そしてプログラムのなかではreturn 0; は使えない。
156 :
デフォルトの名無しさん :2011/06/28(火) 17:53:25.33
【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク): プログラムの実行時間を計れ。 例えば #include<stdio.h> int main(void) { printf("jikkoujikan"); return 0; } の実行時間をプログラム実装によって実行時間が表示されるようにせよ。 [3] 環境 [3.1] windows7 [3.2] gcc [3.3] C言語のみ [4] 期限:今日の19時 [5] c言語のみ
>>156 #include<time.h>
...
clock_t s=clock();
...
printf("Elapsed time: %f second.\n",(double)(clock()-s)/CLOCKS_PER_SEC);
...
[1] 授業単元:べき乗計算の関数 [2] 問題文(含コード&リンク): この問題では、全て正の整数の入力にのみ対応することとする。 べき乗(nのk乗)を求める関数int power(int n, int k)を作成し、テスト用のmainプログラムを作成して、 咲き制した関数の動作確認を行いなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:来週の金曜日まで
誰か
>>138 のプログラムをreturn 0;一回だけ使う
プログラムに書き換えてくれませんか?
>>159 #include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, j, k, n, m[100][100] = {0};
scanf("%d", &n);
if((n & 1) != 0) {
for(i = 0, j = n / 2, k = 1; k <= n * n; i--, j++, k++) {
if(i < 0) i = n - 1;
if(j == n) j = 0;
if(m[i][j]) {
i = (i + 2) % n;
j = (j + n - 1) % n;
}
m[i][j] = k;
}
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) printf("%d ", m[i][j]);
printf("\n");
}
}
return 0;
}
>>138 じゃないけど
161 :
デフォルトの名無しさん :2011/06/28(火) 22:04:57.40
113です。 115さんどうもありがとうございました!!
>>160 どうもありがとうございます!助かりました!
習ったこと以外使えない ってのはAPIに制限がある開発みたいなもんだ。 まあ教育課程においては「褒められた上でリジェクト」 ってのが正しいあり方かな。
164 :
デフォルトの名無しさん :2011/06/28(火) 23:02:09.79
買い物かごに入れるボタン(btnAdd)を押したとき、ComboBox1に表示されている項目(ニンジン、かぼちゃ、キャベツ)を、 ListBox1に追加するにはどうすればいいのでしょうか。その時のプログラムコードを教えていただきたいです。 Pribvate Sub btnAdd_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles.btnAdd.Click End Sub
次スレからはテンプレに「使える標準関数、演算子等」の項目が必要だな
[1] 授業単元:C言語 [2] 問題文:コンソールから2つの数(数1,数2とする)を入力する.ただし,数1は複数の桁の整数で,数2は1桁の数であるとする. 数2が数1の倍数のときには,数1が数2の倍数である旨を表示し,そうでない場合は,数1が数2の倍数では無い旨,教示する. そして,数1に含まれる,数字としての数2の個数を数え,結果をコンソールに出力させる. 以上を4つの関数で構成されるプログラムとして作成せよ. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:visual c [3.3] 言語:C [4] 期限: 明日
>>166 実行例
数1を入力して下さい 23242 ←キーボードから23242と入力
数2を入力して下さい 2 ←キーボードから2と入力
23242は2の倍数です
23242に含まれる2の数字は3個です
数1を入力して下さい 323
数2を入力して下さい 3
323は3の倍数ではありません
323に含まれる3の数字は2個です
お願いします
>>166 続き
<仕様>
プログラムを以下の関数で構成する.
@ 数1が数2の倍数であるか否かの判定の関数
・引数:数1, 数2(いずれもint型)
・戻り値:0または1(いずれもint型)
0…数1は数2の倍数ではない
1…数1は数2の倍数
A 数1に含まれる数字としての数2の個数を数える関数
・引数:数1, 数2(いずれもint型)
・戻り値:数えた結果の個数(int型)
B 数1, 数2にまつわる分析を行う関数
・引数:数1, 数2(いずれもint型)
・戻り値:分析結果…2桁の整数
1の位 :数1に含まれる数2の数字の個数
10の位:数1が数2の倍数か否か(0:非倍数,1:倍数))
C main関数.
・数1, 数2をキーボードから入力する
・上記Bの分析関数を呼び出す
・下記の分析結果を表示する.
数1が数2の倍数か否か
数1に含まれる数2の数字の個数
関数@〜Bの名称やソースプログラム内の位置は任意で良い.
[1] 授業単元:べき乗計算の関数 [2] 問題文(含コード&リンク): この問題では、全て正の整数の入力にのみ対応することとする。 べき乗(nのk乗)を求める関数int power(int n, int k)を作成し、テスト用のmainプログラムを作成して、 咲き制した関数の動作確認を行いなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:6/31まで [5] その他の制限:関数を利用すること、入力できるようにすること
>>174 #include <stdio.h>
int power(int n, int k) {
int sum = 1;
while (k--)
sum *= n;
return sum;
}
void test(int n, int k) {
printf("%d^%d = %d\n", n, k, power(n, k));
}
int main()
{
int n, k;
printf("n = ");
scanf("%d", &n);
printf("k = ");
scanf("%d", &k);
if (n <= 0 || k <= 0) {
printf("死ね"); return 1;
}
test(n, k);
return 0;
}
>>169 #include <stdio.h>
int power(int n, int k) { return k == 1 ? n : k & 1 ? n * power(n * n, k / 2) : power(n * n, k / 2); }
int main(void)
{
int n, k;
printf("n = ");
scanf("%d", &n);
printf("k = ");
scanf("%d", &k);
printf("%d^%d = %d\n", n, k, power(n, k));
return 0;
}
177 :
バカ娘 :2011/06/29(水) 22:44:21.96
[2]下記の九九の表を作るプログラムを作れ 1 2 4 3 6 9 ....... 8 16 24...64 9 18 27...72 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:6/30まで 全く分からないので宜しくお願いします。
>>177 #include <stdio.h>
int main(void)
{
int i, j;
for(i = 1; i <= 9; i++) {
for(j = 1; j <= i; j++) printf("%d ", i * j);
printf("\n");
}
return 0;
}
>>177 #include <stdio.h>
int main()
{
int i,j;
for(i=1;i<10;i++){
for(j=1;j<=i;j++){
printf("%d ", i * j);
}
printf("\n");
}
return0;
}
>>177 9の段は81までじゃなくて72までなのか…
181 :
バカ娘 :2011/06/30(木) 08:22:15.80
9の段、81まででした・・・ >180
182 :
バカ娘 :2011/06/30(木) 09:01:59.74
9の段、81までなのですがそのままで良いのでしょうか?>178
183 :
七緒 :2011/06/30(木) 09:06:01.54
[2]xy平面上の10 個の点(0〜9 番とする) の(x, y) 座標を入力させ つぎのようにソートするプログラムを作れ. 大きさ10の配列x, y を用いて,i番目の点の座標をそれぞれx[i], y[i] に入れる. (梅) x座標の値の昇順 (原点より近い点から遠い点の順) 注意:点を入れ替える時には,x 座標だけでなく,y座標も入れ替えること. [3] 環境 [3.1] OS:WindowsXP [3.2] Visual Studio 2008 [3.3] 言語:C [4] 期限:7/1まで 宜しくお願いします。
[1] 授業単元: 演算子 [2] 問題文: 変数の下位16ビット中の 1 のビット数を数える関数 int bit_count(int x) を作成せよ。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C [4] 期限: 7月5日09:00まで [5] その他の制限:ありません
185 :
デフォルトの名無しさん :2011/06/30(木) 11:10:54.53
>>183 #include <stdio.h>
int main(){
int x[10],y[10];
int i,j;
int temp;
for(i=0;i<10;i++)
scanf("%d%d",&x[i],&y[i]);
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(x[i]<x[j]){
temp=x[i];x[i]=x[j];x[j]=temp;
temp=y[i];y[i]=y[j];y[j]=temp;
}
}
}
for(i=0;i<10;i++)
printf("%d%d\n",x[i],y[i]);
}
>>184 int bit_count(int x)
{
int i, count = 0;
for (i = 0; i < 16; i++, x >>= 1)
if (x & 1)
count++;
return count;
}
[1] 授業単元: 演算子
[2] 問題文: 変数の下位16ビット中の 1 のビット数を数える関数 int bit_count(int x) を作成し、それを用いて実際に 1 のビット数を数えて、その値を出力するプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語: C
[4] 期限: 7月5日09:00まで
[5] その他の制限:問題文は
>>184 なのですが、具体的なプログラム例まで示さなくてはいけないようです。
数える関数は
>>186 さんが
int bit_count(int x)
{
int i, count = 0;
for (i = 0; i < 16; i++, x >>= 1)
if (x & 1)
count++;
return count;
}
と作ってくれました。
変数の値は何でも構いません。
>>184 #include <stdio.h>
#include <math.h>
int bit_count(int x)
{
static const unsigned char bit_set_table[256] = {
# define B2(n) n, n+1, n+1, n+2
# define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2)
# define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2)
B6(0), B6(1), B6(1), B6(2)
};
return bit_set_table[(x >> 8) & 255] + bit_set_table[x & 255];
};
int main(int argc, char **argv)
{
int i, x;
for (i = 1; i < argc; i++) {
x = atoi(argv[i]);
printf("%d(0x%02x) %d\n", x, x, bit_count(x));
}
}
190 :
デフォルトの名無しさん :2011/06/30(木) 13:00:56.05
>>188 int main()
{
printf("%d\n",bit_count(0x00000));
printf("%d\n",bit_count(0x00001));
printf("%d\n",bit_count(0x0ffff));
printf("%d\n",bit_count(0x10000));
printf("%d\n",bit_count(0x10001));
}
>>189 'atoi'識別子が見つかりませんでした
というコンパイルエラーが出ました
#include <stdlib.h> 追加してみれ。
>>192 すみません、今自分で気づいて、それをやってみたのです…が、実行しても何も表示されません。
厳密に言うと、他のコンパイラ(Study Cというものを使いました)なら、動きました。
それでも、実行したら「main関数に引数があります。コマンドライン文字列をプログラムに渡したい場合はここで入力してください」といった別ウィンドウが表示されます。
出来れば、キーボードから数字を入力する形にするのではなく、プログラム中で変数の値を決定する形でお願いします。
a = 5
という風にプログラム中で決めてしまう形です。
196 :
デフォルトの名無しさん :2011/06/30(木) 13:34:30.48
>>193 >>186 さんのプログラムに自分で変数の宣言をして追加して出来ました。
どうもお手数かけました。
皆様ありがとうございました。
>>196 >コマンドライン引数でファイル名をn個指定し、 ファイル1からファイルn-1までの内容を連結し、 その結果をファイルnに書き込むプログラムを書け。
の一方で、
>ただし、標準入力と標準出力を当該のファイルにリダイレクトした状態でUNIX標準コマンドを実行することで行うこと。
というのは矛盾しているように感じてしまうのですが、具体的にどうすればいいのでしょうか?
199 :
七緒 :2011/06/30(木) 19:01:38.44
ありがとうございました!!>185
>>196 systemコマンドでcat file_1 file_2 ... > file_n の方法でよければ。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
int i;
char s[100] = "", *p = s;
strcpy(p,"cat ");
for (i = 1; i <= argc-2; i++) {
for(;*p;p++);
sprintf(p,"%s ",argv[i]);
}
for(;*p;p++);
sprintf(p," > %s ",argv[i]);
system(s);
return 0;
}
【質問テンプレ】 [1] 授業単元: C [2] 問題文(含コード&リンク): 次のアルファベットのキーワードを入力して計算する(例:sin45 sin0.78539)関数電卓プログラムを作成。 なお、関数を容易に変更、修正、増加できるように。 sin(正弦)、cos(余弦)、tan(正接)、arcsin(逆正弦)、arccos(逆余弦)、arctan(逆正接)、ln(自然対数)、log(常用対数)、exp(指数関数)、sqr(平方)、 rad(入力データをラジアン単位にする)、deg(入力データを度を単位とする)、sinh(双曲線正弦)、cosh(双曲線余弦)、tanh(双曲線正接) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VISUAL2008 win32 [3.3] 言語: C [4] 期限: 2011年7月13日 [5] その他の制限: 今学期習い始めたばかりで、ポインタ・配列・関数・繰り返し・選択・基礎演算くらいまでやっています よろしくお願いします
202 :
デフォルトの名無しさん :2011/06/30(木) 22:34:43.75
で、報酬は?
>>201 関数電卓というがどの程度作りこめいいんだ?
sin(1.1)とかtan(0.5)とか
単体実行できるだけでいいのか?
基礎しかならってないならパースしろってのもおかしい気がする
VBScriptで書かれた関数電卓 Dim s,t On Error Resume Next do until false s=InputBox("数式:","数式を入力してください(空で終了)") if(s="")then WScript.Quit end if t=eval(s) WScript.Echo s & "=" & CStr(t) loop このくらいの性能は欲しいんじゃね?
勿論Windows オンリ Windows Scripting Host入っていない環境ではDLして入れる必要あり コピペして適当な名前.vbsでデスクトップに保存。 クリックで実行可
207 :
201 :2011/06/30(木) 23:29:30.32
>>203 そこら辺り先生の説明が少なすぎて何とも言いがたいのですが、単体実行だけでお願いします
>>207 関数ポインタって習いました?
使えるならだいぶすっきりするので使いたいんですが
>>203 入力例見るに()とかつけないみたいだし
数字の前までの文字列がキーワードに一致しているかくらいでいいんじゃね?
210 :
七緒 :2011/07/01(金) 00:02:17.78
183です。コンパイルかけると、何か1つエラーが出るのですが・・・ そのままで良いのでしょうか?全然分からなくてすいません。。。
何が出てるかわからなきゃ判断できないじゃん
>>207 #include <stdio.h>
#include <string.h>
#include <math.h>
static char table[0x1000000][0x10];
#define NAME_LEN 16
#define BUF_LEN 256
double rad(double x) { return x / 180. * 3.14; }
double deq(double x) { return x / 3.14 * 180; }
struct {
char name[NAME_LEN];
double (*f)(double);
} functions[] = {{"sin", sin}, {"cos", cos}, {"arcsin", asin}, {"arctan", atan}, {"ln", log},
{"log", log10}, {"exp", exp}, {"sqr", sqrt}, {"rad", rad}, {"deq", deq},
{"sinh", sinh}, {"cosh", cosh}, {"tanh", tanh}};
int main()
{
char name[BUF_LEN];
double x;
int i;
while (scanf(" %[a-z]%lf", name, &x) == 2) {
printf("inst = %s(%f)\n", name, x);
for (i = 0; i < sizeof functions / sizeof functions[0]; i++)
if (!strcmp(functions[i].name, name))
printf("answer = %f\n", functions[i].f(x));
}
printf("なんか書式にあわないのを突っ込まれたので終了します");
return 0;
}
適当な部分があるので不満があるなら具体的に言ってもらえればなんとかします
そのままでいいでしょうかってことは動いてるのか? ならscanfが古い関数だから別の使ってくださいって言われてるどうでもいい警告だと思う
エラーじゃなくて警告だけなら無視してもOK
scanf()ってstrlen()なんかよりはるかに安全な関数だと思うんだけど なんでみんな危険というんだろうね。 不思議だ。
>>216 なるほど。1,2,3,5,6 はまったく問題ではないけども
4は盲点でした
218 :
バカ娘 :2011/07/01(金) 14:29:36.66
動作してました、すいません。ありがとうございます>178
219 :
七緒 :2011/07/01(金) 14:31:44.77
183です。コンパイルかけましたが、動かないです・・・
>>219 エラー出さないと分からないだろボケ
手を抜くな死ね
vc2008で念のためcとcpp両方で試したけど動いたぞ
いつものごとく scanf() での入力の罠に嵌っただけとか…
222 :
七緒 :2011/07/01(金) 15:18:01.21
エラーはでないんです。プログラム動かないです・・・
>>219 俺のPCでもちゃんと動いてた。
ソース全部しっかりコピペしたか確認してみれ。
あとVisual Studioなら、ファイル→新規作成→プロジェクトから、新しいソースファイル作って、そこでやってみたか?
同じファイルの中でソースファイルだけ増やしたら、確かバグる気がする。
追記
>>219 まさかとは思うが…
君が求めてるプログラムは実行したら、最初に数字を入力しないと動かないぞ?
七緒がコンパイルの仕方を知っているか、それが問題だ
多分いきなりscanfで読み込みで 入力してください とかでないから早とちりしてるんだろうな
>>216 ざっと見てみたけどなんか好きになれない人だな
>>219 いいか?実行したら、俺が以下に述べる通り入力してみろ。数字は全部半角、スペースは文字通りスペースキーのことを指している。エンターは文字通りエンターキーを指す。
1スペース1エンター
1スペース3エンター
1スペース5エンター
2スペース3エンター
2スペース5エンター
2スペース1エンター
3スペース5エンター
3スペース1エンター
3スペース3エンター
4スペース3エンター
これで結果は綺麗にソートされて出てくる。
ここまでやって出来なかったら人間やめろ
スペースキーを押すと「スペース」と入力されるキーボードアプリ を思い出した。
[1]プログラミング
[2]問題文:行列の中、隣接する値kのみから構成される一つの正方形の範囲はsub-blockと呼ばれる。
一つの正方形を読み込んで、入力値kに対する一番大きいsub-blockを探して、sub-blockの位置と大きさを表示するプログラムを作成せよ。
動作例:
http://www.dotup.org/uploda/www.dotup.org1751871.txt.html [3]環境 [3.1]windows [3.2]gcc [3.3]C言語
[4]期限:7月4日まで
[5]・正方行列はファイルから読み込む事
・最大sub-blockが複数ある場合は全て表示する事
・比較回数はできるだけ少なくする事
[1] 授業単元:配列の引数 [2] 問題文(含コード&リンク): 試験成績20人分を管理するプログラムを作成することになった。試験成績は、0〜100の整数で与えられる。 構築するプログラムは、以下の関数の構成で構築することとする。 変数指定 int data[20] //成績0〜100の整数を格納する要素数20の配列 ○void inputData(int data[20]); //点数入力の関数 ○void outputData(int data[20]); //点数リストの画面出力関数 ○innt main() //上記の2つの関数を読み出すメイン関数 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/4まで [5] その他の制限:
232 :
デフォルトの名無しさん :2011/07/01(金) 20:11:23.58
[1] 授業単元:ソート
[2] 問題文(含コード&リンク): 問1から問4まであるのでリンク貼ります。
http://codepad.org/82dMhAvP [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:明日まで
よろしくお願いします。
>>235 DTRACEって何?
あと関数ポインタ使ったほうがスマートにならね?
>232 問2
ttp://codepad.org/TUVdIM4I >236
>DTRACE
ごめんデバグコード消し忘れ。
>あと関数ポインタ使ったほうがスマートにならね?
main中のsearch_maxとsearch_minの選択を言っているなら、私もそう思う。
しかし、問題に雛形が与えられていたので、そのまま流用した。
240 :
デフォルトの名無しさん :2011/07/02(土) 00:17:02.32
【1】c言語 【2】二つの西暦で入力された年月日から、その間の日数を計算するプログラムを作成してください。 ここに処理が入る というとこのプログラムをお願いします プログラムのベース int uruu(int y); int monthday(int y, int m); //---------------------------------------------------- int main(){ int year_a, month_a, day_a; int year_b, month_b, day_b; int days; int i; days = 0; printf("日数計算プログラム\n"); printf("数え始める西暦年月日を入力してください\n"); scanf("%d,%d,%d",&year_a, &month_a, &day_a); printf("数え終わる西暦年月日を入力してください\n"); scanf("%d,%d,%d",&year_b, &month_b, &day_b); ここに処理が入いる printf("%d年%d月%d日から%d年%d月%d日までの日数は%d日です。\n", year_a, month_a, day_a, year_b, month_b, day_b, days); return 0; } //うるう年ならtrue(1)、そうでないならfalse(0)を返す関数 int uruu(int y){ int ret; ここに処理が入る return ret; } //年、月を受け取り、その月の日数を返す関数 int monthday(int y, int m){ int d; ここに処理が入る return d; }
[1] 授業単元:引数の利用 [2] 問題文(含コード&リンク): #include <stdio.h> void inputData(int data[20]) { int n = 0; while (n < 20) { printf("data[%2d] = ", n); if (scanf("%d", &data[n]) != 1) { printf("数字を入力してください\n"); scanf("%*s"); } else if (data[n] < 0 || 100 < data[n]) { printf("[0, 100] の範囲で入力してください\n"); } else { ++n; } } } void outputData(int data[20]) { int i; for (i = 0; i < 20; ++i) { printf("data[%2d] = %3d\n", i, data[i]); } } int main(void) { int data[20]; inputData(data); outputData(data); return 0; }
>>242 を最大値と最小値を同時に求める関数void minmax()を追加し、動作確認するmainプログラムも追記しなさい。
void minmax(配列、最小、最大)
[3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語:C
>>215 危険とは思わないけど仕事でコードを書いてると使う機会が無いから
使わなくなる→仕様も良く知らね→危ないんじゃね
って流れじゃないかと...
Secure Coding セキュリティ総合スレ みたいなのがこの板には必要だと思うが。 俺レベル足りなかったから誰か立ててw そこで一度、scanfがダメなのかアリなのか、 それはなぜなのか、他の危険な関数、安全とされる関数、 シオデラットのstrlcpy, strlcatはどれほど有意義なのか、 について語ってもいいはずだ。
>>246 ここでいいんじゃないでしょうか。
>シオデラットのstrlcpy, strlcat
私は、NUL で必ず終わるところに好意的(strncpy() はいまいちこの点に関して使えない)なんですけれども、wikipedia を見る限り、なんだかくだらないいちゃもんをつける人がいるようですね。
レベルが低すぎて笑えない
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
クラスカルのアルゴリズムを用いて最小木を求めるプログラムを作成せよ。
読み込むグラフのデータ(graph.txt)は、
頂点数 枝数 (1行目)
始点 終点 枝の長さ (2〜枝の数だけ)
という形式で行こうと思っています。
http://codepad.org/BxDa8z6P [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:7月10日
よろしくお願いします。
Qはやっとスレを立てられたかと思ったら消されたかざまあ ●くらい買えよ あ、無職だから●を買う金もないのか
[1] 授業単元:関数Aから関数Bを呼び出す
[2] 問題文(含コード&リンク):
>>245 に、分散を求める関数(名前、詳細仕様は各自で考えてよい)を追加し、動作確認するmainプログラムも追記しなさい。
[3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語:C
[4] 期限:7/4まで
[5] その他の制限:
257 :
デフォルトの名無しさん :2011/07/02(土) 19:42:45.87
[2]下記のプログラムにおいて,numcountは,値が0 〜M -1 の範囲の大きさN のint型の配列を引数として渡されると(ただし,M, N は正の整数),同じ値が複数ある時はそれを1 個とみなしてその配列中の数の 個数を返す関数である.例えば,配列の値を7, 4, 8, 2, 4, 6, 1, 6, 4, 5 とすると,(ダブリを省くと) この中には,7, 4, 8,2, 6, 1, 5 の7 個があるので,関数numcountは7 を返す. これは,例えば,0 〜M -1 の範囲でどんな数が出てきたかをチェックしておき(ヒント: 大きさM のint型の配列を用い,最初はすべて0に初期化しておき,数iが現れたら,そのi番目を1にすればよい), 最後に1度でも出てきたものを数えれば求めることができる.関数numcountを,下記のプログラムの/* INSERT HERE */の部分に挿入できるように書け.(提出はプログラム全体) #include <stdio.h> #define M 10 /* 適当な正整数(数の範囲が0 〜M -1) */ #define N 10 /* 適当な正整数(入力する数の個数)*/ /* INSERT HERE */ intmain(void) { inti, a[N]; /* a[0]〜a[N-1] の値を入力する*/ for(i= 0; i< N; i++) { printf("a[%1d] = ? ", i); scanf("%d", &a[i]); } printf("numcount= %3d\n", numcount(a)); return 0; } [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/6 [5] その他の制限:プログラムだけでなく、課題の説明、実行結果、考察も必須 すいません、全く分からないので誰かお願いします。今回プログラムのみでは採点不可にて何となく合格しそうな考察方法もお願いします。
>>257 どうみても言われたものをそのまま作るだけなんだが
考察って何をしろっていうんだよ
この課題の感想的なもの(ここんところからこういうことを知ることができました的なもの)でいいのか?
課題の説明ってのは作ったプログラムの説明のことでいいんだよな?
この他にもこういう別のやり方もあるよって例出して それぞれのメリットデメリットを列挙すればいいんじゃね
>>257 ttp://codepad.org/qK35O7Hu >何となく合格しそうな考察方法もお願いします。
元からそこまで世話を焼くつもりはないが、[1]が書いていないし、
どういう背景でこういう問題が出されたかわからないので、答えようがない。
アルゴリズムとしては「ビンソート」あるいは「バケットソート」という方式を利用している。
Wikipediaでも調べてみたらいい。
261 :
260 :2011/07/02(土) 20:03:02.02
ミス発見 numcountの元のforループは for (i = 0; i < N; i++) { が正しい。
262 :
デフォルトの名無しさん :2011/07/02(土) 20:18:28.55
257です、[1]配列でした。言語の知識ゼロから4日の講座でこの課題が出たので 組んだ過程を添えろと指示が出て困って書き添えました。すいません、 ありがとうございました>260
#include <stdio.h> void inputData(int data[20]){ int n = 0; while (n < 20) { printf("data[%2d] = ", n); if (scanf("%d", &data[n]) != 1) { printf("数字を入力してください\n"); scanf("%*s"); } else if (data[n] < 0 || 100 < data[n]) { printf("[0, 100] の範囲で入力してください\n"); } else { ++n; } } }
void outputData(int data[20]){ int i; for (i = 0; i < 20; ++i) printf("data[%2d] = %3d\n", i, data[i]); } void minmax(int a[], int *min, int *max){ int i; *min = a[0]; *max = a[0]; for (i = 1; i < 20; i++) { if (*min > a[i]) *min = a[i]; if (*max < a[i]) *max = a[i]; } } int main(void) { int data[20], min, max; inputData(data); outputData(data); minmax(data, &min, &max); printf("%d %d\n", min, max); return 0; } に、分散を求める関数(名前、詳細仕様は各自で考えてよい)を追加し、動作確認するmainプログラムも追記しなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/4まで [5] その他の制限:
>>251 さっそくありがとうございます。
グラフィックまでつけていただけるなんて・・・
しかし、実行結果を図にしてみると、4-8,7-8がどちらも入り、ループが構成されて最小木になっていないような・・・
どちらも重みが3で追加する順番によって、どちらでも構成することができるのが問題なのだと思いますが、どう改善すればよろしいですかね?
[1] 授業単元:引数の利用 [2] 問題文(含コード&リンク): 文字列処理の関数として、strcat(),strcmp(),strcpy(),strlen()を利用した。これらは、string.hをインクルードすることだけで利用することができた。 それら4つの関数と同じ動作を可能とするORGstrcat(),ORGstrcmp(),ORGstrcpy(),ORGstrlen()を作成し、動作確認を行うmainプログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/4まで [5] その他の制限:
無駄に再帰を使うと遅くなるよ
こうだな char *ORGstrcat(char *s, const char *cs) {return strcat(s,cs);} int ORGstrcmp(const char *cs1, const char *cs2) {return strcmp(cs1,cs2);} char *ORGstrcpy(char *s, const char *cs) {return strcpy(s,cs);} size_t ORGstrlen(const char* cs) {return strlen(cs);}
>>272 ありじゃね?
学生のころは、こういう問題で 本回答とは別に
出題の意図を汲まなかったり曲解したネタ回答を
いつも用意してたな。
>>267 すまん、たしかに最小じゃない。
原因は辺の双方向性の考慮ミスで弁解の余地のないバグですわ。
そもそもノードをファーストクラスで捉えてる部分が悪い気がする。
まだ時間あるよね、後日修正してみるよ。
自分で実装するなら同じ失敗をしないよう、おれの屍を超えていけ。
>>276 く・・・わかったよ、どうせ外出ても熱いだけだけだし、これからやるよぉ。
に、
>>267 のためじゃないんだからね! 勘違いしないでよね!
>>267 http://codepad.org/aGrUDf9B 一応間違いないかと。グラフにマーク付けるのにイテレータっぽいの使った。
condition関数で指定されたエッジだけ巡回する。
これでマーククリア、マーク付け(Wikipediaで言う緑エッジ)、
不要エッジの削除の3ステップでやってる。たいぶ効率悪いけど・・・。
あ、一行目の頂点数・辺数 読むようになったから消さないでね。
digraph g { 0 -> 1 [dir=none, len=15];
0 -> 2 [dir=none, len=6]; 0 -> 3 [dir=none, len=3, color=red, penwidth=4];
0 -> 4 [dir=none, len=4]; 1 -> 4 [dir=none, len=4, color=red, penwidth=4];
1 -> 5 [dir=none, len=7]; 1 -> 6 [dir=none, len=20];
2 -> 3 [dir=none, len=2, color=red, penwidth=4]; 2 -> 7 [dir=none, len=1, color=red, penwidth=4];
3 -> 4 [dir=none, len=1, color=red, penwidth=4]; 3 -> 7 [dir=none, len=2];
4 -> 5 [dir=none, len=8]; 4 -> 7 [dir=none, len=5]; 4 -> 8 [dir=none, len=3, color=red, penwidth=4];
4 -> 9 [dir=none, len=6]; 5 -> 6 [dir=none, len=1, color=red, penwidth=4];
5 -> 9 [dir=none, len=3, color=red, penwidth=4]; 6 -> 9 [dir=none, len=20];
7 -> 8 [dir=none, len=3]; 8 -> 9 [dir=none, len=2, color=red, penwidth=4];
0 [fixedsize=true, width=0.4, height=0.4]; 1 [fixedsize=true, width=0.4, height=0.4];
2 [fixedsize=true, width=0.4, height=0.4]; 3 [fixedsize=true, width=0.4, height=0.4];
4 [fixedsize=true, width=0.4, height=0.4]; 5 [fixedsize=true, width=0.4, height=0.4];
6 [fixedsize=true, width=0.4, height=0.4]; 7 [fixedsize=true, width=0.4, height=0.4];
8 [fixedsize=true, width=0.4, height=0.4]; 9 [fixedsize=true, width=0.4, height=0.4];}
279 :
デフォルトの名無しさん :2011/07/03(日) 22:41:57.93
[1] 授業単元:ソート [2] 問題文(含コード&リンク): 以下のプログラムを作成せよ. 入力 正整数n,ならびにn個の名前と電話番号の組,および文字列.ただし,いずれの入力文字列も長さ20以下と仮定して良い. 処理 構造体型配列で電話帳を作成し,名前をキーとして,文字列がselectionのときは選択ソート,文字列がbubbleのときはバブルソートをする. 出力 名前をキーとして辞書順にソートされた電話帳.同名の人は,どの順序に出力してもよい. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:明日
280 :
デフォルトの名無しさん :2011/07/03(日) 22:43:49.08
実行例 人数 > 2 0人目:名前 > bbb 電話番号 > 111 1人目:名前 > aaa 電話番号 > 222 文字列 > selection aaa, 222 bbb, 111 実行例 人数 > 5 0人目:名前 > Taro 電話番号 > 090-111-1111 1人目:名前 > Hanako 電話番号 > 090-222-2222 2人目:名前 > Ichiro 電話番号 > 090-333-3333 3人目:名前 > Jiro 電話番号 > 090-444-4444 4人目:名前 > Hanayo 電話番号 > 090-555-5555 文字列 > bubble Hanako, 090-222-2222 Hanayo, 090-555-5555 Ichiro, 090-333-3333 Jiro, 090-444-4444 Taro, 090-111-1111
281 :
デフォルトの名無しさん :2011/07/03(日) 23:15:11.95
[1] 情報処理演習T [2] 問題:2重のfor文を使って,以下のような偶数の九九の表を作成せよ.ただし,行数と列数は入力して指定できるようにする. 入力された行数と列数がそれぞれ0以下,20以上の場合は,九九は表示せずプログラムを終了する. また、ソースプログラムの説明,考察.for文についてのまとめなども加えよ。 実行例@ ================================ Input GYO: 3 Input RETSU: 5 2 4 6 8 10 4 8 12 16 20 6 12 18 24 30 ================================ [3] 環境 [3.1] MacOS [3.2] Xcode [3.3] C言語 [4] 7月4日午後3時まで [5] 教授曰く、「考えられる限り、最小限の言葉でプログラムを書け」だそうです。 問題文が長くなってしまいごめんなさい。 長文ですがよろしくお願いします。
>>281 #include <stdio.h>
int input(const char *message, int *x) {
return printf("%s", message), (scanf("%d", x) == 1) && (0 < *x && *x < 20);
}
int main(void) {
int gyo, retsu, i, j;
if (input("Input GYO: ", &gyo) && input("Input RETSU: ", &retsu))
for (i = 0; i < gyo; ++i, putchar('\n'))
for (j = 0; j < retsu; ++j)
printf("%d ", 2 * (i + 1) * (j + 1));
return 0;
}
>>278 べ、べつにありがとうだなんて思ってないんだからね!
というのは嘘で、本当に感謝です。
まだ期限まで日はあるので熟読して、自分の知識になるようにがんばります。
285 :
デフォルトの名無しさん :2011/07/04(月) 01:18:10.34
y^e = X mod Nを満たすyを効率よく求める方法を教えて下さい。
eは自然対数か?
>>285 このmodって法を表してるんだったっけ
たとえば y^13 = 1 mod 7 とかか?
(y+N)^r = y^r mod Nだろう。 たかだかN個しか調べるものは無いのでは?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): ユーザの入力した1文字に対して、「1」のとき「one」、「0」のとき「zero」 それ以外のとき、標準エラーに「0か1を入力して下さい」と出力し、再びユーザからキー入力を待つ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月5日 まだ型などの理解が甘く、「それ以外」のところでつまづいてしまいました。 よろしくお願いします。
else
293 :
デフォルトの名無しさん :2011/07/04(月) 19:09:13.67
【1】c言語 【2】二つの西暦で入力された年月日から、その間の日数を計算するプログラムを作成してください。 ここに処理が入る というとこのプログラムをお願いします プログラムのベース int uruu(int y); int monthday(int y, int m); //---------------------------------------------------- int main(){ int year_a, month_a, day_a; int year_b, month_b, day_b; int days; int i; days = 0; printf("日数計算プログラム\n"); printf("数え始める西暦年月日を入力してください\n"); scanf("%d,%d,%d",&year_a, &month_a, &day_a); printf("数え終わる西暦年月日を入力してください\n"); scanf("%d,%d,%d",&year_b, &month_b, &day_b); ここに処理が入いる printf("%d年%d月%d日から%d年%d月%d日までの日数は%d日です。\n", year_a, month_a, day_a, year_b, month_b, day_b, days); return 0; } //うるう年ならtrue(1)、そうでないならfalse(0)を返す関数 int uruu(int y){ int ret; ここに処理が入る return ret; } //年、月を受け取り、その月の日数を返す関数 int monthday(int y, int m){ int d; ここに処理が入る return d; }
[1] 授業単元:画像処理 [2] 問題文(含コード&リンク):キーボードからx座標とy座標の組を順に読み込んで、その座標を連結した線形リストを形成するプログラムを作りなさい。 改行のみ入力された場合には、入力を終了するようにする。 入力された線形リストの先頭アドレスを引数として、その内容を表示する関数も合わせて作りなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2008 [3.3] 言語: C++ [4] 期限:2011年7月11日 [5] その他の制限:なし
297 :
デフォルトの名無しさん :2011/07/05(火) 13:48:16.85
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://codepad.org/lqKLztNc [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011/7/8
よろしくおねがします
298 :
デフォルトの名無しさん :2011/07/05(火) 13:49:46.00
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://codepad.org/iM41ba88 [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011/7/8
よろしくおねがします
299 :
デフォルトの名無しさん :2011/07/05(火) 14:02:26.98
1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://ideone.com/Acmrn [3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 2011/7/6
alloc_rocker()がNULLを返したときの処理を加えよ。
荒らしているのはここで回答できない人だよ
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):
http://codepad.org/KXrWVfER ・探索アルゴリズムの計算回数に注目して比較を行いたい。
2000個のデータをファイルから読み込み、線形探索を行う場合と二分探索を行う場合の計算回数を比較する。
二分探索を行う場合はデータをソートする必要があるので、探索前にクイックソートを使用してソートを行うものとする。
なお、swap関数はクイックソート関数で使用するものとする。計算回数を算出する部分は各自プログラムに必要な機能を追加する事。
探索に使用するデータはディレクトリにあるデータを各自ホームディレクトリにコピーして使用すること。
各データファイルには2000個の整数データがランダムに近い順番に記録されているので、その中から500(キー)を探索する
プログラムを作成せよ。比較した計算量をもとに、探索されたデータの位置による計算回数の違いについて各自考察を行う事。
なお、ここでいう計算回数とは、各探索法(線形探索及び二分探索)における探索対象のデータとキーの比較回数を示すものとする。
[3] 環境
[3.1] OS: Windows XP。学校ではUNIXを使っています。
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011年7月7日まで
[5] その他の制限: 整列処理まで
ソースコードに書かれた(1)(2)(3)(4)のところが分かりません。
あと、宜しければ計算回数の違いについての考察もあると助かります。
宜しくお願いします。
304 :
デフォルトの名無しさん :2011/07/05(火) 19:18:21.45
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): January, February, March, April, May, June, July, August, September,October, November, December を12個の文字列をポインタの配列を用いて宣言し、ASCIIコードで昇順に並び替えなさい。 char *month[12] = { “January”, “February”, …, “December” } ; ASCIIコードで昇順 A<B<C< … <Z , i文字目まで同じ場合は、i+1文字目の大小で順序をつける [3.1] OS:windows [3.2] コンパイラ名とバージョン:cygwin [3.3] 言語: C [4] 期限: 2011/7/6 [5] その他の制限: 現在ポインタを習っているところです。 出来るだけ簡単に書いてもらえると助かります。
305 :
デフォルトの名無しさん :2011/07/05(火) 19:20:41.64
>>304 に加えてもう1問お願いします。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
次に示す個人情報を構造体として作成し、
それぞれの科目の平均点とそれぞれの学生の平均点を
構造体のポインタを用いて求めなさい。
学籍番号 英語 数学 物理
1 81 24 63
2 28 15 7
3 89 92 88
4 32 88 66
5 92 46 81
-1 0 0 0
学籍番号英語数学物理
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:cygwin
[3.3] 言語: C
[4] 期限: 2011/7/6
[5] その他の制限:
現在ポインタを習っているところです。
出来るだけ簡単に書いてもらえると助かります。
[1] 授業単元:関数 [2] 問題文(含コード&リンク): 以下の関数をそれぞれ作成し、組み合わせることで、異なる3つの数値を昇順に表示するプログラムを作成しなさい。 ○void inputNUM(int data[3]); 3つの整数値を入力させる関数 ○void printNUM(int data[3]); 3つの数値を1行で配列格納順に表示させる関数 ○void sort(data[3]); 昇順にdata[]を並び替える関数 ○int main() メイン関数 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/8まで [5] その他の制限:
夏休み前で課題が増えてるようだな。 290あたりから消化しきれてない。 日本のITの未来を暗くするためもっとがんばれ。
C++の入ったパソコンが先ほど壊れてしまったので御助力お願いします。
急なことで時間が全くありません。本当に申し訳ないです・・・
[1] 授業単元: 確率統計学
[2] 問題文(含コード&リンク):
10個のサイコロを同時に振り、1の目が出る確率を求める。ただし、回数は100、1000、10000、100000と変化させ、確率と誤差を求めよ。
これは、完成済みで結果の出力のみお願います。また、エラーが出た場合は御助力をお願いします。
http://codepad.org/jZHx7pfy [3] 環境
[3.1] OS: windows XP
[3.2] コンパイラ名とバージョン: visual studio 2008
[3.3] C++
[4] 期限: 2011年7月6日
[5] その他の制限:
2問目
[1] 授業単元: 確率統計学
[2] 問題文(含コード&リンク):
A,B,Cの3人がじゃんけんゲームを行ったとき、Aが負けない確率Xをシミュレーションで推定せよ。また、シミュレーションの推定誤差を求めよ。ただし、シミュレーション回数Nを100,1000,10000,100000と変化させ、確率と、真の値との差を絶対値(誤差)で算出せよ
[3] 環境
[3.1] OS: windows XP
[3.2] コンパイラ名とバージョン: visual studio 2008
[3.3] C++
[4] 期限: 2011年7月6日
[5] その
あいこは再戦するのかしないのか
完成してないじゃん・・・エラーでてるよ 結果だけ知りたいならcodepadの結果表示でいいじゃん
>>310 なんでエラーがあるのに完成済みって思ったか聞きたい
315 :
デフォルトの名無しさん :2011/07/05(火) 23:29:25.23
>>311 あいこは再戦は必要ないです。あくまでAが負けない確率の一つです
>>312-313 取り敢えず作ったのですが、まだ実行が出来ず、パソコン室終了前にソースだけ載せるので手一杯でした。
誤解を招き申し訳ないです。
また、言い訳をしてしまうのですが、今は携帯からなので、結果を確かめれるのは明日の9:00まで無理なため、急なお願いをしてしまいました……
>>310 Visual Studio2008での実行結果 (ソースは
>>314 )
X/N 10^2回 10^3回 10^4回 10^5回 真値
0個の確率 13.0000% 15.7000% 15.7700% 16.1100% 16.1506%
-3.1506% -0.4506% -0.3806% -0.0406%
1個の確率 44.0000% 31.6000% 32.9700% 32.4580% 32.3011%
11.6989% -0.7011% 0.6689% 0.1569%
2個の確率 25.0000% 30.6000% 28.9800% 28.8410% 29.0710%
-4.0710% 1.5290% -0.0910% -0.2300%
3個の確率 11.0000% 15.9000% 15.4900% 15.5410% 15.5045%
-4.5045% 0.3955% -0.0145% 0.0365%
4個の確率 6.0000% 4.9000% 5.3300% 5.5150% 5.4266%
0.5734% -0.5266% -0.0966% 0.0884%
5個の確率 1.0000% 1.1000% 1.1800% 1.3010% 1.3024%
-0.3024% -0.2024% -0.1224% -0.0014%
6個の確率 0.0000% 0.1000% 0.2200% 0.2120% 0.2371%
-0.2371% -0.1371% -0.0171% -0.0251%
7個の確率 0.0000% 0.1000% 0.0600% 0.0200% 0.0248%
-0.0248% 0.0752% 0.0352% -0.0048%
8個の確率 0.0000% 0.0000% 0.0000% 0.0020% 0.0019%
-0.0019% -0.0019% -0.0019% 0.0001%
9個の確率 0.0000% 0.0000% 0.0000% 0.0000% 0.0001%
-0.0001% -0.0001% -0.0001% -0.0001%
10個の確率 0.0000% 0.0000% 0.0000% 0.0000% 0.0000%
-0.0000% -0.0000% -0.0000% -0.0000%
318 :
デフォルトの名無しさん :2011/07/05(火) 23:51:54.40
>>316 結果の表示ありがとうこざいます。
こうして結果を見せて頂くと、かなり間違ったプログラムを作ってしまったみたいですね……
320 :
デフォルトの名無しさん :2011/07/06(水) 00:28:53.16
>>319 非常に有難いのですが、携帯のためソースや結果が見れないです……申し訳ありません。
>>310 [2]
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int saikoro_saidai[4] = {100,1000,10000,100000,}; /*シミュレーション回数を10^2〜10^4で計算*/
int sai_nage, C[4],i;
double sinn_no_atai = 0.444444444; /* 真の値を定義 */
for(sai_nage = 0; sai_nage < 4; sai_nage++){C[sai_nage] = 0;}
for(sai_nage = 0; sai_nage < 4; sai_nage++){
for(i = 0; i < saikoro_saidai[sai_nage]; i++){
int a = rand() % 3;
int b = rand() % 3;
int c = rand() % 3;
if(a == b && a == c){
// 全員違う手ならあいこ
C[sai_nage]++;
}else if((a - b + 3) % 3 == 1){
// bに負けた
}else if((a - c + 3) % 3 == 1){
// cに負けた
}else{
// 勝った
C[sai_nage]++;
}
}
}
続く
printf("aが負けない確率\n"); printf("10^2回 10^3回 10^4回 10^5回 真値 \n\n"); printf("%8.4f%% %8.4f%% %8.4f%% %8.4f%% %8.4f%% \n" , (double)C[0]/saikoro_saidai[0]*100.0 , (double)C[1]/saikoro_saidai[1]*100.0 , (double)C[2]/saikoro_saidai[2]*100.0 , (double)C[3]/saikoro_saidai[3]*100.0 , sinn_no_atai*100 ); printf("%8.4f%% %8.4f%% %8.4f%% %8.4f%% \n" , (double)C[0]/saikoro_saidai[0]*100.0 - sinn_no_atai*100 , (double)C[1]/saikoro_saidai[1]*100.0 - sinn_no_atai*100 , (double)C[2]/saikoro_saidai[2]*100.0 - sinn_no_atai*100 , (double)C[3]/saikoro_saidai[3]*100.0 - sinn_no_atai*100 ); return 0; }
>>310 結果 下段が誤差
aが負けない確率
10^2回 10^3回 10^4回 10^5回 真値
43.0000% 43.5000% 44.2500% 44.4060% 44.4444%
-1.4444% -0.9444% -0.1944% -0.0384%
324 :
デフォルトの名無しさん :2011/07/06(水) 01:10:12.40
>>321-
>>323 有難う御座います。
誤差については絶対値をつけないといけないので、明日の朝一番に取り掛かりたいと思います
急なお願いで時間もなく、夜も更けた辛い時間での作業、本当にありがとうございました
327 :
デフォルトの名無しさん :2011/07/06(水) 01:27:21.89
>>325-326 重ね重ねありがとうございます
課題についてはVC++2008で提出したいと思います
[1]授業単元:アルゴリズム概論 [2]課題:次の関数は引数で与えられた配列を整列するものである。 コードを補って完成させなさい。 void sort(int[] a,int lengh){ int tmp,i; ここにコードを追加して完成させる。 } [3] C言語 [4] 7/31まで [5] ・降順(大きいもの順)に整列すること ・ローカル変数やグローバル変数を追加しないこと ・lengthが負の値の時はなにもしないこと ・関数を呼び出さないこと よろしくお願いします。(前期単位がかかってます)
じゃんけんのルールもわからんアホがいるスレはここか
334 :
328 :2011/07/06(水) 02:37:49.58
>>331 おお、迅速かつ正確な解答ですね。ありがとうございました。
335 :
デフォルトの名無しさん :2011/07/06(水) 02:39:22.36
>>334 この程度はできないとお前後期やばいぞw
>>336 後期もこのスレが存在している、と予想するくらいの頭はあるんじゃない?
クスッときたw
339 :
デフォルトの名無しさん :2011/07/06(水) 12:10:58.17
>>333 すみません、今確認していたのですが
学籍番号-1が計算に入っていないのですが…
これは入れる必要はないという事なんですかね?
自分も学籍番号-1の扱いがよく分からなくて…
340 :
デフォルトの名無しさん :2011/07/06(水) 12:50:50.83
[1] C言語演習
[2] put_nchar関数(←自分で作成する)を使用して、以下のプログラムを作成せよ。
参考:
http://codepad.org/DdpoVJOe @ 何段ですか:5
*
***
*****
***
*
A 何段ですか:5
* *
* *
* *
* *
*
[3.1] Windows7
[3.3] C言語
[4] 今日の19時まで
[5] 関数呼び出しまで
わかる方どうかよろしくお願いします。
341 :
デフォルトの名無しさん :2011/07/06(水) 12:53:43.48
>>340 @はひし形、AはV字形で表示するプログラムです。
(滅茶苦茶になってるから補足。)
342 :
333 :2011/07/06(水) 13:46:00.73
>>339 普通マイナス値の学籍番号はないので、データの終了判定用だと考えました。
この行も計算で使いなさいと言うことなら、6回ループさせて、
全データを処理すれば良いと思います。
343 :
デフォルトの名無しさん :2011/07/06(水) 14:05:22.79
346 :
デフォルトの名無しさん :2011/07/06(水) 14:53:10.63
>>345 わかりやすい説明も付けていただいてありがとうございました。
非常に助かりました。
[1] 授業単元:整列処理
[2] 問題文(含コード&リンク):
http://codepad.org/afHWYPLF 問題が3問あります。長いので問題文もリンク先に書かせていただきました。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011年7月9日まで
[5] その他の制限: 整列処理
よろしくお願いします。
348 :
デフォルトの名無しさん :2011/07/06(水) 19:46:11.45
[1] C言語演習 [2] argvで指定された可変引数個数の情報を別の配列(ary)に格納せよ。 但し、第一引数だけは別の配列(ary)に格納はしないこと。 例)argv:./test a b c d e f 例)ary :./test b c d e f [3.1] redhat [3.3] C言語 [4] 本日中 [5] 制限:なし わかる方どうかよろしくお願いします。
[1] 授業単元: [2] 問題文(含コード&リンク): #include <stdio.h> void inputNUM(int data[3]) { int i = 3; while (i--) scanf("%d", data++); } void printNUM(int data[3]) { int i = 3; while (i--) printf("%d ", *data++); } void sort(int data[3]) { int i, j, t; for (i = 1; i < 3; i++) for (j = 0; j < i; j++) if (data[i] < data[j]) { t = data[i]; data[i] = data[j]; data[j] = t; } }
int main() { int a[3]; inputNUM(a); sort(a); printNUM(a); return 0; } のプログラムは、異なる整数値3つに制限してた。これを異なる20個の整数で同様の処理ができるように拡張しなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/8まで [5] その他の制限:
3のところを20にしろよw
>>348 こんなんでいいのか?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
char **ary;
printf("argv: ");
for (i = 0; i < argc; i++)
printf("%s ", argv[i]);
printf("\n");
ary = (char **)malloc((argc - 1) * sizeof(char*));
if (ary == NULL) {
fprintf(stderr, "Can't allocate memory\n");
return 1;
}
ary[0] = argv[0];
for (i = 2; i < argc; i++)
ary[i - 1] = argv[i];
printf("ary : ");
for (i = 0; i < argc - 1; i++)
printf("%s ", ary[i]);
printf("\n");
free(ary);
return 0;
}
353 :
デフォルトの名無しさん :2011/07/06(水) 21:08:15.92
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 円周率を求めよ。方法はどのような方法でも構わない。 ただしprintf("%f",M_PI)などはなし。 またアルゴリズムのオリジナリティは評価に加点します。 (〜の方法では◯桁までしかでないが、このアルゴリズムを追加すると 桁数が増える など) できるだけ多い桁数を出したいです。 また桁数を逐次的に増やす方法が知りたいです。 よろしくお願いします [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語のみ
354 :
デフォルトの名無しさん :2011/07/06(水) 21:43:38.57
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 幅が15程度の1次元の領域を考える. その領域の中央に1匹の虫を放つ. 虫は単位時間あたり距離1だけ左に行ったり右に行ったり,あるいは止まっていたりする. 10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく. 以上を1試行とし,計100試行程繰り返した段階での,虫の最終位置をカウントした配列内の中身を表示する. [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語のみ [4] 期限:明日まで [5] ・虫は毎回ランダムに位置を-1減らすか,1増やすか,そのままの位置かいずれかである. この位置変化量は (int)((double)rand()/((double)RAND_MAX + 1.0) * 3.0)-1 または rand() % 3 - 1 のいずれかで与えられる. 虫の座標が0未満になったら反対側の端に移す. また,もし虫が最大座標を超えたら0の位置に移す. .
>>356 [5]続き
・虫の座標が0未満になったら反対側の端に移す.
また,もし虫が最大座標を超えたら0の位置に移す.
・main関数で虫の最終位置のカウント用配列を定義する.
1回の試行(虫を10単位時間分移動させる)及び結果記録はmain関数とは別の関数を呼び出しで実現する.
虫の最終位置カウント配列の中身の表示は,main関数とは別の関数で行う.
・虫の最終位置カウント配列の中身の表示はできれば横棒グラフで表示する.難しければ
配列の各要素の値を数字で表示させても良い.
この表示は1試行ごとに行っても良いし,全試行終了後に一回だけ表示させるだけでもよい.
・1次元領域の幅や,総試行回数(100程度)は極力マクロ定数で定義する.
>>356 [実行例]
---1--- ←次の試行
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]* ←虫の到達位置
[9]
[10]* ←虫の到達位置
[11]
[12]
[13]
[14]
〜途中省略〜
お願いします
360 :
デフォルトの名無しさん :2011/07/07(木) 00:04:44.70
[1] 授業単元: 文字と文字列
[2] 問題文(含コード&リンク):
http://codepad.org/CZXzKH3U 問題分は上でプログラムは私が書いたものです。
[3] 環境
[3.1] OS:Linux
[3.2] gcc バージョンはわかりません・・
[3.3] 言語:C言語
[4] 期限: [2011年7月7日16:10まで]
[5] なるべくプログラムを書き換えずに間違っているところを訂正する感じでお願いします。
>>356 蟲でプログラムが完成しないんですね、わかります
>>360 うまく動かないのは39-40行が変だからじゃないかな
weakを間違えた回数が一番多かった文字にするなら、最初にweak=0;として
if(miss[i]>miss[weak]){ weak = i; }
にすればいいんじゃない
363 :
デフォルトの名無しさん :2011/07/07(木) 00:28:02.02
すみません257さんと同じ問題なのですがどこを見ればわかりますか? よくわかってませんので教えてください。 お願いします。
>>356 [補足]
---0--- ←初回の試行
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]* ←虫の到達位置
[9]
[10]
[11]
[12]
[13]
[14]
>>356 ---1--- ←次の試行
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]* ←虫の到達する位置
[9]
[10]* ←虫の到達する位置
[11]
[12]
[13]
[14]
>>356 続き
---99---
[0]
[1]***
[2]***
[3]****
[4]*********
[5]************
[6]*************
[7]****************
[8]**************
[9]**************
[10]********
[11]****
[12]
[13]
[14]
←っていう感じのプログラムです
368 :
デフォルトの名無しさん :2011/07/07(木) 00:55:38.58
>>362 返信ありがとうございます。
書き換えてみましたが、結果は変わらずでした・・・
weak key以外は正しく動作しているので、後は
33行目がちゃんとMissの配列に格納されていて、カウントされているかどうかなんですが
自分でもよくわかっていません・・・
>>368 miss[100]をmiss[128]にしてfor(i=0;i<128;i++)に書き換えてみな
372 :
デフォルトの名無しさん :2011/07/07(木) 01:46:30.30
>>362 >>369 ありがとうございます!
正しい動作を行うプログラムができました!
明日の締め切りに間に合ってよかったです。
原因は配列の数アスキーコードに足りなかったということでしょうか?
なにはともあれ、ありがとうございました。
>>360 http://codepad.org/wKheIc4l < int miss[100]; /* ミスしたスペルを格納*/
---
> int miss[128]; /* ミスしたスペルを格納*/
9c9
< int weak=-999;
---
> int weak=0;
24c24
< for(j=0;word[i][j] != inp[j+1];j++){ /* 1文字ずつ比較し、初めのミスまでループ */
---
> for(j=0;word[i][j];j++){ /* 1文字ずつ比較し、初めのミスまでループ */
27a28
> break;
32,34c33,35
< for(i=0;i<100;i++){
< if(miss[i]>weak){ /* 間違えた回数が一番多かったキーを求める*/
< weak = miss[i];
---
> for(i=0;i<128;i++){
> if(miss[i]>miss[weak]){ /* 間違えた回数が一番多かったキーを求める*/
> weak = i;
374 :
デフォルトの名無しさん :2011/07/07(木) 02:07:21.04
[2]下記のプログラムにおいて,numcountは,値が0 〜M -1 の範囲の大きさN のint型の配列を引数として渡されると(ただし,M, N は正の整数),同じ値が複数ある時はそれを1 個とみなしてその配列中の数の 個数を返す関数である.例えば,配列の値を7, 4, 8, 2, 4, 6, 1, 6, 4, 5 とすると, (ダブリを省くと) この中には,7, 4, 8,2, 6, 1, 5 の7 個があるので,関数numcountは7 を返す. これは,例えば,0 〜M -1 の範囲でどんな数が出てきたかをチェックしておき (ヒント: 大きさM のint型の配列を用い,最初はすべて0に初期化しておき,数iが現れたら,そのi番目を1にすればよい), 最後に1度でも出てきたものを数えれば求めることができる. 関数numcountを,下記のプログラムの/* INSERT HERE */の部分に挿入できるように書け.(提出はプログラム全体) #include <stdio.h> #define M 10 /* 適当な正整数(数の範囲が0 〜M -1) */ #define N 10 /* 適当な正整数(入力する数の個数)*/ /* INSERT HERE */ intmain(void) { inti, a[N]; /* a[0]〜a[N-1] の値を入力する*/ for(i= 0; i< N; i++) { printf("a[%1d] = ? ", i); scanf("%d", &a[i]); } printf("numcount= %3d\n", numcount(a)); return 0; } [1] 配列 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/9 [5] その他の制限:プログラムだけでなく、課題の説明、実行結果も必要です 全くわかってませんのでどうかよろしくお願いします。
>>374 int numcount( int* in )
{
int a[M] = {0}, i, ret = 0;
for( i = 0; i < N; i++ ){ a[ *in ]++; in++; }
for( i = 0; i < M; i++ ) if( a[i] ) ret++;
return ret;
}
376 :
デフォルトの名無しさん :2011/07/07(木) 02:48:44.13
>>375 さん
これはどこにいれたらいいのでしょうか?
/* INSERT HERE */って自分でコピペしておいてw
/* INSERT ME PLEASE */のほうがいいかな
379 :
デフォルトの名無しさん :2011/07/07(木) 06:06:30.06 BE:4223602297-2BP(0)
どなたか入力された英大文字、英小文字、数字、改行の数を数えるプログラム書いてください。 自分ではなぜかうまくいかないので、参考にしたいのでお願い
何が上手くいかないのか明らかにした方が良いと思う、つまり書いたコードを晒せ
isupper()、islower()、isdigit()、'\n'で判別してそれぞれのカウンタに追加すればいいと思うよ
>>379 なんか俺が2年生に授業で出した追加課題とほぼ同じなのは気のせいか
>>382 オリジナリティない課題出しといてそんなこと言われても
2年でこれって事は1年の時はプログラムは未修?
情報系じゃないなら、一年でちょっと触って終わりだろうよ
むしろ大学なら情報系でも理論系メインで実際のプログラムは実験時のためにどうにか扱える程度で終わるんじゃ
387 :
デフォルトの名無しさん :2011/07/07(木) 09:02:09.48
>>377 さん
ありがとうございます。
コンパイラ?したらどうなりますか?
数字は適当でいいので・・・
死ね
>下記のプログラムの/* INSERT HERE */の部分に挿入できるように書け この日本語が通じない人間がいるとは出題者も思わないだろうなw
390 :
デフォルトの名無しさん :2011/07/07(木) 09:25:37.32
F村め。
>>299 期限過ぎてるみたいだけど、
main の中、
Rockers = alloc_rockers(N);
の行の下に、以下の4行を追加
if (Rockers == NULL) {
printf("Can't allocate memory\n");
return 1;
}
[1] 授業単元: データ型 [2] 問題文:動物名 { 犬, 猫, 牛, 豚 } を選択すれば、それに対応した泣き声 { ワンワン, ニャーニャー, モーモー, ブーブー } を表示するようなプログラムを作成せよ。ただし、 enum を使うこと。 ( 実行例 ) 動物の番号を選んで下さい 0:dog 1:cat 2:cow 3:pig 9:end 0 ワンワン [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C [4] 期限: 7月12日09:00まで [5] その他の制限: ありません
>>395 線形リストって知ってる?
ていいうかこれ全く関係ない内容じゃねーかwwwww
>>394 #include <stdio.h>
int main(void)
{
enum Animals { dog = 0, cat, cow, pig, end = 9 };
const char *crys[] = { "ワンワン", "ニャーニャー", "モーモー", "ブーブー" };
enum Animals animal;
do
{
printf("動物の番号を選んで下さい\n");
printf("0:dog 1:cat 2:cow 3:pig 9:end : ");
scanf("%d", &animal);
} while (animal < Animals::dog ||
(animal > Animals::pig && animal != Animals::end));
if (animal == Animals::end) return 0;
printf(crys[animal]);
return 0;
}
ごめん、直した #include <stdio.h> int main(void) { enum Animals { dog = 0, cat, cow, pig, end = 9 }; const char *crys[] = { "ワンワン", "ニャーニャー", "モーモー", "ブーブー" }; enum Animals animal; do { printf("動物の番号を選んで下さい\n"); printf("0:dog 1:cat 2:cow 3:pig 9:end : "); scanf("%d", &animal); } while (animal < dog || (animal > pig && animal != end)); if (animal == end) return 0; printf(crys[animal]); return 0; }
こっちの方が良かったかな s/Animals:://
403 :
デフォルトの名無しさん :2011/07/07(木) 16:29:01.54
お願いします [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): (1)ゲームの開始 最初に p 個の玉を壷に入れる。 n 人の参加者は 0 〜 n - 1 の番号が振られており、0 番から昇順(ただし、n - 1番の次は 0 番とする)に以下のステップ(2)を繰り返す。 (2)ステップ 壷を渡された参加者は、壷に玉が入っている場合は、そのうち1個を取り(既に持っている玉があれば、それらと共に)手元に置く。 壷が空っぽの場合、手元に玉があればその全てを壷に戻す。 どちらの場合も、その後壷を次の参加者に渡す。 勝者が決まるまで、このステップを繰り返す。 (3)ゲームの終了 ある参加者が壷に残った最後の玉を取り出したとき、他のどの参加者の手元にも玉がなければ、ゲームは終わりとなり、全ての玉を持っている者が勝者となる。 参加者の人数 n と玉の数 p を入力し、勝者の番号を出力するプログラムを作成せよ。 ただし、3 ≦ n ≦ 50, 2 ≦ p ≦ 50 とし、ゲームのステップ(2)は1000000ステップ以内に終了することが保証されているものとする。 [3] 環境 [3.1] OS:mac [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 7/13
>>405 #include <stdio.h>
#define TRY_MAX 1000000
int main(void)
{
long pot, ball[50]={0}, index, n, p, i;
n=50; p=50; // 初期設定
index=0;
pot=p;
for(i=0;i<TRY_MAX;i++)
{
if(pot>0)
{
ball[index]++;
pot--;
if(ball[index]==p) break;
}
else
{
pot+=ball[index];
ball[index]=0;
}
index=(index+1)%n;
}
if(i<TRY_MAX) printf("%ld\n", index);
return 0;
}
407 :
201 :2011/07/07(木) 18:53:43.39
>>212 遅くなりました、ありがとうございます
正直自分の頭では良くわからない所もありますが、もう少し考えて見ます
それと試してみたところ、tanだけはanswerが出ませんでした
どうやら12〜14行目にtanだけが入ってないからのようですが、単純に{"tan", tan}を入れても変わりませんでした
その点に関してもう少し詳しくお願いします
>>321 勝つ確率が1/3、あいこの確率が1/3で負けない確率は両者を足して2/3
だいたい全員違う手はあいこってコメントしときながら、なんで全員同じかどうか判定してんだよw
最近の人々はジャンケンなんかしないのですよ。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://codepad.org/ZtuWkxys [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:07/08
お手数おかけしますが、よろしくお願いします。
[1] 授業単元: [2] 問題文(含コード&リンク): #include <stdio.h> void inputNUM(int data[20]) { int i = 20; while (i--) scanf("%d", data++); } void printNUM(int data[20]) { int i = 20; while (i--) printf("%d ", *data++); } void sort(int data[20]) { int i, j, t; for (i = 1; i < 20; i++) for (j = 0; j < i; j++) if (data[i] < data[j]) { t = data[i]; data[i] = data[j]; data[j] = t; } }
int main() { int a[20]; inputNUM(a); sort(a); printNUM(a); return 0; } のプログラムでは、入力される数値は同じ数字がないことを前提にしていた。 この制限を解除し、同じ数値が複数あった場合には、昇順に並べた結果表示の際に、同じ数を複数表示せず1回のみ表示させるようにプログラムを拡張しなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/8まで [5] その他の制限:
410です。 //たとえば1を読み込めばビットで000000001を、4を読み込めば000001000を、 //つまりビットの1の位置を数字に対応させています。 //そして「.」を読み込めば特別に111111111を構造体aa_tのcellに入力します。 誤解を招いてしまいそうですが、「.」のみでなく000000001や000001000もcellに入力していきます。 よろしくおねがいします。テキストファイルの中身の数字は任意のものですが、枠(|や+など)の数は決まっています。
>>411 void
printNUM(int data[20])
{
int i = 20;
printf("%d ",*data++);
while (--i) {
if (*data != *(data - 1))
printf("%d ", *data);
data++;
}
}
>>407 struct {
char name[NAME_LEN];
double (*f)(double);
} functions[] = {{"sin", sin}, {"cos", cos}, {"tan", tan}, {"arcsin", asin}, {"arctan", atan}, {"ln", log},
{"log", log10}, {"exp", exp}, {"sqr", sqrt}, {"rad", rad}, {"deq", deq},
{"sinh", sinh}, {"cosh", cosh}, {"tanh", tanh}};
tan忘れてた
math.hにある関数だから単純につっこめば動くと思うんだけど
どこに突っ込んだんだか
418 :
デフォルトの名無しさん :2011/07/07(木) 22:14:10.67
お願いします [1] 授業単元:C演習 [2] 問題文(含コード&リンク) getopt_longを使ったargv引数解析を行いなさい。 引数: --apple 1 (省略形はなし,ハイフンは2つ,続引数は必ずあり) -peach (省略形はなし,ハイフンは1つ,続引数はなし) -lemon (省略形はありで-l,ハイフンは1つ,続引数はなし) -melon (省略形はなし,ハイフンは1つ,続引数はあってもなくてもよい) ※続引数がある場合はそれを表示しなさい [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 本日中
[4] 期限: 本日中 ずいぶいんリスキーな人生送ってるんだな。
アメリカだろ 今朝だ
422 :
デフォルトの名無しさん :2011/07/07(木) 23:22:32.37
<<418,420 明日いっぱいに変更します
425 :
デフォルトの名無しさん :2011/07/08(金) 01:21:58.05
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 与えた文字列を指定した回数繰り返す文字列に変換するプログラムを作成しなさい。 ただし、main関数を以下のように宣言し、実行時に引数をとれるようにする。 第一引数は繰り返し回数とし、第二引数は繰り返される文字列とする。 すなわち、./prog 3 "ABC"と実行した場合は、ABCABCABCとなる文字列が作られる。 作られた文字列は、表示すること。必要に応じて、数字を数値に変換する関数atoi()を使用してもよい。 その際は、#include<stdlib.h>を加えること。 #include <stdio.h> #include <stdlib.h> int main( int argc,char*argv[]){ /** argc:引数の個数、argv[0]:プログラム名、argv[1]〜argv[n]:引数**/ x=atoi(argv[1]);/*atoiの使用例*/ return(0); } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:来週の水曜日まで [5] その他の制限:特になし お手数ですが、よろしくおねがいします!
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://codepad.org/EjO8vQHI [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:07/08
度々失礼いたします。よろしくお願いします。
>>427 大丈夫な気がするが、どういう時にNGになるん?
>>429 //もう1度実行すると0を返すはず。
for(i=1;i<=9;i++){
if(i==4) continue;
r=aa_del(&s,2,7,i);
if(r!=1){ /* ← だから、 0 だろ? */
printf("error: aa_del(2,7,%d) returns %d\n",i,r);
return 1;
}
}
>>430 あぁもうすみませんアホすぎました。ありがとうございました。
433 :
デフォルトの名無しさん :2011/07/08(金) 13:12:03.60
>>432 助かりました!!
ありがとうございます。
434 :
デフォルトの名無しさん :2011/07/08(金) 19:07:04.97
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://codepad.org/FYsQ9RGx [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:明日まで
問1〜4まであるのでお手数ですがよろしくお願いします。
435 :
デフォルトの名無しさん :2011/07/08(金) 20:11:54.37
分散で桁落ちしないようにするにはどうしたらいいですか?
>>435 全くと言うのであればMathematicaなどのように計算途中の状態を値で保持するのではなく有理式などの形で保持する
ある程度でいいなら値がほぼ等しいと思われるような減算が演算過程に入り込まないようにしたり
浮動小数演算ではなく多倍長整数演算で計算したりetc
[1] 授業単元:関数 [2] 問題文(含コード&リンク): 1つめの食塩水aグラムは、濃度c%である。 2つめの食塩水bグラムは、濃度d%である。 この2つの食塩水を混ぜると、何%の食塩水が何グラムできるか? a,b,c,dの値を実数で入力する関数、答えを求める関数を作成し、プログラムを完成させなさい。 実行例) 食塩1:食塩水100g 濃度2% 食塩2:食塩水200g 濃度5% 結果:4%の濃度になる [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/14まで [5] その他の制限:
>>434 1)
#include <stdio.h>
int main(void)
{
int ch;
while ((ch = getchar()) != EOF) {
putchar(ch);
}
return 0;
}
>>434 2)
/*
13-2 ファイル入出力
ファイルを読み込んで,ファイル中の英小文字を英大文字に,
英大文字を英小文字に変換してファイルに書き出すプログラムを作成せよ.
*/
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int ch;
while ((ch = getchar()) != EOF) {
if (isupper(ch)) {
ch = tolower(ch);
} else if (islower(ch)) {
ch = toupper(ch);
} else {
/* nop */
}
putchar(ch);
}
return 0;
}
>>438 #include <stdio.h>
int input4(double *a, double *b, double *c, double *d)
{
printf("input a b c d\n");
return scanf("%lf%lf%lf%lf", a, b, c, d) == 4;
}
int main(void)
{
double a, b, c, d;
if (input4(&a, &b, &c, &d)) {
printf("食塩水1: %gg %g%%\n", a, c);
printf("食塩水2: %gg %g%%\n", b, d);
printf("結果: %gg %g%%\n", a + b, (a * c + b * d) / (a + b));
}
return 0;
}
444 :
デフォルトの名無しさん :2011/07/08(金) 22:52:44.97
内容: [1] 授業単元:C言語 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS:window [3.2] コンパイラ名とバージョン:stdio10[3.3] 言語:C [4] 期限:7月9日まで #include<stdio.h> int main(void){ int i; int a = 0, b = 0, c = 0, d = 0, e = 0; int yoso1,yoso2,yoso3,yoso4,yoso5; int yoko1 ,yoko2=0; int tate1=0,tate2=0,tate3=0,tate4=0,tate5=0; パート1 パート2に続く
446 :
デフォルトの名無しさん :2011/07/08(金) 22:59:26.15
for( i =0 ; i< 10 ; i++){ yoko1 =0; yoso1 = 50 - (5 * i); yoso2 = 49 - (5 * i); yoso3 = 48 - (5 * i); yoso4 = 47 - (5 * i); yoso5= 46 - ( 5 * i); printf("%6d%6d%6d%6d%6d", yoso1, yoso2, yoso3 ,yoso4 , yoso5); printf(" 累計"); yoko1 = yoso1 + yoso2+ yoso3 +yoso4 + yoso5; yoko2 = yoko2 + yoko1; printf("%6d\n",yoko2); tate1 = tate1 + yoso1; tate2 = tate2 + yoso2; tate3 = tate3 + yoso3; tate4 = tate4 + yoso4; tate5 = tate5 + yoso5;}
超難しいのがきたな これは誰にも解けない
448 :
デフォルトの名無しさん :2011/07/08(金) 23:20:48.94
444と446のつづき ようやくパート3 printf(" 累計 累計 累計 累計 累計\n"); printf(" %6d%6d%6d%6d%6d",tate1,tate1+tate2,tate1+tate2+tate3,tate1+tate2+tate3+tate4,tate1+tate2+tate3+tate4+tate5); return 0;} T 上記プログラムを配列をつかった、1重のループでつくりなおす。 U Uで変更した上記プログラムの縦の足し算、横の足し算を関数を使って プログラムを回収する。
449 :
デフォルトの名無しさん :2011/07/08(金) 23:24:38.26
444 446 448 まわりは10行ぐらいでかけてます。 とほほです。
>>444 >1重のループでつくりなおす
ってあるけど、既にループになってるよね?2重になるということでいいの?
>関数を使ってプログラムを回収する。
これ、出力さえ同じなら、作り直して良いって事?
QZは機制議論板で荒らしの報告を何度もしてるようだが、ルールを守れなくて 何回も何回も蹴られとるな( ゚,_・・゚)ブブブッ ネットでこれだから現実生活じゃ適応不可能だろうね
Codepadにレス番貼り付けるとか、ルールを守るとかいう考えがないんだろうな
宣伝すんなクズ
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://codepad.org/dx3nSGGc [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:07/09
お手数お掛けしますがよろしくお願いします。
scanfで、%dにでかい数値をつっこんだときの動作を教えてください うちの環境ではでかい数字をつっこむとintの最大値をとりますが これは環境依存ということでよろしいでしょうか というか、scanfのちゃんとした仕様書ってどこにありますか?
>424 ありがとうございました!おかげでレポートを提出することができます。
>>417 デバックするとエラーが起こるんですが…
>>417 スタックのことをFILOって言っちゃう男の人って・・・
先入れ後出しって言うべきだよな
463 :
417 :2011/07/10(日) 07:20:27.31
>>460 はて?こちらでは(たぶん)思ったとおりに動くけど?
どこでどんなエラーが出る?
>>461 >>462 スタックだとデータ構造じゃなくて、ヒープに対するスタックとごちゃになるかとおもって
敢えて、FILOにした。先入れ後出しにすべきだった?
C++って言ってるからにはC++でコンパイルしてやれよ・・・・ エラーでるに決まってるだろ
具体例挙げるまえに送信しちゃった mallocのとこね そこ見てCで確認したんだなと思っただけだから他にもあるかもしれん
466 :
471 :2011/07/10(日) 09:57:05.68
>>464 あーC++だったのね。申し訳ない。Cだとおもっていた。
とりあえずmallocの戻り値さえキャストすれば、
動く。g++で確認。
C++でやるなら全面的に書き換えるべきだと思うけど、
私の手に余るのでパスします。
VC++2008ってstl使えたっけ?
そうじゃなくてもクラスでコーディングすべきだよね。
>>417 First in Tail, Last in Head.
FTLH
逆はありえない
その略し方は初めて聞いたし ぐぐっても何も出てこねぇ どこで使われてるんですか?w
一行○○だけど? 丸にはひらがな一文字
逆?
英語読めないとか言い出すバカを回避するため。
>>463 ERROR内容は以下の通りです
error C2440: '=' : 'void *' から 'T_Position *' に変換できません。
指摘した奴と回答者だけで解決してるが 質問者には理解できねーよなそりゃ 89行目の p = malloc(sizeof(T_Position)); を p = (T_Position *)malloc(sizeof(T_Position)); に変えろ
476 :
デフォルトの名無しさん :2011/07/10(日) 18:23:16.75
[1]アルゴリズム [2]連結リスト(一方向)の最後に要素を追加するプログラムを作成しなさい。 ただし、連結リストの最後の要素を指すポインタを保持している場合と保持し ていない場合について、プログラムを作成すること。 [3.1]Linux [3.2]gcc [3.3]C [4]7月21日まで
>>467 LIFO = FILO
後入れ先出し = 先入れ後出し
だけどFTLHは初めて聞いた。
まぁFILOはFIFOと見間違えそうだからLIFOがベターとは思ったけれど。
要素追加って関数化しないでmain内でやっちゃうんだ?
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
ユーザーIDとパスワードを入力すると残金が表示されるようなプログラムを作る
ID パスワード 残金
10001 1122 0
10002 9521 50000
20001 5588 100
20002 0428 300
20003 3618 20000
40004 0777 8000
[3] 環境
[3.1] OS:windows7
[3.2] Visua Studio 2010
[3.3] 言語: C
[4] 期限: 7/10 午前8時まで
[5] その他の制限:
ID入力後、6つのどれにも当てはまらない時には「IDが違う」と表示させ、
IDが合っていてもパスが違うと「パスワードが違う」と表示させる
また、配列を使ってID・パスを管理。
とりあえず↓のように書いてみたのですが全然わからないです…
http://www1.axfc.net/uploader/File/so/65844.txt お願いします…
>期限: 7/10 午前8時まで
未来人が何とかしてくれるだろう
>>480 IDとパスをintで扱おうとするのはありえない気がするんだよ
例にも先頭0あるし(あとCで先頭0は8進数になる問題が)
文字列処理ってやってるよね?文字列にしていいんだよね
あと構造体使いたいんだが習った?
>>480 >全然わからないです
まずコンパイルしてみろ
コンパイラは賢いから文法エラーを教えてくれるぞ
printf,Printf 定義されていない関数を使うな
if(user=user[i] ) 代入と比較の違いはわかってる?
else{user[i]==pass[i] 何に対するelseなのか
printf("ユーザーIDを入力してください。”\n);他 全角と半角って知ってる? \nってリテラルだよね?
>>487 >tailって何ですか?
最後の要素。
ポインタで保持できないので、実体を保持している。
・・・ほとんど「一休さん」の世界だね。
>>487 typedef struct List_ {int isempty; struct ListNode_ tail;} List;
492 :
480 :2011/07/10(日) 22:26:29.88
期限は7/11の8時まででしたすいません あとコンパイルする環境が当方にないので分からないのと 文字列処理と構造体は習ってないので使えないと思います。 あとどういう風に処理を行えばいいのかがまず分からないです。 先生が言うには1次元配列とfor文で作れるのでそうしてほしいらしいです。 ヒントはメインの部分を for(i=0,i<6,i++); if( で始めれば良いということなのですが… ちなみに今まで習ったのは主に if for while 2重ループ 複数データの入力処理 配列です #include <string.h>はたぶん使えないです。 多くの方に協力していただいているのにすいません
>>491 最初の要素を持つと、最後の一個手前の要素が
「最後の要素を指すポインタを保持」してしまう。
>>493 出題者はそれは想定していないのでは?
単に
>>478 の
T_Node *pTail = NULL;
みたいなものを使わないように、前からリンクを手繰っていけばいいのでは?
あいまいな仕様から的確な実装を選択するのも、マの能力のひとつだと。
>>495 >出題者はそれは想定していないのでは?
それは只の思い込み。
心の中では「おそらくそうだろう」と思いつつも、
文面にそう謳われている以上、字面通りに解釈し、
あとで「だってこう書いてあるんだも〜ん」って
責任をなすりつけるのも、マの能力のひとつだと。
>>476 リングリストだから最後じゃないもん的な言い訳で
#include <stdio.h>
#include <stdlib.h>
typedef struct tag_node_t{ int data; struct tag_node_t *next; }node_t;
typedef struct tag_list_t{ node_t *first; }list_t;
void list_add(list_t *list, int data){
node_t *node, *last;
node=malloc(sizeof(node_t));
node->data=data;
if(list->first==NULL){
list->first=node;
node->next=node;
}else{
for(last=list->first;last->next!=list->first;last=last->next);
node->next=last->next;
last->next=node;
}
}
int main(void){
list_t list={0};
node_t *node;
list_add(&list, 1);
list_add(&list, 2);
list_add(&list, 3);
list_add(&list, 4);
for(node=list.first;;node=node->next){
printf("%d\n", node->data);
if(node->next==list.first) break;
}
return 0;
}
>>498 >それは屁理屈ってものだよ。
仮に出題者が「それは屁理屈だ」などと言いだしたら、
こっちは「それはパワハラだ」と言い返すべきだね。
字義通りに実装され、ちゃんと動作するのに
「俺の意図と違う」という理由で NG を出せるのは、
ちゃんとお金を出して仕事を依頼する「お客様」だけだよ。
ま、その場合でも修正に当たっては
追加のお金を出して貰う訳だけどね。
>>499 たぶんそれが馬鹿な仕様策定者の字面もたてた最適解だと思います。
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):挿入ソート、シェルソートの比較回数、交換回数を表示するプログラム
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:明日まで
交換回数(flag)は問題ないと思いますが、比較回数(compare)は何処に入れればいいでしょうか?
色々試してみましたが、上手く行きません。
挿入ソート
http://ideone.com/CWqFE シェルソート
http://ideone.com/XeJbb
504 :
496 :2011/07/10(日) 23:32:17.90
補足ですが 出来たプログラムを使って比較回数・交換回数(データを移動した回数)を計測するのが目的になります
508 :
496 :2011/07/11(月) 00:07:00.80
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):マージソートの書く並び替えによる交換回数、比較回数を表示するプログラム
[3] 環境
[3.1]
[3.2]
[3.3] 言語: C
[4] 期限:明日
マージソートのソースをどのように入れれば良いかわかりません
http://ideone.com/YuGs5 シェルソートでのソースプログラム
509 :
496 :2011/07/11(月) 00:08:18.23
すみませんマージではなくクイックソートです
>>503 こんなとこでしょう。
http://codepad.org/JIezKje9 http://codepad.org/u1rFlSlo 1) #define SIZE と #define LOOP の意味の違いがよくわからない。作る途中で忘れてしまった?
上では N としておきました。
2) シェルソートの間隔を決めるg[] がおかしい。もとのコードでは g[k] のk が範囲外まで動いてしまい、たまたま g[i] == 1 になったら止まる、という実装。
上では g[] をつかわずに書いてみました。
3) malloc() したものは free() した方がいいんじゃないかな、ああ、これは私が信者だからかもしれませんが。信教にしたがっててきとーに。
>>507 >>499 の間違いね。
いや、
>>499 =
>>500 なら私のほうが瞠目しなくちゃいけませんね。参りました。
>>510 ありがとうございます。
SIZEとLOOPの違いですが、元々は(改良)バブルソートや挿入ソート、
シェルソートの計算量についての考察を行うため
SIZE→とりあえず最大容量
LOOP→ここを変化させて考察
としていました。
>>511 了解。じゃ、(その意義には突っ込みたいのですがそれはともかく)もとのままでいいですね。
シェルソートは惜しいところまでいっていますから、今一度吟味するといいでしょう。
515 :
496 :2011/07/11(月) 01:18:15.93
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):クイックソートの書く並び替えによる交換回数、比較回数を表示するプログラム
[3] 環境
[3.1]
[3.2]
[3.3] 言語: C
[4] 期限:明日
http://ideone.com/UE6VS 比較回数と交換回数を出力するためのs[]をどこに入れればいいかわかりません
挿入する場所をお願いします
516 :
496 :2011/07/11(月) 06:17:53.57
すみませんクイックソートではなくやはりマージソートでした
やっぱりクイックソートでした
(#^ω^)ピキピキ
いや本当にマージソートだったんです 申し訳ありませんがよろしくお願いします
とりあえず両方作ればええんか
[1] 授業単元:リスト
[2] 問題文(含コード&リンク):
http://codepad.org/BB8PLG9F 問題文もリンク先に書かせていただきました。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011年7月12日か13日まで
[5] その他の制限: リストまで
よろしくお願いします。
522 :
デフォルトの名無しさん :2011/07/11(月) 14:15:17.97
[1] 情報処理演習T [2] 問題:何個かのデータをもらって,その平均,総和,最大値,最小値,標準偏差を計算するプログラムを作成する.プログラムは以下の条件をみたすこと. ・あらかじめ100個の整数型の要素を持つ配列を定義しておく. ・scanfを用いてデータの個数を入力できること.また,scanfを用いてデータの値を配列に入力できること. ・if文を用いて0以下,101以上のデータの個数が入力されないようにすること. ・for文を用いること. ・解は実数で求めること. 実行例@ ================================ Input integer: 5 Input numbers: 40 50 60 70 80 Average: 60 Sum: 300 Max: 80 Min: 40 Standard Deviation: 14.1 ================================ [3] 環境 [3.1] Mac [3.2] Xcode [3.3] C言語 [4] 明日の夜10時まで [5] 教授いわく「必要最低限のプログラムでくみあげて」だそうです リンクを貼ろうとしたのですがなぜかできなかったので長文になってしまいました。お手数ですがよろしくお願いします。
俺いわく「教授に申し訳が立たないから、途中まででいいから自力でくみあげて」だそうです
>524 有難うございます!助かりました。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 1円硬貨, 5円硬貨, 10円硬貨, 50円硬貨, 100円硬貨, 500円硬貨の内から種類不問で何枚か取り出し、 その重さの合計を小数点以下1桁まで入力させる。 その値から、取り出した硬貨の合計金額を推定し表示するプログラムを作れ。 ただし、推定される金額が複数存在する場合はその全てを表示する。 また、1円硬貨, 5円硬貨, 10円硬貨, 50円硬貨, 100円硬貨, 500円硬貨の1枚あたりの重さは それぞれ1g, 3.7g, 4.5g, 4g, 4.8g, 7gであるとする。 (入力例) 8.0 (出力例) 8円 54円 100円 501円 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限: 考えうる限り効率的なプログラムをお願いいたします
a,b,cは自然数 ax + by = c を満たす整数x,yを効率的に求める方法があったと思う。
>>531 効率良くねえよ。これは計算時間重視だ。
表示部分消して、1000グラムの入力で計算終わらない。
>>532 1000グラムで計算時間どのくらいで終わるのが効率がいいの?
>>526 は 1000g の時
66740 種の金額になるので合ってるかな?
>>533 自分の想像で言うと、最大32ビット*100万通り(1MB)のリターンまで対応でき、これが3分以内で計算できたら良いかな。
少量グラム(たとえば1.0〜50.0g)は総当たりでリストを求めて置く。 たとえば100gの入力があったら、0.1+99.9をリストか再帰で求めて、両方空でなければマージしてリターン。 途中計算で判明した物はキャッシュしておく。
コインが 0.2g と 99.8g の2種類だったらどうなるかな
539 :
デフォルトの名無しさん :2011/07/11(月) 21:40:58.52
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 再帰関数呼出しを用いて、10進数の数decをbase進数の数xに変換する関数 conv_base(dec,base,x)を作成しなさい。 base=2,8,16以外も実行例に示すこと。 ただし、base関数の数xはchar型の配列となる。 decをbaseで割ったときの商が正ならば、さらに割ることができるので、 関数conv_base(dec/base,base,x)を呼び出す。 この後、decをbaseで割ったときの余りが、その桁の値になる。 余りが9以下ならば数字に変換し、10以上ならば'a'以降の対応する アルファベットに変換し、文字列xに代入する。 base進数の数xはmainの中で表示すること。 文字列に代入するのが難しい場合は、関数の中で出力してもよい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:7/13 [5] その他の制限:特になし お手数ですが、よろしくおねがいします。
あれ、2,8,10,16進数以外って何があったっけ
有名どころでは24進数や60進数があるだろ
36進数とか
>>540 n進法はいくつでもあり得る。
7(10進法)を3,4,5,6,7進法で表すと
3進法 → 21
4進法 → 13
5進法 → 12
6進法 → 11
7進法 → 10
544 :
デフォルトの名無しさん :2011/07/11(月) 22:31:48.51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ttp://ichigo-up.com/cgi/up/qqq/nm38571.jpg [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc cigwin
[3.3] 言語:C
[4] 期限: 2011/07/13
[5] その他の制限: ポインタと構造体について習っています
出来るだけ簡単に書いてもらえると助かります
546 :
デフォルトの名無しさん :2011/07/11(月) 23:21:27.92
[1] データ構造とアルゴリズム [2] (1)双方向リストについて、領域の確保、確保した領域をリストの先頭に追加、要素の削除を行うプログラムを作成しなさい。 (2)配列により、キューを実現するプログラムを作成しなさい。 [3.1] Linux [3.2] gcc [3.3] C [4] 期限: 7月19日
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
http://pastebin.com/index/sg6akdN0 標準入力から「id, 名前, 年月日, 住所」のようなコンマ区切形式 (CSV 形式) の名簿データを受け付けて,
項目を切り出してメモリ中に格納する.また,% で始まる入力行をコマンド入力として解釈し,格納されたデータを表示や整列する
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 7月13日?
[5] その他の制限: 問題は長いのでリンク先のプログラムの中に書いてあります。
ごちゃごちゃしていてすいません。自分でやってみたのですがどうにもならず、ご指南していただきたく書き込みました。
するべきことを要約するとソートとデリートのコマンドを設定することです。
ソートに関してですがqsortはつかわずに関数へのポインタを使っていただきたいです。
(例)
int (* comp[5])(struct profile *a, struct profile *b);
comp[0] = compare_id;
[1] = compare_name;
といった感じです。それとプログラム219行目以降のswitch構文の中の(line + 3)などの引数は具体的に何を意味していると言えばよいのでしょうか。
長々とすいません。よろしくお願いします。
550 :
549 :2011/07/11(月) 23:42:42.01
552 :
551 :2011/07/11(月) 23:46:11.98
>>547 すみません、一つお聞きしたいのですが
1問目のプログラムを実行しても何も起きないのですが
これは無限ループで勝手に終了したということでしょうか?
>555 >これは無限ループで勝手に終了したということでしょうか? 無限ループなら終了せんだろ?
558 :
デフォルトの名無しさん :2011/07/12(火) 01:13:57.43
>>557 そうですよね…
何も出力されないということは間違っているということなのでしょうか?
コメント読めんか?
>>547 // 表示するときは、コメントを外す
print(head);
562 :
デフォルトの名無しさん :2011/07/12(火) 04:11:11.77
すみません、全くわからないのでご教唆お願いします ファイル名「test.txt」というテキストファイルがあったとします。内容は Hallow, nice to meet you. というものです。これを読み込んで Hallow nice to meet you というふうに単語ごとに区切り、改行して表示するプログラムを作ります。 ソースコードはこんな感じです
563 :
デフォルトの名無しさん :2011/07/12(火) 04:14:04.69
#include <stdio.h> int read_word(FILE *fp,char *str){ int c; char d; int i = 0; if (NULL != fp){ while ((c = fgetc(fp)) != EOF){ d = (char)c;//文字にキャスト if (d != ',' || d != '.' || d != ' '){ str[i] = d; ++i; } } if(i > 0){ str[i+1] = '\0'; return i; } else if(i == 0) //,や.等の区切りの文字が2回続いた時は再帰して再度配列に文字の代入を行う read_word(fp, str); } return 0; }
564 :
デフォルトの名無しさん :2011/07/12(火) 04:14:36.85
>>563 続き
int main(void){
FILE* fp;
char str[256];
int a;
fp = fopen("tst.txt","r");
a = read_word(fp,str);
while(a != 0)
printf("%s\n",str);
fclose(fp);
return 0;
}
しかしコンパイルは通るのですが、実行するとセグメントエラーとなってしまいます
どこが間違っているのかよくわかりません
言語はc、osはLinuxです
よろしくお願いします
565 :
デフォルトの名無しさん :2011/07/12(火) 04:25:31.10
>>564 ファイル名が間違っていました。修正します
fp = fopen("test.txt","r");
です。実行結果はやはり同じです
>>564 提示されたコードになるべく沿って書き直しました。
http://codepad.org/z4IrgxaB 1)
if (d != ',' || d != '.' || d != ' '){
「||」 ですか?
2)
a = read_word(fp,str);
while(a != 0)
printf("%s\n",str);
プログラムを通じて、read_word() は一回しか呼ばれませんが、それでいいのですか?
3)
str[i] = d;
++i;
str[i+1] = '\0';
++i した上にさらに i + 1 するのはどうしてですか?
4)
//,や.等の区切りの文字が2回続いた時は再帰して再度配列に文字の代入を行う
read_word(fp, str);
再帰呼び出しからかえってくると、つるつる落ちて return 0 を返して即プログラム終了、ですけれども、それを意図しているのですか?
再帰呼び出しの必要があるかどうかも含めて再考したほうがいいかもしれません。
segmentation fault 以前に、論理が混乱してしまっている感を受けます。
書き直したものが参考になればいいのですが。
567 :
デフォルトの名無しさん :2011/07/12(火) 05:07:39.69
>>566 丁寧に教えていただきありがとうございます
とても参考になりました。どうもありがとうございました
568 :
567 :2011/07/12(火) 06:19:58.30
1-4のどれも初歩的なミスですね 再起呼び出しもそもそも必要ありませんでした もう一度基礎からやりなおします どうもありがとうございました
おいポまえら最適化、腕の見せ所だぞ。
重いほうから引いてけば速くなる
最後の1円のときの処理を特別にする
成立しない重さの無駄計算を減らすしかない
>>569 10倍して整数型で扱ったほうが早いし
double の比較に ==0 を使うとかどうかしてる
>>526 #include <stdio.h>
int num[6] = {500, 100, 50, 10, 5, 1}, weight[6] = {70, 48, 40, 45, 37, 10}, cnt[6];
void f(int idx, int w)
{
int i, sum, wt;
if(w == 0 || idx == 5) {
if(w % 10) return;
for(i = sum = 0; i < idx; i++) sum += num[i] * cnt[i];
printf("%d円\n", sum + w / 10);
return;
}
for(i = 0; (wt = i * weight[idx]) <= w; i++) {
cnt[idx] = i;
f(idx + 1, w - wt);
}}
int main(void)
{
double weight;
scanf("%lf", &weight);
f(0, weight * 10);
return 0;
}
こういうのだと再帰関数の引数の数とかも効いて来るかもしれんね
>>568 別に基礎からやり直さなくても、いま直面しているお題にもう一度取り組んでいけばいいとおもいます。まあ、慣れ、は大きいです。
えw
>>577 アルゴリズムは変えずに小手先技で2倍速程度になったよ。
#include <stdio.h>
int ss=0, num[6] = {500, 100, 50, 10, 5, 1}, weight[6] = {70, 48, 40, 45, 37, 10}, cnt[6];
void printsum(int idx){
int i,sum=0; ss++;
for(i = 0; i < idx; i++) sum += num[i] * cnt[i]; //printf("%d円\n", sum + w / 10);
}
void f(int idx, int w){
int i, wt;
if(w == 0) { printsum(idx); return; }
if(idx<5) {
int wg=weight[idx];
for(i = 0; w>=0; i++) {
cnt[idx] = i;
f(idx + 1, w );
w-=wg; }
return; }
if(w & 1) return;
if(w!=5*((w*52429)
>>18 ))return; //if(w % 5) return;
printsum(idx); }
int main(void) { double weight=400; f(0, weight * 10); printf("%d\n", ss); return 0; }
1円の枚数は?
583 :
581 :2011/07/12(火) 13:06:29.23
回数実行したら対してかわってなかった。
584 :
581 :2011/07/12(火) 13:18:16.40
両方動かして、どのくらい速くなるか比較した。20%〜60%ほど時間削減できるようだ。
#include <stdio.h>
#include <time.h>
int num[6] = {500, 100, 50, 10, 5, 1}, weight[6] = {70, 48, 40, 45, 37, 10}, cnt[6];
void f(int idx, int w) {
int i, sum, wt;
if(w == 0 || idx == 5) { if(w % 10) return;
for(i = sum = 0; i < idx; i++) sum += num[i] * cnt[i];
/* printf("%d円\n", sum + w / 10); */ return; }
for(i = 0; (wt = i * weight[idx]) <= w; i++) {
cnt[idx] = i; f(idx + 1, w - wt); }}
void printsum(int idx){
int i,sum=0; for(i = 0; i < idx; i++) sum += num[i] * cnt[i];
/* printf("%d円\n", sum + w / 10); */ }
void f_new(int idx, int w){
if(w == 0) { printsum(idx); return; }
if(idx<5) {
int i, wg=weight[idx];
for(i = 0; w>=0; i++) {
cnt[idx] = i;
f_new(idx + 1, w );
w-=wg; } return; }
if(w & 1) return; if(w!=5*((w*52429)
>>18 ))return; //if(w % 10) return;
printsum(idx); }
int main(void) {
double weight=500; int cl,cr;
cl=clock(); f_new(0, (int)(weight * 10));cl=clock()-cl; printf("f_new=%fsec.\n",(double)cl/CLOCKS_PER_SEC);
cr=clock(); f(0, (int)(weight * 10));cr=clock()-cr; printf("f = %fsec.\n",(double)cr/CLOCKS_PER_SEC);
printf("%f%%高速化\n",100 * (double)(cr-cl)/cr); return 0;}
581の改良点は、余り計算がボトルネックになっているので、なるべくそこへ行かせないようした。 どうしても回避不可能な余り計算は、かけ算とビットシフトで置き換えた。
586 :
デフォルトの名無しさん :2011/07/12(火) 13:50:36.55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://codepad.org/3dkRTmjJ [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011/7/8
よろしくおねがします
587 :
デフォルトの名無しさん :2011/07/12(火) 14:01:18.87
↑期限15日まででした。
>>526 500g 31526種 0.2sec
1000g 66740種 3sec
1500g 101954種 14sec
2000g 137166種 48sec
2500g 172380種 121sec
3000g 207594種 269sec
計算時間からして O(n^4) くらいになってる
途中の連番になる部分を計算せずに済めば O(1) に近づけられるかも
>>423 ですが、直談判したところ、金曜まで待ってくれるとのことです(流石に点数は低くなるみたいですが)
お時間ある方は是非お願いします・・・。
あきらめたほうがいい
組み合わせ個数を求めるだけなら、1,2,4,.....2^nグラムまでの演算結果配列を用意する作戦はどうだろう? 1)小数点以下を消去する、 ?????.x が入力されたら 1.x , 2.x .... を答えが出るまで計算する 2)残った数字を2進に直してオンになってる配列と1)の答えを掛け合わせる 上限を設ける必要が有るのと邪道であると言う事に目をつぶれば重さが増えても演算時間に変化は無いのでは?
2)からして1)は10倍して扱うわけじゃないようだが それなら1)のような切り離し方はできないんじゃ
いや違うか そうでなくてもそんな切り分け方できるわけが無かったな
>>591 それに当てはまらないパターン存在しないか?
596 :
デフォルトの名無しさん :2011/07/12(火) 20:40:14.95
C、C++ではなく、HTMLとjavascriptでも宜しいでしょうか
[1] 授業単元:コンピュータ言語
[2] 問題文(含コード&リンク):
ttp://uproda.2ch-library.com/402107hP9/lib402107.txt [3] 環境
[3.1] OS: Windows 7
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C言語でお願いします
[4] 期限:2011年 7月 14日 (木) 正午まで
[5] その他の制限:
リンク先の問題文の最後のほうに記載されています。
制限は結構厳しいものかもしれませんが、
どうかよろしくお願いします。
ちょっと邪道なコード書いてみたら明らかに大きい数字が出た 重複をカウントしてしまうようだ、考えれば当然だw
[1] 授業単元:関数 [2] 問題文(含コード&リンク): 情報量の単位は、8bit=1B,1024B=1KB,1024KB=1MB,…(1TBまで)となっている。 [実数]MBや、実数[KB]のような入力をしたとき、それが何bitを意味しているかを表示するプログラムを作成したい。 なお、設定において、数値変換処理には、関数を利用することとし、入力は【整数】の後に「空白」を1つ挟み、【TB/MB/KB/B】のいずれかの単位を表す文字列が書かれているものとする。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/11まで
601 :
デフォルトの名無しさん :2011/07/12(火) 21:57:37.58
[1] 授業単元: ファイル入出力 [2] 問題文(含コード&リンク): ファイルを読み込んで,ファイル中の英小文字を英大文字に,英大文字を英小文字に変換してファイルに書き出すプログラムを作成せよ. $ cat sample.txt 1. Software Engineering Based on the tenets of software engineering and computing science, the Department of Software Engineering provides students with a comprehensive grounding in software development and information processing. As society becomes increasingly dependent on various ... 略 ... $ 実行例 入力ファイル名 > sample.txt 出力ファイル名 > sample-out.txt $ cat sample-out.txt 1. sOFTWARE eNGINEERING bASED ON THE TENETS OF SOFTWARE ENGINEERING AND COMPUTING SCIENCE, THE dEPARTMENT OF sOFTWARE eNGINEERING PROVIDES STUDENTS WITH A COMPREHENSIVE GROUNDING IN SOFTWARE DEVELOPMENT AND INFORMATION PROCESSING. aS SOCIETY BECOMES INCREASINGLY DEPENDENT ON VARIOUS ... 略 ... [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日まで
602 :
デフォルトの名無しさん :2011/07/12(火) 22:01:03.33
522です。 530さんどうもありがとうございました!
通貨のグラムのやつは、いま最速はどれなんだよ?
604 :
デフォルトの名無しさん :2011/07/12(火) 22:43:55.75
>>545 ,548,553,556
ありがとうございます。
すごく助かりました!
>>600 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
double func(double m, char * s)
{
enum {TB, MB, KB, B};
const char * tani[] = {"TB", "MB", "KB", "B"};
const double unko[] = {1024. * 1024 * 1024 * 8, 1024. * 1024 * 8, 1024. * 8, 8.};
int i;
for (i = 0; i < sizeof tani / sizeof tani[-1]; i++) {
if (!strcmp(tani[i], s)) {
return m * unko[i];
}
}
printf("なんか不正です\n");
exit(1);
}
int main()
{
char s[1000];
double p;
printf("入力してくだし\n");
scanf("%lf %s", &p, s);
printf("%.0f bit\n", func(p, s));
return 0;
}
問題文が整数なのか実数なのかよく分からないんですが
オーバーフローをごまかすためにこうしろというニュアンスだと解釈しました
>>601 #include <stdio.h>
#include <ctype.h>
int main()
{
char fnr[1000], fnw[1000];
FILE *fpr, *fpw;
int c;
printf("入力ファイル名 > ");
scanf("%s", fnr);
printf("出力ファイル名 > ");
scanf("%s", fnw);
if (!(fpr = fopen(fnr, "r")))
return 1;
if (!(fpw = fopen(fnw, "w")))
return 1;
while (EOF !=(c = fgetc(fpr))) {
if (isupper(c))
fputc(tolower(c), fpw);
else if (islower(c))
fputc(toupper(c), fpw);
else
fputc(c, fpw);
}
fclose(fpr);
fclose(fpw);
return 0;
}
[1]プログラミング言語T
[2]
http:// codepad.org/2gG8qIOk
[3.1]window 7
[3.2]VC2008
[3.3]C++
[4]7/14まで
[5]よろしくお願い致します。
608 :
607 :2011/07/12(火) 23:48:47.09
MFCとか無理ゲーすぎる
610 :
607 :2011/07/12(火) 23:55:46.58
コード部だけでも結構ですので教えて頂けたら幸いです。
>>607 MFCは必須ですか?
VC++expressではMFCは使用できません。
CLRなら見た目は変わらず、回答できる人も多いと思いますが。
>>609 >無理ゲー
ですよね。なるべくMFCに触れずにすむところにいたいです。
ボタンクリックのイベントハンドラだけ作ってやれば良いんじゃないの?
5列目以降はどうなんのよ 正確に数式で表してよ Aij += Ai(j+2)みたいな感じで とここまで書いたらそのままプログラムに出来そうだから自分でできんじゃね
>>607 自分でfuncを組み込めばいいよ
#include <stdio.h>
#include <stdlib.h>
int func()
{
double a, b, c, d;
FILE *fpr, *fpw;
if (!(fpr = fopen("01.txt", "r")))
return 0;
if (!(fpw = fopen("02.txt", "w")))
return 0;
while (4 == fscanf(fpr, "%lf%lf%lf%lf", &a, &b, &c, &d)) {
fprintf(fpw, "%f %f %f %f\n", a, b, c, d);
}
fclose(fpw);
fclose(fpr);
return 1;
}
int main()
{
func();
return 0;
}
>>613 例見た限りでは4列までしかないんじゃね?
fprintf(fpw, "%g %g %g %g\n", a, b, c, d); のがいいかも
616 :
デフォルトの名無しさん :2011/07/13(水) 01:12:08.30
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): ファイルの中に含まれる文字のエントロピーを計算したい。 次のように作りなさい。 (a)文字をgetchar関数で1文字ずつ読み込み、その文字ciの出現頻度f(ci)をカウントする。 (b)総文字数Sと出現頻度f(ci)から出現確立P(ci)を計算する関数を作成しなさい。 P(ci)=1/S*f(ci)…(1) S=Σf(ci)…(2) i (c)出現確立P(ci)からエントロピーHを計算する関数を作成しなさい。 ただし、0log0=0とみなす。 H=-ΣP(ci)log2(←底)P(ci)…(3) fopenを使った場合は加点する。 ファイル入出力を使わない場合は、リダイレクトを用いて標準入力から読み込む実行例を示すこと。 また、すべての文字の出現頻度が同じであるファイルを作成し、 その時のエントロピーを示すこと。 下記のプログラム参照。 続く
617 :
デフォルトの名無しさん :2011/07/13(水) 01:12:25.55
続き 文字列内の数字文字をカウントするプログラム #include<stdio.h> void str_dcount(const char str[],int cnt[]) { unsigned i=0; while (str[i]){ if (str[i] >= '0' && str[i] <='9') cnt[str[i]-'0']++; i++ } } int main(void) { int i; int dcnt[10]={0}; char str[100]; printf("文字列を入力してください:"); scanf("%s",str); str_dcount(str,dcnt); puts("数字文字の出現回数"); for(i=0;i<10;i++) printf("'%d':%d",i,dcnt[i]); return(0); }
618 :
デフォルトの名無しさん :2011/07/13(水) 01:13:24.24
↑続き [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:7/13 [5] その他の制限:特になし お手数ですが、よろしくおねがいします。
619 :
597 :2011/07/13(水) 01:20:47.76
597です。 課題の条件についてなんですが、 5つの関数内の引数、戻り値は条件どおりでなくても 構わないのでどなたか回答して頂けないでしょうか。
620 :
デフォルトの名無しさん :2011/07/13(水) 01:34:23.13
[1] :プログラミング [2]:下のプログラムの近似解の初期値をキーボードから入力し、 初期値に応じて、収束条件を満足するまでに要する繰り返し計算回数が どのように変化するか調べなさい。 ♯include 〈stdio.h〉 ♯include 〈stdlib.h〉 ♯include 〈math.h〉 ♯define pi 3.14159 double func1(double x) { double value; value=x×x×x+sin(pi×x) return value; } double func2(double x) { double value; value=3×x×x+pi×cos(pi×x); return value; }
621 :
>>620の続きです :2011/07/13(水) 01:38:51.76
int main(void) { int i=0; double x,error=0.00001; printf("x="); scanf("%lf",&x); printf("i=%d x=%lf f(x)=%lf ¥n",i,x,func1(x)); while (fabs(func1(x))>error){ i++; x=x-func1(x)/func2(x); printf("i=%d x=%lf f(x)=%lf ¥n",i,x,func1(x)); } return(0); }
622 :
>>621の続きです :2011/07/13(水) 01:45:46.85
[3.1] OS: Windows7? [3.2]わかりません。すいません [3.3] c言語 [4] 期限: 2011年7月13日8:30
624 :
620 :2011/07/13(水) 02:09:25.53
携帯から打ち込んだのでエラー出ました。すいません。 プログラムをコンパイル?してキーボードから入力した数字(1や2や3)と 値が0になるまでの計算回数がどんな関係にあるかを調べてほしいです。
627 :
デフォルトの名無しさん :2011/07/13(水) 10:54:07.49
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから入力した文字列を逆順に出力するプログラムを作成したい。 次の2通りの方法でそれぞれプログラム中の空欄を埋め完成させよ。 (1) 配列を使う (ポインタは使ってはならない) (2) ポインタを使う (配列を使ってはならない) #include<stdio.h> int main( void ) { char str[256], *p ; int i ; scanf("%s", str) ; p = str ; [この部分を記述せよ] return 0 ; [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc cigwin [3.3] 言語: C [4] 期限: 本日中 [5] その他の制限:出来るだけ簡単に書いてもらえると助かります
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
@次の図のようなリスト構造を作っているとする場合
(1)〜(3)の空欄を埋めよ。ただし、空欄は1行とは限らない。
ttp://up3.viploader.net/pc/src/vlpc008000.jpg #include<stdio.h>
#include<stdlib.h>
struct Cell {
int data ;
struct Cell *next ;
};
int main( void ) {
struct Cell *p, *head ;
head = NULL ;
/* ポインタ p の指す先に記憶領域の確保する行を省略 */
p ‐> data = 10 ;
(1)
/* ポインタ p の指す先に記憶領域の確保する行を省略 */
p ‐> data = 20 ;
(2)
/* ポインタ p の指す先に記憶領域の確保する行を省略 */
p ‐> data = 30 ;
(3)
return 0;
}
A上図の状態からdata に10 の入っているCell 構造体のnext が
data に30 が入っているCell 構造体を指すようにしたい。
どのように記述すればよいか。1行で書け。
BAに続いて、data に20 が入っている構造体をリストから削除したい。
どのように記述すればよいか。1行で書け。
>>628 続き
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc cigwin
[3.3] 言語: C
[4] 期限: 本日中
[5] その他の制限:出来るだけ簡単に書いてもらえると助かります
>>627 #include<stdio.h>
int main( void ) {
char str[256], *p ;
int i ;
scanf("%s", str) ;
p = str ;
/* 配列 */
for (i = 0; str[i]; i++);
while(i--)
putchar(str[i]);
putchar('\n');
/* ポインタ */
while (*++p);
while (&str[0] <= --p)
putchar(*p);
putchar('\n');
return 0 ;
}
631 :
デフォルトの名無しさん :2011/07/13(水) 11:44:00.39
授業:ネットワークプログラミング
問題文:以下のプログラムを改編し、21までの数取りゲームを作成せよ。なお数は一度に3つまで取れることとし、2つクライアントから交互に入力を受け付けれるようにする。
プログラムURL:
http://ideone.com/pPtar 環境
OS: Linux
コンパイル:端末から gcc -oでコンパイルしています
言語:C
期限: 2011年07月16日15:00まで
その他の制限: ネットワークプログラミングの応用という課題ですのでサーバーとクライアントを利用したものでお願いいたします。
よろしくお願いします
>>626 さん、コメントまでご丁寧にどうもありがとうございます!
本当に助かりました。
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク):「ピボットが0である場合を考慮しない、はき出し方による連立一次方程式を解くプログラムを作成し、検算結果を表示すること。 ただし行列のサイズをマクロで指定すること。行列(3行3列以上)および列ベクトルは、あらかじめプログラムに記載すること」 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc使うけどバージョン不明 [3.3] 言語: C [4] 期限: ([2011年7月20日中 [5] その他の制限: お願いします
[1] 授業単元:プログラミング言語基礎 [2] 問題文(含コード&リンク):ある物体を自由落下させたときの位置yを、0秒後から30秒後まで5秒 きざみで表示せよ。なお、t秒後の位置はy=1/2×9.8×t2乗(←指数が出てこなかったのでこう書きました) [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C++ [4] 期限:2011年7月15日 [5] その他の制限:for文を使用。1/2のところは掛け算でおねがいします。
>>635 #include <iostream>
int main()
{
for (int t = 0; t <= 30; t += 5) {
std::cout << t << " " << 0.5 * 9.8 * t * t << std::endl;
}
}
637 :
デフォルトの名無しさん :2011/07/13(水) 20:02:05.50
#include<stdio.h> #include<stdlib.h> struct Cell { int data ; struct Cell *next ; }; int main( void ) { struct Cell *p, *head ; head = NULL ; struct Cell cell_10; p = &cell_10; p->data = 10 ; struct Cell cell_20; p = &cell_20; p->data = 20 ; struct Cell cell_30; p = &cell_30; p->data = 30 ; head = &cell_30; cell_30.next = &cell_20; cell_20.next = &cell_10; cell_10.next = NULL; cell_10.next = &cell_30; cell_30.next = &cell_10; return 0; }
639 :
デフォルトの名無しさん :2011/07/13(水) 20:41:57.10
[1] C言語演習 [2] argvで入力された引数 "123:456:78:90" の様な文字列を ":" 区切りで 別の配列へ順に格納せよ。(strchr関数を使いなさい) 上記の例では、[0]=123,[1]=456,[2]=78,[3]=90となる。 尚、::の連続もありで、"12:34::90" は [0]=12,[1]=34,[2]=null,[3]=90となる。 下の様に処理しているが、スマートに行きません。。。 p = NULL; p = strchr(str, ':'); while (p != NULL) { printf("length %d\n", strlen(str)-strlen(p)); p++; p = strchr(p, ':'); } [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] C言語 [4] 14日いっぱい。
>>639 #include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char s[4][10] = {0};
char *p,*q;
int i;
if (argc != 2)
return 1;
printf("[%s]\n", argv[1]);
p = argv[1];
for (i = 0; i < 4; i++) {
q = strchr(p, ':');
if (q == NULL) break;
strncpy(s[i], p, q - p);
p = q+1;
}
strcpy(s[i], p);
for (i = 0; i < 4; i++)
printf("[%s]\n",s[i]);
return 0;
}
641 :
デフォルトの名無しさん :2011/07/13(水) 21:42:02.49
カレンダー系はwikiに大体載ってんじゃね?
>>526 これより早いのを書ける人カモン
#include <stdio.h>
#include <stdlib.h>
void hoge(long weight, int index, long worth, char *table){
static const int coin_weight[]={70, 48, 45, 40, 37, 10};
static const int coin_worth[]={500, 100, 10, 50, 5, 1};
static const int coin5[]={0, 3, 6, 9, 2, 5, 8, 1, 4, 7};
int a, b, x, w, i, coin_max;
if(index==4){
b=coin5[weight%10];
if((w=weight-b*37)<0) return;
x=w/370;
a=(w-x*370)/10;
worth+=a+b*5+x*37;
for(i=0;i<=x;i++) table[worth+i*13]=1;
return;
}
coin_max=weight/coin_weight[index];
for(i=0;i<=coin_max;i++) hoge(weight-i*coin_weight[index], index+1, worth+i*coin_worth[index], table);
}
int main(void){
double weight=8.0;
long i, table_size;
char *table;
scanf("%lf", &weight);
table_size=weight*500/7+1;
table=calloc(1, table_size);
hoge((weight*10+0.1), 0, 0, table);
for(i=0;i<table_size;i++) if(table[i]) printf("%ld\n", i);
free(table);
return 0;
}
645 :
デフォルトの名無しさん :2011/07/13(水) 22:44:54.02
>>636 ありがとうございます
6列目のところでエラーと出てしまうんですがどこを直せばいいでしょうか?
連続+
>>635 に訂正があるんですが
[3.3] 言語:Cでした
申し訳ございません
正直
>>635 から分からないとなると後から相当苦労すると思う
このスレがあるから苦労しません そんなことより解答はまだですか
>>635 #include <stdio.h>
int main(void) {
int i;
for (i = 0; i <= 6; ++i) {
double t = 5.0 * i;
printf("%g %g\n", t, 0.5 * 9.8 * t * t);
}
return 0;
}
足し算一回を、インクリメントと掛け算にする理由がわからない
宣言は最初にまとめろよ 汚いプログラムだな
658 :
デフォルトの名無しさん :2011/07/14(木) 06:49:15.73
[1] C言語演習 [2] ハノイの塔 次のルールに基づき、全ての円盤を右側の杭に移動するまでの移動手順を示す プログラムを作成しなさい。 ルール: ・3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。 ・最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。 ・円盤を一回に一枚ずつどれかの杭に移動させることができるが、小さな円盤の上に大きな円盤を乗せることはできない。 初期状態 円盤の数=3 [3.1] Windows7 [3.3] C言語 [4] 7/15 7時まで [5] 関数呼び出し、作成まで よろしくお願いします。
661 :
デフォルトの名無しさん :2011/07/14(木) 10:43:19.20
>>641 は、日曜、祝日(振替含む)の日には(23)のように、
かっこを付けて表示させてください。
662 :
デフォルトの名無しさん :2011/07/14(木) 12:42:02.49
[1] 課題 [2] .tsv形式のファイルをネット上から呼び出して、一番最後の行を引用して表示するプログラムを教えてください [3] Mac OS X C++ [4] 7/16 19時まで [5] 関数呼び出しまで 宜しくお願いします。
>>662 関数呼び出しまでしか習ってないのかよwwwwwwwww
ネットの定義は?
そんなの知らネット
667 :
196 :2011/07/14(木) 14:14:14.55
1] 情報処理演習 [2]
BMI判定のプログラムのdo,for,whileそれぞれに よる反復処理を行うプログラム
[3] 環境
[3.1] OS:Windows7
[3.2] VB2008
[3.3] 言語:C++
[4] 期限:2011年7月17日 一応BMIを求めるだけならできたのですが反復処理 できるプログラムがうまくいきません。 BMIの値が0以外なら処理を続行するプログラムを 作りたいと思っています。
http://codepad.org/V1kiXDs5
なんかいろいろ間違っとるなw
doもforもwhileもないんだからうまくいくほうがおかしいだろ
>>670 このコードにdo,whileを加えていただけるとありがたいです。
673 :
666 :2011/07/14(木) 16:12:50.78
http://codepad.org/UNmxvJKI すいません、デリートは何とか自力でできたのですが終了確認がどうもうまくいきません。
249行目からでupdeteというグローバル変数で0と1を使って1の時だけ終了の確認を表示するようにしています。
“y”を入力したときは正常に終了するのですが、以外の文字を入力したらセグメンテーションエラーが出てしまいます。
自分としては“y”以外が入力されたらまた元の入力に戻るようにしたいのですがどのようにすればうまくできるのでしょうか?
>>672 ありがとうございます。
do〜while,forのほうも教えていただけるとありがたいです。
#include<stdio.h> int main(void) { double hight,weight,bmi; for(;;){ puts("身長と体重を入力してください。"); printf("身長(p):"); scanf("%lf",&hight); printf("体重(s):"); scanf("%lf",&weight); bmi = weight / hight / hight * 10000; bmi = weight / ( hight / 100 * hight / 100 ); if (bmi == 0) break; printf("身長:%5.1f(cm)\n",hight); printf("体重:%5.1f(kg)\n",weight); printf("あなたのBMI値は%5.1fです。\n", bmi); } printf("終了する\n"); return(0); }
#include<stdio.h> int main(void) { double hight,weight,bmi; do{ puts("身長と体重を入力してください。"); printf("身長(p):"); scanf("%lf",&hight); printf("体重(s):"); scanf("%lf",&weight); bmi = weight / hight / hight * 10000; bmi = weight / ( hight / 100 * hight / 100 ); if (bmi == 0) break; printf("身長:%5.1f(cm)\n",hight); printf("体重:%5.1f(kg)\n",weight); printf("あなたのBMI値は%5.1fです。\n", bmi); } while(1); printf("終了する\n"); return(0); }
>>675 本当に助かりました!
ありがとうございます。
678 :
デフォルトの名無しさん :2011/07/14(木) 17:06:19.46
[1] 授業単元:C [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/20 分かる方、お願いします!!! つぎのプログラムにおいて,ratioavoeは,すべての要素が正である要素数Nのint型の配列を引数として渡されると, その配列中の奇数の要素の平均を偶数の要素の平均で割った値を返す関数である. 例えば,N = 5 で配列の各値が4, 7, 6, 2, 3の場合,奇数の要素は7, 3であり,その平均は5.0, 偶数の要素は4, 6, 2であり,その平均は4.0となるので,ratioavoeは1.25を返す.関数ratioavoeを, 下記のプログラムの /* INSERT HERE */ の部分に挿入できるように書け. ただし,配列中に奇数の要素も偶数の要素もそれぞれ少なくとも 1 個は含まれるものと仮定して良い. #include <stdio.h> #define N (2以上の適当な正整数) /* INSERT HERE */ int main(void) { int a[N]; /* ここで a[0]〜a[N-1] の値を入力する */ printf("ratioavoe = %8.4f\n", ratioavoe(a)); return 0; }
連投すいません。 上の反復のプログラムにおいて平均身長、最大身長を出す場合はどうすればいいのでしょうか。 ヒントだけでもありがたいです。
>>679 (n人の身長の平均値) = (n人の身長の合計)/n
だから、身長の平均値を求めるには「何人分の身長が入力されたか」と、「その人数分の身長の合計」が分かれば良いということになる。
これをどこで計算するのかについては、「ループ1回につき1人分のデータが入力される」という事実から考える。
また、最大値については次の例を参考にして考える。
1 5 10 3 8 の中で最大値を探すことを考えよう。
人間なら5つのデータを一度に見てどれが最大値か、というのがすぐに分かるが、
コンピュータは頭が悪いので、この「5つのデータを一度に見る」ということが出来ない。
なので、なるべく細かく比較を行うような処理によって最大値を求めることを考える必要がある。
その方法については、次のようなトーナメントを思い浮かべると良い。
優勝(最大値)
│
┌─┴┐
┌─┴┐ │
┌─┴┐ │ │
┌┴┐ │ │ │
│ │ │ │ │
1 5 10 3 8
まず、1と5が対戦を行う(ここでは値の大きい者が勝つとする)。当然5が勝つ。
次に5と10が対戦を行う。10が勝つ。
10と3が対戦を行う。10が勝つ。
10と8が対戦を行う。10が勝つ。
このような激戦を経て、10が優勝(最大値)であるということがわかる。
こういった方法によれば、一度に比較されるデータの数はたったの2つであり、頭の悪いコンピュータでもこなすことができる。
問題はこれをどのようにしてプログラムに落としこむかである。
ここから先は自分で考えてみよう。
681 :
デフォルトの名無しさん :2011/07/14(木) 18:30:44.08
>>681 >ただし,飛び方は手裏剣やブーメランやミサイルではなく, ボールらしい飛び方にしてください.
つまりどうせよと?
686 :
デフォルトの名無しさん :2011/07/14(木) 20:02:43.72
>>526 >>643 これはユークリッドの互除法のやり方で、定数時間で出来るはずだ。
10a + 37b + 40c + 45d + 48e + 70f = N をこのように変形。 10(a + 3b + 4c + 4d + 4e + 7f ) + 7b + 5d + 8e = N
新たな式10a' + 7b + 5d + 8e = Nを考えて、もしこの解全体が求まれば元の解を求めるのに役立てられる。
5(d + b + e + 2a') + 2b + 3e = Nと変形してより簡単な式に帰着できる。
新たな式5b' + 2b + 3e = Nは、2(b + e + 2b') + e + b' = Nと変形できる。
途中まで書いたがここから面倒になった。
連立一次不等式の格子点の個数を求める問題に帰着され、解個数はNの6次式になるはず。
>>682 軌道に沿って動くってことだろ
頭使えオッサン
QZに頭使えというのは死ねと同意語。
無い袖は振れないからな
690 :
デフォルトの名無しさん :2011/07/14(木) 20:16:35.14
ありがとうございます!!!>685
691 :
デフォルトの名無しさん :2011/07/14(木) 20:28:51.67
[1] 授業単元: プログラム演習 [2] 問題文(含コード&リンク): 次の@〜Cの条件を満たすプログラムを作成せよ @main関数においてint型の半径rをキーボードから受け取る A円周(ring)を求めるenshu関数にrを「値呼び出し」で渡して面積を計算し、 その値をmain関数にreturnする B円の面積(area)を求めるmenseki関数にrを「参照呼び出し」で渡して面積を計算し、 その値をmain関数にreturnする Cmain関数でreturnされた円周と面積の値を実行結果のように表示する [実行結果] 半径rを入力:5(←キーボードから入力) 円周:31.400000 面積:78.500000 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C [4] 期限: 7月21日まで 長々と失礼しました。どなたか宜しくお願いします
[1] 授業単元:C [2] 問題文(含コード&リンク): 次のルールに基づき、全ての円盤を右杭に移動するまでの移動手順を示すプログラムを作成しなさい ・3本の杭と、中央に穴の開いた大きさの異なる複数の円盤かr構成される。 ・最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている ・円盤を1回に1枚ずつどれかの杭に移動させることができるが、小さな円盤に大きな円盤を乗せることはできない 初期状態 円盤の数=3 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:いつでも
ハノイの塔 C言語 でググろう
>>691 #include <stdio.h>
double enshu(int r)
{
return 2 * 3.14 * r;
}
double menseki(int *r)
{
return 3.14 * *r * *r;
}
int main(void)
{
int r;
scanf("%d", &r);
printf("円周:%f\n", enshu(r));
printf("面積:%f\n", menseki(&r));
return 0;
}
695 :
デフォルトの名無しさん :2011/07/14(木) 21:54:18.34
>>660 ありがとうございます!
助かりました。
697 :
デフォルトの名無しさん :2011/07/14(木) 22:59:32.75
sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
699 :
ななし :2011/07/14(木) 23:41:32.74
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/16です、よろしくお願いします 次のプログラムにおいて,sumrangeは,M行N列の行列A = (a_{ij})(実際には, 大きさM×Nのint 型の2次元配列で表される)を引数として渡されると,各行の最大値から最小値を 引いた値の(全体での)和を返す関数である.(ここでは,C 言語の配列の添え字にならって,i, jは 0から始まると考えている) 例えば,M = 3, N = 4のとき,主プログラム中で,配列aの値に { 7 5 -2 4 -3 11 -5 6 2 6 6 14 }が入力された場合,0行目の最大値は7,最小値は-2であり,その差は7 - (-2) = 9, 1行目の最大値は11,最小値は-5であり,その差は11 - (-5) = 16, 2行目の最大値は14,最小値は2であり, その差は14 - 2 = 12 となるので,sumrangeは9 + 16 + 12 = 37を返す.関数sumrangeを,下記のプログラムの /* INSERT HERE */ の部分に挿入できるように書け.なお,行列の(i, j)成分は,2次元配列の[i][j]要素に 対応するものとせよ.また,配列中のデータは,-10000以上10000未満であると仮定してよい. #include <stdio.h> #define M (適当な正整数) #define N (適当な正整数) /* INSERT HERE */ int main(void) { int a[M][N]; /* ここで a[0][0]〜a[M-1][N-1] の値を入力する */ printf("sumrange = %2d\n", sumrange(a)); return 0; }
int sumrange(int a[M][N]) { int i, j, ret = 0, min, max; for(i = 0; i < M; i++) { min = max = a[i][0]; for(j = 1; j < N; j++) { if(a[i][j] < min) min = a[i][j]; else if(max < a[i][j]) max = a[i][j]; } ret += max - min; } return ret; }
701 :
631 :2011/07/15(金) 02:34:45.28
しばらくしても質問や回答がなかったのでもう一度書き込みさせていただきます
申し訳ありません
授業:ネットワークプログラミング
問題文:以下のプログラムを改編し、21までの数取りゲームを作成せよ。なお数は一度に3つまで取れることとし、2つクライアントから交互に入力を受け付けれるようにする。
プログラムURL:
http://ideone.com/pPtar 環境
OS: Linux
コンパイル:端末から gcc -oでコンパイルしています
言語:C
期限: 2011年07月16日15:00まで
その他の制限: ネットワークプログラミングの応用という課題ですのでサーバーとクライアントを利用したものでお願いいたします。
よろしくお願いします
>>696 うちのcore i7 920な環境で
1000 : 3.33s
2000 : 13.86s
3000 : 65.72s
めっさ早くなってわろた
[1] 授業単元:C [2] 問題文(含コード&リンク): 自然数を入力すると、その階乗を表示するようなプログラムを作成せよ。 ただし、演算結果が1000桁以下になる場合のみ対応し、 演算結果が1000桁を超える場合はその旨を表示して終了すること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2011年7月17日まで [5] その他の制限:
704 :
デフォルトの名無しさん :2011/07/15(金) 09:31:55.06
>>703 #include <stdio.h>
int main(void)
{
int i, j, n, fac[2][1000] = {0}, d[2], f = 0;
scanf("%d", &n);
if(n >= 450) {
printf("1000桁を超えます\n");
return 0;
}
fac[0][0] = 1;
d[0] = 1;
for(i = 2; i <= n; i++, f ^= 1) {
for(j = 0; j < d[f]; j++) fac[f ^ 1][j] = fac[f][j] * i;
for(j = 0; j < d[f] || fac[f ^ 1][j]; j++) {
if(fac[f ^ 1][j] >= 10) {
fac[f ^ 1][j + 1] += fac[f ^ 1][j] / 10;
fac[f ^ 1][j] %= 10;
} }
d[f ^ 1] = j;
}
for(i = d[f] - 1; i >= 0; i--) printf("%d", fac[f][i]);
return 0;
}
>>701 通信プログラムに回答してるのは俺だけって気がする.....
ttp://ideone.com/Mw35P 例によって winsock で動作確認したので linux でコンパイルする時には #define USE_WINSOCK の行を消せ
USER_NUM を変更することで複数人数でも遊べると思うけど確認はしていない、暇なら確認しておいてくれ
>>704 プログラムの大半が追加部分になってしまう。
少々ロジックがややこしい。
708 :
デフォルトの名無しさん :2011/07/15(金) 11:08:48.20
[1] 授業単元:計算機構成
[2] 問題文(含コード&リンク):
http://codepad.org/rBkXiwPm [3] 環境
[3.1] OS: Windows 7
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C言語
[4] 期限:2011年 7月 19日
[5] その他の制限: アルゴリズムの説明もお願いします
709 :
デフォルトの名無しさん :2011/07/15(金) 11:20:37.34
>>707 プログラムの根幹が変わらないなら問題ないです。
>>708 アルゴリズムの説明も何も、ヒントに全部書いてあるじゃんw
>>708 問1
誰も答え出さなかったらつかってくれ
#include <stdio.h>
#include <string.h>
int main()
{
int p_M=43112609;
char cp_M[9];
int digit=0;
int lsd=0;
int msd=0;
digit=sprintf(cp_M,"%d",p_M);/*桁数*/
sscanf(&cp_M[digit-1],"%1d",&lsd);/*最下位*/
sscanf(cp_M,"%1d",&msd);/*最上位*/
printf("桁数: %d\n最下位桁: %d\n最上位桁: %d\n",digit,lsd,msd);
return 0;
}
>>708 問1
#include <stdio.h>
#include <math.h>
int main(void)
{
int p = 43112609;
double i, f;
f = modf(p * log10(2), &i);
printf("桁数:%d\n", (int)i);
printf("最上位桁の数字:%d\n", (int)pow(10, f));
printf("最下位桁の数字:%d\n", p % 4 * 2 - 1);
return 0;
}
>>712 訂正
#include <stdio.h>
#include <math.h>
int main(void)
{
int p = 43112609, r[] = {5, 1, 3, 7};
double i, f;
f = modf(p * log10(2), &i);
printf("桁数:%d\n", (int)i);
printf("最上位桁の数字:%d\n", (int)pow(10, f));
printf("最下位桁の数字:%d\n", r[p % 4]);
return 0;
}
>>708 問2
#include <stdio.h>
#include <math.h>
int main(void)
{
int i, cnt[10] = {0}, p[] = {2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107, 127, 521, 607, 1279, 2203, 2281,
3217, 4253, 4423, 9689, 9941, 11213, 19937, 21701, 23209, 44497, 86243, 110503, 132049,
216091, 756839, 859433, 1257787, 1398269, 2976221, 3021377,6972593, 13466917, 20996011,
24036583, 25964951, 30402457, 32582657, 37156667, 42643801, 43112609};
double d;
cnt[3] = cnt[7] = 1;
for(i = 2; i < sizeof p / sizeof *p; i++) cnt[(int)pow(10, modf(p[i] * log10(2), &d))]++;
for(i = 1; i <= 9; i++) printf("%dが%d個\n", i, cnt[i]);
return 0;
}
>>714 >printf("桁数:%d\n", (int)i);
printf("桁数:%d\n", (int)i + 1);
に訂正
717 :
デフォルトの名無しさん :2011/07/15(金) 15:17:04.98
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): #include <stdio.h> #include <string.h> struct Address_data{ char name[81]; char phone[20]; int age; }; int main(){ struct Address_data data1, data2; //data1の値設定 strcpy(data1.name, "Alex"); strcpy(data1.phone, "046-000-0001"); data1.age=18; //data2の値設定 strcpy(data2.name, "Bonnie"); strcpy(data2.phone, "046-000-0002"); data2.age=19; //data1,data2の内容表示 printf("%s\t(%d)\t[%s]\n", data1.name, data1.age, data1.phone); printf("%s\t(%d)\t[%s]\n", data2.name, data2.age, data2.phone); return (0); }
これをプログラム実行時にキーボードから名前、年齢、電話番号を入力できるように変更したい [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/22です
720 :
◆SG9/NmPjzc :2011/07/15(金) 18:03:24.72
よろしくお願いします。 [1] 授業単元:情報C [2] 問題文(含コード&リンク):複数人の身長を入力し、入力人数、最大値、最小値 平均値を出力するプログラムを作成せよ。ただし、身長に負の値が入力されたときに 身長の入力を終了することとし、データとして利用しないこと [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 明後日までにお願いします [5] その他の制限: 友人に聞くとWhile文やIf文を使えと言ってきました。 習っている範囲はgotoあたりまでです。
721 :
デフォルトの名無しさん :2011/07/15(金) 18:07:20.52
[1] 授業単元:通信プログラミング( [2] 問題文: シグナル処理を用いて1から順に数字を表示していき(無限ループ)、コンソール側からCTRL+Cを押すと数字の表示が止まりそれまでに表示したデータ数と表示した数字の合計を表示する。 また、CTRL+Cを押すと数字の表示が再開されて(ストップした数字の続き)またCTRL+Cで再開後から今までのデータ数と数字の合計を表示する。 具体例 ./a.out 1 2 3 4 <------ここでCTRL+C データ数:4 合計:10 <-----CTRL+C 5 6 7 8 9 <---またCTRL+C データ数:5 合計:35 また、ソースは20行程度で書けるみたいです。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:無期限
>>721 ttp://ideone.com/m5MZr 性格的な理由で20行では書けなかったが、詰めればそんなモンかもしれないw
16行目は不要かも知れないのでコメントアウトして確認してみてくれ(windowsでは必要だった)
このプログラムは CTRL+Cでは終了できないから kill コマンドを使う必要が有るよ
>>723 要件を満たせない言い訳乙としか言えない
出来ないなら何故解答した
>>724 ステップ数は要件じゃないだろw
回答しない奴に限ってケチ付けるのは好きだよなぁw
実行できないからよくわかんないけど、sumとcntの数値ってあってる?
728 :
デフォルトの名無しさん :2011/07/15(金) 20:33:47.72
>>723 ありがとうございました
自分なりに作ってみたのも有ったんですが、うまくいかずすっきりしました!
コード行数は目安で言ったつもりだったんで条件ではないので問題ないです
よく考えたらkillコマンド使えばいいんですね
CTRL+Z使ってましたw
これだと一時停止にしかならないんですよねw
これを機にアップローダの使い方覚えようと思います
729 :
デフォルトの名無しさん :2011/07/15(金) 21:20:35.84
730 :
デフォルトの名無しさん :2011/07/15(金) 21:52:47.11
よろしくお願いします。 [1] 授業単元:学ぶC言語 [2] 問題文:科目の評価点数を入力すると、対応する成績評語を出力する プログラムを作成せよ。 だたし、成績評語は、以下のように定める 評語 S A B C D 評価点数 100~90(Sに対応以下略) 89~80 79~70 69~60 59~0 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 明後日までにお願いします [5] その他の制限:習っている範囲はgoto文までです if文ではなくSwitch文でかいていただきたいです caseの部分をなんとか短くしていただきたいです
線形リストでノードを順に辿りつつ、変数aとbそれぞれを100〜250の間の乱数で初期化する関数 を作りたいんですが…
>>730 点数をint型で代入しといて10で割って
case 10:
case 9:
〜
break;
case 8:
〜
break;
case 7:
〜
break;
case 6:
〜
break;
case default:
〜
break;
>>731 をおねがいします
とりあえずでいいので……
[1] 授業単元:情報処理演習 [2] 問題文:1,元金a円、利率rで何年預けるとした ら目標金額のb円を超えるか。金利は複利計算であ る。 2、元金a円、利率rで、n年預け るとしたら元金、金利の合計はいくらになるか。金 利は複利計算である。for文を用いよ。 [3] 環境 [3.1] OS:windows [3.2] vs2008 [3.3] 言語: C++ [4] 期限:月曜日までにお願いします。 [5] その他の制限:特に無し。 よろしくお願いします。
>>735 >>1 変数 a, b, は線形リストを構成するノードの中にある変数としていいでしょうか?
742 :
ななし :2011/07/16(土) 02:13:09.84
ありがとうございます、助かりました>700
743 :
デフォルトの名無しさん :2011/07/16(土) 07:13:03.00
おまえら、オナニーコードはそこまでだ!
[1] 授業単元:プログラミング言語 [2] 問題文(含コード&リンク):10人の学生の身長(m),体重(kg)のデータを入力し、 各学生の身長(m),BMI値を表示するプログラムを作成しなさい。 [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:2011年7月15日 [5] その他の制限:for文を使い、各学生の身長・体重・BMIはそれぞれ1次元配列でお願いします
速いコードが書けない上に、他人のコードを理解できないアホが僻んでるなw
BMI=kg/m/m
>>744 質問者の要求に最大限応えるために書いたのだから、
すなわち相手を満足させるためにやったのだから、
オナニーコードではなくてセックスコードと呼んで欲しいね
>>747 そんなこと考えながら頑張ってうpってたの?wwwwwww
>>746 #include <stdio.h>
int main()
{
double omosa[10];
double nagasa[10];
double biiemuai[10];
int i;
for (i = 0; i < 10; i++) {
printf("weight = ");
scanf("%lf", &omosa[i]);
printf("height = ");
scanf("%lf", &nagasa[i]);
biiemuai[i] = omosa[i] / nagasa[i] / nagasa[i];
}
printf("\n weight height BMI\n");
for (i = 0; i < 10; i++) {
printf("%10.1f%10.1f%10.1f\n", omosa[i], nagasa[i], biiemuai[i]);
}
return 0;
}
>>747 QZ化したものがひとりあらたに発生‥‥‥。
>>747 この程度の処理でぱっと見で処理を把握できないプログラムを恥ずかしげもなく出すことは
作成者のプログラマとしての能力が致命的に欠落してることは理解できる?
トリッキーなコードはスレ違い
ん
>>736 問題1
#include <iostream>
int main()
{
double a = 100., b = 200., r = 0.01;
int n = 0;
for (;a <= b;) {
a *= 1.0+r;
n++;
}
std::cout << n << "年" << std::endl;
return 0;
}
問題2
#include <iostream>
int main()
{
double a = 100., r = 0.01;
int i, n = 10;
for (i = 0; i < n; i++) {
a *= 1.0 + r;
}
std::cout << a << "円" << std::endl;
return 0;
}
>>746 for (i = 0; i < 10; i++) {
nbsp; do printf("weight %d = ", i+1);
nbsp; while(!scanf("%lf", &omosa[i]) && (scanf("%*s"),1));
do printf("height %d = ", i+1);
while(!scanf("%lf", &nagasa[i]) && (scanf("%*s"),1));
biiemuai[i] = omosa[i] / nagasa[i] / nagasa[i];
}
>>756 ありがとうございます。金利、利率、目標金額をそれぞれ入力する場合はどうすればいいのでしょうか?
759 :
631 :2011/07/16(土) 13:28:15.00
>>706 返事が遅くなり申し訳ありません。
こちらの注文通りのプログラムで本当に助かりました
ありがとうございます。
linuxでのコンパイル、多人数でも動作確認ができました
761 :
デフォルトの名無しさん :2011/07/16(土) 14:02:39.33
・授業:ネットワークプログラミング
・問題文:以下のプログラムを改編し、ジャンケンゲームを作成せよ。勝敗判定は先に3勝したほうを勝ちとする。このときサーバーは2つクライアントから入力をうけ、同時に入力結果を返すこととする。
・プログラムURL:
http://ideone.com/pGnkt ・環境
・OS: Linux
コンパイル:端末 gcc -o
・言語:C
・期限: 2011年07月19日15:30まで
その他の制限: この課題に取り組んでいますが、サーバーとクライアントの間でうまく動作するものが作れません。よろしくお願いいたします。
連結リストのリストダンプとリスト解放って何ですか?
765 :
デフォルトの名無しさん :2011/07/16(土) 17:59:23.07
(1)c言語 (2)問題:偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返すプログラムの作成をお願いします。 「偶数なら2で割り、奇数なら3倍して1を足す」という部分を再帰関数化しろ。 実行結果 2以上の自然数を入力してください。 11 11→34→17→52→26→13→40→20→10→5→16→8→4→2→1
>>765 #include <stdio.h>
int main()
{
int d;
printf("2以上の自然数を入力してください。\n");
scanf("%d", &d);
printf("%d", d);
do {
if (d % 2) d = d * 3 + 1;
else d /= 2;
printf("→%d", d);
} while (d > 1);
printf("\n");
return 0;
}
>>743 は少なくともあと30%ほど高速化できるみたい
770 :
デフォルトの名無しさん :2011/07/16(土) 19:00:13.24
>>765 の続きです
(1)c言語
(2)問題:「偶数なら2で割る、奇数なら3倍して1を足す」処理をして、さらにその関数に偶数処理と奇数処理の回数を表示するプログラムの作成をお願いします。
実行結果
2以上の自然数を入力してください。
11
11→34→17→52→26→13→40→20→10→5→16→8→4→2→1
偶数処理の回数:10回
奇数処理の回数:4回
>>763 今度はUDPか、UDPでジャンケン3勝って少し面倒だな
>>774 良いのか?例題のプログラムはUDPを使ったコードだぞ
実はUDPで書いてはみたんだが、複数のパソコンが無いと試験できない事に気が付いてアップするのを控えた
クライアントも受信するから bind() しなければならないのだけど、同じIPとPORTだと1プロセスしか bind() できないんだよねw
TCPで良いならこないだ書いた21ゲームを直せば簡単だ
>>775 演習内で使用したプログラムコードを使用して課題を作成するのが今回の目的です。
私もUDPを使って作成しようと試みたんですがUDPをうまく使えずつまずきました。
なので、UDPでなくてもTCPでも課題の作成は認められています。よろしければ、TCPを用いたプログラミングを書いていたけないでないでしょうか?
>>775 演習内で使用したプログラムコードを使用して課題を作成するのが今回の目的です。
私もUDPを使って作成しようと試みたんですがUDPをうまく使えずつまずきました。
なので、UDPでなくてもTCPでも課題の作成は認められています。よろしければ、TCPを用いたプログラミングを書いていたけないでないでしょうか?
>>775 演習内で使用したプログラムコードを使用して課題を作成するのが今回の目的です。
私もUDPを使って作成しようと試みたんですがUDPをうまく使えずつまずきました。
なので、UDPでなくてもTCPでも課題の作成は認められています。よろしければ、TCPを用いたプログラミングを書いていたけないでないでしょうか?
>>775 演習内で使用したプログラムコードを使用して課題を作成するのが今回の目的です。
私もUDPを使って作成しようと試みたんですがUDPをうまく使えずつまずきました。
なので、UDPでなくてもTCPでも課題の作成は認められています。よろしければ、TCPを用いたプログラミングを書いていたけないでないでしょうか?
連結リストのリストダンプとリスト解放って何ですか?
この2つの違いを教えてもらえればいいんですが…
>>781 何か気に障る事を言ったのでしょうか?謝ります
>>782 ここは宿題スレだから...きっと講義を受けたんだろうなぁ。
そんで本を読んで勉強したし、ググって調べてもみたはずだよね。
それでも分からないから、ここに来たと。
来て >1 を読んだけど、あえて「連結リストのリストダンプとリスト解放を教えろ」と書き込んだわけか。
いつからか、初心者用の一般的な質問スレがなくなってしまったね。 各言語用はいくらかあるようだけれど。 「スレ立てるまでもない質問は」という大仰な修飾の 付いたやつくらいかな。
>>776 何故に連投した?
ttp://ideone.com/qyjq7 少し躓いて時間がかかってしまったが、それによって先日の21ゲームのバグが見つかった
多分、
>>631 も君だと思うんだが、
>>706 の回答にはバグが有る
server() 内で定義している len は初期化する必要が有る(初期化の方法は今回の回答を参考にしてくれ)
初期化しなくても動作する場合もある事がC言語の嫌らしいところで、前回の回答を修正したのに変更していない場所でエラーが出て悩んでしまった
何年、プログラマをやってるんだと....orz
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): #include <stdio.h> #include <string.h> struct Address_data{ char name[81]; char phone[20]; int age; }; int main() { struct Address_data data[2], *p = data; printf("Input end = Ctrl + D\n"); for (p = data; p - data < 2; p++) p->age = -1; for (p = data; p - data < 2; p++) { printf("[%ld]name phone age = ", p - data); if (scanf("%s %s %d", p->name, p->phone, &p->age) != 2) break; } printf("\n"); for (p = data; p->age >= 0; p++) printf("%s\t(%d)\t[%s]\n", p->name, p->age, p->phone); return (0); }
これを拡張し、構造体の配列にして10件のデータの入力ができるように拡張しなさい [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限:7/20です
>>764 >>780 >>782 >>784 >>787 何人か煽りも混じっているかもしれないけど、、、。
スレの流れから想像するに、
>>739 のコード中の
「リストダンプ」と「リスト解放」のことを言っている?
それならば、
>>739 の関数を見てもらえればいい。
そうじゃないなら、文脈次第。
よくある処理としては、
リストダンプ
→リストの全ノードの中身を各々表示する
リスト解放
→ヒープに取られたリストノード各々を解放
>>722 遅くなりましたが解答ありがとうございました
for (n = 0, sum = 0.0; r = scanf("%lf", &h), (r == 1 && 0 <= h); ++n) {
上記の部分がちょっと難しいのでもう少し簡単?にできますかね
ちょっとまだC言語を始めたばかりでfor()の部分で括弧のなかに
scanfとかをいれていいとかは習わなかったので・・・
>>792 for (n = 0, sum = 0.0; r = scanf("%lf", &h), (r == 1 && 0 <= h); ++n) {
は以下と同等。
for (n = 0, sum = 0.0; ; ++n) {
if(scanf("%lf", &h) != 1) {
break;
}
if (h < 0) {
break;
}
…
}
コンパイルしていないので、間違えていればツッコミよろ
>>793 >>794 >>722 一番はじめに書いていただいたプログラムなどで
r==1や
if(r ! = 1)break; と書いてありますが
これはなんという意味を表すのでしょうか。
なんどもすいません
scanfの戻り値は、入力に成功した変数の数 scanf("%lf", &h);とすると、 hに正しくdouble型の数値が入力された場合は、1が返る 文字列などを入力して、失敗すれば、0が返る EOFが入力された場合はEOF(-1)が返る だから、r == 1のときだけ、入力が正しいとして処理を進めている
797 :
デフォルトの名無しさん :2011/07/17(日) 23:13:22.15
(1)c言語(2)問題:最大公約数を求める関数を条件とベースに基づいて作成お願いします 条件 1:関数gcdの呼ばれた回数を記録 2:呼ばれた回数と、その時の引数a,bの値を表示 実行結果:2つの整数を入力してください 数値1:64 数値2:120 1回目の関数の呼び出し:a=64 ,b=120 2回目の関数の呼び出し:a=120 ,b=64 3回目の関数の呼び出し:a=64 ,b=56 4回目の関数の呼び出し:a=56 ,b=8 最大公約数は8です ベース #include <stdio.h>//ユークリッドのアルゴリズムで最大公約数gcdを求める int gcd(int fa , int fb); //プロトタイプ宣言 int main(){ int a,b,g; printf("2つの数値を入力してください。\n"); printf("数値1:"); scanf("%d",&a); printf("数値2:"); scanf("%d",&b); g = gcd(a,b); printf("最大公約数は%dです\n",g); } int gcd(int fa, int fb){ int r,ret; r = fa % fb ; if(r > 0){ //不成立時が終了条件 ret = gcd(fb,r); //再帰呼び出し }else{ret = fb ; }return ret; }
int gcd(int fa, int fb) { static int cnt = 1; int r, ret; printf("%d回目の関数の呼び出し:a=%d ,b=%d\n", cnt, fa, fb); r = fa % fb; cnt++; if(r > 0) { ret = gcd(fb, r); } else { ret = fb; } return ret; }
>>786 最近教えてもらった、Embarcadero/Borland の codeguard がなかなかいい感じです。
時にはミスりますが、初期化忘れくらいならばたいがい検出してくれます。評価版もありますので一度お試しを。
bcc32 -vG -v target.c or target.cpp
[1] 授業単元:スタックとキュー
[2] 問題文(含コード&リンク):
http://codepad.org/Os0523nV 3問あります。問題文もリンク先に書いてあります。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011年7月18日まで
[5] その他の制限:スタックとキュー
どうぞよろしくお願い致します。
こういう所に丸投げしに来る奴は、どうすればシンプルに実装出来るかとか そんなことには全く興味が無い その場しのぎだけが目的
>>803 そうですか?私が学生だったら、自分で解いた上で(必要ならモリタポを払ってでも)他の人間がどう書くかわくわくして見ていますね。
そんな人もいると思います、だったら受けてたちましょう。
そうじゃない人はどーでもいいです。
あいかわらずクソだな
時々、「いくらなんでもそんな基本的な所で躓かないだろう」ってな質問はあるな こういうのは面白いやり方を期待できないだろうからマジ質問なんだろうけど そういう人はどうしてプログラミングをやろうと思ったのか気になる
すっごい難問が解きたい。誰か頼む。
>>811 トリップついてる頭のおかしい人を、まともな人間にしてください
>>800 仕事用に Visiual Studio を持ってるからw
bcc はこういうスレで遊びコード書く専用だよ
そもそも、宿題レベルのコードにデバッガを使うのには抵抗も有るし
>>786 ありがとうございます。連発はPCが調子悪くて読み込みクリックの際連続で投稿してしまいました。
ご指摘のとうり初期化のところを再度確認させていただきます。
821 :
デ :2011/07/18(月) 10:06:37.93
>トリップついてる頭のおかしい人を、まともな人間にしてください まるでトリップをつけてるのが悪いみたいな言い方。
>>821 「トリップついてる頭のおかしい人」はQZを指す。お前、鈍いってよく言われるだろ。
823 :
デ :2011/07/18(月) 10:29:08.19
EOF+1?0:1 www
>>822 いくらなんでもそれは一見さんには過酷な課題というものです。
Q何とかって記述をNGに登録してる人がいるから、 あえてそういう表現してるんだろうが、バカみたいだ。
826 :
デフォルトの名無しさん :2011/07/18(月) 12:39:42.26
【質問テンプレ】 [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 四則演算(+、−、×、÷)だけの電卓を作成せよ。 scanfで式を入力し、エンターキーで結果を表示。入力できる数値の値は三つだけでよい。 例:式は2+4×5 enterkey 答え:22 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名:gcc 3.4 [3.3] 言語: C言語 [4] 期限: 2011年7月19日08:30まで [5] その他の制限: できれば各処理が何を行っているかコメントを入れてほしい。
このスレでトリップ付けてて頭がおかしいのは一人だけなので問題ない。
>>825 のような鈍い奴は自分の能力が足りないとあきらめる事だ。
ありがとうございます
>>817 全角スペースとは、具体的に何処に入っているのか詳細を教えてください
>>819 >>815 のプログラムとの変更点を教えてください
>>828 24行目でコンパイルエラー出てるんだから大体わかるでしょ
ってか全角スペースが表示されるようなエディタ使ってないのか
>>828 24行目 int 前のインデントを行うのに全角スペースを2発入れてる
これがゆとりか。ゆとり恐るべし。
それ以外の部分も半角スペースとタブが混在しててなんか気持ち悪いな
全角スペースを空白ではなく半角スペースと違うようにシンボル表示するのは良いとして TABもシンボル表示させてる?
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文:標準入力に現れた数字文字の出現回数を*を使って
数字の下側に表示するプログラムを作成せよ。
http://codepad.org/T7Ft26pn 上記のソースコードを元にして作成していただきたいです。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名:gcc 3.4
[3.3] 言語: C言語
[4] 期限: 2011年7月20日まで
[5] その他の制限:while文、for文を使って作成していただきたいです。
お願いいたします。
実行例 入力:112 Ctrl+z とした場合
1 2 3 4 5 6 7 8 9
* *
*
>>829-830 コンパイルしたところ
error C2106: '=' : 左のオペランドが、左辺値になっていません。と表示されました
>>833 してる。
でないと、makeに「タブのつもりですか?」とか
高飛車な態度で笑われてちんこ勃つから
837 :
デフォルトの名無しさん :2011/07/18(月) 14:57:03.16
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 実数x、y(y≠0)の入力に対し、商x / yを出力する。ただし、プログラム中で除算の式を用いないでNewton法の逐次近似で乗算と減算によりyの逆数zを求め、x×zを得ること。 注意 逆数zを求める初期値の選択が悪いと2次の収束(反復ごとに精度が桁数で倍になる)をせず、極端な場合には振動して収束しない。 [3] 環境 [3.1] OS: Windows 7 [3.2] コンパイラ名とバージョン:visual studio [3.3] 言語:C言語 [4] 期限:2011年7月20日 [5] その他の制限: コメントでかるく説明も入れていただけるとありがたいです
f(x)=1/x f'(x)=-1/x*x (a,f(a))を通る接線 y - f(a) =f'(a)(x - a) x軸との交点(y=0) x = a - f(a)/f'(a) = 2a
>>826 演算子の優先順位は考慮する必要はありますか
>>756 問題1
a <= b の = 要らないのでは。
>>840 問題文にそったまでですがどのような理由で要らないと思われますか?
>>839 演算子の優先順位を考慮してお願いします。
>>835 について追記します
node->name = name;
node->price = price;
でエラーが発生したようです
何が原因なのでしょうか?
>>843 お前はQZくらい頭おかしいのか? それならトリップつけろ。
816.c(39) : error C2106: '=' : 左のオペランドが、左辺値になっていません。 strcpy(name, node->name); 816.c(58) : error C2106: '=' : 左のオペランドが、左辺値になっていません。 strcpy(name, node_h->name);
849 :
デフォルトの名無しさん :2011/07/18(月) 17:50:32.52
>>846 コンパイル通せるようになってからでかい口叩こうな。
>>849 へえ?
>>846 のコンパイルが通らないのですか?codepad 上のgcc では通っていますけれども。通らないコンパイラはなんですか?
>>846 解いていただいて誠にもうしわけないのですが、関数一つで行えないでしょうか?
あと、処理をswitch文やif分では行えないでしょうか?
解いていただいた方法ですと、まだ習っていない処理の仕方なので説明が出来ませんので。
本当にお願いばかりで申し訳ありません。
>>847 ありがとうございます
できるようになりましたが、出力時にこのような表示が…
入力しなさい
tea 330
入力しなさい
0番目のリスト-> (ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ
ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘJ,
330)
これはcharに文字が入っていないのですか?
ヴィオド?
816.c(39) : error C2106: '=' : 左のオペランドが、左辺値になっていません。 strcpy(node->name, name); 816.c(58) : error C2106: '=' : 左のオペランドが、左辺値になっていません。 strcpy(node_h->name, name); ERROR:referer情報が変です。(ref1)
あのさ、あんましあっけなく早くプログラムコード上げると、 質問者のほうもおかしな気分になる。 どっかに回答の載ってるサイトがあるんじゃないかな? とか。 間というものを大切にしよう。 一人(一つの酉とか)が多数の問題を同時解決するのも また同じ。
>>856 そうですかね。できたから上げただけなんですが。:-)
種明かしをすると過去問に類似のものがあり、それをちょっと手直ししただけです。とはいえ無論オリジナルですが、最近は信じてもらえなくて粘着様にたたかれる有様です。
不思議な世の中です。
>>858 トリップつけたり外したりすんな
引っ込んでろ
過去にあったことが、どう都合よく脳内で変換されてるんだろう
某国の方針と一緒で基本自演以上のことはできない気もするけどな
俺はその辺のコードぱくってきてしれっと何も言わずに渡すぜ
>>848 ありがとうございます。
完璧でした。助かりました。
>>852 ですが、わかったことを追記します
2つの文字と整数を区切らずに入力するとエラーがでます
それと、最初に改行のみ入力すると正常に終了するようです
>>860 別に。
義理をかく、恥をかく、汗をかく、の三角法を実践し、10 や 20 の恥くらいは、なんとも思わない体になりました。
867 :
デフォルトの名無しさん :2011/07/18(月) 20:13:57.20
[1] 授業単元:遺伝的アルゴリズム
[2] 問題文(含コード&リンク):
世代数 平均適応度 最大適応度というフォーマットで、ooo.dat というファイル名で保存すれば、gnuplot で
plot ”ooo.dat”using 1:2 w l, ”result.dat”using 1:3 w l
とすることで、グラフが得られる。
グラフの例とプログラムと問題文は以下のURLです。
http://ux.getuploader.com/qwertykey/ パスはqqq3538です。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:[2011年7月20日まで]
[5] その他の制限: プログラムに詳しく書かれているので遺伝アルゴリズムに知識がなくてもできると思います。
よろしくお願いします。
じゃあ、自分でやれよw
869 :
デフォルトの名無しさん :2011/07/18(月) 21:29:57.32
>>850 これがコンパイル通る? wwwww
> void error(viod)
870 :
デフォルトの名無しさん :2011/07/18(月) 21:36:26.75
>>846 ほら、回答も書いてやったぞ。宿題の役には立たないうんこコードなのは一緒だが、
>>846 と違って、コンパイルエラーもないし、なによりもループせずきちんと終了する。
#include <stdio.h>
int main()
{
printf("hello world!\n");
}
C言語の仕様知らないとこうも哀れな晒し者になるんだな。
>>869 ほどひどい自害は初めて見た。
>>871 -Wall -Werrorはデフォルト。とくにここは宿題スレだ。
[1] 授業単元:考えるC言語基礎 [2] 問題文: 金額を入力すると、貨幣及び硬貨の合計枚数が最も少なくなるように 一万円札、5千、千、500円玉、100、50、10,5,1円玉に分け、それぞれの枚数 を出力するプログラムを作成せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:明日まで [5] その他の制限: goto文まで習いました、学び始めて2ヶ月ほどなので 出来る限り分かりやすいプログラムでお願いします
#include <stdio.h> //
>>873 int main(void){
int money;
printf("金額を入力してください :"); scanf("%d", &money);
printf("一万円札の枚数 %d\n", money / 10000); money %= 10000;
printf("五千円札の枚数 %d\n", money / 5000); money %= 5000;
printf("千円札の枚数 %d\n", money / 1000); money %= 1000;
printf("500円玉の枚数 %d\n", money / 500); money %= 500;
printf("100円玉の枚数 %d\n", money / 100); money %= 100;
printf("50円玉の枚数 %d\n", money / 50); money %= 50;
printf("10円玉の枚数 %d\n", money / 10); money %= 10;
printf("5円玉の枚数 %d\n", money / 5); money %= 5;
printf("1円玉の枚数 %d\n", money);
return 0;
}
877 :
デフォルトの名無しさん :2011/07/18(月) 23:01:40.73
>>875 うんこコードとっととなおせ。
まだ、 コ ン パ イ ル が と お ら な い。
それをなおしても、る ー ぷ す る。
>>877 >>826 ループするのは仕様です。(
>>826 にはその場合の指示はとくにない。)つまり解釈できない式を入力すると "syntax error" と表示して再度入力を促します。
しかし、それが問題ならば、以下の形にしておきます。
コンパイルが通らない、というのはこちらでは確認できませんでした。warning は出ますが、これは動作上問題はありません。(longjmp()->setjmp() で error() からはもどらない。)
が、回避してみました。これでどうでしょうかね。
http://codepad.org/41Ane6id
880 :
デフォルトの名無しさん :2011/07/18(月) 23:26:14.37
ループするのは仕様です。キリリッ ループするのは仕様です。キリリッ ループするのは仕様です。キリリッ ループするのは仕様です。キリリッ ループするのは仕様です。キリリッ ループするのは仕様です。キリリッ ループするのは仕様です。キリリッ
ループしたらシグナル送って殺さなきゃ止まらないのも仕様だったんですかあ?
>>881 申し訳ないのですが、
>>875 にしても、代数式として評価が可能な場合には評価結果を出力して終了しています。
ループするのは、入力した式が代数式として評価不可能な場合で、
"syntax error" と表示したあと、1文字先読みして(∵LL(1)文法に従っているので)単に main() に longjmp() しているだけです。
だから代数式として評価可能な式が入力され次第、プログラムは終了します。
いつまでたってもループしたまま終わらないという誤解をお持ちのようですが、少しコードを眺めていただければ、そんなことはないことはお分かりになるだろうと思います。
#それとも掛け算に * 割り算に / を使っていることを問題にされているのでしょうかね?(たしかにこれは
>>826 とは違いますが)
Qは屁理屈だけは一丁前だなあ 糞コードしか書けない癖に
>>882 846 < /dev/nullで終了しないんだが。
こ れ も 仕 様 で す か あ ?
887 :
デフォルトの名無しさん :2011/07/19(火) 00:58:23.91
(1)c言語(2)問題:ベースを基にビットを左に回転させるleft_rottate関数を追加しプログラムを完成させよ。 実行結果: 数値f0f0のビット状態 1111000011110000 3ビット回転させました 数値8787のビット状態 1000011110000111 ベース #include <stdio.h> void print_bit(unsigned short int x); //プロトタイプ宣言 int main(){ unsigned short int usi; usi = 0xf0f0 ; print_bit(usi); return 0; //システムに値0を返す } void print_bit(unsigned short int x){ int length , i , mask ; mask = 1; length = sizeof(x) *8; mask =mask << (length -1); printf("数値%xのビット状態\n",x); for(i = 1;i<= length ; i++){ if(x & mask){ printf("1"); }else{ printf("0"); } mask =mask >> 1; } printf("\n"); }
889 :
デフォルトの名無しさん :2011/07/19(火) 01:20:14.32
>>888 なあんだ。そんな事もわからずに。
ル ー プ は 仕 様 で す 。 き り り っ
ル ー プ は 仕 様 で す 。 き り り っ
ル ー プ は 仕 様 で す 。 き り り っ
ル ー プ は 仕 様 で す 。 き り り っ
ってやってたんですかあ?
>>889 たしかに。先読みの落とし穴に嵌っていました。
一連のご指摘感謝いたします。
891 :
デフォルトの名無しさん :2011/07/19(火) 02:15:12.83
>>888 何でもいいんですが、問題読みました?
まぁgetchar()のほうがいいのかもしれないけど、問題に書いてある以上はscanf
を使うべきなのでは?
まぁ質問のご本人様がいいと言えばそれまでなんですけど。
>>865 です
プログラムを商品名のみ入力するように変更して
完成させることができました
ですが、商品名と価格を同時に入力することは不可能なんでしょうか?
アドバイスおねがいします
895 :
デフォルトの名無しさん :2011/07/19(火) 03:05:03.61
[1] 授業単元: プログラム演習 [2] 問題文(含コード&リンク): 次の表のデータを構造体(shouhin)に格納して、商品コードを入力し、 該当する商品が見つかった場合には、その商品のコード、商品名、価格、販売数、販売額(価格×販売数)を 実行結果のように表示するプログラムを作成せよ。 なお、該当する商品があ見つからなかった場合のみ「見つかりませんでした」と表示してプログラムを終了する ┏━━━━━━┯━━━━━━━━┯━━━━━┯━━━━━┓ ┃商品コード │商品名 │価格 │販売数 ┃ ┃code │name │price │number ┃ ┃ │ │ │ ┃ ┃fm1 │フラッシュメモリ │1500 │27 ┃ ┃hu2 │ハブ │23000 │8 ┃ ┃mo3 │マウス │2560 │12 ┃ ┗━━━━━━┷━━━━━━━━┷━━━━━┷━━━━━┛ [実行結果] 商品コードを入力:hu2(キーボードからの入力) 商品コード 商品名 価格 販売数 販売額 ---------------------------------------------- hu2 ハブ 23000 8 184000 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C [4] 期限: 今週末まで 上手く書きこみ出来てるか不安ですが…どなたか宜しくお願いします。
rm /dev/null やった時にはどうしようかと思った
902 :
デフォルトの名無しさん :2011/07/19(火) 20:30:26.73
903 :
デフォルトの名無しさん :2011/07/19(火) 20:43:52.62
>>720 すいません、このプログラムを
while文をつかって書いていただけませんか
C言語を初めて一ヶ月の初心者なので簡単にお願いします
>>904 #include <stdio.h>
int main()
{
float sum = 0, max = -1, min = 10000, val;
int num;
for (num = 0; scanf(" %f", &val) == 1 && val > 0; num++) {
if (max < val)
max = val;
if (min > val)
min = val;
sum += val;
}
printf("入力人数: %d\n", num);
if (num > 0) {
printf("最大値: %f\n", max);
printf("最小値: %f\n", min);
printf("平均値: %f\n", sum / num);
}
}
whileか #include <stdio.h> int main() { float sum = 0, max = 0, min = 10000, val; int num = 0; while (scanf(" %f", &val) == 1 && val > 0) { if (max < val) max = val; if (min > val) min = val; sum += val; num++; } printf("入力人数: %d\n", num); if (num > 0) { printf("最大値: %f\n", max); printf("最小値: %f\n", min); printf("平均値: %f\n", sum / num); } }
ル ー プ は 仕 様 で す 。 き り り っ ル ー プ は 仕 様 で す 。 き り り っ ル ー プ は 仕 様 で す 。 き り り っ ル ー プ は 仕 様 で す 。 き り り っ なんて言ってるうんこの書いたコードなんか誰も使いたがらないのは当然。
909 :
905,906 :2011/07/19(火) 21:33:48.59
>>904 >>905 ,906を使うための条件
1 このスレ(または次スレ)に↓を書き込むこと。
QZ死ね。てめーのうんこコードなんか単位落とすことになったって使わねー。
2 次回の質問の時は↓これを制限とすること。
[5] その他の制限: QZは邪魔だから回答しない事
910 :
デフォルトの名無しさん :2011/07/19(火) 21:38:07.87
>>908 >>722 はQZじゃない。
・int main(void) とは QZ はかかない。
・末尾が /* end */ じゃない。
・ループ後の結果表示で if (r == 1) { } という意味不明なことは QZ はしない。
・ループ内での最小値・最大値のキープで、if (n == 0 || h < min) という小粋なことは QZ はできない。
>>909 >>905 > max = 0, min = 10000,
ぷぷぷ。
最小値が 10001 だったり、最大値が -1 だったりすると破綻しますね。
QZの煽りが成長してきたことを嬉しく思うw
>>906 float sum = 0,
printf() で出力するのに、double ではなくわざわざ float とした根拠を示してください。
914 :
デフォルトの名無しさん :2011/07/19(火) 21:46:59.84
最大値が-1はありえない。そんなヘボだから。 ル ー プ は 仕 様 で す 。 き り り っ ル ー プ は 仕 様 で す 。 き り り っ ル ー プ は 仕 様 で す 。 き り り っ ル ー プ は 仕 様 で す 。 き り り っ なんて、墓穴掘っちゃうんだよ。www
915 :
デフォルトの名無しさん :2011/07/19(火) 21:48:52.79
>>913 ル ー プ は 仕 様 で す 。 き り り っ
ル ー プ は 仕 様 で す 。 き り り っ
ル ー プ は 仕 様 で す 。 き り り っ
ル ー プ は 仕 様 で す 。 き り り っ
なんて言ってるバカに説明してやる義理はねー。
>>885 すいませんが
8行目の while (n) という ところの nっていうのはなにを表している
のでしょうか
>>914 では最小値は?最小値が 10001 は probable ではないにしても possible でしょう?mix = 10001 なんてうかつに書いていいのかなあ。
>>885 なんどもすいません
a[] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1}, *p = a;
上の{}とかを使わないで宣言って出来ませんかね
習っていないというか 見たことがなかったので
920 :
デフォルトの名無しさん :2011/07/19(火) 21:57:22.43
>>917 指摘されなきゃ、-1が有りえないと気付かないバカ。mixってなんだよ。ww
>>918 指摘されなきゃ、ループに気付けないバカには教えてやんね。
>>920 ぷぷぷ。
***最小値が 10001 だったり***、最大値が -1 だったりすると破綻しますね。
>教えてやんね。
日本語は正確に。「わからない」「考えていなかった」と書きましょうね。
あと、float をあえて使う場面はそうそうない。浮動小数点は double がデフォと学校で習いませんでしたか?
922 :
デフォルトの名無しさん :2011/07/19(火) 22:03:28.35
925 :
デフォルトの名無しさん :2011/07/19(火) 22:10:08.50
>>921 これだけ指摘されても、最大値が-1はありえないって、まだ気付かないのか?
可哀相なくらい 頭 悪 い ん だ な
926 :
デフォルトの名無しさん :2011/07/19(火) 22:15:14.88
> あと、float をあえて使う場面はそうそうない。浮動小数点は double がデフォと学校で習いませんでしたか? キミみたいな底辺PGは使う機会そうそう無いだろうけど、数値演算やってると不要な処でdoubleは使わないんだよ。
>>923 わかると思います
ただ課題の場所がwhile文を習った範囲なのでwhile文を使いたいと思ったから
質問しました
>>885 p++;
上みたいにすることで 一回ループしたら1万が5千に変わるという
解釈で良いのかなぁと思ったのですが
[] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1}, *p = a;
これの使い方がわからないので質問させていただきました
長文失礼しました
>>927 変数と、配列と、ポインタ(ついでに配列の先頭アドレス代入の初期化)
を一片にやってるだけ、分解すると
int n;
int a[] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1};
int *p = a;
んで、pってのは配列a操作用に宣言したポインタ、初期化時には配列aの先頭アドレスを指していて、
初期化の段階では *p で a[0] にアクセス出来る。
if文や%=除算の余りを求めてるのは
ループの中で枚数数えながら数えた金額を省いてる為、ここは
>>874 分かるなら大丈夫かな、
p++ってのは、ポインタpが指してる配列を次の要素へ進める、
a[0]を指してるならa[1]へ、a[1]を指してるならa[2]へ
while(n)ってのは、金額が無ければループを抜ける処理、
ループは偽になった時に抜けるわけだけど、C言語だと0も偽って判定される、
これを利用して、単にwhile(n)って書くだけで除算の余りを求めた時に金額が無くなれば(nが0になれば)ループを抜ける。
>>928 >C言語だと0も偽って判定される
ではなくて、Cには論理型はなく、0が偽、0以外が真。
>>928 ポインタとかならってなくて
使えないというか、使っちゃダメみたいなかんじなのですが
簡単に書くためには、ポインタとかを使わないと
931 :
930 :2011/07/19(火) 22:47:23.58
while文ではかけないのですか? すいません文が飛びました
932 :
928 :2011/07/19(火) 22:47:57.67
934 :
928 :2011/07/19(火) 23:02:42.90
すいません・・・ 配列ってやつも習って無いというか。。。 n, a[] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1}, *p = a; これを使いたくなくて(習ってない?[ ]とかっていう表現を) でも自分の勝手な解釈だと 12行目の p++ は↑の表現をしないと使えないと 思っていて ↑の奴を使わないときれいなループ文が作れないと思っているのですが どうなんでしょうか
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):入力された特定の名前だけすべて削除する関数を線形リストを用いて作成しなさい
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語:C++
[4] 期限: 今週末15:00~
strcmpで作成したプログラム (
http://codepad.org/c1rAAFnp ) では,
「 'strcmp' : 1 番目の引数を 'ORDER *' から 'const char *' に変換できません。」とエラーが表示されます
よろしくおねがいします
>>926 逆ですね。特殊な用途で float を使うことはあっても、普段、なんでもないプログラムでは double を使うものなんですよ。
>>906 のような単純な数値演算とやらで float をあえて使う理由はなんでしょうか?
>>925 >>846 に対して鋭い指摘を受けた際には、「これは凄腕ににらまれた、どーしよう(泣)」とおろおろしたものですが、
float を使ったり、max/min の拾い出しの際不用意に初期値を決めうちしたりするところからみると、アマチュアの私と大差ないレベルなんですねえ。(ほっ)
>>935 goto習っていて、配列を習っていないとは不思議なカリキュラムだ、、、、。
そういう後出しで条件付けていくのやめようよ。
配列を使わないなら、10000円から各金種の判定を並べていくことになり、ループにはならない。
と思って、すれを見返すと
>>874 >>876 ではだめなのかな?
/* CISC以外のプロセッサのことを考えるとC言語的にはfloatを使うのが正統です。 しかしdoubleは現在の殆どの処理系でfloatよりも効率的かつ高精度な 計算と結果になることでしょう。 プロセッサレベルでdoubleに対応できるようになったCISCプロセッサの 普及の賜物です。 */
943 :
デフォルトの名無しさん :2011/07/19(火) 23:22:22.38
>>937 お前のような数値演算に一生縁がなさそうなバカには、浮動小数点は頭使わず
double使っとけと教える。この方が教えるの楽だからな。
無警告でコンパイル通りますが何か? ループもしませんが何か? ww
>>942 それ、10年遅れてる。今なら普通SIMD演算使う。floatは並列度を2倍に出来る。
945 :
デフォルトの名無しさん :2011/07/19(火) 23:31:56.33
>>939 まだ理解できてないようだな。max = -1はありえない。
可哀相なくらい頭が悪い。
>>942 >C言語的にはfloatを使うのが正統です。
嘘ですねえ。
ISO/IEC 9899:1999 6.5.2.2.6
If the expression that denotes the called function has a type that does not include a
prototype, the integer promotions are performed on each argument, and arguments that
have type float are promoted to double.
具体的には printf() のような可変長引数の場合には float -> double の default argument promotions が適用されるんですね、C 言語的に。
これを見ても、普通は double を使うものだとわかりませんか?
なお、どこの馬の骨からわからないものを引用するくらいなら、ISO/IEC 9899 か JIS X 3010 から引っ張ってくることをお勧めします。
947 :
デフォルトの名無しさん :2011/07/19(火) 23:41:21.89
>>945 横レスだがちゃんとコード読んだらわかったわ
948 :
デフォルトの名無しさん :2011/07/19(火) 23:42:16.17
>>939 頭悪すぎてわからないようだから、これは教えてやる。
minを10000にしたのは質問者は確実にFLT_MAXを習っていないからだ。
maxが負になることは課題の制限からありえない。
でも、バカだから理解できないかもね。
>>946 char も short も普通は使わないとかいいだすのか?
引っ込め自演クズ
>>945 個々の問題をどうこういうのではなく、max/min の拾い出しに際して、不用意に初期値を決めうちすること自体が「浅はか」だと申し上げております。
今回に限って max = -1 がありえないことなど、どうでもいいことです。
952 :
デフォルトの名無しさん :2011/07/19(火) 23:46:36.57
>>950 宿題スレで質問者が習ってないコードを回答しても意味がない。
だから、てめーはクズって言われるんだよ。隔離スレに引っ込んでろ。
>>949 char や short は default argument promotions と何の関係があるのですか?
可能ならば、ISO/IEC 9899:1999 から該当箇所を引用して示してください。
954 :
デフォルトの名無しさん :2011/07/19(火) 23:47:23.72
>>936 X if (strcmp(node, n) == 0)
O if (strcmp(node->name, n) == 0)
955 :
デフォルトの名無しさん :2011/07/19(火) 23:48:41.50
>>952 だから定石だといっているのですが‥‥‥、他の方のコードをお読みになったことがないのですか?
957 :
デフォルトの名無しさん :2011/07/19(火) 23:53:38.66
>>946 floatを使うのは癖だ。お前のようなバカには一生無縁だから理解できない。
>>955 質問者が却下したことと、max/min 拾い出しの定石とは関係ないのですが‥‥‥。
>>954 ありがとうございます
コンパイルして起動させることができました
ただ、起動した後フリーズするのは何故でしょうか?
>>957 癖、ですか。つまり考えなし、「私は馬鹿です。」ということですね。よく理解できました。
962 :
デフォルトの名無しさん :2011/07/19(火) 23:56:15.44
>>956 脳内定石振り回すのは隔離スレの中だけにしろ。
963 :
デフォルトの名無しさん :2011/07/19(火) 23:57:58.35
>>960 救いようの無い馬鹿だなあ。隔離スレに引っ込んで出てくるな。カス。
>>949 ちょっと訂正ね。
>char も short も普通は使わないとかいいだすのか?
そのとおりです。理由なくして char や short を使うことはありませんね。char や short を使うのは **それなりの** 理由があるときだと思います。
特に理由がなければ int を使います。それが C のやりかた。
>>959 をどなたかよろしくおねがいしますm(___)m
968 :
デフォルトの名無しさん :2011/07/20(水) 00:22:28.12
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 目的: @構造体やポインタを利用して、データ構造を設計することができる。 A構造体をreturn文で返却する関数を作ることができる。 Bポインタを扱うことができる。 問題文: n個のデータを降順に並び変える関数を作成しなさい。 ただし、個数nを先に入力し、必要なメモリ領域を関数malloc()を 用いて確保すること。 すなわち、配列による宣言はせずに、ポインタで宣言する。 また、2つの変数の値を入れ換える関数swap()も作成すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:7/21 [5] その他の制限:特になし お手数ですが、よろしくおねがいします。
970 :
デフォルトの名無しさん :2011/07/20(水) 00:36:23.08
>>969 void del_order_by_name(ORDER **node, char *name)
ではなく、
void del_order_by_name(ORDER *node, char *name)
としたいんですが、アドバイスをおねがいします
http://homepage1.nifty.com/eggs/narcis.html 自己愛性人格障害とはなにか
なんでも自分の思い通りになるという空想に耽ったりします。内容的には、自分の万能感を満たすような
ものになります。すべて自分にとって都合のいいように事が運んで、最後には自分が絶大な称賛を浴びると
いったようなものです。自分だけが特別に評価されて大抜擢され、とんとん拍子に出世するとか、もっと
空想性が進んで行くと、超能力的な力で現実を思い通りに動かすとか、あるいは過去にタイムスリップして、
時代差から来る優越感に浸るとか、いろいろなパターンがあります。たとえば自衛隊が関ケ原の決戦に参戦
したらどうなるかなどという空想は、圧倒的な文明の差による優越感に浸ることができます。
聞かれもしないのに、やたらと自分のことをしゃべりたがる人がいます。話が他へ移ろうとすると、強引に自分の
話に戻そうとします。話の内容は自慢話的なものばかりで、聞いている方はうんざりしてきます。他人にはあまり
関心がないので、相手がうんざりしていようとお構いなしです。
自分は特別な人間だ、パンピー(一般のピープル)とは違うんだという意識から、小市民的な生き方を軽蔑し、
そういう人達と一緒にされることを嫌います。裏付けとなるものがなにもないのに、一目置かれる存在であることに
非常にこだわります。
975 :
デフォルトの名無しさん :2011/07/20(水) 01:08:03.84
>>972 迅速な解答ありがとうございます!
すごく助かりました。
>>974 ORDER *del_order_by_name(ORDER *node, char *name) {
↑
>>971 が希望してんのは
void del_order_by_name(ORDER *node, char *name)
だからポインタが余計じゃね?
>>977 んー、確かにその点で困ってしまっています。
リストに増減が発生する際には、二重ポインタを使うか、再帰にして呼び出し元にポインタを返すことしか思いつきませんでした。
実際、どうすればいいんでしょうね。
979 :
デフォルトの名無しさん :2011/07/20(水) 01:36:14.73
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 目的: @構造体やポインタを利用して、データ構造を設計することができる。 A構造体をreturn文で返却する関数を作ることができる。 Bポインタを扱うことができる。 問題文: プロフィールを入れる構造体を定義し、 その構造体に値を入れる関数と、 メンバの値を表示する関数を作成しなさい。 ただし、呼び出し側では構造体の配列を宣言して、 複数人のプロフィールを入れた例を示しなさい。 プロフィールとする項目は自由に決めて良い。 ただし3つ以上の型を使用すること。 プロフィール例 氏名:char name[] 電話番号:char phone[] 血液型:char blood[] … [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:7/21 [5] その他の制限:特になし お手数ですが、よろしくお願いします。
>>976 皮肉を言われてる事にも気づけない馬鹿な奴
>>980 そうです。お手上げです。ちょっと創造がつきません。
>>981 いつもの自己愛なんぷら〜はもう飽きましたので、新しいネタで考えていただけないでしょうか。
>>982 お前を楽しませるために書いてるわけじゃないから
ネタでもないから
お前が飽きようが関係無い
事実を突きつけるのみ
>>982 出来ない癖に偉そうに「新しいネタで考えていただけないでしょうか?」とか馬鹿じゃねーの?
>>971 はお前の宿題な
時代遅れのPentiumIII850MHzノートで頑張ってくださいね〜
986 :
デフォルトの名無しさん :2011/07/20(水) 02:08:23.18
>>965 てめーが
>>722 が以前に書いたのをぱくってるだけだろ。うんこソースで定石語るな。クズ。
>>966 バカめ。charやshortなどintより小さいサイズとfloatのようにintより大きいサイズとは前提が異なる。
常にメモリは必要最小限にすることが重要。したがって浮動小数点の推奨型はfloat。
987 :
デフォルトの名無しさん :2011/07/20(水) 02:12:23.82
>>971 出来なくはないけど、課題で条件付けられてるんじゃなければお勧めしない。
それでもそうしたい?
>>987 やってやればいいんじゃねーの?
減るもんじゃねぇし
>>987 出来ないなら出来ないと言えよ
頭悪い癖に
>>986 80x86 単体でエミュレートライブラリをリンクしなければならない環境ならともかく、
8087ndp の時代から double 単位で 64/80bit スタックレジスタにのっけることができるというのに、それでも 32bit float ですか。
pentium 以降、fadd/fsub/fmul/fdiv は、オペランドのサイズに関わらず(たしか)同クロックだというのに、それでも 32bit float ですか。
まあ x86 だけが世界ではないとは思いますが、
>>946 で示したように、条件によっては float -> double の変換が無駄にかかるというのに、それでも float ですか。
>floatのようにintより大きいサイズ
ちなみに float と int は今は同じサイズ。念のため。
できるんなら得意げに出すべき
こんなチョロイ煽りで顔真っ赤にして怒るなよQさんww
994 :
デフォルトの名無しさん :2011/07/20(水) 03:15:58.24
チョロQ並のチョロさだぜ
>>926 技術計算コードを10年以上書いてきたけど float を使った事は一度も無いな
メモリ消費を意識しなければならなかった20〜30年前はどうか知らんけど
>>978 先頭のノードはダミーで next しか有意ではないってお約束にするくらい?
すんごくダサいけど
>数値演算やってると不要な処でdoubleは使わないんだよ。 本物の馬鹿だコイツ
しかし、まあ、Cって複雑な言語だね。
>>995 メモリ消費を意識しなくていい領域しか経験してないってことだな。
floatだけじゃなくて、doubleも使ったことが無いんだろ。ww
∧,,,∧ ( ・∀・) 1000ならジュースでも飲むか ( ) し─J
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。