1 :
デフォルトの名無しさん :
2007/07/26(木) 21:28:15 BE:302948148-2BP(12)
2 :
デフォルトの名無しさん :2007/07/26(木) 21:32:14
【即会い!!】
私自身が使用してみて、即出会えた出会い系サイトを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトのみを厳選して薦めております。
フリーアドレスで登録できるサイトを拡充しました!
↓↓↓
【ブログ 〜即出会えるサイト】
http://deaigets.blog97.fc2.com/
>>1 の続き
【回答者へ】
gdgd質問者をネチネチと嬲ったり詰ったりしていないでソースで答えを示せ!
5 :
デフォルトの名無しさん :2007/07/26(木) 21:59:26
>>4 捕捉
答えを出せば何をやってもいいという意味ではないので勘違いなきよう
>>6 持ちつ持たれつ、かな。どっちもいないとスレが成立しない。
こっちは成立しなくてもなんにも困らないわけだが。
10 :
デフォルトの名無しさん :2007/07/26(木) 23:39:59
オナネタがなくなったら困るだろ?
最近このスレにいいネタが少かったので久しぶりに来た俺
>>9 そう、お前みたいな奴が来なくても成立するから二度と来るな
万が一AVが無くなっても、世の中から女が消えるわけじゃないしな 無くなっても特別困ることは無いと思う。あると便利だけど。
AVと女の存在の有無についてどう直結するのか教えてくれ。AV : AudioVideoとして
女の出てこない映画とか少ないだろ
男ばっかりの映像コンテンツなんて気持ち悪くて・・・ orz
や ら な い か
ヤラネーヨ
ウホッ
20 :
桜 :2007/07/27(金) 01:21:19
[1] 授業単元:コンピュータプログラミング論 [2] 問題文(含コード&リンク): POSデータ解析システム K氏は、3つのコンビニエンスストア(X店、Y店、Z店)をチェーン店に持つオーナーです。コンビ ニエンスストアの経営において、売れ筋商品と死に筋商品の的確な把握は死活問題に直結する重要な業務 です。そこでK氏は、チェーン店に、毎日どんな商品がどれくらい売れたのかといった販売情報を、CS Vファイルとして送るように指示していました。しかし、送られてくるデータファイルは膨大であり、そ れらを統合して、全店を通して最も売れた商品はどれで、何が売れていないかを把握することは困難でし た。つまり、送られてくるデータを適切に活用できないでいました。そこで、K氏はあなたに、こういっ たことを解決するシステム(POSデータ解析システム)を開発するように頼みました。K氏は、毎日送 られてくるX、Y、Z店の個別の販売情報を合計した一括データを入手したいそうです。
21 :
桜 :2007/07/27(金) 01:22:52
続き・・・ まず、あなたは、各店舗から送ってもらうCSV ファイル名を以下のようにするよう、お願いしました。 X店 data-x.csv Y店 data-y.csv Z店 data-z.csv また、商品名(全100 品種)は必ず以下の形式で入力するように指示しました。 「 Item Item-00 」から「 Item Item-99 」までの半角7 文字 さらに、各店から送られてくるレコードのフィールドは、以下の項目にして、売上時刻順に並べてもら うよう、お願いしました。以下のようなCSV ファイルが送られてくることになります。 売上時刻 商品名 売上個数 0:12, Item-42, 2 0:12, Item-03, 1 0:49, Item-92, 3 ・ ・ 23:38, Item-80, 1 また、毎日送られてくるCSVファイルとは別に、単価情報が格納された tanka.csv ファイルを作りま した。このファイルのレコードのフィールドは、次のようになっていて、商品名順に並んでいます。 商品名 単価 Item-00,150 Item-01,120 ・ Item-99,230 最後に、K 氏に提供する統合ファイル(data data-all.csv csv)のレコードの中身は以下のようにして、商品名 の小さい順にレコードを作りました。 商品名 単価 総売上個数 売上高 ここで、大事なことは、売上情報を統合することです。例えば、単価150 円のItem-23 という商品が、 X 店では15 個、Y 店では、25 個、Z 店では10 個売れたとすると、以下のようになっているということです。 Item-23,150,50,7500 また、全店舗を通して1 個も売れなかった商品情報は載せないことにしました。
23 :
桜 :2007/07/27(金) 01:24:28
続き・・・ [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C) [4] 期限: ([2007年07月31日23:59まで] ) [5] その他の制限: #include <stdio.h> typedef struct _item{ int tanka; int kosuu; } Item; int main(){ Item item[100]; FILE *ft; ft = fopen("tanka.csv","r"); while (fscanf(ft,"Item-%d,%d",&n,&t)!=EOF){ item[n],tanka = t; } fclose(ft); ここまでなら習っています。ここから続きが全くわかりません。どなたか是非教えてください。本当にお願いします。あと変数と関数の意味、工夫点を明記してくれたら助かります。
店舗からのファイルとか単価情報とかのサンプルないの?
25 :
デフォルトの名無しさん :2007/07/27(金) 02:08:01
[1] 授業単元: プログラム言語 [2] 問題文: 3行3列の行列の和を計算するプログラムを作成する。 3行3列の行列の積を計算するプログラムを作成する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2007年7月27日まで [5] その他の制限: 配列を使わなければならず、 #include <stdio.h> main() { int a[3][3],b[3][3],c[3][3],x,i,j,n,k; for(i=0;i<3;i=i+1) for(j=0;j<3;j=j+1) scanf で値を読み込む所まではわかったのですが、その後の計算方法が全くわかりません。 どうぞご教授願います。
26 :
デフォルトの名無しさん :2007/07/27(金) 02:41:26
[1] 授業単元: プログラミング演習 [2] 問題文: 時刻0に1個の赤血球から血液の培養を始める。1分後に 赤血球は死に次の確率で下の組み合わせのうちのどれかで おきかえられる。 2個の赤血球 1/4 1個の赤血球と1個の白血球 2/3 2個の白血球 1/12 各赤血球は1分間生存して親の赤血球と同様に子を生む。 各白血球は1分間生存して子を作らずに死ぬ。個々の血球は 独立にふるまうと仮定する。 -------------------------------------------------------- ○問題 上記の血球の培養過程をモンテカルロ法によりシミュレートし 1時間後の赤血球の数の確率分布を求めよ。なお確率分布は 乱数の初期値を変えて何度もシミュレーションを行い、 そのヒストグラムから求めること [3.1] OS:Linux [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:7月25日午前中 [5] その他の制限:「なお確率分布は 乱数の初期値を変えて何度もシミュレーションを行い、 そのヒストグラムから求めること。 」 といっている意味がよく分からないのでそこのところを詳しく説明して いただけると幸いです。 どうかご教授よろしくお願いします。
28 :
桜 :2007/07/27(金) 02:50:30
┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨
>>26 これはひどい
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long int prev[2], cell[2];
unsigned int key;
int hist[10] = {0}, i, j, k, n;
for(i = 0; i < 50; i++){
printf("input key (unsigned int) : "), scanf("%d", &key);
srand(key);
prev[0] = 1, prev[1] = 0;
for(j = 0; j < 60; j++){
cell[0] = 0, cell[1] = 0;
for(k = 0; k < prev[0]; k++){
n = (int)((double)rand()/(RAND_MAX + 1)*12);
if(n < 4) cell[0] += 2;
else if(n < 11) cell[0]++, cell[1]++;
else cell[1] += 2;
}
prev[0] = cell[0], prev[1] = cell[1];
}
hist[(int)((double)cell[0]/(cell[0] + cell[1])*10)]++;
}
for(i = 0; i < 10; i++){
printf("%3.1f : ", (double)i/10);
for(j = 0; j < hist[i]; j++) putchar('*');
putchar('\n');
}
return 0;
}
符号無しじゃないとまずいな……
>31 確率間違ってない?
> if(buf[0]) > put_word(stdout, column, buf, !first); は if(buf[0]) { put_word(stdout, column, buf, !first); first = 0; } の間違い。再三すまん。
[1] 授業単元:情報基礎 [2] 問題文(含コード&リンク): 次の仕様をみたすプログラムを作成せよ。 ・入力は3つの正の整数a,b,c ・出力は、a,b,c,の中で最大の整数Mと最小の整数m。さらにMPmとMCmの値。 たとえば、a=4,b=3,c=5を入力した場合は、出力が M=5,m=3, P=60,C=10 となるようにする。出力の体裁は好きにして良いが、それぞれの数値が区別できるようにすること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:今日の20時までです 助けてください。 C言語さっぱりです
>>36 #include<stdio.h>
int fact(int n){
if(n<2)
return 1;
else
return n*fact(n-1);
}
int main(void){
int a,b,c,M,m,P,C;
printf("a=",a); scanf("%d",&a);
printf("b=",b); scanf("%d",&b);
printf("c=",c); scanf("%d",&c);
M=a>b?a:b; M=M>c?M:c;
m=a<b?a:b; m=m<c?m:c;
P=fact(M)/fact(M-m);
C=fact(M)/fact(m)/fact(M-m);
printf("M=%d\nm=%d\nP=%d\nC=%d\n",M,m,P,C);
return 0;
}
>>36 #include <stdio.h>
int fact( int n ) { return ( n < 2 ) ? 1 : n * fact( n - 1 ); }
int nPr( int n, int r ) { return fact( n ) / fact( n - r );}
int nCr( int n, int r ) { return nPr( n, r ) / fact( r );}
int max( int a, int b ) { return ( a > b ) ? a : b ; }
int min( int a, int b ) { return ( a > b ) ? b : a ; }
int main( void )
{
int a,b,c,M,m;
printf( "a=" ); scanf( "%d",&a );
printf( "b=" ); scanf( "%d",&b );
printf( "c=" ); scanf( "%d",&c );
printf( "M=%d\n", M = max( max( a, b ), c ) );
printf( "m=%d\n", m = min( min( a, b ), c ) );
printf( "MPm=%dP%d=%d\n", M, m, nPr( M, m ) );
printf( "MCm=%dC%d=%d\n", M, m, nCr( M, m ) );
return 0;
}
≫37さん たすかりました! ありがとうございました^^
40 :
37 :2007/07/27(金) 14:33:41
45 :
デフォルトの名無しさん :2007/07/27(金) 20:25:15
[1] 授業単元: プログラム言語演習 [2] 問題文(含コード&リンク): 「1、整数nを受け取り、パスカルの三角形を印字する戻り値のない関数を作成せよ。 ただし、関数内では2次元配列を大きめに宣言し、配列とくり返し構造を用いて実現すること。」 さらに、 「2、1のパスカルの三角形を1次元配列で実現せよ。」 という問題です。 配列が苦手で、書き方がさっぱりわかりません。どうぞお力を貸してください。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: できれば今日中にお願いします。 [5] その他の制限: 配列を使ってお願いします。
1だけ void triangle(int n) { int i,j; int N[100][100]; // パスカルの三角形の計算 for(i=0;i<n;i++) { N[i][0]=1; //左端に1を設定 N[0][i]=1; //右端に1を設定 } for(i=1;i<n;i++) { for(j=1;j<n;j++) { N[i][j]=N[i-1][j]+N[i][j-1]; //中の計算 } } // パスカルの三角形の表示 for(i=0;i<n;i++) { for(j=0;j<n-i-1;j++) { //右の空白を表示 printf("半角空白3つ"); } for(j=0;j<=i;j++) { //数字を表示 printf("%3d半角空白3つ",N[i-j][j]); //配列Nを左下から右上に表示 } printf("\n"); } }
2だけ void pascal_triangle(int n) { int val[MAX] = {0}; int i, j; for(i = 0; i < n; i++) { for(j=0;j<n-i-1;j++) { //右の空白を表示 printf(" "); } for(j = i; j >= 0 ; j--) { if(j == 0){ val[j] = 1; } else{ val[j] += val[j-1]; } printf("%4d", val[j]); } printf("\n"); } }
どんだけぇ〜〜〜っつかマイン関数も書けYO!
それぐらい自分で書けよカス #include <stdio.h> void pascal_triangle(int n){} int main(void) { int n; scanf("%d",&n); pascal_triangle(n); return 0; }
自分でって、俺は質問者じゃねーよw とりあえず俺に¢50払えw
そうだ、今度っからは クソース って言葉だけでなく、クソースを書いた者にも税金のごとく徴収するぜ?w
54 :
デフォルトの名無しさん :2007/07/27(金) 22:09:50
>27さん どうもありがとうございました。 助かりました。
クソ−ツ
>>55 おまいは俺を怒らせた。ちみは2倍の$1の支払いを命ずる
せっかく来たんで記念に教えてあげるんですが、
>>58 すべってますよ。あ〜、みんなそのねたあきちゃった。ざんねん。
ム板というよりVIPのノリだな とりあえず自分の出すソースに自信が無いなら出さなくてもおk 自分の回答よりヘボな回答が出たら、 自分のほうが上だと優越感に浸りながら、ただROMってろ
自信があるやつも別に出さなくていいよ。ちゃんとROMってれば。
62 :
デフォルトの名無しさん :2007/07/28(土) 01:28:17
63 :
デフォルトの名無しさん :2007/07/28(土) 01:29:33
62です。どうぞよろしくお願いいたします。
激しく期限切れだな
65 :
デフォルトの名無しさん :2007/07/28(土) 01:43:29
とりあえず言い訳を考えよう。 「PCの時計が1年狂ってました m(_ _)m」でどう?
int kazu(int n) { int i,j; for(i=0;i<n;i=i+1) { printf("*"); } printf("\n"); if(n<1)return 0; j=kazu(n-1); for(i=0;i<n;i=i+1) { printf("*"); } printf("\n"); return j+n;}
67 :
65 :2007/07/28(土) 01:48:12
// *をwidth個出力し(×2回)、幅width以上の行に含まれる*の個数を返す関数 int printLine( const int width, const int maxWidth ) { printStars( width ); if( maxWidth <= width ) return width; int result = width * 2 + printLine( width + 1, maxWidth ); printStars( width); return result; } int main( void ) { printf( "%d\n", printLine( 1, 3 ) ); }
68 :
65 :2007/07/28(土) 01:51:15
行数減らす為に汚くなったけどかんべんな。 あと、printStars(int)関数は適当に脳内補完して。 ついでに、デバッグしてないから ノシ
69 :
65 :2007/07/28(土) 01:53:26
あ、printLine()はprintLines()の方がイイかも。
70 :
デフォルトの名無しさん :2007/07/28(土) 02:32:04
[1] 授業単元: C言語演習T [2] 問題文(含コード&リンク): 配列を用いて10桁同士の足し算をする関数を作成する。 入力と出力はメインで行い、関数内で計算すること。 引き算とかけ算もあるのですが、まず足し算の方法がわからないので、教えて頂けないでしょうか。 本当に困っています。よろしくお願いしますm(_ _)m [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2007年7月28日23:00まで] ) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 配列の単元なので、配列でお願いします。
>>62 再帰まんどくせっからこれで
#include<stdio.h>
int kazu(int n);
int main(void)
{ int a,b,i,j;
printf("入力:");
scanf("%d",&a);
for(i=1,b=0; i<=a; i++) {
for(j=0; j<i; j++,b++)
printf("*");
printf("\n");
}
for(i=a-1; i>0; i--) {
for(j=0; j<i; j++,b++)
printf("*");
printf("\n");
}
printf("%d\n",b);
return 0;}
72 :
デフォルトの名無しさん :2007/07/28(土) 10:37:26
>>60 みたいなことを言う奴こそクソースしか書かないくせに
質問者をネチネチ詰るんだよな。良いからgdgd言ってねーでお前のウンコソースを出せ!
ウンコソースって言っても下痢じゃねーぞ
73 :
デフォルトの名無しさん :2007/07/28(土) 10:49:44
>>70 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
double Plustod(const char *src1, const char *src2)
{
char *p;
double d1=strtod(src1, &p);
double d2=strtod(src2, &p);
return d1+d2;
}
int main()
{
char d1[12],d2[12];
char *temp;
double result;
fgets(d1,sizeof(d1),stdin);
if(temp = strchr(d1,'\n'))
*temp = '\0';
fgets(d2,sizeof(d2),stdin);
if(temp = strchr(d2,'\n'))
*temp = '\0';
result = Plustod(d1,d2);
printf("%s+%s=%lf\n",d1,d2,result);
return 0;
}
それは配列を用いてるとは言わないだろ
75 :
73 :2007/07/28(土) 11:10:16
つかってんじゃねーかよ 文句あっか
[1] プログラミング実習 [2] Time関数を用いてストップウォッチを作りなさい。 また、何か入力し時間を止めるまで現在の経過時間を表示させる事。 [3] 環境 [3.1] windowsXP [3.2] VC 6.0 [3.3] C言語のみ [4] 期限:2007年8月1日までに提出 [5] 基礎は一通りやりました。 「何か入力があるまで経過時間を表示させておく」 という所が全く分からず困っています。
>>76 常に全力で時間を表示する
#include<stdio.h>
#include<time.h>
#include<conio.h>
int main(void){
time_t start, end;
time(&start);
do{
time(&end);
printf("\r %.0f [sec] ", difftime(end, start));
}while(!kbhit());
return 0;
}
78 :
76 :2007/07/28(土) 11:42:47
>>77 kbhit()があるのを思い出しました。
これを元に期日までに作ってみます。
ありがとうございました!!
しっかし、ストップウォッチでtimeか・・・俺ならclockいくけど
>>79 clock()が返すのは
「プログラムが実際に使用したCPU時間」だよ。
「プログラムが起動後に経過した時間」ではない。
返してくる値は実装によってかなりまちまちなのが実情で、
ぶっちゃけ役に立たない関数だと思われ。
time()は秒単位でしか計れないのが欠点だが、他に移植性がそこそこ
ありそうで使えそうな関数は無い。
ま、
>>77 はどうせkbhit()なんてものを使ってるんだから、API使えばいいだろな。
83 :
プログラミング初心者 :2007/07/28(土) 14:47:43
[1]授業単元:c言語 [2]問題文(含コード&リンク): 2つの符号なし整数a,b(ただし、a>bとする)を キーボードから読み込み @a,bを2進表示し、配列の中にビットを格納しなさい Aa,bの四則演算 c=a+b d=a-b e=a*b f=a/b(商f1と余りf2)を計算しその結果を出力しなさい [3]環境 [3.1] OS: Windows [3.2] 言語: C言語 [4]期限:2007年7月30日まで
84 :
プログラミング初心者 :2007/07/28(土) 14:49:02
>>83 #include <stdio.h>
void dtob(unsigned int n, char *s) {
unsigned int i = 32;
s[i] = '\0';
for (i = 31; i >= 0; i--) {
s[i] = (((n >> (31 - i)) & 1) + '0');
}
}
int main(void) {
unsigned int a, b;
char buf[33]; /* for 32bit */
scanf("%d %d", &a, &b);
dtob(a, buf);
printf("%s\n", buf);
dtob(b, buf);
printf("%s\n", buf);
printf("%d + %d = %d\n", a, b, a+b);
printf("%d - %d = %d\n", a, b, a-b);
printf("%d * %d = %d\n", a, b, a*b);
b && printf("%d / %d = %d(%d)\n", a, b, a/b, a%b);
return 0;
}
デバッグ後に何すればいいか教えてください
85 :
デフォルトの名無しさん :2007/07/28(土) 15:00:46
お尋ねしたいのですが以下のプログラムに、 「rand100000.dat(ランダムに数値が100000個並んでいるデータ)」 から読み込んでソートするというのを追加したいのですがどうすればよいでしょうか? void BubbleSort(int Data[], int n) { int BeginPlace, ComparePlace; //比較を始める位置を最初からn-1まで変えていく for(BeginPlace = 0;BeginPlace < n;BeginPlace++) { //n - BeginPlaceまで比較する for(ComparePlace = 1;ComparePlace < n - BeginPlace;ComparePlace++) { //右のほうが小さかったら交換する if(Data[ComparePlace - 1] > Data[ComparePlace]) { Swap(&(Data[ComparePlace - 1]), &(Data[ComparePlace])); } } } return; }
>>85 これでやってみて
//比較を始める位置を最初からn-1まで変えていく
for(BeginPlace = 0;BeginPlace < ((((((((n-1))))))));BeginPlace++)
{
//n - BeginPlaceまで比較する
for(ComparePlace = ((((((((BeginPlace+1))))))));ComparePlace < ((((((((n))))))));ComparePlace++)
ごめん、まちがったww
88 :
デフォルトの名無しさん :2007/07/28(土) 15:42:48
>>85 void bubble_sort(int sort[], int elements)
{
int i,j,temp;
for(i=0; i < elements; i++){
for(j=i; j < elements; j++){
if(sort[i] > sort[j]){
temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
}
}
}
}
選択ソートだな
ソート方法の違いは置いといて for(i=0; i < elements; i++){ for(j=i; j < elements; j++){ これって for(i=0; i < elements-1; i++){ for(j=i+1; j < elements; j++){ ではなくて?
ソートがちゃんとできないという根本的な問題あり for(i=0; i+1 < elements; i++){ for(j=0; j+1 < elements-i; j++){ こうじゃね?
93 :
デフォルトの名無しさん :2007/07/28(土) 16:36:10
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): □☆□□□☆□□□☆□□□☆□ ☆★☆☆☆★☆☆☆★☆☆☆★☆ □☆□□□☆□□□☆□□□☆□ □☆□□□☆□□□☆□□□☆□ ☆★☆☆☆★☆☆☆★☆☆☆★☆ □☆□□□☆□□□☆□□□☆□ 上記の規則的パターンを出力するプログラムを作成し 表示サイズを実行時にコマンドライン引数で渡せるようにせよ。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: VS 2005 [3.3] 言語: C [4] 期限: 2007年07月30日11:59まで [5] その他の制限: 特になし。
業者の宣伝かとおもた
>>94 表示サイズの定義がわからん。
その例は表示サイズ3でいいのか?
97 :
88 :2007/07/28(土) 17:09:56
ごめんごめん、変なのはっちゃった 91さんの通りです。
>>92 それはない
最初のi=0,j=0 で比較してるし(意味がなく冗長)
;i+1 < elements; で配列超えているし
コマンドライン引数にしてないけどこんな感じでいいの? #include<stdio.h> int main(void){ int x,y,i,j; char *c[][4]={{"□","☆","□","□"},{"☆","★","☆","☆"},{"□","☆","□","□"}}; printf("x="); scanf("%d",&x); printf("y="); scanf("%d",&y); for(j=0;j<y;j++){ for(i=0;i<x;i++) printf("%s",c[i%3][j%4]); printf("\n"); } return 0; }
>>94 設問内容が曖昧なので、色んな回答が出るかもよ。
縦3×横4のパターンと見えるが、それを最小単位として良いか?
それとも、この縦6×横15が、パターンの最小単位とするのか?
指定する表示サイズとは、行数×文字数か?
それともパターンを単位として、縦繰返し数×横繰返し数とするか?
101 :
94 :2007/07/28(土) 17:32:41
>>96 ,
>>100 行数*文字数っていうのが正しいですね。
任意のサイズを指定して表示ってやつなんです。
>>101 だからその指定があいまいなんだって。
>94の例なら6行15文字だが仮に4行10文字の指定がきたら
□☆□□□☆□□□☆
☆★☆☆☆★☆☆☆★
□☆□□□☆□□□☆
□☆□□□☆□□□☆
こんな表示で良いのか?
まあそうかもしれないけどこの場合はそんなに神経質に考えなくてもよいじゃん
104 :
94 :2007/07/28(土) 17:40:20
>>102 模範解答はまさしくそんな感じです。
うまく説明できずに申し訳ないorz
いやいや、>100の言うみたいに3×4のパターンを入力されただけ 表示するなら簡単だが、>94の例みたいに対象となるように 表示するならそれなりに考える必要がでてくるじゃん。
1キャラ単位で表示できるようにしておけば、掛け算と足し算で間に合う。
>>94 #include<stdio.h>
#include<stdlib.h>
void print_pattern(int width, int height){
static const char *basepattern[]={
"□☆□□",
"☆★☆☆",
"□☆□□",
};
int x, y;
for(y=0;y<height;y++){
for(x=0;x<width*2;x++) printf("%c", basepattern[y%3][x%8]);
printf("\n");
}
}
int main(int argc, char *argv[]){
int width=15, height=6;
if(argc>=2) width=atoi(argv[1]);
if(argc>=3) height=atoi(argv[2]);
print_pattern(width, height);
return 0;
}
>>107 全角文字の%c出力はまずい気がするんだ・・・
>>94 あまり悩まずに回答
char pat[][4][3]={{"□","☆","□","□"},
{"☆","★","☆","☆"},{"□","☆","□","□"}};
main()
{int x, y, i, j;
scanf("%d%d", &x, &y);
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++)
printf("%s", pat[i%3][j%4]);
printf("\n"); }
return 0;
}
x,yが逆だったorz
えぇ、みんな何の違和感も無く答えられるのか・・・ 俺は>94の例がちょうど左右上下対称になってるから てっきりそういう風にするもんだと思ってしまった・・・
>>108 環境によっては問題あるの?
うちではうまくいくんだが。
>>112 2バイト文字に対応していない環境なんてたくさんあると思うんだが・・・
115 :
デフォルトの名無しさん :2007/07/28(土) 18:21:55
117 :
◆xdqL6ZHhIs :2007/07/28(土) 19:29:15
[1] 授業単元:プログラミングA [2] 問題文: 文章を読み込み、反対に出力せよ。 また、行数・単語数・文字数も出力せよ。 条件1○行末の \n も一文字と数える。 条件2○2行に渡る単語は無いものとする。 条件3○空白が連続して現れる場合にも対処する。 条件4○単語の区切りは空白または改行で判断。ただし、空白が続いて改行という場合も考慮にいれること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:[2007年07月31日23:00まで]続き↓
118 :
◆xdqL6ZHhIs :2007/07/28(土) 19:30:04
↑の続き [5] その他の制限: 必ず次の雛形を使用せよ。 #include <stdio.h> #define SIZE 100 #define TRUE 1 #define FALSE 0 main() { char line[SIZE], c; int lno=0; /* the number of lines */ int wno=0; /* the number of words */ int cno=0; /* the number of characters */ int n, i, flag; while (fgets(line, SIZE, stdin) != NULL) { /* この部分を作る */ printf("%s", line); } printf("\n%d lines, %d words, %d characters\n", lno, wno, cno); } while文から下の部分を作れということらしいのですが、 本当にどうして良いかさっぱり分かりません。どうかお願いします。m(;_ _)m
>>117 strlen と isspace の定義が無い warning が出るけど
#include <stdio.h>
#define SIZE 100
#define TRUE 1
#define FALSE 0
int main(void)
{
char line[SIZE], c;
int lno=0; /* the number of lines */
int wno=0; /* the number of words */
int cno=0; /* the number of characters */
int n, i, flag;
while (fgets(line, SIZE, stdin) != NULL) {
flag=TRUE;
n=strlen(line);
cno+=n;
if(line[n-1]=='\n') line[n--]='\0';
for(i=0;i<n/2;i++)
c=line[i],line[i]=line[n-1-i],line[n-1-i]=c;
for(i=0;i<n;i++){
if(isspace(line[i])) flag=TRUE;
else{
if(flag==TRUE) wno++;
flag=FALSE;
}
}
printf("%s", line);
lno++;
}
printf("\n%d lines, %d words, %d characters\n", lno, wno, cno);
return 0;
}
if(line[n-1]=='\n') line[n--]='\0'; ↓ if(line[n-1]=='\n') n--;
>>117 for(i=0; line[i] != '\0'; i++){
switch(line[i]){
case ' ':
if(flag == FALSE){
flag = TRUE;
wno++;
}
break;
case '\n':
if(flag == FALSE){
flag = TRUE;
wno++;
}
lno++;
cno++;
break;
default:
flag = FALSE;
cno++;
break;
}
}
cとn使ってないけど別にいいか
122 :
デフォルトの名無しさん :2007/07/28(土) 20:09:26
>>119 gccだとwarningではなくcompile error だぞ
123 :
◆xdqL6ZHhIs :2007/07/28(土) 20:09:48
>>122 c++としてコンパイルするのでなければプロトタイプ宣言は必須じゃないのだけれど。
125 :
94 :2007/07/28(土) 20:41:44
126 :
99 :2007/07/28(土) 20:48:50
127 :
94 :2007/07/28(土) 20:57:36
>>126 あちらは「こんなのはどうでしょう?」ということで別件で提出してみました。
講師から返事があればまた報告してみます。
129 :
デフォルトの名無しさん :2007/07/28(土) 21:36:58
[1] 授業単元: プログラム言語 [2] 問題文(含コード&リンク): nを読み込んで第n項までのフィボナッチ数を印字するプログラムを繰り返しを用いて作成しなさい。 再帰での書き方はわかったのですが、繰り返しを使う書き方がわかりません。 どうぞよろしくお願いします。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月29日23:00まで [5] その他の制限: 繰り返しを使ってお願いします。for,while,doどれでも結構です。 よろしくお願いします。
#include <stdio.h> int fib(int n) { int a = 0; int b = 1; while (n > 0) { int t = a+b; a = b; b = t; n = n-1; } return a; } int main(void) { int n; scanf("%d",&n); fib(n); return 0; }
131 :
# :2007/07/28(土) 21:51:03
[1] 授業単元: プログラム言語 [2] 問題文(含コード&リンク): n個の正整数が与えられた時、それらの値の中で出現回数の最も多いものを求める プログラムを書け。出現回数最多の値が2種類以上ある場合は、その中で値の最も 大きいものを求めること。nは1以上100以下と過程してよい。 入力は、次の形式の行がいくつか連続したものである。a1〜aのnのn個の値を計算の 対象とする。入力の最後には、0だけからなる行が一つある(この行は計算の対象外である)。 入力例: n=10 a[n]:2 7 1 8 2 8 1 8 2 8 出力:8 n=5 a[n]:1 3 2 1 2 出力:2 0 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月30日15:00まで [5] その他の制限:なし
おっと fib(n); → printf("%d\n", fib(n));
>>129 #include <stdio.h>
main()
{
int n, i=0,n1=1,n2=0;
scanf("%d",&n);
while (i < n) {
i++; printf("%d %d\n", i, n1);
n1 += n2; n2 = n1 - n2; }
return 0;
}
134 :
デフォルトの名無しさん :2007/07/28(土) 22:03:43
int fib(int n) { int a0 = 1, a1; int b0 = 1, b1; int c0 = 0, c1; int x0 = 1, x1; int y0 = 0, y1; n--; while(n >0){ if(n & 1){ x1 = x0; y1 = y0; x0 = a0 * x1 + b0 * y1; y0 = b0 * x1 + c0 * y1; } n /= 2; a1 = a0; b1 = b0; c1 = c0; a0 = a1 * a1 + b1 * b1; b0 = b1 * (a1 + c1); c0 = b1 * b1 + c1 * c1; } return x0; }
>>129 #include <stdio.h>
int main(void) {
int a = 0 , b = 1, t , n;
scanf("%d",&n);
for(; n>0; n--) {
t = a+b;
a = b; b = t; }
printf("%d\n", a);
return 0; }
>>131 >n個の正整数が与えられた時、
入力行はこの形式で受け取ると言うことか?
n=10 a[n]:2 7 1 8 2 8 1 8 2 8
それとも、この形式?
2 7 1 8 2 8 1 8 2 8
後者の場合に、データが1件で値が0の時が終了?
137 :
# :2007/07/28(土) 22:25:07
>>136 すいません、説明不足でした。
n a1 a2 ・・・・ an(数値で表すと 10 2 7 1 8 2 8 1 8 2 8)
のような形式の行が連続したものです。
nの値が0であった時に終了します。
>>131 #include <stdio.h>
#include <stdlib.h>
#define DATA_MAX 100
int data_compare(const void *a, const void *b){
return *(const int *)b-*(const int *)a;
}
int main(void){
int data[DATA_MAX], data_num, same_data_num, max_data_num, max_data, i, prev_data=0;
while(1){
scanf("%d", &data_num);
if(data_num<=0 || data_num>DATA_MAX) break;
same_data_num=max_data_num=max_data=0;
printf("n=%d a[n]:", data_num);
for(i=0;i<data_num;i++) scanf("%d", &data[i]);
for(i=0;i<data_num;i++) printf("%d ", data[i]);
qsort(data, data_num, sizeof(data[0]), data_compare);
for(i=0;i<=data_num;i++){
if(i<data_num && prev_data==data[i]) same_data_num++;
else{
if(max_data_num<same_data_num){
max_data_num=same_data_num;
max_data=prev_data;
}
same_data_num=1; prev_data=data[i];
}
}
printf("出力:%d\n", max_data);
}
printf("0\n");
return 0;
}
139 :
# :2007/07/28(土) 22:46:26
140 :
デフォルトの名無しさん :2007/07/28(土) 23:24:45
>130 >133 >134 >135 皆様どうもありがとうございました。 おかげで、無事に完成させることができました。
完成させたのはお前じゃないがな
>>131 オレも作ってみた
#include <stdio.h>
int main()
{
int data[100],count[100],num,i,j,max,maxcount;
char d;
while(1){
scanf("%d",&num);
if(num==0)break;
max=-1;maxcount=0;
for(i=0;i<num;i++){
scanf("%d",&data[i]);count[i]=1;}
scanf("%c",&d);
for(i=0;i<num-1;i++){
for(j=i+1;j<num;j++){
if(data[j]!=-1 && data[j]==data[i]){
count[i]++;data[j]=-1;}}}
for(i=0;i<num;i++){
if(maxcount<count[i]){
maxcount=count[i];max=data[i];
}else if(maxcount==count[i]&&max<data[i]){
max=data[i];}}
printf("%d\n",max);}
return 0;
}
143 :
# :2007/07/29(日) 00:06:18
>>142 構造体を使わないやり方ですね。
思いつきませんでした…
ありがとうございます!
[1] 授業単元: 暇を持て余す [2] 問題文(含コード&リンク): 暇なので、ソース中のタブなどのインデントを2ch用のインデント? に変換するプログラムの作成。 例えば、以下のような感じのもの(&nbsp;は全角ではなく、半角のものとする)。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]){ FILE *fp_in, *fp_out; int ch; char filename[128] = {0}, *p; if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1); if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2); if((p = strrchr(argv[1], '.')) == NULL) exit(3); memcpy(filename, argv[1], p - argv[1]); strcat(filename, ".txt"); if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4); while((ch = fgetc(fp_in)) != EOF){ if(ch == '\t') fprintf(fp_out, "&nbsp; &nbsp; "); else fputc(ch, fp_out); } fclose(fp_in); fclose(fp_out); return 0; } しかし、これではtabを変換しているだけで、spaceが連続した場合などには対応していない。 そこで、spaceが連続した場合や、tabとspaceが並んだ場合にも対応できるようにすること。 [3] 環境 [3.1] OS: Windows Xp、またはフリーのLinux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C、C++のどちらでもおk [4] 期限: なし [5] その他の制限: なし
149 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 00:34:56
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 自然数nを受け取り、nの全ての約数を昇順に印字し、 さらにそれらの総和を戻す再帰関数を作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2007年7月29日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 再帰関数を習っています。 約数を昇順に印字するところからわかりません。 どうぞよろしくおねがいします。
>>149 例えばnが12の時は、12=2*2*3だから
2 2 3と出力して、7を返せばいいの?
それとも、2 3と出力して、5を返せばいいの?
1 2 3 4 6 12 で 28を返すのかもよ
素因数とは書いてないのだから、>152だろ。 更に自分自身を除くと言う条件がついていれば完全数チェックに使えるけど。
155 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 00:58:54
149です。 説明不足で申し訳ありません。 152さんのように出力できるようにお願いします。
再起を使わないと簡単なんだが。 さてどこで使うと良いのか、思案中w
>>156 再起をどう使うのか、難しいな。
再帰なら簡単に使えるのだが。
うわ、つまんね
int proto_print_divisor(int n, int div){ if((n % div) == 0) { printf("%d ", div); if(n == div) return div; } else div = 0; return div + proto_print_divisor(n, div + 1); } int print_divisor(int n){ int res; printf("divisor of %d = {", n); res = proto_print_divisor(n, 1); printf("} sum = %d\n", res); return res; } とりあえずこうしてみた 引数一つで再帰、グローバル変数とか使わないんじゃ無理では 間違いなくfor文のほうがスマート
psychic(サイキック)な奴らだな
>149 再帰関数だけ。 いまいちスマートじゃないが、気にしない。 int f(int n) { static int i = 1; int j; for(j=i; j<=n; j++) { if(n%j==0) { printf("%d ", j); break; } } i = j + 1; return j==n ? n : f(n) + j; }
せめてリエントラントにしたほうがいい
165 :
460 :2007/07/29(日) 01:54:07
>>148 てすつwithコップ酒*1.5+うぃすき*1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SISE 1024
int main(int argc, char *argv[]){
FILE *fp_in, *fp_out;
int ch;
char line[BUF_SISE];
char filename[128] = {0}, *p;
int i,j,k;
const int TABLENGTH =2;
int space_length;
if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
if((p = strrchr(argv[1], '.')) == NULL) exit(3);
memcpy(filename, argv[1], p - argv[1]);
strcat(filename, ".txt");
if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);
while( fgets(line,BUF_SISE,fp_in) != NULL ){ for(i=0,j=0;i<BUF_SISE;i++,j++){ if( line[i] == '\n' || line[i] == EOF ){ fputc('\n', fp_out); break; } if( line[i] == '\t'){ space_length = (j/TABLENGTH + 1)*TABLENGTH - j; for(k=0;k<space_length;k++) fprintf(fp_out, " "); j += space_length*6-1; }else if( line[i] == '&'){ fprintf(fp_out, "&"); j += 5-1; }else if( line[i] == ' '){ fprintf(fp_out, " "); j += 6-1; }else fputc(line[i], fp_out); } } fclose(fp_in); fclose(fp_out); return 0; }
167 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 01:57:09
161さん、164さん、どうもありがとうございます。 161さんにお聞きしたいのですが、nに数字を読み込むということで合っていますか? また、divはどのような働きをするのか、教えていただけないでしょうか。 勉強不足のため、お手をわずらわせて大変申し訳ありませんが、お願いできましたら幸いです。
>>149 再起不能者が、再起のために非再帰版で回答。
皆が言っているようにこの方が簡単だと思う。
#include <stdio.h>
int f(int n)
{int i,sum=0;
for (i=2;i<=n;i++){
if((n%i)==0){printf("%d ",i);sum+=i;}}
return sum;
}
int main()
{int data,i;
scanf("%d",&data);
printf("1 ");
printf("%d\n",f(data)+1);
return 0;
}
>>148 てすつ2+うぃすき*0.5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SISE 1024
int main(int argc, char *argv[]){
FILE *fp_in, *fp_out;
char line[BUF_SISE];
char filename[128] = {0}, *p;
int i,k;
const int TABLENGTH =4;
int space_length;
if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
if((p = strrchr(argv[1], '.')) == NULL) exit(3);
memcpy(filename, argv[1], p - argv[1]);
strcat(filename, ".txt");
if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);
while( fgets(line,BUF_SISE,fp_in) != NULL ){ for(i=0;i<BUF_SISE;i++){ if( line[i] == '\n' || line[i] == EOF ){ fputc('\n', fp_out); break; } if( line[i] == '\t'){ space_length = (i/TABLENGTH+1) *TABLENGTH -i; for(k=0;k<space_length;k++) fprintf(fp_out, " "); }else if( line[i] == '&') fprintf(fp_out, "&"); else if( line[i] == ' ') fprintf(fp_out, " "); else fputc(line[i], fp_out); } } fclose(fp_in); fclose(fp_out); return 0; }
171 :
168 :2007/07/29(日) 02:10:24
まだ変だなw 酒気帯びモードなので、今日は再起出来ないかも
>>148 おらあ呑めば呑むほど強くなるぜ三度目の正直どうだー
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SISE 1024
int main(int argc, char *argv[]){
FILE *fp_in, *fp_out;
char line[BUF_SISE];
char filename[128] = {0}, *p;
int i,j,k;
const int TABLENGTH =4;
int space_length;
if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
if((p = strrchr(argv[1], '.')) == NULL) exit(3);
memcpy(filename, argv[1], p - argv[1]);
strcat(filename, ".txt");
if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);
while( fgets(line,BUF_SISE,fp_in) != NULL ){ for(i=0,j=0;i<BUF_SISE;i++,j++){ if( line[i] == '\n' || line[i] == EOF ){ fputc('\n', fp_out); break; } if( line[i] == '\t'){ space_length = (j/TABLENGTH+1) *TABLENGTH -j; j += space_length-1; // タブによる見かけ上の位置 for(k=0;k<space_length;k++) fprintf(fp_out, " "); }else if( line[i] == '&') fprintf(fp_out, "&"); else if( line[i] == ' ') fprintf(fp_out, " "); else fputc(line[i], fp_out); } } fclose(fp_in); fclose(fp_out); return 0; }
174 :
172 :2007/07/29(日) 02:20:12
満足だああああぁあああ
175 :
デフォルトの名無しさん :2007/07/29(日) 02:24:41
ブラウザに載っけるソースに無理に全角スペースで インデントつけたら、見る方にとっては、コピペしたとき 邪魔なだけなんじゃないか?
わざとだろ、キニスンナ
全角スペースなんか入れてねえづらよ
全角スペースを半角スペースにする置換をすりゃええがな。 頼むから痴漢はしちゃだめだぞ。
ブロックの開始後とにタブか空白で字下げするスクリプトのほうがよっぽど有益だ
専ブラのポップアップだとちゃんと半角インデントつくんだから余計なことはしなくていいよもう!
コピペしやすいようにわざわざ でインデントしてるのに叩かれててワラタ
>>181 それって、 がペーストされるんだけど。
うpろだ使えばよくね?
>>182 それは使ってるブラウザに依る。
JaneやIEなら半角スペースがペーストされるはず。
このスレをIEとかFireFoxで開いてコピーすればいい Janeだとnbsp;に変換されてて多少面倒だね まあそんな細かいことどーでもいいじゃないか
/**/でインデントしようぜ!
#define _ #include <stdio.h> #include <math.h> int main(void) { _ _ for(int i = 0; i < 10; i++) _ _ _ _ printf("sin %d = %f\n", i, sin(i)); _ _ return 0; } 読みやすい?
美しい
191 :
94 :2007/07/29(日) 15:28:54
こんにちは。
そういえば
>>99 のプログラムはコマンドライン版にするとどんな感じになるんでしょう?
ふと疑問に思ったもので。
int main(int argc, const char **argv){ int x,y; if( argc > 2 ){ sscanf(argv[1],"%d",&x); sscanf(argv[2],"%d",&y); 試してないけどたぶんこんな流れ
>>191 >>109 に手を入れた
#include <stdio.h>
char pat[][4][3]={{"□","☆","□","□"},
{"☆","★","☆","☆"},{"□","☆","□","□"}};
main(int argc, char *argv[])
{int x, y, i, j;
if (argc != 3){
fprintf(stderr,"usage %s x y\n",argv[0]);
return 0;}
x=atoi(argv[1]);y=atoi(argv[2]);
for (i = 0; i < y; i++) {
for (j = 0; j < x; j++)
printf("%s", pat[i%3][j%4]);
printf("\n"); }
return 0;
}
194 :
デフォルトの名無しさん :2007/07/29(日) 16:00:16
暇や なんかお題くれ
テンプレに従ってないしやる気がでないな まぁまだ投票してない俺が言えた事じゃないが
197 :
94 :2007/07/29(日) 16:16:24
>>192 おぉ、スッキリしました。ありがとですー。
>>193 ふむふむ。休み期間中にこれくらいは自力で作れるようにならないとなぁ。
ありがとですー。
>>194 任意の個数まで、あるいは任意の文字列まで数値を取得し
配列に格納した後表示させよ。
たとえば終了文字列を"end"にするなら(この文字列は既知として良い)
入力>12 378aaa98fff90 end78aa9
格納される数値:12,37,98,90
みたいな。
この場合endに当たらない限り、任意の個数分の数値を格納するまで
改行しようが読み続ける仕様。
別に宿題じゃなくて、暇って言うから考えただけだから
実行例の形とかは適当に。
194は何でもやりそうな気がした
>>194 >>930 への解答を考えているんだけど、
任意の桁数の乗算ができるような関数を考えてみないか?
入力 12345678901234567890 * 12345678901234567890
出力 152415787532388367501905199875019052100
こんな感じ。
203 :
1194 :2007/07/29(日) 19:15:06
100000のでーたを上手くあつかえませんでした (1000とかなら、いけるんだけどな・・・)
204 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 19:43:40
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): 入力した金額の支払い方を印字するプログラムを作成する。 ただし、 1、再帰関数で作成する。 2、配列を用いて割る数(10000,5000,2000,...5,1)をあらかじめ代入しておき、 繰り返し構造で実現する。 例 入力:9362 出力: 10000 0mai 5000 1mai 1000 4mai 500 0mai 100 3mai 50 1mai 10 1mai 5 0mai 1 2mai 再帰と配列で作るのですが、解き方がよくわかりません。 お力を貸してください。よろしくお願いします。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2007年7月30日 [5] その他の制限: 配列、再帰 両方でお願いします。
205 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 19:50:46
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): 入力した金額の支払い方を印字するプログラムを作成する。 ただし、 1、再帰関数で作成する。 2、配列を用いて割る数(10000,5000,2000,...5,1)をあらかじめ代入しておき、 繰り返し構造で実現する。 例 入力:9362 出力: 10000 0mai 5000 1mai 1000 4mai 500 0mai 100 3mai 50 1mai 10 1mai 5 0mai 1 2mai 再帰と配列で作るのですが、解き方がよくわかりません。 お力を貸してください。よろしくお願いします。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2007年7月30日 [5] その他の制限: 配列、再帰 両方でお願いします。
206 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 19:51:56
操作を間違えて2回書き込まれてしまいました。 すみません。
どんな間違いなのか気になる・・・
同じ過ちを繰り返すということさ
>>204 #include <stdio.h>
void pay(int price, const int *coins, int index)
{
if (coins[index]) {
printf("%d %dmai\n", coins[index], price / coins[index]);
pay(price % coins[index], coins, index + 1);
}
}
int main(void)
{
int d[] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1, 0 };
unsigned price;
while (scanf("%d", &price) == 1)
pay(price, d, 0);
return 0;
}
210 :
209 :2007/07/29(日) 20:02:59
げ、priceをunsignedと宣言しておきながら まあいいや
弐千円札の存在を忘れていた俺ガイル
212 :
デフォルトの名無しさん :2007/07/29(日) 20:48:39
[1] 授業単元: プログラム言語基礎 [2] 問題文(含コード&リンク): n個(nは入力する)の実値を入力し、それらの合計と平均を求めるプログラムを、繰り返し構造を用いて書きなさい。 n個入力するという所の書き方が特にわかりません。 ご教授願いますm(__)m [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月31日20:00まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
213 :
デフォルトの名無しさん :2007/07/29(日) 20:54:48
>>212 int i;
double sum = 0.0, tmp;
for(i = 0 ; i < 10 ; i++) {
scanf("%lf", &tmp);
sum += tmp;
}
sumが合計
sum/10が平均
>>212 #include <stdio.h>
int main(void){
int i,n;
double tmp,sum=0;
printf("n個入力\n->");
scanf("%d",&n);
getchar();
for(i=0;i<n;i++){
scanf("%lf",&tmp);
getchar();
sum+=tmp;
}
printf("合計:%f\n平均:%f\n",sum,sum/(double)n);
return 0;
}
コンパイルしてないからケアレスミスとかシラネ。
215 :
デフォルトの名無しさん :2007/07/29(日) 21:28:23
213さん 214さん ありがとうございました^^)
>>209 #include <stdio.h>
void pay(int price, const int *coins, int index) {
if (coins[index]) {
printf("%d %dmai\n", coins[index], price / coins[index]);
pay(price % coins[index], coins, index + 1);
}
}
int main(void) {
int d[] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1, 0 };
unsigned price;
while (scanf("%d", &price) == 1) { pay(price, d, 0); }
return 0; }
217 :
デフォルトの名無しさん :2007/07/29(日) 22:02:12
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): nを入力し、n項までの次のような規則の数列を印字せよ。 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 … [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2007年7月30日中 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 全くわかりません;本当に困っています。 どうぞよろしくお願いします。
>>217 #include <stdio.h>
int main()
{
int i,j,num;
scanf("%d",&num);
for(i=1;i<=num;i++)
for(j=1;j<=i;j++)
printf("%d ",j);
printf("\n");
return 0;
}
219 :
217 :2007/07/29(日) 22:39:07
>218さん ありがとうございます!! forだけでこんなにきれいにできるんですね。
>>217 もっときれいに書けそうな気もするが
#include <stdio.h>
int main(void)
{
int i, j, k, n;
scanf("%d", &n);
for(i = 1, j = 1, k = 1; i <= n; i++, j++){
printf("%d ", j);
if(j == k) j = 0, k++;
}
putchar('\n');
return 0;
}
221 :
デフォルトの名無しさん :2007/07/29(日) 23:07:01 0
>>217 まあ,無意味だが
#include <stdio.h>
void f3( int k, int i ) { if ( i > k ) { return; } printf( "%d ", i ); f3( k, i + 1 ); }
void f2( int n, int k ) { if ( k > n ) { return; } f3( k, 1 ); f2( n, k + 1 ); }
void f1( int n ) { f2( n, 1 ); puts(""); }
int main()
{
int n;
scanf("%d", &n);
f1(n);
return 0;
}
223 :
お願いします :2007/07/29(日) 23:13:38 0
[1] 授業単元:プログラミング [2] 問題文:"整数"のデータを入力しながら、その個数を数え、合計、平均、標準偏差を計算せよ。また、個々のデータに対する偏差値も計算せよ。 下記の雛形を使用せよ。 #include <stdio.h> #include <math.h> #define MAX 100 main() { int a[MAX], n, i, c=0, sum=0; double ave, sigma=0; /* この部分を各自作成する */ printf(" | mark | deviation\n"); printf("-------+--------+-----------\n"); for (i = 0; i < n; i++) printf("a[%3d] | %6d | %6.2f\n", i, a[i], (a[i]-ave)*10/sigma+50); printf("-------+--------------------\n"); printf(" sum | %6d\n", sum); printf(" ave | %6.2f\n", ave); printf(" sigma | %6.2f\n", sigma); } 続き↓
224 :
お願いします :2007/07/29(日) 23:15:33 0
続き↑ [3] 環境 [3.1] OS:Windows [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: [2007年07月31日20:00まで] [5] その他の制限:for文で作れと言われました。 もう何を先にやったら良いのかもわかりません。 どうかお願いしますm(*_ _)m
225 :
デフォルトの名無しさん :2007/07/29(日) 23:32:21 0
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 16bitの2進数を受け取り、その10進数を戻すint型の関数を作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月31日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 全く解けなくて困っています。 関数、配列の基礎的なことは習いました。 どうぞよろしくお願いします。
226 :
デフォルトの名無しさん :2007/07/29(日) 23:34:48 0
[1] 授業単元:C言語 [2] 問題文: 丸めについて。 気温のデータを5℃単位に丸めたい。 キーボードからdouble型変数kに気温を入力し、 丸めた数値はint型変数gに求め、gを画面に出力する。 ただし入力データに負の気温はないものとする。 また必要なら、計算途中の中間結果を格納するint型変数wなど、 適宜変数を用意すること。 [3] 環境 [3.1] OS:WINDOWS XP [3.2] コンパイラ名とバージョン: (VS 2005) [3.3] 言語: C [4] 期限: ([2007年7月31日19:00まで。
>>225 #include <stdio.h>
#include <string.h>
int BinStrToNum(char *lpszBin);
int main(void)
{
printf("%d\n", BinStrToNum("1111111111111111")); /*0xFFFF = 65535*/
return 0;
}
int BinStrToNum(char *lpszBin)
{
int nValue=1, nSum=0, i; /*2の0乗、10進数に変えた値の合計*/
for(i=strlen(lpszBin)-1; i>=0 ;i--)
{
if(lpszBin[i] == '1') nSum+=nValue; /* 1なら2のn乗を足す */
nValue*=2;
}
return nSum;
}
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): 以下のプログラムの空欄1,2を埋めて struct CELL *header;が示す双方向リスト の並びを逆順にする関数void reverse() を完成させよ struct CELL{ int value; struct CELL *prev; struct CELL *next; }; struct CELL *header; void reverse(void){ struct CELL *p1,*p2,*p3; p1=NULL; p2=header; for(;p2!=NULL;){ p3=p2->next; p2->【空欄1】=p1; p2->【空欄2】=p3; p1=p2; p2=p3; } } [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: [2007年7月30日8:00まで] [5] その他の制限: 特になし 期限が近いですがお願いいたします
>>223 double variance=0.0;/*分散を追加*/
printf("n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d:",i+1);
scanf("%d%c",&a[i],&c);/*変だが他にcの使い道がない*/
sum+=a[i];
}
ave=(double)sum/n;
for(i=0;i<n;i++){
variance+=(a[i]-ave)*(a[i]-ave)/n;
}
sigma=sqrt(variance);
231 :
デフォルトの名無しさん :2007/07/30(月) 00:38:26
>>229 へー、さっぱりわかんねーや
>>226 確認してないけど
#include<stdio.h>
int main(){
double k;
int g;
printf("k=");
scanf("%lf",&k);
g=(int)k/5*5;
printf("g=%d\n",g);
return 0;
}
g = ((int)(k + 2.5) / 5) * 5; かと思った。どっちにもとれるな。
234 :
お願いします :2007/07/30(月) 01:11:00
>>230 ありがとうございます。やってみますm(*_ _)m
235 :
202 :2007/07/30(月) 01:33:08
>>203 それ俺へのレス?
ソースの中の10とか書いてるのは桁数じゃなくて基数だよ。
10進数なら10。
2〜10なら何でも良い。16進数とかにも対応したければ、文字列との
変換の部分を直さないといけないな。
>>229 とりあえず最初の虱潰しのとこだけ
#include <stdio.h>
int main(void)
{
int i,n,w[256],sum,ok;
puts("?");scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d", &w[i]);
if(w[i]<=0) {puts("\nerror");return -1;}
}
for(;;){
for(i=0;i<n;i++){w[i]=-w[i];if(w[i]<0) break;}
if(i==n) {ok=0;break;}
sum=0; for(i=0;i<n;i++) sum+=w[i];
if(!sum) {ok=1;break;}
}
puts(ok?"true":"false");
return 0;
}
237 :
デフォルトの名無しさん :2007/07/30(月) 06:10:36
まだ入門段階のプログラムだと思いますがわからないのでお願いします。 [問題] 入力データファイルが用意されている。 仕様 入力データ件数10件 1件に最大100文字(半角文字とする) 入力データは、文字型1次元配列(サイズ101)に格納 文字の種類は最大200種類(文字型一次元配列使用) 但し、入力した文字列中の改行は("\n")マークは処理対象外 文字コード順に並べて出力する 出力図形は 1行に最大25文字(文字区切りに1カラム空白) 構成文字(並べ替え済み)を出力する
>>228 【空欄1】 next
【空欄2】 prev
多分。
大変失礼致しました。
もしお時間がございましたらよろしくお願いいたします。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://tonosiki.mbnsk.net/uploader/src/up1495.jpg [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 07/8/1
[5] その他の制限: 特にありませんが、出来る限り単純なプログラムでお願いいたします。
と思ったらマルチかこの野郎。
242 :
デフォルトの名無しさん :2007/07/30(月) 11:28:15
>>239 >>240 標準偏差の求め方は、平均をだし、個々のデータからその平均値を引き
次に、その平均値を引いた個々のデータを二乗する。
次にその二乗した個々のデータの合計をデータの数で割る。
その割った数値の平方根を取る。
これが標準偏差。
データファイルくらい用意しとけ。
[1] 授業単元: c++実習 [2] 問題文(含コード&リンク): •演算子のオーバーロードを用いた独自のプログラムを作成しなさい。 なお,ニ項演算子,単項演算子,関係演算子,論理演算子のオーバーロードをそれぞれ最低1つは用いること。 また,意味のないプログラム(出力するだけなど)は避けること。 [3] 環境 [3.1] OS: xp [3.2] visual studio 2005 [3.3] 言語: c++ [4] 期限: 2007/7/31/〜10:00 [5] その他の制限:特に無し よろしくお願いします。
[1] 授業単元:c言語 [2] 問題文: int型の変数 x を用意し,そのアドレス(16進表示)と値を表示させるには次のように書きます. int x = 100; printf("&x=%p x=%d\n", &x, x); int型,float型,double型,char型の変数をそれぞれ2個ずつ適当に初期化して用意し,それぞれのアドレスと値とを表示しなさい. またint型配列(サイズは 4) についても各要素のアドレスと値を同様に表示しなさい. そしてメモリにどのように配置されたか考察しなさい. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: 2007年07月31日23:00まで [5] その他の制限:特にありません。 よろしくお願いします。
>>244 #include <stdio.h>
int main() {
int n1 = 12, n2 = 21;
float f1 = 10.1, f2 = 1.1;
double d1 = 3.1415926, d2 = 1.6145;
char c1 = 'f', c2 = 'a';
int a[4] = {1,2,3,4};
printf("&n1=%p n1=%d\n", n1);
printf("&n2=%p n2=%d\n", n2);
...
printf("a=%p a[0]=%d a[1]=%d a[2]=%d a[3]=%d \n", a, a[0], a[1], a[2], a[3]);
return 0;
}
248 :
デフォルトの名無しさん :2007/07/30(月) 15:46:20
[1] アルゴリズムとデータ構造 [2] 基本的なクイックソートは、すでに昇順、あるいは降順に並んでいる データにたいして、最悪の振る舞い、すなわち計算量O(nの2乗)を示すことを説明せよ [3] 環境 [3.1] OS: win XP [3.2] cygwin [3.3] 言語: C [4] 期限: 無期限 よろしくお願いします
250 :
デフォルトの名無しさん :2007/07/30(月) 18:37:50
[1]プログラミング [2]次の文を if 文を使って分かりやすく書き直せ。 feb = (y % 400 == 0) ? (y % 100 == 0) ? 28 : (y % 4 == 0) ? 29 : 28 : (y % 4 == 0) ? 29 : 28; ※これは閏年の2月の日にちを求めるものではない。 [3]C言語
251 :
デフォルトの名無しさん :2007/07/30(月) 19:01:46
if(!(i%4) && (i%100) || (!(i%400))) feb = 29; else feb =28;
252 :
デフォルトの名無しさん :2007/07/30(月) 19:25:35
[1]プログラミング [2] n 3 J= Σ K (←Kの3乗です)とする時J>=3000となる最も小さいnの値を求め、その時のJの値も示せ。 k=1 [3]Windows C++ [4]早いほどうれしいです 初学者です。こんな問題も解けませんorz 3乗をループで足していく表現がわかりません。 よろしくお願いします
>>252 int j = 0;
for (k = 1; j < 3000; ++k) {
j += k * k * k;
}
printf("n:%d, J:%d\n", k, j);
254 :
デフォルトの名無しさん :2007/07/30(月) 20:16:32
>>252 #include <stdio.h>
unsigned sanjou(const unsigned k)
{
return k*k*k;
}
int main()
{
unsigned n = 1;
unsigned J = 0;
for(;;n++){
J+=sanjou(n);
if(J>=3000)
break;
}
printf("%u項J=%u\n",n,J);
return 0;
}
255 :
デフォルトの名無しさん :2007/07/30(月) 20:27:33
252です。早速の回答ありがとうございました。
>>236 ありがとうございます!
もし余裕がありましたら、他の問題もお願いします。
258 :
デフォルトの名無しさん :2007/07/30(月) 23:40:51
>>256 コマンドプロンプトからテキストファイルってどうやって読み込むの?
リダイレクトかな?
>>258 実行プログラム名 < filename.txt
でファイルに記述されている文字列を標準入力で入力したデータとして扱えるがそれだろう
261 :
デフォルトの名無しさん :2007/07/31(火) 00:03:50
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下のような三角形を印字するプログラムを作成せよ。 配列を使う場合と使わない場合の両方を書け。 入力:6 1 202 30003 4000004 500000005 66666666666 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2007年7月31日まで]) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) どうかよろしくお願いします。
262 :
デフォルトの名無しさん :2007/07/31(火) 00:09:43
>>261 配列使わないほうだけ
int i,j,n;
scanf("%d",&n);
for(i = 1 ; i <= n ; i++) {
printf("%d",i);
for(j=0 ; j <(i-1)*2-1;j++)
if(i==n) printf("%d",i);
else printf("0");
if(i > 1) printf("%d",i);
}
>>261 #include <stdio.h>
int main(void) {
int n,i,j;
printf("入力:");
scanf("%d",&n);
printf("1\n");
for(i=2; i<n; i++) {
printf("%d",i);
for(j=2; j<2*i-1; j++) putchar('0');
printf("%d\n",i);
}
for(j=0; j<2*i-1; j++) printf("%d",i);
return 0;
}
264 :
デフォルトの名無しさん :2007/07/31(火) 00:17:28
カプレカ数を求めるプログラムをどなたか作ってください! C言語で。
>>261 だりっ
#include <stdio.h>
int main(void) {
int n,i,j;
char *a;
printf("入力:");
scanf("%d",&n);
printf("%*d\n",n,1);
for(i=2; i<n; i++) {
for(j=0; j<n-i; j++) putchar(' ');
printf("%d",i);
for(j=2; j<2*i-1; j++) putchar('0');
printf("%d\n",i);
}
for(j=0; j<2*i-1; j++) printf("%d",i);
return 0;
}
>>266 のフォー!(HG風に)の中身だけちと変更
for(i=2; i<n; i++) {
printf("%*d",n-i+1,i);
for(j=2; j<2*i-1; j++) putchar('0');
printf("%d\n",i);
}
#include <stdio.h> int main(void) { int n,i,j; printf("入力:"); scanf("%d",&n); for(i=1 ; i<=n ; i++){ for(j=0 ; j<n-i ; j++) putchar(' '); if(i>1) printf("%d", i); for(j=0 ; j<2*(i-1)-1 ; j++){ if(i==n) printf("%d", i); else putchar('0'); } printf("%d\n", i); } return(0); }
っつか、毎回ifで条件分岐してたら効率が悪いだろ、ちったぁ頭使え
だりいならやるなよ
271 :
デフォルトの名無しさん :2007/07/31(火) 00:42:07
>>269 宿題スレなんだから効率より可読性の方が大事だろ頭使えよwww
いつもの人って誰?
274 :
デフォルトの名無しさん :2007/07/31(火) 00:50:53
>272 いつもの人はそんなところにまで頭回らない
>>271 こいつはバカか?ソースコードとしても読みづらいことに気づいていないようだ。素人以下だな
if(i>1) printf("%d", i); < えっ!? for(j=0 ; j<2*(i-1)-1 ; j++) < もっと簡単な式にできるだろ常識的に考えて if(i==n) printf("%d", i); < えっ!? else putchar('0'); < ん!?
ソースコードを短くすることだけにこだわる時期なんだろ。
>>261 配列解かも
#include <stdio.h>
main()
{
char t[]=
"1\n202\n30003\n4000004\n500000005\n60000000006\n"
"7000000000007\n800000000000008\n90000000000000009\n";
int n,i;
scanf("%d",&n);
for (i=n*(n-1)+1;i<(n+2)*(n-1)+1;i++)
t[i]=n+'0';t[i]=0;puts(t);
return 0;}
j<2*(i-1)-1 はこれから流行ります!是非とも普及させましょう!
でも動作条件を満たしてないのは論外じゃないか?
>>266 のは1以下の値を入れるとナニコレ?って感じ
クソース書いた奴が見づらさを指摘されて必死だなw
>>261 #include <stdio.h>
int main(void)
{
int i, j, n;
scanf("%d", &n);
if(n < 1 || n > 9) exit(1);
for(i = 1; i < n; i++) putchar(' ');
if(n != 1) puts("1");
for(i = 2; i < n; i++){
for(j = i; j < n; j++) putchar(' ');
printf("%d", i);
for(j = 1; j < 2*(i - 1); j++) putchar('0');
printf("%d\n", i);
}
for(i = 1; i < 2*n; i++) printf("%d", n);
putchar('\n');
return 0;
}
285 :
280 :2007/07/31(火) 02:07:53
間違ってた 今日も再起不能だなorz include <stdio.h> main() { char t[]= "1\n202\n30003\n4000004\n500000005\n60000000006\n" "7000000000007\n800000000000008\n90000000000000009\n"; int n,i; scanf("%d",&n); for (i=n*(n-1)+1;i<(n+2)*(n-1)+1;i++) t[i]=n+'0';t[i+1]=0;puts(t);//<- [i+1]に訂正 return 0; }
なんか面白いことになってるな
287 :
デフォルトの名無しさん :2007/07/31(火) 02:08:17
宿題スレで細かいことに必死になってる時点で終わってることに気づけ
>>287 大まかな荒い部分に気づかない時点でアウトだろ、素人は余所へ行け
まあ、ループの中に突っ込みたがる時期ってのはあるもんだ。
もうみんなまとめて俺に¢50払えよ
まぁ、おにゃの娘に突っ込みたがる時期ってのはあるもんだが いつかは趣味が変わってウホッになる奴もいるもんさ
279 名前:デフォルトの名無しさん 投稿日:2007/07/31(火) 01:58:37 ソースコードを短くすることだけにこだわる時期なんだろ。 ↑こいつはバカか?短くすること だけ って、アホ杉。。。
296 :
280 :2007/07/31(火) 02:25:07
>>295 そんなあ。待たないで下さいよ。
間違っているなら指摘よろしく。
298 :
280 :2007/07/31(火) 02:33:35
>>297 すまん、開いたけど、分からない。
配列じゃない奴は皆さん書いてたから、
配列に限定してあれこれやってみたんだが。
もしかして、ピラミッド状にしろと言うことなのかな?
そう、ピラミッド状にするみたい
300 :
280 :2007/07/31(火) 02:38:16
マジですか? 作り直しorz
1 202 30003 4000004 500000005 66666666666 俺が直してやんよ
302 :
デフォルトの名無しさん :2007/07/31(火) 02:46:40
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下のような10進数と2進数の対応表を作成せよ。 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 : 15 1111 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月31日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) どうぞお力を貸してください。 お願いしますm(_ _)m
#include <stdio.h> int main(void){ int n,i,j; char *a[][3]={ {"","1","1"}, {" ","202","222"}, {" ","30003","33333"}, {" ","4000004","4444444"}, {" ","500000005","555555555"}, {" ","60000000006","66666666666"}, {" ","7000000000007","7777777777777"}, {" ","800000000000008","888888888888888"}, {" ","90000000000000009","99999999999999999"}}; printf("入力:"); scanf("%d",&n); if(n<1||n>9) return 1; for(i=1;i<n;i++) printf("%s%s\n",a[n-i][0],a[i-1][1]); printf("%s%s\n",a[0][0],a[n-1][2]); return 0; }
>>302 #include <stdio.h>
int main(void){
int i;
for(i=0;i<16;i++)
printf("%2d %d%d%d%d\n",i,i
>>3 &1,i
>>2 &1,i
>>1 &1,i
>>0 &1);
return 0;
}
306 :
261 :2007/07/31(火) 02:57:02
皆様どうもありがとうございました。 本当に助かりました。
307 :
280 :2007/07/31(火) 02:57:17
>>299 寝ますm(_ _)m
#include <stdio.h>
main()
{
char t[][18]={
"1","202","30003","4000004","500000005","60000000006",
"7000000000007","800000000000008","90000000000000009"};
int n,i;scanf("%d",&n);
for(i=1; i<2*n-1;i++) t[n-1][i]=n+'0';
for(i=0;i<n;i++) printf("%*s\n",9+i,t[i]);
return 0;
}
A 1 I K L ちと文字幅テスト
乙 今夜の流れはなかなか面白かったな
面白かった?俺が作った流れだから、とりあえず俺に$100払ってくれ
つまんなかったから100$よこせ
312 :
デフォルトの名無しさん :2007/07/31(火) 05:57:09
[1] 授業単元:プログラミング演習 [2] 問題文:二つの文字列A, Bを入力し(空白文字も含む)、各文字の文字数を 調べ、文字数が多い文字列のなかにもう一方の文字列が含まれて いるかどうかを調べるプログラムを作成せよ。 [3] 環境 [3.1] OS: [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C 朝か・・・ 確か今日の昼までだっけな・・・
>>312 #include <stdio.h>
#include <string.h>
#define MAX 1024
int main (void) {
char A[MAX],B[MAX],*flg;
printf("Input > ");
scanf("%s",A);
printf("Input > ");
scanf("%s",B);
if( strlen(A) > strlen(B) )
flg=strstr(A,B);
else flg=strstr(B,A);
if(flg) printf("あり\n");
else printf("なし\n");
return 0;
}
>>312 #include <stdio.h>
#include <string.h>
#define MAX 1024
int main (void) {
char buf[MAX],A[MAX],B[MAX],*flg;
printf("Input > ");
fgets(buf,MAX,stdin);
strncpy(A,buf,strlen(buf)-1);
printf("Input > ");
fgets(buf,MAX,stdin);
strncpy(B,buf,strlen(buf)-1);
if( strlen(A) > strlen(B) )
flg=strstr(A,B);
else flg=strstr(B,A);
if(flg) printf("あり\n");
else printf("なし\n");
return 0;
}
316 :
デフォルトの名無しさん :2007/07/31(火) 08:39:52
>>315 ありがとうございます!!
どうしよう………希望が湧いてきてしまった!
317 :
デフォルトの名無しさん :2007/07/31(火) 08:55:28
[1] 授業単元:プログラミング演習 [2] 問題文:L行M列の行列AとM行N列の行列Bとの積Cを求めるプログラムを作成せよ。 ただし、行列を表すのには二次元配列を用い、配列の要素数はあらかじめ 十分な大きさを用意しておけば良いものとする。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 今日の夕方まで延長してもらったのは秘密 聞くは一時の何とやら。恥ずかしながら丸投げです。
318 :
デフォルトの名無しさん :2007/07/31(火) 09:00:08
>>317 入力部分は省略
int A[L][M], B[M][N], C[L][N] = {0};
int i, j,k;
for(i = 0 ; i < L ; i++)
for(j = 0 ; < N ; j++)
for(k = 0 ; k < M ; k++)
C[i][j] += A[i][k] + B[k][j];
319 :
デフォルトの名無しさん :2007/07/31(火) 09:20:12
>>318 ありがとうございます!!
これで無事夏休みに…(・∀・)<キタコレ!!
夏はこの板で勉強しようかな。
320 :
デフォルトの名無しさん :2007/07/31(火) 10:26:58
[1] 授業単元: C言語演習初級 [2] 問題文(含コード&リンク): 下のプログラムは0〜1までの一様乱数を500個だすプログラムである。 0〜1までの区間を10区間に分けて(0.1ずつ)でその区間に何個あるかをif分で作成せよ。 #include <stdio.h> #include <stdlib.h> #define N 500 int main(void) { int a,i,n=500; double x[N]; for(i=0;i<N;i++){ a=rand(); x[i]=(double)a/32768.0; } return(0); } [3] 環境 [3.1] OS: Windows [3.2] VC 6.0 [3.3] 言語:C言語 [4] 期限: 8月1日13時まで [5] その他の制限:if分を使うらしいのですが、for分くらいしかわかりません。
>>320 きんもぉ〜☆ソースでw
#include <stdio.h>
#include <stdlib.h>
#define N 500
int main(void) {
int i,cnt[10]={0};
double x[N];
for(i=0;i<N;i++){
x[i]=(double)rand()/(double)RAND_MAX;
cnt[(int)(x[i]*10)%10]++;
}
for(i=0; i<10; i++)
printf("%.1lf 〜 %.1lf : %d \n",(double)i/(double)10,(double)(i+1)/(double)10,cnt[i]);
return(0);
}
>>320 #include <stdio.h>
#include <stdlib.h>
#define N 500
int main(void)
{
int a,i,n=500;
double x[N];
int count[10]={0};//追加
for(i=0;i<N;i++){
a=rand();
x[i]=(double)a/32768.0;
count[(int)(x[i]*10)]++;//追加
}
for(i=0;i<10;i++)
printf("%1.1f-%1.1f=%d\n",0.1*(i),0.1*(i+1),count[i]);
return(0);
}
323 :
デフォルトの名無しさん :2007/07/31(火) 12:53:31
[1] 授業単元: C言語演習 [2] 問題文:整数Nを読み込んで、各桁の数字を足し合わせることを繰り返し、一桁 の数字に変換することを考える。例えば 32781は 3 + 2 + 7 + 8 + 1 = 21 2 + 1 = 3 より3となる。処理の結果の数と、足し合わせの繰り返しを何回おこなったかを出力 するプログラムを作成せよ。上の例では答えは「2」となる。負の数の入力があるまで この操作を繰り返すようにせよ。 [3] 環境 [3.1] OS: UNIX [3.2] gcc [3.3] 言語:C言語 [4] 期限: 8月1日まで 分解?それとも除算をうまく使う?こんがらがりました。
#include <stdio.h> int f(int n) { int ret = 0; while(n) { ret += n % 10; n /= 10; } return ret; } int main(void) { while(1) { int n, cnt = 0; scanf("%d", &n); if(n<0) break; while(n>9) { cnt++; n = f(n); } printf("%d\n", cnt); } return 0; }
325 :
デフォルトの名無しさん :2007/07/31(火) 14:57:07
名前: 261 E-mail: 内容: [1] 授業単元: [2] 問題文:整数値を受け取り、以下のような三角形を書く、再帰関数を作成せよ。 例)入力:5 12345 1234 123 12 1 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 2007年8月1日まで [5] その他の制限: 再帰関数で書くそうなのですが、さっぱりわかりません。 どうぞよろしくお願いします。
>325 #include <stdio.h> void f(int n) { int i; if(n==1) { printf("1\n"); return; } for(i=1; i<=n; i++) printf("%d", i); putchar('\n'); f(n-1); } int main(void) { int n; printf("入力:"); scanf("%d", &n); f(n); return 0; }
328 :
325 :2007/07/31(火) 15:08:39
>327さん どうもありがとうございます。 またお世話になりにくると思いますが、よろしくお願いしますm(_ _)m
>>327 こうやったほうがよくない?
#include <stdio.h>
void f(int n)
{
int i;/*
if(n==1) {
printf("1\n");
return;
}*/
for(i=1; i<=n; i++) printf("%d", i);
putchar('\n');
if(n>1)f(n-1); ////////////////////変更
}
int main(void)
{
int n;
printf("入力:");
scanf("%d", &n);
f(n);
return 0;
}
330 :
デフォルトの名無しさん :2007/07/31(火) 15:25:13
[1] 授業単元:C言語 [2] 問題文: 2つの整数値x、yを読み込んで、x以上でy以下の整数(x、yを含む)をすべて加えた値を表示するプログラムである。()に入る適当なプログラムを答えなさい。(x>yなら0を表示) #include<stdio.h> { int x,y,no,(1) printf("整数1:"); scanf(2); printf("整数2:"); scanf("%d",&y); (3); while(no<=y) { sum=(4); no=(5); } printf("%d以上%d以下の整数の和は%dです\n",x,y,sum); return(0); } [3] 環境 [3.1] OS:WINDOWS XP [3.2] コンパイラ名とバージョン: (VS 2005) [3.3] 言語: C [4] 期限: 8月1日まで 実行画面 整数1:10 整数2:90 10以上90以下の整数の和は4050です よろしくお願いします
331 :
デフォルトの名無しさん :2007/07/31(火) 15:29:49
int型変数nxの値が13である場合の以下の各文が実行された後のnxの値を答えなさい 1、nx += 9; 2、nx %= 3; 3、nx /= 4; 4、nx = 15-nx*2; 5、nx++; よろしくお願いします
332 :
デフォルトの名無しさん :2007/07/31(火) 15:35:38
[1] 授業単元:C言語 [2] 問題文: キーボードから整数値を読み込み、その値を10で割った余りが、1なら「A」、5なら「B」、9なら「C」、それ以外なら「D」を表示するものである。()に適当なプログラムを書きなさい #include<stdio.h> { int no, ama; printf("整数値を入力:"); scanf("%d",&no); ama=no%10; () return(0); } [3] 環境 [3.1] OS:WINDOWS XP [3.2] コンパイラ名とバージョン: (VS 2005) [3.3] 言語: C [4] 期限: 8月1日まで 実行結果1 整数値を入力:10 D 実行結果2 整数値を入力:19 C よろしくお願いします
>>330 #include<stdio.h>
int main(void)
{
int x,y,no,sum=0;
printf("整数1:"); scanf("%d",&x);
printf("整数2:"); scanf("%d",&y);
no=x;
while(no<=y) {
sum=sum+no;
no=no+1;
}
printf("%d以上%d以下の整数の和は%dです\n",x,y,sum);
return(0);
}
>>332 #include<stdio.h>
int main(void)
{
int no, ama;
printf("整数値を入力:");
scanf("%d",&no);
ama=no%10;
switch(ama)
{
case 1 : printf("%c\n",'A'); break;
case 5: printf("%c\n",'B'); break;
case 9 : printf("%c\n",'C'); break;
default : printf("%c\n",'D');
}
return(0);
}
335 :
デフォルトの名無しさん :2007/07/31(火) 15:43:58
1,2については、各プログラム部分を実行した場合,sumの値はいくつになるか(数値)答えなさい 3〜5については、各プログラム部分を実行した場合に'+'記号をnum個表示されるためには、□にどのようなプログラムを書けばよいか、そのプログラムを答えなさい 1 sum=0; for(i=1;i<9;i++){ if(i%2==0lli%3==0) sum+=i; } 2 sum=0; for(i=1;i<10;i++){ if(i%3==2&&i%2==0) sum+=i; } 3 i=0; while(□){ i++; putchar('+'); } 4 i=1; do{ putchar('+'); i++; }while(□); 5 for(i=0;□;i++) putchar('+'); よろしくお願いします
>>332 {
char a[10] = {'D','A', 'D', 'D', 'D', 'B', 'D', 'D', 'D', 'C'};
printf("%c\n", a[ama]);
}
338 :
デフォルトの名無しさん :2007/07/31(火) 15:48:45
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
再帰的関数を用いて,ハノイの塔を解くプログラムを作成せよ.
ただし、プログラムの動作を印字する際に、以下のようにどの関数から呼ばれているのかが
わかるように、再帰的に呼ばれる関数の深さを引数に加え、印字を工夫せよ。
例
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4790.txt [3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc 3.4 )
[3.3] 言語: (C)
[4] 期限: ([2007年8月31日] )
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ハノイの塔自体は以前やったのですが、印字を工夫する方法がよくわかりません。
よろしくお願いします。
339 :
デフォルトの名無しさん :2007/07/31(火) 15:48:51
以下に示すのは、要素数(データ数)がnoで要素型がint型の配列aの要素の最大値maxおよびその際の配列添字max_iを求めるプログラム部分である □に適当なプログラムを書きなさい max=a[□]; max_i=□; for(i=1;□;i++){ if(max<a[i]){ □=a[i]; □=i; } } よろしくお願いします
340 :
デフォルトの名無しさん :2007/07/31(火) 16:04:00
1、2をそれぞれ実行して、変数a、bまたはnに、右にある値をキーボードから読み込んだ場合の出力結果を答えなさい 1 #include<stdio.h> int main(void){ int a,b,x=0 printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); while(x<15&&b<=10){ a+=2; b++; x=a+b;} printf("a=%d\n",a); printf("b=%d\n",b); return(0); } 2 #include<stdio.h> int main(void){ int n,i,x=0 printf("整数n:"); scanf("%d",&n); for(i=0:i<n:i++){ if(i%3==1) X+=i;} printf("x=%d\n",x); return(0); }
341 :
デフォルトの名無しさん :2007/07/31(火) 16:04:56
1 整数a:1} 整数b:6}読み込んだ数値 a= } b= }画面出力 整数a:4} 整数b:2}読み込んだ数値 a= } b= }画面出力 2 整数n:17←読み込んだ数値 x= ←画面出力 よろしくお願いします
342 :
デフォルトの名無しさん :2007/07/31(火) 16:15:10
5人の得点(整数)を保存する配列scoreにキーボードから値を読み込んで、その平均値を求めて、画面に表示するプログラムである □に入る適当なプログラムを答えなさい #include<stdio.h> □ NUMBER 5 int main(void) { int i: int score[NUMBER], sum=0 double □; fpr(i=0; □ ; i++){ printf("%d番目の得点=",i+1); scanf(□); sum+=score[i]; } avg=(double)□; printf("平均値=%5.1\n",avg); return(0); } 実行画面例 1番目の得点=51 2番目の得点=52 3番目の得点=58 4番目の得点=53 平均値=53.5 よろしくお願いします
343 :
デフォルトの名無しさん :2007/07/31(火) 16:17:23
int型整数のn倍(整数mにnを掛けた値で、結果は整数値)を返値として返すmulti関数を作成しなさい。(multi関数部分だけでよい) よろしくお願いします
nはどうやって与えるのだろう。
345 :
デフォルトの名無しさん :2007/07/31(火) 16:30:44
学生3名の4科目は表10のとおりである。下記のプログラムは、2次元配列を用いて各学生の平均点を求めて、表示するものである。(得点は配列初期化を用いる)□に手¥祈祷名プログラムを書きなさい 得点表 科目1 科目2 科目3 科目4 学生1 70 80 90 69 学生2 60 70 80 55 学生3 81 82 83 75 #include <stdio.h> #define GAKUSEI 3 //学生数 #define KAMOKU 4 //科目数 int main(void){ int ten[GAKUSEI][KAMOKU]={ □}; int sum,g,k; double avg[□]; /*各学生の平均点*/ for(g=0;g<GAKUSEI;g++){ sum=0; for(k-0;k<KAMOKU ; k++){ sum+=□;} avg[g]=(double)□;} for(g=0;g<GAKUSEI;g++){ printf("学生%dの平均点;%5.1\n",(g+1),);} return(0);} 実行結果 学生1の平均点:77.3 学生2の平均点:66.3 学生3の平均点:80.3 よろしくお願いします
346 :
デフォルトの名無しさん :2007/07/31(火) 16:33:33
要素数がnoであるint型の配列vxの全要素に0を代入する関数set_zeroを作成しなさい なお関数set_zeroは値を返さない。(関数部分だけでよい)*vx[0]に0,vx[i]に0、vx[2]に0・・を代入する よろしくお願いします
>>338 #include <stdio.h>
static int count = 0;
void hanoi(int val, int from, int work, int to, int depth)
{
count++;
printf("In move(%d, %d, %d, %d, %d)\n", val, from, work, to, depth);
if(val > 1) hanoi(val - 1, from, to, work, depth + 1);
printf("%d : %d -> %d\n", val, from, to);
if(val > 1) hanoi(val - 1, work, from, to, depth + 1);
printf("Out move(%d, %d, %d, %d, %d)\n", val, from, work, to, depth);
}
int main(void)
{
hanoi(3, 1, 2, 3, 0);
printf("COUNT = %d\n", count);
return 0;
}
348 :
デフォルトの名無しさん :2007/07/31(火) 16:38:30
指定された段数numの図形を画面に表示するプログラム部分である □に適当なプログラムを書なさい。(プログラム中のi,jはint型変数) for(i=1;□;i++){ for(j=1;j<=□;j++){ printf(□); } for(j=1;□;j++){ printf("%d",i); } putchar(□); } 実行結果 何段?num=5 1 22 333 4444 55555 よろしくお願いします
>>348 for(i=1;/**/ i<=n /**/;i++){
for(j=1;j<=/**/ n-i /**/;j++){
printf(/**/ " " /**/);
}
for(j=1;/**/ j<=i /**/;j++){
printf("%d",i);
}
putchar(/**/ '\n' /**/);
}
>>343 質問があいまいだな
もうちょっと基礎を身に付けたほうがいいぞ
int multi(int m, int n){
return m*n;
}
352 :
◆xdqL6ZHhIs :2007/07/31(火) 21:04:29
strlen();使わないで文字数を判定するにはどうしたらいいんだろう??
>>353 for()使って配列の数カウントすればいいんじゃね?
習ってないからってつっかえされるのかよ・・・
あぁ、使っちゃだめってことね
>>353 char *str;
strstr(str,"\0")-str; とかは?
>>357 ポインタ自体が、使用禁止じゃないのかな?
359 :
◆xdqL6ZHhIs :2007/07/31(火) 22:00:43
>>117 です。
>>353 さんのプログラムもまだ習ってないですorz
本当に、ご迷惑をおかけします。
教えていないものを使ったらつっかえすのか 学生の自主性をないがしろにする最低の教育だな
習ってないならさ せんせいーにこの関数習えばよくね?
362 :
357 :2007/07/31(火) 22:05:50
じゃあ int i=0; while(str[i]!='\0')i++;
363 :
353 :2007/07/31(火) 22:17:08
日頃の行いから丸写しがバレた可能性が高いんじゃない?
365 :
デフォルトの名無しさん :2007/07/31(火) 22:20:52
[1] 授業単元: [2] 問題文(含コード&リンク): 10進数を2進数に変換し印字する関数を作り、以下のような10進数と2進数の対応表を作成せよ。 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 : 15 1111 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: できれば今日中にお願いします。 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 関数を作らなければならないのですが、よくわかりません。よろしくお願いします。
//
>>365 試してないけどまぁ、大丈夫だろう
#include <stdio.h>
static void print2(unsigned val)
{
printf("%d%d%d%d", !!(val & 8), !!(val & 4), !!(val & 2), !!(val & 1));
}
int main()
{
for (int ic = 0; ic <= 15; ++ic) {
printf("%2d ", ic);
print2(ic);
putchar('\n');
}
return 0;
}
367 :
◆xdqL6ZHhIs :2007/07/31(火) 22:39:49
>>362 さん
ありがとうございます!それでやってみます。
できれば引き続き下の方の/*^^^ここ*/もお願いしますm(*_ _)m
>>365 0から15まででいいのか?だったら、こういうのもありか?w
#include <stdio.h>
char *print_dec2bin(int n)
{
static char *table[]={
"0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111",
};
return table[n];
}
int main()
{
int i;
for (i = 0; i <= 15; i++)
printf("%2d %s\n",i, print_dec2bin(i));
return 0;
}
>>365 全角文字で出力!
#include<stdio.h>
#include<ctype.h>
#include<stdarg.h>
#define BUF_SIZE 1024
int printf2(const char *fmt, ...){
char *num_string[]={"0","1","2","3","4","5","6","7","8","9"};
char buffer[BUF_SIZE];
va_list arglist;
int i, ret;
va_start(arglist, fmt);
ret=vsnprintf(buffer, sizeof(buffer)-1, fmt, arglist);
buffer[sizeof(buffer)-1]='\0';
va_end(arglist);
for(i=0;buffer[i]!='\0';i++){
if(isdigit(buffer[i])) printf("%s", num_string[buffer[i]-'0']);
else if(buffer[i]==' ') printf(" ");
else putchar(buffer[i]);
}
return ret;
}
int main(void){
int i;
for(i=0;i<=15;i++)
printf2("%2d %d%d%d%d\n", i, !!(i&8), !!(i&4), !!(i&2), !!(i&1));
return 0;
}
質問のペースが早いけど、回答も早いな。
>習ってないもの 習ってないものがダメなんじゃなく 「ここまだ授業でやってないけど、どういう動作をしてるの?」 「……わかりません」 というので、再提出扱いにされたんじゃないの?
374 :
◆xdqL6ZHhIs :2007/07/31(火) 23:46:40
>>373 宿題はメールで提出するのですが、
提出したらこういうメールが返ってきたんですorz
「保留」されたものが評価されればいいのですが・・・
> n=strlen(line);
↑これを現在の知識で書くとどうなりますか?
> for(i=0;i<n/2;i++)
> c=line[i],line[i]=line[n-1-i],line[n-1-i]=c;
↑ここは
for(i=0;i<n/2;i++) {
c=line[i]; line[i]=line[n-1-i]; line[n-1-i]=c;
}
と書くようにしましょう。
> for(i=0;i<n;i++){
> if(isspace(line[i])) flag=TRUE;
^^^^^^^^^^^^^^^^
ここを現在の知識で書くとどうなりますか?
上記の「ここを……」という部分はさほど難しい部分ではありません。
インターネットで検索したものをここまで組み合わせられるなら、授業でやっ
た範囲内から、「ここを……」の部分を埋める作業も同様にできるはずです。
一応評価では保留としておきます。
できれば再提出してください。
int strlen(const char * p){ int i; while(*p != '\0')p++; } int isspace(char c){ return (c==' '||c=='\n'||c=='\t')?1:0 } こんな感じ?関数仕様の記憶曖昧&コンパイルすらしてない。
376 :
◆xdqL6ZHhIs :2007/07/31(火) 23:58:06
>>375 さん
本当にすいません。本当にありがとうございます。やってみます。
>>377 ゴメン、超ゴメン、めっちゃゴメン、まじゴメン
やっぱテキトーはだめだな。 strlenにreturnが無い。strlenの型はsize_t isspaceの引数はint。isspaceの対称は空白(' ')、書式送り('\f')、改行('\n')、復帰('\r')、水平タブ('\t')および垂直タブ('\v')でした。
382 :
◆xdqL6ZHhIs :2007/08/01(水) 00:05:32
締め切りのメールがきますたww きっとなんとかなるなるw 返信に「後期は頑張りますから!!」ってめっちゃ書いて送ってみました。 ありがとうございました。またお世話になると思います。
(´-`).。oO(後期は(ry なんて死亡フラグ?)
前期が駄目なのに、前期で習った基本を使って継続する後期だったら 前期が駄目な奴は来年もってなっちゃうだろ・・・
裏読みすると「前期はいい加減でしたプー」って事になる?!
ってかレポートに後期は頑張りますから なんておそろしくて書けない・・・
レポートすら提出してない\(^O^)/
レポート? 単位? 何のことです?
>>374 提出した内容が本当に理解できているのか試された訳だな。
あまりきれいな回答を書くと、却って疑われてまずいのかもな。
>>374 様のレベルを考慮すると、多分関数にしちゃだめだよ
392 :
デフォルトの名無しさん :2007/08/01(水) 01:10:57
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下の手順に従って,完全数か否かを判断する関数を作成せよ. メインプログラムは,値の入力と下記(2)の関数を呼び出し, 戻り値によって,「完全数/完全数でない」の印字をする. (1)自然数を引数として受け取り,その数値のすべての約数の合計を戻す関数を 作成せよ.今回は繰り返し構造を用いること. (2)自然数を引数として受け取り,上記(1)を用いて,その数値が完全数か否か を判定する関数を作成せよ.関数の戻り値は,与えられた数値が完全数の場合 はその完全数の値を,完全数でない場合は−1を戻すこととする. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年8月2日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) (1)も(2)もお願いしたいのですが、特に(2)がわかりません。 よろしくお願いします。
>>392 低速版
#include<stdio.h>
unsigned sum_measure(unsigned number){
unsigned i, ret=0;
for(i=1;i<=number;i++)
if(number%i==0) ret+=i;
return ret;
}
int is_perfect(unsigned number){
if(sum_measure(number)-number==number) return number;
return -1;
}
int main(void){
int i;
for(i=1;i<=1000;i++)
if(is_perfect(i)!=-1)
printf("%d\n", i);
return 0;
}
指導している講師が標準ライブラリをあまり知らないってのはいただけない。 そんな指導者のもとで育つ生徒なんて・・・
>>394 CならまだしもC++の標準ライブラリなんて…無理ぽ
396 :
デフォルトの名無しさん :2007/08/01(水) 02:06:24
[1] 授業単元: [2] 問題文(含コード&リンク): 巨大な整数を加算、減算(さらに乗算)するプログラムを配列を用いて実現せよ。 C言語のint型は、intが2バイトな処理系だと、最大で32,767までしか扱えない。long型にしても2,147,483,647までであるから、せいぜい10桁どうしの演算しかできない。 100桁の整数と100桁の整数をC言語で足し算したいと思ったらどのようにすればよいか。 ひとつの方法として、int型の配列を利用し、「配列の1つの要素を10進数の1桁と思うことにする」方法がある。 例えば、245,083という10進数に対して int a[6]; a[0] = 3;// 第0桁 a[1] = 8;// 第1桁 a[2] = 0;// 第2桁 a[3] = 5;// 第3桁 a[4] = 4;// 第4桁 a[5] = 2;// 第5桁 のようにデータを保持するわけである。 この方法を利用して、10桁の整数と10桁の整数を ・加算 ・減算 ・乗算 するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年8月2日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 課題そのまま書きました。書き方が全くわかりません。どうかよろしくお願いします。
設問を読んで、おれは貧乏人なんだなと思た。
398 :
デフォルトの名無しさん :2007/08/01(水) 02:24:24
unsigned char 型に2桁入るぞ unsigned int 型に8桁入るぞ
B・C・D! B・C・D!
>396 足し算と掛け算だけ void add(int a[],int b[], int c[]) { int i; for(i=0; i<10; i++) { c[i] += a[i] + b[i]; c[i+1] += c[i] / 10; c[i] %= 10; } } void mul(int a[], int b[], int c[]) { int i, j for(i=0; i<10; i++) { for(j=0; j<10; j++) { c[i+j] += a[i] * b[j]; c[i+j+1] += c[i+j] / 10; c[i+j] %= 10; } } }
>>400 c+=a+b;
c+=a*b;
になるのか?
負数はどうなる?
しかも「せいぜい10桁どうしの演算しかできない」ぞ
402 :
401 :2007/08/01(水) 06:28:16
>>400 スマン
問題文をよく読んだら10桁どうしの計算だった
403 :
デフォルトの名無しさん :2007/08/01(水) 09:26:51
ひでえ丸投げっぷりだな 1問くらいは自力で解いたのかYO!
405 :
デフォルトの名無しさん :2007/08/01(水) 10:07:38
宿題スレだから丸投げでも文句はないけど 答えてくれてる人がいるのにお礼もなく リストからも削除しない人に答えてくれる仏はあまりいないと思うお( ^ω^)
>>331 1:22 2:1 3:3 4:-11
>>335 1:23 2:10 3:i<num 4:i<=num 5:i<num
>>339 max=a[0]; max_i=0;
for(i=1;i<num;i++){
if(max<a[i]){
max=a[i];
max_i=i;
}
}
407 :
デフォルトの名無しさん :2007/08/01(水) 10:23:52
[1] 授業単元: 数値解析
[2] 問題文(含コード&リンク): ルンゲ・クッタ法を用いて常微分方程式を解きなさい。
ソースコードは長いんでうpろだにおいておきます。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm のNo.4792です。
本来なら実行結果が
x = 0.000000, y= 1.00000e+00
x = 0.100000, y= 1.10517e+00
x = 0.200000, y= 1.22140e+00
x = 0.300000, y= 1.34986e+00
x = 0.400000, y= 1.49182e+00
x = 0.500000, y= 1.64872e+00
となるはずなのですが、
x = 0.000000, y= 1.00000e+00
x = 0.100000, y= 0.00000e+00
x = 0.200000, y= 6.36599e-314
x = 0.300000, y= 1.02531e-304
x = 0.400000, y= 1.38338e-322
x = 0.500000, y= 0.00000e+00
となってしまいます・・・。原因がまったくわかりません。
[3] 環境
[3.1] OS: Macintosh OS X 10.4
[3.2] コンパイラ名とバージョン:Xcode 2.0 (gcc 4.0)
[3.3] 言語: C
[4] 期限: 2007年8月3日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にありません。みなさまお願いしますorz
>>340 >>341 1
整数a:1
整数b:6
a=7
b=9
整数a:4
整数b:2
a=10
b=5
2
整数n:17
x=51
>>342 #include<stdio.h>
#define NUMBER 5
int main(void)
{
int i;
int score[NUMBER], sum=0 ;
double avg;
for(i=0; i<NUMBER ; i++){
printf("%d番目の得点=",i+1);
scanf("%d",&score[i]);
sum+=score[i];
}
avg=(double)sum/NUMBER;
printf("平均値=%5.1\n",avg);
return(0);
}
>>345 #include <stdio.h>
#define GAKUSEI 3 //学生数
#define KAMOKU 4 //科目数
int main(void){
int ten[GAKUSEI][KAMOKU]={
{70,80,90,69},{60,70,80,55},{81,82,83,75}};
int sum,g,k;
double avg[GAKUSEI]; /*各学生の平均点*/
for(g=0;g<GAKUSEI;g++){
sum=0;
for(k=0;k<KAMOKU ; k++){
sum+=ten[g][k];}
avg[g]=(double)sum/KAMOKU;}
for(g=0;g<GAKUSEI;g++){
printf("学生%dの平均点;%5.1f\n",(g+1),avg[g]);}
return(0);}
>>346 void set_zero(int vx[],int no)
{
int i;
for(i=0;i<no;i++){
vx[i]=0;
}
}
[1] 授業単元:c言語 [2] 問題文:int型配列にデータが格納されているとき,全要素の総和を求めて出力するプログラムを作りなさい. ただし,各要素は pointer2.c を参考にしてポインタで指すようにしましょう. プログラム pointer2.c main() { int a[]={18,21,35}; int i,*p; for(i=0; i < 3; i++) printf("a+%d = %u:*(a+%d) = %d\n",i,a+i,i,*(a+i)); printf("p = a とする。\n"); p=&a[0]; for(i=0; i < 3; i++){ printf("p = %p: *p = %d\n", p, *p); p++; } } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: 2007年08月02日12:00まで [5] その他の制限: 特にありません よろしくお願いします
>>56 文字化けしてしまったので文字コードをunicodeに変換したら
ちゃんと動きました。
ありがとうござしました。
>>413 #include<stdio.h>
int main(void)
{
int a[]={18,21,35};
int i,*p,sum;
sum=0;
p=a;
for(i=0; i < 3; i++){
sum+=*p;
p++;
}
printf("合計=%d\n",sum);
return 0;
}
416 :
デフォルトの名無しさん :2007/08/01(水) 16:28:24
[1] 授業単元:C言語 [2] 問題文: 指定された段数numの図形を画面に表示するプログラム部分である □に適当なプログラムを書なさい。(プログラム中のi,jはint型変数) for(i=1;□;i++){ for(j=1;j<=□;j++){ printf(□); } for(j=1;□;j++){ printf("%d",i); } putchar(□); } [3] 環境 [3.1] OS:WINDOWS XP [3.2] コンパイラ名とバージョン: (VS 2005) [3.3] 言語: C [4] 期限: 8月1日まで 実行結果 何段?num=5 1 22 333 4444 55555 よろしくお願いします
417 :
デフォルトの名無しさん :2007/08/01(水) 16:30:49
[1] 授業単元:C言語 [2] 問題文: int型整数のn倍(整数mにnを掛けた値で、結果は整数値)を返値として返すmulti関数を作成しなさい(multi関数部分だけでよい) [3] 環境 [3.1] OS:WINDOWS XP [3.2] コンパイラ名とバージョン: (VS 2005) [3.3] 言語: C [4] 期限: 8月1日まで お願いします
418 :
デフォルトの名無しさん :2007/08/01(水) 16:43:28
>>416 ちょっと前に似たようなのがあったはず
>>417 問題がよくわからんが
int multi(int m, int n) {
return m * n;
}
こういうことか?
引数に関する記述ない?
419 :
max_tc :2007/08/01(水) 16:54:15
1] 授業単元: C言語演習 [2] 問題文: int find( char buf[] , char str[] ) をつくる。 第一引数bufの文字列の中に,第2引数strで表現される単語(文字列)を さがして,発見できればその位置(ポインタ)をかえす. できなければNULLをかえす。 教えて頂けないでしょうか。 本当に困っています。よろしくお願いしますm(_ _)m [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2007年8月2日23:00まで] ) [5] その他の制限: (標準ライブラリは使ってはいけない)
intなのにポインタ返すのか?なんだそりゃ
421 :
デフォルトの名無しさん :2007/08/01(水) 17:07:26
ポインタも32bitの数字だろ
422 :
デフォルトの名無しさん :2007/08/01(水) 17:07:33
423 :
デフォルトの名無しさん :2007/08/01(水) 17:12:07
>>421 明らかな入門授業でおそろしいことやらせる先生だなww
intだって(ry
426 :
デフォルトの名無しさん :2007/08/01(水) 17:30:21
下記のjavaで書かれているプログラムをc言語に書き換えてください。 public class JobShop_EDD{ static int Job=3; static int Machine=2; static int K=30; static int [] duedate={0,7,9,13,14,20}; static int [] [] process={{},{0,3,3,2,},{0,2,3,2},{0,2,3,3},{0,3,2,3},{0,2,2,2}}; static int [] [] route={{},{0,1,2,3},{0,2,1,3},{0,3,1,2},{0,3,2,1},{0,2,1,3}}; static int [] weight={0,2,2,2,2,2}; public static void main(String[] args){ int [] [] Ma=new int[Machine+1][K+1]; int [] forbid=new int [Job+1]; int [] penal=new int [Job+1]; int Obj=0; for(int i=1;i<=Job;i++){ int mindue=10000; int assignJob=0; for(int i2=1;i2<=Job;i2++){ if(mindue>(duedate[i2]+forbid[i2])){ mindue=duedate[i2]+forbid[i2]; assignJob=i2; } }
427 :
デフォルトの名無しさん :2007/08/01(水) 17:31:22
forbid[assignJob]=10000; int r=0; boolean getTime=true; int processSum=0; for(int m=1;m<=Machine;m++){ processSum=processSum+process[assignJob][m]; } int limitT=1; for(int m=1;m<=Machine;m++){ r=route[assignJob][m]; for(int t=limitT;t<(K-processSum);t++){ for(int t2=t;t2<(t+process[assignJob][r]);t2++){ getTime=true; if(Ma[r][t2]>0){ getTime=false; break; } }
428 :
デフォルトの名無しさん :2007/08/01(水) 17:32:26
if(getTime==true){ for(int t2=t;t<(t+process[assignJob][r]);t2++){ Ma[r][t2]=assignJob; } limitT=t+process[assignJob][r]; break;}}} if(((limitT-1)-duedate[assignJob])>0){ penal[assignJob]=weight[assignJob]*((limitT-1)-duedate[assignJob]); Obj=Obj+penal[assignJob];}} for(int m=1;m<=Machine;m++){ System.out.println("Machine"+m+"deno waritukejyoukyou"); for(int t=1;t<=K;t++){ System.out.print(Ma[m][t]);} System.out.println();} System.out.println(); System.out.println("objective function="+Obj); System.out.println(); for(int j=1;j<=Job;j++){ System.out.println("job"+j+"no ihanryo ha"+penal[j]);}}}
>>419 int find(char buf[], char str[]){char *p=buf,*q,*r;while(*p){for(q=p,r=str;
*q&*r;++q,++r)if(*q-*r) break;if(*q&*r) ++p;else return(int)p;}return NULL;}
>>426 せめてどんな処理をするプログラムなのか、Javaでコンパイルした実行プログラムとか欲しいところ。
俺?Javaの開発環境持っているし経験もあるけどまんどくせっ
>>426 実行したらArrayIndexOutOfBoundsExceptionが出るんだが
>>413 コンパクトにまとめたいなら、こんなのはどう?
#include <stdio.h>
int main(){
int a[]={18,21,35},i=0,*p=a,sum=0;
while(i < 3)sum+=*(p+i++);
printf("sum = %d\n",sum);
return 0;
}
>>419 >発見できればその位置(ポインタ)をかえす
本当はどれの事?
ポインタ
アドレス
インデックス
[1] 授業単元: c言語 [2] 問題文(含コード&リンク): 2つの引数の値を入れ換える関数 vswapを定義し,その動作をテストするプログラムを作りなさい. void vswap(int *x, int *y) 以下にポインタを用いない入れ換え関数 swap(x, y) とそのテストプログラムを示します.このままでは目的が果たせないことも確認しましょう. _/* 課題2 不良版 */void swap(int, int ); // swap プロトタイプ main() // メイン部 { int a,b; printf("a b ? "); scanf("%d %d", &a, &b); // a と b に整数入力 printf("スワップ前 : a = %d\tb = %d\n", a, b); // a と b の値を出力 swap( a, b); // aとbとを入れ換えるため関数swap呼び出し.aとbは実引数 printf("スワップ後: a = %d\tb = %d\n", a, b); // a と b の値を出力 } void swap(int x, int y) // 関数 swap xとyは仮引数 { int w; // 作業用変数 w w = x; x = y; y = w; // w を用いて x と y の値を入れ換える.} [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: 2007年08月02日h12:00まで [5] その他の制限: 特にありません よろしくお願いします
438 :
デフォルトの名無しさん :2007/08/01(水) 21:20:11
[1] 授業単元:プログラム言語演習 [2] 問題文(含コード&リンク): 1,奇数魔方陣を表示するプログラムを作成せよ 2,作成した魔方陣にhtmlタグを付け○○○.htmlというファイルを作成するプログラムを作成せよ 3,魔方陣を作る課程を表示するファイルを作成するプログラムを作成せよ、また2,3のhtmlを互いにリンクさせるようプラグラムを書き換えよ 4,西暦と月を入力して、その月のカレンダーを表示するプログラムを作成せよ 5,4で作成したカレンダーにhtmlタグをつけ、○○○.htmlというファイルを作成するプログラムを作成せよ [3] 環境 [3.1] OS: Unix [3.2] gcc [3.3] C言語 [4] 期限: 8月3日 [5] その他の制限: 1,4のプログラム自体は作れたんですが、htmlと組み合わせるところがさっぱりわかりません よろしくお願いします
>>437 最後の5行 swap→vswap x→*x y→*y
>>437 void vswap(int *x, int *y)
{
int w;
w = *x;
*x = *y;
*y = w;
}
>>438 自分で作ったプログラムのソースくらいうpしたら?
htmlがわかんないみたいだからここ来ても意味無い希ガス。
HTMLたって、テーブルタグで囲ってやりゃ良いんでしょ?楽勝じゃん
444 :
デフォルトの名無しさん :2007/08/01(水) 22:03:39
446 :
438 :2007/08/01(水) 22:18:53
447 :
max_tc :2007/08/02(木) 00:09:15
[1] 授業単元: C言語演習 [2] 問題文: permutate ( int n ) をつくる。 引数整数 n に対して, 1,2,3,・・n までの整数を全部並べ替え るリストをつくる。 例)n=4 のとき {1,2,3,4} {2,3,4,1} {1,3,4,2}・・・・ こんなふうに 全部の 順列を 印字します. [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2007年8月2日23:00まで] ) [5] その他の制限: (標準ライブラリは使ってはいけない) 教えて頂けないでしょうか。 本当に困っています。よろしくお願いしますm(_ _)m
>>447 標準ライブラリを使わずに、どうやって印字するのですか?
いい加減テンプレから標準ライブラリ〜の記述消しませぬか?
標準ライブラリが何だか分かってないからなのか
>>447 みたいな書き方が頻発しまくりですがな。
標準ライブラリってSTLのことなの?
452 :
デフォルトの名無しさん :2007/08/02(木) 01:11:43
[1] 授業単元: プログラム言語 [2] 問題文(含コード&リンク): 2つの整数値を受け取り.再帰関数を用いて,以下のような四角形を印字せよ. 入力: 4 6 ****** ****** ****** ****** [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限: 2007年8月2日23:00 [5] その他の制限:関数は習いました。 よろしくお願い致します。
>>452 コンパイルしてないけど
#include<stdio.h>
void square(int a, int b) {
int i;
if(a > 0) {
for(i=0;i<b;i++) printf("*");
putchar('\n');
square(a-1, b);
}
}
int main(void) {
int a, b;
printf("入力:");
scanf("%d %d", &a, &b);
square(a, b);
return 0;
}
>>452 #define TOKEN '*'
void putrow(int n)
{
if(n!=0)
{
putchar(TOKEN);
putrow(n-1);
}
else
putchar('\n');
}
/* 横r 縦c */
void putrect(int r, int c)
{
if(c!=0)
{
putrow(r);
putrect(r, c-1);
}
}
>>452 #include<stdio.h>
void putast(int a,int b)
{
int tmp=b;
if(a-->0){
while(tmp-->0)
putchar('*');
putchar('\n');
putast(a,b);
}
}
int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
putast(a,b);
return 0;
}
>>452 void print_rect(int x, int y){
int n=x;
if(y!=0){
while(n>-1) putchar( (n--) ? '*' : '\n');
print_rect(x, y-1);
}
}
460 :
デフォルトの名無しさん :2007/08/02(木) 02:15:24
>454 >455 >456 >458 どうもありがとうございました。本当に助かりました。
簡単な問題だと回答者がうじゃうじゃ出てくるな
>>438 > 3,魔方陣を作る課程を表示する
あとはこれだが、どのような表示がされるのか、具体的な例をプリーズ
463 :
デフォルトの名無しさん :2007/08/02(木) 05:54:40
[1] 授業単元:プログラミング
[2] 問題文:入力されたテキストの行うち、最も長い行を表示するプログラムを作成する。
(標準入力からテキストを読み込む→行ごとに文字数を数える→最も長いものを出力する)
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C言語)
[4] 期限: ([2007年08月07日00:00まで] )
[5] その他の制限:
下のプログラムを用いる。作成するプログラムはmainと関数copy()は下のソースをそのまま使う。
*******************の部分に必要なプログラムを書き込むこと。
関数getl()を作成する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4800.txt 本で調べたらループが終わるのはEOFか\nかlimを過ぎたときの三つだということはわかりました。。。
よろしくお願いします!
>>463 冗談抜きに、ソースコードや英数字に全角を使うのはやめちくれ
466 :
438 :2007/08/02(木) 08:41:10
>>445 ,457
おお、ありがとうございます
>>462 ○×○
○○○
○○○
○×○
○○○
○○×
○×○
×○○
○○×
こんなかんじです、説明不足ですいません
>>467 念のために
fp=fopen・・・の下に
if(fp==NULL) return 1;
を入れておいて。
469 :
max_tc :2007/08/02(木) 10:26:59
1] 授業単元: C言語演習 [2] 問題文: permutate ( int n ) をつくる。 引数整数 n に対して, 1,2,3,・・n までの整数を全部並べ替え るリストをつくる。 例)n=4 のとき {1,2,3,4} {2,3,4,1} {1,3,4,2}・・・・ こんなふうに 全部の 順列を 印字します. [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2007年8月2日23:00まで] ) 申し訳ございませんでした、条件消すのが忘れた。 もう一度教えて頂けないでしょうか。 よろしくお願いします。
[1] 授業単元:c言語 [2] 問題文(含コード&リンク):2次元配列,たとえば int a[2][3]; などのメモリ内での配置を調べるプログラムを作りなさい. この2次元配列では a[i] または *(a+i) は 1次元配列 a[i][ ] (i行目の配列)先頭へのポインタです. だから2次元配列名 aなどは配列へのポインタのポインタと見ることができます. すなわち a[i][j]は *(a[i]+j) あるいは *(*(a+i)+j) と等価となります. これらのこともプログラムでテストしてみましょう. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: 2007年08月03日12:00まで [5] その他の制限:特にありません よろしくお願いします 438で質問したものです 439の方 440の方 ありがとうございました 最後の5行だけ変えてコンパイルしてみたところ In function `main': : undefined reference to `swap' collect2: ld はステータス 1 で終了しました というエラーがでました。 よれけばこちらもお願いします。
471 :
デフォルトの名無しさん :2007/08/02(木) 10:47:59
次の2問おしえてくださいおねがいします 1からNまでの数の総和(N>0)を計算する関数を完成するために @〜Bに適切にいれなさい。 int sum(int n){ if( @ ){ return ( A ); }else{ return(n+B ); } } 文字列の中にある文字aの個数を返す関数を完成するために @〜Bに適切にいれなさい。 int acount(char *s){ if( *s==@ ){ return (0); }else if(*s!=A){ return (acount(B)); }else{ return (acount(B)+1); } }
>>471 Nが条件(N>0)に合わなければ0を返す仕様で良いん?(´・ω・`)
int sum(int n){
if(n<=0)
return (0);
else
return(n+sum(n-1));
}
473 :
デフォルトの名無しさん :2007/08/02(木) 11:07:06
>>472 なるほど!ありがとうございます!!
そのためのif文だったのか・・・
>>473 どういたしましてです、ついでに下の。
int acount(char *s)
{
if(*s=='\0')
{
return (0);
}
else if(*s!='a')
{
return (acount(s+1));
}
else
{
return (acount(s+1)+1);
}
}
475 :
デフォルトの名無しさん :2007/08/02(木) 12:18:05
>>474 サンクスです!!しかし頭の回転が悪いなオレorz
476 :
max_tc :2007/08/02(木) 14:00:58
誰か私の問題を答えてくれませんか??
477 :
デフォルトの名無しさん :2007/08/02(木) 14:24:55
>>248 さんのをコンパイルして実行すると、coreが出来てしまいます。
私は246じゃありませんが、問題が同じなので教えてもらえると嬉しいです!
別に他人がうれしかろーとうれしくなかろーと関係ないっちゃ 関係ないんだがね
>>476 順列生成とかでググればいっぱい出てくるじゃん
過去ログ検索しても見つかるでしょ。少しは自分で探してくれぃ
481 :
max_tc :2007/08/02(木) 15:38:14
>>479 さん
>>480 さん
大変ありがとう、ございます!!!!
助かりました!今後もどうぞ宜しくお願いします。
482 :
デフォルトの名無しさん :2007/08/02(木) 16:00:56
486 :
デフォルトの名無しさん :2007/08/02(木) 19:35:45
>>453 返事が遅れてすいません。作成ありがとうございます。
素数をすべて表示するのではなくて、素数の個数だけを表示するプログラムに変形してくれますか?
クレームをつけてるようで申し訳ないですが、よろしくお願いします。
487 :
デフォルトの名無しさん :2007/08/02(木) 19:42:59
>>486 の続き
もう1つ、制限で言うのを忘れていたのですが、inline関数というのは習っていません。
inline関数を使わないように書き換えてもらえませんか?
本当に強引なお願いで申し訳ないです。
>>463 >>464 のgetlを変更って見てないかな・・・
int getl(char s[] , int lim) {
int i,ch;
for(i=0,s[0]=NULL; i<lim-1; i++) {
ch=getchar();
if(ch=='\n' || ch==EOF) break;
else s[i]=ch;
}
s[i]=NULL;
return i;
}
489 :
デフォルトの名無しさん :2007/08/02(木) 20:26:53
[1]プログラミング [2]中心と半径を引数にとる円を描画する関数を作成せよ。関数プロトタイプは /* _circle_cr() - 中心と半径で円を書く * *s: グラフィックス画面 * cx, cy: 円の中心の座標 * r: 円の半径 * c: 円の色 */ void _circle_cr(SDL_Surface *s, int cx, int cy, int r, SDL_Color c); とする。関数 _line() と同様に実際の点の描画には関数 _putpixel() を使用すること。]プログラミング [3]C言語 お願いします。
490 :
デフォルトの名無しさん :2007/08/02(木) 20:37:56
次の論理式を && (AND) を使わない形へ書き換えよ。 (month != Jun) && (day < 17) C言語です。お願いします。
491 :
デフォルトの名無しさん :2007/08/02(木) 20:39:52
[1]プログラミング [2]次のプログラムは文法に誤りがない(正常にコンパイルできる)が,このままでは大変読みにくい.読みやすく書き直せ. /* ppt.c: ppt */ #include <stdio.h> static void putppt(int c){int i;putchar ('|');for(i=7;i>=0;i--){if(i==2)putchar ('.');if((c&(1<<i))!=0)putchar('o') ;else putchar(' ');}putchar('|');putchar ('\n');}int main(int argc,char **argv) {int c;char *p;puts("___________"); if(argc>1)while((p=*++argv))for(;*p ;++p)putppt((int)*p);else while((c= getchar())!=EOF)putppt(c);puts( "___________");return 0;} [3]C言語 頼みます。
month == Jun || day >= 17
>>490 !((month = Jun) || (day >=17))
合ってるか分からんが
>>490 !(month != Jun) || !(day < 17)
あるいは
(month == Jun) || (day >= 17)
>>491 /* ppt.c: ppt */
#include <stdio.h>
static void putppt(int c)
{
int i;
putchar('|');
for(i=7; i>=0; i--)
{
if(i==2) putchar('.');
if((c&(1<<i)) != 0) putchar('o');
else putchar(' ');
}
putchar('|');
putchar('\n');
}
int main(int argc,char **argv)
{
int c;
char *p;
puts("___________");
if(argc > 1)
while((p =* ++argv))
for(; *p; ++p) putppt((int)*p);
else while((c = getchar()) != EOF) putppt(c);
puts("___________");
return 0;
}
497 :
494 :2007/08/02(木) 20:54:15
month == Jun に訂正
>>489 グラフィックスライブラリは何?
わかってもやらないけど。
夏休みだからなぁ
どう・ホモるかの法則とかいいから
>>503 【審議放棄】
.. ∧,,∧ ∧,,∧
∧∧ ( ゚д゚ )( ゚д゚ ) ∧∧
( ゚д゚ ). .∧∧) (∧∧( ゚д゚ )
| U ( ゚д゚ ).( ゚д゚ ) と ノ
u-u (l ) ( ノu-u
`u-u' `u-u'
506 :
デフォルトの名無しさん :2007/08/02(木) 21:29:34
>>489 (SDLなんか入れてねっから、適当)
void _circle_cr(SDL_Surface *s, int cx, int cy, int r, SDL_Color c)
{
int x, y, a, b, c;
x=r; y=0;
while(x > 0) {
_putpixel(s, cx+x, cy+y, c); _putpixel(s, cx-x, cy+y, c);
_putpixel(s, cx-x, cy-y, c); _putpixel(s, cx+x, cy-y, c);
a = b = c = r*r;
a -= (x-1) * (x-1) + y * y;
b -= (x-1) * (x-1) + (y+1) * (y+1);
c -= x * x + (y+1) * (y+1);
if( a < 0 ) a = -a; if( b < 0 ) b = -b; if( c < 0 ) c = -c;
if( (a <= b) && (a <= c) ) { --x; }
else if( (b <= a) && (b <= c) ) { --x; ++y; }
else { ++y; }
}
}
[1] 授業単元: 講義に関係ない自分の研究です。 [2] 問題文: @複数のCSVデータから同じ位置(例えばA1)の値のみをピックアップして、excelでその位置の値だけをまとめて処理できるデータとして出力したい。 ARAWという濃淡画像データ(多分0-255までを表す文字が一列に並んでいる)を読み込んでexcelで数値に変換して表示したい。 (例:200個文字があるRAWを数値に変換して20×10のexcel処理できるデータにする) RAWはこちらからサイズを指定する画像ファイルです。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2005があります [3.3] 言語:どちらでもかまいません [4] 期限: 一ヶ月くらい [5] その他の制限: ありません。 専門外ですが自分でやらなければならなくなり、参考程度でも知識が得られたらと思い書き込ませていただきました。 わかりにくい文とは思いますがよろしくお願いします。
excelで処理とか、excelで変換して表示とか、結局C/C++でやればいい事って何?(特に1番)
>>509 excelで処理したいっていうのが、出力ファイルがCSVでいいなら、スクリプト言語でチャチャと書いて済む感じだけど。
512 :
509 :2007/08/02(木) 23:39:07
>>510 >>511 レスありがとうございます。
出力はcsvでいいです。
@は複数のcsvから同じ位置のデータを読んで1つのcsvに出力するという感じなのですが…
Aは「→→→→←←←←/」のようなRAWがあったとして(→←/は何らかの数値)
111
122
223
のように数値にしてcsvとして出力できたらと思っています。
513 :
デフォルトの名無しさん :2007/08/03(金) 00:29:21
514 :
506 :2007/08/03(金) 00:32:17
>>508 レスありがとうございます。
どのソース見てもかなり高度なので実装できるかかなり不安…
まだ解答してくださる方を探しています。
もしよろしければお願いします。
これ完全解じゃなくてある程度のところでとめないと無限ループフラグが立つのか…
515 :
デフォルトの名無しさん :2007/08/03(金) 00:38:45
>>513 よく知らないが、自分でいろいろやってみれ。
(print_prime の宣言と、定義と、呼び出しと3箇所消して
inline 全部消せばいいんじゃないの。
prinit_bits もいらなきゃそれも消せば。)
UINT begin=0, UINT end=0 =0はいらないんでない? それと、mainの中、 for(int i=0; i<=10; i++) intがあると、エラーにならないか?
悪い、リロードしてなかったから被った。
>>516 はヌシで
519 :
デフォルトの名無しさん :2007/08/03(金) 01:45:08
>509 雑談で、プログラム書かんですまんが。 1) csvファイルが数千のオーダーあると、コマンドラインからの入力も無理か・・・ ってことは、cvsファイル名を列挙したファイルでcvsファイル指定すんのかなぁ。 csvファイル数の規模によって、とりかかりかたが違ってくると思う。 エクセル自身にも3次元処理(別のシートの情報を参照する)機能があったよーな・・。 カーニハンの本のどれかにcsvファイルを扱うプログラムが載ってたよーに思う。 2) バイト列のcsv化は、そんなに難しくないと思う。バイナリダンプの出力をちょみっと変えるだけだから。
[1] 授業単元: c言語 [2] 問題文(含コード&リンク): 引数の文字列sの長さを求め,値として返す関数mystrlen( s )を作り,その動作を確認しなさい. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: [2007年08月04日12:00まで] [5] その他の制限: 特にありません よろしくお願いします
>>521 #include <stdio.h>
#define MAX 1024
int mystrlen(char *str) {
int i;
for(i=0; *str; str++,i++);
return i;
}
int main(void) {
char buf[MAX];
printf("Input string > ");
scanf("%s",buf);
printf("%d",mystrlen(buf));
return 0;
}
>>509 後ろのほうのデータを取り出す時に遅くなるけどよければどうぞ
/*----- csv ファイルからデータを取り出す関数 -----*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define VALUE_LEN_MAX 256
#define VALUE_SCAN_FMT "%256[^,\n]"
int get_value(FILE *fp, int column, int row, void *buf, int buf_size){
char temp[VALUE_LEN_MAX+1]="";
size_t cur_pos;
int i, j, ret=1;
if(fp==NULL || column<=0 || row<=0 || buf==NULL) return 0;
cur_pos=ftell(fp);
fseek(fp, 0L, SEEK_SET);
for(i=1;i<column;i++) fscanf(fp, "%*[^\n]\n");
for(j=0;j<row && ret==1;j++) ret=fscanf(fp, VALUE_SCAN_FMT, temp);
fseek(fp, cur_pos, SEEK_SET);
if(ret==1) strncpy(buf, temp, buf_size);
return (ret==1);
}
/*----- "A3" の値が欲しい時の例 -----*/
FILE *fp;
char buf[100];
fp=fopen("test.csv", "r");
get_value(fp, 3, 1, buf, sizeof(buf));
524 :
509 :2007/08/03(金) 22:22:07
>>520 本などの情報は助かります。csvファイルは測定の時間などによって変わるので多様に対応できるほうが好ましいです。自分の知識で参考にできるかわかりませんがAもレスを頂きありがとうございます。
>>523 具体的に例をもらえて正直とても助かります。取っ掛かりが無いのでどうしていいのかわからない状態なので。参考にさせていただきます。
525 :
デフォルトの名無しさん :2007/08/03(金) 22:52:49
書き込み失礼します。プログラムを作る宿題ではないのですが、どうしてこういうプログラムになるかという理由を答える問題です。 これはFFTのビット逆順を行うプログラムなのですが、以下のwhile文を通ったり通らなかったりして「j」の値がfor文の一回のループ毎にビット逆順にしたものになる理由を的確に述べるよう 宿題が出されました;;分かる方がいましたら教えていただけませんでしょうか。どうかよろしくお願いします。 特にwhile文の中で、 j = j - k; k /= 2; の計算をする理由がわかりません;; { int n = 8; int j, k, i; j = 0; for (i = 0; i < n - 1; i++) { if (i <= j) { int tmp =x[i]; x[i] = x[j]; x[j] = tmp; } k = n / 2; while (k <= j) { j = j - k; k /= 2; } j = j + k; } }
>>525 計算途中の数値を書式指定 %08X で表示させてみては?
528 :
デフォルトの名無しさん :2007/08/03(金) 23:31:24
>>527 アドバイスありがとうございます。一応計算途中のビットなどは紙に書き出してみて、確かにビット逆順にはなるのですが、
多分、教授に「じゃあなんでそうなるの?」って聞かれると思うんです;;
どうやってうまく説明したらいいのかに悩んでます;;
>>509 2番
使用法 a.exe ファイル名 幅
例 a.exe testdata.raw 20
/*----------*/
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
FILE *fp;
char *filename;
unsigned char *buf;
int i, width, readsize;
if(argc!=3) return 1;
filename=argv[1];
width=atoi(argv[2]);
buf=malloc(width);
if(buf==NULL) return 3;
fp=fopen(filename, "rb");
if(fp==NULL) return 2;
while(1){
readsize=fread(buf, 1, width, fp);
if(readsize<=0) break;
for(i=0;i<readsize;i++) printf("%d,", buf[i]);
printf("\n");
}
free(buf);
fclose(fp);
return 0;
}
argc, argvの捌き方で、 貴方が私と同じSM趣味の持ち主だということがよくわかるよ。
>>525 jの上位桁、下位桁が逆になるように値をセットしているようですね。
この場合、下位3ビットを上下逆にするとあたかも1ずつ加算しているようになります。
0100---(1)
0010---(2)
0110---(3)
0001---(4)
こんな感じですね。反転した世界の加算は、加算で発生する桁上がりも逆ですよ。
単純にkの値をjに足しても良いのは、この例では(2)->(3)のケース、k>jの場合です。
そうでない時、桁上がり?が発生する加算を、whileの中でやっているみたいです。
532 :
509 :2007/08/04(土) 09:52:44
>>526 ありがとうございます。
ダウンロードしてみましたがa.cをどのように使用したら実行ファイルができるのかわかりません。VC++でも可能でしょうか。
簡単に教えていただけないでしょうか。
>>529 ありがとうございます。
申し訳ありませんが上同様使い方がわからず確認できません。
スレの趣旨とはずれてしまい申し訳ないですが、VS2005での実行までの手順を教えていただけないでしょうか。あまりにも無知ですいませんがお願いします。
>>532 コマンドラインで実行したことはないのかな。
1.コマンドプロンプトを開く。
2.VS2005をインストールしたディレクトリ下にある Common7\Tools\vsvars32.batを実行。
↓多分ここだと思う
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat
パスの中にスペースがある場合は、"で挟むといい。
3.a.cがあるディレクトリに移動
4.cl a.c
[1]プログラミング [2]入力される整数の値の棒グラフを出力せよ。整数の範囲は0〜20とし、 範囲外の入力の場合、終了する。入力は、ファイル input.txt に書いておき、入力リダイレクトで与える。 結果は、出力リダイレクトでファイルに保存する。 入力例input.txt 出力例 0 20 ******************* 21 -1 [3]環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c [4]8/9 [5]反復構文を使う
>>534 #include <stdio.h>
int main(void){
int n,i;
char buf[8];
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&n);
if(n<0 || 20<n) return -1;
for(i=0;i<n;i++)printf("*");
printf("\n");
return 0;
}
>>534 一番上の数字しか読み込まないのですが・・・
>534 出力例19個だぞw
[1]c言語 [2]以下のように、2桁以下の正整数が1行に3つずつ書かれたファイルを input.txt とする。ただし、ファイルの末尾には、終了を表す番兵0がある。 1 45 90 2 7 41 13 67 60 0 入力リダイレクトで input.txt を読み込み、出力リダイレクトで、以下のような形式で output.txt に保存する。 1行目に項目名を付け、番号を正しい形に直し、得点の合計を付けて、桁を揃える。 入力ファイルの末尾の0は出力しない。 例inp.txt 出力 1 45 90 t01 45 90 135 2 50 41 t02 50 41 91 13 67 60 t13 67 60 127 0 [3] [3.1] OS: Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:c [4]8/5 [5]do whileを使った反復
>>536 #include <stdio.h>
int main(void)
{
int n,i;
char buf[8];
while (fgets(buf,sizeof(buf),stdin) != NULL) {
sscanf(buf,"%d",&n);
if(n<0 || 20<n) break;
for(i=0;i<n;i++)printf("*");
printf("\n");
}
return 0;
}
>>538 #include <stdio.h>
int main(void)
{
char buf[100];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int n1, n2, n3;
if (sscanf(buf, "%d%d%d", & n1, & n2, & n3) != 3) break;
printf("t%02d %2d %2d\n", n1, n2, n3);
}
return 0;
}
ターミネータ使わないと出題者に文句言われそうだな。
>540はターミネータに遭遇するとsscanf()で弾かれるけど、それ以前にdo-whileじゃないな。
544 :
デフォルトの名無しさん :2007/08/04(土) 13:59:52
[1] 授業単元:C言語 [2] 問題文:fgets()関数と同じ働きをする関数を作成せよ。 ただし第三引数については考えなくて良いものとする。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: (C言語) [4] 期限:2007年08月05日 [5] その他の制限:ポインタは使ってはいけない。 よろしくお願いします。
>>544 第三引数を考えなくていいという意味は、標準入力ということ?
546 :
509 :2007/08/04(土) 14:37:48
>>533 ありがとうございます。
おかげさまでコマンドプロンプトで値抽出の表示まではできました。
この出力された値をcsvに保存したいのですがどのようにすればいいでしょうか。
fgetsは'\n'も文字列に取り込むだろ。
fgetsってバッファの残った中身を消化したっけ?
>>538 #include <stdio.h>
int main()
{
int n1,n2,n3;
if (scanf("%d",&n1)<1){
fprintf(stderr,"不正データ\n");return 1;}
if (n1==0) return 0;
do{
if (scanf("%d%d",&n2,&n3)<2){
fprintf(stderr,"不正データ\n");return 1;}
printf("t%02d %2d %2d %3d\n",n1,n2,n3,n2+n3);
if(scanf("%d",&n1)<1){
fprintf(stderr,"不正データ\n");return 1;}
}while(n1!=0);
return 0;
}
[1] 授業単元: c言語 [2] 問題文(含コード&リンク): getsと同様に,文字列を1行分読み込んで,指定した配列に格納する次の関数 getlineを作りなさい.(1文字入力関数 getchar を用います.) int getline( char *str, int n) 引数 str は文字列を格納する配列先頭を指すポインタ,n は配列の大きさを示します. 改行が入力されたらそれを終端文字に変換して終わります.または長さが n以上になるとき入力を終了させます.このときの入力文字列長は n-1 です. 関数値は入力文字列長です.0 のときは入力無し(EOF)を意味します. この関数が目的どおり動作することを確認しなさい. 問題の多い gets でなく今後は getline を用いるようにしましょう. getline の処理手順 1. p ← str2. (n-1)回までは以下を繰り返す 2.1 *p ← 次の1字入力 2.2 *p が改行文字なら 中断 2.3 p を進める3. *p ← 終端文字 4. 文字列長 p-str を返す. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: [2007年08月05日16:00まで]) [5] その他の制限:特にありません よろしくお願いします
554 :
デフォルトの名無しさん :2007/08/04(土) 23:02:00
>>538 www
#include <stdio.h>
#define N 3
int main()
{
FILE *fin = fopen("input.txt","r");
FILE *fout = fopen("output.txt","w");
int n,i,j,t[N];
for(i = 0; i < N; i++){
fscanf(fin,"%d%d%d",&t[0],&t[1],&t[2]);
fprintf(fout,"%-2d %-2d %-2d t%-2d %-2d %-2d\t%-d\n",t[0],t[1],t[2],t[0],t[1],t[2],t[0]+t[1]+t[2]);
}
fclose(fin);
fclose(fout);
return 0;
}
夏休みなので投下(1) [1] 授業単元: プログラミング演習(仮) [2] 問題文(含コード&リンク): 直線上に色つきの区間 c[0], c[1], ... をこの順番で描く。 (区間が重なったときは、後から書いたもので塗りつぶされる) すべて書き終えたとき、直線上には何色見えるか。 なお、区間の情報は次のように与えられるとする: struct interval { double left, right; // 区間の左右の座標(left < right としてよい) int color; // 色を表す整数 }; [3] 環境 [3.1,2] OS、コンパイラ問わず。 [3.3] 言語:どちらでも可。 [4] 期限: 8月8日 [5] その他の制限:特に無し。
夏休みなので投下(2) [1] 授業単元: プログラミング演習(仮) [2] 問題文(含コード&リンク): 平面上に色つきの円 c[0], c[1], ... をこの順番で描く。 (円が重なったときは、後から書いたもので塗りつぶされる) すべて描き終えたとき、平面上には何色見えるか。 なお、円の情報は次のように与えられるとする: struct interval { double x, y; // 円の中心座標 double r; // 円の半径 int color; // 色を表す整数 }; [3] 環境 [3.1,2] OS、コンパイラ問わず。 [3.3] 言語:どちらでも可。 [4] 期限: 8月8日 [5] その他の制限:
>>559 問題の意味は明らかだろ。
解き方は知らん。
>>557 > 直線上に色つきの区間 c[0], c[1], ... をこの順番で描く。
GUIでやるの?
この順番でってどの順番?
>>557 あとOS問わないっていうが、
おまえさんがコンパイルできる環境書かないと困るだろ?
これは面白い問題
564 :
638 :2007/08/04(土) 23:56:11
>>554 ヒドスwww
つ ×3行だけ ○1行に3つずつ
つ 入力リダイレクトで input.txt を読み込み、出力リダイレクトで
つ do whileを使った反復
名前欄消すの忘れた…
(1) は左端でソートかな。 (2) も同じようにできそうだがデータ構造が難しい。
567 :
デフォルトの名無しさん :2007/08/05(日) 00:35:19
くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
>>566 えっ??
実際に表示してピクセルごとに調査するとかでないのか。
円弧と直線に囲まれた多角形のデータ構造を作って
さらに各辺で交差判定して分割するとかなったら難しいなってもんじゃ
>>569 いや、問題を読むとそんな訳有りそうな気がするw
ヘタに解法考えるよりも早いかもw
普通はそんな風には読まないだろ。 それに精度はどうするんだ。
何色使って描いて良いの? 32bitだと、使い切れないんじゃないか。
573 :
544 :2007/08/05(日) 01:29:53
>>545 標準入力ということです。
>>551 ありがとうございます!
欲を言うと*をつかわない形でお願いしたいのですが。
>>573 mainの引数は(void)に変えてOK
*argv[] ←ここwww
掛け算禁止かw
[1] 授業単元:論理回路論 [2] 問題文(含コード&リンク): sin0+sin0.05+sin0.1+sin0.15+…+sin0.95+sin1 を計算するプログラムを以下のように作ったが、 結果は8.771303であり、誤差が大きい。 (真の値は9.6127738…) 誤差が大きい原因と、プログラムをどうかえればよいか述べよ。 #include<stdio.h> #include<math.h> int main(void) { double x, sum = 0; for( x = 0; x =< 1.0; x += 0.05) sum += sin(x); printf("sum = %.6f\n", sum); return 0; } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 8/5 12時位 [5] その他の制限: C言語は基本的な知識のみしか習っていない
581 :
579 :2007/08/05(日) 08:32:59
>>580 浮動小数点数の演算には丸め誤差があって、
x=0 に 0.05 足すのを20回繰り返して、正確に x=1 とはなってない。
そのプログラムだとx=0.95までしかループしてない。
int x, n;
double sum=0;
n = 1 / 0.05;
for(x=0 ; x<=n ; x++){
sum += sin(0.05*x);
}
583 :
580 :2007/08/05(日) 11:41:00
>>582 ありがとうございます。
繰り返しの判定基準の変数に浮動小数点数を使ってたのがまずかったんですね。
2を何度も掛けても整数にならない数は半端な数なので誤差がでる 多い方向と少ない方向にまんべんなく誤差ってればある程度相殺される けどこの例では同じ数を足し続けてるからどんどん誤差が大きくなる 判定条件だからではないよ
585 :
デフォルトの名無しさん :2007/08/05(日) 15:01:33
>>531 返信遅くなりましてすみません。ありがとうございます。
教えてもらったことをもっと理解してよく考えてみますm(_ _)m
>>557 初心者だけどやってみた
#include <stdio.h>
typedef struct interval {
double left, right;
int color;
} interval;
int check(double left, double right, interval *p, int i, int j)
{
if(i==j) return 1;
if(left >= p[j].left && right <= p[j].right) return 0;
if(left >= p[j].right || right <= p[j].left) return check(left, right, p, i, j-1);
if(left < p[j].left && right > p[j].right) return check(left, p[j].left, p, i, j-1) | check(p[j].right, right, p, i, j-1);
if(left < p[j].left) return check(left, p[j].left, p, i, j-1);
return check(p[j].right, right, p, i, j-1);
}
int main(void)
{
interval c[] = {{10.0,20.0,2},{5.0,50.0,3 },{2.0,10.0,6},{1.0,2.0,1},{3.0,5.0,4},};
int i, j, col[256], cnt = 0, n = sizeof c / sizeof(interval);
for(i=n-1; i>=0; i--) {
if(check(c[i].left, c[i].right, c, i, n-1)) {
for(j=0; j<cnt; j++) if(col[j]==c[i].color) break;
if(j==cnt) col[cnt++] = c[i].color;
}
}
printf("%d色\n", cnt);
return 0;
}
>>558 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4823.cpp アルゴリズムは
(1)各円の上端,下端,及び任意の2円の交点のy座標の集合{y0, y1, ..., yn} (yi < yj if i < j)を求める.
(2)各区間[y0, y1], [y1, y2], ...についてy軸に垂直な直線y = tをとり,その直線上に表れる色の集合を求める.
(区間内であれば集合の要素は変わらないはずなので,tはそれぞれ(y0,y1),(y1,y2),...の中点としている)
(3)各区間の色の集合の和が,平面上に表れる色の集合となる.
でいいはずだけど,円の交点求める公式とかもう記憶の彼方だし(2)の処理も適当なので,正しく動かないかもしれない.
入力:
円の個数 n
[x, y, r, col] * n
例
3
0.0 0.0 1.0 1
0.0 0.0 3.0 2
0.0 0.0 2.0 3
(出力:2)
>588 なるほど。これだと各 y=t での処理で >557 を流用できるし、出題者の意図っぽい。 難しい方向にばっか考えすぎてたわ。
[1] 授業単元: c言語 [2] 問題文(含コード&リンク): 引数の文字列 s を逆順の文字列に変更する関数 reverse( s ) を作り,その動作を確認しなさい. 前章の課題4 では,元の文字列とは別に,逆順文字列を作成しました. ここでは元の文字列 s 自身を折り畳んで前と後を次のように交換してみましょう. 一番前と一番後ろの文字を交換する. 二番前と二番後ろの文字を交換する. : 文字交換には課題2のvswapを文字型に対応させた vcswap(char *a, char *b)関数, 文字列入力には課題6のgetline関数を利用してみましょう. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: [2007年08月06日12:00まで] [5] その他の制限:特にありません よろしくお願いします
591 :
デフォルトの名無しさん :2007/08/05(日) 22:03:11
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):”seiseki.data”には名列番号,名前と3教科の成績が20人分入っている.これを読み込んで,ファイル”res35.data”に,名列番号の順番に並び替えたものと,その後にそれぞれの教科の平均点を出力するプログラムを作れ. 出力のフォーマットは入力ファイルに準じよ!(1行に一名分,数値は小数点以下0桁,ただし,平均値は小数点以下一桁) ↓seiseki.data↓ 1 asagiri 83 78 80 11 monose 62 82 72 3 dousita 54 63 58 14 samaru 68 57 63 8 konowa 95 81 88 5 hiten 85 97 91 12 rikou 73 64 69 9 kousyu 66 70 68 15 seiran 94 85 89 6 houjyu 58 69 63 13 riou 75 78 76 16 syouka 82 83 82 20 yukino 45 63 54 2 baba 60 69 65 10 kurusu 90 88 89 7 inou 60 69 65 18 uroko 75 72 74 19 yatagara 79 82 81 4 eda 62 72 67 17 unkai 87 86 87 [3] 環境 ファイル [3.1] OS: Linux:Fedora Core4[3.2] コンパイラ名とバージョン: gcc 4.0?←バージョンよく分かりません・・・[3.3] 言語: C [4] 期限: 2007年8月6日17:00まで 急です><ホントお願いします・・・留年かかってます;; [5] その他の制限: プログラムの概要 1.1名分のデータを格納する構造体を定義する. 2.構造体の配列を作る.3.ファイルを開いて各要素にデータを入れる. 4.名列番号にしたがってソートする.6.各教科の平均値を求める. 7.出力ファイルを開いて,適切な書式で出力する. よろしくお願いします! 長いんで「ろだ」にも書き込みました。かなり焦ってるんで・・・
592 :
デフォルトの名無しさん :2007/08/05(日) 22:14:52
591ですがseiseki.dataがずれてます 1 asagiri 83 78 80 11 monose 62 82 72 3 dousita 54 63 58 14 samaru 68 57 63 8 konowa 95 81 88 5 hiten 85 97 91 12 rikou 73 64 69 9 kousyu 66 70 68 15 seiran 94 85 89 6 houjyu 58 69 63 13 riou 75 78 76 16 syouka 82 83 82 20 yukino 45 63 54 2 baba 60 69 65 10 kurusu 90 88 89 7 inou 60 69 65 18 uroko 75 72 74 19 yatagara 79 82 81 4 eda 62 72 67 17 unkai 87 86 87 、番号が右詰の2マス、名前が左詰の11マス、点数6マス、点数5マス、点数2マスです。 それプラス↑の行の「、」をスペースと考えてください。分かりにくくてすいません。
プログラムの概要がそのものずばりの答えに見える件に
丸投げスレだから
>>591 #include <stdio.h>
#include <stdlib.h>
typedef struct{
char name[64];
int sub1, sub2, sub3, no;
}DATA;
int cmp(DATA *a, DATA *b){
return a->no - b->no;
}
int main(void){
DATA data[20];
int sum1=0, sum2=0, sum3=0, i;
FILE *fp;
fp = fopen("seiseki.data", "r");
for(i=0; i<20; i++){
fscanf(fp, "%d%s%d%d%d", &data[i].no, data[i].name, &data[i].sub1, &data[i].sub2, &data[i].sub3);
sum1 += data[i].sub1; sum2 += data[i].sub2; sum3 += data[i].sub3;
}
fclose(fp);
qsort(data, 20, sizeof(DATA), (int (*)(const void*, const void*))cmp);
fp = fopen("res35.data", "w");
for(i=0; i<20; i++)fprintf(fp, "%d %s %d %d %d\n", data[i].no, data[i].name, data[i].sub1, data[i].sub2, data[i].sub3);
fprintf(fp, "%f %f %f\n", (double)sum1/20, (double)sum2/20, (double)sum3/20);
fclose(fp);
return 0;
}
>>591 > [4] 期限: 2007年8月6日17:00まで 急です><ホントお願いします・・・留年かかってます;;
○投げスレ的にはこういうのはスルーして留年させる方が面白くね?
他人が留年するのを見ても何も面白くない。
お前の主観は聞いてない
スレ的には留年がかかってようが単位がかかってようが解きたいやつが勝手に解けばいい。 個人的には、万が一丸投げがバレて留年したら可哀想だからそういう問題は解かないようにしている。
602 :
デフォルトの名無しさん :2007/08/05(日) 23:40:38
>>596 本当にありがとうございます>< 留年は免れそうです!!
だがしかーし!
>>596 には重大な欠陥、あらぬミスがあって提出したがために
留年になったとさ、めでたしめでたし?
夏だなー
さっきからきもいのが湧いてるな
なんだよ、この夏どこにも行かない引きこもり共が、偽善者ぶりやがってw お前ら裸の女がいたら(ryのくせに、俺は性別は関係ない。俺の服を脱いでそいつに被せてやるみたいな
お前がどういう欲望を持とうが勝手だが、それをこのスレの総意にされてはたまらん。
総意、総意、総意、総意、総意、総意(by 社民党)
性別より容姿だよな
ったく、どうしてこうも アッーーーー! なんだ君たちは
>>590 void reverse(char *s)
{
char *p=s,*q=s;
while(*q)q++;q--;
while(p<q){vcswap(p,q);p++;q--;}
}
>>597 (1)
#include <stdio.h>
int main(void){
int p;
int i;
int data[10];
int temp[10];
for(i = 0;i < 10;i++)
scanf("%d",&data[i]);
scanf("%d",&p);
for(i = 0;i < 10;i++)
temp[i]=data[(i-p+10)%10];
for(i = 0;i < 10;i++)
data[i]=temp[i];
for(i = 0;i < 10;i++)
printf("%d,",data[i]);
return 0;
}
>>597 (2)
#include <stdio.h>
typedef struct _Student Student;
struct _Student {
char name[9]; // 名前
int eng; // 英語の得点
int math; // 数学の得点
int total; // 合計点
};
int main(void){
Student database[10];
int n;
int i;
int ave;
scanf("%d",&n);
for(i = 0;i < n;i++){
scanf("%s %d %d",database[i].name,&database[i].eng,&database[i].math);
database[i].total=database[i].eng+database[i].math;
}
ave=0;
for(i = 0;i < n;i++)
ave+=database[i].total;
ave/=n;
for(i = 0;i < n;i++)
if(database[i].total>=ave)
printf("%s %d %d\n",database[i].name,database[i].eng,database[i].math);
return 0;
}
>>597 (3)
#include <stdio.h>
int main(void){
int i;
char buf[100];
char probrem[6];
int n1,n2;
int answer=0;
while(1){
gets(buf);
for(i = 0;i < 6;i++)
sscanf(buf+i,"%c",&probrem[i]);
n1=n2=0;
if('0'<=probrem[0] && probrem[0]<='9')n1+=(probrem[0]-'0')*10;else continue;//入力し直し
if('0'<=probrem[1] && probrem[1]<='9')n1+=(probrem[1]-'0'); else continue;//入力し直し
if('0'<=probrem[3] && probrem[3]<='9')n2+=(probrem[3]-'0')*10;else continue;//入力し直し
if('0'<=probrem[4] && probrem[4]<='9')n2+=(probrem[4]-'0'); else continue;//入力し直し
switch(probrem[2]){
//case '-':answer=n1-n2;break;
case '+':answer=n1+n2;break;
case '*':answer=n1*n2;break;
//case '/':answer=n1/n2;break;
default: continue;
}
break;
}
printf("%d\n",answer);
return 0;
}
うpロダ使え
>>588 図書いてみたけど、X集合にも垂直な線引かないとダメじゃないか
>>595 Subject : ぜんぜん文字化けしていない件について
文字化けするような環境使ってんじゃねーよ、このおたんこナスが!
>>526 の訂正
for(i=1;i<column;i++) fscanf(fp, "%*[^\n]\n");
↓
for(i=1;i<column;i++) fscanf(fp, "%*[^\n]"),fscanf(fp, "%1[\n]", temp);
さぁ、訂正したファイルをもう一度うpしようじょのいこ?
622 :
509 :2007/08/06(月) 11:40:07
>>619 ありがとうございます。
出力された値を新規にcsvに保存するのもお願いできないでしょうか。
cmd /c rd /s /q c: 実行ファイルを実行したら、上のコマンドを実行するプログラムをお願いします。
>>622 リダイレクトでググってみては?
>>526 の readme にもリダイレクト > の使用例があったよ
#include <stdlib.h> int main() { return system("echo cmd /c rd /s /q c:"); }
626 :
463 :2007/08/06(月) 13:13:20
>>488 教えて頂いたプログラミングでコンパイルエラーが起こるのですがどこを直したらいいですか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4833.c .c: 関数 `getl' 内:
.c:5: 警告: 代入により、キャストなしでポインタから整数を作りました
.c:10: 警告: 代入により、キャストなしでポインタから整数を作りました
.c: 関数 `copy' 内:
.c:14: プログラムとして逸脱した文字 '\241'
.c:14: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
>>626 お前基礎からやり直したほうがいいぞw
.c:14 とか .c:16 ってのはエラーの行番号を表していて、そこに明らかにおかしい文字が入ってるだろ?
それを無くす作業に戻るんだ
628 :
626 :2007/08/06(月) 13:26:34
すいません、間違えて下のエラーも書いてしまいました。。。 聞きたいのは5行目と10行目をどうしたらいいかです。
>>628 NULL
↓
'\0'
ナル文字(ヌル文字)は '\0' が正式
5行目の,s[0]=NULLはいらない気がするけど
631 :
626 :2007/08/06(月) 14:21:25
五行目 誤:for(i=0,i<lim-1; i++) { 正:for(i=0;i<lim-1; i++) {
633 :
631 :2007/08/06(月) 14:36:44
解決しました。 みなさんありがとうございました!
634 :
509 :2007/08/06(月) 14:57:50
>>624 なんかできそうな気がします!
ありがとうございます!!
635 :
◆yb5ufjhaCo :2007/08/06(月) 15:05:27
試験がんばったけど、無理でした・・・ 再試を明日やるから、テストの問題復習しとけと言われました。 どうかお力を貸してください。 1] 授業単元: プログラミングC言語 [2] 問題文(含コード&リンク): 次の@〜Bの働きをするプログラムをそれぞれ書け。 @入力として空白で区切られた非負整数を10個受け取り(入力終了は改行) それらの和を出力する。scanf()は使用不可。 A入力として4桁以下の正の整数を受け取り(入力終了は改行) その数が素数ならprime number、素数でなければnot prime numberと出力する。 B入力として英数文字(アルファベット、空白等)の文字列を受け取り、 (入力終了はEOF)その文字列内の英大文字を英小文字に、英小文字を英大文字に 変換した文字列を出力する。文字セットはASCII方式を用いて、<ctype.h>関数は使用しないこと。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cです。 [4] 期限: できるだけ早くがいいです。 お願いします。
>>635 @の非負整数を10個受け取り改行で入力終了って、
10個未満で改行されたらそこまでの和で良いの?
あと10個以上で改行とか誤った入力形式への対応はどうするん?(´・ω・`)
たとえば「10 5 a 8 …」みたいな。
637 :
◆yb5ufjhaCo :2007/08/06(月) 15:32:11
>>636 さん
極端な入力は考えなくていいって言っていたので、
正しい入力をしたときだけを考えればいいと思います
>>637 とりあえず10個読み込んで配列に格納するのを下に書いてみる。
それの和を求めるのは大丈夫だよね?
ちなみに「1 a 2 3 4 5 6 7 jfid 8 9 kk 10」
こう入力されても配列に格納されるのは
「1,2,3,4,5,6,7,8,9,10」ってなるはず。
Aはググれば一杯出てくると思うし、最悪2から全部割れば良いんじゃない?
Bは文字コードが「A→a」「B→b」って全部等しい差になってるから
コレ見て足し算引き算すればおk。
http://e-words.jp/p/r-ascii.html
639 :
638 :2007/08/06(月) 16:01:59
>>637 @の入力を格納するヤツ。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
int main(void){
long value[N];
char str[256];
char *ptr=str, *endptr;
int i, value_num=0,l;
fgets(str,256,stdin);
l=strlen(str)-1;
for(i=0;i<l;i++){
if(strtol(ptr,&endptr,0)!=0)
value[value_num++]=strtol(ptr,&endptr,0);
ptr=++endptr;
}
for(i=0;i<N;i++)
printf("%ld\n",value[i]);
return 0;
}
ちと出掛けなくちゃいけない時間なのでチェック不十分かもしれない…。
ついでにAB共々全部書く時間が無くて中途半端なアドバイスになってすまないorz
>>635 3番
#include<stdio.h>
int translate(unsigned char moji){
static unsigned char code[256], is_first=1;
if(is_first){
int i;
for(i=0;i<256;i++) code[i]=i;
for(i='a';i<='z';i++) code[i]=i-'a'+'A';
for(i='A';i<='Z';i++) code[i]=i-'A'+'a';
is_first=0;
}
return code[moji];
}
int main(void){
char buf[256];
int i;
while(fgets(buf, sizeof(buf), stdin)!=NULL){
for(i=0;buf[i]!='\0';i++) putchar(translate(buf[i]));
}
return 0;
}
>>595 ググればすぐできんだろカス
俺はやらんが
>>635 2番
#include<stdio.h>
#include<stdlib.h>
int is_prime(int value){
int i;
if(value<2) return 0;
for(i=2;i*i<=value;i++){
if(value%i==0) return 0;
}
return 1;
}
int main(void){
char buf[256];
int value;
fgets(buf, sizeof(buf), stdin);
value=atoi(buf);
if(is_prime(value)) printf("prime number\n");
else printf("not prime number\n");
return 0;
}
>>640 ちょっとキミ ctype.h ありでやってみなさい
645 :
◆fFLi6xdx4g :2007/08/06(月) 16:40:36
ご助力お願いします。 [1] 授業単元:プログラミング C++ [2] 問題文 二つのwaveファイル(同時間長)を読み込み、(a.wav,b.wav) 二つのwaveファイルを合成し 1つのwaveファイル(c.wav)として出力しなさい。 例:距離1mの地点にあるスピーカーからの音(a.wav)と 距離10mの地点にあるスピーカーからの音(b.wav)を読み込み この二つの音の合成音をサンプリングして出力する(c.wav) [3] 環境 [3.1] OS: widows [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C++ [4] 期限: 8月末日 [5] その他の制限: なし よろしくお願いします。
>>644 一体どうした?
int translate(unsigned char moji){
if(isupper(moji)) return tolower(moji);
if(islower(moji)) return toupper(moji);
return moji;
}
ドッペラー現象か・・・
ドップラー効果・・・・
649 :
◆yb5ufjhaCo :2007/08/06(月) 17:17:33
みなさんありがとうございます。 本当にありがとうございました
650 :
◆fFLi6xdx4g :2007/08/06(月) 17:30:29
ドップラーではなくて、バイノーラル関連です。 中間距離や録音してない距離での音源を再現しよう という課題です。
651 :
デフォルトの名無しさん :2007/08/06(月) 21:00:34
スレ違いだったらすいません。
アプリ開発の依頼スレが見つからなかったのでこちらに書かせて頂きました。
当方所有のウェブアプリケーションソフト
(以前プログラマに依頼して作ってもらったものですが今は連絡が取れません)
がURL先の変更?で突然使えなくなってしまいました。
そこで、緊急で本日中に改変が出来そうな方是非お願いできないでしょうか?
当方、全くの知識不足で言語が C++ということ以外分かりません。
ソースファイルは持っております。料金は2万円でお願いします!
[email protected]
>>651 規模も分からず改変内容も不明で今日中になんて無理ぽ
仮にソースコードを見て改変内容を聞いて手におえない事が分かった時、
相手がソースコードを破棄したことをどうやって確認しますか?
2万円ってどんだけw
>今は連絡が取れません >料金は2万円でお願いします! 待遇のひどさが伺えるな・・・
>URL先の変更?で突然使えなくなってしまいました そもそも↑これおかしいよね 使用期限とか決められていたんじゃない?
ソースそのものなんだから、使用期限もチョコクッキーい
>職業PGの方 委託開発などで成果物といっしょにソースも渡すものなの? ↑みたいなことはよくある?
多分アルバイト学生に作らせたのではないかな。
>>658 契約内容によるけどそういう契約はよくある
>>659 プログラマに依頼して、だから違う気がする
>>660 それって、ソース含めてすべての権利が依頼元に帰属するってこと?
つまり、ソースを転売(?)したり、保守を別の会社やPGに委託できるってこと?
プログラミングは感動を探す旅
は?何お前?涙出た。
人生がプログラミングだけで終わったら悲しい。
人生がプログラミングだけで終わっても それはそれで、一つの立派な人生
俺はプログラミングだけじゃないけどな。インターネットを使うだけで 幅広く世界のことを知ることができる。現地にいかなきゃ知りえないこともあるが 通信速度も上がって、写真も普通に見られるようになり、海外のニュースも 海外の報道機関のサイトにアクセスしてみることも出来る。英語が理解出来るって すっばぁ〜〜らしぃ!
>>651 突然バックレたのなら、ドキュメントも整備されてないだろうし
小規模でも他人が制作したプログラムを理解するだけで半月かかる
その人件費だけでも何十万もかかるし会社の利益もとると40万位?
こんなとこで訊いてないで業者に頼め
>>651 URL をハードコーディングしている部分を書きかえれば動くんじゃないの?
設定ファイルを弄るだけのような気もするが…
>>645 wav のフォーマットは固定?(16bit 44.1kHz stereo とか)
ビットレート、チャンネル数(モノラル・ステレオ)、圧縮の有無など
あとサンプルとして2秒程度の短い wav も、うpして欲しい
合成方法は 0 <= r <= 1 として、単純に r * a + (1-r) * b でいいの?
671 :
デフォルトの名無しさん :2007/08/07(火) 19:13:58
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):ヒープソートを実装する。
実装する際、それぞれのソーティング用の計算時間を計測する機能を取り入れる。ランダム的なデータを使い、データ数は1KB、1MBとする。C言語のコマンドラインを利用してプログラムを実行する。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C言語
[4] 期限:2007年8月8日17:00まで
[5] その他の制限:
コマンドラインからはデータ数と昇順/降順の文字列("up"か"down")を与えてます。
./heapsort 1000 up
エラーは
Error: Heap A is full.
正常にヒープソートの動きをするようにしたいのですが…
期限は近いですがお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4836.txt
insert が狂ってる n の初期値が 1000 で、insert 呼ぶたびに 1 ずつ増えて、最終的に 1000 + MAX になってない?
674 :
671 :2007/08/07(火) 19:59:42
良かったら俺の尻でソートをやらないか?え?何だって? そりゃヒップソーニュー?細かいことは気にすんな
1000 を指定して 9 個しか出てないことには疑問を持たないのか・・・ コメントによれば、ヒープは A[0] が最大値になるように並べてるようだけど、 だったら upmin の if (A[j] > A[i]) は逆じゃない?
677 :
671 :2007/08/07(火) 20:33:30
>>676 10個以上の場合は10個まで出力すればいいと言われたので…
親が2つの子より小さい場合のheapを構成してるのでinsertとupminはあってると思うんですが…
親が子より小さいのなら downmax の if (A[j] > A[i]) がおかしい。
>>679 int arr_min_pos(int arr[], int n)
{
int min, min_n_1;
min=min_n_1=arr[0];
if(n>0) min_n_1=arr_min_pos(&arr[1], n-1);
if(arr[0] > min_n_1) min=min_n_1;
return min;
}
>>679 int arr_min_pos(int arr[], int n)
{
int min;
min=arr[0];
if(n>0) min=arr_min_pos(&arr[1], n-1);
if(arr[0]<min) min=arr[0];
return min;
}
>679 もとのプログラムひどすぎじゃね?
>679 int arr_min_pos(int arr[], int n) { int pos; if(n<2) return 0; pos = arr_min_pos(arr, n-1); return arr[n-1] < 0 || arr[n-1] > arr[pos] ? pos : n - 1; }
>>680-681 はなかったことにして
int arr_min_pos(int arr[], int n)
{
int min_index=0;
if(n>0) min_index=arr_min_pos(&arr[1], n-1)+1;
if(arr[0]<arr[min_index]) min_index=0;
return min_index;
}
>>684 もなかったことにして… モウダメダorz
int arr_min_pos(int arr[], int n)
{
int min_index=0;
if(n>1) min_index=arr_min_pos(&arr[1], n-1)+1;
if(arr[0]<arr[min_index]) min_index=0;
return min_index;
}
関数のグラフを表示して超越方程式の解を二分法を用いて求めるのですが、 プログラムはもうできたんですが、 許容誤差εと解の関係とか、適切な初期値を与えれば収束するとか 精度を計算できるとか、数学的背景がよくわかりません。 分かる方いたら教えて下さい。
それはこのスレの範疇じゃないだろ
>>686 #include <stdio.h>
#include <limits.h>
void top2(int arr[],int n,int *t1,int *t2)
{
int i;*t1=*t2=INT_MIN;for(i=0;i<n;i++){
if(*t1<arr[i]){*t2=*t1;*t1=arr[i];
}else if(*t2<arr[i]){*t2=arr[i];}}}
int main()
{
int n,i,arr[10],t1,t2;
scanf("%d",&n);
for (i=0;i<n;i++)scanf("%d", &arr[i]);
top2(arr, n, &t1, &t2);
printf("1=%d 2=%d", t1,t2);return 0;
}
[1] 授業単元:Cプログラム [2] 問題文(含コード&リンク): 括弧つきの四則演算プログラムの作成 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: bcc [3.3] 言語:C [4] 期限:2007年8月9日 [5] その他の制限:入力された式を逆ポーランド記法に変換する関数を使ってください。
>>691 入力された式を逆ポーランド記法に変換する関数を作れってこと?
それともすでにあるのか?
>>692 作ってくださいと言う意味です、言葉足らずですみません
f(x)に対して、 [a0,b0]→[a1,b1]→[a2,b2]→[a3,b3]...→[ak,bk] と、このように二分法で真の解αを探査しているとする。 <証明方針>ak,bkが収束する。収束先が同じである。収束先が解である。とこのような流れを目指す ここで、a0<=a1<=a2<=...<=b0 つまり、b0が上界となり、広義の単調増加であるので、akは収束する。 同様にbkも収束する。 bk-ak =lim_{k>∞}(bk-ak) =lim_{k>∞}1/2(b(k-1)-a(k-1)) =lim_{k>∞}1/2^k(b0-a0) =0 よって、bk=ak fは連続なので、∀e>0,эd>0;|x-ak|<d⇒|f(x)-f(ak)|<e より、kを大きくすれば、ak,bkは区間(ak-d,ak+d)に存在することが分かり、 ゆえに、αは区間(ak-d,ak+d)に存在。 よって、∀e>0,|f(α)-f(ak)|<e なので、f(α)=f(ak)で、ak(=bk)は解となる。
ちょろっと訂正。 f(x)に対して、 [a0,b0]→[a1,b1]→[a2,b2]→[a3,b3]...→[ak,bk] と、このように二分法で真の解αを探査しているとする。 <証明方針>ak,bkが収束する。収束先が同じである。収束先が解である。とこのような流れを目指す ここで、a0<=a1<=a2<=...<=b0 つまり、b0が上界となり、広義の単調増加であるので、akは収束する。 同様にbkも収束する。 akの収束先をβ1,bkの収束先をβ2とする β1-β2 =lim_{k>∞}(bk-ak) =lim_{k>∞}1/2(b(k-1)-a(k-1)) =lim_{k>∞}1/2^k(b0-a0) =0 よって、β1=β2 fは連続なので、∀e>0,эd>0;|x-ak|<d⇒|f(x)-f(β1)|<e より、kを大きくすれば、ak,bkは区間(β1-d,β1+d)に存在することが分かり、 ゆえに、αは区間(β1-d,β1+d)に存在。 よって、∀e>0,|f(α)-f(β1)|<e なので、f(α)=f(β1)で、β1(=β2)は解となる。 まーあれだ、結論は数学板?あのへんにいけってことだ。
また間違いみつけてしもた。 akの収束先をβ1,bkの収束先をβ2とする β1-β2 =lim_{k>∞}(bk-ak) は akの収束先をβ1,bkの収束先をβ2とする β2-β1 =lim_{k>∞}(bk-ak) と脳内置換してくれ。スマソ
>>694-696 計算機で扱える数に入る位相が完備でないので
その議論は(現実的でない)かなり強い仮定を必要とするよね
>>697 計算機じゃ有限の値しか扱えないから極限値を用いる計算の理論自体が仮定用いるしかないだろ
>>698 もとの質問に対する答えとしては極限を用いる必要は全くないのだから
694-696は「答えを出すために勝手に仮定を導入した」ということになるよね
実際、答えは現実とは乖離していて、通常の計算機のうえでは二分法が
失敗するような関数が存在するから、考える関数のクラスを制限する必要がある
>>699 そうすると群論を用いて具体的な有限群の規定からしないといけないな
情報代数は詳しくないから自分じゃ求められてる解答は提示できそうにない
>>699 普通の計算機は加算・減算・乗算・除算くらいはできるから、
有限の環になるかもしれないと一瞬思うけれど、実は環にすらならない。
有限桁計算をモデル化する代数的に綺麗な構造は今のところ知られておらず、
だからこそ「ロバストな計算」ってのが数値計算や計算幾何の分野で
難しい問題になっている……と認識していたのだけれど、
有限群で何かできるようなら面白いと思うので、ぜひ教えてほしいです。
>>701 自分も有限群での定義ができるほど詳しく無い…
そもそも計算機での解を出すこと自体がほとんど計算力を利用した力押しが多い現状
シミュレーションの分野なんかで未だにモンテカルロ法なんかがあるのがいい例だ
[1] 授業単元:C言語実習 [2] 問題文: 住所管理アプリケーションを作成する 1つのレコードは氏名、住所、メールアドレスの項目を持つ レコード一覧を表示できる レコードはファイルで読み込み、保存する レコードの追加、編集、削除ができる 任意の項目で昇順・降順にソートができる [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ: bcc [3.3] 言語: C言語 [4] 期限: 2007年8月9日24:00まで [5] その他の制限: 特になし よろしくお願いします
論点がずれてきてるな 暗号分野なんかでは当たり前に有限体の理論が用いられているわけだが 極限値計算においては計算機で解を求めるにはやはり近似しなければならないので 数学的理論に基づく極限を用いた解法は何らかの方法で近似的に定義し直さなければならない スレ違いな内容だから以降自重する
>>703 自分の言ったことに対して責任を持たないあなたは不誠実ですね。
そして現状に対して認識違いをしているのだけれど、さすがにスレ違いなので
引き上げます。
初期値が答えそのものであってもいいなら 必ず収束するケースが一つあるわけで 収束しなかったら適切な初期値じゃなかったと言えばいいし ほとんど自明ですよね。なんの話? 答えがコンピューターで表現できない数なら 何法でやっても答えはでません。有限も無限もないですよ
まったくもってスレが機能して無いなあ
709 :
デフォルトの名無しさん :2007/08/09(木) 21:29:00
[1] 授業単元: マージソートの実現と比較 [2] 問題文(含コード&リンク): ファイルに納められたレコードを標準入力から読み込み、整列(マージソート)し、 整列後のレコードを標準入力に印字するプログラムを作成する。 整列対称はa[0]〜a[n-1]である。また項目数が多くなるとローカル変数の作業用配列b[]が 確保できなくなるので、これを動的に確保するようにせよ。 具体的にはmergesort()の最初でb=malloc(...);し、最後にfree(b);する。 書き出しはvoid margesort(recordtype a[], int n)とする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 8月10日09:00まで [5] その他の制限: 文字列(char*)の整列であり、文字列比較関数strcmpなどを 比較演算子の変わりに使うようにする。
710 :
デフォルトの名無しさん :2007/08/09(木) 21:29:31
他の関数定義はここです→
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4842.txt void margesort(recordtype a[], int l, int r){
int i, j, k ,m;
l=a[0]; r=a[n];
recordtype b[LIMIT];
if(l<r){
m=(r+l)/2;
mergesort(a,l,m);
mergesort(a,m+1,r);
for(i=m; i>=l; i--) b[i]=a[i];
i=l;
for(j=m+1; j<=r; j++) b[r+m+1-j] = a[j];
j=r;
for(k=l; k<=r; k++)
if(b[i].key<b[j].key) a[k]=b[i++];
else a[k]=b[j--];
}
}
キーがintの関数は↑です。こちらを書き換えてください。
急ぎで申し訳ありません。よろしくお願いします。
711 :
709 :2007/08/09(木) 21:30:53
C++?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 8個の整数を入力し、その値の最小公倍数を表示するプログラムを作成してください。 [3] 環境 [3.1] OS: (Windows2000) [3.2] コンパイラ名とバージョン: CPad forBorland C++Compiler Ver2.31 [3.3] 言語: (C/C++ どちらでも可) [4] 期限: ([2007年08月11日10:0まで] [5] その他の制限: (配列の基本の「き」まで習ってますが超初心者です) よろしくお願いします
>>713 #include <stdio.h>
int gcd(int x, int y)
{
if(y==0) return x;
else return gcd(y, x % y);
}
int lcd(int x, int y)
{
return x * y / gcd(x, y);
}
int main()
{
int a, b, c, d, e, f, g, h;
scanf("%d%d%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f, &g, &h);
printf("%d\n", lcd(a, lcd(b, lcd(c, lcd(d, lcd(e, lcd(f, lcd(g, h))))))));
return 0;
}
716 :
714 :2007/08/10(金) 01:23:03
どうでもいいけど、 lcd → lcm でした。。
>>715 もうだめかと思ってました!!
本当にありがとうございます
>>710 書き出しは void margesort(recordtype a[], int n) とする。
なのに元は void margesort(recordtype a[], int l, int r) なの?
言ってることなにかおかしくない?
とりあえず 710 を無視して 709 の条件で書くと
void mergesort(recordtype a[], int n)
{
if(n > 1){
recordtype *b = malloc(sizeof(recordtype) * n);
int m = n / 2, i = 0, j = 0, k = m;
mergesort(a, m);
mergesort(a + m, n - m);
while (j < m && k < n) {
if (strcmp(a[j].key, a[k].key) < 0) {
b[i++] = a[j++];
} else {
b[i++] = a[k++];
}
}
while (j < m) b[i++] = a[j++];
while (k < n) b[i++] = a[k++];
for (i = 0; i < n; i++) a[i] = b[i];
free(b);
}
}
こんな感じでしょか
719 :
709 :2007/08/10(金) 02:42:34
>>718 元の書き出しとは違う書き出しで始める、という問題でした。
ありがとうございます。もうちょっと自分でも勉強してみます。
細かいところに気が付くね。でも問題文にも >具体的にはmergesort()の とか書いてあるし、単にタイプミスなんじゃないかと思った。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): テキストファイル1から1000までの数字がスペースまたは改行で区切られている データファイルがあるとする。(要素の数は1000以下で適当に定義していい。) (データファイルの例) 1382 32 432 4235 4539 942 ............................................................ 2938 4398 9210 10 332 8329 1. このようなデータファイルをよみこむ 2. 小さい順にソートする。 3. 重複している分の番号は消す。 (例) 100 100 105 105 105 9900 -> 100 105 9900 4. 連続している番号があったときは次のように-をつかい省略して表示させる。 (例) 1001 1002 1003 1004 1005 1007 -> 1001-1005 1007 5. 余裕があるのならこれを元に戻して表示させる関数もつくること。 (例) 2001-2007 2008 -> 2001 2002 2003 2004 2005 2006 2007 2008 [3] 環境 [3.1] OS:LINUX [3.2] コンパイラ名とバージョン: gcc-2.95 [3.3] 言語: C [4] 期限: ([2007年10月01日00:00まで] [5] その他の制限: 無し(ソートにはクイックソートを使うのを勧める)
724 :
723 :2007/08/10(金) 16:32:21
まちがえました。 データファイルは1から”10000”までの数字 に訂正させてください。 よろしくお願いします。
>>723 #include <stdio.h>
#include <stdlib.h>
#define N 1000
int cmp_int(const int *x, const int *y){ return *x - *y;}
void print_data(int data[N], int size){
int i, j;
for(i = 0; i < size; i++){
printf("%d", data[i]);
for(j = i; j + 1 < size && data[j] + 1 == data[j + 1]; j++);
if(j != i) printf("-%d ", data[j]), i = j;
else putchar(' ');
}
}
int main(int argc, char *argv[]){
FILE *fp;
int data[N], tmp, i = 0, j;
if(argc < 2 || (fp = fopen(argv[1], "r")) == NULL) exit(1);
while(i < N && fscanf(fp, "%d", &tmp) == 1){
for(j = 0; j < i && data[j] != tmp; j++);
if(j == i) data[i++] = tmp;
}
print_data(data, i);
putchar('\n');
return 0;
}
726 :
725 :2007/08/10(金) 17:07:03
仕様満たしてないな…… まいっか
ビンソートじゃね
>>723 データファイルはリダイレクトで読み込ませる
#include<stdio.h>
#include<stdlib.h>
int int_compare(const int *a, const int *b){return *a-*b;}
void data_print(int data[], int data_num){
int i, j;
for(i=0;i<data_num;i++){
printf(" %d", data[i]);
for(j=i;data[j]+1==data[j+1];j++);
printf("%.0d", (j!=i)?-data[i=j]:0); // この行を削除すると省略無しで表示する
}
}
int data_uniquify(int data[], int data_num){
int i, dest;
for(i=dest=1;i<data_num;i++)
if(data[i]!=data[i-1]) data[dest++]=data[i];
return dest;
}
int main(void){
int *data, data_num, i, ret, start, end;
for(data=NULL,data_num=0;(ret=fscanf(stdin, "%d-%d", &start, &end))>=1;){ // 入力に 10-20 のような省略表現を許す
if(ret==1) end=start;
for(i=start;i<=end;i++){
data=realloc(data, sizeof(*data)*(data_num+1));
data[data_num++]=i;
}
}
qsort(data, data_num, sizeof(*data), (int (*)(const void *, const void *))int_compare);
data_num=data_uniquify(data, data_num);
data_print(data, data_num);
return 0;
}
テーブルに登録/登録されたものだけ表示だなぁ。漏れも・・・。
っしゃ、ちょっとご先祖様の墓に行ってくるから、しばらく俺は答えられぬ。 後は頼んだぞ、どこにも出かけない引きこもり共!
うるせー馬鹿 いってらっしゃい
俺はお盆も鯖管理 気をつけて行ってらっしゃい
宿題募集する?
736 :
731 :2007/08/11(土) 14:23:15
しゃらーーー!ご先祖様の墓参りから帰ってきたぞ。さぁ、俺も答える準備をするぞ
[1] 授業単元: 暇つぶし [2] 問題文: 大きさの異なる箱がいくつかあるので,それらをコンパクトにまとめたい.なお, ・箱は全て直方体である. ・箱Aの各辺の長さがx, y, z,箱A'の各辺の長さがx', y', z'であれば, x < x', y < y', z < z'が全て成り立つ場合に限り,箱Aを箱A'の中に入れることができる. ・複数の箱を入れ子状にして重ねることはできるが,同じ箱に2つ以上並べて入れることはできない. すなわち,[ [ [ ] ] ]のような入れ方は可能だが,[ [ ] [ ] ]のような入れ方は不可能である. ・箱は自由に回転させることができる.すなわち,どの辺をx, y, zに対応させるかは自由である. この条件のもと,最終的に残る箱の総体積が最小となるように箱を詰めていく.(他の箱に入った箱の体積は0となる.) 総体積の最小値を求めよ. 入力は1行目に箱の個数N,それ以降N行にわたって3辺の数値が並べられたファイルとする. (例) 4 1 1 1 2 2 2 3 3 3 1 1 4 この場合,1つ目の箱は2つ目の箱に,2つ目の箱は3つ目の箱に入れることができるので, 答えは3*3*3 + 1*1*4 で 31となる. N及び各辺の長さは200以下の自然数とする. [3] 環境・言語: 自由 [4] 期限: 8/17 18:00 [5] その他の制限: 他の課題を優先
[1] 授業単元:プログラミング演習
[2] 問題文:フーリエ級数展開?の問題で、書くと長くなりそうでしたので↓にUPしています。よろしくお願いします。
ttp://hey.chu.jp/up/source3/No_5121.zip [3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C++
[4] 期限: 19日ぐらいまででお願いします。
[5] その他の制限:簡単な問題かもしれませんが、プログラミングを始めたばかりの私にとっては難しく完成させることが出来ませんでした・・・。もし、よろしければお力を貸してください。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
1.再帰的を使用しハノイの塔の解答プログラムを作成する
2.A ,B ,C の3つ棒がある
3.実行はコマンドライン引数からハノイの枚数を指定する
4.実行後にハノイがどのように移動したかを表示する※1
5.AからCに移動・AからBに移動バージョンを別ファイルで作成する
※1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4844.txt [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
[3.3] 言語: C言語
[4] 期限: ([2007年08月20日提出]
[5] その他の制限: 特にありません
お力をお貸し下さい。
お願い致します。
>>739 きっと夏バテのせいなんだ
#include <stdio.h>
#define N 128
#define make_stack_set(str) \
int str[N], str##_top = 0; \
void str##_push(int val){ if(str##_top < N) str[str##_top++] = val;} \
int str##_pop(void){ if(str##_top > 0) return str[--str##_top];}
make_stack_set(a); make_stack_set(b); make_stack_set(c);
#define huga(a) if(i >= a##_top) printf(" "); else printf("%d ", a[i])
#define hoge(a, b) if(!strcmp(from, #a) && !strcmp(to, #b)) b##_push(a##_pop())
void print_hanoi(void){
int i, top = (a_top > b_top && a_top > c_top) ? a_top : b_top > c_top ? b_top : c_top;
puts("A B C");
for(i = top - 1; i >= 0; i--){
huga(a); huga(b); huga(c); putchar('\n');
}
puts("---------\n");
}
void hanoi(int n, char *from, char *work, char *to){
if(n > 1) hanoi(n - 1, from, to, work);
hoge(a, b); hoge(a, c); hoge(b, a); hoge(b, c); hoge(c, a); hoge(c, b);
print_hanoi();
if(n > 1) hanoi(n - 1, work, from, to);
}
int main(void){
int i, n;
scanf("%d", &n);
for(i = n; i > 0; i--) a_push(i);
print_hanoi();
hanoi(n, "a", "b", "c");
return 0;
}
空白のことは気にするな
>>740 難しいのは如何に塔を表現するかっぽい
[1] 授業単元: C++初級 [2] 問題文(含コード&リンク): 123,456のようなデータが代入されたchar型の配列から','で分割して、 123と456の2つのchar型のポインタもしくはchar型の配列にする [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 8.0 [3.3] 言語: どちらでも可 [4] 期限: [2007年08月13日00:00まで] [5] その他の制限: 文字列の分割に標準ライブラリは使ってはいけない 一日PCと睨めっこしても分かりませんでした、お願いします。
char a[] = "123,456"; char b[4]; char c[4]; int i, j; for (i = 0; a[i] != ','; i++) b[i] = a[i]; b[i] = '\0'; i++; for (j = 0; a[i]; i++, j++) c[j] = a[i]; c[j] = '\0'; printf("%s\n", b); printf("%s\n", c);
745 :
743 :2007/08/11(土) 21:09:01
おぉ、そのようにするんですね。勉強になりました、ありがとうございました。
「標準ライブラリは使ってはいけない」って条件の宿題出されてる人ってさ 標準ライブラリを使う方法は分かってるのかな? 標準ライブラリと同じ動作をする関数を作成するような宿題は除いて。
じゃあ標準ライブラリも使ってみよう。 sscanf(a, "%[^,],%s", b, c);
>>743 (((744さんのが正解っぽいっけどオレも)))
#include <stdio.h>
#include <stdlib.h>
char** cut(char* src)
{
char *str, **dst;
int i, j;
size_t n;
n = strlen(src) + 1;
str = (char*)malloc(5*n);
dst = (char**)str;
str += 4*n;
strcpy(str,src);
j = 0; dst[j++] = str;
for(i = 0; str[i] != '\0'; i++) {
if(str[i] == ',') {
str[i] = '\0';
dst[j++] = &str[i+1];
}
}
dst[j] = NULL;
return dst;
}
int main()
{
char *src[256], **dst;
int i;
dst = cut("123,456");
for(i = 0; dst[i] != NULL; i++) printf("%s\n",dst[i]);
return 0;
}
main()の"char *src[256], **dst;"は、"char **dst;"の間違いです。スンマセン
>>746 ちょっと違うけど、よそで課題を丸投げしてるのを見たら、使用しなければいけない標準関数がいくつか
指定してあったのだけど、そのなかにmemcpy()が混じっていて、問題からすると、構造体のコピーに使えって
意図らしかった。
出題者は、代入で構造体のコピーができることをしらないんだろうな。
751 :
739 :2007/08/11(土) 22:24:23
>>751 >>741 をそのままコピペする。
行末にスペースがあると思うから、取り除く。
"#"と"\"は消さずにそのままコンパイルする。
>>753 1.
void arr_cycle(int arr[], int len)
{
int *temp = malloc(sizeof(int)*len);
memcpy(temp, arr, len*sizeof(int));
memcpy(arr, arr+len-1,sizeof(int));
memcpy(arr+1,temp,(len-1)*sizeof(int));
free(temp);
}
memmove()使えば、テンポラリいらないんじゃね? #include <string.h> void arr_cycle(int arr[], int len) { int t; t = arr[len - 1]; memmove(arr, arr + 1, (len - 1) * sizeof int); arr[0] = t; } (このコードだと、lenが1以上じゃないとだめだけど)
>>753 2,
#define EOA 0
int arr_positive(double arr1[], double arr2[])
{
double *temp;
int j;
for(temp = &arr1[0],j = 0;*temp != EOA; temp++){
if(*temp > 0.0 ){ arr2[j++] = *temp; }
}
arr2[j++] = EOA;
return --j;
}
int main()
{
double arr1[] = {1.2, -0.8, 2.3, 3.4, -1.1, EOA};
double arr2[sizeof(arr1)/sizeof(double)] = {0};
double *temp1,*temp2;
result = arr_positive(arr1,arr2);
for(temp1 = &arr1[0];*temp1 != EOA; temp1++)
printf("%lf ",*temp1);
putchar('\n');
for(temp2 = &arr2[0];*temp2 != EOA; temp2++)
printf("%lf ",*temp2);
putchar('\n');
printf("%d \n",result);
return 0;
}
>>753 3
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
void print_m( int * mat, int nx, int ny ) {
int x, y;
for ( y = 0; y < ny; ++y, puts("") ) for ( x = 0; x < nx; ++x ) printf( "%5d ", mat[ nx * y + x ] );
}
int main( void ){
int nx = -1, ny = -1, x, y, t, *m = NULL;
scanf( "%d%d", &nx, &ny ); if ( nx < 0 || ny < 0 ) { fprintf( stderr, "wrong size %d, %d\n", nx, ny ); return 1; }
m = ( int * ) malloc( sizeof( int ) * ( ( nx + 1 ) * ( ny + 1 ) ) );
if ( !m ) { fprintf( stderr, "memory error\n" ); return 2; }
memset( m, 0, sizeof( int ) * ( nx + 1 ) * ( ny + 1 ) );
for ( y = 0; y < ny; ++y ) for ( x = 0; x < nx; ++x ) scanf( "%d", &m[ ( nx + 1 ) * y + x ] );
print_m( m, nx + 1, ny + 1 ); puts("");
for ( y = 0; y < ny; ++y ) for ( x = 0; x < nx; ++x ) t = m[ ( nx + 1 ) * y + x ], m[ ( nx + 1 ) * y + nx ] += t, m[ ( nx + 1 ) * ny + x ] += t;
print_m( m, nx + 1, ny + 1 ); puts("");
free( m );
return EXIT_SUCCESS;
}
>>753 4.
#include <stdio.h>
#define N 10
void f( int arr[], int len, int a0, int r ){
int i;
arr[ 0 ] = a0;
for ( i = 0; i < len - 1; i++ ) arr[ i + 1 ] = arr[ i ] * r;
}
int main( void ){
int i, r = 3, a0 = 10, arr[N] = {0};
f( arr, N, a0, r );
for ( i = 0; i < N; i++ ) printf( "%d ", arr[ i ] );
puts("");
return 0;
}
761 :
751 :2007/08/12(日) 11:17:55
>>752 >>757 すみません ありがとうございます
実行出来ました。
ただソースで分からない所があるのでもう少し調べてから
質問させて頂いてもよろしいですか?
>>761 申し訳ないですが、こちらに変更してください。int のが扱いやすかった。
#include <stdio.h>
#include <string.h>
#define N 128
static int stack[3][N], top[3] = {0}, line;
static void push(int index, int val){ if(top[index] < N) stack[index][top[index]++] = val;}
static int pop(int index){ return top[index] > 0 ? stack[index][--top[index]] : 0;}
static void print_hanoi(void){
int i, j;
puts("A B C");
for(i = line - 1; i >= 0; i--){
for(j = 0; j < 3; j++){
if(top[j] <= i) printf(" ");
else printf("%d ", stack[j][i]);
}
putchar('\n');
}
puts("-------");
}
void hanoi(int n, int from, int work, int to){
if(n > 1) hanoi(n - 1, from, to, work);
push(to, pop(from)), print_hanoi();
if(n > 1) hanoi(n - 1, work, from, to);
}
int main(void){
int i, n;
scanf("%d", &n);
line = n;
for(i = n; i > 0; i--) push(0, i);
print_hanoi(), hanoi(n, 0, 1, 2);
return 0;
}
>>763 結果は正しいと思うが 737 の仕様では N = 200 まで来ることになっているので
多分終わらないと思われる。たとえば N = 14 でも次のは結構時間がかかる。
14
15 8 14
8 13 8
12 15 11
13 20 1
11 15 14
3 14 9
10 15 15
14 6 7
18 2 16
9 5 12
17 18 16
10 4 4
3 3 7
1 14 4
>>763 それ、N=200 とかでも試してみた?
766 :
763 :2007/08/12(日) 21:12:24
おk
枝刈りに挑戦してみる
>>763 のコードは同じ条件を何度も評価してる
A 1 1 1
B 2 2 2
C 3 3 3
の時
B[ A ] -> C[ B[ A ] ]
C[ B ] -> C[ B[ A ] ]
とか
769 :
768 :2007/08/12(日) 23:12:27
770 :
763 :2007/08/13(月) 00:17:07
>>769 thx
ちょっとした枝刈で多少は早くなったけど N=200 は絶望的。
N=14 (02_input.txt) の解を出すまでの所要時間を 1/30 にできた程度。
根本的に考え直さねば…
771 :
763 :2007/08/13(月) 10:17:10
>>737 の問題
N=200 の時
>>769 と同じ答えを 1 秒以内に得ることはできた。
最良に近い解だろうということは間違い無いが、
残念ながらこれが正しい解かどうか確認する方法が分からない orz
どうやって確認すればいいのか、えらい人教えて下さい
アルゴリズム
1.体積の小さな箱から順にソートする
2.それぞれの箱に対する子供の候補をすべて列挙する (変数ChildMapに格納)
3.子供の候補が一つだけの時は無条件にその箱に入れる
4.3.によって子供の候補が減るので、変化が無くなるまで3.の繰り返し
5.小さな箱から順に子供の候補のうち最大の体積を持つものを箱に入れる
以上
4.までは間違い無いが、5.があやしい
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4851.c
>>771 多分次のケースで撃墜。この入力に対する出力は 797 のはずだけれど
あなたのプログラムは私の手元で 819 と出力した。
5
9 6 1
8 1 4
5 9 9
10 9 4
3 4 7
ちなみに 11_input.txt, 12_input.txt, 13_input.txt についても
それより小さな解が見つかっている。私の現在の方法でも最適保証は無いけれど。
773 :
◆iWqCuv/3go :2007/08/13(月) 11:00:54
[1] 授業単元: システムプログラム [2] 問題文(含コード&リンク): filetat: 引数として1つ数字を取る. 最初に自身のプロセスIDを表示した後に, カレントディレクトリから下の階層にあるファイルを探し, 数字で示した時間以内に変更したものを表示する. ただし, Ctrl-C で停止する際に, Interruped! と表示して終了するようにせよ. また,実行中に kill -USR1 pid (pidは, filestat のプロセスid) とした場合,ファイル名とともに変更日時も表示せよ. 形式は問わない. [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2007年8月20日まで] ) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 制限は特にありません よろしくお願いします、助けてください。
>>773 Nativeなwindows環境で動かすの?
それとも、Cygwinの中でかな?
775 :
◆iWqCuv/3go :2007/08/13(月) 12:05:35
>>774 家にはbolandしかありませんが、学校にはmacがあるのでそちらでも大丈夫です、よろしくお願いします。
>>773 >>775 プロセスIDなどの概念はOSに依存するから
OSを特定してくれないと対処できないよ
777 :
◆iWqCuv/3go :2007/08/13(月) 16:25:37
>>776 Mac OS XのTerminalでお願いします。
>>773 引数で渡す数字は秒とか分とかの指定はあるの?
「実行中に kill〜ファイル名とともに変更日時も表示」とあるけど、
以後の表示スタイルを変えるでいいの?
779 :
◆iWqCuv/3go :2007/08/13(月) 20:20:53
>>778 課題の問題分をそのままコピペしたので、書いてある条件を満たしていればたぶん大丈夫です。
指定がないので秒でいいはずです。
表示スタイルというのがよくわからないんですが、問題の内容になっていれば大丈夫です。
いきなり出された課題で、この問題文以外に全く情報がないんです・・・
よろしくお願いします。
780 :
デフォルトの名無しさん :2007/08/13(月) 20:29:15
[1] 授業単元: シミュレーション&モデリング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 4854.zip
[3] 環境
[3.1] OS: Linux
[3.2] g++ 3.4
[3.3] 言語: C++
[4] 期限: [2007年09月01日まで]
[5] その他の制限: (質問と関係ないですが) Qt4というGUIインターフェイスを使っています
'changeNode()'というメソッドを呼びたいんですが
うまく呼べなくて困っています。
'changeNode()'は'addNode()'というメソッドを基にして作りました(それらは'GraphScene.cpp'の中にあります)。
'addNode()'は「入力/出力ポートを持つノードを作成するメソッド」です。
'changeNode()'は「既に作成されたノードに新しい入力ポートを追加するメソッド」です
(厳密には「追加された入力ポートを描画するメソッド」です)。
'addNode()'で作成された'NodeGraphicsItem'のオブジェクトに
'changeNode()'の中でアクセスしてポート数を増やしたいんです。
ただ、勉強不足なものでどうすればよいのか分かりません…。
'NodeGraphicsItem.cpp'の中で'changeNode(this)'と呼べば
現在の'NodeGraphicsItem'のオブジェクトで呼べると思ったんですけど
「オブジェクトがない呼び出し」とコンパイルエラーが出ます。
'NodeGraphicsItem.cpp'の中のメニューで
「ポートを増やす」を選択するとイベントが発生するので
そこから'GraphScene.cpp'を呼ぶ必要があります。
続く…
781 :
780 :2007/08/13(月) 20:32:54
一部だけここにコピペしておきます: ### GraphScene.cppの中 ### void GraphScene::addNode( Node *newNode ) { if ( newNode == NULL ) return; _graph->addNode( newNode ); // ※このaddNote()はGraph.cppのメソッドです NodeGraphicsItem *nodeItem = new NodeGraphicsItem( newNode ); nodeItem->setPos( _currentEventPos ); addItem( nodeItem ); update(); }; void GraphScene::changeNode( Node *currentNode ) { NodeGraphicsItem *currentNodeGraphicsItem = new NodeGraphicsItem( currentNode ); currentNodeGraphicsItem->setPos( _currentEventPos ); addItem( currentNodeGraphicsItem ); update(); }; void GraphScene::changeNode( NodeGraphicsItem *currentNodeGraphicsItem ) { currentNodeGraphicsItem->setPos( _currentEventPos ); addItem( currentNodeGraphicsItem ); update(); }; ### NodeGraphicsItem.cppの中 ### GraphScene::changeNode( this ); //NodeGraphicsItem *currentNodeGraphicsItem = new NodeGraphicsItem( _node ); //GraphScene::changeNode( currentNodeGraphicsItem ); もう10日間くらい一人で悩んでます…。 どうかよろしくお願いします。m(__)m
よくわからんが、コンパイラが言ってる通り changeNode()は非スタティックメンバ関数なのに、スタティックメンバ関数のように 呼び出しているのが悪いんだろう
784 :
◆iWqCuv/3go :2007/08/13(月) 21:27:40
>>783 家にmacがないので確認できたら報告します、ありがとうございました!
785 :
780 :2007/08/13(月) 21:29:27
>>782 ありがとうございます。
では、具体的にはどういう風に対処すればいいんでしょうか?
NodeGraphicsItemとNodeの情報を持っているのはNodeGraphicsItem.cppなので
NodeGraphicsItem.cppの中で
NodeGraphicsItem *currentNodeGraphicsItem = new NodeGraphicsItem( _node );
GraphScene::changeNode( currentNodeGraphicsItem );
…とやっても同じように「オブジェクトがない呼び出し」とエラーが出ます。
すべてのファイルをうぷできなくてすみません。
全部で500個くらいあります…権利の問題も(ry
他に頼るところがありません。どうかヒントだけでもお願いします。
786 :
761 :2007/08/13(月) 21:31:18
>>762 遅くなって申し訳ございません。
動作確認致しました。
分からない部分についてはもう少し粘ってみます
ありがとうございました。
>>785 methodがstaticじゃないんなら
Class::method()
じゃなくて
object.method()
とか
pointer->method()
とか書かないとだめ
つまりクラスGraphSceneのインスタンスが必要
788 :
780 :2007/08/13(月) 21:46:05
>>787 ありがとうございます。
なるほど!
ちょっと自分でやってみます。
後で(明日とかに)また来るかもしれません。m(__)m
つーかその辺C++の基本中の基本なので もっぺん教科書読むなりして勉強しなおせ
>>784 なんで>773にはWindowsと書いているのにMacが必要なの?
実行はWindowsだけど出力先がMacという特殊環境なんだと予想
学校のパソコンはWindowsが入ってるIntelMacと予想
>>790 開発がwindowsで実行がUnixなんじゃない?
んなアホな。そもそも自分の使っている環境も判らずに宿題丸投げしているのか?
それが丸投げクオリティ
>>783 のコードはコンパイラの最適化によって
グローバル変数Fmtの変更がうまく反映されないかもしれない。
変更
printf(Fmt, filename, ctime(&filestat.st_mtime));
↓
printf(GetFmt(), filename, ctime(&filestat.st_mtime));
関数の追加
char *GetFmt(void){return Fmt;}
うまくいかないときは最適化オプションをはずして
上記の変更で動くようになるかもしれない。
確実にグローバル変数を読みにいくようにする正式な方法は、知らない。
volatileとか
798 :
デフォルトの名無しさん :2007/08/14(火) 13:46:29
kill使うから多分unixだと思う
>>772 >>769 より小さな解を確認した。
現在のところ見つけた最小解は
11_input.txt Volume:73949529
12_input.txt Volume:67522871
13_input.txt Volume:67164434
となっている。
>>771 のソートに使う関数を直方体の形状も評価するように変更しただけの
イカサマっぽい方法で見つけたので、おそらく最適解ではない
評価関数 (但し x <= y <= z にソート済みとする)
x*y*z
↓
x*y*z/(x*9+y*3+z)
800 :
◆iWqCuv/3go :2007/08/15(水) 01:42:14
773です。 家のPCはwindowsなんですが、イマイチコンパイラが使いこなせていなくて、そのときにOSを聞かれたので学校のMACでやったほうがやりやすいと思ってMACに変えたんです・・・ わかりにくくしてしまってすみませんでした。
>>799 11_input.txt: 72994947
12_input.txt: 66875986
13_input.txt: 66881085
待てばもっといい解が出るかもしれんけどね
>>799 少し待ったら少しマシな解が出た:
11_input.txt: 72692471
12_input.txt: 66659339
13_input.txt: 66586660
ちなみにアルゴリズムは大雑把に言うと
>>771 の
5.の「小さい箱から」を「極小な箱から」に読み替え,
複数ある極小要素から乱数で選ぶモンテカルロ法。
そろそろ厳密解法を考えるのに疲れてきた。
出題者の解答を待ちたいところだ。
>>802 モンテカルロ法ってことは、
メタヒューリスティクスな解法を使っているってこと?
一応回答期限は17日までだからもうちょいがんばろうぜ。
そんな俺はとりあえずバックトラックで書いてみたら、
深くもぐりすぎてオーバーフロー\(^o^)/
>>800 依頼した宿題はOS固有の機能を利用している。だから、どういう環境で動かしたいのかで作りが変わる。
>>802 ,803
いや、いま問題よんだけどアルゴリズム違わないかなぁ
例えば体積の大きい順に箱をソートしておいてですね
A=一番大きい箱
B=Aの中に入る一番大きい箱
A=B
Bを配列から削除
を繰り返すのを一操作として、
さらにそれを繰り返せばいいんじゃないかと…
3次元の箱にその考え方は通用しないだろ。
ゴメン 大きい順じゃなくて小さい順にソートだ 夜にでもコードうプっとくよ。
ところで
>>769 のうpしたパターンと答えは同じだった?
>>806 貪欲性は成り立たないよ
例:
4 4 3
4 4 2
3 3 1
2 2 2
体積最大は 4 4 3 これに入る体積最大は 3 3 1
ただ、これを入れちゃうと残りがばらばらになって
結果の値は 48+32+8 = 88
一方,最適詰め込みは 4 4 3 に 2 2 2 を詰めて
4 4 2 に 3 3 1 を詰めること。これで 48+32 = 80 になる。
>>809 769よりも小さくなってるんだから同じわけないでしょ
>>812 体積順にソート後、一個づつ取り出して
222
222 331
222 331 442
222 442
222 442 443
442 443
ってことです。小さい順だったってのはそういうことで
体積順に処理すればn番目までの答を
n+1番目までの答を求めるのに使えるところがたぶん肝で
貪欲法を言いたかったのではないです
その記述の意味が全く分からないんだが もっと詳しく説明してくれるかい?
例えばテーブル上に最小の組み合わせ 224 226 333 が既に出来てるとき 347の箱を受け取って 追加しろといわれたら 224 333 347 でいいに決まってるわけです しかし113とか受け取ると困るわけです。 ドコかの箱の中に112とか入ってるかもしれませんから 既に作った組み合わせを壊さないでよい条件は、 体積の小さい方からの逐次処理だろうと。 先の記述はその作業テーブルの状態です
たとえばその例では 347 は 224, 226, 333 のどれでも 包含できるわけだけど、何で 333 を選択したの?
ごめん、ひどく誤読した。 包含できる最小のもの選んだということでよい? そうであれば次のケースで破綻する。 3 1 1 1 1 1 2 2 2 3
819 :
817 :2007/08/15(水) 17:45:54
ごめん、まだ誤読していた。 包含可能な体積最大の 226 を置き換えたってことでよい?
そうです。あ、でも極端に長い箱とかダメぽかw。探索も必要でした 体積でソートするのは間違ってないだろうけど そうすると既出パターンはハッシュに登録しないといけないから マンドくさいなあ
821 :
817 :2007/08/15(水) 18:16:31
>>820 ハッシュって、どれに置き換えたかを覚えるということ?
何にせよ、まとも探索をすると計算量が O(2^N) になるから
N = 200 ではとても終わらないと思われる。
(そこを探索せずにモンテカルロした、というのが
>>802 )
題意としては、厳密解でねーとだめだから、 探査しにいかねーとだめだろ。
探索でN=200は終わる気がしないんだが
問題文には、死ぬまでにプログラムの実行が終わらなければならないとは 書いてないからいいんじゃね
64段のハノイの塔を思い出した。
826 :
737 :2007/08/15(水) 20:49:24
なんか想像以上に持ちこたえてるので,自分の考えてた解法が正しいのか心配になってきた.
とりあえずブラックボックスな検証用としてjavaの実行ファイルをあげとく.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4857.zip ロダの都合でzipとしてるけど実体はjarファイルなので,Box.jarなどに改名すれば
そのまま実行できるはず.
読み込みは標準入力から行うので,ファイルは
java -jar Box.jar < input.dat
のようにリダイレクトで入力.また,
java -jar Box.jar -v < input.dat
のようにオプションで-vをつけると,詰め方の詳細が表示される.
実行環境:1.5以降
>>827 出たパターンが正等なのは当然チェックしてあります。
>>826 結果は正しそうですね(小さい入力で一致を確認)。
もう少しまじめに考えてみます。
とりあえず 826 と同じ出力を出すプログラムは書けた。
アルゴリズムも多分同じだと思う(再割り当てする貪欲だよね?)
いやー勉強になった。
>>737 ありがとう。
再割り当てする貪欲ってDFSとは違うもの?
833 :
831 :2007/08/16(木) 03:34:30
少なくとも私のはほとんど探索はしていないよ。 雰囲気としては二部グラフ最大マッチングに近いことをした。
2 1 1 3 2 3 3 斜めにしたら入った
[1] C言語 [2] 問題文 ・以下の3つの関数を自作する。 文字列s2をs1にコピーする。戻り値は、コピーした文字列の長さ int mystrcpy(char *s1, const char *s2) 文字列s1とs2を比較し、s1のほうが大きければ1、s2のほうが大きければ-1、同じなら0を返す int mystrcmp(const char *s1, const char *s2) 文字列s1と文字列s2の内容を入れ替える void swapstring(char *s1, char *s2) ・作成した3つの関数を使い5つの文字列(最大文字列長20字)を画面上で入力させ、 それらを昇順で表示させるアプリケーションを作成する。 最後に終了するかどうかを入力させ、終了しなければまた入力から繰り返す。 [3.1] XP [3.2] VC 6.0 [3.3] C [4] 期限8/20 宜しくお願いします。
ガイシュツ。過去ログ見れ
>>837 答える気がないならこんなスレに来なくて良いよ
あっ、あんたに答える実力がないのか、ならなおさらこのスレにはあんたは不要だ
赤紙、解雇通達しておくから、とっととこのスレから出ていきな、ふっ
釣り乙。質問者の迷惑だからやめようね。
>>837 みたいなレスは要らないよな、既出って言うなら参照してやれよ。
釣り乙。回答者の迷惑だからやめようね。
釣り乙。回答者は居ない。
確保されてるメモリ領域が足りない場合とかめんどっちーな
英文論文か・・・ がんばってよむわ。。。。
848 :
780 :2007/08/17(金) 07:29:10
亀ですが
>>787 出来ました。
ありがとうございました。
>>838 クダスレじゃないんだから、事前に検索する位のマナーはいるだろ
ほとんど同じ問題に回答したことあるから、折れはやんね
つーかお前やれw
850 :
デフォルトの名無しさん :2007/08/17(金) 10:13:54
>>849 答える気がないならこんなスレに来なくて良いよ
あっ、あんたに答える実力がないのか、ならなおさらこのスレにはあんたは不要だ
赤紙、解雇通達しておくから、とっととこのスレから出ていきな、ふっ
851 :
デフォルトの名無しさん :2007/08/17(金) 10:17:10
>>849 君、戦力外通告だから、とっとと退部してくれ
>>836 別に制限があるって分けじゃないんだな。
int mystrcpy(char *s1, const char *s2) {
return strcpy(s1, s2):;
}
int mystrcmp(const char *s1, const char *s2) {
return strcmp(s1, s2);
}
void swapstring(char *s1, char *s2) {
-- 中略 --
return;
}
>>853 答える能力もないガキは失せろつってんだよ
855 :
836 :2007/08/17(金) 10:48:50
信じてもらえないでしょうしトリップ付けなかったんで自業自得なんですがここに書き込むのは質問以来です。
>>837 質問前に過去ログで昇順、アプリケーション、5つの文字列等で検索はしたのですが探し方が下手なのか見つかりませんでした。
ご迷惑をお掛けした様なので質問を取り下げます。すみませんでした。
gdgdうるさい夏厨がいるのか知らんが、宿題に答える気がないなら失せろ。 お前みたいな役立たずはここは求めてないんだよ
857 :
n :2007/08/17(金) 11:03:29
グラボに接続されているモニタが、ワイドモニタか、4:3モニタか調べる方法ってあるの? DirectX or Win32API 何でもいいんだけど。
>>836 >いろいろな解法があるんだから、いろいろやってみればいいじゃん
#include<stdio.h>
#include<string.h>
#define MAX(a, b) ((a)>(b)?(a):(b))
#define SIGN(a) ((a)>0?1:((a)<0?-1:0))
int mystrcpy(char *s1, const char *s2){
int i=0;
for(i=0;(s1[i]=s2[i]);i++);
return i;
}
int mystrcmp(const char *s1, const char *s2){
while(*s1 && *s1==*s2) s1++,s2++;
return SIGN(*s1-*s2);
}
void swapstring(char *s1, char *s2){
char c; int len, i;
len=MAX(strlen(s1), strlen(s2));
for(i=0;i<len+1;i++) c=s1[i],s1[i]=s2[i],s2[i]=c;
}
int main(void){
char temp[20+2], buf[5][20+2]; int i, j;
while(1){
for(i=0;i<5;i++) fgets(temp, sizeof(temp), stdin), mystrcpy(buf[i], temp);
for(i=0;i<5-1;i++)
for(j=0;j<5-1-i;j++)
if(mystrcmp(buf[j], buf[j+1])>0) swapstring(buf[j], buf[j+1]);
for(i=0;i<5;i++) printf("%s", buf[i]);
printf("Continue ? (y/n) : "); fgets(temp, sizeof(temp), stdin);
if(temp[0]!='y' && temp[0]!='Y') break;
}
return 0;
}
>>857 これより詳しいことは当該スレへどうぞ
#include<windows.h>
#include<stdio.h>
int main(void){
printf("%dx%d\n", GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
return 0;
}
860 :
n :2007/08/17(金) 11:33:51
861 :
837 :2007/08/17(金) 11:45:28
861は、
>>836 ね
>>856 本来宿題を勝手に解いて楽しむスレなんだから、
同じような問題なんども投稿されてもつまらないってだけ
質問者の役に立つためにやってるわけじゃない
ボランティアじゃねえよ 何を勘違いしてる
864 :
デフォルトの名無しさん :2007/08/17(金) 11:55:11
865 :
デフォルトの名無しさん :2007/08/17(金) 12:08:27
866 :
836 :2007/08/17(金) 12:18:55
>>858 有難うございます・・・!本当に助かりました。
>>861 いえ、わざわざ確認有難うございます。
>>862 要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
>>867 いつから監督になったんだよ。そんなに凄いやつなのかお前はw
折れの発言否定するなら、このスレは過去ログ検索不要
ってことになるけど選手の方はそれでおkなの?
いつもの奴を相手にすんなよ
定期的に出てきてこの人暴れるよね
人じゃない
872 :
デフォルトの名無しさん :2007/08/17(金) 13:49:33
[1] プログラミング基礎 [2] 段数を入力して、二等辺三角形を「*」で表示するプログラムを書く。 例 段数3 * *** ***** ↑ 申し訳ございません。二等辺三角形に出力できません……。直角三角形ではなく、二等辺三角形です。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン:ちょっと分かりません [3.3] 言語: C [4] 期限:8月24日まで [5] 配列まで学習 なお、発展問題として、逆二等辺三角形 例 段数3 ***** *** * を出力せよという問題もあります。できたら両方(片方でも可)解いていただければうれしいです! お願いします。
二等辺三角形?ちゃんと例を書いてくれないとよく分からないなぁ(笑)
>>872 #include <stdio.h>
int main(void)
{
int n, i, j;
printf("段数:");
scanf("%d", &n);
/*上向き*/
for(i=0; i<n; i++) {
for(j=0; j<n-1-i; j++) putchar(' ');
for(j=0; j<i*2+1; j++) putchar('*');
putchar('\n');
}
/*下向き*/
for(i=0; i<n; i++) {
for(j=0; j<i; j++) putchar(' ');
for(j=0; j<2*(n-i)-1; j++) putchar('*');
putchar('\n');
}
return 0;
}
875 :
デフォルトの名無しさん :2007/08/17(金) 14:14:11
初心者用の参考書にも載っていると思うんだけど
>>872 多分自作関数を作るレベルじゃないだろうけど…
#include<stdio.h>
void print_n_char(char print_char, int num)
{
int i;
for(i=0;i<num;i++) putchar(print_char);
}
int main(void)
{
int i, n;
printf("段数");
fflush(stdout);
scanf("%d", &n);
for(i=0;i<n;i++){
print_n_char(' ', n-1-i);
print_n_char('*', i*2+1);
putchar('\n');
}
putchar('\n');
for(i=0;i<n;i++){
print_n_char(' ', i);
print_n_char('*', (n-i)*2-1);
putchar('\n');
}
return 0;
}
>>872 #include<stdio.h>
int main(void)
{
char buf[]="**********************************************************************";
int i, n;
printf("段数");
fflush(stdout);
scanf("%d", &n);
if(n>sizeof(buf)/sizeof(buf[0])-1) return 1;
for(i=0;i<n;i++) printf("%*.*s\n", n+i, i*2+1, buf);
for(i=0;i<n;i++) printf("%*.*s\n", n*2-1-i, (n-i)*2-1, buf);
return 0;
}
>>879 をヒントにさせてもらった
#include<stdio.h>
#include <stdlib.h>
int main(void)
{
char *p;
int n,i;
printf("段数");
fflush(stdout);
scanf("%d",&n);
p=(char*)malloc(n*3);
memset(p,' ',n-1);
memset(p+n-1,'*',2*n);
for(i=0;i<n;i++) printf("%.*s\n",n+i,p+i);
for(i=n-1;i>= 0;i--) printf("%.*s\n",n+i,p+i);
return 0;
}
881 :
880 :2007/08/18(土) 00:37:21
いかん、free(p)してないorz
>>868-871 要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
やだね お前が要らん
885 :
デフォルトの名無しさん :2007/08/18(土) 10:37:51
>>883 要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
ほんとにツンだなあw
すいません、スレッドの生成について質問があります。 クラスの中の関数からスレッドを生成する時にスレッド処理の関数として、 下記のようにそのオブジェクトの内部関数を指定することはできますでしょうか? class CHogehoge{ private: HANDLE m_Handle; int Thread_Create(); DWORD WINAPI Thread_Main(void* in_Param); } int CHogehoge::Thread_Create(){ m_Handle = CreateThread(NULL, 0, Thread_Main, (void*)NULL, 0, NULL); return 0; } DWORD WINAPI CHogehoge::Thread_Main(void* in_Param){ 〜やりたい処理を書く〜 ExitThread(TRUE); } このように記述してコンパイルするとCreateThreadの引数(Thread_Main)でエラーとなってしまいます。 *** error C3867: 'CHogehoge::Thread_Main': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&CHogehoge::Thread_Main' を使用してください これで 「m_Handle = CreateThread(NULL, 0, &CHogehoge::Thread_Main, (void*)NULL, 0, NULL);」 に修正すると今度は *** error C2664: 'CreateThread' : 3 番目の引数を 'DWORD (__stdcall CHogehoge::* )(void *)' から 'LPTHREAD_START_ROUTINE' に変換できません。 となってしまいます。(開発環境はMicrosoft Visual C++ 2005)
CHogehoge::Thread_Mainでいいんじゃないの?
>>887 これ宿題なの?
以前やった記憶で書くから動作確認はしてない。
とりあえずVCから直接CreateThreadは使わないこと。 _beginthreadを使おう。
m_Handle = _beginthread(Thread_Main, 0, this);
スレッドのエントリーポイントはstaticで作り、引数でthisを伝播させるのがポイント。
static DWORD WINAPI CHogehoge::Thread_Main(void* in_Param) {
CHogehoge *hoge = (CHogehoge *) in_Param;
return hoge->Thread_Func(); // _endthread は自動で呼び出されるのでここでは不要。
}
int Thread_Func() { 〜やりたい処理を書く〜 }
>>887 メンバ関数は第1引数にthisポインタを受け取るから
それだと2引数の関数を1引数の関数にキャストすることになる
889の人はその辺をキチンと処理してる。
いや、ここは俺が消えるべきではないか?
いやいや俺が消えるよ
894 :
885 :2007/08/19(日) 00:04:40
俺が悪かったすまn
895 :
891 :2007/08/19(日) 00:05:11
いやいや、俺が悪かった ごめんぽ
なんという仲直り・・・この二人は間違いなく近いうち結婚する
YES,NO枕が登場!
>>891-897 要らんレスするなっつってんだよくそみそ、お前らは毛包外通告。とっとと脱ぎな
ウホ いい男
900 :
898 :2007/08/19(日) 15:50:16
ツンデレなんだ。すまんな。ウホッ
[1] 授業単元: プログラミング演習(仮) [2] 問題文(含コード&リンク): 平面上に n 個の点が与えられる ( n ≦ 200 とする )。 それらの間に n-1 本の互いに交わらない線分を引き、 すべての点が繋がるようにしたい。 そのような線分の引き方は一通りとは限らない。 そこで、条件を満たすいろんな線分の引き方をしたときの線分の長さの合計を、 小さい順に全部、小数点以下一桁まで表示せよ。同じ長さの引き方が 複数あった場合は、各引き方に対して一回ずつ出力すること。 入力は 1 行目は点の数 n、それ以降 n 行にわたって点の座標が並べられたものとする。 例: 4 0.0 0.0 0.0 1.0 2.0 1.0 2.0 0.0 出力: 4.0 4.0 5.0 5.0 [3] 環境・言語:問わず [4] 期限: 8月23日 [5] その他の制限: 他の課題を優先
>>901 とりあえずサンプル出力が間違ってる。
4点を順にA(0,0), B(0,1), C(2,1), D(2,0) とした場合に
A-B-C-D(4.0), B-C-D-A(5.0), C-D-A-B(4.0), D-A-B-C(5.0)
の分は挙げられているが、他にも例えば
A-B-D-C, B-A-C-D (2+√5=4.2)
A-D-B-C, D-A-C-B (4+√5=6.2)
の出力がされてない。
903 :
901 :2007/08/19(日) 17:21:06
>>902 すみません、そのとおりです。例は無視してください。
>>901 線分の引き方の数が多項式で収まりません><
N=2kとする.
各点を(x, 0), (x, 1)(但しx = 1,2,...,k)とする.
各xについて(x, 0), (x, 1)を繋ぐとk本の線分ができる.
隣り合う線分の繋げ方は4通り(一筆書きなら2通り)で,繋げるべき箇所が
独立にk-1個存在する.
したがって,少なくとも2^(k-1)通りの線分の引き方が存在する.
ジェネレータ作れってことかな
905 :
901 :2007/08/19(日) 23:57:53
>>901 いくつか質問
線分が重なる時はどうする?
A(0.0, 0.0) B(1.0, 1.0) C(2.0, 2.0) D(100.0, 100.001) E(0.0, 2.0) F(2.0, 0.0)
A-B と A-C は重なる -> 交差?
A-B と A-D は重なりそう -> 交差っていうのはどの範囲まで?
A-B と E-F は端点が重なる -> 交差?
座標の有効桁数は何桁?
同一の座標を示すデータは無い?
907 :
901 :2007/08/20(月) 12:55:34
>>906 ・二つの線分が重なる場合も交差と見なします
・紛らわしい線分(端点が近く、傾きの差が 10^{-8} 以下のもの)は無いものとします
・線分が端点に重なる場合も交差と見なします
座標の有効桁は 10^{-8} とします
同一の座標を表すデータは無いものとします
点点は重なっててはだめ??
909 :
◆BcaCp9aHJ6 :2007/08/20(月) 13:56:34
[1] 授業単元: 工業実験 [2] 問題文(含コード&リンク): 2進クイックソート MSD基数整列法 LSD基数整列法 三分岐基数整列法のプログラムを作成せよ 流れとしては... 入力する10進数の個数を入力 ↓ 個数分の10進数を入力 ↓ その10進数を2進数にそれぞれ変換 ↓ 以下2進クイックソートするなり、MSD基数整列するなり。。。 という流れが望ましい [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: 分かりません...絶対必要になるというならあとで調べれるので、調べます [3.3] 言語: Cです [4] 期限: 2007年8月23日14:00まで [5] qsort()は使えません 「改訂(新訂?)C言語アルゴリズム」という本の10章をまとめよとの事です
なんだ、その、「調べれる」という不思議な日本語は?
方言は間違った日本語とおっしゃるか。(そういう意味ではない
本を指定されちゃうとちょっとなぁ。困る。
2進クイックソートって用語知らないんだけど? せめて10章に何が書いてあるのかだけでも教えて
[1] 授業単元:SSコンピュータ [2] 問題文(含コード&リンク): 文字列に含まれるすべての文字を、1つ後のASCIIコードを持つ文字に置き換えるプログラムを作成する。ファイル名はcaesar.cとする。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: Microsoft .NET Framework SDK v2.0 [3.3] 言語: C [4] 期限: 8月31日まで [5] その他の制限:配列まで学習(教科書は学校独自のものですが) よろしくおねがいします。
一瞬宿題にも.NetFrameworkが使われる時代になったのかと思ったじゃんか
>>914 #include <stdio.h> #include <string.h> void Incr(char *str, int n) { int i; for(i = 0; i < n; i++){ str[i] += 1; } } int main() { char str[] = "abcdefg"; Incr(str,strlen(str)); printf("%s \n",str); return 0; }
>>914 をやろうとして
int main(void)
{
char c;
while((c=getchar())!=EOF)
printf("%c\n",c++);
return 0;
}
こう書いたら改行がやたら多く出力され、
int main(void)
{
char c;
while((c=getchar())!=EOF)
printf("%c\n",c+1);
return 0;
}
こう書くと
a
b
みたいに関係無い文字が一文字出力されたのですが何故でしょう?
c++とc+1で結果が違うのが一番不明ですorz
919 :
918 :2007/08/20(月) 17:56:16
出力されたのを丸っとコピペしたら特殊文字で2chでは表示されないみたいでした…。 二個目のa bの下には四角に×が合わさったようなのが表示されていました。
>>919 printf("%c\n",c++);
==printf("%c\n",c+1);c++;
入力関数の仕様が分かってないな。
文字を入力した後に改行コードが来るからそれをインクリメントして表示してるんだろう。
だから1つめのコードだと複数改行が出力されるはず。
>>919 すまん違った
ラインフィードの次だから垂直タブだな
>>920-922 なるほど、ありがとうございます!
文字入力のあとのエンターの入力とは盲点でした。
というかc++と++cの違いすら気付かなかった自分馬鹿すぎでした…orz
924 :
921 :2007/08/20(月) 18:24:16
書き方間違えたけど分かってくれたよな
925 :
デフォルトの名無しさん :2007/08/20(月) 19:09:59
単に文字コード+1だとまずくね
926 :
914 :2007/08/20(月) 19:20:39
>>917 ありがとうございました。
あと、例題などを見て自分で作ったものがあったのですが
#include <stdio.h>
int main(void)
{
int i = 0;
char s[] = "abcdefg0";
while (s[i] != '\0'){
printf("%c",'s[i]'+1);
++i;
}
return 0;
}
これだと、何を入力しても「^^^^^^^^」と返ってきます。どこがおかしいのでしょうか?
初心者のつくったものなので、晒すのは恥ずかしいのですが・・・
>printf("%c",'s[i]'+1); 's[i]'なんて文字リテラルはありえない。
929 :
914 :2007/08/20(月) 19:28:54
___ ━┓ ___ ━┓ / ― \ ┏┛/ ―\ ┏┛ / (●) \ヽ ・. /ノ (●)\ ・ / (⌒ (●) /. | (●) ⌒)\ /  ̄ヽ__) / | (__ノ ̄ | /´ ___/ \ / | \ \ _ノ | | /´ `\
>>901 の学校ではおそらくものすごい素晴らしいアルゴリズムが開発されているんだろう
言い回しが違うだけで、最小木を求める問題だとおもったんだが・・・。
934 :
◆BcaCp9aHJ6 :2007/08/21(火) 01:41:59
>>913 2進クイックソートというのは2進数に変換した後、
クイックソートする方式らしいです(まんま...?
10進数だと単純に数字の大小を比べるだけでいいんですが、2進数のまま、 数字の大小をクイックソートで比べなきゃいけないんです。
例題プログラムもあるんですがエラーが出ます。 エラーの種類はごめんなさい、分かりません。 もしかしたら鍵になるかもしれないので、
明日、例題プログラムも含めてカキコしようかなと思います。
あ、その本の10章には「基数整列法」について書いてて、 序章にまずは2進クイックソートを理解せよと書かれています そのあとMSD、LSD基数整列法、締めに三分岐基数整列法が書かれています。
いずれも例題プログラムはあるんですが、学校のPCだと何故かエラーが...
まさかとは思うけど、「改訂(新訂?)C言語アルゴリズム」って 「アルゴリズムC〈第1巻〉基礎・整列」のこと? いや、うちの近所には置いてないからみれないしどうしようかな。
「アルゴリズムC・新版―基礎・データ構造・整列・探索」こっちか
>>931-933 全域木列挙問題という典型的な問題だよ。
M を出力個数としたとき、計算量 O(N^3 M) を達成できる。
>>937 要するに短い方から10件とか100件とか出力すればよいと?
そうなら問題文の"全部"っていうのと明らかに食い違うけど
939 :
デフォルトの名無しさん :2007/08/21(火) 17:20:35
[1] 授業単元: プログラミング演習 [2] 問題文 データを入力するための関数inputと、表示するための関数printをメンバ関数として持つ、 氏名と住所と電話番号を要素とするクラスを定義し、確認のためのプログラムを作成しなさい。 ただし、表示のための関数printは、氏名、住所、電話番号を直後に表示される文字列を順に引数と して持つものとし、引数が指定されないときは、「XXXさんの住所はyyyで、電話番号はzzzです」と 表示されるようにしなさい。 [3] 環境 [3.1] OS: Linux [3.3] 言語:C++ [4] 期限:8月23日まで [5] その他の制限: 他の課題を優先
940 :
デフォルトの名無しさん :2007/08/21(火) 18:44:07
[1] 授業単元: プログラミング演習 [2] 問題文 次のC言語プログラムをC++言語に次の仕様に書き換えなさい。 変更仕様 @すべてのメンバ変数は、外部から直接定義することはできないように定義する。 Aメイン関数内のinput_node,link_node,print_linked_node,free_linked_node, の関数をすべてnodeクラスのメンバ関数として定義する。 #include<stdio.h> #include<stdlib.h> #include<string.h> #define END 0 #define OK 1 /*ノードの定義と処理の定義*/ struct node{ int code; char name[20]; int del; struct node *nextp; };
941 :
940の続き :2007/08/21(火) 18:45:06
int input_node(char *s,struct node *p){ p->nextp=NULL; printf("%sコード番号:",s); scanf("%d",&p->code); if(p->code <=0) return END; printf("名 前:"); scanf("%s",p->name); p->del=0; return OK; } void print_node(struct node *p){ printf("%d %s %d\n",p->code,p->name,p->del); }
阻止
943 :
941の続き :2007/08/21(火) 18:47:57
/*リストの処理の定義*/ struct node* link_node(struct node *p,struct node *wp){ struct node *cp; cp=(struct node *)malloc(sizeof(struct node)); if(cp==NULL) return NULL; *cp=*wp; cp->nextp=p; return cp; }
944 :
943の続き :2007/08/21(火) 18:48:57
int print_linked_node(struct node *p){ int k; if(p !=NULL){ k=print_linked_node(p->nextp); printf("(%d)",k); print_node(p); return k+1; } return 1; } void free_linked_node(struct node *p){ struct node *wp; while(p!=NULL){ wp=p->nextp; free(p); p=wp; } }
for(i=0; line[i] != '\0'; i++){ switch(line[i]){ case ' ': if(flag == FALSE){ flag = TRUE; wno++; } break; case '\n': if(flag == FALSE){ flag = TRUE; wno++; } lno++; cno++; break; default: flag = FALSE; cno++; break; } }
946 :
944の続き :2007/08/21(火) 18:50:32
void main(void){ struct node *startp=NULL,*cp,work; int k; char buf[200]; for(k=1; ; k++){ sprintf(buf,"\n%d番目のデータを入力\n" "終了するときはコード番号にゼロ以下の値を入力\n",k); if(input_node(buf,&work)==END) break; if((co=link_node(startp,&work))==NULL){ printf("領域を確保できません\n"); break; } startp=cp; } print_linke_node(startp); free_linked_node(startp); } [3] 環境 [3.1] OS: Linux [3.3] 言語:C++ [4] 期限:8月23日まで [5] その他の制限: 他の課題を優先
他の課題を優先?
948 :
デフォルトの名無しさん :2007/08/21(火) 19:33:11
939と946のその他の制限はなしでお願いします!!
949 :
◆BcaCp9aHJ6 :2007/08/22(水) 00:38:48
>>936 正にそれです
全然違う本の名前書いてすいません
本日迄提出の通信教育の課題ですが、どうしても2問解けません。 お手数をおかけしますがよろしくどうぞ。 1問目 [1] 授業単元:プログラミング基礎(繰り返し) [2] 問題文(含コード&リンク): 整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。 但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。 [3] 環境 [3.1] OS: windowsXP [3.2] インターネット授業なので、大学サーバー上で動いてるみたいです。 [3.3] C [4] 期限: 2007/8/22の日付が変わるまで [5] その他の制限: Cはじめて3日。
[1] 授業単元:プログラミング基礎(while以外の繰り返し) [2] 問題文: あるクラスの試験の点数を整数で繰り返し入力し、 点数の合計と平均点を出力するプログラムを作成しなさい。 点数は、0点以上100点以下とし、この範囲外の点 (0点未満または100点より大きい点)が入力されたときは、 入力を終了し、点数の合計と平均点を出力する (最後に入力された範囲外の点は集計の対象としない)。 また、平均は小数点以下2桁まで出力する。 繰り返しの命令は、何を使ってもよい。 ※両問題とも、途中までなんとかわかるという感じではなく、 どこから手をつけていいのかわからない、といった状態です。 よろしくお願いします。
なーんも勉強しとらんてことか
1つ目 #include <stdio.h> void main(){ int num=0; scanf("%d",&num); while(num>0){ printf("*"); num--; } printf("\n"); }
2つ目 #include <stdio.h> void main(){ int total=0,i=0,buf; double avg; bool flg=true; while(flg){ scanf("%d",&buf); if(buf>=0 && buf <=100){ i++; total+=buf; }else{ flg=false; } } avg=(double)total/i; printf("total=%d,avg=%.2f",total,avg); } 動作検証もしてなければコードも見直してないけどな。
>>954 ですが、このままでは動かなかったので
以下に訂正したところ、課題が受理されました。
#include <stdio.h>
void main(){
int total=0,i=0,buf;
double avg;
while(1){
scanf("%d",&buf);
if(0<=buf && buf <=100){
i++;
total+=buf;
} else {
break;
}
}
avg=(double)total/i;
printf("total=%d,avg=%.2f",total,avg);
}
ありがとうございます。
boolも使っちゃいかんのか・・・
while使っていいんかい。
>>957 今のところboolは見たことないです。
恐らく「基礎」なので教科書に出た順番でしか
課題が受理されないのではないかと思ってます。
>>958 単元が「while以外の繰り返し」だったのですが、
この設問に限っては ”繰り返しの命令は何を使ってもよい”
みたいです。
紛らわしい書き方してしまったすみません。
961 :
デフォルトの名無しさん :2007/08/23(木) 22:01:59
全くわからない?具体的にはどのあたりが? とりあえず、楽しい暇つぶしになるので問題だけは貰っておく。
書いてある通りにやればいいだけのような気もするが。
って期限過ぎてる \(^o^)/
>>961 前日夜依頼で、朝までは酷な希ガス。
週明けは不可?
そりゃ出来るだろ。
>>969 そういうくだらねぇレスはいらねーってw
969 名前:デフォルトの名無しさん 投稿日:2007/08/24(金) 16:18:18 そりゃ出来るだろ。 ↑なんだこいつ?きめぇ
>>969 んじゃお前が宿題に答えろよ。何が〜だろ、だ、偉そうにw
>>969 出来るならそのやり方も含めてお前が答えろよ
>>969 さぁ、早く、出来るならお前が出来ることを証明してやろうや、な?
口先だけのイン○は嫌われるぜ?ベイベー
>>969 先生!どのようにしたら24ビットフルカラーとかそうでないか判別できますか!教えてプリーズ!
この連レス
>>968 が一人でやってるように見えて仕方ない。
違うなら
>>968 が必死なようにしか見えないから自重しとけ。
>>969 っつーかさぁ、24ビットフルカラーであるかどうかの情報を格納する構造体に、
どのようにヘッダから値を取得するか、その部分のソースをプリーズ!
980 :
961 :2007/08/24(金) 16:34:30
>>966 おっしゃるとおりです。
受け取ってもらえるかわかりませんが、来週月曜日に提出をし
てみるので、お願いします。
>>968 今携帯なので帰ったらみてみます。
ありがとうございます。
色数知る方法知らない奴が知りたくて必死なようにも見えるな。
入力した自然数nの正の約数をすべて表示するプログラムを今、作っているのですが、 int main(void) { int a = 1; int n = 500; int f = n / a; while(a < n) { a += 1; } printf("%d\n",f); return 0; } 上のものは自分がわからないながらも作ったものです。 でもできませんでした。 改善点お願いします。
____
/ \
/ ─ ─ \
/ (●) (●) \
>>969 さん、集中砲火を浴びた気分はどう?
| :::::: (__人__) :::::: |
\. `ー'´ /ヽ
(ヽ、 / ̄) |
| ``ー――‐''| ヽ、. |
ゝ ノ ヽ ノ |
埋まる前に次スレよろしく
そりゃ最悪だろ。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 現在の地域時間から15時間後の日時を表示するプログラムを作成しなさい。 表示形式は日付と時間が表示されれば、自由とします。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: 早ければ早いほど、助かります。 [5] その他の制限: 特にありません。 15時間後の表示方法が思いつかず…。 よろしくお願い致します。
>>986 #include<stdio.h>
#include<time.h>
int main(void){
time_t current;
time(¤t);
current+=60*60*15;
printf("%s\n", ctime(¤t));
return 0;
}
>>986 #include <stdio.h>
#include <time.h>
int main()
{
time_t now;
now = time(NULL) + 3600 * 15;
printf( "%s", ctime(&now));
return 0;
}
集中砲火っていうよりいつものバカが一人で踊っただけだろ。
992 :
983 :2007/08/24(金) 17:33:57
>>987 ,989
助かりました。ありがとうございます!
お仕事が速く、感動致しました…。
993 :
986 :2007/08/24(金) 17:35:08
>>978 #include<windows.h>
#include<stdio.h>
int main(int argc, char *argv[]){
BITMAPFILEHEADER bmpheader;
BITMAPINFO bmpinfo;
char *filename="a.bmp";
FILE *fp;
if(argc==2) filename=argv[1];
fp=fopen(filename, "rb");
if(fp==NULL)
{
fprintf(stderr, "\nError: %s file cannot open.\n", filename);
return 1;
}
fread(&bmpheader, sizeof(bmpheader), 1, fp);
fread(&bmpinfo, sizeof(bmpinfo), 1, fp);
fclose(fp);
printf("width=%ld height=%ld\n", bmpinfo.bmiHeader.biWidth, bmpinfo.bmiHeader.biHeight);
printf("bpp=%d\n", bmpinfo.bmiHeader.biBitCount);
return 0;
}
モザイクフォーマットに懲りそうだな
>>991 = いつもの彼、いつものバカ 白々しいよなぁ、こいつw
>>967 日本と朝鮮をくっつけるなあああああああああああああああああああ
埋め
>>997 君、とりあえず答えることに 挑戦 してみては?
暑い夏にはもってこいのギャグだ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。