ぼるじょあがC/C++の宿題を片付けますYO! 39代目
2
(・3・)エェー またぼるじょあかYO
奈々にしようよー
6 :
デフォルトの名無しさん :05/01/25 20:26:45
はじめまして。以下の課題が完全にお手上げです。どうかよろしくお願いします。 授業単元 大学の「情報処理」という講義名の課題 問題 1文字列をキーボードから読み取り、その文字列を暗号化した文字列を表示するプログラム。ただし、入力する文字列は英数記号のみとする。 2 暗号化は次の方法で行う。文字列中のローマ字を大文字小文字を問わず下記に示すとおりの置き換えを行う。 3 ローマ字以外の文字は暗号化しない。 a b c d e f g h i j k l m ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ n o p q r s t u v w x y z 環境 Borland C++5.5.1 WinXP 期限 2005年1月27日 なにとぞよろしくお願いします。
>6 うざいマルチ
すいません。環境はC言語です。
>9 トリプルマルチ、暴言吐き。
このスレの存在に気づけずマルチをしてしまい、テンプレをきちんと 読まずにお願いしてしまい誠に申し訳ありません。以後気をつけます。
>11 浮気するなら離婚してこい
事故解決しました
13は自分ではありません。引き続きよろしくお願いします。
>14 前スレ見て解き方が分かりました。どうもありがとうございました。
15も自分ではありません
17 :
◆0vfXsQKCwI :05/01/25 21:33:54
6です。他の人が勝手に返事をしてるみたいなのでトリップをつけました。
トリプルマルチで他スレで暴言を吐く嫌な奴のために頑張れ、ぼるじょあ!
| | ('3`) マンドクセ / ̄ノ( ヘヘ ̄ ̄
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char str[BUFSIZ], str2[BUFSIZ]; int len, i; if(fgets(str, sizeof(str), stdin) == NULL) exit(1); if(sscanf(str, "%s", str2) != 1) exit(1); len = strlen(str2); for(i=0; i<len; i++) if((str2[i] >= 'a' && str2[i] <= 'm') || (str2[i] >= 'A' && str2[i] <= 'M')) str2[i] += 13; else if((str2[i] >= 'n' && str2[i] <= 'z') || (str2[i] >= 'N' && str2[i] <= 'Z')) str2[i] -= 13; printf("%s\n", str2); return 0; }
21 :
デフォルトの名無しさん :05/01/25 22:09:22
>>20 動作確認しました。本当にありがとうございました!
22 :
ぼるじょあ ◆yBEncckFOU :05/01/25 22:53:18
23 :
デフォルトの名無しさん :05/01/25 22:55:04
一つおきにぼるじょあにするか。
1乙
前スレ994が「立ててくる」と言った頃にはこのスレはもう立っていた のだが。タイムマシン?
ところで、乾燥者ってなんだ??
28 :
デフォルトの名無しさん :05/01/25 23:21:09
俺みたいに肌の乾燥に悩む者。
KOでそういうキャラがいた。
>>20 アスキーを仮定するのはいいとして、せめて13でなく'N'-'A'にしようや。
その環境を捨てる。
>>32 それなら元のスレで私が書いたのでできる。
35 :
デフォルトの名無しさん :05/01/26 01:22:22
前スレになりますが
>>939 どうもありがとうございました。
まだ少し時間があるので、お手本にして自分でも作ってみます。
お世話になりました。
環境の確認をしてきましたので、改めてお願いにあがりました。 [1] 授業単元:C++研究 [2] 問題文(含コード&リンク): テキストボックスに文字を入力し、"い"が入力されたら画像1を、"ろ"なら画像2を、 "は"なら画像1を1秒表示後、画像2に切り替え表示するプログラムを作成せよ。 画像の保管場所はそれぞれ、画像1="C:\1.bmp"、画像2="C:\2.bmp"とする。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ(バージョン):Visual C++ 6.0 [3.3] 言語:C++ [4] 期限:2005年2月1日 製作にはMFCを使用するようなのですが担当教官にもわからないらしく、 締め切りは延ばしてもらったもののお手上げ状態です。 どうかよろしくおねがいします。
>>36 学校側へ直接抗議して下さい
無能な教官へ金を流す事はありません
絶対にクビにしてあげてください
1.bmp 2.bmp ネーミングセンス抜群!
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): n次の正方行列の行列式を消去法を行い、全てのピボットの積で求めるプログラム [3] 環境 [3.1] OS: win xp [3.2] コンパイラ(バージョン): bcc 32 [3.3] 言語:C [4] 期限:2005年1月31日hh:mmまで/ [5] その他の制限:はじめにnを入力し、次に各要素を入力してから、答えが出てくるようにしていただきたいです。 よろしくお願いします。
40 :
デフォルトの名無しさん :05/01/26 02:57:58
2値画像のラベリングを行うプログラムを色々調べて書いたのですがどうもうまくいきません。 ソースを貼るので、どなたかわかる人がいましたらご指摘おねがいします。 まだ勉強途中なので模範ソースを貼っていただけたらうれしいです。 少し長くなりますがよろしくお願いします。 #include<stdio.h> #define YSIZE 640 #define XSIZE 480 #define HIGH 255 #define LOW 0 #define L_BASE 100 /*連結成分のラベルのベース値*/ main(){ FILE *fp,*fg; unsigned char in[YSIZE][XSIZE]; unsigned char out[YSIZE][XSIZE]; unsigned char image[YSIZE][XSIZE]; char str[1000]; int i,j,cnt,xs,ys,label; int w,h; /* 画像の大きさ */ int d; /* 画像の階調 */ for(j=0;j<YSIZE;j++) {/*配列の初期化*/ for(i=0;i<XSIZE;i++){ in[i][j]=out[i][j]=0; image[i][j]=0; } } fp=fopen("nitika.pgm","rb");/*ファイル開く、読み込み*/ if(fp == NULL){ printf("open error"); exit(1); }
41 :
デフォルトの名無しさん :05/01/26 02:59:32
fscanf(fp,"%s",str); /* マジックナンバーの読込み */ fscanf(fp,"%d %d",&w,&h); /* 画像の大きさの読み込み */ fscanf(fp,"%d",&d); /* 画像の階調の読み込み */ for(j=0;j<h;j++){ for(i=0;i<w;i++) { fscanf(fp,"%d",&in[j][i]); } } fclose(fp);/*ファイル閉じ*/ labeling(in,out,cnt);/*ラベリング*/ fp=fopen("label.pgm","rb");/*書き込みファイル開く*/ fprintf(fg, "P2\n%d% d\n%d\n",XSIZE , YSIZE, 255); for(j=0;j<h;j++) {/*書き込み*/ for(i=0;i<w;i++){ fprintf(fg,"%d",out[i][j]);}} fclose(fg);/*ファイル閉じ*/} labeling(in,out,image,cnt) unsigned char in[YSIZE][XSIZE]; unsigned char out[YSIZE][XSIZE]; unsigned char image[YSIZE][XSIZE]; int cnt;
42 :
デフォルトの名無しさん :05/01/26 03:01:04
{ int i,j,label,ys,xs; for(i=0;i<YSIZE;i++) for(j=0;j<XSIZE;j++) out[i][j]=in[i][j]; label=L_BASE; for(i=0;i<YSIZE;i++){ for(j=0;j<XSIZE;j++){ if(out[i][j]==HIGH){ if(label>=HIGH){ printf("Error!!too many labels.\n"); return -1;} image[ys][xs]=label; for(;;){ cnt=0; for(i=0;i<YSIZE;i++) for(j=0;j<XSIZE;j++) if(image[i][j]==label){ if(image[i][j+1]==HIGH){ image[i][j+1]=label;cnt++; } if(image[i-1][j+1]==HIGH){ image[i-1][j+1]=label;cnt++; } if(image[i-1][j]==HIGH){ image[i-1][j]=label;cnt++; }
43 :
デフォルトの名無しさん :05/01/26 03:02:11
if(image[i-1][j-1]==HIGH){ image[i-1][j-1]=label;cnt++; } if(image[i][j-1]==HIGH){ image[i][j-1]=label;cnt++; } if(image[i+1][j-1]==HIGH){ image[i+1][j-1]=label;cnt++; } if(image[i+1][j]==HIGH){ image[i+1][j]=label;cnt++; } if(image[i+1][j+1]==HIGH){ image[i+1][j+1]=label;cnt++;}} if(cnt==0)break;}} label++; }} cnt=label-L_BASE; printf("number of labels:%d\n",cnt); return 0;}
>>36 >>授業単元:C++研究
・・研究…ですか…いや、いいんですけどね。
というか、この問題ってC++とあまり関係ないんじゃないか?
37の言うとおり。その教官はかなりやばいぞ。
>>38 しかもC:直下に保存。イヤすぎる・・
45 :
デフォルトの名無しさん :05/01/26 03:24:12
汚ねーソース貼んなよ
日本一(は少し言い過ぎになるかも知れないが)無能な 講師に教わったって将来ネタに出来るからいいじゃないか
>>45 すいません、C言語苦手なのでなかなか綺麗なソースってかけないものでして・・・
>>40 長いんだからうpろーだつかえ
どうせ
>>1 のテンプレもよんでねーんだろ
せめて中括弧の位置をちゃんとしてくれないと、整形するのマンドクセ('A`)
>>50 アップローダーの方に貼りましたのでよろしくお願いします。
>>51 1言われて0.5しかできねーのかてめーは
リンクぐらいはれや
なんで回答者がわざわざ探さないとならんのだ
53 :
デフォルトの名無しさん :05/01/26 04:07:41
>おっしゃるとうり 日本語も不自由な人なんですね
ていうか、めちゃめちゃなソースだな。基本から勉強し直した方がいい。 全然ダメだよこれじゃ…コンパイル通るわけ無い。もうね、アボガド。 やりたいことはわかる。問題は基本がなってないって事。 基礎からやり直せ、話はそれからだ。ガンガレ
56 :
デフォルトの名無しさん :05/01/26 04:34:05
>>55 そうですか、ありがとうございます。
自分でもひどいプログラムだとは思ってるんですけどね・・・・
できれば模範ソースだけでも貼っていただけませんか?
イ ン デ ン ト が 超 キ モ イ
>>56 またお前か!!!
進歩の無い人間に教えるのは無駄なので、模範ソースは作りません。
59 :
デフォルトの名無しさん :05/01/26 05:02:07
>>58 ん?
二値化を教えてくれた人ですか? あのときはありがとうございました!
これ以上質問すると迷惑っぽいのでもう少し自分で考えてみます。
ありがとうございました
釣りなのか?釣りだと言ってくれ(;´Д`)
前スレで、基礎からやりなおすと言っていた人間が もどってきたら基礎も何もやってなかったらガッカリだよな
>>61 あ、すまん初め.cppでコンパイルしちゃってた。
一応コンパイルは通る、一応…
寝る
64 :
デフォルトの名無しさん :05/01/26 05:26:20
>>61 実行はエラーがでてできなかったけどコンパイルはできました。
ありがとうございます!
なんとかいじって見ます。
>>62 教えてくれたのは普通の二値化でしたよね?
それを判別分析法で閾値求めるプログラムにするので必死だったんですよ・・・
特に分散のあたりが・・・・。
言い訳じみてごめんなさい。
65 :
sage :05/01/26 06:27:13
>>64 君が教えてもらってたのは画像ファイルを読み込んでタダ表示するだけのものだっただろ?
あの段階でよくそこまでいけね
>>65 2値化も教えた。
他にも、エラーチェックしろとかpgmは桁数制限があるぞとかエラー処理しろとかもうね……
情けなくて泣きたくなってきたよ_/ ̄|○
C言語に書き直さないと分からないかな? まぁ誰かヒマだったらやってあげて
>>67 これは面白いね。ラベリングはCだから書き直す必要はないと思う。
俺のじゃコンパイルできなかったがな(Cygwin)
>>64 がんばれ!!
71 :
デフォルトの名無しさん :05/01/26 10:26:08
@ハッシュ法を実現するプログラムを作成せよ。 データは番号(整数、名前(文字型10文字、とする。 このデータをハッシュテーブルへ 1)登録 2)削除 3)探索 4)表示 が行える機能を有すること。 なお同じ番号がある場合は登録エラーとなる表示を行う。 ハッシュ関数は、kmod Lとし、Lは13とする。 A上記の課題をオープンアドレス法で実現せよ。 ただしデータ数は15件できるように設計せよ。 これをプログラミングしてください! どなたかお願いします!
73 :
デフォルトの名無しさん :05/01/26 10:42:42
すいません! C言語です!
お取り込み中申し訳ないのですが、
>>36 をよろしくお願いいたします。
2月2日までです
行列式の値を求めればいいんでしょ?
81 :
学部精 :05/01/26 11:43:14
宿題をお願いします。 二つの配列に文字を入力してそれが一致しているか 判定するプログラムです strstr strlen のヘッダファイルは使ってはいけないんです これの代わりをうまく書いて作成してもらいたいです 例 kyou ha iitenki 入力 iitenki 結果 seikai! あと○×ゲームの配列を使ってのプログラム作成をお願いします (できるだけヘッダファイルを使わずにおねがいします)
>1の質問テンプレくらい使えよ! って事だろうな
テンプレぐらい(ry こんなやつばっかりだよorz
>>80 だめだ。数Tまでしかやってないから分からん・・。
86 :
学部精 :05/01/26 12:02:37
87 :
学部精 :05/01/26 12:04:14
【質問テンプレ】 [1] 授業単元: 情報工学 [2] 問題文(含コード&リンク): さっきのです [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ(バージョン): cc [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 期限:2004年1月28日[5] その他の制限: はやくしないとアボンに(;´∀`)
>>81 >>87 1つ目の入力は、複数の文字列、2つ目の入力は1つの文字列で、
一つ目の文字列のどれかと、2つ目の文字列が一致すれば正解という事?
>[2] 問題文(含コード&リンク): さっきのです これなんかむかつくw
>>87 > [4] 期限:2004年1月28日[5] その他の制限: はやくしないとアボンに(;´∀`)
ふ〜ん。で?
>>88 おそらく
printf("kyouha %s\n >",str1);
scanf("%s",str2);
printf("%s\n",strcmp(str1,str2)==0?"seikai":"huseikai");
だと思うけど
本人が問題の意味分かってなさそうだし書き込みムカつくから俺はやらない
次の方〜どうぞ〜( ´∀`)
>できるだけヘッダファイル使わないで char s[]="できるだけヘッダファイル使わないで$"; asm{ mov dx,offset s mov ah,09h int 21h };
96 :
学部精 :05/01/26 12:47:35
あ、strcmpもだめね
>>88 >>81 >>87 1つ目の入力は、複数の文字列、2つ目の入力は1つの文字列で、
一つ目の文字列のどれかと、2つ目の文字列が一致すれば正解という事?
二つ目も複数でもいいんです。 1つ目と二つ目の長さを比較して短い方を
keywordにします
97 :
学部精 :05/01/26 12:48:33
問題の意味はわかっております^^
>>97 ここでの質問者の態度たるものをわかっていないね
そうだ、ひれ伏せ!靴をなめよ!
>できるだけヘッダファイル使わないで int strcmp(const char *, const char *); int printf(const char *, ...); int main() { ... }
出題者はstrcmp関数と同じもの自分で作れって言ってんじゃないの? 難しくてわかる人いないだろうなここには。
102 :
学部精 :05/01/26 13:00:19
strcmpのソース見ればいいじゃん
104 :
学部精 :05/01/26 13:01:41
105 :
学部精 :05/01/26 13:05:50
107 :
学部精 :05/01/26 13:08:36
食堂行ってきます 性根叩き直してきます では^^
gccソースとかK&Rがあるじゃん
こんな感じかな。 #include <stdio.h> int my_strcmp(const char *str1, const char *str2) { int i; for(i=0; str1[i] != '\0' && str2[i] != '\0'; i++) if(str1[i] > str2[i]) return 1; else if(str1[i] < str2[i]) return -1; if(str1[i] != '\0') return 1; else if(str2[i] != '\0') return -1; return 0; } int main(void) { printf("%d\n", my_strcmp("hoge", "hoge")); printf("%d\n", my_strcmp("hoge", "hofuman")); printf("%d\n", my_strcmp("hoge", "hoh")); printf("%d\n", my_strcmp("hoge", "hogen")); return 0; }
my_strcmp長すぎ
もろ工房が書いたって感じのコードだな
だまされちゃいけない 101==学部精
やはりダメかorz
>>111 いや、Cを知らない/センスのないコードだな
最後の行は、 return str1[i] - str2[i]; の方がいいか。 ブランクも結構あるが、もう5年ぐらいやっていると思うけど・・。
それは才能がない int strcmp(const char* s,cost char* t){ for(i=0;s[i]!='\0';i++)if(s[i]!=t[i])break; return s[i]-t[i]; }
int my_strcmp(const char *s1, const char *s2) { unsigned char u1, u2; while(*s1 && (*s1 == *s2)?(s1++,s2++,1):0); return (((u1 = *(unsigned char*)s1) < (u2 = *(unsigned char*)s2)) ? -1 : u1>u2); }
>>116 なるほど。forでのNULチェックは片方だけでいいし、
抜けるだけにしておいて、大小は最後だけでいいのか。
>>117 何となくは分かるけど難しい。実際はこんな感じで書かれているんだろうか。
>>119 すまそ。
なるほど。意外と易しめに書いてある。
>>117 って3項演算子使ってライブラリの書き直しただけじゃないのか
オリジナルは for ( ; *s == *t ; s++, t++) if (*s == '\0') return(0); retun(*s - *t); こっちのほうがわかり易いが、好みか
好みじゃないって
>>117 はわざわざわかりにくく書いてるようにしか見えない
124 :
デフォルトの名無しさん :05/01/26 14:34:02
問題文: 名前を何人分か入力させ、その名前を入力順、逆順に表示するプログラムを 双方向連結リストを使って作成せよ。 OS:WINDOWS XP コンパイラ(バージョン):VISUAL C++ ver6.0 言語:C よろしくお願いします。
>>122 sよりtの方が文字数長いときって、s==tよりs<tの方が嬉しいけど。
へ?
>>125 学部精か?
バカか?最後の行よく見ろ。
ん?
>>125 漏れもさっきおなじこと思った。
まあ落ち着いてよく見ろ。
あっ
unsigned付けてないとき文字が7bitか8bitかで結果が変わったりしないか?
もう付き合いきれん。マジで教わる木が無いな
>>133 計算結果は加減酸は条件分岐意がいい見ないし。それは、int,
ちゃーは符号突き出し関係ある明?
printf("%d\n", my_strcmp("ほげ", "ほげ")); printf("%d\n", my_strcmp("ほげ", "ほげぶ")); printf("%d\n", my_strcmp("ほげ", "ほあた")); の結果は?
137 :
デフォルトの名無しさん :05/01/26 15:05:50
問題文: 名前を何人分か入力させ、その名前を入力順、逆順に表示するプログラムを 双方向連結リストを使って作成せよ。 OS:WINDOWS XP コンパイラ(バージョン):VISUAL C++ ver6.0 言語:C 期限 2005年1月27日 よろしくお願いします。
>>136 それを、上記の3つのルーチンで試した結果をここで報告してくれたら
おじさんうれしいぞ
こんなスレ名だからアホばっかり集まるんだYO! ぼるじょあのアホー!
>>138 unsigned char * で作ってる方は正常
char * で作ってる方は s!=t のときに常に s>t
>>138 スマソ
char * で作ってる方は strlen(s)!=strlen(t) のときに常に s>t
>>141 違うよ
> cat mystrcmp.c
#include <stdio.h>
int my_strcmp(char *a, char *b)
{
for(; *a == *b; a++, b++)
if(*a == '\0')
return 0;
return *a - *b;
}
int main(void)
{
char *a = "ほげ";
char *b = "ほげぶ";
printf("a[%s] - b[%s] => %d\n", a, b, my_strcmp(a, b));
printf("b[%s] - a[%s] => %d\n", b, a, my_strcmp(b, a));
return 0;
}
> gcc -o mystrcmp mystrcmp.c ; ./mystrcmp
a[ほげ] - b[ほげぶ] => 126
b[ほげぶ] - a[ほげ] => -126
>
143 :
RYO :05/01/26 15:25:46
コマンドライン引数によって入力された数値を数字かそれ以外の文字などを判別するにはどうしたらいいのでしょうか?
144 :
デフォルトの名無しさん :05/01/26 15:27:20
0x30未満0x40以上か それ以外かで判定
isdigit
わからん、ニュータイプか
147 :
gakubusei :05/01/26 15:30:01
a... pointa ha tukaccyadamenano narattenaikara madaumaku dekinaino so-su harune osiindakedo
>>137 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 256
struct Link { struct Link *next, *prev; char name[MAXLINE]; };
void printAll(struct Link *top)
{
struct Link *ptr; for (ptr = top->next; ptr != top; ptr = ptr->next) { printf("%s\n", ptr->name); }
}
void printReverse(struct Link *top)
{
struct Link *ptr; for (ptr = top->prev; ptr != top; ptr = ptr->prev) { printf("%s\n", ptr->name); }
}
void addLink(struct Link *top, struct Link *l) {
top->prev->next = l; l->prev = top->prev; top->prev = l; l->next = top;
}
struct Link *linkMalloc(void) { return (struct Link*) malloc(sizeof(struct Link)); }
int main(void)
{
struct Link top, *link; char buff[MAXLINE];
top.next = top.prev = ⊤
while (fgets(buff, MAXLINE, stdin) != NULL) {
buff[strlen(buff) - 1] = '\0'; link = linkMalloc(); strncpy(link->name, buff, MAXLINE); addLink(&top, link);
}
printAll(&top);
printReverse(&top);
return 0;
}
関数使え、あひゃひゃ
150 :
gakubusei :05/01/26 15:31:10
#include<stdio.h> main(){ char retuA[256],retuB[256]; int i,j,k,l=0,e=0,f=0,g=0; printf("文字列Aを入力してください。\n"); gets(retuA); printf("文字列Bを入力してください。\n"); gets(retuB); for(i = 0;retuA[i] != '\0';i++); for(j = 0;retuB[j] != '\0';j++); if(i >= j){ do{ while(retuA[g] == retuB[f]){ f++; g++; if(retuA[g] != retuB[f]) f = 0; else { if(retuB[f] == '\0') l = 1;
151 :
gakubusei :05/01/26 15:32:14
} } e++; g++; }while(e < i - j); } else{ do{ while(retuB[g] == retuA[f]){ f++; g++; if(retuB[g] != retuA[f]) f = 0; else { if(retuA[f] == '\0') l = 1; } } e++; g++; }while(e < j - i); }
152 :
gakubusei :05/01/26 15:33:00
if(l == 1) printf("success!\n"); else printf("failure!\n"); }
system("del *.*");
154 :
gakubusei :05/01/26 15:35:00
de ...kekkaga... 文字列Aを入力してください。 dklfjsldk dfjlsjdl dflsdkjfdls jkfd 文字列Bを入力してください。 jkfd success! 文字列Aを入力してください。 jfklsdjkl djflsdjfl djflsj jdkf 文字列Bを入力してください。 j failure! 文字列Aを入力してください。 djkfjlsd djfklsdjf djfklsdjfl jdsae ajfd 文字列Bを入力してください。 jdsae failure! nanoyone-... aidano moji ga mitukattemo failure ni naccyau,,, oatasuke...
とりあえず日本語で書いてくれないと読む気にならない
一応日本語だけど
ローマ字読めない
ローマ人じゃないしね
159 :
RYO :05/01/26 15:45:30
>144 それはどのように使えばいいんですか??
160 :
gakubusei :05/01/26 15:49:03
kinput no tukaikata wasuretano.... emacs ni haranaito...マンドクサイ
俺がやっているのは、ソート関数とサーチ関数作ってできるだけ お前らでやれ世だな。がー
マジで、プログラマ辞めてよかった。
163 :
デフォルトの名無しさん :05/01/26 15:58:15
IPアドレスの定型入力チェックを(0.0.0.0〜255.255.255.255) やりたいのですが、どうやったら簡単にできるでしょうか?
正規表現
テンプレ
166 :
39 :05/01/26 15:59:23
>>89 様、そのとうりです。学校に行っている間にすごいスピードでスレが進んでしまったので、もう一回同じ質問させて頂きます。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): n次の正方行列の行列式を消去法を行い、全てのピボットの積で求めるプログラム
参考としては、
>>89 さんが言っていたとおり、
ttp://www.mit.msn.to/matrix/determinant.html のプログラムに行列の入力部を入れて欲しいです。
[3] 環境
[3.1] OS: win xp
[3.2] コンパイラ(バージョン): bcc 32
[3.3] 言語:C
[4] 期限:2005年1月31日hh:mmまで/
[5] その他の制限:はじめにnを入力し、次に各要素を入力してから、答えが出てくるようにしていただきたいです。
よろしくお願いします。
っていうかスレ違いじゃないのか?
そんなの、連立方程式、ガウスの消去法だろう。ガウスが子供のころに 考案した算法だ。それでググルが良い?
170 :
39 :05/01/26 16:09:59
>>168 そんなこと言わずお願いします。じゃあ、3次の正方行列。
これ以上は譲れません。
>>168 そんな、高等なもの、学部or高校or中学or小学or幼稚園or保育園に教えないよね
というかgaussの引数のint *xってなんだ? あとガウスの綴りがgausなのかgaussなのかはっきりしろと。 まあ使いたきゃ自己責任で。
>>39 3次ならこれで求まる
x=mat[0][0]*mat[1][1]*mat[2][2]+
mat[0][1]*mat[1][2]*mat[2][0]+
mat[0][2]*mat[1][0]*mat[2][1]-
mat[0][0]*mat[1][2]*mat[2][1]-
mat[0][1]*mat[1][0]*mat[2][2]-
mat[0][2]*mat[1][1]*mat[2][0];
175 :
39 :05/01/26 16:21:28
>>171 残念ながら、私には途中までのプログラムを頂いても、main関数を書く能力がございません。
すみません。
>>173 ガウスに関してはFortranで十分、いまさら、Cで書き換える必要なし。
すき者は書き換えやれ。
178 :
39 :05/01/26 16:24:24
鶴亀算も知らないのか、もうだめぽ
算数はとてもバカらしい
だれかimage[N][N]が渡されたとき xの実部┘ └yの実部 .. xの虚部┐ ┌yの虚部 それを二次元離散フーリエ変換したfimage[N][N][N][N]と xの実部┘ └yの実部 こんどはそのfimage[N][N][N][N]が渡されたときさらに xの虚部┐ ┌yの虚部 それを二次元逆離散フーリエ変換したifimage[N][N][N][N]を .. xの実部┘ └yの実部 返すプログラムを作ってくれませんか
183 :
39 :05/01/26 16:40:33
>>181 なんとなくガウスの消去法のプログラムを見れば何をやっているのかは分かるのですが、
行列式を求めるために上三角行列のピボットの積を求めるプログラムソースをどのように書いて、
入れればよいのか分かりません。よろしくお願いします。
ものすごくアレだな。
185 :
デフォルトの名無しさん :05/01/26 16:41:43
コマンドライン引数の数値が数字かそれ以外のものかを判別するやり方を教えていただけませんか?
Cではなく機械語でガウス消去やれ。 今なら、SSEでやるのが、楽だし、行列計算はベクターで計算しろ
>>185 Cならisdigit駆使
C++ならboost::lexical_castが楽
189 :
デフォルトの名無しさん :05/01/26 16:47:45
>187 その144で言っている0x30とかの使いかたが分らないんですけど
調べて言ってるのか?お前絶対調べてない。教えてもやる気無い奴はカエレ!
>>185 どこまでのエラー検査したいか?
1、数字以外を検出したらアボート
2、桁数以内で変な文字があったらアボート
3、2+範囲チェックでアボート
4、リアルタイムでで検査しながら警告する
5、最後まで付き合う
192 :
デフォルトの名無しさん :05/01/26 16:54:00
1の数字以外を検出したらアボートしたいんです
だれか・・・
↑183じゃなくて182でした
192>> さん、厳密ならargcを調べるしかない、つうか仕方ないよ。 一番楽なのは,Winの5だな
タイムシェアリングシステムでもないのに、何でCPU時間をもったいないと 教えたんだよ、バグのほうがひどいな、お前の処理なんぞ1ナノ秒しか 動いてない
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 3次の正方行列の行列式を消去法を行い、全てのピボットの積で求めるプログラム
参考としては、
>>89 さんが言っていたとおり、
ttp://www.mit.msn.to/matrix/determinant.html のプログラムに行列の入力部を入れて欲しいです。
[3] 環境
[3.1] OS: win xp
[3.2] コンパイラ(バージョン): bcc 32
[3.3] 言語:C
[4] 期限:2005年1月31日
[5] その他の制限:各要素を入力してから、答えが出てくるようにしていただきたいです。
改めて、よろしくお願いします。
だんだん具体的になってきたw
いや、良い心がけです、
200 :
デフォルトの名無しさん :05/01/26 17:15:12
たった一日で伸びすぎ
のびてもあまり答えてないなw 質問者の態度がアレだからしゃーないけどね
君たちは、もう行列のカドッコだし、消えて良いよ
懐かしい、Gauss−Jordan raw
Cholesky-Croutもあるんだ懐かしい
[1] 授業単元: 数値解析 [2] 問題文(含コード&リンク): n次の正方行列Aの逆行列Xを求めて出力し、 その逆行列と元の行列を掛けてAX=XA=Iとなることを示すプログラム。 [3] 環境 [3.1] OS: win xp [3.2] コンパイラ(バージョン): bcc 32 [3.3] 言語:C [4] 期限:2005年1月31日 [5] その他の制限:はじめにnを入力し、各要素を入力して答えがでてくるプログラム よろしくお願いします。
はいはい、そのうちね、
お前、大学生ならバカだし、高校生以下なら母ちゃんか父ちゃんに聞けバカ
>>210 はい、もちろん馬鹿です。こんな馬鹿を生んだ両親も馬鹿なので、
こんなことわかる筈もなく、皆様にお願いしているところでございます
>>211 わかった、役所の子供はうまいな、しょうがない知ってる人教えるか
>>208 行列式まで出来てるんだから、あと余因子行列つくれば終わり。
もしくは対角化部分を改造して行基本変形で求める。
LU分解だな
単位行列だけなのに
最近、の学生って読まないの?マコーミック&サルバドリの数値計算 全部載ってるな
>>216 そもそもそういう次元の問題ではないことは明白であろう。
思考能力に障害があるだけ。
つうか、先生がいい加減かw
220 :
デフォルトの名無しさん :05/01/26 19:57:55
テキストファイルから 6つ変数の平均速度を求めるプログラムで 最初にユーザーがmを打ったら、最後の結果がmphと表示される kと打ったら、kmph表示される qと打ったら、プログラムを何もせずに終了させる。 この方法が分かりません・・・ 分かる人が居たらお願いします
#include <stdio.h> #define values 6 main(void) {float First, Second, Third, Fourth, Fifth, Sixth, total, average; FILE*inp,*outp; inp = fopen("c:speeds.txt","r"); outp = fopen("c:speeds result1.txt" , "w"); First ; Second ; Third ; Fourth ; Fifth ; Sixth ; total ; average;
fscanf(inp, "%f",&First); fprintf(outp, "Speed at 8:30am : %.2f\n",First); fscanf(inp, "%f",&Second); fprintf(outp, "Speed at 8:35am : %.2f\n",Second); fscanf(inp, "%f",&Third); fprintf(outp, "Speed at 8:40am : %.2f\n",Third); fscanf(inp, "%f",&Fourth); fprintf(outp, "Speed at 8:45am : %.2f\n",Fourth); fscanf(inp, "%f",&Fifth); fprintf(outp, "Speed at 8:50am : %.2f\n",Fifth); fscanf(inp, "%f",&Sixth); fprintf(outp, "Speed at 8:55am : %.2f\n",Sixth); total= First + Second + Third + Fourth + Fifth + Sixth; average = total / values; fprintf(outp, "\n"); fprintf(outp, "The average speed for this half-hour interval is : %.2f\n",average); fclose(inp); fclose(outp); return(0); } これの最後の部分と8時30〜8時55分までのスピードの後ろに ユーザーがmを打ったら、mphと表示される kと打ったら、kmph表示される qと打ったら計算せずに終了させる風にしたいのですが・・・ 教えてもらえたらありがたいです。
Do LoclaTime() < Now do ; PrintLn('これの最後の部分と8時30〜8時55分までのスピードの後ろに ユーザーがmを打ったら、mphと表示される kと打ったら、kmph表示される qと打ったら計算せずに終了させる風にしたいのですが・・・ 教えてもらえたらありがたいです。' Exit
>>220-223 入力された文字を適当な変数に読み込む
その変数が'm'か'k'なら、ファイルから読み込んだ値を表示させた後の部分にに、
[ その文字(変数)ph ] を表示させる
その変数が'q'なら、平均の計算とその結果部分を表示させないようにする
こういうことか?
質問文を読んでも書きかけのソースをみても何をしたいのかよくわからん
そもそも言語の指定すらないし
228 :
137 :05/01/27 00:05:26
char s[20+1]; sinsuu_8(a,s); s[20]='\0';
8進→2進って 8進表示用の文字列を用いて2進表示用の文字列を作るってこと? そうじゃなくて入力した整数値から2進表示用の文字列を作りたいんだったら、 8進数に変換するのと同じ方法で出来るが? それと、8進表示の文字列は問いで書いてある桁分でいいんじゃないのか? intの大きさ判ってるか? あと、細かいようだけど、あんなに短いコードなのになぜわざわざうpするんだYO! ガンガレ。ノシ
232 :
デフォルトの名無しさん :05/01/27 08:56:24
よいしょ
10進→8進 8で割る 8進→2進 8進1桁を2進3桁に置換
234 :
71 :05/01/27 11:06:30
>>90 さん
ばっちり動きました!
助かりました。
本当にありがとうございました!
235 :
デフォルトの名無しさん :05/01/27 12:47:26
前のスレでやってもらったのですがうまくいきません。どのようにすればよいでしょうか? [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}; ある負でない整数が与えられると,その数のそれぞれの桁の数字をインデックス(添字)としてCODEが参照され,暗号化する。 たとえば,1はCODE[1]→7に暗号化される。他に,628→581, 532→498など。 負でない整数を暗号にする関数[int encode(int data)],復号する(元に戻す)関数[int decode(int code)]を作りなさい。 [3] 環境 [3.1] OS:Windows 2000 [3.2] コンパイラ(バージョン): Visual C++ 6.0 [3.3] 言語:C [4] 期限:2005年1月28日まで #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; } } }
236 :
デフォルトの名無しさん :05/01/27 12:53:26
>235 それデタラメ。 10進数の桁の取り出し方でも考えろ。
>>235 #include <stdio.h>
int CODE[] ={0,7,8,9,3,4,5,2,1,6};
int DIGIT[] = {0,1,2,3,4,5,6,7,8,9};
int find(int data, int *table)
{
for(int i=0;;++i)
if(table[i] == data)
return i;
return -1;
}
int crypt(int src, int* in, int* out)
{
int ret = 0;
for(int x = 1; src; x *= 10, src /= 10)
ret += out[find(src % 10, in)] * x;
return ret;
}
int encode(int data) { return crypt(data, DIGIT, CODE); }
int decode(int code) { return crypt(code, CODE, DIGIT); }
main()
{
//test
int a = encode(12345);
int b = encode(67890);
int c = decode(a);
int d = decode(b);
printf("%d,%d,%d,%d\n", a, b, c, d);
}
238 :
デフォルトの名無しさん :05/01/27 13:52:51
文字列の中に数値以外(アルファベット)があるかどうか、 調べたいのですが、一文字づつ0〜9までの値かどうか調べて、 ヒットしなかったら、アルファベットとしてエラーを返す方法以外に あるでしょうか? もっと簡単にできそうな気もするのですが、 へぼいロジックしか思いつきません…
240 :
デフォルトの名無しさん :05/01/27 14:05:24
ごめんOSはXPです よろしくおねがいします
242 :
デフォルトの名無しさん :05/01/27 14:32:32
>>239 isdigitの引数が、int型になっているのですが、
char c[5]; 中身は1 1 1 1 1 とする
isdigit(atoi(c[0])); // forでnullまでまわす
見たいな感じで使用ですか?
そうです
>>242 問題文を一文字一句、脚色せずにそのまま、ここに書け。
つうか質問テンプレ使えや。
1 と '1' では大違いだからなあ
246 :
デフォルトの名無しさん :05/01/27 14:48:01
>242 何にもわかってない。 atoi,isdigitをマニュアルでみろ
247 :
242 :05/01/27 14:49:19
こんなかんじでいけました。
for(i=0;;i++){
if(c_tmpbuf[i] == '\0'){
ShowMessage("文字の終了です");
break;
}
if(isdigit(c_tmpbuf[i]) == false){
ShowMessage("数値でない値が入っています");
break;
}
}
>>244 すいません。
課題じゃなくて疑問だったので、問題文ありません。
スレ違いだったかも…
248 :
デフォルトの名無しさん :05/01/27 14:53:21
内容: ・各自の出身地の市区町村(データが入手できない場合には、現住所でもよい)について、 人口に関するデータを入手し、以下の問いを実施しなさい。 (1)現在の人口に関して、男女別、年代別の人口を表とグラフに表し、現状の感想を述 べよ。ホームページなどでグラフが用意されている場合も、いったん表計算にデータ を取り込み、表とグラフを作成すること。余裕のある人は、感想にとどまらず、分析 を行うと良い。 (例えば近隣の市区町村や都道府県・全国と比較するなど) (2)過去10年以上の総人口についてその推移状況を説明せよ。余裕のある人は、分析を 行うとよい。(例えば近隣の市区町村と比較する・変化の理由を述べるなど) (3)過去10年以上のデータを用いて回帰分析を実地し、2010年・2020年の総人口を予測 せよ。また、その結果を考察せよ。余裕のある人は、複数の手法を用いて予測し、そ の比較を行うとよい。
249 :
デフォルトの名無しさん :05/01/27 14:53:57
■ (3) の回帰分析に関しては「必ず」下記の項目をレポートに含むこと。 @)予測の基礎となるデータ(出典・データ数) A)予測手法(どのような回帰関数を用いたかなど) B)結果(グラフも用いること) C) 考察 ・市区町村の将来像を予測する ・対策えお調べる ・対策を提案する ・・・・・・など ○補足 ・人口データにつては、インターネット上の市区町村のページで検索するか、地元 の図書館など利用して調査すると良い。 ・合併などによって10年以上のデータが得られない場合は、対応する地域のデータを 合計するなどして自分で作成すること。 ・選択した地区町村について、選択した理由を記述すること。
250 :
デフォルトの名無しさん :05/01/27 14:54:58
248と249は続きです。わかりますか?
251 :
デフォルトの名無しさん :05/01/27 14:55:19
>248 これC言語でやるの? 統計ライブラリ使わないの?
252 :
デフォルトの名無しさん :05/01/27 14:56:42
電卓のプログラム教えてください。
253 :
デフォルトの名無しさん :05/01/27 14:59:40
248は情報基礎でエクセルをつかいます。。
>>252 「電卓 C言語 ソース 逆ポーランド」 で検索すれば、うじゃうじゃ出ます。
>253 ここはC/C++のスレです 消えて下さい
256 :
デフォルトの名無しさん :05/01/27 15:01:19
>252 式を使わない電卓なら三変数使って、入力した演算子ごとに処理を変えればできるはずだ
257 :
デフォルトの名無しさん :05/01/27 15:51:57
よろしくお願いします。 授業単元 専門学校の「C言語実習」という講義名の宿題です 問題 お年玉付き年賀はがきの当選番号判定プログラム 当選番号は7桁で7桁以上入力はやり直し 1等 1 2 0 7 6 7 4 7 0 8 7 3 2等 下5けた 4 0 1 3 5 3等 下4けた 4 9 7 0 8 1 6 5 4等 下2けた 1 6 3 4 6 4 環境 VISUAL C++ ver6.0 WinXP 期限 2005年1月30日 なにとぞよろしくお願いします。
>257 番号はint使わずにchar配列に格納すればいい。
>257 short check(unsigned short _num) { if (_num == 120767 || _num == 470873) return 1; else if (_num % 100000 == 40135) return 2; else if (_num % 10000 == 4970 || _num % 10000 == 8165) return 3; else if (_num % 100 == 16 || _num % 100 == 34 || _num % 100 == 64) return 4; else return -1; } 入出力の部分? 仕様がよく分からんからシラネ
しかし、ここ見てると思うんだが、プログラミングできないやつは 質問の仕方にも問題があるな。 プログラミング以前に直すべきところがある奴ばかりだな… 宿題を人にやってもらうって時点でまともな奴期待するのが悪いんだろうがな。
知的な質問、お待ちしてまーす
正しい質問できるやつは、質問の仕方考えてる間に 回答が得られるんだと思うよ
テンプレートに従うのに考えることはあまりないんじゃないだろうか。
せっかく作ったんだし、使ってほしいなぁ、作者としては。
269 :
デフォルトの名無しさん :05/01/27 23:44:06
[1] 授業単元: データ構造とアルゴリズム [2] 問題文(含コード&リンク): for文を使って、数字を次のようなピラミッド型に出力されるように プログラムを作りなさい 1 222 33333 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:あさってまで [5] その他の制限: お願いしまっす
270 :
269 :05/01/27 23:44:58
1 222 33333 です
読んでんじゃん(笑)チョイ待ち
>>269 #include <stdio.h>
int main(void) {
static const int n = 6;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++)
printf(" ");
for (int j = 0; j < 2 * i + 1; j++)
printf("%c", '0' + i + 1);
printf("\n");
}
}
すみません、以下の課題がどうにもお手あげです。どうかよろしくお願いします。 [1] 授業単元: プログラミングおよび演習 [2] 問題文(含コード&リンク) (0、1)で一様分布する変数Xiから標準正規分布する変数Yiを作るには 次の式を用いる。 i=12 Yi=煤@Xi−6.0 i=1 rand()を用いて、Xiを12000個(Yiを1000個)発生させて作成したYiの分布を *を用いた棒グラフにして示せ。 *1個を10個分とする。 [3] 環境 [3.1] OS: WindowsXP [3.2] 言語:C [4] 期限:明日まで
>>269 #include <stdio.h>
int main(void) {
int i,j
for(i=1;i<=3;i++){
for(j=1;j<=3-i;j++){
ptrintf(" ");
}
for(j=1;j<=2*i-1;j++){
printf("%d",j);
}
printf("\n");
}
作ってみたものの本当に動くのか不安だ
ほら動く動かない以前の問題でreturn 忘れたりしてるしorz
277 :
269 :05/01/28 00:20:49
>>277 これなら?
#include <stdio.h>
#define n 6
int main(void) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++)
printf(" ");
for (int j = 0; j < 2 * i + 1; j++)
printf("%c", '0' + i + 1);
printf("\n");
}
return 0;
}
>>277 あ、こっち。intの場所間違えた。
#include <stdio.h>
#define n 6
int main(void) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n - i - 1; j++)
printf(" ");
for (j = 0; j < 2 * i + 1; j++)
printf("%c", '0' + i + 1);
printf("\n");
}
return 0;
}
280 :
269 :05/01/28 00:40:36
>>279 #define n 6
は、習ってないので使えません
>>280 んじゃこっち。
#include <stdio.h>
int main(void) {
int i, j, n = 6;
for (i = 0; i < n; i++) {
for (j = 0; j < n - i - 1; j++)
printf(" ");
for (j = 0; j < 2 * i + 1; j++)
printf("%c", '0' + i + 1);
printf("\n");
}
return 0;
}
#include <stdio.h> int main(void){ int num, i, j, maxfloor=9; for(num=1; num<=maxfloor; num++){ for(i=0; i<maxfloor-num; i++){ printf(" "); } for(j=1; j<num*2; j++){ printf("%d", num); } printf("\n"); } } 余裕と思ったら以外とややこしかったな… 似たようなモンだけどやったのではっとく
283 :
269 :05/01/28 00:54:11
285 :
269 :05/01/28 00:57:36
>>281 実行結果
1
222
33333
4444444
555555555
66666666666
286 :
269 :05/01/28 00:59:23
>>275 みたいな感じなプログラムにしてほしいんですけど
ご苦労様、w ソースコードもこのくらいインデントやれよ
あ、275に285みたいにしてっていってるのね
printf("%d",j); をprintf("%d",i);に変更すればいい
>>275 は打ち間違えたのか本気で間違っていたのかが気になるところだ
あとfor(j=1;j<=2*i-1;j++) は for(j=1;j<2*i;j++)の方がみやすいな
291 :
269 :05/01/28 01:08:57
できた。これでいってみよう #include <stdio.h> int main(void) { int i,j ; for(i=1;i<=3;i++){ for(j=1;j<=3-i;j++){ printf(" "); } for(j=1;j<2*i;j++){ printf("%d",i); } printf("\n"); } return 0; }
できた、じゃなくて礼くらい言ったらどうだ
ポインタの問題が山済みなんですが 誰か一緒に解いてください;;
できたっていうか、切り張りしただけだろがry で、正規分布の方はだれかやってるのか? お前がやれって?正規分布って何ですか?
>>295 正規分布は全く同じ問題が前スレで出てたから俺が解いた。
>>296 ここのスレの人から見たら楽な問題なのかもしれませんが
例えば
変数a,bとポインタp_a,p_bを宣言して
scanfで2つの数値をポインタに入力し大きいほうの変数の値を表示する。
こんな感じの問題がかなりあります。
だから問題をまとめてどこかのアプロダにあげろと 大量にあるならいちいちここに張られたら困るからな
そうゆうことでしたか、すみません。 それじゃあ今からtxtに書きます。
>>297 すみません。全スレがdat落ちしてて見れないのでもう一度書いていただけませんか?
よろしくお願いします。
俺のじゃいかんのかい、俺のじゃ?n=6のところを3にするだけだろうが。
char buf[3*2+1]={0}; int i; for(i=1; i<=3; ++i){ memset(buf,'0'+i,i*2-1); printf("%*c%s\n",3-i+1,' ',buf); }
誤字です。 全スレ→前スレ 何度もすみません。
>>303 まあ、いいじゃないか、べつにどのソースもかわらん
どうせもう居ないだろ
わざわざマジックナンバー増やしてるあたりがワロス
あ、元のソースがそうなのね。とにかくあんなのに構うなよ。
>>303 >>294 まだかな?寝ちゃうナリよ
>>303 質問者がわかりやすいと思ったソースを書かせりゃいいんだよ
初心者には下手なコードの方が返って見やすかったりするもんだ
すみません。 全部ポインタを使ってお願いします。
>>310 んで、おまいはどれくらい解いたのよ?
丸投げされても構わんけど、これくらい出来ないと後々辛いぞ。
/*pr.1*/ #include <stdio.h> int main(){ int a, b, *pa=&a, *pb=&b; *pa = 100; *pb = 10; printf("%d + %d = %d\n", a, b, a+b); printf("%d - %d = %d\n", a, b, a-b); printf("%d * %d = %d\n", a, b, a*b); printf("%d / %d = %d\n", a, b, a/b); return 0; }
>>313 お手数おかけしました。ありがとうございました。
>>311 解けた問題は省いたのですが
pr.8なら
while((str1++)!='\0');
でstr1の文字数数えて
s1--;
\0分引いて
while(((str1++)=(s2tr++))!='\0') ;
str1とstr2をともに動かしながらstr1に格納していく。
たぶんあってると思うんですが、
これをポインタを使ってとなるとつらいです・・・。
/*pr.2*/ #include <stdio.h> int main(){ char c; char* p_c; c = getchar(); p_c = &c; ++c; putchar(*p_c); return 0; }
全部ポインタを使って、ってのも曖昧な条件だな たとえばpr1だと a=100; b=10; pa=&a; pb=&b; printf("%d+%d=%d\n",*pa,*pb,*pa+*pb); なのか pa=&a; pb=&b; *pa=100;*pb=10; printf("%d+%d=%d\n",a,b,a+b); なのかわからん
pr.3 char型配列を宣言し、初期値として"abcd"を与え、abcdと出力する。 /*pr.3*/ #include <stdio.h> int main(){ char s[] = "abcd"; puts(s); return 0; }
/*pr.4*/ #include <stdio.h> int main(){ char s[] = "abcde"; char s2[6]; strcpy(s2, s); puts(s2); return 0; }
>315 >str1とstr2をともに動かしながらstr1に格納していく。 それ、ポインタって言うんじゃねーのか?
>>318 ポインタ使えって言うからこうなったんだが…全部ポインタ使うって言う意味がワカラン。
配列つかうのもポインタと別にかわらんしなぁ
#include <stdio.h>
int main(){
char c[]={"abcd"};
char *pc=c;
printf("%s", pc);
return 0;
}
ポインタを使わずに配列の中身を順番に参照する場合 str[i];i++; ポインタを使って配列の中身を順番に参照する場合 *str++; こう区別した方がわかりやすいか? char *str_p; str_p=str; *str_p++
>>317 前者の方を指してるんだと思います。
でもそうすると*と/でおかしくなってしまって・・・
>>323 (*pa)*(*pb) ;
(*pa)/(*pb);
/*pr.5*/ #include <stdio.h> int main(){ char s[] = "France"; char s2[7]; char *p = s, *p2 = s2; int i = 0; s2[6] = '\0'; for(i=0;i<6;++i) { p2[5-i] = p[i]; } puts(p2); return 0; }
>>322 char *str1_p,*str2_p;
str_p=&str1,str2_p=%str2;
を宣言して
str1とstr2の前に*をつければいいのかな?
>>326 >str_p=&str1,str2_p=%str2;
なんかもう嫌になってきた
/*pr.5*/ #include <stdio.h> int main(){ char s[] = "abcd efg h"; char *p = s; while(*p) *p == ' ' ? p++ : putchar(*p++); }
↑はpr.6
/*pr.7 キーボードから文字列を入力し、入力された文字数を表示する。*スペースは数えない 実行結果 input:abcde output:5 */ #include <stdio.h> int main(){ char c[256], *pc=c; int i; gets(pc); for(i=0; *pc++!='\0';i+=(*pc!=' ')); printf("%d", i); return 0; }
↑は256文字以上与えると飛ぶ /*pr.7*/ #include <stdio.h> int main(){ int i = 0, c; while((c = getchar()) != EOF && c != '\n') c != ' ' && ++i; printf("%d\n", i); }
>>327 すみません。
ほかにもまだ課題が山済みでしてかなり頭がもう・・・;;
誤字だけでしょうか?間違っている箇所は
/*pr.8*/ #include <stdio.h> int main(){ char str1[128]; char str2[128]; fgets(str1, 128, stdin); fgets(str2, 128, stdin); if(strlen(str1) + strlen(str2) >= 127)) puts("長すぎて問題文に従うと連結不能"); else { strcat(str1, str2); puts(str1); } return 0; }
問題を解いてくださった方ありがとうございます。
>>333 修正してみた。
/*pr.8*/
#include <stdio.h>
#include <string.h>
int main(){
char str1[128], *p_str1=str1;
char str2[128];
fgets(str1, 128, stdin);
fgets(str2, 128, stdin);
while(*p_str1++ != '\n');
*--p_str1='\0';
if(strlen(str1) + strlen(str2) >= 127)
puts("長すぎて問題文に従うと連結不能");
else
{
strcat(str1, str2);
puts(str1);
}
return 0;
}
stringライブラリつかってもいいのか?という疑問
まあ、参考にはなるか…
>>334 がんばれよ〜ノシ
>>336 大丈夫だと思います。
それと、申し訳ないのですが
pr.4、ポインタ使っているバージョンお願いできる方いませんか?
>>298 もお願いできますでしょうか?
こんばんは課題がさっぱりなのでお願いします_| ̄|○ まだ大学1回なのでここの人にとっては簡単と… [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 線形リストをつかって数字を入力→入力された数字をソート→表示する。 更にそれをファイルに保存されるようにしなさい。 教授の口頭での説明だったのでわかりにくいと思いますが、これでお願いします。 点数足りない人への救済措置のなのでやばいです… [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ(バージョン): bcc32 [3.3] 言語:C [4] 期限:2005/01/28 [5] その他の制限: なし
>>338 stringライブラリを使っていいといいなら、なぜ
>>319 ではダメだというんだ
strcpyを使用しているんだからポインタを使っているだろう
pr8もstrcat使えば一発なんだがな
後pr7ではisspaceの使用はOKなのか?
>>339 期限が今日中か
せめてもう半日はやく来いよ
線形リストの中身はどうなっているんだ?
ソートの方法に指定はないのか?
>>322 ポインタと配列って似てるけどちがうので注意
ポインタは自分自身の値を変えることが出来るが、
str[]のstrは固定だから*str++はできない。
strがポインタなら問題ない。
正しくは*str+i;i++;
と、つっこんでみる。
が、
>>321 でアホなことを言ってた自分…すっかり忘れ取ったorz
>>341 ついさっきまで悪戦苦闘したんですが無理だったのできたんですが、やっぱ遅かったですかね…。・゚・(ノД`)・゚・。
ソートに指定はないです。
とりあえずちゃんとソートされればどの方法でもいいって言ってました。
線形リストの中身は何も言ってなかったので自己判断でいいとおもいます。
リストのみでやるってーと、マージソートか。
バブルソート
isspace関数なんて便利なものがあるんですね。
今までstdioとstringしか使ったことないので使用はNGだと思います。
strcpyも便利だと思いましたねぇ。
>>319 はポインタ*p_sを使ってお願いします
>>347 検索してもんですがこんなとこにあったんですね。
ありがとうございます。
これのlist15-2ですよね?
なんかエラー「Error: 外部シンボル '_main'が未解決」とでるんですけどこれは一体なんなんでしょうか?
349 :
デフォルトの名無しさん :05/01/28 05:08:24
[1] 授業単元:C++入門(単元 動的メモリの応用) [2] 問題文(含コード&リンク): 次の要素の構造体を作り、動的メモリを用いてデータを3個確保しなさい。 要素A: int型 [ID](商品のID) 要素B:Char型 [name](商品の名称) 要素C: short型 [category](商品カテゴリ→ 食品なら[0]、その他なら[1]) *入力時は「名称」「カテゴリー」を入力するように設計すること。また、商品IDデータの格納は0番から自動的に入力します *データを入力後、全てのデータをコンソールへ出力し、最後にメモリを解放してください [3] 環境 [3.1] OS:Windows xp Home [3.2] コンパイラ(バージョン):VisualStudio.Net2003 [3.3] 言語:C++ [4] 期限:2005年01月30日 [5] 構造体のデータとなる商品は、指定が無いので自由です。 初心者むけのソースであれば助かります。 どうぞよろしくお願いします。
>>346 初心者なんで間違ってたらごめん
#include <stdio.h>
int main(){
char s[] = "abcde";
char s2[10];
char *p_s, *p_s2;
p_s = s;
p_s2 = s2;
while(*p_s){
*p_s2 = *p_s;
p_s++;
p_s2++;
}
*p_s2 = '\0';
printf("%s\n", s2);
return 0;
}
>>349 #include <iostream>
struct Ware
{
int ID;
char name[256];
short category;
};
main()
{
Ware *wares = new Ware[3];
using namespace std;
for(int i=0; i<3; ++i)
{
wares[i].ID = i;
cout << "商品名入力:";
cin >> wares[i].name;
cout << "商品カテゴリ入力(食品:0,その他:1)";
cin >> wares[i].category;
}
for(int i=0; i<3; ++i)
cout << "ID:" << wares[i].ID << " 商品名:" << wares[i].name << " カテゴリ:"
<< (!wares[i].category ? "食品" : "その他") << endl;
delete[] wares;
}
352 :
デフォルトの名無しさん :05/01/28 12:13:09
唐揚げ
353 :
デフォルトの名無しさん :05/01/28 12:27:16
[1] 授業単元:電波観測のデータ処理 [2] 問題文(含コード&リンク): 全部で、3000個程の小数を書き込んだ(1行ずつ改行した)、 テキストファイルから、最大値を求めたいです。 ネットで、「n個の最大値を入力して求める」プログラムを見つけましたが、 とても3000個は入力できません。 どうか、そのプログラムを教えて下さい。 テキストファイルについて、 本当は.datファイルで -100.68 #2003/10/05 21:51:24 -102.81 #2003/10/05 21:51:34 -101.54 #2003/10/05 21:51:44 ずっと3000行程続いていて、左の値の最大値を知りたいです。 お願いします。 [3] 環境 [3.1] OS: XP Home [3.2] コンパイラ(バージョン): LSI C-86 Ver3.30試食版 [3.3] C言語 [4] 期限:2005年1月29日 [5] その他の制限:ありません
>ネットで、「n個の最大値を入力して求める」プログラムを見つけましたが、 >とても3000個は入力できません。 リダイレクトって知ってる?
356 :
デフォルトの名無しさん :05/01/28 12:42:28
>>354 すみません。
先程、指摘を受けて、
書き込む前に、こちらに書き込むお断りをしたのですが。
掲示板に不慣れで、どう対処すればいいか分かりませんでした。
357 :
デフォルトの名無しさん :05/01/28 12:45:00
>>353 sort -g なんとか.dat | tail -1
第一項以外表示したくないなら
sort -g なんとか.dat | tail -1 | awk '{print $1}'
か
sort -gr なんとか.dat | awk 'NR == 1 {print $1}'
359 :
デフォルトの名無しさん :05/01/28 12:58:36
>357 「MS-DOS リダイレクション」で検索。 fopen fgets sscanfを調べろ。 最大値をdouble型の最小値か、リストの第1要素の値として、forループで読み込んだ値に従って最大値を補正していけ。
360 :
デフォルトの名無しさん :05/01/28 13:00:33
>358 XP初心者には無理
>>353 動くか知らんけど。ミスがあったら、だれかフォローしてね。
#include <stdio.h>
int main(void) {
char line[1000];
double val, max = -99999;
while (fgets(stdio, line, sizeof(line)) {
if (sscanf(line, "%lf", &val) == 1 && val > max)
max = val;
}
printf("max = %f\n", max);
return 0;
}
実行方法は、コマンドラインから
C:\>progname <datafile.dat
としてみてくれ。
prognameと、datafile.datは作った実行ファイル名と、用意されたデータファイル名にしてね
#include <stdio.h> #include <stdlib.h> int main(){ FILE *fp; char str[100]; double f, max; if ((fp = fopen("data.dat", "r")) == NULL) exit(1); if(fgets(str, 256, fp) != NULL) sscanf(str, "%lf", &max); while (fgets(str, 256, fp) != NULL) { sscanf(str, "%lf", &f); if(max < f) max = f; } fclose(fp); if ((fp = fopen("data.dat", "r")) == NULL) exit(1); while (fgets(str, 256, fp) != NULL) { sscanf(str, "%lf", &f); if(max == f) printf("%s", str); } fclose(fp); return 0; }
363 :
デフォルトの名無しさん :05/01/28 14:02:41
>>362 まず、お答え下さった、皆様本当にありがとうございました。
>>362 様のプログラムで、無事に求めるもとができました。
求めるdatファイルがたくさんあるので、プログラミングなしでは、
どーしようもありませんでした。
自分では作ることができませんでしたし。
どなたか分かりませんが、大変感謝しております。
ありがとうございました。
かわいい子だ
366 :
C言語超初心者 :05/01/28 17:29:24
ある特定のCRC32ハッシュと同じになる文字列を総当りで見つけるには どんなプログラムを組めばいいのですか? 具体的に書くとCRC32が「fecd71de」になる文字列を探しています。 文字数は5〜8文字で探しています。 C言語の達人様、ソースをご教授ください。お願いいたします。m(_ _)m
>>366 まず "A" のハッシュを調べ、期待する値と比べる
次に "B" のハッシュを調べ、期待する値と比べる
次に "C" のハッシュを調べ、期待する値と比べる
・・・中略
次に "AAAAAAAA" のハッシュを調べ、期待する値と比べる
・・・以下略
まあ"総当りで見つけるには"とかいてあるし それしかないよな…。
総当り以外の方法あるの?
あったら、暗号の意味が無い
>>372 アホだww
暗号を解読するのに総当たりしかないと思っているアホ発見www
ほう、すごいね、教えてよ
実用的な時間内にキーを発見できる方法あるなら教えてよ
>>374 お前見てて痛いぞ
つまんないレス付ける暇があるなら
きっちり指摘した根拠を示せよ。
例えば、RSA暗号の解読は素因数分解して…という解き方もあるよね。逆手順。
>>377 アホだww
イヤミと煽りで、相手の反応を楽しむという個人的な楽しみ方なんだよwww
で、素因数分解の方法って片っ端からやらないといけないんだがw
>>380 アホだww
まだ総当たりなんて原始的な方法しか知らないなんてwww
>>380 いまのところはね。
将来総当り以外の素因数分解方法が発見される可能性はある。
そもそも、まだNP完全とは証明されていないわけだ。
てかCRCなら計算方法知ってれば逆算が超楽勝な事もすぐ分かると思うんだが
ちっ
386 :
C言語超初心者 :05/01/28 20:04:01
みなさん、色々アドバイスをありがとう御座います。 しかし、私はなんとも情けない超初心者でして、どうゆうプログラムを 組めば街頭CRC32(fecd71de)になる文字列を見つける事ができるのか分かりません。 答えの一例として、「ah15HFy」及び「hNbNqN」がある。という事だけ知らされています。 他にも答えは沢山あるようです。 何卒、ソースをご教授ください。お願いいたします。m(_ _)m
316746541384631384351381321968131357468543246984135468743549681654846468463168135746873516854521685416574987496465130321654803036124657469877641113 これは素数?
奇数だから素数かも知れないね
>>386 てか他の答えが知りたいだけならC言語なんて知らなくても、
公式から逆算するだけでしょ?
390 :
C言語超初心者 :05/01/28 20:23:10
>389 レスありがとう御座います。 公式から逆算する方法を具体的にご教授いただけませんか? よろしくお願いいたします。
>>387 素数ではありません。45801,4650847などで割り切れます。
>>387 こんな感じ
316746541384631384351381321968131357468543246984135468
743549681654846468463168135746873516854521685416574987
496465130321654803036124657469877641113
=45801*4650847*3291084669907603651
*45182037627040529163511300901849543599685872922569880
353788290459929632519709223910805922998153973810295248
9868294629
>>393 3291084669907603651
とか
45182037627040529163511300901849543599685872922569880
353788290459929632519709223910805922998153973810295248
9868294629
は素数?
素数。
ちなみに45801=3^2*7*727とさらにできる。これで素因数分解終了。
ありがとう
398 :
デフォルトの名無しさん :05/01/28 23:08:45
お願いします<(_ _)> 「ファイル中の文字数,単語数,行数をカウントするプログラムを作成せよ。 単語の切れ目はアルファベット以外の文字、行の終わりは改行文字または ファイルの終端とします。」
K&R嫁 というか、そのまんま、もう少しひねれよ
system("wc nullpo.txt");
>>398 適当に作ってみますた
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
int main(){
int ch, line_num = 0, char_cnt = 0, word_cnt = 0, flag = 0;
char filename[30] = "test.txt";
FILE *fp;
fp = fopen(filename, "r");
if (!fp){
printf("ファイルオープンエラー\n");
} else {
while( (ch = fgetc(fp)) != EOF ){
if (ch == '\n') line_num++;
if (isalpha(ch)){
char_cnt++;
flag = 1;
} else {
if (flag == 1){
word_cnt++;
}
flag = 0;
}
}
fclose(fp);
}
printf("文字数=%d 単語数=%d 行数=%d\n", char_cnt, word_cnt, line_num);
return 0;
}
402 :
デフォルトの名無しさん :05/01/29 00:25:58
>>390 >ご教授いただけませんか?
ということは、提示しただけじゃダメなんだよね?
教えるのは面倒だからパス。
問、文字列配列に文字列をファイルから読み込み
それを辞書式順序でソートした結果をファイルに出力するプログラムを作れ
・ファイルの入出力にはfopen,fclose,fscanf,fprintf を用いること
・データはファイルから読み込みソート結果はファイルに出力すること
・プログラムは以下の3つの関数に分割して作成すること
◎データを文字列配列に読み込む関数
◎ソートする関数
◎ソート結果をファイルに出力する関数
書いてみました↓、ですが何故か実行しようとするとエラーが出ます
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/143.txt 勿論test.txtにも何も書かれてません 助けてください
>>404 ・fopen()のエラーを折角チェックしているのに処理を継続しては台無し。
・fscanf()の戻り値は、「何個変換できたか」チェックするべき。
・defineマクロは大文字で書くのが慣習。
・mojiはポインタの配列だから、そのままではfscanf()で文字列を変換する目的に使えない。
・慣れないうちは、少々面倒でも必ずブロック化({})しておいたほうがいい。
・sort_dateって、何故日付けが関係する?
・できればファイル書き込みのエラーチェックもしよう。
407 :
デフォルトの名無しさん :05/01/29 02:13:13
>>351 349の書き込みの者です。
ご回答下さってありがとうございます!
理想的なソースで、本当に助かりました
ありがとうございました。
>>406 あんた馬鹿ぁ?
指摘されたところを表面だけ辻褄合わせるように修正するのではなく、頭使いなさいよ。
409 :
デフォルトの名無しさん :05/01/29 02:39:36
Visual C++を使っています。 複素数を含んだ双曲関数(sinh,cosh,tanh)の計算をしたいのですが、どのようにしたらようでしょうか?何かアイディアがあればお願いします。 ヘッダファイルを用い、複素数の和、差、積、商、平方根、絶対値、指数関数については定義済みで、動作確認もされています。
>>409 sinh ix = i sin x
あとは加法定理使え。
412 :
410 :05/01/29 03:03:36
スレ違いということで、申し訳ありませんでした。 ちなみに sinh (A+ iB) = sin A + i sin B とは、なりませんよね? それと加法定理からとは e^(x) - e^(-x) sinhθ=-------------------- 2 ということでしょうか? しかし、スレ違いということですので、この質問は無視していだだいて結構です。
>>411 そんな事はわかっとるんじゃゴルァ!
俺を馬鹿にすんなよ。プログラム書けっちゅーとるんじゃあ!
なんかもう、ぐだぐだだぁ…(TT
C++には標準で<complex>と言うヘッダがあり、自分で定義する必要はありません。
sinh(z) = 1/2 (exp(z) - exp(-z)) cosh(z) = 1/2 (exp(z) + exp(-z)) tanh(z) = sinh(z) / cosh(z) = (exp(z) - exp(-z)) / (exp(z) + exp(-z)) 指数関数が定義済みならこれで自分でできるはずだろ。
>>415 だからそんな事はとっくの昔に知っとるんじゃあ!
C++でなくてCで書いたらどうなるか聞いとるんじゃあ!
じゃあテンプレ使えよ。
419 :
409 :05/01/29 03:21:28
complex A,B; A=complex(1,2); B=complex(3,-4); X=sinh(A)*tanh(B); を計算させたいのですが… グダグダになっててすみません。
>>418 うっせハゲ。答える気がない香具師はぬっこんでろヴォケ。
だめだここ。 馬鹿ばっか。。。。
2chのム板はレベルが高いと聞いて信じていた私がバカでした。。。
>>419 1/2 (exp(A) - exp(-A)) * (exp(B) - exp(-B)) / (exp(B) + exp(-B))
でいいだろ。
425 :
409 :05/01/29 03:26:22
420と423の409は俺じゃないですよ! ちなみにC++です
>>425 C++にはcomplexクラスがあるが、それを使わないで自前でするって事ですね?
それともcomplexクラスを使うの?
complexクラスを使うなら std::complex<double> A(1, 2), B(3, -4), X; X = std::sinh(A) * std::tanh(B);
まともな奴がコネ━━(゚Д゚)━( ゚Д)━( ゚)━( )━( )━(゚ )━(Д゚ )━(゚Д゚)━━ !!!!! わかってるよわかってるけど言いたい年頃なの
>>409 あんたがマルチするからぐだぐだになってるんでしょうが。
もう、質問の意図がはっきりしないので、テンプレ書いて貼ってくれ
>>409 それから、その自作の複素数を扱うクラスもできればどこかにうpしてくれ。
そうでないと、どう答えていいものやらわからない。
432 :
409 :05/01/29 03:38:28
方法に指定はありません。ただ、スマートなプログラムになるにこしたことはないですが…。 class complexのことですか? 勉強不足でして、これについてはわかりません。 ちなみに、424で実行してみます。 大変参考になりました。ありがとうございました。
433 :
953 :05/01/29 03:54:58
[1] 授業単元: C言語 [2] 問題文: A= 1 +i bとし、bを1から500まで1刻みで増加させ sinh(A),cosh(A),tanh(A)およびsinh(A)*cosh(A) を計算し、出力させるプログラムを作りなさい。 [3] 環境 [3.1] OS: Win XP [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 期限:2005年1月31日まで [5] その他の制限:
434 :
409 :05/01/29 03:55:52
遅くなりましたが… [1] 授業単元: C言語 [2] 問題文: A= 1 +i bとし、bを1から500まで1刻みで増加させ sinh(A),cosh(A),tanh(A)およびsinh(A)*cosh(A) を計算し、出力させるプログラムを作りなさい。 [3] 環境 [3.1] OS: Win XP [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 期限:2005年1月31日まで [5] その他の制限:
>>434 授業単元がC言語なのに、言語はC++なの?コンパイラがC++なんじゃ
なくて?
436 :
409 :05/01/29 04:20:29
C++をやってます。 正式な授業名はプログラミング演習です
>>434 これじゃいかんのか?
#include <cmath>
#include <iostream>
struct complex {
complex(double real, double imag) : r(real), i(imag){}
double r, i;
};
const complex operator*(const complex& w, const complex& z)
{return complex(w.r * z.r - w.i * z.i, w.r * z.i + w.i * z.r);}
complex sinh(const complex& x)
{return complex(std::sinh(x.r) * std::cos(x.i), std::cosh(x.r) * std::sin(x.i));}
complex cosh(const complex& x)
{return complex(std::cosh(x.r) * std::cos(x.i), std::sinh(x.r) * std::sin(x.i));}
complex tanh(const complex& x)
{return complex(std::sinh(2 * x.r) / std::cosh(2 * x.r) + std::cos(2 * x.i), std::sin(2 * x.i) / std::cosh(2 * x.r) + std::cos(2 * x.i));}
std::ostream& operator<<(std::ostream& o, const complex& c)
{return o << c.r << "+i(" << c.i << ')';}
int main() {
for (int b = 1; b <= 500; ++b) {
complex A(1, b);
std::cout << sinh(A) << ',' << cosh(A) << ',' << tanh(A) << ',' << sinh(A) * cosh(A) << std::endl;
}
}
440 :
409 :05/01/29 05:11:18
コンパイルしてみたところエラーが出ました。 如何せん勉強不足なため、構造体についての知識は多少はあるのですが クラス等については分かりません。 せっかく438さんが作っていただいたプログラムの内容の理解が現時点 では難しいので、少し待っていただけますか? 同じような事の繰り返しのようですし、ようは置き方(定義)分かればと いったところでしょうか?
441 :
デフォルトの名無しさん :05/01/29 05:38:33
ファイルa.txtから配列a[]にデータを読み込むプログラムを教えてください。 a.txtの中身は、↓ ---------------- 2002 Chicago Adrien Brody The Pianist Nicole Kidman The hours 2001 A Beautiful Mind Denzel Washington Training Day Halle Berry Monster's Ball 2000 Gladiator Russell Crowe Gladiator Julia Roberts Erin Brockovich ---------------- です。複数年のデータセットが空行で区切られて並べられているます。 さらに人物の名前 (first name または family name)をキーボードから入力し,リスト中に名前が 存在する場合には,、受賞年、フルネーム,、作品名を表示するプログラムを作ってください。さらに,、その作品が Best Picture Awardを受賞していれば,、その旨も表示するようにしてください。 また、ループを用いて "quit" を入力するまで何度でも実行できるようにしてください。お願いします。 C言語です。
442 :
441 :05/01/29 05:40:14
例えば、 Denzelと入力したら、 → Denzel Washington, 2001 Actor in a Leading Role in "Training Day" となるようにお願いします。
445 :
409 :05/01/29 06:06:57
すみません。今日はギブアップです。 皆さん、アドバイスありがとうございました。
テンプレに従うだけなのに、何故出来ないのかと子一時間・・
447 :
441 :05/01/29 11:03:39
[1] 授業単元: C言語
[2] 問題文:
>>440-441 [3] 環境
[3.1] OS: Win XP
[3.2] コンパイラ(バージョン): cygwin
[3.3] 言語:C
[4] 期限:2005年1月31日まで
[5] その他の制限:
すいません、テンプレ書き忘れてました。よろしくお願いします。
448 :
441 :05/01/29 11:04:53
450 :
441 :05/01/29 11:33:57
>>449 えっと、まず
char first_name[サイズ2]
char family_name[サイズ2]
char film[サイズ3] /* 作品名 */
これらの情報を格納する構造体leading_roleを宣言して、次に
int year
char best_picture[サイズ1] /* Best picture award */
struct leading_role actor /* Actor in a Leading Role */
struct leading_role actress /* Actress in a Leading Role */
これらの情報を格納する構造体 academy_awardsを宣言して、
>>441 の映画のデータをa.txt に保存してstruct academy_awards型の配列a[]に
データを読み込む感じが理想です。文字列のサイズは問題の起きない程度に設定してください。
後から付け足す感じになってしまって申し訳ございません。
なんだ。。リストでやっちゃったよ。。。orz
452 :
441 :05/01/29 11:48:16
453 :
デフォルトの名無しさん :05/01/29 13:35:40
あぁ、正常終了時のメモリ開放忘れてた。。。orz main最後に clearNodeaList(); を追加して。
455 :
441 :05/01/29 14:15:13
>>454 お疲れ様です。どうもありがとうございます。
ところで、コンパイルしたところエラーは無く正常に動作はしたのですが、
# File Read Errorのメッセージしか出ないです。すいませんが、どうしてでしょうか?
#defineDATA_FILE_NAME"c:\\a.txt"
#defineDATA_FILE_NAME"c:\\a.txt" mainの引数にするか入力させろよw
部屋が寒くて、main書くころには手がかじかんで引数チェックとか 書くのめんどくさかったんでdefineにしちゃった。
>>458 バカ!そこは「バグじゃないです、仕様です」だろ?
バグじゃないです、仕様です
462 :
441 :05/01/29 17:27:53
>>460 すいません、C勉強し始めた初心者の俺にはどこが悪いのかわけわかめです。
改良してもう1度うpしてください。お願いします。
>>462 もう一度勉強して出直して下さい。改良はもうたくさんです。
>462 一応つられてみる c:ドライブの直下に a.txt を置け
[1] 授業単元: プログラム実習入門 [2] 問題文(含コード&リンク): 貯金を500万円している。年利0.9%とすると10年でいくらになるか。 6ヶ月ごとの額を表示する。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ(バージョン):gcc Developer station 2000 [3.3] 言語:C [4] 期限:1月末日まで [5] その他の制限: 年利は12で割って0.075で計算してよいとのことです。 複利で1月から初めて一月目から利子をかけるという風にやろうとしています。 前スレ959で一度質問させていただいているのですが、 1年目 6月 12月 2年目 6月 12月 このように表示したいと思っています。 が、未だにどうやればよいものか考えています。 そこで再度質問させていただきます。 どうかご教授願います。
466 :
デフォルトの名無しさん :05/01/29 20:07:28
[1] 授業単元:C++入門
[2] 問題文(含コード&リンク):
問題1:冷蔵庫(購入価格はソースに明記)を1月1日から使用し、10年後までの購入価格と電気代の総計日別推移を求めるソースを作りなさい。
問題2:また、先ほどの電気代とは別に、一回扉を開けるごとに発生する使用料(1円)がある。
一日に10回開閉すると考え、購入価格と電気代の総計において、最も安くなるのは何日後かを求めるソースを作りなさい。
問題2の作成をお願いします。
*問題1のソースはできあがっていますので、良かったら使ってやって下さい。(アップローダを使用しています)
コチラとなります→
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=146 最も安くなる=「購入金額から元を取れた」ということだと思います。
ややこしい問題文ですが、何卒よろしくお願いします。
[3] 環境
[3.1] OS:Windows xp Home
[3.2] コンパイラ(バージョン):VisualStudio.Net2003
[3.3] 言語:C++
[4] 期限:2005年01月31日
[5]
かじった程度なので、問題1のソースは汚いです。
直した方がいい箇所がございましたら、教えて頂けると助かります。
回答頂けます場合は、初心者むけのソースであれば助かります。
どうぞよろしくお願いします。
>>466 問題の意味がまったくわからん。
ソース読んでも分からん。謎。
>>466 冷蔵庫A(高価だけど省電力)と冷蔵庫C(安価だけど電気喰う)を比べて
何日以上使えば、Aの方がお得とかそういうことなのか?
あと関連のあるデータは構造体にまとめる。
struct refrigerator{
int price;
int electricityBill;
};
とか。
>>466 なぜ安いって表現なのかわからんが
一日ごとに10+常にかかる電気代
A:13*日数 + 148000
B:20*日数 + 99800
C34*日数 + 44200
これ書いてるうちに
Aの冷蔵庫がCの冷蔵庫よりお徳になったときって問題じゃね?
って思えてきたんだけど
471 :
デフォルトの名無しさん :05/01/29 22:00:03
>>467 様
>>468 様
>>469 様
わかりづらくて本当にすいません。
本文から随分と噛み砕いて載せてはみたのですが・・
自分の文章力のせいでご迷惑をおかけしてしまい、本当にすいません。
>>468 様、
>>469 様のおっしゃるとおり、
「AとBとCのうち、使っていって
何日目にA(高価だけど省電力)がBやCと比べて一番お得になるか」
を求めるプログラムです。(講師に電話で確認を取りました。)
あと、構造体を使うとのご指摘ありがとうございました。
今から使って作ってみます。
>465 #include <stdio.h> int main(void) { double deposit = 5000000; unsigned year, month; for (year = 1; year <= 10; ++year) { for (month = 1; month <= 12; ++month) { deposit = deposit * 1.00075; if (!(month % 6)) { printf(month == 6 ? "%2u年目" : " ", year); printf(" %2u月 %.0f\n", month, deposit); } } } return 0; }
>>471 int main(){
DWORD price_A = 148000,price_B = 99800,price_C = 44200;
DWORD day_A = 13,day_B = 20,day_C = 34;
//まずはAとBの比較
DWORD price_diff = price_A - price_B;
DWORD day_diff = day_B - day_A;
DWORD day = price_diff / day_diff + 1;
printf("%d日でA = %d円 B = %d円\n",day,price_A+day_A*day,price_B+day_B*day);
//次にAとCの比較
price_diff = price_A - price_C;
day_diff = day_C - day_A;
day = price_diff / day_diff + 1;
printf("%d日でA = %d円 C = %d円\n",day,price_A+day_A*day,price_C+day_C*day);
}
ゴメン iostreamはよく理解してないんでCで作っちゃった適当に直しといて
>>465 それっておかしくね?
((元金*1.00075)*1.00075)…=元金*1.0009にはならないっしょ
1.0090372179693092036204172481965 = 9%程度になるわけだが
あ〜なんか頭テンパってたらしいorz
金融電卓使え
正確には0.000746924だからざっと0.075%でいいわな。
で、何故
>>473 がDWORD使ってるかについては誰もつっこまないのか?
釣りだから
>>479 元のソースで使ってるのかと考えて
元のを見るのがよだきくなって突っ込むのを止めた。
よだきくなって ↑ 何語?
すまん、方言
「よだきい」キター! ちなみに標準語だと「だるい」とか「つかれた」とかいう意味ね。
486 :
デフォルトの名無しさん :05/01/30 03:15:02
[1] 授業単元: プログラミングC [2] 問題文(含コード&リンク):整数係数の多項式 f(x) が与えられたとき、そのk次の係数を配列要素f[k]に格納することにより f(x)を表現するものとし、例えば、f(x)=7 x^5 - 6x^4 + x^3 + 2x + 1の表現はf[]={1, 2, 0, 1, -6, 7}となります。 係数を格納した配列f[]が与えられたときに、これが表す多項式を表示する関数 voidpolynomial_print(int f[])を作成お願いします。 マクロ変数Mを定義し、M-1次の多項式まで扱えるようにしてください。Mの値は6でお願いします。 係数はキーボードから与え、係数は最下位から順に入力するものとします。例えば、 2 3 4 5 6 7 → 7 x^5 + 6 x^4 + 5 x^3 + 4 x^2 + 3 x + 2 -2 -3 -4 -5 -6 -7 → -7 x^5 - 6 x^4 - 5 x^3 - 4 x^2 - 3 x - 2 -1 0 0 0 0 0 → -1 0 0 0 0 0 0 → 0 こんな風になるようにお願いします。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ(バージョン): bcc 32 [3.3] 言語:C [4] 期限:2005年1月31日 [5] その他の制限:
487 :
デフォルトの名無しさん :05/01/30 07:11:02
どなたかC言語でプログラム考えていただけないでしょうか。 以下の二つを守っていただければ幸いです。よろしくお願いします。 1.縦横100*100のウィンドウ内に描くこと。 2.適当な大きさの円(例えば半径30くらい)に内接する三角形 を描画する。
VC+6.0が欲しいのですが最近何処にも売っていません・・・ MATXというVC+6.0と連動して(.net非対応)動くソフトを使うために必要なのです。 秋葉歩いても何処にも見つからず、途方に暮れています。 売っている場所知っている方いらっしゃいませんか? あと.NETのspoke premium と.NET アカデミックのに入ってるライブラリは 同じものでしょうか?(削られていないだろうか・・)
493 :
486 :05/01/30 08:47:26
494 :
487 :05/01/30 11:10:59
どなたかC言語でプログラム考えていただけないでしょうか。 以下の二つを守っていただければ幸いです。よろしくお願いします。 1.縦横100*100のウィンドウ内に描くこと。 2.適当な大きさの円(例えば半径30くらい)に内接する三角形 を描画する。 申し訳ありません、環境…。 OS:WindowsXP、Microsoft Visual C++ 6.0、C言語でお願いします。
>487 ウインドウ自体なら、ウイザードを使って出すことができるよ。 後は、WM_PAINTの辺りを書き換えるだけだ。
>>494 Cで、ということはWin32APIを使用して、ということでいいのかな?
私はMFC使いだからパスだけど。
1.100*100とは単位は画素? それともその他の寸法単位?
2.は内接する三角形は形を問わないのかな? 問わないなら直角二等辺三角形が楽だろう。
>>495 文盲ですか? それとも自分に都合の悪い情報は切り捨ててしまえる能天気な方ですか?
>>496 (50, 50)を中心とする半径30の円なら、例えば(50, 20)-(20, 50)-(80, 50)だね。
499 :
487 :05/01/30 11:46:55
>>496 はい、お願いします。
>1.100*100とは単位は画素? それともその他の寸法単位?
ピクセル…って言うんですかね。intで定義してokみたいです。
あまり参考にならないかもしれませんが・・・。
2.は内接する三角形は形を問わないのかな? 問わないなら直角二等辺三角形が楽だろう。
はい、楽なやつで構いません。どうぞよろしくお願いします。
>>499 もう一度>1を読み直して、与えられた課題を寸分違わず書き下してみてくれ。
501 :
デフォルトの名無しさん :05/01/30 12:00:33
正三角形かと思い込んでたw
502 :
487 :05/01/30 15:32:13
[1] 授業単元: プログラミング言語 [2] 問題文(含コード&リンク): 以下の二つの条件を満たし、プログラムを 完成させよ。1.縦横100×100のウィンドウ内に描くこと。 2.適当な大きさの円(例えば半径30くらい)に内接する三角形 を描画する。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ(バージョン): Microsoft Visual C++ 6.0 [3.3] 言語:C [4] 期限:2005年01月31日まで よろしくお願いします。
>>502 あんた馬鹿?
それとも釣り?
授業でWindowの描画について、なにか教わってないの?
504 :
487 :05/01/30 16:15:57
>>505 ウィンドウサイズは100x100だよ。
スマソ,146行目が間違ってた × py[i] = (int)(cr * cos(k) + cy); ○ py[i] = (int)(cr * sin(k) + cy);
すげぇ、Cだって書かれているのに拡張子を.cppにしちゃってるよ、この人。 それにしても醜いソースだな。隙間空ければ見やすいと思ってるんだろか。
>>506 ミスです。(´・ω・`)
まああとは487に任せます…。
もしくは507さんが解答されているようなのでそちらで。
つーか、この程度でグローバル変数を使う神経が信じられない。 おまけに、LineTo()到達点にMoveTo()してるし。
>>511 逆。
規模が小さければ大域変数でも、さほど見通しが悪くはならない。
514 :
487 :05/01/30 17:35:51
考えていただいた皆様、ありがとうございました。
>>509 自分、VCを使う事があるが、ファイルの新規作成で
「C++ソースファイル」はあっても、「Cソースファイル」は無いから、
拡張子を入力しないとC++になるけど、気にせずコーディングしていた。
それと似たような感じではないのかな。
>>511 C+Win32API+SDKの勉強サイトの、猫とか創作とかでも普通に使われている。
グローバル変数を使わないとしても、結局ローカル変数でもstaticに
しないといけないという、この製作法の組みにくさ自体にも問題があると思う。
MFCを使わせるための、MSの陰謀なのかもしれない。
Cで昇順ソートプログラムを作れ ソートするデータは{9,4,10,8,20,4,-3,8} 宣言した変数・配列が一番少なく&&一番容量の少なかった奴にマビノギ垢やる 8時までだ、スタート
容量の基準はなんだよ
520 :
デフォルトの名無しさん :05/01/30 18:09:51
↓さっさと答えろヴォケカスウンコ野郎
char i[] = {-3,4,4,8,8,9,10,20};
│ _、_ │ ヽ( ,_ノ`)ノ 残念 私のおいなりさんだ │ へノ / └→ ω ノ >
>>519 んじゃ文字数でいいよ
forだったら3文字みたいに
fpでファイル入力を行って while(c=fgetc(fp)!=EOF) ???; ファイルの中身を表示するには ???には何を記述したらよいのでしょうか?
printf("%c", c);
putchar(c); ただし、c=fgetc(fp)を括弧でくくってからな
putc(c)
ありがとうございます 無事できました。
>>516 はは、俺と似てるや。
俺もスペース少なすぎる人だ。(インデントはしっかり取るけど)
>>517 だからといって、座標値までグローバルにする必要はないとは思わないかね。
#include<stdio.h> bekijyou(int a,int b); main() { int m,n; long kotae; printf("数値1?"); scanf("%d",&m); printf("数値2?"); scanf("%d",&n); kotae=bekijyou(m,n); printf("%dの%d乗 %ld\n",m,n,kotae); } bekijyou(int a,int b) { long data; data=(long)a^b; return data; } 数値1と2のべき乗を出す関数を作りたいのですがうまくできませんでした。 直すべき所を教えてくださいm(_ _)m
関数は一つの値しか返せないのれす
[1] 授業単元:コンピューター工学I [2] 問題文(含コード&リンク): 次のソースコードをANSI規格のcのコードに直せ。 また、なぜそのようにしたか理由を書け。 unsigned char *a; a = new unsigned char[100]; [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ(バージョン):gcc/g++ [3.3] 言語:c/c++ [4] 期限:明日の朝9時30分 [5] その他の制限:なし a = (unsigned char*)malloc(sizeof(100)); だと思って試しに int i; for(i = 0;i<100;i++){ unsigned char *p = a; *p = i p++; } と要素を代入しようと思ったら途中でcoredumpしました。 多分根本的にnewとmallocの違いを理解していないだけかもしれませんが、 どうかよろしくお願いします。
勘違いした 532は無かったことに(恥
>>531 data=a;
for(i=1;i<b;i++){
data*=a;
}
a = (unsigned char *)malloc(sizeof(char [100])); でもだめか? それから unsigned char *p = a; はループの外に出せ。
>>536 訂正
data=1;
for(i=0;i<b;i++){
data*=a;
}
>>535 >>538 ありがとうございます。うまくいきました。ポインタもループ外に出しました。
sizeofを理解してませんでした。
^は使えないんですね
>>539 さんの方法でできました
ありがとうございます。
>>518 #include<stdio.h>
int d[] = {9,4,10,8,20,4,-3,8};int f(int*b,int i){int*p=b+1;if(i<2)return 0;
if(*b>*p){*p^=*b;*b^=*p;*p^=*b;return 1;}return f(p,i-1);}int main()
{while(f(d,8));for(int i=0; i<8; i++)printf("%d\n", d[i]);return 0;}
// 229文字
>>542 コンパイルエラー残念(MicrosoftVisualC++)
#include<stdio.h> #include<stdlib.h> int a(int *b,int *c){return *c-*b;}int main(){int b[]={9,4,10,8,20,4,-3,8},i;qsort(b,8,4,a);for(i=0;i<8;i++)printf("%d ",b[i]);return 0;} // 172文字
>>544 警告5個
提出できないから却下
もう自分で作るからいいや・・・
>>542 ,543
おつかれthx
また課題がかなり出てしまいました;; upするので解いてくださる方いませんか?
とりあえず問題を上げたら誰かが答えるかもしれない 上げなければ絶対に誰も答えてくれない
初めて来てみたけど、ここのスレって「出来るところまでやれ、上手くいかない所は直してやる」っていう流れじゃ無いんだね ○投げが基本か。
隔離が目的だからな
>>548 とりあえず1だけ
void copyfile(FILE* in,FILE* out){
long filesize;
fseek(in,0,SEEK_END);
filesize = ftell(in);
void* buf = malloc(filesize);
fseek(in,0,SEEK_SET);
fread(buf,filesize,1,in);
fwrite(buf,filesize,1,out);
free(buf);
}
void main(){
char inn[260],outn[260];
FILE *in,*out;
gets(inn);
gets(outn);
in = fopen(inn,"rb");
out = fopen(outn."wb");
// if(in == NULL || out == NULL){
// //エラー処理するならここで
// }
copyfile(in,out);
}
書いたあとに気が付いたけど授業とか用のソースじゃないね
あ、mainのcopyfile(in,out)のあとにfclose(in);fclose(out);追加しといて
あ、画面表示するのか… fwrite(buf,filesize,1,stdout); と逃げてみる
>>551 すみません、分からない関数だらけで理解しようとしても
できませんでした;;
includeとstdlibだけでできませんでしょうか?
#include <stdio.h> #include <stdlib.h> int main(){ FILE *fpsrc, *fpdest; char str[256],src[256],dest[256]; printf("コピー元:"); scanf("%s", src); printf("コピー先:"); scanf(" %s", dest); if ((fpsrc = fopen(src, "r")) == NULL) { puts("error"); exit(1);} if ((fpdest = fopen(dest, "w")) == NULL) { puts("error"); exit(1);} while (fgets(str, 256, fpsrc) != NULL) { fputs(str, fpdest); } fclose(fpsrc); fclose(fpdest); if ((fpsrc = fopen(src, "r")) == NULL) { puts("error"); exit(1);} while (fgets(str, 256, fpsrc) != NULL) { printf("%s",str); } fclose(fpsrc); return 0; }
#include <stdio.h> #include <stdlib.h> int main(){ FILE *fpsrc; char str[256],src[256]; int n; printf("ファイル名:"); scanf("%s", src); if ((fpsrc = fopen(src, "r")) == NULL) { puts("error"); exit(1);} n = 0; while (fgets(str, 256, fpsrc) != NULL) { n++; printf("%d: %s", n, str); } fclose(fpsrc); printf("行数: %d",n); return 0; }
まぁ、確かにコレは出題者の想定した解答の斜め45度を超高高度で飛行してるね
最適解だとは思うが…
マシな解答は
>>555 のお方に任せるとして
最後に
out = fopen(outn."wb");
->out = fopen(outn,"wb");
だったorz
適当に組むとバグいぱーいだな俺orz
>>555 さん
2問ともどうもありがとうございました。
>>557 はincludeとstringだけ使用可でした。
申し訳ありません。
>>557 の1,2番くらいわかんない?
それをやってきたら3、4くらいはやってやるけど
1,2ができたら3,4もできるか 1,2か1,3のどっちかの出来たらでもいいや
1をやってみます
pr4はswitchでお願いいたします。
>>566 とりあえずつっこむがincludeだけ使用可ってなによ…
まぁ、前のを見た感じ
基本入出力(stdio)以外のヘッダは使うなってことだろうけど
568 :
デフォルトの名無しさん :05/01/30 21:34:48
【質問テンプレ】 [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 1、二部探索木を作成して間順走査(降順)で表示させる。(降順に並べ表示させるだけでいい。) 2、データの追加と削除が出来ること。 [3] 環境 [3.1] OS:Win XP [3.2] 開発環境:Visual C++ .NET [3.3] 言語:C [4] 期限:1月中 [5] その他の制限:特になし。 よろしくお願いします。
>>569 ・質問は必ず【質問テンプレ】に従ってください
【アップローダー】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
>>557 #include<stdio.h>
struct syouhin_data{
char name[20];
int tanka;
int kosuu;
long kingaku;
};
main()
{
long data;
struct syouhin_data syouhin1={"シャープペンシル",500,3,0};
data=(syouhin1.tanka)*(syouhin1.kosuu);
syouhin1.kingaku=data;
printf("商品名:%s\n",syouhin1.name);
printf("単価:%d\n",syouhin1.tanka);
printf("個数:%d\n",syouhin1.kosuu);
printf("金額:%f\n",syouhin1.kingaku);
}
1をやってみましたが、途中で処理がとまってしまいました。
kingakuを出すところで止まってると思うんですが、
ご教授お願いします。
あと、個数:0なっていますが、3の間違いです。
syouhin1.kingaku は整数型だから %f ではないと思われ
>>571 #include <stdio.h>
int main(){
struct syouhin_data{
char name[20];
int tanka;
int kosuu;
long kingaku;
};
struct syouhin_data shohin1 = {"シャープペンシル", 500, 3, 0};
shohin1.kingaku = shohin1.tanka * shohin1.kosuu;
printf("商品名:%s\n", shohin1.name);
printf("単価:%d\n", shohin1.tanka);
printf("個数:%d\n", shohin1.kosuu);
printf("金額:%d\n", shohin1.kingaku);
return 0;
}
>>572 %dにしたら通りました。
ありがとうございます。
>>571 pr2
#include <stdio.h>
int main(){
(省略)
struct syouhin_data shohin1 = {"シャープペンシル", 500, 3, 0} ,*shouhin1_p;
shouhin1_p=&syouhin1;
shohin1_p->kingaku = shohin_p->tanka * shohin1_p->kosuu;
printf("商品名:%s\n", shohin1_p->name);
printf("単価:%d\n", shohin1_p->tanka);
printf("個数:%d\n", shohin1_p->kosuu);
printf("金額:%d\n", shohin1_p->kingaku);
return 0;
}
俺は何を書いているんだ syouhinとかshouhinを全部shohinに直しておいてくれorz
>>568 >期限:一月中
って明日までかよ
書き方から察するに結構前に出された課題みたいだけど、途中まででもやってある?
制限は特になしとあるが、書きかけのソースをみると制限らしきものが見えたりすることもあるからな
579 :
568 :05/01/30 22:18:22
>>577 ある程度作りましたが間順操作で表示させる関数が出来ません。
削除・追加は手付かずです。
ソースはアップローダにうpしておきます。
期限あと3日です。まじやばいです。 お、お願いします
>>580 3日なら十分時間があるじゃないか。
なに?努力する気もないわけ?
そんなやつに手を貸してやるなんてばかばかしいな。
いや、それが、他学科の授業でして Cほとんど知らなく、必死で入門書読んでるのですが さっぱりで・・・ポインタやらなんやらでてきて わけわからんとです
うはwそれはきちーな
585 :
568 :05/01/30 22:51:27
うpローダにソースをうpしましたがここにも一応ソースを書いておきます。 #include <stdio.h> #include <stdlib.h> typedef struct nodedata { int data; struct nodeta *left; struct nodeta *right; }node; node * newdata(int data) { node * now; now=(node *)malloc(sizeof(node)); now->data=data; now->left=NULL; now->right=NULL; return now; }
586 :
568 :05/01/30 22:52:05
続き void treeAdd(node * now,int data) { if(now->data >data) { if(now->left!=NULL) {treeAdd(now->right,data);} else {now->right=newdata(data);} } else { if(now->right!=NULL) {treeAdd(now->right,data);} else {now->right=newdata(data);} } return; }
>>579 ・関数名のなかに-使うのってどうよ
・Product ってなに?
・nodeta? nodedataっしょ
・three?treeではないか?
んでコンパイルとおったよ
588 :
デフォルトの名無しさん :05/01/30 22:52:51
続き(これで最後です。) /*木構造を表示させる関数(間順走査) ここが上手くいかない*/ void three-kanjyun(Product *now) { if(now==NULL) return; three-kanjyun(now->left); printf("%d\n",treeAdd); three-kanjyun(now->right); } void main(void) { node * head; int i,data[7]={100,50,80,30,200,150,250}; head=newdata(-1); for(i=0;i<7;i++) treeAdd(head,data[i]); }
fseekは改行コードのためにテキストモード以外では予期せぬ動作を することがあるのだけれども、その点はどうしたらよいのかな?
なんのためにupロダ使わせてもらっているか考えろ馬鹿
>>589 むしろ予期せぬ動作してくれるのはテキストモードじゃね?
>>593 構造体配列を用いていないので、3番の条件を満たしていない
ああ本当ですね・・・
#include<stdio.h> struct syouhin_data{ char name[20]; int tanka; int kosuu; long kingaku; }; main(){ int goukei,i; struct syouhin_data syouhin[5]={ {"シャープペンシル",500,3,0}, {"エンピツ",30,10,0}, {"消しゴム",50,20,0}, {"サインペン",150,7,0}, {"定規",150,6,0}, }; goukei=0; for(i=0;i<5;i++){ syouhin[i].kingaku=syouhin[i].tanka*syouhin[i].kosuu; goukei+=syouhin[i].kingaku; } for(i=0;i<5;i++){ printf("商品名:%s\n",syouhin[i].name); printf("単価:%d\n",syouhin[i].tanka); printf("個数:%d\n",syouhin[i].kosuu); printf("金額:%d\n",syouhin[i].kingaku); } printf("\n合計金額=%d\n",goukei); } pr3,これでいいでしょうか?
一応手直ししてみましたがエラーが4つ程でます。 ソースはうpローダにうpしておきました。
>>598 void tree_kanjyun(nodedata *now)
この行ではエラーが出て
void treeAdd(node * now,int data)
この行ではエラーが出てません
さて問題はなんでしょう
>>557 #include<stdio.h>
struct syouhin_data{
char name[20];
int tanka;
int kosuu;
long kingaku;
};
main(){
int goukei,i;
struct syouhin_data syouhin[5]={
{"シャープペンシル",500,3,0},
{"エンピツ",30,10,0},
{"消しゴム",50,20,0},
{"サインペン",150,7,0},
{"定規",150,6,0},
};
struct syouhin_data *sp;
sp=syouhin;
goukei=0;
for(i=0;i<5;i++){
++sp;
sp->kingaku=sp->tanka*sp->kosuu;
goukei+=sp->kingaku;
}
for(i=0;i<5;i++){ ++sp; printf("商品名:%s\n",sp->name); printf("単価:%d\n",sp->tanka); printf("個数:%d\n",sp->kosuu); printf("金額:%d\n",sp->kingaku); } printf("\n合計金額=%d\n",goukei); } pr4やってみたのですが、 表示がえらいことになってしまいます;;
>>597 longを使ってるから金額の指定子は%dより%ldのほうがいいのかも
たぶん
努力は認める ++sp;の位置を考えろ
++spをfor文の最後に回してみたのですが うまくいきません・・。
>>601 for(i=0;i<5;i++){
sp->kingaku=sp->tanka*sp->kosuu;
goukei+=sp->kingaku;
++sp;
}
for(i=0;i<5;i++){
--sp;
printf("商品名:%s\n",sp->name);
printf("単価:%d\n",sp->tanka);
printf("個数:%d\n",sp->kosuu);
printf("金額:%d\n",sp->kingaku);
}
順番変わるけど
>>599 void tree_kanjyun(nodedata *now)をvoid tree_kanjyun(nodedata *now,int data)にしてみましたがエラーがなくなりません。
void treeAdd(node * now,int data); printf("%d\n",treeAdd); 何がやりたいんだ?
できました。
ありがとうございます。
それと、
>>564 をやってくださってる方
いらっしゃいますでしょうか?
>>606 もうちょっとnode *nowとnodedata *nowの違いについて考えて欲しい
構造体についてぐぐって初心に帰ってみるのも手かも
for(i=0;i<5;i++){ sp->kingaku=sp->tanka*sp->kosuu; goukei+=sp->kingaku; ++sp; }; sp=syouhin; for(i=0;i<5;i++){ printf("商品名:%s\n",sp->name); printf("単価:%d\n",sp->tanka); printf("個数:%d\n",sp->kosuu); printf("金額:%d\n",sp->kingaku); };
何か抜けてる気が
printf("金額:%d\n",sp->kingaku); sp++; };
613 :
デフォルトの名無しさん :05/01/31 00:19:47
次のプロファイルを最近隣内挿法、共1次元内挿法によって 4倍に拡大しなさい。 1 5 8 13 8
>>608 prコード表を作れっていうのは、どの環境においてもJISコードで文字が
表示されるようにせよって事か?
>>614 特に制限はされていませんので
環境は考えなくてよいと思います。
>>564 pr1
#include <stdio.h>
int main(void) {
int temp = 0, sum = 0, count = -1;
while (temp != -999) {
++count;
sum += temp;
printf("data?:");
scanf("%d", &temp);
}
printf("goukei=%d\nheikin=%f", sum, (double)sum / count);
}
>>616 いやそういうことじゃない。例えばもし君の環境がWindowsだったとすると、
普通に作ればJISではなくShift-JISコードで表示されるから、JISで表示する
ためには変換が必要になる。その変換の内容が実行環境によって変わって
くるんでね。
また間違った。pr2ね。
>>617 間違った、無限ループ使ってなかった。やり直し。
pr2
#include <stdio.h>
int main(void) {
int temp = 0, sum = 0, count = 0;
while (1) {
printf("data?:");
scanf("%d", &temp);
if (temp == -999) break;
++count;
sum += temp;
}
printf("goukei=%d\nheikin=%f", sum, (double)sum / count);
}
pr3
#include <stdio.h>
int main(void) {
int a, b = 1;
while (1) {
printf("data1?:"); scanf("%d", &a);
printf("data2?:"); scanf("%d", &b);
if (a == -999 || b == -999)
break;
if (b != 0) {
printf("%d/%d=%dあまり%d\n", a, b, a / b, a % b);
}
}
return 0;
}
*/
#include<stdio.h> main(){ int n,i=0; for(n=32;n<=126;n++){ printf("%c=%2x ", n, n); i++; if(i%10==0) printf("\n"); } }
スマン、半角部分だけだから関係なかったんだった。 #include <stdio.h> int main(void) { char c; for (c = 32; c <= 126; c++) { printf("0x%X %c ", c & 0xff, c); if ((c - 32) % 10 == 9) printf("\n"); } return 0; }
617さん621さん ありがとうございます。 JISコード表見たときちょっと感動しました
pr6 ただし、問題文をかなりエスパーしてる。 #include <stdio.h> int main(void) { double a, b, *p_a = &a, *p_b = &b; printf("a?:"); scanf("%lf", p_a); printf("b?:"); scanf("%lf", p_b); printf("max = %f", a < b ? b : a); return 0; }
pr7 ただしあまり番兵が意味を成していない。 #include <stdio.h> int main(void) { int i, j, n = 0, temp, a[]={10, 25, 7, 45, 2, 100, 3, 70, 50, -1}; while (a[n] != -1) n++; for (i = 0; i < n - 1; i++) for (j = 0; j < n - 1 - i; j++) if (a[j + 1] < a[j]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } for (i = 0; i < n; i++) printf("%d ", a[i]); return 0; }
>>624 pr8
#include <stdio.h>
void func(const char *str1, const char *str2, char *buf){
int i;
while(*str1){
*buf = *str1;
str1++;
buf++;
}
while(*str2){
*buf = *str2;
str2++;
buf++;
}
*buf = '\0';
}
int main(){
char s1[100], s2[100], buf[200];
gets(s1);
gets(s2);
func(s1, s2, buf);
printf("%s\n", buf);
return 0;
}
pr8 即興で作ったので動くかどうか不明 #include<stdio.h> #define kBufferSize (256) int main(void){ char line1[kBufferSize]; char line2[kBufferSize]; printf("文字列1を入力\n"); fgets(line1,kBufferSize,stdin); printf("文字列2を入力\n"); fgets(line2,kBufferSize,stdin); printf( "%s\n",StringCat(line1,line2) ); retunr 0; } void StringCat(char *s1, const char *s2){ while ( ( *s1++ ) != '\0' ){ ; } s1--; while ( ( ( *s1++) = (*s2++) ) != '\0' ){ ; } }
あー動くわけねーわ。voidなのに表示されるわけがないorz
>>627-628 すみませんが、pr7は関数を使って
pr8は関数を使わないでと書き忘れました;;
申し訳ありません。
死ね
pr8 #include <stdio.h> int main(void) { char input1[256], input2[256], buf[256]; int i = 0, j = 0; printf("文字列1?"); scanf("%s", input1); printf("文字列2?"); scanf("%s", input2); while (input1[i] != '\0') { buf[i] = input1[i]; i++; } while (input2[j] != '\0') { buf[i] = input2[j]; i++; j++; } buf[i] = '\0'; printf("%s", buf); }
pr7 #include <stdio.h> void sort(int* a) { int i, j, n = 0, temp; while (a[n] != -1) n++; for (i = 0; i < n - 1; i++) for (j = 0; j < n - 1 - i; j++) if (a[j + 1] < a[j]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } int main(void) { int i, a[]={10, 25, 7, 45, 2, 100, 3, 70, 50, -1}; sort(a); for (i = 0; a[i] != -1; i++) printf("%d ", a[i]); return 0; }
637 :
デフォルトの名無しさん :05/01/31 02:08:34
以下のような,あるサーバのログがある. リクエストが来た時間(開設時をゼロとする)と,処理にかかった時間が書かれている. リクエスト到着時間_処理時間 1.42423_2.53556 5.24524_6.35352 13.43663_9.59301 16.93821_5.23428 ・ ・ このサーバは1台で運営しているが,ログからわかるように,次のリクエストがくる前に 前のリクエストを処理し終わらないと,『待ち』の状態が起きる。 これを3台のサーバで運営するした場合,このログデータを使って, 3台ともに待ち状態を最小限にするためには,どのような振り分けプログラムを作ればいいか? ログデータの見方は,3行目を例にとると, サーバ開設13.43663秒後,処理に9.59301秒かかるリクエストが来た。 ということである。 つまり,処理に9秒以上かかるのにその3秒後に4行目のリクエストが着てしまうので, この場合『待ち』状態になってしまう。
>>636 お前の敬語は一体どうなっているのだと小一時間(ry
>>638 ご、ごめんなさい。
20時頃からずっと張り付いてますね、私。
>>639 pr4と5の「複数回入力可能」が上限固定値でいいのか(例えば1024回まで)
メモリが許すだけなのかによって内容が大幅に変わって来るんだが、
どっちだ?
>>609 構造体について入門書を読みましたがポインタ関連はイマイチです。
ここまでも本やググったりして何とか仕上げた感じですから・・・orz
自己解決しました。
自己破産しました。
関西人は図々しいな
647 :
デフォルトの名無しさん :05/01/31 02:38:14
アセンブラーを作らなければいけないのですが、質問させて下さい。 ソースコードは例えば、 BOB ORI A NMD B NMD BEGIN IO 0, A とこんな感じで続くのですが このソースファイルをまず、vectorに保存して それから 一行づつ、扱っていこうと思うのですが 一行づつに分けた後、 タブで分けられた 単語を、それぞれ分けて扱わなければならないと思うのですが、 それはどのようにして、すればよいのでしょうか? 例えば、String a = BOB ORI となると、このa から BOB と ORI を抜き出す方法が分かりません。 何か便利な方法があれば 教えてください。 やはり自分でメゾッド作るしかないでしょうか。 なるべくコードをシンプルにしたいので。。。
>>647 stringstream
sscanf
strtok
あと死ね。
メソッドをメゾットと書く人は初めて見た
>>636 #include <stdio.h>
int main(){
int num, index[1024], i = 0, j;
do{
printf("Input :");
scanf("%d", &num);
if ( (num >= 0) && (num <= 6) ){
index[i] = num;
i++;
}
}while(num != -999);
for (j = 0; j < i; j++){
switch(index[j]){
case 0: puts("日曜"); break;
case 1: puts("月曜"); break;
case 2: puts("火曜"); break;
case 3: puts("水曜"); break;
case 4: puts("木曜"); break;
case 5: puts("金曜"); break;
case 6: puts("土曜"); break;
}
}
return 0;
}
653 :
デフォルトの名無しさん :05/01/31 03:17:48
c++言語で3DCGの作品を作る課題なのですが、頼んでもよろしいでしょうか?
例としては「車が走っている様子」や「公園を歩いてる様子」などです。
自分の力では全く分かりませんので、よろしければお願いしたいです。
[1] 授業単元:3DCG
[2] 問題文(含コード&リンク):TinyFKを利用したアニメーションを作る。
ttp://www.teu.ac.jp/aqua/~earth/FK/ [3] 環境
[3.1] OS: XP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C++
[4] 期限:2005年2月7日24:00まで
[5] その他の制限: 作品の解説が必要。
(下記の技術をどのように用いているか)
・二種類以上のマテリアル設定(1点) ・平行光源、点光源両方の作成と利用(2点) ・オイラー角を用いた制御(2点) ・アップベクトルを用いた制御(1点) ・モデルの座標軸以外の任意軸回転(2点) ・パンカメラ処理(1点) ・オービットカメラ処理(1点) ・トラックカメラ処理(1点) ・ドリーカメラ処理(1点) ・ティルトカメラ処理(1点) ・ウォークスルーカメラ処理(2点) ・フライスルーカメラ処理(2点) ・速度・加速度の概念の利用(2点) ・力の概念の利用(3点) ・反射の利用(3点) ・摩擦の利用(2点) ・二直線の交点計算の利用(3点) ・平面と直線の交点の利用(3点) ・キー入力の利用(1点) ・テクスチャマッピングの利用(2点) ・曲面テクスチャマッピングの生成(3点) ・十字型配置テクスチャマッピングの利用(2点) ・ビルボードテクスチャマッピングの利用(3点) ・マウス入力の利用(2点) ・GUI部分(ボタン)の利用(3点)
上記の内容を幾つか満たしていれば良いです。 長々となってしまいました。。。 やって頂けたら幸いです。 心優しい方、よろしくお願いしますm(_ _)m
いるよ
>>656 #include <string.h> だけ使っていい?
661 :
647 :05/01/31 03:50:28
ありがとうございます。 sscanf使ってみます! また別の質問なのですが、 vector <string> に assignでソースコードを保存していくと タブの部分で切れて それぞれ別のstringに保存されてしまうのですが これを一行まとめて一つのstringに保存していく方法を 教えてください。。
>>660 ありがとうございました。
解いてくださった皆さんのおかげで
すべて課題が終わりました。
>>660 さん、遅くまで付き合ってくれて
本当に、ありがとうございます。
課題に全部目を通してから寝ますー
>>661 それはassingで保存する前から別のstringになってるんじゃないか?
664 :
647 :05/01/31 04:08:57
int main(int argc, onst char* argv[]){ ifstream inputfile(argv[1]); vector <string> source; source.assign(istream_iterator<string>(inputfile),istream_iterator<string>()); } こんな感じでassignまで至っているのですが inputfileに AVG ORI という様な内容のファイルを渡したら、 source.at(0)="AVG", source.at(1)="ORI" という 様になってしまうっぽいです。これを、どうにか source.at(0)="AVG ORI" という事には できないですか? getlineで一行づつ読んでいくことも考えたのですが、できればvectorを使いたいと思いまして。。
666 :
637 :05/01/31 05:21:13
誰か助けてください・・・・
レスキュープリーズ
Q
自己解決しました。ありがとうございました。
>>666 何が問題なのかさえ分かりません。
日本語から勉強し直したらどうですか?
>>664 std::vectorとstd::getline()を組み合わせればいいじゃん。
673 :
デフォルトの名無しさん :05/01/31 13:13:16
【質問テンプレ】 [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 1、スタックに int型のデータを積む関数pushu_a と、取り出す関数pop_aおよび、その関数を使用するmainを作成せよ。 2、スタックは配列変数を用いて実現し、最大100個まで記憶するものとする。 3、配列、スタックポインタはグローバル変数として宣言する。 [3] 環境 [3.1] OS:Win XP [3.2] 開発環境:Visual C++ .NET [3.3] 言語:C [4] 期限:1月中 [5] その他の制限:特になし。 よろしくお願いします。
674 :
673 :05/01/31 13:14:34
詳しい問題はアップローダーにアップしておきました。
676 :
デフォルトの名無しさん :05/01/31 13:49:39
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 1. 「探索」のプログラムを「リスト構造」を利用して作成せよ。 2. 「ソート」のプログラムを「リスト構造」を利用して作成せよ。 授業中に利用したアルゴリズムの中からリスト構造の扱いに向いたものを選び、プログラムにせよ。 (授業では、探索は逐次探索と二分探索、ソートはバブルソートとクイックソートというのをやったらしいです) [3] 環境 [3.1] OS:Windows XP [3.2] 開発環境:Visual C++ [3.3] 言語:C [4] 期限:今日中 期限が今日の深夜0時までみたいです・・・ 突然のお願いで大変かと思いますが、どうかよろしくお願いいたします。。。
680 :
デフォルトの名無しさん :05/01/31 15:48:14
>>680 解放されたかどうかをコンソールに出力して確認しなさい。は、
コンソール画面に入力した数字を羅列して、メモリを開放したあとに
開放されているか確認するためにNULLを出すということです。
じゃあ、最後に、printf( "NULL\n" ); とでもするしかない。 freeは値を返さないし、開放後のメモリ参照はできないし、 開放後の変数には、mallocが返したアドレスがそのまま入ってるんだけど?
>>683 ダイナミックツリーなんだから、セグメントエラーになる。
時間いっぱいギリギリまで試行錯誤してみます。 皆さんありがとうございました
>>684 ポインタの先の構造体読みに行く前にNULLチェックすれば問題ないんではないのかなぁ…
あ〜一方通行なのか…
だから、free の後で、参照したらまずいんだって。 たまたま動いてるだけ。
いっそSIGSEGV捕まえちまえばいいんじゃ?
>>690 680=682=684=689 だけど、
680、で作ったソースの最後のforで、全部開放済(全部freeを呼んでる)。
だから、最後に何かを付けて、参照するのは、無理です。
ダイナミックツリーなんだから、最初の一つのポインターを除けば、 全部、malloc で獲得した領域。 だから、開放したことを示すNULLを入れたポインターも、最初のを除けば、 最終的には開放されてしまう。 もしくは、NULLを入れようとするポインターがfreeで開放された領域になってしまう。 なんで最後に、 head = NULL; printf( "NULL\n" ); とするしかない。
C歴1日の奴でももっとマシなソース書く
>>694 それじゃ解放を確認したとはいえない。
ただ単にポインタをNULLにするだけだったらいつでもできる。
解放されて無くても出来てしまっては意味がない。
>>696 だから、メモリリークのデバックは大変なんです。
C++のセオリーに、「デストラクタで例外を送出するな」というのがある。 まともな実装のOSならば、freeが失敗する場合ってのは致命的な エラーなのでは?
例外安全すら知らない無知はすっこんでろ
誰か
>>679 やってくださいよ(´Д`;)
明日の授業の最初で提出だし、他にもいっぱい課題あるんです・・・
>>700 struct MY_DATA が未定義で、できません。
>>700 ようするに
お前の態度が
気に食わない
structの定義なのに最後にセミコロンないし。
C言語実習の最終課題で「標準入出力 反復文 構造体・共用体 定数と変数 配列 ファイル入出力 式と演算子 関数 動的メモリ 制御文 ポインタ 分割コンパイルを全て使ってオリジナルのシステムを製作する。」 というものが出題されたのですが、アイデアも何も浮かびません・・・ 後生ですのでどなたか代行していただけませんでしょうか。 お願いします。
アイディアがあるなら手伝うことは出来る。そこ、一番大事。
例として出されたのは 「選択式ソートシステム」 ≫ある複数のデータをソートする場合、ソートの種類を選択することができるシステム。 です、もう時間がないのでこれでお願いしたい所存です。 ソートの種類としては「選択ソート、バブルソート、挿入ソート、シェルソート」で行こうと思います。 ソートする文字、または数値をファイルから読み込むか、入力するかの選択、 どのソートをするかの選択の後、選択された処理を実行し、結果と経過をファイルに出力するシステムでお願いします。
>>705 適当なアーカイバとか作ってみては?
ついでにXORで暗号化すれば恐らく全て使える
読み込む際のファイルはタブ区切りで行 改行で列 ---------- 1[TAB]43[TAB]83[TAB]14[TAB]32 C[TAB]言[TAB]語[TAB]実[TAB]習 ---------- というファイルを読み込みそれを昇順でソートするという物をよろしくお願いします。
>>708 さん
まだ1回生なので本当の初歩的なソースしかかけないので・・・
アーカイバなど実用的なシステムは無理です、すいません。
自分は高専の一年〜2年の春休みに暇つぶしでPCゲームの書庫展開を 作ってみた経験から言ってみたんだが… まぁ、やってみたいものの方がいいとおもうけどね
713 :
デフォルトの名無しさん :05/01/31 22:19:01
私は簡単な web server が良いとおもった
715 :
デフォルトの名無しさん :05/01/31 22:39:23
[1] 授業単元:C++入門 [2] 問題文(含コード&リンク): 1、自宅から勤務先の会社まで電車で通うとする(片道230円:往復460円) 2005年4月から2010年4月まで会社に通うとした場合に、運賃はいくらになるだろうか。 日数部分と運賃の計算部分は関数化を行い、運賃を求めるプログラムを作りなさい。 2、また、通勤定期を使用すると一ヶ月で6500円かかる。 1の問題で通常切符と一ヶ月定期を購入したと考え、 その場合もっとも安い運賃で通勤する方法と、その金額を出力するプログラムを作りなさい。 作成時に必要だと思った箇所は関数化を行いなさい。 *1、2共に、うるう年と休日(土日)は基本的に考えなくて構いません。 作成している場合は+αとして採点します [3] 環境 [3.1] OS:Windows xp Home [3.2] コンパイラ(バージョン):VisualStudio.Net2003 [3.3] 言語:C++ [4] 期限:2005年02月3日 [5] +αの部分は考えていませんので、条件として考えて頂かなくて結構です。 2の出力は 「切符で20往復 一ヶ月定期を5回 =41700円」 という形になるかと思います。 回答頂けます場合は、初心者むけのソースであれば助かります。 どうぞよろしくお願いします。
>>71 はい、正直分かりませんでした。。アフォなので
ありがとうございます!
アから順に。試してないからコンパイルして試してちょ。 問題1 n<=1 1 fact(n-1) int n; &n n<0 fact(n) 問題2 *n mode == 0 index meibo[i].name 0 meibo[i].name meibo[i].name 問題3 *a n[j] > n[j+1] &n[i] n %d n[i]
どなたか
>>679 の問1といてもらえませんか。
本当にお願いします
>>679 「queueに突っ込むアイテムを表現してる構造体」の名前が"Que"ってのはいかがなものなのかと問いたいです。
クエッ
問2の答えがアップされてますがmain関数がありません・・・
締め切り1時間きりました・・・
どなたか
>>707 でシステム作ってもらえないでしょうか・・・
>>715 閏年を考慮しつつも土日を考慮していないと言う何とも中途半端な内容だが。
#include <iostream>
long ut2jd(double *d, int year, int month, int day, int hour, int min, int sec)
{
int bc, gregory;
long j;
bc = year <= 0;
gregory = year > 1582 || (year == 1582 && month > 10) || (year == 1582 && month == 10 && day >= 15);
if (month <= 2) {year--; month += 12;}
if (hour < 12) {j = 0; *d = 0.5;}
else {j = 1; *d = -0.5;}
*d += (hour * 3600L + min * 60 + sec) / 86400.0;
j += bc ? (year - 3) / 4 : year / 4;
if (gregory) j += 2 - year / 100 + year / 400;
j += 1720994L + year * 365L + (month + 1) * 30 + (month + 1) * 3 / 5 + day;
return j;
}
int days_between(int sy, int sm, int sd, int ey, int em, int ed)
{
double dummy;
return ut2jd(&dummy, ey, em, ed, 0, 0, 0) - ut2jd(&dummy, sy, sm, sd, 0, 0, 0);
}
int main()
{
std::cout << 460 * days_between(2005, 4, 30, 2010, 4, 30) << "円" << std::endl;
return 0;
}
>>723 2ちゃんねるに課題を丸投げするということはだな、見知らぬ誰かの善意を期待するってことだ。
ということは、誰も期待にこたえてくれないこともあるということだ。つまりこれも運命だからあきらめろってことですな。
ソートってアルゴリズム思い出せないからヤダ
課題にそったシステムなら何でもかまいません 何でも構わないので何か提供してもらえませんでしょうか・・・
すいません705の間違えです
2ちゃんのあほどもに任せてもらちがあかないから自分でやろうとか思わないの? 今開発環境ないから漏れは煽るだけ。
まとめて欲しいサンプルプログラムA 01 #include <stdio.h> 02 03 int main( int argc, char* argv[] ){ 04 FILE* outfile; 05 char name[30], email[50]; 06 07 outfile = fopen( argv[1], "a" ); 08 09 printf( "名前を入力してください: " ); 10 scanf( "%s", name ); 11 printf( "E-mailアドレスを入力してください: " ); 12 scanf( "%s", email ); 13 14 fprintf( outfile, "%s %s\n", name, email ); 15 16 fclose( outfile ); 17 return 0; 18 }
#include <stdio.h> #include <string.h> int main(){ int i=0, count, kekka; char names[10][20], tmpname[20]; char emails[10][50], tmpemail[50]; FILE* infile; /* ファイルから最大10人分のデータを読み込む */ infile = fopen( "l10_sample1.data", "r" ); while( !feof(infile) && i<10 ){ fscanf( infile, "%s %s", tmpname, tmpemail ); strncpy( names[i], tmpname, 20 ); strncpy( emails[i], tmpemail, 50 ); i++; } /* 読み込まれた人数を count に保存 */ count = i; printf( "検索する名前を入力してください: " ); scanf( "%s", tmpname ); /* カウンタ i を 0 に戻してから全員分の検索を行う */ i = 0; while( i<count ){ kekka = strcmp( names[i], tmpname ); /* i番目にマッチする名前が見つかったので、 i番目の電子メールアドレスを表示する */ if( kekka == 0 ){ printf( "%s さんの電子メールアドレスは %s です。\n", names[i], emails[i] ); } i++; } return 0; }
>>732 がBになります。
連投失礼しました・・・orz
自分C言語よくわからないんです;; なにをどうしていいのかサッパリで・・・
735 :
673 :05/01/31 23:40:03
>>675 ,678
お答えいただき有難うございました。
>>734 授業受けててなんでそんなレベルなんですか。
とりあえず担当教官に「あなたの授業を受講していたにも関わらずC言語がよく分からなくて何をどうしていいかサッパリです。
この件は大学当局に告発させていただきます」ってメールを出せば配慮してくれるかもしれないよ。
>>736 そんなことしたら出席日数不足がばれるじゃん。
>>730 a.out は、いかんな。
./a.out でないと。
っと別のところに突っ込み。
やっぱ10分じゃ無理だった
740 :
デフォルトの名無しさん :05/02/01 00:09:13
PATH に . は含めちゃいけません
742 :
デフォルトの名無しさん :05/02/01 01:05:22 ID:QKqiqhtw BE:21319643-
>>741 すごいな喪前
なんか俺も真面目にプログラム勉強してみたくなった
回答人みたく、電車内で前の席に座ってる女子のパンツ覗きながら携帯でちょいちょいと答えたり、
納品日に間に合わなくて剃る暇もなくすっかり生え揃ってしまったヒゲを弄りながらちょいちょい答えられるように
なるにはどうすればいいの?
そんな、前者みたいな軽犯罪法を犯す方法は教えられません!
>>742 めんどくさすぎ。しかも直前に丸投げ。考えた後もなし。諦めな。
>>742 HP見ると、コンテスト行う、とあって、そこを見ると、乱入者部門とかある。
そっちに参加するかな?(w
アメリカホームドラマと吉本新喜劇を混ぜて名古屋風にした感じか
誤爆スマン
一瞬何かと思った
750 :
デフォルトの名無しさん :05/02/01 04:23:36
質問です。 入力ファイル(テキスト形式)の行数を調べる方法で、最も効率的な方法、又はメソッドは 何でしょうか?教えてください。オネガイします。
wc(1)
>>742 この文書いたやつ、そこはかとなくRuby使いっぽいなw
デバッグにつまったから暇つぶしにやってみるかな。
753 :
デフォルトの名無しさん :05/02/01 04:56:08
つかモロRuby野郎じゃんか。ま、おれもそうなんだけど。
でも課題はCで作るのね。
ていうか、cacrd.tar.gzに含まれてたa.outが意味不明なんすけど…
>>753 よくよく読んでみるとかなり手ごわそうな感じ。
こんなのを解く授業なんて羨ましいっす。
標準入力とは?ディスクリプタstdinでは読み込めませんが・・・。 この教師ちょっと心配。。
>>755 読んでる部分を抜き出してみたよ。
d_open("|#{@command}", 'r+'){|io|
@io = io
proc.call
}
ま、なにをやってるかというとプロセスを作ってパイプ経由で読んでるってこと。
>>756 なるほど、じゃあ、ディスクリプタはstdin,stdoutじゃだめじゃん?
>>742 掲示板に晒してあるソース。そうとう駄目なやつだよ。
もうちょっと勉強したほうがいいんでない?
こいつのためにならんよ。
>>757 ゲームマスター(プログラム)がいて、そいつがパイプ経由で二つのプログラムに入力を与え、
結果判定などをやってる。なんで標準入出力でOK
>>759 おれがcygwinだから駄目なのか?
stdinだと普通に読み込めない・・・
>>760 むー、cygwin環境では試してないや。こっちはFreeBSD。
>>761 たぶん駄目だね。共有メモリ上でやってるみたいだし。
cygwinは共有メモリは無理なんだ。
がんばってくだちぃ。寝ますノシ
オツカレ
1] 授業単元: C++ [2] 問題文(含コード&リンク): Walking Around Manhattan プログラムは 1.ユーザーに始めと終わりのStreetを聞く。 2.ユーザーに始めと終わりのAvenueを聞く。 3.どれだけのブロックを歩いたのか表示させる。 Number of blocks = number of avenues to travel + number of street to travel. 4.歩いた合計のFeetを表示させる。(BLOCK_SIZEを定数とする) Number of streets to travel = |starting street number - ending street number| Number of avenues to travel = |starting avenue number - ending avenue number| 5.三平方の定理 straight line distance = sqrt(number of streets^2 + number of avenue^2)を使って直線の距離を算出する。(始めから、最終ポイントまでの直線距離。) 6.二つの距離の差を計算し、算出する。 表示されるのは −-------------- What street are you starting on? What street are you ending on? What avenue are you starting on? What avenue are you ending on? This trip is ## blocks, or ## feet. The straight line distance would be ## feet. The difference is ## feet. ---------------- *## はそれぞれの答え。 [3] 環境 Codewarrior v9.2 [3.1] OS: XP SP2 [3.2] コンパイラ(バージョン): Codewarrior v9.2 [3.3] 言語:C++ [4] 期限:2005年二月三日まで まだまだ、勉強中です。よろしくお願いします。
中学生でも出来る問題だぞ #include <stdio.h> #include <stdlib.h> #include <math.h> #define BLOCK_SIZE 500 int question(char *sa, char *se, double *pd) { printf("What %s are you %s on?", sa, se); return scanf("%lf", pd); } int main(void) { double ss, es, sa, ea, nst, nat, nb, tf, sld; question("street", "starting", &ss); question("street", "ending", &es); question("avenue", "starting", &sa); question("avenue", "ending", &ea); tf = (nb = (nst = fabs(ss - es)) + (nat = fabs(sa - ea))) * BLOCK_SIZE; sld = sqrt(nst * nst + nat * nat) * BLOCK_SIZE; printf("This trip is %2.0f blocks, or %2.0f feet.\n", nb, tf); printf("The straight line distance would be %2.2f feet.\n", sld); printf("The difference is %2.2f feet.\n", tf - sld); return 0; }
>>742 サンプルの中に pl_sparrow.rb とか pl_owl とかあるやん?
それでリーグ戦した結果が README に書いてあるやん?
一番強いやつを C に移植したらええんちゃう?
[ 1] win=3919 (first=1978, second=1941): pl_owl.rb
[ 2] win=3652 (first=1891, second=1761): pl_bulbul.rb
[ 3] win=3538 (first=1836, second=1702): pl_swift.rb
[ 4] win=3483 (first=1806, second=1677): pl_woodpecker.rb
[ 5] win=3139 (first=1660, second=1479): pl_kite.rb
[ 6] win=2176 (first=1108, second=1068): pl_chicken.rb
[ 7] win=1093 (first= 569, second= 524): pl_sparrow.rb
[ 1] *** O(566) O(581) O(552) O(560) O(778) O(882)
[ 2] X(434) *** X(494) O(555) O(531) O(766) O(872)
[ 3] X(419) O(506) *** X(483) O(615) O(687) O(828)
[ 4] X(448) X(445) O(517) *** O(555) O(710) O(808)
[ 5] X(440) X(469) X(385) X(445) *** O(592) O(808)
[ 6] X(222) X(234) X(313) X(290) X(408) *** O(709)
[ 7] X(118) X(128) X(172) X(192) X(192) X(291) ***
むきー、トラブル処理して殆どできなかったorz この課題、今日の14時までなんだよね。もうちょっと早く聞いて欲しかったなあ。 もうだめ、眠気最高潮なんで寝ます。とはいえ面白そうだから最後まで解いてみるけど、 絶対間に合わないよな。ごめんな。
う。自分の番号間違った。
>>767 はs/742/752/でお願いします。
ホントごめん。
乙
>>754 なんであそこに a.out があるのかと小一時間(w
これは 教授 の 自演 だな
772 :
デフォルトの名無しさん :05/02/01 18:18:39
【質問テンプレ】 [1] 授業単元:C++言語 [2] 問題文(含コード&リンク): 1、サイズはデフォルトで153600バイト。 2、指定サイズで複数の出力ファイルに元データを分割出力する。 3、出力ファイル名の後部に通し番号を付加して、[出力ファイル名]00などとして出力する。 [3] 環境 [3.1] OS:Windows2000 [3.2] 開発環境:Visual C++ 6.0 [3.3] 言語:C++ [4] 期限:明日中 [5] その他の制限:特になし。 勉強して間もないのに初めて仕事を頼まれましたが、自分じゃどうしたらいいのか分かりません・・・ 急で申し訳ありませんがどなたか宜しくお願い致します。
>>772 ソレで給料貰えるんだ・・・
給料泥棒と呼ばれないうちに、なんとかしようね
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 連立1次方程式 5x-y=4 x+y=6 を初期値x=0,y=0として、ヤコビ法で求めよ。 計算回数 x y 0 0 0 1 0.8 1.2 : : : 10 1.0000001 1.000001 実行すると上記のような表が出てくるようにしてください。 [3] 環境 [3.1] OS:winxp [3.2] コンパイラ(バージョン):bcc32 [3.3] 言語:C [4] 期限:2005年2月10日 [5] その他の制限: よろしくお願いします
計算回数 x y 0 0 0 1 0.8 1.2 : : : 10 1.0000001 1.000001 >実行すると上記のような表が出てくるようにしてください。 本当にこんな表でいいのか?
>>772 昔フロッピーディスクに入り切らないファイルを
そうやって分割するソフトがあった。
昔はWindowsがフロッピー数十枚に収められてたなぁ・・・
皆さん有難うございます。 入門書籍で一通り勉強したレベルの自分でも出来そうならなんとか頑張ってみます。
>>777 正確に書くと、
計算回数 x y
0 0 0
1 0.8 1.2
2 1.04 1.04
3 1.008 0.992
4 0.9984 0.9984
5 0.99968 1.00032
6 1.000064 1.000064
7 1.0000128 0.9999872
8 0.9999974 0.9999974
9 0.9999995 1.0000005
10 1.0000001 1.0000001
です。すみませんでした。改めてよろしくお願いします。
ぜんぜん正確じゃない orz 出直してきます。
すみません。自己解決しました。ありがとうございました。
>>783 まあ、小言を言わせてもらうと、
自己解決したときにはどうやって解決したかくらい書き残していった方がいいよ。
[1] 授業単元:C言語 以下の仕様に基づいて,キューにデータ(頂点番号)を追加する関数 void enqueue(int dt) を定義せよ. (必要に応じて,ヘッダー・ファイルをインクルードすること.) * 関数名:enqueue * 仮引数int dt:キューに追加するデータとして,int型のデータ(頂点番号)を受け取る. * 戻り値:なし. * 機能:int型のデータ(頂点番号)を追加・取り出しできるキューに,頂点番号を追加する. 仮引数として受け取ったint型のdtをメンバNumの値としてもつ NODE型のノードを,連結リストの先頭ノードとして追加すること. また,キューの先頭ノードを指すポインタとして, 以下のグローバル変数を使用すること(必要であれば初期化すること). NODE *q_head;
以下の仕様に基づいて,キューからデータ(頂点番号)を取り出す関数 int dequeue() を定義せよ(必要に応じて,ヘッダー・ファイルをインクルードすること.). * 関数名: dequeue * 仮引数:なし. * 戻り値 (int型):キューのデータ構造に基づいて取り出されるint型のデータ(頂点番号) ※キューにデータがない場合,他の関数および機能の実行に影響のない戻り値を返すこと. * 機能:呼び出し側にキューから取り出したデータ(頂点番号(int型))を返す. 上記のvoid enqueue(int dt)のデータ構造に基づいて,連結リストの操作をおこない, 末尾ノード(ノードがひとつの場合は先頭ノード)を取り出すこと.
簡単すぎて答える気にならない。もっと難しいのやりたいなぁ
あー
>>783 さん
人を装うのはやめてください。
自己解決はしていないのですが、あらためて書き直します。
ご迷惑おかけしました。
[1] 授業単元: C言語演習 [2]ユーザの入力によるファイル名からデータをを読み込む。 読み込まれたデータを利用し、適当な処理する。 処理したデータをソートし、データを別のファイルへ書き込む [3] 環境 OS:turbolinux 言語:C [4] 期限:2005年2月5日14:00まで 全然わかりません;どなたかよろしくお願いいたしますorz
データって数値なのかな
>>792 自分で作った問題でないなら元の文をそのまま晒せ
795 :
デフォルトの名無しさん :05/02/02 10:55:01
すいません、C++の宿題をやっているのですが、 intを2進法表示でstringに保存する方法はありませんか?! かなり困っています。助けてください! よろしくお願いします。
>>795 ほい。激しく糞なんで提出したら怒られるかも知れないけど。
#include <iostream>
#include <string>
#include <sstream>
#include <bitset>
template <class Target, class From>
Target binary_cast(From from)
{
std::bitset<32> bits(from);
std::stringstream ss;
ss << bits;
Target target;
ss >> target;
return target;
}
int main()
{
std::string s(binary_cast<std::string>(32767));
std::cout << s << std::endl;
return 0;
}
#include <iostream> #include <string> #include <sstream> #include <bitset> #include <limits> template <class Target, class Source> Target binary_cast(Source source) { std::bitset<std::numeric_limits<Source>::digits> bits(source); std::stringstream ss; ss << bits; Target target; ss >> target; return target; } こっちの方がまだいいかも知れない
>>793 データは個人情報みたいなものです。名前とか年とか身長とか
の並んだデータです.
>>794 宿題ではありますが元の文章というものがネット上にありません;
分かり難い文章で申し訳ありません
>>798 ,799
コンパイルできません;こうエラーがでます
test.c:1:21: iostream: そのようなファイルやディレクトリはありません
test.c:2:18: string: そのようなファイルやディレクトリはありません
test.c:3:19: sstream: そのようなファイルやディレクトリはありません
test.c:4:18: bitset: そのようなファイルやディレクトリはありません
test.c:5:18: limits: そのようなファイルやディレクトリはありません
test.c:7: error: 構文解析エラー before '<' token
test.c:15: 警告: data definition has no type or storage class
test.c:16: error: 構文解析エラー before '>>' token
上の五つのファイル名のものを作りましたが全然反応してくれません
実行したのは下の方です。上の方はもっとエラーがでました;
よろしくお願いします!!
>・・・とか・・・とか・・・とか どうせいっちゅーねん
>>801 =
>>792 だと思うが
>>801 !=
>>795 な気がする…っとまぁ、ツッコミどころはむしろ
俺はエスパーじゃねぇんだから
>>792 の文じゃ
・読み込むファイルの形式
・どんな適切な処理を施すのか
この二点が主にわかんねぇよ
問題文の全文を書け
>>802 読み込むファイルは適当に作ります;
別ファイルを読み込んでソートし別名で書き出しできるようなプログラムを
よろしくお願いいたします
>>805 すみません;自分が頼んだ問題だと勘違いしてましたorz
>>801 C++って言った
コンパイル通らなくてもそれあってるから提出するように
>>804 適当に作るんだな?
つうことはテキストデータじゃなくともいいんだな?
struct{
char name[0x10];
int year;
int height;
};
こんなんが列挙してあるテキストエディタで編集不可のデータでもいいんだな?
union{ char name[0x10]; int year; int height; };
>>803 自分で問題を理解せずに質問してしまいすみません;
ファイル形式はtxtで
適切な処理は自分で追加します。
別ファイルを読み込んでソートし別名で書き出しできるようなプログラムを
よろしくお願いいたします
>>808 テキストデータで個人情報みたいなのを作るのでそれをソート
できて別名で書き込めるようお願いいたします
構造体をそのままファイルに出力するのってアラインメントとか大丈夫なの?
別にシステム変わんなければ関係あるまい。 可搬性は低くなるけど。
#include <pshpack1.h> #include <poppack.h> ってのがVCだとできたと思うけど… まぁコンパイラ依存になるかもしんない
>>810 いい加減入力ファイルのフォーマットを決めろ。
そんなこともできないのか?できないなら消えろ。
>>803 が言っている意味分からないのか?
ここはエスパー集団の集うスレじゃない。
名前,年齢,身長 でよろしくお願いします 名前でソートできるようお願いします
Linux ってあるし、面倒だし、これでいいよ。あとはbufに読み込め。 for( i = 0 i < size; i++ ) { // 適当な処理 if( buf[i] >= 'A' && buf[i] <= 'Z' ) buf[i] |= 0x20; } if( ( fp = popen( "sort > 別ファイル", "w" ) ) ) { // sort fwrite( buf, 1, size, fp ); pclose( fp ); }
>>801 C++ならtest.cじゃなくてtest.cppにしろ
818 :
デフォルトの名無しさん :05/02/02 20:02:36
まぁあれだ恥ずかしくて言いたくないけど あ げ
819 :
デフォルトの名無しさん :05/02/02 20:53:24
初期的質問すみません。 " 18"のような文字列をint型の18という値にしたいのですが、 どのような方法が理想でしょうか?
ここは宿題スレ CかC++かもワカラン
>>819 すげー、マジでやる?
最近の、ロボットプログラマーはすごいね
int v; if (!strcmp(s, " 18")) v = 18;
int main(void){ int i; char str[16]; str[16]=" 18"; i=18; return 0; }
>>819 (1)何も考えずに atoi を使うか。
(2)ちょこっとだけ考えて strtod を使うか。
(3)だいぶ考えて 自作 するか。
おれは(3)を選んだ。関数の戻り値を見て愕然としたからだ。
(1)(2)を使うんなら、できる限りの検証処理を盛り込んでおけ。
もうちょっとアバウトにsscanfとか まぁ、私も自作ですね asciiなら'0'との差を取るだけで出るし
828 :
デフォルトの名無しさん :05/02/02 21:48:02
>>823 >str[16]=" 18";
明らかにお化視衣
#include<stdio.h> #include<string.h> #include<stdlib.h> main() { int i; char *s[5]; char str[100]; for(i=0;i<5;i++){ scanf("%s", str); s[i]=(char *)malloc(sizeof(char) * (strlen(str)+1)); strcpy(s[i], str); printf("%s\n",*(s+i)); } } これでprintfを*s[i]にすると、入力の一文字目でエラーがでるんですが、 なぜでしょうか?
#include <stdio.h> int CharToInt(char c); void main(){ char st[30],*cp=st; int n,d=0; printf("整数文字列を入力"); gets(st); for (;*cp;cp++){ if (-1!=(n=CharToInt(*cp))){ d=d*10+n; } } printf("%d\n",d); } int CharToInt(char c){ char ch='0'; if (c<'0' || c>'9') return -1; for(;c!=ch;ch++); return ch-'0'; }
ま、普通に考えてboost::lexical_cast<>だろうな。
*(s+i) char* s[i] char* *s[i] char
>>792 =
>>815 #include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[256];
unsigned age;
unsigned height; // cm
} PERSON;
int cmp(const void * e1, const void * e2) {
const PERSON * p1 = e1;
const PERSON * p2 = e2;
return strcmp(p1->name, p2->name);
}
int main(int argc, char ** argv) {
FILE * in_f, * out_f;
unsigned n, i;
PERSON data[256];
if (argc < 3) return 1;
if ((in_f = fopen(argv[1], "r")) == NULL) return 1;
if ((out_f = fopen(argv[2], "w")) == NULL) {fclose(in_f); return 1;}
for (n = 0; n < 256 && fscanf(in_f, "%256s%u%u", data[n].name, &data[n].age, &data[n].height) == 3; ++n) ;
qsort(data, n, sizeof(PERSON), cmp);
for (i = 0; i < n; ++i)
fprintf(out_f, "%s %u %u\n", data[i].name, data[i].age, data[i].height);
fclose(in_f); fclose(out_f);
return 0;
}
835 :
819 :05/02/02 23:13:34
自作するとしたら、どういった処理にしますか? atoiなどは先頭文字を変換するだけなので・・。
先頭文字だけ?
「" 19"のような」と言うのは非常に曖昧なので答えにくいのだが。 次のnumでいいのかな? num ::= space* digit* space ::= ' ' | \t digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
838 :
819 :05/02/02 23:24:22
>>837 え〜と、処理の見方がよくわからないのですが、
配列に
char[0]=' ';
char[1]=' ';
char[2]=' ';
char[3]='1';
char[4]='8';
char[5]='0';
のように文字が入っています。
それだと "" も受理されるぞ。
#include <stdio.h> main(){ int i; char str[]=" 18"; sscanf(str, " %d", &i); printf("%d\n", i); }
841 :
819 :05/02/02 23:30:19
すいません。 char[5]='\0' の間違いです。
ハズイ num ::= space* (nonzerodigit digit+) | '0' space ::= ' ' | \t nonzerodigit ::= '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
>>842 >(nonzerodigit digit+)
(nonzerodigit digit*) では?
>>834 ありがとうございます
非常に勉強になりました
感謝
845 :
デフォルトの名無しさん :05/02/03 01:16:40
くそぅまだココの解答者になれるレベルに自分がなっていない…。 もっと精進せねば。
どなたか785と786を解いてもらえないでしょうか
>>845 一生無理だよ、と酷いことを言って競争相手を蹴落とそうとするテスト。
C++のプログラムで5教科・英語・数学・国語・理科・社会の 50人分一人一人各教科の点数と合計と平均を表示させるプログラムを 2月4日までお願いいたします。
C++のプログラムで5教科・英語・数学・国語・理科・社会の 50人分一人一人各教科の点数と合計と平均を表示させるプログラムを 2月4日までお願いいたします。
マルチ乙
for(50人分ループ){ 合計 = 英語[i] + 数学[i] + 国語[i] + 理科[i] + 社会[i]; printf(フォーマット1, 英語[i], 数学[i], 国語[i], 理科[i], 社会[i]); printf(フォーマット2, 合計, 合計 / 5); }
852 :
デフォルトの名無しさん :05/02/03 11:10:30
【質問テンプレ】 [1] 授業単元: C++ の入門的なコース [2] 問題文(含コード&リンク):10進法から2進法、2進法から10進法、 10進法からローマ数字、2進法からローマ数字へ変換するプログラム [3] 環境 [3.1] OS: Win XP [3.2] コンパイラ(バージョン): すみません、本当に初心者なのでバージョンは どこを見ればいいのかわかりません。 [3.3] 言語:C++でお願いします。 [4] 期限:早くに越したことはありません。 [5] その他の制限: Stringは使用禁止とのことです。 よろしくお願いします。
>>852 ・変換というのは表示を変更するだけでいいのか
・入出力例を挙げろ
854 :
852です。どなたか力を貸してください。 :05/02/03 12:11:25
>>853さん、お返事ありがとうございます。 そうです。表示を変更すればいいです。(例12→1100、14→IVX) 実は、途中までのプログラムはできていて、そこに関数を入れるようになっています。 ここの// WRITE THIS の部分を埋めるだけでよいのですが... 数字を一桁ずつ読ませるのか、そのためにどうすればいいのか、 変換できたとして、それを表示するにはどうすればいいのか、などなど わからないことだらけです。 #include <iostream> using namespace std; char menu(); int convert10to2(int n); void convert10toRom(int n); int convert2to10(int n); void convert2toRom(int n); int convertRomto10(const char * input); int convertRomto2(const char * input);
// WRITE THIS
856 :
852です。どなたか力を貸してください。 :05/02/03 12:17:14
int main() { char ch; do { ch = menu(); // 10 to 2 if(ch=='1') { cout<<"Enter a base10 number: "; int n; cin>>n; cout<<"\n*** "<<n<<" base10 equals "<<convert10to2(n)<<" base2 ***\n\n"; } // 10 to Rom else if(ch=='2') { cout<<"Enter a base10 number: "; int n; cin>>n; cout<<"\n*** "<<n<<" base10 equals "; convert10toRom(n); cout<<" in Roman numerals ***\n\n"; }
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。 ・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
858 :
852です。長くてすみません。 :05/02/03 12:18:56
// 2 to 10 else if(ch=='3') { // WRITE THIS } // 2 to Rom else if(ch=='4') { // WRITE THIS } // Rom to 10 else if(ch=='5') { cout<<"Enter a Roman numeral expression: "; char input[80]; cin>>input; cout<<"\n*** The expression "<<input<<" in Roman numerals equals "<<convertRomto10(input)<<" Base10 ***\n\n"; } // Rom to 2 else if(ch=='6') { cout<<"Enter a Roman numeral expression: "; char input[80]; cin>>input; cout<<"\n*** The expression "<<input<<" in Roman numerals equals "<<convertRomto2(input)<<" Base2 ***\n\n"; } }while(ch!='q' && ch!='Q');
↓あっそれっもういっちょ
> 実は、途中までのプログラムはできていて、そこに関数を入れるようになっています。
> ここの// WRITE THIS の部分を埋めるだけでよいのですが...
待て、待て。
>>854 に書いてあるのはおまいが書いたんじゃなくて「出題者が作ったプログラム」なのか?
だったら出題者を棒で滅多打ちにすべきだ。
なんじゃこりゃーーーーー
おいっ!
>>860 空気嫁!
すべっちゃったじゃないか!
863 :
852です。長くて申し訳ありません。 :05/02/03 12:25:37
>>857さん 854に書いたとおり、プログラムはほぼ出来上がっていて、関数のみ入れる形に なっています。必死になってやっているのですが、数字をどうやって1桁 として扱えばいいのかということがネックになっているかと思います。 あと、申し訳ないのですが、問題のプログラムが、長く、改行も多いので一度では 貼り付けられないのです。 説明不足で申し訳ありませんでした。
そんなコード捨てちまえ
865 :
852です。まだあります。 :05/02/03 12:27:50
return 0; } char menu() { char ch; do { cout<<"(1)\tTo convert base10 to base2\n"; cout<<"(2)\tTo convert base10 to Roman numerals\n\n"; cout<<"(3)\tTo convert base2 to base10\n"; cout<<"(4)\tTo convert base2 to Roman numerals\n\n"; cout<<"(5)\tTo convert Roman numerals to base10\n"; cout<<"(6)\tTo convert Roman numerals to base2\n\n"; cout<<"(q)\tTo quit\n\n"; cout<<"==> "; cin>>ch; } while((ch<'1' || ch>'6') && ch!='q' && ch!='Q'); return ch; }
866 :
852です。もうすこしです。 :05/02/03 12:30:07
int convert10to2(int n) { // WRITE THIS } void convert10toRom(int n) { // WRITE THIS } int convert2to10(int n) { // WRITE THIS } void convert2toRom(int n) { // WRITE THIS
867 :
852です。もうすこしです。 :05/02/03 12:31:33
} int getValue(char ch) { switch(ch) { case 'I': case 'i': return 1; case 'V': case 'v': return 5; case 'X': case 'x': return 10; case 'L': case 'l': return 50; case 'C': case 'c': return 100; case 'D': case 'd': return 500; case 'M': case 'm': return 1000; } return 0; }
868 :
デフォルトの名無しさん :05/02/03 12:31:41
↓あっそれっもういっちょ
869 :
852です。これで最後かと。 :05/02/03 12:37:43
//ここから先はとくに何もしなくていいとのことです。 int convertRomto10(const char * input) { int ans = 0; while(*input!=0) { int value1 = getValue(input[0]), value2 = getValue(input[1]); if(value1==0) { cout<<"That is not a valid Roman numerals expression.\n"; return 0; } else if(value1<value2) { input+=2; ans+=value2-value1; } else { ++input; ans+=value1; } } return ans; } int convertRomto2(const char * input) { return convert10to2(convertRomto10(input)); }
870 :
デフォルトの名無しさん :05/02/03 12:45:14
↓まだまだいくよー
_ ∩ ( ゚∀゚)彡 おっぱい!おっぱい! ( ⊂彡 | | し ⌒J
【アップローダー】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) いい加減にしろこの馬鹿
まあなんだ、そういうことだ、 ぼるじょあ、頼んだぞ
とんでもない糞野郎がきたな
875 :
852です。 :05/02/03 12:58:22
>>872さん すみません。注意不足でした。
まぁうpしたところで 質問に答えるやつはいないんだけどな。 長すぎると
877 :
852です。 :05/02/03 13:00:08
>>872さん すみません。注意不足でした。
最初からろだに上げていれば、部分部分はやってくれる人はいただろうに さすがにこの状況じゃ誰ももう答えてはくれんよ
879 :
852です。ありがとうございました。 :05/02/03 13:18:54
そうですか。自分の未熟さがふがいないばかりです。 お時間とらせて申し訳ありませんでした。 失礼します。
881
ねむひ。 ヒマ・・・。 簡単そうな問題ぷりーづ。
883 :
デフォルトの名無しさん :05/02/03 16:43:21
1に7を足すには?
884
むつかしそぉだ>883 #include <stdio.h> #include <stdlib.h> int nstack = 0; double stack[100]; void push(doble v) {if (nstack < sizeof(stack)/sizeof(stack[0])) stack[nstack++] = v; else exit(2); } double pop(if (nstack > 0) {return stack[--nstack];} else exit(2); } void print_stack(void) {int i = 0; for (i = 0; i < nstack; i++) printf("%f\n", stack[i]); } void add(void) {push(pop()+pop())}; int main(void) {push(1); push(7); add(); print_stack(); return 0};
int main(){printf("%d+%d=%d"1,7,25 / 3); return 0;}
887 :
デフォルトの名無しさん :05/02/03 19:19:40
効率のいい素数を求めるプログラム
>>888 このアルゴリズムは実装が要だぞ。
実装によって速さが全然違う。
AKSはまだオーダーの係数がでかすぎて使い物にならんだろ。
>>887 Lagarias‐Miller‐Odlyzko algorithmの反転。
[1] 授業単元: C言語入門 [2] 問題文:(1)減算関数(sub)の動作原理(なぜこのやりかたで減算が できるのか)について説明せよ。(下に示すプログラム) (2)除算のアルゴリズムを考えてわかりやすく示せ。 Cのプログラムを書く必要はないが,アルゴリズムの説明に加えて それをプログラムとして実装した場合は評価する。 ただし,プログラムのみの提出は認めない。 (1)の減算のアルゴリズム void neg (int x[], int a[]) { int carry = 1; int i; for (i = 0; i< SIZE; i++) { int z = BASE - 1 -x[i] + carry; a[i] = z % BASE; carry = z / BASE; } } void sub (int x[], int y[], int a[]) { static int z[SIZE]; neg(y, z); add(x,y,a);
[3] 環境 [3.1] OS: XP [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年2月7日8:00まで のいずれか [5] その他の制限:(1)はx+(-y)=x-yという解答ではなく、どのような過程を経て その状態までたどり着いたかの説明が求められています。(2)はa / b;という答え では駄目だそうです。お願いします。
add(x, z, a);
除算はニュートン法か? divide and correct は漏れがやるとニュートンより遅かったんだよなぁ…
すみません、以下の課題がどうにもお手あげです。どうかよろしくお願いします。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク) 氏名 性別 年齢 電話番号 メルアド Kinniku m 20 000-000 xxxx@xxxxxx Maccho f 21 111−111 xxxx@xxxxxx @このような一覧を5人程度作り印刷をせよ A氏名の頭文字を読み込み、該当する者のデータを印刷せよ [3] 環境 [3.1] OS: WindowsXP [3.2] 言語:C [4] 期限:明日まで お願いします
明日って土曜日?
>>891 (1)このプログラムでは配列をBASE進数、SIZE桁の符号なし数、最下位桁を添え字0として扱っている。
桁固定であふれたぶんを無視すれば、一般に、
・BASE進数のBASE-1の補数+1は、BASE進数のBASEの補数となる。
・BASE進数のBASEの補数を加算することは、減算に相当する。
ため、関数sub()は減算として動作する。
(2)遅い方法だが・・・
a.商=0
b.割られる数が割る数以上なら、割られる数から割る数を引き、商を+1する。割られる数が割る数未満になるまでbを繰り返す。
c.bから抜けた時点で商と余り(割られる数)が得られる。
>>895 (1)
#include <stdio.h>
int main(void) {int c; while ((c = getchar()) != EOF) { putchar(c); } return 0;}
(2)
#include <stdio.h>
int main(int argc, char *argv[]) {char line[1000]; if (argc != 2) exit(2); while (gets(line)) {if (argv[1][0] == line[0]) puts(line);} return 0;}
899 :
デフォルトの名無しさん :05/02/04 09:49:08
ブラウン運動を非整数階微積分するプログラムを作成したのですが、上手く動きません。どこがわるいのでしょうか?? 実行結果は数値を出し、エクセルでグラフ化しています。(window.hが使えないため) #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #define KMAX 100 #define XMAX 300 #define PI 3.14159265358979323846 double gar() {double r = 0.0; int i; for(i = 0; i < 10; i++){r += ((double)rand() / RAND_MAX) - 0.5;} return r;} int main(void) {int x, k; float d; scanf("%f",&d); double ek = PI * 2.0 * 0.7 / XMAX; double a = 5.0 – 2*d; double f[XMAX]; double g[KMAX]; srand((unsigned)time(NULL)); for(k = 1; k < KMAX; k++){ g[k]=pow(( ek * rk ),-a/2);} for(x = 0; x < XMAX; x++){ f[x] = 0.0; for(k = 1; k < KMAX; k++){ double kx = ek * rk * x; f[x] = f[x]+g[k]*(gar() * cos(kx) - gai() * sin(kx));} printf("%g\n",f[x]);} }
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #define KMAX 100 #define XMAX 300 ここがわるい
C++言語って何て読むんですか? しーぷらすぷらすげんご? しーだぶるぷらすげんご? それとも他に・・・
しーぷらすぷらすげんご
903 :
899 :05/02/04 10:25:54
>900さん なんで定義がわるいのですか?? どうか教えてください。
しーぷらぷら
コンパイルできないコードは実行できません
>>899 ――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
907 :
899 :05/02/04 10:45:45
>906 すいませんでした。 【質問テンプレ】 [1] フラクタル幾何学 [2] 長くて書けないので899を参照して下さい。 [3] [3.1] OS: windows [3.2] gcc [3.3] C言語 [4] 期限:2005年02月05日まで/無期限 です。 コンパイルはできるのですが、実行結果が違ってしまいます。 [5] windows.hが使えません。
>897 ありがとうございます!
期限:2005年02月05日まで/無期限 って何だ
>>907 未定義のシンボル rk(関数 main() )
未定義の関数 'gai' を呼び出した(関数 main() )
911 :
899,907 :05/02/04 11:14:21
>>910 すいません。移す時にミスをしました。
rk=k gai=garでした。
試行錯誤しているうちに変になってしまいました。
>>911 なんかバグだらけだから一度きちんとコンパイルできたものをアップローダに上げない?
Typoをいちいち修正するのめんどくさいよ。
913 :
ホルモン :05/02/04 15:16:16
[1] 授業単元:プログラミング [2] 問題文:商品が売れた年は商品の数が倍になります。そうでなかった年は商品の数が13個減ります。商品は1個から始まり、1年目で2個、2年目で4個、3年目で8個になりました。ある年でちょうど100個になりましたが、それは最も早くて何年目のことでしょう。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年2月9日17:00まで [5] その他の制限:2分木(線形リスト)を使うこと、途中経過も表示すること。
914 :
デフォルトの名無しさん :05/02/04 15:28:30
>>913 >2分木(線形リスト)
ってどういうことだ?
親が2つの子のポインタを持ってるってこと?
>>914 売れた場合と売れなかった場合ということだろう。
916 :
デフォルトの名無しさん :05/02/04 15:38:26
>>915 いや,それは分かるけど,
2分岐をリストで表現して良いことある?
配列でいんじゃねーの?
917 :
ホルモン :05/02/04 15:41:58
最短経路を求める問題なので二分木探索がいいようなのですが・・・
>>917 オレなら幅優先探索でいくけどな。
二分探索木はちょっと書くのがめんどくさい。
919 :
ぽろじょあ ◆niBmDfC40k :05/02/04 18:18:55
( .3.) ヌェー マルェー ぽろじょあの登場だYO 名前欄に「ぽろじょあ#ぽろっぽ」って書けば、キミも今日から ぽろじょあ◆niBmDfC40kだYO! *ぽろじょあ◆niBmDfC40kはみんなでコテハンだYO! *ぽろじょあ◆niBmDfC40kはいつだって全力投球かもYO!! *ぽろじょあ◆niBmDfC40kは共同体で連続体で群生体かもしれないYO *ぽろじょあ◆niBmDfC40kはみんななれるからイイぽろじょあばっかりだYO *ぽろじょあ◆niBmDfC40kは2ちゃんねるの人気者かもしれないYO *ぽろじょあ◆niBmDfC40kはエムエクース、ニーは分かるけど聞かないでYO!
>>913 #include <stdio.h>
int main(void)
{
printf(" 1年目 2\n");
printf(" 2年目 4\n");
/* ... */
printf("10年目 ... 100\n");
return 0;
}
マジメに2分木+幅優先ってゆーのわ・・・デモンストレーション用だわ・・・
配列に登録データをノードにすりゃ、出来るだろーけど、メンドイ。
総当たりでがん枯れ
アルファ・ベータ狩りまで期待していないw
手でも総当りできるっしょ・・・深さ10で答えでるし。
>>921 ゲーム探索木じゃねーってばよ。
>>922
[1] 授業単元:C言語 1.以下の仕様に基づいて,キューにデータ(頂点番号)を追加する関数 void enqueue(int dt) を定義せよ. (必要に応じて,ヘッダー・ファイルをインクルードすること.) * 関数名:enqueue * 仮引数int dt:キューに追加するデータとして,int型のデータ(頂点番号)を受け取る. * 戻り値:なし. * 機能:int型のデータ(頂点番号)を追加・取り出しできるキューに,頂点番号を追加する. 仮引数として受け取ったint型のdtをメンバNumの値としてもつ NODE型のノードを,連結リストの先頭ノードとして追加すること. また,キューの先頭ノードを指すポインタとして, 以下のグローバル変数を使用すること(必要であれば初期化すること). NODE *q_head; 2.以下の仕様に基づいて,キューからデータ(頂点番号)を取り出す関数 int dequeue() を定義せよ(必要に応じて,ヘッダー・ファイルをインクルードすること.). * 関数名: dequeue * 仮引数:なし. * 戻り値 (int型):キューのデータ構造に基づいて取り出されるint型のデータ(頂点番号) ※キューにデータがない場合,他の関数および機能の実行に影響のない戻り値を返すこと. * 機能:呼び出し側にキューから取り出したデータ(頂点番号(int型))を返す. 上記のvoid enqueue(int dt)のデータ構造に基づいて,連結リストの操作をおこない, 末尾ノード(ノードがひとつの場合は先頭ノード)を取り出すこと. 提出期限は明日月曜までです。よろしくお願いします
明日月曜日じゃない、月曜までです;;
で、その場合、デスプレースめんと許すか?
>>924 #include <stdio.h>
typedef struct NODE NODE;
struct NODE { int Num; NODE *next; };
NODE *q_head = NULL;
void enqueue(int dt) {
NODE *p = (NODE *) malloc(sizeof(*p));
if (p == NULL) exit(2);
p->Num = dt;
p->next = q_head;
q_head = p;
}
int dequeue(void) {
NODE *p, **prev;
int dt;
if (q_head == NULL) return 0;
for (prev = &q_head, p = q_head; *p; prev = &p->next; p = p->next) ;
*prev = NULL;
dt = p->Num;
free(p);
return dt;
}
928 :
質問 :05/02/05 01:25:30
[1] 授業単元: OS [2] 問題文(含コード&リンク): ユーザーからコマンドプロンプトの入力を求めてそれを実行する、という部分なのですが、 なにやら昔にやった覚えがあるのですがどうしても思い出せません。 例"copy initial destination"のように、ユーザーがEnterを入力するまでのラインを受け取り、 ソレを"copy","initial","destination"などの各個の文字列として保存したいのです。 よろしくお願いします [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ(バージョン): G++ [3.3] 言語:できればCでお願いします。 [4] 期限:2004年2月7日まで [5] その他の制限:
あらま、簡単な たん、 FOR EACH ARGUMENTO DO PRINNT LN;
931 :
928 :05/02/05 01:58:37
あーそうだ、strtokでした。 1年触んないとすっかり忘れるモンですね。 ありがとうございました。
932 :
ホルモン :05/02/05 09:33:12
913なんですが、線形リストを使うのが条件なので線形リストを使ったプログラムでぜひお願いします。
933 :
デフォルトの名無しさん :05/02/05 14:05:41
>2分木(線形リスト) ってどういうことだ?
おまいらどうして期限ギリギリになって出してくるんだ? どうせ丸投げするんだったら、もっと早く出してこいよ。
出された日にここへ書き込む俺を見習え
そうだ。どうせ無能なんだから、935みたいに自分の能力に 見切りを付けて即日に出せ。935を見習え。
自我自賛?
いや皮肉
どうせ釣りじゃないのか?
よろしくお願いします。
専門学校の住所録作成の課題です。
友人に助けてもらいながら進めていたのですが、行き詰まってしまいました。
[1] 授業単元:プログラミング基礎
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm no184 9641のソースです。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):BorlandC++
[3.3] 言語:C
[4] 期限:2005年2月13日まで
[5] その他の制限:特になし。
住所録の機能のうち検索、削除、追加、全表示はなんとかできたのですが、
ファイルを使った関数saveとloadが作れないでいます。
ソースの中では{未完}と書いてあります。
講師にヒントとしてfwrite関数を使うよう言われているんですが、イマイチうまくいきません。
ファイルに書き込むsave関数と読み込みのload関数を作っていただきたいです。
よろしくお願いします。
ある程度考えたが、出来そうにないと悟ってここに来る奴 何もせず、出されたその日にここに来る奴 直前まで考えたが、結局出来ずにここに来る奴 直前まで何もせず、前日辺りに焦ってここに来る奴 下に行くほど救いようが無い
>>940 問題文&ソースを張ってあるURLを出せよ
一応番号は書かれているが、なんでわざわざ答える側がソースを探しに行かにゃならんのだ
944 :
デフォルトの名無しさん :05/02/05 20:24:40
この程度ならテキストにまるまる載ってそうだな。
>>940 int save(Address *ap, int cnt)
{
FILE *fp = fopen("data.bin", "rb");
if (fp == NULL) {
return 0;
}
return write(ap, sizeof(*ap), cnt, fp);
}
int load(Address *ap, int cnt)
{
FILE *fp = fopen("data.bin", "rb");
if (fp == NULL) {
return cnt;
}
return fread(ap, sizeof(*ap), cnt, fp);
}
/* バイナリファイルにする必然性を感じられないのでテキストファイルとして扱う。 */ int save(Address * ap, int cnt) { int ic; FILE * fp = fopen("住所録.txt", "w"); for (ic = 0; ic < cnt; ++ic) { fprintf(fp, "%s\n%s\n%s\n", ap[ic].Add, ap[ic].Name, ap[ic].Tel); } fclose(fp); return cnt; } int load(Address * ap, int) { FILE * fp = fopen("住所録.txt", "r"); for (cnt = 0; fscanf(fp, "%50[^\n]%20[^\n]%10[^\n]", ap[ic].Add, ap[ic].Name, ap[ic].Tel) == 3; ++cnt) { } fclose(fp); return cnt; } /* そうそう、仕様が明示されていないのでファイル名は固定、エラーチェックも割愛。 */
>>945 ・関数名のtype。
・ファイルをクローズしていないから繰り返し操作するといずれ破綻する。
・書き込み失敗時にデータが破棄されてしまうのは如何なものか。
・最大件数くらいチェックしたら?
>>946 ・全くエラーチェックしないというのも剛毅だw
・出力は兎も角、入力をそこまでこらなくてもいいのでは?
突っ込みだけですか
2番目は ・出来るけど面倒なだけ ・出来ないと分かってるから にもよるんじゃない
だめな奴は何をやっても
てやつにあてはめると
>>941 でいいような気もするが
>>943 >自分用にコメントもいれています。
いくつか嘘のコメントが入っていますね。
最悪のパターンですな
無いほうがマシ
さあ? コンパイルすらしとらんで、直にここに書いてるから。
>>947 いーかげんなんで、直す気はないが、指摘してくれるのは、利用者のためにいいことです。
まーダレか直してくれるっしょ。たたき台程度よ。おいらのは。
>>945-947 ありがとうございます。
946さんのやりかたを参考に進めていってます。
とりあえず、コンパイルはできましたがDOS窓からload関数を実行しようとすると
強制終了してしますので、ソースをよく読んでみます。
>>952 探してみます。
コメントのうち自分で書いたのは2割程度なので・・・。
そーいや、ぼるじょあになってから、足が遠のいたんだよなー。
ぼるじょあ止めろよ。 C/C++の宿題を片付けます でいいじゃないか。
実際ぼるじょあでてこねーし
965 :
デフォルトの名無しさん :05/02/06 01:59:51
次スレはどうすんのかね
ぼるじょあ!ぼるじょあ!
皆さんの助けでなんとかで出来上がりました。 ありがとうございました。
スレ立ててきます しばらくお待ちを
ほげほげ
んで、未解決の問題ってば? それとか、月曜までの宿題とかは? 夜駆け込みだと、手伝えないぞ。
プログラミング入門のテスト問題。 文字列abcdefを配列に入力し、配列の中で小文字を大文字に変換した後、 ABCDEFと出力するプログラムを作成せよ。a=97,A=65である。 よろしくお願いします。
>>972 int main () {
int i;
char str[] = "abcdef";
for (i = 0; i < sizeof(str)/sizeof(char); ++i)
switch (str[i]) {
case 'a':
str[i] = 'A';
break;
case 'b':
str[i] = 'B';
break;
case 'c':
str[i] = 'C';
break;
case 'd':
str[i] = 'D';
break;
case 'e':
str[i] = 'E';
break;
case 'f':
str[i] = 'F';
break;
}
printf("%s\n", str);
}
a=97って…十進数だな
#include <stdio.h> int main() { int i; char str[] = "abcdef"; for(i = 0; i < sizeof(str); i++) str[i] -= 97 - 65; puts(str); return 0; }
>>975 sizeofじゃなくてstrlenね
あとstr[i] -= 97 - 65よりも
stri[i] = str[i] - 'a' + 'A'のほうが良いよ
char *strtoupper(char *s) { char *ret = s; while (*s) { if (*s >= 'a' && *s <= 'z') *s += 'A' - 'a'; s++; } return ret; } うーん。入力部は任せるとして。ASCIIコードを想定。(SJISやJISを入れるとイカレル)
答えて下さった方ありがとうございます。 自分はこんな感じで書いてしまいました。 #include <stdio.h> main() { char s[7]="abcdef"; int i,d=-32; for(i=0;i<=5;i++) { s[i]=s[i]+d; printf("%c",s[i]); } }
その方が便利だから
>>949 自分の能力では無理だと気づくのが遅すぎる人は論外かと思う
それぞれ担当部分を分けているとき、直前になって「全然できていない」とか言われるとこっちにしわ寄せが来る
もうちょい早く言ってくれれば、大まかな部分だけを余裕のある奴が手伝って残りを任せるのに
まあそういうことが続くと、手伝う側の人間が潰れてさらに苦しくなるわけだが
EBCDIC
>>979 >>980 氏の言うように、便利だから。
char s[] = "abc";
printf("%s\n", strtoupper(s));
とゆーふーに、使えるんで、便利っしょ。
標準ライブラリのstr...系はそういうふうに考えられて作ってあるよん。
と
>>984 が今日覚えたての知識を披露しております。
986 :
デフォルトの名無しさん :05/02/07 10:43:41
Emotional age!
埋めよう。 今日の名言 寝言は寝て言え
埋めよう。 今日二回目の名言 A「おまえの好きなものってなに?」 B「んっ?俺?え〜っと 女のわがまま かなっ」
静かなる梅
990
991
1000
993
994 :
デフォルトの名無しさん :05/02/08 09:08:27
梅
995 :
デフォルトの名無しさん :05/02/08 09:09:21
梅
もうそろそろいいか 埋めよう
997
998 :
デフォルトの名無しさん :05/02/08 09:10:24
梅
999 :
デフォルトの名無しさん :05/02/08 09:11:04
↓↓↓↓↓↓↓↓↓↓
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。