2 :
デフォルトの名無しさん :2009/12/11(金) 22:22:42
5 :
デフォルトの名無しさん :2009/12/12(土) 03:32:23
[1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク): 5教科のテストの点数を入力し、それらの合計点を算出するようなプログラムを作成せよ。実行結果の例を以下に示す。 ----------------------------------------------- 国語:? 算数:? 理科:? 社会:? 英語:? 合計点は?点です。 [3] 環 [3.1] OS:vista (Windows/Linux/等々) [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:2009年1月6日 [5] その他の制限:佛教大学通信 数学科 でまだ5回目の授業の問題
6 :
デフォルトの名無しさん :2009/12/12(土) 03:42:26
>5です。 これも追加でお願いします。 問題2 長さX(cm:センチメートル)を入力すると、Y(inch:インチ)に変換するプログラムを作成せよ。1(inch)は2.54(cm)とする。実行結果の例を以下に示す。 ------------------------------------------------ 長さ(センチメートルで入力して下さい):2.54 2.54(cm)は 1.000(inch)です。 ------------------------------------------------ 問題3 ある整数Xを入力した時に、それを3で割った商と余りを算出するプログラムを作成せよ。余りを算出する演算子は%であるが、%を使わないこと。実行結果の例を以下に示す。 ------------------------------------------------ X:35 商:11 余り:2 ------------------------------------------------ 問題4 平面上の2点(x1,y1)、(x2,y2)を入力し、それら2点間の距離を算出するプログラムを作成せよ。Aの平方根はsqrt(A)という数学関数で算出される(Aは引数でdouble型)。 数学関数を使用する場合、<math.h>というファイルから情報を得なければならないので、#include<stdio.h>の 下の行に#include<math.h>という命令文を付け加えなければならない(2つのinclude文)。実行結果の例を以下に示す。 ------------------------------------------------ x1:0 y1:0 x2:1 y2:1 この2点間の距離は1.414214です。 ------------------------------------------------ 問題5 英字アルファベット大文字を入力すると、その文字の小文字が表示されるようなプログラムを作成せよ。実行結果の例を以下に示す。 ------------------------------------------------ アルファベットの大文字を入力して下さい:A 小文字はaです。 ------------------------------------------------
7 :
デフォルトの名無しさん :2009/12/12(土) 04:25:45
>5はここまでわかったのですがところどころ分からないので補足お願いします。 #include<stdio.h> main() { int kokugo; int sansuu; int rika; int syakai; int eigo; int goukei = 0; printf("国語;"); scanf("%d",&kokugo); printf("算数;"); scanf("%d",&sansuu); printf("理科;"); scanf("%d",&rika); printf("社会;"); scanf("%d",&syakai); printf("英語;"); scanf("%d",&eigo); goukei = ; goukei = goukei = goukei = goukei = printf("合計点は%d点です。"goukei); }
>>7 #include<stdio.h>
int main(void)
{
int kokugo;
int sansuu;
int rika;
int syakai;
int eigo;
int goukei = 0;
printf("国語 : ");
scanf("%d", &kokugo);
printf("算数 : ");
scanf("%d", &sansuu);
printf("理科 : ");
scanf("%d", &rika);
printf("社会 : ");
scanf("%d", &syakai);
printf("英語 : ");
scanf("%d", &eigo);
goukei = kokugo + sansuu + rika + syakai + eigo;
printf("合計点は%d点です。\n", goukei);
return 0;
}
10 :
デフォルトの名無しさん :2009/12/12(土) 10:58:17
[1]単元 初等C言語 [2]問題 コンソールから、年月日時分秒に対応する整数をそれぞれ個別に不正入力時には 再入力を促しながら読み込み、それをyyyymmddhhmmss(準グレゴリオ暦)形式の時刻表 現と解釈する。この処理を2回行い2つの時刻表現を取得する。それぞれが正しいフォー マットかどうかを調べ、共に正しい場合は、日付が新しいものの順に yyyy年mm月dd日hh時mm分ss秒の書式で出力)しその時刻差を秒単位、分単位、時間単 位、日単位で出力するプログラム(小数点一位以下四捨五入) 但し1900年1月1日0時0分0秒以前の時刻は与えられないとして良い。 また9999年12月31日23時59分59秒以後の時刻も与えられないとする。 うるう年は400の倍数か100の倍数でない4の倍数な年であるとし、2月の末日 にうるう日が付与されるものとする。実際の暦体系では不定期に付与されるうるう秒 は考慮しなくて良いものとする正しい日付でない場合はその旨出力し処理を中止する [3] OS:Wndows 2000 VMWare上で動作。ホストOSはWindows Vista 処理系:LSI-C試食版 (16ビットコンパイラ) 言語:C [4] 期限 再来週月曜日迄 [5] 制約 32ビット以上の整数型が存在しない処理系を前提。float doubleを利用しては ならない。scanf関数gets関数getc fgetcを使用してはならない。多倍長整数計算ライブラリを 使用する場合はそのソースコードを取り込むこと。コンパイル済みのものとリンクする方法では 使用出来ない
12 :
11 :2009/12/12(土) 12:21:40
>>11-12 しつこい
そんな危険な関数ならさっさと標準から削除されてるはずだろ
C99になっても残ってるのはこれで十分な場合もあるからだ
>>13 残っているからといって使っていいことにはならないでしょうに。
>>13 過去のソースを使いたいときのために残ってるだけでしょ。
>>14 >>16 だからしつこい
お前らがいくら詭弁を弄したところで俺の意見は1ミリたりとも動かない
以上
文句有るなら俺より先にソース書け
>>17 えー、たとえば
>>15 で fgets(), realloc() で十分に処理できる例を示したつもりなんですけれどもね。
>>17 gets はC言語の標準Cライブラリにおける、標準入出力ヘッダー(<stdio.h>)で宣言されている標準入力から1行分の文字列を取り出す入力関数である。
この関数はバッファオーバーランを防ぐことが出来ないという致命的な脆弱性を持っており、Linux Programmer's Manual では「絶対に使用してはならない」とされている関数である[1]。
byWiki:
http://ja.wikipedia.org/wiki/Gets
いちいち噛み付くから伸びてるだけだろ。 もう無視っとけよ。
21 :
デフォルトの名無しさん :2009/12/12(土) 13:24:00
cstring string string.h string.hpp cstring.h の違いを述べよ
ただのC言語だと int*********** a; a=(int*)12345678; みたいなのが可能だったがC++じゃできないんだな。不便だな。
27 :
デフォルトの名無しさん :2009/12/12(土) 13:31:34
>26 お前が悪い
>>26 初めて見た
何それ
どう処理されてんの?
E-mail feeld に宛先書いてみろ
>>30
[1] 授業単元: プログラミング論 [2] 問題文(含コード&リンク): 次のA・Bの行列をA×Bの計算をして、その結果を表示するプログラムを作成しなさい。 A=[5 3] B=[7 1 5 4] [3 8] [1 9 2 8] [1 6] [9 1] 解の表示) [38 32 31 44] [29 75 31 76] [13 55 17 52] [64 18 47 44] [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C [4] 期限: 12月15日 どなたかよろしくお願いします。
数学わかんないお・・・・
行列計算のプログラミングはテンプレ化してもいい気がしてきた。 何度この手の問題を見てきたことやら。
>>32 #include <stdio.h>
int main(void)
{
int a[4][2] = {{5,3},{3,8},{1,6},{9,1}}, b[2][4] = {{7,1,5,4},{1,9,2,8}}, c[4][4];
int i, j, k;
for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
c[i][j] = 0;
for(k=0; k<2; k++) c[i][j] += a[i][k] * b[k][j];
}}
for(i=0; i<4; i++) {
for(j=0; j<4; j++) printf("%d ", c[i][j]);
putchar('\n');
}
return 0;
}
>>18 あーはいはい
gets()でも十分でしたねその例では
>>19 Linuxなんか知った事か
Cの規格票にgets()は使ってはいけないと書いてあったら守ってやるよ 書いてないだろうがアホどもめ
まぁたかだか宿題レベルのプログラムなら、エラーチェックとかバッファオーバーとかきにする必要ないと思うけどね
>>41 君もそう思うだろ?宿題ごときに最適化だのループに分岐を入れるなだの
うるさい馬鹿がいるんだよ
本当に困っている
いちいち顔真っ赤にして反応するから、面白がって突っ込まれるんじゃねーの? スルーしとけばいいんだよ。
世の中には宿題どころか初心者日曜プログラマが作ったプログラマにさえ ちゃんとした仕事でやるような厳密なテクニックを押し付けるバカグラマがいるもんだ。
>>40 へえ?C の規格ひょーにライブラリ関数の仕様のことがかいてあるんだ?
プログラマを作れる初心者日曜プログラマすげーw
>>44 そうだな
いちいち馬鹿どもを相手にしていたら相手と同じレベルに堕ちる
ここからは一切スルーする事にしよう
>>41 それはまあそうですね。でもね、gets() はね。教育的にも避けたほうがいいと昔から言われているんですよ。
それに単に事実を指摘されただけで、顔を真っ赤にして反論するのは、見てて面白い。
>顔を真っ赤にして反論 ネットの向こうの人の顔色まで見えるエスパーがいるのか?
ネットでの常套句に一々突っ込んで揚げ足取れたと思うあたりが、 顔真っ赤なんだなと思わせるw
宿題だからって理由でgets()使ったり糞効率悪いコード書くのは自由だけど、 それをここで批判するのも自由なんだよ。 それがスルーできないなら、最初からチラシの裏にでも書いたほうがいいかもな。
>>42 pow(-1.0, n) はちょっとひどいな、と思いましたが。
(n % 2) ? -1.0 : 1.0 で十分かと
>>53 じゃあその批判を批判するのも自由ですね。
プログラム的に理由があるならね。
概してここの回答者の回答コードのモジュール結合度が弱過ぎです。 自分の理解の記憶を確認する為に記述したコードをそのままコンパイラに テストさせただけのを回答として貼付けてるケースが見受けられます。 あまり美しい行為とは言えないと思います。
>>53 そんなに自由ではない
ここは質問と回答者が書くスレ
批判するスレではない
特に自分ではソースコードもあげずに批判ばかり
してる奴ははっきり言って必要ない
迷惑
ファイルからの読み込みとかを練習してます fgets(str,20,fp) ネット上から引用しただけなので、この引数の意味がよく解りません この場合の strは、ここに一時的に格納 20は、読み込む文字数or20ビット fpはわからん これで合ってますか? よく解らないので正しい知識を、どうか教えてください
>>58 モジュール結合度は弱いほうがいいのでは?
それはそうと、ここのコードはソースファイルは単数、それも100行以内の書き捨てだからなあ。
62 :
C言語 :2009/12/12(土) 22:23:07
Visual Studio 2008 のコマンドプロンプトを使っています。 単純に、数字abだけを入力して計算結果を表示する場合は、 scanf("%d %d",&a,&b); c=a+b; printf("答えは%dです。\n",c); と書けますが、式を読み込むにはどうすればいいのでしょうか? 例えば、「1+2」のような計算式を読み込んで計算結果を表示したいのです。 結果は答えだけでなく、「1+2=3」のように計算式も含めて表示したいです。
65 :
C言語 :2009/12/12(土) 22:30:16
ありがとうございます。 なんだか、ずいぶん面倒くさそうですね・・・
66 :
63 :2009/12/12(土) 22:47:31
68 :
5です :2009/12/13(日) 02:07:59
>9さん 回答ありがとうございます。 printfやscanfの基礎的関数のやり方しか習っていないので制御構造や標準的な関数 を使わず解いて頂いてもよろしいでしょうか。
70 :
5です :2009/12/13(日) 03:23:11
>>69 3番の問題です。
>>70 9ではないけど、while{...} を
s = x / 3;
x = x - s * 3;
とするのはOK?
for(s=0; x>=3; s++) x = x - 3; ならどうだ?
77 :
5です :2009/12/13(日) 22:26:43
[1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク): 必修課題1 2つの整数XおよびYを入力し、大きい数から小さい数をひいた差を算出するプログラムを作成せよ。実行結果の例を以下に示す。 X:32 Y:48 差は16です。 必修課題2 ある整数Xを入力した時に、ゼロあるいは、プラス、マイナスを判別して表示させるプログラムを作成せよ。プラスの場合の実行結果の例を以下に示す。 X:5 プラスです。 発展課題1 2つの整数XおよびYを入力し、大きい数を小さい数で除算するプログラムを作成せよ。実行結果の例を以下に示す。 X:45 Y:7 答えは6.428571です。 ヒント:簡単に考えて安易に作成すると大変なことになります。割り算である ことを忘れないで下さい。例えば、「〜と等しくない」を意味する演算子は「!=」です。 発展課題2 2次方程式ax^2+bx+c=0の3つの係数を入力すると実数解が算出されるようなプログラムを作成せよ。実行結果の例を以下に示す。 2次方程式の係数を入力して下さい。 a:1 b:5 c:6 解は-2.00と-3.00です。 ヒント:判別式はD=b^2-4acであり、解の公式は(-b±√D)/2aである。 条件式を細かく考えてみよう。係数a、bが0の時はどうか?の分岐を考えてから、→判別式が0以上、0以下、0の時という分岐処理をする。 [3] 環境 [3.1] OS:vista (Windows/Linux/等々) [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:2009年1月6日 [5] その他の制限: 選択構造(分岐処理)を使って解いてみてください
78 :
67 :2009/12/13(日) 22:57:35
ヒマを持て余してる自称プログラマがプログラミングするスレ?
LSI-C試食版 って2000とかVista上で動くの白なった
[1] 授業単元: Cプログラム応用A [2] 問題文(含コード&リンク): 文字列操作の標準ライブラリ関数を使用し、指定したファイルの中で、辞書列で最初に出てくる単語と最後に出てくる単語、さらに最も長い単語をを見つけ表示せよ。 ただし、同じ長さの単語がある場合最初に見つけた一つでいい。 ここでの単語とは、スペースや改行、タブで区切られた文字列のことである。 ただし、単語の長さは100文字以内と考えていい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:12月14日17時 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
84 :
83 :2009/12/14(月) 00:55:57
その他の制限は特にありません。 よろしくお願いしますm(__)m
文字はアルファベットに限定していいの?
>>85 アルファベットに限定してお願いしますm(__)m
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): txtファイルからデータを読み込み、人口順に並べ替えて、都道府県名、人口、面積を1行に表示せよ。 表示は全部で5行になる。 txtファイルの内容 Gunma 2016027 6363.16 Saitama 7104222 3797.25 Chiba 6108809 5156.60 Tokyo 12790202 2187.58 Kanagawa 8899545 2415.84 [3] 環境 [3.1] OS: Linux or Mac [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 今週の水曜日までに [5]どなたかご存じの方お願いします。
88 :
87 :2009/12/14(月) 10:00:02
OSはwindowsでもOKです。 言語はC/C++どちらでもOKです。
90 :
87 :2009/12/14(月) 11:04:59
>>89 さん
すみません、説明不足でした。
まだ授業でC++言語の詳しい事はやってないので、
以下のソースを参考にして作成していただきたいのですが…orz
#include 省略
main() {
char n[5][100]; // 都道府県名(長さは最大で99文字+'\0')
int p[5]; // 人口
double a[5]; // 面積
ifstream pref; // ファイルから読み込むためのストリーム
pref.open("pref.txt"); // 指定したファイルを開く
pref.width(100); // 次に読む文字列の最大の長さを設定する
for(int z=0;z<5;z++){
pref >> n[z]; // 空白・改行が出てくるまで文字を連続して配列に読み込む
pref >> p[z]; // 次の行から整数を読む
pref >> a[z]; // その次の行から浮動小数点数を読む
//以下に人口順に並べ替えて、都道府県名、人口、面積を1行に表示するプログラムを書く。
申し訳ありませんがよろしくお願いしますorz
fixed << setprecision(0) これは不要か
最後から5行を次のように書き換えて下さい // 都道府県名等の表示 for (int i = 0; i < N; i++) cout << "都道府県名 = " << n[i] << ", 人口(人) = " << p[i] << ", 面積(km^2) = " << fixed << setprecision(2) << a[i] << endl;
95 :
デフォルトの名無しさん :2009/12/14(月) 12:43:36
[1] 授業単元:計算機基本 [2] 問題文(含コード&リンク): 1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。 途中経過も表示してください。 例:1^2 + 2^2 = 1^2 + 2^2 + 3^2 = .... [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: BCC Developer [3.3] 言語: C++ [4] 期限: [2009年12月15日06:00まで] [5] その他の制限: 特になし、最近Switch 文をやりました。
#include <stdio.h> int main(void) { int i, j, sum; for(i=1,sum=0; i<=10; i++) { sum += i * i; printf("1^2"); for(j=2; j<=i; j++) printf("+%d^2", j); printf("=%d\n", sum); } return 0; }
97 :
87 :2009/12/14(月) 13:27:07
>>95 C++で、1^2=2は抜かすなら。
#include <iostream>
using namespace std;
int main()
{
for(int i=2,sum=1; i<=10; i++) {
sum += i * i;
cout << "1^2";
for(int j=2; j<=i; j++) cout << "+" << j << "^2";
cout << "=" << sum << endl;
}
}
>>98 せんせ 1^2 は 1 でっせ (コードは sum=1 で正しい)
タイプミスだが、かなり恥ずかしいなw
つまんね
C初心者の起こしがちなミスだが、こっちもかなり恥ずかしいなw (直前までゴムの使い方知らなかったとか)
[1] 授業単元:Cプログラミング演習
[2] 問題文:多項式f(x)=Cn×Iのn乗+Cn-1×Iの(n-1)乗+...+C1×I
+C0×Iの0乗 の次数nと多項式の係数Cn,Cn-1,..,C1,C0を順に読み込み、
変数I=0.0、0.1、0.2,・・、0.9、1.0に対する多項式f(x)の値を計算して見やすい形に
出力するCプログラム
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:Cです
[4] 期限: [2009年12月15日12:00まで]
[5] その他の制限:配列の問題です。 for構文を必ず使い、
f(x)=((...((CnI+Cn-1)I+Cn-2)...)I+C1)I+C0
と単純な効率の良いプログラム計算するようなもの。つまり
fx←Cn
fx←fx*I+Cn-1 というような代入を参考にして考えてみる
過去ログ検索で以下がひっかかったのですが、回答の707-708はレベルが高すぎて何がなにやら…
http://chomework.sakura.ne.jp/log1/1164079451_08.html
ホーナー法か
>>104 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, j, n;
double *c;
scanf("%d", &n);
c = malloc((n + 1) * sizeof(double));
for(i=0; i<=n; i++) scanf("%lf", c + i);
for(i=0; i<=10; i++) {
double x = i / 10.0, ans = 0;
for(j=n; j>=0; j--) ans = ans * x + c[j];
printf("x = %f f(x) = %f\n", x, ans);
}
free(c);
return 0;
}
読み込む順序から考えれば for(j=0; j<=n; j++) かな
108 :
104 :2009/12/14(月) 16:07:24
109 :
83 :2009/12/14(月) 17:15:32
明日朝8時まで期限を延長させてください。 どなたかご回答頂けませんでしょうかm(__)m
ソースコードハイライトするアップローダーって、このスレ的に需要ある・・・?
112 :
デフォルトの名無しさん :2009/12/14(月) 18:37:05
授業単元:アルゴリズムとデータ構造 [2] 問題文(含コード&リンク): ポーカーゲーム(の一部)をC言語にて作成する。 ポーカーゲーム(の一部)は以下の条件を満足させてください。 カードのシャッフルを行い、プレイヤ、ディーラにそれぞれ5枚ずつカードを配る。 プレイヤは配られたカードの中から交換するものを選択できるようにする。 ディーラ側の選択ルーチンはダミーの関数(たとえば全部交換、交換しない等)を用意すれば十分です。 プレイヤ、ディーラそれぞれの役を判定して勝敗を表示する。 表示、カードの選択は標準入出力を利用してください。 [3] 環境 [3.1] OS: windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: c [4] 期限: 今週の水曜まで [5] その他の制限: トランプはジョーカー抜きの52枚です。randを使います。お願いします。
>>111 こんなサイトがあったのか
ありがとおおお
>>115 おつ!
ソケットなんざ、もう10年は触ってねえ。
118 :
113 :2009/12/14(月) 20:30:05
プログラム一覧みたいなのあるサイト無いですか?
いちいちmallocしなおすってなんの冗談だよw
>>120 どんな長さの行/単語に対してもちゃんと動くようにするには、いちいち malloc()/realloc() しなおすしかないでしょう?
未定義動作w
>>83 #include<stdio.h>
#include<string.h>
#define WORD_LEN_MAX 100
#define BUF_SIZE (WORD_LEN_MAX+1)
#define FMTDUM(LEN) "%" # LEN "s"
#define FMT(LEN) FMTDUM(LEN)
int main(void){
char first[BUF_SIZE]="", last[BUF_SIZE]="", longest[BUF_SIZE]="";
char buf[BUF_SIZE];
FILE *fp;
fp=fopen("hogehoge.txt", "r");
if(fp==NULL) return 1;
while(fscanf(fp, FMT(WORD_LEN_MAX), buf)==1){
if(first[0]=='\0'){
strcpy(first, buf);
strcpy(last, buf);
strcpy(longest, buf);
}
if(strcmp(first, buf)>0) strcpy(first, buf);
if(strcmp(last, buf)<0) strcpy(last, buf);
if(strlen(longest)<strlen(buf)) strcpy(longest, buf);
}
puts(first);
puts(last);
puts(longest);
fclose(fp);
return 0;
}
125 :
デフォルトの名無しさん :2009/12/14(月) 21:21:50
[1] 計算物理 [2] @原点に静止していた電子を考える。ここに直線偏光した電磁波が入射してきたとき、電 子の運動の様子を計算せよ。円偏光のときはどうか。磁場の力は無視してよい。 A地球をめぐる衛星は、大気の摩擦を受けて少しづつ落下する。この様子を計算せよ。値 は実際の値を入れなくともよいが、摩擦を受けつつ地球の重力を受けてまわる様子を正し く微分方程式であらわし、それを解け。 B有限の広さの薄い電極をもつ平行平板コンデンサーの周りの電場(電位)を計算し、可 視化する。平行平板コンデンサーの内部では一様な電場ができることはよく知られている。 しかし端の電場はどのようにずれているのであろうか。 (コンデンサーよりも十分大きい設置した箱型の境界を考える。その中にコンデンサーの極 板をおき、片方に電圧をかけて境界条件のように取り扱えばよい。) [3] 環境 [3.1]Linux [3.2] gcc [3.3] C [4] 期限:できれば木曜の12:00まで、因みに自主課題だからできなくてもいい [5] その他の制限:特になし
>125 物理屋ではないから立式できない
>>121 多めにmallocしてなるべくmalloc回数は減らすべきだってばっちゃんがいってた
>>126 >printf("[%d]を%d軸から%d軸へ移動\n",no,x,y);
を
printf("[%d]を%s軸から%s軸へ移動\n",no,pole[x-1],pole[y-1]);
に
>>128 んー、メモリーリークに注意さえすれば、malloc() をバンバン使ったほうが見通しがいいのですが。
いや、未使用となった領域を再利用する際に長さをしらべて必要なら realloc() するっていうのは、わからないでもないですが。
>>131 malloc使いすぎるとメモリが断片化していき、しまいにはメモリ確保に失敗して強制終了になる場合もある
単語の最大文字数決まってるのに、mallocしてstrcpyって無駄じゃね?
>>130 素早い対応ありがとうございます。
助かりました。
>>133 ん、それもそうですね。ただ 100 文字にとらわれたくなかっただけで、まあ、かってに問題の拡大解釈をしただけです。他意はありません。
>>132 DOS ならいざしらず、OS レベルでページングが有効な環境でも、やはり考慮しなければならない条件でしょうか?
137 :
デフォルトの名無しさん :2009/12/14(月) 22:26:54
>>10 想定する入力が19700101〜20380119を逸脱しているから, time.hのmktimeが使えない。
そこで、GCCでunsigned long long を使って書いた後で、
LSI-C(16bit)という条件を見つけた。
もう、しめきり過ぎてるね。
>>136 究極的には自分でアロケータやガーベジコレクタ書く羽目になるから、課題レベルならどうでもいい
>>139 幸せなことに、私はそこまでやる段階には到達しなかったのですが、メモリ管理も自前でやるしかないのですね、シビアな環境では。orz
141 :
140 :2009/12/14(月) 23:28:08
いや、EMS があったか‥‥‥。
フラグメンテーションを完全に防ぐには再配置GCを使う以外の方法はない
143 :
デフォルトの名無しさん :2009/12/15(火) 00:24:07
[1] 授業単元: プログラミング応用 [2] 問題文(含コード&リンク): #include<stdio.h> int main(void){ char str[]="AbcdeFghijkLmnopqrstuv"; char *p p=str; while(条件){ ポインタを使って一文字ずつ表示させる。 } printf("\n"); return 0; } [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio2005 [3.3] 言語:C [4] 期限:2009年12月15日 10:00 [5] その他の制限: while文の中でstrは使用できません 宜しくお願いします。
145 :
デフォルトの名無しさん :2009/12/15(火) 00:29:48
[1] 授業単元: プログラミング応用 [2] 問題文(含コード&リンク): #include<stdio.h> void heikin(int x, int y, int z, double *a); int main(void){ int kokugo,sugaku,eigo; double av; 点数の入力 関数の実行 printf("3科目の平均は%.1lf点です\n",av); return 0; } 関数の定義 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio2005 [3.3] 言語:C [4] 期限:2009年12月15日 10:00 立て続けにすみません。 こちらもどうか宜しくお願いします。
>>143 while(*p != '\0'){
printf("%c",*p++);
}
>>143 while (*p != '\0') {
printf("%c", *(p++));
}
どっちが正しい?
どっちも正しい
void heikin(int x, int y, int z, double *a); int main(void) { int kokugo, sugaku, eigo; double av; scanf("%d %d %d", &kokugo, &sugaku, &eigo); heikin(kokugo, sugaku, eigo, &av); printf("3科目の平均は%.1lf点です\n", av); return 0; } void heikin(int x, int y, int z, double *a) { *a = (x + y + z)/(double)3.0; }
キャストの位置どっちが正しい?
>150のキャストは明示的な意味しかない、むしろ無い方が好みかな >151のキャストは必要、演算子の優先順位からして正しい
これはキャストしているのではない
>>10 Enter>2994/11/05 18:58:98
format-error
Enter>2994/12/05 18:23:41
Enter>1900/11/15 22:13:19
2994年12月05日 18時23分41秒
1900年11月15日 22時13分19秒
秒単位:34522488622秒
分単位:575374810分
時間単位:9589580時間
日単位:399566日
こんな感じの出力結果が必要なの?(上の時間差の数字は適当)16ビット処理系だったら
ちと面倒だな
>年月日時分秒に対応する整数をそれぞれ個別に不正入力時には再入力を促しながら読み込み 個別入力じゃねーの? Year>2009 Month>12 Day>31 Hour>55 Error Hour>12 Minute>35 Second>33 みたいな
158 :
デフォルトの名無しさん :2009/12/15(火) 11:08:57
[1] 授業単元:計算機基本 [2] 問題文(含コード&リンク): 1から500までの整数から、3の倍数を1行に10個ずつ表示するプログラムを作れ。ただし、一個の整数を表示する桁数を5桁に指定すること。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: BCC Developer [3.3] 言語: C++ [4] 期限: [2009年12月17日まで] [5] その他の制限: 特になし。
159 :
デフォルトの名無しさん :2009/12/15(火) 11:36:52
[1] 授業単元: ものつくりの実習中に必要になりました [2] 問題文(含コード&リンク): 全角の日本語をJISコードに変換したいです。 ”あいうえお終”と入力したときに 2422 2424 2426 2428 242A 3D2A のように返してくれるとうれしいです。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:visual c++ 2008 Express Edition [3.3] 言語: C [4] 期限: 2009/12/18 [5] その他の制限: 特になし
>>124 氏のパクリ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void free_and_dup(char **current, const char *newword) {
free(*current);
*current = strdup(newword);
}
int main() {
char buff[100 + 1], *first = 0, *last = 0, *longest = 0;
FILE *fp = fopen("hogehoge.txt", "r");
if (!fp) exit(EXIT_FAILURE);
for (; fscanf(fp, "%100s", buff) != EOF; ) {
if (!first || strcmp(buff, first) < 0) free_and_dup(&first, buff);
if (!last || strcmp(buff, last) > 0) free_and_dup(&last, buff);
if (!longest || strlen(longest) < strlen(buff)) free_and_dup(&longest, buff);
}
fclose(fp);
puts(first);puts(last);puts(longest);
return 0;
}
>>158 #include <stdio.h>
int main() {
int i;
for (i = 1; i * 3 < 500; i++) printf("%5d%s", i * 3, i % 10 == 0 ? "\n" : "");
return 0;
}
162 :
94 :2009/12/15(火) 12:49:57
94です。
>>115 さんありがとうございました。
ただ、石の数が残り1桁になると
突然増えるんですがどうしたらいいですか?
163 :
115 :2009/12/15(火) 14:05:48
>>155 16ビット int の中におさまりますか?
何も保障しません。
どうせなら int iもforの中につっこんじゃえばよかったのにインライン
>>169 #include <stdio.h>
int main(void)
{
char str1[256], str2[256], *p, *q;
printf("str1?");
scanf("%s", str1);
printf("str2?");
scanf("%s", str2);
for(p=str1; *p; p++);
*p++ = ' ';
for(q=str2; *p=*q; p++, q++);
printf("%s", str1);
return 0;
}
int str_chnum(const char str[], int c) { int i, ret = 0; for(i=0; str[i]; i++) if(str[i]==c) ret++; return ret; }
>>169 char *scan_and_dup(const char *label) {
static char buff[256 + 1];
printf("%s", label);
scanf("%256s", buff);
return strdup(buff);
}
char *create_sepcat(const char *s1, const char *s2, const char *s3) {
int totallen = strlen(s1) + strlen(s2) + strlen(s3);
char *cs = (char *)malloc(totallen * sizeof(char));
strcpy(cs, s1);
strcat(cs, s2);
strcat(cs, s3);
return cs;
}
int main() {
char *str1 = scan_and_dup("str1?"), *str2 = scan_and_dup("str2?"), *sep = " ";
char *tmp = create_sepcat(str1, sep, str2);
free(str1);
str1 = tmp; // str1←str1&' '&str2の操作
puts(str1);
return 0;
}
きもちわりい
>>170 int str_chnum(const char str[], int c)
{
int i,count = 0;
for(i=0; str[i];i++){
if(str[i] == c)
count++;
}
return count;
}
176 :
94 :2009/12/16(水) 14:03:49
>>163 さん、ありがとうございました!ちゃんと21から0まで行けました
[1] 授業単元: コンピュータプログラミング [2] 問題文(含コード&リンク) 1)f(x,y)=dy/dx=-4(x-1)y,y(0)=e^-2の一階微分方程式についてオイラーの方法で数値解を求めるプログラムを作成せよ。 2)dy/dx=f(x,y)=1-y,y(0)=0 dy/dx=f(x,y)=y(1-y),y(0)=0.01 dy/dx=f(x,y)=2yx,y(0)=1 の数値解をオイラー法によって求めよ。 [3] 環境 [3.1] OS: windowsVista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2009/12/18 [5] その他の制限: 特にありません。 すいませんが、よろしくお願いします。
[1] 授業単元:アルゴリズムの基礎 [2] 問題文:・ハッシュ関数によるデータ格納を配列を用いて実現するプログラムの作成 ・入力データは自然数 ・配列の要素数とハッシュ関数は任意 ・重複処理はオープンアドレス法を用いる [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:17日15時まで [5] その他の制限: 特になし 急なお願いですがよろしくお願いします。
180 :
デフォルトの名無しさん :2009/12/16(水) 21:34:51
>>125 ですが
物理屋さんはここには、おられないですか?
>>180 方程式を立てるまでの議論も大事だが
このスレでは多分とてもじゃないがそ
の辺りまでは手が回らない
>>180 各問題の物理の問題としての答えの導き出し方を書かないとダメだよ
その手順を元にプログラム化するから
物理の問題の答えまで期待するな
185 :
デフォルトの名無しさん :2009/12/17(木) 00:45:15
>177 一階微分方程式? オイラーの方法? オイラー法?
>>186 一個目は0<x<2で二個目も同じです。
>>187 dy/dxが一階微分方程式。ってことです。
オイラーの方法とかオイラー法とかで問題文ごちゃごちゃに書かれてますが、
オイラー法で間違いないです。
よろしくお願いします。
>それが完璧に書けるなら自力でできそうです >場違いでした C言語舐め過ぎ 方程式立てるのも難しいし、その方程式を解くアルゴリズム を発見するのも難しい。しかしそれ使ってコンピュータに 最善の方法でそれを近似的に行わせる技術やそれを言語化 する技術も同じように難しい。それぞれ次元が違う難しさ があるんで。
[1] 授業単元:ゼミ演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10275.txt [3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン:Cpad for Borland 2.31
[3.3] 言語: C
[4] 期限: 明日午後12まで
[5] その他の制限:特になし
疑似プログラミングで作られてるプログラムを自分でCに戻す問題です
一応自分で考えてこうなりましたがエラーが出ます
#include <stdio.h>
int main(void){
int n,sum,i,x;
FILE *fp; /* ファイルのデータを読み込む作業 */
fp = fopen("sales.dat","r");
fscanf(fp,"%d",&n); /*教科書のread()のかわり */
sum=0;
for(i=1;i<=n;i++){
scanf("%d",sum);
sum=sum+x;
}
printf("%d",sum);
fclose(fp);
}
ファイルの読み込み方がおかしいのか構文がおかしいのかよくわかりません・・・よろしくお願いします。
fscanf(fp, "%d%", &n); と scanf("%d", sum); の最後の引数をよく見比べてみる。 さらに,x を使う目的は? を考えると・・・。
>>192 xは1日ごとの売り上げを足すために使ってるんだと思うんですが・・・これが宣言とかなしで出てきてるのが駄目なのかな
具体的にどの行が間違ってるのか指摘してもらえるとありがたいのですが
194 :
デフォルトの名無しさん :2009/12/17(木) 07:04:04
>>194 必修課題1
#include <stdio.h>
int main(void)
{
int i, j;
for(i=1; i<=9; i++) {
for(j=1; j<=5; j++) printf("%d ", i * j);
puts("");
}
return 0;
}
>>194 必修課題2
#include <stdio.h>
int main(void)
{
int i, x, y, sum = 0;
printf("第X項から:");
scanf("%d", &x);
printf("第Y項まで:");
scanf("%d", &y);
for(i=x; i<=y; i++) sum += i;
printf("初項1公差1の等差数列において、\n");
printf("第%d項から第%d項までの数列の和は%dです。\n", x, y, sum);
return 0;
}
>>194 発展課題1
#include <stdio.h>
int main(void)
{
int i, num;
for(i=num=1; num < 10000; i++) num *= 2;
printf("%d日目に%d個の細胞数になります。\n", i, num);
return 0;
}
198 :
デフォルトの名無しさん :2009/12/17(木) 09:29:49
[1] 授業単元:統計 [2] 問題文 正規分布表をC言語でつくってみよう。 先生が最初のちょっとを教えてくれた。 #include<stdio.h> #include<math.h> #include<stdilb.h> float normal_gauss_fn(float z) { return(exp(z*z/(-2.0))/sqrt(2.0*3.14)); } [3] 環境 [3.1] OS:windowa vista [3.2] コンパイラ名とバージョン:bcc 32 [3.3] 言語:C [4] 期限:12月18日まで [5] その他の制限:制限がよくわからないくらいの レベルなので出来るだけ単純に 分かりにくいかもしれないですが、よろしくお願いします。
>>193 最初は,fscanf() を使っているのに,2回目はなぜにscanf() なのか?
-> ファイルから読み込みたいので,fscanf(fp, ...) を使う。
1回目の fscanf() では,&n を渡しているのに,
scanf() では sum をそのまま渡している。
-> &sum を使いたい。が,
その scanf() に &sum を渡したら,今までの合計が上書きされてしまう。
-> &x を使う。
#include <stdio.h>
int main(void){
int n,sum,i,x;
FILE *fp; /* ファイルのデータを読み込む作業 */
fp = fopen("sales.dat","r");
fscanf(fp,"%d",&n); /*教科書のread()のかわり */
sum=0;
for(i=1;i<=n;i++){
fscanf(fp, "%d",&x);
sum=sum+x;
}
printf("%d",sum);
fclose(fp);
return 0;
}
[1] 授業単元:画像処理とC言語 [2] 問題文(含コード&リンク): メモリ上に64バイトのデータがあります。これは4x16の行列です。 char buf[16][4] = { a0, b0, c0, d0, ... , a15, b15, c15, d15 }; 組込関数を用いてxmmレジスタに4分割して読込みました。中のイメージはこうです。 __m128i t0 = { a0 , b0 , c0 , d0 , ... , a3 , b3 , c3 , d3 }; __m128i t1 = { a4 , b4 , c4 , d4 , ... , a7 , b7 , c7 , d7 }; __m128i t2 = { a8 , b8 , c8 , d8 , ... , a11, b11, c11, d11 }; __m128i t3 = { a12, b12, c12, d12, ... , a15, b15, c15, d15 }; ここから16x4の転置行列を得ましょう。内容のイメージはこうです。 __m128i r0 = { a0, ... , a15 }; __m128i r1 = { b0, ... , b15 }; __m128i r2 = { c0, ... , c15 }; __m128i r3 = { d0, ... , d15 }; 禁じ手 r0 = _mm_set_epi8(buf[15][0], buf[14][0], ... , buf[0][0]); こういう遅いプログラムはダメです。xmmレジスタの操作でカタを付けましょう。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン:GCC 4.4.1 [3.3] 言語:C言語 [4] 期限:2009年12月18日 12:00:00まで [5] その他の制限:SSE〜SSE3の組込命令を使って良い。
>>200 ファイル読み込みたいのにscanfにしてちゃ駄目だね、なるほど
期限には間に合わなかったけど詳しい説明ありがとう、ようやくわかったよ
205 :
177 :2009/12/17(木) 19:05:04
>>199 本当にありがとうございます。助かりました。
206 :
デフォルトの名無しさん :2009/12/17(木) 20:32:30
どっから0が出てくるんだ?
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10290.txt [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C言語
[4] 期限:2009/12/18(金) 23:59(減点されるが延長で12/19(日)12:00まで)
[5] その他の制限:特になし(だと思います)
期限が迫ってしまいましたが自己責任なので延長が許される土曜日の12日まで待ちます!
どうか、よろしくお願いします。
本当についさっきまで2ch規制されてましたが解除されました!
しかしまた規制されてしまったら申し訳ありません・・・。
問題は口頭で言われたのかい
212 :
210 :2009/12/17(木) 23:13:32
授業中の演習の延長のようなもので、 黒板で課題の内容を説明されただけです。 問題の意図が伝わっていないのならすみません・・・
>>210 リスト構造ってのは、配列じゃなくて連結リストだと解釈していいのか?
214 :
210 :2009/12/18(金) 00:44:04
はい、そうです。
>>210 データとしては"名前","フリガナ",点数 ってのがいいかな
そうしないと例えば、今田ではイマダとコンタどっちもいるからね
216 :
デフォルトの名無しさん :2009/12/18(金) 01:18:16
[1] 授業単元: オペレーティングシステム [2] 問題文(含コード&リンク): 1. 引数にファイル名を指定すると,そのファイルのサイズとファイルの種類(一般ファイル,デ ィレクトリ,パイプ等),そして最終変更時刻を表示するコマンド(fview という名称とする)を作 成せよ.ただし,引数には,複数のファイルを指定できるようにすること.また,fstat システム コールを用いること. 実行 $ fview aaa.txt bbb.txt ccc.txt … ヒント ファイルの種類は,fstat 構造体メンバのst_mode の上位4 ビットで表わされる. 2. 引数に指定した複数のテキストファイルの内容を結合して,一つのファイルにまとめるコマ ンド(catfiles という名称とする)を作成せよ.ただし,まとめた内容を格納するファイル名は, “concat.txt”とすること.ただし,cat コマンドをsystem 関数の内部で呼ぶような構成は認め ない.システムコールとしては,open,close,read,write を用いること.また,結合してまとめ た結果を格納するファイルが存在しない場合には,creat システムコールを用いて生成するこ と. 実行 $ catfiles aaa.txt bbb.txt ccc.txt … [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 2009年12月20日09:00まで
-0.5 <= x < 0.0 ↓ -0.5 <= x && x < 0.0 0.0 <= x <= 0.5 ↓ 0.0 <= x && x <= 0.5
>>218 ありがとうございます。できました
まとめて書くことってできないんですね。今初めて知りました
シビれるねぇ
224 :
デフォルトの名無しさん :2009/12/18(金) 04:12:01
[1] 授業単元:構造体とメモリの動的確保 [2] 問題文(含コード&リンク): #include 〈stdio.h〉 #define NAME_MAX 20 /* 文字列の最大数 */ /* 構造体の宣言 */ struct student_data{ /* 各メンバーの宣言 */ int number; /* 学籍番号 */ char name[NAME_MAX+1]/* 氏名 */ double height; /* 身長 */ }; int main (void) /* 引数無しのmain関数 */ { #define STUDENT_DATA_MAX 5 /* 入力する学生数 */ struct student_data input_data[STUDENT_DATA_MAX]; /* 構造体による変数宣言 */ struct student_data * data_p; /* 構造体によるポインタ変数宣言 */ int input_count+ /* カウンタ変数 */
225 :
デフォルトの名無しさん :2009/12/18(金) 04:13:56
/* データの入力 */ for (input_count=0; input_count < STUDENT_DATA_MAX; input_count +=1) { /* 構造体のメンバ指定 (変数の場合) */ printf("Student number->"); scanf("%d",&input_data[input_count].number); printf("Name->"); scanf("%s",input_data[input_count].name); /*またはscanf("%s",input_data[input_count].name[0]);*/ printf("Height->"); scanf("%lf",&inout_data[input_count].height); } /* データの出力 */ for (input_count=0,data_p = input_data; input_count < STUDENT_DATA_MAX; input_count +=1 , data_p ++) { /*構造体のメンバ指定(ポインタ変数の場合) */ printf("%d ",data_p->number); printf("%s ",data_p->name); printf("%lf\n",data_p->height); } return 0; /* 正常終了 */
226 :
デフォルトの名無しさん :2009/12/18(金) 04:14:43
上記を参考に、malloc関数を用いて、氏名、学籍番号、身長の入力を行い、さらに、ユーザからの入力終了指示を受けたら、全ての入力データを画面に出力する、任意の人数の処理が可能な、プログラムを、malloc.cという名前で作成せよ。
malloc.cをVisual Studioで実行して(5名以上入力)、実行結果をmalloc.c内の文末に「コメント行」として記載せよ。(コメント行を追加後も、ビルド可能か再確認)
[3] 環境
[3.1] OS: Vista
[3.2] コンパイラ名とバージョン: Visual studio 2005
[3.3] 言語:C++
[4] 期限: 2009年12月18日13時00分
[5] その他の制限:特になし。
助けてください…
>>225 ,
>>226 は
>>224 の続きです
>>225 講義でどのあたりまでやっているかで書き方が変わると思うんだが
使用してもいいのは、malloc関数のみ?それともmalloc関数絡み(具体的にはrealloc)もいいのか?
228 :
227 :2009/12/18(金) 05:42:35
>>225 「malloc関数」を用いて と 上記を参考に との記述があるので
仕様として、最初に任意の人数を入力し、その後氏名、学籍番号、身長の入力を行うという形にした。
malloc関数しか使ってないし、コードもほとんど変更ない。
実行確認はしたけど、久しぶりにC使ったんで知識ある人いたら確認よろ
自分もfreeの存在を忘れてた組
http://codepad.org/VaVZSBqd
>228 l41にあーっなコードが含まれている あと変数名が長すぎる気がする、また、記述に一貫性がないfor()の書き方と複合演算子
プログラムの終了と共に自動的に解放されるからfree()要らないような。
232 :
デフォルトの名無しさん :2009/12/18(金) 13:14:12
>>231 すばやい回答ありがとうございました。
Cで大丈夫だったみたいです。後で学校に行って実行してみたいと思います。
233 :
デフォルトの名無しさん :2009/12/18(金) 13:24:39
>>228 ありがとう 結局よくわからないけど提出したw
もう少しわからんところがあるから助けてほしいです
[1] 授業単元:if文とfor文
[2] 問題文(含コード&リンク):キーボードから6つの数値を入力し、
最大値を表示するプログラムを作成
• キーボードから入力する数値例:25 , 6 , 45, 18 , 57, 5
[3] 環境
[3.1] OS: vista
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C++
[4] 期限:無期限
[5] その他の制限:
• for文を用いてキーボードから値を読み込みながら,
それまでに読み込んだ値の最大値maxと比較し,
もし大きければmaxの値を更新する
for(i=?;i<=?;?){
scanf(?????);
if( ? > max) ???????;
}
頼んでばかりで申し訳ないが…
#include <stdio.h> int main(void) { int i, n, max; scanf("%d", &max); for(i=0; i<5; i++) { scanf("%d", &n); if(n > max) max = n; } printf("%d", max); return 0; }
[1]単元: 初等プログラミング [2]課題:次のコードの空欄を埋めて完成させなさい。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int a[5],i; srand(time(NULL)); for(i=0;i<5;i++) a[i]= rand() % 100; for(i=0;i<5;i++)printf("%d: %d (昇順順位=%d)¥n",i,a[i],[空欄]); return 0; } [3] OS:Windows XP IDE:Visual studio 2008 言語:C [4] 12/25迄 [5]空欄を埋める以外、コードに手を加えてはいけない。実行させて意味が通るようにしなさい とのことです。
>>235 (a[i]>a[0])+(a[i]>a[1])+(a[i]>a[2])+(a[i]>a[3])+(a[i]>a[4])+1
>>235 そこまで構文制限が強い問題には答えない(答えてはいけない)
というのが正解
>>235 の問題は、C初心者に誤解を招きそうな類だな
これが当たり前の構文だと思い込ませかねない
>>237 乙。すばらしい。
おれには思いつけなかったよっと。
>>237 突っ込むところはここではないとは思うが、
\n を 10 にするのは蛇足ではないかい。
242 :
235 :2009/12/18(金) 18:06:08
>>236 ,237
ありがとうございました。
>>238 テスト問題(筆記式!)の正解が知りたかっただけです
まあまあ 試験問題でも 宿題の一種みたいなのでるから大目にみたげよや
絶対に許さない
[1]単元: プログラミング [2]課題: gets()などでなにかプログラムを書き、バッファオーバーランによる問題点がわかるようなプログラムを書け。 [3] OS:Windows XP 言語:C [4] 来年
>>209 そもそもサンプルプログラムの他の部分から書き換える必要があるだろ・・・
>>246 #include <stdio.h>
int main(){
char buffer[2][10];
getc(buffer[1]);
getc(buffer[0]);
printf("buffer[0]=\"%s\"\nbuffer[1]=\"%s\"", buffer[0], buffer[1]);
return 0;
}
hogehoge.
fugafugafuga.
buffer[0]="fugafugafuga."
buffer[1]="ga."
今携帯だからテストはしてないが多分こうなるはず。
249 :
248 :2009/12/19(土) 00:16:17
printfの第一引数の最後に改行入れ忘れた
[1] 授業単元:C言語初級 可変長引数 [2] 問題文(含コード&リンク): 下記のような関数を作れ。 scanfをfgetsとsscanfを組み合わせた関数 int mscanf(int num , const char*str , const char*format, ...) num:最大文字数 str:scanfでいうところの第一引数 format:scanfでいうところの第二引数以降 戻り値はscanfと同じにする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: [無期限] [5] その他の制限: vsscanf使用可 mscanfないで一時的に使うかもしれない文字列の最大長は#defineで各自決めていい。
251 :
p2005-ipbf210niho.hiroshima.ocn.ne.jp :2009/12/19(土) 05:47:37
253 :
デフォルトの名無しさん :2009/12/19(土) 09:10:15
>>252 早速回答ありがとうございます。
ただ必修とかの題名はつけなくていいですよ。
---のなかに囲ってあるとこが表示されればおっけーです。
255 :
デフォルトの名無しさん :2009/12/19(土) 09:16:49
任意の整数Xを入力すると、整数Xの階乗を算出されるプログラムを作成せよ。 ただし、0および負の整数を入力すると、「値が不適当です。」とメッセージが出るようにする。 階乗はn!=1×2×3・・・×nで表される。実行結果の例を以下に示す。 ------------------------------------------------ 整数を入力して下さい:5 5の階乗は120です。 ------------------------------------------------ ヒント:if文の中にfor文やwhile文を入れ込むこともできます。 ↑この問題だけうまいこといきません。 「整数を入力して下さい:?」で入力ができず、「0の階乗は5」ですが表示されます
>>「整数を入力して下さい:?」で入力ができず、「0の階乗は5」ですが表示されます #include <iostream> int main() { int n, i, total=1; std::cout << "整数を入力して下さい:"; std::cin >> n; for(i=1; i<=n; i++) total *= i; std::cout << n << "の階乗は" << total << "です。 " << std::endl; return 0; }
257 :
デフォルトの名無しさん :2009/12/19(土) 10:02:49
>>256 回答ありがとうございます
やってみたけどやっぱりだめです。
なにがいけないんでしょう?
>>1 [3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
Cって明記されてるのにC++で書いといて逆ギレ?
>>252 はテストのためにコメントアウトした部分直してないんじゃね?
>256 >文字はいれないでね(笑) Zero clear わすれてた(笑) int main() { int n=0, i, total=1; printf( "整数を入力して下さい:" ); scanf("%d%*c", &n); for(i=1; i<=n; i++) total *= i; printf( "%dの階乗は%dです。", n, total); return 0; }
>>247 舌足らずで申し訳ありません・・・
サンプルプログラム中の問いに答えるために、他の箇所も書き換えてもいいとのことでした
テンプレ追加案 ★質問者へ:問題の内容によっても異なりますが、最低24時間は回答は得られないと 思って締め切り期限ぎりぎりに投げるのではなく、余裕を持って投げて下さい。 質問後、回答が不要になった場合などは24時間以内に取り消して下さい。宿題データ、 問題文の24時間以内の訂正は可能ですが出来る限りしないでください。十分にチェッ クしてから投稿して下さい。回答が得られない場合で再度請求する場合は最初に投稿 してから24時間経過してからにして下さい。 ★回答者へ:出来るだけ早くとか翌日に期限が設定されているような問題には回答する必要 はありませんし、しないで下さい。質問者が取り消した場合、また質問されてから24時間 以内には回答しないようにして下さい。24時間以内に問題文の転記修正や取り消しが入る かも知れません。24時間経過していてもスレが進んでいない場合は回答は控えて下さい。 24時間経過後回答者が再度請求した場合に初めて回答するのが理想です。 少なくとも問題と回答の公開を目的としたスレではありません。
チラシの裏にでも書いてろw
テンプレ追加事項(その2) ★質問者の方々へ: 期限までに回答が無かった場合はあきらめて下さい。すべての質問に期限内に答えられるとは限りません 期限を再延長するのは控えて下さい。再延長する場合はテンプレに従って 再度投稿することが出来ますが、回答してもらえる確率は減ることは否めません。 ★回答者の方々へ: 期限の過ぎた問題の回答は避けて下さい。
>>264 回答ありがとうございます!
問2に関しては了解しました
>>250 問題の目指すところが今ひとつわからなかったのですが、こんなものでいいですか?
http://codepad.org/RkZsKLrv >>265 > 出来るだけ早くとか翌日に期限が設定されているような問題には回答する必要
> はありませんし、しないで下さい。
いやです。興味のある問題ならば期限や、その他テンプレの書きようにかかわらず、問題を解かせていただきます。
>質問者が取り消した場合、また質問されてから24時間以内には回答しないようにして下さい。
>24時間以内に問題文の転記修正や取り消しが入るかも知れません。
なぜ 24 時間も待たなくてはならないのですか?意味不明です。訂正が入れば、余裕があればそれにあわせてやればいいだけのこと。
>24時間経過していてもスレが進んでいない場合は回答は控えて下さい。
意味不明。
>24時間経過後回答者が再度請求した場合に初めて回答するのが理想です。
別に回答者から督促があろうが無かろうが、興味のある問題ならば喜んでとかせていただきますし、どうでもいいと思ったらスルーしますが。
>>少なくとも問題と回答の公開を目的としたスレではありません。
かってにスレの目的を決めないでください。
>>268 >期限の過ぎた問題の回答は避けて下さい。
興味のもてる問題ならば期限が過ぎても解かせていただきます。
意味不明の回答規制なのですが、最近の学校ではこういうのがはやっているのですか?中学校の生徒さんですか?
バカの相手をするな
>>265 ,
>>268 のような回答側規制を提案するような者が問題を解く側人だとは、到底思えないのですけれども。
宿題を出す側人とは思わないのか?
>>275 >>265 ,268 が宿題を出す側とは思えませんね。24時間ルールとやらは宿題を出す側にとっては不利ですから。
宿題を出す側でもなければ解く側でもない、とすれば、単なる自治中毒者でしょうね、意味もなく影響力を示したがるやっかいな連中ですね。
そんなに影響力を示したいのであれば、まず出された宿題を解くことからはじめればいいのでしょうに。
スルーしろよコテも外せうざい
>>275 宿題を投げる人と解く人のコラボだろ。
出す人がここにくるわきゃないw
>>278 そうでしたか。出す人と投げる人とを混同しておりました。
宿題を出す人が妨害工作にでる可能性は、たしかにありますね。
280 :
デフォルトの名無しさん :2009/12/19(土) 22:50:27
>>280 必修1
#include <stdio.h>
int main()
{
double r;
double pi = 3.141592654;
printf("直径は?");
scanf("%lf",&r);
printf("直径5cmの円の円周は%lfcmです。\n",r*pi);
return 0;
}
>>279 宿題を出す側は、実操作以外は本質的に小中学生向けの課題
の丸投げに迅速に回答出して人助けをしたんだと悦に行って
るよな人を苦々しく思ってるんだろけどね。
まあ幸いなことに大半は自演なんだろけど。
>>280 必修2
#include <stdio.h>
void point(int r);
int main()
{
int r;
printf("何点ですか?:");
scanf("%d",&r);
point(r);
return 0;
}
void point(int r)
{
if(0 <= r && r < 60)
printf("不可です。\n");
else if(60 <= r && r < 70 )
printf("可です。\n");
else if(70 <= r && r <80)
printf("良です。\n");
else if(80 <= r && r <= 100)
printf("優です。\n");
else
printf("換算できません\n");
}
>>280 必修3
#include <stdio.h>
int main()
{
double r=0, i;
for(i = 0;i < 10.0 ;i+=0.2)
r+=i;
printf("答えは%.1lfです\n",r);
}
>>280 発展課題1
#include <stdio.h>
int hantei(int, int, int);
int main(){
int a, b, c;
printf("一つめの整数を入力して下さい:");
scanf("%d", &a);
printf("二つめの整数を入力して下さい:");
scanf("%d", &b);
printf("三つめの整数を入力して下さい:");
scanf("%d", &c);
printf("最大値は%dです\n",hantei(a,b,c));
}
int hantei(int a,int b,int c)
{
if(a - b > 0){
if(a - c > 0)
return a;
else
return c;
}
else{
if(b - c > 0)
return b;
else
return c;
}
}
>>280 発展課題2
#include <stdio.h>
int main()
{
int i, j;
for(i = 1; i <= 9; i++){
for(j = 1; j <= 9; j++){
printf("%d ",i*j);
}
printf("\n");
}
}
そんなことありません。#defineとかが ピンクサーモン色できれいに着色されてます。
0から10を入力させといて答えが0から9ってのが笑いどころ?
12 hit = rand() % 10; の所、% 11 ; でしょうか。
>>280 while();にするの?汚いわ先生(涙)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
int a, hit, miss = 0, x=0;
srand((unsigned)time(NULL));
hit = rand() % 11; printf("%d%c", hit, 012);
printf("0〜10までの数を入力して下さい。"); scanf("%d", &a);
do {
if(hit > a)
printf("もっと大きい数です。\n", ++miss);
else if(hit < a)
printf("もっと小さい数です。\n", ++miss);
else if(hit == a)
miss = 4;
if(miss == 4)
printf("大正解です。\n");
else if(miss == 1){
printf("あと2回挑戦することができます。\n"); scanf("%d", &a); }
else if(miss == 2){
printf("あと1回挑戦することができます。\n"); scanf("%d", &a); }
else if(miss == 3)
printf("あと0回挑戦することができます。\n残念!!不正解でした。\n");
} while(miss < 3);
return 0;
}
>>280 発展課題3
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, n, ans;
srand(time(NULL));
ans = rand() / (RAND_MAX + 1.0) * 11;
printf("0〜10までの数を入力して下さい。");
for(i=3; i>0; ) {
scanf("%d", &n);
if(n > ans) printf("もっと小さい数です。\n");
else if(n < ans) printf("もっと大きい数です。\n");
else return printf("大正解です。\n");
printf("あと%d回挑戦することができます。\n", --i);
}
printf("残念!!不正解でした。\n");
return 0;
}
>>280 発展課題2
#include <stdio.h>
int main(){
int i,j;
for(i=1;i<=9;i++) {
for(j=1;j<=9;j++) {
printf("%d%c",i*j,j==9?'\n':' ');
}
}
return 0;
}
>>296 int i;
for(i=0; i<n; i++) printf("%d ", a[i]);
putchar('\n');
>>298 すみません、printfだけで出来ると先生が言っていたので・・・
どなたかもう一度お願いします。
>>299 そんなほんの少しのことくらい自分で考えないのかw
putchar('\n') → printf("%c", '\n');
>>300 もちろん自分で考えた上でここに書いてます。
一人で考えても答えが全然出ないなら誰かに頼るしかないです・・・
>>301 こういうのって
printf("\n");
じゃいけないの?
別にいいだろ
>>298 さんの答えを使わせて頂くことにしました。
ありがとうございました。
他に協力して下さった皆さんもありがとうございました。キリッ
秋山徒労ってひどい名前だな
308 :
デフォルトの名無しさん :2009/12/20(日) 22:13:40
>>231 >>216 で質問した者です。
fview、catfilesそれぞれのプログラムのポイントも教えていただけないでしょうか。
2度手間になってしまい申し訳ないのですが、よろしくお願いします。
309 :
デフォルトの名無しさん :2009/12/20(日) 22:39:01
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): 課題 関数(再帰)最大公約数 キーボードから自然数を2つ入力し、それらの最大公約数と最小公倍数を表示するプログラムを作成しなさい。 ただし、最大公約数の計算は関数(再帰)を用いること。最大公約数を計算する関数の名前はgcdとすること。 実行結果 自然数を2つ入力して下さい. 3243 6578 3243と6578の最大公約数は23,最小公倍数は 927498 です。 [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限:明日7:30までに [5] その他の制限: よろしくお願いします!
>>310 明日の今頃の時間にここにくればコード貼ってやってもいい
┏┓ ┏━━┓┏━┓┏┓┏━━┓┏━━┓ //.i:.:.:i:.:.:.:.:i,|:.i/iハ:.:./ リ\|、;イ:.:.:.:.i、:.:i.... ┏┓┏┓┏┓ ┏┛┗┓┗━┓┃┗━┛┃┃┃┏┓┃┃┏┓┃ .| i.|:.:.;イ:.:.i:.:| |i ィ ∨ ゝ リ|/`イ:.:.:ト:.Y、. ┃┃┃┃┃┃ ┗┓┏┛ ┃┃┏━┓┃┃┃┗┛┃┗┛┃┃┏━| i,|:.:.| i:.:.|i:.:|ィェェク イミェュャ.レ:.:.i;,:.:) ヽ..━━┓┃┃┃┃┃┃ ┏┛┗┓┏┓┃┃┗━┛┃┃┃┏┓┃ ┃┃┃ .i|.´i:.| i:.:.iヽi /// ヽ /// /:.:./、) \ ┃┃┃┃┃┃┃ ┗┓┏┛┃┗┛┃ ┏┛┃┗┛┃┃ ┃┃┗ /リ i:.i .ト:.:i:.ゝ マ⌒ 、 /イ:.:.ifj´\ i. ヘ....┛┗┛┗┛┗┛ ┃┃ ┗┓┏┛┏━┛┏┛ ┃┃ ┏┛┃ `ー <i\|\ヽ ヽ_ノ /:.:.:/Y ヽ. \ ,/.. ┏┓┏┓┏┓ ┗┛ ┗┛ ┗━━┛ ┗┛ ┗━┛ ∨.|:.:.:`|`ゝ、 ,./i:.:.:/ .i| \ /.... ┗┛┗┛┗┛
激しく誤爆した
別に入れ替えなくても再帰の呼び出し一回増えるだけじゃん。
ここの人は過保護じゃないか?宿題は自分で頑張らないと・・・
>>318 んー、なるほど、それには気がつかなかったなあ。
>>319 教育的な配慮は一切しない、自分が楽しみさえすればいいだけの、悪意に満ちたスレですから。
善意のコード収集サイトがあるという考え方も何だかな〜という感じ
323 :
デフォルトの名無しさん :2009/12/21(月) 00:31:31
自称玄人のヒマ潰しスレだと思ってたが違ったのか・・
宿題貼り付けるだけじゃなくて、 自分でどこまで考えたか、調べたかも書くのが礼儀じゃないかな・・
暇つぶしに解いてるだけだから仕様守っとけばそれでいいだろ。 ダメぽコード書こうが環境依存していようが頼る奴が悪い。
326 :
デフォルトの名無しさん :2009/12/21(月) 00:44:41
ここは指導スレじゃないからな。代理で宿題片付けるだけだからな
それじゃ「森羅万象すべて教えます」スレだろ。誰も信用しないってw 第一あんまし見てて気持ちいいもんじゃないな。「わかる?」「わかんな〜いw」的な 「やりとり」 コード貼るだけで、依拠理論に関しては一切ノーコメント。コードと結果で 判断してもらうというのがこのスレ的な筋だろ? それじゃ教育の妨害になるってことも一つの考え。(てゆーかこのスレ の依存構造に抵触)てことは、早漏防止メカニズム設計が正しい方向って ことだろな
>>1 より
気に入らない質問やその他の発言はスルーの方向で。
中級者が練習として問題解いて、上級者に突っ込まれるスレだと思ってた。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから数を入力として受け取り、その個数分のint型データをキーボードから受け取り、それらの最大値を画面に出力するプログラムをcallocを用いて書け。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c [4] 期限: 無期限
>>330 出題者に申し訳ないけど calloc() 要らねー
突っ込む箇所が違う
>330 これは大変興味深い課題と思います なぜなら、まず、ユーザは数値以外を入力する可能性があるため、その処理をうまくできるかが試されるから 次にint型データ(?)で表現可能な値を超えた場合でも正常に動くかが試されるから 次に最大値を如何にクールに求めるアルゴリズムを見つけるかが試されるから 最後にcalloc()とその周辺知識について試されるから
>>334 そんな事を言うと誰もしなくなっちゃうだろw
>>330 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p, i, n, max;
scanf("%d", &n);
p = calloc(n, sizeof(int));
for(i=0; i<n; i++) scanf("%d", p + i);
max = p[0];
for(i=1; i<n; i++) if(p[i] > max) max = p[i];
printf("%d\n", max);
free(p);
return 0;
}
言いたいことがあるならコードで示せ
入力した数値を出力する必要がない(最大値だけでよい)んだからcallocはもっと雑に使っていいと思う
「させていただきました」って聞くとイラッとするw
つ カルシウム
チカラ 能力を示せ
>>343 ちょっと整えてみた。
struct vec3 {
double x, y, z;
vec3() : x(0), y(0), z(0) {}
vec3(double x, double y, double z) : x(x), y(y), z(z) {}
vec3 &operator+=(const vec3 &v) {
x += v.x;y += v.y;z += v.z;return *this;
}
vec3 &operator-=(const vec3 &v) {
x -= v.x;y -= v.y;z -= v.z;return *this;
}
vec3 &operator*=(const vec3 &v) {
x *= v.x;y *= v.y;z *= v.z;return *this;
}
vec3 operator-() {
return vec3(-x, -y, -z);
}
vec3 operator+(const vec3 &v) {
return vec3(x + v.x, y + v.y, z + v.z);
}
vec3 operator-(const vec3 &v) {
return vec3(x - v.x, y - v.y, z - v.z);
}
vec3 operator*(const vec3 &v) {
return vec3(x * v.x, y * v.y, z * v.z);
}
vec3 operator*(const double &d) {
return vec3(x * d, y * d, z * d);
}
};
vec3 operator*(const double &d, const vec3 &v) { return vec3(d * v.x, d * v.y, d * v.z); } struct Particle { vec3 position, velocity; }; void position(std::vector<Particle> *ps) { // ? vec3 vp05, vm05, A(3.0,3.0,3.0); for (std::vector<Particle>::iterator p = ps->begin(); p != ps->end(); p++) { p[0].velocity.x = 0.0; double dt = 0.01; vp05 = vm05 + A; p->position += dt * vp05; p->velocity += vm05 + p->position + A * 0.5 * dt; vp05 = vm05; std::cout << std::fixed << std::setprecision(5) << "r " << p->position.x << " v " << p->velocity.x << " v[0]" << p[0].velocity.x<<std::endl; } }
int main() {
std::vector<Particle> *particles = new std::vector<Particle>();
{
double k = 1.0 / 20; // ?
for (double i = 0.5; i >= -0.5-k;i -= k) { // ?
Particle p;
p.position.x = i;
particles->push_back(p);
}
}
for(int i = 0; i < 5; i++) {
position(particles);
std::cout << " " << std::endl;
}
delete particles;
return 0;
}
>>343 > これでv[0]を0.0に固定したいのですが115行目においてみたのですが
> 違うみたいなのでやり方教えてくださいお願いします
うーん。
>>347 ありがとうございます
参考にしてやってみます
>>347 すいません。見やすくしてもらっただけのようでした。
>>349 もしも、
> これでv[0]を0.0に固定したいのですが
のv[0]が、std::vector<Particle> *particlesの一番目の要素のvelocityのつもりだったら。
p[0].velocity.x = 0.0;
じゃなくて、
ps->at(0).velocity.x = 0.0;
と書くことになる。
>>350 そういうことです
ありがとうございます
352 :
10 :2009/12/21(月) 21:58:31
353 :
◆PcWwLjlc5M :2009/12/22(火) 01:01:28
[1] 授業単元:基礎プログラミング講義 [2] 問題文(含コード&リンク):以下の処理はサブ関数で作成する。数値(n)を反転した値を表示せよ。123→321 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:borand bcc55 [3.3] 言語:C [4] 期限:12月22日 10:00 a.m. [5]サブ関数まで学習済み 以下のプログラムは私が先生にはじかれたものです。 サブ関数内でprintfを使うなとのことでした。 #include<stdio.h> int sub1 (int a) { int x; for(x=0;a!=0;x++) { a=a/10; } return(x); } int sub2 (int a,int b) { int v,w,x,y,z; x=10; y=1; for(w=0;w!=b;w++) { z=a%x; v=z/y; printf("%d",v); x=x*10; y=y*10; } return; } int main(void) { int m,n; while(scanf("%d",&n)==1) { m=sub1(n); printf("反転した結果は"); sub2(n,m); printf("\n\n"); } return(0); } 何卒、お願いいたします…
>>353 #include<stdio.h>
int sub1(int a, int b)
{
if(a<=0) return b;
return sub1(a/10, b*10+a%10);
}
int main(void)
{
int m,n;
while(scanf("%d",&n)==1)
{
m=sub1(n, 0);
printf("反転した結果は");
printf("%d\n\n", m);
}
return(0);
}
再帰をサブ関数まで習ったというような段階で習うもんかね ポインタやらシステムコールやら構造体やら 共用体とかやった後のかなーり後に習ったけどな
問題に即したコードになっているように思えない件と どーみてもこのばあいの再帰呼び出しは 非効率な割に(初学者以外にも)わかりにくい件に ついて
>>353 #include<stdio.h>
int sub1 (int a) {
int x;
for (x=0;a!=0;x++) {
a=a/10;
}
return(x);
}
int sub2 (int a,int b) {
int v,w,x,y,z;
int u; /* 反転した値を入れる */
x=10; y=1; u = 0;
for (w=0;w!=b;w++) {
z=a%x; v=z/y;
u=u*10+v;
x=x*10; y=y*10;
}
return (u);
}
int main(void) {
int m,n,o;
while (scanf("%d",&n)==1) {
m=sub1(n);
printf("反転した結果は");
o=sub2(n,m);
printf("%d\n\n",o);
}
return(0);
}
>>354 スマートなやり方で良く読めば理にかなってるじゃん
>>358 >>355 再帰をサブ関数まで習ったというような段階で習うもんかね
あとLispやRubyとかならいいけど、Cの再帰はスタックを消費するから、お薦めはしない。
>>357 そんなやたらと複雑にする必要性があるか?
#include<stdio.h>
int sub (int a) {
int x=0;
while (a) x=x*10 + a%10, a/=10;
return(x);
}
int main(void) {
int m,n;
while (scanf("%d",&n)==1) {
m=sub(n);
printf("反転した結果は");
printf("%d\n\n",m);
}
return(0);
}
でいいだろ。
>>348 再帰は場合によっては有用だが、関数呼び出しにはどうしてもオーバーヘッドが生まれる。
この場合は桁数が10桁程度しかないから再帰もその程度の回数で済むため速度的な問題は気にならないとは思うけど、ループ構文で済む所をわざわざ再帰にする必要性はないし、そういうことはしないように心掛けた方がいい。
上のsub()関数でも、数百万個の数値データとかに連続して呼び出したら違いが明確になるだろ。
LISPやRubyのスタックって無尽蔵にあるそんなすてきなものだったっけ? いずれにせよ再帰は僅かな変更でも動かなくなるデリケートなものが多いん で使用は極力控え目に。パブリックな場所では使わないほうが無難
>>360 問題に即した回答をしているんだから
そういうちゃちゃ入れはかわいそうだし、おかしい
どうも宿題スレには自分のポリシーを無理矢理押しつけたがるクズがいるな
ポリシーじゃなくてリテラシーだろ
[1] 授業単元:初級プログラミング [2] 問題文(含コード&リンク):マインスイーパーを作ってください。 ・縦の列はABC...で、横の列は123...で表示し、座標を繰り返し入力する ・枡の大きさは自由である(難易度ごとに大きさを選べる等要工夫) ・地雷の位置は毎回ランダムであること ・指定(入力)した座標には周囲の地雷の数を表示させる ・地雷のある座標を入力するか、全ての安置を入力することでクリアとする ・その他、工夫等が見られると加点 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C言語 [4] 期限:1月12日 24:00 [5] その他の制限:よく分かりませんが、学習して1年目の範囲でできる事でお願いします。 私があまりプログラミングが上手くないので、加点要素はあまり必要ありません。 もし作っていただけるのであれば、加点要素の無いものと2つ、ソースをもらえるとうれしいです。
>>361 スレちだとうは思うけど「末尾再帰最適化」
>>364 この場合はポリシーでもリテラシーでもどっちでもいいだろ
要するに一言多い馬鹿がいるって言いたいわけ
368 :
353 :2009/12/22(火) 06:42:16
つーか、
>>353 は微妙にスレ違い 質問系スレで
質問すればよかったんじゃないかと。
先生が出した問題をそのまま書くだけで
期限さえ余裕があれば、期限迄に回答が出てくるかもよ
というのがこのスレの主旨(つまりC語翻訳サイト)
途中迄やったけど、どこが間違ってるでしょうか?
というのならそのように書くべき(=先生の出した問題
のようにフェイクする)
そしてそのように書かれている場合は、回答者はそれに
即して間違っている箇所だけを回答として指摘する。
それなりの日本語のスキルが無いとこのスレの活用は
難しいんだ。
曖昧な質問に答える回答者は実は微妙にスレの主旨に違
反してたりする。
>>369 結局お前は質問スレに逝けって言いたいの? それとも何処が間違っているか教えてください>< ってこのスレで聞けって言いたいの?
>>369 自分がやってみたプログラムが載ってるだけで、特殊な例だとは思えないが。
丸投げではないということでしょ。
質問系スレにいくか
質問の仕方を変えるか
回答者は、余計なコメントを書かず期限前にスマートな
コードをさくっと出力。
回答者が回答予約を兼ねたプログレスバーを出力すると尚良いかも
例:
375 デフォルトの名無しさん
>>353 お待ち下さい
*--------------
402 375
>>353 お待ち下さい
******---------
409 375
>>353 お待ち下さい
**********-----
412 375
>>353 コード生成に失敗しました。
ってな感じ
415 デフォルトの名無しさん
>>353 コード生成に成功しています。
再請求すれば貼付けるかうpします。
↑こんな感じのレスが入れば問題解決なんじゃ?
char[n] nの最大値はなんですか?(VC++2008EEです)
すいません char m[n] //mはなんでもいいです nの最大値はなんですか?(VC++2008EE)
max(n)=12345678901234567890
vc++2008eeのマニュアルには何て書いてあったんだ?
会社の先輩や上司に頭下げて訊く
>>365 生成中です 暫くお待ち下さい(フリーズするかもです)
***ーーーーーーー
>>365 つくってみようかなと思いきや、Cかよ…。
頭の中でもうクラス設計し始めてたのに。
>>365 マインスイーパーはオセロ同様に得られるものが多いから
1度でも自分で作って欲しいところなんだが、スレ的には違うかw
配列だけでゴリゴリやるよりも構造体でハッシュテーブル作って
ランダム数から評価配置していった方が楽。
で、構造体はもう習った?
ハッシュテーブル?
[1] 授業単元: 授業ではありません。「C++で学ぶオブジェクト指向プログラミング」6章理解度テスト3(この本は作者の意向で答えがありません。) [2] 問題文 次のクラスを作成しなさい。 クラス名:Value メンバ変数:なし メンバ関数: 純粋仮想関数 setValue() (intやfloatなど)なんらかの値をセットする 純粋仮想関数 getValue() 値を取得する 純粋仮想関数 show() 値を表示する この問題は派生クラス(Intval、Floatval)があり、そちらのコンストラクタで値を設定し、 show()やgetValue()を用いて値を表示するのですが、そこは自分で考えるつもりです。 まずこの基本クラスの宣言が分かりません。 ※この時点ではまだテンプレートは習っていません。 [3] 環境 [3.1] OS:Windows XP [3.2] VS2008 [3.3] 言語: C++ [4] 期限:なし [5] その他の制限: 特にありません。
>>387 とりあえずコンパイルは通ったがセグメンテーション違反でおちた
Debian@gcc 4.3.4
>>389 報告サンクス。
>>387 の実行環境はgcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
今回デバッグした環境はgcc (Debian 4.3.2-1.1) 4.3.2
#include <stdlib.h>
の追加と以下の変更で落ちなくなりました。
srand(time());
↓
srand(time(NULL));
回答をお寄せ下さる方へ Code貼る前に、質問者がまだ居るか、欲しいのかどう か確かめてから貼って下さい。 質問者は質問したら、最低一日一回は来て 回答してくれてる方が居るか確かめて。 CodePadはこのスレとは無関係だし 外国のサイトなんで使用には注意が必要
あっそう
>>388 *----------
問題文読むのも面倒なのでキャンセルされました
回答者の方へ もし回答を下さる予定でしたら、お忙しい中更にお手数をおかする ことになりますが途中一度でも着手済完成予定情報を簡単な図でで もかまいませんのでお知らせ下さると無視されていないことがわか って他所の同様なサイトに聞き回らなくても済みますので 助かると思います。
やだ
たびたびすいません。再びお願いします
[1] 授業単元:自主勉
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10301.cpp 110行目付近でvp、vmがでてきますが、このままでは vm=vp としたときに
1つ前のコンテナのvpがvmに入ってしまいますが、1つ前のコンテナのvpではなく、
同じコンテナのループの一つ前のvpを入れるにはどうしたらいいですか?
たぶん大幅に改変しなくてはいけないような気がしますがよろしくお願いします。
できればイテレータは使ったままでお願いします。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語:C++
[4] 期限: できれば12・23の朝まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
>>388 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
while(1) {
int *s, i, j, n, m, dif=0, flg=0, a, b;
scanf("%d%d", &n, &m);
if(!(n|m)) break;
s = malloc((n+m) * sizeof(int));
for(i=0; i<n; i++) { scanf("%d", s + i); dif += s[i];}
for(; i<n+m; i++) { scanf("%d", s + i); dif -= s[i]; }
dif = abs(dif);
if(!(dif&1))
for(i=0,dif>>=1; i<n; i++)
for(j=n; j<n+m; j++)
if(abs(s[i]-s[j])==dif && (!flg || s[i]+s[j]<a+b))
a = s[i], b = s[j], flg = 1;
printf("Aさんのカード:");
for(i=0; i<n; i++) printf(" %d", s[i]);
printf("\nBさんのカード:");
for(; i<n+m; i++) printf(" %d", s[i]);
if(flg) printf("\nAさんの%dとBさんの%dを交換\n\n", a, b);
else printf("\n合計を等しくする交換はありません\n\n");
free(s);
}
return 0;
}
>>391 法律の違う外国のサイトを利用する場合、国内でトラブルに
なって絡んできたりとか、大げさに騒がれたりとかいろい
ろとやっかいなことになる場合があるから絶対にトラブルを
起こさないという覚悟の上で利用するというのは言えてると
思いまつ
[1]授業単元:プログラミング [2] 課題:いわゆる15パズル。 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 のように配置された4x4のパネルを乱数を用いてシャフルする。シャフル時のパネルの動かし方は ゲーム進行中のパネルを動かすやり方と同じルールが適用される。 パネル座標値(R,C) を入力させ (Rは行 Cは列 それぞれ1から4の値を取る) 対応するパネルが空白でないパネルで空白と隣接する場合はそこに移動させる方法で ゲームを進行させ、最初の状態に戻った場合(完成)は「暇人さんご苦労様」と出力して終了。 完成するまで入力と移動を繰り返す。無効なマスの指定は「そんなパネル動かせへん」と警告を表示すること。 盤面状況はコンソール出力とし、動かした回数と共に入力の直前に随時、及びゲーム終了前に表示すること。 [3] Linux/gcc 4.0/C [4] 2010年1月第一週の授業までに提出 [5]stdio.h,stdlib.hのみ使用可能 fgets,sscanf,rand,fprintfの使用を許可 4x4、16マスを仮定するが 一辺の長さを4については#defineで文字列レベルでの変更が出来るようにすること
朝早くから済みませんがよろしくお願いします。
403 :
396 :2009/12/23(水) 12:41:02
vp,vmを構造体に入れることにより解決しました
>>405 おーい、リンク先がらみの学生なら、これくらいがんばれ!
>405 どこかで聞いた名前だなと思ったら、この人の本持っていた
>>405 **−−−−−−−− ←プログレスバー
知っています。コード生成に着手しました。
暫く(数日から一両日〜1週間程)お待ち下さい
フリーズしていると思う場合は、CTRL+ALT+DEL
を押してタスクマネージャーを起動し133-405.exeの
CPU使用量が0%の場合はフリーズしていますので
あきらめてください。アプリケーションを強制停止
させるとシステムに不具合が起こる場合もありますんで
ご注意下さい。
>>405 自習問題は面白いですね。
積と和から2数を知る問題は、かなり昔の「初歩のラジオ」のパズルにありましたね。
答えが2つ以上ある覆面算めいたものは覆面算と 呼んではならない と定義されました ならばC言語の宿題(=問題)は殆どが覆面算めいた もので、それが重要な本質です。 回答競争みたいな行為はC言語を汚す行為とも 取れます。
412 :
405 :2009/12/23(水) 18:32:53
>>410 さん
>>405 です。とてもお早い回答有難う。
悩んで手がつかない状態だったのでうれしいです!
では勉強のほうに戻ります。失礼しました〜
お前はゴールできないから競争になってないだろw
新しいループに入るたびに前の変数と比較するのと、
>>410 みたいに最後にまとめて比較するのってどっちがいいんだろ。
>>411 C言語はもともとそんなにきれいな言語じゃないんで
心配しなくていいって
416 :
410 :2009/12/23(水) 19:39:39
勘違いしてたけど
覆面算の答えは一つとは限らないみたいね
でも
>>405 の答えは結局一つしかなかったので
あのままで大丈夫だと思う。
汎用の覆面算作ってみた #include <stdio.h> void store(char *str, char *p, int *cnt){ int i, j; for(i=0; str[i]; i++) { for(j=0; j<*cnt; j++) if(str[i]==p[j]) break; if(j==*cnt) p[(*cnt)++] = str[i];}} int conv(char *str, char *p, int *n, int *ret){ int i; for(i=0; *str!=p[i]; i++); if(!n[i]) return 0; *ret = n[i]; while(*++str) { for(i=0; *str!=p[i]; i++); *ret = *ret * 10 + n[i];} return 1;} void mask(char *a, char *b, char *c, char *p, int *n, int pos, int cnt){ int i, j, an, bn, cn; if(pos == cnt) { if(!conv(a,p,n,&an)||!conv(b,p,n,&bn)||!conv(c,p,n,&cn)) return; if(an + bn == cn) printf("%d + %d = %d\n", an, bn, cn); return;} for(i=0; i<10; i++) { for(j=0; j<pos; j++) if(n[j]==i) break; if(j==pos) { n[pos] = i; mask(a, b, c, p, n, pos+1, cnt);}}} int main(void){ int n[10], cnt = 0; char a[16], b[16], c[16], p[10]; scanf("%s%s%s", a, b, c); store(a, p, &cnt);store(b, p, &cnt);store(c, p, &cnt); mask(a, b, c, p, n, 0, cnt); return 0;}
100円やったけど律儀に10円の釣りとは...
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 問1 辺の和が3以上1000以下の直角三角形の個数を求めよ。 各辺の長さは自然数で、ある直角三角形の各辺を定数倍したものもカウントすることとする。 問2 問1 で検索した直角三角形のうち、最も面積の大きい直角三角形の3辺の長さ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:2009年12月25日 [5] その他の制限:forとifを使って作る よろしくお願いします。
乙候
回答する場合は、出来れば2通り以上の回答を用意してから あげるべきじゃないかと.. exactな値を求める問題とかだと間違ってたりすると匿名とは 言えども結構恥ずかしいからな
なにいっ天皇
>>421 #include <stdio.h>
int main(void)
{
int i, j, k, cnt = 0, max_area = 0;
for(i=1; i<1000; i++) {
for(j=1; j<i; j++) {
for(k=i-j+1; k<=j && i+j+k<=1000; k++) {
if(i*i==j*j+k*k) {
cnt++;
if(max_area<j*k) max_area = j*k;
}
}
}
}
printf("個数:%d\n最大面積:%.1f\n", cnt, max_area / 2.0);
return 0;
}
問題よく読みなよ
コード貼らずに文句だけ言う、俺みたいなのが一挙に増えたな。 学校が休みに入ったんだと感じる一瞬だ。
問題よく読んでなかった。 面積じゃなくて3辺の長さか。 #include <stdio.h> int main(void) { int i, j, k, cnt = 0, a, b, c, max_area = 0; for(i=1; i<1000; i++) { for(j=1; j<i; j++) { for(k=i-j+1; k<=j && i+j+k<=1000; k++) { if(i*i==j*j+k*k) { cnt++; if(max_area<j*k) { max_area = j*k; a=i,b=j,c=k; }}}}} printf("個数:%d\n最大面積の三辺:%.d %d %d\n", cnt, a, b, c); return 0; }
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 20000〜40000までの自然数のうち、数字の9を2個含む素数の個数を調べよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:2009年12月25日 お願いします
197
141
435 :
デフォルトの名無しさん :2009/12/24(木) 22:25:22
>>431 #include <stdio.h>
int main(void)
{
int i, j, k, cnt = 0;
for(i=20000; i<=40000; i++) {
if(i%2==0) continue;
for(j=3; j*j<=i; j+=2) if(i%j==0) goto label;
for(j=i,k=0; j; j/=10) if(j%10==9) k++;
if(k==2) cnt++;
label:
}
printf("%d\n", cnt);
return 0;
}
437 :
434 :2009/12/24(木) 22:30:56
438 :
431 :2009/12/24(木) 22:35:49
たくさんの回答ありがとうございました 助かりました
439 :
デフォルトの名無しさん :2009/12/25(金) 00:06:22
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 三角形の「底辺」「高さ」「面積」を表現するために,整数型の2つの変数teihenとtakasaと浮動小数点型(double型)の1つの変数mensekiの,計3つの変数をメンバとしてもつ構造体型sankakuを宣言しよう. main関数の中で,構造体変数triangle1とtriangle2が次のように定義されているとする. struct sankaku triangle1 = {2, 8, 0.0}; struct sankaku triangle2 = {3, 6, 0.0}; このとき,以下の式で三角形の面積を計算し,それぞれのメンバ変数mensekiに求めた値を格納しよう.(整数同士の計算結果は必ず整数型の値になってしまうため,「2.0」という小数点付の数で割る計算をすること.そうすると,小数点以下の値まで求められる) (面積) = (底辺) × (高さ) / 2.0 さらに,格納されたそれぞれの面積の値(triangle1のmensekiとtriangle2のmenseki)を表示するプログラムを作成せよ.(表示の際にはdouble型の値を表示することになるので,printfの" "の中の書き方に注意すること) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年12月30日
>>435 [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:VS2005
[3.3] 言語:C
//
#if defined(_MBCS) // _UNICODE
#undef _MBCS
#define _UNICODE
#define UNICODE
#endif
#include <stdio.h>
#include <string.h>
#include <tchar.h>
#include <locale.h>
int main(void){
TCHAR m1[80]=_T("日本"), m2[80]=_T("東京都"), m3[80], m4[80];
int mojisu;
setlocale(LC_ALL, "");
_tcscat_s(m1, 80, m2);
mojisu = (int)_tcslen(m1);
_fgetts(m3, sizeof(m3), stdin);
m3[_tcslen(m3)-1] = '\0';
_tcscpy_s(m4, 80, m3);
_tprintf(_T("m1=%s\nmojisu=%d\nm3=%s\nm4=%s\n"), m1, mojisu, m3, m4);
return 0;
}
>>439 #include <stdio.h>
/* 構造体 */
struct sankaku
{
int teihen;
int takasa;
double menseki;
};
int main(void) {
/* 定義 */
struct sankaku triangle1 = {2, 8, 0.0};
struct sankaku triangle2 = {3, 6, 0.0};
/* 三角形の面積を計算 */
triangle1.menseki = triangle1.teihen * triangle1.takasa / 2.0;
triangle2.menseki = triangle2.teihen * triangle2.takasa / 2.0;
/* 格納された面積の値を表示 */
printf("triangle1のmenseki=%f\n", triangle1.menseki);
printf("triangle2のmenseki=%f\n", triangle2.menseki);
return 0;
}
442 :
デフォルトの名無しさん :2009/12/25(金) 10:21:09
443 :
デフォルトの名無しさん :2009/12/25(金) 10:29:31
OCRなのか、問題文がおかしいところがやたらとあるんだが。
445 :
デフォルトの名無しさん :2009/12/25(金) 12:55:01
すみません
元の画像UPしろってことだろ。
447 :
デフォルトの名無しさん :2009/12/25(金) 13:23:44
>>447 演習1と3
#include <iostream>
int main() {
int size;
std::cout << "データの数は?"; std::cin >> size;
int *a = new int[size];
for (int i = 0; i < size; i++) {
std::cout << i + 1 << "番目のデータを人力してください:";
std::cin >> a[i];
}
int sum = 0;
for (int i = 0; i < size; i++) {
sum += a[i];
}
std::cout << "和=" << sum << std::endl;
delete [] a;
return 0;
}
#include <iostream>
void print(char *name) {
std::cout << std::string(name).length() << " : " << name << std::endl;
}
void print_all(char **names, int size) { // ポインタのボインタを用いる
for (int i = 0; i < size; i++) print(names[i]);
}
int main() {
char *names[] = {"izumi", "Kanto", "Kudo", "Sato", "Sugawala", "Matuda", "Wada"};
print_all(names, sizeof(names) / sizeof(names[0]));
return 0;
}
>>447 演習4と5
#include <iostream>
int main() {
char *str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *str2 = new char[sizeof(char) * (strlen(str1) + 1)];
char *p = str1 + strlen(str1) - 1, *q = str2; // ポインタを2個用いて
for (; str1 <= p; p--, q++) *q = *p;
*q = '\0';
std::cout << str2 << std::endl;
delete [] str2;
return 0;
}
#include <iostream>int main() {
int nhito, nkamoku;
std::cout << "クラスの人数は?"; std::cin >> nhito;
std::cout << "科目の数は?"; std::cin >> nkamoku;
int **table = new int*[nhito];
for (int i = 0; i < nhito; i++) {
table[i] = new int[nkamoku];
std::cout << i + 1 << "番目のの学生" << std::endl;
for (int j = 0; j < nkamoku; j++) std::cin >> table[i][j];
}
std::cout << "各科目の和は以下の通りです" << std::endl;
for (int j = 0; j < nkamoku; j++) {
int sum = 0;
for (int i = 0; i < nhito; i++) {
sum += table[i][j];
}
std::cout << sum << std::endl;
}
return 0;
}
>>441 ありがとうございます。
大変助かりました。
typedef で ? の型が未定義ならを #if を使ってどう書けばいいでしょう?
>>452 任意の型です、例えば
typedef unsigned char BYTE
#if ? BYTE
BYTEの型が未定義なら〜
このような感じで
#ifdef だと #define のしか対象にならなくて
#ifndef 使えば?
>>454 #if 〜 だと typedef の型定義は検出出来ないと思うけど
>>455 typedefを宣言しているヘッダファイルをインクルードしているか否かで判断したらいいかと思います
457 :
デフォルトの名無しさん :2009/12/25(金) 20:12:14
ただのCか
課題1 #include <stdio.h> #include <stdlib.h> int main(void){ int *num,sum,n,i; sum=0; printf("データの数は\?"); scanf("%d",&n); num=(int *)malloc(sizeof(int)*n); for(i=0;i<n;i++){ printf("%d番目のデータを人力してください:",i+1); scanf("%d",num); sum+=(*num); num++; } printf("和=%d",sum); free(num); return 0; }
これはひどい
>>457 459 じゃないが,なるべく変えないように修正してみた。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int *num,sum,n,i;
sum=0;
printf("データの数は\?");
scanf("%d",&n);
num=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
printf("%d番目のデータを人力してください:",i+1);
scanf("%d",&num[i]);
sum+=num[i];
}
printf("和=%d\n",sum);
free(num);
return 0;
}
これはひどくない
463 :
459 :2009/12/25(金) 22:50:38
>>461 おー、そういう書き方もありましたな>ポインタ
完全に忘却しておりました(;・∀・)
ポインタを使う場合、どっちの方が良いんでしょうか?
464 :
デフォルトの名無しさん :2009/12/25(金) 23:03:12
1:単元名 C言語 2:問題文 元金、単利と複利の利率に対して、次のものを求めるプログラムを作成しなさい。 30年後の残高。 30年以内に複利の残高は単利の残高を上回るか。 上回るならば何年後か。 3:環境 よくわからないのですが、マックのXcodeで行ってます。 4:期限 できれば12月31日までにお願いします。
>>457 448さんがやったのをCにしてみました。
演習3
#include <stdio.h>
#include <string.h>
void print(char *name) {
printf("%d : %s\n", strlen(name), name);
}
void print_all(char **names, int size) { // ポインタのボインタを用いる
int i;
for (i = 0; i < size; i++) print(names[i]);
}
int main(void) {
char *names[] = {"izumi", "Kanto", "Kudo", "Sato", "Sugawala", "Matuda", "Wada"};
print_all(names, sizeof(names) / sizeof(names[0]));
return 0;
}
>>457 続いて演習4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *str2 = NULL;
str2 = (char *)malloc(sizeof(char) * (strlen(str1) + 1));
char *p = str1 + strlen(str1) - 1, *q = str2; // ポインタを2個用いて
for (; str1 <= p; p--, q++) *q = *p;
*q = '\0';
printf("%s\n", str2);
free(str2);
return 0;
}
>>457 演習5。連投すまんでした。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int nhito, nkamoku;
printf("クラスの人数は? "); scanf("%d", &nhito);
printf("科目の数は? "); scanf("%d", &nkamoku);
int **table = malloc(sizeof(int *) * nhito);
int i, j, sum = 0;
for (i = 0; i < nhito; i++) {
table[i] = malloc(sizeof(int) * nkamoku);
printf("%d番目の学生\n", i + 1);
for (j = 0; j < nkamoku; j++) {
scanf("%d", &table[i][j]);
}
}
printf("各科目の和は以下の通りです\n");
for (j = 0; j < nkamoku; j++) {
sum = 0;
for (i = 0; i < nhito; i++) {
sum += table[i][j];
}
printf("%d\n", sum);
}
for (i = 0; i < nhito; i++) { free(table[i]); }
free(table);
return 0;
}
>>465 (´・ω・`)
大学4年間、それで通してきて誰にも指摘されなかった・・・
>>469 #include <stdio.h>
#include <stdlib.h>
int main(void){
int *num, sum=0, n, i;
printf("データの数は?"); scanf("%d", &n);
num = (int *)malloc(sizeof(int)*n);
for(i=0; i<n; i++){
printf("%d番目のデータを人力してください:", i+1);
scanf("%d", num+i);
sum += *(num+i);
}
printf("和=%d", sum);
free(num);
return 0;
}
ポインタを直接弄るのがアウト?
>>471 #include <stdio.h>
#include <stdlib.h>
int main(void){
int *num,sum,n,i,*tmp;
sum=0;
printf("データの数は\?");
scanf("%d",&n);
tmp=num=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
printf("%d番目のデータを人力してください:",i+1);
scanf("%d",num);
sum+=(*num);
num++;
}
printf("和=%d",sum);
free(tmp);
return 0;
}
>>469 free するアドレスが間違ってるからセグメンテーションフォルトで落ちるだけの話
malloc で貰ったアドレスは free するまで大事にとっておいて、コピーを弄れば問題なし
>>473 ありがとうございます。
そういうことだったんですね。
勉強になるなあ
476 :
デフォルトの名無しさん :2009/12/26(土) 05:25:57
Cやったことないのバレバレw
478 :
448 :2009/12/26(土) 09:34:55
初学者はc と c++ の区別もつかないことがよくわかりました。というか kterm でコンパイルとしか書いてないのでね。
いや、初心者とか言うレベルじゃねえだろ流石に まさかつられたのか
釣りにしては問題はちゃんとしていた気がするが。 「C/C++」っていっしょくたに扱うことがあるから、このスレに宿題投げるような「単位必要だから仕方なく講義取ってます」って人は区別ついてなくても不思議はない気がするな。 教員がまともに説明してないのか授業をまともに聞いていないのか知らんがコンパイラをK-termとか言うぐらいだし
Makefileの書き方が分からない… emacsでコンパイルできない…
>>481 C++ で C 風に書くことも出来ますし。
[1] 授業単元: 画像解析 [2] 問題文(含コード&リンク): 画像を、好きな倍率で大きくしたり小さくしたりするプログラムを作成してください [3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 1月7日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
typedef struct { int type; char [20]; } data_main; typedef struct { int x,y,z; } vec; として、 mallloc で 構造体 data_main + vec のサイズ分メモリを確保したとき void *data = malloc( sizeof(data_main) + sizeof(vec) ); その確保したメモリをそれぞれの構造体サイズ分でポインターへ割り当てしたいのですが data_main *main_p = // 確保したメモリ(data)から 構造体 data_main のサイズ分を割り当て vec *vec_p = // 確保したメモリ(data)から構造体 vecのサイズ分を割り当て ここの処理方法が分かりません どうすれば良いでしょうか?
>490 data_main *main_p = data; // 確保したメモリ(data)から 構造体 data_main のサイズ分を割り当て vec *vec_p = (vec *)((char *)data + sizeof(data_main));?// 確保したメモリ(data)から構造体 vecのサイズ分を割り当て data_main *main_p = (data_main *)((char *)data + sizeof(vec)); // 確保したメモリ(data)から 構造体 data_main のサイズ分を割り当て vec *vec_p = data;?// 確保したメモリ(data)から構造体 vecのサイズ分を割り当て
最初から別々に確保すりゃいいのに。 どうしてもまとめて扱う必要があるなら、一つの構造体にするとか。
>>491 助かりました
>>492 ある事情で確保するメモリに+αの情報を
付けておかないといけなくて
その data_main の中身から察すると、シリアライズか動的な型かね?
動的な型なら
>>492 の1つの構造体の中に union が居る ってな感じにしそうだが
>>494 そんな感じです
冷静に考えてみれば実に簡単な処理でしたね
こんな初歩的な質問に返答してもらえて感謝です
[1] C言語演習 [2]次のコードをif ,while ,do while文を用いずに同一の動作をするように書き換えなさい char * strstr (char *buf, char *sub){ char *bp,*sp; if (!*sub)return buf; while (*buf){ bp = buf;sp = sub; do { if (!*sp)return buf; } while (*bp++ == *sp++); buf += 1; } return 0; } [3] Windows vista/Visual C++ 2008/C言語 [4] 2010/1/10迄 [5] 同一の動作をすることがわかるように、幾つかの場合について元コードと書き換えコード に同じパラメータを与えて実行させ結果を比較するmain関数を付けること よろしくお願いします。
char * strstr2(char *buf, char *sub) { char *bp, *sp; for(bp=buf, sp=sub; *sp && *bp==*sp; bp++, sp++); return *buf ? *sp ? strstr2(buf+1, sp) : buf : 0; }
char * strstr2(char *buf, char *sub) { char *bp, *sp; for(bp=buf, sp=sub; *sp && *bp==*sp; bp++, sp++); return *buf ? *sp ? strstr2(buf+1, sub) : buf : 0; } だった
>>496 課題2
main作ってない&動作確認していない&こんなんでいいなら
class Account
{
private: /* 以下追加 */
int number; // 通し番号
static int _number;
};
int Account::_number = 0;
Account(string n, string num, long z, Date op)
name(n), no(num), balance(z), open(op)
{
number = _number;
_number++;
}
>>501 識別番号がプライベートなのでmain()で確認できません。
それともGetNumber();を作りますか?
>>502 public属性にしてもいいし、GetNumber()をつくってもいいんじゃない
505 :
504 :2009/12/30(水) 11:39:47
>>496 一応動作確認してみたら、
コピーコンストラクタにバグあった。
String::String(const String& rhs)
{
s = new char[rhs.len+1];
strcpy(s, rhs.s);
len = rhs.len;
}
#include <iostream>
int main()
{
String s1("hoge"), s2(s1);
String s3(s1+"foo");
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
std::cout << s3 << std::endl;
return 0;
}
# 「+=」と比較演算子のオーバーロードが欲しいなぁ
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
勇者が10×10の盤面をキー入力によって移動し、
ある座標(x、x)に勇者が移動したらモンスターと戦闘になり、
勝ち負けを判定するプログラムを作成せよ。
(戦闘や勝ち負け判定は以下リンクのソースを参考に…)
http://web.keio.jp/~young-blood/rpgsource.txt [3] 環境
[3.1] OS: Linux or Mac
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限:1月4日まで
[5] その他の制限:
勇者が10×10の盤面をキー入力によって移動するプログラムは作成済みなので、
後は勇者が座標(x、x)に移動した場合に戦闘が起こり、
戦闘の勝ち負けを判定する(勝った場合はそのままキー入力を続け、負けた場合はゲームオーバー)
プログラムを作るだけなのですが、
プログラム初心者の私には複雑すぎて何がなんだか…orz
ご存じの方いましたらよろしくお願いいたします
リンクのソースを参考にしていただければ幸いです。
>>506 コピペミスってないかい?
同じ関数で中身が違うのがあったり、重複が酷い。
508 :
506 :2009/12/30(水) 12:51:21
>>497 ※mainの中身はネット上の情報を(
ttp://www9.plala.or.jp/sgwr-t/lib/strstr.html )参考にしました。
char *strstr2(char *buf, char *sub) {
int i = 0;
for (; *buf != '\0' && *sub != '\0' && *buf != *sub; buf++) {}
for (i = 0; i < strlen(buf) && buf[i] == sub[i]; i++) {}
return 0 == strlen(sub) || 0 < i && strlen(sub) < strlen(buf) ? buf : 0;
}
int main() {
char s1[] = "abcdefghijklmn"; /* 検索対象文字列 */
char s2[] = "defgh"; /* 一致する場合 */
char s3[] = "xyz"; /* 一致しない場合 */
char s4[] = "abcdefghijklmnopqr"; /* 検索対象文字列より長い場合 */
char s5[] = ""; /* \0 */
printf("一致する場合 : %s\n", strstr(s1, s2));
printf("一致しない場合 : %s\n", strstr(s1, s3));
printf("検索対象文字列より長い場合 : %s\n", strstr(s1, s4));
printf("\\0 : %s\n", strstr(s1, s5));
printf("一致する場合 : %s\n", strstr2(s1, s2));
printf("一致しない場合 : %s\n", strstr2(s1, s3));
printf("検索対象文字列より長い場合 : %s\n", strstr2(s1, s4));
printf("\\0 : %s\n", strstr2(s1, s5));
return 0;
}
510 :
504 :2009/12/30(水) 13:32:55
>>505 よく見たら、加算演算子で左辺も変更されてるぅぅ。。
//String& operator+(const char* rhs); // 下記に修正
String operator+(const char* rhs) const;
String String::operator+(const char* rhs) const
{
std::string tmp(s); tmp += rhs;
return String(tmp.c_str());
}
>>508 シンプルだけど、これで八割以上魔王に勝てる。
int power_of_2(int n);
int user_routin(
int level, int life, int maxlife, int attack, int rest_exp, int monster, int exp, int position
) {
int x;
double liferate = (double)life / maxlife;
double risk = 0;
int battle_level = position / 5 + 1;
int battle_life = battle_level * battle_level * 2;
int battle_attack = (power_of_2(battle_level + 1) - 1) / 4;
if (battle_attack > 100) battle_attack /= 2;
if (position == 50) {
x = 1; // 逃げられないので戦う
} else if (liferate < .8) {
x = 3; // ちょっと食らったらすぐ、回復するまで後戻り
} else if (0 < monster) {
battle_life *= monster;
battle_attack *= battle_attack;
risk = (double)battle_attack / life;
x = 0.3 < risk ? 3 : 1; // 危険になったら後戻り
} else {
x = 2; // 勇者だから前進
}
return x;
}
>>497 for文を使うなんて軟弱な事はせずに解いた
int isprefixof(char*x,char*y){
return *y ? *x == *y ? isprefixof(x+1,y+1) : 0 : 1;
}
char *strstr2 (char *buf, char *sub){
return isprefixof(buf,sub) ? buf : *buf ? strstr2(buf+1,sub) : 0;
}
#include<stdio.h>
int main() {
char s1[] = "abcdefghijklmn"; /* 検索対象文字列 */
char s2[] = "defgh"; /* 一致する場合 */
char s3[] = "xyz"; /* 一致しない場合 */
char s4[] = "abcdefghijklmnopqr"; /* 検索対象文字列より長い場合 */
char s5[] = ""; /* \0 */
printf("一致する場合 : %s\n", strstr2(s1, s2));
printf("一致しない場合 : %s\n", strstr2(s1, s3));
printf("検索対象文字列より長い場合 : %s\n", strstr2(s1, s4));
printf("\\0 : %s\n", strstr2(s1, s5));
printf("一致する場合 : %s\n", strstr2(s1, s2));
printf("一致しない場合 : %s\n", strstr2(s1, s3));
printf("検索対象文字列より長い場合 : %s\n", strstr2(s1, s4));
printf("\\0 : %s\n", strstr2(s1, s5));
return 0;
}
513 :
512 :2009/12/30(水) 14:35:47
あーmain関数がなんか適当に勘違いして書き変えてた。
使うときは
>>509 さんのmain関数に戻しておいて(あと、#include<string.h>をたしといて)。
514 :
508 :2009/12/30(水) 14:39:37
すいません…説明不足でしたorz □□□□□ □□□□□ □□☆■□ □□□□□ □□□□□ ☆=勇者 ■=モンスター この5×5の盤上を勇者が動き、 モンスターと遭遇するプログラムは作成済みなので、 後は508のソースを参考にしてモンスターと隣合わせになった時に起こる 戦闘と勝ち負け判断のプログラムを作成するだけです。
>>512 さんスゲー。
俺も俺も!と思って必死でforなくしてみたけど、
似たようなの、かつ改悪みたいになってしまった。
lispの人で末尾再帰がどうのに拘る人は、
スカッとした書き方を出来たりできるのだろうか。
int enough(char *a, char *b) {
return *a == *b ? enough(a + 1, b + 1) : *b == '\0' ? 1 : 0;
}
char *strstr4(char *buf, char *sub) {
return strlen(buf) < strlen(sub) ? 0 : *sub == '\0' || enough(buf, sub) ? buf : strstr4(buf + 1, sub);
}
ちょい改善。 int enough(char *a, char *b) { return *a == *b ? enough(a + 1, b + 1) : *b == '\0' ? 1 : 0; } char *strstr4(char *buf, char *sub) { return strlen(buf) < strlen(sub) ? 0 : enough(buf, sub) ? buf : strstr4(buf + 1, sub); }
別関数使うほうがよっぽど軟弱だと思うが
じゃあこれで char *strstr2(char *buf, char *sub) { char *t; return *sub ? *buf ? *buf==*sub && (t=strstr2(buf+1,sub+1)) ? t-1 : strstr2(buf+1,sub) : 0 : buf; }
519 :
512 :2009/12/30(水) 16:49:35
>>515 enoughにバグがあるよ。
たとえばa==bのときに無限の彼方に旅立ってしまう。
char* p= "Hoge";
strstr4(hoge,hoge);
あとstrstr4の中でstrlenを呼び出すと計算量がO(N^2)に跳ね上がるから注意
他にも細かい問題があるけど割愛
>>517 うーんwhile文使うなって問題で
for文使うって発想のほうが正直俺としてはひどいと思う。
while(expr)がfor(;expr;)と互換なんだから。
ただ、別関数にしてるのは指摘どおり、正直妥協の産物。
どうしても別関数作らないと奇麗に書けなかったから逃げてしまった。
その理屈で言うなら、if使うなで?使うのもアウトだろw
>>520 おれも最初にそれ思ったw しかし…forも三項演算子も使わないでできるだろうか…。
条件演算子はオーバーロードできるの?
524 :
512 :2009/12/30(水) 17:14:36
>>522 もちろん出来る。
char *strstr2 (char *buf, char *sub){
LABEL1:
char*x = buf,*y = sub;
LABEL2:
switch(*y)case '\0':return buf;
switch(*x++ == *y++)case 1:goto LABEL2;
switch(*buf++)case'\0':return 0;
goto LABEL1;
}
まぁ半分ギャグだけど
>>522 switch とか 関数ポインタの配列を使う手があるよ
>>524 とても美しい解決方法だな。
gotoは使うべきだ。
たいした奴だ…。
529 :
デフォルトの名無しさん :2009/12/30(水) 18:05:33
同じ問題を複数の人が依頼しているのを見ると その大学(専門学校?)の将来が不安になってしまうよね。 まぁ別にそいつらが考える力をなくしてくれても全然どうでもいいけど
検索する程度の頭もないから、こんな簡単な問題すら解けないんだろうな。
面倒な作業は俺頭良いって勘違いしてるオタクちゃんに任せて、浮いた時間で女遊びするんだよ。
for(m=0; m<n; m++) printf("%d%c", a[m], m==i ? '*' : ' ');
どっかで見たような問題ばっかりだな
>>535 ありがとうございます。しかし、先生にif(□ != □) の□の部分のみを弄るよう課されているのです。
どうかそれをifの文にして頂けないでしょうか。
if(i!=m)だけど、そこだけ弄ったんじゃ元のコードでは期待通りには動かない。
>>539 コンパイルし実行してみましたが、確かに期待する結果は出ませんでした。
>>535 の答が最も最適なのでしょうか。
>最も最適 日本語が少しおかしかったですね、「最も適している」に訂正します。
for(m=0;m<n;m++) { printf("%d",a[m]); if(i != m) printf(" "); else printf("*"); } {}で囲めばいい。
>>536 適当に全部やった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10324.cpp
>>542 ありがとうございます。私の課題に時間を割いていただき感謝します。
545 :
デフォルトの名無しさん :2009/12/31(木) 14:07:48
546 :
デフォルトの名無しさん :2009/12/31(木) 14:26:27
[1] 授業単元: プログラミング応用 [2] 問題文(含コード&リンク): 任意の奇数n(nは15以下)を入力しn×nの魔方陣を出力する。 そして、作成した魔方陣の縦、横、斜めの合計値も同時に出力せよ。 ただし、1は必ず一番左の列の真ん中に置くこと。 (例) n=3の時 15 6 7 2 15 1 5 9 15 8 3 4 15 15 15 15 15 [3] 環境 [3.1] OS:vista [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C / C++ [4] 期限:2009年1月6日 冬休みの課題なのですが、考えて色々調べたのですがわかりません。どなたかわかる方がいればご教授お願いします。
547 :
デフォルトの名無しさん :2009/12/31(木) 15:48:38
[1] 授業単元: 情報数学 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: 出来ればC [4] 期限: [無期限] [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ヒントだけでも与えていただければと思い投稿させて頂きました。 参考になるhpなどありましたらお願いしますm(_ _)m 問)同時整数関係を見つけるプログラムを考えなさい。 整数の解を求めるプログラムと、複素数の解を求めるプログラムを考え、 それを組み合わせることで両方の解を同時に求め示すプログラムについて考えなさい。
>>546 #include <stdio.h>
int main(void)
{
int i, j, k, n, ti, tj, sum, a[15][15] = {0};
scanf("%d", &n);
for(i=n/2,j=0, k=1; k<=n*n; k++) {
a[i][j] = k;
ti = i ? i - 1 : n - 1;
tj = j ? j - 1 : n - 1;
if(a[ti][tj]) j = (j + 1) % n;
else i = ti, j = tj;}
for(i=0, sum=0; i<n; i++) printf(" ", sum += a[n-1-i][i]);
printf("%4d\n", sum);
for(i=0; i<n; i++) {
for(j=0, sum=0; j<n; j++) printf("%4d", a[i][j], sum += a[i][j]);
printf("%4d\n", sum);}
for(i=0; i<n; i++) {
for(j=0,sum=0; j<n; j++) sum += a[j][i];
printf("%4d", sum);}
for(i=0, sum = 0; i<n; i++) sum += a[i][i];
printf("%4d\n", sum);
return 0;
}
549 :
デフォルトの名無しさん :2009/12/31(木) 17:01:58
>>548 本当にありがとうございます。
あと、期限の年数を間違えていてすいませんでした。
#include <stdio.h> int main(void) { char dat[]={ -29, -126, -120, -29, -127, -124, -29, -127, -118, -27, -71, -76, -29, -126, -110 }; fwrite(dat, sizeof(char), sizeof(dat), stdout); return 0; }
553 :
デフォルトの名無しさん :2010/01/01(金) 00:27:30
>>545 すみません、忘れてました。
[3] 環境
[3.1] OS:windows XP
[3.2] コンパイラ名とバージョン:visual studio2008
[3.3] 言語:C++
さいきんじゃあ、C++だってことらしい。ゆるす
>>547 同時整数関係について情報をください。web でもいいです。
それとも同次整数関係ですか?
[1] 授業単元: 情報数学 [2] 問題文(含コード&リンク): オイラー級数を用いて、πの近似値を求めよ。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:2010年1月15日
558 :
デフォルトの名無しさん :2010/01/03(日) 17:10:16
>>556 ごめんなさい、そうです。
同次整数関係です。
<Simultaneous Integer Relation>と書いてあったのでてっきり。
すみません。
559 :
デフォルトの名無しさん :2010/01/03(日) 17:36:34
<Simultaneous Integer Relation>と書いてあったのでてっきり。 すみません。 訳すと同時になってしまうんですが、 なかなかヒットせず・・・。 訳がちがう気もするのですが、思いついたものではほとんど情報を得られず。
>>557 #include<stdio.h>
#include<math.h>
double eular(int n){
double r = 0;
for(int i=n;i;--i)
r += 1.0 / i / i;
return r;
}
int main(){
printf("%f\n",sqrt(eular(1000000)*6));
}
561 :
560 :2010/01/03(日) 19:56:50
修正 C言語だったの忘れてた × for(int i=n;i;--i) ○ int i=n;for(;i;--i)
>>560 ありがとうございます
>>562 そうゆうことですよね…初心者すぎる自分はなにをすればいいかわかりませんでした
564 :
デフォルトの名無しさん :2010/01/06(水) 12:42:22
以前に質問したのですが、時間に余裕がなくなかったのでもう一度書き込みます。
どうか宜しくお願いします。
[1] 授業単元:基礎プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10325.txt 二問目のstep2の「課題11-2」という文は「一問目」の間違いです。すいませんでした。
[3] 環境
[3.1] OS:windows XP
[3.2] コンパイラ名とバージョン:visual studio2008
[3.3] 言語:C++
[4] 期限:一月七日 午後七時まで
[5] その他の制限:まだ習い始めたばかりですので基礎的なこともわかるかわからないかです。
関数定義やreturn文などを習ったばかりです。
できる限りは頑張ったのですがどうやら自分の力では出来る見通しがありません。
わずらわしいかもしれませんが、宜しくお願いします。
>>564 一つ確認。
scanf()を使う時点で、C++じゃなくてCなんだが、言語にはC++と書いてある。
ほんとはどっち?
>>565 cstdio じゃなくて stdio.h を include してるから C じゃね
これポインタ使わないと無理なような・・・
>>564 はCじゃないとコンパイルが通らないな
mainがintなのにreturnが無いわ
問題1 #include <stdio.h> #include <math.h> int input(float data[], int max){ int i; for(i=0;i<max;i++){ printf("データを一つ入力してください:"); scanf("%f",&data[i]); if(data[i]<=0){break;} } return i; } float average(float data[], int n){ int i,sum=0; for(i=0;i<n;i++){sum+=data[i];} return sum/n; } float variance(float data[], int n){ float v=0.0,s; int i; s=average(data, n); for (i=0;i<n;i++){v+=(data[i]-s)*(data[i]-s);} return v/=n-1; }
問題2 #include <stdio.h> #include <math.h> int input(float data[], int max){ int i; for(i=0;i<max;i++){ printf("データを一つ入力してください:"); scanf("%f",&data[i]); if(data[i]<=0){break;} } return i; } float max(float data[], int n){ int m=data[0],i; for(i=1;i<n;i++){ if(m<data[i]){m=data[i];} } return m; } int main(void){ float d[100]; int n; double s; n = input(d, 100); printf("最大値は%fである\n", max(d,n)); }
572 :
デフォルトの名無しさん :2010/01/06(水) 15:43:32
[1] 授業単元: 5元:プログラミング演習III [2] 問題文 下記参照 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C++ [4] 期限: [2010年1月20日16:40まで] [5] 特になし 問題(5) 実行するとカラーダイヤログを表示し、選択したカラーをクリップボードに送る処理を記述せよ
以前
>>209 で投稿しましたが、問題が詳細になり期限が延びたので再度投稿させて頂きます
[1] 授業単元:Cプログラミング入門
[2] 問題文(含コード&リンク):
五目並べの作成
コンピューターによる着手の生成関数の作成
詳細
サンプル中の問題2の部分に
・自分の石を五つ連続で並べるように置く
・相手が石を三つ連続で並べたら、その両端のどちらかに石を置く
というプログラムを加える
サンプルプログラム:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10289.txt [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2010年1月8日18:00まで
[5] 問題1は264さんのおかげで解決しましたので大丈夫です
すいませんが、よろしくお願いします
>>572 > 選択したカラーをクリップボードに送る処理
kwsk
[1]C言語入門 [2]2つの複素数の和と積を計算して表示するプログラムを作成せよ。 構造体complexを定義し、和の複素数を返すadd関数、積の複素数を返すmul関数、複素数を表示するprint関数をそれぞれ作成し mainでは2つの複素数をキーボードから読み込み、関数を呼ぶ。 虚数部にはiを付加せよ。 [3.1] Linux [3.2] gcc 3.4 [3.3] C [4] 2010/1/7/16:00 [5] まったくのゼロからおそらく一般的な順番通りに習ってきました。 構造体までに既に習ってるだろう範囲でなんとかお願いしますm(__)m
>>560 1000000 ぷっ
94883104
>>574 ペイント(mspaint)の色の選択で、色を選択したら(例えば赤を選択したら)、その選択した色(ここでは赤なのでFF0000)をクリップボードに送る(クリップボードにFF0000が入る)処理です
>>576 なにかおかしい?
94883104 ってなに?
582 :
デフォルトの名無しさん :2010/01/07(木) 16:37:17
【質問テンプレ】 [1] 授業単元:セミナー [2] 問題文(含コード&リンク):∫(x=0,4)∫(y=0,3)∫(x=0,2) 4*x^3 + x*y^2 + 5*y + y*z + 6*z dz dy dx を解くプログラムを書け [3] 環境 [3.1] OS:WindowsXP [3.2] Microsoft Visual Studio [3.3] 言語:C/C++/どちらでも可 [4] 期限: 2010年01月09日 00:00 要は明日 [5] その他の制限:特になし やり方のアドバイスだけでも教えていただけたら幸いです 答えは2040です。printf("2040"); だけでは無理です
puts("2040");
584 :
582 :2010/01/07(木) 17:19:30
>>576 ちゃんと実行できましたよ。C99 ですけど。
>>582 ∫(x=0,4)∫(y=0,3)∫(z=0,2) 4*x^3 + x*y^2 + 5*y + y*z + 6*z dz dy dx
≒ Σi∈[0:Nx-1] (Σj∈[0:Ny-1] (Σk∈[0:Nz-1]
4*(iΔx)^3 + (iΔx)*(jΔy)^2 + 5*(jΔy) + (jΔy)*(kΔz) + 6*(kΔz) )))
(但、Δx=4/Nx、Δy=3/Ny、Δz=2/Nz)
閉じ括弧の数間違えた
>>586 精度上げたいなら単に分割数増やすか
シンプソンの3/8公式でも使え
[1] 授業単元: 情報プログラム [2] 問題文(含コード&リンク): 次の関数の積分を、台形公式を使って求めたい。 ただし、積分区間は(0,2)きざみ幅はh=0.01とする。 f(x)=(4-x2)1/2 ※台形公式は積分区間を(a,b)とすると n=(b-a)/h S=h*{1/2(f(a))+f(b))+f(a+h)+f(a+2h)+…+f(a+(n-1)h}となる。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: 出来ればC [4] 期限: [1/9] [5] その他の制限: 特になし よろしくお願いします。
>>588 #include <stdio.h>
double f(double x){ return (4 - x*x) / 2; }
double integral(double a, double b, double h){
int n = (int)((b - a) / h);
double sum = (f(a) + f(b)) / 2;
for(int i = 1; i < n; i++){ sum += f(a + i*h); }
return sum * h;
}
int main(){
printf("%f", integral(0, 2, 0.01));
}
VCで確認
>>586 最後に微小量 凅凾刧凾嘯かけ忘れてやいませんか?
591 :
582 :2010/01/07(木) 21:16:06
#include <stdio.h> struct sankaku{ int teihen; int takasa; double menseki; }; int main(){ struct sankaku triangle1 = {2, 8, 0.0}; struct sankaku triangle2 = {3, 6, 0.0}; triangle1.menseki = triangle1.teihen * triangle1.takasa / 2.0; triangle2.menseki = triangle2.teihen * triangle2.takasa / 2.0; printf("triangle1 の面積: %f\n", triangle1.menseki); printf("triangle2 の面積: %f\n", triangle2.menseki); return 0; }
594 :
デフォルトの名無しさん :2010/01/07(木) 23:37:34
>>570 >>571 回答ありがとうございます。田舎行ってて返事が書けませんでした。
ただ問題一の平均値がどうしても上手く出ません。
あと、問題二で最大値が8.1になるように入力すると8.0と表示されます。
どうしてですか?
すみませんがお願いします。
>>594 どう入力して何が出力されたのか書かないと分からんだろう
8.1と入力して8.0になるのは小数点以下が読まれてない可能性があるな
scanfの後にprintfで読んだ値を表示するようにして正しく読まれてるか確認して
597 :
デフォルトの名無しさん :2010/01/07(木) 23:54:40
問題一は 1.0 2.0 3.0 4.0 -1 と入力すると平均値が2.000000となる、正解は2.500000 問題二はどういうことですか?intに代入?…
>>597 問題1はaverage()のreturn分のsum/nが両方int型なので切り捨てられて2になる
問題2はmax()の中のmがint型なので切り捨てられる
600 :
デフォルトの名無しさん :2010/01/08(金) 00:05:06
>>599 とりあえず問題の部分をintからfloatに変えたらどんどんエラーが…
ついでに問題1 は sum が int なので加算するたびに切り捨てが起こる
602 :
デフォルトの名無しさん :2010/01/08(金) 00:07:32
問題一が何とかなりました。
603 :
デフォルトの名無しさん :2010/01/08(金) 00:09:28
全てなんとかなりました!!! みなさんありがとうございます!!!
[1] 授業単元: 演習チャレンジ問題 [2] 問題文(含コード&リンク): あるint型配列array[256]の中身をランダムシャッフルしたい。 0〜127の範囲の値を被らずに出す乱数関数randEx(Seed, i)を作成せよ。(iは0〜127) ※Seedを変えることにより、異なるパターンのランダム列が出るようにする。 ※array[i]とarray[128+randEx(Seed, i)]をスワップすることで並列計算において一気にシャッフルするのが目的です。 ※「スワップするかしないか」の部分は別なので考えなくて良いです。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC++2005 [3.3] 言語: Cのみ [4] 期限: 2010年1月18日まで 並列プログラミング関係なので、本来のランダムシャッフルよりややこしい事になってます… 全く分かりません…どなたか御教授下さい(´・ω・`)
606 :
デフォルトの名無しさん :2010/01/08(金) 10:22:55
プログラミングの問題なんですが、if文と繰り返し(for,whileのいずれか)を利用して次の問題を作成します。 米ドル紙幣としては次のような紙幣とコインがある。 100ドル、50ドル、20ドル、10ドル、5ドル、2ドル、1ドル 50セント、25セント、10セント、5セント、1セント 問題は、キーボードから日本円を入力し、まずドルに変換した後ドルを最適な紙幣とコインに振り分けるプログラムを作成しなさい。但し1ドルを92.69円として換算しなさい。そして、日本円が0円の時にプログラムを終了する。 例 ¥195,865 2,112,89$ 100$…21枚 50$ 20$ 10$…1枚 5$ 2$…1枚 1$ 50¢…1枚 25¢…1枚 10¢…1枚 5¢ 1¢…4枚 このような問題なんですがプログラムとして最適なものが分かる方は是非教えてください。
607 :
デフォルトの名無しさん :2010/01/08(金) 10:56:51
>606 #include <stdio.h> #include <math.h> #define RATE (92.69) int main() { char buf[256]; unsigned long yen; unsigned long cent; unsigned int const coin[] = {10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1, 0}; for(;;) { printf("\n¥ "); fflush(stdout); fgets(buf, sizeof(buf), stdin); sscanf(buf, " %lu", ¥); if(yen == 0) return 0; cent = round(yen * 100 / RATE); printf("%lu.%lu$\n", cent/100, cent%100); for(int i=0; coin[i] > 0; i++) { unsigned long ncoins = cent / coin[i]; cent %= coin[i]; if(coin[i] >= 100) printf("%u$", coin[i]/100); else printf("%u¢", coin[i]); if(ncoins > 0) printf("…%lu枚\n", ncoins); else printf("\n"); } } }
>607 1: double re 2: double im 3: z->re = x.re + y.re 4: z->im = x.im + y.im 5: struct complex 6: & x.re, & x.im 7: & y.re, & y.im 8: z.re, z.im
611 :
デフォルトの名無しさん :2010/01/08(金) 12:02:02
test
614 :
604 :2010/01/08(金) 14:24:41
>>614 規則的でいいなら
if(seed%2!=0) return (seed*(i+seed))%128;
else return ((seed*2+1)*(i+seed))%128;
>>604 ※array[i]とarray[128+randEx(Seed, i)]をスワップすることで並列計算において一気にシャッフルするのが目的です。
array[i] array[j] j-i < 128 のスワップが発生しない(≒array[0] と array[2] の交換はありえない)
シャッフルだけど良いのかな?
617 :
デフォルトの名無しさん :2010/01/08(金) 14:48:34
>>615 これだけでよさげ
return ((seed*2+1)*(i+seed))%128;
メルセンヌツイスタを使ったら優もらえるんとちゃうか?
620 :
デフォルトの名無しさん :2010/01/08(金) 15:03:58
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):掃き出し法。 0,1のみを成分にもつn次正方行列Aが2重リストとしてある。Aにmod2の行基本変形を施して、階段行列に変形するプログラム [3] 環境 [3.1] OS:linux [3.3] 言語: C [4] 期限:2010年1月14日 [5] その他の制限: 特にありません。
>>617 コンパイラは何?
- void func(int *x){
void* func(void* args){
int* x = (int*)args;
- return;
return NULL;
- pthread_create(&t[i],NULL,(void *)func,(void *)&i);
pthread_create(&t[i],NULL,func,(void *)&i);
>>614 生成部(randEx)のみ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* #include <omp.h> */
#define randint(nmax) ((int)(rand()/(double)RAND_MAX * (nmax)))
#define NMAPS 9
unsigned int map[NMAPS][128];
void initmap(void) {
for(int y=0; y<NMAPS; y++) {
for(int x=0; x<128; x++) map[y][x] = x;
for(int x=0; x<128; x++) {
int tmp = map[y][x];
int i = x+randint(128-x);
map[y][x] = map[y][i];
map[y][i] = tmp;
}}}
int randEx(unsigned int sd, int i) {
for(int m=0; m<NMAPS; m++) {
i = map[m][(i+sd) % 128];
sd = (sd >> 7) ^ (((sd >> 1) & 0x3f) | ((~(sd & 1)) << 6));
}return i;}
/* チェック用main */
int main(int argc, char *argv[]) {
unsigned int seed = (argc >= 2) ? atoi(argv[1]) : time(0);
initmap();
/* #pragma omp parallel for */
for(int i=0; i<128; i++)
printf("%d\n", randEx(seed,i));
return 0;}
表の生成(initmap)が重いけど、生成は一回でいいので、多数回シャッフルする
なら気にしなくていいかと。何なら事前に計算して定数表として持ってしまってもいい。
623 :
デフォルトの名無しさん :2010/01/08(金) 18:48:07
>>614 randExの中で頑張るより、配列を用意したほうが素直に思える。
お望みのものとは違うけれど、なにかの参考用として。
void init_indices(int *indices, int size, unsigned int sd) {
int i;
srand(sd);
for (i = 0; i < size; i++) indices[i] = i;
for (i = 0; i < size * 2; i++) swap(indices + rand() % 128, indices + rand() % 128);
}
mainの中は、int i, indices[128];こうして、先にinit_indices(indices, 128, seed);としておいて、
swap(&array[i], &array[max/2 + randEx(seed,i)]);ここんとこは単に、
swap(&array[i], &array[max/2 + indices[i]]);として使う。
重複無しは、用意しておいた数列を、swapで混ぜるほうがラク。
int randEx(unsigned int sd, int i)がスムーズに動くような実装は、
ちょっと俺には思いつかない。
>>615 >>618 さんの方法でうまくいくんだろうか。
>>604 とりあえず要求としては全単射な写像になればいいので
極端な話、k個ずらして剰余をとるだけ (k + i)%128 でいい。
更に、奇数倍して剰余を取った ((2*k+1)*i)%128 も全単射になる(ヒント:最小公倍数)
あるいは高々128個なのでテーブルで用意してしまってもいい。
という感じで適当に全単射な写像を用意して合成すれば乱数っぽくなる。
あとは適当にseedに応じて違う写像になるようにすればOK。
>>618 さんのは k=seed にして合成した形になってるね。
>>624 並列プログラムの演習なのでそれをやると
init_indices()のあとに同期が必要になって効率が悪くなる、
という趣旨じゃないかな
>>614 目的がよく分からないけどオーソドックスに
/* ここでsdとiを使って0〜127の重複なしIDを求める */
// ...
static int ar[max/2];
static bool b = false;
if(!b){
srand(sd);
int j;
for(j=0;j<max/2;j++)
ar[j]=j;
for(j=0;j<max/2;j++)
swap(&ar[j],&ar[rand()%(max/2)]);
b=true;
}
id=ar[i];
// ...
jごいく98982371985
じょいがjjlgじょあいgじゃgは
uうこpGゆzXけmFm0んPChけにたぬZajふoKるしp0mHえBCQnかうpIvの7JvTみもiNけ6lへきr7OるHaxGcZuxかRめんZq2いqMFやくんちX95pfTh2nbxwll9ま
632 :
604 :2010/01/09(土) 20:55:08
みんなありがとう。
>>615 >>618 これは!と思って、seedがある程度大きかったり素数だったりしたら上手くばらけそうだと思って試した所、
どうやらi=0の時の初期値が128通り、あとは127通りの傾きで線形的に増減していく感じでした。
しかし、これでも約1万6千のパターンが表せるんですね(あってるのかな…)
>>616 大丈夫です。
>>622 でも指摘あるように複数回シャッフルするので最低2回でarray[0]とarray[2]の交換ができるはずです。
>>622 ( ゚д゚)ポカーン これは不思議。1度作った表でも十分そうだけど、表を更新すればもっと…
>>624 >>625 …たしかに何かしらの専用テーブル作るのがいいかもしれません。
テーブル作ると、値の分布やテーブルの個数によって性質が固定されそうだと思ってたのですが、
>>622 のやり方はそれをうまく解決している気がします。
まだ〆切にも時間あるし、戴いたアイディアをまだ十分吟味しきれてないのでもう少し試行錯誤してみます。
ソースをまた貼るかもしれないのでその時はまたよろしくお願いしまつ|ω・`)
633 :
デフォルトの名無しさん :2010/01/09(土) 21:04:26
[1]授業単元:プログラミング2 [2]問題文:2つの最大50桁の実数を入力し、その和・差・積を求めるプログラム [3] [3.1]Windous Vista [3.2]bcpad [3.3]c++ [4]期限:2010年1月11日17:00 [5]基礎的なことしか習っていないため、できるだけ簡単なものをお願いします
>>633 なんの捻りも無いけど。
#include <gmp.h>
#include <ctype.h>
int main()
{
char a[128],b[128];
scanf("%s",a);
scanf("%s",b);
gmp_printf("------\n");
mpz_t za,zb,ztmp;
mpz_init(za);
mpz_init(zb);
mpz_init(ztmp);
mpz_set_str(za,a,10);
mpz_set_str(zb,b,10);
mpz_add(ztmp,za,zb);
gmp_printf("%Zd\n",ztmp);
mpz_sub(ztmp,za,zb);
mpz_abs(ztmp,ztmp);
gmp_printf("%Zd\n",ztmp);
mpz_mul(ztmp,za,zb);
gmp_printf("%Zd\n",ztmp);
return 0;
}
635 :
デフォルトの名無しさん :2010/01/09(土) 22:59:11
636 :
デフォルトの名無しさん :2010/01/09(土) 23:00:55
637 :
デフォルトの名無しさん :2010/01/09(土) 23:45:50
>632 > 1度作った表でも十分そうだけど、表を更新すればもっと… 表の生成自体はマルチスレッドにして高速化できない一方、 表の合成はマルチスレッドにして高速化できると言う性質があるので、 表の生成は一回限りにして、seed毎に組合せ方を変えて表を合成する事で、 複数のスレッドが並列でrandExを計算できるようにしてあります。 そのため、毎度表を更新すると並列計算による高速化が望めないので、 何の得もないです。念のため。
[1] アルゴリズム [2] 自然数の数列を入力し 数列内にあるnよりも大きい数と小さい数が nの前後にそれぞれ一つ以上ある場合、そのnを出力する。 フローチャートは以下です。 順数列の入力 ↓ ↓ 数列数が5以上 4以下→終了(4以下のときどれも除外できないので) ↓ 数列の中で最大最小の値と 最初と最後に入力した値は除外できる。 ↓ 残りの数値に前後に大小の値が一つ以上あれば除外 ↓ 残った値を表示して終了 [3] 環境 [3.1] OS: Linux [3.3] 言語: C 前スレでも質問させてもらったのですが、うまくいかなかったのでお手数ですが再びレスさせてもらいます。
640 :
デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 00:26:19
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10344.txt 2つの名前を入力してステータス(ランダム)を決定し 途中経過を表示し
攻撃が当たった時は文字色を変える
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:2009年01月12日00:00まで
[5] その他の制限:アップした原文を元に できるだけ簡単にお願いします。
原文の方をコンパイルするとエラーが出てしまい 自分では解決する事が出来ませんでした。
どうかよろしくお願いします。<m(__)m>
1>c:\documents and settingsデスクトップ\battle\battle.cpp(28) : error C2059: 構文エラー : ';'
1>battle - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
[1] 初級C言語実習 [2] 次の関数copyStringを同じ動作をするように書き換えよ。ただし変数の追加、削除(未使用を含む) if文(三項演算子を含む)while,do while,for文 goto文を使用してはならない。 char *copyString(char *s){ char *p=s,*t=s,tmp; if(s==NULL)return NULL; while(*p++); p--;while(!*p)p--; while(p>s){tmp=*p;*p--=*s;*s++=tmp;} return t; } [3] OS:Windows Vista 環境:Visual Studio 2008 言語: C [4] 2010/01/15 [5]冬休みの宿題が未だに出来ずちょっと焦ってます。
644 :
デフォルトの名無しさん :2010/01/10(日) 01:09:23
[1]授業単元:プログラミング2 [2]問題文:次のような10×10の半角文字+を碁盤の目として、一対コンピュータで五目並べ をするプログラムを作成せよ。碁石を表す文字は、半角の@,0を用いよ。 abcdefghij a++++++++++ b++++++++++ c+++++@++++ d++++++0+++ e++++++++++ f++++++++++ g++++++++++ h++++++++++ i++++++++++ j++++++++++ @の場所は、cf , 0の場所は、dg とあらわす ・人とコンピュータのどちらかが先手になるか選択できる ・先手の33を禁止する ・勝敗の判定ができる。(置く場所がなくなったら引き分けとする) ・コンピュータは人が3と4を作った場合、それを止める場所におく ・すでに石がおいてある場所に人が石を置こうとした場合、再入力を促す。 [3] [3.1]Windous Vista [3.2]bcpad [3.3]c++ [4]期限:2010年1月11日17:00 [5]/* で説明も書いてくださると助かります
645 :
デフォルトの名無しさん :2010/01/10(日) 02:04:52
あ、間違えた
>>646 の38〜43行目、length <= 4 のときは何もせずに終了だった
>>645 ちょーてきとー
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(){
char s[6][21],i,count=0;
printf("20文学までの問題文を五⊃入れてください");
for(i=0;i<5;++i){
printf("%d⊃目の問題文:");
gets(s[i]);
}
for(i=0;i<10;++i){
const char*p=s[rand()%5];
printf("問題:%s\n錬習:",p);
if(strcmp(p,gets(s[5])))
puts("不正解");
else{
puts("正解!!");
count = 1 + count;
}
}
puts("********************");
printf("正解数:%d\n",count);
puts("続行するには伺かキ−を押してください . . .");
}
649 :
648 :2010/01/10(日) 02:36:53
>>645 すまんさっきのはバグだらけだった
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(){
char s[6][21],i,count=0;
puts("20文学までの問題文を五⊃入れてください");
for(i=1;i<=5;++i){
printf("%d⊃目の問題文:",i);
gets(s[i]);
}
for(i=0;i<10;++i){
const char*p=s[rand()%5+1];
printf("問題:%s\n錬習:",p);
if(strcmp(p,gets(s[0])))
puts("不正解");
else{
puts("正解!!");
count = 1 + count;
}
}
puts("*******************");
printf("正解数:%d\n",count);
puts("続行するには伺かキ−を押してください . ..");
}
何回も申し訳ないが
>>646 の補足
アルゴリズムの授業なので計算量について考えておく必要がある。
数列のn[i]について毎回「n[i]の前後にn[i]よりも大きい数と小さい数があるか」を調べる場合、
計算量は数列の長さをLとして O(L^2)かかる。
一方、
>>646 のように、n[i]までの最大値と最小値を先に計算してしまうと計算量はO(L)で済む。
この差は数列の長さが100万とかになると歴然とした速度差になる。
その代わり、追加の配列を4つ使っているのでメモリの使用量は5倍になっているが、
オーダーが変わっているわけではないので通常問題にはならない、はず。
大小の比較 と forward_max[i] != nums[i]... ってどっちが効率いい? かわんない?
653 :
デフォルトの名無しさん :2010/01/10(日) 03:21:52
>>648 >>649 ご回答有難うございます。
ただ見ても全く意味がわからない…
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
const char*p=s[rand()%5+1];
if(strcmp(p,gets(s[0])))
とかって一体何なんだ…?
これもう少し長くてもぜんぜんいいんで、ものすごく簡単にできませんか?
超初心者の私でもわかるぐらいに…
>>652 そこじゃなくって、最後のifの forward_max[i-1] > nums[i]...を
forward_min[i] != nums[i]...ってしても条件は満たせるじゃない?
>と!=ってどっちがはやいのかなって思っただけ。
655 :
648 :2010/01/10(日) 03:29:43
#includeがまったく意味が分からんとか言われるとどうすりゃいいんだろう...
>>654 ああ、そこかw
整数型の比較演算子はどれ使っても速度は変わらない。
(物凄く命令の少ないマイコンだと違うかも知れないが…)
そこを気にするならむしろ
for(i = 1; i < length-1; i++){...} でlength-1の計算が毎回発生する方を気にすべき
i+1(修正前ならi-1も)の計算回数の方が多いですよw
>>657 言われると思ったw
そこまで言うならbackward_max, backward_minに関しても具体的な値は不要で、
単に最大・最小が変化したかのフラグの配列を1本記録するだけでいいわけです
どのみちオーダー的にはO(L)のアルゴリズムなのでこの辺で勘弁願いたいw
[1] 授業単元: オペレーティングシステム [2] 問題文(含コード&リンク): fork,exec*システムコールを用いて簡単なコマンドインタープリタ (mysh)を作成せよ。但し、作成するコマンドインタープリタは以下の 機能をサポートすること。 ・設定ファイル(.path)にコマンドサーチパスを指定することが出来る。 なお、ファイル内のパスの指定方法は、各自が考え定義すること。 (パスにないコマンドを入力した場合には、見つからない旨のエラー メッセージを出力すること。) ・パイプを利用して複数(可変個)のコマンドの入出力を結合する ことができる。 ・リダイレクションを使用してコマンドへの入力をファイルから得たり、 ファイルへ出力したりすることができる ・コマンド実行中にCtrl-Cを入力すると、現在のコマンドの実行を 中断する ・exitを入力すると、myshを終了する。 [3] 環境 [3.1] OS: windowsXP,cygwin [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:C言語 [4] 期限: ([2010年01月20日23:59まで] [5] その他の制限: ファイル入出力、プロセス制御、パイプ生成に 関してはシステムコールを用いること。 execveを使ってやりたいんですがよくわかりません。 よろしくお願いします
>>634 それはなにか多バイト長演算ライブラリを使用するのでは?
663 :
639 :2010/01/10(日) 12:28:23
>>646 ご回答ありがとうございます。
しかし、コンパイルしようとしたら見たことないエラーが出てきて困ってしまいました。
peeling.c:48: error: redefinition of 'i'
peeling.c:45: error: previous definition of 'i' was here
peeling.c:48: error: 'for' loop initial declaration used outside C99 mode
peeling.c:54: error: redefinition of 'i'
peeling.c:48: error: previous definition of 'i' was here
peeling.c:54: error: 'for' loop initial declaration used outside C99 mode
どう手直ししたら良いのかも教えてください。
ヒント:あちこちにint iが宣言されている
>663 6c6 < bool get_int(int* i){ --- > int get_int(int* i){ 48c48 < for(int i = 1; i < length; i++){ --- > for(i = 1; i < length; i++){ 54c54 < for(int i = length-2; i >= 0; i--){ --- > for(i = length-2; i >= 0; i--){
666 :
639 :2010/01/10(日) 12:43:33
>>664-665 ありがとうございました!
おかげさまで実行させることができました。
646氏にも、もちろんすごく感謝しています!!
http://pc12.2ch.net/test/read.cgi/tech/1258158172/819 >>639 人のだけど、入力のところだけ修正したもの。
#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, length = 0, a[256] = {4,8,2,1,7,9,3,5,6};
printf("start input. end = E<ENTER>\n");
while( length < 256 && scanf("%d%*c", &a[length])) length++;
printf("end input.\n");
for(i=0; i<length; i++)
if(f(a, i, length))
printf("%d ", a[i]);
return 0;
}
652に比べると相当効率悪いな
>>658 こんな感じ?
#include <stdio.h>
int main(void)
{
int i, j, min, max, a[256], check[256];
for(i=0; scanf("%d", a+i)==1 && i < 256; i++);
if(i<=4) return 0;
if(a[i-1] > a[i-2]) max = a[i-1], min = a[i-2];
else max = a[i-2], min = a[i-1];
for(j=i-3; j>=2; j--) {
if(a[j] > max) max = a[j];
else if(a[j] < min) min = a[j];
else check[j] = 1;
}
if(a[0] > a[1]) max = a[0], min = a[1];
else max = a[1], min = a[0];
for(j=2; j<=i-3; j++) {
if(a[j] > max) max = a[j];
else if(a[j] < min) min = a[j];
else if(check[j]) printf("%d ", a[j]);
}
return 0;
}
初期化忘れた、check[256] = {0}だな
672 :
今年の未解決問題 :2010/01/10(日) 17:51:35
>>644 [-]2010年1月11日17:00 一対コンピュータで五目並べ
>>642 [-]2010/01/15 次の関数copyStringを同じ動作をするように書き換えよ。
>>640 (10344)[-]2010年1月12日00:00まで 2つの名前を入力してステータス(ランダム)を決定し 途中経過を表示し攻撃が当たった時は文字色を変える
>>637 (10343)[-]2010年1月11日 23:00 1次元配列を2次元配列に・2次元配列を1次元配列に変換する二つのモジュール
>>620 [-]2010年1月14日 掃き出し法。 0,1のみを成分にもつn次正方行列Aが2重リストとしてある。Aにmod2の行基本変形を施して、階段行列に変形するプログラム
>>637 その問題文だけだとサイズが決まらないんだが、
こんなもんだろうか
int Conv_1Dto2D(unsigned char *src, unsigned char dest[][X_SIZE]){
int i;
unsigned char* p = &dest[0][0];
for(i=0; i < X_SIZE*Y_SIZE; i++) *(p++) = *(src++);
return i;
}
int Conv_2Dto1D(unsigned char src[][X_SIZE], unsigned char *dest){
int i;
unsigned char* p = &src[0][0];
for(i=0; i < X_SIZE*Y_SIZE; i++) *(dest++) = *(p++);
return i;
}
>>640 >>641 で解決してると思うけど一応
そんな分かりやすいコンパイルエラーで困られても困る
コンパイラに言われたとおり
28行目: teban = rand()%;
%は二項演算子なので%の後に数字が来ないのはおかしい。
周りから判断して
28行目: teban = rand()%2;
じゃないかね
676 :
デフォルトの名無しさん :2010/01/10(日) 19:52:56
>>642 問題の意図がよく分からんが、whileが1つ余計なので削除できる
char *copyString(char *s){
char *p=s,*t=s,tmp;
if(s==NULL) return NULL;
while(*++p);
p--;
while(p>s){tmp=*p;*p--=*s;*s++=tmp;}
return t;
}
678 :
デフォルトの名無しさん :2010/01/10(日) 20:50:57
内容と名称が一致してない関数って最悪
680 :
デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 20:59:31
>>641 >>675 のお二方ありがとうございます。
teban = rand()%2;
としたところ最初だけ勝敗が表示された後、何も表示されなくなりました;
決着ついたらループ抜けてるんだから当たり前だろ
682 :
デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 21:09:29
>>681 解答ありがとうございます。
もう一度実行しなおしたり ビルドしなおしても何も表示されず デバッグのエラーが出るのです。
そのエラーを具体的に書かないと。
685 :
デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 21:26:23
>>683 一部コメントのままビルドしていました。
お騒がせして申し訳ありませんでした。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):2つの名前を入力しステータス(ランダム)を決定し 勝敗表示する。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:2009年01月12日05:00まで
[5] その他の制限:C言語を習っているもののほとんど理解できていないので 簡単にお願いします。
ポインタや構造体は一応習いました。
2度目になりますがよろしくお願いします。
>>675 rand() の剰余をとる乱数発生法はあまりよくないものとされている。
他の方法というと?
>>686 よくないって言ったって、標準で付いてるんだから使わない手はない。
>>684 (10341)
>>617 並列に実行される複数のスレッドで、パラメータを同一アドレスで渡している為,
アドレスで示されるパラメータ内容を実行中に変更してしまっている。
>>662 残念ながら整数かつ桁数固定の多バイト長演算。
>>690 ありがとうございます
ですがCじゃないとだめなんです・・・
694 :
690 :2010/01/10(日) 23:45:46
>>693 甘えんなカス
答えてもらっただけでもありがたいと思え
>>694 質問のテンプレにもちゃんとCと書いてあるのにそれはどうかと
そもそも甘えるななんて言ったらこのスレいらなくね?
制約条件を守らずにコーディングしたところで、それはゴミ。
なりすましじゃねーの?
698 :
639 :2010/01/11(月) 00:03:04
>>671 どうもです。
>>652 のレスを見逃していました。すいません・・・
いろいろと勉強になりました。ありがとうございます!
700 :
699 :2010/01/11(月) 00:31:26
なんか
>>694 にドッペルゲンガーが居るwww
それはそうと57行目の
> strcpy(dst->name, buf);
これやばいな。bufが長いと落ちる。
この行の前に
if(strlen(buf) > 6){
return 2;
}
を入れといてくれや。
>>700 2度もわざわざありがとうございます
動作確認もちゃんとできました
C++で書いてくださったものは、自分が今後C++を勉強する際に参考にさせていただきます
[1] 授業単元: C [2] 問題文(含コード&リンク): 100以下の素数をすべて出力するプログラムを作りたい。 自然数xに対して2以上で√x以下の素数で割り切れない数が素数である。ただし1は素数でも合成数でもない。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年1月13日まで よろしくお願いします
#include <stdio.h> int main(){ int i , chk , f , ii; for( i = 2 ; i <= 100 ; i++ ){ chk = 0; f = i / 2; ii = 2; while( f >= ii ){ if( ( i % ii ) == 0 ){ chk = 1; break; } ii++; } if( chk == 0 ){ printf("%i ", i ); } } }
あ、一番最後に}を付け足しといて
すまん、やっぱりいらなかった
>>703 #include <stdio.h>
int main(void){
int primes_less_than_100[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,
47,53,59,61,67,71,73,79,83,89,97,0},*p=(int*)&primes_less_than_100[0];
while(*p) printf("%d ",*p++);
printf("¥n");
return 0;
}
それ素数か証明して
709 :
デフォルトの名無しさん :2010/01/11(月) 18:24:16
>>702 こんなに早く、ありがとうございます。
command1.txtはすみません。
以後気をつけます。
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 数値には初期値が与えられている。 この配列を昇順に並べ替えるプログラムを作成しなさい。 表示結果: 数値[00]=80 数値[01]=40 数値[02]=23 数値[03]=69 数値[04]=10 ソート後 数値[01]=10 数値[02]=23 数値[03]=40 数値[04]=69 数値[03]=80 [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C言語 [4] 期限: 1月18日0:00まで どなたかよろしくお願いします。
>>703 #include <stdio.h>
int main(void)
{
int prime[100] = {2}, i, j, cnt = 1;
for(i=3; i<=100; i+=2) {
for(j=0; prime[j]*prime[j]<=i; j++) {
if(i % prime[j] == 0) goto L;
}
prime[cnt++] = i;
L:
}
for(i=0; i<cnt; i++) printf("%d ", prime[i]);
return 0;
}
>>710 #include <stdio.h>
int main(void)
{
int arr[] = { 80, 40, 23, 69, 10}, i, j;
for(i=0; i<sizeof arr / sizeof *arr; i++) printf("数値[%02d]=%d\n", i, arr[i]);
for(i=1; i<sizeof arr / sizeof *arr; i++) {
int tmp = arr[i];
for(j=i; j > 0 && tmp < arr[j-1]; j--) arr[j] = arr[j-1];
arr[j] = tmp;
}
printf(" ソート後\n");
for(i=0; i<sizeof arr / sizeof *arr; i++) printf("数値[%02d]=%d\n", i, arr[i]);
return 0;
}
>>709 ごめん、メモリリークしてた。
次の患者の呼び出しで患者の情報を表示した後に
release_patient(pat);
入れてメモリ解放するようにしといて
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): 文字列text[]と文字列pat[]が与えられたとき、文字列text中に文字列patが含まれるときは最初に現れるその文字列の先頭の位置(0〜)を返し、含まれないときは-1を返す関数searchを作成せよ。 また、その関数を用いて、2つの文字列text[]とpat[](空白は含まない)を入力すると関数searchの値を返すプログラムを作成せよ。ここでtextとpatには長さ1以上の文字列が入っているものとする。 (例:text[]="thisisatesttextdata"の中に、pat[]="this"は0の位置に、pat[]="test"は7の位置に現れる。) [3] 環境 [3.1] OS: ubuntu [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年01月12日12:00まで [5] その他の制限: #include<stdio.h>のみで。ポインタ、構造体などは習っていません。基本的な変数の型とよく使う関数,配列,if,for,while,文字列char,関数の定義と引数については習いました。 よろしくお願いします。
int search(char text[], char pat[]) { int i, j; for(i=0; text[i]; i++) { for(j=0; pat[j] && text[i+j]==pat[j]; j++); if(!pat[j]) return i; } return -1; } int main(void) { char text[256], pat[256]; scanf("%s%s", text, pat); return search(text, pat); }
[1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): 再帰を使って自然対数の底eを求めるプログラムを作成しなさい 下記のようにnを0から30まで増加させながら n=0のときe=1/0! n=30のときe=1/0!+1/1!+1/2!+1/3!+……1/30! の計算を行い下記のように表示しなさい n=0:e=1.000000000000000 n=1:e=2.000000000000000 ・ ・ n=30:e=2.718281828459046 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:1月18日24時まで よろしくお願いします
>>718 #include <stdio.h>
int main(void)
{
int n = 0;
double e = 0.0, d = 1.0;
while(n <= 30) {
e += d;
printf("n=%2d:e=%.15f\n", n, e);
d /= ++n;
}
return 0;
}
>>716 助かります。
本当にありがとうございました。
722 :
◆15kd2wtP2Y :2010/01/11(月) 22:56:09
[1]授業単元:プログラミング2 [2]問題文:以下の機能を備えた対コンピュータの五目並べを作成せよ ・置く場所を縦と横の数字で指定する ・人とコンピュータのどちらかが先手になるか選択できる ・先手の33を禁じる ・勝敗の判定ができる(置く場所がなくなったら引き分け) ・コンピュータは人が3と4を作った場合、それを止める場所に石を置く ・すでに石がおいてある場所に人が石を置こうとした場合、再入力を促す [3]環境 [3.1]Windous [3.2]bcpad [3.3]c++ [4]期限1月15日 [5]かなり焦っています。簡単な説明も書いて下さったら助かります
>>674 #definで指定してあったため記入し忘れてました
有難うございました
724 :
デフォルトの名無しさん :2010/01/12(火) 01:34:27
>>643 遅くなってしまいましたが、ありがとうございました
とても助かりました。
725 :
708 :2010/01/12(火) 08:34:11
>>707 どうせ、いつもの早押し勝ち抜け選手だろう。
>>711 Borlandならいいけど、L: の後に;付けないとgccではコンパイルエラー。
#include <stdio.h>
int main(void) {
int prime[100] = {2}, i, j, cnt = 1;
for(i=3; i<=100; i+=2) {
for(j=0; prime[j]*prime[j]<=i; j++) {
if(i % prime[j] == 0) break;
}
if(i % prime[j] == 0) ; else
prime[cnt++] = i;
L: ;
}
for(i=0; i<cnt; i++) printf("%d ", prime[i]);
return 0;
}
726 :
デフォルトの名無しさん :2010/01/12(火) 10:42:51
[2] 問題文(含コード&リンク):29個ある変数(それぞれに最大値と最小値あり)の正規化 をする(0〜1に) [3] 環境 [3.1] OS:windowsXP [3.3] 言語:C++ [4] 期限: 本日中 [5] その他の制限:ライブラリは使用禁止 よろしくお願いします
>>726 1つの変数に最大値と最小値が混在してるの?
変数の型も書いてないしさぁ。荒らしか?
仮数部が29桁かな
731 :
726 :2010/01/12(火) 12:28:18
>>728 混在というか変数の範囲が最小値から最大値ということです
変数はdouble型でお願いします
>>729 荒らしではありません
>>731 変数は配列で、double n[29]でいいのでしょうか?
変数にはどうやって値を与えるのでしょうか?
最小値と最大値は教えてもらえないのでしょうか?
733 :
726 :2010/01/12(火) 12:48:40
>>732 よくわかりませんがそれで良いと思います。
値の与え方は当方もいまだ模索中です。
変数の最大値、最小値はバラバラなので全て書くことは出来ませんが
一つ目の変数は、最大値14.000、最小値13.000です。
変数を正規化するプログラムがわからないのが最大の問題です
・問題文は、出題されたまま全文を書いてください。
736 :
708 :2010/01/12(火) 15:41:38
>>733 これでいイカ?
正規化1=(変数1−最小値)/(最大値−最小値)
正規化2=(変数29−最小値)/(最大値−最小値)
:
正規化29=(変数29−最小値)/(最大値−最小値)
変数の値が、最大値と最小値の間にあれば、線形に正規化した値は0〜1になる。
じゃあ、こうでいいんじゃないかな? あとはデータをずらずらと書いていくと。 #include <stdio.h> typedef struct { double value; double min; double max; } Number; int main() { int i; Number n[] = { {14.0, 13.0, 14.0}, {14.0, 13.0, 15.0}, {14.0, 13.0, 16.0}, {14.0, 13.0, 17.0} }; for(i=0; i < sizeof n / sizeof *n; i++) printf("%f => %f\n", n[i].value, (n[i].value - n[i].min) / (n[i].max - n[i].min)); }
>>737 そういうことだろうな
>>726 本当にそんな問題文だったのかい?
口頭で出されたなら同じ授業を受けたできそうな奴に聞いた方がいい
739 :
デフォルトの名無しさん :2010/01/12(火) 17:41:13
またお前か。帰れ。
>>741 出力に単位つけるの忘れてた
>>742 の73,74行目にg足しといて
毎回貼ってから気づくorz
[1] プログラミング [2] 0から10の中からランダムに整数の2組を決める。それを平面上の座標として、座標を10個つくる。 ユーザに座標を入力させ、その点から最も遠い点と近い点を求める。 最も近い点がユーザが入力した点と重なったら◎を出力する。 結果は下記のように出力。 △ △ △ × ○ ● ×:ユーザが入力した点 ○:最も近い点 ●:最も遠い点 △:それ以外の点 [3] 環境 [3.1] Windows [3.2] bcpad [3.3] C++ [4] 1月末まで
それ楽なのか? あとfarestはねーよw
>>746 名前の衝突気にせずにがんがん定数を定義できるあたりがとても
そいやfarthestだったな、前にも言われたわw
sqrt()いらね
test
752 :
デフォルトの名無しさん :2010/01/13(水) 14:56:43
[1] 授業単元: プログラミング [2]問題文: モンテカルロ法による円周率の近似値の計算を行うプログラムを書け。 生成する点の個数はキーボードから受け取るようにせよ。 乱数の生成にはMersenne twisterを用いよ。 [3] 環境 [3.1] Linux [3.2] gcc [3.3] 言語: c
またお前か。帰れ。
755 :
デフォルトの名無しさん :2010/01/13(水) 15:49:09
>>754 また私です。
お願いします。
自力でやったんですけど、あれだけわからなくて・・
あーどうしましょう
>>750 #include "stdio.h"
int sasho(double a, double b, double *sa, double *sho) {
*sa = a - b;
if (b == 0) return 0;
*sho = a / b;
return 1;
}
void printsasho(double sa, double sho, int validsho) {
if (validsho) {
printf("sa = %f, sho = %f\n", sa, sho);
} else {
printf("sa = %f\n", sa);
}
}
void testsasho(double a, double b) {
double sa, sho;
int validsho;
validsho = sasho(a, b, &sa, &sho);
printsasho(sa, sho, validsho);
}
int main() {
testsasho(0.5963, 0.193);
testsasho(0.78364, 0);
return 0;
}
758 :
デフォルトの名無しさん :2010/01/13(水) 20:23:59
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 非線形方程式の解を求めるアルゴリズムのひとつに、ニュートン法と呼ばれる方式がある。 この方法ではf(x)=0の解の近似値を次の漸化式から求める。 x_(i+1) =x_i - f(x_i)/f'(x_i) x_i の初期値を x_0 としたとき i=1から i=5すなわちx_1からx_5までをC言語で順次計算して示せ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2010/01/15 [5] その他の制限:特に無し 計算結果も書いていただけると助かります。 お願いします。
761 :
759 :2010/01/13(水) 21:03:57
762 :
デフォルトの名無しさん :2010/01/13(水) 21:07:35
>>761 ありがとうございます。
できれば他の問題もよろしくお願いいします!
>>762 問題1
#include <stdio.h>
typedef struct Complex{
double r;
double i;
};
void add(struct Complex* R,struct Complex X,struct Complex Y){
R->r=X.r+Y.r;
R->i=X.i+Y.i;
}
void mul(struct Complex* R,struct Complex X,struct Complex Y){
R->r=X.r*Y.r - X.i*Y.i;
R->i=X.r*Y.i + X.i*Y.r;
}
int main(){
struct Complex X,Y,a,m;
X.r=2.0;X.i=1.0;
Y.r=1.0;Y.i=2.0;
add(&a,X,Y);
mul(&m,X,Y);
printf("X=%.1f+%.1fi\n",X.r,X.i);
printf("Y=%.1f+%.1fi\n",Y.r,Y.i);
printf("X+Y=%.1f + %.1fi\n",a.r,a.i);
printf("X*Y=%.1f + %.1fi\n",m.r,m.i);
return 0;
}
764 :
デフォルトの名無しさん :2010/01/13(水) 21:25:15
>>763 ほんと、ありがとうございます。
できればでいいので、他のもよろしくお願いします。
>>764 問題2
#include <stdio.h>
int main(){
FILE *fin,*fout;
int c;
if((fin=fopen("in.txt","r"))==NULL)
return -1;
if((fout=fopen("out.txt","w"))==NULL)
return -1;
printf("\n/*********************************\n");
printf("* src *\n");
printf("*********************************/\n");
while((c=fgetc(fin)) != EOF){
fputc(c,fout);
putc(c,stdout);
}
fclose(fin);
fclose(fout);
if((fin=fopen("out.txt","r"))==NULL)
return -1;
printf("\n/*********************************\n");
printf("* dest *\n");
printf("*********************************/\n");
while((c=fgetc(fin)) != EOF){
putc(c,stdout);
}
fclose(fin);
return 0;
}
767 :
デフォルトの名無しさん :2010/01/13(水) 21:52:43
>>765 ありがとうございます。
あと問題3だけなんですが、わかる方よろしくお願いします。
横から失礼するが double型変数bをifの条件分岐に用いているが、これって良いの?
769 :
768 :2010/01/13(水) 21:58:40
770 :
デフォルトの名無しさん :2010/01/13(水) 22:13:58
[1] 授業単元:C言語 [2]問題文: 下記の機能を備えた極めて単純なデータベースシステムであるカード型データベースシステムの構築を考える。 新しい科目を登録する機能 すでに登録されている科目を修正(更新)する機能 登録科目のソート(並び替え)を行う機能 登録科目の一部分のみを検索して取り出し、表示する機能 登録科目から、卒業までに必要な単位を計算し、表示する機能 卒業要件を簡略化しても良い. [3] 環境 [3.1] windowsXP [3.2] Visual Studio 2003 [3.3] 言語: c [4] 期限: 1月22日
問題分が足りてなかったので再投稿させてもらいます。 [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 非線形方程式の解を求めるアルゴリズムのひとつに、ニュートン法と呼ばれる方式がある。 この方法ではf(x)=0の解の近似値を次の漸化式から求める。 ただしf'(x)はxによる微分を表す。 x_(i+1) =x_i - f(x_i)/f'(x_i) f(x)=2^2-e^x-2=0 x_i の初期値を x_0 としたとき i=1から i=5すなわちx_1からx_5までをC言語で順次計算して示せ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2010/01/15 [5] その他の制限:特に無し 計算結果も書いていただけると助かります。 お願いします。
772 :
デフォルトの名無しさん :2010/01/13(水) 22:23:55
1] 授業単元: プログラミング [2]問題文:氏名,年齢,性別が5人分書かれた次のようなテキストファイルを読み 込んで、両面に表示するプログラムを作成せよ.このとき,構造体を利用 せよ. (入力ファイル:test.txtの中身) Tanaka 31 Man Kawai 24 Man Suzuki 22 Woman ltoh 40 Woman Sugita 37 Man [3] 環境 [3.1] Linux [3.2] k-term emacsで作成するやつ [3.3] 言語: c
[1] 授業単元:C言語 [2]問題文: 二次関数 f(x) = x2 について、x=0から3までの定積分を求めたい。 区分求積法により、この積分の近似値を求めよ。 x軸方向の刻み幅Δxを0.1とする。 [3] 環境 [3.1] windowsXP [3.2] Visual Studio 2003 [3.3] 言語: c [4] 期限:10時くらいまで
776 :
デフォルトの名無しさん :2010/01/14(木) 11:14:56
コンパイル時にプリプロセッサを駆使して ソース中の文字列を暗号化して埋め込もうとしたけど無理だね
778 :
620 :2010/01/14(木) 14:34:13
>>673 ありがとうございます。自分が作ったのだと、下半分んみならず上半分も掃き出してしまって意味がわからなくなっていました。
>>757 お礼遅れてごめんなさい。助かりました。ありがとうございました。
780 :
620 :2010/01/14(木) 20:23:39
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 0,1のみを成分にもつn次正方行列Aは各行を2進数とみなして整数のリストとして表現できる。
たとえば 3次正方行列は 1,0,0/0,1,0/0,0,1は{4,2,1}
これに掃き出し法を適用し、{5,6,3}と入力したとき{5,3,0}と出力されるプログラムを作れ。
ヒントとして、行の入れ替えは数字の入れ替えになる。
n桁2進数xの下位から、上位からの数字はそれぞれどう書けるか考える。
[3] 環境
[3.1] OS: XP
[3.3] 言語: C
[4] 期限: 2010年1月21日
>>673 さんに作っていただいたプログラムを基に作るようになります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10350.txt まず正方行列の次数をきめ、入力できる10進数の最大値を表示、その後その範囲で数値をn回キーボードから入力した後、掃き出し法を行い、その正方行列の行の値を10進数に変換するプログラムです。
前回は本当に助かりました。一応自力でできましたが、
>>637 さんので自分の組み方の汚さにへこみました。
今回もよろしくお願いします。
>>768 割り算の割る数をチェックしているだけだから、fabs(b) < epsilon とする必要はあまりないかと。
782 :
デフォルトの名無しさん :2010/01/14(木) 22:20:20
>>783 >>768 じゃないけど
科学技術計算とかだと丸め誤差とかで、実数に「==」は使うな
って教えられる場合があるからじゃね?
>>784 それが理由なら
条件分岐に〜という前振りの必要なく
多倍長浮動小数でなくdouble型を使っていいの?という質問になると思う
割る数のチェックの場合、エラーの回避が目的ならば
0.0と厳密に一致するかをチェックするだけで十分。
(更に、必要ならば割り算のあとで結果がINFになってないか確認)
2つのdoubleで表現された値が同じかを判定するときは許容誤差eplisonを使って
if( fabs(a-b) < eplison ){...}
で判定する。
>>785 固定ビット長の表現を使う限り丸め誤差の問題は逃れられないよ
788 :
デフォルトの名無しさん :2010/01/14(木) 23:35:30
789 :
785 :2010/01/14(木) 23:52:03
>>787 だからそう言ってるのですが・・・
アンカー間違い?
>>789 多倍長でも、ビット数は有限だkら丸め誤差はあるでしょう?
>>789 すまん、表現を間違えた。
浮動小数表現を使う限り丸め誤差の問題は逃れられないよ
0.1を2進数表現する場合、無限桁が必要になるので
どんなに桁数を増やしたところで丸め誤差は必ず生じる
>>775 #include <stdio.h>
double f(double x){
return x*x;
}
double integral(double a, double b, double h){
int n = (int)((b - a) / h);
double sum = (f(a) + f(b)) / 2;
for(int i = 1; i < n; i++){ sum += f(a + i*h); }
return sum * h;
}
int main(){
printf("%f", integral(0, 3, 0.1));
}
>>792 それ区分求積法じゃなくて、台形公式じゃね?
>>794 勘違いしてた
区分求積法の一部に台形公式とかシンプソン則があると思ってたぜ
#include <stdio.h>
double f(double x){
return x*x;
}
double quadrature_by_parts(double a, double b, double h){
int n = (int)((b - a) / h);
double sum = 0;
for(int i = 0; i < n; i++){ sum += f(a + i*h); }
return sum * h;
}
int main(){
printf("%f", quadrature_by_parts(0, 2, 0.01));
}
[1] プログラミング演習 [2] 標準入力から読み込んだテキストファイルを辞書順に整列して標準出力する。 辞書順:文字列比較の順番はASCIIコード文字順をベースとした辞書順であるが、文字順が一部 が変更される A<a<B<c<C<c..... [3] OS: Turbo-Linux-Fuji コンパイラGCC4.0 言語:C [4] 2/1迄 [5] 作業用ファイルwork.dat(内容は自由、サイズ無制限とする。プログラム終了時点で削除する必要は無い ものとする。) を使用出来る。stdio.hで定義されている標準ライブラリ関数、定数を利用出来る。 整列アルゴリズムは自由とする。 私にはとても難しいので助けて下さい。
797 :
デフォルトの名無しさん :2010/01/15(金) 05:29:13
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):問題1 戻値を持たず、一つの double 型の引数を持ち、過去に関数が 呼ばれた時、全ての引数の値の総和を表示する関数、d_total を定義し、動作の確認ができるプログラムとして作成せよ。例えば、 d_total(0.1); d_total(0.2); d_total(0.3); と呼べば、d_total の内部の処理にて 0.1 0.3 0.6 と表示するということである。 ただし, プログラム中の変数として、外部変数は使ってはな らない。「内部変数か」自動変数のみを使って実現せよ。 問題2 戻値を持たず、二つの float 型のポインタの引数を持ち、二つ の引数の値を交換する関数、f_swap を定義し、動作の確認がで きるプログラムとして作成せよ。 問題3 4行4列のint型の行列を、転置するプログラムを作成せよ。動作の確認のため、転置前と転置後 の行列の内容を表示するようにせよ [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月17日 20時まで [5] その他の制限:特になし
[1] やさしいC [2] 次の関数workをコンパイル出来るように,正しく動作するように修正し、 正しく実行出来るかどうかを確かめられるプログラムを作りなさい。 double *work(double[] a,int N){ double result[N]; result[0] = a[N-2] ,a[N-1],a[0],a[1] a[2]を1:3:4:3:1の重みで平均した値 result[1] = a[N-1],a[0],a[1],a[2] を1:3:4:3:1の重みで平均した値 result[2] = a[0],a[1],a[2],a[3]を1:3:4::3:1の重みで平均した値 result[3] = a[1],a[2],a[3],a[4] を1:3:4:3:1の重みで平均した値 .... result[N-2] = a[N-4],a[N-3],a[N-2],a[N-1],a[0] を1:3:4:3:1の重みで平均した値 result[N-1] = a[N-3],a[N-2],a[N-1],a[0],a[1] を1:3:4:3:1の重みで平均した値 return (double)&result[0]; } [3] OS:Mac-OSX (Leopard) コンパイラ:gcc 3.0 (XCode) 使用言語:C [4] 2/1迄 [5] レポート課題です。よろしくお願いします。
問題1と2(動作確認無し)
void d_total(double d){
static double sum=0;
char buff[32];
int i;
sprintf(buff,"%f",sum+=d);
printf("%d\n",strlen(buff));
for(i=strlen(buff)-1;i>=0;i--){
if(buff[i]=='0')
buff[i]=0;
else break;
}
printf("%s\n",buff);
}
void f_swap(float* f1,float* f2){
float tmp;
tmp = *f1;
*f1 = *f2;
*f2 = tmp;
}
>>798 問題文そのまま張ってみ
[1]Cプログラミング演習 [2] 関数 op(int a,int b,int c)は次の結果を返す。 結果: a op1 b op2 c op3 a op4 b op5 c (op1,op2,op3,op4,op5は + - * %(剰余) xor and orの何れか一つ) +:演算0 -:演算1 *:演算2 /:演算3 xor:演算4 and:演算5 or:演算6 op1=(3*a+5*b)の7による剰余がkの場合、演算kを選択 op2=(5*b+4*c)の7による剰余がkの場合、演算kを選択 op3=(a+3*c)の7による剰余がkの場合、演算kを選択 op4=(a+2*b)の7による剰余がkの場合、演算kを選択 op5=(3*c+2*b)の7による剰余がkの場合、演算kを選択 ここで演算子の優先順位は高い順に + > - > * > % >xor > and > orとする 例えば1 + 3 xor 5 * 7 - 5は(1+3) xor (5*(7-5))を意味する 関数opをコードせよ。どのような演算が行われたか具体的に出力するprintf文も同時に出力すること。 [3] Windows Vista/Visual-C++ 2008/C言語 [4] 1/26迄
801 :
800 :2010/01/15(金) 07:35:17
一部転記ミスがありました。修正します。すみませんでした。 修正前 → +:演算0 -:演算1 *:演算2 /:演算3 xor:演算4 and:演算5 or:演算6 修正後 → +:演算0 -:演算1 *:演算2 %(剰余):演算3 xor:演算4 and:演算5 or:演算6 よろしくお願い致します。
>横から失礼するが >double型変数bをifの条件分岐に用いているが、これって良いの? アンカー付けろよ
803 :
800 :2010/01/15(金) 07:51:53
重ね重ねすみません。[5]を書き忘れてました。 追加:[5] opから呼び出せる関数はprintfのみとする。 多分もう無いと思います。2度も修正して申し訳ございません。
質問者の皆様へ 問題文はなるべく一度にミスなく転記して下さるようお願いします。回答が遅れます。 回答期限が短過ぎる場合、回答してもらえない場合があります。 どんな問題でも最低3日はかかると思って下さい。 問題の種類や書き方によっては、回答が無かったり、定まらない場合もありますので、その場合は 回答してもらえないかもしれません。
実際には一時間以内の回答が一番多いのですか、過度な期待はしないでくださいの意です。
できれば、質問者は、授業単元の箇所に、教育機関の種類(大学院/大学/専門学校/高等学校/工業 高等専門学校)や講座名、レポート課題、自由課題、とかの情報を匿名性を十分に保った 状態で記述して欲しいです。(例:M大学理工学部 教養課程授業「プログラミング実習」) 授業形式をとっていても、企業研究所の研究作業に準ずるものや研究室のゼミ課題とか、専門性 業務性が高過ぎるものに関してはここで質問することは不適です。(回答することも良いことでは ありません)
808 :
798 :2010/01/15(金) 09:54:08
>>804 ありがとうございます。大いに参考にさせて頂きます。
809 :
804 :2010/01/15(金) 14:27:31
>>798 間違ってはいないけど、問題に合うように訂正。
double* a → double a[ ]
[1] 授業単元:プログラミング論(大学) [2] 問題文:softbankのiPhoneの使用料金を計算するプログラムを作りなさい [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] 言語: C [4] 期限: 01/15 [5] その他の制限: 基礎しか習っていませんif,for,while,switch,scanf,getsあたりまで終了済み ぎりぎりで申し訳ありませんがよろしくお願いします。
特定の企業の営利活動に関係する業務性が高いプログラムである件 期限が1/15(本日)という件 釣りもいいけど..ほどほどに
[1] 授業単元: 授業ではないですがお願いします [2] 問題文(含コード&リンク): 100個の0〜10までの数字があるとするとき0じゃない数字の個数を数えて表示させたいんですが どうすればいいのかよくわかりませんのでお願いします [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:g++ [3.3] 言語:C++ [4] 期限:とくになし [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
>>812 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
int main(){
int a[N],i,count=0;
srand(time(NULL));
for(i=0;i<N;i++)a[i]=rand()%11;
for(i=0;i<N;i++)if(a[i]!=0)count++;
printf("%d\n",count);
return 0;
}
>>796 http://codepad.org/vCLLPsVC >>797 http://codepad.org/RKjOgsTY >>807 > 質問者は、授業単元の箇所に、教育機関の種類(大学院/大学/専門学校/高等学校/工業
> 高等専門学校)や講座名、レポート課題、自由課題、とかの情報を匿名性を十分に保った
> 状態で記述して欲しいです。
別にいりません。
> 企業研究所の研究作業に準ずるものや研究室のゼミ課題とか、専門性
> 業務性が高過ぎるものに関してはここで質問することは不適です。
どうしてですか?
> (回答することも良いことではありません)
なぜですか?解けるんだったら解いたらいいじゃないですか。
生徒さんですか?最近、学校ではこんなのがはやっているんですか?
>>796 > 文字順が一部が変更される A<a<B<c<C<c.....
の意味が分からない。A,a,B,b,C,c,D,d,...の順で並ぶってこと?
例えば、aA, aa, aaAの順で並ぶってこと?
>>816 おそらくそう言う事だろうけど問題文が悪いよね
Z〜aの間にも文字は存在するので
aをA<a<Bとして扱うのか、それともAをa<A<bとして扱うのかで結果は変わるし。
「c<C<c」の部分を先に見て、次に「文字順が一部が変更」とくると、 なんか特殊なありえない展開が待っているのかと身構えてしまった。
819 :
353 :2010/01/15(金) 20:01:23
[1] 授業単元:情報処理基礎 [2] 問題文:以下はmain関数、サブ関数で作成します。 1.数値nを一つ入力し、各桁の和を求めよ。(123→6) 2.数値nを反転した値を表示せよ。(123→321) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:borland bcc32(?) [3.3] 言語:C [4] 期限:2010年1月16日6:00まで [5] その他の制限:サブ関数まで学習済み 2問とも、1つのプログラム内に含めてください。 よろしくお願いします!
820 :
353 :2010/01/15(金) 20:19:42
[1] 授業単元:情報処理基礎 [2] 問題文:二次方程式ax^2+bx+c=0の解を求めるプログラムを作成せよ。 a,b,cの値を入力する。計算結果は必ず5種類表示すること。 a=b=c=0の場合、処理を終了する。a=b=0、Cが0以外の場合は「不能」と表示する。 a=0、bが0以外の場合は「一次方程式」と解を表示する。 判別式がD<0の場合、「虚解」と表示する。 判別式がD<0の場合以外も、必要な表示、結果を表示します。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:borland bcc32(?) [3.3] 言語:C [4] 期限:2010年1月16日6:00まで [5] その他の制限:サブ関数まで学習済み よろしくお願いします!
>815 質問は自由だろ 要は回答者がそれが不正な質問かどうかを見極めて 不正だと思ったらスルーすればいいわけで
823 :
815 :2010/01/15(金) 22:13:35
>>822 ええ、だからおっしゃるとおりのことを主張しているわけです。
>>807 はなんで変な規則をつくるのだろうと疑問に思ったんです。
825 :
353 :2010/01/15(金) 22:47:38
>>824 さん
こんなにはやくありがとうございます。
しかし文字化けで、コンパイルはできましたが実行ではエラーが出てしまいました
よくわからなくて、すみません…
826 :
デフォルトの名無しさん :2010/01/15(金) 23:09:03
あ
827 :
デフォルトの名無しさん :2010/01/15(金) 23:21:18
>>819 #include <stdio.h>
#include <string.h>
int total(int n){
int i,r=0;
char buff[256];
char *p=buff;
sprintf(buff,"%d",n);
for(i=0;buff[i];i++){
r+=buff[i]-'0';
}
return r;
}
int reverse(int n){
int i,r=0;
char buff[256];
sprintf(buff,"%d",n);
for(i=strlen(buff)-1;i>=0;i--){
r = r*10 + buff[i]-'0';
}
return r;
}
int main(){
int n,sum,ro;
scanf("%d",&n);
printf("org=%d\n",n);
printf("total=%d\n",total(n));
printf("reverse=%d\n",reverse(n));
return 0;
}
>>816 >別にいりません。
全員がいらないとは思っていない。あったほうがいいと俺も思う.
>>796 の問題文は曖昧で仕様が曖昧と撥ね付けるべき。制約条件も
かなり厳しいんじゃね?
stdio.hしかインクルードしちゃいけないみたいだし。要するに
テンポラリファイルの上に取り込むと同時にソートしろという
意味じゃないかと...(問題文見る限り一行の長さも決まって無いみ
たいだし)特殊な組み込み用途とかライセンス関係が複雑なコンパイラ
でコーディングする場合、標準関数すら自由に使うことがままならない
し再帰呼び出しもNGとかあるしこういうこともあってもおかしくは無いんで
問題(この場合は作業指示?)の出所を知るのは後々のトラブル防止の為にも
必要だね。
>どうしてですか?
>なぜですか?解けるんだったら...
俺様仕様でも誰様仕様でもプログラムを書くことを解くとは言うのは変
>>798 ,
>>804 重みをつけて平均化する際は要素数5ではなく、重みの和12で割るのが普通じゃないかな。
先に重み係数を重みの和で割っておいても良いから、その場合の関数部分だけ書くとこんな感じ
(全角スペースは全て半角スペース2つに置き換えてコンパイルしてね)。
#define countof(array) (sizeof(array)/sizeof((array)[0]))
double *work(double a[],int N)
{
double wsum = 0, weight[] = { 1, 3, 4, 3, 1 };
double *p, *result = NULL;
int i, j, k, n = countof(weight);
for (i=0; i<n; i++) wsum += weight[i];
for (i=0; i<n; i++) weight[i] /= wsum;
if (N < n || NULL == (result = (double *)calloc(N,sizeof(double))))
return NULL;
for (i=0,p=result; i<N; i++,p++)
for (j=0,k=i+N-2; j<n; j++,k++)
*p += weight[j] * a[k%N];
return result;
}
832 :
830 :2010/01/16(土) 00:44:19
833 :
353 :2010/01/16(土) 01:40:38
>>892 ありがとうございます!
ありがたく使わせていただきます!m(_ _)m
[2010/01/15 19:27:07] リュック: 【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
http://www.dotup.org/uploda/www.dotup.org563734.zip.html [3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: c++ / c
[4] 期限: ([2010年01月22日23:59まで]
[5] その他の制限: どなたか、よろしくお願いします。
アップローダーのパスワードは0000です。
自力で出来る限りやってみたのですが限界を感じました
>>815 >>796 の問題は(
>>830 が指摘しているように)malloc禁止だから
メモリ上に確保してどうこうというのはまずい。
やってできないことはなさそうだけど難しいなあw
>>837 の7-8行目消し忘れたorz
不要なので削除してください。
速度面での最適化が不足じゃね?
計算量のオーダーが変わるならともかく、見通しの良さ重視でいいと思うんだ。 宿題レベルのプログラムであんまり突き詰める必要なくね?
[1] 授業単元: コンピュータシミュレーション [2] 問題文(含コード&リンク):円盤状に分布させた質点に回転の初期条件をあたえたいのですが、 中心からの距離、位置により速度の大きさと向きが変わるのでどのようにおけばいいのかお願いします。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: c++ [4] 期限: 2010/1/17 [5] その他の制限: 円盤状に分布まではできてます。よろしくお願いします。
843 :
デフォルトの名無しさん :2010/01/16(土) 11:22:54
[1] 授業単元:計算機基本 [2] 問題文(含コード&リンク): 1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。 途中経過も表示してください。 例:1^2 + 2^2 = 1^2 + 2^2 + 3^2 = .... [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: BCC Developer [3.3] 言語: C++ [4] 期限: [2009年1月15日まで] [5] その他の制限: While 文を使うこと: While (条件式){ 繰り返し実行すべきプログラム } っていうやつです。
844 :
843 :2010/01/16(土) 11:25:23
すみません。期限の日にちを間違えました。18にちです。 m(_ _)m
#include <iostream> #include <vector> using namespace std; int main( int argc, void **argv ) { int i=0; vector<int> vi; while(++i<=10){ vector<int>::iterator it; int s=0; vi.push_back(i); it=vi.begin(); while(it!=vi.end()){ cout<<*it<<"^2 "; s+=(*it)*(*it); advance(it,1); cout<<(it==vi.end()?"= ":"+ "); } cout<<s<<endl; } return 0; }
>>843 #include <string>
#include <iostream>
#include <sstream>
int main(void)
{
std::ostringstream head;
long sum = 0;
int i = 1;
while (i <= 10) {
sum += i * i;
if (i != 1)
head << "+ ";
head << i << "^2 ";
std::cout << head.str() << " = " << sum << std::endl;
++i;
}
return 0;
}
847 :
デフォルトの名無しさん :2010/01/16(土) 15:38:51
848 :
デフォルトの名無しさん :2010/01/16(土) 16:56:54
>>848 scanf("%c", &moji);
if(moji == '1')
{
}
else
{
moji=0;
}
//bitmap[y][x] = sepia(bitmap[y][x]);
bitmap[y][x] = moji?sepia(bitmap[y][x]):bright(bitmap[y][x]);
852 :
デフォルトの名無しさん :2010/01/16(土) 20:13:32
[1] 授業単元:動画像処理演習
[2] 問題文(含コード&リンク):
http://www.dotup.org/uploda/www.dotup.org567007.zip.html [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VisualC++2008
[3.3] 言語:C言語(ライブラリとしてARToolkit、OpenCVを使用しています)
[4] 期限:2010年01月17日23:59まで
[5] その他の制限:どうか、よろしくお願いします。
アップローダーのパスワードは8756です。
自力で出来る限りのところまでやってみたのですが限界を感じました。
853 :
デフォルトの名無しさん :2010/01/16(土) 20:18:53
[1] 授業単元: プログラミング演習 (木構造と数式処理) [2] 問題文(含コード&リンク): 算術式の値を計算して表示するプログラムを作ってください。 ただし,変数の値は全て1であるとして,式の値を求めること. 例えば,入力が (2*3) と (x+(y+z)) の場合,次のような出力をすればよい. show: に続いて入力された算術式を,eval: に続いて算術式の値を表示している. (2*3) ←入力 show: (2*3) eval: 6 (x+(y+z)) ←入力 show: (x+(y+z)) eval: 3 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年01月18日12:00まで よろしくお願いします。
なんか最近依頼が多くなった? どっかにURL晒されてるのかな?
>>841 v_i = ω×(x_i - x_{center})
Cじゃなくて物理の問題だ
>>854 多分、期末だから。
レポート課題があるんでしょ。
857 :
デフォルトの名無しさん :2010/01/16(土) 23:14:29
プログラムの課題なのですが、わからない部分があるので、ぜひご指摘をお願いします。
課題:黒いケーブルを動画像で除去せよ
使用するライブラリ:ARToolKit、OpenCV
ヒント:1.ケーブルを閾値処理で認識せよ
2.黒い物体から伸びる黒いケーブルを除去するため、処理領域の指定を行う必要がある
3.ケーブルの除去はif文を用いて工夫せよ
・1はできています
・2の処理領域の指定がよくわかりません。たぶん、ARToolkitのマーカを用いて領域を指定するのだと思います。今回、この部分の解決をぜひよろしくお願いいたします。
・3の除去処理ですが、ソースの真ん中部分に記述されています。この部分の解決もできればよろしく
お願いいたします。今の段階では、ずらしてもケーブルが映ったりして、色々と問題があります…
http://codepad.org/cQPfo9Sr
>>857 自分で考えて工夫するところだからなんとも言えんが。
ケーブルみたいな細いものなら「N回収縮→N回膨張」で消えるから、
1: 作業用画像 <- 元画像 // 物体とケーブルが写っている
2: 作業用画像をN回収縮
3: 作業用画像をN回膨張 // 物体だけ残る
4: 元画像から作業用画像を引く // ケーブルだけ残る
とやればいいんじゃない?
最適なNはケーブルの太さで変わるから、そこはいろいろやって工夫してくれ
質問ですが、 error c2059 このエラーはどうやって回避すればいいんでしょうか? わかる方お願いします><
デバッグが済んでいれば、エラーは出ないよ。
>>860 ここは質問スレでも、初心者スレでもなくて宿題を片付けるスレだ。
863 :
デフォルトの名無しさん :2010/01/17(日) 01:50:21
>>859 ありがとうございます!!助かりました!!
864 :
デフォルトの名無しさん :2010/01/17(日) 01:59:02
[1] 授業単元: プログラミング演習 (木構造と数式処理) [2] 問題文(含コード&リンク): 算術式の値を変えずに括弧をくくり直す簡単な式変形を考える.例えば,式 (1+(2+3)) (a*(b*c)) ((i*x)+((j*y)+(k*z))) の括弧を左にくくり直すと,それぞれ,次の式になる. ((1+2)+3) ((a*b)*c) (((i*x)+(j*y))+(k*z)) 括弧を左にくくり直せる (A+(B+C)) や (A*(B*C)) の形の算術式を((A+B)+C) や ((A*B)*C) の形にする式変形は,式に対応する木を 「左に転回」する変形と捉えられる この操作を実行する関数 rotate_left_exp()を完成させてください。 括弧をくくり直すと値の変わる (8+(8*8)) のような式や,括弧をくくり直せる部分が内側にある (a+(b*(c*d))) のような式は, 変形しないこと. [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年01月18日12:00まで よろしくお願いします。
【質問テンプレ】 [1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): コマンド引数を使用して 以下のように指定した文字列中の指定番号の文字を表示するプログラムを作成せよ。 例:./prg1 abcde 1 char 1 is "a" ./peg1 abcdef123456 10 char 10 is "4" エラー処理もしっかり行うこと。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:2010/1/18/15:00 [5] その他の制限:とくにありません。
>>866 #include<stdio.h>
int main( int argc, char* argv[] )
{
const int pos = atoi( argv[2] );
printf( "char %d is \"%c\"\n", pos, argv[1][pos-1] );
return 0;
}
# この課題の人は違うと思うけど
# 情報学科の人は自力で課題やった方が良いと思うけどなぁ
# と、宿題片付けますスレでつぶやいてみる
#エラー処理どころか、エラー入力が無いことを前提としたコード #書いている人に言われると逆効果なんじゃね #とつぶやいてみる てかgcc3.4でstdio.hでatoiが定義されて #ないから、実行しても動かない。つまり脊髄反射で #カキコしたことが見え見えw
869 :
868 :2010/01/17(日) 08:59:08
>>866 >>868 エラー処理については問題文読み飛ばしてしまったので貼直すとこだった。
(読み飛ばしてしまったから)問題のメインの所だけ書いた。
エラー処理は
>>866 が考えるかなぁ、と。
atoi( )はstdlib.h必要ないんだ、と思いながらコンパイルしてた。
偉そうなこと言っておいて、どちらのミスも俺がバカであることが招いた結果で
解答者として思慮が足りなかったということですね。
>エラー処理は
>>866 が考えるかなぁ、と。
も、このスレ相応しくない考え方だった。
直したコード。
ttp://codepad.org/PLtHMRto
870 :
867 :2010/01/17(日) 09:00:18
「俺はバカ」とか自己診断してる時点で十分偉そうです というのはさておき、やはりあせったことが 原因ぢゃね? このスレ的な正常な流れ ↓ 依頼者:宿題やってぇ 回答者A:できたよ、送るよ 回答者B :俺も出来たよ、送るよ 依頼者:Aさん送ってぇ 回答者:ほれ 依頼者:ありがと、Bさんもありがと 回答者C:おれっちも出来た 依頼者:おせーんだよ 教師:ごらぁ〜
int atoi(const char*)
>>868 動くよ
ヘッダーはプロトタイプ宣言があるだけだから、warningが出るだけでしょ?
gccだと int main(void){ printf("Hello world¥n"); return 0; } でもwaringだけで実行できちゃうみたいだけど Cの予約語にatoiやprintfは含まれてはないです。
依頼者に出来たことを通知し、依頼者が 応答し送ってと言う迄コードを貼らない これが最大のエラー対策かもな
876 :
872 :2010/01/17(日) 10:56:55
やりたい問題だけやればいいんだよ
プロトコル周りはCが一番得意とするところだろ
879 :
859 :2010/01/17(日) 12:24:48
>>864 木の深さが違うから回転とは捉えられないだろう
どんな木構造を想定してるか書かないと問題に
合った回答は期待できないぞ
(1+(2+3))→
> +
> 1 +
> 23
>>880 Circle::getCPがグダグダ実装だけどw
Circle::Circle(string nm, double x, double y, double d)
: name(nm), cx(x), cy(y), rd(d) {}
int Circle::getCP(const Circle &x) const {
double d = sqrt((cx - x.cx) * (cx - x.cx) + (cy - x.cy) * (cy - x.cy));
int cp;
double penetration = rd + x.rd - d;
double padding = fabs(rd - x.rd) - d;
if (0 < padding) {
cp = 0;
} else if (padding == 0 || penetration == 0) {
cp = 1;
} else if (0 < penetration) {
cp = 2;
} else {
cp = 0;
}
return cp;
}
string Circle::getName(void) const {return name;}
double Circle::getRD(void) const {return rd;}
double Circle::getCX(void) const {return cx;}
double Circle::getCY(void) const {return cy;}
あと、リンク先のは誤字がある。以下のようにしないとコンパイルできない。
cout<<"円"<<p[i].getName()<<"と";
cout<<"円"<<p[j].getName()<<"の共有点の数は";
check_CP(c,sz);
885 :
デフォルトの名無しさん :2010/01/17(日) 16:49:07
886 :
デフォルトの名無しさん :2010/01/17(日) 17:31:54
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ポインタ渡し、値渡し、グローバル変数渡しのswap関数をそれぞれ使ったプログラムを作って実行し、値渡しではうまく変数a,bが交換できないことを示せ。 (ポインタ渡しの場合) 交換前:a=3 b=4 交換後:a=4 b=3 実行例(値渡しの場合) 交換前:a=3 b=4 交換後:a=3 b=4 (グローバル変数渡しの場合) 交換前:a=3 b=4 交換後:a=4 b=3 [3] 環境 [3.1] OS:Windows VISTA [3.2] コンパイラ名とバージョン:Visual C++2008 [3.3] 言語:C++ [4] 期限:2010/01/17 23:59まで [5] その他の制限:その他制限
>>884 (a*(b*c))
((i*x)+((j*y)+(k*z)))
これが動かないよ
>>885 9章
#include <iostream>
#include <string>
using namespace std;
char x[100], y[100];
char w[] = "abcdefghijklmnopqrstuvwxyz";
int tryAndSee() {
int s = 0;
char c;
cout << "文字は? "; cin >> c;
if(c == '?') {cout<<"ヒント:"<<"animal"<<endl; return s;}
if(c>='a' && c<='z') w[c-'a'] = '_';
for(int i=0; y[i] != '\0'; i++)
if(y[i] == c) return s;
for(int i=0; x[i] != '\0'; i++)
if(x[i] == c) {y[i] = c; s++;}
cout << y <<endl; cout << "残りは " << w <<endl;
return s;
}
main() {
int hit, total = 0, count = 0, len;
strcpy(x, "hippopotamus"); strcpy(y, "____________");
len = strlen(x);
while(true){
hit = tryAndSee();
if(hit == 0) count++;
if(count == 7) {cout << "残念でした"<<endl; break;}
total += hit;
if(total == len) {cout << "おめでとう"<<endl; break;}
}
return 0;
}
void swap(void *a,void *b,int length){ char *p,*q; int i; char t; p=(char*)a; q=(char*)b; /* ↓このやり方は問題がありますのでしないで下さい。 */ for(i=0;i<length;i++,p++,q++){ t=*p; *p=*q; *q=t; } return; }
>>886 #include<cstdio>
int a=3, b=4;
void swap_by_pointer(int *pa, int *pb){int c; c=*pa; *pa=*pb; *pb=c;}
void swap_by_value(int a, int b){int c; c=a; a=b; b=c;}
void swap_by_global(void){int c; c=a; a=b; b=c;}
void swap_by_reference(int &a, int &b){int c; c=a; a=b; b=c;}
int main(void){
{
int a=3, b=4;
printf("a=%d b=%d\n", a, b);
swap_by_pointer(&a, &b);
printf("a=%d b=%d\n\n", a, b);
}
{
int a=3, b=4;
printf("a=%d b=%d\n", a, b);
swap_by_value(a, b);
printf("a=%d b=%d\n\n", a, b);
}
printf("a=%d b=%d\n", a, b);
swap_by_global();
printf("a=%d b=%d\n\n", a, b);
{
int a=3, b=4;
printf("a=%d b=%d\n", a, b);
swap_by_reference(a, b);
printf("a=%d b=%d\n\n", a, b);
}
return 0;
}
893 :
デフォルトの名無しさん :2010/01/17(日) 19:30:16
>>890 本当に本当にありがとうございます!!出来ました!!
図々しいですが、10章もお願いできませんでしょうか
894 :
デフォルトの名無しさん :2010/01/17(日) 19:33:05
お願いします [1] 授業単元: プログラミング演習V [2] 問題文(含コード&リンク): Printfを作る。 %d, %c, %sのみサポートする。 既存の関数・マクロは呼んではいけない。 使えるものはputchar()のみ。 [3] 環境 [3.1] OS: WindouwsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年1月21日(木)まで [5] その他の制限: 特にありません
895 :
859 :2010/01/17(日) 19:45:18
>>864 >>884 のコードを少し変えてみた。できたよ。これでいいなら。
void rotate_left_exp_(struct node *n)
{
if(n == NULL)
return;
rotate_left_exp_(n->left);
rotate_left_exp_(n->right);
if(n->right == NULL)
return;
if(n->op != n->right->op)
return;
if(n->right->op == number || n->right->op == variable)
return;
swap_node(n->left, n->right);
swap_node(n->left->left, n->left->right);
swap_node(n->left->left, n->right);
rotate_left_exp_(n);
}
>>881 #include <stdio.h>
enum { N = 3 };
double *solve(double *a, double *b, int N)
{
int i, j, k;
double m;
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
m = a[j * N + i] / a[i * N + i];
a[j * N + i] = 0.0;
for (k = i + 1; k < N; k++)a[j * N + k] -= a[i * N + k] * m;
b[j] -= b[i] * m;
}
}
for (i = N - 1; i >= 0; i--) {
for (j = i - 1; j >= 0; j--) {
b[j] -= b[i] * a[j * N + i] / a[i * N + i];
a[j * N + i] = 0.0;
}
b[i] /= a[i * N + i];
a[i * N + i] = 1.0;
}
return b;
}
898 :
897 :2010/01/17(日) 20:11:30
>>881 >>897 の続き
int main(void)
{
double a[N * N] = { 1, 5, 1, 3, 4, 0, 9, 10, 4 };
double b[N] = { 2, 2, 8 };
int i;
solve(a, b, N);
for (i = 0; i < N; i++)printf("%f%c", b[i], (i == N - 1)? '\n' : ',');
return 0;
}
>>881 int main(void){
/*
x1,x2,x3をそれぞれx,y,zとかく
x+5y+z=2
3x+4y=2
9x+10y+4z=8
z=2-5y-x
より
9x+10y+8-20y-4x=5x-10y+8=8
x=2y
3x+4y=2に代入して
10y=2
∴y=1/5,x=2/5
z=2-x-5y=2-2/5-1=3/5
x=2/5 y=1/5 z=3/5
*/
return 0;
}
>>889 void swap(void *a, void *b, size_t size)
{
void* tmp;
tmp = (void *) malloc(size);
if (NULL == tmp) return;
memcpy(tmp, a, size);
memcpy(a, b, size);
memcpy(b, tmp, size);
}
>>883 ありがとうございます。
本当に助かります。
>>796 バグがありましたので、俺様仕様ですが訂正いたします。
http://codepad.org/RNB6vMYe >>830 >>835 確かに仕様にあいまいなところはありますが、宿題レベルでそこまで厳しくみるのはどうか。
stdio.h しかインクルードできないのはつらいところです。
stdlib.h (malloc()/realloc()/free())はデフォで可と考えたいところですが、やはりこの問題ではだめですかね。つらいですね。
string.h はご存知のように自前でつくれます。
一行の文字数に制限のないところは malloc() / realloc() が使えるのなら、なんとでもなります。
再帰呼び出しは、メモリ関係の厳しい環境ではアウトですが、これも宿題レベルで要求されることかどうか。
ただ今回の場合は非再帰でかきなおすことができます。
>>796 では「作業用テンポラリファイルを使用できる」とだけ書いており、別に必要なければ使わなくてもよいと判断しました。
ということで、おっしゃるように俺様仕様で書いてしまったわけです。
>俺様仕様でも誰様仕様でもプログラムを書くことを解くとは言うのは変
それは個人の語感の問題。私は書くでも解くでもどっちでも構いません。
904 :
859 :2010/01/17(日) 22:01:19
>>864 >>895 をさらに改良。速くなった。
void rotate_left_exp_(struct node *n)
{
struct node *t1, *t2, *t3;
if(n == NULL)
return;
while (1) {
if(n->right == NULL)
break;
if(n->op != n->right->op)
break;
if(n->right->op == number || n->right->op == variable)
break;
t1 = n->left;
t2 = n->right->left;
t3 = n->right->right;
n->left = n->right;
n->left->left = t1;
n->left->right = t2;
n->right = t3;
}
rotate_left_exp_(n->left);
rotate_left_exp_(n->right);
}
>>894 stdarg.h はつかえますでしょうか。
va_list, va_start, va_arg, va_end をつかわないと、可変長引数の printf() は実装できないと思うのですが。
> va_list, va_start, va_arg, va_end その辺はマクロだからどうにかなりそうじゃない?
>>906 stdarg.h (va_listマクロ etc.) なしに可変長引数の処理は無理ではないでしょうか。
これはマクロといってもsetjump() logjump() 同様、処理系にべったり依存したマクロですし。
909 :
デフォルトの名無しさん :2010/01/17(日) 23:03:57
OpenCVのIplImageを用いて画素の配列を格納して表示しているのですが、 imgをx方向に-30ずらした画像をimg2に入れると、画像全体がずれてしまいます。 imgは元画像、img2は処理画像です。 for(y=0; y < img->height; y++){ for(x=0; x < img->width; x++){ tmp[0] = imgNIN->imageData[img->widthStep * y + x*3]; // B tmp[1] = imgNIN->imageData[img->widthStep * y + x*3 + 1]; // G tmp[2] = imgNIN->imageData[img->widthStep * y + x*3 + 2]; // R if(tmp[2]==255 && tmp[1]==255 && tmp[0]==255){ img2->imageData[img->widthStep * y + x*3] = img->imageData[img->widthStep * y + (x-30)*3]; img2->imageData[img->widthStep * y + x*3 + 1] = img->imageData[img->widthStep * y + (x-30)*3 + 1]; img2->imageData[img->widthStep * y + x*3 + 2] = img->imageData[img->widthStep * y + (x-30)*3 + 2]; } } } 閾値処理で認識した部分(imgNIN)だけをずらすには、どうすれば良いのでしょうか?
OpenCVなんて知らない俺が逆質問。 引き算をする箇所は、転送先のX座標じゃないの? img2->imageData[img->widthStep * y + (x-30)*3] = img->imageData[img->widthStep * y + x*3]; (x-30)がレンジ(0〜img->width)を外れた場合に行がずれてないか?
911 :
デフォルトの名無しさん :2010/01/17(日) 23:47:49
お願いします [1] 授業単元:電子演算機演習 [2] 問題文(含コード&リンク): 2次元の文字配列が、main関数内において次の詞で初期化(空白行も含める)されている。 例によって、初期化に用いられた詞の文字数や行数などはわかっていないものとする。 (1)関数NumOfCharで総文字数(空白以外)を、(2)関数NumOfWordで単語数を、(3)関数 NumOfLineで行数(空白行は数えない。また、空白行が2行以上続くことはない)を、(4)main 関数内でキーボードから一文字入力し、関数NumOfCoinで入力した文字と一致する文字数を数えて、 main関数内でそれらの数を表示する。文字列に小細工をしないこと(単語:空白又は改行から空白 又は改行まで) [3] 環境 [3.1] OS: WindouwsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年1月19日まで [5] その他の制限:なし
912 :
デフォルトの名無しさん :2010/01/17(日) 23:48:33
これが詩です。 Imagine there's no heaven It's easy if you try No hell below us Above us only sky Imagine all the people Living for today Imagine there's no countries It isn't hard to do Nothing to kill or die for And no religion too Imagine all the people Living life in peace You may say I'm a dreamar But I'm not the only one I hope someday you'll join us And the world will be as one
これが詩です。 Imagine there's no heaven It's easy if you try No hell below us Above us only sky Imagine all the people Living for today Imagine there's no countries It isn't hard to do Nothing to kill or die for And no religion too Imagine all the people Living life in peace You may say I'm a dreamar But I'm not the only one I hope someday you'll join us And the world will be as one
>>894 授業でどんなのやったんだ
それによって実装方法変わる
てか実装方法わかる
916 :
885 :2010/01/18(月) 00:43:22
>>915 ありがとうございます。すごく助かりました。本当にありがとうございました。
918 :
917 :2010/01/18(月) 01:10:49
期限を書き間違えました。 2010年1月28日までです。 よろしくお願いします。
919 :
デフォルトの名無しさん :2010/01/18(月) 01:33:53
どなたか
>>776 の問題を解くことができませんか?
もしいましたらよろしくお願いします。
>>905 ,907
可変長引数を使った場合呼出規約が_cdeclになるので
渡された引数がスタック上に順番に配置される。
引数の個数と長さはPrintf()に渡されるformatに書いてある通り(と信じるしかない)
手元のVCだと
>>908 さんので上手く動いてるんだけどcodepadだとダメだな
922 :
neko :2010/01/18(月) 06:05:08
visual studioのwindowsフォームアプリケーション visual C++のプログラミングについて質問です!! かなり急いでます。 チェックボックスを5個とボタン1個を使いアンケートみたいなプログラムを作りたいのですができません。 内容としてはチェックの数で表示される答えを違うようにしたいのです。 0〜1個つけたら良い 2〜3個つけたら普通 4〜5個つけたら悪い みたいな感じで最後にボタンを押したら評価がでてくるというものです。 すべてのプログラムを教えてください!!
>>903 宿題レベルだから、「リソースは許可無く使えない」だろ? これを解くと表現できる。
業務の場合は、「外部団体が管理すOS/言語環境の事実上の標準なリソースを使えるが、
それを使用した、させた場合の責任も著者に託される」だろ? これは書くと表現できる。
>>921 平均が ave = sum / 5; で切り捨てられてるよ
あと分散は (2乗の平均) - (平均の2乗) でも計算できるよ
>>921 double sum = 0; /* 合計を格納する変数*/
>>889 void swap(void *a,void *b,int length)
{
char *p,*q;
int i;
char t;
p=(char*)a;
q=(char*)b;
/*
無理やりワンライナーw
*/
while(length--) t = *p, *p++ = *q, *q++ = t;
return;
}
>>922 C++/CLI Form Application
main(){
int para1, para2, para3, para4, para5 ;
srand(time(0));
para1 = rand()%2;
para2 = rand()%2;
para3 = rand()%2;
para4 = rand()%2;
para5 = rand()%2;
/**START***/
int count = 0;
if(para1 != 0) count++;
if(para2 != 0) count++;
if(para3 != 0) count++;
if(para4 != 0) count++;
if(para5 != 0) count++;
switch(count){
case 0:
case 1:
puts("良い");
break;
case 2:
case 3:
puts("普通");
break;
case 4:
case 5:
puts("悪い");
break;
}
return 0;
}
点プレに沿っていようがいまいが、いつのまにか質問と解答(めいたもの)スレに なっちまったな 宿題の依頼を無償で業務的に片付けるスレ だろ、ここ?
なんで品質は決して期待してはいけない
933 :
929 :2010/01/18(月) 09:39:26
[1]授業単元:C言語実習(専門学校:選択授業) [2]課題: コマンドライン引数に与えられた英数字からなる文字列を、長さが長いものが先、同じ長さのものどう しでは辞書に記載される場合に先頭のほうに書かれるものが先に出力されるように出力するCを作る。 引数が与えられてない場合は、何も出力しない。 [3]環境:Windows vistaにBorland C++ 5.5をインストールし,テキストエディターとコマンドプロンプトで 実習作業をする。(IDEはまだ使えない) [4] 結果報告期限:2/1迄 [5] 制限: ★main関数から呼び出すことが出来る関数はstdio.hに定義のprintf関数だけに制限されています。 ★main関数の再帰呼び出しは出来ないものとします。 UNIXシステムの初歩と、ループ文やポインタ、再帰呼び出しは習っています。 よろしくお願いします。(m___m)
自作関数も呼び出しちゃダメなように読めるけど
938 :
デフォルトの名無しさん :2010/01/18(月) 11:40:02
>>937 他作関数も自作関数もその使用は簡単なようで
実は意外にムズい。安直な使用はどツボに嵌る
原因と習ったことがあるね
>>934 #include<stdio.h>
int main(int argc, char *argv[]){
int l1, l2, i, j, k, swap_flag;
char *p;
for(i=1;i<argc;i++){
for(j=1;j+1<argc;j++){
swap_flag=0;
for(l1=0;argv[j][l1];l1++);
for(l2=0;argv[j+1][l2];l2++);
if(l1<l2) swap_flag=1;
if(l1==l2){
for(k=0;k<l1 && argv[j][k]==argv[j+1][k];k++);
if(argv[j][k]>argv[j+1][k]) swap_flag=1;
}
if(swap_flag){
p=argv[j];
argv[j]=argv[j+1];
argv[j+1]=p;
}
}
}
for(i=1;i<argc;i++) printf("%s\n", argv[i]);
return 0;
}
出来るのか出来ないのかという観点の域を出ずに志向するのが問題、 出来ることを前提にその方法を厳選するのが宿題だろ?C的には
>>934 printfしか呼び出しちゃだめ、ってなんかオモロイなw
がんばってみたくなる。
Vistaだとprintfでスタックにコードを書き込んでも実行困難だな
946 :
934 :2010/01/18(月) 13:29:25
>>935 ,936
>>939 >>941 こんなにすぐにやって頂いてありがとうございます。
今授業中なので帰宅してから、DLしてみます。
というか全部OKだったらどれを選べば
いいのかわかりません。その辺りも教えて下されば
恐縮です。
>>942 chomp()が危ないよ。出題者に教えて上げようね。
chopでもchompでもない実装。
Perlコードに移植出来ないものはCコードじゃないってか?
OS: linux コンパイラ名とバージョン: gcc 言語: C 実行する度に、「computer」「internet」「windows」のいずれかをランダムに表示させたいです。 条件は、二次元配列を使うことなので次のようにしてみました。 char moji[3][10]={"computer","internet","windows"}; 乱数を発生させるために、rand又はsrandを用いれば良いと言うことは検索して分かったのですが、その先が・・・ よろしくお願いします。
>>951 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
char moji[3][10]={"computer","internet","windows"};
int num;
srand((unsigned int)time(NULL));
num=rand()%3;
printf("%s\n",moji[num]);
return 0;
}
>>950 中括弧の省略はミスの元
for(i=0;i<num_city;i++) {
if(i!=num_city-1) {
printf(" ランダム法での距離lenは %f\n",len);
len += distance(i,i+1);
}
}
>>950 int len;
printf(" ランダム法での距離lenは %f\n",len);
int型を%fで表示しようとしてるのが根本原因のようだ。
>>952 短くしてみる
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(void){
char moji[3][10]={"computer","internet","windows"};
srand((unsigned int)time(NULL));
printf("%s\n",moji[rand()%3;]);
}
956 :
955 :2010/01/18(月) 18:08:30
すまんm moji[rand()%3;]の;は無視してくれ
959 :
デフォルトの名無しさん :2010/01/18(月) 19:38:09
961 :
デフォルトの名無しさん :2010/01/18(月) 19:58:54
1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 4行4列のint型の行列を、転置するプログラムを作成し、動作の確認のため、転置前と転置後 の行列の内容を表示するようにせよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月19日 17時 [5] その他の制限: 特になし
962 :
デフォルトの名無しさん :2010/01/18(月) 20:06:49
963 :
デフォルトの名無しさん :2010/01/18(月) 20:09:21
>>924 a,bが重なり合った同サイズの領域のことが考慮されてない
int a[10];
swap((double*)&a[1],(double*)&a[3],sizeof(double));
967 :
デフォルトの名無しさん :2010/01/18(月) 22:25:19
[1] 授業単元:計算機基本 [2] 問題文(含コード&リンク): 1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。 途中経過も表示してください。 例:1^2 + 2^2 = 1^2 + 2^2 + 3^2 = .... プログラムは↓をできるだけ編集しないでWhile文を使ってお願いします。 #include <stdio.h> int main(void) { int i,n,nn; n=1; for (i=1;i<=30;i=i+1) { nn=2*n; printf("%9d の 2倍は %10d です。\n",n,nn); n=nn; } return 0; } [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: BCC Developer [3.3] 言語: C++ [4] 期限: [2009年1月15日まで] [5] その他の制限: While 文を使うこと: While (条件式){ 繰り返し実行すべきプログラム } っていうやつです。 前回書いた問題と少し違うのでよろしくお願いします。
968 :
951 :2010/01/18(月) 22:34:51
>>952 ありがとうございます。
動作確認しました。
969 :
967 :2010/01/18(月) 22:50:55
967には問題文を間違えました。すみませんm(_ _)m [1] 授業単元:計算機基本 [2] 問題文(含コード&リンク): 1の2倍は2です 2の2倍は4です 4の2倍は16です... を30回繰り返すプログラム プログラムは↓をできるだけ編集しないでWhile文を使ってお願いします。 #include <stdio.h> int main(void) { int i,n,nn; n=1; for (i=1;i<=30;i=i+1) { nn=2*n; printf("%9d の 2倍は %10d です。\n",n,nn); n=nn; } return 0; } [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: BCC Developer [3.3] 言語: C++ [4] 期限: [2009年1月19日8時まで] [5] その他の制限: While 文を使うこと: While (条件式){ 繰り返し実行すべきプログラム } っていうやつです。
>>969 #include <stdio.h>
int main(void) {
int i,n,nn;
n=1;
i=1;
while (i<=30) {
nn=2*n;
printf("%9d の 2倍は %10d です。\n",n,nn);
n=nn;
i=i+1;
}
return 0;
}
971 :
デフォルトの名無しさん :2010/01/18(月) 23:12:35
[1] 授業単元:計算機基本 [2] 問題文(含コード&リンク): 1^2+2^2+3^2+...+8^2+9^2+10^2 プログラムは↓から始めて、While文を使ってお願いします。 #include <stdio.h> int main(void) { [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: BCC Developer [3.3] 言語: C++ [4] 期限: [2009年1月19日8時まで] [5] その他の制限: While 文を使うこと: While (条件式){ 繰り返し実行すべきプログラム } っていうやつです。
972 :
971 :2010/01/18(月) 23:17:34
すみません・・・ 問題文をまた間違えてしまいました・・・ ↓が正しいです。 1^2+2^2+3^2+...+8^2+9^2+10^2 を求めるプログラムを作ってみましょう 1^2= 1^2+2^2= 1^2+2^2+3^2= などと途中経過の表示もしなさい プログラムは↓から始めて、While文を使う。 #include <stdio.h> int main(void) { です。何度も間違えてすみません
>>972 #include <stdio.h>
#include <string.h>
int main(void) {
int i,sum;
char buff[128]={0},tmp[16];
i=1;
sum=0;
while(i<=10){
sum+=i*i;
if(i==1)sprintf(tmp,"%d^2",i);
else sprintf(tmp,"+%d^2",i);
strcat(buff,tmp);
printf("%s=%d\n",buff,sum);
i++;
}
return 0;
}
975 :
917 :2010/01/18(月) 23:52:08
>>921 大変助かりました。
ありがとうございました。
あ、まちがい。
>>921 ave = (double)sum / 5;
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):異なる自然数p,qと、もう一つの自然数dを入力する。 d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、 最後にその個数を表示するプログラムを作成せよ。入力する数字はp、q、dの順とする 実行例 3 5 10 3 5 6 8 9 10 合計で6個あります。 [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:VS 2008 [3.3] 言語:C [4] 期限:2010年01月19日10:00まで [5] その他の制限:特になし
978 :
977 :2010/01/19(火) 02:09:25
よろしくお願いします。
kには0を含めないのに、mとnには0を含めるってのは矛盾じゃね? どっちも自然数としか書いてないのに
>>977 その実行例も含めて、出題された問題文?
>>977 #include <stdio.h>
int f(int p, int q, int n)
{
while(n>=0) {
if(n % q == 0) return 1;
n -= p;
}
return 0;
}
int main(void)
{
int p, q, d, i, c = 0;
scanf("%d%d%d", &p, &q, &d);
for(i=1; i<=d; i++) if(f(p,q,i)) printf("%d ", i, c++);
printf("\n合計で%d個あります。", c);
return 0;
}
983 :
977 :2010/01/19(火) 09:08:53
ありがとうございました。
構造体を使用して、アドレス帳を作るプログラムなんですが、検索する関数がうまく働きません。 言語はCです。いくら悩んでも分からないんで、どなたか指摘をお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define DATA_MAX 5 /* データの最大件数 */ #define NAME_LEN_MAX 16 /* 名前の長さ */ #define TEL_NUMBER_LEN_MAX 16 /* 電話番号の長さ */ #define YUUBINN_LEN_MAX 8 /* 郵便番号の長さ */ #define ADDRESS_DATA_MAX 64 /* 住所の長さ */ typedef struct Address_Note{ char name[NAME_LEN_MAX]; /* 名前 */ char tel_number[TEL_NUMBER_LEN_MAX]; /* 電話番号 */ char zip_code[YUUBINN_LEN_MAX]; /* 郵便番号 */ char address[ADDRESS_DATA_MAX]; /* 住所 */ }NOTE; void input_data(NOTE *p); /* データの入力 */ void print_data(NOTE *p); /* データの出力 */ void data_serch(NOTE *p, NOTE data[]); /* データの検索 */ int g_address_data_count; int main(void){ char judge; NOTE data[DATA_MAX]; NOTE *p; g_address_data_count = 0;
985 :
984(2) :2010/01/19(火) 09:33:20
for(p=&data[0]; p!=&data[DATA_MAX]; p++){ input_data(p); g_address_data_count++; printf("続けて入力しますか?(Yes:Y、No:N)"); scanf("%s", &judge); while(judge!='y' && judge!='Y' && judge!='n' && judge!='N'){ printf("YかNを入力してください:"); scanf("%s", &judge); } if(judge=='n' || judge=='N') break; else if(judge=='y' || judge=='Y') continue; } if(g_address_data_count == DATA_MAX){ printf("これ以上登録できません。\n"); exit(EXIT_FAILURE); } for(p=&data[0]; p!=&data[g_address_data_count]; p++){ print_data(p); printf("\n"); } data_serch(p, &data[DATA_MAX]); return EXIT_SUCCESS;} void input_data(NOTE *p){ printf("名前を入力してください:"); scanf("%s", p->name); printf("電話番号を入力してください:"); scanf("%s", p->tel_number); printf("郵便番号を入力してください:"); scanf("%s", p->zip_code); printf("住所を入力してください:"); scanf("%s", p->address); printf("\n"); }
void print_data(NOTE *p){ printf("名前:%.8s\n電話番号:%.15s\n郵便番号:%.8s\n住所:%s\n", p->name, p->tel_number, p->zip_code, p->address); } void data_serch(NOTE *p, NOTE data[]){ int i; char serch[NAME_LEN_MAX]; char *str; printf("誰を検索しますか?:"); scanf("%s", serch); for(p=&data[0]; p!=&data[g_address_data_count]; p++){ str = strstr(p->name, serch); if(str != NULL) print_data(p); } } これで最後です。 かなり長く見づらくて申し訳ないですがよろしくお願いします。
>data_serch(p, &data[DATA_MAX]); data_serch(p, data);
989 :
984 :2010/01/19(火) 10:00:15
>>987 全然気付かなかったw
ありがとうございました。
990 :
984 :2010/01/19(火) 10:52:59
何度もすみません。 .txtファイルを読み込みたいんですが、記述はおかしくないはずなのにポインタfpに 読み込めず、エラーーメッセージすら出ません。 原因はどんな事が考えられるでしょうか? int main(void) { int i,val; char judge; NOTE data[DATA_MAX]; NOTE *p; FILE *fp; if((fp = fopen("address_note.txt", "r"))==NULL) { printf("ファイルが見つかりませんでした---address_note.txt\n"); exit(EXIT_FAILURE);; } i=0; while(fscanf(fp,"%d",&val)!=EOF) { fscanf(fp,"名前:%.8s\n電話番号:%.15s\n郵便番号:%.8s\n住所:%s\n", p->name, p->tel_number, p->zip_code, p->address); /*データの読み込み*/ i++; /*次に移るために「i」を1つ増やす*/ }
>>991 よく分からないんですが、どんな記述をすればいいんでしょうか?
993 :
梅 :2010/01/19(火) 11:02:56
while(fscanf(.... { p=(NOTE*)data[...
>>992 よく分からないんじゃなくて、お前、何一つわかっちゃいないだろ?
fscanfの直前でp = data[i];してみれ。
996 :
955 :2010/01/19(火) 11:05:54
何一つ分かってないのは俺の方でしたスミマセン。樹海行ってきます。
997 :
梅 :2010/01/19(火) 11:08:36
ここは質問刷れじゃないんで自己責任で
>>997 すみません。
>>995 いえいえ。
>>993-995 おっしゃるとおりにやったんですが、コンパイルしてもfpに代入された値は使用されていないと出ます。
もうさっぱり分からないです…。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。