∩___∩ |ノ⌒ ⌒ ヽ / ●) ●) | オツカレチャ━━━━━| ( _●_) ミ━━━━━ン♪ 彡、 |∪| 、` / ヽノ ヽ / 人 \\ 彡 ⊂´_/ ) ヽ__`⊃ / 人 ( (_ノ (_)
>>1 前スレのアドレス間違ってるぞクズ
低脳が粋がって新スレ立てるなボケ
半年ロムってろゆとり
Cで任意の4つの数字を入力して四則演算(カッコ無し) で10にするプログラム教えてください
おしっこ漏れちゃったぉ。
前スレ
>>990 >>992 レスありがとうございます
申し訳ありませんマイコンにも種類があるのですね
ハードウェアマニュアルによるとH8/3664グループと書かれています
たしかH8/3664Nだと思われます
>>8 scanf("%d %d %d %d",a,b,c,d);
printf("%d+%d+%d+%d+%d\n",a,b,c,d,10-(a+b+c+d));
>>12 2 4 6 8 → 2+4-6+8=10
みたいな意味じゃないの?
四則計算も出来ないとは…orz 2*4-6+8=10だ。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):入力した文字列(アルファベット)の中に、指定したもじがいくつあるかカウントするプログラムを作成せよ。カウントした値を表示させること。なおカウントする文字列が該当しない場合は、0と表示する。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2008年1月16日10時まで [5] その他の制限:特にないです どうかよろしくお願いします
http://pc11.2ch.net/test/read.cgi/tech/1199515728/576 狭義対角優位って |a_ii| >= 培aij| (j!=i) でよかったっけ
// diagonally dominat -> 1, else -> 0
int is_dd_sq_matrix( double * mat, int n ) {
int i, j;;
if ( mat == 0 || n < 1 ) return 0;
for ( i = 0; i < n; ++i ) {
double a = fabs( mat[ i * n + i ] );
for ( j = 0; j < n; ++j ) a -= fabs( mat[ i * n + j ] );
if ( a < 0 ) return 0;
}
return 1;
}
int main(){
int n = 10;
double * mat = malloc( sizeof(double)*n*n);
if ( mat ) { int i;for(i=0;i<n*n;++i) mat[ i ] = rand()/(double)RAND_MAX;
printf( "mat is%sdd\n", is_dd_sq_matrix(mat,n) ? " " : " not "); free(mat);}
return 0;}
http://pc11.2ch.net/test/read.cgi/tech/1199515728/985 もっときれいな方法がありそうだが
#include <stdio.h>
#include <math.h>
typedef unsigned int uint;
int main( int argc, char ** args ){
uint a, b, ma, mb;
double dif = 4., l = 3., u = 4.;
for ( b = 1; b < (0xFFFFFFFF / 3); ++b ){
for ( a = (uint)(b * l - 1); a < (uint)( b * u + 1 ); ++a ){
if ( dif > fabs( M_PI - (double)a / b ) ) {
ma = a; mb = b;
dif = fabs( M_PI - (double)a / b );
l = M_PI - dif; u = M_PI + dif;
printf ( "a:%u, b:%u, a/b:%.20lf, dif:%.20lf\n", a, b, (double)a/b, dif );
}
}
}
printf ( "a:%u, b:%u, a/b:%.20lf, dif:%.20lf\n", ma, mb, (double)ma/mb, dif );
return 0;
}
>>17 #include <stdio.h>
int StrCount(char *str,int chr)
//戻り値:カウント値
//str:文字列
//chr:カウントする文字
{
int result;
result=0;
while(*str)
{
if(*str==chr)result++;
str++;
}
return result;
}
int main(void)
{
char str[1024];int count;int chr;
printf("文字列を入力してください。");gets(str);
printf("カウントする文字を入力してください。");chr=getc();
count=StrCount(str,chr);
printf("%d個見つかりました。\n",count);
return 0;
}
22 :
デフォルトの名無しさん :2008/01/15(火) 09:27:39
[1] 授業単元:プログラミング入門 [2] 問題文(含コード&リンク): 0がでる確率40%、1〜50がでる確率10%、51〜100がでる確率10%、101〜150がでる確率10% 151〜200がでる確率10%、201以上がでる確率20% 上記の条件で乱数を1000個発生させるプログラムを作成しなさい。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2008年1月16日12時 [5] その他の制限:特にないです よろしくお願いします
23 :
8 :2008/01/15(火) 09:35:42
>14 それです!良かったら教えてください。unixのgccです。
>>22 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, r;
srand((unsigned int)time(0));
for(i=0;i<1000;i++)
{
r = (int)((rand() / ((double)RAND_MAX+1.0f)) * 10);
if( r < 6 )
{
r *= 50;
r += (int)((rand() / ((double)RAND_MAX+1.0f)) * 49)+1;
}
else r = 0;
printf("%d\n", r);
}
return 0;
}
遅刻しそうであせって作ったので間違ってるかも。確認は自分でヨロ
27 :
デフォルトの名無しさん :2008/01/15(火) 10:50:19
http://pc11.2ch.net/test/read.cgi/tech/1199515728/985 これじゃだめかな?
#include <stdio.h>
#include <math.h>
int main(void)
{
unsigned int A, B = 1;
A = B * (unsigned int)M_PI;
while (A <= 0xffffffff) {
printf("A = %d, B = %d\n", A, B);
B++;
A = B * (unsigned int)M_PI;
}
return 0;
}
[1] 授業単元: 基礎プログラミング [2] 問題文(含コード&リンク): 実数aと非負整数nを読み込みaのn乗を計算して出力するプログラミングを作りなさい。 実数aと非負整数nに対して、aのn乗を計算する再帰関数double power(double a,int n)を必ず 作成すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:1月19日まで [5] その他の制限: とりあえず再帰関数を使う。
29 :
デフォルトの名無しさん :2008/01/15(火) 11:17:55
#include <stdio.h> #include <malloc.h> #define buffer_size 10 int main(int argc ,char *argv[]) {FILE *p; char buffer[buffer_size]; if(argv[1]==0){ printf("ファイル名を入力してください\n"); scanf("%s",&argv[1]); }else if(argv[1]==0){ printf("プログラムを終了します。");return 0; } p=(FILE *)malloc(sizeof(FILE)); if(p == 0){ perror("領域確保に失敗");return 0; } p=fopen(argv[1],"r"); if(p){ while(fgets(buffer,buffer_size,p)){ printf("%s",buffer); } } if(!p){ printf("文字列を書き込んでください\n"); scanf("%s",buffer); p=fopen(argv[1],"w"); if(fprintf(p,buffer)==0){ perror("終了します。\n");return 0;} }; fclose(p);free(p);return 0; } うまい下手はさておいてこのプログラムの間違いを教えてください。コマンド未入力の場合、既存ファイルがあるにも関らず入力を促す。セグメンテーション、アボートエラーがでます。よろしくお願いします。
30 :
デフォルトの名無しさん :2008/01/15(火) 11:21:48
>>29 >if(argv[1]==0){
>printf("ファイル名を入力してください\n");
>scanf("%s",&argv[1]);
>}else if(argv[1]==0){
>printf("プログラムを終了します。");return 0;
>}
・argv[1] == 0 じゃなくて argc == 0
・if(argv[1]==0) ・・・ else if(argv[1]==0)
↑ねーよwwww
>>29-30 スレ違い。
一応間違いを以下に指摘。
# 詳細は、初心者スレなどで
--
#include <malloc.h>
scanf("%s",&argv[1]);
p=(FILE *)malloc(sizeof(FILE));
--以下省略
前スレ870です 多少なら締め切りをオーバーしてもOKなので、今からでもどなたか解答をお願いできますでしょうか
>>28 #include <stdio.h>
double power(double a,int n)
{
return n ? a*power(a,n-1):1;
}
int main(void)
{
double a;
int n;
printf("実数a入力>"); scanf("%lf",&a);
do{
printf("非負整数n入力>"); scanf("%d",&n);
}while(n<0);
printf("%.2lf\n",power(a,n));
return 0;
}
3つのポインタを持つということか……
>>34 二分ではなく、それぞれのノードについて任意の数(0〜n個)のポインタを持つ木を作るとの事です
頭の中ではなんとなく分かっているのですが、いざプログラムに直そうとするとチンプンカンプンで……
>>36 締め切りを考えると明日の午前中がデッドラインかと
連レスで申し訳ないです
>>32 親、子、隣の3つのポインタを持つわけではないの?
普通配列で持ったりはしない気がするけど。
あと、削除が出来るようなことが書いてあるけれど、コマンドの一覧にはないよね?
どうなってるのん?
[1] 授業単元: コンピュータグラフィックス [2] 問題文: GPSから取得された位置座標をカメラ位置,ジャイロから得られた角度(俯角)をカメラの傾きとし OpenGLで3D空間内にカメラ視点を設定し,空間中のオブジェクト(任意の座標上)を眺めることの 出来るプログラムを作成せよ. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: どちらでも可 [4] 期限: ([2008年1月16日12:00まで] [5] その他の制限: OpenGLを使用 OpenGLスレもありましたが,今期限ギリギリで切羽詰っているのでこちらに書かせて頂きました. プログラムも2ちゃんねるもまだまだ初心者なので何か失礼がありましたら,すみません. 自分は視点の設定が良くわかっていません. gluLookAt()や透視投影の仕組みの理解不足で,位置座標やカメラ角度をどの引数に代入してやるか などが頭の中でごちゃごちゃになります. GPSはWGS84で緯度+35.658632,経度+139.745411のようなデータで得られます. どのようにxyz空間座標に変換すればよいかなどもご指導頂ければ助かります. OpenGLに精通された方がいらっしゃれば,どうぞよろしくお願いいたします. スレ違いならすみません.
>>39 ノードの持つポインタは
ルート:子を指すポインタのみ
ノード:親を指すポインタ、子を指すポインタ で進めます。兄弟姉妹に移動する場合、一度親を経由して移動します
要素の削除は「追加出来れば良い」(加点する)課題らしいので、追加して頂かなくて結構です
わかりにくくてすいませんでした
>>25 いまさらだけど50*10の乱数つくって
50*6以上を0にすればよかっただけの気がする
>>32 とりあえずぱっとみた感じだけど
・子を追加する関数add_child
・親に戻る関数back_parent
・子を検索して表示する関数search_print_node
をそれぞれ作って、コマンド入力するごとに現在注目しているノードを指すポインタのcurを表示すれば良いのかな?
子を消すなら、関数del_childも必要だけど
>>32 加点ということなんで、削除込みでつくってみるわい。
47 :
44 :2008/01/15(火) 15:13:32
48 :
デフォルトの名無しさん :2008/01/15(火) 15:50:19
キーボードから入力された文字列に指定した文字が何個 含まれているか表示するプログラムを作りなさい。 動作例: キーから文字を数文字入力してください= alpha-dog 調べる文字を入力してください= a 入力された文字列の中に a は、2 個ありました。 誰か教えてくださいぃぃ
//
>>48 #include <cstdio>
int main()
{
std::puts(
"キーから文字を数文字入力してください= alpha-dog\n\n"
"調べる文字を入力してください= a\n\n"
"入力された文字列の中に a は、2 個ありました。\n"
);
return 0;
}
51 :
>>48 :2008/01/15(火) 16:29:28
52 :
デフォルトの名無しさん :2008/01/15(火) 16:32:27
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): キーボードから1行ずつ入力を受け取り、アルファベットである場合は13字ずつずらす暗号文の作成。 (A→N、B→O、(中略)、M→Z、N→A、(中略)、Y→L、Z→M) アルファベット以外はそのまま表示するので「abc500」と入力された場合「nop500」と表示される。 通常の文を打てば暗号の文になり暗号文を打てば通常文に戻る、ということ。 また10行分入力を受けたらプログラムを終了し、一行は80字でよい。 なお、プログラム中に最低1つのmain()関数以外の関数を定義すること。 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VisualStudio.NET2003(これでいいのか不安だけど) [3.3] 言語: C [4] 期限: 今週中(2008年1月19日)まで [5] その他の制限: 文字列・文字コードは習得。main以外の関数は授業内ではdouble distanceとmyislowerとintmax、intmin、dumb程度です。これが関数でいいのかどうかは正直よくわかりませんが…orz どうかご教授よろしくお願いいたします
53 :
デフォルトの名無しさん :2008/01/15(火) 16:33:46
printfとかつかいますよね?
>>51 50はどう見ても、50の通り動作するだろ。
//
>>52 #include <stdio.h>
#include <ctype.h>
#include <string.h>
void crypt(char * foo)
{
static char const inputLetters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
static char const outputLetters[] = "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm";
for (int ic = 0; foo[ic] != '\0'; ++ic) {
int ch = foo[ic];
char * pos = strchr(inputLetters, ch);
if (pos != NULL) {
foo[ic] = outputLetters[pos - inputLetters];
}
}
}
int main()
{
char buf[81];
for (int ic = 0; ic < 10 && fgets(buf, sizeof(buf), stdin) != NULL; ++ic) {
crypt(buf);
fputs(buf, stdout);
}
return 0;
}
56 :
デフォルトの名無しさん :2008/01/15(火) 17:10:45
そのまま貼り付ければ動作しますか?
58 :
52 :2008/01/15(火) 17:14:38
早速の返答ありがとうございます
>>56 の行動をしてしまった…orz
エラーが出る部分はどう対処すればいいでしょうか?
質問ばかりで申し訳ありません。。
1-1/2+1/3-1/4+1/5-1/6... の値を有効数字6桁で求めるプログラムを作れ。 よろしくおねがいします
>>58 二箇所のfor (int ic... を、int ic; for (ic... に書き換えればOK。
>>59 int main(int argc, char* argv[])
{
printf("%f\n", log(2.0));
return 0;
}
>>62 さっそくありがとうございます。
でも、任意の項でやめるときはどうしたらいいのでしょうか?
>>63 テンプレ守ってないのがすごく気に入らないけど暇だったので。
#include <stdio.h>
int main(void)
{
double answer = 0;
int n;
int i;
printf("input N >>"); scanf("%d", &n);
for (i = 1; i <= n; ++i)
answer += (i & 1)? 1.0 / i: -1.0 / i;
printf("answer: %lf\n", answer);
return 0;
}
>>65 たびたびすみません、
三項演算子を使わない方法はありますか?
68 :
デフォルトの名無しさん :2008/01/15(火) 19:20:32
じゃんけん自重しろ
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>69 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
72 :
デフォルトの名無しさん :2008/01/15(火) 19:31:35
>>69 ホントにあんたって人は一人じゃ何にもできないんだから!
#include <stdio.h>
int main(void)
{
double answer = 0;
int n;
int i;
printf("input N >>"); scanf("%d", &n);
for (i = 1; i <= n; ++i) {
/* answer += (i & 1)? 1.0 / i: -1.0 / i; */
if (i % 2 != 0) /* 奇数項は足し算 */
answer = answer + 1.0 / i;
else /* 偶数項は引き算 */
answer = answer - 1.0 / i;
}
printf("answer: %lf\n", answer);
return 0;
}
>>72 ありがとうございます
でもif分を使わなくてもできました!!
for(i=1;i<=n;i+=2)answer+=1.0/i;
for(i=2;i<=n;i+=2)answer-=1.0/i;
でいいんですかね?
ツンデレVSヤンデレ
75 :
デフォルトの名無しさん :2008/01/15(火) 20:18:23
76 :
デフォルトの名無しさん :2008/01/15(火) 20:21:52
>>75 ごめんクロック周波数20MHzで作ってる
周波数違うと一部違うから、わかんなきゃ言ってくれ
あとヘッダが3694になってるけどI2C使ってなきゃ3664でも動く
77 :
デフォルトの名無しさん :2008/01/15(火) 20:44:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 下のリンク先のプログラムは年月日の差を求めるプログラムなのですが、
・2つの入力年月日を実行時にキーボードから入力させるか
・2つの入力年月日をファイルから与えるか
・2つの入力年月日をコマンドライン引数として与える
この3つ条件のどれか1つを追加したプログラムに書き直したい。
プログラム:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5780.txt [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: ([2008年1月16日12:00まで
[5] その他の制限:できれば3つの条件のプログラムをそれぞれ教えて頂けたら助かります。
1つでもかまいません。宜しくお願いいたします。
78 :
52 :2008/01/15(火) 22:00:42
>>60 親切にありがとうございます。助かりました。
79 :
デフォルトの名無しさん :2008/01/15(火) 22:05:18
[1] 授業単元:プログラミング [2] 問題文:物理プログラミングをせよ ウィンドウズアプリケーションで作成せよ 物: 正四角形(2次元)と地面を作る 地面の動き: 方後キーの←→でその方向に傾く 正四角形の動き: 地面に落ちたり 地面が傾いたらすべるようにする なおDxLibを使うこと [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c [4] 期限:2008年1月18日 [5] その他の制限:期日しかいのでよろしくおねがいします お願いいたします
>>79 DxLib + gcc がしかいだよなぁ
82 :
デフォルトの名無しさん :2008/01/15(火) 22:18:07
>>69 えー((+_+))
お願いします(-_-メ)
83 :
79 :2008/01/15(火) 22:45:21
>>80 すみません修正いたします
期日は無期ですよろしくお願いいたします
>>79 gccでDxLib使うってからには、ライブラリのビルドは出来てるんだよな?
86 :
デフォルトの名無しさん :2008/01/15(火) 23:09:28
[1] 授業単元:プログラミング技術 [2] 問題文(含コード&リンク): ファイルに一行にひとつずつ整数が書いてあるとする。このファイルを コマンドラインで指定して、リストに入力するプログラムを書け。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:1月22日 [5] その他の制限: よろしくおねがいします
>>85 俺も気になったんでググってみると、DxLibは一応Cygwin or MinGWで使えるらしい
但し、関数ポインタを一々DLLから取ってきて使う必要があるらしく煩雑
もともとVC++/BCC用なんだからgcc前提でDxLibを強要する出題内容はセンスを疑うわな
宿題出されたヤツのやる気を削ぐようなこと言って申し訳ないが
>>40 これ表示するオブジェクトとかどうすんの?
球体に世界地図のテクスチャでも貼って、地球儀作って表示させんのかな
そんならカメラより地球儀動かした方が簡単な気がするけど
>>46 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <regex.h>
int main(int argc, char *argv[])
{
regex_t pat;
int i, err;
char buf[1024];
if(argc < 3)
return fprintf(stderr, "usage : %s pattern filename\n", argv[0]), 1;
if((err = regcomp(&pat, argv[1], REG_EXTENDED | REG_NOSUB | REG_NEWLINE)) != 0){
regerror(err, &pat, buf, sizeof(buf));
return fputs(buf, stderr), 1;
}
for(i = 2; i < argc; i++){
FILE *fp;
if((fp = fopen(argv[i], "r")) == NULL)
return perror(argv[i]), 1;
while(fgets(buf, sizeof(buf), fp))
if(!regexec(&pat, buf, 0, NULL, 0))
fputs(buf, stderr);
fclose(fp);
}
regfree(&pat);
return 0;
}
>>88 オブジェクトは,建造物を3Dに起こしたもので,
x-z平面を地面としてy軸方向に高さを伸ばしたような物体を想定しています!
GPSから得られた位置をもとに, その建物オブジェクトを眺めた画像を保存し,
更に, GPS位置からある直線上(撮影方向に対する法線)にカメラ視点をズラして,
再び, オブジェクトを眺めた画像を得て…と繰り返して,
複数の画像を得ることが目的です!
言葉足らずですみません!
>>45 >>47 お二方とも、本当にありがとうございます
いつかは自分も宿題を手伝う側になりたいと思いつつ、精進して参ります
>>77 > ・2つの入力年月日を実行時にキーボードから入力させるか
もう実装されてね?
>>48 #include <stdio.h>
int kensaku(char *data , char target)
{
int count;
for(count=0;*data!='\0';*data++){ *data==target ? count++:1; }
return count;
}
int main(void)
{
int i;
char input[100];
char target[100];
printf("キーから文字を数文字入力してください="); scanf("%s",input);
printf("調べる文字を入力してください="); scanf("%s",target);
for(i=0;target[i]!='\0';i++){
printf("入力された文字列の中に %c は、%d 個ありました。\n",target[i],kensaku(input,target[i]));
}
printf("\n何か入力をしてください\n"); scanf("%s",input);
return 0;
}
95 :
77 :2008/01/16(水) 00:35:24
>>93 さん
すいませんそうですね!誤りです。
残りの条件の方でできればお願いいたします。
>>77 int m22 = 1, d22 = 1;の下からy_count = year_prev(&y1, &y2);上までを以下に書き換えでいかがでしょう
char buf[100];
FILE *fp;
if (argc == 7) {
/* 引数の時
./hoge.exe y1 m1 d1 y2 m2 d2 */
y1 = atoi(argv[1]);
m1 = atoi(argv[2]);
d1 = atoi(argv[3]);
y2 = atoi(argv[4]);
m2 = atoi(argv[5]);
d2 = atoi(argv[6]);
show_date(y1, m1, d1);
show_date(y2, m2, d2);
} else if (argc == 2) {
/* ファイルのとき
ファイルの中身はテキストでy1 m1 d1 y2 m2 d2 */
fp = fopen(argv[1], "r");
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d %d %d %d %d %d", &y1, &m1, &d1, &y2, &m2, &d2);
show_date(y1, m1, d1);
show_date(y2, m2, d2);
fclose(fp);
}else {
input_date(&y1, &m1, &d1);
show_date(y1, m1, d1);
input_date(&y2, &m2, &d2);
show_date(y2, m2, d2);
}
http://pc11.2ch.net/test/read.cgi/tech/1199515728/988 前スレ988です
>>75 遅くなりすみませんレスありがとうございます
情報の後だしかつ、わざわざ作っていただき申し訳ないのですが
学習範囲外技術を含んだ非常に高度なプログラムなのでバレてしまうかもしれません
またルネサスのヘッドファイルだと問題あるのかどうかもよく分かりません
クロックも20MHzだと問題あるのでしょうか?
本日(昨日?)学校より今までに学習しそれを利用して製作した
今までのプログラムをアップしておきました
ろだ、の5781.zipです
後出しかつせかっく作っていただいたのに文句ばかりつけて
本当に申し訳ありませんがアップしたプログラムの組み合わせや応用で
何かオリジナルの課題は作成可能でしょうか?
アップしたプログラムと同じや似た内容だとはねられる可能性があるので
自分なりにも考えていますが現状ではお手上げです
時間も少なく申し訳ないですが、どうかよろしくお願いします。
98 :
77 :2008/01/16(水) 02:11:06
>>96 さん
引数でもファイルからでもプログラムの実行が行えました!
教えていただいたプログラムは他の課題でも参考に使えそうです。
本当にありがとうございました!
99 :
75 :2008/01/16(水) 12:00:27
>>97 課題サンプル見たよ
3664.hのヘッダは多分ルネサスから持ってきたもんだと思うから大丈夫
アップしたプログラムと課題には特に差はなかったです
課題のものが作れるならアップしたものも十分作れる…はず
日中時間ないんで夜になるけど、課題に合わせて修正してみるよ
アップしたプログラムの動作はLEDが以下のように並んでるとして、
常に一つだけ点灯するもの
○○○● SW2押す→ ○○●○ SW2押す→ ○●○○ SW1押す→ ○○●○
上のようにSWが押されると点灯しているLEDをずらしていくだけ
SWは一回押されたら一つLEDをずらす、SWを一回離してもう一回押さないと
動かないようにしてます、内容的にはこんなんでいいのかな
ちなみにクロック違うとタイマのカウント速度が違ってくるので
TV.TCORA = 156 とかやってる部分をクロックに合わせて変更する必要があります
3664だと多分16MHzだと思いますが、どうなってるでしょう
[1] 授業単元:プログラミング言語II [2] 問題文(含コード&リンク): ポインタ配列を用いて月の名前を英語名で静的変数に格納しなさい。 ポインタ配列を用いて各文字列を走査し、「r」が入っている月を求めなさい。 見つかった月の名前を表示しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008/01/16 24:00まで [5] その他の制限: 特になし 期限が今日まで申し訳ないですが、よろしくお願いします。
月って英語でlunaだっけ?と思った俺は負け組 orz
>>99 の優しさを独り占めにしたい。
>>100 #include <stdio.h>
int main(void)
{
char *month[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
int i;
char *p;
for(i = 0; i < sizeof(month)/sizeof(month[0]); i++){
for(p = month[i]; *p != '\0'; p++)
if(*p == 'r')
break;
if(*p != '\0')
puts(month[i]);
}
return 0;
}
sizeof(month)/sizeof(month[0])はたまたま動くのかな?(そんなら12にしないと駄目だけど)
動くのはたまたまじゃないが、要素数が分かってるからやる必要はないかもな。
配列の要素数を指定してないんだからsizeofの方が自然じゃね? *month[12]とかしてるなら12でもいいけど。
それだと文字数が12の予感
一度他の変数に限界値保存して比較したほうがいいな。 forループ抜けるまで変動はしないのだから、毎回sizeof2つ使って除算までしてたら無駄過ぎる。 あとbreakする前にputsすればいいところを、わざわざif文外に持ってくる理由も分からん。
static忘れてね?
忘れてた。
sizeof(array) / sizeof(* array)は(コンパイル時に確定するから)定数だよ。
>>99 レスありがとうございます
それで全然かまわないのでよろしくお願いします
お手数おかけし申し訳ありません
>>113 おいらもできた。マルチバイト文字セットをつかってくれ
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void) {
#define BUFSIZE 256
char buffer[BUFSIZE]; unsigned char val = 0; int bitpos, bitnum, i;
while (1) {
printf("\nBit number : 7 6 5 4 3 2 1 0\n" "Bit :");
for (i=7; i >=0 ; --i) printf( ((val >> i) & 1) ? " 1" : " 0");
while (1) {
printf("\n\ninput change bit : ");
fgets(buffer, BUFSIZE, stdin);
bitpos = atoi(buffer);
if (buffer[0] == '.') { return 0; }
else if (isdigit(buffer[0]) && (bitpos >= 0 && bitpos <= 7)) { break; }
puts("\nSorry. Input 0-7 number.\n" "(. is end)");
}
while(1) {
printf("\nSwitch on(1) or off(0) ? : ");
fgets(buffer, BUFSIZE, stdin);
bitnum = atoi(buffer);
if (isdigit(buffer[0]) && (bitnum == 0 || bitnum == 1)) {
val = (bitnum == 1) ? (val | (1 << bitpos)) : (val & ~(unsigned char)(1 << bitpos));
break;
}
puts("\nSorry. Input 0 or 1.");
} }
return 0;
}
116 :
114 :2008/01/16(水) 19:16:28
あ、バイトじゃなくてビットだから間違ってるorz
>>99 自分なりに調べてみましたが
仰られる通り
3664ではシステムクロック信号はΦ16MHzで
周波数16MHzでは1ステートは1/16MHz=0.0625μsになるようです
遅くなり申し訳ありませんがよろしければご参考ください
119 :
114 :2008/01/16(水) 19:37:29
#include <stdio.h> int main(void) { char buf[100], delim[] = "=)(+*-/."; char *p, *q; printf("入力 : "); fgets(buf, sizeof(buf), stdin); for (p = buf; *p != '\0'; p++) { for (q = delim; *q != *p && *q != '\0'; q++); if (*q) printf("\n%c\n", *p); else putchar(*p); } return 0; }
[1] 授業単元:プログラミング [2] 問題文: 番号(整数4桁)と氏名(文字型30バイト)から構成される構造体を定義し、データを入力してその内容を表示するプログラムを作成しなさい。 なお、プログラムの終了条件は、ゼロ以下の番号が入力された時点とする。 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語: C [4] 期限:1月23日 [5] その他の制限: よろしくお願いします。
#include <stdio.h> struct _data{ int number; char name[30]; }; int main() { int i, j, n; char buf[100]; struct _data data[100]; for (i = 0; i < 100; i++) { printf("number : "); fgets(buf, sizeof(buf), stdin); sscanf(buf, "%d", &n); if (n < 0) break; data[i].number = n; printf("name : "); fgets(buf, sizeof(buf), stdin); sscanf(buf, "%s", data[i].name); } for (j = 0; j < i; j++) printf("%d %s\n", data[j].number, data[j].name); return 0; } 配列でよかったのだろうか?
126 :
デフォルトの名無しさん :2008/01/16(水) 23:08:55
127 :
デフォルトの名無しさん :2008/01/16(水) 23:17:40
>>102 ありがとうございます!
おかげで助かりました。
>>121 #include<stdio.h>
int main(void){
char buf[100+1];
for(;;){
if(fscanf(stdin, "%100[A-Za-z0-9]", buf)!=1)
if(fscanf(stdin, "%1[(+*/.),-]", buf)!=1){
if(fscanf(stdin, "%1[\n]", buf)!=1) fprintf(stderr, "\nError: unexpected character.\n");
break;
}
puts(buf);
}
return 0;
}
130 :
デフォルトの名無しさん :2008/01/16(水) 23:55:12
ITEM *insert(ITEM **root, char*str) { ITEM *pos; ITEM *tmp; tmp = (ITEM *) *malloc(sizeof (ITEM));//領域取得 if(tmp == NULL){//取得領域失敗 return NULL; } //取得した領域の初期化 memset((void *)tmp, '\0', sizeof(ITEM)); strcpy(tmp -> str , str); //入力された文字列を領域に設定 //*rootに保存 if(*root == NULL){ //リストが空か? *root = tmp ; } else{//リストの末尾を探して追加 pos = *root; while(pos -> next != NULL){ //次はあるか? pos = pos -> next; } pos -> next = tmp; } return tmp; } 入力された文字列をリストに格納するプログラムの一部です。 しかしこれだと最後に入力した文字列が表示されなくて困っています。 おそらくこの部分に問題があると思うのですが、おかしい部分はあるでしょうか?
こういうのって再帰使って処理するほうが楽だと思うんだけど。 tmp->nextがNULLじゃ無いんじゃない?
NULLが0な処理系ならmemsetでNULLになってね? それより、俺は返り値の意味があるのかとかmallocの前の*は何なのかとか気になるけど。
134 :
デフォルトの名無しさん :2008/01/17(木) 01:11:41
>>132 指摘ありがとうございます。
tmp->nextがNULLじゃ無いんじゃない? ってのは
while(pos -> next != NULLのことでしょうか?
>>133 mallocの前の*は、単なる消し忘れでした。
>>127 ありがとうございます!
これからコンパイルして動作確認してみます
色々本当にありがとうございました
LEDを赤く光らせたり青く光らせたりすると面白そう
137 :
134 :2008/01/17(木) 01:41:51
すいません。 自己解決しました。 なんかホントに的外しな質問をしてしまいましたw
【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク):正数nとbを10進数としてキーボードから入力すると、 nをb進数で表示するプログラムを作成せよ。 実行例 24[enter] 8[enter] 24(10) = 30(8) [3] 環境 [3.1] OS:window [3.2] コンパイラ名とバージョン:BCC [3.3] 言語:C [4] 期限:1/17 [5] その他の制限:特にありません
b進数の範囲は?
>>138 #include<stdio.h>
const char *s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void conv(int n,int b){
if(n>0){
conv(n/b,b);
putchar(*(s+n%b));
}
}
int main(void){
int n,b;
scanf("%d",&n);
scanf("%d",&b);
printf("%d(10)=",n);
conv(n,b);
printf("(%d)\n",b);
return 0;
}
てきとー。おやすみなさい。
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク):文字列として入力した式(一行)を計算し、その値を表示するプログラム。 [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:Visual Studio 8 [3.3] 言語:C [4] 期限:1/18 [5] その他の制限:少なくとも2つの2桁の整数に対する計算(四則演算)ができること。 どうかよろしくお願いしますm( _ _ )m
[1] 授業単元:画像処理 [2] 問題文(含コード&リンク):円周上の点の複数の座標から円の中心(a,b)や半径rを求める [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 Express Edition [3.3] 言語: C++ [4] 期限: 無期限 [5] その他の制限: 特になし
>>145 100個ぐらいからです・・・。
まったくわからないんです。よろしくお願いします。。。
円を特定するには、一直線上にない異なる3点で必要十分じゃね?
148 :
144 :2008/01/17(木) 09:21:01
すいません。問題間違いました。 正しくは、100個の座標からそれが円であるかどうか(完璧にきれいな円でなくてもよい)を判定するプログラムの作成でした。 よろしくお願いします。。。
判定方法は提示してもらわんとねぇ。
>>149 すいません!ハフ変換を使って判定します。
色々と足りないところだらけで申し訳ありません。。。
151 :
デフォルトの名無しさん :2008/01/17(木) 12:52:31
[1] 授業単元: プログラミング入門 [2] 問題文 (1)走行距離10kmまでは基本料金の6000円。10kmを超えた場合は、超えた距離に対して1kmあたり50円が加算される。 (2)深夜料金10時以降5時までは最終的な料金を2割増しする20キロを超えると1割引とする。 (3)迎車を使用した場合は400円として(1)〜(3)を入力して料金を出力するプログラムを作れ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 Express Edition [3.3] 言語: C [4] 期限: 1月17日 [5] その他の制限:関数まで(初期の簡単なプログラムです)
152 :
デフォルトの名無しさん :2008/01/17(木) 12:53:06
151続き (1)までのプログラム #include<stdio.h> main() { int run,price; printf("走行距離(km)を入力せよ:"); scanf("%d",&run); if(run<=10) { printf("料金は6000円です\n"); } else { price=(run-10)*50+6000; printf("料金は%d円です\n",price); } } (2)と(3)お願いします。
「2割増しする20キロ」とか、「(1)〜(3)を入力」とか、随分ややこしいな。
154 :
デフォルトの名無しさん :2008/01/17(木) 13:19:22
最初に乗ったキロと深夜かどうかなどの入力をさせてやろうとしたんですが・・・。できなくてとりあえず(1)までやってみました。ややこしくてすいません。
落ち着け、>153は皮肉だ。 以下、問題を列挙 ・深夜料金の適用条件 例えば乗車時刻が21:59だったら? 或いは4:59だったら? ・迎車との関係 例えば呼んだのが21:59だったら? また、迎車時刻を指定されることはある? ・消費税の考慮 ・タクシー料金にしては論外に高い初乗り料金
156 :
デフォルトの名無しさん :2008/01/17(木) 13:39:10
>155 指摘ありがとうございます。 判定条件が指定されてないので、今回は乗車時刻が22時〜5時に一秒でもかかっていたら深夜料金として計算します。 迎車は有無のみで課金します。もし迎車を使用して深夜であれば最終的な料金は乗った距離の値段×深夜割増+迎車料金で出します。 消費税は考慮しません。確かに問題文法外な値段ですね^^;教授が意地悪なので・・・。 以上の点宜しくお願いします。
157 :
デフォルトの名無しさん :2008/01/17(木) 15:41:20
#include <stdio.h> #include <malloc.h> #define buffer_size 10 int main(int argc ,char *argv[]) { FILE *fp; fpos_t *start_fpos,*end_fpos; char *buffer; int n,option; option=getopt(argc,argv,"rw"); switch(option){ case 'w': fp=fopen(argv[1],"w"); buffer=(char *)malloc(buffer_size); printf("文字列を書き込んでください\n"); scanf("%s",buffer); fprintf(fp,buffer); free(buffer); break; } fclose(fp); return 0; } 指定したバッファサイズが入力文字数よりも小さい場合、 セグメンテーションエラーがでます。 #defineを変えないでmallocを使い書き加えるには何の関数を使えばいいですか? ヒントをくださいませんか?よろしくお願いします。
>>157 buffer=(char *)malloc(buffer_size*100);
159 :
デフォルトの名無しさん :2008/01/17(木) 15:57:02
[1] 授業単元: C言語入門 [2] 問題文 キーボードから入力された文字列に指定した文字が何個 含まれているか表示するプログラムを作りなさい。 動作例: キーから文字を数文字入力してください= alpha-dog 調べる文字を入力してください= a 入力された文字列の中に a は、2 個ありました。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 Express Edition [3.3] 言語: C [4] 期限: 1月17日 [5] その他の制限:
>>159 #include <stdio.h>
int main(void)
{
int i,num=0;
char str[100],ch;
printf("文字列を入力してください:");
gets(str);
printf("探す文字を入力してください:");
scanf("%c",&ch);
for(i = 0;str[i];i++)if(str[i]==ch)num++;
printf("%c は %d 個見つかりました",ch,num);
return 0;
}
161 :
157 :2008/01/17(木) 16:42:11
正確な文字数でメモリ確保する方法ないですか? ヒントください。
文字列が入力されるまで長さがわからないなら、事前にその文字数分確保する方法はないだろ。 多目に確保するのがどうしてもイヤならリストにでもしろよw
164 :
デフォルトの名無しさん :2008/01/17(木) 18:10:39
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):整数をm個入力してソートし、その後(2分)検索をn回行うプログラムを作りなさい(mとnは入力して決める)。ただし、できるだけポインタを利用した関数を作成して用いなさい。 [3] 環境 [3.1] OS: (Windows Vista) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C) [4] 期限: [2008年1月18日12:00まで] [5] その他の制限: お願いします。
165 :
デフォルトの名無しさん :2008/01/17(木) 18:18:26
>>161 多めに確保して、改めてmallocで宣言するくらいだな。
前スレ986の2分木の者です。
何とか解決出来たので
>>143 のリストから削除お願いします。
もし取り掛かってる方いましたらありがとうございました。
コンパイルは通るのですが、「メモリが"written"になることはできませんでした」というエラーが出てばっかりで、やりきれない気持ちでいっぱいになりました。 forループと複雑な計算を大量にしていると起こりやすい気がするのですが、その場合に考えられる特定の原因ってありますか?
ポインタじゃねえの?
169 :
デフォルトの名無しさん :2008/01/17(木) 19:59:44
>>168 試しにforループ内のiを逐一表示してみたのですが、i++なのに何故か途中でとんでもない数字に飛んだりします。
ポインタの扱いを間違っているって事ですか?
>>167 文章は読めたのですが、「こいつは一体何がいいたいんだ?」という疑問が出てばっかりで、
やりきれない気持ちでいっぱいになりました。
ソースを晒せばすぐに原因が分かる気がするのですが、それをしない特定の理由ってありますか?
172 :
デフォルトの名無しさん :2008/01/17(木) 20:00:19
173 :
デフォルトの名無しさん :2008/01/17(木) 20:01:11
>>169 #include <stdio.h>
#include <stdlib.h>
int route(int m, int n)
{
if (m == 1 || n == 1) return 1;
else return route(m - 1, n) + route(m, n - 1);
}
int main(int argc, char *argv[])
{
if (argc != 3)
return 1;
int m = atoi(argv[1]), n = atoi(argv[2]);
printf("%d", route(m, n));
return 0;
}
176 :
デフォルトの名無しさん :2008/01/17(木) 20:23:58
>>175 実行してみたのですがなにも起こりませんでした・・・
177 :
167 :2008/01/17(木) 20:26:46
>>177 症状が再現する最小のソースを示すのが礼儀だぞ。
widthやheightがどんな値を取るかもわからないでどうして答えられると思う?
なんでiが100超えるん?
>>179 ばっふぁおーばーふろー があれば簡単さw
>>176 引数に1以上与えればなんか出るはずなんだがな
182 :
デフォルトの名無しさん :2008/01/17(木) 20:40:12
>>181 すみません、こちらのミスでした。
ちゃんと実行できました。
ありがとうございました
>>179 バッファオーバーフローのテスト
コンパイラが自動変数をどこに配置するかによっても結果が変わるので
必ずしも何かが起こるとは限らない
/* 最適化をオフにしてコンパイルしてね */
#include <stdio.h>
int main(void){
int x=123;
int y[1]={456};
int z=789;
printf("x=%d z=%d\n", x, z);
y[1]=0;
printf("x=%d z=%d\n", x, z);
return 0;
}
point[100]なんだからiが100になっちゃいかんだろ。
185 :
183 :2008/01/17(木) 20:50:44
>>177 i が pointn の数値以上になるということは
//後略
の部分に問題がある可能性が高いよ
>>179 ごめん勘違いしてた
186 :
167 :2008/01/17(木) 20:52:22
>>178 最小に纏め上げるのが困難なもので…。
>>184 それでした。直した結果完璧に動きます。恥ずかしすぎる…。
みなさんご迷惑おかけしました。すれ汚しすみません。ありがとうございました。
別にまとめる必要すらないだろ。 まあ大方、全体を見せたくないとか言うんだろうが
188 :
デフォルトの名無しさん :2008/01/17(木) 21:13:50
>>167 pointn = (int)((rand()/(double)(RAND_MAX+1.0f))*100);//コア数
これだろ、、おかしいの。
>>174 文字列の式は固定ではなく、手動での入力なのです・・・。
自分の説明が不足していました、すみません。
あげていただいたプログラムを参考に、自分でももう少し頑張ってみます。
>>188 それ自体は0-99の乱数を発生させるだけで、おかしくなくね?
キャストはなくてもいいけど、あってまずいもんでもないし。
191 :
デフォルトの名無しさん :2008/01/17(木) 21:33:53
これだから情報を小出しにする奴は嫌いだ。。 どうせ原因は他にあるのに。
193 :
デフォルトの名無しさん :2008/01/17(木) 21:39:10
自分でここに原因があるって思って見つけられないときは
大方別のところに原因がある。
長かろうが短かろうが、主題さえはっきりしてれば別段読み解くのは難しくない。
てことで
>>167 ソースplz
もう終わってるんだけどw
195 :
デフォルトの名無しさん :2008/01/17(木) 23:56:16
197 :
デフォルトの名無しさん :2008/01/18(金) 00:07:39
>インターネット上でファイルの転送に利用されるプロトコルは?(20点) >[1] FTP, [2] POP, [3] PPP, [4] SMTP << 1 >正解です。 これってPOP&SMTPもファイル転送で使わね?添付ファイルてきな意味で。
198 :
デフォルトの名無しさん :2008/01/18(金) 00:13:10
>>144 は最小二乗法の式作ってとくところからだな
>>164 #include <stdio.h>
#include <stdlib.h>
int cmp( const void * l, const void * r ) { return *((int*)l)-*((int*)r); }
int main( int argc, char ** args ) {
int m, n, i, * data;
printf( "input m :" ); scanf( "%d", &m );
printf( "input n :" ); scanf( "%d", &n );
data = ( int * )calloc( m, sizeof( int ) );
if ( ! data ) { puts( "no memory."); exit(1) ; }
for ( i = 0; i < m; ++i ) scanf( "%d", &data[ i ] );
qsort( data, m, sizeof( int ), cmp );
for ( i = 0; i < n; ++i ) {
int * p, q;
printf( "search for >" ); scanf( "%d", &q );
p = bsearch( &q, data, m, sizeof( int ), cmp );
if ( p ) printf( "%d found at %d, %d\n", q, 1 + ( p - data ), data[ ( p - data ) ] );
else printf( "not found.\n" );
}
free( data );
return 0;
}
202 :
デフォルトの名無しさん :2008/01/18(金) 10:28:31
[1] 授業単元:プログラミング [2] 問題文:問題@ 商品番号・商品名・個数・単価を対象とする構造体の配列を利用し、 データを入力して、一覧表を表示するプログラムを作りなさい。ただし、 各データごとに金額を、最後に合計金額を出しなさい。 問題A 上の問題の構造体の配列を利用し、データを入力した後、商品番号を 並び替えを行い、その結果を一覧表として表示するプログラムを 作りなさい。 [3] 環境 [3.1] OS: (WindowsVISTA) [3.2] コンパイラ名とバージョン: (borland) [3.3] 言語: (C) [4] 期限: ■■緊急■■本日1月18日正午まででお願いします。 [5] その他の制限: 特にありません。
203 :
デフォルトの名無しさん :2008/01/18(金) 12:42:14
[1] 授業単元:プログラミング [2] 問題文:文字列を逆順にコピーする関数xcopyをポインタを用いて作り、確認のためのプログラムを作りなさい。ただし、xcopy(char*to,char*from)とします。なお、対象とするデータは通常の英数字とします。 [3] 環境 [3.1] OS: (Windows VISTA) [3.2] コンパイラ名とバージョン: (borland) [3.3] 言語: (C) [4] 期限: 1月18日 [5] その他の制限: 前102代目に書き込んだんですが見れなくなってしまったのでもう一度お願いします。
>>203 昔のスレからの拾い物
700 名前:デフォルトの名無しさん[sage] 投稿日:2007/12/06(木) 20:47:06
[1] 授業単元:C言語
[2] 問題文
要素数がnoであるint型の配列v2の並びを逆順にしたものを配列v1に格納する関数、
void intary_rcpy(int v1[],const int v2[],int no) {/…/}
を作成せよ
[3] 環境
[3.1] OS:Windows XP
[3.2] VS2005
[3.3] 言語:C++
[4] 期限: 12月7日(金)の午前中まで
よろしくお願いします
702 名前:デフォルトの名無しさん[sage] 投稿日:2007/12/06(木) 21:00:46
>>700 #include <algorithm>
void intary_rcpy(int v1[],const int v2[],int no){std::reverse_copy(v2, v2+no, v1);}
205 :
◆vLIz8KOkPM :2008/01/18(金) 12:54:05
>>203 void xcopy(char *to, char *from)
{
char *p = from;
while(*p) p++;
while(p--!=from) *to++ = *p;
*to = '\0';
}
>>205 とりあえず その30行目を穴が開くまで読み返せ
new[ length ] = ’\0’;
single quotationが全角だ
208 :
デフォルトの名無しさん :2008/01/18(金) 14:32:38
>>208 B_2
#include <stdio.h>
#define N 20
void place_queen(int *x, int n, int k)
{
int i, j;
if(k == n){
for(i = 0; i < n; i++)
printf("%d ", x[i]);
putchar('\n');
return;
}
for(i = 0; i < n; i++){
for(j = 0; j < k; j++)
if(i == x[j] || k - j == i - x[j] || k - j == x[j] - i)
break;
if(j == k){
x[k] = i;
place_queen(x, n, k + 1);
}
}
}
int main(void)
{
int n, x[N];
printf("Input n : ");
scanf("%d", &n);
place_queen(x, n, 0);
return 0;
}
212 :
211 :2008/01/18(金) 18:20:51
213 :
208 :2008/01/18(金) 21:00:56
214 :
デフォルトの名無しさん :2008/01/18(金) 22:01:12
[1] 授業単元: プログラミング中級 [2] 問題文(含コード&リンク):random1.txt、random2.txtという名前の2つのファイルを 作成し、それぞれに0〜100の範囲の乱数(整数)を20個ずつ書き込みなさい。 これら2つのファイルの内容を1行ずつ比較し、大きいほうの数をmax.txtに 書き込みなさい。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: わかりません。 [3.3] 言語: C++ [4] 期限:無期限ですが、なるべく早く知りたいです。
215 :
214 :2008/01/18(金) 22:02:59
途中まではやってみました・・ #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fout, *fout2, *fout3, *fin, *fin2; int buf,buf2; char filename2[]="random1.txt"; char filename3[]="random2.txt"; char filename4[]="max.txt"; int i; printf("ファイルrandom1.txtを作成しました。\n"); printf("ファイルrandom2.txtを作成しました。\n"); printf("ファイルmax.txtを作成しました。\n");
>>213 良さそうな教授だなーとちょっと羨ましく思った。そんな俺は非情報学部。
217 :
214 :2008/01/18(金) 22:03:42
続きです fout=fopen(filename2,"w"); srand(time(NULL)); for(i=0;i<20;i++){ buf=rand()%101; fprintf(fout,"%d\n",buf); } fout2=fopen(filename3,"w"); for(i=0;i<20;i++){ buf2=rand()%101; fprintf(fout2,"%d\n",buf2); } fin = fopen(filename2, "r"); if(fin == NULL){ printf("%dをオープンできません\n", filename2); exit(1); }
218 :
デフォルトの名無しさん :2008/01/18(金) 22:07:50
219 :
214 :2008/01/18(金) 22:08:01
fin2 = fopen(filename3, "r"); if(fin2 == NULL){ printf("%dをオープンできません\n", filename3); exit(1); } fout3=fopen(filename4,"w"); while(1){ if (fscanf(fin,"%d",buf)==EOF) break; if (fscanf(fin2,"%d",buf2)==EOF) break; if(buf>buf2){ fprintf(fout3,"%d\n",buf); } else fprintf(fout3,"%d\n",buf2); } fclose(fout); fclose(fout2); fclose(fin); fclose(fin2); fclose(fout3); return 0; }
>>214 すこしせこいがこれじゃだめかね
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
FILE *fran1, *fran2, *fmax;
char filename1[] = "random1.txt";
char filename2[] = "random2.txt";
char filename3[] = "max.txt";
int i, buf1, buf2;
if ((fran1 = fopen(filename1, "w")) == NULL ||
(fran2 = fopen(filename2, "w")) == NULL ||
(fmax = fopen(filename3, "w")) ==NULL) {
printf("ファイルが作れません\n");
return -1;
}
printf("ファイルrandom1.txtを作成しました。\n");
printf("ファイルrandom2.txtを作成しました。\n");
printf("ファイルmax.txtを作成しました。\n");
srand(time(NULL));
for (i = 0; i < 20; ++i) {
buf1 = rand()%101;
buf2 = rand()%101;
fprintf(fran1, "%d\n", buf1);
fprintf(fran2, "%d\n", buf2);
fprintf(fmax, "%d\n", (buf1 >= buf2) ? buf1 : buf2);
}
fclose(fran1);
fclose(fran2);
fclose(fmax);
return 0;
}
221 :
デフォルトの名無しさん :2008/01/18(金) 22:30:26
れいぷれいぷ
長くなるんならアップロードしろ
223 :
デフォルトの名無しさん :2008/01/18(金) 22:36:53
すいません 丸投げじゃないんですが、 どこで聞いてもわからないのでわかるかたいたらおねがいします・・ ”数値を文字列として入力して、一桁ずつを配列にいれて和・差・積を出す” って問題で、ここでプログラム作ってもらったんですがわかんないとこがあって、、 ↓これ、積の計算らしいんですけどどういう意味ですか(∵)? int i, j, carry; // 最大100桁になるので2N桁を0に初期化 for( i = 0 ; i < 2 * Max_Length ; i++ ) a[i] = 0; for( i = 0 ; i < Max_Length ; i++ ) { carry = 0; for( j = 0 ; j < Max_Length ; j++ ) { a[i+j] += b[i] * c[j] + carry; carry = a[i+j] / 10; a[i+j] -= carry * 10; 詳しく説明できるかたいたらお願いします、、
224 :
デフォルトの名無しさん :2008/01/18(金) 22:37:47
225 :
214 :2008/01/18(金) 22:43:53
>>220 さん
ありがとうございます。
ただ、
fprintf(fmax, "%d\n", (buf1 >= buf2) ? buf1 : buf2);
がよくわかりません。。
?や:の使い方習っていなんです。
bufとbuf2を比較して表示するところがどうしてもできません。
226 :
220 :2008/01/18(金) 22:47:35
if (buf1 >= buf2) { fprintf(fmax, "%d\n", buf1); } else { fprintf(fmax, "%d\n", buf2); } こういうこと。使い方は三項演算子でぐぐれ。
>>225 if (buf1 >= buf2)
fprintf(fmax, "%d\n", buf1);
else
fprintf(fmax, "%d\n", buf2);
>>223 情報を小出しにしない方がいい(・3・)YO
筆算と同じ手順と考えたらいい
[1] C言語入門 [2] 文字列の入れ替え [3] 環境 [3.1] Windows XP [3.2] bcc55 [3.3] C言語 [4] 1週間後 [5] 最初と最後の文字を入れ替える 動作例 文字を入力しる:12345 52341 お願いします。
[1] 授業単元:プログラミング [2] 問題文: グレゴリウス暦の定義を利用して入力された日は何曜日か計算しなさい 西暦1年1月1日は月曜日とする 1年は通常365日ですが閏年は366日 4で割り切れる年は閏年 100で割り切れる年は閏年ではない 400で割り切れる年は閏年 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語: C [4] 期限:1月21日 [5] その他の制限: 変数名、関数名の命名規約を作成 goto文は使用しない 開発途中でのreturn プログラム途中でのexitはしない事 よろしくお願いします。
142ですが、課題のほうは一応どうにかなったので報告。 取り組んでいただいた方、ありがとうございました。
>>218 /* 適切なプリプロセッサ */
#define NAMEMAX 10
#define BIRTHMAX 8
#define N 10
/* Record型構造体の定義 */
typedef struct recoord {
char personal[NAMEMAX], birth[BIRTHMAX];
double height, weight;
}Record;
/* outputData関数の定義 */
void outputData(int n, Record *r)
{
printf("%d人目の出力\n", n);
printf("名前は\t\t%s\n", r[n].personal);
printf("生年月日は\t%*s\n", BIRTHMAX, r[n].birth);
printf("身長は\t\t%4.1lf\n", r[n].height);
printf("体重は\t\t%3.1lf\n", r[n].weight);
}
/* calcBMI関数の定義 */
void calcBMI(int n, Record *r)
{
printf("%d人目のBMIは\t%4.2lf\n", n+1, r[n].weight/pow(r[n].height/100, 2.0));
}
>>231 #include<stdio.h>
int weekday(int y,int m,int d){
if(m<3)y--,m+=12;
return (y+y/4-y/100+y/400+(m*13+8)/5+d)%7;
}
int main(void){
int y,m,d;
printf("年 = ");scanf("%d",&y);
printf("月 = ");scanf("%d",&m);
printf("日 = ");scanf("%d",&d);
printf("日 月 火 水 木 金 土\n%*s↑\n",weekday(y,m,d)*3,"");
return 0 ;
}
>>234 問題文見る限りツェラーの公式は使えん希ガス
>>235 >変数名、関数名の命名規約を作成
って書いてあるくらいだからいいんじゃない?
237 :
デフォルトの名無しさん :2008/01/19(土) 00:25:28
[1] 授業単元:C入門 [2] 問題文 英文の文字列を入力した場合,文字数・単語数・文章数を求めるプログラムを作成せよ。 英文中の特殊文字は(,(カンマ).(ピリオド)!(イクスクラメーション)?(クエスチョンマーク))のみとする。単語の間には1つ以上(2つ以上でも可)のスペースが入れるものとする。 文章の最後には必ず .(ピリオド)!?のどれかが単独で使われる。,(カンマ)や.(ピリオド)!?の後にスペースが入る可能性があるが前にはスペースは入らないものとする。 省略につかう .(カンマ)は今回はないものとする。 入力に関して キーボードから,文字列を一行で入力 出力に関して 文字数・単語数・文章数をそれぞれスペース1つあけて1行で出力(+改行)[3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Study C [3.3] 言語:C [4] 期限:1月22日14:00 [5] その他の制限:一年なのでそこまで難しいのはつかわずにお願いします。
[1] C言語 [2] 500パターン(test000〜test499)のファイルを用いてそれらのハッシュ値を求めるプログラム。 (ファイルを読み込む際、手動で500パターン打ち込むのは大変なので そこもプログラムで自動的に次々とファイルを読み込むようにしていただけたら嬉しいです) [3] [3.1]Mac OS X [3.2]よくわかりません [3.3]C [4]1/19(土) [5]特になし よろしくお願いします。
>>236 >西暦1年1月1日は月曜日とする
ってのが生きてこなくなるんじゃね?
まあどうでもいいかもしれんが
>>229 #include<stdio.h>
int main(void){
char buf[0x100];
int i;
printf("文字を入力しる:");
fgets(buf,sizeof(buf),stdin);
for(i=0; buf[i]; ++i)if(buf[i]=='\n')break;
putchar(buf[i-1]);
buf[i-1] = '\0';
printf("%s",buf+1);
putchar(buf[0]);
return 0;
}
表示上では入れ替えてると思う
>>240 ありがとうございます。
ただ、課題の紙にヒントみたいのがあって
char a ='X' ;
char b ='Y' ;
char c ;
c = a
a = b
b = c
って代入していく方法があるよって書かれてました。
今見つけたので前のレスで書けなくてすいませんでした。
でも教えてくれたものも正しく動くので、これでいこうと思います。
もし、お暇でしたら代入するヒントを活用したものも考えてもらえると嬉しいです。
>>243 #include <stdio.h>
int main () {
char in[1024], c;
int i;
scanf("%s", in);
for (i = 0; i < sizeof(in) && in[i] != '\0'; ++i);
c = in[0];
in[0] = in[i-1];
in[i-1] = c;
printf("%s\n", in);
return 0;
}
245 :
デフォルトの名無しさん :2008/01/19(土) 00:53:51
>>237 こんなんで良いか?
#include <stdio.h>
#define MAX 1024
int main()
{
int c,i=0,j;
char ary[MAX] = {'\0'};
while((c = getchar())!='\n' && i < MAX){
if(c != '.' && c != ','&& c != '!'&& c != '?')
ary[i] = c;
i++;
}
for(j = 0; j < i;j++){
if(ary[j] != ' ')
putchar(ary[j]);
else if(ary[j] == ' ')
putchar('\n');
}
return 0;
}
>>242 ソースじゃないけど、俺が考えたのは入力した年月日と1年1月1日
との日数の差を出してから7で割って割り切れたら月曜、1余ったら火曜、、、
ってやるのかなー?と
>>243 putchar(buf[i-1]);
buf[i-1] = '\0';
printf("%s",buf+1);
putchar(buf[0]);
を削除して、char c;を追加
c = buf[i-1];
buf[i-1] = buf[0];
buf[0] = c;
printf("%s",buf);
248 :
231 :2008/01/19(土) 01:11:54
>>234 ありがとうございます
結構早くできてて驚きました
>>235 そうなんですか?3日前から勉強しだしたんでよくわかりません
ツェラーの公式以外だとどんな感じになるんでしょうか?
249 :
デフォルトの名無しさん :2008/01/19(土) 01:22:04
>>245 つくっていただいてありがとうございます。
英文の文字列を入力した場合,文字数・単語数・文章数を表示する部分お願いします
>>248 ゴリ押しでやるとこんな感じ。
#include <stdio.h>
int main () {
int y, m, d, sum = 0;
int m_array[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
char *week[7] = {"日", "月", "火", "水", "木", "金", "土"};
printf("input (e.g. ****/**/**)\n>>");
scanf("%d/%d/%d", &y, &m, &d);
if (m > 2 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) {
++sum;
}
for (m -= 2; m >= 0; --m) {
sum += m_array[m];
}
--y;
sum = sum + y * 365 + y / 4 - y / 100 + y / 400 + d;
printf("%s曜日", week[sum%7]);
return 0;
}
251 :
231 :2008/01/19(土) 01:58:56
>>250 あ、多分それだと思います
こんな時間につくってもらってホントありがとうございます
252 :
デフォルトの名無しさん :2008/01/19(土) 02:04:54
>>237 なんか作っててめんどくさくなった
#include <stdio.h>
#define MAX 1024
int main()
{
int c,i=0,j,k,word=0,letter=0,wnum=0;
char ary[MAX] = {'\0'};
while((c = getchar())!='\n' && i < MAX){
if(c == '.' || c == '!'|| c == '?')
letter++;
if(c != '.' && c != ','&& c != '!'&& c != '?')
ary[i] = c;
if(c ==' ' && i>0 ){
k = i -1;
if(c ==' ' || ary[k] == '!'|| ary[k] == '?')
word++;
} i++; }
for(j = 0; j < i;j++){
if(ary[j] != ' '){
putchar(ary[j]);
wnum++;
}
else if(ary[j] == ' ')
putchar('\n');
}
printf("\n文字数=%d 単語数=%d 文章数=%d \n",wnum,++word,letter);
return 0;
}
254 :
211 :2008/01/19(土) 08:02:26
255 :
デフォルトの名無しさん :2008/01/19(土) 08:08:43
【質問テンプレ】 [1] 授業単元: 基礎プログラミング [2] 問題文(含コード&リンク): 入力された値nに対して、f(1)=f(2)=1、f(n)=f(n-1)+f(n-2)となるフィボナッチ数f(n)を表示するプログラミングを再帰を用いて作成せよ。 そのとき、関数fが呼ばれた回数をカウントして表示せよ。n=3,4,…,10のときにそれぞれ関数fが何回呼ばれたか調べよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: できれば1月20日まで [5] その他の制限:特にないと思われるけど。とりあえず再帰関数・構造体のところなので。 よろしくお願いします。
258 :
デフォルトの名無しさん :2008/01/19(土) 11:34:03
259 :
デフォルトの名無しさん :2008/01/19(土) 11:43:10
画像のピクセル間ごとの輝度を取得して、配列に格納するようなプログラム教えていただけませんか? 例えば100*100の画像なら、x[0][0]に座標0,0の輝度が格納されていくようなものです。
>>257 #include <stdio.h>
int call_count = 0;
int f(int n)
{
call_count++;
if(n == 1 || n == 2)
return 1;
else
return f(n - 1) + f(n - 2);
}
int main()
{
int n;
for(n = 3 ; n <= 10 ; ++n){
call_count = 0;
printf("f(%d) = %d\t(call count: %d)\n", n, f(n), call_count);
}
return 0;
}
【質問テンプレ】 [1] 授業単元: 置き換え方ステガノグラフィ [2] 問題文(含コード&リンク): 100*100のbmp画像を4つの50*50のブロックにわけ 各ブロックの輝度を計算し、左上からABCDとする。 (a)A>Bのとき0 B>Aのとき1とし (b)C>Dのときは0 D>Cのときは1とする 仮に(a)=1,(b)=0という出力が得たとし ここで入力値(a')=0,(b')=1とするとき ブロック毎の輝度を調節し、画像を出力しなさい。 また再度計算させ出力が(a)=0,(b)=1として得られること ここでの輝度計算は、(r*0.299)+(b*0.587)+(g*0.114)を使いなさい [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2005 [3.3] 言語: C++ [4] 期限:1月21日 [5] その他の制限:無制限
>>262 bmpの読み込みってMFCのCImageとか使って書くの?
265 :
デフォルトの名無しさん :2008/01/19(土) 13:50:23
267 :
265 :2008/01/19(土) 14:17:59
>>266 見落としてました;
ありがとうございます
[1] 授業単元:プログラミング初級 [2] 問題文(含コード&リンク):名前(char)、身長(double)、体重(double)、視力(視力構造体)これらのデータをメンバとする構造体を定義し、入力された表示を行うプログラムを作成してください。 入力件数は、最大5件で、名前は19文字までの入力とし、範囲外だったならばエラーメッセージ(Sorry. Input less than 20 characters.)を表示し再入力して下さい。名前に"END"が入力されたときは入力終了とします表示は身長で昇順にソートして出力して下さい また身長、体重は、小数点第以下一位までの表示とします。視力は、小数点以下第三位までの表示とします 出力の幅は、名前が19文字文、その他は5文字分で指定してください 視力は右(double)、左(double)をメンバとする構造体で扱って下さい 1件分の入力はibput_data()で、表示はdisplay_data()で、ソートはsort_data()でと処理を関数に分けて行ってくださ 名前入力の最初に"END"が入力された場合は、その旨のメッセージ(Input data is nothing!) を出力してください [3] 環境 [3.1] OS : windows [3.2] コンパイラ名とバージョン: Visual C++ 2005 [3.3] 言語: C言語 [4] 期限:1月21日
宿題じゃないと駄目?
>>269 速攻で答えてやんよ
∧_∧
( ・ω・)=つ≡つ
(っ ≡つ=つ
/ ) ババババ
( / ̄∪
272 :
◆8QYSceiIsU :2008/01/19(土) 21:04:42
1] 授業単元:プログラミング [2] 問題文(含コード&リンク) 適当な数字を与えてその数だけ「<」を使いそれに対応する「>」の例を全て表示するプログラムを作れ 例 2を与えた場合 <<>> <><> 3を与えた場合 <<<>>> <<>><> <<><>> <><><> と表示する [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:cygwin [3.3] 言語:C [4] 期限:2008/01/20(日) お手数ですが、よろしくおねがいします
273 :
shogo :2008/01/19(土) 21:11:56
【質問テンプレ】 1 西暦1868年から2007年までの年号を入力して和暦に変更して出力するプログ ラムを作りなさい。(10点) 例 入力 1868 出力 明治元年 2007 平成19年 2 整数配列が–32768から32767の範囲の数しか扱えないとしたとき、10桁の整数同士 の足し算を行うプログラムを作りなさい。(10点) 3 3桁の整数の値を入力していき、−9999が入力されたところで、それまでに入力 された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラムを作りなさ い。(10点) 4 3つの文字列”Happy”と“New”と“Year”をつないで1つの文字列として出力する プログラムを作りなさい。(10点) 5 学籍番号、氏名、出席からなる10人分のデータがある。出席の悪いものから並び替 えて表示するプログラムを作りなさい。(10点) 例 BA180002 山田太郎 70 BA170001 石田次郎 60 データは、適当なものを各自用意して入力すること。
>>272 3を与えた時、<><<>>は含まないの?
275 :
◆8QYSceiIsU :2008/01/19(土) 21:23:05
>>275 理由は? 272の条件文からじゃ含むように思うんだけど。
反転すりゃ同じになるものは省きたいんじゃないかな?
278 :
269 :2008/01/19(土) 21:34:12
279 :
◆8QYSceiIsU :2008/01/19(土) 21:34:51
>>276 すみません、<<>><>と<><<>>は括弧の計算としては同じだからだと思っていましたが、そのような指定はありませんでしたorz
とりあえず
<>><<>や><<>><とかはダメだそうです
280 :
◆8QYSceiIsU :2008/01/19(土) 21:37:22
281 :
269 :2008/01/19(土) 21:37:22
>>279 それがダメなのは言われなくても分かるってw
283 :
257 :2008/01/19(土) 21:48:13
>>238 どなたかできませんか?
よろしくお願いします。
ファイルの書式も書かずに催促とな
290 :
285 :2008/01/20(日) 01:32:51
うは、結局対称だめってことだったのね。。。 もう力尽きたお。てか、意外と難しくない?
>>290 入れ子がややこしいな
俺がアホなだけかも試練が
<<><<>>><> <<<>><>><> 例えばこういうのも別の要素として扱われるのかね。 そうだとしたら面倒くさいな。
296 :
◆8QYSceiIsU :2008/01/20(日) 02:06:31
>>285 ありがとうございます!感激です!
>>293 俺の考えですが、多分同一とみなすと思います
>>295 ありがとうございます!こんなプログラム…俺には難しくて作れませんorz
>>272 対象もでてしまうけど
#include<stdio.h>
#include<stdlib.h>
void disp(char *p){
for(;*--p;);
puts(p+1);
}
void brace(char *work, int brace_num, int depth){
if(depth==0 && brace_num==0){
*work='\0';
disp(work);
}
if(depth>0){
*work='>';
brace(work+1, brace_num, depth-1);
}
if(brace_num>0){
*work='<';
brace(work+1, brace_num-1, depth+1);
}
}
int main(int argc, char *argv[]){
int brace_num=3;
char *work;
if(argc==2) brace_num=atoi(argv[1]);
work=malloc(brace_num*2+2);
*work='\0';
brace(work+1, brace_num, 0);
free(work);
return 0;
}
>>299 mainの
student std[]={
途中送信してしまった
>>299 mainの
student std[]={};
を
student std[NUMB];
にするだけで動く。平均はsougouを5で割ればいいだけ。
てかちゃんと内容を書け。
まじめにやらなかったから単位を落とすんだろ?自然なことじゃないか
>>303 [4] 期限:本日11:30まで
DATE:2008/01/20(日) 14:10:15
最初から期限切れてるじゃん
午後なら、11:30PMか23:30と書くべきだな。
>>307 下手に頑張っても頑張っても…とか書かれると、どう頑張って何を身につけたのか訊きたくなるじゃないか。
頑張ったからには途中まで出来ているだろうから、そこまでのソースを見せろ、とかね。
単位がかかっていると言われると期限過ぎてから回答したくなる
ここに丸投げして課題をクリアしようとした自分が間違っていました。すいません 今から苦Cでもう一度基礎から勉強して何とかやってみます 見苦しいレスばかりしてしまい、申し訳ありませんでした
別に間違ってないんじゃない? ただ「〜がかかっている」とか理由をつけて解答を迫ってるのが 人によっては癪に障るだけで。
ちょっと待て、「苦C」って「苦しんで覚える……」か? あんなサイトで基礎から勉強するから見につかないんだと思うぞ。
314 :
◆8QYSceiIsU :2008/01/20(日) 15:49:45
>>298 3しか出ないのですが、どこを書き換えればいいですか?
316 :
◆8QYSceiIsU :2008/01/20(日) 15:55:00
>>315 int brace_num=3;のところだと思うのですが、そこをどう書き換えればいいのかわからないのですorz
scanfだと思っていろいろいじったのですがエラーになってしまって…
scanfもわからないのに再帰を提出するのはまずいと思うぞw
318 :
◆8QYSceiIsU :2008/01/20(日) 16:17:01
>>317 今は提出だけが目的なんで…すみませんorz
>>238 だが、
>>288 お前なりすましか?
注意書き通り名前のところにトリップ入れておけばよかった。
スレ汚しすまん。
もう消える。
320 :
デフォルトの名無しさん :2008/01/20(日) 16:24:17
>>301 ありがとうございます!なんでエラーがおこるのかわからなくて相当困ってました。
323 :
◆8QYSceiIsU :2008/01/20(日) 17:07:17
>>322 ありがとうございます!
これはゼミの問題でしたσ(^_^;)アセアセ...
324 :
デフォルトの名無しさん :2008/01/20(日) 17:41:22
[1] 授業単元:文字列 [2] 問題文: 最大50文字で文字列を読み取り、 その文字数を出力するプログラム (例:aiueo=5文字) [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:? [3.3] 言語:C++ [4] 期限: 2008年1月20日22:00まで [5] その他の制限: お願いします(ノ_・。)
>>324 #include<iostream>
#include<string>
int main()
{
std::string str;
std::cin>>str;
std::cout<<str.size()<<"文字"<<std::endl;
return 0;
}
326 :
デフォルトの名無しさん :2008/01/20(日) 17:47:24
>>324 は削除でお願いします!!
ごめんなさい..
[1] 授業単元:
[2] 問題文:
数値を文字列として2つ入力し、
大小を求めるプログラムを作成せよ
(例:52846>48426)
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C++
[4] 期限:2008年1月20日22:00まで
[5] その他の制限:
お願いします(ノ_・。)
327 :
デフォルトの名無しさん :2008/01/20(日) 17:48:16
>>326 int main(void)
{
using namespace std;
int a, b;
cin >> a;
cin >> b;
cout << max(a,b) << ">" << min(a,b) << endl;
return 0;
}
330 :
269 :2008/01/20(日) 18:09:26
プリーズ、プリーズ
>>326 #include <iostream>
int main (int argc, char **argv) {
using namespace std;
int a, b;
cout << "数字を二つ入力してよ" << endl;
cin >> a >> b;
cout << a << (a == b ? "=" : (a < b ? "<" : ">")) << b << endl;
}
>>330 >>278 とりあえずA.txtとB.txtとC.txtの見本みたいのがないとよくわからんな
あと樹形図化ってあるけど、どういう規則の木構造なのかもわかるとうれしい
334 :
デフォルトの名無しさん :2008/01/20(日) 19:11:11
まじで何回も聞いてますができません↓ わかるかたお願いします↓ [1] 授業単元: [2] 問題文: 最大50文字の数値を文字列として2つ入力して、 その差を求めるプログラムを作成せよ。 なお、最初に入力したものから後に入力したものを引くこととする [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン: [3.3] 言語:C++ [4] 期限:2008年1月20日23:00まで [5] その他の制限: 答えがマイナスになる場合もお願いします、、 あとできれば説明もお願いします
335 :
デフォルトの名無しさん :2008/01/20(日) 19:51:31
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):添付されたファイル"city.txt"に、 日本の政令指定都市に関するデータが収められている。 このファイルを読んで、構造体の配列に格納し、 ソートを実行するプログラムを作成する。 構造体のメンバは、 都市名・登録年月日・面積・人口とし、 ソートはレコードの内容について、 まず、都市名の昇順(アルファベット順)にソートし、 次に、登録年月日の昇順にソートするものとする。 単純交換法でソートを実行した場合と、 単純選択法でソートを実行した場合の結果を示し、 違いがあれば、その違いの特徴を説明し、理由も書きなさい。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 1/22日まで [5] その他の制限:city.txtなどは次に書きます。よろしくお願いします。
336 :
デフォルトの名無しさん :2008/01/20(日) 19:52:30
>>335 city.txtの中身
都市名 登録年月日 面積[km^2] 人口[人] (2007年12月1日現在)
Sapporo 1972/04/01 1,121.12 1881218
Sendai 1989/04/01 735.16 1029595
Saitama 2003/04/01 217.49 1192005
Chiba 1992/04/01 272.08 938293
Yokohama 1956/09/01 437.38 3,630830
Kawasaki 1972/04/01 142.70 1,372762
Niigata 2007/04/01 726.10 813170
Shizuoka 2005/04/01 1,388.78 710902
Hamamatsu 2007/04/01 1,511.17 811446
Nagoya 1956/09/01 326.45 2238223
Kyoto 1956/09/01 827.90 1469242
Osaka 1956/09/01 222.27 2645790
Sakai 2006/04/01 149.99 835257
Kobe 1956/09/01 552.15 1530912
Hiroshima 1980/04/01 905.13 1163051
Kitakyushu 1963/04/01 487.71 987337
Fukuoka 1972/04/01 340.60 1429828
337 :
デフォルトの名無しさん :2008/01/20(日) 19:53:26
>>336 すいません見にくかったです。
都市名 登録年月日 面積[km^2] 人口[人] (2007年12月1日現在)
Sapporo 1972/04/01 1,121.12 1881218
Sendai 1989/04/01 735.16 1029595
Saitama 2003/04/01 217.49 1192005
Chiba 1992/04/01 272.08 938293
Yokohama 1956/09/01 437.38 3,630830
Kawasaki 1972/04/01 142.70 1,372762
Niigata 2007/04/01 726.10 813170
Shizuoka 2005/04/01 1,388.78 710902
Hamamatsu 2007/04/01 1,511.17 811446
Nagoya 1956/09/01 326.45 2238223
Kyoto 1956/09/01 827.90 1469242
Osaka 1956/09/01 222.27 2645790
Sakai 2006/04/01 149.99 835257
Kobe 1956/09/01 552.15 1530912
Hiroshima 1980/04/01 905.13 1163051
Kitakyushu 1963/04/01 487.71 987337
Fukuoka 1972/04/01 340.60 1429828
338 :
デフォルトの名無しさん :2008/01/20(日) 19:58:11
>>335 >>336 >>337 337はミスりました、すいません。
#include<stdio.h>
#define N 17 //*keyの個数
#define SIZE 20 //*nameの大きさ
struct city{
char name[SIZE];
int year, month, day;
double area;
int population;
};
struct city key[N];
int main(void){
FILE *fp;
int i;
char naka[100];
fp = fopen("city.txt","r");
if(fp!=NULL){
printf("ファイルを開きました\n");
}
fgets(naka,100,fp);
for(i = 0; i < N; i++){
fscanf(fp,"%s %d/%d/%d %lf %d",key[i].name, &key[i].year, &key[i].month, &key[i].day, &key[i].area, &key[i].population);
printf("%s %d/%d/%d %lf %d\n",key[i].name, key[i].year, key[i].month, key[i].day,key[i].area, key[i].population);
}
return 0;
}
これを元に作ってほしいです。よろしくお願いします
>>334 #include <iostream>
using namespace std;
int main()
{
double n1, n2;
// 一つ目入力
cout << "n1 : ";
cin >> n1;
// 二つ目入力
cout << "n2 : ";
cin >> n2;
// 結果出力
cout << "n1 - n2 : " << n1 - n2 << endl;
return 0;
}
340 :
デフォルトの名無しさん :2008/01/20(日) 20:32:40
>>339 ありがとうございます!
でもまだ
using namespace std;
をならってません(ノ_・。)
ほんとにC++かよw
つうか、doubleで大丈夫なのか? stringなりchar配列でやれって意味だと思うんだけど
>>340 文字列から数値への変換は自分でやるの?
入力とかは、scanfとかでやれとか?
使っていいものの条件をかいてくれ。
346 :
344 :2008/01/20(日) 21:05:41
347 :
デフォルトの名無しさん :2008/01/20(日) 21:09:54
char配列だと思います。。 あとscanfもまだ習っていません、、 文字列の入力は cin.getline しか習ってないんですが。。。 まさかこれでこの問題乗り切るのむりですか?(´△`) よくわかんないので、以前に和を出す方法を教えてもらったのでそれの一部のせます! 前後はしょってるので意味わかんなかったらごめんなさい、、 // 足し算 // a = b + c int add(char a[], char b[], char c[]) { int i ,carry = 0; for( i = 0 ; i < Max_Length ; i++ ) { a[i] = b[i] + c[i] + carry; carry = a[i] / 10; a[i] = a[i] - carry * 10; } return carry; }
250ってそのまま書いても大丈夫なんですかね? 今ソフトがないもんで・・・
349 :
デフォルトの名無しさん :2008/01/20(日) 21:53:38
お願いします [1] 授業単元: C言語 [2] 問題文(含コード&リンク): 問題1;nの階乗の表を表示するプログラム(intで表示できる範囲のみ) 問題2: 二次元配列を使い、以下の点数表から各人の3科目の平均点と各科目ごとの5人の平均点を求めるプログラム 国語 数学 英語 安藤 56 45 67 加藤 64 34 55 田中 53 76 46 山田 75 78 78 山本 60 67 62 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:コマンドプロンプト [3.3] 言語: C [4] 期限: 2008年1月21日00:00まで [5] その他の制限: なし
350 :
デフォルトの名無しさん :2008/01/20(日) 21:55:48
>>350 #include <stdio.h>
#define LMAX 100
int char_counter(char c, char * str)
{
int cnt=0;
while(*str!='\0'){
if(*str==c)
cnt++;
str++;
}
return cnt;
}
main()
{
char c,str[LMAX];
int cnt=0;
printf("文章:");
fgets(str,LMAX-1,stdin);
for(c=33;c<127;c++){
cnt=char_counter(c,str);
if(cnt>0)
printf("[%c]->%d個\n",c,cnt);
}
}
352 :
デフォルトの名無しさん :2008/01/20(日) 22:33:36
[1] 授業単元:C言語 [2] 問題文 1つ以上の空白文字で区切られた英文を半角文字列として入力し、空白文字 を区切りとし分解して表示する。以上の動作をNULLが入力されるまで繰り返 すプログラムを作成しなさい。 @文字列の入力にはgets関数を使用すること。また、最大で80文字 までしか入力されないものとする。 A空白文字かどうかは文字検査関数(is・・・)を使用して調べること。 B半角文字しか入力されないもとする [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語: C [4] 期限:なし [5] その他の制限:
353 :
shogo :2008/01/20(日) 23:15:54
>
>>273 ディフォルトの名無しさんご回答ありがとうございました!
大変参考になりました!!
ディフォルトの名無しさんって宿題全部やっちゃってすごいよね
356 :
デフォルトの名無しさん :2008/01/20(日) 23:32:25
>>352 空白を複数個入れると表示が見苦しくなるが気にするな。
そうしちゃいけないとは書いていないから。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char buf[81];
int i;
while(gets(buf)){
if(!strcmp(buf,"NULL"))
break;
for(i=0;buf[i];i++)
putchar(isspace(buf[i])?'\n':buf[i]);
printf("\n\n\n");
}
return 0;
}
>>352 では表示が見苦しくならないようにしたものを。先頭に空白が入ってても大丈夫にしてある。
#include <stdio.h>
#include <ctype.h>
#define LMAX 80
main()
{
int i=0;
char str[LMAX+1];
while(gets(str)){;//本当はfgets(str,LMAX,stdin)を使いたい
while(str[i]!='\0'){
if(isspace(str[i])){
if(i>0&&!isspace(str[i-1]))
putchar('\n');
}else
putchar(str[i]);
i++;
}
putchar('\n');
}
}
359 :
269 :2008/01/21(月) 00:33:14
361 :
デフォルトの名無しさん :2008/01/21(月) 00:41:37
宣伝するなクソが
363 :
デフォルトの名無しさん :2008/01/21(月) 01:06:33
364 :
デフォルトの名無しさん :2008/01/21(月) 01:43:30
ここって仕様書のせたらプログラム作ってくれますか?(゚゚) もしだめなら仕様書のせてプログラム作ってくれるスレ教えてくだされ(ノ_・。)
365 :
デフォルトの名無しさん :2008/01/21(月) 01:46:29
スレ立てればいいじゃん
仕事代行スレ?面白そうだね。 作るならJAVAやC#その他言語もOKなスレにして欲しいな。 【無料】仕事代行ギコ猫商会【無保証】 猫の手を借りたいほど忙しい人が、プログラム好きの猫たちに仕事を依頼するスレです。 猫たちは気紛れなので、依頼を受け無い時もあります。途中で投げ出すかも知れませんし 出来たとしても猫たちの能力はまちまちなので品質は保証できません。 また、倫理や契約に違反する可能性がありますので十分注意してください。 まあ利用できるのは、個人ぐらいだろうな。企業とかでこんな所に仕事を投げたのが ばれたら大変な事になりそう。
369 :
348 :2008/01/21(月) 03:21:22
スイマセン勘違いしてました ところで250の printf("input (e.g. ****/**/**)\n>>"); の意味がわからないのですが・・・
>>369 いや、"input (e.g. ****/**/**)\n>>"って表示するだけのことだろ。
****/**/**は年/月/日で入力しろってことでしょ
371 :
348 :2008/01/21(月) 03:38:29
>>370 ありがとうございます!
助かりました!
>>272 面白そうなので、ちょっとやってみた。
期限過ぎてるし、手元に開発環境がなくてrubyだしで
スレ違いすまん
--
def create(n)
if n < 2
return "<>"
else
strs= create(n-1)
result = []
strs.each do |str|
result.push "<"+ str +">"
result.push str +"<>"
end
return result
end
end
create(ARGV.shift.to_i).each { |str| print str, "\n"}
--
373 :
269 :2008/01/21(月) 04:10:06
>>368 おお…おお!ありがとうございます!!
たった10文字だけど、他に表現できる言葉を知らないので、もう一度「ありがとうございます」
>>372 スクリプト系だと結構楽にかけそうなんだよね。
Cだと、リストと文字列処理が貧弱すぎて泣ける
375 :
デフォルトの名無しさん :2008/01/21(月) 09:39:31
1] 授業単元: プロ基礎 [2] 問題文(含コード&リンク):ある金額を入力し、その金額のお金の種類と数(1万円札〜1円玉)を求めるwhile文を作れ。 [3] c言語 [4] 期限:今 [5] その他の制限:ど基礎。for,while程度 よろしくお願いします。
>[4] 期限:今
じゃあもう期限切れだな残念
378 :
375 :2008/01/21(月) 09:47:12
自動販売機のおつりみたいなものです
なぜループさせる必要があるのか、おじさんに分かるように教えてくれ
#include <stdio.h> int main(void) { int N=147568,a=10000; while(N) { printf("%d円:%d枚\n",a,N/a); N%=a; a/=2; if(N) { printf("%d円:%d枚\n",a,N/a); N%=a; a/=5; } } return 0; }
383 :
382 :2008/01/21(月) 10:24:37
すみません、最後の構造体のは氏名はローマ字表記でも大丈夫です
>>381 なるほど、そういう風にwhileを使うのか・・・全然思いつかなかった・・・・・orz
>>382 #include <stdio.h>
struct student {
char name[32];
int ID;
int score;
};
int main(void) {
int i,j,x;
char buf[32];
struct student s[5];
for(i=0;i<5;i++) {
printf("氏名:");
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%s",&s[i].name);
printf("ID:");
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&s[i].ID);
printf("点数:");
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&s[i].score);
}
printf("何点以上?:");
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&x);
for(i=0;i<5;i++) if(s[i].score>=x) printf("%s ID:%d %d点\n",s[i].name,s[i].ID,s[i].score);
return 0;
}
>>387 の修正版
#include<stdio.h>
long get_power(long base, int expt);
int main(int argc, char *argv[]){
int base, expt;
long power_out;
if(argc != 3){
fprintf(stderr, "input error\n");
return 1;
}
base = atoi(argv[1]);
expt = atoi(argv[2]);
if(expt < 0){
fprintf(stderr, "input error\n");
return 1;
}
power_out = get_power(base, expt);
printf("%d^%d = %ld\n", base, expt, power_out);
return 0;
}
long get_power(long base, int expt){
if(expt == 0) return 1;
if(expt % 2 == 0){
expt /= 2;
base *= base;
return get_power(base, expt);
}else{
expt -= 1;
return base * get_power(base, expt);
}
}
>>382 の2
#include<stdio.h>
int get_gcd(int num1, int num2);
int main(int argc, char *argv[]){
int num1, num2;
int gcd_out;
if(argc != 3){
fprintf(stderr, "input error\n");
return 1;
}
num1 = atoi(argv[1]);
num2 = atoi(argv[2]);
if(num2 < 0){
fprintf(stderr, "input error\n");
return 1;
}
gcd_out = get_gcd(num1, num2);
printf("GCD(%d,%d) = %d\n", num1, num2, gcd_out);
return 0;
}
int get_gcd(int num1, int num2){
if(num1 == num2) return num1;
if(num1 > num2){
return get_gcd(num1-num2, num2);
}else{
return get_gcd(num1, num2-num1);
}
}
【質問テンプレ】
[1] 授業単元:プログラミングC++
[2] 問題文(含コード&リンク):
以下のデータを空白を区切りとしてキーボードから入力して
配列に読み込み、英語のアルファベット順に並び替えよ。
ただし、文字列の大きさの比較にはstrcmp関数を
文字列の入れ替えにはstrcpy関数を利用しなさい。
日本語 英語 味わい月
鯖 mackerel 10
新巻鮭 salmon 12
岩魚 charr 7
牡蛎 oyster 2
帆立貝 scallop 1
正答動作画像
http://www-2ch.net:8080/up/download/1200896566698764.Kngz6w [3] 環境
[3.1] OS: WindowsXP
[3.2] Microsoft Visual C++
[3.3] C++
[4] 期限: 2008年1月23日18:00まで
[5] その他の制限:strcmpとstrcpyを利用したソートをさせるのが問題の主眼かなと思います。
よろしくお願いします。
[2] 問題文:最長文字列の検出 [3] 環境 [3.1] OS:WindowsXP [3.2] gcc 3.4 [3.3] 言語:C カンマで区切った単語を入力してその中で一番長い文字列を表示させる。 例 単語を入力してください:1,10,10,1000 最長文字列は1000です。 strtokでカンマごとに切断することは出来たのですがそこからどうすればいいか分かりません。 よろしくお願いします。
strtok()で区切った文字列を配列に突っ込んでstrlen()で長さを数えればいい
すいません、よく分からないです・・・無知ですいません。
>>391 #include <stdio.h>
#include <string.h>
int main()
{
int i = 0, max = -1, max_i = -1;
char buf[200], *p, *tmp[100];
printf("単語を入力してください:");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%s", buf);
for (p = strtok(buf, ","); p != NULL; i++)
{
int len = strlen(p);
if (max < len)
{
max = len;
max_i = i;
}
tmp[i] = p;
p = strtok(NULL, ",");
}
printf("最長文字列は%s", tmp[max_i]);
return 0;
}
#include <stdio.h> int main () { int y, m, d, sum = 0; int m_array[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; char *week[7] = {"日", "月", "火", "水", "木", "金", "土"}; printf("input (e.g. ****/**/**)\n>>"); スイマセン、このinputとe.gの意味がわかりません
おめーはぷりんとfもわかんねーのかよ
inputは、えいごでにゅうりょくっていみだよ e.gは、らてんごでたとえばっていみだよ
[1] 授業単元:基礎プログラミング [2] 問題文(含コード&リンク):オンラインゲームを作成せよ。 ラグナロクオンラインやリネージュのようなオンラインゲームを 作成してみよう。データを送信するのに必要なライブラリ等は各自 調べておくこと。またDirectXを使用すること。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VisualStudio2005 [3.3] 言語: C++ [4] 期限: 2008/2/1 23:59 [5] できれば3DのデータをMAXやMAYA、Shade等で作成する。
>[1] 授業単元:基礎プログラミング
>>399 なんとか完成したぞよ
#include <stdio.h>
int main(void)
{
char input[100];
printf("******ログイン画面******\n");
printf("UserID:");
scanf("%s",input);
printf("Password:");
scanf("%s",input);
printf("@@@@ログイン完了@@@@\n\n");
//roop for ever
while(1){
printf("チャット発言:");
scanf("%s",input);
printf("\n ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");
printf("( ´∀`)< %s\n",input);
printf("( ) \______________\n");
printf(" | | |\n");
printf("(__)_)\n\n");
}
return 0;
}
>>399 ごめ、C++だったか!
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string input;
cout<<"******ログイン画面******"<<endl;
cout<<"UserID:";
cin>>input;
cout<<"Password:";
cin>>input;
cout<<"@@@@ログイン完了@@@@\n"<<endl;
//roop for ever
while(1){
cout<<"チャット発言:";
cin>>input;
cout<<endl;
cout<<" ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄"<<endl;
cout<<"( ´∀`)< "<<input<<endl;
cout<<"( ) \______________"<<endl;
cout<<" | | |"<<endl;
cout<<"(__)_)\n"<<endl;
}
return 0;
}
俺が見る限り
>>400 と
>>401 は間違ってるな
これが正解だw
#include <iostream>
#include <string>
int main(void)
{
std::string input;
while(true){
std::cout<<"******ログイン画面******"<<std::endl;
std::cout<<"UserID:";
std::cin>>input;
std::cout<<"Password:";
std::cin>>input;
std::cout<<"IDまたはパスワードが違います\n"<<std::endl;
}
return 0;
}
[1] 授業単元:C++実習 [2] 問題文(含コード&リンク):() 自動販売機のオブジェクトを作成し実現しなさい(ジュース,たばこ,カップラーメンなど何でも良い(何の自販機は出力すること))。 ただし,下記の条件を満たすこと。 <条件> 自動販売機で購入できる「商品」,「お金」,「自動販売機」は最低限クラス化すること。 「カプセル化」,「継承」,「多様性」を全て利用すること。 例外処理をすること(プログラムが頓挫した時点でNGとします)。 入出力は,下記のとおり行うこと。 【入力】 ・お金(10円〜1000円)の個数(枚数) ・購入商品選択(複数可) 【出力】 ・つり銭(10円〜100円)の個数(枚数)と総購入代金 ・購入商品名(複数) 実現は,main()関数で「自動販売機」クラスのインスタンスを1つ作成し,そのクラスのbuy( )メンバ関数を呼び出したら全てが動作するようにする。 ※条件以外に動的メモリ,ファイル入出力などを用いて自動販売機の機能が拡張されるほど良い。ただし,明らかに無駄なコードを追加して機能を増やしている場合はその限りではありません。 [3] 環境 [3.1] OS: Windows XP [3.2] visual studio 2005 [3.3] 言語: C++ [4] 期限: 2008/1/25まで [5] その他の制限: 特に無し。 よろしくお願いします。
#include<stdio.h> #define N 1; typedef struct{ }Record; void inputData(int n, Record r[]); void outputData(int n, Record r[]); void calcBMI(int n; Recordr[]); int main(void) { Record rrr[N]; int i; printf("%d人まで処理します",N); for(i=0;i<N;i++){ inputData(i,rrr); outputData(i,rrr); calcBMI(i,rrr); printf("\n"); } return 0; }
/*inputData関数の定義*/ void inputData(int n, Record r[]){ printf("%d人目の入力\n",n+1); printf("名前は? →");scanf("%s", r[n].personal); printf("生年月日は?(8桁)→");scanf("%s", r[n].birth); printf("身長は?(cm) →");scanf("%lf", &r[n].height); printf("体重は?(cm) →");scanf("%lf", &r[n].weight); } /*outputData関数の定義*/ /*calcBMIの定義*/ 実行結果は 1人まで処理します 1人目の入力 名前は? →hoge 生年月日は? →19700917 身長は(cm)? →174.5 体重は(kg)? →69.5 1人目の出力 名前は hoge 生年月日は 1970年09月17日 身長は 174.50cm 体重は 69.50kg 1人目のBMIは 22.82 Record型構造体の定義とoutputData関数の定義とcalcBMIの定義がよくわからないのですがどなたかわかりませんか? BMIの計算内にはpower関数を利用しなくてはいけないんですが
すいませんテンプレもつかわずに・・ [1] 授業単元:C実習 [2] 問題文(含コード&リンク):() キーボードから氏名、生年月日、身長、体重をそれぞれよみこんでRecord構造体変数に格納し そのデータからBMIを計算し同じ構造体メンバに格納し、画面に表示するプログラム 氏名、生年月日、身長、体重、BMIをメンバとする構造体Recordを定義する なおBMIは次の計算で求められる BMI=体重(kg)/身長^2(m) BMIの計算には、power関数も利用し、また、身長の入力単位がcmであることに注意する [3] 環境 [3.1] OS: Windows vista [3.2] visual studio 2005 [3.3] 言語: C [4] 期限: 2008/1/22まで [5] その他の制限: 特に無いです よろしくおねがいします
409 :
デフォルトの名無しさん :2008/01/21(月) 23:16:08
2つの整数を入力して、最大公約数と最小公倍数を 求めなさい。 このプログラムをお願いします。
>>410 ありがとうございます。
>>233 さんの方法を試してみたのですがじっこうけっかがうまくいかなくて・・
>>409 今年のセンター試験2Bでそのプログラムが出たよ
BASICだけど
関数powが定義されていないのとinputDataの定義を確認してくださいとでます あと出力のところで〜年〜月〜日とださなければいけないのですがその部分もわからないです
includeくらいしろよ。大体printfも書けないなら勉強し直せ
includeはしてます・・
printfは書けるんですが19700917と打ち込んだのを 1970年09月17日と分けるにはどうすればいいかわからないです
char buf[100]; fgets(buf, sizeof(buf), stdin); printf("%.4s年%.2s月%.2s日\n", buf, buf + 4, buf + 4 + 2);
powが定義されてないって出るなら,includeしてないだろ…常考
というかどこにも定義してなくないですか?一応powを別に定義したらうまくうごいたんですが double pow(double a) { return a*a; } こんなかんじじゃだめですかね?
>power関数も利用し なんだからダメだろ
そうですかすいません・・includeはしてあるんで何が原因かわからなくて・・
<math.h>をインクルードだろ・・・常識的に考えて・・・
#include <math.h>だ。 それとpowerは2乗じゃなく累乗の意。
いろいろ動かしたら定義しなくてもふつうに動くようになりましたありがとうございました 知識不足の自分に教えてくださってありがとうございます
e.gを使いこなす奴は、論文とかを読みなれてしまった汚い大人。
428 :
86 :2008/01/22(火) 01:05:39
>>386 ありがとうございました!!
まさか丁度300レス後とはwwww
wwwwwwwwww
430 :
86 :2008/01/22(火) 01:07:57
>>386 な、内容みたら文字化けがwwwwwwwwwwwwwwwwwww
orz
for(int i=0; i<50; i++) cout << "w";
JISコードでおk
【質問テンプレ】 [1] 授業単元:情報処理概論 [2] 問題文(含コード&リンク):() [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 22日10時まで 問題文 (ファイルからのデータ入力、ファイルへの出力) "in_file"という名前のファイルの中に多数の整数データが空白や改行コードで区切られて並んでいると仮定した上で この入力ファイルのなかのデータを1行に5個ずつ綺麗に並べて"out_file"という名前のファイルに出力するCプログラムを作成せよ。 入力ファイル”in_file"の内容が _-1111111111______2222222__33333 4444 55 6 7 8 9 0 1 2 3 4 5 6 7890123 のときには次のような内容を出力ファイル”out_file"に書き出す _-11111111_____22222______333333________4444__________55 _____________6___________7______________8____________9____________0 _____________1___________2______________3____________4____________5 _____________6__7890123 です、よろしくお願いします。
435 :
434 :2008/01/22(火) 02:08:11
書き込んだらずれてしまいました・・・ 「 _ 」はスペースで右揃えに並ぶ感じです。 よろしくお願いします
>>394 ありがとうございます。プログラムで見てみるとどういうことだったのかよく分かりました。
もっと勉強していこうと思います!!
strpbrkって知らなかった。 でも符号の分いれて、%11dの予感。
>>440 うぷろだの5854.txt
規制で携帯からなんでアドレス貼れなくてスマソ
442 :
デフォルトの名無しさん :2008/01/22(火) 07:51:01
ぼるじょあがC/C++の宿題を片づけますYO! 68代目 このスレと違いはあるのですか?
答える人が違う
446 :
デフォルトの名無しさん :2008/01/22(火) 15:14:04
fp=fopen(argv[1],"w"); buffer=(char *)malloc(buffer_size); while(fgets(buffer,sizeof(buffer),stdin)){ fputs(buffer,fp); if(sizeof(buffer)==buffer_size){ buffer=(char *)malloc(sizeof(buffer)*2); buffer_size=buffer_size*2; fputs(buffer,fp); free(buffer); ファイル入出力プログラムの一部ですが、 sizeof(buffer)では4バイトしか確保できないということに気がつきました。 できるだけプログラムをいじらず入力したサイズを取得する方法はありますか? ヒントをください。buffer_sizeの初期設定は1000byteです。 strlenでもできませんでした。
>>446 スレ違い。
初心者スレにでもどうぞ。
その際は何故バッファが必要なのか、その理由を書くことをお推めします。
449 :
デフォルトの名無しさん :2008/01/22(火) 16:30:31
452 :
デフォルトの名無しさん :2008/01/22(火) 18:40:18
453 :
デフォルトの名無しさん :2008/01/22(火) 19:40:07
[1] 授業単元:プログラミングU [2] 問題文:任意の数(最大10個)の整数を入力した後、 それらの最小公倍数と最大公約数を関数内で求め、mainの中で表示プログラムを作成すること。 [ 3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual Studio [3.3] 言語: C [4] 期限: 2008/1/25 [5] その他の制限:
>>452 ありがとうございました。
助かります!
456 :
455 :2008/01/22(火) 21:08:18
すみません問題文が一部文字化けしていました。 誤 1?n?10000の範囲 ↓ 正 1≦n≦10000の範囲 です。宜しくお願いいたします。
250を見ながら入力していったら c:\documents and settings\sano takumi\my documents\visual studio 2005\projects\san\san.cpp(26) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? と出たのですがこれはどういうことでしょうか?
>'#include "stdafx.h"' をソースに追加しましたか? してないならしろ。
佐野拓海か?せめてあげる内容は少し確認してからにしろ。どんまい。
特定しました
>>455 >ちなみに1<=n<=10000の範囲で一番大きなf(n)の値を返すnは871であり、
>f(871)=178である。
n = 6171, f(6171) = 261 じゃないの?
462 :
デフォルトの名無しさん :2008/01/22(火) 22:24:47
1:情報処理 [2]穴埋めです [3]わかんないです。 [3.1] (Windows) [3.2] lc-86? C-pad?: [3.3] C言語: [4] 期限: 2008/1/24
463 :
デフォルトの名無しさん :2008/01/22(火) 22:25:56
問2 4個の変数 a 整数 b 実数 c 精度の高い実数 d 文字 を宣言し、それぞれに 適当なデータを代入する。 そして次のように画面表示 するプログラム a の値は ... です b の値は ... です c の値は ... です d の値は ... です @$--------------------- [解答] #include <stdio.h> #include <conio.h> void main(){ getch(); }
464 :
デフォルトの名無しさん :2008/01/22(火) 22:27:09
37から229までの整数を加算し その結果を表示するプログラム @$--------------------- [解答] #include <stdio.h> #include <conio.h> void main(){ for( ) { } printf( ); getch(); }
山下さんおつかれさまです
466 :
デフォルトの名無しさん :2008/01/22(火) 22:33:08
x = 0 から出発し、x の値を 0.001 づつ増加させることを 繰り返し、x^2 + 7x - 1 の値 が初めて正となった時点で 繰り返しを終了し、そのときの x の値を表示するプログラム @$--------------------- [解答] #include <stdio.h> #include <conio.h> void main(){ while( ) { } printf( ); getch(); }
467 :
デフォルトの名無しさん :2008/01/22(火) 22:33:51
キーボードから整数を入力させ その数を x に代入する。 x が 100 より大きいとき、 「入力した数は 100 より大きい」 と表示し、x が 100 以下のとき、 「入力した数は 100 以下です」 と表示するプログラム @$--------------------- [解答] #include <stdio.h> #include <conio.h> void main(){ getch(); }
468 :
デフォルトの名無しさん :2008/01/22(火) 22:38:11
キーボードからアルファベットを1文字入力させ、それが「a」のとき、「a です」「b」のとき、「b です」 「c」のとき、「c です」「d」のとき、「d です」「e」のとき、「e です」 と表示し、それ以外のとき「a,b,c,d,e 以外の文字」と表示するプログラム @$--------------------- [解答] #include <stdio.h> #include <conio.h> void main(){ switch( ) { } getch(); }
死ねカス
470 :
デフォルトの名無しさん :2008/01/22(火) 22:40:12
問10 縦 100m、横 120mのグランド がある。 縦横それぞれ同じ長さ x だけ 長くして面積が 13000u と なるようにしたい。 x を少数点以下1桁までの精度 で求めるプログラム。 @$--------------------- [解答] #include <stdio.h> #include <conio.h> void main(){ float x=0; while( ) { x = x + 0.01; } printf("縦横 %5.1f b広げればよい\n",x); getch(); }
>>462-470 問7
キーボードから実数を一つ入力させ、それを x に代入する。
x ≦ 100 のとき「A」、
100 < x ≦ 350 のとき「B」、
350 < x ≦ 600 のとき「C」、
600 < x のとき「D」と表示するプログラム
問8
1 + 4 + 9 + 16 + ・・・と加えて行き、
和が初めて 10000を超えたとき、
その和の値、および最後に加えた数を求めて表示するプログラム
問9
次に書かれた数の総和を求め、結果を表示するプログラム:
1
1+2
1+2+3
1+2+3+4
・
・
・
1+2+3+4+5+・・・+ 10
473 :
455 :2008/01/22(火) 22:52:54
>>461 さん
問題文をそのまま記述したのですが、そうなりますかね?
でも私には判断できないです....。
>>473 おそらく1〜1000の書き間違いだろ
気にするな
>>473 1から1000までの範囲にしといた
#include <stdio.h>
#define N 300
int f(int);
int k=0,array[N]={0};
int main(void) {
int n,a,b=0,c;
for(n=1;n<=1000;n++) {
a=f(n);k=0;
if(a>b) {
b=a;
c=n;
}
}
printf("%d %d\n\n",c,f(c));
for(n=0;n<=b;n++) printf("%d ",array[n]);
return 0;
}
int f(int n) {
array[k++]=n;
if(n==1) return k-1;
if(n%2==0) f(n/2);
else f(3*n+1);
}
476 :
472 :2008/01/22(火) 23:01:36
兄です。KRDで弟がお世話になっています。特定しましたんでヨロシク!
478 :
461 :2008/01/22(火) 23:08:43
Lets to the best today! マジで?
>>470 #include <stdio.h>
#include <conio.h>
#include <math.h>
void main(){
float x=0;
while(0)
{
x = x + 0.01;
}
x=floor((-110+10*sqrt(131.0))*10+0.5)/10;
printf("縦横 %5.1f b広げればよい\n",x);
getch();
}
明日もビジネスマナー研修頑張ってください by兄
482 :
455 :2008/01/22(火) 23:28:36
すみませんでした!私の書き間違いでした。
1≦n≦10000の範囲で大きな関数を求めることは正しいのですが、
ちなみに〜の下りの問題文の方では皆さんのおっしゃる通り
「1≦n≦1000の範囲」においてはnは871でした。
>>474 さん
よく確認してから記述するよう以後気を付けます。すみませんでした。
>>475 さん
>>478 さん
ありがとうございます!今自分でもプログラムを組んでいたのですが、
教えて頂いたプログラムを参考にして正しく実行できました。
本当に助かりました。
>>480 x = -110 + sqrt(13100);
[1] 授業単元: プログラミング入門 [2] 問題文(含コード&リンク): コマンドラインから入力された文字列に小文字のアルファベット が含まれていた場合は全て大文字に変換し、文字列を昇順にソー トして表示するプログラムを作成して下さい パラメータ文字列が2つ以上入力されなかった場合には、エラー メッセージうぃ表示して終了させて下さい sample One usage : sample STRING1 STRING2 [STRING3 ... ] sample matsui ichiro ** String data ** matsui ichiro ** Changed string ** ICHIRO MATSUI sample sample1 sample2 sample3 ** String data ** sample3 sample2 sample1 ** Changed string ** SAMPLE1 SAMPLE2 SAMPLE3 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2005 [3.3] 言語: C [4] 期限:1月24日 お願いしますm(_ _)m
>>487 #include<stdio.h>
#define MAX 5
int main(){
int a[MAX]={1},i,j;
for(i=1;i<=30;i++){
for(j=0;j<MAX;j++)
a[j]*=i;
for(j=0;j<MAX-1;j++)
a[j+1]+=a[j]/10000000,
a[j]%=10000000;
}
for(i=0;i<MAX;i++)
printf("%08d",a[MAX-i-1]);
printf("\n");
return 0;
}
>>488 #include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int cmp( const void * l, const void * r ) { return strcmp( *((char **)l), *(( char **)r) ); }
int main( int argc, char **args )
{
int i;
if ( argc < 3 ) {
fprintf( stderr, "usage: sample STRING1 STRING2 [STRING3 ... ]\n" );
exit( 1 ) ;
}
argc --; args ++;
puts( "** String data **" );
for ( i = 0; i < argc; ++i )
puts( args[ i ] );
puts( "** Changed string **" );
qsort( args, argc, sizeof( char * ), cmp );
for ( i = 0; i < argc; ++i ) {
char *p;
for ( p = args[ i ]; *p != '\0'; ++p )
putchar( toupper( *p ) );
puts("");
}
return 0;
}
>>453 #include <stdio.h>
#define N 10
int get_gcd( int m, int n ) { return ( m < n ) ? get_gcd( n, m ) : ( n == 0 ) ? m : ( m % n == 0 ) ? n : get_gcd( n, m % n ); }
int get_lcm( int m, int n ) { return ( m == 0 || n == 0) ? 0 : m * n / get_gcd( m, n ); }
int main( int argc, char ** args ) {
int nums[ N ] = {0}, i, l, gcd, lcm;
puts( "input numbers. " );
for ( i = 0; i < N; ++i ) {
scanf( "%d", &nums[ i ] );
if ( nums[ i ] < 1 ) { break ; }
}
l = i;
gcd = lcm = nums[ 0 ];
for ( i = 1; i < l; ++i ) {
gcd = get_gcd( gcd, nums[ i ] );
lcm = get_lcm( lcm, nums[ i ] );
}
for ( i = 0; i < l; ++i ) {
printf( "%d ", nums[ i ] );
}
printf( "\nLCM:%d, GCD:%d\n", lcm, gcd );
return 0;
}
10個入れるか,0以下の数を入れるかで入力をやめるようにしてみた
497 :
デフォルトの名無しさん :2008/01/23(水) 11:29:13
#include <stdio.h> #include <stdlib.h> void fileread(int,char *); void filewrite(int,char *); int main(int argc ,char *argv) { if(argc!=3){ printf("次回から引数を入力してください\n"); return 0; } fileread(argc,argv); filewrite(argc,argv); return 0; } void fileread(int argc,char *argv){ FILE *fp; char *buffer; fpos_t start_fpos; int filesize; if(!strcmp(argv[2],"r")){ fp=fopen(argv[1],"r"); fgetpos(fp,&start_fpos);
498 :
デフォルトの名無しさん :2008/01/23(水) 11:29:44
fseek(fp,0,SEEK_END); filesize=ftell(fp); fsetpos(fp,&start_fpos); buffer=(char *)malloc(sizeof(char)*filesize); while(fgets(buffer,filesize,fp))printf("%s",buffer); free(buffer); } } void filewrite(int argc,char *argv){ FILE *fp; char *buffer,*stock; int buffer_size=1000,count=0; if(!strcmp(argv[2],"w")){ fp=fopen(argv[1],"w"); buffer=(char *)malloc(sizeof(char)*buffer_size); while(fgets(buffer,buffer_size,stdin)){ count++; stock=realloc(buffer,sizeof(char)*count); sscanf(buffer,&stock[count-1]); } fputs(stock,fp); free(buffer); } fclose(fp); }
499 :
497 :2008/01/23(水) 11:33:24
>497-498 コンパイルエラーが出ます。 passing argument 1 of ‘fopen’ makes pointer from integer without a cast fopenの箇所が整数値を吐き出してるのだとは分かるのですが、 どう修正していいのか理解できません。ご教授ください。
500 :
390 :2008/01/23(水) 11:53:55
>>437 大変参考になりました、ありがとう御座います。
strcmp()とstrcpy()については授業でそれを教えたから
とにかくそれを使わせて習得させるという方針っぽいです。
構造体structも次回の講義で始めて習うという初歩っぷりですので
基礎的な部分から稚拙さが漂ってくるのかもしれませんが…
structの勉強もできて非常にためになりました、多謝です
>>497 スレ違い.
main( int argc, char * argv ) ;じゃなくて
main( int argc, char * argv[] ) ;
void fileread(int argc,char *argv) じゃなくて
void fileread(int argc,char *argv[]) にしないと
>>496 #include <stdio.h>
int main(int argc, char *argv[])
{
int i, j;
double x, y, sum;
char buf[100];
FILE *fp;
if (argc != 2)
return 1;
fp = fopen(argv[1], "r");
if (fp == NULL)
return 1;
for (i = 0, sum = 0.0; i <= 10; i++) {
for (j = 0; j < 100; j++) {
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%lf %lf\n", &x, &y);
sum += y;
}
printf("%lf\t%lf\n", x, sum/100);
}
return 0;
}
>>501 馬鹿発見。スレ違いと言う点には同意するので、どこら辺が馬鹿なのかは割愛。
そこだけ変えても意味がないってことだろ。根本的に作りがおかしいんだから。
506 :
デフォルトの名無しさん :2008/01/23(水) 13:40:59
>>494 ありがとうございます。
因みにLCMが最大公約数でGCMが最小公倍数なんですかね?
>>506 lcm と gcd でググれば何の略か分かる
>>503 fopenの引数が間違ってる、という説明に留めろという理解でよろしい?
確かに、
>main( int argc, char * argv ) ;じゃなくて
>main( int argc, char * argv[] ) ;
というのは先走り感が否めないが。
510 :
395 :2008/01/23(水) 16:29:49
>>444 argument error
と出てしまいます
プログラム実行時に data.txt を後に加えて実行すればおk
[1] 授業単元:プログラム入門 [2] 問題文:2つあるので下に書いていきます [3] 環境 [3.1] OS:Windows [3.2] gcc 3.4 [3.3] 言語:C [4] 期限: 明後日 1.0から1000までの数を1行に10個ずつカンマ区切りで表示する。 末尾にはカンマを加えない。 実行例 0,1,2,3,4,5,6,7,8,9 10,11〜〜〜〜 〜〜〜〜〜〜998,999 1000 2.文字列を入力して、その文字列の中にアルファベットと数字をそれぞれカウントして結果を表示する。 実行例 入力して:nurupo ga!!!!1111 アルファベットは8文字 数字は4文字 それ以外は4文字 2つも出してしまい、申し訳ないですがかなり切羽詰ってます。 プログラムに関しては先月始めたばかりで初心者中の初心者です、なのでそこまで難しいことは習ってないと思います。 ですが分からないのでお力を貸してください。
>>513 すいません、見落としてました。スペースもそれ以外に追加します。
>>512 #include<stdio.h>
int main(void){
int i;
for(i=0;i<=1000;i++){
if(i%10==0) printf("%d", i);
else printf(",%d", i);
if((i+1)%10==0) printf("\n");
}
return 0;
}
#include<stdio.h>
#include<ctype.h>
int main(void){
char buf[256];
int i, alphanum=0, digitnum=0, othernum=0;
printf("入力して:");
fgets(buf, sizeof(buf), stdin);
for(i=0;buf[i]!='\0';i++){
if(isalpha(buf[i])) alphanum++;
else if(isdigit(buf[i])) digitnum++;
else othernum++;
}
printf("アルファベットは%d文字\n", alphanum);
printf("数字は%d文字\n", digitnum);
printf("それ以外は%d文字\n", othernum);
return 0;
}
>>515 >for(i=0;buf[i]!='\n';i++){
の方がいいかもNE!
>>515 、516
ありがとうございます。
今、外なんで家に帰ってから実行してみようと思います。
1] C言語 [2] 台形公式を用いて∫0^2 √4-x^2 の近似値を求めるプログラミングを作成しなさい [3] 環境 [3.1] OS: Linux [3.3] 言語: (C言語 [4] 期限:明日 [5] その他の制限: お願いします
>>519 #include <iostream.h>
void main(){cout << "どう見ても0です << endl;}
521 :
デフォルトの名無しさん :2008/01/23(水) 20:47:29
>>519 #include <stdio.h>
#include <math.h>
#define E 0.00001
double TrapMethod(double (*f)(double), double a, double b, double e)
{
if (fabs(b - a) < e) return 0.5 * (f(a) + f(b)) * fabs(b - a);
else {
double t = 0.5 * fabs(b - a);
return TrapMethod(f, a, a + t, e) + TrapMethod(f, a + t, b, e);
}
}
double func(double x) { return sqrt(4 - x * x); }
int main(void)
{
printf("%.10f\n", TrapMethod(func, 0.0, 2.0, E));
return 0;
}
>>487 つ265252859812191058636308480000000
[1] 授業単元:C言語 [2] 問題文:ファイル中の文字数,単語数,行数をカウントするプログラムを作成せよ。 単語の切れ目はアルファベット以外の文字、行の終わりは改行文字またはファイルの終端とします。 この課題のソースファイルで動作確認しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:1/25 [5] その他の制限:特になし お願いします
>>523 #include <stdio.h>
int main(void)
{
int i, j, n, num[] = {1000, 500, 100, 50, 10, 5, 1};
char roman[] = "MDCLXVI";
while(1) {
printf("Input integer (0 quit) ====>");
scanf("%d", &n);
if(n==0) break;
printf("%d ====> ", n);
for(i=0; n; i++) {
int c = n / num[i];
for(j=0; j<c; j++) putchar(roman[i]);
n %= num[i];
}
putchar('\n');
}
return 0;
}
去年と同じ問題だw
>>529 なんで、そんなに括弧で囲む必要があるんだい?
535 :
デフォルトの名無しさん :2008/01/24(木) 01:39:57
[1] 授業単元:アルゴリズム2 [2] 問題文 最小全域木問題 で以下のコメント文の e[i] を、e[t[0]], ..., e[t[k - 1]]に加えても閉路ができない をどうやって書くのか分かりません。トレースの問題で躓いてしまいます。 プログラムが分かればトレース出来そうなのでよろしくお願いします。 void mst(int i, int k, int weight) { if (k == n - 1) { if (weight < best_weight) { best_weight = weight; 配列 best_tree に t をコピー; } } else if (i <= m) { if (e[i] を、e[t[0]], ..., e[t[k - 1]]に加えても閉路ができない){ t[k] = i; mst(i + 1, k + 1, weight + w[i]); } mst(i + 1, k, weight); } } [4] 期限:1/24 9am test..!
一応情報はランダムにこんな感じで与えられます。 これをどう利用して記述して求めているのかが分かりません。 辺の番号 1 2 3 4 5 6 7 8 9 10 11 12 端点1 4 3 1 2 4 6 1 8 5 6 7 5 端点2 6 7 5 3 5 1 2 4 4 2 8 2 重み 9 16 13 8 7 12 10 5 11 15 4 2
>>533 データ(変数)を尊重し、できるだけそのデータが使われるときに、宣言し使う。
こうすることで、必要のないデータを他のブロックで誤って書き換えられることを防いでいる。
いわゆる、データ指向プログラミング。
>>529 fclose忘れてるな。別にいいけど。
>>529 >>537 {NULL};が気になる。普通{0}じゃね?残りは0で埋められるわけだし。
NULLだとアドレスかと思ってしまうな
まぁ実用上はまったく問題ないと思うけど
>>535 配列eのメンバがわからないことには何とも言えない。
つーか、ソースうp。
スイマセン 再うp。 まず、バックトラックによって、グラフGの最小全域木を求める 次のようなアルゴリズムを考えます。ここで、n はGの 頂点数、m は辺の数で、e[i] (i = 1, ..., m) はGのi番目の 辺を表し、w[i] はその重み(正整数)を表すものとします。 また、int 型の配列 t と best_tree は大域変数であるとします。 void mst(int i, int k, int weight) { if (k == n - 1) { if (weight < best_weight) { best_weight = weight; 配列 best_tree に t をコピー; } } else if (i <= m) { if (e[i] を、e[t[0]], ..., e[t[k - 1]]に加えても閉路ができない){ t[k] = i; mst(i + 1, k + 1, weight + w[i]); } mst(i + 1, k, weight); } } 関数mstへの呼び出しと戻りを「イベント」と呼ぶことにします。 n = 8, m = 12 であり、Gの頂点が 1, 2, ..., n であって、 Gの m 本の辺の各端点と重みが次のように与えられるとします。 辺の番号 1 2 3 4 5 6 7 8 9 10 11 12 端点1 6 7 5 4 3 1 6 7 8 4 5 2 端点2 7 5 4 3 1 2 4 3 6 8 3 8 重み 14 11 15 12 4 9 6 16 8 7 10 2
>>537 そこまでするならサブルーチン化した方がいいような気もするが。読みづらいしな。
>>531 純粋な興味として聞きたいんだが、どうして座標が整数値で与えられているのにヘロンの公式を使うんだろう。
547 :
デフォルトの名無しさん :2008/01/24(木) 10:54:30
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):0<N <100,000,000の整数を入力したとき、Nの素因数分解結果を出力するプログラムを作成せよ。 [3.1] OS:XP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C++ [4] 期限:1/25 15時 [5] その他の制限: 2から √Nまでの素数について、小さい順にNを割ってみて割り切れたらその素数aはNの素因数である。 割り算の結果N1についてa から √N1 までの素数について小さい順にN1を割り切れたらその素数b も Nの素数である。以上を割り算の結果Nxが素数になるまで繰り返す。Nx もNの素因数である。 ということを使ってやれと言われました。 簡単なコードでお願いします。
549 :
デフォルトの名無しさん :2008/01/24(木) 11:24:20
q
550 :
546 :2008/01/24(木) 12:25:04
>>548 助かりした
無事単位を取得できそうです
ありがとうございました!
単位wwwどんだけしょぼい大学だよ
大学行ってないから基準が分からないんだね。
本来なら大学は自分で勉強するべきとか考えないとすれば 90分×14回 = 21時間 だから、無理もない たったの二日で何が習得出来るって話だ
554 :
548 :2008/01/24(木) 13:14:10
>>555 回答した本人じゃないが、
for (i = 0, sum = 0.0; i <= 10; i++) {
for (i = 0, sum = 0.0; i <= 10; i++, sum=0.0) {
にすれば問題ないのでは?
557 :
デフォルトの名無しさん :2008/01/24(木) 15:30:11
>>550 ちょっWwおまWw
どこの大学だよ
それで単位認定って
笑った
文系が理系をちょっとかじるようなゼミだとそんなもんじゃね?
559 :
デフォルトの名無しさん :2008/01/24(木) 15:40:41
>>559 よくあるのはベクトルのノルムで判定する方法
561 :
デフォルトの名無しさん :2008/01/24(木) 15:43:21
>>561 ファイルに書き出すときのテキストのフォーマットは?
563 :
デフォルトの名無しさん :2008/01/24(木) 18:13:49
565 :
548 :2008/01/24(木) 18:47:07
566 :
548 :2008/01/24(木) 18:51:31
>>568 ありがとうございます!本当に助かります。
570 :
548 :2008/01/24(木) 19:40:44
>>566 にもミスがあったorz
ex11_2.c内の24行目
誤)p = &pmemb[count];
正)p = &pmemb[count++];
度々申し訳ない。
571 :
デフォルトの名無しさん :2008/01/25(金) 00:22:36
574 :
573 :2008/01/25(金) 02:18:08
577 :
ラッセン沖縄 :2008/01/25(金) 05:16:32
[1]授業単元 プログラミングB [2]問題文 次の仕様を満たし、入力例の通りにして実行でき、更に、出力例の通りに出力されるようなCプログラムを作成せよ。(出力の空白や桁数にも留意せよ。) 仕様 三角形の底辺と高さ入力し、その面積を求める。 入力例 Z:\>(kadai) (カッコ内を 底辺=(3.0) 入力する)高さ=(4.5) 出力例* ----+----|----+----|----+----|----+----|----+----| 底辺=3.000, 高さ=4.500 面積=6.7500 (*目盛りは桁を示すためのもの。プログラムで出力するのではない。) [3]期限1/25 14時まで 急いでいます! よろしくお願いします。
[1] 授業単元: C言語 [2] 問題文: 今年のカレンダーを表示させる [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:visual studio 2005 [3.3] 言語: C言語 [4] 期限: 明日まで [5] 意味のある定数はマクロ define文 途中でreturn exit 外部変数は使わない。 ヨロシクお願いします
[1] 問題文: ボンバーマンが格子状(1ブロック1辺20m、マップは縦横それぞれ100ブロック)のマップを爆弾を避けてゴールまでたどり着き、その時間を計算し表示するプログラムを作りなさい。 爆弾の位置座標は既知であり、ボンバーマンの速度は4m/sとする。 [2] 環境 [2.1] OS: Windows [2.2] コンパイラ名とバージョン: Visual Studio [2.3] 言語: C++ [3] 期限: 2008年1月28日まで [4] その他の制限:無し 自分では全く手が出ませんでした…orz 先輩方のお力添えを頂ければ幸いです! 宜しくお願い致します( ´・ω・`)
再度申し訳ありません。 スタート時にルートを決定するのではなく、ブロック毎に曲がれるか判断するみたいです。あとなるべく早くゴールにたどり着かないとダメみたいです(>_<)
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):短いのでここに書きます。 (1) wavファイルを解析し、音声データを読むためのプログラムを作成せよ。 (2) 音声データを半分に縮め、変換させるプログラムを書け。 (3) 音声データを反転させるプログラムをかけ。 [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語: C [4] 期限: 2008年1月28日午前9時まで [5] その他の制限: 特にありません。 C初心者なので、どう手をつけたらいいのか全くイメージできません。 皆様方のご協力をお願いいたしますm(_ _)m なにとぞよろしくお願いいたします。
>>404 期限が切れてしまってますが、どなたかよろしくお願いします。
>>
>>578 #include<stdio.h>
int main(void){
int year, month, day, week, tmpm, tmpy, i;
int daymax[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
year = tmpy = 2008;
month = tmpm = 1;
day = 1;
if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) daymax[1] = 29;
if (tmpm < 3) {
tmpy--;
tmpm += 12;
}
week = (tmpy + tmpy/4 - tmpy/100 + tmpy/400 + (13*tmpm+8)/5 + day) % 7;
for(; month <= 12; day++, week++){
if(week == 7) week = 0;
if(day == 1){
printf("\n***** %04d / %2d *****\n", year, month);
for(i=0; i < week; i++) printf(" ");
}
printf(" %2d", day);
if(day == daymax[month-1]){
putchar('\n');
day = 0;
month += 1;
continue;
}
if(week == 6) putchar('\n');
}
return 0;
}
>>582 その書き込みの50分後、
mixiの宿題スレに全く同じ問題を貼った奴が居る。
開発環境と期限は違うが、もしかしてお前さんか?
>>585 printf("\ntime = %d\n", (weight_map[BLOCKNUM-1][BLOCKNUM-1]+1) * 5)
を
printf("\ntime = %d\n", (weight_map[BLOCKNUM-1][BLOCKNUM-1]) * 5)
に修正してください
[1] 授業単元:C++プログラミング [2] 問題文: (処理の中身ではなく、ファイルの読み込みに関してなのですが) 1. フォルダ内に複数存在する "***.dat"(***は数字ではない)を読み込んでそれぞれについて同じ処理を行なう。 2. 処理の中でそれぞれのファイル名(***)とその処理結果(これは2つの数値です)をまとめて別の1つのファイルに出力する。 3. フォルダ内の全ての "***.dat" について処理し終わったらプログラムを終了する。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ:Visual Studio 2005 [3.3] 言語:C++ [4] 期限:1/28 AM10:00 上のようなことがしたいのですが、いい方法が思いつきません… どなたかよろしくお願いします。
コマンドラインからhoge *.datとでも入力して、 好きなように繰り返しをすればいい ここは丸投げスレなんだからもっと具体的に書け
>>588 ファイルは"(生徒の名前).dat"となっていて各教科のテストの点が書かれているのでそれを合計し
1つのファイルに全員の分を"生徒の名前:合計点 \n"みたいな感じで出力したいのですが、
おっしゃっている「コマンドラインから〜」というやり方がわからないんです。
すいません
>>589 #include <iostream>
#include <fstream>
void main(int argc, char *argv[])
{
std::ofstream output( "output.dat" );
for(int i=1; i<argc; i++){
//argv[i]を読み込んで名前と合計点をoutputに書き出す。格納形式が分からんから書けん
}
cout << "オワタ" << endl;
}
実行ファイルをhoge.exeとするとコマンドラインから
hoge.exe *.dat
と入力すればよい
>>590 >>588 をみて同じようなことをしたのですが、
Output.dat には "* : 0" としか出力されないんです…
コマンドラインでワイルドカード使うために何か特別な作業が必要だったりしますか?
ファイルの書式も書かずに・・・
inputファイルには、"国語: 74"みたいに "(教科名):(半角スペース)(数値)"というのが7行ならんでいます。 すいません。
>>591 #include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i = 1; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
これでも
a.exe *.dat
*.dat
とかになる?
そもそもwinで実行引数にワイルドカードで一括指定ってできたっけ?
標準ではできる。シェルによって対応がまちまちだからなあ
あと、
>>587 は引数の形でなしにプログラム内でディレクトリを掘って探すのが題意かもね。指定されてないけど
>>596 そうだったか、それならワイルドカードで指定する際に
カレントディレクトリに該当ファイル置いてないとかかね。
599 :
デフォルトの名無しさん :2008/01/25(金) 21:54:47
@アルゴリズムとデータ構造 Aパズルの世界では、1 から 9 までの数字を 1 個ずつすべて使った数字(たとえば、123456789 とか 321654987)を 小町数 と呼ぶ。1 から 9 までの数字を順番に並べ、 数字の間に演算記号をつけて計算結果が 100 になるような計算式を求めることを 小町算 という。 加算と減算のみからなる小町算の解は、下記のようになる。 12-3-4+5-6+7+89 = 100 123-4-5-6-7+8-9 = 100 123-45-67+89 = 100 123+4-5+67-89 = 100 123+45-67+8-9 = 100 12+3-4+5+67+8+9 = 100 12+3+4+5-6-7+89 = 100 1+23-4+56+7+8+9 = 100 1+23-4+5+6+78-9 = 100 1+2+3-4+5+6+78+9 = 100 1+2+34-5+67-8+9 = 100 9から1までの数を降順に並べ、加算と減算のみで計算式を構成し、計算結果が 0 になるものを全て求めよ。 9 □ 8 □ 7 □ 6 □ 5 □ 4 □ 3 □ 2 □ 1 = 0 上の問題を解くプログラムを作成しなさい。 3、 3,1 windows 2 gcc 3 C 4、明日の午後8時まで 5、特にないです。 よろしくお願いします^
>>262 です
遅れてすいませんやっと発言ができました(プロバがアク禁食らってました)
本当に感謝ですー
ありがとうございました!
>>599 int main(void)
{
puts("98+7-65-43+2+1");
puts("98-76+5+4-32+1");
puts("98-7-6-54-32+1");
puts("9+8+7+6+5-4-32+1");
puts("9+8+7+6-54+3+21");
puts("9+8-76-5+43+21");
puts("9-87+6+54-3+21");
return 0;
}
603 :
デフォルトの名無しさん :2008/01/25(金) 23:11:16
[1] 授業単元: C言語 [2] 問題:関数 f は f=√x * √(1 - 2.5 * 10^-5 * x^2)で表される。 xの初期値4.0から0.5刻みで20.0まで変化させたときの xとfの値をExcelに出力せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Visual C++ 2005 [3.3] 言語: C [4] 期限: 2008年1月27日 [1] 授業単元: C言語 [5] その他の制限:出力はcsvファイル可。
604 :
591 :2008/01/25(金) 23:30:58
>>594 そのプログラムでやってみても *.dat となりますね・・・
>>598 のせいだ!と思ったので、.exeのあるディレクトリに .datを全部移してみたのですが、
それでも結果は変わらなかったです。
これはもう手書きで1個1個ファイル指定していくしかないんでしょうか・・・
カレントディレクトリの意味分かってるか? 一度exeのあるパスまでcdコマンドで移動してから実行しないとダメだぞ。
606 :
591 :2008/01/25(金) 23:42:57
あ、それはさすがに・・・。 すいません
>>599 #include<stdio.h>
int calc(char *str){
int ret=0, value, idx;
while(sscanf(str, "%d%n", &value, &idx)>0){
ret+=value;
str+=idx;
}
return ret;
}
char *top(char *str){
while(*--str);
return str+1;
}
void check(char *work, int depth){
if(depth<=0){
*work='\0';
if(calc(top(work))==0) puts(top(work));
return;
}
*work++='0'+depth;
if(depth>1){
*work='+';check(work+1, depth-1);
*work='-';check(work+1, depth-1);
}
check(work, depth-1);
}
int main(void){
char str[20]="";
check(str+1, 9);
return 0;
}
>>584 mixiはやっていないので、私ではないです。
>>591 Windows のコマンドプロンプトはワイルドカードを展開しないようだ
解決案
1.コマンドプロンプトで動作するシェル(bash とか)を一段かませる
2.実行ファイルのスタートアップルーチンでワイルドカードを展開するコンパイラ(ライブラリ)を使う
3.dir /b の結果を実行ファイルに渡す
4.自力でファイル検索ルーチンを作る
5.手作業でやる
610 :
591 :2008/01/26(土) 00:13:33
>>609 そうですか。 わかりました。
1,2,4は今の自分には荷が重そうなので
とりあえず "dir /b > temp.dat" で temp.dat を読ませる感じにしようかと思います。
ありがとうございます。
他の方もありがとうございました。
612 :
599 :2008/01/26(土) 01:18:08
>>614 課題1と課題2は現行スレで見た気がするぞ。
>>615 本当ですか?
ちょっと探してみます
レス番のあてつけとか出来ませんか
618 :
478 :2008/01/26(土) 03:18:22
>>616 それぐらい自分で探してくれ・・・と言いたい所だが、
自分がうpした課題1だけ。
>>618 本当にありがとうございます(´;ω;`)
620 :
デフォルトの名無しさん :2008/01/26(土) 08:00:09
前スレの231と同じ+αなのですが、落ちちゃって見れません、再度お願いできませんでしょうか?お願いしますorz 問題下[1]プログラミングU [2] (1) 次の学生の成績表を元に,出力結果のように合計点と平均点を出力するプログラムを作成せよ。ただし,for文を使うこと。 (成績表) 学籍番号 5001 5002 5003 数学 62 45 76 英語 75 65 93 国語 54 82 63 (出力結果) 数学の合計点=177点,数学の平均点=59.0点 英語の合計点=233点,英語の平均点=77.7点 国語の合計点=199点,国語の平均点=66.3点 (2) (1)で作成したプログラムを元に,学生別の合計点を出力するプログラムを作成せよ (出力結果) 学籍番号5001の合計点は,191点です。 学籍番号5002の合計点は,192点です。 学籍番号5003の合計点は,226点です。
621 :
デフォルトの名無しさん :2008/01/26(土) 08:02:59
(3) (1)で作成したプログラムを元に,科目別の最高得点を表示するプログラムを作成せよ。 (出力結果) 数学の最高得点は70点です。 英語の最高得点は93点です。 国語の最高得点は82点です (4) (1)で作成したプログラムを元に,70点以上を得点した学生の人数を科目別に表示するプログラムを作成せよ。 (出力結果) 数学:1人 英語:2人 国語:1人 (5) (1)で作製したプログラムを元に、出力結果をユーザ関数を使って表示するプログラムを作成せよ。 (ユーザ関数の概要) main()関数から成績データを渡し、そのデータを(1)の(出力結果)どおりに表示する。 また、ユーザ関数はhyouji()とする。 (6) (1)で作製したプログラムを元に、次の構造体をつかって(出力結果)を表示するプログラムを作成せよ。 (構造体) typedef struct{ int no; int suugaku; int eigo; int kokugo; }seiseki;
622 :
デフォルトの名無しさん :2008/01/26(土) 08:05:18
[3]環境 [3.1]XP [3.2]visual studio 2005 [3.3]C++ [4]今日中 [5]なし sageソコね、長文申し訳ないです、期間も短いので、困難かもしれませんが出来る限りでいいのでお願いできませんか?
最後までsage損ねてる俺ばっかす・・・すいませんでしたorz
>>614 B
#include <stdio.h>
#include <math.h>
main(int argc,char *argv[])
{
int point,i=0;
double x,y,old_x,old_y,distance=0.0;
char line[1000];
FILE *fp;
if(argc!=2){
printf("Usage: %s <filename>\n",argv[0]);
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL){
printf("file can't open.\n");
exit(1);
}
while(fgets(line,999,fp)!=NULL){
if(sscanf(line,"%lf %lf",&x,&y)==1){
point=x;//データが1つしかない=点の数なのでpointに代入
continue;
}
if(i==0){ old_x=x; old_y=y; }//初回は以前の点がないので同じにする
distance+=sqrt(((x-old_x)*(x-old_x))+((y-old_y)*(y-old_y)));//2点間の距離の公式
old_x=x; old_y=y;//前回座標の保存
i++;
}
printf("point = %d distance = %lf\n",point,distance);
}
前回の点から今回の点まで移動した距離の合算でいいんだよね?
625 :
デフォルトの名無しさん :2008/01/26(土) 12:05:11
zipの場合は簡単に説明を書いてくれ 落として解凍するのダルいし
なぜzipなんだ・・・やる気うせる ウィルス恐いよ〜・゚・(つД`)・゚・。
ウィルス恐いよ〜(笑)
629 :
625 :2008/01/26(土) 13:37:03
内容は点電荷の電位を計算して、電荷の分布と電位の関係を求めるとありました。 もしかしたらこんな課題やらせるようなスレじゃなかったりして(汗) ZIPは安心して、ウィルスなんかないから(´∀`)
俺は電磁気学は興味ないからやってないしな。 力学なら余裕なんだがすまんね
電磁気しらんで方程式くそくらえ、電磁気のラウンド微分はどうし様
へん微分と数論は違うんだからね、ふん
(´∀`)
X+とX++の違いをわかる奴は天才だろ
バグを作らないグループとバグをツクリヤスイグループってあるわ、人のいうこと聞かない
637 :
デフォルトの名無しさん :2008/01/26(土) 15:31:15
[1] 授業単元:離散数学
[2] 問題文(含コード&リンク):
格子点上に置かれた任意の4点を結ぶ最小の直線スタイナーツリーを見つけるプログラムを作成せよ。
候補が複数ある場合は、それらを全て表示させるようにさせよ。
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:2/7
[5] その他の制限:
直線スタイナー木とは、碁盤上の縦横の線の交点に点を置き、
置いた全ての点を、碁盤の直線に沿って作る線分によって結ぶネットワークの事です。
例
http://www.dotup.org/uploda/www.dotup.org2826.jpg.html 閉路(ある点を出て、またその点に帰ってくる道がある状態)を作ってはいけません。
その直線スタイナー木の中で、最も距離の短いものを探せというものです。
もちろん、答えは複数候補ある場合が圧倒的に多いです。
とりあえず、自分で4点の座標を適当に置いてやれ、という事です。
どんなに泥臭い方法でも構わないので、ご協力お願いします。
638 :
579 :2008/01/26(土) 16:00:26
[1] 授業単元:プログラミング論 [2] 問題文(含コード&リンク): <問題1> 1からnまで加算して、その和が1000を超えるのはnがいくつのときか。 また、そのときの合計はいくつになるか。 <問題2> 1から30までの整数の中から奇数だけを取り出して配列に格納し、 その合計を求めるプログラムを作れ。 <問題3> 10個のデータをキーボードから入力し、合計を求めるプログラム を作れ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:LCC-Win32 [3.3] 言語:C [4] 期限:2/5 [5] その他の制限:なし お願いします。
おまいら、マジデ、ノードが増えたら手におえなくなるという答えを期待している先生を 裏切るんだな
>>639 問題1
#include <stdio.h>
int main(void)
{
int i, sum;
for(i=sum=0;sum<=1000;sum+=++i);
printf("%d, %d\n", i, sum);
return 0;
}
まあ動的計画法でも使うんだろうな。
>>639 2
#include <stdio.h>
int main(void) {
int odd[30/2+30%2] = {0}, n, i;
for(i=n=0;n<=30;++n) {
if(1 == n%2) {
odd[i++] = n;
}
}
for(i=n=0;i<sizeof(odd)/sizeof(int); ++i) {
n+=odd[i];
}
printf("%d¥n", n);
return 0;
}
ちなみにodd eyeなのは狙ってやった。
そこでORアルゴリズム
>>639 <問題3>
整数限定で。
#include <stdio.h>
#include <limits.h>
int main(void) {
int sum=0, i;
char sz[LINE_MAX];
const char * psz;
for(i=1; i<=10;) {
while(1) {
printf("input %d:", i);
if(fgets(sz, sizeof(sz), stdin)) {
int nTmp = strtol(sz, &psz, 10);
if('¥n' == *psz && sz != psz) {
sum += atol(sz);
++i;
break;
}
}
printf("error¥n");
}
}
printf("sum = %d¥n", sum);
return 0;
}
すまん、パッチ。 - sum += atol(sz); + sum += nTmp;
650 :
デフォルトの名無しさん :2008/01/27(日) 00:11:26
[1] デジタル画像処理 [2] 直線補間法を用いて、[256x256]画素の画像を、[512x512]画素の画像になるよう 拡大するプログラムの作成 [3.1] Linux [3.2] gcc [3.3] C言語 [4] 明後日までです 制限はないです! お願いします。
651 :
デフォルトの名無しさん :2008/01/27(日) 00:12:38
[1] デジタル画像処理 [2] 直線補間法を用いて、[256x256]画素の画像を、[512x512]画素の画像になるよう 拡大するプログラムの作成 [3.1] Linux [3.2] gcc [3.3] C言語 [4] 明後日までです 制限はないです! お願いします。
>>603 #include <stdio.h>
#include <math.h>
double f(double x)
{
return sqrt(x)*sqrt(1.0-2.5e-5*x*x);
}
main()
{
double x;
FILE *fp;
if((fp=fopen("dat.csv","w"))==NULL){
printf("file can't open\n");
exit(1);
}
fprintf(fp,"x,f\n");
for(x=4.0;x<=20.0;x=x+0.5){
fprintf(fp,"%lf,%lf\n",x,f(x));
}
fclose(fp);
}
>>583 スイマセン、ポインタも使わないという条件を書くのを
忘れていました。
もう一度お願いしてもいいでしょうか?
>>654 条件後付けして再度やってくれって・・・。
つか、”ちゃんとソース見た"のか?
>>654 #include<stdio.h>
int main(void){
int year, month, day, week, tmpm, tmpy, i;
int daymax[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
year = tmpy = 2008;
month = tmpm = 1;
day = 1;
if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) daymax[1] = 29;
if (tmpm < 3) {
tmpy--;
tmpm += 12;
}
week = (tmpy + tmpy/4 - tmpy/100 + tmpy/400 + (13*tmpm+8)/5 + day) % 7;
for(; month <= 12; day++, week++){
if(week == 7) week = 0;
if(day == 1){
printf("\n***** %04d / %2d *****\n", year, month);
for(i=0; i < week; i++) printf(" ");
}
printf(" %2d", day);
if(day == daymax[month-1]){
putchar('\n');
day = 0;
month += 1;
continue;
}
if(week == 6) putchar('\n');
}
return 0;
}
ワロタ
658 :
デフォルトの名無しさん :2008/01/27(日) 17:23:15
OS Mac言語C言語 課題 13.3 キーボードから 5 個の英単語を入力し、辞書順に並べ替えて表示するプログラムを作成せ 但し、 ? main関数内で単語を入力し、並び替える作業を関数 Sort 内で行なう ? 関数 Sortは戻り値がなく、入力した配列 wordを引数に持つ ? 結果の表示は main関数内で行なう ? 完全に辞書順にするのは難しいため、1 文字目のみを見て並び変えれば良いものとする ? 入力する単語は apple、peach、banana、grape、melonとせよ 自分で製作したのですが、無理でした。 基本これに、似た形を作ってもらって。 間違えも指摘してください。 #include<stdio.h> #define N 5 void Sort(char input[][]); main() { int i; char array[N[6];
printf("Input %d numbers\n", N); for(i=0; i<N; i++) { printf("array[%d] = ", i); scanf("%s", (array+i)); } Sort(array); printf("Sort result.\n"); for(i=0; i<N; i++) { printf("array[%d] = %s\n", i, array[i]); } } void Sort(char input[][]) { int i, j; char temp; for(i=1; i<N; i++) { for(j=N-1; j>=i; j--) { if(input[j-1][0] > input[j][0]) { temp = input[j-1]; input[j-1] = input[j]; input[j] = temp; } } } }
661 :
デフォルトの名無しさん :2008/01/27(日) 18:32:35
>>656 printf()って、引き数にポインタをとるんですよね?
ポインタを使わないでくださいって書いているんですけど読めないんですか?
>>659 >間違えも指摘してください。
「間違え」ではなくて、「間違い」ですね。
一次配列の中身をランダムに置換して更に、それを 逆置換するプログラムを教えてください。 ある係数を渡すことで毎回同じ並びになるようにして 暗号のように使えるようにしないといけないみたいです。 例えば「1」という係数を渡すと [3 2 4 1]を[2 4 1 3]にシャッフルして それをもう一度[3 2 4 1]に戻したいです
>>664 > 一次配列の中身をランダムに置換して更に、それを逆置換する
・一次配列って一次元配列ってこと?
・ランダムに置換の,「ランダムに」ってどの程度のことを言っているの?
666 :
664 :2008/01/27(日) 19:36:22
>>665 すみません「元」が抜けてましたね。
ランダムがどの程度か…そこまで指定されてないんですが
簡単な規則性が無ければ良いと思います。
>>664 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARRAY_SIZE 32
void shift(int *p, int v) {
int *buf = (int*)malloc(sizeof(int)*v+1);
memcpy(buf, p, sizeof(int)*v);
memmove(p, p+v, sizeof(int)*ARRAY_SIZE);
memcpy(p+(ARRAY_SIZE-v), buf, sizeof(int)*v);
}
void print(int *p) {
int i = 0;
printf("array[%d] = {", ARRAY_SIZE);
do {
printf("%d", p[i]);
} while (++i < ARRAY_SIZE && putchar(','));
printf("}\n");
}
int main () {
int i, in, array[ARRAY_SIZE];
for (i = 0; i < ARRAY_SIZE; ++i) array[i] = i;
print(array);
scanf("%d", &in);
shift(array, in%=ARRAY_SIZE);
print(array);
shift(array, ARRAY_SIZE-in);
print(array);
return 0;
}
例の > [3 2 4 1]を[2 4 1 3]にシャッフルして これがモロ規則性あるからその通りに作った。
>>659 Sort関数内に
printf("%d,%d\n",i,j);
を追加して、ちゃんとソートが行われているかどうか確認するといい
>>664 #include<stdio.h>
#include<stdlib.h>
typedef struct tag_dataset{int index, data;}dataset_t;
void swap_int(int *a, int *b){int c;c=*a;*a=*b;*b=c;}
void swap_dataset(dataset_t *a, dataset_t *b){dataset_t c;c=*a;*a=*b;*b=c;}
void encode(int data[], int datanum, int seed){
int i;
srand(seed);
for(i=0;i<datanum;i++) swap_int(&data[i], &data[rand()%(i+1)]);
}
void decode(int data[], int datanum, int seed){
int i; dataset_t *tmp;
srand(seed);
tmp=malloc(sizeof(*tmp)*datanum);
for(i=0;i<datanum;i++) tmp[i].index=i;
for(i=0;i<datanum;i++) swap_dataset(&tmp[i], &tmp[rand()%(i+1)]);
for(i=0;i<datanum;i++) tmp[i].data=data[i];
for(i=0;i<datanum;i++) data[tmp[i].index]=tmp[i].data;
free(tmp);
}
void prt(int data[], int datanum){
int i;
for(i=0;i<datanum;i++) printf(" %d", data[i]);
printf("\n");
}
int main(void){
int data[]={1,2,3,4, 5, 6, 7, 8, 9, 10}, datanum=sizeof(data)/sizeof(data[0]);
encode(data, datanum, 0); prt(data, datanum); /* 0 の部分が乱数seed */
decode(data, datanum, 0); prt(data, datanum); /* 0 の部分が乱数seed */
return 0;
}
671 :
581 :2008/01/27(日) 20:12:35
>>658 さん
解析サンプルまで付けてくださってありがとうございます(T_T)
本当に困っていたので助かりました!!
これを元に(2)と(3)にも挑戦します・・・
でも期限には絶対間に合う予感がしない・・・orz
672 :
670 :2008/01/27(日) 20:13:10
>>664 >>670 を書き直した
#include<stdio.h>
#include<stdlib.h>
void swap(int *a, int *b){int c;c=*a;*a=*b;*b=c;}
void encode(int data[], int datanum, int seed){
int i;
srand(seed);
for(i=0;i<datanum;i++) swap(&data[i], &data[rand()%(i+1)]);
}
void decode(int data[], int datanum, int seed){
int i, *tmp;
srand(seed);
tmp=malloc(sizeof(int)*datanum);
for(i=0;i<datanum;i++) tmp[i]=rand()%(i+1);
for(i=datanum-1;i>=0;i--) swap(&data[i], &data[tmp[i]]);
free(tmp);
}
void prt(int data[], int datanum){
int i;
for(i=0;i<datanum;i++) printf(" %d", data[i]);
printf("\n");
}
int main(void){
int data[]={1,2,3,4, 5, 6, 7, 8, 9, 10};
int datanum=sizeof(data)/sizeof(data[0]);
encode(data, datanum, 0); /* 0 の部分が乱数seed */
prt(data, datanum);
decode(data, datanum, 0); /* 0 の部分が乱数seed */
prt(data, datanum);
return 0;
}
674 :
659 :2008/01/27(日) 20:14:55
自分でもう一度やってみたけど。分けわからなくなってきた。 もう本当に無理っぽい。 誰か、答えを教えてください。
死ねカス
>>676 showpidがおかしくないか?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
int i, status, flg = 0;
for (i = 0; i < 10; ++i) {
if ((pid = fork()) < 0) {
fprintf(stderr, "error\n");
exit(1);
}
if (pid == 0) {
execv("showpid", NULL);
exit(1);
} else {
if (flg == 0) {
flg = 1;
printf("I am a parent with pid = %d.My child is %d.\n",getpid(),pid);
}
waitpid(pid, &status, 0);
}
}
return 0;
}
## showpid ## #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { printf("I am a child with pid = %d,My parent pid is %d.\n",getpid(),getppid()); exit(EXIT_SUCCESS); }
682 :
664 :2008/01/27(日) 22:07:09
>>870 助かりました☆
ありがとうございます!
684 :
637 :2008/01/27(日) 22:08:40
>>649 ありがとうございます!
あとはなんとかしてみようと思います。
簡単なゲームを作れといわれたのですがわかりません 誰か助けてください
>>686 むつかしくてわかりません、もっと簡単なのお願いします
ポーカーとかでいいです
ポーカーの方がよっぽど難しい罠
>>687 まあ何も考えずに
>>677 の問題文にあるソースをコピってコンパイルして動かしてみろ
そして中身を理解しろ
ポーカーはそれからだ
オセロ作るスレってのがあったな
釣りだろ
695 :
692 :2008/01/27(日) 23:21:19
>>680 確かに提示されたshowpidはおかしいですね。私もひっかかってしまった。
オレも早くせっくるしたい、by20歳
[1] 授業単元:C演習 [2] 問題文(含コード&リンク): /*ガウスの消去法プログラム*/ #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<math.h> #define A(x,y) a[(x)*(L+1)+y] void output(double *a, int, int); int gauss(double*a,double*x,int L,int n,double eps,int isw) main(){ double amax,awap; int i,j,k,l,m,ii,irow; if(isw==1) output(a, L, n){ for(m=0;m<n-1;m++){ amax=fabs(A(m,m)); irow=m; for(i=m+1;i<n;i++){ if(amax<fabs(A(i,m))){ amax=fabs(A(i,m)); irow=i;} if(amax<=eps){ return(0);} if(m!=irow){ for(l=m;l<n+1;l++){ 続く [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cresent [3.3] 言語: C++ [4] 期限: 1月28日11:00まで
701 :
673 :2008/01/28(月) 07:23:48
<<694ありがとうございます!参考にします。
702 :
デフォルトの名無しさん :2008/01/28(月) 10:56:13
[1] 授業単元:データ構造とアルゴリズム [2] 問題文(含コード&リンク): 配列に整数を100個蓄える。 (1)蓄える整数は関数randによって与えられるものとし、 この配列をバブルソートによってソートした結果を出力するプログラムを作成せよ。 (2)また、上の問題を選択ソートを使用したプログラムに変更せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月29日 よろしくお願いします
>>702 ありきたりで申し訳ないが
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
#define SWAP(type, x, y) do{type tmp = x; x = y; y = tmp;}while(0)
// バブルソート
void bsort(int *a, int n){
int i, j;
for(i = 0; i < n - 1; i++)
for(j = i + 1; j < n; j++)
if(a[i] > a[j])
SWAP(int, a[i], a[j]);
}
// 選択ソート
void ssort(int *a, int n){
int i, j, min;
for(i = 0; i < n - 1; i++){
min = i;
for(j = i + 1; j < n; j++) if(a[min] > a[j]) min = j;
SWAP(int, a[i], a[min]);
}
}
int main(void){
int i, a[N];
srand((unsigned)time(NULL));
for(i = 0; i < N; i++) a[i] = rand()%100;
for(i = 0; i < N; i++) printf("%4d", a[i]);
printf("\n");
bsort(a, N); // ssort(a, N);
for(i = 0; i < N; i++) printf("%4d", a[i]);
}
>>702 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
//バブルソート
int main(void){
int i,j,num[100],temp;
srand(time(NULL));
for(i=0;i<100;i++)num[i]=rand();
for(i=99;i>0;i--){
for(j=0;j<i;j++)
if(num[j]>num[j+1]){
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;}}}
for(i=0;i<100;i++)printf("%d\n",num[i]);
return 0;
}
//選択ソート
int main(void){
int i,j,num[100],min,temp;
srand(time(NULL));
for(i=0;i<100;i++)num[i]=rand();
for(i=99;i>0;i--){
min=i;
for(j=0;j<i;j++)if(num[min]>num[j])min=j;
temp=num[min];
num[min]=num[i];
num[i]=temp;}
for(i=0;i<100;i++)printf("%d\n",num[i]);
return 0;
}
1] 授業単元:プログラミング演習T [2] 問題文(含コード&リンク): 構造体を用いて加減算を行う。 以下の空白(oooo)を埋めよ。 #include <stdio.h> struct { /* 構造体の宣言 */ struct{ int a; int b; }keisan; int main( void ) { int wa, sa; /* 変数の宣言 */ scanf( "%d, %d", &keisan.a, &keisan.b ); /* 入力 */ wa= oooo ; /* 加算 */ sa= oooo ; /* 減算 */ printf( "和は%d 差は%d\n", wa, sa ); /* 出力 */ return 0; [3] 環境 [3.1] OS: WindowsXP [3.2] VC 5.5 [3.3] 言語: (C) [4] 期限: 無期限 [5] その他の制限: 特になし 途中まで自分で埋めたのですが、oooo部分が違うと指摘されました。 よろしくお願いします。
>>705 wa = keisan.a + keisan.b
sa = keisan.a - keisan.b
>>705 scanfの中も違う
scanf( "%d %d", &keisan.a, &keisan.b); /* 入力 */
合ってるんじゃね?
問題は、出題の意図がどうであったか、だな。
>706-709 ありがとうございます。問題部分はこれで解決しました。 甘えてもう1題 [2] 問題文(含コード&リンク): 2つの正の整数値a,bの最大公約数を出力するプログラムをユークリッドの互除法というアルゴリズムを用いて作成したい。 以下のプログラムの****部分に適切な処理をいれて,プログラムを完成させなさい。 #include <stdio.h> int main( void ) { int a, b; /* 変数の宣言 */ int m, n; scanf( "%d,%d", &a, &b );/* 2つの正の整数値を入力する */ m= a ; n= b ; while(m **** n){ /* ユークリッドの互除法を適用 */ if( m > n ) m = ***** ; else n = **** ; [3] 環境 [3.1] OS:WindowsXP [3.2] VC 5.5 [3.3] 言語: C言語 [4] 期限:無期限 [5] その他の制限: 特になし 同じく後半部分が解りませんでした。 よろしくお願いします。
>>710 while(m != n){
if(m > n)
m = m - n;
else
n = n - m;
}
#include <stdio.h> int main(void) { int a,b,m,n; scanf("%d %d",&a,&b); m=a; n=b; while(m*n) { if(m>n) m%=n; else n%=m; } printf("%dと%dの最大公約数は%dです",a,b,m+n); return 0; }
lcmやgcdの問題が多すぎ。
714 :
デフォルトの名無しさん :2008/01/28(月) 15:16:02
柴田望洋の本を使ってる授業多いNE。
>711 ありがとうございます!助かりました。 >712 別の表記方法なんですね。 勉強になります。
716 :
デフォルトの名無しさん :2008/01/28(月) 15:30:22
[1]プログラミング入門 [2]問題文 キーボードから月(1~12)を入力して、その月の日数を表示するプログラムを 完成させなさい [3]環境 [3.1] OS:WindowsXP [3.2] VC 5.5 [3.3] 言語: C言語 [4]期限:1月29日 [5]その他の制限特になし 初心者ですがよろしくおねがいします
>>716 #include <stdio.h>
int main(void)
{
int month, Days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
scanf("%d", &month);
printf("%d", Days[month - 1]);
return 0;
}
718 :
デフォルトの名無しさん :2008/01/28(月) 17:27:31
[1]プログラミング演習U [2]問題文 sample.txt 0 1 2, 2 4 5, 3 4 2, 1 2 5, 2 2 2, 3 1 4, 1 1 2, 2 1 3, 3 5 4, 4 2 2, 上の外部テキストファイル(sample.txt)に書かれている座標データを読み込み、 1行ずつ順にx,y,zの配列に格納し、ちゃんと格納されたか出力してください。 [3]環境 [3.1] OS:WindowsXP [3.2] コンパイラ名:gcc [3.3] 言語: C言語 [4]期限:1月28日 17:00 [5]その他の制限特になし
期限切れ
以前質問させてもらった
>>677 です。
期限を01月28日と書きましたが、宿題の期限が伸びたので
図々しい様ですが、改めてお願いさせて頂いても良いでしょうか?
内容は変わりありません。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):以下のゲームプログラムで、最初に設定する石の数を
ファイル操作を使って一括設定できるようにする。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5920.txt [3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:VC 6
[3.3] 言語:C
[4] 期限:2008年02月05日まで
[5] その他の制限:ファイル操作を習う所まで授業で進みました。
自分でも試行錯誤してみたのですが中々うまく行かず・・・
皆さんの知恵をお借りしたいと思います、よろしくおねがいします。
>>720 問題文の意図が明瞭でない。それだと答えようがない
>>721 説明不足ですみませんでした。
問題文の元は、石取りゲームといって最初に全体の石の数・そこから一度に取れる数を設定しなければいけません、それが以下の部分です↓
printf("石を交互に取り、最後の1個を取った人が負けです\n");
while (1) {
nOrder = 1;
printf("石の数は(5以上100以下)==");
gets(answer);
nStone = atoi(answer);
if (nStone < 5 || nStone > 100) {
printf("石の数が不正です\n");
continue;
}
while (1) {
printf("一度に取れる石の数は(2以上)==");
gets(answer);
nGet = atoi(answer);
if (nGet >= nStone) {
printf("一度に取れる石の数が多すぎます\n");
continue;
}
if (nGet < 2) {
printf("一度に取れる石の数が少なすぎます\n");
continue;
}
break;
}
この部分で設定するのですが、最初の石の数・一度に取れる数を一度に設定できるようにしたいのです。例えば、
「一括設定を使いますか?→ y/n」→「難易度を選択して下さい→ 1:優しい 2:普通 3:難しい」
ここで1を入力すると、石の数と取れる数をファイルから読み込み、その設定でプレイする。といった感じです。
説明下手ですみません、追記させていただきました。
#include<stdio.h> #include<string.h> int main(void){ FILE *fp; char line[128], *p; int nStone, nGet, level, cnt; 〜省略〜 for(cnt=1; fgets(line, 128, fp) != NULL && cnt <= 3; cnt++){ if(level != cnt) continue; p=strchr(line, '\n'); if(p!=NULL) *p='\0'; sscanf(line, "%d %d", &nStone, &nGet); break; } 〜省略〜
なんかデカいのがきたな。
コメントそれなりについてるけど、このスレにしては確かにでかいな・・・ 変更が必要な箇所を明記してくれてるけど、専門外でさっぱりわかんねw
素人でホントに困っています。よろしくお願いします 【質問テンプレ】 [1] 授業単元: 情報科学実習 [2] 問題文(含コード&リンク):() 問題> 次のような書式のファイルからデータを読み出して、標準体重の人の名前と 血液型一覧を別のファイルに出力せよ。ただし、classを用いること。また、 人のデータは必要によってメモリ割り当てすること *標準体重・・・まず。指数k=平均体重/(平均身長-100)を出す。 各人の理想体重は(身長-100)×kであり、標準体重は、理想体重の97〜103%。 ・データファイルの書式 一行目:人数 二行目以降:名前 血液型 身長 体重 ・データファイルの例 2 Mizumoto O 172 67 Otake A 170 62 [3] 環境 [3.1] OS: I Mac [3.2] コンパイラ名とバージョン: E macs [3.3] 言語:C++ [4] 期限: 2008年2月6日まで [5] その他の制限:繰り返し、条件式、配列、アドレス、ポインタ、スコープ、 クラスを習いました。
コンパイラ?
>>727 この計算式通り計算すると理想体重が170付近になってしまいますが
理想体重でなくて理想身長の間違いではないでしょうか?
電卓で計算してみて下さい。
731 :
730 :2008/01/29(火) 00:35:05
あ、ごめんなさい。私の間違いでした。
733 :
デフォルトの名無しさん :2008/01/29(火) 01:33:25
[1] 授業単元:C言語 [2] 問題文(含コード&リンク) 入力された整数を配列に順次格納する(昇順になるように入力すること)。 0が入力された時に整数の入力を終了し、次に入力された数字を、二分探索によって 配列から探索し、その配列の添え字番号を出力するプログラムを作成せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 1月29日正午まで お願いします
734 :
702 :2008/01/29(火) 01:44:08
>>733 #include <stdio.h>
#include <stdlib.h>
#define BUFFSIZE 32
#define ARRAYSIZE 256
int binary_search(int array[], int b, int e, int key)
{
int t = (e - b) / 2 + b;
if (array[t] == key) return t;
if (array[t] < key) return binary_search(array, t, e, key);
if (array[t] > key) return binary_search(array, b, t, key);
}
int main(void)
{
int array[ARRAYSIZE];
char buff[BUFFSIZE];
int i;
puts("Input Number(s).");
for (i = 0; i < ARRAYSIZE; ++i) { fgets(buff, BUFFSIZE, stdin); if (atoi(buff) == 0) break; array[i] = atoi(buff); }
printf("Input Number. :");
fgets(buff, BUFFSIZE, stdin);
printf("index: %d\n", binary_search(array, 0, i, atoi(buff)));
return 0;
}
gccは不思議だな。 停止性がなくとも止まってくれるのは何故だろう? printfとかを入れると止まらんけど。
737 :
デフォルトの名無しさん :2008/01/29(火) 06:45:43
[1] 授業単元:データ構造とアルゴリズム設計 [2] 問題文(含コード&リンク) 名前と年齢を入力し、年齢をキーとして、ハッシュ(チェイン法)に登録する '-'を入力すると登録を終了し、次に入力された年齢を、ハッシュ法で検索し あればその名前を出力するプログラムを作成せよ。ハッシュ表の大きさは9とする [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2月1日まで よろしくお願いします。
739 :
733 :2008/01/29(火) 08:55:01
741 :
740 :2008/01/29(火) 10:59:25
「エラーメッセージはコピペしてください。」 って
>>1 に書いてある
コンパイルを通したいだけなら、問題文よりコンパイラのメッセージをコピペしてくれよ
回答者たちよ、実務では解決できるのかすら分からない難題に埋もれる中、 回答が出るよう作られた宿題回答で回帰逃避したい気持ちはよく分かるぞ。
娯楽ってのはそういうもんだ
前に回答して頂いた
>>581 です。
期限が切れてしまいましたが、二月頭まで締切を伸ばしてもらったので、引き続き(2)と(3)の解答をお願いできませんか??
どうかよろしくお願いします…m(_ _)m
>>747 音声データを縮める、音声データを反転させる、の定義をしてくれたまえ。
749 :
デフォルトの名無しさん :2008/01/29(火) 14:28:52
718の者です。期限1/28の17:00までって書いたんですけど これは間違いで1/30の17:00までなのでよろしくお願いしますm(__)m
>>749 #include <stdio.h>
#define DATAFILE "sample.txt"
#define LINES 10
int main(void)
{
FILE *fp;
char line[10];
int i = 0, x[LINES], y[LINES], z[LINES];
if (fp = fopen(DATAFILE, "r")) {
while (fgets(line, sizeof(line), fp)) {
sscanf(line, "%d%d%d", &x[i], &y[i], &z[i]);
i++;
}
fclose(fp);
for (i = 0; i < LINES; i++)
printf("x[%d] = %d, y[%d] = %d, z[%d] = %d\n", i, x[i], i, y[i], i, z[i]);
}
return 0;
}
[1] 授業単元:C言語I
[2] 問題文(含コード&リンク):(元データ:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5937.txt 入.力画.像ファイ.ル名、出.力画.像ファイル名、縦、横の
縮.小率を実行時に与えることが出来るようにすること
以下の場合、エラーメッセージを標準エラーに出力し
て、プログラムを終了させること
・正しくない縮.小率が入力された場合
・入力ファイル名に存在しないファイルが指定された場合
・すでに存在するファイル名が出.力画.像ファイル名に指定さ
れた場合
[3] 環境
[3.1] OS:Linux OpenSuse
[3.2] コンパイラ名とバージョン: すみません確認が分かりませんでした。cc でコンパイルしています。
[3.3] 言語: C
[4] 期限: [2008年01月31日17:00まで]
[5] その他の制限: 簡単な例について,プログラミングの基礎知識,変数と式,制御の流れ,関数,配列,文字列,ポインタ,構造体とユーザ定義型,ファイルです。
基本的に初心者からの講座ですので使えることは多くありません。元プログラムを見ていただければ程度が分かると思います。
問題文で不自然に'.'が入っているのは,万が一検索されたときの対策です。
気を悪く思ったかもしれません。すみません。
もしスレを監視していたら意味もないですが;
丸投げしといて見つかりたくないか。そうか。
姿勢が気に食わないな。
完全に駄目元で言ってるな。
問題文のコメントも文字化けしてワロタ。
>>756 fdivrsub()内の1行目、if()の条件式
(powb <= a << (powb+powb)) を if ( a < ( powb+powb )) にしたらいいんじゃない?
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ある海賊団(総員10名)が100枚の金貨を手に入れた。 そこでみんなで分けようとしたが、この海賊団には以下の分配ルールがある。 一番年長の海賊(ボス)が誰に何枚割り振るかを決める。 ボスも含めたみんながその割り振りに賛成か反対か投票をする。 半数以上の賛成で可決される。ただし、賛成が半数未満ならボスは処刑され、 新たなボスがまた分配方法を決める。(10人は年が違うので新ボスを誰にするかでもめることはない) と、決まるまでこれが繰り返される。 そしてこの海賊団員の特徴として、 みんな限りなく賢く、それぞれみんなが賢いことも知っている。 みんな自分の命は一番大事。次に大事なのは金貨。だが処刑は大好きで、 今のボスを処刑しても次のボスからもらえる金貨の枚数が同じだろうと思ったら、反対に票を投じる。 それぞれあまり仲はよくないので談合はしない。及び金貨の共有もしない。 さて、今のボスは自分がなるべくたくさん金貨がほしい場合、 何枚手に入れることができるだろうか? [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:無期限 [5] その他の制限: なし
759 :
758 :2008/01/29(火) 22:36:55
スレ違いなので取り下げます
[1]プログラミング入門 [2]問題文 座標(X_1 Y_1)にある自転車1が角度A_1(度)の方向にV_1(m/s)で進み、座標(X_2 Y_2)にある自転車2が角度A_2(度)の方向にV_2(m/s)で進んでいる。 二つの自転車が出会う点の座標(X_3 Y_3)と、経過時間Tを求めなさい。 X軸の正方向を0(度)とする。 座標1目盛り1(m)とする。 [3]環境 [3.1] OS:WindowsXP [3.2] Visual studio 2003 [3.3] 言語: C++ [4]期限:1月30日 [5]その他の制限特になし 丸投げで本当に申し訳ありません! 何卒宜しくお願い致します!(>_<)
761 :
デフォルトの名無しさん :2008/01/29(火) 23:16:13
>>750 ありがとうございました!!
ほんと助かりました。
>>760 向かい合って一直線に進んでるならまだしも、
ちょうどぶち当たるなんてこと、限りなく無いに等しいがそれでもいいの?
>>762 自転車の長さが100mくらいあるのかも知れないwww
まぁそのA1とA2が違う値ならぶつかるはずだけどなw
うはwと思ったらスピードが違うかったら一生交わらないww
>>765 点と点とが衝突するというのは、限りなく難しいと思う
自転車とやらの長さに依存する問題
長さが無限大の自転車だとほぼ確実に衝突するし、
長さが無限小の自転車だとほぼ確実に衝突しない
768 :
760 :2008/01/30(水) 00:57:47
申し訳ありません!直線の交点を求めて、それぞれがその交点にたどり着く時間T_1(秒)およびT_2(秒)を求める問題でした(>_<)
>>768 眠くてかなりやっつけだが、一応書いた。
交わらない位置関係の判定がいまいちかも分からん。
#include <iostream>
#include <math.h>
#define PI 3.1415926535897932384626433832795
#define RATE 1000
using namespace std;
typedef struct DATA {
double x, y, a, v, l;
};
int main () {
DATA a, b;
cout << "X_1:"; cin >> a.x; cout << "Y_1:"; cin >> a.y;
cout << "A_1:"; cin >> a.a; cout << "V_1:"; cin >> a.v;
cout << "X_2:"; cin >> b.x; cout << "Y_2:"; cin >> b.y;
cout << "A_2:"; cin >> b.a; cout << "V_1:"; cin >> b.v;
a.l = (a.y - b.y) / tan((b.a - a.a) * PI / 180);
b.l = (a.y - b.y) / sin((b.a - a.a) * PI / 180);
if ((int)(a.a - b.a) % 180 == 0 ||
(int)(a.l*RATE) < 0 || (int)(b.l*RATE) < 0) {
cout << "まじわらない";
return -1;
}
cout << "T_1 = ";
if ((int)(a.l*RATE) == 0) cout << "0" << endl;
else cout << a.l / a.v << endl;
cout << "T_2 = ";
if ((int)(b.l*RATE) == 0) cout << "0" << endl;
else cout << b.l / b.v << endl;
return 0;
}
すまん、何か忘れてると思ったらx使ってなかったわwww × a.l = (a.y - b.y) / tan((b.a - a.a) * PI / 180); ○ a.l = (a.y - b.y) / tan((b.a - a.a) * PI / 180) + (b.x - a.x);
>>757 お礼が遅れて申し訳ありません
ありがとうございました
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ファイル中に自然数が10列記されている。 この数列中には0が1〜9個含まれている。 従って、0を区切りと考えれば。この数列中には数が最低1つは連続している(連続回数とよぶ)。 連続回数の最大を求め,その時の和を求めよ。 ただし、連続回数の最大が2つ以上ある時は和の大きい方を最大とする。 また、連続回数も和も同じであるときは考慮しなくてもよい。 例1)3,1,0,3,6,2,3,7,4,0であれば、最大連続数は6でその和は25である。 例2)3,1,0,2,2,0,03,0,0であれば、最大連続数は2でその和は4である。 [3] 環境 [3.1] OS:Vine Linux 4.2 [3.2] コンパイラ名とバージョン:gcc3.4 [3.3] 言語:C [4] 期限:[無期限] [5] その他の制限:なし むりやりならばできましたが、スマートなやり方があれば教えていただきたいです。
774 :
デフォルトの名無しさん :2008/01/30(水) 16:29:15
>>773 自分も無理やりやってみた。
#include <stdio.h>
#define N 10
int continuous(int *a, int from, int n){
int to;
for(to = from; to < n && a[to] != 0; to++);
return to;
}
int culsum(int *a, int from, int to){
int i, sum = 0;
for(i = from; i < to; i++) sum += a[i];
return sum;
}
int main(void){
FILE *fp = fopen("data.txt", "r");
int i, next, cnt = 1, sum = 0, tmp, a[N];
if(!fp) return 1;
for(i = 0; i < N; i++) fscanf(fp, "%d,", &a[i]);
fclose(fp);
for(i = 0; i < N; i++){
next = continuous(a, i, N);
if(next - i >= cnt){
cnt = next - i;
tmp = culsum(a, i, next);
if(tmp > sum) sum = tmp;
}
i = next;
}
printf("cnt: %d\nsum: %d\n", cnt, sum);
return 0;
}
部分だけ。 a[10]に数値読み込んでこんな感じかな? int i,j=0,max=0,temp=0,renzoku=0; for(i=0;i<10;i++) { while(a[i]&&i<10) { temp+=a[i]; i++; j++; } renzoku=(j>renzoku?j:renzoku); if(renzoku==j)max=(temp>max?temp:max); j=0; }
なにをもってスマートなんだろう
tempも0に戻そうぜ
ごめwww手抜きするといいことないねwwwww #include <stdio.h> int main(void) { int a[10],i,j=0,max=0,temp=0,renzoku=0; FILE *fp=fopen("data.txt","r"); if(!fp) return 1; for(i=0;i<10;i++)fscanf(fp,"%d,",&a[i]); fclose(fp); for(i=0;i<10;i++) { while(a[i]&&i<10) { temp+=a[i]; i++; j++; } renzoku=(j>renzoku?j:renzoku); if(renzoku==j)max=(temp>max?temp:max); j=temp=0; } printf("最大連続数:%d\n合計:%d",renzoku,max); return 0; }
782 :
デフォルトの名無しさん :2008/01/30(水) 17:40:24
・0〜99の100個の数字から異なる30個を選び、配列COM[30]に 格納せよ。 ・次に異なる6個の数字を入力し、順番に配列MAN[6]に格納せよ。 ・ソート方法Aを用いて配列COM、MANの要素をそれぞれ小さい順に並べよ。 ・配列COMに含まれる配列MANの数字の個数countを求めよ。 ・最後に、配列COM、MANの全要素、変数countを result.outに書き込め。 ・出力形式は自由とするが、main関数内は10行以内にすること。 [ソート方法A] ・作業用の配列として、要素が100個のint型の配列Workを用意する。 ・配列Workの各要素は、0に初期化する。 ・ソートしたい配列xの要素を順番に読んで、Work[その値]を+1する。 ・作業3をすべてのxの要素について行った後、Workの要素を小さい方から順番に よんで、Workの値が0でなければ、xに書き戻します。 この課題が全然できません。助けて下さい。
>>782 それ、【ヒント1】〜【ヒント3】も問題文にあるだろ?
>>782 作ったけど,PC移行中でコンパイラ入れて無くて試せない^p^
787 :
デフォルトの名無しさん :2008/01/30(水) 20:37:58
[1] 授業単元: [2] 問題文(含コード&リンク):シェルソートは単純挿入法を改良し、ソートの効率を上げたものである。 全ての要素を1度にソートするのではなく、 間隔dをあけて要素を比較して大まかなソートを繰り返したのち、 最後にd = 1でソートを実行する。 データ数をnとしたときの、効率の良い間隔d[i]の計算法として、 Knuthによる次の式が知られている。 t = log2n - 1 (整数に切り捨て) d[t-1] = 1 d[i-1] = 2d[i] + 1 この式を使って、与えられた要素数nに対し t、配列dの値を計算する関数を作成しなさい。 n = 100としたときの、tおよびdの要素の値を画面に出力しなさい。 logの計算を行うには、math.hをインクルードする [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期間:2/1まで [5] その他の制限: なし お願いします。
789 :
788 :2008/01/30(水) 21:25:57
ありゃ、main()関数が10行以下の制限忘れてた。 全部他の関数に移せってか。ちょっとまって。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 直径1長さ1の円柱がある。体積をモンテカルロ法で計算せよ。 一辺が1の立方体を考え、3個の乱数で立方体内の点のxyz座標を発生させ,その点が物体の内部に落ちるかどうかを判定する。 内部に落ちる確率が体積に比例することから体積が見積もれる。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2/1 [5] その他の制限:
792 :
788 :2008/01/30(水) 21:38:18
>>782 の問題は、内容から おそらく COMとMANに値を収める
部分を、共通関数化すれば得点高いと思う。
それを構成できるかも問うてる様に見える。
具体的には、配列代入関数として、入れたかどうかと、
配列が溢れた事を戻り値で返す。
#include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { double x, y, z; int iter[] = {10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 0}, i, j, k = 0, count; for (i = iter[k]; i; i = iter[++k]) { count = 0; for (j = 0; j < i; j++) { x = (double)rand() / RAND_MAX - 0.5; y = (double)rand() / RAND_MAX - 0.5; z = (double)rand() / RAND_MAX; if (sqrt(x * x + y * y) <= 0.5 && 0. <= z && z <= 1.) count++; } printf("ITER = %d, V = %f\n", iter[k], (double)count / iter[k]); } printf("Vの真の値 = %f\n", M_PI * 0.5 * 0.5); return 0; }
>>772 >>723 お返事が送れて申し訳ありません、回答ありがとうございました!
これでなんとか理解できそうです。
[1] プログラミング序論 [2] @./a.out arg1 arg2 ...の時、 argをアルファベット順にソーティングするquicksortのプログラムを作る。 A問題@をライブラリ関数qsort()を用いて作る。 qsort( void* base, int n_elem, int size, int (*compare)(void*, void*) ) base: 配列のアドレス n_elem: 要素数 size: 一要素のサイズ compare: 比較に使う関数。 Bライブラリ関数と同じ動きをする関数 msort( ...qsortと同じ引数... ) を作る。(アルゴリズムはクイックソート) [3] 環境 [3.1] Linux [3.2] gcc [3.3] C [4] 2008年2/5(火) [5] 制限は特にないです よろしくお願いしますm(__)m
800 :
ハム :2008/01/31(木) 18:54:12
【質問テンプレ】 [1] 授業単元: プログラミング演習 [2] 問題文:(数独の問題作成の途中です。) 最初全てに0が入った2次元配列を、数字が全て埋まった状態にするプログラムを考えています。 どなたかお力をお貸し下さい。 [3] 環境 Visual Studio 2005 [3.1] OS: Windows/ XP [3.2] コンパイラ名とバージョン: わかりません [3.3] 言語: C言語 [4] 期限: ([2008年2月2日21:00まで] [5] その他の制限:初心者なので、簡単なコードでお願いします。
[1] プログラミング演習 [2]リンクリストを用いたスタックプログラムの作成 typdef struct box{ int cont; struct box next;}box1; typedef box1 *stack; スタックの仕様は↑とする。 ポップアップとプッシュダウンを行う関数 int pupup(stack S); void pushdown(stack S; int x); を作成せよ。 [3] 環境 [3.1] winXP [3.2] bcc [3.3] C [4] 2008年2/5(火) [5] 制限:問題文の仕様を使うこと。 アンダーフロー対策はしなくてよい よろしくおねがいします。
>>800 お前は日本語を書いている自信があるのか?
>>800 数独は、プログラムで解くのは簡単だけど作るのは難しいと思われ。
途中まで作ったのならそれを提示したまえ。
# つーか、初心者向けの内容じゃねぇぞ。
>>724 の者ですが、締め切りが2/2の12:00に伸びたのでどうかよろしくお願いします。
全然わからないので…
>>805 お前に言ってねーよ。カス。
どうか分かる方お願いします。
>>807 だからお前のような頭のヘボい奴には頼んでないから。
どうか頭の良い方お願いします。
>>808 答えようかと思ったが、君のように裏表がある人間のために
エディタ起動するのマンドクセ('A`)
>>811 お前に言ってねーよ。カス。
どうか分かる方お願いします
誰もわかんねーのかよ。 単位やべーからお願い。
いさぎよく諦めろ
俺今他のやってる
>>801 問題がタコだな。
まず、その仕様じゃコンパイルすら通らない。
>pupup
popupの間違いでは。
>アンダーフロー対策はしなくてよい
オーバーフロー対策はどうなのよ。
最近の人工無能は頭いいな
>>800 >数字が全て埋まった状態にするプログラム
ほらよ
memset(table, 1, sizeof(table));
>>817 オーバーフロウもアンダーフロウも対策しなくて大丈夫です。
ペーパーで提出する課題なのでかなり適当みたいです。
popupは自分も気になりましたが問題がpupupなのでそのままにしましたw
>>820 それだけじゃなくて、
typdef struct box{
int cont;
struct box next;}box1;
↑じゃコンパイル通らないよ。
typdef struct box{
int cont;
struct box *next;}box1;
↑こうしないと。
いいかげんそうな教官みたいだし、もう提出しなくてよいんじゃね?
タイポもあるな。
つーか、prevへのポインタ無しで、どうやってpopupするわけ? 一方通行じゃん。pushしか出来ねーーー
というか、nextがprevなのか。
まぁ文句ばっかり言うのもあれなので。 typedef struct box{ int cont; struct box *next;}box1; typedef box1 *stack; int pupup(stack S) { box1 tmp = *S->next; free(S->next); S->next = tmp.next; return tmp.cont; } void pushdown(stack S, int x) { box1 *new_box = (box1 *)malloc(sizeof(box1)); new_box->cont = x; new_box->next = S->next; S->next = new_box; return; }
>800 「数独(すうどく・SUDOKU)とは、3×3のブロックに区切られた9×9の正方形の枠内に1〜9までの数字を入れるペンシルパズルの一つである。」 123 456 789 456 789 123 789 123 456 234 567 891 567 891 234 891 234 567 345 678 912 678 912 345 912 345 678 でいいんじゃね?
831 :
デフォルトの名無しさん :2008/02/01(金) 00:43:22
832 :
581 :2008/02/01(金) 12:47:48
>>581 です。
(2)なのですが、音声データを半分に圧縮して再生できれば良いそうです。
実際の音声データとなる部分のbyte?を、一個飛ばしで読み込んでみて、と言われたのですが、さっぱりです…orz
(3)は、音声データを読み込んで、逆再生できればOKだそうです。
よろしくお願いしますm(_ _)m
833 :
デフォルトの名無しさん :2008/02/01(金) 13:26:02
834 :
デフォルトの名無しさん :2008/02/01(金) 13:32:09
>>832 半分削ったら復元無理じゃん
あとまずは
>>658 さんのテキストファイルをWavにするプログラム作れば
既にないぞうしてるかもしれないけど
復元は要求されてなくね
836 :
デフォルトの名無しさん :2008/02/01(金) 13:56:05
再生するにはwavが作れないと駄目
837 :
デフォルトの名無しさん :2008/02/01(金) 14:19:02
おもったんだがどんな楽器の音もテキストの数字の羅列のみで鳴らせるのか ちょっとおどろき
そらまあどんなデータだってバイナリじゃ0と1の集合なんだし、 音だろうと映像だろうと数字の羅列に対応させるのは簡単だぞ。
839 :
デフォルトの名無しさん :2008/02/01(金) 14:25:39
でも人間がテンキーで打ち込みしてもオーケストラの音楽とかむりのはず
最終的に鼓膜を震わせればいいんだから
複雑な音楽は0と1だけじゃなくその間の音色がいくらでもある。 引き篭ってパソコン麦価かまってるとそんな当たり前のことも分からなくなるんだな。
ドとド#の間にだって音があるんだよ。 カラオケの採点だと正確にドを出すのを高得点としているが、 人間の耳に入った場合は必ずしも正確なドが心地よいとは限らない。 ちょっとはずしてる加減がかわいいとかあるだろ? 音だけじゃなくリズムとか強弱とかもな。
>>841 でも人間の耳の分解能には限界があるだろ
1/3を0.0101010101010101で近似しても違いなんて分からない
>>845 そっちの問題より量子化の時の誤差の方が大きいだろ。
>>846 >>841 が「離散量では原理的に複雑な音楽を忠実に表現できない」という主張をした(と俺は理解した)から、
目盛を十分細かく取れば良い、という説明をしただけで、実際に音声をデジタルで扱う場合にどこが困難かは別の話だろ
>>841 よくわからんが、MIDIのことか? なつかしいな。
[1] プログラミング演習 [2]試験課題 優先順位付き四則演算 式を入れてください (123.4*(5.1+0.2)+(6+0.3)/(3.0−1.0)/5=? 答えは?です。 [3.1]WindowsXP [3.2]VS8.0 [3.3]C++ [4]2月5日 [5]構造体 調べてみましたがよくわかりませんでした。 よろしくお願いいたします。
851 :
798 :2008/02/01(金) 16:36:21
>>799 さん
>>827 さん
お早い回答、見やすいプログラムありがとうございました^^
・・・もし来週も行き詰ったら・・・よろしくお願いしますm(__)m
850 はい、習っているので大丈夫です。
853 :
デフォルトの名無しさん :2008/02/01(金) 17:37:34
857 :
◆sUfWYz9MSA :2008/02/01(金) 21:53:06
[1] 授業単元: 画像処理研究
[2] 問題文(含コード&リンク):
以下のようなcsvファイルをfopen()で読み込み,
フーリエ変換したものをグラフで表示する.
400,97.98
400.5,98.13
401,98.31
401.5,98.49
・・・
という","の左が700まである波形データです。
読み込んだデータを","区切りでプロンプトに書き出す
ことはできているのですが,フーリエ変換がどうしてもできませんorz
お手数ですが教えてもらえないでしょうか。
sample:
http://yomiko-01.hp.infoseek.co.jp/cgi-bin/src/up0222.txt csvでupできなかったので.txtになってますスイマセン・・・
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン:Visual C++ 6.0
[3.3] 言語: どちらでも可
[4] 期限: できるだけ早くお願いします。
[5] その他の制限:学校から家に帰るのでコメント返信遅くなります・・・
どうかよろしくお願いします。
858 :
デフォルトの名無しさん :2008/02/01(金) 22:24:48
[1] 授業単元:コンピュータ理論 [2] 問題文(含コード&リンク):n,kを入力したとき、0〜n-1の整数からk個選ぶ選び方をすべて出力する [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語:C言語 [4] 期限: 2月4日中 [5] 再帰的アルゴリズムを使うと簡単と言われました。 どうかよろしくおねがいします。
順列を区別するかを書け。
組み合わせです
861 :
デフォルトの名無しさん :2008/02/01(金) 22:42:47
>>859 重複なしの組み合わせです。
n=5,k=3のときは
012 013 014 023 024 034 123 124 134 234
となるはずです。
862 :
デフォルトの名無しさん :2008/02/01(金) 22:46:58
863 :
デフォルトの名無しさん :2008/02/01(金) 23:01:55
>>858 unsigned long combination(int n, int k)
{
int i, j;
unsigned long a[17];
if (n - k < k) k = n - k;
if (k == 0) return 1;
if (k == 1) return n;
if (k > 17) return 0; /* error */
for (i = 1; i < k; i++) a[i] = i + 2;
for (i = 3; i <= n - k + 1; i++) {
a[0] = i;
for (j = 1; j < k; j++) a[j] += a[j - 1];
}
return a[k - 1];
}
>>858 #include<stdio.h>
#include<stdlib.h>
void get_combination(int num, int chosenCnt);
int *numary;
int n, c;
int main(int argc, char *argv[]){
if(argc != 3) return 1;
n = atoi(argv[1])-1;
c = atoi(argv[2]);
if((numary = (int*)calloc(sizeof(int), c)) == NULL) return 1;
get_combination(0, 1);
free(numary);
return 0;
}
void get_combination(int num, int chosenCnt){
int i;
if(chosenCnt > c){
for(i=0; i < c; i++) printf(" %d", numary[i]);
putchar('\n');
return;
}
for(i=num; i <= n; i++){
numary[chosenCnt-1] = i;
get_combination(i+1, chosenCnt+1);
}
}
866 :
858 :2008/02/01(金) 23:54:04
>>863 返答ありがとうございます。
コンパイル通るのですが、どうやったら表示できるかが分からず、
いろいろ試してみましたが出来ませんでした。orz...
>>865 返答ありがとうございます。
ばっちり動きました。ありがとうございます。
助かりました。
後でプログラムをじっくり解読してみます。
本当にありがとうございました。
>>856 さま
IPv4でもIPv6でも動きました!
本当にありがとうございました!
>>866 本気で何も分かってないな。まあ丸投げスレだからいいんだけど
869 :
デフォルトの名無しさん :2008/02/02(土) 00:01:53
>>862 >>857 です。返事ありがとうございます!
今帰ってきたので、後で参考にさせてもらいます(o´・ω・)´-ω-)ペコリ
【時間切れ】 (2/1)
>787
【未解決問題】
>>581 2月頭 残:課題2、3
>>798 2/5 残:課題1
>79 無期限
>144 無期限 問題文>148
872 :
ハム :2008/02/02(土) 00:52:07
>>854 さん
ありがとうございます!
熟読して、勉強させていただきます!
本当にありがとうございます!!
>>870 小数に対応できるようにfactor()の中身を
>>870 が書き換えたんだよね?
'('が来た後の exp0() を int で受けてるままだから
このままだと丸まっちゃうよ
874 :
870 :2008/02/02(土) 02:23:48
875 :
853 :2008/02/02(土) 02:50:50
876 :
デフォルトの名無しさん :2008/02/02(土) 02:54:00
>>874 早いねw
もっというと現状のソースはちょっと精神分裂気味に見えるから
double number(void) 作って↓みたいにしたほうが元のBNF通りかねえ?
他人の宿題だからどうでもいいかもだけど。
double factor(void){
if(isdigit(nextc){ /* F -> Num */
return number();
} else if(match('(')) { /* F -> (E) */
double v = exp0();
if(match(')')) return v;
else error();
} else {
error();
}
}
>>876 そうすると、1桁しかあつかえないのでは?
いや、現状が精神分裂気味なのはまったく同意です。オリジナルの美しい構造を残したいものです。
>>875 なるほど,ブランク読み飛ばし、単項のマイナスにも対応してますね。
ただし、このBNF はLL(1)文法であり、たかだか**1文字**先読みすればdeterministicにtop-downに解析できるわけで、その精神をソースにもりこみたいな、という意志がありまして...。
83代目の575は評価されるべき
>>751 が叩かれてて質問者でもないし聞きづらかったんだけど、期限も切れているようだし
>>751 を聞いていいかな?
いいとも!
>>882 とりあえず22まで。間違ってても謝罪や賠償はしない。
1. int *
2. char *
3. char *
4. int **
5. char **
6. char **
7. &cnt
8. &ch
9. &ch
10. pc
11. *pc
12. &ch
13. pch
14. *pch
15. argv[1]
16. pa
17. *(argv[2])
18. *pa
19. &pc
20. &pch
21. **ppc
22. **pch
23と24も。 最近C言語でプログラム書いていないんで、argvの仕様を調べなおしてた。 あと、実行時の引数の順序がわからんから、適当に書き換えてくれ。 23. *(pp+3) 24. **(pp+4)
結局751の画像は何を対象にしてたんだぜ?
>>891 #include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void){
int *table=(int*)calloc(sizeof(int), 10000, 0), i, x;
FILE *in=fopen("input8500.txt","r");
for(i=0; i<8500; i++){
fscanf(in, "%d", &x);
table[x]++;
}
for(i=x=0; i<10000; x+=table[i]?1:0, i++);
printf("%d種類\n", x);
}
コンパイラ無いので,試してないけど動くんじゃね?
>>887 575 デフォルトの名無しさん sage 2007/02/22(木) 19:31:21
>>574 ほい。
#include<stdio.h>
#include<stdlib.h>
char buf[100],*src=buf;
double atm(void);
double mul(double r){return*src=='*'?++src,mul(r*atm()):*src=='/'?++src,mul(r/atm()):r;}
double add(double r){return*src=='+'?++src,add(r+mul(atm())):*src=='-'?++src,add(r-mul(atm())):r;}
double atm(void){
double r;
while(isspace(*src))++src;
if(*src == '(')++src,r = add(mul(atm())),++src;
else r = strtod(src,&src);
while(isspace(*src))++src;
return r;
}
int main(){gets(src);printf("%f\n",add(mul(atm())));}
894 :
デフォルトの名無しさん :2008/02/03(日) 17:42:29
895 :
891 :2008/02/03(日) 18:08:31
>>892 ありがとうございます。コンパイルしてみたところ
5行目に、too many arguments to function `calloc'
とエラーが出ました。calloc関数は使用したことがないため、
どこを直せばいいのか分かりません。
教えていただけないでしょうか。
それくらい仕様を見れば分かるだろ。
>>895 calloc(10000, sizeof(int))
[1] 授業単元:課題3 [2] 問題文(含コード&リンク):月日を入力するとその日の星座を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: ? [3.3] 言語: C [4] 期限: 2008/2/6 [5] その他の制限: 特にありまさん
901 :
891 :2008/02/03(日) 22:02:09
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 直径1長さ1の円柱がある。体積をモンテカルロ法で計算せよ。
一辺が1の立方体を考え、3個の乱数で立方体内の点のxyz座標を発生させ,その点が物体の内部
に落ちるかどうかを判定する。内部に落ちる確率が体積に比例することから体積が見積もれる。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2/4
[5] その他の制限:
以前このスレで質問した問題なんですがコンパイルできなかったのでもう一度
おしえてもらえないでしょうか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5976.txt printf("Vの真の値 = %f\n", M_PI * 0.5 * 0.5); のM_PIでエラーがでて
しまいます。
>>900 #include <stdio.h>
#include <stdlib.h>
int main() {
static const struct {int n; const char *s;} c[] = {
{120, "みずがめ"}, {219, "うお"}, {321, "おひつじ"}, {420, "おうし"},
{521, "ふたご"}, {622, "かに"}, {723, "しし"}, {823, "おとめ"},
{923, "てんびん"}, {1024, "さそり"}, {1122, "いて"}, {1222, "やぎ"},
};
int i, m, d;
char buf[256];
do {
printf("月/日: ");
if (fgets(buf, sizeof buf, stdin) == 0)
return EXIT_FAILURE;
} while (sscanf(buf, "%d / %d", &m, &d) != 2);
for (i = 0; i < 12 && m * 100 + d >= c[i].n; i++)
;
if (--i < 0)
i = 11;
printf("%s座\n", c[i].s);
return EXIT_SUCCESS;
}
>>902 上の方に
#define M_PI 3.141592653589793238
とか書いときゃいいんじゃね?
>>902 printf("Vの真の値 = %f\n", M_PI * 0.5 * 0.5);のまえにでも
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
とでもしとけ
てか、CygwinでもMinGWでもコンパイルは通るんだが
>>902 私の方でもコンパイル・実行しましたが、問題はありませんでした。
環境は WindowsXP/cygwin(gcc 3.4.4) です。
#include <math.h>
の記述がありますから、M_PI には円周率が定義されているはずなのですが...。
gcc のインストールはどうやってしましたか?
907 :
906 :2008/02/03(日) 22:40:29
>>902 そうそう、アップローダのソースは空白が全角になってました。これを半角に直してみてください。
VCとかでは定義されてなかったような気がする。関係ないけど バージョンによってはgccでも載ってなかったりするのか?
>>908 M_PI は、手元の gcc 2.6.3 for GO32/PC9801 の math.h には定義されていましたね。
bcc 5.5 でも OK, VC 6.0 の math.h にはありませんでした。
VC(7以上)なら #define _USE_MATH_DEFINES で使えたはずだが
>>900 #include<stdio.h>
int main(void){
char *a[]={"いて","やぎ","みずがめ","うお","おひつじ","おうし","ふたご","かに","しし","おとめ","てんびん","さそり"};
unsigned int m,d;
printf("月,日=");
scanf("%d,%d",&m,&d);
printf("%s座\n",a[(m+d*2/",*&*(,*0...,"[m%12])%12]);
return 0;
}
3.141592653592
915 :
581 :2008/02/04(月) 03:47:38
>>889 さん
ありがとうございますm(_ _)m
さっきgccでコンパイル通そうとおもったら通らなかったのですが、どうすれば良いでしょうか??orz
916 :
デフォルトの名無しさん :2008/02/04(月) 08:45:59
>>915 どんなエラーメッセージが出ていますか。
918 :
デフォルトの名無しさん :2008/02/04(月) 09:34:59
>>918 ( ´∀`) yamaguchi.txt が落とせないんです。
923 :
899 :2008/02/04(月) 11:06:04
924 :
デフォルトの名無しさん :2008/02/04(月) 11:07:56
925 :
915 :2008/02/04(月) 11:26:36
>>917 さん
コンパイル失敗時に出てきたエラーメッセージを直接コピペします。長いかも・・・。
2ch.c:6: parse error before `&'
2ch.c:17: parse error before `}'
2ch.c: In function `read_wave_file':
2ch.c:47: storage size of `chunk' isn't known
2ch.c:54: stray '\' in program
2ch.c:54: parse error before `)'
2ch.c:56: stray '\' in program
2ch.c:56: parse error before `)'
2ch.c:62: stray '\' in program
2ch.c:62: parse error before `!'
2ch.c:68: parse error before `else'
2ch.c:68: stray '\' in program
2ch.c: At top level:
2ch.c:76: parse error before `if'
2ch.c:78: parse error before `+'
2ch.c:78: warning: data definition has no type or storage class
2ch.c:81: warning: parameter names (without types) in function declaration
2ch.c:81: warning: data definition has no type or storage class
2ch.c:83: parse error before `if'
2ch.c: In function `write_wave_file':
2ch.c:92: storage size of `chunk' isn't known
2ch.c:98: stray '\' in program
2ch.c:98: parse error before `;'
2ch.c:102: stray '\' in program
2ch.c:102: parse error before `;'
2ch.c:105: stray '\' in program
2ch.c:105: parse error before `;'
2ch.c:110: stray '\' in program
2ch.c:110: parse error before `;'
>>925 5行目の最後(改行の直前)の'\'が消えてないか?
927 :
デフォルトの名無しさん :2008/02/04(月) 12:35:58
>>925 まさかとは思うが、改行コードが\r\nのままLinuxでコンパイルしていないか?
5行目末のバックスラッシュが\rをエスケープしてしまい、その後の\nをエスケープできなくなるぞ。
929 :
デフォルトの名無しさん :2008/02/04(月) 14:43:27
[1] 授業単元: プログラミング入門 [2] 問題文(含コード&リンク):@0〜99の数字から異なる30個を選び、配列COM1[30]に格納せよ (時間で初期化,乱数を使用) A次に6個の異なる数を入力し配列COM2[6]に格納せよ B次にCOM1、COM2の数を小さい順に並び変えよ C次にCOM1とCOM2の両方に含まれる数の個数を求めよ D最後にCOM1とCOM2の全数字とCの個数を出力させよ [3] 環境 [3.1] OS:UNIX [3.2] gcc 3.4 [3.3] 言語: C [4] 期限:2月7日 [5] その他の制限: 宜しくお願いします。
932 :
デフォルトの名無しさん :2008/02/04(月) 15:33:49
>>931 make_com1()は
>>929 の@の『0〜99の数字から異なる30個を選び』を
満たしてないような・・・(重複するんじゃないの?)
通りがかりで失礼
934 :
デフォルトの名無しさん :2008/02/04(月) 17:17:44
[1] 授業単元:C言語入門 [2] 問題文:キーボードから学籍番号を入力すると、 その学生の eメールアドレスを出力するプログラムを作成しなさい。 ただし、学籍番号は7桁の自然数とし、これ以外の文字列が打ち込まれた時には 「学籍番号は7桁の数字で入力して下さい」と出力して、終了するプログラムとすること。 例 学籍番号を入力して下さい:0032113 0032113@yahoo....など。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual studio [3.3] 言語: C++ [4] 期限: 2月4日 [5] その他の制限: 期限ギリギリで申し訳ないですが、お願いします。
935 :
デフォルトの名無しさん :2008/02/04(月) 19:00:43
100回入れ替えなくても30回で十分なやり方あるだろ……と思ってよく見たらその交換の仕方はダメだ
937 :
935 :2008/02/04(月) 20:46:34
あぁ・・・VCで作ったから_tmainのままになってら・・・
938 :
デフォルトの名無しさん :2008/02/04(月) 20:49:52
>>936 後学の為にダメな理由を詳しく教えてくれると嬉しい。
for( i = 0 ; i < sizeof(hoge)/sizeof(*hoge) ; i++ ) { // i番目の要素と乱数(0~99)番目の要素を交換 int rnd = rand() % 100 ; int tmp = 0 ; tmp = hoge[i] ; hoge[i] = hoge[rnd] ; hoge[rnd] = tmp ; } これだと数値が偏るから
>>934 学籍番号とメールアドレスの関連はどうなってるんだ?
それだけじゃ、苗字を入力して、下の名前を出力するプログラムって言うぐらい、意味不明だぞ。
どうやって作ったらいいのかサッパリ分からん。
学籍番号@yahoo.co.jpでいいのか?
942 :
デフォルトの名無しさん :2008/02/04(月) 21:03:06
943 :
934 :2008/02/04(月) 21:06:39
>>941 入力された学籍番号@yahoo.co.jp
と、出力されるプログラムです。
ただし、学籍番号は7桁の自然数とし、これ以外の文字列が打ち込まれた時には
「学籍番号は7桁の数字で入力して下さい」と出力して、終了するプログラムとすること。
↑ここがどのようにプログラムしたらいいのか分からないのです。
>>940 #include <stdio.h>
int main(void)
{
FILE *fp;
int i, j, a[11] = {0}, n;
if((fp=fopen("input.txt", "r"))==NULL) return 1;
while(fscanf(fp, "%d", &n)!=EOF) a[n/10]++;
for(i=0; i<11; i++) {
printf("%3d点台:", i*10);
for(j=0; j<a[i]; j++) putchar('*');
putchar('\n');
}
fclose(fp);
return 0;
}
>>942 単純化してhogeが3要素の場合を考えてみろ
この場合、rand()%3が三回計算されるから、これが完全な乱数だと近似すれば、27通りが均等な確率で出る
一方、3要素を並べ換える方法の数は3!=6通りで、27は6の倍数じゃないから、6通りが公平に出ることはありえない
948 :
デフォルトの名無しさん :2008/02/04(月) 21:41:46
>>943 #include<iostream>
using namespace std;
int main(void){
string s;
cout << "学生番号 : ";
cin >> s;
if(s.length() != 7){
cout << "7文字いれろぼけ" << endl;
return 1;
}
for(string::iterator si = s.begin(); si != s.end(); si++){
if(!isdigit(*si)){
cout << "数字以外いれんなぼけ" << endl;
return 1;
}
}
cout << s.c_str() << "@yahoo.co.jp" << endl;
return 0;
}
951 :
934 :2008/02/04(月) 22:56:17
953 :
798 :2008/02/05(火) 01:09:34
>>914 さん
解説もつけていただき、ありがとうございました(^-^)/
954 :
デフォルトの名無しさん :2008/02/05(火) 12:22:57
文字列がランダムに入ったchar moji[i][255]があります moji[0〜i]で何種類の文字列があるか数える方法教えてください 例えばi=5だとして moji[0]="abc" moji[1]="bbb" moji[2]="abcdbbb" moji[3]="bbb" moji[4]="abc" なら答えは3種類です
956 :
売国まるはん :2008/02/05(火) 13:11:47
957 :
デフォルトの名無しさん :2008/02/05(火) 15:11:26
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):与えられたデータに対して季節調整を行うプログラムを作成しなさい。 <調整法> i年目、j月のデータを aij とする。 月平均 Mj 月平均の平均 M 調整のための指数 Sj = Mj / M 調整結果 aij / Sj <input.text> 40.0 37.7 51.8 45.9 45.2 45.4 62.0 40.8 42.1 49.1 51.5 93.4 42.6 39.5 53.4 47.6 47.0 47.5 63.5 42.2 42.9 51.1 51.8 94.7 43.3 39.8 53.6 48.5 48.3 47.5 65.9 42.8 43.7 53.2 52.9 97.0 44.9 42.3 55.0 50.7 48.6 48.9 68.8 43.3 46.2 54.2 54.6 100.5 47.5 42.8 57.7 52.6 51.0 50.9 71.4 45.0 47.3 56.8 56.7 102.7 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語:C++ [4] 期限:2月7日 [5] その他の制限: 結果は、画面に表示してください。 よろしくお願いします!
[1]授業単元 C言語 [2]問題文 整数yを入力すると、y×yの正方形を描くプログラム ex)y=4のとき ・・・・ ・ ・ ・ ・ ・・・・ y=1のときは ・ y=2のときは ・・ ・・ でOK [3]環境 Windows、C [4]期限 2/6 9:30まで。なるべく早めにお願いします。
//
>>959 2バイト文字にするのは自分でやってくれ。
#include <stdio.h>
int main()
{
int y;
scanf("%d", & y);
if (y >= 1) {
for (int xc = 0; xc < y; ++xc) {
printf(".");
}
printf("\n");
}
for (int yc = 0; yc < y - 2; ++yc) {
printf(".");
for (int xc = 0; xc < y - 2; ++xc) {
printf(" ");
}
printf(".\n");
}
if (y >= 2) {
for (int xc = 0; xc < y; ++xc) {
printf(".");
}
printf("\n");
}
return 0;
}
/* こんでいいじゃんw */ #include <stdio.h> int main() { int y, xc, yc; scanf("%d", & y); for (yc = 0; yc < y; ++yc) { for (xc = 0; xc < y; ++xc) { printf("%s", yc == 0 || yc == y - 1 || xc == 0 || xc == y - 1 ? "・" : " "); } putchar('\n'); } return 0; }
963 :
デフォルトの名無しさん :2008/02/05(火) 18:21:06
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): ・時計の長針と短針がなす角を求めるプログラム 時刻 h時 m分 (24時間制、mは整数)において、時計の長針と短針がなす角θ(0°≦θ≦180°) を計算するプログラムを書きなさい。 ただし、h、mを入力する部分、及びなす角θを計算する部分をそれぞれ関数化しなさい。 結果の出力はh、m、θが表示されていれば細かい様式は問わない。 ヒント:時計の長針は1時間で一周するということは、1分間あたり何度動くか。 同様に、時計の短針は12時間で一周するということは1時間当たり何度動くか。 また1分間あたり何度動くか。時計の長針は短針に比べて1分間にどれだけ多く動くか。 実行例 >clock.exe input h:22 input m:0 22:00 (60.0°) [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年2月6日12:00まで [5] その他の制限: 制限は特にありません。よろしくお願い致します
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
http://ip.tosp.co.jp/i.asp?I=cgenger [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語:C++
[4] 期限:2月9日
[5] その他の制限: 宜しくお願いします
>>963 #include<stdio.h>
#include<math.h>
double calc_theta(int hour, int minute){
double degree_hour, degree_minute, theta;
degree_hour=(hour+minute/60.0)*30.0;
degree_minute=minute*6.0;
theta=fmod(degree_hour-degree_minute, 360.0);
if(theta<0.0) theta+=360.0;
if(theta>180.0) theta=360.0-theta;
return theta;
}
void get_value(int *pvalue, const char *message){
printf("%s", message);
scanf("%d", pvalue);
}
void get_hour(int *phour){
get_value(phour, "input h:");
}
void get_minute(int *pminute){
get_value(pminute, "input m:");
}
int main(void){
int hour, minute;
get_hour(&hour);
get_minute(&minute);
printf("\n%02d:%02d (%.1f°)\n", hour, minute, calc_theta(hour, minute));
return 0;
}
966 :
963 :2008/02/05(火) 20:50:26
>>965 さん
宿題でこれだけがどうしても分からなかったので、
本当に助かりました。
コードを見て理解することができました。
ありがとうございました!
967 :
デフォルトの名無しさん :2008/02/05(火) 21:51:10
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6002.txt このプログラムにより1つのxに対して100個の誤差を含んだyが求められるので
それぞれのxについて分散S=(1/100)*((yの平均値)-(yの値))を求めて
fprintf(fp2,"%lf\t%lf\n",x,S);を使ってtxtファイルに書き出す
[3] 環境
[3.1] Windows
[3.2] Visual Studio 2005
[3.3] 言語:C
[4] 期限:2月6日正午
問題文のプログラムに付け加える形でやってもらえるとありがたいです
時間短いですがどうかよろしくお願いします
2乗が足りないな
969 :
967 :2008/02/05(火) 23:10:36
あ、ほんとだ S=(1/100)*((yの平均値)-(yの値))^2 ですね
>>967 void main()
{
double X[2];
int flag=0;
srand( (unsigned)time( NULL ) );
int i;
long double x,y, sum_y, sum_y2, s;
x=0;
FILE *fp1, *fp2;
fp1=fopen("file1.txt","w");
fp2 = fopen("file2.txt", "w");
for(x=0;x<=10;x++)
{
i=0;
sum_y = sum_y2 = 0;
while(i<100){
i=i+1;
y=x*x+AddError(&flag,X)*0.05;
sum_y+=y;
sum_y2 += pow(y, (long double)2.0);
fprintf(fp1,"%lf\t%lf\n",x,y);
}
s = -pow(sum_y, (long double)2.0)/10000 + sum_y2/100;
fprintf(fp2, "%lf\t%lf\n", x, s);
}
fclose(fp1);
fclose(fp2);
}
>>954 std::set<std::string>(moji,moji+sizeof(moji)/sizeof(*moji)).size()
972 :
デフォルトの名無しさん :2008/02/06(水) 00:14:18
>>973 !!
もう誰かが質問してたってことですか! ぐへえ
975 :
デフォルトの名無しさん :2008/02/06(水) 09:25:24
【質問テンプレ】 [1] 授業単元:C++ [2] 問題文 テトラナッチ数列の問題で。 初項と第2項は0、第3項は1の値となるが第n項(n>3)び値Tnは以下の式で あらわせられる。 Tn=Tn-1+Tn-2+Tn-3 再起を利用した関数int tetra(int n)を作成しn=1から n=30までに各値を表示 させたい。以下の質問に答えよ @関数tetraを以下に記述せよ Amain関数を以下に記述せよ [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (borand5.5) [3.3] 言語: (/C++/) [4] 期限: 今日中
976 :
975 :
2008/02/06(水) 09:29:17 追記で。 上記プログラムを何回実行したかを確認したいときどこをどのように変更したらよいか答えなさい。