3 :
デフォルトの名無しさん :2009/11/14(土) 20:55:42
前スレの
>>999 ポインタがある時点でJavaよりCのがキツイだろ
C++に至っては苦行だ
999 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/14(土) 20:53:39 BASICが出来てパソコン大学小学生 Cが出来て中学生 C++が出来て高校生 Javaが出来て大学生
ポインタは確かに難しい。中学生で初等幾何や方程式でザセツする 人が多いのと同じ。しかし、ポインタが使えない言語の難しさは すぐにはわからないだけ
でも俺はポインタに引っかかった記憶もオブジェクト指向に引っかかった記憶もない
それが普通。
というか単にセンスが無いだけ
ポインタが使える=低級とかつては言われていたが、今では 初等的と呼ぶほうが良いかも 初等的が簡単というのは嘘。初等的なもののほうが高等なもの に較べて難しいことが多い。負の数の概念を知らない小学生 が鶴亀算に苦労することでわかる。 じゃ高等的なものが易しいのかと言えばこれも嘘。まったく 別の次元の難しさがあるだけ。
プログラム言語における低級の意味を勘違いしてるように見える。
>>10 ハードウェアにソフトウェアが相当に組み込まれている現在
古いハードウェアに近い記述が出来ること=低級じゃないだろ?
ハードウェアと切り離されて一人歩きしつつあるのがプログラ
ミング言語
そもそもC言語って高級言語だろ
今やあらかたのプロセッサのアセンブラすら低級言語じゃないもの が多い
逆に言語に合わせて CPU 作ったらどうか。 CPU の構造をってことね。
>>14 既にある
LISPマシンとかJavaネイティブマシンとか
CPU に合わせた言語を作る→使いにくいのでそれを利用した 高級言語が出来る→ OSが発達してプログラマに言語派閥が出来るW → CPUメーカーも言語に合わせた便宜を計る →CPUが巨大化してハードとソフトの境界線が曖昧になる →ソフトウェア技術者が居なくなってOSがハードが主体になる →衰退 この歴史の繰り返しだろw
17 :
前959 :2009/11/15(日) 02:58:51
>>前950 >>前988 printf("1ドル=%fポンド, (float)doll/pond); printf("1ドル=%fポンド, (float)pond/doll); の、どっちかしか無いだろ。
ドル円のレートとポンド円のレートから、ドルポンドのレートを求めるんじゃないかと思うんだが。
19 :
前959 :2009/11/15(日) 03:31:35
ポンドドルは求めないと言ってないから。不要なら削除、 #include <stdio.h> int main(void) { int doll=90, pond=149; printf("1米ドルと1英ポンドの値を入力してください > "); scanf("%d%d", &doll, &pond); printf("1ドル=%d円, 1ポンド=%d円\n", doll, pond); printf("1ドル=%fポンド\n", (float)doll/pond ); printf("1ポンド=%fドル\n", (float)pond/doll ); return 0; }
問題を正しく書いてほしい 正しい日本語で・・・
>>4 その例えに反対する人の考えが異常とは言えないけど
それぞれの言語には長所も短所もあるし、オールマイティー
な言語は無いと考るのは正しいと思う
>>14 Intel系とC言語とは、互いに相手に合わせてるけどな。
>何度やっても上手くいきません。
どこまで出来たか
>>1 のアップローダーに上げてみたら
それに、レポートに2chのURL載せることになるんじゃないの・・・
#include <stdio.h> int main(void) { int i, flg = 1; double pi = 0.0, a = 1.0/2, b = 1.0/3; for(i=0; i<=100; i++, a/=4, b/=9, flg*=-1) pi += flg * 4 * (a + b) / (2 * i + 1); printf("%.8f\n", pi); return 0; } パイだけ。
intの割り算で0になってるから 1.0にするとか(double)でキャストするとかしないと
>>26 解答ありがとうございます。
しかし、問題のページにあるように"flg"というものはまだ習っていなくて
使ってはいけないことになっています。
そのため問題のページ21以降のヒントに書いてあるやり方でなくてはならないようです
どうぞよろしくお願いします。
for(i=0; i<=100; i++, a/=4, b/=9) { if(i%2) pi -= 4 * (a + b) / (2 * i + 1); else pi += 4 * (a + b) / (2 * i + 1); }
>>28 ,30
ありがとうございます
>>28 もう少し詳しくお願いします。
f+=4*(-1/(2*j+1))*(c+d); //fはnが奇数の時の近似値の合計です
ここのどこの箇所でしょうか?
-1/(2*j+1) -1とjはint
>型変換に注意(第3回で学習). これ
>>25 ,26,28,30,32,33
ありがとうございます解決することができました。
>23 echo_server.c:93 初期化されていないport port = PORT;とかport = atoi(argv[1]);とかやるんじゃないのか ERRが既にdefineされている 一般的にはif ( foo() == ERR )ではなく、if ( foo() < 0 )が使われる
>>36 #include <iostream>
#include <string>
class Human{
public:
std::string name;
double height, weight;
Human(std::string, double, double);
};
Human::Human(std::string name, double height, double weight){
this->name = name;
this->height = height;
this->weight = weight;
}
int main(){
Human member("田中太郎", 170.5, 68.4);
std::cout<<member.name<<"さんの身長は、"<<member.height<<"cmで、体重は、"<<member.weight<<"kgです。"<<std::endl;
return 0;
}
>>37 >printf("%d個の整数を昇順に入力してください。\n", nx);
printf("%d個の整数を降順に入力してください。\n", nx);
>while(x[i]<=x[i-1]);
while(x[i]>=x[i-1]);
>else if(a[pc] < key)
else if(a[pc] > key)
>>40 迅速な対応に感謝します。
ありがとうございました。
42 :
デフォルトの名無しさん :2009/11/15(日) 22:57:19
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 下記の文字列を2次元配列に入力する。 LISP C++ Ada 次に配列の2列の文字 S+a を表示する。 [3] 環境 [3.1] OS:Windows XP [3.3] 言語C++ [4] 期限:明日まで [5] その他の制限:特にないです。 お願いします
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題1 整数型の変数x, y, z を用意し,それぞれに1 ,2, 3 を代入せよ.その後,整数型の変数ans に合計を代 入せよ.その値をprintf で表示せよ. 問題2 半径r = 5 の円の演習L,面積S を求めるプログラムを作成せよ.ただし円周率は3.14 とする. 問題3 整数型変数a=255,b=16 としたとき,a+b, a-b, a*b, a/b を求めprintf で表示せよ.適切な形式で結果 が表示されるようにすること. [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2009年11月17日まで] [5] その他の制限:問題数多いですが、お願いします。
>>43 問題1
#include <stdio.h>
int main(void)
{
int x, y, z, ans;
x = 1;
y = 2;
z = 3;
ans = x + y + z;
printf("%d", ans);
return 0;
}
問題2
#include <stdio.h>
int main(void)
{
int r = 5;
printf("L=%f S=%f", 2 * r * 3.14, r * r * 3.14);
return 0;
}
問題3
#include <stdio.h>
int main(void)
{
int a = 255, b = 16;
printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
printf("a / b = %d\n", a / b);
return 0;
}
46 :
デフォルトの名無しさん :2009/11/16(月) 00:25:32
3元3列の連立方程式の係数を格納し、格納された結果を表示するプログラムを作成せよ。ただし次の2つのパターンでプログラムせよ。 係数を『初期化』を使って配列に入力する キーボードから入力する 形 a00x+a01y+a02z=α a10x+a11y+a12z=β a20x+a21y+a22z=γ #include <iostream> using namespace std; int main() { return 0; } って感じでお願いできませんか?本当に分からないんです
/ // / ト--ミ、、_::::::::::`:"'':―┼――――l // / / // /| ト--ミ、、_:::::::::::::`:"'':―┼――――l / / / / | ト--ミ、、_:::::::::::::::`:"'':―┼――――l `'ー-‐''" ヽ、_ .,ト--ミ、、_:::::::::::::::::`:"'':―┼――――l / /ミミ三三ミ'ー‐-- 、、_:::::::|:::::::::::::::::::::::j か っ .テ | .{ミミミ三三、 、ー=、`'┴―――fミ', // ァ て ン. | ミミミミミ三シ . . . . `―'ノ l ii l (ヲ lミil | 約 .プ ヽ!ミミミミf'" _,,.,,_:.:.:.:,. _j_ .:.:.:. lミリ / | 束 レ >!ミミO 。',ィでiンミ、:.:.、__, -,ィも=、',l:l′ | し 守 /,ヾミミ' o ,,゜, ̄`゙`ラ .:. 三 f"´ ̄゜o O | た ら |.へ}ミミ `二ニノ ,、 jl ',` ―''" ,l! | じ ず |二ノミ' u ,ィ'" ト、 ,! ッ .ゃ .に |fソ!'ミ / `^ヽ,_ノi " ,' / ! ! な 質 ',{i,ミ' / _,,...,_,,..,、l /. / い 問 ヽN, / ,ィiTTTTTト, ,} ,/ // / / で は ./. / ,/⌒'ー'‐'‐'‐',リ l /. / す し /'、ヽ .l {,ゝ、‐r‐'ン-i/ ,/ , イレ、、/ / な 〈 ヽ丶 丶 ヾくZェェェシ' ノ ,i'lヽ、 `ヾー--、_ い '⌒ヽ´ヽ 丶、 ` ` ‐ -- ‐'".,/ノ,l \ \ ヽ
>>45 問題3最後のprintfって型変換すべき?
49 :
46 :2009/11/16(月) 00:41:35
テンプレート使います [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 3元3列の連立方程式の係数を格納し、格納された結果を表示するプログラムを作成せよ。ただし次の2つのパターンでプログラムせよ。 係数を『初期化』を使って配列に入力する キーボードから入力する [3] 環境 [3.1] OS:xubuntu [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:[2009年11月17日まで] [5] その他の制限:配列を使ってやるっていうのと、cout→出力、cin→入力って感じですね。あと、上にも書いた始まりと終わりを46に書いた、あの様にしてくれると(もしかしたらcmathは入るかもしれませんが)ありがたいです。
[1] 授業単元:C言語基礎 [2] 問題文(含コード&リンク): 1.数値の入力されたテキストファイルを引数から読み込み、合計を求めるプログラムを作れ。 各行を2次元配列に格納する。何も入力されてない行か、0のみの行があれば読み込み終了。その後計算を行う。 〜入力ファイル例〜 908 29 3095 5968 のように改行で終わるか、 9824 2554 4869 0 で終了 2.テキストファイルを引数から読み込み、中のデータの順を入れ替えて出力。 〜入力例〜 あいう えお 〜出力例〜 おえ ういあ コマンドプロンプト上に出力し、さらに「入力ファイル名-out.txt」の形でファイル出力も行え [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C言語 [4] 期限: 11月20日正午
51 :
デフォルトの名無しさん :2009/11/16(月) 00:49:40
>>42 #include <iostream>
int main()
{
char array[][5] = {"LISP","C++","Ada"};
for (int i = 0; i < 3; i++) {
std::cout << array[i][2];
}
std::cout << std::endl;
return 0;
}
>>48 整数変数同士の/の結果は整数なのがC言語の規格。
型変換をしたら問題に反することになる。
53 :
デフォルトの名無しさん :2009/11/16(月) 01:15:51
54 :
デフォルトの名無しさん :2009/11/16(月) 01:43:59
[1] 授業単元:画像圧縮 [2] 問題文(含コード&リンク):配列[ysize][xsize]内にある値を順番に符号化してゆく [3] 環境 [3.1] OS:windows xp [3.2] コンパイラ名とバージョン: Microsoft Visual C++ [3.3] 言語: C++ [4] 期限: 2009年11月19日23:59まで 画像圧縮に詳しい方お願いします。 研究課題の一つでjpeg圧縮の符号化部分についてです。 今の段階はレベルシフト、DCT、量子化を終えた後で、8x8=64ブロックの量子化データを ジグザグスキャンし配列q[64]に格納しています。(現段階ではDC成分とAC成分は混同しています。) その後、各値に対しハフマン符号を割り当てるまでは思いつくのですが、実際に符号化し、ファイルに出力 するまでの流れが分かりません。 お願いします。
[1] 授業単元:Cプログラミング初級
[2] 問題文(含コード&リンク):
ttp://www-it.sci.waseda.ac.jp/CPR1/class12/20091026-submit.pdf "17ページ"に問題。17ページ以降に解答の手法の制限などの記述あり。
[3] 環境
[3.3] 言語:C言語
[4] 期限:11月16日
[5] その他の制限: 配列はまだ習っていない程度の知識、手法を用いて
昨日も質問した者ですが、"問題2"で詰まってしまいました。自分が書いたソースは
htp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10124.txt です
短いコードですが、どこの箇所で間違ってしまったのかご指摘お願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題 キーボードから3つの整数を入力し,その合計と平均を求めて表示しなさい. 問題 キーボードから3つの数値をfloat 型変数に読み込み,その合計と平均を求めて表示しなさい. [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2009年11月17日まで] [5] その他の制限:
♯include 〈studio.h〉 int main(void) 〔 float n1,n2,n3,sum,ave; puts("3つ数字いれろ"); printf();scanf(); printf();scanf(); printf();scanf(); sum ave printf(); return(0); } 携帯からだからこれが限界
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題1 長方形の面積を求めるプログラムを作成しなさい。 問題2 5人分の体重をキーボードから入力し、平均を求めるプログラムを作成しなさい。 問題3 平成の年を入力し,西暦に変換するプログラムを作成しなさい。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2009年11月18日まで] [5] その他の制限: 特になし。 よろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問1:キーボードから身長を入力し、170cm以上なら「高い」と表示し、 そうでなければ「低い」と表示するプログラムを作成しなさい。 問2:キーボードから身長を入力し、 180cm以上なら「高い」、 150cm以上、180cm未満なら「普通」、 150cm未満なら「低い」と表示するプログラムを作成しなさい。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2009年11月18日まで] [5] その他の制限: お願いします。
63 :
49 :2009/11/16(月) 12:24:31
連立方程式を解くのはは無視して下の問い(2つ)をやるらしいんです
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題 キーボードから10人分の身長を入力し、 180cm以上なら「高い」、 150cm以上、180cm未満なら「普通」、 150cm未満なら「低い」と表示するプログラムを作成しなさい。 問題 キーボードから10人分の身長を入力し、 合計と平均を計算し、表するプログラムを作成示しなさい。 (なお小数点以下は無視して下さい。) [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2009年11月18日まで] [5] その他の制限:
>>57 >for(k=1;k>1;k++){
これじゃループ実行されない
>l++;
lってどこから出てきたの?
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1から100までの数の合計を計算し、表示するプログラムを作成しなさい。 キーボードから10人分の身長を順次、配列に記録し、全部を入力してから、10人の身長を表示しなさい。さらに合計と平均を計算して表示するプログラムを作成しなさい。 ※配列を使う問題 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2009年11月18日まで] [5] その他の制限:
[1] 授業単元: ネットワークプログラミング [2] 問題文(含コード&リンク): あなたのマシンのIPアドレスを表示しなさい [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: どちらでも可 [4] 期限: 11/17 [5] その他の制限: 特になし ライブラリも好きなものを用いて良い。 ただし出来る限り簡潔に書くこと よろしくお願いします
[1]授業単元:プログラミング演習 [2] 1から100,000,000までの数を列挙する。 nまで書き終わった時点でそれぞれの数字dがtimes[d] (0<=d<=9)回使われていたとする。 times[d]が小さい順にdを並べて順列を作る。(同じ回数の場合dが大きいほうが後)この順列が最初累積何回変わったか nが1000の倍数毎の表にして出力(100000まで) 回数と順位を要素とする構造体配列を使うこと [3] Windows vista/Visual studio 2008/C言語 [4]本日中 ポインタは習っていません 急いでます。苦しいです。よろしくです。
>>69 自分のIPは203から始まるのに
127から始まるIPが表示されました
何かおかしいのではないでしょうか?
[1]授業単元:プログラミング演習 [2] 1から100000までの数を列挙する。 nまで書き終わった時点でそれぞれの数字dがtimes[d] (0<=d<=9)回使われていたとする。 times[d]が小さい順にdを並べて順列を作る。(同じ回数の場合dが大きいほうが後)この順列が最初からそれまでに累積何回変わったか nが1000の倍数毎に表にして出力(100000まで) 回数と順位を要素とする構造体配列を使うこと [3] Windows vista/Visual studio 2008/C言語 [4]本日中 ポインタは習っていません 急いでます。苦しいです。よろしくです。
#include <stdio.h> int main(void) { int i, j, k, times[10] = {0}, num[10], flg, cnt = 0; for(i=0; i<10; i++) num[i] = i; for(i=1; i<=100000000; i++) { for(j=i; j; j/=10) times[j%10]++; for(j=9,flg=0; j>0; j--) { for(k=0; k<j; k++) { if((times[num[k]] > times[num[k+1]]) || (times[num[k]] == times[num[k+1]] && num[k] > num[k+1])) { int temp = num[k]; num[k] = num[k+1]; num[k+1] = temp; flg = 1; } } } if(flg) cnt++; if(i%1000 == 0) printf("%d:%d\n", i, cnt); } return 0; }
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題1 二次元配列に九九の表をいったん格納する(初期化で代入することは禁じる)。その後、それらの値のルートをとった結果を表形式で出力するプログラムを作れ。 問題2 キーボードから50文字までの文字列(アルファベット、数字、記号の半角)を5つ入力する。入力がすべて終了したら、最後に入力した文字列から順番に出力するプログラムを 作成せよ。文字列は2次元配列に格納すること。 [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2009年11月18日まで] [5] その他の制限:
75 :
72 :2009/11/16(月) 15:17:03
>>73 大変助かりました。
ありがとうございます。恐縮です。ついでな質問で
申し訳ございませんが、codepadで実行を確認しました
が表示が多少変でした。timeoutは仕方がないと思ってます。
実行確認ページ
http://codepad.org/9lwH5O5S どこを直せばいいですか?あと構造体配列はtimesだと
書いて大丈夫ですよね
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題1 次の文章をプログラム中に文字列として与える. The metropolitan government and the Tokyo 2016 Bid Committee had a budget of 15 billion yen to campaign to host the Games, of which 10 billion yen was shouldered by the metropolitan government. アルファベット(ピリオド含む,大文字,小文字は区別しない),数字がそれぞれ何回出現したかをカウントして出力するプログラムを作成せよ [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2009年11月18日まで] [5] その他の制限:
// Part132_024 問題2 // #include<stdio.h> //#define scanf scanf_s #define pi 3.14159265 int main(void) { double pi6pi = pi*pi/6; double z=0, w=0, y=0; // z,w,yの詳細は以下で説明 int k; printf("Input the volume of error:"); scanf("%lf", &z); // zは実行の際自分で設定する誤差 for(k=1; ; k++) { w += 1.0/(k*k); // wはシグマの値 y = pi6pi - w; // yは評価の式の左辺の値 if(y < z) break; // ループを抜ける条件 } printf("The smallest integer is %d.", k); return 0; }
79 :
72 :2009/11/16(月) 17:48:22
>>73 さんのコードを提出しました。ありがとうございました。
>>82 「This is Anser
」をつけ忘れてしまいましたw特に問題はないと思います。。
84 :
デフォルトの名無しさん :2009/11/16(月) 22:21:25
3元3列の連立方程式の係数を格納し、格納された結果を表示するプログラムを作成せよ。ただし次の2つのパターンでプログラムせよ。 1.係数を『初期化』を使って配列に入力する 2.キーボードから入力する 聞いてみたら問題に、そうは書いてあるけど、連立方程式は考えないでよくて、下の1.2をやるみたいなんですが、どうやるか分かる人いますか? a00x+a01y+a02z=α a10x+a11y+a12z=β a20x+a21y+a22z=γ
85 :
デフォルトの名無しさん :2009/11/16(月) 22:23:37
ここまでやりましたが、違うみたいなんですが、あとどこをどう修正すればいいんですか? #include <iostream> using namespace std; int main() { int i,j; double a00,a01,a02,a10,a11,a12,a20,a21,a22; double a[3][3]={{a00,a01,a02},{a10,a11,a12},{a20,a21,a22}}; for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout("%9f",a[i][j]); } cout << '\n'; } cout << '\n'; for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout << "a[%d][%d] = i,j\n"; cin >> "%lf",&a[i][j]; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout << "%9f",a[i][j]; } cout << "\n"; } cout << "\n"; return 0; } 多分、%9fとか書いてる所が違うんですよね
>>56 レスありがとうございます。
その本は軽く目を通したのですが詳しすぎて理解出来ませんでした。
c++の知識はポインタまでをさらっと習った程度なので・・・
専門分野過ぎましたね。
88 :
デフォルトの名無しさん :2009/11/16(月) 23:42:16
90 :
デフォルトの名無しさん :2009/11/17(火) 00:42:45
>>87 ごめんなさい。ありがとうございます。何か連立方程式を解くって言うのを抜いて考えるらしくて、
普通に行列を2つの問の様に作るようなんです…
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク):入力した文字列中のアルファベットについて、大文字なら小文字、小文字なら大文字に変換するプログラムを作成せよ。 また、アルファベット以外の入力は全て'*'に置き換えるようにすること。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C [4] 期限: 2009/11/18まで [5] その他の制限:特にありません
>>93 #include <stdio.h>
#include <ctype.h>
#define BUFF_SIZE 512
int main()
{
int i;
char buff[BUFF_SIZE];
printf("アルファベットを入力してください\n> ");
fgets(buff, BUFF_SIZE, stdin);
for (i = 0; (buff[i] != '\0') && (buff[i] != '\n'); i++) {
if (islower(buff[i]))
buff[i] = toupper(buff[i]);
else if (isupper(buff[i]))
buff[i] = tolower(buff[i]);
else
buff[i] = '*';
}
printf("変換後の文字列: %s\n", buff);
return 0;
}
>>88 #include<stdio.h>
int main(void)
{
char c = 'y'; /* 名前の先頭のローマ字 */
char abc[] = "abcdefghijklmnopqrstuvwxyz!";
int i = 0;
while(abc[i] != c && abc[i] != '\0')
i++;
printf("%c\n", abc[i + 1]);
return 0;
}
97 :
デフォルトの名無しさん :2009/11/17(火) 06:42:59
struct meibo {char name[20];int eigo; int kokugo;} みたいな構造体でmeibo_t[]にループでどんどんデータを入れて生きたいのですがどうすれば良いですか? int a= 0; meibo[a]=みたいにするとエラーがでますし、何か[0]にどんどん数字が足されてるような気がします };
C言語なら俺に聞け(入門篇) Part 55
http://pc12.2ch.net/test/read.cgi/tech/1256818218/l5 #include <stdio.h>
int main(void) {
struct meibo {char name[20];int eigo; int kokugo;};
struct meibo meibo_t[10], meibo_s={"aaa", 60, 90};
int a;
for(a=0; a<10; a++) {
meibo_s.eigo = 60+a;
meibo_s.kokugo = 90+a;
meibo_t[a] = meibo_s;
}
return 0;
};
for(i=0; i<n; i++) scanf("%s %d%d", meibo_t[i].name, &meibo_t[i].eigo, &meibo_t[i].kokugo);
ありがとうございます
103 :
100 :2009/11/17(火) 15:48:21
#include <stdio.h> main() { double pai,k,N,x,y,z; pai=3.14159; k=1.0; x=(pai*pai)/6.0; y=0; z=0; z=x-y; while(z<0.01) { while(k<=N) { y+=1.0/(k*k); } } printf("最小のNは,%dです.\n",N); } で合ってますか?
あってません
105 :
100 :2009/11/17(火) 16:30:25
ですよね。。
106 :
デフォルトの名無しさん :2009/11/17(火) 17:32:26
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): ベクトルの加減、ベクトルの内積、2つのベクトルのなす角度cosθ 2つのベクトルを適当に初期化して行う事 [3] 環境 [3.1] OS:xubuntu [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:[2009年11月20日まで] [5] その他の制限:cout→出力、cin→入力、配列を使う事、 #include <iostream> using namespace std; int main() {で始めて return 0; }で終わるようにする。もしかしたらcmathとかくらい入るかも知れませんがこんな感じです
107 :
106 :2009/11/17(火) 17:34:14
書くの忘れてすみません。この3つのプログラム1つにまとめるんです。 あと、配列は一次元配列(もしかしたら二次元配列も使わないとできないかも)使います。
108 :
デフォルトの名無しさん :2009/11/17(火) 18:36:58
>100 削除されてる #include <stdio.h> main() { double pai,x,y,z; int k; pai=3.14159; k=0; x=(pai*pai)/6.0; y=0; z=x-y; while(z>0.01) { k++; y+=1.0/(k*k); z=x-y; } printf("最小の k は %d です.\n", k); }
[1] 授業単元 OSとC言語 [2] A1...Anさん(n>1)とN枚(N>1のカードがある。A1..Anさんは次の操作を 交代交代で平等な機会のもとに行う。 操作: カードをM枚(M<N)ランダム(予約済みを除く)に選択し カードが白紙状態なら鉛筆で自分の名前を書き、自分の経験値に1を足す カードに自分の名前が書いてあるならばそれを消しゴムで消して、 経験値に1を足す。 カードに他人の名前が書いてあるならばそれに関してはなにもし ないが、そのカードに関してはもういちど引くことが予約される。 経験値は各自最初は0とする。この操作が繰り返されていくとやがて 誰も経験値が増えない状態になることがある。nとNとMを適当に選んで どの位で(各自の経験値の平均が指標)そういう状態になるか多数回行って 統計的にそれを調査するプログラムを作ってください。 [3]Linux/gcc4.0/C言語 [4] 11/23まで よくわかってません。問題文写し間違いかもしれないのでよろしくです
111 :
110 :2009/11/17(火) 21:27:12
抜けてた一文を見つけました。 カードも初期状態では白紙とする
> そのカードに関してはもういちど引くことが予約される。 がよくわからないのですが。
>>112 例えばM=3として、1番と5番と10番のカードを引いて、1番と10番に
関しては名前を書いたり消したりすることができたが、5番には既に
他人の名前が書いてあったとする。この時、次の番にはもう一度5番を
引かなければならない
という意味じゃないかと
>>113 で、その5番は、また、次の時にも引いてこなければならないわけですか?
>>110 名前を書く、消す、次回回しにする
これらの操作は一つのカードに関して一回の機会で排他的に1回だけ
と解釈するしかなさそうだけどそれでもおkかどうかだな
117 :
23 :2009/11/17(火) 22:05:11
>>44 今日それをコンパイルして動かしてみたんだけどもクライアント側を移動させた場合
なぜか7回以上のキー入力を受け付けなくなってストップする
exitされたわけでもなくただフリーズした状態っぽい
あとクライアントの入力に対してちゃんとwriteもしくはサーバでreadできてないらしくて
サーバ側の画面に入力が反映されない。サーバ→クライアントはクライアントで7回入力するまでは問題無しでした
しっかりconnectできてました。ありがとう
>>61 なのですが明日までなので誰かお願いします。。
>>118 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, n, ans;
srand(time(NULL));
ans = rand() % 100;
for(i=1;;i++) {
printf("%d回目です。いくつだと思いますか?", i);
scanf("%d", &n);
if(ans > n) printf("もっと大きいです\n");
else if(ans < n) printf("もっと小さいです\n");
else break;
}
printf("当たりです\n");
return 0;
}
>>120 #include <time.h>っていらないんですか?
123 :
デフォルトの名無しさん :2009/11/17(火) 23:25:04
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 文字列GHIJKLMABCDERSTUVWFNOPQXYZに対して入力した文字列の第1文字目と第2文字目の間にある文字列を表示するプログラムを作る。 例:入力文字列がCQであったときCDERSTUVWFNOPQを表示する。 [3] 環境 [3.1] OS:Windows XP [3.3] 言語C++ [4] 期限:19日まで
>>123 #include<string>
#include<iostream>
int main(void)
{
std::string str="GHIJKLMABCDERSTUVWFNOPQXYZ";
int first, second;
char first_char, second_char;
first_char='C';
second_char='Q';
std::cin >> first_char;
std::cin >> second_char;
if((first=str.find(first_char))==std::string::npos) return 1;
if((second=str.find(second_char))==std::string::npos) return 1;
for(int i=first;i<=second;i++) std::cout << str[i];
for(int i=second;i<=first;i++) std::cout << str[i];
return 0;
}
126 :
125 :2009/11/17(火) 23:41:44
>>123 125の訂正
#include<string>
#include<iostream>
int main(void)
{
std::string str="GHIJKLMABCDERSTUVWFNOPQXYZ";
int first, second;
char first_char, second_char;
std::cin >> first_char;
std::cin >> second_char;
if((first=str.find(first_char))==std::string::npos) return 1;
if((second=str.find(second_char))==std::string::npos) return 1;
for(int i=first;i<=second;i++) std::cout << str[i];
for(int i=second;i<first;i++) std::cout << str[i];
return 0;
}
128 :
デフォルトの名無しさん :2009/11/17(火) 23:55:01
130 :
125 :2009/11/18(水) 00:11:01
>>126 訂正
for(int i=second;i<first;i++) std::cout << str[i];
↓
if(first!=second) for(int i=second;i<=first;i++) std::cout << str[i];
もうダメだ寝る
132 :
◆DOp/dR22WY :2009/11/18(水) 05:48:04
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク):txtファイルを複製するGUIプログラムを作りなさい [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:borland [3.3] 言語:どちらでも可 [4] 期限:11月18日10時まで(無茶な期限で申し訳ありません) [5] その他の制限:要望なのですが、OKボタンを押すとコピーができるようなものになっているとありがたいです。
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク):txtファイルを複製し、新たなtxtファイルを作るGUIプログラムを作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:borland [3.3] 言語:どちらでも [4] 期限:11月18日朝10時(無茶ですが、よろしくお願いします) [5] その他の制限:要望なのですが、起動するとコピーするか否かを問われ、OKボタンを押すとコピーするようなものだとありがたいです。細かいニュアンスはこちらで変えられます。
投稿ミスだと思って同じものを2度書いてしまいました。 申し訳ありません。
>>135 期限:11月20日朝10時30分 でした
137 :
137 :2009/11/18(水) 10:33:17
// 5つのデータを入力して、最大のものを表示出力するように変更せよ。 #include<stdio.h> main(){ int a,b,min,k; scanf("%d", &a); min = a; k=0; do{ scanf("%d", &b); // if(min > b) if(min < b) min = b; k++; } //while(k<2); while(k<4); printf("%d\n", min); } // for文を用いて書き換えよ。 #include<stdio.h> main(){ int a,b,min; scanf("%d", &a); min = a; for(;;){ scanf("%d", &b); if(b <= 0) break; if(min > b) min = b; } printf("%d\n", min); }
多重繰り返し文を使って,z=1-(x2+y2)とz=0平面とで 囲まれる領域の体積の近似値を求めよ. です。よろしくおねがいします。
141 :
デフォルトの名無しさん :2009/11/18(水) 11:09:23
[1] 授業単元:C言語 [2] 問題文: 整数値として入力された数を素因数分解するプログラムを作成せよ。 表示は、612 = 2^2*3^2*17のようにする、これは2の2乗×3の2乗×17という意味である [3] 環境 [3.1] OS:WindowsXP [3.2]visual studio2008 [3.3] 言語:C [4] 期限:11月18日20時、無理な期限ですいません 普通に全部×で表示するものはできたんですが、612 = 2^2*3^2*17と^をつかい、〜の何乗と表現するやり方がわかりませんでした。 よろしくおねがいします。
142 :
44 :2009/11/18(水) 11:10:12
>>117 俺の環境では何の問題無し。
gdbとコンパイル仕方ググってみたら?
>>141 #include <stdio.h>
int main(void)
{
int i, j, n;
scanf("%d", &n);
printf("%d = ", n);
for(i=2;;i++) {
for(j=0;n%i==0; j++) n/=i;
if(j) {
if(j==1) printf("%d ", i);
else printf("%d ^ %d ", i, j);
if(n==1) break;
printf("* ");
}
}
return 0;
}
148 :
水羽 :2009/11/18(水) 13:31:25
それほど長くないアドレス帳の製作をお願いします。
149 :
デフォルトの名無しさん :2009/11/18(水) 14:30:58
[2] 問題文: opencvのテンプレートマッチングのテンプレート画像を4つにして 4つの画像で比較したうち 一番近い一致度を表示するプログラム [3] 環境 [3.1] OS:WindowsXP [3.2]visual studio2005 [3.3] 言語:C++ [4] 期限:11月21日 お願いします。
151 :
106 :2009/11/18(水) 21:22:44
19日まででしたすみません
>>150 #include <stdio.h>
int main( )
{
char name[16];
char m[] = "hoge";
char n[] = "fuga";
memset( name, 0, sizeof( name ) );
sprintf( name, "%s%s", m, n );
printf( "name=\"%s\"\n", name ) );
return 0;
}
string.hのインクルードが抜けてた。 #include <stdio.h> #include <string.h> int main( ) { char name[16]; char m[] = "hoge"; char n[] = "fuga"; memset( name, 0, sizeof( name ) ); sprintf( name, "%s%s", m, n ); printf( "name=\"%s\"\n", name ) ); return 0; }
ありがとうございました
38です。 2、3まででも構いませんので、どなたかよろしくお願いします。 [1] 画像処理プログラム [2] 1 画像を読み込む 2 1の任意の箇所の隣接した同系色を範囲選択 3 読み込んだ画像の任意の箇所から色を抽出 4 2で選択した範囲を3の色で塗りつぶす 5 結果を出力する [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: どちらでも可 [4] 期限: 09/11/30 [5] その他の制限: 制限なし
[1] 授業単元:C++実習 [2] 問題文(含コード&リンク):分数クラス 分数を扱うクラスを作成する。クラス名前はBunsu。データメンバはint型でbunshiとbunboでprivateとする。 コンストラクタにより初期化をおこなう。初期値が指定されなかったときはデフォルトコンストラクタでbunshi,bunboとも1で初期化すること。 またBunsuクラスの振る舞いをテストする適切なmain関数も作成すること。1ファイルで作成してください。 作成するメンバ関数 ・コンストラクタ ・デフォルトコンストラクタ ・bunboを返すGetbunbo ・bunshiを返すGetbunshi ・bunboに代入するSetbunbo ・bunshiに代入するSetbunshi ・分数を加算する Addbunsu 加算した結果を約分してbunshi,bunboに設定する。 [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C++ [4] 期限:[2009年11月22日23:00まで] [5] その他の制限:特にありません。 よろしくお願いします。
[1] 授業単元: アルゴリズム&アプリケーション [2] 問題文(含コード&リンク):売掛表がcsvファイルで作られています。 各行の情報は、 顧客名,前月繰越高,当月入金高,当月売上高,締め日付 であり、締め日付で昇順に整列していて、見出し等冗長部分はありません。 今回は問題を単純化するため、一人の顧客分しか扱わないことにします。 さて更新プログラムのバグから、或る月の前月繰越高が その前月の 前月繰越高-当月入金高+当月売上高 と不整合になってしまいました。 不整合になった以降の情報が正しく、 それ以前の情報の当月入金高、当月売上高、締め日付については誤りがないとして、 1) 不整合部分を探し 2) それ以前のすべての前月繰越高を全体が整合するように書き換えなさい。 ファイルは一旦別のファイル(例えば/tmp/xxxxxx)に正しいものをつくり、 その後、元のcsvファイルに書き戻しなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 期限はありません [5] その他の制限: 日付などの持ち方は自由に工夫してよい。
[1] 授業単元: プログラム演習V [2] 問題文(含コード&リンク): 整数nを読み込み、最外周の長さnの数字のとぐろをまいた図を出力するプログラムを作りなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今月の30日まで [5] その他の制限: 特にありません よろしくお願いします
>>158 で
例 n=22の時
1111111111111111111111
2
45555555555555555555 2
4 6 2
4 8999999999999999 6 2
4 8 0 6 2
4 8 233333333333 0 6 2
4 8 2 4 0 6 2
4 8 2 67777777 4 0 6 2
4 8 2 6 8 4 0 6 2
4 8 2 6 0111 8 4 0 6 2
4 8 2 6 0 2 8 4 0 6 2
4 8 2 6 0 8 4 0 6 2
4 8 2 6 999998 4 0 6 2
4 8 2 6 4 0 6 2
4 8 2 5555555554 0 6 2
4 8 2 0 6 2
4 8 11111111111110 6 2
4 8 6 2
4 777777777777777776 2
4 2
3333333333333333333332
はこんな感じになります
_______________|__________________ _________|_______ ________|__________ ______|_______ ______|______ _______|_______ ______|_______ | | | | | | | | 川 ヒ 猪 小 三 カ 桜 健 田 ク 木 川 沢 レ 庭 介 ソ 直 リ ン 也 ン 補欠 橋本 中西 秋山 神取 さて!!!この結果どうなる??? 選手は好きに使っていいよ!!
161 :
デフォルトの名無しさん :2009/11/19(木) 14:11:01
[1] 授業単元:プログラミング言語 [2] 問題文(含コード&リンク): 次の式を積分するプログラムを作りなさい。積分範囲は考慮せず、無限に積分するプログラムを作成しなさい。 r = a*b+c*d [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: visual studio2005 [3.3] 言語: C言語 [4] 期限: 今年の11月23日 [5] その他の制限: 特になし
>>162 早い回答ありがとうございます。
助かりました。
>>158 #include<stdio.h>
#include<stdlib.h>
#define N_MAX 40
#define WRITE(x, y, v) ((x)>=0 && (x)<(n) && (y)>=0 && (y)<(n) && buf[y][x]==0 && (buf[y][x]=(v)))
int main(int argc, char *argv[])
{
char buf[N_MAX][N_MAX+1]={{0}};
int i, n, x=-1, y=0;
int vx[]={1,0,-1,0}, vy[]={0,1,0,-1};
n=22;
if(argc==2) n=atoi(argv[1]);
if(n>N_MAX) n=N_MAX;
for(i=0;i<n;i++)
{
while(WRITE(x+vx[i%4], y+vy[i%4], '0'+(i+1)%10))
{
WRITE(x+vx[(i+1)%4],y+vy[(i+1)%4],' ');
x+=vx[i%4];
y+=vy[i%4];
}
}
for(i=0;i<n;i++) puts(buf[i]);
return 0;
}
166 :
デフォルトの名無しさん :2009/11/19(木) 19:05:31
>>125 #include<iostream> は、まだ習ってないので
#include<iostream> を使わずに
printfでお願いしたいです
169 :
106 :2009/11/19(木) 22:50:36
誰かお願いします
論理の問題ですが 95年「ここ数年で一番出来が良い」 96年「10年に1度の逸品」 97年「1976年以来の品質」 98年「10年に1度の当たり年」 99年「品質は昨年より良い」 00年「出来は上々で申し分の無い仕上がり」 01年「ここ10年で最高」 02年「過去10年で最高と言われた01年を上回る出来栄え」「1995年以来の出来」 03年「100年に1度の出来」「近年にない良い出来」 04年「香りが強く中々の出来栄え」 05年「ここ数年で最高」 06年「昨年同様良い出来栄え」 07年「柔らかく果実味が豊かで上質な味わい」 08年「豊かな果実味と程よい酸味が調和した味 09年「50年に1度の出来栄え」 です
173 :
デフォルトの名無しさん :2009/11/20(金) 01:50:07
意味がわからない ボージョレ・ヌーボー
順位をつけろってことか?
>>172 要するに「どれも五十歩百歩」と言いたいわけだよな
誰も去年の謳い文句まで覚えてない事を逆手に取ってる
181 :
デフォルトの名無しさん :2009/11/20(金) 13:55:44
182 :
デフォルトの名無しさん :2009/11/20(金) 14:01:29
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):1〜10までの数値の1乗〜5乗を計算し配列に格納し、一覧として表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名: visual studio2005 [3.3] 言語:C言語 [4] 期限:11月21日 [5] その他の制限:戻り値と数学関数は使えません。 横に1の○乗、縦に○の1乗という感じで表示させるようにしたいです。 よろしくお願いします。
>>182 #include <stdio.h>
int main(void)
{
int a[10][5], i, j;
for(i=0; i<10; i++) {
a[i][0] = i + 1;
for(j=1; j<5; j++) a[i][j] = a[i][j-1] * (i + 1);
}
for(i=0; i<10; i++) {
for(j=0; j<5; j++) printf("%d ", a[i][j]);
putchar('\n');
}
return 0;
}
>>181 #include <stdio.h>
double fukaishisuu(double t, double h)
{
return 0.81* t + 0.01 * h * (0.99 * t - 14.3) + 46.3;
}
int main(void)
{
double t, h, f;
printf("気温を入力:");
scanf("%lf", &t);
printf("湿度を入力:");
scanf("%lf", &h);
f = fukaishisuu(t, h);
if(f < 60) printf("cold\n");
else if(f < 75) printf("comfort\n");
else printf("discomfort\n");
return 0;
}
185 :
149 :2009/11/20(金) 16:19:42
149誰か願いします。
文字列の引数ってどうやって作ればいいのかな? エラーでないようにするにはどこを弄ればいいのでしょう・・ #include <stdio.h> int main(void){ char a = "hello"; printf("a" , a); }
char *a
>>187 有難うございますm(__)m
恐縮ですがもう少々・・
#include <stdio.h>
int main(void){
char *a = "hello";
printf("%s " , *a);
}
これではやはりhelloと表示されないです。どこがおかしいのでしょうか?
s/*a/a/
あれ、この方法では文字列を引数として渡せないんですか? #include <stdio.h> int aa(char *a){ printf("%s " , a); return 0; } int main(void){ char *a = "hello"; int aa( *a ); }
int aa( *a ); から aa(a);
>>192 お答え有難うございましたm(__)m
ヒントを手がかりに色々考えてみます。
194 :
106 :2009/11/20(金) 21:06:20
169ですが、だれかお願いします…
ベクトルって何次元?
float型に直接16進数を格納し、浮動小数点を生成するプログラムを教えてください
float型に直接じゃないけど、intとfloatのメンバーをもつ共用体を使うとか
float f; *(int *)&f = 0x〜
200 :
デフォルトの名無しさん :2009/11/21(土) 00:23:35
[1] 授業単元: コンピュータアーキテクチャ [2] 問題文(含コード&リンク): 以下の仕様を満たすもぐらたたきゲームを作成する。 ・一度に一つ以上の文字を画面上に表示する 一定時間以内に表示された文字と同じキーが押されたら得点 とする キー入力を受け付ける一定時間が過ぎたら文字を消去する 以上の処理を一定回数繰り返す [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: mipsel [3.3] 言語: C/C++/どちらでも可 [4] 期限: 2009年11月24日09:00まで よろしくお願いします。
[1] アルゴリズム [2] 手入力したい数列の数をまず入力し、その数だけ数列を手入力します。 その中に連続数がある場合、その連続数の個数を初めに入力した数から引いた結果を表示。 [3] 環境 [3.1] OS: Linux [3.3] 言語:C [4] 期限: 特になし よろしくお願いします。
202 :
106 :2009/11/21(土) 02:07:59
>>195 どうもありがとうございます。例としては、下の内積プログラムがあるんですが、こんな感じだし、難し過ぎないかなと思ったんですが…classとかはまだやっていないし。
おもにやっているのはfor if continue while くらいなんですよね。配列(一次元配列と二次元配列)は今やっていますが。
#include <iostream>
using namespace std;
int main() {
float w[] = {1.2,2.3,3.4,4.5,5.6};
float x[] = {4.8,2.6,1.3,9.1,8.7};
float u = 0.0;
int i;
for(i=0;i<5;i=i++) {
u += w[i] * x[i];
}
cout << "u=" << u << "です\n";
return 0;
}
NULL ポインタfreeが古い処理系じゃまずかった理由? 一部の古い処理系ではNULLは定数ではなくmalloc書き込み専用変数 だった。(一般は参照のみ可) 古い話なんで細かいことは省略するが、プログラムのモジュール通信 の為だけに特権的な値を設定することなど貴重なアドレス空間の無駄 遣いでタブーという時代の要請としておく freeはNULLを参照しないで機械的にブロック解放を行うので 間違った値を与えると確実にヒープを壊しプログラムは早晩落ちた。
俺に聞けスレ向けの誤爆スマソ
207 :
201 :2009/11/21(土) 15:43:01
>>203 素早いご回答、本当にありがとうございます!勉強になりました。
>>204 その環境を教えていただけるでしょうか。
free(NULL); とやるとfree()は何もしないんだが・・・・
誤爆だって言ってるんだからそっちのスレで聞けよ。
211 :
デフォルトの名無しさん :2009/11/21(土) 17:31:08
[1] 授業単元:プログラミング演習第一 [2] 問題文: #include <stdio.h> int main(void) { int t = 6; if(t >= 6 && t < 12){ printf("%d時です。おはようございます。\n",t); }else if (t >= 12 && t < 18) { printf("%d時です。こんにちは。\n",t); }else if (t >= 18 && t < 24) || (t >= 0 &&t < 6)){ printf("%d時です。こんばんは。\n",t); }else { printf("%d時は時刻の範囲外です。\n",t); } return 0; } これのswitch文で書き換えたプログラムを作成しなさい。 ただし、case文の使用は4回を上限とする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月23日まで どなたかお願いします
[1] 授業単元:プログラミング演習 [2] 問題文: 3行3列の実数行列A=[a_ij]とB[b_ij]の積ABを計算せよ。 ただし、乗算結果の行列を[c_ij]として次の計算を行うものとする。 行列の要素への入力は、代入文あるいは初期化子をもちいること。 c_ij=Σa_ik×b_kj (Σはk=0で、2までです) [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月23日まで どなたかお願いします
>>211 #include <stdio.h>
int main(int argc, char* argv[])
{
int t = 6;
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 */
int hour[24] = {3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3};
t = atoi(argv[1]);
if(t<0 || t>23)
printf("%d時は時刻の範囲外です。\n",t);
else
switch(hour[t]) {
case 1:
// if(t >= 6 && t < 12){
printf("%d時です。おはようございます。\n",t);
break;
case 2:
// }else if (t >= 12 && t < 18) {
printf("%d時です。こんにちは。\n",t);
break;
case 3:
// }else if ((t >= 18 && t < 24) || (t >= 0 &&t < 6)){
printf("%d時です。こんばんは。\n",t);
break;
// default:
// }else {
// printf("%d時は時刻の範囲外です。\n",t);
}
return 0;
}
>>212 ですが[5]が抜けてました
if、switch、do文、while文、for文、配列しかならっていません。
できれば配列とfor文でお願いします。
>>211 switch((t & 0x1f) / 6) {
case 1:
break;
case 2:
break;
case 0:
case 3:
break;
default:
break;
}
肝の部分だけ。汎用性はない。
217 :
106 :2009/11/21(土) 19:28:21
>>206 そうなんですが、こんなに複雑じゃないと無理でしょうか…?
習ってない表現も沢山あるので…(print.aとかclassなどなど)
218 :
デフォルトの名無しさん :2009/11/21(土) 20:04:43
[1] 授業単元: lT [2] 問題文(含コード&リソク): すぐに運用可能なMMORGPゲ一ムを作成してください。 キャラクタ、マップ、イベントを編集可能なエディタを含めること。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: C+-+- [4] 期限: 1970年1月1日00:00まで [5] その他の制限: すべてGPLライセンスにすること。
>219 面白そうだね
>>221 これ放物線になる?
単なる連立一次方程式(直線)に見えるんだが・・・
224 :
デフォルトの名無しさん :2009/11/22(日) 03:06:44
C++で、ベクトルの加減を行うプログラムを教えてください。 #include <iostream> using namespace std; int main() { return 0; } 入力→cin 出力→cout 配列とforでお願いします。
225 :
デフォルトの名無しさん :2009/11/22(日) 03:07:31
>>224 ですが、配列と言っても
int [2]={2,4};とか
こんな感じのとか二次元配列しかやってないです
228 :
デフォルトの名無しさん :2009/11/22(日) 12:41:03
>>228 C++習ってるなら普通真っ先に<iostream>を使うと思うんだが。
逆に<string>は使ってもいいわけ?
string は string.h と見間違えているだけなんだろ
110って難しい?
めんどくさいだけで難しくは無いな
>>231 >>112 が書いているように問題の一部が意味不明
だから誰も答えられなかったのではないかと。
M枚ひくときに自由に選べる枚数が減るって意味だろ
235 :
124 :2009/11/22(日) 17:00:43
2つのベクトルを適当に初期化してください
[1] C言語プログラミング演習 [2] 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換するプログラム (コマンドラインに 2 4 2 4 を与えた場合タブを入力したら3 7 10 17 20 27...が桁位置に なるようスペースを挿入する) 入力は半角文字に限って良い。またコマンドラインからは正の整数を表すものが 与えられるとして良い [3] Windows vista/Borland C++ 5.5/C言語でコード 制限:fgetsを使う。 [4] できるだけ早く
>>236 てけとーにつくった
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char**argv){
int tabstop = argc > 1 ? atoi(argv[1]) : 4,pos=0,c;
while((c=getchar())!=EOF)
switch(c){
case '\t':
do putchar(' ');while(++pos%tabstop);
break;
case '\r':case '\n':
putchar(c);
pos = 0;
break;
default:
putchar(c);
++pos;
break;
}
return 0;
}
難しすぎだ
240 :
デフォルトの名無しさん :2009/11/22(日) 20:04:27
>>239 #include <stdio.h>
int main(void)
{
int a[3][3], b[3][3], c[3][3], i, j, k;
for(i=0; i<3; i++) for(j=0; j<3; j++) scanf("%d", &a[i][j]);
for(i=0; i<3; i++) for(j=0; j<3; j++) scanf("%d", &b[i][j]);
for(i=0; i<3; i++) for(j=0; j<3; j++) for(c[i][j]=k=0; k<3; k++) c[i][j] += a[i][k] * b[k][j];
return 0;
}
>>240 千円に付き1日20銭の間違いだろうか?
// 問1
#include <stdio.h>
main()
{
int i;
float rate, sum;
rate = 20./100000;
sum = 100000;
for(i=1; i<=30; i++){
sum *= 1 + rate;
}
printf("元利合計 = %d,%03d 円\n", (int)(sum/1000), (int)sum%1000);
}
// 問2
#include <stdio.h>
main()
{
int i;
float rate, sum, gankin;
rate = 0.04;
sum = gankin = 100000;
for(i=1; i<=10; i++){
sum *= 1 + rate;
printf("%2d:%d\n", i, (int)(sum-gankin) );
gankin = sum;
}
printf("元利合計 = %d,%03d 円\n", (int)(sum/1000), (int)sum%1000);
}
>>241 ためしてみたらエラーでできなかったんですが
エラーだって言うんなら、エラーメッセージぐらい貼れよ
エラーメッセージがでなくて、なんにも動作しないやつです
完全に正常に動作して終了してるだけ。 問題文は計算せよであって、計算結果の表示は求められてないから。
>>246 for(i=0; i<3; i++) {
for(j=0; j<3; j++) printf("%3d ", c[i][j]);
puts("");
}
return 0;
248 :
106 :2009/11/22(日) 23:19:28
誰か本当にお願いします… #include <iostream> using namespace std; int main() { float w[] = {1.2,2.3,3.4,4.5,5.6}; float x[] = {4.8,2.6,1.3,9.1,8.7}; float u = 0.0; int i; for(i=0;i<5;i=i++) { u += w[i] * x[i]; } cout << "u=" << u << "です\n"; return 0; } レベル的にはこんなもんなはずなんです
249 :
デフォルトの名無しさん :2009/11/22(日) 23:46:17
>>248 ベクトルの定義方法の指定が曖昧すぎてどうにも出来ん。
>>249 >>196 じゃだめなん?
だめならどこがだめなのかはっきり言ってくれ
レスが付かない事には直しようがない
>>250 のソース、関数の戻り値間違えてた
指摘面倒なんで適当に修正してください
なんか質問者にイライラする ああああああ
見なきゃいいじゃん。
259 :
106 :2009/11/23(月) 02:42:19
表現が難しいんです… 絶対、この例文レベルより難しいですよね…何か、1次元配列2つで終了するって言ってたので #include <iostream> using namespace std; int main() { float w[] = {1.2,2.3,3.4,4.5,5.6}; float x[] = {4.8,2.6,1.3,9.1,8.7}; float u = 0.0; int i; for(i=0;i<5;i=i++) { u += w[i] * x[i]; } cout << "u=" << u << "です\n"; return 0; }
260 :
106 :2009/11/23(月) 02:46:23
cosθのやつは直行するベクトルを選んで初期化って書いてあるんですが、これの意味わかる人いますか?
cosθ=0つまり → → a ・ b = 0って事だろ
262 :
106 :2009/11/23(月) 03:02:07
>>260 ありがとうございます。直行するベクトルを適当に何か入力してみようと思うんですが、
(4,-3)(3,4)とすると、
和が(7,1) 差が(1,-7) はいいんですが、内積とcosθが0になりました。こういう事ですよね
まあそういう事 自分で方眼紙にベクトル描画してみな?
264 :
106 :2009/11/23(月) 03:56:27
265 :
デフォルトの名無しさん :2009/11/23(月) 04:00:29
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): 行列の足し算(A+B)を行うプログラムを作成せよ(A,Bを適当に初期化して、3*3行列で行う事) 行列の足し算(A*B)を行うプログラムを作成せよ(A,Bを適当に初期化して、3*3行列で行う事) [3] 環境 [3.1] OS:xubuntu [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:[2009年11月20日まで] [5] その他の制限:cout→出力、cin→入力、配列を使う事、 #include <iostream> using namespace std; int main() {で始めて return 0; }で終わるようにする。もしかしたらcmathとかくらい入るかも知れませんがこんな感じです また課題が来てしまいました。あと、あまり複雑すぎずお願いします。
線分の集まりで与えられた図形が 相似図形として似ていることを調べるにはどうすればいいですか。
簡単のために、2次元座標に 4点与えた4角形に限定して良いです。
269 :
267 :2009/11/23(月) 13:22:01
重複している面積で出来そうなので、 つながっているとは限らない4線分の配置位置の類似検出を知りたいです
271 :
デフォルトの名無しさん :2009/11/23(月) 14:59:02
どうせcinで入れるし長くなるので入れなかった 適当に0とか入れといてくだしあ
273 :
271 :2009/11/23(月) 15:29:11
274 :
271 :2009/11/23(月) 15:31:13
>>272 書いてるうちに返信が来てましたすみません。
A[3][3]={}, B[3][3]={}ですか?
275 :
デフォルトの名無しさん :2009/11/23(月) 16:03:24
やってやりたいけどWindowsでVCしかないから無理だな system("cls")でコンソールクリアはWindowsだけだったよな?
277 :
271 :2009/11/23(月) 16:36:10
初期化ってつまりこういう事なんですかね? #include<iostream> using namespace std; int main() { double A[3][3]={{1,1,6},{5,3,2},{2,2,2}}; double B[3][3]={{4,1,3},{2,4,3},{5,9,2}}; double temp; int i,j,k; for(i=0;i<3;i++){ for(k=0;k<3;k++){ } } for(i=0;i<3;i++){ for(k=0;k<3;k++){ } } cout<<"和:A+B="<< '\n'; for(i=0;i<3;i++){ cout<<" { "; for(j=0;j<3;j++){ cout<< (A[i][j]+B[i][j]); if(j!=2) cout<<" , "; } cout<< " }" << '\n'; } cout<< '\n';
278 :
271 :2009/11/23(月) 16:37:13
cout<<"積:A*B="<< '\n'; for(i=0;i<3;i++){ cout<<" { "; for(j=0;j<3;j++){ temp=0.0; for(k=0;k<3;k++) temp += A[i][k]*B[k][j]; cout<< temp; if(j!=2) cout<< " , "; } cout<< " }" << '\n'; } return 0; } 続き
279 :
271 :2009/11/23(月) 16:46:26
あと、106のやつは #include <iostream> #include <cmath> using namespace std; int main() { static const int N = 2; double va[N]={3,-4}; double vb[N]={4,3}; double a,b; double p; for (int i = 0; i < N; ++i) { for (int i = 0; i < N; ++i) { } } cout << "va + vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] + vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n';
280 :
デフォルトの名無しさん :2009/11/23(月) 16:47:00
281 :
271 :2009/11/23(月) 16:47:49
cout << "va - vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] - vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n'; p = 0; for (int i = 0; i < N; ++i) { p += va[i] * vb[i]; } cout << "va・vb = " << p << '\n'; a = 0; for (int i = 0; i < N; ++i) { a += va[i] * va[i]; } a = sqrt(a); b = 0; for (int i = 0; i < N; ++i) { b += vb[i] * vb[i]; } b = sqrt(b); if (a * b != 0) { cout << "cosθ = " << p / (a * b) << '\n'; } return 0; } ですかね?初期化というと
>>280 #include <stdio.h>
int main(void)
{
int i, j, k = 2 * 16;
printf(" |0 1 2 3 4 5 6 7 8 9 A B C D E F\n");
printf("---+--------------------------------\n");
for(i=2; i<8; i++) {
printf(" %d |", i);
for(j=0; j<16; j++) {
if(k==0x7f) continue;
printf("%c ", k++);
}
putchar('\n');
}
return 0;
}
[1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): 以下の掛け算の表示プログラムを作成しなさい。 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 ・ ・ ・ 10・・・ 100 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:C言語 [4] 期限: 11月27日 17時 どなたかよろしくお願いします。
#include <stdio.h> int main(void) { int i, j; for(i=1; i<=10; i++) { for(j=1; j<=10; j++) printf("%3d", i * j); puts(""); } return 0; }
288 :
271 :2009/11/23(月) 18:50:25
289 :
271 :2009/11/23(月) 18:53:11
290 :
271 :2009/11/23(月) 19:12:00
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): 行列とベクトルの掛け算 y=Ax (A(3*3行列以上)とxを適当に初期化) [3] 環境 [3.1] OS:xubuntu [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:[2009年11月20日まで] [5] その他の制限:cout→出力、cin→入力、配列を使う事、 #include <iostream> using namespace std; int main() {で始めて return 0; }で終わるようにする。もしかしたらcmathとかくらい入るかも知れませんがこんな感じです あとなるべく優しいレベルで作ってください。 多分これで今回の課題はラスト問題です
>>289 配列では値を代入するのが初期化。
double A[3][3]={ };
とやっても何も代入してないから初期化ではない
>double A[3][3]={ }; コンパイル通らないだろw
long double i++ n-1 Power 2.421230
イライライライラ
見なけりゃいいってのは無しな レス使いすぎなんだよ
>>293 ここまでヒント出てる問題は自力でやってほしいなぁ
その言語で書ける人はおそらくここにはいない
301 :
デフォルトの名無しさん :2009/11/23(月) 21:37:09
302 :
271 :2009/11/23(月) 21:39:01
double va[N]={}; double vb[N]={}; こんな感じなんですが
303 :
271 :2009/11/23(月) 21:40:24
それか長くなるけど #include <iostream> #include <cmath> using namespace std; int main() { static const int N = 2; double va[N]={3,-4}; double vb[N]={4,3}; double a,b; double p; for (int i = 0; i < N; ++i) { for (int i = 0; i < N; ++i) { } }
304 :
271 :2009/11/23(月) 21:41:59
cout << "va + vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] + vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n'; cout << "va - vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] - vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n'; p = 0; for (int i = 0; i < N; ++i) { p += va[i] * vb[i]; } cout << "va・vb = " << p << '\n'; a = 0; for (int i = 0; i < N; ++i) { a += va[i] * va[i]; }
305 :
271 :2009/11/23(月) 21:42:42
a = sqrt(a); b = 0; for (int i = 0; i < N; ++i) { b += vb[i] * vb[i]; } b = sqrt(b); if (a * b != 0) { cout << "cosθ = " << p / (a * b) << '\n'; } return 0; } 3つは続きです
306 :
290 :2009/11/23(月) 23:08:42
誰か290分かる人いませんか?
「行列×行列」のプログラムをベースにしたらわかりそうなもんだが。
308 :
デフォルトの名無しさん :2009/11/24(火) 14:50:27
できなくて困っています。 任意の0でない自然数nをキーボードで入力し、入力した数字が奇数の場合、その数字に3を掛けと1を足します。入力した数字が偶数の場合、その数字を2で割ります。
309 :
308の続き :2009/11/24(火) 14:52:04
そして得られた数字に同様の操作をし、1に達した時点で終了します。そしてこの操作をした回数とこの操作で出た最大値を表示させたい。 以上のプログラムが複雑でつくれません。どうか教えてもらえないでしょうか。
#include <stdio.h> int main(void) { int i, n, max; scanf("%d", &n); for(i=0, max=n; n!=1; i++) { if(n % 2) n = n * 3 + 1; else n /= 2; if(n > max) max = n; } printf("%d回 最大値%d\n", i, max); return 0; }
311 :
デフォルトの名無しさん :2009/11/24(火) 15:28:46
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): ベクトルの加減、ベクトルの内積、2つのベクトルのなす角度cosθ 2つのベクトルを適当に初期化して行う事 [3] 環境 [3.1] OS:xubuntu [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:[2009年11月20日まで] [5] その他の制限:cout→出力、cin→入力、配列を使う事、 #include <iostream> using namespace std; int main() {で始めて return 0; }で終わるようにする。 あと、文中に #difine N 3 int main() { double inp=0.0,normx=0.0,cos; double x[]={}; double y[]={}; for(int i = 0;i<N;i++) { inp += x[i] * y[i]; normx += x[i] * x[i]; normy += y[i] * y[i]; } normx=sqrt(normx); normy=sqrt(normy); cos = inp / ( norm * normy); これを含めてほしいんですが
312 :
デフォルトの名無しさん :2009/11/24(火) 15:41:26
テストにユーグリッドの互除法から最大公約数を求めるプログラムを作る問題があるっぽいんですが、一緒にそれのフローチャートを作る問題も出るっぽいんです。 プログラム自体は #include <iostream> using namespace std; int main() { int m=48,n=36,t,i; for(i=0;;i++) { cout << "m" << i << " " << m << " n" << i << " " << n << '\n'; if(!(t=m%n)) break; m=n; n=t; } cout << "n" << i << "=" << n << '\n'; return 0; } できてるんですが、フローチャートが書けません。誰か分かる人いませんか?フローチャート質問コーナーは無いのでここに書きました…
313 :
デフォルトの名無しさん :2009/11/24(火) 16:00:42
314 :
デフォルトの名無しさん :2009/11/24(火) 16:30:28
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 遺伝的アルゴリズムを基にTSP(巡回セールスマン問題)の近似解法のプログラムを書け。 ただし都市数の数は5〜6個程度で、都市間の距離は自由に決めてよいとする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語: C++ [4] 期限: [2009年11月30日まで] [5] その他の制限:特にありませんが、分かりやすくお願いします C初心者です、遺伝的アルゴリズムの概念を理解するだけで正直精一杯でした… 宜しくお願いします
315 :
デフォルトの名無しさん :2009/11/24(火) 16:56:21
課題1 #include <stdio.h> #include <stdlib.h> int main(void) { int i, j, temp, a[10]; srand(time(NULL)); for(i=0; i<10; i++) { a[i] = rand() / (RAND_MAX + 1.0) * 1000; printf("%d%c", a[i], i==9 ? '\n' : ','); } for(i=9; i>0; i--) { for(j=0; j<i; j++) { if(a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for(i=0; i<10; i++) printf("%d%c", a[i], i==9 ? '\n' : ','); return 0; }
課題2 #include <stdio.h> #include <stdlib.h> int main(void) { int i, j, a[10] = {0}; srand(time(NULL)); for(i=0; i<100; i++) a[rand()%10]++; for(i=0; i<10; i++) { printf("%d:", i); for(j=0; j<a[i]; j++) putchar('*'); putchar('\n'); } return 0; }
321 :
デフォルトの名無しさん :2009/11/24(火) 18:11:33
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 2つの文字列をS1とS2の配列に読み、S1の文字列の最初からn個目にS2の文字列を挿入する。 例えば、文字列が12345とABでn=3の場合、123AB45となる。 (1) 配列を用いて作る。 (2)関数とポインターを用いて作る。 [3] 環境 windows xp 言語:C [4] 期限: 26日 よろしくお願いします
ggrks
>>321 (1)
#include <stdio.h>
#define LEN 100
int main(void) {
char data1[LEN+1], data2[LEN+1], data3[LEN*2+1];
int n, len;
printf("S1="); fgets(data1, LEN+1, stdin); len = strlen(data1)-1; data1[len] = '\0';
printf("S2="); fgets(data2, LEN+1, stdin); data2[strlen(data2)-1] = '\0';
printf("n="); scanf("%d", &n);
if(len < n) n = len;
strncpy(data3, data1, n);
data3[n] = '\0';
strcat(data3, data2);
strcat(data3, &data1[n]);
puts(data3);
return 0;
}
325 :
324 :2009/11/24(火) 22:26:48
38です。 提出期限が30までになっていましたが先生の都合で今週末までに変更になってしまいました。 どなたかお願いいたします。 [1] 授業単元: 画像処理プログラム [2] 問題文(含コード&リンク): 自動選択ツール(魔法の杖)を作成せよ 画像フォーマットに関しては特に制限なし [[3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: どちらでも可 [4] 期限: 09/11/27 [5] その他の制限: 制限なし
>>326 こんなもん即興で作れるレベルじゃない
とっかかりも何もなしに丸投げされても作る人はいないと思われ
[1]プログラミング言語論 [2]プログラムの製造とライフサイクルについてC言語アプリ開発の実際を踏まえて 論ぜよ 自作Cコードを含めること。 [3] Linux/Gcc/C言語 (Mozzilaプロジェクト)が授業で取り上げられました [4] なるべく早めに 意味がよくわかりません。指針だけでもよろしくです。
>>327 ですよねえ・・・もう今回のはスルーすることにします。
色々レス下さった方々ありがとうございました。
330 :
デフォルトの名無しさん :2009/11/25(水) 02:16:03
[1] 授業単元:プログラム [2]問題文 次の要領でテストの点数を入力し、それぞれの点数代の人数が何人いるか求めるプログラム 1.テストの点数を入力するガイダンスを用いて次のように出力 :点数の入力 終了条件:eあるいはE 2.fgets()を用いて、テストの点数を文字列として入力 3.2で入力した文字列が'e'または'E'ならば処理2〜5の処理を終了して6の処理を行う 4.文字列で入力した点数をint型変数に変換(atoiを使用する) 5.4で変換したint型の点数が0点以上100点以下なら、それぞれの点数代の人数を数える。 6.5の結果の表示 [3] [3.1]XP [3.2]Visual C++ 2008 [3.3] C言語 [4]2009年11月30日まで [5]関数、文字列の復習問題です
>321 (2) #include <stdio.h> #define SIZE 100 char *ins(char *s1, int n, char *s2) { static char dst[SIZE*2]; if(strlen(s1)>n){ strcpy(dst, s1); dst[n]='\0'; strcat(dst, s2); strcat(dst, s1+n); }else{ sprintf(dst, "%s%s", s1, s2); } return dst; } int main(int argc, char *argv[]) { char S1[SIZE*2], S2[SIZE]; int n; sscanf(argv[2], "%d", &n); sprintf(S1, "%s", argv[1]); sprintf(S2, "%s", argv[3]); sprintf(S1, "%s", ins(S1, n, S2)); printf("[%s]\n", S1); return 0; } コマンドラインで>実行.exe S1の文字列 n S2の文字列[Enter]
332 :
323 :2009/11/25(水) 04:39:48
>>321 (2) 問題が曖昧。配列S1の書き換えを行うヴァージョン。
#include <stdio.h>
#include <string.h>
#define LEN 100
void concat(char *s1, char *s2, char *s3, int n) {
strcpy(s3, s1); s1[n] = '\0';
strcat(s1, s2);
strcat(s1, &s3[n]);
}
int main(void) {
char S1[LEN+1], S2[LEN+1], work[LEN+1];
int n, len;
printf("S1="); fgets(S1, LEN+1, stdin); len = strlen(S1)-1; S1[len] = '\0';
printf("S2="); fgets(S2, LEN+1, stdin); S2[strlen(S2)-1] = '\0';
printf("n="); scanf("%d", &n);
if(len < n) n = len;
concat(S1, S2, work, n);
puts(S1);
return 0;
}
[1] 授業単元:C言語で金儲け [2]問題文 簡単に金が稼げるプログラムを作れ! [3] [3.1] OS全般(特に問わない) [3.2] gcc [3.3] C言語 [4] 今すぐニダ [5] 最低でも1億円は稼ぐこと
>>328 的外れかもしれないけど、
まず、ライフサイクルがどこを指してるのかがよくわからん。
プログラムそのものを指してるのか、プログラムの製造過程(?)を指してるのか。
前者ならプログラム内でどの関数からスタート(エントリポイント)して
どの関数を経由して最終的にどの関数で終了するのか、
後者ならPDCAサイクルみたいなのを書けばいいんじゃないかな、とか思った。
とはいえ「C言語アプリ開発の実際」が意味不明だからよくわからん。
337 :
デフォルトの名無しさん :2009/11/25(水) 10:03:29
[1] 授業単元:プログラム [2] 問題文: 二つの値xとyの大きい方の値を返す関数形式マクロは以下のように 定義できる #define max(x,y) ((x) > (y) ? (x) : (y)) このマクロを利用して、四つの値a,b,c,dの値の最大値を求める max(max(a,b), max(c,d)) および max(max(max(a,b), c), d) がどのように展開されるかを示すし、考察を加えよ。 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: c言語 [4] 期限: ありません [5] その他の制限: このプログラムを作ってほしいと思います。 if,for,関数,関数形式マクロは勉強しました。 C言語初心者ですよろしくお願いします。
338 :
デフォルトの名無しさん :2009/11/25(水) 10:03:52
[1] 授業単元:プロミング基礎 [2] 問題文(含コード&リンク):5つの整数データ入力に対する合計計算アルゴリズム 1.変数 s に 0 を設定する。 2.変数 k に 0 を設定する。 3.もし k < 5 でなければ、7.へ行く。 4.整数の入力を変数 a に格納する。 5.変数 s に 変数 a を加えて、変数 s に 代入する。 6.変数 k の内容を 1 だけ増やし、3.にもどる。 7.変数 s を出力表示する。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:11月25日朝10時20分 [5] その他の制限:特になし よろしくお願いします
339 :
デフォルトの名無しさん :2009/11/25(水) 10:41:13
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):5人の学生の3教科(国・数・英)の点数を 読み込んで、2次元配列を用いて以下の条件を満たすプログラムを作成せよ。 (1)科目別の最高点を求める。 (2)各学年の3教科の平均を求める。 これらを表にして表示する。 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C言語 [4] 期限: ありません [5] その他の制限: if,for、配列を習いました。 c言語は初心者です。よろしくお願いします。
>>337 プログラミングをする問題ではないな
1カ所だけ埋めてみるので、後は同じように変換してみて。
#define max(x,y) ((x) > (y) ? (x) : (y))
max(max(a,b), max(c,d))
↓
max(((a) > (b) ? (a) : (b)), max(c,d))
>>339 どこからデータを読み込んでどういった表にするのかも詳しく
>>338 #include<stdio.h>
int main()
{
int s=0, k=0, a;
for (k = 0;k < 5;k++)
{
printf("整数を入力してください:");
scanf("%d", &a);
s += a;
}
printf("変数sの値は%dです。", s);
return 0;
}
もう時間過ぎてるし意味ないかw
>>344 上からx(0から開始)ピクセル目の画素値=[x, x, x](RGB)
※横方向は全て同じなので省略
ってだけじゃないの?
>>337 1.以下の内容を例えば、tect.cに保存
#define max(x,y) ((x) > (y) ? (x) : (y))
max(max(a,b), max(c,d))
2.gcc -E test.c を実行すると、以下の結果を得られる。
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
((((a) > (b) ? (a) : (b))) > (((c) > (d) ? (c) : (d))) ? (((a) > (b) ? (a) : (b))) : (((c) > (d) ? (c) : (d))));
>>344 拡張子がJPGになってるけど、ファイル形式が正確にはPNGみたい
>>346 ,347,349
画像を作成するのをどのように書けばいいのか見当がつかなくて…
拡張子JPGにしてしまったのですが、元画像はPNGでした。
紛らわしいことをして申し訳ありません!
351 :
デフォルトの名無しさん :2009/11/25(水) 16:25:13
>>339 >>343 データはキーボードから点数を入力で。
表は、
番号| 国語 数学 英語 |最高 |最低 |平均
1 | | | |
2 | | | |
(中 略)
5 | | | |
――――――――――――――――――――――――――――――
最高 |
最低 |
平均 |
表はこんな感じで。
最低点の表示もお願いします。
よろしくお願いします。
352 :
デフォルトの名無しさん :2009/11/25(水) 16:27:33
>>350 画素値を求めるんじゃなくて画像を作るの?
質問の内容がよくわかんない
354 :
デフォルトの名無しさん :2009/11/25(水) 16:50:03
355 :
デフォルトの名無しさん :2009/11/25(水) 16:53:20
>>354 の期限、間違えました。期限は、26日の18時までです。
でもできれば今日中に提出したいですのでよろしくお願いいたします。。
>>353 画像を作るプログラムです。
誤解を招く文章ですみませんでした!
課題がかぶったら死亡
361 :
デフォルトの名無しさん :2009/11/25(水) 22:54:06
362 :
312 :2009/11/26(木) 00:42:26
だれか312を助けてください
363 :
デフォルトの名無しさん :2009/11/26(木) 03:04:21
>>336 ありがとうございました。本当にたすかりました。
【質問テンプレ】 [1]授業単元:応用C言語演習 [2]問題文(含コード&リンク) 標準入力から1文字以上の英数字と'_'で構成される単語を読み込み、 それぞれの単語が何回、何行目の何個目の単語に出現したかを単語アルファベット順 にリストする索引作成プログラム アルファベット順出力の後出現頻度(出現が多い単語順、同数についてはアルファベ ット順)順についても同じ書式で出力 改行記号とタブ/アルファベット/数字/ '_' /空白しか標準入力されないとして良い。 入力行数、単語長、種数、単語辺りの出現回数に制限は無い。 単語の前後の区切りは単語を構成しない文字とする。(行末記号を含む) 書式: 単語 (回数) 位置(行番号が若い順)改行 位置: 'L'行番号(1から開始)-行内単語番号(1から開始) alpha (3回) L32-5 L66-4 L124-1 beta (2回) L192-1 L276-3 [3] 環境 OS:FedoraCore11/コンパイラgcc4.0/言語 C言語 [4] 期限 12/1迄 [5]その他の制限: 400行以内(マルチステートメント不可) stdio.h stdlib.h string.h以外の使用禁止 fgets使用のこと(fgetc等の一文字読み取り系は不可)
367 :
デフォルトの名無しさん :2009/11/26(木) 13:57:06
368 :
デフォルトの名無しさん :2009/11/26(木) 17:09:06
369 :
デフォルトの名無しさん :2009/11/26(木) 17:29:48
370 :
370 :2009/11/26(木) 17:35:01
371 :
デフォルトの名無しさん :2009/11/26(木) 17:43:42
>>364 ありがとうございます。
しかし、
現在のデータ:0/100
(1)プッシュ (2)ポップ (0)終了:1
データ:25
0 25 ←この行(番号?とプッシュした数字)は表示されませんでした。
どうかもう一度お願いします。
>>368 課題1
#include<stdio.h>
#define min2(x, y) ((x < y) ? x : y)
int min3(int x, int y, int z);
int min3(x, y, z)
{
return min2(min2(x, y), z);
}
int main(void)
{
printf("%d\n", min3(3, 5, 1));
return 0;
}
375 :
デフォルトの名無しさん :2009/11/26(木) 18:47:10
>>370 ,374ありがとうございます。
多くて申し訳ないです・・
376 :
デフォルトの名無しさん :2009/11/26(木) 18:55:36
以前ここのスレで「Visual BasicのプログラムをCにしてください」 とお願いしたものです。 その時、良心的に解答してくださった方がいたのですが、 事情によりその際のデータが全て消えてしまいました。 もしあの時助けてくださった方がここを見ていて、 心当たりがあったら私のメールアドレスにメールしていただけないでしょうか? 大変困っています。よろしくお願い致します。
379 :
デフォルトの名無しさん :2009/11/26(木) 19:21:17
>>380 × while (n-- >= 0)
○ while (n-- > 0)
[1] 授業単元:ヒューマンインターフェイス [2] 問題文(含コード&リンク):少なくとも以下の英文を日本語分に翻訳できるプログラムを作成せよ 1.The boy beats a dog with a stick. 2.Every boy loves a dog . 3.The dog is loved by every boy. 4.The boy saw a girl with a telescope. 5.The boy saw a girl with a dog. 6.The boy cut a stick with a saw. [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C [4] 期限:明日の17時まで [5] その他の制限:キーボードから入力文を入力し、ディスプレイに翻訳結果を出力する 外部ファイルを参照すれば良いのかと思ったけど手も足も出ませんでした。 よろしくお願いします。
>>383 その通りです!
わざわざ探してくださってありがとうございます。
あの時に回答してくれた方がこの書き込みに気付いてくれることを祈ります…
>>386 仕事として発注したなら、
受注した方は守秘義務の観点から既に削除している可能性が高いわけで…
389 :
デフォルトの名無しさん :2009/11/26(木) 21:11:41
390 :
デフォルトの名無しさん :2009/11/26(木) 21:12:07
だれか
>>357 やってくれませんか
明日までなのにできなくて…
C言語です。 数百回分の計算データがありそのデータを10回毎に見ていって(10回目、20回目、30回目…)前にみた時より、 aが50増えたらaをbに変更するもの作りたいのですが、どなたかアドバイスください。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 3つの自然数を辺にもつ直角三角形を1000個出力するプログラムを書きなさい。 ただし、3つの辺 a, b, c は a <= b <= c とする。 また、3辺の比率が同じものはカウントしないこととする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:11月30日24:00まで [5] その他の制限:まだあまり習っていないのでできるだけ簡単なコードで書いていただけるとありがたいです どうしてもできません よろしくお願いします
>>391 具体例を出して分かるように説明してくれれば…
394 :
デフォルトの名無しさん :2009/11/26(木) 21:51:53
>394 全く違います
>>392 ピタゴラスの定理から適当に1000個取りだした。
#include<stdio.h>
int main(){
int n=2,i;
for(i=0;i<1000;++i){
int m = 5+i*2;
int a = 2*m*n;
int b = m*m-n*n;
int c = m*m+n*n;
printf("a=%d b=%d c=%d\n",a,b,c);
}
return 0;
}
>>392 #include<stdio.h>
#include<math.h>
int gcd(int a, int b){
int c;
while((c=a%b)) a=b, b=c;
return b;
}
int is_ok(int a, int b, int c){
return (a<=b && (c*c==a*a+b*b) && (gcd(a, gcd(b, c))==1));
}
int main(void){
int a, b, c, count=0;
for(c=2;count<1000;c++){
for(b=c/1.42;b<c && count<1000;b++){
a=sqrt(c*c-b*b);
if(is_ok(a, b, c) || is_ok(++a, b, c)){
printf("%4d : a=%d b=%d c=%d\n", ++count, a, b, c);
}
}
}
return 0;
}
>>394 ソース的にはxとyの配列そのものを渡したいようだから
distance(x,y);
で関数を呼び出し、
double distance(double *x,double *y)
で受け取らないといけない。
というか、
(double x[],double y[])
みたいな記述は出来ない。
ついでに言うとdistance関数でreturn記述されてないからエラーか警告出てるはず
>>397 同じ比率はカウントしないって言ってんのにそれかよw
>>393 例えばですが…
お店の売り上げデータaをb日間毎日取り、c日おきにその売り上げデータを見ていきます。
c=10ならば10日,20日,30日…
そして売り上げが前回(現在が40日目だったら前の30日目)と比較してしたときより+500増えていたら
売り上げデータaを嘘の売り上げデータeに書き換えという感じのものです。
ちょっとわかりにくいと思いますがすみません…
>>399 >(double x[],double y[])
>みたいな記述は出来ない。
できるよ
意味はポインタと同じ
>>401 このデータならこうなって欲しいというのがあると分かりやすい
実際にダミーのデータを作って説明してつかい
407 :
デフォルトの名無しさん :2009/11/26(木) 22:11:49
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 課題1、文字列、と2つの整数(それぞれ n, m とする)を入力すると n文字目から m文字 *に変えるプログラムを書け。 実行例 文字を入力して下さい Toshidaigaku nを入力して下さい 4 mを入力して下さい 2 出力は Tos**daigaku 課題2、文字列を入力すると、全ての文字を次の文字コードの文字に 変えて、結果を表示するプログラムを書け。 実行例 文字を入力して下さい Toshidaigaku 出力は Uptijebjhblv
408 :
デフォルトの名無しさん :2009/11/26(木) 22:12:51
課題3、文字列を入力すると、文字列中の a の個数を数えるプログラムを書け。 実行例 文字を入力して下さい Toshidaigaku aが2個含まれています [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual studio 2005 [3.3] 言語: C++ [4] 期限: 申しわけないのですが明日、11月27日までです。 [5] その他の制限: #include <stdio.h> int main() スタートでお願いします。
>>405 変な例を出してしまいましたが…
a毎にデータを取っていき、前回と比較して指定した数値を越えていたら転置を行うプログラムです。
>>407-408 文字列を str[],ループカウンタにint型の i を宣言しているとして、
課題1
for(i=0;i<m;i++) str[n+i-1]='*";
課題2
for(i=0;i<strlen(str);i++) str[i]++;
課題3
int count=0;
for(i=0;i<strlen(str);i++) if(str[i]=='a')count++;
後は自分で考えな。
>>406 さん
>>401 の例で20日目が2600円で10日目が2000円だとすると前回のデータより+500円以上増えていて
書き換えの条件が満たされているので2600円を-600円して2000円にする。
500円以上増えていたら-600円、500円以上になってなかったらデータはそのままにしておくという感じです。
413 :
392 :2009/11/26(木) 22:34:39
>>396 >>397 >>398 ありがとうございます
こんなにすぐにできるとは思ってませんでした
ちなみに
>>397 を同比率を除くようにするにはどうしたらいいんでしょうか?
少し気になったのでよろしければ教えてください
414 :
357 :2009/11/26(木) 22:37:06
>>357 解ける方いらっしゃいませんか。ホント解けなくて困ってます。
明日の正午までなんです。お願いします。
417 :
392 :2009/11/26(木) 23:14:22
>>415 最大公約数が1とはどういうことでしょうか?
最大公約数が1なら、その比率は今まで出てきてないと言える。
419 :
373 :2009/11/26(木) 23:21:37
420 :
デフォルトの名無しさん :2009/11/26(木) 23:38:23
>>410 ありがとうございます。
助かりました。
がんばってみます
422 :
419 :2009/11/27(金) 00:14:33
>>365 残念ながら、問題の半分しかできていないことが判明しました。
アルファベット順の出力のあと、出現度順でも出力しなければならないところが、前半のアルファベット順しか出力できていません。
今日は疲れたので、また明日考えます。おやすみなさい。
423 :
デフォルトの名無しさん :2009/11/27(金) 00:45:15
#include <iostream> using namespace std; int main() { int m=48,n=36,t,i; for(i=0;;i++) { cout << "m" << i << " " << m << " n" << i << " " << n << '\n'; if(!(t=m%n)) break; m=n; n=t; } cout << "n" << i << "=" << n << '\n'; return 0; } お願いします。C++ですが、これのフローチャート教えてくれませんか?本当に助けてください
424 :
423 :2009/11/27(金) 00:47:18
ユーグリッドの互除法です
[1]やさしいC++ 演習 [2] (1) int値 n,一つのcharポインタpを引数に持ちcharポインタを戻り値型とする関数atosを次の仕様のもとに作成 pがNULLでないならばそれが指す領域をdelete[]解放してNULLを返す。pがNULLの場合はpに16文字分の領域を割り当て,指す領域にsprintf関数によりnの10進文字列表現を書き込 みそれを返す。 (2) キーボードから正の整数が入力され、入力促進文字列(プロンプト)を表示し 入力待ちを行い、入力された整数をint参照型引数nに入れて戻る関数inputを作成 マニュピュレータやscanfを使用しないこと。 (3)8個のintへの参照引数を持つsortという名称のvoid関数を作成 左からみてある引数が負ならそれを含めた残りの引数を整列対象としない条件のもとで 引数を小さい順に整列。整列対象の数を一行一列に空白区切りで出力する。 この時atos関数を使うこと。処理記述にループ(ループ文を使うこと)があってはならない。 (4) (1)~(3)の関数を用いてmain(void)関数を実行すると,それまでに入力された正の整数を sort関数を用いてソート/表示した後新しい整数をinput関数を用いて読み込む ことを8回繰り返した後、入力された8個の整数を整列したものをsort関数により表示する ようなものを作成する。for文とswitch文を使うこと。配列を使わないこと。 (5) (1)〜(4)についてそれぞれ独立にテストしたコードを作成すること [3] MacOS-X(Leopald)/g++ 3.0/C++言語 [4] 今週末まで [5]stdio.h stdlib.hの使用が許可される。malloc/freeの使用禁止。new/delete ([]も可)を 使うこと。取得したメモリ領域はmain関数から戻るまでに解放する一般的なC++コードの 標準に従うものとする。
426 :
425 :2009/11/27(金) 01:26:20
訂正 >(2) キーボードから正の整数が入力され、入力促進文字列(プロンプト)を表示し >入力待ちを行い、入力された整数をint参照型引数nに入れて戻る関数inputを作成 >マニュピュレータやscanfを使用しないこと。 (2) キーボードから正の整数が入力されるまで、入力促進文字列(プロンプト)を表示し 入力待ちを行い、入力された整数をint参照型引数nに入れて戻る関数inputを作成 マニュピュレータやscanfを使用しないこと。
>>364 さんがやって下さったのですが、
>>358 のテキストの解例のようにならないので、どなたかもう一度お願いします・・・
>>428 85行目 if (s != NULL) { return; } を、 if (s == NULL) { return; }
[1]C言語演習 [2] コマンドラインで与えられた整数を読み取りその総和を返す関数を作りなさい。 但し、一つでも数字でない文字列が与えられた場合はその文字列を表示し、計算できない ことをメッセージ出力する。整数は64ビット符号付き整数の範囲とし与えられた数が その範囲に収まらない場合や総和の計算の途中でそうなる場合も、オーバーフローする 旨メッセージ出力すること。 [3] OS:WIndows Vista コンパイラ:Visual studio 2005 言語:C言語 [4] 12/1まで [5] 使用するライブラリが少ない程高い評価が付くそうです。 時間的に辛いので丸投げします。よろしくお願いします
431 :
422 :2009/11/27(金) 18:21:12
[1] 授業単元:暇なヤシ集まれ [2] 問題文(含コード&リンク): 最大10桁の数字列sと 10000 以下の正整数dが 与えられたとき、sの各数字を並べ替えて出来る全 ての数の中で、dで割り切れる数の総数を求める。 計算例) s, d => 解 ・ 000, 1 => 1 ・ 1234567890, 1 => 3628800 ・ 123434, 2 => 90 [3] 環境: C, C++ どちらでも可 [4] 期限:無期限 [5] その他の制限: 出来る限り速いアルゴリズムでお願いします。 総当りしか思い付きません・・・orz
>>432 #include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
void hoge(int *number, int *is_used, int size, int d, long long value, int *count){
int i, prev=-1;
for(i=0;i<size;i++){
if(is_used[i] || prev==number[i]) continue;
is_used[i]=1;
hoge(number, is_used, size, d, value*10+number[i], count);
is_used[i]=0;
prev=number[i];
}
if(prev<0 && value%d==0) *count+=1;
}
int cmp(const int *a, const int *b){return *a-*b;}
void fuga(char *s, int d){
int number[10], is_used[10]={0}, count=0, i;
for(i=0;i<10 && s[i];i++){
if(!isdigit(s[i])) return;
number[i]=s[i]-'0';
}
qsort(number, i, sizeof(int), (int (*)(const void*,const void*))cmp);
hoge(number, is_used, i, d, 0LL, &count);
printf("%s, %d => %d\n", s, d, count);
}
int main(void){
fuga("000", 1);
fuga("1234567890", 1);
fuga("123434", 2);
return 0;
}
>>429 表示されました、ありがとうございます。
436 :
431 :2009/11/27(金) 23:24:02
438 :
デフォルトの名無しさん :2009/11/28(土) 01:21:40
>>438 課題2
#include<stdio.h>
int main(void)
{
int i, j, n=5;
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("%*s", n-1-i, "");
for(j=0;j<i*2+1;j++) printf("*");
printf("\n");
}
return 0;
}
441 :
439 :2009/11/28(土) 01:36:36
インクルード忘れてるし最初のfor文でnじゃなくて5使ってるし・・・///////
// 係数すべてゼロの場合は方程式成り立つんじゃね?っと #include <stdio.h> #include <math.h> int main(void) { double a, b, c; scanf("%lf %lf %lf", &a, &b, &c); if (a == 0) { if (b == 0) { if (c == 0) { printf("x=任意の複素数\n"); } else { printf("解なし\n"); } } else { printf("x=%f\n", -c/b); } } else { double D = b*b - 4*a*c; if (D < 0) { printf("x=%f%+fi, x=%f%+fi\n", -b/(2*a), sqrt(-D)/(2*a), -b/(2*a), -sqrt(-D)/(2*a)); } else if (0 < D) { printf("x=%f, x = %f", (-b+sqrt(D))/(2*a), (-b-sqrt(D))/(2*a)); } else { printf("x=%f\n", -b/(2*a)); } } return 0; }
444 :
442 :2009/11/28(土) 02:43:25
>>445 その人が仮に見ていても、恐らく良心から意図的に捨ててるだろうよ。
そして恐らく再度やってくれることも無いと思われ。
ファイルで個人情報、企業情報が入っていない部分だけ再度アップして、
やってくれる人が他にまだ居るかどうか確かめてみたらどう?(俺はPASS
だし本人でもない)
俺はFORTRANで書かれた有限要素法のプログラムをC言語に 移植した事がある そんなに大きなプログラムではなかったがそれでも3日かかった 仕事でやったから問題なかったが、個人的に頼むと料金が発生すると 思うよ3日もかかるんじゃ
うん個人でFORTRANプログラムをCに直接移植したりしようとすると 著作権関係の料金がかかるかもな
>>449 その逆もあるので大部分は相殺だよ
ただそれぞれの言語の長所が生かせていないものを交換
する場合を除いて徒労に終わるケースが多いけど
[1]やさしいC言語 [2] 4つの数を大きさの小さい順に並べ替える関数 Sort4(int *a,int *b.int *c,int *d) (呼び出し後a<=b<=c<=dとなる)を作り、この関数を利用してキーボードから4つ の整数を読み取り、大きい順に出力するプログラムを作りなさい。 Sort4関数の中ではループ文(while/do while/for)を用いないこと [3] OS :Windows XP コンパイラ:Borland C++ 5.5.1 言語:C言語 [4] 12/8迄 [5] stdio.h string.hのみを利用 文字列入出力にはfgets/fprintfのみを使うこと。 malloc関数は利用出来ない。テキストファイルの行数、行内文字数に制限は無い。
452 :
451 :2009/11/28(土) 22:49:16
[5]は他の人の課題の写し間違いでした。無視して下さい よろしくです
453 :
451 :2009/11/28(土) 22:56:05
すみません。問題文の最後の1文が抜けてました >またライブラリ関数を含め、外部関数を呼び出してはならない を追加してください。度重なる追加修正すみませんでした
>>451 #include<stdio.h>
void Sort4(int *a, int *b, int *c, int *d)
{
if(*a>*b) *a^=*b,*b^=*a,*a^=*b;
if(*c>*d) *c^=*d,*d^=*c,*c^=*d;
if(*a>*c) *a^=*c,*c^=*a,*a^=*c;
if(*b>*d) *b^=*d,*d^=*b,*b^=*d;
if(*b>*c) *b^=*c,*c^=*b,*b^=*c;
}
int main(void)
{
int a, b, c, d;
while(scanf("%d%d%d%d", &a, &b, &c, &d)==4)
{
Sort4(&a, &b, &c, &d);
printf("a=%d b=%d c=%d d=%d\n", a, b, c, d);
}
return 0;
}
455 :
451 :2009/11/28(土) 23:57:13
>>454 ありがとうございました。動作を確認しました。
できれば ^=をどうして使っているのか教えて下さると嬉しく思います。
458 :
デフォルトの名無しさん :2009/11/29(日) 01:59:37
[1] 基礎プログラミング実習 [2]99文字までの文字列を入力し,アルファベットの小文字は大文字に,アルファベットの大文字は小文字に, またアルファベット以外の文字はアスタリスク’*’に変換した文字列を出力するプログラムを作成せよ. [3] microsoft visual c++ 2008 [4]月曜日に提出です [5]以下、実行結果です。 99文字以下の文字列を入力してください.abcABC123sDFgh#"x32YY= 変換された文字列はABCabc***SdfGH**X**yy*です. 追伸: ちなみにどうやらアスキーコードを使うらしいです。 大文字のコードに32を足せば小文字のコードになるとか言ってました。 これを使わなければいけないようです。 あとライブラリ関数は使用不可です。 文字列とかやったの初めてです。 どうかお願いします。
459 :
デフォルトの名無しさん :2009/11/29(日) 02:01:38
>>458 自分ではここまではなんとか書きました。
#include<stdio.h>
int main(void)
{
char x[100];
int i;
printf("99文字以下の文字列を入力してください");
scanf("%s",x);
for(i=0;;i++)
if(x[i]==0)
break;
printf("変換された文字列は%sです.",x[100]);
}
自分でも何してるのかあんまりわからないです…
#include<stdio.h> void convert(char* x, int len){ for (int i=0; i<len; i++){ if ( ('a' <= x[i]) && (x[i] <= 'z') ) x[i] -= 32; else if ( ('A' <= x[i]) && (x[i] <= 'Z') ) x[i] += 32; else x[i] = '*'; } } int main(void) { char x[100]; int i; printf("99文字以下の文字列を入力してください"); scanf("%s",x); convert(x, 99); printf("変換された文字列は%sです.",x[100]); }
461 :
デフォルトの名無しさん :2009/11/29(日) 02:24:46
void convert(char* x, int len)とか&&とかって何ですか? すいません、習ってなくてよくわからなくて… includeとint main(void)の間にプログラムとか入れたんですね。 正直よくわかりませんが…、まだ習い始めて二ヶ月程度経ってすらなくて…
>>460 全角スペースは使うな。
あと、実行したらどうなるか考えてから書き込め
>>459 #include <stdio.h>
int main(void)
{
int i;
char x[100];
scanf("%s", x);
for(i=0; x[i]; i++) {
if('a'<=x[i] && x[i]<='z') x[i] -= 32;
else if('A'<=x[i] && x[i]<='Z') x[i] += 32;
else x[i] = '*';
}
printf("%s", x);
return 0;
}
464 :
デフォルトの名無しさん :2009/11/29(日) 02:30:08
…すいません、どうやらC言語でかかないといけないようです…
なんでこいつらコンパイルしないの?w
466 :
463 :2009/11/29(日) 02:35:56
>>465 こいつらって俺も入ってるのか?
どこがおかしいか教えてくれ
467 :
466 :2009/11/29(日) 02:39:12
ごめんなさい。僕が無知でした
468 :
465 :2009/11/29(日) 02:39:53
ごめんなさい。僕が無知でした
469 :
デフォルトの名無しさん :2009/11/29(日) 02:40:04
できました、こんなに早くできるとは驚きです。 本当に有難うございます。 少し気になるのですが、ifの後の()にある&&と””はどういう意味ですか? いつも私は(;;)という感じで書きますので…
if()に(;;)って書くのか?w
471 :
デフォルトの名無しさん :2009/11/29(日) 02:52:03
>>470 …すいません、私の勘違いでした。forと間違いました。
でも&&とか''は使ったことないので、意味とかを教えていただければ助かります。
げげっ、げろげろ〜!
&&は論理演算子
いくら初心者といってもこの程度の意味は授業で習ってるだろ?
476 :
デフォルトの名無しさん :2009/11/29(日) 09:14:45
#include <stdio.h> #include <stdlib.h> int main(void) { int k, m, n, q, r; do { scanf("%d", &n); } while(n==1); k=2; while(1) { m = k * k; if(m > n) { printf("%d", n); exit(1); } q = n / k; r = n % k; if(r) k++; else { printf("%d ", k); if(q==1) exit(1); n = q; }} return 0; }
>>475 問題文のままだと素因数分解できないので少し変えた
#include<stdio.h>
int main(void){
int k, m, n, q, r;
step1: do{
printf("\nInput n : ");
scanf("%d", &n);
}while(n<=1);
step2: k=2;
step3: m=k*k;
step4: if(n<m){
printf("%d\n", n);
exit(1);
}
step5: if(n>=m)
{
q=n/k;
r=n%k;
}
step6: if(r!=0){
k++;
goto step3;
}
step7: if(r==0) printf("%d*", k);
step8: if(q==1){
exit(1);
}else{
n=q;
goto step4;
}
return 0;
}
>>475 > 自然数Nが素因数分解できるとき、N≧G^2となる素因数Gが存在することが数学的に証明されている
本当ですか?
17 >= 4 * 4
>>477 ありがとうございました
助かります
>>478 goto文も一つ一つにラベルをつけてやると処理がわかりやすいですね
>>479 そんな単純に記述できるんですね
勉強になりました
>>480 テキストの問題通りだとすればそう記述されています
484 :
480 :2009/11/29(日) 10:33:55
最後に一つだけ
>>475 の問題についてです(4)の文はnがm未満が正しい記述ですよね?
[1] 授業単元:C言語演習 [2] 問題文: 1〜100までの数字を繰り返し入力し、最後に0を入力するとこれまでに 入力された値の合計値を表示するプログラムを作成しなさい。ただし 1〜100以外の数字が入力されたときは”エラー”と表示させる。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 12月10日 どなたか、よろしくお願いします。
>>486 #include<stdio.h>
int main(){
int n,sum = 0;
scanf("%d",&n);
while(n >= 1 && n <= 100){
sum = sum + n;
scanf("%d",&n);
}
if(n == 0)
printf("%d\n",sum);
else
printf("エラー\n");
}
>>487 さん
遅ればせながら、ありがとうございました。
490 :
デフォルトの名無しさん :2009/11/29(日) 14:44:46
#include <iostream> using namespace std; int main() { int m=48,n=36,t,i; for(i=0;;i++) { cout << "m" << i << " " << m << " n" << i << " " << n << '\n'; if(!(t=m%n)) break; m=n; n=t; } cout << "n" << i << "=" << n << '\n'; return 0; } ユーグリッドの互除法で、最大公約数を求めたプログラムなんですが、本当にお願いします。プログラムは書けたんですが、誰かこれのフローチャートを教えてください…これのフローチャートがかけないんです。しかも、テストに出るらしいです。これを書くのが 始まりと終わり→楕円 処理を行う→四角 判断を行う→ひし形 です
>>490 Googleあたりで、"ユークリッドの互除法 フローチャート"で検索すればいくらでも出てくると思う。
同じ余算を条件式とループ内で2回繰り返すのは無駄
そう思うならコードで語れ。
while(g3 = g1 % g2) { g1 = g2; g2 = g3; }
>>484 短くかいてるけど、効率としては格段に落ちるものが美しいとかw
CPUの実行ステップ数が効率の全てだと思い込んでる人多いよね。
コプロセッサも使い切りたい?
>>497 >while(*p++) p2-=2;
なんなんだよ、これはw
下のから考えると
while(*p2) p2++;
p2--;
だろw
>>501 に加えて、
このwhileループだとp2のアドレスがNULL文字まで移動するんで
while抜けた後にポインタ一つ戻す(p2--)とよい。
(そうしないと反転後のpの先頭文字がNULL→空文字列扱いとなる)
あくまで既存のソースを再利用するなら、だけどね。
501は戻してるようにしか見えないが?
504 :
423 :2009/11/29(日) 21:26:16
本当にお願いします。もう時間が迫っているんです…
>>456 void read_data_file(char*file){
int i, n;
FILE *fp;
fp = fopen(file, "r");
fscanf(fp, "%d", &n);
for(i=0; i<n; i++) fscanf(fp, "%d", W + i);
for(i=0; i<n; i++) fscanf(fp, "%d", P + i);
fclose(fp);
}
void write_data_file(char*file,int N){
int i;
FILE *fp;
fp = fopen(file, "w");
fprintf(fp, "%d\n", N);
for(i=0; i<N*2; i++) fprintf(fp, "%d\n", rand() % 100 + 1);
fclose(fp);
}
>>475 よく考えると、qが1になることってありえなくね?
509 :
デフォルトの名無しさん :2009/11/29(日) 22:01:25
>>491 自分が作ったそのプログラムを基にしないといけないし、しかも、あったけど記号とかも台形とかだったりするんですよ…
テストにでるみたいだから誰か本当に教えてください
>>500 stdio.hのみでお願いします
>>501 正直よくわかっていないのでプログラム書いていただけたら幸いです
フローチャートを簡単に書き込み方法がない以上、 回答はあんまり期待できないと思うぜ
>>510 void reverse(char *p)
{
char *p2 = p, tmp;
while(*p2) p2++;
while(p < --p2) {
tmp = *p;
*p++ = *p2;
*p2 = tmp;
}
}
>>512 なるほど
とても参考になりました
感謝します
もうひとつ聞きたいのですが
>>512 で
char *p2 = p, tmp;と宣言していますが
char *p2,tmp;
*p2=p;
とした場合、移植性のないポインタ変換とエラーが出て
char *p2,tmp;
p2=p;
には問題がないのはなぜでしょうか
ポインタについてはまだわからないところが多いのでつまらないことでしたらスルーしてもらってもかまいません
>>490 変数初期化
↓
ループ開始
↓
mとnの値を出力
↓
m/nの余りが0か→(Yes)ループ抜ける→nの値を出力
↓(No)
m=n
n=除算の余り
←ループに戻る
これだけでいいんじゃね?
*p2に代入していいのはchar型変数だから、pを代入すると警告が出る。 宣言時の初期化char *p2 = p; は char *p2; p2 = p; と同じ意味で、 char *p2; *p2 = p; とは全くの別物。
>>516 勉強になります
本当にありがとうございました
ポインタ変数を宣言するときにアスタリスク使うのと、 ポインタが指すアドレスの"値"を取得するのにアスタリスク使うのとで混乱しやすい。
519 :
デフォルトの名無しさん :2009/11/29(日) 22:55:01
[1] 授業単元:Webプログラム [2] 問題文(含コード&リンク): 2つの浮動小数点型(double型)の値を 「気温(度)」「湿度(%)」を表す値として2つの因数で受け取り それらの値によって求められた不快指数の値(double型)を戻り値とする 関数をfukaiという関数で作成。 さらに、このfukai関数を利用し、キーボードから気温と湿度を入力すると 不快指数の値を表示するプログラムを作成。 体感を表す言葉として、不快指数が60未満で[cold],60以上75未満[comfort] 75以上[discomfort]と表示するようにすること。 ※気温をt 湿度をhとすると 不快指数=0.81×t+0.01×h×(0.99×t−14.3)+46.3 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 2009年11月30日22:00まで どうかお願いします。
>>509 授業で教えられた形状でないとだめなら友達からノートでも借りないとむり
522 :
デフォルトの名無しさん :2009/11/29(日) 23:08:17
>>519 #include <stdio.h>
double fukai(double temp, double humidity)
{
return 0.81 * temp + 0.01 * humidity * (0.99 * temp - 14.3) + 46.3;
}
int main()
{
double temp, humidity, discomfort_index;
printf("気温(度) = ");
scanf("%lf", &temp);
printf("湿度(%) = ");
scanf("%lf", &humidity);
discomfort_index = fukai(temp, humidity);
printf("不快指数 = %f\n", discomfort_index);
if (discomfort_index < 60.0)
puts("[cold]");
else if (discomfort_index < 75.0)
puts("[comfort]");
else
puts("[discomfort]");
return 0;
}
524 :
デフォルトの名無しさん :2009/11/29(日) 23:13:50
>>520 やり方は何でもいいんですが、
始まりと終わり→楕円
処理を行う→四角
判断を行う→ひし形
ならいいんです…
どなたか
>>314 はできないでしょうか…?
もし可能ならばお願いします
526 :
490 :2009/11/29(日) 23:22:22
527 :
デフォルトの名無しさん :2009/11/29(日) 23:23:19
>>524 Googleとかで調べたページに記号の説明ぐらい書いてあるでしょ
置換することもできない?
フローチャートならEXCELで描けるんじゃないの?
531 :
490 :2009/11/29(日) 23:42:21
>>528 このプログラムを基にして作らないといけないじゃないですか
>>531 目的のプログラムのフローチャートがそのまま落ちてる訳無いだろ
そのくらい自分の頭使え
533 :
490 :2009/11/30(月) 00:15:27
>>532 テストに同じ問題出るから焦ってるんです助けてください
プログラムが「書けた」のなら、それをフローチャートにするのもそう難しいことじゃない。
>533 覚えた解答は意味が無い 本質を見極めろ
536 :
490 :2009/11/30(月) 00:25:42
誰か本当に助けてください。お願いします。別にテストで点取れればそれでいいです
541 :
540 :2009/11/30(月) 01:42:33
「i+=1」は「i++」のほうがいいかも
542 :
デフォルトの名無しさん :2009/11/30(月) 01:58:38
>>542 いや4×4が5×5になったとしてもちょっといじるだけですぐ出来る
んだけど、aとbという二つの行列があって、題意に沿えばa,b両方
とも使わなければならないんだけど、それとは別に捉えてa^(-1)と
b^(-1)とdetAとdetBを求めるのでもいいんだね?
それかA^(-1)Bを求めるのかよくわからない
とにかく自分で適当に判断して書くよ
考え方がよくわからないので
545 :
デフォルトの名無しさん :2009/11/30(月) 03:39:41
>>544 ありがとうございます。
とても助かりました
フローチャートの人からものすごくゆとり臭が漂ってくる
プロシージャフローダイアグラムとデータフローダイアグラム どちらが処理の記述に適しているか判定するアルゴリズムはある?
549 :
365 :2009/11/30(月) 08:49:49
>>431 お手数おかけしました。
仕様と若干(標準入力ではない)異なるようですが、これは
何とかなりそうです。感謝です。
[1] 授業単元: プログラミングU [2] 問題文(含コード&リンク): 2進数と10進数の相互変換のプログラムを作る。 自作関数として変換(計算)部分と入力部分とを分ける。 正負の数、少数も変換できるようにする。 入力はScanfを使用する。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C言語 [4] 期限: 2009年12月01日まで [5] その他の制限: 特にありません。 期限が明日と短いですが、よろしくお願いします。
551 :
431 :2009/11/30(月) 12:34:14
552 :
デフォルトの名無しさん :2009/11/30(月) 12:39:40
ポインタ変数について詳しく教えてください
>>487 なんですけれど、間違っていませんか?
実行できませんが…
char *name[] = {"Item1","Item2","Item3"}; name[]の配列数を調べるにはどうすれば良いでしょうか?
>>554 sizeof(name)/4てのはどう?
#include <iostream>
int main()
{
char *name[] = {"Item1","Item2","Item3"};
int n = sizeof(name)/4;
std::cout << n << std::endl;
for(int i=0;i<n;i++){
std::cout << name[i] << std::endl;
}
return 0;
}
>554 要素数だよね sizeof name/sizeof name[0] sizeof name/sizeof*name [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 配列の要素数をコンパイル時にに求めるマクロを作成することを考える ここで、 #define numberof(Array) \ (sizeof(*Array)?sizeof(Array)/sizeof(Array[0]):0u) #define numberof_(Array)\ (sizeof(Array)/sizeof(0[Array])) を定義し int array[4][16]について numberof(array)とnumberof_(array) およびnumberof(array + 0)とnumberof_(array + 0) の予想されるそれぞれの値とコンパイル結果について考察してください 特にnumberof_(array + 0)の値については (array + 0)の型を示した上で値を求めた計算式を示てください また、追加の課題としてできる人はnumberof()の問題点を指摘し、 改良方法を詳しく示すようにあります、お願いします [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: cc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) [3.3] 言語: C言語 [4] 期限:[2009年11月30日23:59まで] [5] その他の制限:特に無し
560 :
デフォルトの名無しさん :2009/11/30(月) 17:00:42
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): int型整数の4乗を返す関数 int pow4(int x) を作成せよ。(ただし関数powは使用しない) (実行例) 整数を入力してください:5 その4乗値は625です。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: emacsでつくり、ktermでコンパイルするやつです [3.3] 言語: C言語 [4] 期限:[2009年12月1日18時まで] [5] その他の制限:特に無し どうぞよろしくお願い致します。
>>561 さん
ありがとうございます、非常に助かりました。
いんてじゃーーーー!なんでや
565 :
デフォルトの名無しさん :2009/11/30(月) 20:16:42
[1] 授業単元:プログラミング演習 [2] 問題文: 文字をキーボードから入力させ、英大文字は英小文字に変換して、英小文字は英大文字に変換して その他の文字はそのまま出力するプログラムを作成しなさい。文字の入力にはgetchar関数を、 出力にはputchar関数を必ず使用し、文字の変換には標準ライブラリを使用しないこと。 なお、入力する文字は「Programing 1」とし、Ctrl+Dで入力終了とする [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月2日まで [5] その他の制限: コンソール入出力というところまで習っています 急ですみませんがよろしくお願いします
567 :
432 :2009/11/30(月) 21:22:47
>>433 遅くなって、ゴメンなさい。
質問から30分ですか、速いですね!
ただ、そのプログラムは重複順列の総当りですよね?
後出しで申し訳ありませんが、
以下の例題を1秒以内で解きたいのです。
(先頭行は出題の個数)
----- 入力 -------------------------
10
1234567890 10
1357986420 11
9451358855 1169
3512689124 572
1265324600 5123
3210246982 3631
3202320321 1234
9999444422 913
1232156985 9865
3596956842 124
----- 出力 -------------------------
362880
316800
70
1818
98
158
8
12
60
3758
>>565 #include<stdio.h>
int main(void)
{
int i, year;
double riritu;
long gankin, risoku=0, goukei;
printf("%-28s: ", "元金[円]を入力してください");
scanf("%ld", &gankin);
printf("%-28s: ", "年利[%]を入力してください");
scanf("%lf", &riritu);
printf("%-28s: ", "預金年度を入力してください");
scanf("%d", &year);
goukei=gankin;
printf("+------+----------+----------+\n");
printf("| %4s | %8s | %8s |\n", "年度", "利息", "元利合計");
printf("+------+----------+----------+\n");
for(i=0;i<=10;i++)
{
printf("| %4d | %8.0ld | %8ld |\n", year+i, risoku, goukei);
risoku=goukei*(riritu/100);
goukei+=risoku;
}
printf("+------+----------+----------+\n");
return 0;
}
>>567 参考までに
>>432 の環境で
>>433 だとどのくらい時間がかかるの?
CPU : Atom N270 1.6GHz (HT有効)
OS : WindowsXP Home SP3 32bit
コンパイラ : gcc (MinGW 3.4.5)
コンパイルオプション : -O2
で
>>567 の問題を解くと 4.2秒 くらいだから
早いマシンなら普通に1秒切るんじゃないの?
[1] 授業単元: プログラミング実習 [2] 問題文:基数変換 すべての実数(整数、小数で+-含む)10→2、2→10に変換せよ。 このとき、入力部と出力部を関数化せよ。 [3] 環境 [3.1] OS:Linux (emacsで作成して、gccでコンパイルするやつです。) [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月1日17:00 どうかよろしくお願いいたします。。
1] 授業単元: プログラミング実習 [2] 問題文:基数変換 すべての実数(整数、小数で+-含む)10→2、2→10に変換せよ。 このとき、入力部と出力部を関数化せよ。 [3] 環境 [3.1] OS:Linux (emacsで作成して、gccでコンパイルするやつです。) [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月1日17:00 どうかよろしくお願いいたします。。
572 :
432 :2009/11/30(月) 23:53:26
>>569 2.5秒でした
CPU: Celeron 2.2GHz
OS: XP Home SP3 (メモリ512MB)
コンパイラ: gcc 4.4.0 (MinGW)
最適化オプション: -O2
これより速いマシンでも1秒切るのは、多分きついと思います。
>>572 普通に1秒切ったけど・・・
CPU Phenom II X4 945
メモリ 8GB
OS Win7x64
コンパイラ VC++2008
最適化オプション等 デフォルト
574 :
432 :2009/12/01(火) 00:26:51
>>573 あらら、最近のマシンは速いねぇ〜w
64bit だからかな?(ハードは詳しくないので間違ってたらゴメン)
コンマ何秒か、計測できますか?
できたら、参考までに教えてください。
マシンの速さのチェックには向かない問題
実行マシン指定しないで絶対値で速度比較してもほとんど意味ないと思うんだが
マシンの総合スペックを求めるのは
>>365 の問題あたりで、1Gバイトを超える
テキストを読み込ませて正常に落ちず(メモリが足りない場合はその旨報告
して終了)に動作するかとかでチェックだろうな
>>573 のスペックだとそのうち6G位のテキストファイル丸ごと読み込ませされそうだな
571 どなたかよろしくお願いいたします。。
C++です。 文字列を二次元配列に保存するにはどうしたらよいのでしょうか? ユーザに名前を読み込む人数を入力させた後、名前を人数分入力してその名前を二次元配列に保存したいです。 const int max_mojisu = 20; cout << "生徒の数を入力してください"; cin >> member; char ninzu[menber][max_mojisu]; ←上で人数を入力させて、配列の要素の制限に使おうとするとエラーが・・・ cout << "生徒の名前を入力していっていください" << endl; cin.getline( ) ←()内の書き方がわかりません・・・ わかりにくいと思いますがよろしくお願いします。
std::vector<std::string> ninzu(member); getline(cin,ninzu);
for(int i=0;i<member;++i)getline(cin,ninzu[i]); だった
585 :
584 :2009/12/01(火) 13:07:46
>>571 問題文をチェックしてみたら,「+」を忘れてたことに気付いた。
勘弁してね。
>>570 バカな質問かもしれないので、恐る恐る聞くのですが、
浮動小数点数の実装されたもののビット表現は2進数と呼ぶのですか。
588 :
デフォルトの名無しさん :2009/12/01(火) 16:56:25
[1]C言語入門 [2] 3つの整数x,y,zを入力し、これらを引数として、大きい順に入れ替えて返す関数をつくれ。ただしポインタ変数を用いること。 main関数は整数の入力と結果の表示のみにする。 [3.1] Linux [3.2] gcc 3.4 [3.3] C [4] 2009/12/7/15:00 [5] 特になし。 よろしくお願いします
[1]C言語実習 [2] 覆面算 SEND+MORE=MONEYを解くプログラム(各字は数字を表す) 2進数から16進数の場合について、解がある時は一つずつ進数を明示した上で 表示。但しいずれの場合も最上位桁は0ではないものとする。 [3] OS:Windows XP 言語C( Visual studio) [4] 12/15迄 [5]特に無し
592 :
590 :2009/12/01(火) 18:00:03
2進数==>8進数 の間違いでした。ミスを訂正します
597 :
デフォルトの名無しさん :2009/12/01(火) 20:26:45
588です。回答ありがとうございました。 申し訳ないのですがC++の方でもお願いできないでしょうか
>>430 当方の環境は Windows XP/cygwin、処理系は gcc 4.3.2 です。
http://codepad.org/TgmK9FF5 コマンドラインの各数をいったん正の数としてとりこみ10進2進変換→符号反転を行うため、負の最小の数 -9223372036854775808 は overflow 扱いになります。
>>598 例えば,元がa : 1, b: 2とすると,これをa: 2, b: 1とすればゴールです.
単純にa = b; b = aとやったのでは,a = 2, b = 2となってしまいます.
なので,もう一つ変数を用意して,消えてしまう値をそこに入れておきます.
というのが,そこの「ヒント」にかかれていることです.
603 :
598 :2009/12/01(火) 21:43:38
わかりました
[1] 授業単元:
[2] 問題文(含コード&リンク):
https://www.ioi-jp.org/JOI/auth/showForm.action?id=t4&term=pr [3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: VC++2008
[3.3] 言語: C
[4] 期限: 特になし
[5] その他の制限:
得点を比較するプログラムです
最初に書いてあるscanfは、比較する回数を入力して、
ループの中に入ってからのscanfは、比較する数字を入力して、大きい方に1を足して
最後にはカウントした数字を出力します
#include<stdio.h>
int main(){
int a,c=0,b,d=0,n,m;
scanf("%d",&n);
for(m=0;m<n;m++){
scanf("%d %d",&a,&b);
if(a > b) c++;
else if(a < b) d++;
}
printf("%d %d",c,d);
return 0;
}
こういうプログラムを考えました
ファイルから数字を読み込むプログラムに変えたいのですが、
どうすればファイルから読み込むことが出来るようになりますか?
少し席を外しますが、俺は必ず言います お願いします
俺は× お礼は○ です
607 :
デフォルトの名無しさん :2009/12/01(火) 22:10:45
>>606 さん
問題
A さんと B さんがゲームで対戦した.対戦は N 回にわたって行った.各回の対戦において,
より高い点数を獲得した人がその回の勝者となる.
すなわち,第 i 回目の対戦で
A さんの点数が B さんの点数より大きければ第 i 回目は A さんの勝ち,
B さんの点数が A さんの点数より大きければ B さんの勝ち,
同点の場合はどちらの勝ちにもならない.
N 回の対戦における A さんと B さんの点数が与えられたとき,
A さんと B さんがそれぞれ何回勝ったかを出力するプログラムを作成せよ.
入力
入力は 1+N 行からなる.
1 行目には対戦の回数 N (1 ≦ N ≦ 1000000) が書かれている.
2 行目以降の i+1 行目 (1 ≦ i ≦ N) には i 回目の対戦における A さんと B さんの点数が空白区切りで書かれている.
各々の点数は 0 以上 100 以下の整数である.
出力
出力は 1 行からなる. A さんが勝った回数と B さんが勝った回数をこの順に空白で区切って出力せよ.
となっています
入力データ2までとかならまだ件数が少ないので良いのですが、
入力データ5になると1万件の入力データがあるのでファイルを読み込む以外は無いと思いました
そのサイトに行ってもどうすればいいか良く解りませんでした
ですので、書き方ではなくてソースを書いてください お願いします
>>610 ファイルからの入力についての質問ということで良いでしょうか.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10221.c こちらをご覧ください.
ファイル上のコメントにファイルのフォーマットを記述しておきました.
すなわち,各行にAのポイントとBのポイントが,スペースで区切られているようなフォーマットです.
入力は,効率よく,うまくやろうと思うとすっっっごく面倒くさいので,よくある書き方の一例で許してください.
以下は実行の様子です.
ちゃんとin.txtから読み込めていることがわかります.
Z:\test>gcc -Wall test.c
Z:\test>a in.txt
A: 10, B:100
A: 20, B: 15
A: 2, B: 0
A: 121, B: 14
Z:\test>
>>611 インクルードファイルがコピペできてなかった
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
メンゴ
>>610 なぁ、認証が必要な、現在進行形の公式な問題を公開してもいいのか?
普通は解答サイトへの認証ブロックが設けられるのが先で 問題そのものに設けられるのは、それだけ教育現場での 競争が激しいってことの証しかもな。 自分で解く能力よりか、いかに他人の助けを借りて総合的に 問題解決が出来るかがIT時代以後の能力評価基準になって るわけだし。(もちろんこれは破綻への道でしかないが) でこういうスレがそれを煽っているとw どんなに簡単な問題でも貼られてから24時間は解答を敢 えて貼らないというのはそろそろ不文律にしたほうがいい んでね?質問者の設定した締め切り時刻の24時間以内 ってのが理想だとオモ
618 :
デフォルトの名無しさん :2009/12/02(水) 03:19:21
999.99以下の3行3列の正の実数データを入力してください data[0][0]の値? 350.23 data[0][1]の値? 1.0 data[0][2]の値? 503.25 data[1][0]の値? 625 data[1][1]の値? 3.1415 data[1][2]の値? 50.27 data[2][0]の値? 999 data[2][1]の値? 750.75 data[2][2]の値? 0 ここまでデータ入力 集計の結果は次のとおりである. 350.23 1.00 503.25 : 854.48 625.00 3.14 50.27 : 678.41 999.00 750.75 0.00 : 1749.75 ================================= 1974.23 754.89 553.52 : 3282.64 続行するには何かキーを押してください . . . となるようなプログラムをうっているのですが…
他人の力を借りて × 自分の力を極力使わず ○
620 :
619 :2009/12/02(水) 03:21:29
621 :
デフォルトの名無しさん :2009/12/02(水) 03:22:13
長いので二回ぐらいに分けて質問します。 私は今、 999.99以下の3行3列の正の実数データを入力してください data[0][0]の値? 350.23 data[0][1]の値? 1.0 data[0][2]の値? 503.25 data[1][0]の値? 625 data[1][1]の値? 3.1415 data[1][2]の値? 50.27 data[2][0]の値? 999 data[2][1]の値? 750.75 data[2][2]の値? 0 集計の結果は次のとおりである. 350.23 1.00 503.25 : 854.48 625.00 3.14 50.27 : 678.41 999.00 750.75 0.00 : 1749.75 ================================= 1974.23 754.89 553.52 : 3282.64 続行するには何かキーを押してください . . . のように表示されるプログラムを作っているのですが、
622 :
619 :2009/12/02(水) 03:22:27
よくわからないので教えて下さい。 点プレには沿いたくありません
今回だけだぞ
>>621 #include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3
int main(void)
{
int i, j;
double data[M][N], sumcol[M] = {0.0}, sumrow[N] = {0.0}, sumall = 0.0;
printf("999.99以下の%d行%d列の正の実数データを入力してください\n\n", M, N);
for (i = 0; i < M; i++)
for (j = 0; j < N; j++) {
printf("data[%d][%d]の値? ", i, j);
scanf("%lf", &data[i][j]);
}
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
printf("%.2f ", data[i][j]);
sumcol[i] += data[i][j];
sumrow[j] += data[i][j];
}
printf(": %.2f\n", sumcol[i]);
}
puts("=================================");
for (i = 0; i < N; i++) {
printf("%.2f ", sumrow[i]);
sumall += sumrow[i];
}
printf(": %.2f\n\n", sumall);
return 0;
}
一行抜けてた #include <stdio.h> #include <stdlib.h> #define M 3 #define N 3 int main(void) { int i, j; double data[M][N], sumcol[M] = {0.0}, sumrow[N] = {0.0}, sumall = 0.0; printf("999.99以下の%d行%d列の正の実数データを入力してください\n\n", M, N); for (i = 0; i < M; i++) for (j = 0; j < N; j++) { printf("data[%d][%d]の値? ", i, j); scanf("%lf", &data[i][j]); } puts("\n集計の結果は次のとおりである.\n"); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { printf("%.2f ", data[i][j]); sumcol[i] += data[i][j]; sumrow[j] += data[i][j]; } printf(": %.2f\n", sumcol[i]); } puts("================================="); for (i = 0; i < N; i++) { printf("%.2f ", sumrow[i]); sumall += sumrow[i]; } printf(": %.2f\n\n", sumall); return 0; }
>>626 回答者に報酬がないものか。小遣いかせぎしたいもの。
国語の先生に数学は兎も角理科の問題まで聞かれても困る というのが実際のところだろw しかも「早めに」だし.... 一般論だけであるという但し書き付きだがアドバイス テンプレートクラスの多用はバグのもと。余程慣れてないと 特有の癖(言語文法の制約からくるもので作者が下手という わけではない)がバグを誘発する。 せっかくC++で書いているんだから、出来る限りすべて クラス化して記述。(インスタンスを作らないクラスを mainで呼び出す) あと大事なこと。「おかしいな」と思ったら余りしつこく追求せず そのコードを潔く捨てて忘れて1から書き直すこと。急がば回れ。
void intary_rcpy(int v1[], const int v2[],int no){ int i; for(i=0;i<no;i++) v1[i]=v2[no-1-i]; } で動けばラッキーだと思え
638 :
ああああ :2009/12/02(水) 16:07:19
【質問テンプレ】 [1] 授業単元:大学の授業 [2] 問題文(含コード&リンク):したにまとめて書きました [3] 環境 [3.1] OS: (Windows/Linux/等々) windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) ビジュアルスタジオ2005?? [3.3] 言語: (C/C++/どちらでも可 のいずれか) Cでおねがいします [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) なるべく早く [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ありません したにつづく
639 :
ああああ :2009/12/02(水) 16:09:40
1:originalファイルから、シミュレーション範囲(数値)を読み取り、insertedファイルにコピー 2:absorbalファイルから、水分子の各原子の位置(座標)を読み取る 3:2の座標をランダムに発生させた数(ランダムに発生させた数の範囲は0以上originalファイルから読み込んだ範囲まで)だけ平行移動し、insertedファイルに書きたす 3は入力されたn回繰り返す 4:3の結果をinsertedファイルに書き足し、そのあとendを2回書きこみ終了 以下のコードではシミュレーション範囲は読み取れているが乱数発生時に反映されていない また、水分子の位置も毎回同じになっている→これを改善したい つづく
640 :
ああああ :2009/12/02(水) 16:11:27
#include<stdafx.h> #include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> #include<iostream> //substr関数用 #pragma warning(disable : 4192) //警告を制御 #pragma warning(disable : 4996) int main(void) { /*ファイルアドレス記憶用のポインタ変数*/ FILE*fp_original; //シュミレーション範囲(長さや角度など)のoriginal.carファイル用 FILE*fp_absorbal; //挿入したい分子構造のabsorbal.carファイル用 FILE*fp_inserted; //insertedファイル=original.carファイル+absorbalファイルを基に計算を行った結果 printf("デバッグ22行目\n"); /*使用する3つのファイル(original,absorbal,inserted)の準備*/ //↓マテスタで作った、シュミレーション範囲(長さや角度など)の.carファイル(original.car)を読み込む(書きたせてはいけない) fp_original=fopen("original.car","r"); //r:読み込み、テキストモード //↓マテスタで作った、挿入したい分子構造の.carファイル(absorbal.car)を読み込む(書きたせなくてよい) fp_absorbal=fopen("absorbal.car","r");
641 :
ああああ :2009/12/02(水) 16:12:21
#include<stdafx.h> #include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> #include<iostream> //substr関数用 #pragma warning(disable : 4192) //警告を制御 #pragma warning(disable : 4996) int main(void) { /*ファイルアドレス記憶用のポインタ変数*/ FILE*fp_original; //シュミレーション範囲(長さや角度など)のoriginal.carファイル用 FILE*fp_absorbal; //挿入したい分子構造のabsorbal.carファイル用 FILE*fp_inserted; //insertedファイル=original.carファイル+absorbalファイルを基に計算を行った結果
642 :
ああああ :2009/12/02(水) 16:20:20
すいません。上に書いたコードは間違いです… テンプレの内容は同じですが、よろしくお願いします。 つくりたいプログラムの説明 1:originalファイルをそのままinsertedファイルにコピー 2:absorbalファイルから01,H1,H2原子の座標を引っ張り出し、 それに発生させた乱数(乱数の範囲は0〜insertedのシミュレーション範囲まで) を加え、その結果をinsertedファイルに書き足す。 2を入力した回数繰り返す です。 各ファイルの中は以下の通り(続く)
643 :
ああああ :2009/12/02(水) 16:25:03
つづき !BIOSYM archive 3 PBC=ON Materials Studio Generated CAR File !DATE Thu Nov 19 17:13:56 2009 PBC 12.0000 12.0000 12.0000 90.0000 90.0000 90.0000 (P1) O1 -1.741302123 -0.790912385 -6.162912333 XXXX 1 xx O 0.000 H1 -2.498841233 -1.371238949 -6.162123933 XXXX 1 xx H 0.000 H2 -0.983761232 -1.378123949 -6.161232933 XXXX 1 xx H 0.000 O2 -4.566621230 -1.546123478 -4.791230741 XXXX 1 xx O 0.000 シミュレーション範囲は12.0000 12.0000 12.0000 です。
リンク使えよ
ふざけて質問してるのかと思った
>>645 問題をアップするのだから codepad は使えないのでは?
テンプレどおりでいいと思います。
むしろ回答側で codepad にて身の潔白を証明するのがいいかと。
>>647 Plain Textってのもあるみたいだよ.
650 :
ああああ :2009/12/02(水) 20:57:11
643のつづきです absorbalファイルの中!BIOSYM archive 3 PBC=OFF Materials Studio Generated CAR File !DATE Thu Nov 05 15:15:30 2009 O1 -10.396332 -8.568939 -2.443329 XXXX 1 xx O 0.000 H1 -11.153873 -9.156903 -2.443329 XXXX 1 xx H 0.000 H2 -9.638791 -9.156903 -2.443329 XXXX 1 xx H 0.000 end end
651 :
ああああ :2009/12/02(水) 20:59:11
codepad使いこなせませんでした… 連投で申し訳ありませんが非常に困っておりますのでよろしくお願いします!!
652 :
デフォルトの名無しさん :2009/12/02(水) 21:12:51
#include <iostream> #include <cmath> using namespace std; int main() { double a,b,c; cin >> a >> b >> c; if(a==0) { cout << (-c/b) << '\n'; } else if((b*b-4*a*c)<0) { cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { } return 0; } C++で二次方程式のプログラムを作るんですが条件は虚数解、実数解、a=0の時で分けるんですが最後のelseの下にcoutの文一行だけ書いてないんですが教えてくれませんか
2次方程式の解の公式って、中学生で習うんだっけ?
>>651 アンカーすら付けて無いから、650に気付かない人は多いだろうな。
本当に困っているなら尚更、テンプレ
>>1 にある掲示板に問題を書き込むべし。
655 :
デフォルトの名無しさん :2009/12/02(水) 23:13:04
#include <iostream> #include <cmath> using namespace std; int main() { double a,b,c,D; cin >> a >> b >> c; if(a==0) { if(b!=0) cout << (-c/b) << '\n'; } else { D = b*b-4*a*c; if(D < 0) { cout << -b/(2*a) << "±" << sqrt(-D)/(2*a) << "*i" << endl; } else { cout << -b/(2*a) + sqrt(D)/(2*a) << ", "; cout << -b/(2*a) - sqrt(D)/(2*a) << endl; } } return 0; }
657 :
デフォルトの名無しさん :2009/12/02(水) 23:33:56
>>656 ありがとうございます
これのフローチャートを最後に誰か教えてくれませんか?
開始と終了→楕円
処理を行う→四角
判断を行う→ひし形
でお願いします
>・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ここまで教えてあげないといけないの?
628ですが一部抜粋 #include <iostream> #include <cstdlib> double uniformed_rand(void) { return (rand()+1.0)/RAND_MAX; } int main(void){ int n=100; double r=1.0; double x,y,z; for(n=0;n<100;n++) { x=(uniformed_rand()*2-1)*r; y=(uniformed_rand()*2-1)*r; z=(uniformed_rand()*2-1)*r; if(x*x+y*y+z*z<r*r) n++; std::cout << x << " " << y << " " << z<< std::endl; } return 0; } これで100個のデータが出て欲しいんですが69個しかでてきません 原因はどこにあるんでしょうか?
>>660 n++消したら69個にはならなくなりましたが180個くらいになってしまいます。
たびたびすいません
>>661 15c15
< for (n = 0; n < 100; n++) {
---
> for (n = 0; n < 100;) {
19c19
< if (x * x + y * y + z * z < r * r)
---
> if (x * x + y * y + z * z < r * r) {
21c21,22
< std::cout << x << " " << y << " " << z << std::endl;
---
> std::cout << x << " " << y << " " << z << std::endl;
> }
>>662 ありがとうございます
解決致しました
感謝します
664 :
デフォルトの名無しさん :2009/12/03(木) 03:20:42
[1] C言語 [2] 問題文(含コード&リンク): 問題1 unsigned int型の引数を1つ持ち, その値を2進数で印字する戻 値のない関数, print_bin() を作成し, 動作を確認できるプロ グラムとして作成して rep07.c として提出せよ。 ただし, putchar() 以外のライブラリ関数を使用してはなら ない。 問題2 double型の配列とint型の引数を持ち, double型の戻値を持つ関 数を考える。第一引数のdouble型の配列の要素数が第二引数で 与えられるとして, 第一引数のdouble 型の配列に格納されてい る値のうち最大のものを戻値として返す関数 max_d_array() を 作成し, 動作確認できるプログラムとして作成して rep08.c と して提出せよ。 ただし, max_d_array() 内部ではいかなる関数も呼んではな らず, 制御構文としては while()文, if()文, return文のみを 用いて実装しなければならない。do-while()文, for()文, switch-case文, goto文, 条件式(三項演算子?:)は使ってはなら ない。三項演算子以外の各種演算子と変数は自由に使って良い。 問題3 標準入力からの入力に対して、アルファベットの文字を3文字ず らして標準出力に出力するシーザー暗号化プログラムを作成し て、rep09.c として提出せよ。具体的には, 小文字に対しては a -> d, b -> e, ..., w -> z, x -> a, y -> b, z -> c なる 変換である。もちろん大文字に関しても同様の変換処理をしな ければならない。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: h21 12月4日 13時 まで [5] その他の制限:特になし
>>664 問題2
#include <stdio.h>
double max_d_array(double *p, int n)
{
double max = *p;
while(--n) if(max < *++p) max = *p;
return max;
}
int main(void)
{
double a[] = {1,2,3,4,5};
printf("%f\n", max_d_array(a, sizeof a / sizeof *a));
return 0;
}
[1] 授業単元:C++実習 [2] 問題文(含コード&リンク):分数クラス2 分数を扱うクラスを作成する。クラス名はBunsu。データメンバはint型でbunshiとbunboでpraivateとする。 コンストラクタにより初期化をおこなう。初期値が指定されなかったときは省略時引数ででbunshi,bunboとも1で初期化すること。 またBunsuクラスの振る舞いをテストする適切なmain関数も作成すること。1ファイルで作成してください。 作成する関数 ・コンストラクタ ・演算子のオーバーロード(friend関数で作成すること) +, -, *, /, ==, != の演算子について多重定義を行なう。演算結果は約分する。 >>と<<のオーバーロード(friend関数で作成すること) ・<<Bunsuクラスのオブジェクトをcoutで出力すると分子/分母の形式で出力する。 [3] 環境 [3.1] OS:Windows(Vista) [3.2] コンパイラ名とバージョン:VisualStudio2008 [3.3] 言語:C++ [4] 期限:[2009年12月6日22:00まで] [5] その他の制限:とくにありません。 よろしくお願いします。
1] 授業単元:プログラミング演習 [2] 問題文 氏名をキーボードから入力させ、入力された文字列長を求めて画面に表示するプログラムを作りなさい。 ただし、文字列長を求めるのに標準ライブラリ関数を使用しないこと。バッファオーバーランなどが発生する 不正な入力は行われないものとする。 [3] 環境 [3.1] Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:明後日まで [5] その他の制限:コンソール入出力というところまで習っています。 どなたかお願いします
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 関数としてy=sinx,y'=sinx+xcosxを取り上げ、f'(x)=sinx+xcosxの値を数値微分による方法から計算するプログラムを作成し 解析値と比較してみよ。ただしh=0.1とし、0≦x≦πとせよ。 [3] 環境 [3.1] OS:windows vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: (2009年12月5日10:00まで] [5] その他の制限:特にはありません。 すいませんが、よろしくお願いします。
>>671 f(x) を求めるのですか?それとも f ' (x) ? ∫f(x)dx ?
なにを求めるのか教えてください。
673 :
デフォルトの名無しさん :2009/12/03(木) 20:30:13
>>673 ほとんど答えが書いてあるような問題だけど・・・
#include<stdio.h>
void swap(int *l, int *r)
{
int tmp;
tmp=*l;
*l=*r;
*r=tmp;
}
int main(void)
{
int n1,n2;
puts("2つの整数を入力してください。");
printf("整数A:"); scanf("%d",&n1);
printf("整数B:"); scanf("%d",&n2);
swap(&n1, &n2);
puts("これらの値を交換しました。");
printf("整数Aは%dです。\n",n1);
printf("整数Bは%dです。\n",n2);
return 0;
}
>>672 遅レスすいません。
f'(x)を求める問題です。
677 :
デフォルトの名無しさん :2009/12/03(木) 23:12:17
[1] 授業単元:プログラミング演習
[2] 1.サンプルプログラムを参考に乱数によって生成した20個の数字を配列に入れ、バブルソートによって小さい順に表示するプログラムを作成せよ。
2.サンプルプログラムを参考乱数によって生成した20個の数字を配列に入れ、バブルソートによって大きいものから順に表示するプログラムを作成せよ。
3.キーボードから次々に整数を入力し、入力のたびにそれまでに入力した数字を小さい順に表示するプログラムを作成せよ。数字は10個入力したらプログラムは終了するようにすること.
4.0から1までのdouble型の数字を20個乱数によって生成し、小さい順に表示するプログラムを作成せよ。
5.以下の英単語を辞書順に(アルファベット順に)ソートによって並べ替えて表示するプログラムを作成せよ。すべての4文字の単語であることを利用してもよい。
mane, malt, mama, mark, mare, maid, made, mach, many, mess, meat, neat, like, lime, limb
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10230.txt [3.1] WindowsXP
[3.2] turbo C
[3.3] C++
[4] 今週中
[5] 1、2番は乱数の生成がわからなかったのでできませんでした。よろしくおねがいします。
678 :
デフォルトの名無しさん :2009/12/03(木) 23:13:27
[1] 授業単元:プログラミング演習
[2] 1.サンプルプログラムを参考に乱数によって生成した20個の数字を配列に入れ、バブルソートによって小さい順に表示するプログラムを作成せよ。
2.サンプルプログラムを参考乱数によって生成した20個の数字を配列に入れ、バブルソートによって大きいものから順に表示するプログラムを作成せよ。
3.キーボードから次々に整数を入力し、入力のたびにそれまでに入力した数字を小さい順に表示するプログラムを作成せよ。数字は10個入力したらプログラムは終了するようにすること.
4.0から1までのdouble型の数字を20個乱数によって生成し、小さい順に表示するプログラムを作成せよ。
5.以下の英単語を辞書順に(アルファベット順に)ソートによって並べ替えて表示するプログラムを作成せよ。すべての4文字の単語であることを利用してもよい。
mane, malt, mama, mark, mare, maid, made, mach, many, mess, meat, neat, like, lime, limb
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10230.txt [3.1] WindowsXP
[3.2] turbo C
[3.3] C++
[4] 今週中
[5] 1、2番は乱数の生成がわからなかったのでできませんでした。よろしくおねがいします。
679 :
デフォルトの名無しさん :2009/12/03(木) 23:14:20
[1] 授業単元:プログラミング演習
[2] 1.サンプルプログラムを参考に乱数によって生成した20個の数字を配列に入れ、バブルソートによって小さい順に表示するプログラムを作成せよ。
2.サンプルプログラムを参考乱数によって生成した20個の数字を配列に入れ、バブルソートによって大きいものから順に表示するプログラムを作成せよ。
3.キーボードから次々に整数を入力し、入力のたびにそれまでに入力した数字を小さい順に表示するプログラムを作成せよ。数字は10個入力したらプログラムは終了するようにすること.
4.0から1までのdouble型の数字を20個乱数によって生成し、小さい順に表示するプログラムを作成せよ。
5.以下の英単語を辞書順に(アルファベット順に)ソートによって並べ替えて表示するプログラムを作成せよ。すべての4文字の単語であることを利用してもよい。
mane, malt, mama, mark, mare, maid, made, mach, many, mess, meat, neat, like, lime, limb
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10230.txt [3.1] WindowsXP
[3.2] turbo C
[3.3] C++
[4] 今週中
[5] 1、2番は乱数の生成がわからなかったのでできませんでした。よろしくおねがいします。
680 :
デフォルトの名無しさん :2009/12/03(木) 23:19:30
>>679 乱数は,#include <stdlib.h>してrand()したらOK.
srand()するとなおよい.
683 :
671 :2009/12/04(金) 00:19:24
671ですがどなたかお願いできませんか?
>>683 > y=sinx,y'=sinx+xcosx
2つの関数じゃないなら、これって矛盾してないかい?
685 :
671 :2009/12/04(金) 00:31:41
>>684 y'はただyの式を微分しただけなので特に矛盾はないと思うんですが
ただ正直、私も題意を理解できなかったのでここに書かせてもらいました…
y=xsinxの間違いじゃないんですか
687 :
デフォルトの名無しさん :2009/12/04(金) 00:47:53
[1] 授業単元:プログラミング演習
[2] 1.サンプルプログラムを参考に乱数によって生成した20個の数字を配列に入れ、バブルソートによって小さい順に表示するプログラムを作成せよ。
2.サンプルプログラムを参考乱数によって生成した20個の数字を配列に入れ、バブルソートによって大きいものから順に表示するプログラムを作成せよ。
3.キーボードから次々に整数を入力し、入力のたびにそれまでに入力した数字を小さい順に表示するプログラムを作成せよ。数字は10個入力したらプログラムは終了するようにすること.
4.0から1までのdouble型の数字を20個乱数によって生成し、小さい順に表示するプログラムを作成せよ。
5.以下の英単語を辞書順に(アルファベット順に)ソートによって並べ替えて表示するプログラムを作成せよ。すべての4文字の単語であることを利用してもよい。
mane, malt, mama, mark, mare, maid, made, mach, many, mess, meat, neat, like, lime, limb
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10230.txt [3.1] WindowsXP
[3.2] turbo C
[3.3] C++
[4] 今週中
[5] 1、2番は乱数の生成がわからなかったのでできませんでした。よろしくおねがいします。
689 :
◆zQtEQMmE7o :2009/12/04(金) 12:32:18
[1] 授業単元: プログラミング基礎実習 [2] 問題文(含コード&リンク): n個の中からr個を取り出すときの組合わせの数nCrを求める関数を作成せよ。 ただし、再帰は使わないこと!(繰返し文を使う) エラー処理(n<1、r<1の場合、n<rの場合)も考える。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年12月7日 [5] その他の制限: 演算と型、プログラムの流れの分岐、プログラム流れの繰返し、配列、関数までしか習っていません。 教科書で言うと明解C言語入門編(柴田望洋、2009年第15刷)を使っていて、その第6章までです。 よろしくお願いします。
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): キーボードから実数配列a[N][N]の各要素に値を入力し、すべての要素の総和を求めるプログラムを作成せよ。 ただし、総和を求める部分はmain関数と別の関数を作ること。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年12月7日 [5] その他の制限: 演算と型、プログラムの流れの分岐、プログラム流れの繰返し、配列、関数の中でお願いします。
>>687 > [5] 1、2番は乱数の生成がわからなかったのでできませんでした。よろしくおねがいします。
#include <stdio.h>
#include <stdlib.h> //<---rand()のために必要
int main(void)
{
printf("%d\n", rand());
printf("%d\n", rand() % 100); //<---0から99の範囲で乱数を得たい場合
return 0;
}
695 :
デフォルトの名無しさん :2009/12/04(金) 20:19:40
>>674 ありがとうございます
ポインタについて勘違いていました
696 :
デフォルトの名無しさん :2009/12/05(土) 03:48:10
はじめまして、この while loops コードを元に 2種類のコード、for loops と do...while loopsに変えていただけませんか? よろしくおねがいします。C++です。 #include <iostream> #include <string> using namespace std; int main() { int firstnum, secondnum; // variable to store the number firstnum = 0; // temp number secondnum = 0; // temp number while (firstnum >= secondnum) //get the first and second number until they are correct { cout << "PLEASE ENTER THE FIRST NUMBER: "; // ask user what to do cin >> firstnum; cout << endl << "PLEASE ENTER THE SECOND NUMBER:"; cin >> secondnum; cout << endl; if (firstnum >= secondnum) // if first number is more than second number { cout << "THE FIRST NUMBER MUST BE LESS THAN THE SECOND NUMBER. PLEASE TRY AGAIN." << endl << endl; } }
697 :
デフォルトの名無しさん :2009/12/05(土) 03:50:11
すみません つづきです。 int i = firstnum; // variable to store the number int evensum = 0; // variable to store the even sum int oddsum = 0; // variable to store the odd sum cout << endl << "ODD NUMBERS BETWEEN " << firstnum << " AND " << secondnum << endl; while (i <= secondnum) // number is less or equal to second number { if (i%2 == 0) //even number { evensum += i; // even sum } else //odd number { cout << i << endl; oddsum += i; // add sum } i++; }
698 :
デフォルトの名無しさん :2009/12/05(土) 03:51:10
最後のつづきです。 cout << endl << "SUM OF EVEN NUMBERS BETWEEN " << firstnum << " AND " << secondnum << ": "; cout << evensum << endl; i = firstnum; cout << endl << "THE SQUARES OF THE NUMBERS BETWEEN 1 AND 10: " << endl; // numbers between firstnumber and second number while (i <= secondnum) // number is less or equal to second number { if (i<=10) // number is less or equal to 10 { cout << i << ": " << (i * i) << endl; } i++; } cout << endl << "SUM OF ODD NUMBERS BETWEEN " << firstnum << " AND " << secondnum << ": "; cout << oddsum << endl << endl; return 0; } よろしくおねがいします。
while (firstnum >= secondnum) →for(;firstnum >= secondnum;) →do {} while (firstnum > secondnum); while (i <= secondnum) →for(;i <= secondnum;) →do {} while(i < secondnum);
適当にググっただけでもそれなりに使われてることはわかると思うけど。
702 :
700 :2009/12/05(土) 07:25:18
>>701 へー。初めて知った。
push, pop はそれぞれ,push down, pop up の略なんだね。
サンクス。
C言語で文字列出力の「puts」を使って 改行しないにはどうすればいいでしょうか?
putsを使わず別の関数にする
その場合、一番最後でちゃんと改行してね
>>704 ありがとうございます。
printfでも代わりに出来そうでした。
map<string , int>に似たもので、新規単語には連番を付けて 登録単語にはその番号を返し、 さらにx[10]としたら番号の単語を返すにはどうすればいいですか。
次のようなデータがテキストファイルで1ギガ程度あり、これを数値順にソートしたいです。 どのようにすればいいですか。 文字列 タブ 数値 ・・・・・・・ ・・・・・・・
>>710 つ テンプレ
それよかデータベース板経由を推奨
>>709 #include <stdio.h>
#define ARRAY_SIZE 100
#define LINE_NUM 10
void print_array(int a[ARRAY_SIZE])
{
int i, j;
for (i = 0; i < ARRAY_SIZE/LINE_NUM; i++) {
for (j = 0; j < LINE_NUM; j++) {
printf("%d ", a[i*LINE_NUM + j]);
}
printf("\n");
}
}
void max_sort(int a[ARRAY_SIZE])
{
int i, j, tmp;
for (i = 0; i < ARRAY_SIZE-1; i++) {
for (j = i+1; j < ARRAY_SIZE; j++) {
if (a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
}
>>709 続き
int main(void)
{
int a[ARRAY_SIZE] = {0};
int i, j;
for (i = 0; i < ARRAY_SIZE; i++)
{
a[i] = rand()%899 + 100;
}
puts("整列前のaの内容は次の通りです.");
print_array(a);
max_sort(a);
puts("整列後の配列aの内容は次の通りです.");
print_array(a);
return 0;
}
max_sort関数内の if (a[i] > a[j]) を if (a[i] < a[j]) にすると
課題2の答えになる
>710 OSはWindowsか? まず 「文字列 タブ 数値」のファイルを1行づつ読みながら「適切な空白の幅に数値 タブ 文字列」を出力するプログラムAを作り Aの結果を sort /L C して sortの結果を 「文字列 タブ 数値」に戻せば良い ちなみにAで"適切な空白の幅に数値"にしないと sortで"1","2","23","123","1234" 等がちゃんと並ばない 最大桁以上に "^^^1", "^123","1234"ってなるようにする ("^"は空白)
>714 "タブ"を項目の区切り文字に指定できて、ソートに使うキーが何番目の項目か指定できて、 キーを数値として比較する 「ソート」プログラムを作ればおk
10Mや精々100Mだったらその方法でもいいかも知れないが、1Gもある ような対象になった場合は、別の問題が多数発生するんで必ずしもそれで良い とは限らなくなってくる。 Sortプログラムの作りによってはファイルシステムの作りによっては OSによってはオチる可能性がある。最新のWindowsとかはセキュリティー ガードが堅いからOSは落ちないがプログラムは落ちたり著しく速度が 落ちたりするんで。
717 :
デフォルトの名無しさん :2009/12/06(日) 13:15:38
719 :
デフォルトの名無しさん :2009/12/06(日) 13:47:16
>>718さん、 ごめんなさい、乗計算squareの事です。
720 :
デフォルトの名無しさん :2009/12/06(日) 13:52:57
[1] 授業単元:C++実習 [2] 問題文(含コード&リンク):分数クラス2 分数を扱うクラスを作成する。クラス名はBunsu。データメンバはint型でbunshiとbunboでpraivateとする。 コンストラクタにより初期化をおこなう。初期値が指定されなかったときは省略時引数ででbunshi,bunboとも1で初期化すること。 またBunsuクラスの振る舞いをテストする適切なmain関数も作成すること。1ファイルで作成しても分割して作成しても良い。 作成する関数 ・コンストラクタ ・演算子のオーバーロード(friend関数で作成すること) +, -, *, /, ==, != の演算子について多重定義を行なう。演算結果は約分する。 >>と<<のオーバーロード(friend関数で作成すること) ・<<Bunsuクラスのオブジェクトをcoutで出力すると分子/分母の形式で出力する。 ・>>Bunsuクラスのオブジェクトにcinで入力する時 分子/分母の形式で入力できるようにする。 ・変換関数 デ-タメンバbunshiとbunboの値をdouble型として返す。 [3] 環境 [3.1] OS:Windows(Vista) [3.2] コンパイラ名とバージョン:VisualStudio2008 [3.3] 言語:C++ [4] 期限:[2009年12月6日22:00まで] [5] その他の制限:とくにありません。 よろしくお願いします。
>>719 square ってなんですか?
数式で示してください。
724 :
デフォルトの名無しさん :2009/12/06(日) 14:23:07
>>722さん、たびたびすみません。 (x*x)です。
726 :
デフォルトの名無しさん :2009/12/06(日) 14:56:43
>>725さん、 どうもありがとうございました! これからdefineとundefineを分割して2種類のコード書きます。 幼稚な質問に答えて頂き感謝です。
┏━━━━━━━━━━━━━━━━━━━━━━━━┓ ┣━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃┌───────────────┐ ┃ ┃│文字列の表示 │ ┃ ┃│背景は透過 │ ┃ ┃│この窓は表示を操作できる | ┃ ┃│縦対横が必ず黄金比 | ┃ ┃└───────────────┘ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━┛ こんな画面を Win32APIとかいうものを使って WindowsXP SP3で表示するようなコードを BCCとかいうフリーのコンパイラなるものを使って 書けとか言うわけのわからない課題をだされたのですが なんとかお教えねがえませんでしょうか。 BCCというのはBorland社が公開している フリーのC/C++のコードをexeにするソフトだということは判りました。 なんとかBCCデベロッパというフリーソフトを用いて 何もない枠をウィンドウを表示させることはできました。 でもウィンドウ内に文字列を表示するウィンドウを作るとかわけわかめです。
とりあえずBCCは由緒正しいコンパイラだ
Borlandのスタンスは割と好きだった
>>730 講義内容のおさらいをすると
最終的にはドラゴンクエストみたいな
コマンド選択式で
選択によってあらかじめ用意された絵とシナリオを
表示する、というプログラムを作るようです。
そのなかで
ドラゴンクエストみたいな会話表示ウィンドウを作るのが
今回の課題のようです。
>>727 のような絵を渡され
後は口頭で説明されたのを
半分うつらうつらしながらメモしたものによると
大枠のウィンドウをアスペクト比(ウィンドウの横対縦の比率のこととメモにあります)を
4:3に維持しながらその中にドラクエみたいな
大枠の画面に対して一定の比率で
固定されていて、背景が半透過されていて
枠内をクリックで表示<>非表示が切り替わるようなメッセージ表示用の枠を作りなさい、ということのようです。
#include <windows.h> LRESULT CALLBACK WindowProc int WINAPI WinMain とかはわかります。 四角いウィンドウしか表示しないウィンドウは自力で作れました。
>>731 それだけじゃ作りようがない
その中のウィンドウっていうのは図形か画像の描画で作るって事?
そしたらゲームループみたいなのを回して、毎フレーム画面にリペイントをかけたり
ゲームっぽい作り方をする必要があると思うけど、そういう課題なの?
たぶん、細かい動作とか、講義でやって資料とか貰ってるんじゃない?
それとそういう拡張前提のプログラムだったら、自分でやらないと
その先の拡張ができなくて詰むと思うのだけど
736 :
735 :2009/12/06(日) 15:59:52
すみません。3問目の「16時間36分13秒は59773秒です。」の直前の 「不正な時間、分、または秒が入力されました」の文章は不要でした。
>>734 同じ講義に出ていた友人にメールで聞いたのだけど
どうも選択肢4つに従って
4つのパターンが表示されればいいらしい。
文系学部の1単位の教養講義「ウィンドウズプログラム入門」なので
専門の方が作るようなハイレベルのものじゃないです。
ウィンドウを表示させて
ウィンドウの任意の位置にフォントを表示させるのはできました。
今、猫でもできるWindowsプログラムというを見ながら書いているのだけど
こりゃ難しいわ。
前述の友人の話によると明後日に出す課題は
>>730 の先に書いてあるMDIというもののようです。
文字は表示できなくてもよいから
大きな親ウィンドウの中に
枠なしの角が丸い子ウィンドウを表示して
親ウィンドウ内を左クリックすると子ウィンドウが表示<->非表示と切り替わる
ということが出来るようになさい、というのが今回の課題のようです。
というか焦ってテンプレ見てませんでした。 ちょっとテンプレにそって改めて書かせていただきます。 スレ汚しすみません。
739 :
デフォルトの名無しさん :2009/12/06(日) 16:14:29
740 :
デフォルトの名無しさん :2009/12/06(日) 16:25:33
#732さん、>>717です。 載せて戴いたのはC言語ですよね?説明の仕方が悪くてごめんなさい。 C++言語と最初に書いておけば良かったです。貴重なお時間すみませんでした。
>>735 2.
#include <stdio.h>
int calc_sec(int h, int m, int s) {
return (h<0||23<h||m<0||59<m||s<0||59<s) ? -1 : (h * 60 + m) * 60 + s;
}
int main(void)
{
int h, m, s, ans;
printf("時間(0〜23)を入力してください:");
scanf("%d", &h);
printf("分(0〜59)を入力してください:");
scanf("%d", &m);
printf("秒(0〜59)を入力してください:");
scanf("%d", &s);
ans = calc_sec(h, m, s);
if(ans==-1) printf("不正な時間、分、または秒が入力されました\n");
else printf("%d時間%d分%d秒は%d秒です。\n", h, m, s, ans);
return 0;
}
742 :
732 :2009/12/06(日) 16:38:07
743 :
735 :2009/12/06(日) 16:51:27
>>741 お早い解答ありがとうございます。助かりました。
もし良ければどなたか他の問題もお願いします。
2.じゃなくて3.だな。
>>735 2.
#include <stdio.h>
int conv_letter(int ch)
{
return ('a'<=ch&&ch<='z')||('A'<=ch&&ch<='Z') ? ch ^ 0x20 : ch;
}
int main(void)
{
int ch;
while((ch=getchar())!=EOF) putchar(conv_letter(ch));
return 0;
}
>>745 XORで変換できるんだ.
知りませんでした.
>>735 1.
#include <stdio.h>
int clac_pandi(int p, double r, int y)
{
while(y--) p *= 1 + r / 100;
return p;
}
int main(void)
{
int p, y, d;
double r;
printf("元金[円]を入力してください : ");
scanf("%d", &p);
printf("年利[%]を入力してください : ");
scanf("%lf", &r);
printf("預金年度を入力してください : ");
scanf("%d", &y);
d = clac_pandi(p, r, y);
printf("%d円を年利%f%%で%d年間預金すると、%d円になります。\n", p, r, y, d);
return 0;
}
749 :
デフォルトの名無しさん :2009/12/06(日) 18:31:11
>>749 「下記構造体型配列」の構造体ってどんなのでしょうか.
>>749 下記構造体型配列を作る。
データは入力すること。
確認のため各配列要素を表示すること。
20 40 10 50 30
CD GH AB IJ EF
#include <stdio.h>
#define MAX 5
struct sa {
int ia[MAX];
char ca[MAX][20+1];
};
int main(void) {
int i;
struct sa data = {20,40,10,50,30,"CD","GH","AB","IJ","EF"};
printf("INPUT %d NUMBERS :", MAX);
for(i=0; i<MAX; i++) scanf("%d", &data.ia[i]);
printf("INPUT %d WORDS :", MAX);
for(i=0; i<MAX; i++) scanf("%s", data.ca[i]);
for(i=0; i<MAX; i++) printf(" %d ", data.ia[i]);
puts("");
for(i=0; i<MAX; i++) printf(" %s ", data.ca[i]);
return puts("");
}
754 :
デフォルトの名無しさん :2009/12/06(日) 23:13:46
【質問テンプレ】 [1] 授業単元:C [2] 問題文(含コード&リンク): 入力されたデータをもとに売上明細を作成して表示する。 入力データは商品名と金額で、最大20件とし、^zで終了する。 入力されたデータは構造体配列に記録し、 入力終了後金額を集計して合計を表示する。 <構造体メンバ> 商品名:char型10桁 金額:long型 <実行結果> ^z 商品名 金額 パソコン 248500 ラジオ 3200 テレビ 120500 オーディオ 314000 レイゾウコ 65800 クーラー 79000 合計 831000 [3] 環境 [3.1] OS: WindowsVISTA [3.2]Lcpad [3.3] 言語:C よろしくお願いします
755 :
742 :2009/12/06(日) 23:32:08
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題1 double型の変数a,bを引数とし,小さい値を返す関数minと 大きい値を返す関数maxを作成せよ。 問題2 扇形の面積を求めるプログラムを作成せよ。 [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2009年12月08日まで] [5] その他の制限:mainを使用。 よろしくお願いします。
759 :
デフォルトの名無しさん :2009/12/07(月) 02:41:11
762 :
735 :2009/12/07(月) 02:52:39
>>754 #include <stdio.h>
#define MAX 20
struct aa {
char a1[10+1];
long b1;
};
char *comma(int a, char *tmp){
if(a < 1000)
sprintf(tmp, "%d", a);
else if(a < 1000000)
sprintf(tmp, "%d,%03d", a/1000, a%1000);
else
sprintf(tmp, "%d,%03d,%03d", a/1000000, a/1000%1000, a%1000);
return tmp;
}
int main(void) {
struct aa data[MAX];
char tmp[20];
int i, j;
long total = 0;
for(i=0; i<MAX; i++) {
j = scanf("%s%ld", data[i].a1, &data[i].b1);
if(j < 2) break;
}
printf("商品名\t 金額\n");
for(j=0; j<i; j++) {
printf("%s\t%8s\n", data[j].a1, comma(data[j].b1, tmp));
total += data[j].b1;
}
return printf("合計\t%8s\n", comma(total, tmp));
}
scanfでクラス名(文字)、午前・午後の入場者数を入力して、 各クラス毎の入場料を出力するという問題です #include<stdio.h> int main(){ nt n,gozen,gogo,money[9],money2[9]; char c,home[9]; for(n=0;n<9;n++){ //クラス名 午前の入場者数 午後の入場者数 scanf("%s %d %d",&c,&gozen,&gogo); home[n] = c; money[n] = gozen; money2[n] = gogo; } for(n=0;n<9;n++){ c = home[n]; gozen = money[n] * 200; gogo = money2[n] * 300; printf("%s %d %d\n",c,gozen,gogo); } return 0; } 私はこう考えたのですが、 printf("%s %d %d\n",c,gozen,gogo); の所が何故か上手くいきません どこがおかしいのでしょうか ご指導お願いします
cが文字だから%sじゃなくて%c
>>765 回答ありがとうございます
%cでも試してはみたんですが、
デバッグエラーというのが出てきます
これは出てもいいのでしょうか?
printfだけじゃなくて、scanfの%sも%cにした?
>>767 デバッグエラーはでなくなりました
ですが、scanfで2回しか読み込めなくなりました
ステップインをしてみて、
一回目と二回目までは、scanfを通ったときに入力できるのですが、
三回目のscanfは通っているのに入力できないです・・・。
scanf("%c%d%d%*c",&c,&gozen,&gogo); printf("%c %d %d\n",c,gozen,gogo);
770 :
770 :2009/12/07(月) 16:19:17
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるか
を表示する。(ヒント:頭の数と足の数を変数として,鶴の数と亀の数について連立
方程式を作り,解を与える式の値を表示させればよい)
[3] 環境
[3.1] OS: Windows XP Prof.
[3.2] コンパイラ名とバージョン: BCC Developer
[3.3] 言語: C++
[4] 期限: 明後日まで
[5] その他の制限: ここまで習っています
http://www.hino.meisei-u.ac.jp/is/iga/hit-u/No7/C1.pdf
771 :
デフォルトの名無しさん :2009/12/07(月) 16:32:53
[1] 授業単元:プログラミングU [2] 問題文(含コード&リンク): 構造体を使って二つの複素数の積を求める [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C言語 [4] 期限: 2009年12月14日PM2:30まで [5] その他の制限:ありません よろしくお願いします
>>770 /*
x + y = a
2x + 4y = b
x = a - y
2(a - y) + 4y = b
a - y + 2y = 1/2 b
a + y = 1/2 b
y = 1/2b - a
x + (1/2b - a) = a
x + 1/2b - a = a
x + 1/2b = 2a
x = 2a - 1/2b
鶴4亀5 a=9 b=26
*/
#include <stdio.h>
int main(void) {
int turu, kame, atama, ashi;
printf("HOW MENY HEADS ? :"); scanf("%d%*c", &atama);
printf("HOW MENY FOOTS ? :"); scanf("%d%*c", &ashi);
turu = 2*atama - ashi/2;
kame = ashi/2 - atama;
return printf("TUTU = %d\nKAME = %d\n", turu, kame);
}
その綴りはわざと?
>>776 回答ありがとうございました。
助かりました。
778 :
デフォルトの名無しさん :2009/12/07(月) 22:58:51
へえ、英語が出来るんだ。名無しさん。
780 :
778 :2009/12/08(火) 12:31:48
#include <stdio.h> #define N 128 int main(int argc, char **argv) { int data[N], *p, i, n; float sum = 0; FILE *fin, *fout; if(argc!=3) return 0; if((fin=fopen(argv[1], "r"))==NULL) return 0; fscanf(fin, "%d", &n); for(i=0,p=data; i<n; i++) { fscanf(fin, "%d", p); sum += *p++; } fclose(fin); if((fout=fopen(argv[2], "w"))==NULL) return 0; fprintf(fout, "平均=%f\n", sum/n); fclose(fout); return 0; }
783 :
778 :2009/12/08(火) 18:14:11
>>781 返事が遅くなってすいません。
回答ありがとうございました。
>>784 基本的なことから間違ってる
・構造体の中で#includeしてる
・if( st[k].height = st[l].height )のところは比較式になってない。代入してる
786 :
784 :2009/12/09(水) 00:18:54
返信ありがとうございます。 まだC言語始めたばっかりなので基本がなってなくてすいません。 if( st[k].height = st[l].height )の式を少しいじったらできました。 どうもありがとうございました。
まず番号で昇順にバブルソート 次に身長で降順にバブルソート 実に簡単
アホかw
>>784 #include<stdio.h>
struct data{
int no;
char name[20];
double height;
};
int main(void){
int k,l;
struct data stb;
struct data st[20] = { { 1,"一郎",180.0 }, { 2,"二郎",175.5 },{ 3,"三郎",180.0 }, { 4,"四郎",175.5 },{ 5,"五郎",169.9 }, { 6,"六郎",169.9 }, };
for ( k = 0 ; k<5 ; k++ ){
for ( l = k+1 ; l<6 ; l++ ){
if ( st[k].height == st[l].height ) {
if ( st[k].no > st[l].no ) {
stb = st[k] ; st[k] = st[l] ; st[l] = stb ;
}
} else if ( st[k].height > st[l].height ) {
stb = st[k] ; st[k] = st[l] ; st[l] = stb ;
}
}
}
printf("身長順\n");
for(l=0 ; l<6 ; l++){
printf("%d %s %lf\n", st[l].no, st[l].name, st[l].height) ;
}
return 0;
}
私のパソコンのスペックを舐めないでほしい。バブルソートたかが2回どうということはない
オイラ質問者とは別人のC言語初心者だけど質問いい? >struct data st[20] = { { 1,"一郎",180.0 }, { 2,"二郎",175.5 },{ 3,"三郎",180.0 }, { 4,"四郎",175.5 },{ 5,"五郎",169.9 }, { 6,"六郎",169.9 }, }; ここがよくわからない。st[20]ってデータ5個なのに20に設定するのってどうして? あと六郎のデータのあとにカンマ入ってるけどこれ何?以降のデータ省略って意味? 超初心者でゴメンお
なんの処理してるんだ・・・
>791 >st[20]ってデータ5個なのに20に設定するのってどうして? なんとなくだろ 僕なら要素数(20)も省略する 要素数があらかじめ分かっていたら、それ以上の初期化子の並びが存在することをコンパイラに警告してもらうためにあえて要素数を省略しない場合もある >六郎のデータのあとにカンマ入ってるけどこれ何?以降のデータ省略って意味? データ省略ともいえる あってもなくても構わないが、カンマをあらかじめ入れておけば、追加するときにカンマを忘れて意図しない初期化にならないようにできる ある種の習慣みたいなもんだよ 余談だけど、C89ではenumの最後の列挙子のあとにカンマが付けられないという一貫性の無い仕様、C99では付けられるようになった
>>793 if(used[i]==0)
used[i] = 1
used[i] = 0
797 :
791 :2009/12/09(水) 01:00:26
>>795 どうもありがとうございやす
勉強になりました
798 :
791 :2009/12/09(水) 01:03:25
799 :
791 :2009/12/09(水) 01:04:26
いや、オイラ793とは別人だけど。すんません コンパイルしたら警告でた
nqueen問題なのか、順列なのか分からんw
>800 禿同
>784のソースコードと>792のソースコードがとても似ているように感じるのは気のせいか?
>>803 さすがにこれだけ単純な内容だと
普通に書いたら誰でも同じような内容になると思う
しかし[20]で一致は偶然とは思えない
#include の位置が同じだったらコピペ認定でもいいけどな
名前にchar[20]てのは俺が学生の頃もありがちな数字だったなぁ あと入力バッファに80とかもよくやった
名前の方じゃなくて、構造体配列の方じゃね?
あー、そっちかぁ。
でも
>>784 には努力の跡が見えるし、学生の課題として似てるの範囲には含まれないレベルだと思うよ。
[1] アルゴリズム [2] 自然数の数列内にあるnよりも大きい数と小さい数が 数列上においてnの前後にそれぞれ一つずつある場合、そのnを出力する。 つまり、(n-a,...,n+b,....n,....n+c,....,n-d)という風になっているnを探すプログラムです。 [3] 環境 [3.1] OS: Linux [3.3] 言語: C よろしくお願いします。
> つまり がわからんw 具体例を述べる!
nより前に大きい数と小さい数が一つずつ、nより後ろにも大きい数と小さい数が一つずつ?
日本語でおk? 課題文や問題文を意訳せずにそのまま書けばいいのに
数当てゲーム n=100
50より大きくて120より小さい数: 90
90より大きくて120より小さい数: 98
98より大きくて120より小さい数: 102
98より大きくて102より小さい数: 100
正解!!
>>810
810をどう読んだらそうなるのかわからん。
816 :
810 :2009/12/09(水) 13:38:13
分かりにくかったようで申し訳ないです。 教授が口にしただけでちゃんとした問題文がなく、自己流で書きました。 具体例をあげますと、 数列(4 8 2 1 7 9 3 5 6)を入力します。 この場合、4と6は両端なので前後片方しかないので除外します。 同様に8と5を見ると8の前には4だけ、5の後ろには6しかないので除外します。 2 1は前に4 8と大きい数字しかないので除外します。 7は前後に大きい数字と小さい数字があるので残します。 9は数列の中で最大なので除外できます。 3 5 6は後ろに小さい数字がないので除外します。 結果、7と表示して終了です。 大変お手数をおかけしましたが、よろしくお願いします。
一つずつじゃねーじゃねーかw
>>816 #include <stdio.h>
int f(int *p, int n, int size)
{
int i, s, l;
if(n <=1 || size-2<=n) return 0;
for(i=s=l=0; i<n; i++) {
if(p[i] > p[n]) l++;
else if(p[i] < p[n]) s++;
}
if(s==0 || l==0) return 0;
for(i=n+1, s=l=0; i<size; i++) {
if(p[i] > p[n]) l++;
else if(p[i] < p[n]) s++;
}
return s && l;
}
int main(void)
{
int i, a[] = {4,8,2,1,7,9,3,5,6};
for(i=0; i<sizeof a / sizeof *a; i++) if(f(a, i, sizeof a / sizeof *a)) printf("%d\n", a[i]);
return 0;
}
820 :
810 :2009/12/09(水) 14:10:29
>)817
そうでした・・・すいません。
>>818 順数列の入力
↓ ↓
数列数が5以上 4以下→終了(4以下のときどれも除外できないので)
↓
数列の中で最大最小の値と
最初と最後に入力した値は除外できる。
↓
残りの数値に前後に大小の値が一つ以上あれば除外
↓
残った値を表示して終了
こんな感じです。
>>819 早速書いていただき本当に感激です。実行させたりして勉強させてもらいます。
821 :
デフォルトの名無しさん :2009/12/09(水) 15:39:42
>>820 > 残りの数値に前後に大小の値が一つ以上あれば除外
「二つ以上」が正しいなら、
>>819 の
return s && l; を
---> return (s==1) && (l==1); でいいと思う。
フローチャート作れたらプログラム組めてもよさそうなのにな
それが出来ないのが初心者
?
?
>>821 二つ以上と解釈するなら一つ前の
>if(s==0 || l==0) return 0;
これも変更しないとマズくね?
自分より大きい数と小さい数の両方が、自分より前にも後ろにもあるような数を求める。 個数は1つ以上ならいくつでもいい。 >return (s==1) && (l==1); なんてしたら解が出なくなる可能性が高い。
>>810 の言葉だと
前後にひとつずつとあるが・・
つまるところ810は日本語があまり上手ではないと
810の時点で「一つずつ」じゃなくて「一つ以上」って書いてあれば、 全く問題なく済んだのにな。
834 :
デフォルトの名無しさん :2009/12/09(水) 16:17:39
819で解決済み この話題はオシマイ
810や821や827や829がゆとり世代だったとしたら俺は政府を恨むよ。日本語も出来ない日本人を量産しやがって・・・
つまり・・・まともな人間は俺だけってことだな
ID出ない板でよかったねw
839 :
デフォルトの名無しさん :2009/12/09(水) 16:44:31
>>816 教授に条件を確認した方がいいんじゃないか?
さっきからあげてるのは同じヤツ?
市販のテキストの問題とかなら後ろのページに模範解答とかあるんじゃないのかなぁ・・・ 大学時代にプログラミング入門の授業あったけど先生の出す課題の大半はテキストに答え載ってたけど 大半の学生がテキストまともに読まないからテキストの問題だということにも気づいてなかったよ まぁ私は答えなど見なくても作ることに問題はありませんでしたが
でっていう
>>841 問1:
#include <stdio.h>
int main(void)
{
int n;
char data[128],*p;
puts("文字列を入力してください");
printf("文字列:");
scanf("%s",data);
printf("文字列の文字数をカウントします。\n");
p=data;
for(n=0;*(p+n)!='\0';n++);
printf("文字列: %s 文字数: %d\n",data,n);
return 0;
}
>>842 問2:
#include <stdio.h>
int main(int argc,char *argv[])
{
int n;
char data[128],*p;
FILE *fp;
if(argc==1){
puts("文字列を入力してください");
printf("文字列:");
scanf("%s",data);
printf("文字列の文字数をカウントします。\n");
p=data;
for(n=0;*(p+n)!='\0';n++);
}
else{
if((fp=fopen(argv[1],"r"))==NULL)
return 1;
for(n=0;(data[n]=fgetc(fp))!=EOF;n++);
data[n]='\0';
fclose(fp);
}
printf("文字列: %s 文字数: %d\n",data,n);
return 0;
}
>>845 for(n=0;(data[n]=fgetc(fp))!=EOF;n++);のところ
for(n=0;(data[n]=(char)fgetc(fp))!=EOF;n++);にキャストしたほうがいいかも
849 :
841 :2009/12/09(水) 18:27:54
すいません。 名前欄に書くのを忘れてました。
改めて
>>844 >>845 の人へ
ありがとうございました。
さて、課題も終わったことだし空いた時間でエロゲでもやるか
>>848 fgetcの返り値はintなのでそれ以前の問題
アラフォーだらけのスレ
>>848 fgetc() の返り値は int。EOF と比較するのにchar にキャストするのは間違いのもと。
848は逃げたの?
857 :
デフォルトの名無しさん :2009/12/09(水) 21:11:03
1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: forとかwhileとかまでしか習っていないです。 宿題かなり出たのです出が、全くわからないので、数問連続で丸投げさせていただきます。すいません。
>>857 問題文貼れていませんでした。もう1度。
1] 授業単元: forとかwhileとか
[2] 問題文(含コード&リンク):
ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める.
(a) 区間を10分割してどの区間に解があるかを求めるプログラムを作成しなさい.
(b) 解がある区間が見つかったら,さらにその区間を10分割してどの区間に解があるかを求めるという作業を5回繰り返すプログラムを作成しなさい.
(補足)2分法
2分法とは,中間値の定理に根拠をおいて,数式的に解くことのできない方程式の解を求める方法である.
下図に示すように,xの値を少しずつ変化させた場合に,隣り合う二つのf(x)の値の符号が異なる区間が存在すると,その方程式の解はその区間内に存在する.
区間を少しずつ狭めていくことにより,その方程式の近似解を求めることができる.方程式の近時解法として代表的なものには2分法の他に,ニュートン法もある.
[3] 環境
[3.1] OS:Windows
[3.2] わかりません・・・。
[3.3] 言語:C++
[4] 期限: ([2009年12月11日16:00まで]
[5] その他の制限: forとかwhileとかまでしか習っていないです。
宿題かなり出たのです出が、全くわからないので、数問連続で丸投げさせていただきます。すいません。
1] 授業単元: forとかwhileとか [2] 問題文(含コード&リンク): 関数y=x3+1の微分曲線を求めるプログラムを作成しなさい.計算範囲は0≦x≦2とし,間隔は0.1とする. [3] 環境 [3.1] OS:Windows [3.2] わかりません・・・。 [3.3] 言語:C++ [4] 期限: ([2009年12月11日16:00まで] [5] その他の制限: forとかwhileとかまでしか習っていないです。 宿題かなり出たのです出が、全くわからないので、数問連続で丸投げさせていただきます
>>859 微分曲線ってなんですか?
x3 というのは x の 3 乗ですか?
[1] 授業単元:C言語とアルゴリズム [2] 問題文(含コード&リンク): 課題 リスト処理 実行結果のようにキーボードから入力して整数を入力順にリストに格納し、入力値に 番号を付けて表示するプログラムを作成しなさい.ただし入力の終了はCtrl+dで行えるようにすること。 入力する値や個数が実行例と異なる場合にも正しく動作するようにすること. 必ず1個以上の整数が入力されるとする. [実行結果] 整数を順番に入力してください. 5 10 15 20 25 入力データは以下の通りです. [1] 5 [2] 10 [3] 15 [4] 20 [5] 25 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限:明日8:30までに [5] その他の制限:malloc関数 free関数 sizeof演算子 リスト構造を使うこと. よろしくお願いします!
864 :
デフォルトの名無しさん :2009/12/09(水) 22:49:15
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
http://www.dotup.org/uploda/www.dotup.org440057.pdf [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc emacsで作って、ktermでコンパイル
[3.3] 言語: C言語
[4] 期限:明日18時までに
ファイル重いですが、どうかどうかよろしくお願いします!!
演習問題の番号に*がついた奴は必修なので、優先してお願いします!!
とても多いですが、皆さんのお力をお借りしたいです。。
866 :
デフォルトの名無しさん :2009/12/09(水) 23:04:35
>>865 ですよね。すみません。
えっと、演習問題1-1,1-2,1-3,1-6,1-7,1-8,1-9です。
よろしくお願いします。
また分かりづらい所あれば指摘お願いします。
一題ずつ、テキストで抜き出して、短くここに直接書けば 回答率上がると思われ。
868 :
デフォルトの名無しさん :2009/12/09(水) 23:10:25
869 :
デフォルトの名無しさん :2009/12/09(水) 23:31:13
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):
文字列ABCDEFGHIJKLMNに対して入力した文字列の第1文字目と第2文字目の間にある文字列を表示するプログラムを作る。 ただし標準ライブラリは使用しないこと。
[3] 環境
[3.1] OS:windows xp
[3.2] vc2005
[3.3] c
[4] 期限:10日 11時
[5]
>>123 と似ているのですか、標準ライブラリが使えません。よろしくお願いします
872 :
870 :2009/12/09(水) 23:37:07
>>869 WinAPIを使うのか。アセンブラ埋め込みか。
あー・・・その他の制限全く読んでなかった。 ゴメン、871のは無しで。
>>864 pdfというURLで見る気を削がれ
pdfの紙の向きが縦じゃなくて読む気を削がれ
問題内容は紙を丸写しして実行するだけ
コーディングさせるためだけに来ただろお前
>>876 >>877 さん
せっかくやってもらったのに申し訳ありませんが習っていないとこが多少あるのでもう少し簡単なプログラムにはなりませんか?
先生「あれ?君の提出したソースに授業でやってないところがあるねぇ・・・君実はプログラムに詳しいのかい?だったら授業の手伝いをしてほしいんだが」
>>879 何のために
> [5] その他の制限:
という項目があると思ってんだ
882 :
876 :2009/12/10(木) 00:29:06
>>880 昨日ネットワークプログラミングで言われたばっかだからやめてくれw
>>879 課題のレベルに合わせたつもりだったけど、具体的にどこがわからない?
% 演算子以外には簡単にする要素が無いけど
883 :
デフォルトの名無しさん :2009/12/10(木) 00:36:07
>>878 そこをどうかお願いします。
ほんとに困ってて、2chしか頼るところがないんです。聞ける人もいなくて・・
やることが山ずみで、pdfファイルになってしまいました。
すみません。
どうか今回だけ大目に見ていただけないでしょうか・・
宿題部分だけをテキストにするくらいは 30分で済むだろ
君がその書き込みを見たときにやりたいと思うかい?
聞きたいことがあるなら質問をすればいいじゃないか
こっちは聞きたいこともわからなければコレは優先してやれだのふざけるな
人を利用するだけに来たのなら君は最低な人間だ
じゃなけりゃ
>>884
886 :
デフォルトの名無しさん :2009/12/10(木) 01:19:38
866 :デフォルトの名無しさん :2009/12/09(水) 23:04:35
>>865 ですよね。すみません。
知らんぞお前の事。日本語変わった?
889 :
888 :2009/12/10(木) 04:17:13
#include <stdio.h> // >864 1-1
int main( void ){
char c;
char *p; /* ポインタの宣言 */
c = 'A';
p = &c; /* ポインタの値設定 */
printf( "%c\n", *p); /* ポインタの指す値を表示 */
return 0;
}
#include <stdio.h> //
>>864 1-2
int main( void ){
char c = 'A';
char *p; /* ポインタの宣言 */
p = &c; /* ポインタの値設定 */
printf( "%c\n", *p); /* ポインタの指す値を表示 */
*p = *p + 2; /* ポインタの指す値を+2 */
printf( "%c\n", *p); /* ポインタの指す値を表示 */
return 0;
}
#include <stdio.h> // >
>>864 1-3
int main( void ){
int a = 611, *ptr;
ptr = &a;
printf( "変数aのアドレス=%p\n", &a);
printf( "変数aの値=%d\n", a);
printf( "ポインタptrの値=%p\n", ptr);
printf( "ポインタptrの指す値=%d\n", *ptr);
return 0;
}/* %pはアドレスを表示するための変換指定 */
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): sinxをテイラー展開しn項目で打ち切ったものについて xについては0から2πまでの範囲を0.05π刻みでけいさんし、nについてはn=1,2,3,4(すなわち3次、5次、7次、9次までの展開)について計算し x sinx 3次まで ・・・・・9次まで 0.0 … 0.157 … のような数表を自分で指定したファイルに出力するプログラムを作成しなさい。 [3] 環境 [3.1] OS: windowsVista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009 12/11 [5] その他の制限:特にはありません。よろしくお願いします。
やることが山積みで宿題ができないというが、宿題はやることに含まれないのが不思議でならん。 学生にとって宿題は優先度の高い「やること」だと思うんだけどな。
宿題とかいらないから 全国共通の単位認定ペーパー試験でも作ってそれパスした奴らにだけ単位与えろよ ろくに出来もしない奴らに単位認定してる意味がわからん 授業や宿題は学習の手助け的なとこに位置づけてほしいわ 九九や割り算や少数もワカランような奴が中学卒業とか 微積分もろくに分かってないような理系が大学卒業とか バカらしいわ
微分積分ってなんですかって厳密に答えられるやつがどれだけいるのか
テイラー展開で階乗やpowって計算量無駄に多いね
そんなの書く必要もないくらい初歩だろw
>>898 あーやっぱり書けないんだバーカ
俺の場合はわざと誤差を少なくするために後ろから足しているので
こういう風になってんだよ
悔しければ書け
書けるという口だけなら誰でも言える
900get
大学で数値計算という感じの授業とかで誤差を減らし精度を上げるための手法を学ぶが 文系の一般教養レベルのプログラミング系の授業だとそこまで求められていなかったりもする 問題文のアルゴリズムをそのまま実現すればいいというレベル
>>858 >>859 です。
>>860 さん
cm2は平方センチメートルのことです。すいません。
>>861 さん
微分曲線とは、その直線の傾きのことで、要するに、
0から2の範囲で与えられた式を微分しなさい
という問題です。
x3はxの3乗のことです。
ソースがちょっと変わったものだと 先生が来て説明を求められたりしたことが数度あった まぁ自分で書いたソースだったから無問題だったけど ここで依頼してる人たちって先生から何か質問されても大丈夫なのかなぁ
1] 授業単元: forとかwhileとか [2] 問題文(含コード&リンク): ある整数を入力し,その約数をすべてと約数の個数を表示するプログラムを作成しなさい. [3] 環境 [3.1] OS:Windows [3.2] わかりません・・・。 [3.3] 言語:C++ [4] 期限: ([2009年12月11日16:00まで] [5] その他の制限: forとかwhileとかまでしか習っていないです。 もう1問あります。よろしくおねがいします・・・。
コマンドラインでコンパイルしてるならコンパイラ名わかるんでねいの? GUIソフト使ってるならソフト名とか まぁいいけどさ
>>901 だから人の書いたプログラムに文句だけしか付けられないんなら
すっこんでろってんだよ
[2] 問題文(含コード&リンク): ある整数を入力し,それより小さい素数をすべて表示するプログラムを作成しなさい.[3] 環境
[3.1] OS:Windows
[3.2] わかりません・・・。
[3.3] 言語:C++
[4] 期限: ([2009年12月11日16:00まで]
[5] その他の制限: forとかwhileとかまでしか習っていないです。
>>858 ,
>>859 ,
>>904 と併せてよろしくお願いします。
数学わからないお・・・
> forとかwhileとか 条件分岐とか配列とかポインタとか標準入出力とか Mathの関数とかオリジナル関数とか いままで何を習ったのかなぁ・・・ どのレベルで実現すりゃあいいのかなぁ
積み残し対策はいいけど、ループ内分岐はよろしくないな。
>>904 #include <stdio.h>
int main(void)
{
int n,i,m=0; /*nは入力された数値を記録するため、mは約数の数をカウント*/
printf("InputNunber:");
scanf("%d",&n);
for(i=1;i<=n;i++)
if(n%i==0){ /*%は余りを計算するってことだよ*/
printf("%d,",i);
m++;
}
printf("\n%ds\n",m);
}
実行結果はこんなかんじ
InputNunber:35
1,5,7,35,
4s
C++だからprintfやscanfじゃなくてcoutとかcinとかじゃないの?
914 :
912 :2009/12/10(木) 15:08:48
ごめんC++だったのね Cで書いちゃったよ
i<=n よりi*i<=nにして、最後にnの分を足すのが効率的。
144(=12*12=3^2*2^8)の約数 72も約数 i*i<=nだと72は抽出されない
素数の方やってたから書き間違えた。 i*2<=nの間違いw
i*i<=nまででよくね? 約数を小さい順に並べろとは言ってないんだから 表示に printf("%d,%d,",i,n/i); ってすればよくね?
それだと平方根を2個表示しちゃわないか?
i*i<nにしてループの外でi*i==nを判定して・・・・面倒か
>>907 #include <iostream>
int isPrime(int n)
{
if(n<2) return 0;
if(n==2) return 1;
if(n%2==0) return 0;
for(int i=3; i*i<=n; i+=2) if(n%i==0) return 0;
return 1;
}
int main()
{
int n;
std::cin >> n;
for(int i=0; i<n; i++) if(isPrime(i)) std::cout << i << std::endl;
}
>>923 for whileまでしか習ってない奴に 関数定義させるなよw
先生に不正を疑われちゃうねw
>>907 #include <iostream>
int main()
{
int n;
std::cin >> n;
if(n <= 2) return 0;
std::cout << '2' << std::endl;
for(int i=3; i<n; i+=2) {
for(int j=3; j*j<=i; j+=2) if(i%j==0) goto l;
std::cout << i << std::endl;
l:
}
}
無理じゃない #include <stdio.h> int main(void) { int i, n, m=0; scanf("%d", &n); for(i=1; i*i<n; i++) { if(n%i==0) { printf("%d %d ", i, n/i); m+=2; }} if(i*i==n) { printf("%d", i); m += 1; } printf("\n%d\n", m); return 0; }
printf,scanf -> cout,cint
cintってw
タイプミスくらい許せサスケ
>>926 goto l?breakって無いんだっけ?
breakだと、ループ外でもう一度条件判断が必要になる。
ああゴメン、ソースちゃんと読めてなかったわbreakはダメだったね
935 :
890 :2009/12/10(木) 17:07:08
>>895 ありがとうございます。ほんとに助かりました
936 :
810 :2009/12/10(木) 18:20:16
みなさんにはご迷惑をかけ、恥ずかしく思っておりますが
>>819 で分からなかったので質問させてもらいます。
>>819 では具体例で示した数列での解しかわからないので、数列を入力できるように
int i, a;
printf("数列の入力:");
scanf("%d", &a);
としたところエラーがでてコンパイルができませんでした。
また、
>>819 のプログラムのa[]= { 数列 }の数列の数を増やしたりすると求めている解と違う解が表示されたりしました。
独習Cを読んで直そうにも初心者すぎて正直ぜんぜん分かりませんでした。。。
本当に申し訳ないのですが、どう直したら、入力ができて正確な解も求まるプログラムになるのか教えてください。
フローチャートは
>>820 で示したので大丈夫だと思います。
int a[] = {4,8,2,1,7,9,3,5,6}; int smain(void) { int i; for(i=0; i<sizeof a / sizeof *a; i++) if(f(a, i, sizeof a / sizeof *a)) printf("%d ", a[i]); return 0; } int main(void) { int a1,a2,a3,a4,a5,a6,a7,a8,a9; for(a1=1;a1<=9;a1++){ for(a2=1;a2<=9;a2++){ if(a1==a2) continue; for(a3=1;a3<=9;a3++){ if(a1==a3 || a2==a3) continue; for(a4=1;a4<=9;a4++){ if(a1==a4 || a2==a4 || a3==a4) continue; for(a5=1;a5<=9;a5++){ if(a1==a5 || a2==a5 || a3==a5 || a4==a5) continue; for(a6=1;a6<=9;a6++){ if(a1==a6 || a2==a6 || a3==a6 || a4==a6 || a5==a6) continue; for(a7=1;a7<=9;a7++){ if(a1==a7 || a2==a7 || a3==a7 || a4==a7 || a5==a7 || a6==a7) continue; for(a8=1;a8<=9;a8++){ if(a1==a8 || a2==a8 || a3==a8 || a4==a8 || a5==a8 || a6==a8 || a7==a8) continue; for(a9=1;a9<=9;a9++){ if(a1==a9 || a2==a9 || a3==a9 || a4==a9 || a5==a9 || a6==a9 || a7==a9 || a8==a9) continue; a[0]=a1; a[1]=a2; a[2]=a3; a[3]=a4; a[4]=a5; a[5]=a6; a[6]=a7; a[7]=a8; a[8]=a9; printf("\n%d %d %d %d %d %d %d %d %d = ", a1, a2, a3, a4, a5, a6, a7, a8, a9 ); smain(); }}}}}}}}} }/* 9*8*7*6*5*4*3*2 = 9! = 362,880 */
なんと数列の入力も必要だったのか
>>907 の者です。
ありがとうございます。
ここでまさかの自分のミスが発覚いたしまして、
C++ではなく、Cでした;;
お暇な方がいらっしゃれば、
>>858 、
>>859 にも力を貸していただきたいです。
940 :
デフォルトの名無しさん :2009/12/10(木) 21:39:53
>>858 これ問題文足りてる?
それとも俺の頭が足りないだけか?
>>941 y平方センチの半径みたいだから、区間の初期値が判れば後は区間毎の円の面積を求めるだけみたいだが…
その区間の初期値をどうするのかがオレにはよくわからん
>>940 <stdio.h> <string.h>さえ使うなという事か?
やるやついるのか??
>>936 配列への入力もちゃんとできないのかよw
int i, a[10];
printf("数列の入力:");
for(i=0; i<10; i++) scanf("%d", a + i);
あと、求める解と違う解が出た具体的な例をあげてみて。
948 :
デフォルトの名無しさん :2009/12/11(金) 02:38:53
[1] 授業単元:ファイル入出力 [2] 問題文(含コード&リンク): /*タイトル:関数におけるポイント利用プログラム */ /*概要:呼び出し元の変数のアドレスの受け渡しを */ /* ポイントを用いて行う。 */ /*適宜、プログラム中にコメントを入れる。 */ #include 〈stdio.h〉 /*関数のプロトタイプ宣言 */ int calc(double input_data, double * data_ptr ); int main(void) /* 引数無しのmain関数 */ { double input_data; /*入力データ*/ double result_data; /*計算結果 */ /*入力データのキーボードからの入力 */ printf("入力値は?->"); scanf("%lf",&input_data); /*関数呼び出し時に、変数result_dataのアドレスを引数として渡す */ calc(input_data, &result_data); /*関数calcによって書きこまれた計算結果の表示 */ printf("%lf * 2 = %lf\n", input_data, result_data); return 0; /* 正常終了 :/ }
949 :
デフォルトの名無しさん :2009/12/11(金) 02:39:37
/* オリジナル関数calc */ /* calc(入力データ、計算結果のアドレスを格納するポインタ) */ int calc(double input_data, double * data_ptr) { /*ポインタを使って、呼び出し元のデータ格納場所に値を設定 */ *data_ptr = input_data * 2; return0; /* 正常終了 */ } 上記プログラムを参考に、 二つの入力データの変数(倍精度実数型) double input_data1, input_data2; に対しての、四則演算(+、−、*、/)の結果を、それぞれ double plus_data, minus_data, multiply_data, divide_data; の4変数に設定する機能を持つ、オリジナル関数calcを作成せよ。 ただし、main関数上でのcalc関数の呼び出し方法は、以下のようにすること。 calc(inpt_data1, input_data2, &plus_data, &minus_data, &multiply_data, _data); 最後に、main関数上で上記4変数に格納された計算結果を画面に出力せよ。 以上の仕様のプログラムを、calc.cという名前で作成せよ。 calc.cをVisual Studioで実行して、実行結果をcalc.c内の文末に「コメント行」として記載せよ 。 [3.1] OS: Vista [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C++ [4] 期限: 2009年12月11日14:40まで 全くわからないです…。
950 :
デフォルトの名無しさん :2009/12/11(金) 02:40:44
>>892 漢字を正しく選ぶことができないあなたは小学校を卒業してもよかったのですか?
>>951 現行制度だから卒業出来てしまったんだな
酷い社会だ
>>944 それが使えないだけならたいしたことないんだけどねぇ
954 :
デフォルトの名無しさん :2009/12/11(金) 03:47:55
VC2005ってC++じゃないの?
>>869 ではCになってるけど
Cの仕様で作れってこと?
VC2005ってのは標準ライブラリ無しでも何か作れるの?
標準ライブラリ以外のライブラリ使っておkってこと?
VC2005でCのコードを書くことはもちろんできるし、Cの中でアセンブラを書くことももちろんできる 標準ライブラリ以外のライブラリが標準ライブラリを使っていることは十分考えられる
正直このレベルのプログラミングを他人に頼むような人々が プログラマになるってことが信じられない
え? ここで聞いてるのはただ単位が欲しいだけの学生じゃないの?
×単位が欲しいだけの学生 ○単位が欲しいだけのぼっち
小林教授に通報すればいいのかな?
下のやつを使って入力した数字の階上の積と総和を出力するようにしてください #include <stdio.h> main() { float fact; int i, n; scanf("%d\n",&n); fact = 1; for(i=2;i<=n;i++) { fact = fact * i; } printf("%.0f\n",fact); for(i=1;i<=n;i++) { fact = fact + i; } printf("%.0f\n",fact); return 0; }
下のように支払い金額の計算書を出力するように下のプログラムを修正してください。 menu0 650 1 650 menu1 680 2 1360 menu2 720 3 2160 menu3 840 2 1680 menu4 920 1 920 menu5 980 0 0 menu6 1080 0 0 menu7 1280 1 1280 goukei 10 6370 #include <stdio.h>
main() { int i, order; int menu[8]; for(i=0;i<8;i++) menu[i]=0; for(i=1;i<=10;i++) { scanf("%d",\&order) if( order >=0 && order <= 7) { ++menu[order]; } } for(i=0;i<8;i++){ printf("menu %d; %d\n", i , menu[i]); } return 0; }
menu3の金額は無視するってことでいいのかな?
menu3は無視せずお願いします。 メニュー番号を10回打ち込んでメニューそれぞれの個数と合計を出力する感じです。
合計が6370だとmenu3を無視してるんだがw
合計間違ってました。すいません。
>>908 自演乙
そんなに gets() を否定されたことに根をもっているのでしょうかね。
#include <stdio.h> #define NINZU 4 // お題の指示は、グローバル変数ではなくてマクロ定数のことと思う #define KOUMOKU 4 float heikin(int *); char hyouka(float); void hyouji(int, int *, float, char); int main() { int i; int bango[NINZU] = {1, 2, 3, 4}; int tensu[NINZU][KOUMOKU] = { {4, 3, 5, 4}, {5, 4, 4, 4}, {3, 2, 2, 2}, {3, 4, 3, 3} }; float average[NINZU] = {0}; // これの初期化をしろとお題に書いてある printf("No | 技術力 | 正確さ | 難易度 | 表現力 | 平均点 | 評価|\n"); for (i = 0; i < NINZU; i++) { average[i] = heikin(tensu[i]); hyouji(bango[i], tensu[i], average[i], hyouka(average[i])); } } float heikin(int *tensu) { int i; float average = 0; for (i = 0; i < KOUMOKU; i++) average += tensu[i]; average = average / KOUMOKU; return average; }
char hyouka(float average) { if (4.0f <= average) { return 'A'; } else if (3.0f <= average) { return 'B'; } else if (2.0f <= average) { return 'C'; } else { return 'D'; } } void hyouji(int no, int *tensu, float a, char h) { int i; printf(" %d|", no); for (i = 0; i < KOUMOKU; i++) { printf("%8d|", tensu[i]); } printf("%8.2f|%8c|\n", a, h); }
インデント調整したり、カラム表示を調整などは任せた。
大学の宿題レベルのC言語が一覧であるサイトないですか?
大学もピンキリだし。 ここの過去ログ見ればなかなか難しいのもあるよ そんなことより次スレマダー?
ちっと立ててくる。
>>974 ひとりぼっちの学生。略してぼっち。大生板とか就職板とかではよく見かける単語
大学のプログラミングの授業で使われる 市販のプログラミング入門書とかの問題を先生たちは出題することが多い 考えるのが面倒らしい 答えがそのまんま掲載されてることもあるから そのまんま打ち込めばいいってことよくある
でっていう
>>976-978 迅速かつ丁寧な回答ありがとうございます
良く見ると間違いだらけの資料ですねwすいませんでした
>>976-978 迅速かつ丁寧な回答ありがとうございます
良く見ると間違いだらけの資料ですねwすいませんでした
>>899 最初に足す分だけはpowとfactorialで求めて、
そこに-i*2*(i+1)/(rad*rad)をかけてけば
毎回powとfactorial使うよりは計算少なくなるんじゃ?
>>990 わかってるってそんな事言われなくても
初心者に見やすいプログラムをと基本に則って書いただけだ
最適化などいくらでも出来るがプログラムが読みにくくなる
その割には初心者が避けるべきgets()とかは平気で使ってんのなw
文句があるなら自分で手本を示せばいいじゃない できるならねw
ループの中のif (i == 0) は無駄。 ループを抜けた後にradを足せばいい。 pow(-1.0, i)を毎回計算するのはアホ。 iの偶奇で分岐するとか、flgをもってflg*=-1とかにしたほうがマシ。 printf("出力ファイル '%s' をオープン出来ませんでした。\n"); %sに対応する文字列がない。 あんまり初心者のためになるものとは思えない。
>>992 初心者はどうしてgets()は避けるべきなのか全然わかりませんけど?
初心者だからこそgets()で十分だと思うんですが
>>994 だからお前がソース書けや、って言ってるの
わかった?
早く書け
それからその%sのバグは自分でもわかっててちゃんと直したけど
うpしてないだけです
>直したけどうpしてないだけです アホだw
>>998 同じ手が通用すると思うな
俺は少なくとも1回うpしている
終わり
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。