どこかで誰かがC/C++の宿題を片付けます 38代目
1 :
デフォルトの名無しさん :
05/01/12 23:52:04
あっしには、 かかわりのねえこって…
もうすぐ春ですね
デンジマン
7 :
デフォルトの名無しさん :05/01/13 14:31:46
9 :
デフォルトの名無しさん :05/01/13 21:05:32
エクセルでボタン作って、そこを押すとランダムに数字がでるプログラムをつくってもらえないですか
Excelスレ行け
11 :
デフォルトの名無しさん :05/01/13 22:29:01
[1] 授業単元: Computer Architecture [2] 問題文(含コード&リンク): アセンブラを作成せよ。 もしソースファイル(アセンブリ言語で書かれた)にエラーが あればエラーを表示する。規格はISO-C89 [3] 環境 [3.1] OS: Vine Linux [3.2] コンパイラ(バージョン): gcc 3.3.2 [3.3] 言語:C [4] 期限:2005年01月18日まで [5] その他の制限:どのように書いたら良いかわかりません。コーディング の方針を示して頂けるだけでもうれしいです。
ISO-C89ってC言語の規格じゃないの?
>>12 C言語でアセンブラの構文チェッカ作れって事だろ?
14 :
デフォルトの名無しさん :05/01/13 22:43:49
[1] 授業単元:c言語基礎1 [2] 問題文(含コード&リンク): スロットマシーンを作るプログラムです。 ・数字+Enterキーの入力をきっかけに乱数を発生し、0 から 9 までの数値を形成する ・これを三回繰り返し、得られた数字の並び方で点数を付ける ・三回とも同じなら 10 点、二個同じなら 2 点、並び順なら 5 点を与える ・これを十回繰り返して、合計を表示する [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ(バージョン): 大学のコンピュータのため分かりません [3.3] 言語:C言語 [4] 期限:2005年1月14日15:00まで [5] その他の制限: 大学でヒントが出たので書きます。 #include<stdlib.h> #include<time.h> #include<stdio.h> void main (void) { /* rand()は0〜32767 の乱数を発生 */ srand((unsigned)time(NULL) % RAND_MAX); /* 時刻を基に乱数の初期値を設定 */ int intRandomNumber = rand() % 10 ; /* 10で割った余り:0〜9の整数を決定 */ printf(" intRandomNumber= %d \n",intRandomNumber); }
ま た ス ロ ッ ト か
16 :
デフォルトの名無しさん :05/01/13 23:14:31
<<14 ごめんなさい。 提出明日までなので何とかお願いします。
>>14 その〆切時刻に大学に入れるのか?
センター試験の準備でもやってるんじゃないの?
午前中に出しとけよ。
>>11 アセンブラ、とだけ言われても作りようがないよ…
命令セットとレジスタの構成がないと。
19 :
デフォルトの名無しさん :05/01/13 23:21:00
>>大丈夫です。6時まで授業やってますから。
20 :
デフォルトの名無しさん :05/01/14 00:22:26
#include <map> class a{ static map<char,char> m; }; map<char,char> a::m; a::m.insert(map<char,char>::value_type('a','b')); a::mに前もって('a','b')を入れておきたいのですが、 上のようにするとエラーが出てしまいます。 どうすればよいか教えてください。お願いします。
libcをつかうasの出力を gccではなくldでほげして 実行ファイルにするには どうほげるといいでsか?? $ cc -S test2.c -o test2.S $ as test2.S -o test2.o $ ld -o test2 test2.o /usr/lib/crt1.o /usr/lib/crti.o -lc $ ./test2 bash: ./test2: No such file or directory test2 ↓ 00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 02 00 03 00 01 00 00 00 c4 82 04 08 34 00 00 00 |............4...| 00000020 f8 1a 00 00 00 00 00 00 34 00 20 00 07 00 28 00 |........4. ...(.| 00000030 1d 00 1a 00 06 00 00 00 34 00 00 00 34 80 04 08 |........4...4...| 00000040 34 80 04 08 e0 00 00 00 e0 00 00 00 05 00 00 00 |4...............|
[1] 授業単元:プログラミングc [2] 問題文:個人情報を表示させる構造文です。 [3] 言語:C言語 [4] 期限:2005年1月15日 名前と住所欄が上手く表示されなくて困っています。 何処を修正すれば良いか教えてもらえれば幸いです。 #include<stdio.h> main() { struct person{ char name[20]; int birth; char add[50]; char tel[12]; }; struct person *ps = {"GIKO",20050114,"2ch","012-345-6789"}; ps=prsn_data; printf("名前>誕生日>住所>電話番号>\n"); scanf("%s %ld %s %s", &prsn_data.name, &prsn_data.birth, &prsn_data.add, &prsn_data.tel); printf("\n 名前 誕生日 住所 住所\n"); printf("%10.10s %11.8ld %-30.30s %-10.10s %3c",prsn_data.name, prsn_data.birth,prsn_data.add, prsn_data.tel); printf("\n"); }
>>24 struct person *ps = {"GIKO",20050114,"2ch","012-345-6789"};
だとpsが指すのは定数。値の変更した場合の動作は不定。
28 :
デフォルトの名無しさん :05/01/14 06:26:22
[1] 授業単元: プログラミングC言語 [2] 問題文(含コード&リンク): 構造体を使った単方向リスト構造で、リストをソートする関数を作りソートする。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ(バージョン): windowsのC/C++両方使えるソフトだったかと・・・ [3.3] 言語:C言語 [4] 期限:2005年1月15日の昼間でです。 構造体のメンバは自由で、それぞれのメンバを乱数で入力し、ユーザがレコード数を入力して その数だけレコード作ってリスト化します。で、動的にメモリを確保するのではなく、あらかじめメモリを作っておいて、 それを使うやつです。で、リストを昇順か降順にソートするための関数を作ります。ソート方法はなんでもいいらしいです。 で、そのソート関数を使って、ソートして、あとはそれらを表示するだけです。
>>24 struct person prsn_data;が抜けてるんじゃないか
.name, .add, .telはアドレスだからscanfに&をつけて渡すのは変だぞ
>>29 やってることが不明瞭なので平均・分散を求める部分だけ
double m=0,m2=0,sigma;
for(i=0;i<maxCount;i++){
C=g(x,y,z);// for(0<j<loop){〜}の部分を関数化したもの
m+=C;
m2+=C*C;
}
m/=maxCount;
sigma=m2/n-m*m;
printf("平均 = %f , 分散 = %f\n",m,sigma);
この辺は習ってる?
平均 : Σ(x[i]-m) /n
分散 : Σ(x[i]-m)^2 /n
=Σ(x[i]^2-2mx[i]+m^2) /n
=Σ(x[i]^2) /n-m^2
あらら 平均m=(Σx[i])/n 分散σ=[Σ(x[i]-m)^2]/n =[Σ(x[i]^2-2mx[i]+m^2)]/n =[Σ(x[i]^2)]/n-m^2
>>31 単方向リストですよ。課題は。(知ってて作ってたらスマン)
まあ、俺も、構造体のリストを作っておきながら、静的確保する点と、
単方向リストでソートが嫌になったクチなのですが。
それならe1,e2,tのそれぞれ一つ前のポインタを保存しとけばいいのでは
>>20 class a{};
map<char,char> a::m;
はグローバルスコープで宣言してるか?
あと、mはpublicメンバじゃないと外からアクセスできない
>>36 >class a{};
>map<char,char> a::m;
>はグローバルスコープで宣言してるか?
はい。
class a{static int i;};
int a::i = 10;
例えばintだったら、上のようにして前もって10を入れておくことが
できるようなのですが、なぜmapではうまくいかないのでしょうか?
>>20 class a{
public: // これ
static map<char,char> m;
};
>>38 できればprivateのままにしておきたいのですが・・。
>>20 クラス内固定ならできるけど?
#include <map>
using namespace std;
class a{
static map<char,char> m;
public:
a(){
a::m.insert(map<char,char>::value_type('a','b'));
}
};
map<char,char> a::m;
int main()
{
return 0;
}
>>36 ,38,40
ありがとうございました。40の方法を使わせていただきます。
42 :
デフォルトの名無しさん :05/01/14 16:02:11
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
二分探索木への追加と表示をおこなうプログラム(tree.c)を配布しています。
rfileA.txt にあるデータを順番に読み込んで,
二分探索木を作成し,rfileB.txt にあるデータを削除した結果を
ファイル(result.txt)に出力するプログラムを作成しなさい。
その際,削除をおこなう関数を作成すること。
注意点 : rfileB.txt のデータを rfileA.txt から削除するのではなく,
rfileA.txt のデータで木構造を作成してから rfileB.txt のデータを
木構造から削除するようにすること。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ(バージョン): わかりませんけど、VS.net2003使ってます
[3.3] 言語:C
[4] 期限:1月25日
3つのファイル詰め合わせです
ttp://hibinoccc.s7.x-beat.com/up/img/1081.zip よろしくおねがいします
すいません追記です tree.cはrfileAを読みこんで表示までは完了しています
>>20 関数の外には式文(この場合a::m.insert()の呼び出し)は書けないから直接コンストラクタで初期化しろ。
#include <map>
#include <utility>
namespace {
std::map<char, char>::value_type m_initializer[] = {
std::make_pair('a', 'b'),
};
}
std::map<char, char> a::m(m_initializer, m_initializer + sizeof m_initializer / sizeof m_initializer[0]);
45 :
デフォルトの名無しさん :05/01/14 21:42:54
合計、平均および最大値、最小値のプログラムの課題が出ました たすえkて
>>45 ――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
>>45 int main(void)
{
int a;
fscanf(stdin,"数字を入れろ\n",&a);
printf("合計:%d 最大:%d 最小:%d 平均:%d\n",a,a,a,a)
return 0;
}
指定が全然ないみたいだし、数値が1個の場合しか考えないものでもいいんだよな
48 :
デフォルトの名無しさん :05/01/14 22:10:48
>>47 gcc -Wall hoge.c
hoge.c: 関数 `main' 内:
hoge.c:4: 警告: implicit declaration of function `fscanf'
hoge.c:4: error: `stdin' undeclared (first use in this function)
hoge.c:4: error: (Each undeclared identifier is reported only once
hoge.c:4: error: for each function it appears in.)
hoge.c:4: 警告: フォーマットへの引数が多すぎます
hoge.c:5: 警告: implicit declaration of function `printf'
hoge.c:6: error: 文法エラー before "return"
#include<stdio.h> int main(void) { int a; printf(,"数字を入れろ\n"); fscanf(stdin,&a); printf("合計:%d 最大:%d 最小:%d 平均:%d\n",a,a,a,a); return 0; }
50 :
デフォルトの名無しさん :05/01/14 22:31:27
>>49 % gcc -Wall hoge.c
hoge.c: 関数 `main' 内:
hoge.c:5: error: 文法エラー before ',' token
hoge.c:6: 警告: 互換性のないポインタ型からの引数 2 個の `fscanf' を渡しますです
#include<stdio.h> int main(void) { int a; printf(,"数字を入れろ\n"); fscanf(stdin,"%d",&a); printf("合計:%d 最大:%d 最小:%d 平均:%d\n",a,a,a,a); return 0;
}
どこからどこまでが自演なんだ?
#include <stdio.h> int main(void) { struct seiseki { int bango; int kokugo; int suugaku; int eigo; }; struct seiseki a={101,85,92,79,0.0,' '}; struct seiseki b; printf("bango="); scanf("%d",&b.bango); printf("kokugo="); scanf("%d",&b.kokugo); printf("suugaku="); scanf("%d",&b.suugaku); printf("eigo="); scanf("%d",&b.eigo); a.heikin=(a.kokugo+a.suugaku+a.eigo)/3.0; b.heikin=(b.kokugo+b.suugaku+b.eigo)/3.0; printf("bango heikin\n"); printf(" %3d %6.2f\n",a.bango,a.heikin); printf(" %3d 6.2f\n",b.bango,b.heikin); }
このプログラムを ・構造体のメンバに char hyouka;を追加し、平均点が80点以上なら'G',80点未満なら'F'を入れる 結果の表示にこれを追加する ・2人のデータa,bは初期値を設定し(hyoukaには' 'を入れておく)、3人目のデータ c はデータ b と番号 だけが異なるようにする(b全体をcに代入した後で、bangoのメンバだけべつのもとする) bの点数は自由に決める 実行例 bango heikin hyouka 101 56.78 G 102 87.67 F 103 87.67 F おねがいします
56 :
デフォルトの名無しさん :05/01/15 01:22:31
>>54 コンパイルできないし突込みどころ満載だぞ。
つーかほんとにこれを元にするのか?
57 :
前すれの962 :05/01/15 07:00:49
Atoi と Scanfを利用するということで、色々調べてみたのですが いまいち使い方がわかりません。一例として、String a=”B0070” (16進法での表示です。) をInt bにバイナリー形式で保存する手順を教えていただけませんか?
>>57 2バイト文字からだと難しいと思うが、1バイト文字の16進文字列からならstrtol()がこの場合ベストかな。
>Atoi と Scanf
そんなもんねぇぞ。
[2] 問題 挿入法でリストを整列するins_sort()の作成 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C言語 [4] 期限:2005年1月19日正午 アルゴリズムは以下のようにしたいです。お願いします。 1.c1をリストの一番目のセルを示すポインタとする。 2.c2をリストの0番目のセルを示すポインタとする。 3.c2=c1 となるか、c2の次のセルの値>c1の次のセルの値となるまでc2を次のセルへと移動 4.c2=c1ならc1をひとつ右に移動、c2=c1でなければc1の次のセルをc2の後ろに挿入 5.c1 リスト末尾となるまで2.3.4.を繰り返す。
60 :
前すれの962 :05/01/15 13:55:51
>58さん 1バイト文字で大丈夫です。 Strtol()を使って、16進法の文字列を10進法のLongに変換できる という事はわかったのですが、10進法のLongを さらに2進法に 変換するには どうしたらよいのでしょうか? 出来れば、Long値で 得たいのですが。
>>60 Longに2進法も10進法もない。
数値を文字列で表そうとするときに「N進法で表す」ということになるんだから。
62 :
前すれの962 :05/01/15 14:48:37
>60さん 何から何まで聞いてしまって お恥ずかしいのですが、 Longについていくら調べても詳しいスペックが全然見つからないので、 特性や、それに関するファンクション等を(もしくは、そういった内容のサイト) 教えていただけませんか? すいませんが、よろしくおねがいします。。
そもそもIntだのLongだのという型は標準C(++)には含まれないわけだが。 intとlongの間違いだろう?
64 :
デフォルトの名無しさん :05/01/15 15:02:06
#define HASANYBITS(num,bits) (((num)&(bits))!=0) #define HASALLBITS(num,bits) (((num)&(bits))==(bits)) #define HASBITAT(num,i) (((num)>>(i))&1)
65 :
デフォルトの名無しさん :05/01/15 15:07:41
Cの関数で void Hoge(char*) { } のような関数があったのですが、引数に型はあるのに、変数がないんです。 これはどういう意味なんでしょうか? どのような目的があるのでしょうか?
66 :
前すれの962 :05/01/15 15:10:07
うーん 正直よくわかっていませんが、要するに String a=”C3”(16進法) を Int b=11000011 (2進法) に変換したいのです。これをするのに、手順としては どのようにしたらよいのでしょうか。。。
そもそもint型に10進数で格納されているとか考えていることが、おかしい。 コンピュータなんだから全部2進数に決まってるだろう。それを表示するときに、 コンピュータが10進数として表示しているだけのこと。
68 :
デフォルトの名無しさん :05/01/15 15:17:48
>65 仮引数を省略すると、コンパイラは仮引数未使用の警告を出さない。
よーするに表示したいってだけじゃねーの? マスク使って素直に1ビットずつ調べれ。
>>62 聞くことも恥ずかしいなら、指摘されたことを直そうとしないことはもっと恥ずかしい。
いい加減、頭字化するのやめろよ。
71 :
デフォルトの名無しさん :05/01/15 15:33:25
>>62 全角と半角を混ぜて書くのは止めましょう。
プログラマや特にここの住人にとっては、頭がくらくらしてきます。
なのでまともに相手してもらえなくなりますよ。
ところであなたは頭の中身がC言語していないようです。
つまりこんぴゅーたというものがわかってないようです。
アセンブラでも少し勉強するとよいかもしれません。
72 :
デフォルトの名無しさん :05/01/15 15:43:06
>>65 効果は
>>68 のとおり
要らないものがなぜ書いてあるかというと、
C++のtemplateで型を解決するためにダミーとして渡してる。とか
歴史的経緯、つまり昔使ってたが要らなくなった。とか
あたりかな?
73 :
デフォルトの名無しさん :05/01/15 15:44:19
//nの下cnt桁を二進表示 void print_bits(long n, int cnt) { if(cnt>=0)while(--cnt){ putchar('0'+((n>>cnt)&1)); } }
74 :
デフォルトの名無しさん :05/01/15 15:48:14
>73 誤)cnt>=0 正)cnt>0
75 :
ハニワ :05/01/15 17:17:51
・
>>75 GDIで幾何とかやりたくね。OpenGLじゃダメなのか?
>>66 intやlongには「数値」が入っている。数値は数値であり、それ以上でもそれ以下でもない。
それを人間が理解するために文字で表すときに初めてN進法という考えが出てくる。
N進法というのは文字で数値を表すための存在だから、当然文字や文字列を格納する型(char*やstring)の中にしか存在しない。
んで答え。例えばこんな感じ。
#include <bitset>
#include <climits>
#include <cstdlib>
#include <string>
using std::string;
string hex = "C3";
string bin = std::bitset<sizeof (unsigned long) * CHAR_BITS>(std::strtoul(hex.c_str(), NULL, 16)).to_string();
#include <stdio.h> int main(void) { struct seiseki { int bango; int kokugo; int suugaku; int eigo; float heikin; }; struct seiseki a={101,85,92,79,0.0,}; struct seiseki b; printf("bango="); scanf("%d",&b.bango); printf("kokugo="); scanf("%d",&b.kokugo); printf("suugaku="); scanf("%d",&b.suugaku); printf("eigo="); scanf("%d",&b.eigo); a.heikin=(a.kokugo+a.suugaku+a.eigo)/3.0; b.heikin=(b.kokugo+b.suugaku+b.eigo)/3.0; printf("bango heikin\n"); printf(" %3d %6.2f\n",a.bango,a.heikin); printf(" %3d %6.2f\n",b.bango,b.heikin); } これです。おねがいします
82 :
デフォルトの名無しさん :05/01/15 23:49:59
なんかprintfとscanfが縦にずらーっとしててムラムラしてくる
>>81 題意を満たすようには作ってみたが
#include <stdio.h>
int main(void)
{
struct seiseki {
int bango;
int kokugo;
int suugaku;
int eigo;
double heikin;
char hyouka; /*評価*/
};
struct seiseki a={101,85,92,79,0.0,};
struct seiseki b,c;
printf("bango="); scanf("%d",&b.bango);
printf("kokugo=");scanf("%d",&b.kokugo);
printf("suugaku=");scanf("%d",&b.suugaku);
printf("eigo=");scanf("%d",&b.eigo);
a.heikin=((double)a.kokugo + (double)a.suugaku + (double)a.eigo)/3.0;
b.heikin=((double)b.kokugo + (double)b.suugaku + (double)b.eigo)/3.0;
if(a.heikin >= 80.0) a.hyouka = 'G';
else a.hyouka = 'F';
if(b.heikin >= 80.0)b.hyouka = 'G';
else b.hyouka = 'F';
c.bango = b.bango+1; c.kokugo = b.kokugo; c.suugaku = b.suugaku;
c.eigo = b.eigo; c.heikin = b.heikin; c.hyouka = b.hyouka;
printf("bango heikin hyouka\n");
printf(" %3d %6.2lf %c\n",a.bango,a.heikin, a.hyouka);
printf(" %3d %6.2lf %c\n",b.bango,b.heikin, b.hyouka);
printf(" %3d %6.2lf %c\n",c.bango,c.heikin, c.hyouka);
return 0;
}
84 :
デフォルトの名無しさん :05/01/16 02:25:21
char ss[8][20] ss[0] = "hoge1\thoge1\n"; の時って ss[0][4] には "\t"(タブ文字?) が入ってるんですよね? これを ","(カンマ) "\0"(NULL) などに変更したいときってどうやるんですか? sprintfを使って入れ替えれるつもりだったんですが コンパイルしたら、32 bitがどうとかの ワーニングが返ってきたんですが… (学校でやったので、今エラーメッセージが分からないです。すみません) よろしくお願いします。
85 :
前すれの962 :05/01/16 02:31:14
なるほど! 根本から考え方が間違っていたようですね。勉強になりました。 となると、longをintに変換する必要がでてくるのですが(C++です)、 調べてみたところlongを decimalやfloat等に変換はできるようなのですが、 intへの変換法が見あたりません。 変換は可能なのでしょうか?
>>85 お前はまだ勘違いをしている
もうちょっと勉強しなおしてこい
88 :
前すれの962 :05/01/16 02:41:29
えと、intは32ビットまでの整数を扱う型で、longは64ビットまでの整数を 扱う型という認識だけでは間違いでしょうか?たとえば intをパラメーターに取るファンクションにlong値は渡せませんよね? となると、こういった場合、longからintへの変換は必要ないのでしょうか?
intとlongが実際に何bitかは処理系依存 ただしint <= longは保証されてるんじゃなかったかな
90 :
デフォルトの名無しさん :05/01/16 02:51:19
[1] 授業単元:プレ卒研 [2] 問題文(含コード&リンク): csvファイル(タブ区切り)からfgetsを使って1行読込み、 先頭から「一文字づつ」"\t"を検索していって\tじゃなければ、 変数1に格納。\tだったら、その次の文字から変数2に格納していき、 最後の改行コード"\n"が来たら次の行をfgetsしていく処理キボンヌ。 "hoge1\thoge2\n" という文字列があったら hoge1は変数1へ、hoge2は変数2へ格納したいのです。 strtokは使わないと言う事になってます… [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ(バージョン): 今わかんね。 [3.3] 言語:C [4] 期限:明日の午後に1回目の打ち合わせがあるので… [5] その他の制限: ないっす。
>>88 仕様ではintは16ビット以上、longは32ビット以上としか決められてない。
あと数値型は基本的に勝手に変換されるが、切り詰められても文句は言えない。
つーか、おまいさん教科書よく読みなおした方がいいと思うぞ。
どういう内容なんだろう 卒研なのに制限もあるのか…
94 :
90っす :05/01/16 03:10:06
内容…ですか。書いていいのかな。 文献の発行年数と作者が、タブ区切りで1行づつまとめてある 最低でも5行以上あるcsvファイルをいくつも読み込んで 入力した作者名と一致する行の発行年数を取得してきて 別のカンマ区切りのcsvファイルを作るプログラムを 卒研で使用するため、プレ卒研(3年)で作ろうという事になりました。 自分、心理学を専攻してまして、パソコンとかプログラムとかサパーリで… ポインタとか2次元配列とかムリポ。
95 :
90っす :05/01/16 03:12:56
>>93 あ、ですよねw
いまフロッピー取ってきます。
>>84 うーん、なにをしたいのかよくわからんけど、こんな感じ?
p = ss[0];
while (p = strchr(p, '\t'))
*p = '\0';
おお、臨戦態勢になってきたな。 イイヨイイヨー
>>90 読み込むファイルはどうやって指定するのじゃ?
コマンドラインでスペース区切り指定した複数ファイルを開くようにするぞ?
ようわからんが、その程度ならスクリプト使った方が早いぞ。 Cじゃなきゃまずい理由でもあるのか?
101 :
90っす :05/01/16 03:40:58
そうじゃなきゃ先生に怒られます
つーか、タブ区切りはcsv(CommaSeparatedValues)じゃねぇよ。
>>100 宿題だから、「Cで作れ」って問題にPerlとかで書いていったら0点だろう。
104 :
前すれの962 :05/01/16 03:42:13
再度、教科書よんでみたけど 答えがみつからないいいいいいいす 結局longはintの代わりとして変換なしで使えるということですか? 切りつめられるリスクを背負うなら。そうだとしたら、普通に longをintの代わりにパラメーターとしてファンクションに渡しても オッケーということですよね?
>>90 もうおまえおこられてろよ
(int)
>>90 お得意の心理学で、なんとか切り抜けろよ
一般人より心理学に詳しい
>>90 がすでに嫌われております。
みんなひでえな。メンバが足りなかったら適当に継ぎ足せ main(){ struct bunken{ char nensu[10]; char sakusya[40]; }a[20], *p=a; char buf[256]; FILE *fp; if( !(fp=fopen("file", "r")) ) return 0; for(;fgets(buf,256,fp)!=NULL;p++) sscanf(buf,"%s\t%s",p->nensu,p->sakusya); fclose(fp); return !0; }
110 :
前すれの962 :05/01/16 03:56:18
long a; int b=(int)a; でいいんですか? C#を参考にしてしまいましたが。。
111 :
デフォルトの名無しさん :05/01/16 04:18:27
前スレのキャッシュ誰か持ってない?700番台のところでいいんだけど
112 :
デフォルトの名無しさん :05/01/16 04:56:26
113 :
デフォ :05/01/16 06:30:20
すいません、 パラレルポートのピン毎の信号読み込みって、 どうすればできますでしょうか? [OS]Redhat Linux 8 [言語]C
114 :
54 :05/01/16 06:43:58
>>83 20行目 使用できない文字が現れました
ってでました
20行目 使用できない文字が現れました ↑ ここ
>>104 キャストするのが正解。
ただしなくてもコンパイラが適当にやってくれる。
long n = 12345678901234567890L;
static_cast<int>(n)
119 :
デフォルトの名無しさん :05/01/16 11:39:11
>>112 ありがとう!!スレ落ちしてたので助かりました。
120 :
デフォルトの名無しさん :05/01/16 11:59:47
分数の計算を行うためにクラスRationalを作り、 そのクラスをテストするメインプログラムを書け。 このクラスのprivateデータ:分子と分母は整数型の変数にする。 このクラスのオブジェクトが宣言されたときに初期化されるよう、 コンストラクタ関数を用意する。 初期値が与えられない場合はデフォルト値をセットすること。 コンストラクタは、分数を通分した形で格納しなければならない。 例えば、分数2/4の場合、分子は1、分母は2としてオブジェクト内に格納する。 また、次の2項演算子を多重定義すること。 (a)+演算子で2つの分数の加算を行う。結果は通分した形で保存すること。 (b)-演算子で2つの分数の減算を行う。結果は通分した形で保存すること。 (c)*演算子で2つの分数の乗算を行う。結果は通分した形で保存すること。 (d)/演算子で2つの分数の除算を行う。結果は通分した形で保存すること。 また、次のようなメンバ関数を定義すること。 (e)分数をa/bの形式でプリントする。ここでaは分子、bは分母。 (f)分数を浮動小数点形式でプリントする。
121 :
デフォルトの名無しさん :05/01/16 12:01:21
>>120 君、1年生でしょ。1年生のうちから2chで解答もらっているようじゃ、先が大変だよ。
がんばって自分で解いてみな。
boost::rational をまるっきりコピーして提出すれば?
123 :
54 :05/01/16 12:35:32
bの成績はこれです。 struct seiseki b={102,45,67,89,0.0,}; 初期値を設定するときに''が入ってないんですけどどこにいれればいいんですか?
124 :
90っす :05/01/16 13:03:23
125 :
デフォルトの名無しさん :05/01/16 13:05:15
>>124 名前欄に大文字の数字禁止。レス番号以外の文字禁止。リンクがたどりにくい。
[1] 授業単元:プログラム演習 [2] 問題文:野球で打席数・安打数・四球数を入力し打率を求めるプログラムを作れ。 簡単のため四球・犠打・打撃妨害は無いものとし打率=安打数÷(打席数-四球数)で求まるものとする。 [3] 環境 [3.1] OS:Windows [3.2] 言語:C [4] 期限:2004/01/18まで [5] その他の制限: (1)打席数・安打数・四球数を入力して打率を返す。次の仕様の関数を作成せよ。 double ba(int ab , int h , int bb) ※BA:打率・AB:打数・H:安打・BB:四球 (2)ファイルから選手名・打席数・安打数・四球数を含むデータを読み込み、打率を加えたデータを出力するプログラムを作成せよ。 【動作例】 a.out input.txt ---input.txt--- Godzilla 672 174 88 Little 500 125 40 Ichiro 753 262 49 ---出力--- Godzilla 672 174 88 0.298 Little 500 125 40 0.272 Ichiro 753 262 49 0.372
128 :
デフォルトの名無しさん :05/01/16 14:11:20
age
129 :
デフォルトの名無しさん :05/01/16 14:18:42
野球嫌い
みんな割りと締め切りギリで来るのな
132 :
デフォルトの名無しさん :05/01/16 15:53:30
>>127 #include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
struct CData {
std::string name ;
int ab, h, bb ;
} ;
double ba( int ab, int h, int bb )
{ return static_cast<double>( h ) / ( ab - bb ) ;}
std::istream& operator>>( std::istream& istr, CData& data )
{ return istr >> data.name >> data.ab >> data.h >> data.bb ;}
std::ostream& operator<<( std::ostream& ostr, const CData& data )
{
return ostr << data.name << " " << data.ab << " " << data.h << " "
<< data.bb << " " << ba( data.ab, data.h, data.bb ) ;
}
int main( int argc, const char* argv[] )
{
std::vector<CData> data ;
std::ifstream istr( argv[1] ) ;
data.assign( std::istream_iterator<CData>( istr ),std::istream_iterator<CData>() ) ;
std::copy( data.begin(), data.end(),
std::ostream_iterator<CData>( std::cout, "\n" ) ) ;
return 0 ;
}
133 :
132 :05/01/16 15:54:39
C言語だった…すまん
( ・3・)ぼるしちが宿題片付けますYO!!
135 :
132 :05/01/16 16:06:14
>>127 そのままではかっこ悪いので久しぶりにC言語してみました。
#include <stdio.h>
#include <stdlib.h>
struct CData {
char name[256] ;//適当
int ab, h, bb ;
} ;
double ba( int ab, int h, int bb )
{ return (double)( h ) / ( ab - bb ) ;}
int read( FILE* ifile, struct CData* data )
{
return fscanf( ifile, "%s %d %d %d", data->name, &data->ab, &data->h, &data->bb ) == 4 ;
}
void write( FILE* ofile, struct CData* data )
{
fprintf( ofile, "%s %d %d %d %f\n", data->name, data->ab, data->h, data->bb, ba( data->ab, data->h, data->bb ) ) ;
}
int main( int argc, const char* argv[] )
{
struct CData data[256] ;//適当
FILE* ifile = fopen( argv[1], "r" ) ;
int num, i ;
for( num = 0 ; read( ifile, &data[num] ) ; num++ ) ;
for( i = 0 ; i < num ; i ++ ) write( stdout, &data[i] ) ;
return 0 ;
}
136 :
デフォルトの名無しさん :05/01/16 16:30:32
1] 授業単元:C言語 [2] 問題文: (0,1)で一様分布する 変数xi から 標準正規分布する 変数yj をつくるには 次の式を用いる。 yj=Σ(i=1→12)xi-6.0 上の式を下に rand()を用いて xiを 12000個発生させて 作成した yjの分布を *を用いた棒グラフにせよ。ただし範囲は-5<y<5 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ(バージョン): wedit(LCC) [3.3] 言語:C言語 [4] 期限:2005年 1月17日 [5] その他の制限:特にありません
>>132 氏(135氏)
ありがとうございます!これで何とか首が繋がりました…
(;つД`)
自分でも解けるように、もっと精進してきます。
( `・ω・)ノ
0<x<1で yj=Σ(i=1→12)xi-6.0 ということは -6<yj<6ってことで 範囲が-5<y<5なら カウントしないものもでてくるのかな? それとxiを 12000ってことはyjの個数は1000個ってことかな?
139 :
136 :05/01/16 17:25:33
≪138 あ、すみません。 カウントはすべてします。 -5<y<5 ではなく y<-5,-5≦y<4 のようにするんでした。すみません。 そして、xiは12000 なので yjは 1000個です。
[1]授業単元:プログラム演習 [2]問題文:コンピュータと5回じゃんけんをして、何勝何敗何分か表示しろ できれば勝率も表示 [3]環境 [3.1]OS:linux [3.2]言語:C [4]期限:2005/01/18 [5]その他の制限:特にありません
143 :
デフォルトの名無しさん :05/01/16 18:21:31
[1] 授業単元:画像処理 [2] 問題文(含コード&リンク):二枚の画像(PGM,binary形式)を合わせた合成画像を作るプログラムを作成しなさい。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C言語 [4] 期限:2005年1月17日 [5] その他の制限:特にありません
144 :
デフォルトの名無しさん :05/01/16 18:24:18
>142 「じゃんけんしましょ」 1:グー、2:チョキ、3:パー どれにする?>2 COM:グー あなた:チョキ ★あなたの負け
146 :
デフォルトの名無しさん :05/01/16 18:30:57
>>145 すいません。説明不足で。pgmになっている二枚の画像のデータがとりあえず
足せて出力できれば最低限の課題になります。
リモートセンシングの講義の一端なので、二枚の画像データを使って
植生指数(NIR-RED)/(NIR+RED)の出力などを将来的にはするんだと思います。
147 :
ハニワ :05/01/16 18:43:34
75です。 なんとかGDIでお願いできないでしょうか?
148 :
ハニワ :05/01/16 18:47:45
75です。 誰か助けていただけないでしょうか? 明日までの提出なので。。
>>142 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int cnt;int myHand,enemyHand;int winNum=0,loseNum=0,drawNum=0;srand((unsigned)time(NULL));
for(cnt=0;cnt<5;cnt++){
printf("グー:1 チョキ:2 パー:3\n");scanf("%d",&myHand);
enemyHand=(int)((double)((double)rand()/(double)RAND_MAX)*3.0)+1;
switch(myHand){
case 1:printf("(あなた)グー対");
switch(enemyHand){
case 1:printf("グー(敵)\n引き分け\n");drawNum++;break;
case 2:printf("チョキ(敵)\n勝ち\n");winNum++;break;
case 3:printf("パー(敵)\n負け\n");loseNum++;break;
}break;
case 2:printf("(あなた)チョキ対");
switch(enemyHand){
case 1:printf("グー(敵)\n負け\n");loseNum++;break;
case 2:printf("チョキ(敵)\n引き分け\n");drawNum++;break;
case 3:printf("パー(敵)\n勝ち\n");winNum++;break;
}break;
case 3:printf("(あなた)パー対");
switch(enemyHand){
case 1:printf("グー(敵)\n勝ち\n");winNum++;break;
case 2:printf("チョキ(敵)\n負け\n");loseNum++;break;
case 3: printf("パー(敵)\n引き分け\n");drawNum++;break;
}break;
default:cnt--;}}
if(winNum+loseNum!=0)printf("結果:勝ち%d,負け%d,分け%d,勝率%f\n",winNum,loseNum,drawNum,(double)winNum/(double)(winNum+loseNum));
else printf("結果:勝ち%d,負け%d,分け%d,勝率err\n",winNum,loseNum,drawNum);return 0;
}
WindowsのGDIで書けと言う指定なのか?
ちなみにグラフ表示は # が一個で100カウント $ が一個で50カウント ? が一個で10カウント * が一個で1カウント です。
>>142 こっちの方が簡単だよ〜(^^)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i,m,e,w[3]={0},j;
char h[][9] = {"グー","チョキ","パー","勝ち","負け","引き分け"};
srand((unsigned)time(0));
for(i=0;i<5;i++){
printf("%s:0 %s:1 %s:2\n",h,h+1,h+2);scanf("%d",&m);
++w[j=(m==(e=(double)rand()/RAND_MAX*3)?2:(m+1)%3==e?0:1)];
printf("YOU:%s,PC:%s,%s\n\n",h+m,h+e,h+j+3);
}
printf("%s:%d,%s:%d,%s:%d,勝率:%d%%",h+3,*w,h+4,w[1],h+5,w[2],*w*100/5);
return 0;
}
155 :
デフォルトの名無しさん :05/01/16 19:33:36
[1]授業単元:プログラム演習 [2]問題文:リスト構造へのレコード追加(構成、挿入)関数をもとに、レコードが昇順になるように登録される関数のプログラム [3]環境 [3.1]OS:linux [3.2]言語:C [4]期限:2005/01/18 [5]その他の制限:構造体のメンバ構成や昇順機能の項目(メンバ)などは自由
157 :
136 :05/01/16 19:44:14
>>151 本当にありがとうございます!!!!(T▽T)♪
でも…
あの…ひらけません…
あれ、、、なんでだ?
宿題がある奴らっていいなぁ 俺の所は、課題発表されてから3時間以内にできなければ評価してもらえなかった できなかった奴は次週までに提出で、未提出が2回あると不可確定 その分易しめの課題が多かったし、時間内に仕上げれば評価は緩かったけどな
161 :
157 :05/01/16 20:00:03
>>159 ありました!
こんなに丁寧にありがとうございます^^♪
これで 宿題が終わります。
ホントにありがとうございました!!
[1]授業単元:プログラム演習 [2]問題文:疎行列を求めるプログラム及びそのプログラムに入力する疎行列を作成するプログラム [3]環境 [3.1]OS:Solaris [3.2]コンパイラ:GCC(バージョン不明) [3.3]言語:C [4]期限:2005/01/19 [5]その他の制限:データの入出力はファイルから(mallocを使用)。双方向リスト(線形探索、ソート)を使用。 3 3 1 0 0 入力するファイルの内容は左のようにする。 0 1 0 0 0 1 どうかよろしくお願いしますm(_ _)m
>>155 そのプログラムならここで聞くよりググったりアルゴリズムとデータ構造についての本を見た方が早いのでは?
すぐに見つかるし。
164 :
ハニワ :05/01/16 20:33:52
165 :
54 :05/01/16 23:53:06
どうもありがとうございました。
すいませんがもう一問おねがいします
>>54 のプログラムを
・構造体のメンバから float heikin;を削除し、構造体の配列に5人分のデータを初期値として設定する。
・個人ごとの平均ではなく、科目ごとの平均をint型で求めて(小数部分切り捨て)個人データ
と同じ型の構造体に格納し(bangoは未使用)表示する
おねがいします
166 :
54 :05/01/16 23:54:15
>>155 前に作ったやつ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct field_tag{
char name[16];
struct field_tag *next;
} field;
void search_and_insert(field *dest, const field *src){
field *temp;
if (dest->next == NULL) {
dest->next = (field*)malloc(sizeof(field));
memcpy(dest->next, src, sizeof(field));
}
else if (!(strcmp(dest->next->name, src->name) < 0)) {
temp = (field*)malloc(sizeof(field));
memcpy(temp, src, sizeof(field));
temp->next = dest->next; dest->next = temp;
}
else search_and_insert(dest->next, src);
}
void free_all(field *ptr){if (ptr->next != NULL) free_all(ptr->next); free(ptr);}
int main(void){
field *root= (field*)malloc(sizeof(field)), *cur = root, temp;
memset(root, 0, sizeof(field)); temp.next = NULL;
while(scanf("%s", temp.name) != EOF){search_and_insert(cur, &temp); memset(&temp, 0, sizeof(field));}
cur = root;
while (cur != NULL){printf("%15s\n", cur->name); cur = cur->next;}
if (root != NULL) free_all(root);
return 0;
}
int i,j,k; double age; for(0<j<10){ age=(100/j); sage=100; for(0<i<10){ age=(100/j)*drand48(); sage=100*drand48(); func(x, y, z) //x,y,zの計算結果を返す関数 printf("%f, %f, %f\n", x, y, x); // x, y, zの値を表示 } } 上記のプログラムはx,y,zをi回計算し、それをj組表示するプログラムなのですが、 iが1の時x1,y1,z1 iが2の時x2,y2,z1 … iが9の時x9,y9,z9とし、x,y,zのそれぞれの平均 ((x1+x2+…+x9)/j) ((y1+y2+…+y9)/j) ((z1+z2+…+z9)/j) を求めるにはどうすればいいのですか?お願いします。
配列にして回すか、switch
>>169 配列にして回すにはどうすればいいのですか?
>>168 これじゃダメかい?
int mean_x = 0, mean_y = 0, mean_z = 0;
for (int i = 1; i < 10; ++i)
{
func(x, y, z);
mean_x += x;
mean_y += y;
mean_z += z;
}
mean_x /= 9;
mean_y /= 9;
mean_z /= 9;
>>171 内側のforでdrand48()を使ってランダムに計算し、それを外側のfor
で十分な回数サンプリングしているのです。
ですので
>>168 の仕様で平均値を求めたいのです。
>>172 だからこうしてはダメなのかと言ってるんだが。
int i, j, k;
double age, sage, mean_x = 0, mean_y = 0, mean_z = 0;
for(j = 1; j < 10; j++){
age = 100 / j;
sage = 100;
mean_x = 0; mean_y = 0; mean_z = 0;
for(i = 1; i < 10; i++){
age = (100 / j) * drand48();
sage = 100 * drand48();
func(x, y, z) //x,y,zの計算結果を返す関数
mean_x += x; mean_y += y; mean_z += z;
printf("%f, %f, %f\n", x, y, x); // x, y, zの値を表示
}
mean_x /= 9; mean_y /= 9; mean_z /= 9;
printf("%f, %f, %f\n", mean_x, mean_y, mean_z); // mean_x, mean_y, mean_zの値を表示
}
175 :
デフォルトの名無しさん :05/01/17 01:36:05
整数型配列n[ ]を宣言した後、for文を用いて配列nに 0から200までの数字を書き込み、その結果を出力せよ。 オネガイシマスk
#include<stdio.h> int main(void) { int i,n[]; for(i=0;i<=200;i**) n[i]=i; for(i=0;i<=200;i**) printf("n[%d] = %d\n",i,i); return 0; }
>>176 ありがとうございます。
#include<stdio.h>
main()
{
int i,n[200];
for(i=0;i<=200;i++)
n[i]=i;
for(i=0;i<=200;i++)
printf("n[%d] = %d\n",i,i);
}
>>177 それじゃまともに動かんだろう
せっかく書いてもらったものを改悪するな
179 :
デフォルトの名無しさん :05/01/17 02:16:24
配列に一文字一文字入っているものを一つに繋げて 1要素にするにはどうすればよろしいでしょうか?
n[201]にしないとエラーでるよ
182 :
デフォルトの名無しさん :05/01/17 02:49:46
テキストファイルを読み込み行数の短い順に並びかえてファイルを出力しなさい。 一行が80字を超えた場合以下の文章は切り捨て、空行は出力しない。 この問題お願いしますorz
まったく同じものが過去ログにある。
184 :
デフォルトの名無しさん :05/01/17 03:20:22
どなたかこの問題お願いします。 (問)ガウス法のプログラムを作成し、次の方程式を解け。 3X1 + 2X2 + X3 = 10 2X1 + 5X2 + 2X3 = 18 X1 + 4X2 + X3 = 12 #include <stdio.h> #define n 3 main() { int i,j,k; double a[n][n+1]={{3,2,1,10},{2,5,2,18},{1,4,1,12}}; double d; この続きをお願いします。言語はCです。
>>182 あったあった。こんな感じ。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <set>
#include <string>
struct pred{
bool operator()(const std::string& x, const std::string& y)
{return x.length() < y.length();}
};
int main(){
std::ifstream input("data.txt");
std::multiset<std::string> s;
std::string line;
while (std::getline(input, line))
if (!line.empty())
s.insert(line.length() > 80 ? line.substr(0, 80) : line);
for (std::multiset<std::string>::const_iterator first = s.begin(), last = s.end(); first != last; ++first)
std::cout << *first << std::endl;
}
187 :
182 :05/01/17 03:35:56
>>186 わざわざありがとうございます
ソース見るとかなり難解ですね…
自分でも一応書いたんですがサッパリ動きません
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char mojis[80];
int mojin;
} MOJI;
int sort(int *a,int *b) {
if(*a < *b){
return(1);
}else if(*a>*b){
return(-1);
}else{
return(0);
}
}
188 :
182 :05/01/17 03:36:19
int main(void) {int len,nx; inti=0; char a[80]; char filename[]="input.txt"; FILE *fh; MOJI *x; x=(MOJI*)malloc(sizeof(MOJI)*100); if((fh=fopen(filename,"r"))!=NULL){ while(fgets(a,81,fh)!=NULL){ len=strlen(a); if(len != 0){ x[i].mojin=len; strcpy(x[i].mojis,a); i++; } } nx = sizeof(x) / sizeof(x[0]); qsort(x, nx, sizeof(MOJI), (int(*)(const void*, const void*))sort); fclose(fh); }else{ fprintf(stderr,"ファイル %s を開けませんでした\n",filename); } free(MOJI); return 0; }
>>187 難解と言うか意味不明だろうね。なぜなら君はC言語で書きたいんだろう?
最初にそう書かないからC++でレスが付いたりするんだよ。ちゃんと
>>1 の
テンプレ使おうね。
190 :
182 :05/01/17 04:00:58
>>189 すみません、明日までだったのであまりよく読まずに
焦って書き込んでしまいました…
つーか上のソース書き途中のやつコピペしてて意味不明ですねorz
OSはXP、コンパイラはMicrosoftVisualC++6.0を使っています。
191 :
182 :05/01/17 05:03:53
192 :
デフォルトの名無しさん :05/01/17 05:05:27
【質問テンプレ】 [1] 授業単元:文字列と配列 [2] 問題文(含コード&リンク): とある文字列の中に指定の文字列があるかどうか繰り返しを使って調べる とある文字列は入力したもの。指定の文字列「efg」「cde」 指定の文字列があった場合は「ありました」ない場合は「ありません」と表示 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Windowsのc++ [3.3] 言語:c++ [4] 期限:2005年01月17日09:00まで [5] その他の制限:ifなどを複数使ってなるべく短く書く char型がイマイチ理解できません…
>>192 #include <iostream>
#include <string>
using namespace std;
int main()
{
string input;
getline(cin, input);
const string A = "efg", B = "cde";
if (input.find(A) != string::npos || input.find(B) != string::npos) { cout << "ありました" << endl; }
else { cout << "ありません" << endl; }
return 0;
}
>char型がイマイチ理解できません… 何がどう理解できないのか聞きたいな 課題の難易度から察するに、まだ「文字を使うときはintではなくcharを使う」とか言われるだけじゃないの?
195 :
デフォルトの名無しさん :05/01/17 12:48:57
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): PGMの画像ファイルを配列を使って読み込んで任意の閾値で2値化し、出力する プログラムを作れ。(出力画像もPGMで) [3] 環境 [3.1] OS:XP [3.2] コンパイラ(バージョン): Cygwin [3.3] 言語:C/C++/どちらでも可 のいずれか :C [4] [4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか 2005年01月24日19:00 [5] その他の制限: どうかよろしくお願いします。
PGMの入出力はめんどいから省略。検索すればいくらでも出てくるし
>>143 2つの画像は同じサイズ(w,h)としてやってる
画像a += 画像bを行う関数
void add_effect(unsigned char** a,unsigned char** b,int w,int h)
{
int d;
int x,y;
for(y=0;y<h;y++){
for(x=0;x<w;x++){
d=(unsigned int)a[y][x]+b[y][x];
a[y][x]=(d>255)?255:(unsigned char)d;
}
}
>>195 画像aを閾値thで2値化(0と255)する
void thr(unsigned char** a,int w,int h,unsigned char th)
{
int x,y;
for(y=0;y<h;y++){
for(x=0;x<w;x++){
a[y][x]=(a[y][x]>=th)?255:0;
}
}
>>182 なんかめちゃくちゃだな
体重ってなんだよ
・fgetsには81じゃなくて80を渡す
・x[i].mojin=len-1 なんで-1してるの?
・sort関数にはMOJI構造体が渡される
int sort(const void* x,const void* y)
{
return (*(MOJI*)x).mojin - (*(MOJI*)y).mojin;
}
198 :
デフォルトの名無しさん :05/01/17 16:55:12
[1] 授業単元:計算機学演習 よくわからないけどパスカルです。スレ違いだったらごめんなさい。。。 (課題) 入力されたn個の数を大きい順に並び替えるプログラムを作れ。 (他のスレにも書き込んだけどまだわからなかったので)
199 :
デフォルトの名無しさん :05/01/17 17:14:04
int a; int *b; int c; これを使って、 1.aに100を代入する 2.ポインタ変数bにaのアドレスを代入する 3.bの値をcに代入して、cを表示させて下さい。 (100が表示されればOKです。) A アドレス(&c)を使う方法:変数のアドレスを代入する方法 B ポインタ(*b)を使う方法:値を代入する方法 注:c=a と代入した場合は100と表示されても認めません!
DLLに格納されている文字列を取得する場合は どうやって取得したらよいのでしょうか? exeとDLLの両方の書き方がわかりません。 わかる方どうかよろしくお願いします。
201 :
デフォルトの名無しさん :05/01/17 17:26:23
>200 GetModuleHandle,LoadLibrary,LoadStringを見よ
>>198 スレタイにPascalは入っていないのでスレ違いですね。
204 :
192 :05/01/17 17:44:15
>>193-194 ありがとうございました。
理解できないところっていうのはなぜ"\0"で必ず終わらないといけないかと言うことです
深く考えないでそういうものだと思っておけばいいのでしょうか?
それとついでにもう一つ質問ですが
#include <iostream>
#include <string>
↑この二つはなんでしょう?まだ<stdio.h>ってのしか使ったことないのですが…
できればさっき教えて頂いたものに//で注釈いれてもらえるとありがたいです
>>204 本当に「C++で」という指定で宿題が出ているのかい?stdio.hしか
使った事が無いと言うのは怪しいのだが。
206 :
192 :05/01/17 17:47:00
というかこのコードをヒントにして考えてと言われてました #include <stdio.h> int main(void) { char str[100]; int i, c; printf("文字列を入力してください。\n"); scanf("%s", str); c = 0; for(i=0; str[i]!='\0'; i++){ if(str[i] == 'a'){ c++;} } printf("%sの中にaは%d個あります。\n", str, c); return 0; }
Cじゃねーか
>>192 int strsrch(char*s,char*w){return *w=='\0'?1:(*s=='\0'?0:(*s==*w?strsrch(&s[1],&w[1]):strsrch(&s[1],w)));}
ここまで書いたら面倒になったんでmainは勝手に書いといて。
>>206 >>1 >・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
210 :
デフォルトの名無しさん :05/01/17 17:51:32
>204 速度やメモリ効率を無視すれば、長さをintに格納することも可能…、だが、現在では私のように本当に低レベルのプログラマー…、いやスーパープログラマーしか気にしないだろう。
>210は昔話だ。気に砂
>>199 その手順は3の表現が悪い。
「ポインタbが指す位置に格納されている値をcに代入」
とすべきだと思う。
int main(void)
{
int a;
int *b;
int c;
a=100;
b=&a;
c=*b;
printf("%d",c);
}
213 :
デフォルトの名無しさん :05/01/17 18:55:35
214 :
デフォルトの名無しさん :05/01/17 19:01:46
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { int ran_num,key,count=0; int a[3],i,point=0; char s[80]; srand((unsigned)time(NULL)); while(1){ printf("\n...Input Number...\n0 to exit\nother number to start\n"); printf("....................\n"); fgets(s,sizeof(s),stdin); sscanf(s,"%d",&key); エラーがわかりませんん。ご教授ください。 "slot.c", line 14.71: 1506-186 (S) ストリング・リテラルは、行末よりも前で終わらなければなりません。 "slot.c", line 15.6: 1506-191 (E) 文字 \ は有効な C ソース文字ではありません。 "slot.c", line 15.11: 1506-186 (S) ストリング・リテラルは、行末よりも前で終わらなければなりません。 "slot.c", line 15.1: 1506-276 (S) 構文エラー: ')' が欠落している可能性があります
215 :
デフォルトの名無しさん :05/01/17 19:08:36
>214 string literalは、曲訳すれば定数文字列の意。文字列の途中でEnter押したか、勝手に改行してるのかも
216 :
デフォルトの名無しさん :05/01/17 19:16:46
>>215 できました。本当にありがとうございました。
217 :
デフォルトの名無しさん :05/01/17 19:48:01 ,
>>196 ありがとうございます。参考にして自分なりに組んでみたのですが fopen ではPGMファイルは開けないんでしょうか? どうもファイルを読み込んでないみたいなので ちなみにこんな感じで組みました FILE *fp_in,*fp_out; if( (fp_in=fopen("sample.pgm","r")) == NULL ) perror("Can't file open!\n"); exit(1); ”r”を”rb”に変えても同じでした
FILE *fp_in,*fp_out; if( (fp_in=fopen("sample.pgm","r")) == NULL ) { perror("Can't file open!\n"); exit(1); }
219 :
デフォルトの名無しさん :05/01/17 19:51:05 ,
>217 開けない原因は多分SAMPLE.PGMとEXEが別々の場所にあるからじゃないか?
220 :
デフォルトの名無しさん :05/01/17 19:54:27 ,
221 :
デフォルトの名無しさん :05/01/17 19:58:38 ,
>220 ファイルかアプリの閉じ忘れの共有ロックかな?
223 :
デフォルトの名無しさん :05/01/17 20:03:55 ,
>221 画像データの数値を読み込んでない状態です。 試しに読み込んでテキストファイルに書き込むようにプログラムしてみても まったくの白紙でした
[1] 授業単元:ネットワークプログラミング
[2] 問題文(というかやりたいこと)
英文を単語ごと(空白ごと)にわけて配列に格納する
(上記のソースは、そのままではできなかったため、クライアント側にて入力した英文を、
サーバー側にて単語毎(空白毎)にわけて、単語毎に改行したものをLINES.txtに出力する
という方法をとろうとしたものです)
[3] 環境
[3.1] OS:Redhut Ver7
[3.2] コンパイラ(バージョン):gcc3(?)、すいませんちょっとわからないです
[3.3] 言語:C
[4] 期限:申し訳ありません、明日の午後五時までなんです
ソース(サーバー側):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/83.txt ソース(クライアント側):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/82.txt クライアント側はともかく、サーバー側で形態素(単語)ごとに切り分けようとしても
どうやら空白を空白と認識してくれないようで、思ったように単語ごとに切って、LINE.txt
に出力できません。
もともとは英文を単語ごとにわけて、配列に格納することが目的だったんですが、うまくいかなくて
上記のようにやってみようとしたんですが、それでもうまくいかず。
もしもっと簡単に単語ごとにわけて、配列に格納できる方法がありましたら、そちらでもかまいません。
どうかお知恵をお貸し下さいますよう、お願い致します。
典型的なタコ関数だが我慢してstetokでも使ったらどうだね?
stetok stetok stetok stetok stetok stetok
すいません、stetokを検索してもほとんどヒットせず、見てもわからないのですが。 Cの関数なんでしょうか?
228 :
デフォルトの名無しさん :05/01/17 20:41:14
225:デフォルトの名無しさん:05/01/17 20:34:04 典型的なタコ関数だが我慢してstetokでも使ったらどうだね?
あ、失礼、227は私です。 やっぱりネスケはいまいち見にくいです;;
230 :
デフォルトの名無しさん :05/01/17 20:42:58
Redhut
232 :
デフォルトの名無しさん :05/01/17 20:46:00
以下の関数を作って、計算するプログラム。 ここの dataMax や dataMinという関数は 自分で定義して利用すること。 配列の中で最大値を返す関数 int dataMax(int a[ ], int b) { } 配列の中で最小値を返す関数 int dataMin(int a[ ], int b) { } プログラム参考例 (これを拡張して完成させて下さい) #include<stdio.h> void main(void){ int i; float a[5]; dataSet( a, 5); printf( “Max= %d”, dataMax( a , 5) ); printf( “Min= %d”, dataMin( a , 5) ); }
233 :
230 :05/01/17 20:47:14
234 :
デフォルトの名無しさん :05/01/17 20:47:54
>223 タスクマネジャを見て疑わしいプログラムを終了。それでもダメなら再帰どう?
235 :
デフォルトの名無しさん :05/01/17 20:48:23
int a; int *b; int c; これを使って、 1.aに100を代入する 2.ポインタ変数bにaのアドレスを代入する 3.bの値をcに代入して、cを表示させて下さい。 (100が表示されればOKです。) A アドレス(&c)を使う方法:変数のアドレスを代入する方法 B ポインタ(*b)を使う方法:値を代入する方法 注:c=a と代入した場合は100と表示されても認めません! #include<stdio.h> int main(void){ int a; int *b; int c; a = 100; printf(" a[%x, %d], b[%x] \n",&a, a, b); b = &a; printf(" a[%x, %d], b[%x, %d] \n", &a, a, b, *b); c = *b; printf(" a[%x, %d], b[%x, %d] \n", &a, a, b, *b); } Aは解決しました。 Bのほうわかる方いませんか。
236 :
デフォルトの名無しさん :05/01/17 20:49:47
>>235 間違えました。Aがわかる方お願いします。
237 :
デフォルトの名無しさん :05/01/17 20:54:09
>235-236 1.が難し過ぎてここでは解きようがない。どうやって100を代入するの?
238 :
デフォルトの名無しさん :05/01/17 20:59:00
1)複素数の加算(実部r,虚部i同士の加算) 2)複素数の絶対値(sqrt(r*r+i*i)) 3)複素数の出力 以下のプログラムでかけているクラスの定義部分を書け int main(){ double x,y; Complex c; scanf("%lf",&x); Complex c1(x); scanf("%lf%lf",&x,&y); Complex x2(x,y); c=add(c1,c2); c.abs(); c.out(); return 0; } C++です。お願いします。
240 :
デフォルトの名無しさん :05/01/17 21:06:59
Complex::Complex(double re,double im) :m_real(re),m_imaginary(im) {}
>>238 C++使っているのだから、operatorを定義して
Complex a(1,1);// 1+jで初期化
Complex b(2,3);// 2+3jで初期化
Complex c(0,0);// 0で初期化 ここで、jはj=sqrt(-1)を満たす数
c=a+b;
c=a*b;
c=a/b;
c=a-b;
などのように使えるようにした方が汎用性があるでしょ?
242 :
デフォルトの名無しさん :05/01/17 22:01:15
Cなんだが テキストファイル(HPのソース等)の入力に対して、 各行50文字までを出力する(50文字以上は切り捨て、空行は出力しない)方法教えて
fgetsで読んだうちの50文字だけfprintfで出力する
245 :
デフォルトの名無しさん :05/01/17 22:09:29
>>244 それやるとfgetsで呼んだ後、その行のつづき(50文字以降)が次の行として処理されちゃう
246 :
デフォルトの名無しさん :05/01/17 22:11:51
ああ、ちがう、ごめん 50文字関係ない fgetsで指定した読み込みの最大文字数以降が次の行として処理されちゃう、だ
247 :
デフォルトの名無しさん :05/01/17 22:12:30
1行を文字数に関わらずまるまるfgetsする方法とかってある?
>>247 '\n'あるか調べて、表示するか捨てるか判断すればいいだろーが。
文字数関わらずにってのはCにゃねーよ。
一旦fgetsでバッファに読み込んで、 指定文字数のとこにヌル文字入れてfprintfで出力じゃダメなの? (と思った通りすがりC初心者、間違ってたら教えて
>>249 バッファを256文字指定していて256文字以上の行があったら?
改行文字が含まれているかチェックしてないとバグになr・・_no
>>208 難しすぎてわかりません…
もっと簡単にできませんか?
>テキストファイル(HPのソース等)の入力に対して、各行50文字までを出力する(50文字以上は切り捨て、空行は出力しない)方法 素直に1文字づつ嫁!
254 :
デフォルトの名無しさん :05/01/17 22:33:31
>>249 それいいね
fgetsの読み込み文字数を51にして
配列[50]の部分に\0を代入すればいいってことでしょ?
でもやりかたがわからん・・・・
>254 >246 の意味わかってる?
>>242 素直に1文字ずつ読む方法。
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *fp = fopen("data.txt", "r");
int c, count = 0;
for (; ; ) {
c = getc(fp);
switch(c)
{
case '\n':
if (count != 0) printf("\n");
count = 0;
break;
case EOF:
fclose(fp);
return 0;
default:
if (count++ < 50)
printf("%c", c);
else {
printf("\n");
while ((c = getc(fp)) != '\n' && c != EOF);
ungetc(c, fp);
count = 0;
}
}
}
}
257 :
デフォルトの名無しさん :05/01/17 22:36:34
構造体を使用しn角形(n>=10)の頂点データを反時計回りの順で与えて 図心と面積を求めるプログラムを作成せよ。 よろしくお願いします
258 :
242 :05/01/17 22:40:17
>>256 おお!
すばらしい!
さっそく組み込んでみる!
本当にありがとう!!
259 :
デフォルトの名無しさん :05/01/17 22:40:31
行が長かったらreallocでバッファを長くして読み込めばいいじゃん(下手に書くと遅くなるけど)。
260 :
242 :05/01/17 22:46:24
>>259 realloc?知らない
ちょっとリファレンス見てみるわ
261 :
デフォルトの名無しさん :05/01/17 22:49:16
>257 一辺の長さは0cmとすると、面積0、図心も0…(冗談)。 n角形を中心から頂点を通るように半直線n本でn等分すればn個の三角形ができる。さてこの三角形の性質は?
すいませんどなたか165お願いできませんか?
263 :
デフォルトの名無しさん :05/01/17 22:53:21
>261 飲酒運転で間違えたorz...
264 :
デフォルトの名無しさん :05/01/17 22:58:15
typedef struct { int x,y; }MYPOINT; MYPOINT*p=(MYPOINT*)malloc(n*sizeof(MYPOINT)); p->x=0;
265 :
デフォルトの名無しさん :05/01/17 23:00:26
>>165 これでいいのか?
#include <stdio.h>
int main(void)
{
struct seiseki {
int bango,kokugo,suugaku,eigo;
char hyouka; /*評価*/
};
struct seiseki array[5]={{101,85,92,79,},
{102,76,35,89,},
{103,76,35,89,},
{104,76,35,89,},
{105,76,35,89,}};
struct seiseki average = {106, 0, 0, 0,};
int kokugo_sum = 0,suugaku_sum = 0, eigo_sum = 0;
int i;
for(i=0; i<5; i++) {
kokugo_sum = kokugo_sum + array[i].kokugo;
suugaku_sum = suugaku_sum + array[i].suugaku;
eigo_sum = eigo_sum + array[i].eigo;
}
average.kokugo = kokugo_sum/5; average.suugaku=suugaku_sum/5; average.eigo=eigo_sum/5;
printf("国語の平均 = %d\n", average.kokugo);
printf("数学の平均 = %d\n", average.suugaku);
printf("英語の平均 = %d\n", average.eigo);
return 0;
}
268 :
デフォルトの名無しさん :05/01/17 23:10:47
>257 中心の求め方は公式から明らか。頂点の座標の平均が中心。凸図形を仮定すれば中心から三角形分解できて、面積も求められる。
269 :
デフォルトの名無しさん :05/01/17 23:18:47
分かる人がいないのは寂しいな、先生。
#include <stdio.h> #include <stdlib.h> #include <string.h> char array[1000][81]; int main(){ FILE *fp; char str[1024]; int n,i; for(n=0; n<1000; n++) array[n][0] = '\0'; if ((fp = fopen("input.txt", "r")) == NULL) {exit(2);} n=0; while (fgets(str, 1024, fp) != NULL) { if (strlen(str) >= 80) { str[79] = '\n'; str[80] = '\0'; } strcpy(array[n], str); n++; } fclose(fp); for(i=0; i<n; i++) printf("%s", array[i]); return 0; }
271 :
デフォルトの名無しさん :05/01/17 23:23:38
274 :
デフォルトの名無しさん :05/01/17 23:29:09
>273 文字の二次配列で仮想画面を作るって言えば分かるかな。
2次元配列をつくって、それに横型グラフを入れていって、 縦型グラフになるように、最後に出力すればいい
中心から隣接する頂点二つへ線を引き 三角形を作って面積を求めるということでしょうか? ヘロンの公式を使えば上手くいきそうです ありがとうございました。
問題:文字列Sの長さを返す関数を書け。ただしライブラリは使わない。 int len(char s[]) { int i=0; while(s[i]!='\0') { i++; } return i; } 回答は↑であっていますか? あと、 3/6*2.0 と 3/6.0*2 の値はそれぞれ0.0000 1.0000で合っていますか?
278 :
デフォルトの名無しさん :05/01/17 23:43:09
>277 アラビア語の場合はどうなる。 簡単な計算は自分でコンパイルして確かめれ
>>274 >>275 二次元配列を使うところまでは思いついたんですが、どう出力していいのか
わかりません
280 :
デフォルトの名無しさん :05/01/17 23:53:27
>279 最初は空白で初期化しておく。 座標から二次配列の要素への対応を考える時、座標に*を描く事は対応する要素に'*'を代入することだ。
>>266 どうもありがとうございました。
明日提出日なので間に合ってよかった。
282 :
デフォルトの名無しさん :05/01/17 23:59:40
文字の並びは文字列そのもの。0終端になるように調節すれば、printfを使って出力できる。
>>283 当然だヴォケ。ただで人に正解を教えてもらおうなんて甘い考えは捨てる事だな。
>>230 書き込んだ直後に計算室追い出されてカキコできませんでした、失礼しました(´・ω・`)
このへん参考にさせてもらってもうちょい考えてみます、今日は徹夜覚悟で頑張りますヽ(`Д´)ノ
でもやっぱり空白文字は嫌い(´・ω・`)
286 :
271 :05/01/18 00:49:26
すみません、やっぱよく解りません ここまでしか出来ませんでした・・・ #include <stdio.h> #include <stdlib.h> void main(void) { int x,y,z,i,j,g[][12]; for(i=0;i<1000;i++){ for(j=0;j<12,j++){ x=(double)rand()/32767.0 z=z+x } y=z-6.0 (???) } }
どうかお願いします。 ググったり、図書館で数値計算の本を調べたりしましたが載っていなくて全然分かりません。
>>287 >・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
疎行列ってのは、要素の値がほとんど0の行列の事だよね。 だから、データの表現を、0以外の値を持つ値の添え字と値のみで表現する事により ワークエリアを圧縮する技法だ。 しかしその代償として、任意の要素へのアクセスは通常の配列に比べかなり低速になる。 実用的なライブラリはハッシュテーブルを使うけど、今回の課題は双方向リストと線形探索 という単純でより低速なデータ構造を使えと言っているわけだ。 その発生する疎行列は今回は単位行列のようだね。くそ・・・C++なら、添え字演算子の オーバーロードを使えばスマートに表現できるのに、Cだと汚くなるなあ・・・・
>>290 C++なら、boost::ublasを使えばプログラム不要なのにな。
>>288 ありがとうございます
細部がよくわかりませんが、参考にやってみます
>>287 疎行列(sparse matrix)をリストで表現するには、グラフ理論で言う所の隣接リスト表現
というのをよく使うようだ。この表現は行方向のみポインタ配列で決定でき、列方向を
線形探索により走査する事になる。
今晩は暇だからちまちま作ってみるよ。でも何時になるかわからないのでそのつもりで。
発生する疎行列は単位行列という事で。
すみませんでした。
この数式で疎行列の解を求めるということしか言われてなくてよく分かりません。
j-1
lij = aij - Σ lik ukj lik=0 →lik ukj=0
k=0
lij=aij-(li0 u0j+li1 u1j+li2 u2j) ←構造体に格納
=
↓
0
>>290 あくまでその単位行列は入力ファイルの形式の例です。
その形式で入力する疎行列を作成するプログラムも自分で作れと言われました。
>>293 ありがとうございます。今週中に出来れば何とかなるので
294の上の式のj-1とk=0はΣのところで、下の式の0はli0のところです。
296 :
のりこ :05/01/18 02:36:49
学校の課題です。ちんぷんかんぷん。プログラミングで評価つけるなんてシラバスには書いてないのに。。。困ってます。 問題 「正規分布で平均値 S:0.3 L:0.7 分布3σ=0.2のとき マルコフ確立分布で表せるときのプログラムを組み出力せよ。」 どなたかわかる方いらっしゃいますか?
>>208 つけたししちゃってすいません。ありがとうございました
>>211 気にしないようにします。
>>294 その解法はもしかして疎行列の直接解法って奴か?LU分解を用いる方法だが。
もう少し詳しく書いてくれ。このままではデータファイルを読んでメモリに格納して
終わりになってしまうぞ。
>>298 すみません。この式しか与えられていないので詳しく書けません。
この課題と一緒にクラウト法で解く課題も出されましたが参考になるでしょうか?
>>299 クラウト法ってのは、LU分解を行うためのアルゴリズムの一つで、直接解法と関係がある。
そうしたら
>>294 の解法は、ガウス=ザイデル法による反復解法だろう。
どうすっかな・・・・入出力ルーチンと要素へのアクセス関数までプログラムしてみるから、
後は自分でやってみてもらえると助かる。それか、他の人がそれを見てアレンジしてくれる
と助かるんだが。今週末まででいいという事だし、今晩中でなくてもいいなら考えてみる。
303 :
初心者 :05/01/18 11:01:11
C++を使用してコマンドラインベースのプログラムを作成する。(Windowsベースでない。) 課題として一つ目はテキストファイルの中の奇数番目の行と偶数番目の行とを分けて、それぞれを別々のファイルに書き出す。 二つ目はテキストファイルの各行の先頭に#の文字をつけて、新たなファイルに書き出す。 以上の二つです。 ちなみに期限は今日いっぱいです。 お願いします。
>>303 > C++を使用してコマンドラインベースのプログラムを作成する。
そうですか。手を出さないから、生温かく見守ってあげましょう。
305 :
デフォルトの名無しさん :05/01/18 11:18:09
>303 ファイルストリームを開いて一行ずつgetsだぜ! ピカ!
学習範囲:関数 問題:「1からnまでの整数の総和を求める関数」sumを定義し、それをつかって 「適当な正の整数nを入力させ、sumを呼び出して総和を返させ、それを出力するプログラム」を書きなさい。 ヒント)1からnまでの総和=n(n+1)/2 環境:C言語 コンパイルできる環境がないので添削お願いします。 #include<stdio.h> int sum(int a); main() { int n,x; x=1; printf("整数を入力してください。\n"); scanf("%d,&x"); for(n=1;n<=x;n++) x=sum(x); printf("入力した整数の総和は%d\n",x); return 0; } int sum(int a) { int n,ans; ans=n*(n+1)/2; return ans; }
308 :
デフォルトの名無しさん :05/01/18 13:33:56
PGMファイルを二値化して出力するプログラムを色々なサイトを参考に作ったのですが なぜか出力ファイルにうまく書き込めていません。ソースを貼るのでご指摘、間違いに 気づいた方は教えてください。おねがいします。 #include <stdio.h> #include <stdlib.h> #define XSIZE 640/*画像の大きさ*/ #define YSIZE 480 #define HIGH 255 /*濃度値 255=HIGH=白*/ #define LOW 0 /*濃度値 255=LOW=黒*/ main(){ FILE *fp,*fg; /*入出力ファイル操作用ポインタの宣言*/ char input[XSIZE][YSIZE]; /*入力2次元配列の型宣言*/ char out[XSIZE][YSIZE]; /*出力用2次元配列の型宣言*/ int i,j,ikiti; printf("input IKITI *** "); /*閾値の入力*/ scanf("%d",&ikiti); for(j = 0;j < YSIZE;j++){ for(i=0;i<XSIZE;i++) {input[i][j]=out[i][j]=0; /*配列の初期化*/ }}
309 :
308 :05/01/18 13:34:32
fp=fopen("sample.pgm","rb"); /*入力ファイルのオープン*/ if(fp==NULL){ printf("open error"); /*ファイルのエラー処理*/ exit(1);} for(j=0;j<YSIZE;j++){ for(i=0;i<XSIZE;i++) { input[i][j]=fgetc(fp); /*配列への画像データの代入*/ } } for (j=0;j<YSIZE;j++){/*2値化,閾値以上の濃度値ならば*/ for(i=0;i<XSIZE;i++){ if((int)input[i][j]>=ikiti){ out[i][j]=HIGH;} else{ out[i][j]=LOW; } } } fg=fopen("sanple2.pgm","w"); /*出力ファイルのオープン*/ for(j=0;j<XSIZE;j++){ for(i=0;i<YSIZE;i++) { fprintf(fg,"%c",out[i][j]); /*配列からディスクへの書き込み*/ } } fclose(fp); /*入力ファイルのクローズ*/ fclose(fg); /*出力ファイルのクローズ*/ }
310 :
308 :05/01/18 13:38:15
訂正: fg=fopen("sanple2.pgm","wb"); /*出力ファイルのオープン*/ でした。よろしくおねがいします。
311 :
デフォルトの名無しさん :05/01/18 13:42:41
>309 XSIZEとYSIZEが逆。 sampleのつづり。
314 :
308 :05/01/18 14:09:00
>311 XSIZEとYSIZEを逆にすると一応ファイルへの書き込みは できました!ありがとうございます!! でもまだ画像として扱われていなくて、二値化もできていません。 引き続き間違いや指摘がありましたらよろしくお願いします。
315 :
デフォルトの名無しさん :05/01/18 15:12:01
>314 二値化は別関数に分けろ。 '\n'変換が起きてしまうので、バイナリ入出力にfprintfなどの文字や文字列を対象とした関数は使うな。fread/fwriteを使え。バイナリエディタを使え。
>>308 iとjも逆
普通画像は[y][x]で格納する(スキャンライン(x)がメモリ上で連続になるように)
あとpgmヘッダを読み書きしてない
バイナリpgmなら
P5
xsize ysize
maxgray
pixeldata
になってる
317 :
デフォルトの名無しさん :05/01/18 15:23:05
ダメだこりゃ!
318 :
デフォルトの名無しさん :05/01/18 15:27:57
次逝ってみよー!
319 :
デフォルトの名無しさん :05/01/18 15:29:01
[1] 授業単元:棒グラフの作成 [2] 問題 (1) 標準入力からデータを読み込んで,以下のような棒グラフを標準出力に書くプログラムを作りなさい。 ****************************** ******************************** ********************** (2) 以下のようにスケールを入れなさい。データが40を超えたら,表示しないようにしなさい。グラフのどこかにデータの数値を表示しなさい。 +----+----1----+----2----+----3----+----4 23 |*********************** 45 |***************************************+ 35 |********************************* [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Windowsのc++ [3.3] 言語:c++
コンパイラすら書けないような無能無才は素直に単位落とせ
321 :
デフォルトの名無しさん :05/01/18 15:59:08
[1] プログラミング実習 [2] 実行ファイル名 [オプション][ファイル名] −nファイルの末尾n行を表示(n>20) −r 逆順表示 −v ファイル名表示 −a 行表示 で動作するプログラムをリングバッファ(動的確保)を使って作る。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ(バージョン): Microsoft Visual C++ 6.0 [3.3] 言語:C [4] 期限:2005年01月22日まで
322 :
デフォルトの名無しさん :05/01/18 16:00:46
>316 すいません 「maxgray pixeldata になってる」これどういうことでしょう? くわしくおしえてください。おねがいします。
>>307 フリーコンパイラ使えば?
#include<stdio.h>
int sum(int n) { return n*(n+1)/2; }
int main(void)
{
int x;
printf("整数を入力してください。\n");
scanf("%d", &x);
printf("入力した整数の総和は%d\n",sum(x));
return 0;
}
324 :
デフォルトの名無しさん :05/01/18 17:02:31
325 :
デフォルトの名無しさん :05/01/18 17:21:09
>324 ヒント過剰
1〜10までの数字がランダムに置かれている。 大きい方から順に表示するプログラムを作成せよ。 お願いします
327 :
デフォルトの名無しさん :05/01/18 17:55:27
328 :
デフォルトの名無しさん :05/01/18 17:56:51
>326 qsort関数でソート
>>330 ありがとうございます。
後は頑張って自分でやってみます。
>>326 ほらよ馬鹿
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <boost/lambda/lambda.hpp>
int main(){
std::vector<int> v;
int i(0);
std::generate_n(std::back_inserter(v), 10, ++boost::lambda::var(i));
std::random_shuffle(v.begin(), v.end());
std::sort(v.begin(), v.end(), std::greater<int>());
std::for_each(v.begin(), v.end(), std::cout << boost::lambda::_1);
}
>>303 1問目
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char* argv[])
{
if (argc != 4)
std::cout << "使い方: 実行ファイル名 入力ファイル名 奇数行出力ファイル名 偶数行出力ファイル名" << std::endl;
else
{
std::ifstream in(argv[1]);
std::ofstream out_odd(argv[2]), out_even(argv[3]);
std::string line;
bool is_even = false;
while (std::getline(in, line))
{
if (is_even) out_even << line << std::endl;
else out_odd << line << std::endl;
is_even = !is_even;
}
}
return 0;
}
>>303 2問目
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char* argv[])
{
if (argc != 3)
std::cout << "使い方: 実行ファイル名 入力ファイル名 出力ファイル名" << std::endl;
else
{
std::ifstream in(argv[1]);
std::ofstream out(argv[2]);
std::string line;
while (std::getline(in, line)) out << '#' << line << std::endl;
}
return 0;
}
335 :
326 :05/01/18 18:50:07
>>329 スイマセンスイマセンスイマセンorz
[1] プログラミング実習
[2] 1〜10までの数字がランダムに置かれている。
大きい方から順に表示するプログラムを作成せよ。
[3] OS: windows2000
言語:C
[4] 期限:2005年1月20日まで
[5]二重のfor文を使用しろとのこと。
>335 ほらよ、レベルの低い問題だから俺が答えてやるよ #include<stdio.h> #define MAX 10 int main( void ) { int test[] = { 1, 10, 9, 8, 7, 5, 4, 3, 2, 6 } ; intcnt, idx ; for( idx = 0 ; idx < MAX - 1 ; idx ++ ) for( cnt = 0 ; cnt < MAX - 1 ; cnt ++ ) if( test[cnt] > test[cnt + 1] ) test[cnt] ^= test[cnt + 1] ^= test[cnt] ^= test[cnt + 1] ; return 0 ; }
>>336 数字がint型でなくてfloatとかdoubleだったらどうするんだ?
いまはそこまで求めないでしょ
>>335 バブルソートで。そこそこ柔軟性のあるコードだと思うけど。
#include <stdio.h>
int main(void)
{
int a[] = {6, 3, 5, 7, 10, 1, 9, 8, 4, 2};
int i, n, j, temp, *first = a, *last = a + sizeof(a) / sizeof(a[0]);
for (i = 0, n = last - first; i < n - 1; ++i)
for (j = 0; j < n - 1 - i; ++j)
if (*(first + j) < *(first + j + 1))
{
temp = *(first + j);
*(first + j) = *(first + j + 1);
*(first + j + 1) = temp;
}
for (i = 0; i < sizeof(a) / sizeof(a[0]); ++i)
printf("%3d", a[i]);
}
まだint型しか習ってないに決まってるさ!
341 :
デフォルトの名無しさん :05/01/18 19:35:48
342 :
デフォルトの名無しさん :05/01/18 19:37:35
>341 文字通りデータのサイズ
>test[cnt] ^= test[cnt + 1] ^= test[cnt] ^= test[cnt + 1]; これだと副作用が複数の個所で発生するから、規格上動作が未定義になるぞ
>>341 sizeof(a)はaのサイズ(10×intの大きさ)でsizeof(a[0])はa[0]のサイズ(intの大きさ)。
だからsizeof(a) / sizeof(a[0])は10になる。これでaの要素数を求められる。
こうしておけば、aの要素数を変更したくなったときにあちこちで数字を書き換える
必要がない。「柔軟性」ってそういうこと。#define MAX 10とかしてもいいけど、
マクロは色々副作用があるから避けられるなら避けた方がよい。ほとんどの場合、
コンパイル時にsizeof(a) / sizeof(a[0])は定数に置き換えられるから、一回一回
計算するオーバーヘッドもないと考えてよい。
知らなかったょ
簡単なswapを書かずにわざわざこんな未定義な動作を書く意味が分からない。 格好いいとか思って書いてるのか?
//配列の要素数を求めるマクロ。 //ポインタは不可。 #define ARRAYLEN(a) (sizeof(a)/sizeof((a)[0]))
むか〜し、話題になったやつじゃねーの? Cでテンポラリ変数使わずにスワップできるとかって。 なんかで読んでホラだと知らずに使ったんだろ、きっと。
>>350 >最近の CPU はレジスターリネーミング機構というものが入っています。
>ニーモニック上32個のレジスターが使えるとするなら、 内部的には40 個ぐらい
>レジスターを持っておいて、 必要に応じてその 40 個の中の適切なレジスターを、
>ニーモニック上のレジスターに割り振るのです。
これ知らなかった。勉強になった。
352 :
デフォルトの名無しさん :05/01/18 21:21:12
354 :
初心者 :05/01/18 23:28:33
>>333 >>334 どうもありがとうございました。
とっても助かります。
ほんとに感謝してます。
では失礼します。
355 :
デフォルトの名無しさん :05/01/19 00:15:18
>>352 [III]-(3)、ちと怪しいのでよろしく
#include <stdio.h>
#include <string.h>
double convSei( const char* p ){
double d = 0 ;
for(;;){
if( *p == '1' ) d += 1 ;
if( !*(++p) ) break ;
d *= 2 ;
}
return d ;
}
double convSyou( const char* top ){
double d = 0 ;
const char* p = top + strlen( top ) ;
for(; p != top ; --p ){
if( *(p-1) == '1' ) d += 1 ;
d /= 2 ;
}
return d ;
}
int main( int argc, char* argv[] ){
double d ;
d = convSei( strtok( argv[1], "." ) ) ;
d += convSyou( strtok( NULL, "." ) ) ;
printf( "%0.5f\n", d ) ;
return 0 ;
}
/*
>>325 5*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define BUF_MAX 256
struct Node{int element;struct Node *next;};
void main(){
int x,ans,diff,minDiff,mode;
char buf[BUF_MAX];
struct Node *startNode,*nowNode,*newNode;
startNode=(struct Node*)malloc(sizeof(struct Node));
fprintf(stdout,"input List element >");
fgets(buf,BUF_MAX,stdin);
startNode->element=atoi(buf);
startNode->next=NULL;
nowNode=startNode;
while(1){
fprintf(stdout,"input List element (* end)>");
fgets(buf,BUF_MAX,stdin);
if(buf[0]=='*')break;
newNode=(struct Node*)malloc(sizeof(struct Node));
nowNode->next=newNode;
newNode->element=atoi(buf);
newNode->next=NULL;
nowNode=newNode;
}
/*356続き*/ while(1){ fprintf(stdout,"input x (* end)>"); fgets(buf,BUF_MAX,stdin);if(buf[0]=='*')break;x=atoi(buf); fprintf(stdout,"1: most near\n2: most near but less than x\n, 3 most near but more than x >"); fgets(buf,BUF_MAX,stdin);mode=atoi(buf); minDiff=INT_MAX; for(nowNode=startNode;nowNode!=NULL;nowNode=nowNode->next){ diff=nowNode->element-x; switch(mode){ case 1:if(minDiff>abs(diff)){minDiff=abs(diff);ans=nowNode->element;}break; case 2:if(minDiff>abs(diff)&&x>=nowNode->element){minDiff=abs(diff);ans=nowNode->element;}break; case 3:if(minDiff>abs(diff)&&x<=nowNode->element){minDiff=abs(diff);ans=nowNode->element;}break; default:ans=0;/*これはまずいかも*/ } } fprintf(stdout ,"ans=%d",ans); } }
>356-357は
>>352 だ。間違えた。
リストと書いてあったのでリストで作ってしまったが、配列でも良いと思う。
359 :
デフォルトの名無しさん :05/01/19 00:49:38
>>352 IIIの(4)、またまた怪しいがよろしく
#include <stdio.h>
#include <string.h>
void convSei( int i ){
int mask = 0x40000000 ;
for( ; mask > 0 ; mask /= 2 ){
if( ( mask <= i ) ) putchar( ( mask & i ) ? '1' : '0' ) ;
}
}
void convSyou( double d ){
putchar( '.' ) ;
int i ;
d -= (int)d;
for( i = 0 ; i < 5 ; i++ ){
d *= 2 ;
putchar( ( (int)d & 1 ) ? '1' : '0' ) ;
if( d - (int)d <= 0.0 ) break ;
}
}
int main( int argc, char* argv[] ){
double d ;
sscanf( argv[1], "%lf", &d ) ;
convSei( (int)d ) ;
convSyou( d ) ;
return 0 ;
}
360 :
352 :05/01/19 00:54:58
皆様ありがとうございます。
>>356 さん
確か配列でやれと言ってたような気がします。
恥ずかしながら正直私のレベルで356さんが書いたプログラムは何がなんだか
分かりません(^_^;)凄いですね。
野球選手に野球が上手ですねと言ってるようなものだな
>>361 確かに(^_^;)
引き続きよろしくお願い致しますm(__)m
/*静的配列版(あふれ判定してません) 条件・先生からのヒントはは先に言ってね*/ #define BUF_MAX 256 #define LIST_SIZE 256 void main(){ int x,ans,diff,minDiff,mode,listSize,cnt; char buf[BUF_MAX]; int list[LIST_SIZE]; cnt=0; fprintf(stdout,"input List element >"); fgets(buf,BUF_MAX,stdin); /*1行読み込む(最大BUF_MAX)*/ list[cnt]=atoi(buf);/*bufの内容をint型にしてlist[cnt]に格納*/ cnt++; while(1){ fprintf(stdout,"input List element (* end)>"); fgets(buf,BUF_MAX,stdin); if(buf[0]=='*')break; list[cnt]=atoi(buf); cnt++; } listSize=cnt;
/*続き fgetsは習ってないなら、scanfでもいいかも。バグがあったら申し訳ない*/ while(1){ fprintf(stdout,"input x (* end)>"); fgets(buf,BUF_MAX,stdin);if(buf[0]=='*')break;x=atoi(buf); fprintf(stdout,"1: most near\n2: most near but less than x\n, 3 most near but more than x >"); fgets(buf,BUF_MAX,stdin);mode=atoi(buf); minDiff=INT_MAX; for(cnt=0;cnt<listSize;cnt++){ diff=list[cnt]-x; switch(mode){ case 1:if(minDiff>abs(diff)){minDiff=abs(diff);ans=list[cnt];}break; case 2:if(minDiff>abs(diff)&&x>=list[cnt]){minDiff=abs(diff);ans=list[cnt];}break; case 3:if(minDiff>abs(diff)&&x<=list[cnt]){minDiff=abs(diff);ans=list[cnt];}break; default:ans=0;/*これはまずいかも*/ } } fprintf(stdout ,"ans=%d",ans); } }
失礼しましたm(__)m 一応fgetsも習ってるんですが…(というか独習ですが)よく失敗します(^_^;)
366 :
デフォルトの名無しさん :05/01/19 01:28:32
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):.(ドット)以降の空白をけす削除するプログラムを作ってます。 i love you. me too.__ ←このアンダーバーの部分です。 [3] 環境 学校のUNIXです。 [4] 言語 C言語 [5] 期限 1/20 08:00 すみませんが、おねがいします。 #include<stdio.h> int main(int argc,char **argv) { int i,no,a; char c, s[1000], t[1000]; i=0; while((c=getchar())!='\n') { s[i] = c; i++; if(i >= 999){ break; } }
367 :
デフォルトの名無しさん :05/01/19 01:31:41
/*続きです*/ for(a=0;a<1001;a++){ if(s[a]=='.'){ if(s[a+1]=' '){ no++; } } else if (s[a]==' '){ if(s[a+1]==' ') s[a+1] = '\0'; } else printf("%s", s[a]); } return 0; }
>>366 #include <stdio.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
int is_put;
if (c == '.') is_put = 0;
if (c == '\n') is_put = 1;
if (is_put) putchar(c);
}
return 0;
}
なにやってんだ漏れ #include <stdio.h> int main(void) { int c, is_put = 1; while ((c = getchar()) != EOF) { if (c == '.') is_put = 0; if (c == '\n') is_put = 1; if (is_put) putchar(c); } return 0; }
putcharとかはじめてみました>< むずかしいですね ありがとうございます。
372 :
デフォルトの名無しさん :05/01/19 02:01:59
#include <stdio.h> struct student{ char name[20]; int english; int math; int japanese; double ave; }; int main(void) { struct student s = {"A", 82, 72, 58}; struct student *ps; ps = &s; ****** printf("%s: 英語=%3d 数学=%3d 国語=%3d : 平均=%2.2f\n", *****); return 0; } ここの****の部分を補う問題なんですが・・・ お願いします。
373 :
372 :05/01/19 02:05:28
あ、最初の****は psを使って平均点を求める。 2つめは psを使って成績を表示。 での場合です。
*****-1 ps->ave = ( ps->english + ps->math + ps->japanease ) / 3.0; *****-2 ps->name, ps->english, ps->math, ps->japanease, ps->ave
375 :
372 :05/01/19 02:15:17
>>374 ありがとうございましたm(__)m
376 :
372 :05/01/19 02:35:28
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):372を改良し、 構造体のポインタ変数s(struct student *s)を宣言し メモリを確保した後、そこに値を代入し、結果を出力せよ。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ(バージョン): Borland C++ 5.5.1 [3.3] 言語:C [4] 期限:1月19日朝7時半
377 :
372 :05/01/19 02:37:47
#include <stdio.h> #include <string.h> #include <stdlib.h> void print_data(struct student s); struct student{ char name[20]; int english; int math; int japanese; double ave; }; int main(void) { struct student *s; s = (struct person *)calloc(1, sizeof(struct student));
378 :
372 :05/01/19 02:39:22
続き strcpy(s->name, "A"); s->english = 82; s->math = 72; s->japanese = 58; print_data(*s); struct student *ps; ps = &s; ps->ave = ( ps->english + ps->math + ps->japanese ) / 3.0; free(s); return 0; } void print_data(struct student s){ printf("%s: 英語=%3d 数学=%3d 国語=%3d : 平均=%2.2f\n", s.name, s.english, s.math, s.japanese, s.ave); }
>>372 *psとかは別にいらねえんじゃねえの?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void print_data(struct student s);
typedef struct student{
char name[20];
int english;
int math;
int japanese;
double ave;
}Student;
int main(void)
{
Student *s;
s = (Student *)malloc(sizeof(Student));
strcpy(s->name, "A");
s->english = 82;
s->math = 72;
s->japanese = 58;
s->ave = (s->english + s->math + s->japanese ) / 3.0;
print_data(*s);
free(s);
return 0;
}
void print_data(struct student s){
printf("%s: 英語=%3d 数学=%3d 国語=%3d : 平均=%2.2f\n",s.name, s.english, s.math, s.japanese, s.ave);
}
いるかいらないかではなく、問題の通りに作るのが宿題だろ
382 :
デフォルトの名無しさん :05/01/19 03:26:41
画像ファイルを読み込んで出力するプログラム組んでるんですが途中で画像が 途切れて表示されます unsigned char in[Y][X]; /*入力2次元配列の型宣言*/ unsigned char out[Y][X]; /*出力用2次元配列の型宣言*/ こんなふうに配列を宣言してるんですけど配列って取り込める数値の制限って あるんですか? ちなみに画像は640×480です。
>>382 それだけでは何とも言えんが、
原因はあなたが想像している事とは関係無い。
そりゃYやらXが小さきゃ入らないわな。 素直に動的確保するが吉。
385 :
デフォルトの名無しさん :05/01/19 03:52:31
>383 こんな感じなんですがご指摘ありましたらよろしくおねがいます。 include <stdio.h> #include <stdlib.h> #define Y 480/*画像の大きさ*/ #define X 640 main(){ FILE *fp,*fg; unsigned char in[Y][X]; unsigned char out[Y][X]; int x,y; for(y= 0;y < Y;y++){ for(x=0;x<X;x++) { input[y][x]=out[y][x]=0; /*配列の初期化*/ }} fp=fopen("samlpe.pgm","rb"); /*入力ファイルのオープン*/ if(fp==NULL){ printf("open error"); exit(1);}
386 :
385 :05/01/19 03:53:55
続き for(y=0;y<Y;y++){ for(x=0;x<X;x++) { input[y][x]=fgetc(fp); /*配列への画像データの代入*/ }} fg=fopen("sample2.pgm","wb"); /*出力ファイルのオープン*/ for (y=0;y<Y;y++){ for(x=0;x<X;x++){ out[y][x]=input[y][x];}} for(y=0;y<Y;y++){ for(x=0;x<X;x++) { fprintf(fg,"%c",out[y][x]); }} fclose(fp); /*入力ファイルのクローズ*/ fclose(fg); /*出力ファイルのクローズ*/ }
>>385 開口。ダメダメじゃん・・・
PGMの読み込みがちゃんとできていない
ヘッダの分も確保するか、読み捨てるかすれ。
389 :
385 :05/01/19 04:04:52
>387、388 そうなんですか?どうかけばいいんでしょう? ちなみにこのプログラムは>308からつくりました
>>389 PGMのファイルフォーマットを調べてからにしてくれ。
391 :
デフォルトの名無しさん :05/01/19 04:19:01
sample.pgmのマジックナンバーは P2 640 480 255 なってました
392 :
のりこ :05/01/19 05:12:45
学校の課題です。ちんぷんかんぷん。プログラミングで評価つけるなんてシラバスには書いてないのに。。。困ってます。 問題 「正規分布で平均値 S:0.3 L:0.7 分布3σ=0.2のとき マルコフ確立分布で表せるときのプログラムを組み出力せよ。」 どなたかわかる方いらっしゃいますか?
393 :
デフォルトの名無しさん :05/01/19 05:14:02
>>388 >>ヘッダの分も確保するか、読み捨てるかすれ。
具体的にどうすればこれをできるのか詳しく書いてるサイトご存知の方or説明の
できる方いませんか?
394 :
デフォルトの名無しさん :05/01/19 05:18:30
>>352 はい、[II]ね。
#include <stdio.h>
#include <string.h>
int main() {
struct data{
char str[100];
int turn;
};
int i=0,j,k;
char buf[100];
struct data d_array[100],tmp;
while(1) {
scanf("%s", buf);
if(buf[0] == '*') break;
else {strcpy(d_array[i].str, buf);d_array[i].turn = i; i++}
}
printf("Number of Data : %d\n", i);
for(j=0; j<i; j++)
for(k=j+1; k<i; k++)
if(strcmp(d_array[j].str,d_array[k].str) > 0) {
tmp = d_array[j];
d_array[j] = d_array[k];
d_array[k] = tmp;
}
for(j=0; j<i; j++) printf("Data(%d) %s \n",d_array[j].turn+1, d_array[j].str);
return 0;
}
>>352 ごめんなさい、ミスりましたのでもう一度。
#include <stdio.h>
#include <string.h>
int main() {
struct data{
char str[100];
int turn;
};
int i=0,j,k;
char buf[100];
struct data d_array[100],tmp;
while(1) {
scanf("%s", buf);
if(buf[0] == '*') break;
else {strcpy(d_array[i].str, buf);d_array[i].turn = i; i++;}
}
printf("Number of Data : %d\n", i);
for(j=0; j<i; j++)
for(k=j+1; k<i; k++)
if(strcmp(d_array[j].str,d_array[k].str) > 0) {
tmp = d_array[j];
d_array[j] = d_array[k];
d_array[k] = tmp;
}
for(j=0; j<i; j++) printf("Data(%d) %s \n",d_array[j].turn+1, d_array[j].str);
return 0;
}
399 :
372 :05/01/19 08:11:26
[1] 授業単元:C++ [2] 問題文:// 例:価格が$100のセーターが20%割引で売られている。 そのセーターを持っている30%割引のクーポンで更に割引した場合、合計金額は支払はなければならないのか? User inputは以下のように表示されるようにしなければならない。 Example: What is the price of the item? 100 What is the first percentage to be taken off? 20 What is the second percentage to be taken off? 30 Using the incorrect strategy, you would pay $50 In reality, the correct price is $56 This results in a difference of $6 上記の様に、二回割引されるようにしなければならず、例の様に20%割引された商品を更に30%割引することに加えて、30%と20%を足してしまい合計50%割引にするようにもしなければなりません。 間違った結果、正しい結果両方が表示される様にしなければならない。 Floatを使うこと。 どんな数値でも計算される様にしなければならない。 C++この学期から始めました。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ(バージョン): BCC 5.5.1 [3.3] 言語:C++ [4] 期限:一月二十一日
401 :
385 :05/01/19 08:44:54
>>388 の指摘を受けて自分なりに調べてプログラムを組みなおして見たので
間違い、指摘ありましたらよろしくおねがいます。ちなみに実行して見たところ
やっぱり途中で画像が途切れて表示されます
#include <stdio.h>
#include <stdlib.h>
#define YSIZE 480/*画像の大きさ*/
#define XSIZE 640
#define HIGH 255 /*濃度値 255=HIGH=白*/
#define LOW 0 /*濃度値 255=LOW=黒*/
main(){
FILE *fp,*fg; /*入出力ファイル操作用ポインタの宣言*/
unsigned char input[YSIZE][XSIZE]; /*入力2次元配列の型宣言*/
unsigned char out[YSIZE][XSIZE]; /*出力用2次元配列の型宣言*/
char str[1000];
int x,y,th;
int w,h; /* 画像の大きさ */
int d; /* 画像の階調 */
for(y= 0;y < YSIZE;y++){
for(x=0;x<XSIZE;x++) {
input[y][x]=out[y][x]=0; /*配列の初期化*/
}}
402 :
385 :05/01/19 08:45:36
fp=fopen("sample.pgm","r"); /*入力ファイルのオープン*/ if(fp==NULL){ printf("open error"); /*ファイルのエラー処理*/ exit(1); } fscanf(fp,"%s",str); /* マジックナンバーの読込み */ fscanf(fp,"%d %d",&w,&h); /* 画像の大きさの読み込み */ fscanf(fp,"%d",&d); /* 画像の階調の読み込み */ for(y=0;y<YSIZE;y++){ for(x=0;x<XSIZE;x++) { input[y][x]=fgetc(fp); /*配列への画像データの代入*/ } } fg=fopen("sample2.pgm","w"); /*出力ファイルのオープン*/ fprintf(fg, "P2\n%d% d\n%d",XSIZE , YSIZE, 255); fwrite(input, sizeof(unsigned char), YSIZE*XSIZE, fg); for (y=0;y<YSIZE;y++){ for(x=0;x<XSIZE;x++){ out[y][x]=input[y][x];} } for(y=0;y<YSIZE;y++){ for(x=0;x<XSIZE;x++) { fputc(out[y][x],fg); /*配列からディスクへの書き込み*/ }} fclose(fp); /*入力ファイルのクローズ*/ fclose(fg); /*出力ファイルのクローズ*/ }
A nervous taxpayer was unhappily conversing with the IRS Tax auditor who had come to review his records. At one point the auditor exclaimed, "Mr. Carr, we feel it is a great privilege to be allowed to live and work in the USA. As a citizen you have an obligation to pay taxes, and we expect you to eagerly pay them with a smile." "Thank goodness," returned Mr. Carr, with a giant grin on his face, "I thought you were going to want me to pay with cash."
>>402 fgetcじゃうまくいかない。
fscanf(fp,"%d" のほうがまだマシだ
405 :
385 :05/01/19 09:04:22
fgetcの代わりにfscanf(fp,"%d")を入れたら文字化けた文字が永遠続けて表示 されましたが・・・・・。 fscanfにするのならば fscanf(fp,"%d",&○) ○の部分は何を入れればよいのでしょう?
>>405 inputという配列に入れたいのだろう?
407 :
385 :05/01/19 09:21:14
input[y][x]にsample.pgmの画像データを入れたいんです。 for(y=0;y<YSIZE;y++){ for(x=0;x<XSIZE;x++) { fscanf(fp,"%d",&input[y][x]); /*配列への画像データの代入*/ こういう事でしょうか?
>>385 マニュアルすら読めない知恵遅れの方ですか?
>>407 いつまでの期限の宿題なのだ?
あなたは基礎が全然できていないから、答えのソースを貼っても
意味が無さそうだなあ
入門書からやり直してほしい
410 :
デフォルトの名無しさん :05/01/19 09:40:57
>>409 3日後です。すいません基礎からやり直すので、できれば模範ソース貼ってください
int main(){ FILE *fp,*fg; /*入出力ファイル操作用ポインタの宣言*/ unsigned char input[YSIZE][XSIZE]; /*入力2次元配列の型宣言*/ unsigned char out[YSIZE][XSIZE]; /*出力用2次元配列の型宣言*/ char str[1000]; int x,y,th; int w,h; /* 画像の大きさ */ int d; /* 画像の階調 */ for(y=0;y<YSIZE;y++){ for(x=0;x<XSIZE;x++){ input[y][x]=out[y][x]=0; /*配列の初期化*/ }} fp=fopen("sample.pgm","r"); /*入力ファイルのオープン*/ if(fp==NULL){ printf("open error"); /*ファイルのエラー処理*/ exit(1); }
fscanf(fp,"%s",str); /* マジックナンバーの読込み */ fscanf(fp,"%d %d",&w,&h); /* 画像の大きさの読み込み */ fscanf(fp,"%d",&d); /* 画像の階調の読み込み */ for(y=0;y<h;y++){ for(x=0;x<w;x++) { fscanf(fp,"%d",&input[y][x]); } } fg=fopen("sample2.pgm","w"); /*出力ファイルのオープン*/ fprintf(fg, "P2\n%d% d\n%d\n",XSIZE , YSIZE, 255); for (y=0;y<h;y++){ for(x=0;x<w;x++){ out[y][x]=input[y][x];} } for(y=0;y<h;y++){ for(x=0;x<w;x++) { fprintf(fg," %3d",out[y][x]); /*配列からディスクへの書き込み*/ }fprintf(fg,"\n");} fclose(fp); /*入力ファイルのクローズ*/ fclose(fg); /*出力ファイルのクローズ*/ return 0; } これでも15点くらいだがな。
>>409 >できれば模範ソース貼ってください
こういう奴はほぼ間違いなくやりなおす気などない
>410 頑張ってね!
うむ、マジックナンバーがP2ということはテキストファイルだね。
一度ファイルを覗いてご覧
>>407
417 :
デフォルトの名無しさん :05/01/19 09:52:58
>>413 できればそうしたいのだがこれからさらに、二値化にするプログラムを作らなきゃ
いけないのですよ。だからどうしても模範ソースを理解しないとダメなんですよ。
>>411 ありがとうございます!!
これで自分のがどこが悪いのか分かりました。感謝します!
>>412 ・pgmフォーマットには(一応)行辺りカラム数制限があるわけだが。
・読み込み完了後、クローズまで引っ張っているのには何か理由があるのかな?
#自称15点ということで、意図的なのだとは思うが。
>>417 2値化についての要検索キーワード。
・諧調数
256諧調(最大255)のままでやるのか諧調数制御もするのか。
・閾値
いきなりディザはないだろうから2値化するのに閾値が必要。
421 :
デフォルトの名無しさん :05/01/19 10:01:23
>>420 ありがとうございます。二値化の理論だけはなんとなく分かるのでこんな感じで
プログラム使用かと思ってるんですけどね。
for (y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
if(input[y][x]>=ikiti){ /*2値化,閾値以上の濃度値ならば*/
out[y][x]=255;
}
else{
out[y][x]=0;
}
}
}
>>400 #include <iostream>
#include <cstdlib>
int main(){
float price,first,second,incorrect,correct;
std::cout<<"What is the price of the item? ";
std::cin>>price;
std::cout<<"What is the first percentage to be taken off? ";
std::cin>>first;
std::cout<<"What is the second percentage to be taken off? ";
std::cin>>second;
incorrect=price*(100-(first+second))/100;
correct=price*(100-first)*(100-second)/10000;
std::cout<<"Using the incorrect strategy, you would pay $"<<incorrect<<std::endl;
std::cout<<"In reality, the correct price is $"<<correct<<std::endl;
std::cout<<"This results in a difference of $"<<fabs(incorrect-correct)<<std::endl;
return 0;
}
>421 頑張って二次配列とファイル入出力を調べてね。
424 :
お願いします :05/01/19 11:02:40
論理式eが与えられた時、eと等価なCNFを求める述語cnf/2を定義せよ。 という問題がわかりません。 誰か教えてくれませんか?
425 :
デフォルトの名無しさん :05/01/19 11:10:32
【質問テンプレ】 [1] 授業単元:暗号化 [2] 問題文(含コード&リンク): 以下のグローバル変数CODEを使って,負でない整数を暗号・復号化する。 /* 0 1 2 3 4 5 6 7 8 9 */ int CODE[] ={0,7,8,9,3,4,5,2,1,6}; 負でない整数を暗号にする関数[int encode(int data)],復号する(元に戻す)関数[int decode(int code)]を作りなさい。 [3] 環境 [3.1] OS: Windows2000 [3.2] コンパイラ(バージョン): VisualC++ Ver6.0 [3.3] 言語:C [4] 期限:2005年01月31日まで よろしくお願いします。
int encode(int data) { x ++ ; } int decode(int code) { code -- ; } main() { int i,n = sizeof(CODE)/sizeof(CODE[0]) ; for(i=0; i<n ;i++) { CODE[i]=encode(CODE[i]) ; } for(i=0; i<n ;i++) { CODE[i]=decode(CODE[i]) ; } } // ・・・・・・・
427 :
デフォルトの名無しさん :05/01/19 11:21:56
>425 十進表示の各桁をCODE[]で撹拌しろ。nを10で割った余りはn%10
428 :
デフォルトの名無しさん :05/01/19 11:23:22
>426 全くダメ。使えない
撹拌の意味を述べよ
430 :
デフォルトの名無しさん :05/01/19 11:29:23
>429 かき混ぜるの意
[1] 授業単元: 科学計算演習 [2] 問題文(含コード&リンク): 化学反応のサンプリング(反応量の平均と分散を求める) [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ(バージョン): GCC [3.3] 言語:C言語 [4] 期限:2005年1月20日 A+B=Cとなるような化学反応式があり、Aを可変、Bを一定の時の計算をする int i,j,k; nstep=30; loop=20; for(0<j<loop){ A=(100/j); B=100; for(0<i<nstep){ A=(100/j)*drand48(); B=100*drand48(); func(x, y, z)// 結果を返す関数 result_A; result_B; } ave_A = result_A / nsteps; // result_Aの平均値を求める ave_B = result_B / nsteps; // result_Bの平均値を求める printf("%f, %f\n", ave_A, ave_B); } 2重ループの外にfor文を加えて3重ループ(for(0<k<20))にし、 平均値(ave_A、ave_B)の平均値を求めるにはどうすればいいのですか? お願いします。
432 :
デフォルトの名無しさん :05/01/19 11:50:20
>431 平均値=合計値÷個数
433 :
デフォルトの名無しさん :05/01/19 11:51:01
ローパスフィルターの書き方、もしくはそれが載っているホームページを教えてください。
435 :
デフォルトの名無しさん :05/01/19 12:01:59
>434 もーれつに頑張って合計しろ
437 :
デフォルトの名無しさん :05/01/19 12:26:46
事故解決しました。有難う。
439 :
デフォルトの名無しさん :05/01/19 12:31:15
>438 >431を解決してください。
「データ入力及びデータの表示を行なうプログラムを作りなさい。一件分の入力処理は input_data()で、表示はdisplay_data()と処理を関数で分けて行ないなさい」 という問題があるのですが、「一件分の入力処理はinput_data()で、表示はすべてdisplay_data()で 処理しなさい」ということですか??
>>422 氏
どうもありがとうございます!!わかりやすくて参考になりました。
C++面白いので取ってよかったなと思います。
444 :
デフォルトの名無しさん :05/01/19 12:52:06
シェルソートって何?
>>425 #define decode(a,n) encode(a,n)
void encode(unsigned int a,int n)
{
int i;
unsigned int c,d;
for(i=0;i<n;i++){
c=a[i];
d=0;
while(c){
d*=10;
d+=CODE[i%10]c%10;
c/=10;
}
}
}
訂正 d+=CODE[i%10]^(c%10);
さっすが!
448 :
352 :05/01/19 13:27:26
>>363 さん
なぜかコンパイルしても動きません。
エラーはないのですがプログラムが実行出来ませんと出ます。
よろしくお願いします。
449 :
352 :05/01/19 13:30:35
というか、 error C2065: 'INT_MAX' : 定義されていない識別子です。 と出てビルドできません。 何か読み込む特殊なライブラリとかあるんでしょうか?
とりあえず stdio.h stdlib.h をインクルードしてみ それでもINT_MAXが未解決なら #define INT_MAX (0x7FFFFFFF)
451 :
デフォルトの名無しさん :05/01/19 13:47:03
<limits.h>
stddef.hかとおもてた そだねlimits.hだね
453 :
352 :05/01/19 13:54:22
ありがとうございました。 stdio.h stdlib.h この二つは入れてたんですが、<limits.h> でいけました。
454 :
352 :05/01/19 14:05:03
>>355 さん
IIIの(3)、(4)ともに動作しませんでした。
3の方はビルドできるが実行するとエラー落ち
4のほうはビルドも出来ません。
>>454 =352
俺は355じゃないが、ともにビルドできて、動作もするぞ。
動作は、
./hoge.exe 101.01
と引数を与えなければ駄目だ。
標準入力からやりたい場合は、mainのd =の行を以下の3行に書き換え。
char temp[256];
fgets(temp,256,stdin);
d = convSei( strtok( temp , "." ) ) ;
(4)の方も同様に ./hoge 205.25 などの引数が必要。
これもsscanfの行をscanf("%lf",&d);に書き換え。
コンパイルが通らないなら、エラーメッセージくらいは書いてくれ。
環境 OS: WindowsXP 言語:C 問題文 問1 かけ算の九九の表には、全部で81種類のかけ算(1x1から9x9まで)が出てくる。 これらの積の総和を求めたい。 (1)関数を用いないで積の総和を求める。 (2)各段の積の総和は関数danで求め、それらの総和はmain関数で求める。 (3)個々の掛け算の積は関数sekiで求め、それらの総和はmain関数で求める。 問2 異なるn個のものからr個とって1列に並べる順列の数(nPr)と異なるn個のものか らr個とる組み合わせの数(nCr)を求める。n!は関数factorialで求める。 どなたかよろしくお願いします。問2が全くわかりません・・・
>>456 問2 あんまり大きい数を入れるとintがあふれるよ。
#include <stdio.h>
#include <string.h>
int factorial(int a){
if(a==0)return 1;
else return a*(factorial(a-1));
}
int permutation(int n,int r){
return factorial(n)/factorial(n-r);
}
int combination(int n,int r){
return factorial(n)/factorial(n-r)/factorial(r);
}
int main(){
printf("5P3=%d\n",permutation(5,3));
printf("5C3=%d\n",combination(5,3));
return 0;
}
>>456 問2
factorialを作ってそれを使うならば、二項係数の関数c_factorialは次の通り。
int factorial(int n){return n == 1 ? 1 : n * factorial(n - 1);}
int c_factorial(int n, int r){return factorial(n) / factorial(n - r) / factorial(r);}
factorialを使わなくてもよいならば、パスカルの三角形の公式から
int c_pascal(int n, int r){return n == r || r == 0 ? 1 : c_pascal(n - 1, r - 1) + c_pascal(n - 1, r);}
と書くこともできる。
追加点(゚д゚)ウマー
>>456 問1
#include <stdio.h>
#include <string.h>
int dan(int a){
int i,sum=0;
for(i=1;i<=9;i++){sum+=i*a;/*sum=sum+i*/}
return sum;
}
int seki(int a,int b){return a*b;}
int main(){
int i,j,sum;
sum=0;/*(1)*/
for(i=1;i<=9;i++){for(j=1;j<=9;j++){sum+=i*j;}}
printf("(1)=%d\n",sum);
sum=0;/*(2)*/
for(i=1;i<=9;i++){sum+=dan(i);}
printf("(2)=%d\n",sum);
sum=0;/*(3)*/
for(i=1;i<=9;i++){for(j=1;j<=9;j++){sum+=seki(i,j);}}
printf("(3)=%d\n",sum);
return 0;
}
わざわざ再帰使ってるし解いてるのは厨房だろうな
環境 OS: WindowsXP 言語:C++ 長い文字列と短い文字列(単語みたいなもの)を入力して 長い文字列の中に短い文字列がいくつ入ってるか数を出力するプログラムはどうすればいいですか?
>>464 AAAAAA のなかに AA はいくつ入ってると考えるの?
>>465 そうです〜長い英文の中にappleという文字列はいくつ入ってるかとかです
検索エンジンとかに使われてるやつらしいんですが
>>465 が言ってるのは
AA AA AAと数えて3個なのか、重なり許して5個と数えるのかってことさね。
1個という数えかたもあるね。
[1] 授業単元: 情報処理 [3.1] OS: windows [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C言語 [4] 期限:明日の昼までです 問題文(含コード&リンク): 課題1 main関数のみで5人の学生の偏差値を求めるプログラムを作れ。 (関数goukei,goukei2を使うこと。) 公式 分散(D)=二乗和の平均 − 平均の二乗 標準偏差=√D ,プログラムではsqrt(D) 偏差値=50.0+10.0*(点数−平均)/ 標準偏差 課題2 課題1の偏差値の求め方を関数 hensatiを使って人数分の偏差値を求めよ。 注意 最初にプロトタイプ型で関数を3つ宣言する。 すいません、お願いします
>>471 何も書いてないので恐らくscanfでキー入力かと思います
age
>>470 > main関数のみで5人の学生の偏差値を求めるプログラムを作れ。
> (関数goukei,goukei2を使うこと。)
は?
#include <stdio.h> int kaijo(int a) { int b,c; c=1; for(b=1;b<a+1;b++) { c=c*b; } return c; } main() { int x,y,z,nPr,nCr,n,r; scanf("%d %d",&n,&r); x=kaijo(n); y=kaijo(n-r); z=kaijo(r); nPr=x/y; nCr=x/(y*z); printf("nPr=%d nCr=%d",nPr,nCr); return 0; } nとrを入力してnPrとnCrを求めるプログラムを考えたのですが あってますでしょうか?ちなみにscanfのところ2ついっぺんにしたんですが、 こんな書式あるんですか?
477 :
デフォルトの名無しさん :05/01/19 23:23:06
>>470 「windows」って問題に書いてあるのか? 「windows」なら分かるがw
「main関数のみ」なのに「関数goukei,goukei2を使う」って矛盾してるだろ(藁
478 :
デフォルトの名無しさん :05/01/19 23:45:31
[1] 授業単元:プログラム1 [2] 問題文:配列の問題(Nを使う)で、素数の表を作ります。その際、エラトステネスのふるい (まず2の倍数を消して、次に3の倍数、4,5、・・の倍数を消していく)という方法を使う。 nの値は2以上100000以下とする。それ以外の値が入力されたら、「不適切です!」と表示させる。 実行結果は 2 3 5 7 11 ・・・・・ ・・・・・・・・・・ nまでの個数は〜個です。 と表示させ、かつ、10個で改行する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):確かVisual Basicだったかと・・ [3.3] 言語:C++ [4] 期限:2005年1月18日まで [5] その他の制限:この授業では return を使わないので、それでお願いします。
479 :
デフォルトの名無しさん :05/01/19 23:46:52
間違えました。1月25日までです・・
書き込むスレもお間違えですよ。
>>478 効率悪くて良かったら5行ぐらいで作れるよ。
>>478 > [3.2] コンパイラ(バージョン):確かVisual Basicだったかと・・
違う。VisualC++だ。
コンパイラすら分からん香具師はマジで氏ね で、VBなの?C++なの?
484 :
478 :05/01/19 23:59:10
本当に申し訳ありませんが5行は短すぎです!「苦労して作りました。」感を見せないと・・ そうです。VisualC++でした。わがまま申し訳ないです
>>478 #include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int main()
{
int N;
cin >> N;
if (N < 2 || 100000 < N) { cerr << "不適切です!" << endl; exit(1); }
vector<bool> prime;
prime.resize(N + 1, true);
for (int i = 2; i <= N; i++) { if (prime[i]) { for (int j = 2; i * j <= N; j++) { prime[i * j] = false; } } }
int count = 0;
for (int i = 2; i <= N; i++) {
if (prime[i]) {
cout << i;
if (++count % 10 == 0) { cout << endl; }
else { cout << " "; }
}
}
if (count % 10 != 0) { cout << endl; }
cout << N << "までの個数は" << count << "個です。" << endl;
exit(0);
}
何この糞プログラム
488 :
478 :05/01/20 00:14:08
prime って何すか?vector とかも・・ printf とか scanf とかは使わないんですか?
>>488 お前、自分で書いたろう。
>[3.3] 言語:C++
文句言うな。
こいつは言語の区別すらつかないのか? 終わってるな
>>488 「すみません、C++ではなくて、C言語でお願いします」って言え。
492 :
478 :05/01/20 00:31:38
すみません、C++ではなくて、C言語でお願いします・・ いや、本当に今謝ろうかずっと迷ってたとこです・・m( )m ごめんなさい!
>>488 えと、あの、ごめんなさいー!
printfもscanfもC++でも使えるんですよー^^
でもでも、それってレガシーでしょう?
494 :
デフォルトの名無しさん :05/01/20 00:32:49
[1] 授業単元:組み合わせ論 [2] 問題文(含コード&リンク): 与えられたグラフGに対しKruskalの算法をもちい最小木を求めるプログラムを作りなさい(言語は何でもよい)。 [3] 環境 [3.1] OS: ? [3.2] コンパイラ(バージョン):? [3.3] 言語:C/C++/どちらでも可 [4] 期限:2005年1月31日17:00まで [5] その他の制限: 条件1・採用した辺からできる部分グラフの連結成分を保持するデータ構造において、 linkを行う際にunion by rank だけ取り入れたものとunion by rank と path compression を 併用したものの両方を作成。 条件2・四則演算、比較、代入の総数を計測し、最小木とともにその総数を出力すること また、Gの入力は以下の形式で記述されたテキストファイルによるものとする Gの頂点数Gの辺数 Gの各辺に対する以下のようなリスト 端点 端点 辺の重み たとえば、次の頂点数が5、辺数が7のグラフの例である 5 7 1 2 3 1 3 5 1 5 20 2 4 10 2 5 7 3 4 19 4 5 5
コンパイル通してないけどどっか間違ってるとこある?VBなのにC++ってのが間違いだと思うけど。 #include <iostream> #include <vector> void main(void) { int sievesize; do { std::cout << "素数を求める範囲(2-100000) > " ; std::cin >> sievesize; }while( (sievesize < 2 || sievesize > 100000) && (std::cout << "不適切です!" << std::endl, true)); std::vector<bool> sieve(sievesize, true); for (size_type i = 2; i * i < sievesize; i++) { if (sieve[i] == true) { for (size_type j = i * 2; j < sievesize; j += i) { sieve[j] = false; } } } int numOfPrime = 0, row = 0; for (size_type j = 2; j < sievesize; j++) { if (sieve[j] == true) { std::cout << j << " "; numOfPrime++, row++; if (row > 9) { std::cout << std::endl; row = 0; } } } std::cout << std::endl; std::cout << sievesize << "までの個数は" << numOfPrime << "個です。\n" ; }
リロードせずに投稿してしまったorz
>>496 > if (sieve[i] == true) {
なんで (sieve[i] == true) が true であることを
if ((sieve[i] == true) == true) って調べないの?
>>500 じゃあ
if ((sieve[i] == true) == true) がtrueであることを
if (((sieve[i] == true) == true) == true) って調べて下さい。
>>494 union by rank と pass compression について手持ちの資料になんかあるなら追記してくれ。
英語サイトで解説してるのみつけたが、いまいちわからん。
503 :
494 :05/01/20 01:34:14
>>502 英語サイトまで読んでくれるなんて;;
> union by rank と pass compression について
手持ちのプリント2枚分あるんですが、プリンターで取り込んだんですが、
どうやったらアップできるのか…_| ̄|○
> union by rank と pass compression について アルゴリズムイントロダクション第2巻にのってるよ
>>505 そんな情報じゃ、その本を持ってる人しかわからんじゃん。独りよがりな書き込みスンナ。
本買えよ。金出して。
>>507 ここは宿題スレだぞ。ブルジョアな書き込みスンナ。
>>507 うっせハゲ。宿題に答える気がないなら失せろ。
510 :
デフォルトの名無しさん :05/01/20 02:23:11
(・∀・)ニヤニヤ
>>501 if ((sieve[i] == true) == true) がtrueであることをしらべられるんですか?
この殺伐とした空気が大好き^^ 投下された問題を先に解くか解かれるかたまんないね
>>511 文は値をもたない。君の言明は意味がない。
void main()void
>>470 1な。
#include <stdio.h>
#include <math.h>
int main() {
int i, score[5];
double heikin, bunsan,sum=0.0,hyohen,hensati[5];
printf("成績を入力してください\n"); for(i=0; i<5; i++) scanf("%d", &score[i]);
heikin = ((double)score[0]+(double)score[1]+(double)score[2]+(double)score[3]+(double)score[4])/5.0;
for(i=0; i<5; i++) sum = sum + (double)score[i]*(double)score[i];
bunsan = sum/5.0 - heikin*heikin; hyohen = sqrt(bunsan);
for(i=0; i<5; i++) hensati[i] = 50.0+10.0*((double)score[i]-heikin)/hyohen;
printf("偏差値は、%lf %lf %lf %lf %lf\n",hensati[0],hensati[1],hensati[2],hensati[3],hensati[4]);
return 0;
}
>>470 2な。
#include <stdio.h>
#include <math.h>
double hensati(double hyohen, int tensu, double heikin);
int goukei(int score[], int j);
int goukei2(int score[], int j);
int main() {
int i, score[5];
double heikin,bunsan,hyohen;
printf("成績を入力してください\n"); for(i=0; i<5; i++) scanf("%d", &score[i]);
heikin = (double)goukei(score, 5)/5.0;
printf("%lf", heikin);
bunsan = (double)goukei2(score, 5)/5.0 - heikin*heikin;
hyohen = sqrt(bunsan);
for(i=0; i<5; i++) printf("%lf \n", hensati(hyohen, score[i], heikin));
return 0;
}
int goukei(int score[], int j) {
int i,sum=0;
for(i=0; i<j; i++) sum = sum + score[i];
return sum;
}
int goukei2(int score[], int j) {
int i, sum=0;
for(i=0; i<j; i++) sum = sum + score[i]*score[i];
return sum;
}
double hensati(double hyohen, int tensu, double heikin){
return 50.0+10.0*((double)tensu-heikin)/hyohen;
}
>>478 はい、C言語で。
#include <stdio.h>
int main(void) {
int i, j, n, sieve[100001], notprime;
scanf("%d", &n);
if (n < 2 || 100000 < n)
printf("不適切です!");
else {
for (i = 2; i <= n; i++) sieve[i] = 1;
sieve[0] = sieve[1] = 0;
for (i = 2; i <= n / 2; i++) {
notprime = i;
while ((notprime += i) <= n) sieve[notprime] = 0;
}
for (i = 2, j = 0; i <= n; i++) {
if (sieve[i]) {
printf("%d ", i);
if (++j % 10 == 0) printf("\n");
}
}
}
}
/*
>>366 もう(みてない || 自己解決)したかもしれないけど…。ちなみにVC++でしか試してない。*/
#include <stdio.h>
#define MAX 1000
int main(){
char strBuf[MAX];
int i, length, c;
do{
i = 0;
while(((c = getchar()) != '\n')){
if(i < MAX-1){
strBuf[i++] = c;
}
}
strBuf[i] = '\0';
length = 0; i= 0;
while( strBuf[i] != '\0' ){
if( strBuf[i] == '.' ){
length = ++i;
while( strBuf[i] == ' ' )++i;
}else{
length = ++i;
}
}
strBuf[length] = '\0';
/*わかりやすいようにスラッシュを入れた*/
printf( "%s/\n", strBuf );
}while(strBuf[0] != '\0');
}/*何も入力せずにエンターで終了*/
520 :
デフォルトの名無しさん :05/01/20 04:32:39
C言語で線形リストのクイックソートはどうやればいいでしょうか?
各リスト要素のポインタを配列に入れて 配列のクイックソートをするだけでいいじゃん
522 :
デフォルトの名無しさん :05/01/20 09:04:30
[2] 二分法、ニュートン法、割線法を実行するプログラムをつくり、それを利用して以下の式の、0から10の間にあるルートを求めよ。 f(x)=cos(x-1)+log(x/4 +1)-1; f(x)=ln(x)-(1.5)^x/4; <--1.5のx/4乗 f(x)=tan(4+x/2)+3; [3] OS: Unix Solaris C++ [5] 倍精度計算、10の-12乗以下の絶対誤差、最高100回までの反復を用いる事。 正直、全然分からないまま 数日が過ぎてしまいました・・・ よろしく御願いします。
523 :
522 :05/01/20 09:16:43
追加です、すいません。 [5] ・二分法には、0 <= i <= 9 の [i, i+1] 間隔 (f(i)と、f(i+1)の+、−サインは一致する事はない)を利用する事。 ・ニュートン法の、反復開始地点は 0から10の間である。 ・割線法は、 (i, i+1)で開始する。 (0 <= i <= 9) ・xが 求めたルートの10の-12乗内であるか確認し、もし違えば その開始条件ではルートを 見つける事は無理だということをPrintする。 ・ニュートン法と割線法の場合、Convergeしない場合があることに注意。もし、Xiが [-10の5乗, +10の5乗]の範囲を超えたら、プログラムは停止する。 ・gethrtime()を使って、式の時間を計る事。 以上が、書き忘れていた条件です。
>>520 1.リストの先頭の要素をとりだす。
2.ふたつの線形リストL,Rを用意して、1.でとりだした要素より小さい要素は
Lに、それ以外はRにつなぐ。
3.LとRをそれぞれソートしてから連結する。
じつは配列でやるより簡単。
>>465 468
返事おくれてすいません
AAAAAAの中にAAは3個と考えるほうです
526 :
352 :05/01/20 13:19:47
>>455 さん
すみません。
とりあえず3-4のエラーメッセージなんですが、
error C2143: 構文エラー : ';' が 'type' の前に必要です。
と出ます。
#include <stdio.h> #include <string.h> #define MAX_LEN 1024 int main() { char l[MAX_LEN],s[MAX_LEN]; char* p=l; int i; int n=0; printf("対象文字列>");scanf("%256s",l); printf("検索文字列>");scanf("%256s",s); while(p){ p=strstr(p,s); n++; } printf("%d個\n",n-1); return 0; }
あ、間違えた sの長さ足してない 俺落ちるから誰かフォローよろしく
529 :
デフォルトの名無しさん :05/01/20 13:48:13
[1] 授業単元:棒グラフの作成 [2] 問題 (1)標準入力からデータを読み込んで,棒グラフを標準出力に書くプログラムを作りなさい。 (2)以下のようにスケールを入れなさい。データが40を超えたら,表示しないようにしなさい。グラフのどこかにデータの数値を表示しなさい。 +----+----1----+----2----+----3----+----4 23 |*********************** 45 |***************************************+ [3] 環境 [3.1] OS:Windows2000 [3.2] コンパイラ(バージョン): VisualC++ Ver6.0 [3.3] 言語:c [4] 期限:2005年1月21日まで (1)は例題を見ながらやってみたんですがうまくいきません。修正するところがあったら教えてください。 よろしくお願いします。
530 :
529 :05/01/20 13:50:42
#include <stdio.h> #include <stdlib.h> #define LMT 512 int read2iary(int data[], int num); int draw_bar(int d); main() { int i, data[LMT], num; num = read2iary(data, LMT); for (i = 0; i < num; i++) { draw_bar(data[i]); } } int read2iary(int data[], int max) { int i, d; for(i=0; i<max; i++) { printf("[%d]> ", i); scanf("%d", &d); if(d < 0) return(i); data[i]=d; } return(i); }
531 :
529 :05/01/20 13:51:23
int draw_bar(int d) { int i; for(i=0; i<d; i++) { printf("*"); } printf("\n"); return(i); }
532 :
デフォルトの名無しさん :05/01/20 13:51:38
printf("%s","棒グラフ");
533 :
デフォルトの名無しさん :05/01/20 14:24:45
「ファイルの書き出し」の部分を再起呼び出しで取り出したいのですが、どうしたらいいんでしょうか? #include<stdio.h> #include<string.h> #include<stdlib.h> void main( int argc, char *argv[] ){ FILE *fp_r,*fp_w; int iBox,iStr,x; char cFileName_r[1024],cFileName_w[1024],cNum[10][4]; memset(cFileName_r, 0x00, sizeof(cFileName_r)); memset(cFileName_w, 0x00, sizeof(cFileName_w)); memset(cNum, 0x00, sizeof(cNum)); if ( argc == 1 ) { printf("ファイルを指定してください。\n"); return;} strcpy(cFileName_r, argv[1]); if ( (fp_r = fopen(cFileName_r, "r")) == NULL ){ printf("ファイル[%s]がオープンできません。\n", cFileName_r); exit(0);}
534 :
デフォルトの名無しさん :05/01/20 14:25:35
つづきです while ( fgets(cNum[0], sizeof(cNum[0]), fp_r) != NULL ) { for( x = 1; x < 9; x++ ){ for( iBox = 0; iBox < 8; iBox++ ){ iStr=strcmp(cNum[iBox], cNum[iBox+1]); if( iStr > 0 ){ strcpy(cNum[9], cNum[iBox]); strcpy(cNum[iBox], cNum[iBox+1]); strcpy(cNum[iBox+1], cNum[9]);} } } } printf("ファイル名を記入してください。(文字の最後に.txtを記入要)\n"); scanf("%s",cFileName_w); printf("ファイルを書き換えます\n"); if ( (fp_w = fopen(cFileName_w, "w") ) ==NULL ){ printf("ファイル[%s]がオープンできません。\n", cFileName_w); exit(0);} for(iBox = 0; iBox < 9 ; iBox++){ fprintf(fp_w, "%s", cNum[iBox]); fprintf(stdout, "%s", cNum[iBox]);} printf("[%s]を並べ替えたものを", cFileName_r ); printf("[%s]に書込みしました。", cFileName_w ); memset(cFileName_r, 0x00, sizeof(cFileName_r)); memset(cFileName_w, 0x00, sizeof(cFileName_w)); memset(cNum, 0x00, sizeof(cNum)); fclose(fp_r); fclose(fp_w); }
>>527-528 ( ゚Д゚)ノフォラァヨ!! ---===≡≡≡ω シュッ!
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1024
int main()
{
char l[MAX_LEN],s[MAX_LEN];
char* p;
int n;
do{
n=0;p=l;
printf("対象文字列>");scanf("%256s",l);
printf("検索文字列>");scanf("%256s",s);
while(p=strstr(p,s)){
p+=strlen(s);
n++;
}
printf("%d個\n",n);
}while(strcmp(l,"nullpo"));
return 0;
}
>>529 #include <stdio.h>
void put_line(unsigned n)
{
unsigned i;
if (n > 40) n = 40;
for (i = 0; i < n; ++i) {
putchar('*');
}
putchar('\n');
}
int main(void)
{
unsigned n, data[256], i;
for (n = 0; n < 256 && scanf("%d", &data[n]) == 1; ++n)
;
puts(" +----+----1----+----2----+----3----+----4");
for (i = 0; i < n; ++i) {
printf("%3u|", data[i]);
put_line(data[i]);
}
return 0;
}
>>529 どこもおかしくないみたいだよ。タダ単にLMTがでかすぎるだけってオチじゃない?
ちゃんとグラフ出力されたよ。
>>529 あ、ごめん、マイナス値で入力終了なのね
とにかくどこもおかしくないよ。
問題1:スタック push.popを関数で記述せよ (overflow,underflowを入れる) 問題2待ち行列 関数in.outを記述せよ OS:WindowsXP 言語:C++ 期限21日の昼12時まで お願いします
540 :
デフォルトの名無しさん :05/01/20 19:46:55
const size_t STACK_MAX=10; typedef int STACK_T; void push(STACK_T* p,size_t n,STACK_T i){if(n<STACK_MAX-2)p[n++]=i; else puts("overflow");}
541 :
デフォルトの名無しさん :05/01/20 19:49:23
STACK_T pop(STACK_T* p,size_t n){if(n>0)return p[--n]; puts("underflow");return 0;}
542 :
デフォルトの名無しさん :05/01/20 19:59:38
>540-541 size_t nはsize_t&nの間違い
543 :
デフォルトの名無しさん :05/01/20 20:15:36
点1:p1(x1,y1)が与えられた時 式1:y=4/3*x 式2:y=-4/3*x に挟まれた上下左右領域のどこに含まれるかをC(C++)言語で示せ これを教えてください。
訂正:点1がどこに含まれるか
545 :
デフォルトの名無しさん :05/01/20 20:19:51
>543-544 x,y座標それぞれの場合を検証して、場合分けの木を書けばよかろう
546 :
デフォルトの名無しさん :05/01/20 20:43:11
http://www.ehime-u.ac.jp/ICPC/problems/domestic/d2004/C.jp/C.html だれかこのプログラムをCに直してくれませんか?問題は↑
#include <iostream>
using namespace std;
int solve(int p, int q, int a, int n, int d, int cp, int cq){
int cnt = 0;
for (int x = d; cq * x <= a; ++x) {
int cp2 = cp * x + cq;
int cq2 = cq * x;
// p/q == cp2/cq2 <=> p * cq2 == q * cp2
if (p * cq2 == q * cp2) { ++cnt; }
if (n > 1) {
cnt += solve(p, q, a, n - 1, x, cp2, cq2);
}
}
return cnt;
}
int main(void){
int p, q, a, n;
while (cin >> p >> q >> a >> n, (p || q || a || n)) {
cout << solve(p, q, a, n, 1, 0, 1) << endl;
}
}
547 :
355 :05/01/20 20:51:56
>>526 エラーメッセージはすべて書きましょう。
特に行数は大切です。
また、切り貼りで行数がずれてしまうこともあるので、
該当行も示しましょう。
ちなみにgccでコンパイルしたからVCじゃむりかもな
>>455 あんがと
548 :
デフォルトの名無しさん :05/01/20 20:52:41
>546 cin>>はscanfに、cout<<はprintfに、endlは\nに相当する。地道に置き換えればいい。 whileの中の,の後の式は、いずれかが0かどうかを調べている。 なお、一般に直前に関数名のない式(a,b)はa,bの順に評価されbの値を返す。
549 :
デフォルトの名無しさん :05/01/20 21:02:06
>>546 1.#include <iostream>を#include <stdio.h>にする。
2using namespace std;を削除する。
3.while (cin >> p >> q >> a >> n, (p || q || a || n)) {を
while( ( scanf("%d %d %d %d", &p, &q, &a, &n ) == 4 ) &&
( p || q || a || n ) ){
にする。
4.cout << solve(p, q, a, n, 1, 0, 1) << endl;を
printf( "%d\n", solve( p,q,a,n,1,0,1) );
にする。
5.ファイルの拡張子をcにする。
6.コンパイラの意見に従って、変数宣言を関数の先頭に持っていく
7.一切試してないのでうまくいかなくても漏れを恨まない
550 :
546 :05/01/20 21:04:40
>>548 どうもありがとうございます…といいたいところですが
まだプログラミング初心者なので意味がよく分かりません(´・ω・`)
ソース載せてくれると嬉しいな
552 :
550 :05/01/20 21:10:47
がんばってみよう…
>>543 ほい。
#include <stdio.h>
int main() {
double x,y;
printf("x座標を入力\n"); scanf("%f", &x);
printf("y座標を入力\n"); scanf("%f", &y);
if(y>4/3*x && y>-4/3*x) printf("上\n");
if(y<4/3*x && y>-4/3*x) printf("右\n");
if(y<4/3*x && y<-4/3*x) printf("下\n");
if(y>4/3*x && y<-4/3*x) printf("左\n");
if(y==4/3*x || y==-4/3*x) printf("線上\n");
return 0;
}
/*余談 問題にy=3/4xとか書いてあるもんだから掛け算記号の「*」の存在忘れて
デバッグに相当悩んだっす*/
>>553 double → float にするか
%f → %lf にしないと正常に値が入らないと思われ
>>555 そのへんよく分からないんだけど正確にはどうなってるの
教えてエロイ人
printf -> float, double ともに %f scanf -> float は %f, double は %lf
過去にあったな、%f %lfとprintf, scanfの対照表。
559 :
デフォルトの名無しさん :05/01/21 01:03:27
文字列の中にkanbunという文字があったらkobunに直すプログラムが解けません・・・ すみませんが、お願いします。 #include<stdio.h> int main(void) { int i, a; char s[1024], t[1024], ch; i = a = 0; while((ch=getchar())!='EOF'){ s[i]=ch; i++; } s[i]='\0'; i=0; while(t[i]='\0'){ for(i=0;i<1024;i++){ if(s[i]=='k'){ if(s[i+1]=='a'){ if(s[i+2]=='n'){ if(s[i+3]=='b'){ if(s[i+4]=='u'){ if(s[i+5]=='n'){
560 :
デフォルトの名無しさん :05/01/21 01:05:40
/*続きです*/ t[i]='k'; t[i+1]='o'; t[i+2]='b'; t[i+3]='u'; t[i+4]='n'; t[i+5]=''; for(i=i+6;i<1024;i++){ t[i]=s[i+1];
>>559 そんな汎用性の無いソースを作ってはいけない
562 :
デフォルトの名無しさん :05/01/21 01:06:12
} } else t[i]=s[i]; } else t[i]=s[i]; } else t[i]=s[i]; } else t[i]=s[i]; } else t[i]=s[i]; } else t[i]=s[i]; } } printf("%s\n", t); return 0; }
563 :
デフォルトの名無しさん :05/01/21 01:14:57
>>561 すみません・・・
初心者なのでこれが精一杯だったんです
void replaceString(char* string, const char* from, const char* to) { const int len1 = CAST(int)strlen(from); const int len2 = CAST(int)strlen(to); char* found = strstr(string, from); while (found) { if (len1 != len2) { memmove(found + len2, found + len1, strlen(found + len1) + 1); /* シフト */ } memcpy(found, to, len2); found = strstr(found + len2, from); } } replaceString(string, "kanbun", kobun"); C++なら std::string s; s.replace(s.find("kanbun", 6, "kobun"); または boost::replace_all
565 :
デフォルトの名無しさん :05/01/21 01:23:43
関数ってやつですか・・・? 少し私には難しいみたいですけど; ありがとうございました。
>>559 strstr使わないで書いてみたよ('A`)
#include <stdio.h>
#include <string.h>
int main()
{
char src[] = "kanbun", dst[] = "kobun";
char buf[sizeof(src)];
int i=0, ch;
while ((ch = getchar()) != EOF) {
if (ch == src[i]) {
if (++i == strlen(src)) {
printf("%s", dst);
i=0;
}
} else {
if (i != 0) {
strncpy(buf, src, i);
buf[i] = '\0';
printf("%s", buf);
i=0;
}
printf("%c", ch);
}
}
return 0;
}
568 :
デフォルトの名無しさん :05/01/21 03:52:15
C++で、stringを array of char に、 array of char を stringに変換する方法を教えてください。
string hoge; hoge.c_str(); // string -> const char* char str[] = "nurupo"; string hoge(str); // array of char -> string
570 :
568 :05/01/21 04:34:25
ということは、stringは const char* に変える事はできても char[]に変える事は できないのでしょうか? strtolを使わなければならないので、使う直前に char[]に変換したいのです。 const char*の状態で ためしに、strtolを使ってみましたが やはりコンパイルエラーが でてしまいました。
漏れんちのエアコンやっと直ってあったかいんだ。 プログラミングもあったかいものになると(・∀・)イイ!!と思ってる。
>>570 char *a_char;
string hoge = "abcdef";
a_char = new char[hoge.length()+1];
strcpy(a_char, hoge.c_str());
delete [] a_char;
これじゃだめですかい?
というか、stringを使うなら、strtolではなくてSTLやboostのAlgorithmを使うべきでは。
>>571 おまえ、(・∀・)イイ!!だろ。
こんな夜も明けぬ間にそんなバカなこと言ってはずかしくないのか?
このスレはなあ、お前を拒絶してるんだよ(・∀・)イイ!!
お前がなんでも(・∀・)イイ!!(・∀・)イイ!!言ってるからな、世の中に甘ちゃん厨房が
わんさか増えるんだよ。それがみんなにどれほど迷惑かけてるかわかってるのか、あ?
お前は偽善者だよ(・∀・)イイ!!。Noと言えない、典型的駄目人間だよ。
もう二度とこのスレに書き込むんじゃねーぞ。いいかげん、ぶちきれそうだからな。
574 :
568 :05/01/21 05:13:20
実は、strtolしか 16進法の値を持つ文字列を long値に変換し、 さらに16進法として間違った 値が見つかった場合 それを知らせる方法を知らなかったので。。。 strtolについても、この板で教えていただきましたw ただ、文字列というのが stringではない事に コンパイル時に気づき 今になってあたふたしております。 教えていただいた方法で試してみます。
576 :
デフォルトの名無しさん :05/01/21 07:04:36
577 :
576 :05/01/21 07:07:31
書き方が悪かった… このプログラムを「小さい順に並べたものを別のテキストに書き込み 表示して最初と最後の5行を表示する」ように書き換えるには どうしたらいいでしょうか?
578 :
デフォルトの名無しさん :05/01/21 09:03:33
>576-577 ソートするためには、ソートしたい全てのデータが必要。一度reallocなどによる動的割り当てで全ての行を取得せよ。
>>570 #include <cstdlib>のstrtol()はconst char *を引き数として取ると思ったのだが。
よもや変なコンパイラを使ってないだろうな。
580 :
デフォルトの名無しさん :05/01/21 11:13:46
ファイルから一行づつ表示して、打ち込んで 正解だったら次のを表示するみたいなタイピングもどきを作りたいんですけど したのコードだとファイルが数行あると同じに打ち込んでもbooとでてしまいます 一行だけなら正解になるんですけど… どこが問題なんでしょうか?誰か教えてください、お願いします while(fgets(a, 256, fp) != NULL) { while(1) { printf("%s\n",a); scanf("%s",b); if (strcmp(a, b) == 0) { printf(" good\n"); break; } else { printf(" boo\n"); } } }
581 :
デフォルトの名無しさん :05/01/21 11:18:36
>580 fgetsは\nも読む
つーか、scanf()使うなや。
[1] 授業単元: 計算機プログラミング演習 [2] 問題文(含コード&リンク): -無限から+無限の範囲で、sinx/xを積分するプログラムです。 ・台形公式を用いたプログラムとシンプソン公式を用いたプログラムをそれぞれお願いします。 [3] 環境 [3.1] OS: Windows2000/XP [3.2] コンパイラ(バージョン): VisualC++でもBorlandC++でも可。 [3.3] 言語:C [4] 期限:2005年01月21日(今日中) [5] その他の制限: 特になし。 期限過ぎてもいいのでよろしくお願いします。
584 :
580 :05/01/21 12:06:28
あのどう直せばいいですかね; すみません初心者なもので…
585 :
デフォルトの名無しさん :05/01/21 12:20:13
>584 専門学校ならデバッグも教えるだろ? デバッグして変数値を見れば?
586 :
425 :05/01/21 12:25:07
>>445 さん
うまくいかないのですが…
このまま使うだけではだめなのですか?
587 :
580 :05/01/21 12:45:31
普通の学校の授業なのでデバックとかよくわからなくて fgetsが改行までよんでしまうならどうすればいんだろ… scanfは何が問題なんでしょうか?
>>583 普通のコンピュータの浮動小数点数では無限という値を取り扱えないよ。
制限を設ける必要がある。それでもよかったら、範囲を教えれ。
589 :
デフォルトの名無しさん :05/01/21 12:50:19
改行文字を0で消す
>>588 答えが(π)小数点以下第六桁位まで求められれば十分です。
よろしくお願いします。
592 :
576 :05/01/21 13:05:04
>>578 元々小さい順に表示はされるのですが全部表示されてしまうんです。
これを最初と最後の5行だけ表示させるというようなんとかならないでしょうか?
593 :
デフォルトの名無しさん :05/01/21 13:07:47
>592 表示したい行番号の条件は?
>>590 ほらよ。まず台形公式
#include <stdio.h>
#include <math.h>
double f(double x)
{
return sin(x) / x;
}
int main(void)
{
int i;
const int n = 100000000;
const double a = -10000001., b = 10000001.;
double h, s = 0., res, x;
h = (b - a) / n;
x = a;
for (i = 1; i <= 2 * n - 1; i++)
s += f(x += h);
res = h * ((f(a) + f(b)) / 2 + s);
printf("∫[x = %e, %e] sin(x) / xdx = %.10e\n", a, b, res);
return 0;
}
シンプソン法 #include <stdio.h> #include <math.h> double f(double x) { return sin(x) / x; } int main(void) { int i; const int n = 100000000; const double a = -10000001., b = 10000001.; double h, s1 = 0., s2 = 0., res; h = (b - a) / (2 * n); for (i = 1; i <= 2 * n - 3; i += 2) { s1 += f(a + h * i); s2 += f(a + h * (i + 1)); } res = (f(a) + f(b) + 4 * (s1 + f(b - h)) + 2 * s2) * h / 3; printf("∫[x = %e, %e] sin(x) / xdx = %.10e\n", a, b, res); return 0; }
597 :
576 :05/01/21 13:10:54
>>590 aとbの範囲をより大きく、n(刻み値)をより大きくすればするほど精度があがる。
小数点以下6桁まで求まればよければ上のパラメータで十分。
599 :
デフォルトの名無しさん :05/01/21 13:16:51
>590 誤差が大きくなりがちで、区間も広すぎる。対称性により積分区間を半分に。無限大の代わりに<limits.h>にある値を使え。計算量も削らねば。
>>599 limits.hではなくてfloat.hだろ。
601 :
デフォルトの名無しさん :05/01/21 13:21:05
>597 これはむしろ数学の問題だ。図を描いて積を考えてみろ。精度のために絶対値の小さい方から足し合わせるのがコツ。
>>601 文句言うなら、お前がプログラム書いてやれよ。俺はもう書いたから降りる。
603 :
デフォルトの名無しさん :05/01/21 13:31:01
上のコードはiで積分区間を等分しただけ。誤差も大きい。y軸に近いほど平均変化率が高いので区間を細かく刻んで計算した方がいい
>>603 能書きはよくわかったからプログラムは?
俺はもう飽きたから降りる。
おまえらよく飽きもせずつき合っていられるな。
607 :
デフォルトの名無しさん :05/01/21 13:38:43
>604 誰かがやってくれるさ
>>605 なんだ、数学の知識はあってもプログラムは書けないのか。
俺も
>>601 >>603 は知っている。しかし
>>583 がそこまで要求している、かつ理解できるとは
思えないから、一般的なプログラムを書いただけ。
>>608 理解はできるだろうさ。簡単なんだから。
>>609 わかったよ、書けばいいんだろ、書けば。
区間を100等分ほどに分け、xが0に近づけば近づくほど刻み値を小さくする。
そして、-∞→0と、∞→0方向の二つに分けて足し合わせる。
関係ないけど、途中で中の人が変わった事に気づいてないね。
612 :
デフォルトの名無しさん :05/01/21 13:54:39
答えは0です。
台形の面積の公式は?
583=590ですけど576さんとは別人です。なんかごっちゃになってるようなので。
>>595-596 、588-590様
ありがとうございます。
すみません、588-590ではなく598-600でした。
台形公式のプログラムでは答えが3.14…でほぼπになるのですが、 シンプソン法では-1と出ます。これは仕方のない事なのでしょうか?
>616 切腹モノ
618 :
580 :05/01/21 14:35:09
すみません;やっぱわかんなくて 改行文字をよみこんじゃうから abc ってでた後に abc ってうちこんでも見えない改行文字のせいで boo ってでちゃうんですよね? a[strlen(a)-1] = '\0'; ってのを入れてみたんですけど、そうするとファイルの数行あるうちの 最後の行しか表示してもらえなかったです。やっぱ違うか; 改行文字を0で消せばいいって感じはなんとなくわかるんですけど やり方がわかりません。お願いします
ちくしょう。適応型積分にしてみたけどさっぱり精度が上がらない。 #include <stdio.h> #include <math.h> #define N 100 double f(double x) { if (x == 0.0) return 0.; return sin(x) / x; } int main(void) { int i, j, n2[N]; const int n = 10000; double h[N], s[2][N], a1[N], a2[N], res = 0., x, y; for (i = 0; i < N; i++) { n2[i] = n * (N - i / 2) + 1; a1[i] = i * 100. * N; a2[i] = (i + 1) * 100. * N; h[i] = (a2[i] - a1[i]) / n2[i]; s[0][i] = s[1][i] = 0.; }
for (j = 0; j < N; j++) { x = a1[j]; y = -a1[j]; for (i = 0; i < n2[j]; i++) { s[0][j] += f(x += h[j]); s[1][j] += f(y -= h[j]); } } for (i = N - 1; i >= 0; i--) { res += h[i] * ((f(a1[i]) + f(a2[i])) / 2 + s[0][i]); res += h[i] * ((f(-a1[i]) + f(-a2[i])) / 2 + s[1][i]); } printf("∫[x = %e, %e] sin(x) / xdx = %.10e\n", -a2[N - 1], a2[N - 1], res); return 0; }
>>618 初心者の私が書いてみました。でも最後の行の判定がうまくいきませんでした。誰か助けてorz
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE *fp;
char s[256];
char s2[256];
int i;
if ( (fp = fopen("test.c", "r")) == NULL ){
printf("file open error\n");
exit(1);
} else {
while((fgets(s, 256, fp)) != NULL){
printf("%s", s);
for (i = 0; s[i] != '\0'; i++);
s[i - 1] = 0;
gets(s2);
if ( strcmp(s, s2) == 0 ){
printf("good\n");
} else {
printf("boo\n");
}
}
fclose(fp);
}
putchar('\n');
return 0;
}
>>616 シンプソン法で-1と出る?俺の所ではほぼ台形公式と同じ値が出ているが・・・・
どっか間違っているのかな・・・・
624 :
デフォルトの名無しさん :05/01/21 14:49:24
>621 最後の行に改行がないとどうなる?
lim sin(x) / x = 1. x→0 だから、 if (x == 0.0) return 1.; return sin(x) / x; と書き直すとそこそこ精度が出るようになった。 にしても、全然普通の台形公式のプログラムと結果が変わらん。
626 :
デフォルトの名無しさん :05/01/21 15:02:50
>>625 0の時ってそうしないとエラーになるでしょ。だって分母0だもん。
バカバッカ
>>626 だから無条件に0.を返すようにしてたが、今線形代数の本を読み直したら、
>>625 のように書いてあったので、0.の替わりに1.を返すようにしただけ。
>>601 >>603 さんのようにしたプログラムで精度が上がらないか試してみているが、
さっぱり上がらない。奇関数の積分は別にシンプソン公式を使わなくても台形公式
で十分に精度が出るので、適応型積分でその効果が現れるようにするには、
まずおおよその関数の形をつかんでからでないと無意味だ。
>>627 プログラムも書かないで、人を批判する資格はない。消えろ。
631 :
580 :05/01/21 15:18:59
621さんのを参考にいじったらなんとなくできました 最後の行だけ一文字削られちゃうんですけど、そこはなんとかごまかします ありがとうございました!
632 :
デフォルトの名無しさん :05/01/21 15:26:52
633 :
デフォルトの名無しさん :05/01/21 15:33:25
お願いがあります。誰か、このプログラムを作ってください。 問題 次のような動作をする関数を定義しなさい。 文字列を引数に受け取り、そのコピーを返す関数strdup 仕様の詳細 ・文字列を格納するのに必要な領域は関数の内部で確保(hint: malloc関数) ・引数の文字列は変更されないことを明示(hint: const修飾子) ・文字列を格納するのに必要な大きさは?(hint: strlen関数) ・文字列のコピーをするには?(hint: strcpy関数) ・戻り値として、コピーした文字列の先頭へのポインタを返す ・領域の確保に失敗した場合はNULLを返す
>>628 sinx / x のグラフを描いてみろ。奇関数ではなくて偶関数だろ。
>>631 >630のプログラムでは、ファイルと標準入力の双方に改行コードがあることを期待している。
従って、ファイル末尾が改行コードではない場合に誤動作する。
なので、どちらの場合も改行コードがある場合にのみ取り除いておけばいい。
void removeN(char * line) {char * p = strchr(line, '\0'); if (p > line && p[-1] == '\n') {p[-1] = '\0';}}
>>630 インデントがグダグダだなぁ。
それはさておき、strcmp()を二回呼ぶのは感心しないし、0と比較するべきだと思う。
素直に
if (strcmp(type, s) == 0) {
/* 正解 */
} else {
/* 不正解 */
}
で充分だろ。
#ついでにいえば、bad(or num)をカウントする理由が全くない。
638 :
632 ◆gJ1B.hGsLk :05/01/21 15:45:58
639 :
638 ◆gJ1B.hGsLk :05/01/21 15:46:42
すいません、638でした…。
>>633 char * strdup(const char * s) {char * p = malloc(strlen(s) + 1); return p ? strcpy(p, s) : p;}
>>633 char *strdup(const char *str)
{
char *s;
if ((s = (char *)malloc(strlen(str) + 1)) == NULL)
return NULL;
strcpy(s, str);
return s;
}
int main(void)
{
char *p = strdup("abc");
puts(p);
return 0;
}
644 :
デフォルトの名無しさん :05/01/21 16:09:38
>>643 freeするのが嫌いなんだって、彼。
アホでしょ?
>>644 別にアホだとは思わんが、宿題としてはあった方がいいと思うな。
>>638 課題7-1
class IntPair : public Ordered {
int first, second;
public:
IntPair(int i = 0, int j = 0) : first(i), second(j) {}
void setFirst(int i) { first = i; }
void setSecond(int i) { second = i; }
~IntPair() {}
bool thistype(const Ordered& x) const {
return typeid(*this) == typeid(dynamic_cast<const IntPair&>(x));
}
bool operator==(const Ordered& x) const {
return first == dynamic_cast<const IntPair&>(x).first && second == dynamic_cast<const IntPair&>(x).second;
}
bool operator>(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second > dynamic_cast<const IntPair&>(x).second : first > dynamic_cast<const IntPair&>(x).first;
}
bool operator>=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second >= dynamic_cast<const IntPair&>(x).second : first >= dynamic_cast<const IntPair&>(x).first;
}
bool operator<(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second < dynamic_cast<const IntPair&>(x).second : first < dynamic_cast<const IntPair&>(x).first;
}
bool operator<=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second <= dynamic_cast<const IntPair&>(x).second : first <= dynamic_cast<const IntPair&>(x).first;
}
};
647 :
デフォルトの名無しさん :05/01/21 16:17:41
少し訂正 class IntPair : public Ordered { int first, second; public: IntPair(int i = 0, int j = 0) : first(i), second(j) {} void setFirst(int i) { first = i; } void setSecond(int i) { second = i; } ~IntPair() {} bool thistype(const Ordered& x) const { return typeid(*this) == typeid(dynamic_cast<const IntPair&>(x)); } bool operator==(const Ordered& x) const { return first == dynamic_cast<const IntPair&>(x).first && second == dynamic_cast<const IntPair&>(x).second; } bool operator>(const Ordered& x) const { return (first == dynamic_cast<const IntPair&>(x).first) ? second > dynamic_cast<const IntPair&>(x).second : false; } bool operator>=(const Ordered& x) const { return (first == dynamic_cast<const IntPair&>(x).first) ? second >= dynamic_cast<const IntPair&>(x).second : first >= dynamic_cast<const IntPair&>(x).first; } bool operator<(const Ordered& x) const { return (first == dynamic_cast<const IntPair&>(x).first) ? second < dynamic_cast<const IntPair&>(x).second : false; } bool operator<=(const Ordered& x) const { return (first == dynamic_cast<const IntPair&>(x).first) ? second <= dynamic_cast<const IntPair&>(x).second : first <= dynamic_cast<const IntPair&>(x).first; } };
>>647 =644
「アホ」ということにしたいんですね?
650 :
デフォルトの名無しさん :05/01/21 16:30:12
>>638 課題7-2
class IntPair : public Ordered, public Visible {
int first, second;
std::string str;
public:
IntPair(int i = 0, int j = 0, const std::string& s = "") : first(i), second(j), str(s) {}
IntPair(const IntPair& ip) : first(ip.first), second(ip.second), str(ip.str) {}
void setFirst(int i) { first = i; }
void setSecond(int i) { second = i; }
void setString(std::string& s) { str = s; }
~IntPair() {}
bool thistype(const Ordered& x) const {
return typeid(*this) == typeid(dynamic_cast<const IntPair&>(x));
}
bool operator==(const Ordered& x) const {
return first == dynamic_cast<const IntPair&>(x).first && second == dynamic_cast<const IntPair&>(x).second;
}
bool operator>(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second > dynamic_cast<const IntPair&>(x).second : false;
}
bool operator>=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second >= dynamic_cast<const IntPair&>(x).second : first >= dynamic_cast<const IntPair&>(x).first;
}
bool operator<(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second < dynamic_cast<const IntPair&>(x).second : false;
}
bool operator<=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second <= dynamic_cast<const IntPair&>(x).second : first <= dynamic_cast<const IntPair&>(x).first;
}
std::string get_str() const { return str; } void show() const { Visible::show(); } IntPair* clone() const { IntPair* ip = new IntPair(*this); return ip; } };
マンドクサ〜 こんなの12個も出さないといけないのか。
>>638 課題9-2?
template <int N> class Fact{
public:
enum{data=N*(int)Fact<N-1>::data};
};
template <> class Fact<0>{
public:
enum{data=1};
};
655 :
638 ◆gJ1B.hGsLk :05/01/21 17:08:27
>>653 本当にありがとうございます。助かります。
7-1で1個、7-2で2個という換算です。
現在最初の方のを自力で2個終わっています。
ほかの最初のほうのもがんばれるだけがんばります。
656 :
638 ◆gJ1B.hGsLk :05/01/21 17:10:47
>>654 ありがとうございます。
以下のプログラムは値のペアを表すtemplateクラスと, その使用例です〜の問題が課題1でした。
書き忘れててすいません…。
Windows2000、VisualC++の環境ではシンプソン法で-1と出たのですが WindowsXP、BorlandC++ではシンプソン法でも3.14・・・・と出ました。 みなさんどうもありがとうございました。
>>657 そうか。そしたらシンプソン公式の方を今からVC7.1で動かしてみるから。
>>657 本当だな。VC7.1だと、出力がおかしい。多分、sin()の入力を正規化しないと
だめっぽい。OVERFLOWとINEXACT例外が起きている。
>>659 7.1でもそうでしたか。こちらは6.0でやってみて-1でした。
>>657 わかった。
>>652 にも出ているけど、
double f(double x)
{
if (x == 0.)
return 1.;
return sin(x) / x;
}
とすると、VCでもちゃんと動くようになる。台形公式の方も念のため直しておいてくれ。
ちなみにOVERFLOWとINEXACTが起きるのはsinh()でした。
>>655 課題7-3
class RectangleArea : public Rectangle {
public:
RectangleArea(double v, double h) : Rectangle(v, h) {}
double area() const {
return get_virtical() * get_horizontal();
}
};
class RectangleAround : public Rectangle {
public:
RectangleAround(double v, double h) : Rectangle(v, h) {}
double around() const {
return 2 * (get_virtical() + get_horizontal());
}
};
課題7-4 class RectangleArea : public virtual Rectangle { public: RectangleArea(double v = 0., double h = 0.) : Rectangle(v, h) {} double area() const { return get_virtical() * get_horizontal(); } }; class RectangleAround : public virtual Rectangle { public: RectangleAround(double v = 0., double h = 0.) : Rectangle(v, h) {} double around() const { return 2 * (get_virtical() + get_horizontal()); } }; class RectangleAreaAround : public RectangleArea, public RectangleAround { public: RectangleAreaAround(double v, double h) : Rectangle(v, h) {} };
[1] 授業単元: プログラミングU [2] 問題文(含コード&リンク): 2重積分の問題です。 ・∬cos(x+y)dxdyを計算するプログラムです。 ・積分範囲はx,y共に0からπです。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ(バージョン): BorlandC++ [3.3] 言語:C [4] 期限:2005年01月24日17:00 よろしくお願いします。
課題7-4修正。初期化リストの変更により、デフォルト・コンストラクタを不要にした。 コンパイラによっては、RectangleAreaとRectangleAroundに送るコンストラクタ呼び出しを 無視して最適化できる。 class RectangleArea : public virtual Rectangle { public: RectangleArea(double v, double h) : Rectangle(v, h) {} double area() const { return get_virtical() * get_horizontal(); } }; class RectangleAround : public virtual Rectangle { public: RectangleAround(double v, double h) : Rectangle(v, h) {} double around() const { return 2 * (get_virtical() + get_horizontal()); } }; class RectangleAreaAround : public RectangleArea, public RectangleAround { public: RectangleAreaAround(double v, double h) : Rectangle(v, h), RectangleArea(v, h), RectangleAround(v, h) {} };
課題8はよくわからん。MyPairってどこから出てきたのやら?
669 :
デフォルトの名無しさん :05/01/21 18:59:56
問)実数を入力して小数第2位を四捨五入するプログラムをつくりなさい。 使用言語 : C できるだけ標準関数のみで解きたいんです。 意外に簡単かと思ったら分からんくて…。
1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): 0〜999までの数値をランダムで500個線形リストで生成する。 生成したリストをクイックソートを用いて、ソートする。 ソート前とソート後の状態を表示するプログラムを作成。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年1月24日18:00まで [5] その他の制限: ソートは関数で行う。0〜999までの数値は整数、同じ数値があっても良い。 構造体は struct node { int data; struct node *next; struct node *prev; } を使用すること。 どうかお願いします。
671 :
デフォルトの名無しさん :05/01/21 19:10:04
>>669 floor(x * 100) / 100;
あっ、(int)(x * 10 + 0.5) / 10.0 か。
>670 struct nude*new_nude(int _data) { struct nude*p=(struct nude*)malloc(sizeof(struct nude)); p->prev=p->next=NULL; p->data=_data; return p; }
>670 #define delete_nude(p) free(p)
nudeってあんた…俺釣られた?
677 :
デフォルトの名無しさん :05/01/21 19:55:15
>670 static struct nude*phead=NULL;
>>669 double round2(double val) {char buf[30]; sprintf(buf, "%.1f", val); return atof(buf);}
680 :
669 :05/01/21 19:59:18
>>673 一時的にintに変換してその値に小数を代入するんですか??
すいません、どういう処理がされているのか想像できなくて…。
681 :
669 :05/01/21 20:02:13
>>679 もう少し基本的な関数でやって頂けると助かります…。
sprintfやatofなどはまだ習ってないんです。
言われた通り標準関数のみで解いたのにこれか
>>680 一時的にintに変換 = 小数点以下切捨て。
0.5 足してから切り捨て = 小数点以下四捨五入。
10倍してから四捨五入して、その後10で割ることで、小数第2位を四捨五入。
686 :
669 :05/01/21 20:48:20
>>685 ありがとうございます。理解できました。
そこで早速プログラムを作ってみたのですが、どうも思うように動いてくれません。
例えば15.67を入力しても、出力される値が15.0000
以下が今作ったプログラムです。
#include <stdio.h>
int main(void)
{
double x;
printf("実数を入力して下さい : ");
scanf("%lf", &x);
x = ((int)(x * 100 + 5)) / 100;
printf("小数第2位を四捨五入した値は%fです", x);
return 0;
}
688 :
デフォルトの名無しさん :05/01/21 20:52:24
>>686 最初はややこしい式書いちゃだめだよ
x = ((int)(x * 100 + 5)) / 100;
をばらばらの式にしてちょっとづつ出力してみそ
double x2 = x * 100 ;
printf( "%f\n", x2 ) ;
double x3 = x2 + 5 ;
printf( "%f\n", x3 ) ;
なんてふうにね
ありがとうございます!分かりました!! 15.67 ↓10倍して0.5足す 157.2 ↓int型で0.2以下を削除(100倍だと小数第3位まで残ってしまいますね) 157 ↓10.0で割り算 15.7 #include <stdio.h> int main(void) { double x; printf("実数を入力して下さい : "); scanf("%lf", &x); x = (int)(x * 10 + 0.5) / 10.0; printf("小数第2位を四捨五入した値は%fです", x); return 0; } 無事動作しましたm(_ _)m
690 :
669 :05/01/21 21:08:29
ところで、なぜ10.0とする必要があるのでしょうか?
>>692 理解できました。ありがとうございます。
[1] 授業単元: 高度プログラミング演習 [2] 問題文(含コード&リンク): 常微分方程式の初期値問題です ・y'=y-x 0≦x≦1 y(0)=0 をオイラー法と修正オイラー法で yの値を求めるプログラムをそれぞれ作る。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ(バージョン): VisualC++ [3.3] 言語:C [4] 期限:2005年01月22日12:00 答えは y=x+1-e^x になります。 よろしくお願いします。
>>696 条件与えられてないです。
あ、h=0.1とするとか書いてあるんですけどこれは関係ありますか?
すみません分かりにくいので追加で。 y(x+h)=y(x)+hf(x,y(x)) のhです。
>>700 #include <stdlib.h>と、x2[DIVN + 1]は不要だから、削除しておいてくれ。
>>669 もっとスマートに。。。
printf("%.2f", x);
>>693 本当にありがとうございます。助かります。
[1] 授業単元: C言語研究2
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/107.txt [3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ): VisualStudio.Net
[3.3] 言語:C++
[4] 期限1月31日18:00まで
少しずうずうしいかとも思ったのですが、必修単位で落とすわけにはいかないので、
お暇な方がいましたらお願い致します。
これは簡単だからすぐにできそうだ。というのだけでもかまいません。
一番最後に一部、自分のソースもつけました。第3回のものなのですが、間違ってると指摘され
手直しを要求されました。
第8回のは先生に質問とかして頑張ってみます。
>>638 のは課題9-3と課題8は以外は皆様のおかげで答えがそろいました。
ありがとうございました。
>>704 改行制限のせいで詰め込んでいる。
MyVector operator + (const MyVector& a, const MyVector& b) {MyVector(a) += b;}
class Even {
(中略)
public:
Even(const Even& x) : data(x.data) { }
Even& operator++() {
data += 2;
return *this;
}
Even operator++(int) {
Even temp = *this;
++*this;
return temp;
}
Even& operator--() {
data += 2;
return *this;
}
Even operato--(int) {
Even temp = *this;
--*this;
return temp;
}
};
Even& operator++(Even& arg) {return ++arg;}
Even operator++(Even& arg, int) {return arg--;}
Even& operator--(Even& arg) {return --arg;}
Even operator--(Even& arg, int) {return arg--;}
>>704 class Week {
int WeekNum;
static const char *WeekDay[7];
public:
Week() : WeekNum(0) {}
void ViewDay(){std::cout << WeekDay[WeekNum] << std::endl;}
Week& operator++() {
++p %= 7;
return *this;
}
Week& operator--() {
if (--p == -1)
p = 7;
return *this;
}
Week operator++(int) {
Week Temp = *this;
++*this;
return Temp;
}
Week operator--(int) {
Week Temp = *this;
--*this;
return Temp;
}
};
const char *Week::WeekDay[7] = {"月", "火", "水", "木", "金", "土", "日"};
>>704 ところでインクリメント・デクリメントの前置・後置にはこういう違いがある。
#include <iostream>
int main() {
int a = 5, b = 5;
std::cout << a << '\t' << b << std::endl;
std::cout << a++ << '\t' << ++b << std::endl;
std::cout << a << '\t' << b << std::endl;
}
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 常微分方程式の初期値問題です ・y'=y におけるy(1.0)の値を、y(0.0)=1.0の初期条件の下で刻み幅h=0.1として 4階4次のRunge-Kutta法で求めるプログラムを作成しなさい [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ(バージョン): Cygwin [3.3] 言語:C [4] 期限:2005年01月24日9:00 よろしくお願いします
709 :
デフォルトの名無しさん :05/01/22 14:21:15
713 :
352 :05/01/22 15:56:27
>>547 =355さん
失礼しました。エラーはこの二つです。
c(11) : error C2143: 構文エラー : ';' が 'type' の前に必要です。
c(13) : error C2065: 'i' : 定義されていない識別子です。
13行目の方は一個目のエラーが原因だと思うのですが11行目の方がわかりません。
>>709 見れないよ。
アップローダに上げ直して
715 :
デフォルトの名無しさん :05/01/22 16:30:54
すいません そのやり方もよくわからないのですが・・・・
とりあえずmallocをマロックとか言うな!!
717 :
デフォルトの名無しさん :05/01/22 16:37:38
718 :
デフォルトの名無しさん :05/01/22 16:43:50
やってみたんですけど どうですか?
719 :
デフォルトの名無しさん :05/01/22 16:45:04
FIFO, FILO はなんて呼べばいいの?
721 :
デフォルトの名無しさん :05/01/22 17:01:49
>>720 FILOはLIFOのこと?
FIFOはファイフォ/フィフォ
LIFOはリフォ
口に出すときはこういう聞き違えやすい語句は使わないのが一般的
普通に「キュー」と「スタック」だね。
仲間内では 生入れ中だし って言ってます。
724 :
デフォルトの名無しさん :05/01/22 17:08:01
>>724 えふあいえふおー
えるあいえふおー
キュー
スタック
ってゆーたほうがええね。
ってすれ違うぞ。
>>705-707 ありがとうございます。勉強になりました。
>>646 >>651 さんにやっていただいた課題を提出したら、こう返信がきました。
第7回の課題3,4を受けとりました.
課題1, 2については問題点を以下に記述します.
課題1について
条件の一つである, 「比較演算子の両辺の型が異なる場合はfalseを返す.」が
実装されていません.
課題2について
講義中に説明しましたが, Visibleクラスの意味を考えましょう.
単にstringを持つだけでは, 多重継承してまでVisibleを親にする意味がありません.
ここでの意図は, 「IntPairの内容を文字列として返すことができるようにする」と
いうことです.
先生。。厳しすぎるよ…。受講者の2割くらいしか単位とれそうな雰囲気だよ…。
ふぁいふぉー ふぁいふぉー 仕事が好き ぴぴぴぴぴぴぴぴぴ ふぁいふぉ ふぁいふぉ ふぁいふぉ ふぁいふぉ 白雪姫 (SNOW WHITE)でも歌われているFIFO
>>727 俺にはC++わからんが
宿題スレの意地をみせてやれっ!
[1] 授業単元:C++研究 [2] 問題文(含コード&リンク): テキストボックスに文字を入力し、"い"が入力されたら画像1を、"ろ"なら画像2を、 "は"なら画像1を1秒表示後、画像2に切り替え表示するプログラムを作成せよ。 画像の保管場所はそれぞれ、画像1="C:\1.bmp"、画像2="C:\2.bmp"とする。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ(バージョン):C++ [3.3] 言語:C++ [4] 期限:2005年1月27日 よろしくおねがいします。
>>730 > [3.2] コンパイラ(バージョン):C++
コンパイラ名になってないよ。
>>730 C++の機能だけじゃテキストボックスやら画像表示やらは実現できんのだが
使うのはMFCなのかVCLなのか.NETなのかそれ例外なのか
まずそれが肝心だ
>>688 すいません、いまさらあなたのいってることに気が付いた…。
#include <iostream>
using namespace std;
template <class T> //テンプレートクラスの定義開始
class MyPair
{
T fst; //テンプレート引数の型の変数
T snd;
public:
MyPair(){
fst = T(); //T型の値生成
snd = T();
}
MyPair(T a, T b){
fst = a;
snd = b;
}
T get_fst(){ return fst;}
T get_snd(){ return snd;}
void set_fst(T v){ fst = v;}
void set_snd(T v){ snd = v;}
};
int main(void)
{
MyPair<int> x(1,2); //MyPairのint版の変数xの宣言
MyPair<char> y('a','b'); //MyPairのchar版の変数yの宣言
cout << x.get_fst() << " " << x.get_snd() << endl;
cout << y.get_fst() << " " << y.get_snd() << endl;
return 0;
}
最近一日中この授業の課題ばかりやっている…。
>>638 課題9-3でいわれているtemplateクラスはこれだった…。
ミスりすぎてすいません…。
#include <iostream>
using namespace std;
template<class Type, unsigned int number>
class MyArray {
Type data[number];
void check_valid(int index){
if(index < 0 || index >= (int)number)exit(1);}
public:
MyArray(){
for(int i=0 ; i < (int)number ; i++)data[i]=Type();
}
Type get_data(int index){
check_valid(index);
return data[index];
}
void set_data(Type x, int index){
check_valid(index);
data[index]=x;}
};
int main()
{
MyArray<int,10> array;
cout << array.get_data(9) << endl;
array.set_data(100,9);
cout << array.get_data(9) << endl;
return 0;}
>>731 ,732
すいません、ちゃんと確認して改めて質問しに来ますね。
スレ汚し失礼しました。
738 :
デフォルトの名無しさん :05/01/22 19:57:47
>>736 先生の言いたいことが良くわからないけど
>第三回課題1は, 適切とは言えません. +=の振舞いについて, よく考えてみて下さい.
MyVector& operator += ( const MyVector& arg)
にしろってことなのかな?戻り値は微妙だけど
>課題2について, 「何のために」「何を」要求されているのか考えて下さい.
は全般的にoperatorを理解できていないのが問題に思える。
A& operator++()とかA& operator++(int)は
++d ;とか d++;とか使う
++d.operator ++();なんて書き方は冗長な呼び出しだし、そもそも2回計算されてないかい?
>課題3について, …→土曜→日曜→月曜→… という流れをきちんと実装して下さい.
これは実装がまずすぎるんでないかな?
とりあえず、曜日のことは忘れて1から7までのカウンタクラスを作ってみたらどうかな
1->2->...->7->1
とうふうにループするカウンタだ
|∀・)チラッ
|=ヽ( ・∀・)ノ●ウンコー!!
>>737 シモタ。「仮想基底クラス」でなくて「抽象クラス」ですた。
MyPairが提示されたので、課題8についてもやってみるか・・・・
>>739 (・∀・)イイ!!。お前は本当に女々しいやつだな。
お前のやっていることは嫌がらせだよ、いいかげん気づいたらどうだ?
お前の無意味なレスにこのスレの住人がどれほど憤慨しているかわかっているのか?
(・∀・)イイ!!よ。俺にはわかるよ。お前は誰かにかまってもらいたくてしかたないんだろ?
友達もおらず、暗い部屋に一日中閉じこもってコーディングしても、
糞プログラムをHDDに排泄していくだけで、何の意味も、何の価値もない日々を過ごしている
お前が、唯一コミュニケーションをとれる場がこのスレなんだもな。
哀れだよ(・∀・)イイ!!。震えた指で、キーボードを見ながら
(・∀・)イイ!!と書き込むお前。それが今のお前に出来る精一杯。
本当は、そっとしておくのがいいのかもしれない。
だがな(・∀・)イイ!!、俺はあえてお前を拒絶する。そうでもしないとお前はいつまでたっても
何も変わらないと思うから。
コンプレックスという名の鎖をはずして、自分の檻から脱出することができたら、
そのときこそ俺たちはお前を受け入れようと思う。
だから、俺は今、言わなければならない。
(・∀・)イイ!!よ、去れ。
>>743 てか #if〜endifマクロで日本語をコメント化できるのか
エラー出ますよ
>>748 scanfを愛してしまうくらいに見つめるこったな
#include<stdio.h>
int main()
{
float x,e[2][2],f[2][2],f1[2],f2[2],a[2][2],f3;
int i,j;
printf("値を入力してください");
scanf("%f %f %f %f" , &f[0][0],&f[0][1],&f[1][0],&f[1][1]);
f1[0] = f[0][0] + f[0][1]; printf("%f\n", f1[0]);
f1[1] = f[1][0] + f[1][1];
f2[0] = f[0][0] + f[1][0];
f2[1] = f[0][1] + f[1][1];
f3 = f1[0] + f1[1];
for(i=0;i<=1;i++)
for(j=0;j<=1;j++)
e[i][j] = (f1[i] * f2[j])/f3;
for(i=0;i<=1;i++)
for(j=0;j<=1;j++)
a[i][j] = ((f[i][j] - e[i][j]) * (f[i][j] - e[i][j])) / e[i][j];
x = a[0][0] + a[0][1] + a[1][0] + a[1][1];
printf("%f",x);
return 0;
}
>>736 class MyVector
{
public:
int x, y;
MyVector(int a, int b) : x(a), y(b) {}
MyVector(const MyVector& arg) : x(arg.x), y(arg.y) {}
MyVector& operator +=(const MyVector& arg)
{
x += arg.x;
y += arg.y;
return *this;
}
};
MyVector operator+(const MyVector& a, const MyVector& b)
{
return MyVector(a) += b;
}
>>736 メンバ関数の場合
class Even {
int data;
public:
Even(int val) : data(val) {}
Even(const Even& arg) : data(arg.data) {}
virtual ~Even(){}
void set_data(int val) {
if(val % 2 == 1) throw "The value is odd.";
data = val;
}
int get_data() const{return data;}
Even& operator++() {
data += 2;
return *this;
}
Even operator++(int) {
Even temp(*this);
++*this;
return temp;
}
};
int main() {
Even d(4);
Even e(8);
cout << (++d).get_data() << "," << (++e).get_data() << endl;
cout << d++.get_data() << "," << e++.get_data() << endl;
cout << d.get_data() << "," << e.get_data() << endl;
return 0;
}
>>736 グローバル関数の場合。こんな感じかな?
class Even {
int data;
public:
Even(int val) : data(val) {}
Even(const Even& arg) : data(arg.data) {}
virtual ~Even(){}
void set_data(int val) {
if(val % 2 == 1) throw "The value is odd.";
data = val;
}
int get_data() const{return data;}
friend Even& operator++(Even&);
};
Even& operator++(Even& arg) {
arg.data += 2;
return arg;
}
Even operator++(Even& arg, int) {
Even temp(arg);
++arg;
return temp;
}
int main() {
Even d(4);
Even e(8);
cout << (++d).get_data() << "," << (++e).get_data() << endl;
cout << d++.get_data() << "," << e++.get_data() << endl;
cout << d.get_data() << "," << e.get_data() << endl;
return 0;
}
>>736 改行制限のために汚いが。
class day_of_week {
int data;
public:
day_of_week(int day) : data(day % 7) {}
day_of_week& operator++() {++data %= 7; return *this;}
day_of_week& operator--() {if (--data < 0) data += 7; return *this;}
const day_of_week operator++(int) {
day_of_week temp(*this);
++*this;
return temp;
}
const day_of_week operator--(int) {
day_of_week temp(*this);
--*this;
return temp;
}
void print(ostream& o) const {
static const char c[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
o << c[data];
}
friend ostream& operator<< (ostream& o, const day_of_week& arg) {
arg.print(o);
return o;
}
};
int main() {
day_of_week day(4);
cout << day << endl; cout << ++day << endl; cout << ++day << endl; cout << ++day << endl;
cout << ++day << endl; cout << --day << endl; cout << day-- << endl; cout << day << endl;
return 0;
}
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/121.txt >>704 の課題3が解決しましたので(まだ返信はきていませんが)
自作ソースと第三回の内容を取り除いたものをアップしました。(長かったため)
第1回と2回にある
課題1-1
デストラクタは基本的に仮想関数にすべきです. なぜ仮想関数にすべきなのか,
仮想関数にしていないことによって生じる問題を具体的な例を用いて説明して下さい.
課題2-3
基本クラスのメンバ関数と同名のメンバ関数を派生クラスで定義したとき,
それが仮想関数であるかどうかは, 基本クラスでの定義によるのは何故でしょうか?
何故仮想関数を使うのかを考え, 上記のような言語仕様になっている理由を述べて下さい.
こういう説明系の問題って全く答えれません。
こういうのにすらすら答えれるようになるためには、実際になんどもプログラムを作って
経験をつんでいないと無理ですよね?
【とりあえず課題1-1】 class Derivedがclass Baseの派生クラスであるとする。 Base* p = new Derived; delete p; としたとき、もしこのときデストラクタが仮想関数であれば、~Derived()→~Base()の 順でデストラクタが呼び出される。一方、デストラクタが仮想関数でなければ、 deleteの文でDerivedのデストラクタは呼び出されず、~Derived()は呼び出されない。 よってDerivedが正しく破棄されない。よって、派生されうるクラスにおいては デストラクタを仮想関数に指定すべきである。
>>755 ついでに具体例
#include <iostream>
struct Base{};
struct Derived : public Base{
int* p;
Derived() : p(new int){}
~Derived(){delete p;}
};
int main(){
Base* p = new Derived;
delete p; // メモリリーク!
return 0;
}
>>755 課題2-3
基本クラスのあるメンバ関数が仮想関数で宣言されていると、派生クラスの同名の
関数も仮想関数となる理由は、動的な結合を実現するためである。
もし基底クラスで仮想関数でない関数を宣言し、派生クラスで同名の関数を宣言すると、
それは基底クラスの関数を隠蔽してしまい、関数は静的に結合されてしまう。
例えば、
class Base {
void f() {}
};
class Derived : public Base {
void f() {}
};
ここで Base* pbが存在し、それがDerived型のインスタンスを指しているとすると、
pb->f(); はBase::f()を呼び出してしまう事になる。仮想関数を用いると、つまりBase側
で virtual void f() と宣言しておくと、
pb->f(); はちゃんとDerived::f()を呼び出してくれるようになる。
−−−−−以降は先生に出さないでね−−−−−
Effective C++の37項に詳しい説明があります。もしよかったらこれも読んでね。
>>755 ちょっとヒマなので手伝ってみました。
人とかぶると嫌なので下の方にある課題です。
#include <utility>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
// 11回課題1
template <int SIZE>
class ShowArray : public unary_function<const int*, void>
{
public:
void operator () (const int* array) const
{
copy(array, array+SIZE, ostream_iterator<int>(cout, "\n"));
}
};
int main() { int** array = newArray<3,5>()(); // 11回課題2 for_each(array, array+3, ShowArray<5>()); deleteArray<3>()(array); return 0; } // 11回課題3 template <class T> T f_11_3(T* first, T* last) { sort(first, last); size_t maxCount = 0; T result; while (first != last) { const pair<T*, T*> range = equal_range(first, last, *first); const size_t count = distance(range.first, range.second); if (count > maxCount) { maxCount = count; result = *range.first; } first = range.second; } return result; }
[1] 授業単元:C++入門 [2] 問題文(含コード&リンク): A: 整数の配列dataを5個用意し、次の数値(12345,6789,9876,6543,4321)にて初期化を行い、テキストファイル(ファイル名はlist1.txt)に書き込む。 B: ファイルに書き込みが出来ているのを確認の後、再度list1.txtを開き、書き込まれた数値を配列yを作成し読み込む。また、その時に配列yの全ての要素の表示ができるソースコードの作成 [3] 環境 [3.1] OS:windows xp [3.2] コンパイラ(バージョン):MicroSoft Visual Studio.Net2003 [3.3] 言語:C++ [4] 期限:2005年01月26日00:00まで [5] その他の制限:C++を習ってまだ日が浅いので、なるべくシンプルなソースであれば助かります。 入院していた為内容についていけず、困っています。 どうぞよろしくお願いします。
>>761 C++とあるが、ofstreamやifstreamを使ってもいいのか?
それとも、fscanf()/fprintf()系を使うのか?
こいつは次スレでテンプレに入れた方がいいな。
>>761 間違ってたらごめん
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int array1[5] = {12345,6789,9876,6543,4321};
ofstream fout("list1.txt");
if (!fout){
cout << "file open error\n";
return 1;
} else {
for (int i = 0; i < 5; i++){
fout << array1[i] << "\n";
}
fout.close();
cout << "list1.txtに書き込みました\n\n";
}
ifstream fin("list1.txt");
if (!fin){
cout << "file open error\n";
return 1;
} else {
int array2[5][16];
for (int i = 0; i < 5; i++){
fin >> array2[i][16];
cout << "[" << i << "] = " << array2[i][16] << "\n";
}
fin.close(); cout << "list1.txtから読み込みました\n";
}
return 0;
}
>>761 シンプルなソースなんていうと、C++では初心者にとってはとんでもないものに
なるから、初心者向けのソースと書いた方がいいぞ?でないと次のようになる。(w
【A】(←多分AとBは個別にプログラムを作れということだと思うが)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
int main() {
int a[] = {12345, 6789, 9876, 6543, 4321};
std::ofstream f("list1.txt");
std::copy(a, a + sizeof(a) / sizeof(a[0]), std::ostream_iterator<int>(f, "\n"));
return 0;
}
【B】
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
int main() {
int a[5] = {0};
std::ifstream f("list1.txt");
std::copy(std::istream_iterator<int>(f), std::istream_iterator<int>(), a);
std::copy(a, a + sizeof(a) / sizeof(a[0]), std::ostream_iterator<int>(std::cout, "\n"));
return 0;
}
765 :
デフォルトの名無しさん :05/01/23 08:33:39
よりによってconio.hか・・・
767 :
デフォルトの名無しさん :05/01/23 10:12:38
どんな機能が欲しい? conioの使い方調べた?
769 :
デフォルトの名無しさん :05/01/23 11:48:18
>>768 conioはなんか色を表示できるんですよね?微妙に、貼り付けたtxtは自分で
手を加えたがそれ以上はできなかった・・
機能的には、表で表示したり、全収支を計算、表示したりしたいんですよね。
あとは黒字とか赤字も出せたら家計簿みたいですよね。すいませんわがままで。
770 :
デフォルトの名無しさん :05/01/23 12:05:28
>769 conioは背景色や表示位置も設定できるし、ウィンドウシステムも作れる。 ともかく、以下のような関数を作ってみよ。 入力を要求する関数。 金額を表示する関数。 罫線などで表や箱を描く関数。
771 :
デフォルトの名無しさん :05/01/23 12:16:36
よくわかんないけど、入力と金額は、すでにtxt でできてませんか?
772 :
デフォルトの名無しさん :05/01/23 12:17:51
文字列を逆順に帰る関数なのですが、 下の関数部にmain文をつけて1つのプログラムにして頂けませんか? よろしくお願いします。 void strrev(char s[]) { int i; int n = strlen(s); char c; for(i=0;i<=n/2;i++){ c = s[i]; s[i] = s[n-1-i]; s[n-1-i] = c; } }
>771 conio使えば、もっと付加価値が付けられるだろ? それに動作を共通化したい意図もある。
774 :
デフォルトの名無しさん :05/01/23 12:28:51
>772 n-1-iの区間チェックができていない。 仮引数の配列型はできればポインタ型に直す。 mainでは、scanfで読み込んだ文字列を使え。
NT/2000/XPで動かす分にはconioは地雷以外の何でもない
776 :
デフォルトの名無しさん :05/01/23 12:37:26
>>773 すいません Cをぜんぜん理解してないのでわからないので
具体的に示してもらってもよいですか?
>775 おまいらが低レベルコンソール入出力API使って、NT系でも動くconioを作ればいいだろう?
>>772 #include <stdio.h>
#include <string.h>
int main()
{
int len,i;
char temp,str[100];
scanf("%s",str);
len=strlen(str);
for(i=0;i<len/2;i++)
{
temp=str[i];
str[i]=str[len-1-i];
str[len-1-i]=temp;
}
printf("%s\n",str);
return 0;
}
780 :
デフォルトの名無しさん :05/01/23 13:19:06
#include <stdio.h> #include <string.h> void rev(char *s) { int i,n; char c; n = strlen(s); for(i=0;i<n/2;i++) { c = s[i]; s[i] = s[n-1-i]; s[n-1-i] = c; } } int main() { char str[100]; scanf("%s",str); rev(str); printf("%s\n",str); return 0; }
784 :
デフォルトの名無しさん :05/01/23 14:36:03
#include int main() { char str[]="123456789abcdef"; int i; for(i=0;str[i]!='\0';i++){ }; printf("String length is %d\n",i); } これの文字をカウントする部分を別関数に分離して、 同じ結果を得られるようにしたいのですが、うまくいきません。 どなたか教えてください。よろしくお願いします。
#include <stdio.h> int my_strlen(const char* str) { int i; for (i=0;str[i]!='\0';i++); return i; } int main() { char str[]="123456789abcdef"; printf("String length is %d\n", my_strlen(str)); return 0; }
#include<stdio.h> int strength(char *); int main(void) { char str[]="123456789abcdef"; printf("String length is %d\n"strlength(str)); return 0; } int strlength(char* str){ int i=0; for(i=0;str[i]!='\0';i++) ; return i; }
787 :
デフォルトの名無しさん :05/01/23 15:02:14
レス感謝です。
>>785 constで読み取りを追加しているのは、どういう意味があるのですか?
>>786 2行目で(char *)ってなってますけど、これってアリなんですか?
さらに質問すいません。
char* str == char *str なんですか?
788 :
デフォルトの名無しさん :05/01/23 15:07:19
関数は内容を書き換えないと宣言している。C++では少し速くなるかも。 あり。 あり。
789 :
デフォルトの名無しさん :05/01/23 15:19:37
ありがとうございます。 やっぱり本よりリアルな返答の方がタメになります。 これからもよろしくお願いします。
>>789 ここは幼稚園や小学校じゃ無いんだ
人に聞く前に自力で学ぶ努力しろ
先生の返信がかえってきました。
第三回課題1〜3を受けとりました.
第八回の課題1〜4, 第九回の課題1,2を受けとりました.
第七回の課題はもう少し問題をしっかり読んで理解して下さい.
↑どこまで要求するんだこの先生は・・・。
>>747 添削されてかえってくることはありませんでした。
ありがとうございます!
>>756-758 なんかすごい勉強になりますね…。
ありがとうございます。
Effective C++は有名な本ですよね。
お金に余裕ができたら買って読んでみますね。
無理そうなら友達のを…。
>>759-760 本当にありがとうございます。
みなさんのソースをみていると勉強になります。
>>765 結構長くなりそうだから、ファイル分割してよい?
後、カーソル移動や文字色変化にwindows.hも使ってよい?
793 :
デフォルトの名無しさん :05/01/23 16:24:41
794 :
デフォルトの名無しさん :05/01/23 16:33:42
>795 分割コンパイルだろ?いいよ。機能ごとにソースを分け。 出題者にconioとかwinとか使えって言われた?あまり無理しなくてもいいよ
え?俺?
>>765 後、ポインタ、構造体、ファイル入出力とか使っても大丈夫?
難しい使い方はしないけど。
>>794 自分、小学生の時に3日ぐらい使った以来、家計簿を使っていなかったけど、
自分が使う場合にどういう機能があると使いやすいかなと思って考えると、
設計の形が見えてきて、カーソル移動は描画の速度を出すために、
色は単純に見やすくなるかなと思って使いたいと思った。
797 :
デフォルトの名無しさん :05/01/23 16:52:23
すいません あまり難しくなくお願いします。conioはOKですが、winは習いませんでした ポインタ、構造体、ファイル入出力は大丈夫です。お願いします。
>>797 windos.h使わない方法を考えてみる。
ただ、winのカーソル移動の方は使わないと、表示の更新がかなり遅くなる。
799 :
デフォルトの名無しさん :05/01/23 17:10:03
>797 ひとまず、次のような関数を作りなさい。まだconioのような飾りは不要です。 "何やらを入力〉"と表示して金額や文字列の入力を促し、入力が終わったら入力内容を返す関数。 金額をきれいに表示する関数(\を付け、','で区切り、負を考慮する)。
800 :
デフォルトの名無しさん :05/01/23 17:13:28
C言語ってPS2かPSどっちのゲームですか?
804 :
デフォルトの名無しさん :05/01/23 18:37:14
で、どこまでできた?
>>804 僕?
今は大まかな流れをイメージする所まで。ちゃんと間に合わす。
>>765 conio.hは必ず使わないといけない訳ではないよね?
カーソル移動、色変えを使わない場合は、
直接コンソール入力(Enterを押さない入力)のメリットが殆どない。
>>791 そうか、そりゃあよかったな。
ここのスレでややディープなC++の課題が出たのはほとんどなかったから。
後はその課題7の同じ型か違う型かを判別するoperator==だけか。
もう少しちゃんと読んでみるよ。
>>791 先生は多分メンバ関数thistype()を使って欲しかったのではないかと気づいた。
こんな感じになるかな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/123.txt 課題7-2も同じように変更しといてね。
あ、それとmain()関数にoperator==をテストする行を付け加えた方がいいかも。
int main()
{
IntPair ip1(1, 1), ip2(1, 2);
std::cout << std::boolalpha << ip1.thistype(ip2) << std::endl;
std::cout << (ip1 == ip2) << std::endl;
std::cout << (ip1 > ip2) << std::endl;
std::cout << (ip1 >= ip2) << std::endl;
std::cout << (ip1 < ip2) << std::endl;
std::cout << (ip1 <= ip2) << std::endl;
}
科目:プログラミング言語論 以下のプログラムをクラスを使って書き換えよ。 ・ 構造体ではなくクラスを用いること。(データメンバは全てプライベートとすること。) ・ initShukujitsu()ではなく、コンストラクタを用いてデータメンバの値を設定すること。 ・ dispShukujitsu()ではなく、メンバ関数disp()によって内容を表示すること。 よろしくお願いします・・。 #include <iostream> #include <cstring> using namespace std; class Shukujitsu { private: int tsuki; int hi; char meishou[20]; public: void initShukujitsu(Shukujitsu *s) { s->tsuki = 1; s->hi = 1; strcpy(s->meishou, "元旦"); } void dispShukujitsu(Shukujitsu *s) { cout << s->tsuki << "月" << s->hi << "日" << s->meishou << endl; } int main() { Shukujitsu shuku; initShukujitsu(&shuku); dispShukujitsu(&shuku); return(0); }
#include <iostream> #include <cstring> using namespace std; class Shukujitsu { private: int tsuki; int hi; char meishou[20]; public: Shukujitsu() : tsuki(1), hi(1) { strcpy(meishou, "元旦"); } void disp() { cout << tsuki << "月" << hi << "日" << meishou << endl; } } int main() { Shukujitsu shuku; shuku.disp(); return 0; }
>>810 ありがとうございます。
なんか、ヒントに
private:
int tsuki;
int hi;
char meishou[20];
public:
Shukujitsu() ; Shukujitsu::Shukujitsu(){}
void Shukujitsu::disp(){}
とか書いてあるんですが、サッパリわからんです…。
812 :
デフォルトの名無しさん :05/01/23 21:49:37
[1] 授業単元: プログラミング演習I [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: windows [3.2] コンパイラ(バージョン): gcc [3.3] 言語:Cのみ [4] 期限:2004年1月24日13:00まで/無期限 のいずれか [5] その他の制限: 円周率をマチンの公式と級数展開を使って出来るだけ多くの桁数を 計算し表示させる問題でひとつの桁をひとつの配列に格納し作成せよ。 なんですが桁が格納されている配列を足すときの繰上げ、繰り下げがうまくいきません
813 :
812 :05/01/23 21:54:46
マチンの公式と級数展開の式は /* arctan(1/p) = 1/p - 1/(3p^3) + 1/(5p^5) - 1/(7p^7)... */ /* pi/4 = 4arctan(1/5) - arctan(1/239) */ です。
>>811 そのヒントの通りにした。メンバ関数をクラス宣言内にまとめて書くか別に書くかの違い。
#include <iostream>
#include <cstring>
using namespace std;
class Shukujitsu {
private:
int tsuki;
int hi;
char meishou[20];
public:
Shukujitsu();
void disp();
};
Shukujitsu::Shukujitsu() : tsuki(1), hi(1)
{
strcpy(meishou, "元旦");
}
void Shukujitsu::disp()
{
cout << tsuki << "月" << hi << "日" << meishou << endl;
}
int main()
{
Shukujitsu shuku;
shuku.disp();
return 0;
}
816 :
デフォルトの名無しさん :05/01/24 00:41:37
>>800 conioはつかわなくてもよいのかな?なんかもともと先生がくれた参考にするプログラムでは、
使われてるんですよね
すいません、リンクはタグだと思ってました・・・(2ch初心者です)
初めて見たw ドンマイ
>>817 ま、真面目さが伝わっていいじゃないか(w
> を > にしてたら俺泣いたよ。
>>806-807 >>809 結構深い内容ですよね。
こんな内容の授業やってる割には、Cの二次元配列もわからないくらいのヒトが多数います。
正直ついていけてるヒトは2割くらいの世界です。
ありがとうございます。
今度こそ、受け取ってくれればいいのですが…。
環境Mac OS] 言語 C 100*100のテンプレートを640*480の画像に走査させて テンプレートマッチングを行えという問題がわかりません。 どなたか教えていただけないでしょうか? ちなみにテンプレート及び画像は.rawです
閾値とか適当でいいのか?
やばい、後5時間か・・。 まだ、日データの読み書きの後半の所。 間に合うかどうか。
826 :
デフォルトの名無しさん :05/01/24 09:43:41
どうかお願いします
829 :
デフォルトの名無しさん :05/01/24 11:57:08
>>680 超遅レスだけど
lim[x->0]sinx/x
=lim[x->0](d(sinx)/dx)/(d(x)/dx)
=lim[x->0]cosx/1
=1 _
831 :
デフォルトの名無しさん :05/01/24 12:43:47
最近の高校生はロピタルの定理を習うのか?
教科書じゃ習わないが(平均以上の)普通の高校生なら知ってる
834 :
デフォルトの名無しさん :05/01/24 12:58:06
>>832 は?簡単なんだからそれくらい習うだろ。
っていうか、君、三流私大出身じゃね?
漏れが高校生のときは習ったよ
>>834 が、何がそんな気に入らなくて煽り口調なのか理解できない。
>>834 は学歴コンプレックスかなんかだろ
>>832 のから完全にずれてるし
ハゲ気にしてる香具師がハの発音を聞いて怒り狂うようなもんだろ
840 :
デフォルトの名無しさん :05/01/24 13:06:42
あはは、何釣られてんの?ばかばっかだな。
こういう展開のときっていつも一人だけageてるんだよね
判ってて突っ込まないだけだろうと(ry
844 :
デフォルトの名無しさん :05/01/24 13:44:08
ageとくか(謎)
845 :
352 :05/01/24 14:52:20
誰か答えていただけないでしょうか? まだ解決していない問題が3-4と4と二つあるのですが。
>>845 IVやってみたけど、こんなんでいいの?
#include <stdio.h>
int main()
{
double h = 1, x, y=0;
printf("x = ");
scanf("%lf", &x);
while (h >= 0.00001) {
y += h;
if ((y+1)*(y+1) > x) {
y-=h;
h/=10;
}
}
y++;
printf("√x = %1.5lf\n", y);
return 0;
}
>845 誰か=自分。 ほとほどに頑張れよ
848 :
352 :05/01/24 15:33:36
考えてもさっぱりわからないので。 自分の手に負えるところはすでに終わってるんですが…
849 :
352 :05/01/24 15:37:01
>>846 さん
ビルドしてみたらエラーが40個ぐらい出ました。
error C2018: 文字 '0x81' は認識できません
error C2018: 文字 '0x40' は認識できません。
この二つが三行目から毎行続きます。
>>846 さん
整形しなおしたら動きました。ありがとうございました。
>>352 3-3ができて何で3-4ができないんだ
リンク先のソース 訂正前:fprintf(stderr,"Usage:%s 2進数小数\n",argv[0]); 訂正後:fprintf(stderr,"Usage:%s 10進数小数\n",argv[0]);
854 :
デフォルトの名無しさん :05/01/24 16:50:30
>359さん、先ほどは失礼致しました。大変参考になりました。有難うございました。
855 :
デフォルトの名無しさん :05/01/24 17:40:29
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:Borland [3.3] C言語 [4] 期限:2005年2月1日まで 10以下の配列に入力された数値を ポインタを使って最大値と最小値を出力しなさい。 データの終わりは-100が入力された時とする。 <出力> --------------- 15 21 7 38 12 54 -100 Min = 7 Max = 54 よろしくお願いします。
856 :
デフォルトの名無しさん :05/01/24 17:53:25
char MacAdress[6]; これのなかに16進数で、 [A1][A2][A3][A4][A5][A6][X0] と値があるのですが、 これをそのまま文字列として [A1][A2][A3][A4][A5][A6][X0] と取り出すことは可能でしょうか? こういう感じで、文字型に変換しようとしてもうまくいきません。 sprintf(a,"%s",MacAdress[0]);
858 :
デフォルトの名無しさん :05/01/24 18:03:20
>856 %02xか%02Xを並べて使え。
表示させたいだけなら%X使えばいい
>855 てきとー #include<stdlib.h> #include<stdio.h> int compare( const void* elem1, const void* elem2 ) ; int main(void){ int cnt = 0 ; char buf[255] ; int ans[11] ; while( cnt != 10 && ans[cnt-1] != -100 ) { fgets( buf, sizeof buf,stdin ) ; ans[cnt] = atoi( buf ) ; cnt ++ ; } qsort( (void*)ans, cnt, sizeof(int), compare ) ; printf("最小:%d\n" ,ans[0]) ; printf("最大:%d\n" ,ans[cnt - 1]) ; return 0 ; } int compare( const void* elem1, const void* elem2 ){ return ( (*(int*)elem1) ) > (*(int*)elem2) ? 1 : -1 ; }
>>852 さん
スルーしてませんよ。
途中の流れ見てもらえば分かるかと思いますが、動作しなかったというかビルド出来なかったんです
862 :
デフォルトの名無しさん :05/01/24 19:22:18
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://www.geocities.jp/paid_to_chobits/ [3] 環境
[3.1] OS:windowsまたはLinux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年01月25日15:00
[5] その他の制限:入力サンプルがきちんと動く(特に値が大きいとき)
大体はできるんですが値が大きくなると動きません。お願いします。
>>856 はどのようにすればいいですか? 自分なりに考えて、やってうまいのが思いつきません。
わからないです
void hoge(int unko, char str[] ){
int cnt = 0 ;
int temp, max, loop ;
char wrk ;
while(( temp = ( unko >> ( 4 * cnt )) & 0xf )) {
if( temp >= 0xa )
str[cnt] = temp + 0x37 ;
else
str[cnt] = temp + '0' ;
cnt ++ ;
}
for( max = cnt, loop = ( max / 2 ) ; loop > max - cnt ; cnt -- ) {
wrk = str[cnt - 1] ;
str[cnt - 1] = str[max - cnt] ;
str[max - cnt] = wrk ;
}
str[max] = '\0';
}
>860 ポインタ使ってない
>10以下の配列に入力された数値を int だよな? tbl[] に入ってるとする。 int i,min,max,minP,maxP; min=max=tbl[0]; minP=maxP=0; for(i=1; i<numOfItem; ++i){ if(min>tbl[i]){min=tbl[i];minP=i;} if(max<tbl[i]){max=tbl[i];maxP=i;} } printf("最小:%d\n" ,tbl[minP]) ; printf("最大:%d\n" ,tbl[maxP]) ;
>863 unkoをhogeする関数って何だよ?
>865 ポインタ使ってない
>867
int i,*min,*max;; min=max=&tbl[0]; for(i=1; i<numOfItem; ++i){ if(*min>tbl[i])min=&tbl[i]; if(*max<tbl[i])max=&tbl[i]; } printf("最小:%d\n" ,*minP) ; printf("最大:%d\n" ,*maxP) ;
うつだ... >printf("最小:%d\n" ,*minP) ; >printf("最大:%d\n" ,*maxP) ; そんな変数使ってねーし
入力はこのようにしました。とにかくなんかもっと良いやり方なかですか? int main(void) { char str[255] ; int data ; scanf("%x" ,&data) ; hoge( data, str ) ; printf( "%s\n" ,str ) ; return 0 ; }
872 :
デフォルトの名無しさん :05/01/24 20:01:16
まぁ、そういう日もあるさ!!!!!!
>871 >858
そのやり方がわかりません。
scanfはやめとけ
>>856 >これのなかに16進数で、
>[A1][A2][A3][A4][A5][A6][X0]
>と値があるのですが、
X0 ってなんだ?
「scanfはやめとけ」って書くのはやめとけ
はいはい。
>876 酒だろ?
雑談してるヒマあったら答えろよ
>>856 #include <stdio.h>
#include <string.h>
char* hoge(const char* input, int n, char* output)
{
int i;
char temp[3] = {};
for (i = 0; i < n; i++)
{
sprintf(temp, "%02X", *(input + i));
strcat(output, temp);
}
return output;
}
int main(void)
{
const char input[] = "Hello!";
char output[128] = {0};
printf("%s", hoge(input, strlen(input), output));
return 0;
}
>scanf("%x" ,&data) ; >printf( "%s\n" ,str ) ; ...つりか?つりだな
>>830 超遅レスだし板違いだけど
高校レベルでは三角関数の微分の定義に
lim[x->0]sinx/x = 0
を使ってるからこれを示すためにロピタルの定理(の中で三角関数の微分)を使うのはおかしい
>char temp[3] = {}; ? >return output; !?
char temp[3] = {};は間違い。" = {}"を消して。 return output;は作った文字列を利用しやすいようにと思って。
実行結果 48656C6C6F21
>>885 ありえなーい。
サインカーブの原点付近の傾斜はどう見たって45度。
890 :
デフォルトの名無しさん :05/01/24 22:20:08
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): a.キーボードから20個の数字を配列に入力し、その最大値・最小値を表示 b. 〃 、大きい順に並べ替え、それを表示 c.二次元配列のデータを表示し、各行・各列の和を求める (↓のように表示。4列目・4行目が和) 1 2 3 6 4 5 6 15 7 8 9 24 12 15 18 [3] 環境 [3.1] OS:Windows XP Professional [3.2] コンパイラ(バージョン): [3.3] 言語:Borland C++ Builder [4] 期限:2005年1月25日18:00まで [5] その他の制限:ありません すいません、お願いします
891 :
デフォルトの名無しさん :05/01/24 22:27:27
どこかで誰かが”C/C++の宿題”を片付けます 38代目 俺の一流大学にはそんなもの無いんだが(w
それでJava厨だったら±0だが。
Java"厨"なら-な気がする
d *= 2 とか a /= 2 とかってどういう意味なんですか?
>>890 CなのかC++なのかどっちだ
>>894 d*=2 d=d*2
a/=2 a=a/2
=や*や/の意味すらわからないとか言わないよな
896 :
デフォルトの名無しさん :05/01/24 23:29:10
【質問テンプレ】 [1] 授業単元:C言語入門 [2] 問題文: 自宅から学校までの道のりは片道190円です(往復380円) sdddd年smm月sdd日〜syyyy年emm月sdd日まで、毎日学校に通う(休日、休日は考えなくてよい)と、運賃はいくらになるか求めるソースコードを作りなさい [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): Microsoft VisualStdio.NET2003 [3.3] 言語:C++ [4] 期限:2005年01月30日00:00まで [5] その他の制限: ◆#include<iostream>と#include<string>程度しか習っていません。 ◆総日数を扱う部分と運賃の計算を行う部分は関数化を行います。 (ex int get_day(開始年、開始月、開始日、終了年、終了月、終了日)といった風に) 12ヶ月の日付最大値を格納する部分は、自分では下記のように考えました(たぶん間違っていると思いますが・・。) int season[12]={31,28,31,30,31,30,31,31,30,31,30,31}; とにかく初心者なので、どうにも作っていく流れが分からず、途方にくれています。 どうぞよろしくお願い致します。
897 :
デフォルトの名無しさん :05/01/24 23:32:02
>896 なかなかおもろい出題するじゃないか。感心したゾ
休日を考えないというのは、土日や夏休みも学校に行き続けるんだね?
うるう年は?
>>890 1.
#include <algorithm>
#include <iostream>
int main()
{
int input[20];
for (int i = 0; i < sizeof(input) / sizeof(input[0]); ++i) std::cin >> input[i];
std::cout << "Min:" << *std::min_element(input, input + 20) << "Max:" << *std::max_element(input, input + 20);
return 0;
}
2.
#include <algorithm>
#include <functional>
#include <iostream>
int main()
{
int input[20];
for (int i = 0; i < sizeof(input) / sizeof(input[0]); ++i) std::cin >> input[i];
std::sort(input, input + sizeof(input) / sizeof(input[0]), std::greater<int>());
std::cout << "sorted:\n";
for (int i = 0; i < sizeof(input) / sizeof(input[0]); ++i) std::cout << input[i] << std::endl;
return 0;
}
>>890 3.
#include <iomanip>
#include <iostream>
#include <iterator>
int main()
{
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
static const int row = sizeof(a[0]) / sizeof(a[0][0]), col = sizeof(a) / sizeof(a[0]);
int sum_row[row] = {0}, sum_col[col] = {0};
for (int i = 0; i < col; ++i)
for (int j = 0; j < row; ++j)
sum_row[i] += a[i][j];
for (int i = 0; i < col; ++i)
for (int j = 0; j < row; ++j)
sum_col[j] += a[i][j];
for (int i = 0; i < col; ++i)
{
for (int j = 0; j < row; ++j)
std::cout << std::setw(3) << a[i][j];
std::cout << std::setw(3) << sum_row[i] << std::endl;
}
for (int i = 0; i < row; ++i)
std::cout << std::setw(3) << sum_col[i];
}
以上。
むしろ >[1] 授業単元:C言語入門 > [3.3] 言語:C++ ってことに感心した
反抗的だなw
904 :
デフォルトの名無しさん :05/01/25 01:06:46
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ:Borland [3.3] 言語:C言語 [4] 期限:2005年1月30日まで 2次元配列に野球の得点をそれぞれ格納し、 ポインタを使ってそれぞれの合計得点を出力しなさい。 後攻の点数が9回表を終わって 先攻より上回る場合は9回裏は入力させないこと。 <入力> 1,0,0,0,1,0,0,2,0 0,0,0,1,0,0,2,0,2 <出力> 1回表 = 1 1回裏 = 0 2回表 = 0 2回裏 = 0 --- 省略 --- 9回裏 = 1 先攻の得点 = 4 後攻の得点 = 5 よろしくお願い致します。
905 :
904 :05/01/25 01:09:00
9回裏 = 2 でした。 よろしくお願い致します。
906 :
デフォルトの名無しさん :05/01/25 01:19:55
>>902 すいません、C++入門です。
自分で書いたのを見て凹みました・・。
閏年も設定しなくていいと書いてあります。
休日も来い、というのは最初「土日」は休み、という設定が難しかったので変更されたものです。
>>900-901 ご協力いただき、ありがとうございます
今日の試験に使わせていただきます
[1] 授業単元: c言語 [2] 問題文 1、多角形を構成している頂点列を、自己参照構造体を使って線形リストで表現し 頂点データの入出力をせよ 2、1のプログラムを基にして多角形の各辺を二等分する位置に新しい頂点を生成し それをリスト構造に追加する関数を作成せよ 3、元の頂点をリスト構造から削除する関数を作成せよ。 1は解けましたが2と3がわかりません、よろしくお願いします。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ(バージョン): 大学のコンピュータなのでわかりません [3.3] 言語:C言語 [4] 期限:2005年1月25日13:00まで [5] その他の制限:
int main(void){ int cnt,sc[2][9+1]={0}; scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d", &sc[0][1],&sc[0][2],&sc[0][3],&sc[0][4],&sc[0][5],&sc[0][6],&sc[0][7],&sc[0][8],&sc[0][9]); scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d", &sc[1][1],&sc[1][2],&sc[1][3],&sc[1][4],&sc[1][5],&sc[1][6],&sc[1][7],&sc[1][8],&sc[1][9]); for(cnt=1; cnt<=9; ++cnt){ sc[0][0]+=sc[0][cnt]; printf("%d回表 = %d\n", cnt, sc[0][cnt]); if(sc[1][0]<=sc[0][0]){ sc[1][0]+=sc[1][cnt]; printf("%d回裏 = %d\n", cnt, sc[1][cnt]); } } printf("先攻の得点 = %d\n", sc[0][0]); printf("後攻の得点 = %d\n", sc[1][0]); return 0; }
>>906 何故問題文を省略する?
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
字も読めないのか?
>910 問題文が正確だとすると >先攻より上回る場合は9回裏は入力させないこと。 であって「出力させない」こと、ではない。 よってもまえ間違ってるぞw
913 :
デフォルトの名無しさん :05/01/25 02:30:56
>>890 aとbな。
#include <stdio.h>
int main() {
int array[20];
int i,j,tmp, max=0, min=0;
printf("数字を入力してたもれ\n");
for(i=0; i<20; i++) {
scanf("%d", &array[i]);
if(max < array[i]) max = array[i];
if(min > array[i]) min = array[i];
}
/*並べ替え*/
for(i=0; i<20; i++)
for(j=i+1; j<20; j++)
if(array[i] <array[j]) {tmp = array[j]; array[j] = array[i]; array[i] = tmp;}
printf("最大値は %d 最小値は %d\n",max, min);
printf("並べると\n");
for(i=0; i<20; i++) printf("%d ", array[i]);
printf("\n");
return 0;
}
>for(i=0; i<20; i++) >for(j=i+1; j<20; j++) ダメだろw
どこが?
1のループが1回多いだろ?
なるほど
>918 問題がわかりません
>>919 頭文字を1文字読み込み、構造体データのa[].nameの頭文字がそれと同じならその構造体データを表示せよ
という問題です
わかりにくくてすみません・・・
>>918 printf("input initial\n");
c=getchar();
printf("%5s%5s%5s%5s%5s\n",t[0].name,t[0].sex,t[0].age,t[0].tel,t[0].mail);
i=0;
while(pa->name!=NULL){
if (pa->name[0] == c) {
printf("%10s%5s%3d%20s%30s\n",pa->name,pa->sex,pa->age,pa->tel,pa->mail);
}
pa++;
}
i=0;余計だった('A`)
> i=0; プ
エラーが出るんですが・・・
エラーの内容を書けと
どんな
メッセージが英語?なのでよくわかりません
張れ
>>921 助かりました!ありがとうございます
どうもポインタがイマイチ理解できてなくて・・・
先日はどうもありがとうございました。 申し訳ありませんが、今回もお世話になります。 [1] 授業単元:C++入門 [2] 問題文(含コード&リンク): 次の条件でタクシーの料金を計算するプログラムを作りなさい ◆最初の1500mは630円、それ以後は311mごとに+90円していく ◆料金が5000円以上なら1割引をする ◆走行距離は整数で、cin関数にて入力 ◆料金表示は整数で、cout関数にて出力 以上が全文です。 [3] 環境 [3.1] OS:windows xp [3.2] コンパイラ(バージョン):VISUAL STUDIO.NET [3.3] 言語:C++ [4] 期限:2005年01月27日 (時間は書いていなかったので、27日中かと思います) [5] 5000円以上の金額で1割引を行うところが分からず、困っています。 その他の制限:C++を習ってまだ日が浅いので、なるべく初心者向けのソースであれば助かります。 どうぞよろしくお願いします。
>5000円以上の金額で1割引を行うところが分からず、困っています。 0.9かけろ
>>931 #include <iostream>
int main()
{
int distance, fare;
std::cout << "お客さん、何m走りますかい?:";
std::cin >> distance;
fare = 630;
distance -= 1500;
if (distance > 0)
while (distance > 0)
{
fare += 90;
distance -= 311;
}
std::cout << "着きましたよ。";
if (fare >= 5000)
{
std::cout << "あんたいい女だから今回はまけとくよ。";
fare *= 0.9;
}
std::cout << "運賃は" << fare << "円になりまさぁ";
}
>>932 言われてから気が付きました・・orz。
ありがとうございます。
>>933 コメント部分も使わせて頂きます。
迅速に回答頂いてありがとうございます。
935 :
デフォルトの名無しさん :05/01/25 05:07:10
while文を使用したプログラム while文のループカウンターのみ使用 九九の表作成・行番号列番号あり OS:XP borlandやらbcc32やら書いてます。 課題は今日の10時40分に提出・・・・いくらやってもできません
936 :
935 :05/01/25 05:08:21
これは自分が作ったものです。できません・・・ #include<stdio.h> main() { int x,y; printf(" 1 2 3 4 5 6 7 8 9\n"); x=1; y=1; while(x<=9,y<=9) { printf("\n%3d",x); printf("%3d",x*y); printf("\n"); x++; y++; } }
937 :
デフォルトの名無しさん :05/01/25 05:18:56
[1] 授業単元:C++入門 [2] 問題文(含コード&リンク): 二次元配列を用いて九九の表を作成してください (以下の条件を満たす様に指示されています) ●動的メモリを確保しておくこと ●データ(九九のことです)はコンソールに出力したあと、最後にメモリを解放しておくこと [3] 環境 [3.1] OS:Windows xp Home [3.2] コンパイラ(バージョン):VisualStudio.Net2003 [3.3] 言語:C++ [4] 期限:2005年01月30日 [5] 二次元配列で九九は作れたのですが、動的メモリというのが何なのかがわからず挫折しました。 どうぞよろしくお願いします。
>>935 #include <stdio.h>
int main(void)
{
int i, j;
printf(" | 1 2 3 4 5 6 7 8 9\n");
printf("-----------------------------\n");
i = 1;
while (i <= 9) {
j = 1;
printf("%d|", i);
while (j <= 9) {
printf("%3d", i * j);
j++;
}
printf("\n");
i++;
}
return 0;
}
>>937 #include <iostream>
using namespace std;
int main()
{
const int SIZE = 9;
int** A = new int*[SIZE];
for (int i = 0; i < SIZE; i++) {
A[i] = new int[SIZE];
}
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
A[i][j] = (i + 1) * (j +1);
}
}
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}
for (int i = 0; i < SIZE; i++) {
delete[] A[i];
}
delete A;
return 0;
}
940 :
935 :05/01/25 05:37:49
>>938 ありがとうございます。
なるほど・・・while二つ使ってる・・・
なんとなく理解できて来ました
941 :
935 :05/01/25 05:47:42
申し訳ないですが、もうひとつお願いしたいのですが。 二次元配列を使用したプログラム 81個分の値をまず計算し、9X9の二次元配列に格納する。 その後、81個分の値を表示する。for文を使用する。 これも行番号・列番号の表示が必要です。 OS:XP borland bcc32を使用しています。
942 :
935 :05/01/25 05:48:15
何度やってもうまくできません。 #include<stdio.h> main() { intm[9][9]={ {1,2,3,4,5,6,7,8,9}, {2,4,6,8,10,12,14,16,18}, {3,6,9,12,15,18,21,24,27}, {4,8,12,16,20,24,28,32,36}, {5,10,15,20,25,30,35,40,45}, {6,12,18,24,30,36,42,48,54}, {7,14,21,28,35,42,49,56,63}, {8,16,24,32,40,48,56,64,72}, {9,18,27,36,45,54,63,72,81} }; int x,y; printf(" 1 2 3 4 5 6 7 8 9\n"); for(y=0;y<=8;y++) { printf("%d",y); for(x=0;x<=8;x++) printf("%3d",m[x][y]); printf("\n"); } }
>>942 はじめっから配列に入れるんじゃなくて、計算して配列に入れるんじゃないの?
#include <stdio.h>
int main(void) {
int i, j, table[9][9];
for (i = 0; i < 9; i++)
for (j = 0; j < 9; j++)
table[i][j] = (i + 1) * (j + 1);
printf(" |");
for (i = 0; i < 9; i++)
printf("%3d", i + 1);
printf("\n-+");
for (i = 0; i < 9; i++)
printf("---");
for (i = 0; i < 9; i++) {
printf("\n%d|", i + 1);
for (j = 0; j < 9; j++)
printf("%3d", table[i][j]);
}
printf("\n");
return 0;
}
944 :
935 :05/01/25 06:24:56
>>943 あ・・・なるほど。そうか・・・。
不眠でやってたら頭がパンクしそう。
ありがとうございます。
もう一度確認してできるようにします。
コンパイラが何かわからん奴はともかく、 自分のやっているのがCかC++かすらわからん(書かない)奴はどうかと思う
946 :
デフォルトの名無しさん :05/01/25 09:12:32
[1] 授業単元:関数 [2] 問題文:関数checknumを使い、与えられた変数(整数)が、 50または100の場合のみ真(true)を返し、それ以外の場合は偽(false)を返す プログラムの作成。 [3] 環境:C言語 [4] 期限:1月26日まで よろしくお願いします。
>>946 int checknum(int num)
{
if(num == 50 || num == 100) return true;
else return false;
}
int checknum(int num) {return num == 50 || num == 100;}
int checknum(int num) { switch(num){ case 50: case 100: return true; default: return false; } }
int checksum(int num) { return num == 50 || num == 100; } これでいいだろ
int checknum(int num) { if(num -= 50) if(num -= 50) return false; return true; }
>950 >948 どう定義しているかわからないからちゃんとtrue,falseを返しとけw int checknum(int num) { return (num == 50 || num == 100)?true:false; }
int checksum(int num) { return !(num - 50 && num - 100); }
>>953 >どう定義しているかわからないからちゃんとtrue,falseを返しとけw
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
C99、C++なら大丈夫。
>956 >[3] 環境:C言語 ここからどうやってそれがわかるんだ?
958 :
デフォルトの名無しさん :05/01/25 15:27:59
まぁ神いわゆるゴッドなんだろ
[1] 授業単元: プログラム実習入門 [2] 問題文(含コード&リンク): 貯金を500万円している。年利0.9%とすると10年でいくらになるか。 6ヶ月ごとの額を表示する。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:1月末日まで [5] その他の制限: 1年目 6月 12月 2年目 6月 12月 このように表示したいと思っているのですが、うまくできません。 年利は12で割って0.075で計算してよいとのことです。 よろしくお願いします。
>>959 単利? 複利?
利子が掛かるのは一月目から? 二月目から?
一月目は1月?
>>960 そのへんの説明が無かったんですが、
複利で1月から初めて一月目から利子をかけるということでやろうと思ってます。
説明無かったのに、この設定でやって文句言われたら・・・('A`)
962 :
デフォルトの名無しさん :05/01/25 16:53:07
参照渡しした構造体の初期化をしたいのですが、 やり方がわかりません。 こんなかんじでやりたいと思っています。 main(){ A a; _kansu(&a); } _kansu(A *a){ memset(a,0,(ここがわからない)) } sizeofだと構造体のポインタのサイズしか返ってこないので… よろしくお願いします。
963 :
デフォルトの名無しさん :05/01/25 16:56:27
>962 sizeof A
>>962 sizeof(*a)もしくはsizeof(A)
それから、自作関数は'_'で始めちゃダメ。
965 :
デフォルトの名無しさん :05/01/25 17:00:48
あああ いいい ううう えええ ・ ・ ・ といったテキストファイルがある時に, あああ いいい あああ ううう あああ えええ いいい ううう いいい えええ ううう えええ ・ ・ ・ というふうに全組み合わせを出力させるプログラムは どのようにして作ったらよろしいでしょうか… よろしくお願いします.
967 :
デフォルトの名無しさん :05/01/25 17:37:43
>というふうに全組み合わせを出力させる どういうふう? それでは全組み合わせがわからんのだ
969 :
デフォルトの名無しさん :05/01/25 19:15:31
タイピングもどき作ってます。ファイルからランダムに一行よみこむ ってのを作りたくて、皆さんの意見を参考に int r; char *str; r = (int)((double)11*((double)rand()/RAND_MAX)); str = malloc(sizeof(char)*256); while(fgets(str,1024,fp)!=NULL) while(){ pritnf(%s,str[r]); というのを作ったんですけど、やっぱりファイルの中身の上から順に しか表示されません。どう直すべきなのかお願いします
970 :
デフォルトの名無しさん :05/01/25 19:29:16
>969 考えろ。丸投げするな。 それじゃコンパイルできるわけない。ごまかすな。ばーか
sizeof(char)は常に1。 whileの用途と使い方が駄目。 変数rを使ってない
>>969 #include <algorithm>
#include <cstdio>
#include <ctime>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
int main()
{
std::srand(unsigned(std::time(0)));
std::vector<std::string> vec;
std::string line;
std::ifstream input("words.txt");
while (getline(input, line)) vec.push_back(line);
std::random_shuffle(vec.begin(), vec.end());
std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
973 :
969 :05/01/25 19:52:08
そこそこ考えたんですけどすみません…; コンパイルはできましたよ int r; char *str; r = (int)((double)11*((double)rand()/RAND_MAX)); str = malloc(sizeof(char)*256); while(fgets(str,1024,fp)!=NULL){} while(タイムリミットまで){ pritnf("%s",str[r]); ちょびっと直しました。charにファイルのものを全部いれてるんですよね それをstr[r]で引き出すってものだと思うんですけど、 これじゃ行指定みたいになってないんですかね?
pritnfがコンパイルできただと? ほざけ
>>973 テキトーに作ってみた。こんなんでどう?
char *rand_line(FILE *fp, char *buf, size_t bufsize, int numline) {
int i, x = (int)(numline * ((double)rand() / RAND_MAX));
rewind(fp);
for (i = 0; i < x; i++) {
if (!fgets(buf, bufsize, fp)) {
break;
}
}
return buf;
}
977 :
969 :05/01/25 20:11:38
あぁ本当だ;すみませんprintf()でした。 cしか勉強してなくて…すみません972さん。ありがとうございます
使い方を忘れてたw printf("%s", rand_line(fp, buf, 256, 11); こんなかんじ。
979 :
デフォルトの名無しさん :05/01/25 20:15:16
>973 ああ、それじゃ文字指定だし、一行しか確保できていない。ヒントだ:char**plns=NULL; plns=realloc(plns,n*sizeof(char*)); plns[i]=malloc...
980 :
デフォルトの名無しさん :05/01/25 21:40:47
ほんと思う。 ハードの勉強で、電子回路とかやってんのに、関係ないプログラミングが必修なのは非常にウザイ
[1] 授業単元: プログラミング入門 [2] 問題文(含コード&リンク): csvファイルを読み込んで何らかの処理をするアプリケーションを作成する [3] 環境 [3.1] OS: WIN2000 [3.2] コンパイラ(バージョン):visual c++ [3.3] 言語:C++/ [4] 期限:2005年1月25日つまりあと数時間でス・・・。 超ど初心者でス・・・. プログラの授業なんかとったのが間違いだったのかもしれません。 お暇な方、神になってくださらないでしょうか・・・
>981 カンマをタブ\tにするプログラムはどうだ? これなら一行ずつ処理するだけさ。 頑張れよw
983 :
デフォルトの名無しさん :05/01/25 21:57:31
JHDLなんてのもある。 完全に「ソフトウェア」の感覚。
>980 短い間だったが、台湾工場でも頑張れよ。うんうん。達者でな
986 :
デフォルトの名無しさん :05/01/25 22:11:44
LabviewとかもMatLabとかも何も使わないんだね。 楽しいなぁ
987 :
969 :05/01/25 22:26:17
976さん、979さん、ありがとうございます わざわざ書いていただいたんですけど悩んでもわかりません;; 976さんのでやってみたんですけど文字化けみたいになってしまって。 979さんのヒントでreallocがでてくるんですけどこれってサイズを拡張したり するものですよね?これがどう一行確保につながっていくのかわからなくて… 自分の書いてるやつがおかしいってなんとなくわかるんですけど なおせません;;何度もすみませんけど、ご指導のほどを…
あのreallocは行の数nだけ複数のポインタを用意してる。これはポインタの配列に近い。各ポインタの先は文字列として使うためにmallocで確保。
989 :
デフォルトの名無しさん :05/01/25 22:34:33
>>987 979は要するにいったんファイルの中身を全てメモリに行単位で読み込めと言うわけだ。
991 :
デフォルトの名無しさん :05/01/25 22:36:15
電子回路って、いったい何するの?
992 :
デフォルトの名無しさん :05/01/25 22:49:51
もうすぐ終了
993 :
デフォルトの名無しさん :05/01/25 22:50:52
あけましておめでとうございます
994 :
デフォルトの名無しさん :05/01/25 22:51:31
次スレ立ててくる
995 :
994 :05/01/25 22:52:06
996 :
デフォルトの名無しさん :05/01/25 22:52:43
997 :
デフォルトの名無しさん :05/01/25 22:55:50
うめうめ!
998 :
デフォルトの名無しさん :05/01/25 22:55:56
今年もよろしく
999 :
デフォルトの名無しさん :05/01/25 22:56:21
1000 :
デフォルトの名無しさん :05/01/25 22:56:27
お願いします。乾燥者より。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。