C/C++の宿題を片付けます 94代目
レス数が1000を超えています。これ以上書き込みはできません。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 93代目
http://pc11.2ch.net/test/read.cgi/tech/1184506311/
0002デフォルトの名無しさん
2007/07/26(木) 21:32:14私自身が使用してみて、即出会えた出会い系サイトを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトのみを厳選して薦めております。
フリーアドレスで登録できるサイトを拡充しました!
↓↓↓
【ブログ 〜即出会えるサイト】
http://deaigets.blog97.fc2.com/
0003デフォルトの名無しさん
2007/07/26(木) 21:32:16スレたて乙
0004デフォルトの名無しさん
2007/07/26(木) 21:36:23【回答者へ】
gdgd質問者をネチネチと嬲ったり詰ったりしていないでソースで答えを示せ!
0005デフォルトの名無しさん
2007/07/26(木) 21:59:26答えを出せば何をやってもいいという意味ではないので勘違いなきよう
0006デフォルトの名無しさん
2007/07/26(木) 22:05:00質問者は神様ですか?
0007デフォルトの名無しさん
2007/07/26(木) 22:06:130008デフォルトの名無しさん
2007/07/26(木) 22:07:28持ちつ持たれつ、かな。どっちもいないとスレが成立しない。
0009デフォルトの名無しさん
2007/07/26(木) 23:14:220010デフォルトの名無しさん
2007/07/26(木) 23:39:590011デフォルトの名無しさん
2007/07/27(金) 00:03:200012デフォルトの名無しさん
2007/07/27(金) 00:22:57そう、お前みたいな奴が来なくても成立するから二度と来るな
0013デフォルトの名無しさん
2007/07/27(金) 00:24:03無くなっても特別困ることは無いと思う。あると便利だけど。
0014デフォルトの名無しさん
2007/07/27(金) 00:27:120015デフォルトの名無しさん
2007/07/27(金) 00:29:230016デフォルトの名無しさん
2007/07/27(金) 00:29:500017デフォルトの名無しさん
2007/07/27(金) 00:30:230018デフォルトの名無しさん
2007/07/27(金) 00:30:500019デフォルトの名無しさん
2007/07/27(金) 00:31:570020桜
2007/07/27(金) 01:21:19[2] 問題文(含コード&リンク): POSデータ解析システム
K氏は、3つのコンビニエンスストア(X店、Y店、Z店)をチェーン店に持つオーナーです。コンビ
ニエンスストアの経営において、売れ筋商品と死に筋商品の的確な把握は死活問題に直結する重要な業務
です。そこでK氏は、チェーン店に、毎日どんな商品がどれくらい売れたのかといった販売情報を、CS
Vファイルとして送るように指示していました。しかし、送られてくるデータファイルは膨大であり、そ
れらを統合して、全店を通して最も売れた商品はどれで、何が売れていないかを把握することは困難でし
た。つまり、送られてくるデータを適切に活用できないでいました。そこで、K氏はあなたに、こういっ
たことを解決するシステム(POSデータ解析システム)を開発するように頼みました。K氏は、毎日送
られてくるX、Y、Z店の個別の販売情報を合計した一括データを入手したいそうです。
0021桜
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 個も売れなかった商品情報は載せないことにしました。
0022デフォルトの名無しさん
2007/07/27(金) 01:23:58http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0023桜
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);
ここまでなら習っています。ここから続きが全くわかりません。どなたか是非教えてください。本当にお願いします。あと変数と関数の意味、工夫点を明記してくれたら助かります。
0024デフォルトの名無しさん
2007/07/27(金) 02:06:390025デフォルトの名無しさん
2007/07/27(金) 02:08:01[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
で値を読み込む所まではわかったのですが、その後の計算方法が全くわかりません。
どうぞご教授願います。
0026デフォルトの名無しさん
2007/07/27(金) 02:41:26[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] その他の制限:「なお確率分布は
乱数の初期値を変えて何度もシミュレーションを行い、
そのヒストグラムから求めること。 」
といっている意味がよく分からないのでそこのところを詳しく説明して
いただけると幸いです。
どうかご教授よろしくお願いします。
0027デフォルトの名無しさん
2007/07/27(金) 02:49:05くそーす
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4767.c
0028桜
2007/07/27(金) 02:50:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
こちらに店舗からのファイルとか単価情報とかのサンプル載せました。
0029デフォルトの名無しさん
2007/07/27(金) 03:11:390030デフォルトの名無しさん
2007/07/27(金) 04:27:55超くそーす とりあえず動く 合ってるかわかんね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4768.c
0031デフォルトの名無しさん
2007/07/27(金) 05:49:21#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;
}
0032デフォルトの名無しさん
2007/07/27(金) 06:02:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4770.c
被った….
0033デフォルトの名無しさん
2007/07/27(金) 06:03:540034デフォルトの名無しさん
2007/07/27(金) 08:18:41確率間違ってない?
0035前すれ998
2007/07/27(金) 09:01:33> put_word(stdout, column, buf, !first);
は
if(buf[0])
{
put_word(stdout, column, buf, !first);
first = 0;
}
の間違い。再三すまん。
0036デフォルトの名無しさん
2007/07/27(金) 13:32:32[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言語さっぱりです
0037デフォルトの名無しさん
2007/07/27(金) 14:17:33#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;
}
0038デフォルトの名無しさん
2007/07/27(金) 14:18:40#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;
}
0039デフォルトの名無しさん
2007/07/27(金) 14:21:34たすかりました!
ありがとうございました^^
0041デフォルトの名無しさん
2007/07/27(金) 20:07:260042デフォルトの名無しさん
2007/07/27(金) 20:13:37つ�I
0043デフォルトの名無しさん
2007/07/27(金) 20:16:47つ�I
0044デフォルトの名無しさん
2007/07/27(金) 20:24:41つ�I�I�I�I
0045デフォルトの名無しさん
2007/07/27(金) 20:25:15[2] 問題文(含コード&リンク):
「1、整数nを受け取り、パスカルの三角形を印字する戻り値のない関数を作成せよ。
ただし、関数内では2次元配列を大きめに宣言し、配列とくり返し構造を用いて実現すること。」
さらに、
「2、1のパスカルの三角形を1次元配列で実現せよ。」
という問題です。
配列が苦手で、書き方がさっぱりわかりません。どうぞお力を貸してください。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: できれば今日中にお願いします。
[5] その他の制限: 配列を使ってお願いします。
0046デフォルトの名無しさん
2007/07/27(金) 20:44:36void 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");
}
}
0047デフォルトの名無しさん
2007/07/27(金) 21:11:22void 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");
}
}
0048デフォルトの名無しさん
2007/07/27(金) 21:20:220049デフォルトの名無しさん
2007/07/27(金) 21:24:07#include <stdio.h>
void pascal_triangle(int n){}
int main(void) {
int n;
scanf("%d",&n);
pascal_triangle(n);
return 0;
}
0050デフォルトの名無しさん
2007/07/27(金) 21:29:260051デフォルトの名無しさん
2007/07/27(金) 21:30:03つ�S
0052デフォルトの名無しさん
2007/07/27(金) 21:34:13つ●
0053デフォルトの名無しさん
2007/07/27(金) 21:37:080054デフォルトの名無しさん
2007/07/27(金) 22:09:50どうもありがとうございました。
助かりました。
0055デフォルトの名無しさん
2007/07/27(金) 23:40:34っ ちゃんと動くソース
0056デフォルトの名無しさん
2007/07/27(金) 23:54:52文字列から読むやつでつ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4778.c
0057デフォルトの名無しさん
2007/07/27(金) 23:56:400058デフォルトの名無しさん
2007/07/28(土) 00:19:290059デフォルトの名無しさん
2007/07/28(土) 00:40:47>>58 すべってますよ。あ〜、みんなそのねたあきちゃった。ざんねん。
0060デフォルトの名無しさん
2007/07/28(土) 00:45:45とりあえず自分の出すソースに自信が無いなら出さなくてもおk
自分の回答よりヘボな回答が出たら、
自分のほうが上だと優越感に浸りながら、ただROMってろ
0061デフォルトの名無しさん
2007/07/28(土) 01:14:050062デフォルトの名無しさん
2007/07/28(土) 01:28:17[2] 問題文(含コード&リンク):
再帰関数を用いて、以下のように斜辺の長さが等しい(長さは入力)三角形を印字せよ。
さらに*の個数も印字せよ。
入力:3
*
**
***
**
*
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4779.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2007年7月25日22:00まで
[5] その他の制限:
0063デフォルトの名無しさん
2007/07/28(土) 01:29:330064デフォルトの名無しさん
2007/07/28(土) 01:36:140065デフォルトの名無しさん
2007/07/28(土) 01:43:29「PCの時計が1年狂ってました m(_ _)m」でどう?
0066デフォルトの名無しさん
2007/07/28(土) 01:43:53{ 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;}
006765
2007/07/28(土) 01:48:12int 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 ) );
}
006865
2007/07/28(土) 01:51:15あと、printStars(int)関数は適当に脳内補完して。
ついでに、デバッグしてないから ノシ
006965
2007/07/28(土) 01:53:260070デフォルトの名無しさん
2007/07/28(土) 02:32:04[2] 問題文(含コード&リンク):
配列を用いて10桁同士の足し算をする関数を作成する。
入力と出力はメインで行い、関数内で計算すること。
引き算とかけ算もあるのですが、まず足し算の方法がわからないので、教えて頂けないでしょうか。
本当に困っています。よろしくお願いしますm(_ _)m
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: ([2007年7月28日23:00まで] )
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
配列の単元なので、配列でお願いします。
0071デフォルトの名無しさん
2007/07/28(土) 02:49:59#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;}
0072デフォルトの名無しさん
2007/07/28(土) 10:37:26質問者をネチネチ詰るんだよな。良いからgdgd言ってねーでお前のウンコソースを出せ!
ウンコソースって言っても下痢じゃねーぞ
0073デフォルトの名無しさん
2007/07/28(土) 10:49:44#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;
}
0074デフォルトの名無しさん
2007/07/28(土) 10:57:49007573
2007/07/28(土) 11:10:16文句あっか
0076デフォルトの名無しさん
2007/07/28(土) 11:12:19[2] Time関数を用いてストップウォッチを作りなさい。
また、何か入力し時間を止めるまで現在の経過時間を表示させる事。
[3] 環境
[3.1] windowsXP
[3.2] VC 6.0
[3.3] C言語のみ
[4] 期限:2007年8月1日までに提出
[5] 基礎は一通りやりました。
「何か入力があるまで経過時間を表示させておく」
という所が全く分からず困っています。
0077デフォルトの名無しさん
2007/07/28(土) 11:24:51常に全力で時間を表示する
#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;
}
0079デフォルトの名無しさん
2007/07/28(土) 11:46:110080not 77
2007/07/28(土) 12:16:27clock()が返すのは
「プログラムが実際に使用したCPU時間」だよ。
「プログラムが起動後に経過した時間」ではない。
返してくる値は実装によってかなりまちまちなのが実情で、
ぶっちゃけ役に立たない関数だと思われ。
time()は秒単位でしか計れないのが欠点だが、他に移植性がそこそこ
ありそうで使えそうな関数は無い。
ま、>>77はどうせkbhit()なんてものを使ってるんだから、API使えばいいだろな。
0081デフォルトの名無しさん
2007/07/28(土) 13:02:25四捨五入はまずいだろ。
0082デフォルトの名無しさん
2007/07/28(土) 13:06:15大丈夫、整数だ。
0083プログラミング初心者
2007/07/28(土) 14:47:43[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日まで
0084プログラミング初心者
2007/07/28(土) 14:49:02#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;
}
デバッグ後に何すればいいか教えてください
0085デフォルトの名無しさん
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;
}
0086デフォルトの名無しさん
2007/07/28(土) 15:07:23これでやってみて
//比較を始める位置を最初からn-1まで変えていく
for(BeginPlace = 0;BeginPlace < ((((((((n-1))))))));BeginPlace++)
{
//n - BeginPlaceまで比較する
for(ComparePlace = ((((((((BeginPlace+1))))))));ComparePlace < ((((((((n))))))));ComparePlace++)
0087デフォルトの名無しさん
2007/07/28(土) 15:08:470088デフォルトの名無しさん
2007/07/28(土) 15:42:48void 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;
}
}
}
}
0089デフォルトの名無しさん
2007/07/28(土) 16:02:44それってバブルソート?
0090デフォルトの名無しさん
2007/07/28(土) 16:09:420091デフォルトの名無しさん
2007/07/28(土) 16:23:42for(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++){
ではなくて?
0092デフォルトの名無しさん
2007/07/28(土) 16:31:16for(i=0; i+1 < elements; i++){
for(j=0; j+1 < elements-i; j++){
こうじゃね?
0093デフォルトの名無しさん
2007/07/28(土) 16:36:100094デフォルトの名無しさん
2007/07/28(土) 16:47:26[2] 問題文(含コード&リンク):
□☆□□□☆□□□☆□□□☆□
☆★☆☆☆★☆☆☆★☆☆☆★☆
□☆□□□☆□□□☆□□□☆□
□☆□□□☆□□□☆□□□☆□
☆★☆☆☆★☆☆☆★☆☆☆★☆
□☆□□□☆□□□☆□□□☆□
上記の規則的パターンを出力するプログラムを作成し
表示サイズを実行時にコマンドライン引数で渡せるようにせよ。
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: VS 2005
[3.3] 言語: C
[4] 期限: 2007年07月30日11:59まで
[5] その他の制限: 特になし。
0095デフォルトの名無しさん
2007/07/28(土) 16:51:430096デフォルトの名無しさん
2007/07/28(土) 16:54:10表示サイズの定義がわからん。
その例は表示サイズ3でいいのか?
009788
2007/07/28(土) 17:09:5691さんの通りです。
0098デフォルトの名無しさん
2007/07/28(土) 17:16:02それはない
最初のi=0,j=0 で比較してるし(意味がなく冗長)
;i+1 < elements; で配列超えているし
0099デフォルトの名無しさん
2007/07/28(土) 17:19:27#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;
}
0100デフォルトの名無しさん
2007/07/28(土) 17:23:22縦3×横4のパターンと見えるが、それを最小単位として良いか?
それとも、この縦6×横15が、パターンの最小単位とするのか?
指定する表示サイズとは、行数×文字数か?
それともパターンを単位として、縦繰返し数×横繰返し数とするか?
0102デフォルトの名無しさん
2007/07/28(土) 17:36:02だからその指定があいまいなんだって。
>94の例なら6行15文字だが仮に4行10文字の指定がきたら
□☆□□□☆□□□☆
☆★☆☆☆★☆☆☆★
□☆□□□☆□□□☆
□☆□□□☆□□□☆
こんな表示で良いのか?
0103デフォルトの名無しさん
2007/07/28(土) 17:38:040105デフォルトの名無しさん
2007/07/28(土) 17:41:00表示するなら簡単だが、>94の例みたいに対象となるように
表示するならそれなりに考える必要がでてくるじゃん。
0106デフォルトの名無しさん
2007/07/28(土) 17:48:300107デフォルトの名無しさん
2007/07/28(土) 18:01:18#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;
}
0108デフォルトの名無しさん
2007/07/28(土) 18:04:17全角文字の%c出力はまずい気がするんだ・・・
0109デフォルトの名無しさん
2007/07/28(土) 18:04:38char 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;
}
0110デフォルトの名無しさん
2007/07/28(土) 18:06:470111デフォルトの名無しさん
2007/07/28(土) 18:09:08俺は>94の例がちょうど左右上下対称になってるから
てっきりそういう風にするもんだと思ってしまった・・・
0112デフォルトの名無しさん
2007/07/28(土) 18:10:31環境によっては問題あるの?
うちではうまくいくんだが。
0113デフォルトの名無しさん
2007/07/28(土) 18:11:482バイト文字に対応していない環境なんてたくさんあると思うんだが・・・
0114デフォルトの名無しさん
2007/07/28(土) 18:12:49頭が良いと答えられなくなるのかもw
0115デフォルトの名無しさん
2007/07/28(土) 18:21:55[2]問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4780.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ: gcc
[3.3] 言語: C
[4] 期限:7/30 午前中まで
[5]その他の制限:特になし
3次元配列を使えばいいといわれましたが、わからないので・・
0116デフォルトの名無しさん
2007/07/28(土) 19:09:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4781.c
0117 ◆xdqL6ZHhIs
2007/07/28(土) 19:29:15[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まで]続き↓
0118 ◆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
0119デフォルトの名無しさん
2007/07/28(土) 19:55:23#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;
}
0120デフォルトの名無しさん
2007/07/28(土) 19:58:45↓
if(line[n-1]=='\n') n--;
0121デフォルトの名無しさん
2007/07/28(土) 20:05:39for(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使ってないけど別にいいか
0122デフォルトの名無しさん
2007/07/28(土) 20:09:26gccだとwarningではなくcompile error だぞ
0124デフォルトの名無しさん
2007/07/28(土) 20:20:50c++としてコンパイルするのでなければプロトタイプ宣言は必須じゃないのだけれど。
0128デフォルトの名無しさん
2007/07/28(土) 20:58:46微妙に違ってる
0129デフォルトの名無しさん
2007/07/28(土) 21:36:58[2] 問題文(含コード&リンク):
nを読み込んで第n項までのフィボナッチ数を印字するプログラムを繰り返しを用いて作成しなさい。
再帰での書き方はわかったのですが、繰り返しを使う書き方がわかりません。
どうぞよろしくお願いします。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年7月29日23:00まで
[5] その他の制限: 繰り返しを使ってお願いします。for,while,doどれでも結構です。
よろしくお願いします。
0130デフォルトの名無しさん
2007/07/28(土) 21:48:58int 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;
}
0131#
2007/07/28(土) 21:51:03[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] その他の制限:なし
0132デフォルトの名無しさん
2007/07/28(土) 21:51:56fib(n); → printf("%d\n", fib(n));
0133デフォルトの名無しさん
2007/07/28(土) 21:57:33#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;
}
0134デフォルトの名無しさん
2007/07/28(土) 22:03:43{
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;
}
0135デフォルトの名無しさん
2007/07/28(土) 22:04:40#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; }
0136デフォルトの名無しさん
2007/07/28(土) 22:13:59>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の時が終了?
0137#
2007/07/28(土) 22:25:07すいません、説明不足でした。
n a1 a2 ・・・・ an(数値で表すと 10 2 7 1 8 2 8 1 8 2 8)
のような形式の行が連続したものです。
nの値が0であった時に終了します。
0138デフォルトの名無しさん
2007/07/28(土) 22:29:31#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;
}
0139#
2007/07/28(土) 22:46:26本当にありがとうございました。
0140デフォルトの名無しさん
2007/07/28(土) 23:24:45>133
>134
>135
皆様どうもありがとうございました。
おかげで、無事に完成させることができました。
0141デフォルトの名無しさん
2007/07/28(土) 23:27:360142デフォルトの名無しさん
2007/07/28(土) 23:45:53#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;
}
0143#
2007/07/29(日) 00:06:18構造体を使わないやり方ですね。
思いつきませんでした…
ありがとうございます!
0144デフォルトの名無しさん
2007/07/29(日) 00:06:390145デフォルトの名無しさん
2007/07/29(日) 00:09:45いや、構造体じゃなくて(^_^)
0146デフォルトの名無しさん
2007/07/29(日) 00:16:34いやいや俺だ
0147デフォルトの名無しさん
2007/07/29(日) 00:20:510148デフォルトの名無しさん
2007/07/29(日) 00:31:13[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] その他の制限: なし
0149名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:34:56[2] 問題文(含コード&リンク):
自然数nを受け取り、nの全ての約数を昇順に印字し、
さらにそれらの総和を戻す再帰関数を作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2007年7月29日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
再帰関数を習っています。
約数を昇順に印字するところからわかりません。
どうぞよろしくおねがいします。
0150名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:41:35ねるとん か!?
0151名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:45:16例えばnが12の時は、12=2*2*3だから
2 2 3と出力して、7を返せばいいの?
それとも、2 3と出力して、5を返せばいいの?
0152名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:48:440153名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:51:21確かにそれもありだな
0154名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:54:00更に自分自身を除くと言う条件がついていれば完全数チェックに使えるけど。
0155名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:58:54説明不足で申し訳ありません。
152さんのように出力できるようにお願いします。
0156名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:05:57さてどこで使うと良いのか、思案中w
0157名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:06:56再起をどう使うのか、難しいな。
再帰なら簡単に使えるのだが。
0158名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:08:170159名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:11:350160名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:17:370161名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:19:52if((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文のほうがスマート
0162名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:20:140163名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:21:19再帰関数だけ。
いまいちスマートじゃないが、気にしない。
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;
}
0164名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:27:240165460
2007/07/29(日) 01:54:07てすつ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);
0166460って何だ?
2007/07/29(日) 01:54:59for(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;
}
0167名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:57:09161さんにお聞きしたいのですが、nに数字を読み込むということで合っていますか?
また、divはどのような働きをするのか、教えていただけないでしょうか。
勉強不足のため、お手をわずらわせて大変申し訳ありませんが、お願いできましたら幸いです。
0168名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:04:20再起不能者が、再起のために非再帰版で回答。
皆が言っているようにこの方が簡単だと思う。
#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;
}
0169名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:09:08てすつ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);
0170名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:09:41while( 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;
}
0171168
2007/07/29(日) 02:10:24酒気帯びモードなので、今日は再起出来ないかも
0172名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:17:59おらあ呑めば呑むほど強くなるぜ三度目の正直どうだー
#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);
0173名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:18:32for(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;
}
0174172
2007/07/29(日) 02:20:120175デフォルトの名無しさん
2007/07/29(日) 02:24:41インデントつけたら、見る方にとっては、コピペしたとき
邪魔なだけなんじゃないか?
0176名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:25:220177名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:28:250178名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:37:45頼むから痴漢はしちゃだめだぞ。
0179名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:39:160180名無しさん@そうだ選挙に行こう
2007/07/29(日) 08:16:010181名無しさん@そうだ選挙に行こう
2007/07/29(日) 08:40:340182名無しさん@そうだ選挙に行こう
2007/07/29(日) 08:49:02それって、 がペーストされるんだけど。
0183名無しさん@そうだ選挙に行こう
2007/07/29(日) 09:07:220184名無しさん@そうだ選挙に行こう
2007/07/29(日) 09:34:06それは使ってるブラウザに依る。
JaneやIEなら半角スペースがペーストされるはず。
0185デフォルトの名無しさん
2007/07/29(日) 10:54:57Janeだとnbsp;に変換されてて多少面倒だね
まあそんな細かいことどーでもいいじゃないか
0186名無しさん@そうだ選挙に行こう
2007/07/29(日) 11:04:130187名無しさん@そうだ選挙に行こう
2007/07/29(日) 11:17:14#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;
}
読みやすい?
0188名無しさん@そうだ選挙に行こう
2007/07/29(日) 11:46:540189名無しさん@そうだ選挙に行こう
2007/07/29(日) 13:29:36[2] 問題文(含コード&リンク):
ダイクストラのアルゴリズムをプログラミングせよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2007/8/10
[5] その他の制限:
アップローダに書きかけのプログラムをアップしました。
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4782.txt
0190名無しさん@そうだ選挙に行こう
2007/07/29(日) 13:31:45気持ちよさそうだなw
0192名無しさん@そうだ選挙に行こう
2007/07/29(日) 15:55:03int x,y;
if( argc > 2 ){
sscanf(argv[1],"%d",&x);
sscanf(argv[2],"%d",&y);
試してないけどたぶんこんな流れ
0193名無しさん@そうだ選挙に行こう
2007/07/29(日) 15:59:56>>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;
}
0194デフォルトの名無しさん
2007/07/29(日) 16:00:16なんかお題くれ
0195名無しさん@そうだ選挙に行こう
2007/07/29(日) 16:11:430196名無しさん@そうだ選挙に行こう
2007/07/29(日) 16:15:15まぁまだ投票してない俺が言えた事じゃないが
019794
2007/07/29(日) 16:16:24おぉ、スッキリしました。ありがとですー。
>>193
ふむふむ。休み期間中にこれくらいは自力で作れるようにならないとなぁ。
ありがとですー。
0198名無しさん@そうだ選挙に行こう
2007/07/29(日) 16:22:06任意の個数まで、あるいは任意の文字列まで数値を取得し
配列に格納した後表示させよ。
たとえば終了文字列を"end"にするなら(この文字列は既知として良い)
入力>12 378aaa98fff90 end78aa9
格納される数値:12,37,98,90
みたいな。
この場合endに当たらない限り、任意の個数分の数値を格納するまで
改行しようが読み続ける仕様。
別に宿題じゃなくて、暇って言うから考えただけだから
実行例の形とかは適当に。
0199名無しさん@そうだ選挙に行こう
2007/07/29(日) 16:29:590200名無しさん@そうだ選挙に行こう
2007/07/29(日) 16:55:39>>930への解答を考えているんだけど、
任意の桁数の乗算ができるような関数を考えてみないか?
入力 12345678901234567890 * 12345678901234567890
出力 152415787532388367501905199875019052100
こんな感じ。
0201名無しさん@そうだ選挙に行こう
2007/07/29(日) 16:56:190202名無しさん@そうだ選挙に行こう
2007/07/29(日) 18:02:21http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4783.txt
いちいちフリーすんのがウゼーし
mul(x, mul(y, z, 10), 10) とか書くとリークするので
GCが欲しいな。
>>194は頑張って四則演算全てに対応してくれw
02031194
2007/07/29(日) 19:15:06(1000とかなら、いけるんだけどな・・・)
0204名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:43:40[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] その他の制限: 配列、再帰 両方でお願いします。
0205名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:50:46[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] その他の制限: 配列、再帰 両方でお願いします。
0206名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:51:56すみません。
0207名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:53:020208名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:55:140209名無しさん@そうだ選挙に行こう
2007/07/29(日) 20:01:54#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;
}
0210209
2007/07/29(日) 20:02:59まあいいや
0211デフォルトの名無しさん
2007/07/29(日) 20:45:290212デフォルトの名無しさん
2007/07/29(日) 20:48:39[2] 問題文(含コード&リンク):
n個(nは入力する)の実値を入力し、それらの合計と平均を求めるプログラムを、繰り返し構造を用いて書きなさい。
n個入力するという所の書き方が特にわかりません。
ご教授願いますm(__)m
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年7月31日20:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0213デフォルトの名無しさん
2007/07/29(日) 20:54:48int i;
double sum = 0.0, tmp;
for(i = 0 ; i < 10 ; i++) {
scanf("%lf", &tmp);
sum += tmp;
}
sumが合計
sum/10が平均
0214デフォルトの名無しさん
2007/07/29(日) 21:12:08#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;
}
コンパイルしてないからケアレスミスとかシラネ。
0215デフォルトの名無しさん
2007/07/29(日) 21:28:23214さん
ありがとうございました^^)
0216デフォルトの名無しさん
2007/07/29(日) 21:40:41#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; }
0217デフォルトの名無しさん
2007/07/29(日) 22:02:12[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
全くわかりません;本当に困っています。
どうぞよろしくお願いします。
0218デフォルトの名無しさん
2007/07/29(日) 22:08:43#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;
}
0219217
2007/07/29(日) 22:39:07ありがとうございます!!
forだけでこんなにきれいにできるんですね。
0220デフォルトの名無しさん
2007/07/29(日) 22:49:37#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;
}
0221デフォルトの名無しさん
2007/07/29(日) 23:07:010なるほど、そうすればいいんだ
0222デフォルトの名無しさん
2007/07/29(日) 23:08:050#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;
}
0223お願いします
2007/07/29(日) 23:13:380[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);
}
続き↓
0224お願いします
2007/07/29(日) 23:15:330[3] 環境
[3.1] OS:Windows
[3.2] gcc 3.4
[3.3] 言語: C
[4] 期限: [2007年07月31日20:00まで]
[5] その他の制限:for文で作れと言われました。
もう何を先にやったら良いのかもわかりません。
どうかお願いしますm(*_ _)m
0225デフォルトの名無しさん
2007/07/29(日) 23:32:210[2] 問題文(含コード&リンク):
16bitの2進数を受け取り、その10進数を戻すint型の関数を作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年7月31日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
全く解けなくて困っています。
関数、配列の基礎的なことは習いました。
どうぞよろしくお願いします。
0226デフォルトの名無しさん
2007/07/29(日) 23:34:480[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まで。
0227デフォルトの名無しさん
2007/07/29(日) 23:44:460#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;
}
0228デフォルトの名無しさん
2007/07/30(月) 00:07:41[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] その他の制限: 特になし
期限が近いですがお願いいたします
0229デフォルトの名無しさん
2007/07/30(月) 00:29:29[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4784.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
[3.3] 言語:C
[4] 期限:2007/7/31(火) 14:30
[5] その他の制限:入力にfopen系関数を使用しない。
入力は、コマンドプロンプトから入力が保存されたテキストファイルを読み込む方法で行う。
0230デフォルトの名無しさん
2007/07/30(月) 00:36:34double 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);
0231デフォルトの名無しさん
2007/07/30(月) 00:38:26へー、さっぱりわかんねーや
0232デフォルトの名無しさん
2007/07/30(月) 00:39:50確認してないけど
#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;
}
0233デフォルトの名無しさん
2007/07/30(月) 00:46:07かと思った。どっちにもとれるな。
0234お願いします
2007/07/30(月) 01:11:00ありがとうございます。やってみますm(*_ _)m
0235202
2007/07/30(月) 01:33:08それ俺へのレス?
ソースの中の10とか書いてるのは桁数じゃなくて基数だよ。
10進数なら10。
2〜10なら何でも良い。16進数とかにも対応したければ、文字列との
変換の部分を直さないといけないな。
0236デフォルトの名無しさん
2007/07/30(月) 01:40:10#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;
}
0237デフォルトの名無しさん
2007/07/30(月) 06:10:36[問題]
入力データファイルが用意されている。
仕様
入力データ件数10件
1件に最大100文字(半角文字とする)
入力データは、文字型1次元配列(サイズ101)に格納
文字の種類は最大200種類(文字型一次元配列使用)
但し、入力した文字列中の改行は("\n")マークは処理対象外
文字コード順に並べて出力する
出力図形は
1行に最大25文字(文字区切りに1カラム空白)
構成文字(並べ替え済み)を出力する
0238デフォルトの名無しさん
2007/07/30(月) 07:56:44【空欄1】 next
【空欄2】 prev
多分。
0239デフォルトの名無しさん
2007/07/30(月) 10:27:06この問題の(3)標準偏差と(4)相対係数が分かりません。
どうか教えて頂けないでしょうか・・・?
よろしくお願い致します。
0240デフォルトの名無しさん
2007/07/30(月) 10:37:36大変失礼致しました。
もしお時間がございましたらよろしくお願いいたします。
[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] その他の制限: 特にありませんが、出来る限り単純なプログラムでお願いいたします。
0241デフォルトの名無しさん
2007/07/30(月) 10:38:400242デフォルトの名無しさん
2007/07/30(月) 11:28:15>>240
標準偏差の求め方は、平均をだし、個々のデータからその平均値を引き
次に、その平均値を引いた個々のデータを二乗する。
次にその二乗した個々のデータの合計をデータの数で割る。
その割った数値の平方根を取る。
これが標準偏差。
データファイルくらい用意しとけ。
0243デフォルトの名無しさん
2007/07/30(月) 12:32:14[2] 問題文(含コード&リンク):
•演算子のオーバーロードを用いた独自のプログラムを作成しなさい。
なお,ニ項演算子,単項演算子,関係演算子,論理演算子のオーバーロードをそれぞれ最低1つは用いること。
また,意味のないプログラム(出力するだけなど)は避けること。
[3] 環境
[3.1] OS: xp
[3.2] visual studio 2005
[3.3] 言語: c++
[4] 期限: 2007/7/31/〜10:00
[5] その他の制限:特に無し
よろしくお願いします。
0244デフォルトの名無しさん
2007/07/30(月) 13:59:38[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] その他の制限:特にありません。
よろしくお願いします。
0245デフォルトの名無しさん
2007/07/30(月) 14:10:18#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;
}
0246デフォルトの名無しさん
2007/07/30(月) 14:21:45[2]問題:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4785.txt
[3]環境
OS:リナックス
コンパイラ:gcc
言語:C
[4]期限:8月1日まで
どうぞよろしくお願いします。
0247デフォルトの名無しさん
2007/07/30(月) 15:21:31迅速な解答ありがとうございます
0248デフォルトの名無しさん
2007/07/30(月) 15:46:20http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4786.txt
0249デフォルトの名無しさん
2007/07/30(月) 17:56:27[2] 基本的なクイックソートは、すでに昇順、あるいは降順に並んでいる
データにたいして、最悪の振る舞い、すなわち計算量O(nの2乗)を示すことを説明せよ
[3] 環境
[3.1] OS: win XP
[3.2] cygwin
[3.3] 言語: C
[4] 期限: 無期限
よろしくお願いします
0250デフォルトの名無しさん
2007/07/30(月) 18:37:50[2]次の文を if 文を使って分かりやすく書き直せ。
feb = (y % 400 == 0) ? (y % 100 == 0) ? 28 : (y % 4 == 0) ? 29 : 28
: (y % 4 == 0) ? 29 : 28;
※これは閏年の2月の日にちを求めるものではない。
[3]C言語
0251デフォルトの名無しさん
2007/07/30(月) 19:01:46feb = 29;
else
feb =28;
0252デフォルトの名無しさん
2007/07/30(月) 19:25:35[2] n 3
J= Σ K (←Kの3乗です)とする時J>=3000となる最も小さいnの値を求め、その時のJの値も示せ。
k=1
[3]Windows C++
[4]早いほどうれしいです
初学者です。こんな問題も解けませんorz 3乗をループで足していく表現がわかりません。
よろしくお願いします
0253デフォルトの名無しさん
2007/07/30(月) 20:01:37int j = 0;
for (k = 1; j < 3000; ++k) {
j += k * k * k;
}
printf("n:%d, J:%d\n", k, j);
0254デフォルトの名無しさん
2007/07/30(月) 20:16:32#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;
}
0255デフォルトの名無しさん
2007/07/30(月) 20:27:330256デフォルトの名無しさん
2007/07/30(月) 22:49:11ありがとうございます!
もし余裕がありましたら、他の問題もお願いします。
0257デフォルトの名無しさん
2007/07/30(月) 23:38:16>>249
下のような感じでいいんでないか
http://www.akita-pu.ac.jp/system/elect/comp1/kusakari/japanese/teaching/SoftTech/2005/note/5/Slide18.html
0258デフォルトの名無しさん
2007/07/30(月) 23:40:51コマンドプロンプトからテキストファイルってどうやって読み込むの?
0259デフォルトの名無しさん
2007/07/30(月) 23:56:290260デフォルトの名無しさん
2007/07/30(月) 23:57:42実行プログラム名 < filename.txt
でファイルに記述されている文字列を標準入力で入力したデータとして扱えるがそれだろう
0261デフォルトの名無しさん
2007/07/31(火) 00:03:50[2] 問題文(含コード&リンク):
以下のような三角形を印字するプログラムを作成せよ。
配列を使う場合と使わない場合の両方を書け。
入力:6
1
202
30003
4000004
500000005
66666666666
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: ([2007年7月31日まで])
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
どうかよろしくお願いします。
0262デフォルトの名無しさん
2007/07/31(火) 00:09:43配列使わないほうだけ
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);
}
0263デフォルトの名無しさん
2007/07/31(火) 00:16:23#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;
}
0264デフォルトの名無しさん
2007/07/31(火) 00:17:28C言語で。
0265デフォルトの名無しさん
2007/07/31(火) 00:18:38>>261をポップアップしてみてw
0266デフォルトの名無しさん
2007/07/31(火) 00:27:50#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;
}
0267デフォルトの名無しさん
2007/07/31(火) 00:33:10for(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);
}
0268デフォルトの名無しさん
2007/07/31(火) 00:33:57int 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);
}
0269デフォルトの名無しさん
2007/07/31(火) 00:35:410270デフォルトの名無しさん
2007/07/31(火) 00:37:160271デフォルトの名無しさん
2007/07/31(火) 00:42:07宿題スレなんだから効率より可読性の方が大事だろ頭使えよwww
0272デフォルトの名無しさん
2007/07/31(火) 00:46:150273デフォルトの名無しさん
2007/07/31(火) 00:48:170274デフォルトの名無しさん
2007/07/31(火) 00:50:53http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4789.txt
0275デフォルトの名無しさん
2007/07/31(火) 00:55:59いつもの人はそんなところにまで頭回らない
0276デフォルトの名無しさん
2007/07/31(火) 00:56:29wwwwwwwwwww
0277デフォルトの名無しさん
2007/07/31(火) 01:53:52こいつはバカか?ソースコードとしても読みづらいことに気づいていないようだ。素人以下だな
0278デフォルトの名無しさん
2007/07/31(火) 01:57:06for(j=0 ; j<2*(i-1)-1 ; j++) < もっと簡単な式にできるだろ常識的に考えて
if(i==n) printf("%d", i); < えっ!?
else putchar('0'); < ん!?
0279デフォルトの名無しさん
2007/07/31(火) 01:58:370280デフォルトの名無しさん
2007/07/31(火) 01:58:44#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;}
0281デフォルトの名無しさん
2007/07/31(火) 02:01:120282デフォルトの名無しさん
2007/07/31(火) 02:03:41>>266のは1以下の値を入れるとナニコレ?って感じ
0283デフォルトの名無しさん
2007/07/31(火) 02:05:500284デフォルトの名無しさん
2007/07/31(火) 02:07:20#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;
}
0285280
2007/07/31(火) 02:07:53include <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;
}
0286デフォルトの名無しさん
2007/07/31(火) 02:07:550287デフォルトの名無しさん
2007/07/31(火) 02:08:170288デフォルトの名無しさん
2007/07/31(火) 02:10:19もう少し詳しく
0289デフォルトの名無しさん
2007/07/31(火) 02:10:23大まかな荒い部分に気づかない時点でアウトだろ、素人は余所へ行け
0290デフォルトの名無しさん
2007/07/31(火) 02:13:140291デフォルトの名無しさん
2007/07/31(火) 02:13:180292デフォルトの名無しさん
2007/07/31(火) 02:13:50いつかは趣味が変わってウホッになる奴もいるもんさ
0293デフォルトの名無しさん
2007/07/31(火) 02:14:22必死すぎて浮いてますよ・・・
0294デフォルトの名無しさん
2007/07/31(火) 02:16:05ソースコードを短くすることだけにこだわる時期なんだろ。
↑こいつはバカか?短くすること だけ って、アホ杉。。。
0295デフォルトの名無しさん
2007/07/31(火) 02:16:37もう一度書き直すまで待ってやる
0297デフォルトの名無しさん
2007/07/31(火) 02:28:06>>261をポップアップ
0298280
2007/07/31(火) 02:33:35すまん、開いたけど、分からない。
配列じゃない奴は皆さん書いてたから、
配列に限定してあれこれやってみたんだが。
もしかして、ピラミッド状にしろと言うことなのかな?
0299デフォルトの名無しさん
2007/07/31(火) 02:35:520300280
2007/07/31(火) 02:38:160301デフォルトの名無しさん
2007/07/31(火) 02:43:52202
30003
4000004
500000005
66666666666
俺が直してやんよ
0302デフォルトの名無しさん
2007/07/31(火) 02:46:40[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
0303デフォルトの名無しさん
2007/07/31(火) 02:47:44int 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;
}
0304デフォルトの名無しさん
2007/07/31(火) 02:48:260305デフォルトの名無しさん
2007/07/31(火) 02:53:25#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;
}
0306261
2007/07/31(火) 02:57:02本当に助かりました。
0307280
2007/07/31(火) 02:57:17#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;
}
0308デフォルトの名無しさん
2007/07/31(火) 03:02:031
I
K
L
ちと文字幅テスト
0309デフォルトの名無しさん
2007/07/31(火) 03:02:44今夜の流れはなかなか面白かったな
0310デフォルトの名無しさん
2007/07/31(火) 04:34:210311デフォルトの名無しさん
2007/07/31(火) 04:39:480312デフォルトの名無しさん
2007/07/31(火) 05:57:09[2] 問題文:二つの文字列A, Bを入力し(空白文字も含む)、各文字の文字数を
調べ、文字数が多い文字列のなかにもう一方の文字列が含まれて
いるかどうかを調べるプログラムを作成せよ。
[3] 環境
[3.1] OS:
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
朝か・・・
確か今日の昼までだっけな・・・
0313デフォルトの名無しさん
2007/07/31(火) 08:11:56#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;
}
0314デフォルトの名無しさん
2007/07/31(火) 08:12:34>>313じゃ空白は含まれてなかったっけ、ちと訂正してくる
0315デフォルトの名無しさん
2007/07/31(火) 08:15:31#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;
}
0316デフォルトの名無しさん
2007/07/31(火) 08:39:52ありがとうございます!!
どうしよう………希望が湧いてきてしまった!
0317デフォルトの名無しさん
2007/07/31(火) 08:55:28[2] 問題文:L行M列の行列AとM行N列の行列Bとの積Cを求めるプログラムを作成せよ。
ただし、行列を表すのには二次元配列を用い、配列の要素数はあらかじめ
十分な大きさを用意しておけば良いものとする。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 今日の夕方まで延長してもらったのは秘密
聞くは一時の何とやら。恥ずかしながら丸投げです。
0318デフォルトの名無しさん
2007/07/31(火) 09:00:08入力部分は省略
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];
0319デフォルトの名無しさん
2007/07/31(火) 09:20:12ありがとうございます!!
これで無事夏休みに…(・∀・)<キタコレ!!
夏はこの板で勉強しようかな。
0320デフォルトの名無しさん
2007/07/31(火) 10:26:58[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分くらいしかわかりません。
0321デフォルトの名無しさん
2007/07/31(火) 11:03:00#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);
}
0322デフォルトの名無しさん
2007/07/31(火) 11:06:42#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);
}
0323デフォルトの名無しさん
2007/07/31(火) 12:53:31[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日まで
分解?それとも除算をうまく使う?こんがらがりました。
0324デフォルトの名無しさん
2007/07/31(火) 13:05:34int 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;
}
0325デフォルトの名無しさん
2007/07/31(火) 14:57:07E-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] その他の制限:
再帰関数で書くそうなのですが、さっぱりわかりません。
どうぞよろしくお願いします。
0326デフォルトの名無しさん
2007/07/31(火) 14:59:42>>325
0327デフォルトの名無しさん
2007/07/31(火) 15:04:35#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;
}
0328325
2007/07/31(火) 15:08:39どうもありがとうございます。
またお世話になりにくると思いますが、よろしくお願いしますm(_ _)m
0329デフォルトの名無しさん
2007/07/31(火) 15:14:22こうやったほうがよくない?
#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;
}
0330デフォルトの名無しさん
2007/07/31(火) 15:25:13[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です
よろしくお願いします
0331デフォルトの名無しさん
2007/07/31(火) 15:29:491、nx += 9;
2、nx %= 3;
3、nx /= 4;
4、nx = 15-nx*2;
5、nx++;
よろしくお願いします
0332デフォルトの名無しさん
2007/07/31(火) 15:35:38[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
よろしくお願いします
0333デフォルトの名無しさん
2007/07/31(火) 15:35:44#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);
}
0334デフォルトの名無しさん
2007/07/31(火) 15:40:14#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);
}
0335デフォルトの名無しさん
2007/07/31(火) 15:43:583〜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('+');
よろしくお願いします
0336デフォルトの名無しさん
2007/07/31(火) 15:44:05ありがとうございます。
0337デフォルトの名無しさん
2007/07/31(火) 15:44:10{
char a[10] = {'D','A', 'D', 'D', 'D', 'B', 'D', 'D', 'D', 'C'};
printf("%c\n", a[ama]);
}
0338デフォルトの名無しさん
2007/07/31(火) 15:48:45[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ハノイの塔自体は以前やったのですが、印字を工夫する方法がよくわかりません。
よろしくお願いします。
0339デフォルトの名無しさん
2007/07/31(火) 15:48:51□に適当なプログラムを書きなさい
max=a[□]; max_i=□;
for(i=1;□;i++){
if(max<a[i]){
□=a[i];
□=i;
}
}
よろしくお願いします
0340デフォルトの名無しさん
2007/07/31(火) 16:04:001
#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);
}
0341デフォルトの名無しさん
2007/07/31(火) 16:04:56整数a:1}
整数b:6}読み込んだ数値
a= }
b= }画面出力
整数a:4}
整数b:2}読み込んだ数値
a= }
b= }画面出力
2
整数n:17←読み込んだ数値
x= ←画面出力
よろしくお願いします
0342デフォルトの名無しさん
2007/07/31(火) 16:15:10□に入る適当なプログラムを答えなさい
#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
よろしくお願いします
0343デフォルトの名無しさん
2007/07/31(火) 16:17:23よろしくお願いします
0344デフォルトの名無しさん
2007/07/31(火) 16:21:320345デフォルトの名無しさん
2007/07/31(火) 16:30:44得点表
科目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
よろしくお願いします
0346デフォルトの名無しさん
2007/07/31(火) 16:33:33なお関数set_zeroは値を返さない。(関数部分だけでよい)*vx[0]に0,vx[i]に0、vx[2]に0・・を代入する
よろしくお願いします
0347デフォルトの名無しさん
2007/07/31(火) 16:37:06#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;
}
0348デフォルトの名無しさん
2007/07/31(火) 16:38:30□に適当なプログラムを書なさい。(プログラム中の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
よろしくお願いします
0349デフォルトの名無しさん
2007/07/31(火) 18:31:58for(i=1;/**/ i<=n /**/;i++){
for(j=1;j<=/**/ n-i /**/;j++){
printf(/**/ " " /**/);
}
for(j=1;/**/ j<=i /**/;j++){
printf("%d",i);
}
putchar(/**/ '\n' /**/);
}
0350デフォルトの名無しさん
2007/07/31(火) 19:05:48質問があいまいだな
もうちょっと基礎を身に付けたほうがいいぞ
int multi(int m, int n){
return m*n;
}
0351デフォルトの名無しさん
2007/07/31(火) 19:30:22>>1 を読んで書き直し
0352 ◆xdqL6ZHhIs
2007/07/31(火) 21:04:29[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4791.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:[2007年07月31日24:00まで]
>>117です。
自分の説明不足で、授業で習ってないプログラムで宿題を組んで頂いてしまったので、
締め切り3時間前に再提出にされてしまいました。
どうか、どうかお願いします。m(*_ _)m
0353デフォルトの名無しさん
2007/07/31(火) 21:33:040354デフォルトの名無しさん
2007/07/31(火) 21:35:38for()使って配列の数カウントすればいいんじゃね?
0355デフォルトの名無しさん
2007/07/31(火) 21:41:150356デフォルトの名無しさん
2007/07/31(火) 21:42:120357デフォルトの名無しさん
2007/07/31(火) 21:42:44char *str;
strstr(str,"\0")-str; とかは?
0358デフォルトの名無しさん
2007/07/31(火) 21:58:48ポインタ自体が、使用禁止じゃないのかな?
0360デフォルトの名無しさん
2007/07/31(火) 22:01:43学生の自主性をないがしろにする最低の教育だな
0361デフォルトの名無しさん
2007/07/31(火) 22:02:04せんせいーにこの関数習えばよくね?
0362357
2007/07/31(火) 22:05:50int i=0;
while(str[i]!='\0')i++;
0364デフォルトの名無しさん
2007/07/31(火) 22:20:500365デフォルトの名無しさん
2007/07/31(火) 22:20:52[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
関数を作らなければならないのですが、よくわかりません。よろしくお願いします。
0366デフォルトの名無しさん
2007/07/31(火) 22:28:58#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;
}
0367 ◆xdqL6ZHhIs
2007/07/31(火) 22:39:49ありがとうございます!それでやってみます。
できれば引き続き下の方の/*^^^ここ*/もお願いしますm(*_ _)m
0368デフォルトの名無しさん
2007/07/31(火) 22:45:05>>302
0369デフォルトの名無しさん
2007/07/31(火) 22:47:14#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;
}
0370デフォルトの名無しさん
2007/07/31(火) 22:51:190371デフォルトの名無しさん
2007/07/31(火) 23:04:50#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;
}
0372デフォルトの名無しさん
2007/07/31(火) 23:23:140373デフォルトの名無しさん
2007/07/31(火) 23:39:52習ってないものがダメなんじゃなく
「ここまだ授業でやってないけど、どういう動作をしてるの?」
「……わかりません」
というので、再提出扱いにされたんじゃないの?
0374 ◆xdqL6ZHhIs
2007/07/31(火) 23:46:40宿題はメールで提出するのですが、
提出したらこういうメールが返ってきたんです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;
^^^^^^^^^^^^^^^^
ここを現在の知識で書くとどうなりますか?
上記の「ここを……」という部分はさほど難しい部分ではありません。
インターネットで検索したものをここまで組み合わせられるなら、授業でやっ
た範囲内から、「ここを……」の部分を埋める作業も同様にできるはずです。
一応評価では保留としておきます。
できれば再提出してください。
0375デフォルトの名無しさん
2007/07/31(火) 23:54:36int i;
while(*p != '\0')p++;
}
int isspace(char c){
return (c==' '||c=='\n'||c=='\t')?1:0
}
こんな感じ?関数仕様の記憶曖昧&コンパイルすらしてない。
0376 ◆xdqL6ZHhIs
2007/07/31(火) 23:58:06本当にすいません。本当にありがとうございます。やってみます。
0377デフォルトの名無しさん
2007/07/31(火) 23:59:02ワロタ
0378デフォルトの名無しさん
2007/08/01(水) 00:01:01ゴメン、超ゴメン、めっちゃゴメン、まじゴメン
0379デフォルトの名無しさん
2007/08/01(水) 00:01:29strlen、それ途中だろww
0380デフォルトの名無しさん
2007/08/01(水) 00:03:41これはひどい
0381デフォルトの名無しさん
2007/08/01(水) 00:05:16strlenにreturnが無い。strlenの型はsize_t
isspaceの引数はint。isspaceの対称は空白(' ')、書式送り('\f')、改行('\n')、復帰('\r')、水平タブ('\t')および垂直タブ('\v')でした。
0382 ◆xdqL6ZHhIs
2007/08/01(水) 00:05:32きっとなんとかなるなるw
返信に「後期は頑張りますから!!」ってめっちゃ書いて送ってみました。
ありがとうございました。またお世話になると思います。
0383デフォルトの名無しさん
2007/08/01(水) 00:09:180384デフォルトの名無しさん
2007/08/01(水) 00:26:04前期が駄目な奴は来年もってなっちゃうだろ・・・
0385デフォルトの名無しさん
2007/08/01(水) 00:29:490386デフォルトの名無しさん
2007/08/01(水) 00:34:02なんておそろしくて書けない・・・
0387デフォルトの名無しさん
2007/08/01(水) 00:36:340388デフォルトの名無しさん
2007/08/01(水) 00:53:390389デフォルトの名無しさん
2007/08/01(水) 00:58:45提出した内容が本当に理解できているのか試された訳だな。
あまりきれいな回答を書くと、却って疑われてまずいのかもな。
0390デフォルトの名無しさん
2007/08/01(水) 01:02:44■実装例■
#include <stdlib.h>
/*--- 文字列sの長さを調べる ---*/
size_t strlen(const char *s)
{
size_t len = 0;
while (*s++) len++;
return (len);
}
0391デフォルトの名無しさん
2007/08/01(水) 01:06:050392デフォルトの名無しさん
2007/08/01(水) 01:10:57[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)がわかりません。
よろしくお願いします。
0393デフォルトの名無しさん
2007/08/01(水) 01:22:10#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;
}
0394デフォルトの名無しさん
2007/08/01(水) 01:23:51そんな指導者のもとで育つ生徒なんて・・・
0395デフォルトの名無しさん
2007/08/01(水) 01:25:29CならまだしもC++の標準ライブラリなんて…無理ぽ
0396デフォルトの名無しさん
2007/08/01(水) 02:06:24[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
課題そのまま書きました。書き方が全くわかりません。どうかよろしくお願いします。
0397デフォルトの名無しさん
2007/08/01(水) 02:15:530398デフォルトの名無しさん
2007/08/01(水) 02:24:24unsigned int 型に8桁入るぞ
0399デフォルトの名無しさん
2007/08/01(水) 02:37:02B・C・D!
0400デフォルトの名無しさん
2007/08/01(水) 02:41:16足し算と掛け算だけ
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;
}
}
}
0401デフォルトの名無しさん
2007/08/01(水) 06:20:57c+=a+b;
c+=a*b;
になるのか?
負数はどうなる?
しかも「せいぜい10桁どうしの演算しかできない」ぞ
0404デフォルトの名無しさん
2007/08/01(水) 10:03:351問くらいは自力で解いたのかYO!
0405デフォルトの名無しさん
2007/08/01(水) 10:07:38答えてくれてる人がいるのにお礼もなく
リストからも削除しない人に答えてくれる仏はあまりいないと思うお( ^ω^)
0406デフォルトの名無しさん
2007/08/01(水) 10:18:041: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;
}
}
0407デフォルトの名無しさん
2007/08/01(水) 10:23:52[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
0408デフォルトの名無しさん
2007/08/01(水) 10:26:011
整数a:1
整数b:6
a=7
b=9
整数a:4
整数b:2
a=10
b=5
2
整数n:17
x=51
0409デフォルトの名無しさん
2007/08/01(水) 10:33:47#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);
}
0410デフォルトの名無しさん
2007/08/01(水) 10:42:50#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);}
0411デフォルトの名無しさん
2007/08/01(水) 10:43:55http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4792.txt
リンクくらい張る手間惜しむなよ。
つーか、インデントがぶっ飛んでるのはなんかの嫌がらせか?
ついでにいえば、func()が全く意味を為してないのだが。
なんだよ、f[0] = yw[0]だけってのは。
0412デフォルトの名無しさん
2007/08/01(水) 10:51:30void set_zero(int vx[],int no)
{
int i;
for(i=0;i<no;i++){
vx[i]=0;
}
}
0413デフォルトの名無しさん
2007/08/01(水) 12:01:30[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] その他の制限: 特にありません
よろしくお願いします
0414デフォルトの名無しさん
2007/08/01(水) 14:35:16文字化けしてしまったので文字コードをunicodeに変換したら
ちゃんと動きました。
ありがとうござしました。
0415デフォルトの名無しさん
2007/08/01(水) 14:42:28#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;
}
0416デフォルトの名無しさん
2007/08/01(水) 16:28:24[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
よろしくお願いします
0417デフォルトの名無しさん
2007/08/01(水) 16:30:49[2] 問題文:
int型整数のn倍(整数mにnを掛けた値で、結果は整数値)を返値として返すmulti関数を作成しなさい(multi関数部分だけでよい)
[3] 環境
[3.1] OS:WINDOWS XP
[3.2] コンパイラ名とバージョン: (VS 2005)
[3.3] 言語: C
[4] 期限: 8月1日まで
お願いします
0418デフォルトの名無しさん
2007/08/01(水) 16:43:28ちょっと前に似たようなのがあったはず
>>417
問題がよくわからんが
int multi(int m, int n) {
return m * n;
}
こういうことか?
引数に関する記述ない?
0419max_tc
2007/08/01(水) 16:54:15[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] その他の制限: (標準ライブラリは使ってはいけない)
0420デフォルトの名無しさん
2007/08/01(水) 17:01:100421デフォルトの名無しさん
2007/08/01(水) 17:07:260423デフォルトの名無しさん
2007/08/01(水) 17:12:07明らかな入門授業でおそろしいことやらせる先生だなww
0424デフォルトの名無しさん
2007/08/01(水) 17:21:29ポインタは32bitとは限らん
0425デフォルトの名無しさん
2007/08/01(水) 17:22:510426デフォルトの名無しさん
2007/08/01(水) 17:30:21public 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;
}
}
0427デフォルトの名無しさん
2007/08/01(水) 17:31:22int 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;
}
}
0428デフォルトの名無しさん
2007/08/01(水) 17:32:26for(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]);}}}
0429デフォルトの名無しさん
2007/08/01(水) 18:28:19int 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;}
0430デフォルトの名無しさん
2007/08/01(水) 18:37:390431デフォルトの名無しさん
2007/08/01(水) 18:41:29せめてどんな処理をするプログラムなのか、Javaでコンパイルした実行プログラムとか欲しいところ。
俺?Javaの開発環境持っているし経験もあるけどまんどくせっ
0432デフォルトの名無しさん
2007/08/01(水) 18:54:33実行したらArrayIndexOutOfBoundsExceptionが出るんだが
0433デフォルトの名無しさん
2007/08/01(水) 19:25:38>>417しか書かれてないなら、>>418でOK
>>416はこのスレで既出
Ctrl+Fで検索
0434デフォルトの名無しさん
2007/08/01(水) 19:49:04>その位置(ポインタ)を返す
のポインタはCのポインタではなく、単純にインデックス(指し示すもの=ポインタ)
のことだと拡大解釈して解いた↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4793.c
見付からないときと、最初で見付かったときの返り血が同じになってしまったが。。。
0435デフォルトの名無しさん
2007/08/01(水) 20:02:25#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;
}
0436デフォルトの名無しさん
2007/08/01(水) 20:28:08>発見できればその位置(ポインタ)をかえす
本当はどれの事?
ポインタ
アドレス
インデックス
0437デフォルトの名無しさん
2007/08/01(水) 20:56:34[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] その他の制限: 特にありません
よろしくお願いします
0438デフォルトの名無しさん
2007/08/01(水) 21:20:11[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と組み合わせるところがさっぱりわかりません
よろしくお願いします
0439デフォルトの名無しさん
2007/08/01(水) 21:21:340440デフォルトの名無しさん
2007/08/01(水) 21:22:51void vswap(int *x, int *y)
{
int w;
w = *x;
*x = *y;
*y = w;
}
0441デフォルトの名無しさん
2007/08/01(水) 21:33:40自分で作ったプログラムのソースくらいうpしたら?
0442デフォルトの名無しさん
2007/08/01(水) 21:39:540443デフォルトの名無しさん
2007/08/01(水) 21:47:360444デフォルトの名無しさん
2007/08/01(水) 22:03:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4794.txt
0445デフォルトの名無しさん
2007/08/01(水) 22:10:19> 2,作成した魔方陣にhtmlタグを付け○○○.htmlというファイルを作成するプログラムを作成せよ
最初の1は1行目の中央からスタートってことで
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4795.c
0446438
2007/08/01(水) 22:18:53そうですね、失礼しました
魔方陣
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4796.txt
カレンダー
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4797.txt
改めてよろしくお願いします
0447max_tc
2007/08/02(木) 00:09:15[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
0448デフォルトの名無しさん
2007/08/02(木) 00:31:49標準ライブラリを使わずに、どうやって印字するのですか?
0449デフォルトの名無しさん
2007/08/02(木) 00:40:18標準ライブラリが何だか分かってないからなのか
>>447みたいな書き方が頻発しまくりですがな。
0450デフォルトの名無しさん
2007/08/02(木) 00:44:100451デフォルトの名無しさん
2007/08/02(木) 00:48:37http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
STLは標準ライブラリの部分集合?
0452デフォルトの名無しさん
2007/08/02(木) 01:11:43[2] 問題文(含コード&リンク):
2つの整数値を受け取り.再帰関数を用いて,以下のような四角形を印字せよ.
入力: 4 6
******
******
******
******
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限: 2007年8月2日23:00
[5] その他の制限:関数は習いました。
よろしくお願い致します。
0453デフォルトの名無しさん
2007/08/02(木) 01:25:01はいよー
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4798.txt
次からはテンプレはテキストに同梱するんじゃなくて
スレにちゃんと書き込んだほうがいいと思う
0454デフォルトの名無しさん
2007/08/02(木) 01:27:39コンパイルしてないけど
#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;
}
0455デフォルトの名無しさん
2007/08/02(木) 01:35:18#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);
}
}
0456デフォルトの名無しさん
2007/08/02(木) 01:35:46#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;
}
0457デフォルトの名無しさん
2007/08/02(木) 01:43:51> 5,4で作成したカレンダーにhtmlタグをつけ、○○○.htmlというファイルを作成するプログラムを作成せよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4799.c
4で作成したソースとは仕様が違うけど・・・
0458デフォルトの名無しさん
2007/08/02(木) 01:46:19void print_rect(int x, int y){
int n=x;
if(y!=0){
while(n>-1) putchar( (n--) ? '*' : '\n');
print_rect(x, y-1);
}
}
0459デフォルトの名無しさん
2007/08/02(木) 01:47:400460デフォルトの名無しさん
2007/08/02(木) 02:15:24>455
>456
>458
どうもありがとうございました。本当に助かりました。
0461デフォルトの名無しさん
2007/08/02(木) 02:17:050462デフォルトの名無しさん
2007/08/02(木) 02:35:45> 3,魔方陣を作る課程を表示する
あとはこれだが、どのような表示がされるのか、具体的な例をプリーズ
0463デフォルトの名無しさん
2007/08/02(木) 05:54:40[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を過ぎたときの三つだということはわかりました。。。
よろしくお願いします!
0464デフォルトの名無しさん
2007/08/02(木) 06:15:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4801.c
0465デフォルトの名無しさん
2007/08/02(木) 08:24:35冗談抜きに、ソースコードや英数字に全角を使うのはやめちくれ
0466438
2007/08/02(木) 08:41:10おお、ありがとうございます
>>462
○×○
○○○
○○○
○×○
○○○
○○×
○×○
×○○
○○×
こんなかんじです、説明不足ですいません
0467デフォルトの名無しさん
2007/08/02(木) 09:43:58http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4804.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4805.c
0468デフォルトの名無しさん
2007/08/02(木) 09:45:29念のために
fp=fopen・・・の下に
if(fp==NULL) return 1;
を入れておいて。
0469max_tc
2007/08/02(木) 10:26:59[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まで] )
申し訳ございませんでした、条件消すのが忘れた。
もう一度教えて頂けないでしょうか。
よろしくお願いします。
0470デフォルトの名無しさん
2007/08/02(木) 10:27:35[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 で終了しました
というエラーがでました。 よれけばこちらもお願いします。
0471デフォルトの名無しさん
2007/08/02(木) 10:47:591から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);
}
}
0472デフォルトの名無しさん
2007/08/02(木) 11:03:24Nが条件(N>0)に合わなければ0を返す仕様で良いん?(´・ω・`)
int sum(int n){
if(n<=0)
return (0);
else
return(n+sum(n-1));
}
0473デフォルトの名無しさん
2007/08/02(木) 11:07:06なるほど!ありがとうございます!!
そのためのif文だったのか・・・
0474デフォルトの名無しさん
2007/08/02(木) 11:28:21どういたしましてです、ついでに下の。
int acount(char *s)
{
if(*s=='\0')
{
return (0);
}
else if(*s!='a')
{
return (acount(s+1));
}
else
{
return (acount(s+1)+1);
}
}
0475デフォルトの名無しさん
2007/08/02(木) 12:18:05サンクスです!!しかし頭の回転が悪いなオレorz
0476max_tc
2007/08/02(木) 14:00:580477デフォルトの名無しさん
2007/08/02(木) 14:24:55私は246じゃありませんが、問題が同じなので教えてもらえると嬉しいです!
0478デフォルトの名無しさん
2007/08/02(木) 14:37:21関係ないんだがね
0479デフォルトの名無しさん
2007/08/02(木) 15:19:43http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4806.txt
0480デフォルトの名無しさん
2007/08/02(木) 15:33:14順列生成とかでググればいっぱい出てくるじゃん
過去ログ検索しても見つかるでしょ。少しは自分で探してくれぃ
0483デフォルトの名無しさん
2007/08/02(木) 16:14:34[2] 問題文:ssort.cを本文で示したようなポインタを用いたプログラムに書き換え,ssort-p.cとして作成しなさい。
プログラム ssort.cへのリンク
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4807.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: [2007年08月04日12:00まで
[5] その他の制限:特にありません
よろしくお願いします
0484デフォルトの名無しさん
2007/08/02(木) 16:51:46↓こんなんでいいのか?配列ではなくポインタを使ってるが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4808.c
0485デフォルトの名無しさん
2007/08/02(木) 17:10:28http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4809.c
0486デフォルトの名無しさん
2007/08/02(木) 19:35:45返事が遅れてすいません。作成ありがとうございます。
素数をすべて表示するのではなくて、素数の個数だけを表示するプログラムに変形してくれますか?
クレームをつけてるようで申し訳ないですが、よろしくお願いします。
0487デフォルトの名無しさん
2007/08/02(木) 19:42:59もう1つ、制限で言うのを忘れていたのですが、inline関数というのは習っていません。
inline関数を使わないように書き換えてもらえませんか?
本当に強引なお願いで申し訳ないです。
0488デフォルトの名無しさん
2007/08/02(木) 20:26:50>>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;
}
0489デフォルトの名無しさん
2007/08/02(木) 20:26:53[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言語
お願いします。
0490デフォルトの名無しさん
2007/08/02(木) 20:37:56(month != Jun) && (day < 17)
C言語です。お願いします。
0491デフォルトの名無しさん
2007/08/02(木) 20:39:52[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言語
頼みます。
0492デフォルトの名無しさん
2007/08/02(木) 20:44:34バカにしてるのか?
0493デフォルトの名無しさん
2007/08/02(木) 20:44:410494デフォルトの名無しさん
2007/08/02(木) 20:45:13!((month = Jun) || (day >=17))
合ってるか分からんが
0495デフォルトの名無しさん
2007/08/02(木) 20:46:04!(month != Jun) || !(day < 17)
あるいは
(month == Jun) || (day >= 17)
0496デフォルトの名無しさん
2007/08/02(木) 20:48:23/* 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;
}
0497494
2007/08/02(木) 20:54:150498デフォルトの名無しさん
2007/08/02(木) 20:58:31グラフィックスライブラリは何?
わかってもやらないけど。
0499デフォルトの名無しさん
2007/08/02(木) 21:04:56>>495
ドモルガンの法則を知らない回答者もいるのか・・・
0500デフォルトの名無しさん
2007/08/02(木) 21:07:580501デフォルトの名無しさん
2007/08/02(木) 21:08:33懐かしいなぁww
0502デフォルトの名無しさん
2007/08/02(木) 21:09:20どう見てもSDL
0503デフォルトの名無しさん
2007/08/02(木) 21:15:490504デフォルトの名無しさん
2007/08/02(木) 21:22:58【審議拒否】
0505デフォルトの名無しさん
2007/08/02(木) 21:25:08【審議放棄】
.. ∧,,∧ ∧,,∧
∧∧ ( ゚д゚ )( ゚д゚ ) ∧∧
( ゚д゚ ). .∧∧) (∧∧( ゚д゚ )
| U ( ゚д゚ ).( ゚д゚ ) と ノ
u-u (l ) ( ノu-u
`u-u' `u-u'
0506デフォルトの名無しさん
2007/08/02(木) 21:29:34[2] 問題文:LinKernighan法を実装せよ
[3] 環境
[3.1] OS:win
[3.2] cygwin
[3.3] 言語:C
[4] 期限:8月4日0:00まで
[5] その他の制限:特になし
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4810.zip
編集中のファイルと読み込み用のファイルを同梱しました。
編集中のファイルは現在無限ループ中、local関数以外はいじらなくて大丈夫だと思います。
正しい答えとしては、大体3万〜4万の値がでるかと(2opt法より)。
よろしくお願いします。
0507デフォルトの名無しさん
2007/08/02(木) 21:30:44void _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; }
}
}
0508デフォルトの名無しさん
2007/08/02(木) 22:26:56テストはもっと小さいデータでしたほうが(ry。
時間かかりそうだからオレはパス
↓この辺でも見て(´ω`)
ttp://www.google.com/codesearch?hl=ja&lr=&q=Lin+Kernighan
0509デフォルトの名無しさん
2007/08/02(木) 22:39:45[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] その他の制限: ありません。
専門外ですが自分でやらなければならなくなり、参考程度でも知識が得られたらと思い書き込ませていただきました。
わかりにくい文とは思いますがよろしくお願いします。
0510デフォルトの名無しさん
2007/08/02(木) 23:20:590511デフォルトの名無しさん
2007/08/02(木) 23:23:56excelで処理したいっていうのが、出力ファイルがCSVでいいなら、スクリプト言語でチャチャと書いて済む感じだけど。
0512509
2007/08/02(木) 23:39:07>>511
レスありがとうございます。
出力はcsvでいいです。
�@は複数のcsvから同じ位置のデータを読んで1つのcsvに出力するという感じなのですが…
�Aは「→→→→←←←←/」のようなRAWがあったとして(→←/は何らかの数値)
111
122
223
のように数値にしてcsvとして出力できたらと思っています。
0513デフォルトの名無しさん
2007/08/03(金) 00:29:21誰か早急にお願いします。
0514506
2007/08/03(金) 00:32:17レスありがとうございます。
どのソース見てもかなり高度なので実装できるかかなり不安…
まだ解答してくださる方を探しています。
もしよろしければお願いします。
これ完全解じゃなくてある程度のところでとめないと無限ループフラグが立つのか…
0515デフォルトの名無しさん
2007/08/03(金) 00:38:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4811.txt
0516デフォルトの名無しさん
2007/08/03(金) 00:46:57よく知らないが、自分でいろいろやってみれ。
(print_prime の宣言と、定義と、呼び出しと3箇所消して
inline 全部消せばいいんじゃないの。
prinit_bits もいらなきゃそれも消せば。)
0517デフォルトの名無しさん
2007/08/03(金) 00:48:18=0はいらないんでない?
それと、mainの中、
for(int i=0; i<=10; i++)
intがあると、エラーにならないか?
0518デフォルトの名無しさん
2007/08/03(金) 00:48:430519デフォルトの名無しさん
2007/08/03(金) 01:45:08ありがとうございます。
0520デフォルトの名無しさん
2007/08/03(金) 15:57:321)
csvファイルが数千のオーダーあると、コマンドラインからの入力も無理か・・・
ってことは、cvsファイル名を列挙したファイルでcvsファイル指定すんのかなぁ。
csvファイル数の規模によって、とりかかりかたが違ってくると思う。
エクセル自身にも3次元処理(別のシートの情報を参照する)機能があったよーな・・。
カーニハンの本のどれかにcsvファイルを扱うプログラムが載ってたよーに思う。
2)
バイト列のcsv化は、そんなに難しくないと思う。バイナリダンプの出力をちょみっと変えるだけだから。
0521デフォルトの名無しさん
2007/08/03(金) 19:34:29[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] その他の制限: 特にありません
よろしくお願いします
0522デフォルトの名無しさん
2007/08/03(金) 19:42:44#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;
}
0523デフォルトの名無しさん
2007/08/03(金) 22:08:28後ろのほうのデータを取り出す時に遅くなるけどよければどうぞ
/*----- 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));
0524509
2007/08/03(金) 22:22:07本などの情報は助かります。csvファイルは測定の時間などによって変わるので多様に対応できるほうが好ましいです。自分の知識で参考にできるかわかりませんが�Aもレスを頂きありがとうございます。
>>523
具体的に例をもらえて正直とても助かります。取っ掛かりが無いのでどうしていいのかわからない状態なので。参考にさせていただきます。
0525デフォルトの名無しさん
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;
}
}
0526デフォルトの名無しさん
2007/08/03(金) 23:08:48一番だけ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4813.lzh
>>523 の訂正
#define VALUE_SCAN_FMT "%256[^,\n]"
↓
#define VALUE_SCAN_FMT "%256[^,\n],"
0527デフォルトの名無しさん
2007/08/03(金) 23:17:30計算途中の数値を書式指定 %08X で表示させてみては?
0528デフォルトの名無しさん
2007/08/03(金) 23:31:24アドバイスありがとうございます。一応計算途中のビットなどは紙に書き出してみて、確かにビット逆順にはなるのですが、
多分、教授に「じゃあなんでそうなるの?」って聞かれると思うんです;;
どうやってうまく説明したらいいのかに悩んでます;;
0529デフォルトの名無しさん
2007/08/04(土) 00:30:16使用法 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;
}
0530デフォルトの名無しさん
2007/08/04(土) 00:39:06貴方が私と同じSM趣味の持ち主だということがよくわかるよ。
0531デフォルトの名無しさん
2007/08/04(土) 01:21:19jの上位桁、下位桁が逆になるように値をセットしているようですね。
この場合、下位3ビットを上下逆にするとあたかも1ずつ加算しているようになります。
0100---(1)
0010---(2)
0110---(3)
0001---(4)
こんな感じですね。反転した世界の加算は、加算で発生する桁上がりも逆ですよ。
単純にkの値をjに足しても良いのは、この例では(2)->(3)のケース、k>jの場合です。
そうでない時、桁上がり?が発生する加算を、whileの中でやっているみたいです。
0532509
2007/08/04(土) 09:52:44ありがとうございます。
ダウンロードしてみましたがa.cをどのように使用したら実行ファイルができるのかわかりません。VC++でも可能でしょうか。
簡単に教えていただけないでしょうか。
>>529
ありがとうございます。
申し訳ありませんが上同様使い方がわからず確認できません。
スレの趣旨とはずれてしまい申し訳ないですが、VS2005での実行までの手順を教えていただけないでしょうか。あまりにも無知ですいませんがお願いします。
0533デフォルトの名無しさん
2007/08/04(土) 10:38:50コマンドラインで実行したことはないのかな。
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
0534デフォルトの名無しさん
2007/08/04(土) 10:48:01[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]反復構文を使う
0535デフォルトの名無しさん
2007/08/04(土) 11:03:52#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;
}
0536デフォルトの名無しさん
2007/08/04(土) 11:14:25一番上の数字しか読み込まないのですが・・・
0537デフォルトの名無しさん
2007/08/04(土) 11:16:38出力例19個だぞw
0538デフォルトの名無しさん
2007/08/04(土) 11:21:35[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を使った反復
0539デフォルトの名無しさん
2007/08/04(土) 11:28:46#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;
}
0540デフォルトの名無しさん
2007/08/04(土) 11:38:15#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;
}
0541デフォルトの名無しさん
2007/08/04(土) 11:40:42得点の合計が抜けてるよ
0542デフォルトの名無しさん
2007/08/04(土) 11:50:050543デフォルトの名無しさん
2007/08/04(土) 11:53:230544デフォルトの名無しさん
2007/08/04(土) 13:59:52[2] 問題文:fgets()関数と同じ働きをする関数を作成せよ。
ただし第三引数については考えなくて良いものとする。
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C言語)
[4] 期限:2007年08月05日
[5] その他の制限:ポインタは使ってはいけない。
よろしくお願いします。
0545デフォルトの名無しさん
2007/08/04(土) 14:12:55第三引数を考えなくていいという意味は、標準入力ということ?
0546509
2007/08/04(土) 14:37:48ありがとうございます。
おかげさまでコマンドプロンプトで値抽出の表示まではできました。
この出力された値をcsvに保存したいのですがどのようにすればいいでしょうか。
0547デフォルトの名無しさん
2007/08/04(土) 17:01:10こんなんでいい?
ポインタ使うなっていうが、ポインタ使わないと文字配列渡せないんだが・・・。
ポインタ演算を使うなってことでいいのか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4814.c
0548デフォルトの名無しさん
2007/08/04(土) 17:21:000549デフォルトの名無しさん
2007/08/04(土) 17:32:58そうでした。
こんな感じでどう?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4815.c
0550デフォルトの名無しさん
2007/08/04(土) 18:16:240551デフォルトの名無しさん
2007/08/04(土) 18:27:50そっかそっか。
じゃ、こんな感じで。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4816.c
0552デフォルトの名無しさん
2007/08/04(土) 20:36:41#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;
}
0553デフォルトの名無しさん
2007/08/04(土) 22:50:44[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] その他の制限:特にありません
よろしくお願いします
0554デフォルトの名無しさん
2007/08/04(土) 23:02:00#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;
}
0555デフォルトの名無しさん
2007/08/04(土) 23:06:58それ違うw
問題見ろw
0556デフォルトの名無しさん
2007/08/04(土) 23:29:17なんか似た問題だから変数名とかちょっと直しただけなんだけど
読み込んだあとバッファのゴミがあればクリアするようにしているが、
不要なら消せばいい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4818.c
0557デフォルトの名無しさん
2007/08/04(土) 23:40:20[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] その他の制限:特に無し。
0558デフォルトの名無しさん
2007/08/04(土) 23:43:10[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] その他の制限:
0559デフォルトの名無しさん
2007/08/04(土) 23:46:35意味プーなんですが
0560デフォルトの名無しさん
2007/08/04(土) 23:48:59問題の意味は明らかだろ。
解き方は知らん。
0561デフォルトの名無しさん
2007/08/04(土) 23:50:25> 直線上に色つきの区間 c[0], c[1], ... をこの順番で描く。
GUIでやるの?
この順番でってどの順番?
0562デフォルトの名無しさん
2007/08/04(土) 23:52:18あとOS問わないっていうが、
おまえさんがコンパイルできる環境書かないと困るだろ?
0563デフォルトの名無しさん
2007/08/04(土) 23:56:020564638
2007/08/04(土) 23:56:11つ ×3行だけ ○1行に3つずつ
つ 入力リダイレクトで input.txt を読み込み、出力リダイレクトで
つ do whileを使った反復
0565デフォルトの名無しさん
2007/08/04(土) 23:58:330566デフォルトの名無しさん
2007/08/05(日) 00:23:14(2) も同じようにできそうだがデータ構造が難しい。
0567デフォルトの名無しさん
2007/08/05(日) 00:35:19くそ天皇 くそ天皇 くそ天皇 くそ天皇
いい加減死ねっつってんだろ屑ニートくそ天皇が
相変わらず病的な粘着っぷりだな屑ニートくそ天皇が
毎日毎日毎日粘着出来て良いでちゅねくそ天皇
くそ天皇さっさと死にやがれゴミが
東京に在住している精神病珍米糞ニートくそ天皇君の末路
さっさと精神病院逝くか首吊って逝くか選べや糞天皇が
早く死ねよ糞ニート天皇が
粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が
早く死ねっつってんだろ屑ニートくそ天皇が
お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや
とっと死に晒せや糞ニート天皇が
0568デフォルトの名無しさん
2007/08/05(日) 00:40:54えっ??
実際に表示してピクセルごとに調査するとかでないのか。
円弧と直線に囲まれた多角形のデータ構造を作って
さらに各辺で交差判定して分割するとかなったら難しいなってもんじゃ
0569デフォルトの名無しさん
2007/08/05(日) 00:44:28そんなわけないだろwww
0570デフォルトの名無しさん
2007/08/05(日) 00:59:21いや、問題を読むとそんな訳有りそうな気がするw
ヘタに解法考えるよりも早いかもw
0571デフォルトの名無しさん
2007/08/05(日) 01:13:37それに精度はどうするんだ。
0572デフォルトの名無しさん
2007/08/05(日) 01:22:5032bitだと、使い切れないんじゃないか。
0574デフォルトの名無しさん
2007/08/05(日) 01:34:43mainの引数は(void)に変えてOK
0575デフォルトの名無しさん
2007/08/05(日) 01:37:29>>551の回答は、*を使ってないよ。
0576デフォルトの名無しさん
2007/08/05(日) 01:39:020577デフォルトの名無しさん
2007/08/05(日) 01:40:480578デフォルトの名無しさん
2007/08/05(日) 02:25:39意味プーに同意プー
0579デフォルトの名無しさん
2007/08/05(日) 07:02:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4820.txt
こんな感じでどうだろうか。
解き方はこれで良いと思うんだが。
もっといいとき方とかありそうだが思いつかなかった。
ちゃんと動作チェックしてないんで、バグあるかも知らん・・・。あったらsry。
>>558は曲者だな。やる気力がでねえ。
0580デフォルトの名無しさん
2007/08/05(日) 08:15:43[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言語は基本的な知識のみしか習っていない
0581579
2007/08/05(日) 08:32:59やっぱバグあったわ。
修正済みの再UPしといた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4821.txt
0582デフォルトの名無しさん
2007/08/05(日) 09:01:55浮動小数点数の演算には丸め誤差があって、
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);
}
0584デフォルトの名無しさん
2007/08/05(日) 14:54:30多い方向と少ない方向にまんべんなく誤差ってればある程度相殺される
けどこの例では同じ数を足し続けてるからどんどん誤差が大きくなる
判定条件だからではないよ
0585デフォルトの名無しさん
2007/08/05(日) 15:01:33返信遅くなりましてすみません。ありがとうございます。
教えてもらったことをもっと理解してよく考えてみますm(_ _)m
0586デフォルトの名無しさん
2007/08/05(日) 15:44:27微妙に自信ないんでデバッグ用コードも残しとく。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4822.cpp
基本方針は、「上書きして描画」で考えるのではなくて、「逆順で、まだ描画されていない範囲がある場合に描画」と考えて、描画区間と色を別に管理している。
データ構造で工夫できそうな気もするけど面倒なので STL にお任せ。ロジックが直感的じゃないかもしれない。
0587デフォルトの名無しさん
2007/08/05(日) 18:29:03初心者だけどやってみた
#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;
}
0588デフォルトの名無しさん
2007/08/05(日) 21:31:20http://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)
0589デフォルトの名無しさん
2007/08/05(日) 21:50:20なるほど。これだと各 y=t での処理で >557 を流用できるし、出題者の意図っぽい。
難しい方向にばっか考えすぎてたわ。
0590デフォルトの名無しさん
2007/08/05(日) 21:57:53[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] その他の制限:特にありません
よろしくお願いします
0591デフォルトの名無しさん
2007/08/05(日) 22:03:11出力のフォーマットは入力ファイルに準じよ!(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.出力ファイルを開いて,適切な書式で出力する.
よろしくお願いします! 長いんで「ろだ」にも書き込みました。かなり焦ってるんで・・・
0592デフォルトの名無しさん
2007/08/05(日) 22:14:521 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マスです。
それプラス↑の行の「、」をスペースと考えてください。分かりにくくてすいません。
0593デフォルトの名無しさん
2007/08/05(日) 22:31:520594デフォルトの名無しさん
2007/08/05(日) 22:36:42[2] 問題文(含コード&リンク):
整列法についての課題
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4829.txt
整列するファイル
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4828.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限: 8月6日18:00
[5] その他の制限:
長文ですがどうかお願いします。
0596デフォルトの名無しさん
2007/08/05(日) 22:58:01#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;
}
0597デフォルトの名無しさん
2007/08/05(日) 23:00:10[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4830.txt
[3] 環境
[3.1] OS: widows
[3.2] コンパイラ名とバージョン: bcc
[3.3] 言語: C
[4] 期限: 8月6日
[5] その他の制限:
1は一次元配列の加工
2は構造体へのデータ格納と構造体の配列の走査
3は入出力関数
お願いします。
0598デフォルトの名無しさん
2007/08/05(日) 23:27:54> [4] 期限: 2007年8月6日17:00まで 急です><ホントお願いします・・・留年かかってます;;
○投げスレ的にはこういうのはスルーして留年させる方が面白くね?
0599デフォルトの名無しさん
2007/08/05(日) 23:31:130600デフォルトの名無しさん
2007/08/05(日) 23:31:560601デフォルトの名無しさん
2007/08/05(日) 23:40:25個人的には、万が一丸投げがバレて留年したら可哀想だからそういう問題は解かないようにしている。
0602デフォルトの名無しさん
2007/08/05(日) 23:40:38本当にありがとうございます><
留年は免れそうです!!
0603デフォルトの名無しさん
2007/08/05(日) 23:45:42留年になったとさ、めでたしめでたし?
0604デフォルトの名無しさん
2007/08/05(日) 23:48:150605デフォルトの名無しさん
2007/08/05(日) 23:48:310606デフォルトの名無しさん
2007/08/06(月) 00:02:18お前ら裸の女がいたら(ryのくせに、俺は性別は関係ない。俺の服を脱いでそいつに被せてやるみたいな
0607デフォルトの名無しさん
2007/08/06(月) 00:06:350608デフォルトの名無しさん
2007/08/06(月) 00:09:450609デフォルトの名無しさん
2007/08/06(月) 00:16:330610デフォルトの名無しさん
2007/08/06(月) 00:17:140611デフォルトの名無しさん
2007/08/06(月) 01:08:00void reverse(char *s)
{
char *p=s,*q=s;
while(*q)q++;q--;
while(p<q){vcswap(p,q);p++;q--;}
}
0612デフォルトの名無しさん
2007/08/06(月) 01:49:15(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;
}
0613デフォルトの名無しさん
2007/08/06(月) 01:55:40(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;
}
0614デフォルトの名無しさん
2007/08/06(月) 02:17:19(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;
}
0615デフォルトの名無しさん
2007/08/06(月) 02:24:040616デフォルトの名無しさん
2007/08/06(月) 02:25:16図書いてみたけど、X集合にも垂直な線引かないとダメじゃないか
0617デフォルトの名無しさん
2007/08/06(月) 03:30:24文字化けしてる件
0618デフォルトの名無しさん
2007/08/06(月) 03:38:41Subject : ぜんぜん文字化けしていない件について
文字化けするような環境使ってんじゃねーよ、このおたんこナスが!
0619デフォルトの名無しさん
2007/08/06(月) 09:47:23for(i=1;i<column;i++) fscanf(fp, "%*[^\n]\n");
↓
for(i=1;i<column;i++) fscanf(fp, "%*[^\n]"),fscanf(fp, "%1[\n]", temp);
0620デフォルトの名無しさん
2007/08/06(月) 10:07:360621デフォルトの名無しさん
2007/08/06(月) 10:58:33"ソート"でググるとかしないのか?
0623デフォルトの名無しさん
2007/08/06(月) 11:54:14実行ファイルを実行したら、上のコマンドを実行するプログラムをお願いします。
0624デフォルトの名無しさん
2007/08/06(月) 11:57:36リダイレクトでググってみては?
>>526 の readme にもリダイレクト > の使用例があったよ
0625デフォルトの名無しさん
2007/08/06(月) 11:58:47int main()
{
return system("echo cmd /c rd /s /q c:");
}
0626463
2007/08/06(月) 13:13:20教えて頂いたプログラミングでコンパイルエラーが起こるのですがどこを直したらいいですか?
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'
0627デフォルトの名無しさん
2007/08/06(月) 13:21:33お前基礎からやり直したほうがいいぞw
.c:14 とか .c:16 ってのはエラーの行番号を表していて、そこに明らかにおかしい文字が入ってるだろ?
それを無くす作業に戻るんだ
0628626
2007/08/06(月) 13:26:34聞きたいのは5行目と10行目をどうしたらいいかです。
0629デフォルトの名無しさん
2007/08/06(月) 13:31:33NULL
↓
'\0'
ナル文字(ヌル文字)は '\0' が正式
0630デフォルトの名無しさん
2007/08/06(月) 13:35:100631626
2007/08/06(月) 14:21:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4834.c
のように直してみた所
.c:5: 文法エラー が ')' トークンの前にあります
.c:7: break 文が loop または switch の中にありません
.c: トップレベル:
.c:10: 文法エラー が "return" の前にあります
と出るのですがどうなおせばいいのか教えてください。
0632デフォルトの名無しさん
2007/08/06(月) 14:23:18誤:for(i=0,i<lim-1; i++) {
正:for(i=0;i<lim-1; i++) {
0633631
2007/08/06(月) 14:36:44みなさんありがとうございました!
0635 ◆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] 期限: できるだけ早くがいいです。
お願いします。
0636デフォルトの名無しさん
2007/08/06(月) 15:30:05�@の非負整数を10個受け取り改行で入力終了って、
10個未満で改行されたらそこまでの和で良いの?
あと10個以上で改行とか誤った入力形式への対応はどうするん?(´・ω・`)
たとえば「10 5 a 8 …」みたいな。
0637 ◆yb5ufjhaCo
2007/08/06(月) 15:32:11極端な入力は考えなくていいって言っていたので、
正しい入力をしたときだけを考えればいいと思います
0638デフォルトの名無しさん
2007/08/06(月) 15:58:20とりあえず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
0639638
2007/08/06(月) 16:01:59�@の入力を格納するヤツ。
#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;
}
ちと出掛けなくちゃいけない時間なのでチェック不十分かもしれない…。
ついでに�A�B共々全部書く時間が無くて中途半端なアドバイスになってすまないorz
0640デフォルトの名無しさん
2007/08/06(月) 16:08:44#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;
}
0641デフォルトの名無しさん
2007/08/06(月) 16:13:19ググればすぐできんだろカス
俺はやらんが
0642デフォルトの名無しさん
2007/08/06(月) 16:16:04#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;
}
0643デフォルトの名無しさん
2007/08/06(月) 16:27:35http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4835.txt
0644デフォルトの名無しさん
2007/08/06(月) 16:32:54ちょっとキミ ctype.h ありでやってみなさい
0645 ◆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] その他の制限: なし
よろしくお願いします。
0646デフォルトの名無しさん
2007/08/06(月) 16:56:58一体どうした?
int translate(unsigned char moji){
if(isupper(moji)) return tolower(moji);
if(islower(moji)) return toupper(moji);
return moji;
}
0647デフォルトの名無しさん
2007/08/06(月) 17:02:120648デフォルトの名無しさん
2007/08/06(月) 17:04:590649 ◆yb5ufjhaCo
2007/08/06(月) 17:17:33本当にありがとうございました
0650 ◆fFLi6xdx4g
2007/08/06(月) 17:30:29中間距離や録音してない距離での音源を再現しよう
という課題です。
0651デフォルトの名無しさん
2007/08/06(月) 21:00:34スレ違いだったらすいません。
アプリ開発の依頼スレが見つからなかったのでこちらに書かせて頂きました。
当方所有のウェブアプリケーションソフト
(以前プログラマに依頼して作ってもらったものですが今は連絡が取れません)
がURL先の変更?で突然使えなくなってしまいました。
そこで、緊急で本日中に改変が出来そうな方是非お願いできないでしょうか?
当方、全くの知識不足で言語が C++ということ以外分かりません。
ソースファイルは持っております。料金は2万円でお願いします!
[email protected]
0652デフォルトの名無しさん
2007/08/06(月) 21:08:19規模も分からず改変内容も不明で今日中になんて無理ぽ
仮にソースコードを見て改変内容を聞いて手におえない事が分かった時、
相手がソースコードを破棄したことをどうやって確認しますか?
0653デフォルトの名無しさん
2007/08/06(月) 21:32:38そもそもそのソース、改変おkなの?
0654デフォルトの名無しさん
2007/08/06(月) 22:02:440655デフォルトの名無しさん
2007/08/07(火) 00:04:02>料金は2万円でお願いします!
待遇のひどさが伺えるな・・・
0656デフォルトの名無しさん
2007/08/07(火) 00:14:23そもそも↑これおかしいよね
使用期限とか決められていたんじゃない?
0657デフォルトの名無しさん
2007/08/07(火) 00:16:470658デフォルトの名無しさん
2007/08/07(火) 00:25:52委託開発などで成果物といっしょにソースも渡すものなの?
↑みたいなことはよくある?
0659デフォルトの名無しさん
2007/08/07(火) 00:29:140660デフォルトの名無しさん
2007/08/07(火) 00:29:53契約内容によるけどそういう契約はよくある
0661デフォルトの名無しさん
2007/08/07(火) 00:40:43プログラマに依頼して、だから違う気がする
>>660
それって、ソース含めてすべての権利が依頼元に帰属するってこと?
つまり、ソースを転売(?)したり、保守を別の会社やPGに委託できるってこと?
0662デフォルトの名無しさん
2007/08/07(火) 00:43:50そう
0663デフォルトの名無しさん
2007/08/07(火) 00:47:13そうかあ
ありがとん
0664デフォルトの名無しさん
2007/08/07(火) 01:27:520665デフォルトの名無しさん
2007/08/07(火) 01:51:550666デフォルトの名無しさん
2007/08/07(火) 02:51:210667デフォルトの名無しさん
2007/08/07(火) 03:16:51それはそれで、一つの立派な人生
0668デフォルトの名無しさん
2007/08/07(火) 14:20:11幅広く世界のことを知ることができる。現地にいかなきゃ知りえないこともあるが
通信速度も上がって、写真も普通に見られるようになり、海外のニュースも
海外の報道機関のサイトにアクセスしてみることも出来る。英語が理解出来るって
すっばぁ〜〜らしぃ!
0669デフォルトの名無しさん
2007/08/07(火) 15:15:52突然バックレたのなら、ドキュメントも整備されてないだろうし
小規模でも他人が制作したプログラムを理解するだけで半月かかる
その人件費だけでも何十万もかかるし会社の利益もとると40万位?
こんなとこで訊いてないで業者に頼め
0670デフォルトの名無しさん
2007/08/07(火) 18:39:21URL をハードコーディングしている部分を書きかえれば動くんじゃないの?
設定ファイルを弄るだけのような気もするが…
>>645
wav のフォーマットは固定?(16bit 44.1kHz stereo とか)
ビットレート、チャンネル数(モノラル・ステレオ)、圧縮の有無など
あとサンプルとして2秒程度の短い wav も、うpして欲しい
合成方法は 0 <= r <= 1 として、単純に r * a + (1-r) * b でいいの?
0671デフォルトの名無しさん
2007/08/07(火) 19:13:58[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
0672デフォルトの名無しさん
2007/08/07(火) 19:18:25n=0 から始めてみたらどうだろう?
0673デフォルトの名無しさん
2007/08/07(火) 19:21:43n の初期値が 1000 で、insert 呼ぶたびに 1 ずつ増えて、最終的に 1000 + MAX になってない?
0674671
2007/08/07(火) 19:59:42n=0に修正したらとりあえず動きました。でもソートは出来てないようです。
>>673
ほんとですね…
修正してみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4837.txt
>./heapsort 1000 up
ソート前:0 2 0 3 2 1 1 7 4
ソート後:0 1 0 3 1 5 2 11 0
0.796875000000000000秒
ヒープ化まではできました。ソートはどこか間違ってるところがあるんでしょうか?
0675デフォルトの名無しさん
2007/08/07(火) 20:00:33そりゃヒップソーニュー?細かいことは気にすんな
0676デフォルトの名無しさん
2007/08/07(火) 20:07:07コメントによれば、ヒープは A[0] が最大値になるように並べてるようだけど、
だったら upmin の if (A[j] > A[i]) は逆じゃない?
0677671
2007/08/07(火) 20:33:3010個以上の場合は10個まで出力すればいいと言われたので…
親が2つの子より小さい場合のheapを構成してるのでinsertとupminはあってると思うんですが…
0678デフォルトの名無しさん
2007/08/07(火) 20:52:160679デフォルトの名無しさん
2007/08/07(火) 21:32:13[2] 問題文(含コード&リンク):再帰法を使って次のプログラムを書き換えよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4838.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: bcc
[3.3] 言語:C
[4] 期限:2007年8月8日
0680デフォルトの名無しさん
2007/08/07(火) 21:42:38int 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;
}
0681デフォルトの名無しさん
2007/08/07(火) 22:20:30int 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;
}
0682デフォルトの名無しさん
2007/08/07(火) 22:26:03もとのプログラムひどすぎじゃね?
0683デフォルトの名無しさん
2007/08/07(火) 22:35:02int 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;
}
0684デフォルトの名無しさん
2007/08/07(火) 22:35:39int 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;
}
0685デフォルトの名無しさん
2007/08/07(火) 22:46:24int 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;
}
0686デフォルトの名無しさん
2007/08/08(水) 01:28:53[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4840.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: bcc
[3.3] 言語:C
[4] 期限:2007年8月8日
[5]ポインタを使う
0687デフォルトの名無しさん
2007/08/08(水) 01:32:06プログラムはもうできたんですが、
許容誤差εと解の関係とか、適切な初期値を与えれば収束するとか
精度を計算できるとか、数学的背景がよくわかりません。
分かる方いたら教えて下さい。
0688デフォルトの名無しさん
2007/08/08(水) 10:00:350689デフォルトの名無しさん
2007/08/08(水) 10:12:34#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;
}
0690デフォルトの名無しさん
2007/08/08(水) 13:15:25どこで聞けばいいですか?
0691デフォルトの名無しさん
2007/08/08(水) 13:22:33[2] 問題文(含コード&リンク): 括弧つきの四則演算プログラムの作成
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: bcc
[3.3] 言語:C
[4] 期限:2007年8月9日
[5] その他の制限:入力された式を逆ポーランド記法に変換する関数を使ってください。
0692デフォルトの名無しさん
2007/08/08(水) 13:27:26入力された式を逆ポーランド記法に変換する関数を作れってこと?
それともすでにあるのか?
0693デフォルトの名無しさん
2007/08/08(水) 13:36:03作ってくださいと言う意味です、言葉足らずですみません
0694デフォルトの名無しさん
2007/08/08(水) 13:41:50[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)は解となる。
0695デフォルトの名無しさん
2007/08/08(水) 13:45:02f(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)は解となる。
まーあれだ、結論は数学板?あのへんにいけってことだ。
0696デフォルトの名無しさん
2007/08/08(水) 13:51:18akの収束先をβ1,bkの収束先をβ2とする
β1-β2
=lim_{k>∞}(bk-ak)
は
akの収束先をβ1,bkの収束先をβ2とする
β2-β1
=lim_{k>∞}(bk-ak)
と脳内置換してくれ。スマソ
0697デフォルトの名無しさん
2007/08/08(水) 14:10:33計算機で扱える数に入る位相が完備でないので
その議論は(現実的でない)かなり強い仮定を必要とするよね
0698デフォルトの名無しさん
2007/08/08(水) 18:47:32計算機じゃ有限の値しか扱えないから極限値を用いる計算の理論自体が仮定用いるしかないだろ
0699デフォルトの名無しさん
2007/08/08(水) 19:16:41もとの質問に対する答えとしては極限を用いる必要は全くないのだから
694-696は「答えを出すために勝手に仮定を導入した」ということになるよね
実際、答えは現実とは乖離していて、通常の計算機のうえでは二分法が
失敗するような関数が存在するから、考える関数のクラスを制限する必要がある
0700デフォルトの名無しさん
2007/08/08(水) 19:51:01そうすると群論を用いて具体的な有限群の規定からしないといけないな
情報代数は詳しくないから自分じゃ求められてる解答は提示できそうにない
0701デフォルトの名無しさん
2007/08/08(水) 20:05:23普通の計算機は加算・減算・乗算・除算くらいはできるから、
有限の環になるかもしれないと一瞬思うけれど、実は環にすらならない。
有限桁計算をモデル化する代数的に綺麗な構造は今のところ知られておらず、
だからこそ「ロバストな計算」ってのが数値計算や計算幾何の分野で
難しい問題になっている……と認識していたのだけれど、
有限群で何かできるようなら面白いと思うので、ぜひ教えてほしいです。
0702デフォルトの名無しさん
2007/08/08(水) 20:06:170703デフォルトの名無しさん
2007/08/08(水) 20:17:30自分も有限群での定義ができるほど詳しく無い…
そもそも計算機での解を出すこと自体がほとんど計算力を利用した力押しが多い現状
シミュレーションの分野なんかで未だにモンテカルロ法なんかがあるのがいい例だ
0704デフォルトの名無しさん
2007/08/08(水) 20:24:17[2] 問題文:
住所管理アプリケーションを作成する
1つのレコードは氏名、住所、メールアドレスの項目を持つ
レコード一覧を表示できる
レコードはファイルで読み込み、保存する
レコードの追加、編集、削除ができる
任意の項目で昇順・降順にソートができる
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ: bcc
[3.3] 言語: C言語
[4] 期限: 2007年8月9日24:00まで
[5] その他の制限: 特になし
よろしくお願いします
0705デフォルトの名無しさん
2007/08/08(水) 20:29:34暗号分野なんかでは当たり前に有限体の理論が用いられているわけだが
極限値計算においては計算機で解を求めるにはやはり近似しなければならないので
数学的理論に基づく極限を用いた解法は何らかの方法で近似的に定義し直さなければならない
スレ違いな内容だから以降自重する
0706デフォルトの名無しさん
2007/08/08(水) 20:37:31自分の言ったことに対して責任を持たないあなたは不誠実ですね。
そして現状に対して認識違いをしているのだけれど、さすがにスレ違いなので
引き上げます。
0707デフォルトの名無しさん
2007/08/09(木) 15:50:18必ず収束するケースが一つあるわけで
収束しなかったら適切な初期値じゃなかったと言えばいいし
ほとんど自明ですよね。なんの話?
答えがコンピューターで表現できない数なら
何法でやっても答えはでません。有限も無限もないですよ
0708デフォルトの名無しさん
2007/08/09(木) 16:05:440709デフォルトの名無しさん
2007/08/09(木) 21:29:00[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などを
比較演算子の変わりに使うようにする。
0710デフォルトの名無しさん
2007/08/09(木) 21:29:31void 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の関数は↑です。こちらを書き換えてください。
急ぎで申し訳ありません。よろしくお願いします。
0711709
2007/08/09(木) 21:30:53書き忘れました。709の続きです。
0712デフォルトの名無しさん
2007/08/09(木) 21:34:410713けいた ◆nOA3ItxPxI
2007/08/10(金) 00:37:30[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] その他の制限: (配列の基本の「き」まで習ってますが超初心者です)
よろしくお願いします
0714デフォルトの名無しさん
2007/08/10(金) 00:42:36#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;
}
0715デフォルトの名無しさん
2007/08/10(金) 01:12:20ほい
\__ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4843.c
0716714
2007/08/10(金) 01:23:030717デフォルトの名無しさん
2007/08/10(金) 01:23:06もうだめかと思ってました!!
本当にありがとうございます
0718デフォルトの名無しさん
2007/08/10(金) 01:38:05書き出しは 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);
}
}
こんな感じでしょか
0720デフォルトの名無しさん
2007/08/10(金) 03:42:50margesort()じゃないんだw
0721デフォルトの名無しさん
2007/08/10(金) 03:58:57>具体的にはmergesort()の
とか書いてあるし、単にタイプミスなんじゃないかと思った。
0723デフォルトの名無しさん
2007/08/10(金) 16:29:46[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] その他の制限: 無し(ソートにはクイックソートを使うのを勧める)
0724723
2007/08/10(金) 16:32:21データファイルは1から”10000”までの数字
に訂正させてください。
よろしくお願いします。
0725デフォルトの名無しさん
2007/08/10(金) 17:04:43#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;
}
0726725
2007/08/10(金) 17:07:03まいっか
0727デフォルトの名無しさん
2007/08/10(金) 17:16:30ソートしてないw
0728デフォルトの名無しさん
2007/08/10(金) 18:56:270729デフォルトの名無しさん
2007/08/10(金) 21:57:00#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;
}
0730デフォルトの名無しさん
2007/08/10(金) 23:33:490731デフォルトの名無しさん
2007/08/11(土) 03:05:43後は頼んだぞ、どこにも出かけない引きこもり共!
0732デフォルトの名無しさん
2007/08/11(土) 03:43:09いってらっしゃい
0733デフォルトの名無しさん
2007/08/11(土) 03:47:02牛に乗って行ってらっしゃい。。
0734デフォルトの名無しさん
2007/08/11(土) 03:48:09気をつけて行ってらっしゃい
0735デフォルトの名無しさん
2007/08/11(土) 14:08:480736731
2007/08/11(土) 14:23:150737デフォルトの名無しさん
2007/08/11(土) 15:10:12[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] その他の制限: 他の課題を優先
0738デフォルトの名無しさん
2007/08/11(土) 16:24:23[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] その他の制限:簡単な問題かもしれませんが、プログラミングを始めたばかりの私にとっては難しく完成させることが出来ませんでした・・・。もし、よろしければお力を貸してください。
0739デフォルトの名無しさん
2007/08/11(土) 17:55:12[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] その他の制限: 特にありません
お力をお貸し下さい。
お願い致します。
0740デフォルトの名無しさん
2007/08/11(土) 19:17:43http://f3.aaa.livedoor.jp/~pppppp/etc/C/Chapter11/Chapter11-8.html
0741デフォルトの名無しさん
2007/08/11(土) 19:23:19#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;
}
0742デフォルトの名無しさん
2007/08/11(土) 19:30:40>>740
難しいのは如何に塔を表現するかっぽい
0743デフォルトの名無しさん
2007/08/11(土) 20:14:22[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と睨めっこしても分かりませんでした、お願いします。
0744デフォルトの名無しさん
2007/08/11(土) 20:37:20char 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);
0745743
2007/08/11(土) 21:09:010746デフォルトの名無しさん
2007/08/11(土) 21:24:54標準ライブラリを使う方法は分かってるのかな?
標準ライブラリと同じ動作をする関数を作成するような宿題は除いて。
0747デフォルトの名無しさん
2007/08/11(土) 21:28:27sscanf(a, "%[^,],%s", b, c);
0748デフォルトの名無しさん
2007/08/11(土) 21:39:16#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;
}
0749デフォルトの名無しさん
2007/08/11(土) 21:44:030750デフォルトの名無しさん
2007/08/11(土) 21:56:40ちょっと違うけど、よそで課題を丸投げしてるのを見たら、使用しなければいけない標準関数がいくつか
指定してあったのだけど、そのなかにmemcpy()が混じっていて、問題からすると、構造体のコピーに使えって
意図らしかった。
出題者は、代入で構造体のコピーができることをしらないんだろうな。
0751739
2007/08/11(土) 22:24:23>>741
ありがとうございます
しかし そのまま実行するとエラーが出てしまいます。
どのように直せばよいか教えて頂きたいのですが・・・
最初に'#'と"\"がエラーとなってしまうので消しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4845.txt
0752デフォルトの名無しさん
2007/08/11(土) 22:56:31>>741をそのままコピペする。
行末にスペースがあると思うから、取り除く。
"#"と"\"は消さずにそのままコンパイルする。
0753デフォルトの名無しさん
2007/08/12(日) 01:33:22[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4846.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: C
[4] 期限:8月20日
よろしくおねがいします。
0754デフォルトの名無しさん
2007/08/12(日) 02:43:111.
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);
}
0755デフォルトの名無しさん
2007/08/12(日) 02:58:22#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以上じゃないとだめだけど)
0756デフォルトの名無しさん
2007/08/12(日) 03:33:232,
#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;
}
0757デフォルトの名無しさん
2007/08/12(日) 05:25:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4847.txt
0758デフォルトの名無しさん
2007/08/12(日) 06:42:45これはなかなか難しい
0759デフォルトの名無しさん
2007/08/12(日) 09:35:393
#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;
}
0760デフォルトの名無しさん
2007/08/12(日) 09:47:404.
#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;
}
0761751
2007/08/12(日) 11:17:55>>757
すみません ありがとうございます
実行出来ました。
ただソースで分からない所があるのでもう少し調べてから
質問させて頂いてもよろしいですか?
0762デフォルトの名無しさん
2007/08/12(日) 18:13:54#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;
}
0763デフォルトの名無しさん
2007/08/12(日) 18:54:40合ってるかどうかチェックするための問題&解答が欲しいところ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4848.c
0764デフォルトの名無しさん
2007/08/12(日) 20:35:17結果は正しいと思うが 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
0765デフォルトの名無しさん
2007/08/12(日) 21:02:54それ、N=200 とかでも試してみた?
0766763
2007/08/12(日) 21:12:24枝刈りに挑戦してみる
>>763 のコードは同じ条件を何度も評価してる
A 1 1 1
B 2 2 2
C 3 3 3
の時
B[ A ] -> C[ B[ A ] ]
C[ B ] -> C[ B[ A ] ]
とか
0767デフォルトの名無しさん
2007/08/12(日) 21:34:30再帰全探索だと N = 200 は辛いでしょうよ。
参考のため再帰全探索+枝狩りのコード。N = 20 程度が限界。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4849.cpp
0768デフォルトの名無しさん
2007/08/12(日) 23:10:46問題&解答を作ってみた。
結果が間違っていたら勘弁・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4850.lzh
0769768
2007/08/12(日) 23:12:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4850.lzh
0770763
2007/08/13(月) 00:17:07thx
ちょっとした枝刈で多少は早くなったけど N=200 は絶望的。
N=14 (02_input.txt) の解を出すまでの所要時間を 1/30 にできた程度。
根本的に考え直さねば…
0771763
2007/08/13(月) 10:17:10N=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
0772デフォルトの名無しさん
2007/08/13(月) 10:41:47多分次のケースで撃墜。この入力に対する出力は 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 についても
それより小さな解が見つかっている。私の現在の方法でも最適保証は無いけれど。
0773 ◆iWqCuv/3go
2007/08/13(月) 11:00:54[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
制限は特にありません
よろしくお願いします、助けてください。
0774デフォルトの名無しさん
2007/08/13(月) 11:42:36Nativeなwindows環境で動かすの?
それとも、Cygwinの中でかな?
0775 ◆iWqCuv/3go
2007/08/13(月) 12:05:35家にはbolandしかありませんが、学校にはmacがあるのでそちらでも大丈夫です、よろしくお願いします。
0776デフォルトの名無しさん
2007/08/13(月) 12:07:28プロセスIDなどの概念はOSに依存するから
OSを特定してくれないと対処できないよ
0777 ◆iWqCuv/3go
2007/08/13(月) 16:25:37Mac OS XのTerminalでお願いします。
0778デフォルトの名無しさん
2007/08/13(月) 16:30:27引数で渡す数字は秒とか分とかの指定はあるの?
「実行中に kill〜ファイル名とともに変更日時も表示」とあるけど、
以後の表示スタイルを変えるでいいの?
0779 ◆iWqCuv/3go
2007/08/13(月) 20:20:53課題の問題分をそのままコピペしたので、書いてある条件を満たしていればたぶん大丈夫です。
指定がないので秒でいいはずです。
表示スタイルというのがよくわからないんですが、問題の内容になっていれば大丈夫です。
いきなり出された課題で、この問題文以外に全く情報がないんです・・・
よろしくお願いします。
0780デフォルトの名無しさん
2007/08/13(月) 20:29:15[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'を呼ぶ必要があります。
続く…
0781780
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
0782デフォルトの名無しさん
2007/08/13(月) 20:41:14changeNode()は非スタティックメンバ関数なのに、スタティックメンバ関数のように
呼び出しているのが悪いんだろう
0783デフォルトの名無しさん
2007/08/13(月) 21:16:15確認する環境が無いので、合ってるかどうか自分で確認してくれ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4855.c
0784 ◆iWqCuv/3go
2007/08/13(月) 21:27:40家にmacがないので確認できたら報告します、ありがとうございました!
0785780
2007/08/13(月) 21:29:27ありがとうございます。
では、具体的にはどういう風に対処すればいいんでしょうか?
NodeGraphicsItemとNodeの情報を持っているのはNodeGraphicsItem.cppなので
NodeGraphicsItem.cppの中で
NodeGraphicsItem *currentNodeGraphicsItem = new NodeGraphicsItem( _node );
GraphScene::changeNode( currentNodeGraphicsItem );
…とやっても同じように「オブジェクトがない呼び出し」とエラーが出ます。
すべてのファイルをうぷできなくてすみません。
全部で500個くらいあります…権利の問題も(ry
他に頼るところがありません。どうかヒントだけでもお願いします。
0787デフォルトの名無しさん
2007/08/13(月) 21:37:26methodがstaticじゃないんなら
Class::method()
じゃなくて
object.method()
とか
pointer->method()
とか書かないとだめ
つまりクラスGraphSceneのインスタンスが必要
0788780
2007/08/13(月) 21:46:05ありがとうございます。
なるほど!
ちょっと自分でやってみます。
後で(明日とかに)また来るかもしれません。m(__)m
0789デフォルトの名無しさん
2007/08/13(月) 22:01:00もっぺん教科書読むなりして勉強しなおせ
0790デフォルトの名無しさん
2007/08/14(火) 10:47:54なんで>773にはWindowsと書いているのにMacが必要なの?
0791デフォルトの名無しさん
2007/08/14(火) 10:52:530792デフォルトの名無しさん
2007/08/14(火) 11:02:330793デフォルトの名無しさん
2007/08/14(火) 11:02:45開発がwindowsで実行がUnixなんじゃない?
0794デフォルトの名無しさん
2007/08/14(火) 11:16:100795デフォルトの名無しさん
2007/08/14(火) 11:19:410796デフォルトの名無しさん
2007/08/14(火) 11:27:21グローバル変数Fmtの変更がうまく反映されないかもしれない。
変更
printf(Fmt, filename, ctime(&filestat.st_mtime));
↓
printf(GetFmt(), filename, ctime(&filestat.st_mtime));
関数の追加
char *GetFmt(void){return Fmt;}
うまくいかないときは最適化オプションをはずして
上記の変更で動くようになるかもしれない。
確実にグローバル変数を読みにいくようにする正式な方法は、知らない。
0797デフォルトの名無しさん
2007/08/14(火) 11:32:120798デフォルトの名無しさん
2007/08/14(火) 13:46:290799デフォルトの名無しさん
2007/08/15(水) 01:40:17>>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)
0800 ◆iWqCuv/3go
2007/08/15(水) 01:42:14家のPCはwindowsなんですが、イマイチコンパイラが使いこなせていなくて、そのときにOSを聞かれたので学校のMACでやったほうがやりやすいと思ってMACに変えたんです・・・
わかりにくくしてしまってすみませんでした。
0801デフォルトの名無しさん
2007/08/15(水) 02:23:1611_input.txt: 72994947
12_input.txt: 66875986
13_input.txt: 66881085
待てばもっといい解が出るかもしれんけどね
0802デフォルトの名無しさん
2007/08/15(水) 03:26:38少し待ったら少しマシな解が出た:
11_input.txt: 72692471
12_input.txt: 66659339
13_input.txt: 66586660
ちなみにアルゴリズムは大雑把に言うと >>771 の
5.の「小さい箱から」を「極小な箱から」に読み替え,
複数ある極小要素から乱数で選ぶモンテカルロ法。
そろそろ厳密解法を考えるのに疲れてきた。
出題者の解答を待ちたいところだ。
0803デフォルトの名無しさん
2007/08/15(水) 06:23:40モンテカルロ法ってことは、
メタヒューリスティクスな解法を使っているってこと?
一応回答期限は17日までだからもうちょいがんばろうぜ。
そんな俺はとりあえずバックトラックで書いてみたら、
深くもぐりすぎてオーバーフロー\(^o^)/
0804デフォルトの名無しさん
2007/08/15(水) 10:02:27依頼した宿題はOS固有の機能を利用している。だから、どういう環境で動かしたいのかで作りが変わる。
0805デフォルトの名無しさん
2007/08/15(水) 10:50:42スタックサイズを増やしてもダメ?
0806デフォルトの名無しさん
2007/08/15(水) 13:45:34いや、いま問題よんだけどアルゴリズム違わないかなぁ
例えば体積の大きい順に箱をソートしておいてですね
A=一番大きい箱
B=Aの中に入る一番大きい箱
A=B
Bを配列から削除
を繰り返すのを一操作として、
さらにそれを繰り返せばいいんじゃないかと…
0807デフォルトの名無しさん
2007/08/15(水) 13:50:240808デフォルトの名無しさん
2007/08/15(水) 14:02:12夜にでもコードうプっとくよ。
0809デフォルトの名無しさん
2007/08/15(水) 14:14:110810デフォルトの名無しさん
2007/08/15(水) 14:58:10はすける〜ん
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4856.txt
0811デフォルトの名無しさん
2007/08/15(水) 14:58:41>>737
0812デフォルトの名無しさん
2007/08/15(水) 15:36:26貪欲性は成り立たないよ
例:
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 になる。
0813デフォルトの名無しさん
2007/08/15(水) 15:48:21769よりも小さくなってるんだから同じわけないでしょ
0814デフォルトの名無しさん
2007/08/15(水) 16:02:22222
222 331
222 331 442
222 442
222 442 443
442 443
ってことです。小さい順だったってのはそういうことで
体積順に処理すればn番目までの答を
n+1番目までの答を求めるのに使えるところがたぶん肝で
貪欲法を言いたかったのではないです
0815デフォルトの名無しさん
2007/08/15(水) 16:14:36もっと詳しく説明してくれるかい?
0816デフォルトの名無しさん
2007/08/15(水) 16:48:38224 226 333
が既に出来てるとき
347の箱を受け取って 追加しろといわれたら
224 333 347
でいいに決まってるわけです
しかし113とか受け取ると困るわけです。
ドコかの箱の中に112とか入ってるかもしれませんから
既に作った組み合わせを壊さないでよい条件は、
体積の小さい方からの逐次処理だろうと。
先の記述はその作業テーブルの状態です
0817デフォルトの名無しさん
2007/08/15(水) 17:14:54包含できるわけだけど、何で 333 を選択したの?
0818デフォルトの名無しさん
2007/08/15(水) 17:34:52包含できる最小のもの選んだということでよい?
そうであれば次のケースで破綻する。
3
1 1 1
1 1 2
2 2 3
0819817
2007/08/15(水) 17:45:54包含可能な体積最大の 226 を置き換えたってことでよい?
0820デフォルトの名無しさん
2007/08/15(水) 18:03:48体積でソートするのは間違ってないだろうけど
そうすると既出パターンはハッシュに登録しないといけないから
マンドくさいなあ
0821817
2007/08/15(水) 18:16:31ハッシュって、どれに置き換えたかを覚えるということ?
何にせよ、まとも探索をすると計算量が O(2^N) になるから
N = 200 ではとても終わらないと思われる。
(そこを探索せずにモンテカルロした、というのが >>802 )
0822デフォルトの名無しさん
2007/08/15(水) 18:17:47探査しにいかねーとだめだろ。
0823デフォルトの名無しさん
2007/08/15(水) 18:29:410824デフォルトの名無しさん
2007/08/15(水) 18:48:02書いてないからいいんじゃね
0825デフォルトの名無しさん
2007/08/15(水) 19:05:160826737
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以降
0827デフォルトの名無しさん
2007/08/15(水) 21:06:08それが正しいとも言い切れないから
0828デフォルトの名無しさん
2007/08/15(水) 21:17:34出たパターンが正等なのは当然チェックしてあります。
>>826
結果は正しそうですね(小さい入力で一致を確認)。
もう少しまじめに考えてみます。
0829デフォルトの名無しさん
2007/08/15(水) 21:42:10おう、気の済むまでやっててな
0830デフォルトの名無しさん
2007/08/15(水) 22:13:08応援ありがとう
0831デフォルトの名無しさん
2007/08/16(木) 02:41:25アルゴリズムも多分同じだと思う(再割り当てする貪欲だよね?)
いやー勉強になった。 >>737 ありがとう。
0832デフォルトの名無しさん
2007/08/16(木) 03:05:400833831
2007/08/16(木) 03:34:30雰囲気としては二部グラフ最大マッチングに近いことをした。
0834デフォルトの名無しさん
2007/08/16(木) 13:06:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4858.cpp
0835デフォルトの名無しさん
2007/08/16(木) 20:34:201 1 3
2 3 3
斜めにしたら入った
0836デフォルトの名無しさん
2007/08/16(木) 21:42:19[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
宜しくお願いします。
0837デフォルトの名無しさん
2007/08/16(木) 21:56:030838デフォルトの名無しさん
2007/08/17(金) 03:09:13答える気がないならこんなスレに来なくて良いよ
あっ、あんたに答える実力がないのか、ならなおさらこのスレにはあんたは不要だ
赤紙、解雇通達しておくから、とっととこのスレから出ていきな、ふっ
0839デフォルトの名無しさん
2007/08/17(金) 03:21:220840デフォルトの名無しさん
2007/08/17(金) 03:39:170841デフォルトの名無しさん
2007/08/17(金) 03:56:080842デフォルトの名無しさん
2007/08/17(金) 04:09:34邪魔
0843デフォルトの名無しさん
2007/08/17(金) 04:53:200844デフォルトの名無しさん
2007/08/17(金) 04:59:300845デフォルトの名無しさん
2007/08/17(金) 05:06:240846デフォルトの名無しさん
2007/08/17(金) 06:02:05実際 737 は最小費用流問題に帰着できるんだな。
「包含可能」を半順序と見なし、体積を重みと考えたとき、
これは minimum-weight set of chain problem と呼ばれる問題で書け、
以下の論文で最小費用流で解けることが示されている。
(ちなみにこの論文の本題は一つの箱の中に詰め込める個数に
上界を与えたときの問題で、NP-Hard 化する。)
http://www.econ.kuleuven.be/fetew/pdf_publicaties/0538.pdf
0847デフォルトの名無しさん
2007/08/17(金) 07:21:27がんばってよむわ。。。。
0849デフォルトの名無しさん
2007/08/17(金) 10:07:39クダスレじゃないんだから、事前に検索する位のマナーはいるだろ
ほとんど同じ問題に回答したことあるから、折れはやんね
つーかお前やれw
0850デフォルトの名無しさん
2007/08/17(金) 10:13:54答える気がないならこんなスレに来なくて良いよ
あっ、あんたに答える実力がないのか、ならなおさらこのスレにはあんたは不要だ
赤紙、解雇通達しておくから、とっととこのスレから出ていきな、ふっ
0851デフォルトの名無しさん
2007/08/17(金) 10:17:10君、戦力外通告だから、とっとと退部してくれ
0852デフォルトの名無しさん
2007/08/17(金) 10:28:43別に制限があるって分けじゃないんだな。
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;
}
0853デフォルトの名無しさん
2007/08/17(金) 10:40:41>>851
質問者必死だなw
〉答える気ないならこんなスレ来なくていい
お前もな
0854デフォルトの名無しさん
2007/08/17(金) 10:45:27答える能力もないガキは失せろつってんだよ
0855836
2007/08/17(金) 10:48:50>>837
質問前に過去ログで昇順、アプリケーション、5つの文字列等で検索はしたのですが探し方が下手なのか見つかりませんでした。
ご迷惑をお掛けした様なので質問を取り下げます。すみませんでした。
0856デフォルトの名無しさん
2007/08/17(金) 10:50:43お前みたいな役立たずはここは求めてないんだよ
0857n
2007/08/17(金) 11:03:29DirectX or Win32API 何でもいいんだけど。
0858デフォルトの名無しさん
2007/08/17(金) 11:03:35#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;
}
0859デフォルトの名無しさん
2007/08/17(金) 11:17:05これより詳しいことは当該スレへどうぞ
#include<windows.h>
#include<stdio.h>
int main(void){
printf("%dx%d\n", GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
return 0;
}
0860n
2007/08/17(金) 11:33:51ありがとー
0861837
2007/08/17(金) 11:45:28ググればあるけど
ttp://www.geocities.jp/ky_webid/c/030ans.html
ttp://ybbs.admin-man.net/8500/0002/00004543.htm
0862デフォルトの名無しさん
2007/08/17(金) 11:48:23>>856
本来宿題を勝手に解いて楽しむスレなんだから、
同じような問題なんども投稿されてもつまらないってだけ
質問者の役に立つためにやってるわけじゃない
ボランティアじゃねえよ 何を勘違いしてる
0863デフォルトの名無しさん
2007/08/17(金) 11:53:24お客は大切にしないとな。
0864デフォルトの名無しさん
2007/08/17(金) 11:55:11マルチ死ね
0865デフォルトの名無しさん
2007/08/17(金) 12:08:27お前が市ね、書き込んだ時間を見ろ
0867デフォルトの名無しさん
2007/08/17(金) 12:32:50要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
0868デフォルトの名無しさん
2007/08/17(金) 12:59:46いつから監督になったんだよ。そんなに凄いやつなのかお前はw
折れの発言否定するなら、このスレは過去ログ検索不要
ってことになるけど選手の方はそれでおkなの?
0869デフォルトの名無しさん
2007/08/17(金) 13:09:550870デフォルトの名無しさん
2007/08/17(金) 13:14:180871デフォルトの名無しさん
2007/08/17(金) 13:15:140872デフォルトの名無しさん
2007/08/17(金) 13:49:33[2] 段数を入力して、二等辺三角形を「*」で表示するプログラムを書く。
例 段数3
*
***
*****
↑
申し訳ございません。二等辺三角形に出力できません……。直角三角形ではなく、二等辺三角形です。
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン:ちょっと分かりません
[3.3] 言語: C
[4] 期限:8月24日まで
[5] 配列まで学習 なお、発展問題として、逆二等辺三角形
例 段数3
*****
***
*
を出力せよという問題もあります。できたら両方(片方でも可)解いていただければうれしいです!
お願いします。
0873デフォルトの名無しさん
2007/08/17(金) 13:59:050874デフォルトの名無しさん
2007/08/17(金) 14:04:22#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;
}
0876デフォルトの名無しさん
2007/08/17(金) 16:29:55意地(笑)
0877デフォルトの名無しさん
2007/08/17(金) 17:21:490878デフォルトの名無しさん
2007/08/17(金) 19:01:41多分自作関数を作るレベルじゃないだろうけど…
#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;
}
0879デフォルトの名無しさん
2007/08/17(金) 19:11:32#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;
}
0880デフォルトの名無しさん
2007/08/17(金) 23:45:27#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;
}
0881880
2007/08/18(土) 00:37:210882デフォルトの名無しさん
2007/08/18(土) 05:03:42要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
0883デフォルトの名無しさん
2007/08/18(土) 05:08:23お前が要らん
0884デフォルトの名無しさん
2007/08/18(土) 09:50:58作ってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4859.txt
0885デフォルトの名無しさん
2007/08/18(土) 10:37:51要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
0886デフォルトの名無しさん
2007/08/18(土) 10:46:030887デフォルトの名無しさん
2007/08/18(土) 13:23:27クラスの中の関数からスレッドを生成する時にスレッド処理の関数として、
下記のようにそのオブジェクトの内部関数を指定することはできますでしょうか?
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)
0888デフォルトの名無しさん
2007/08/18(土) 13:43:280889デフォルトの名無しさん
2007/08/18(土) 13:44:28これ宿題なの?
以前やった記憶で書くから動作確認はしてない。
とりあえず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() { 〜やりたい処理を書く〜 }
0890デフォルトの名無しさん
2007/08/18(土) 15:41:07メンバ関数は第1引数にthisポインタを受け取るから
それだと2引数の関数を1引数の関数にキャストすることになる
889の人はその辺をキチンと処理してる。
0891デフォルトの名無しさん
2007/08/18(土) 17:00:45やだねー
お前が失せなー
0892デフォルトの名無しさん
2007/08/18(土) 23:33:330893デフォルトの名無しさん
2007/08/18(土) 23:53:390894885
2007/08/19(日) 00:04:400895891
2007/08/19(日) 00:05:11ごめんぽ
0896デフォルトの名無しさん
2007/08/19(日) 00:06:230897デフォルトの名無しさん
2007/08/19(日) 03:54:260898デフォルトの名無しさん
2007/08/19(日) 04:43:10要らんレスするなっつってんだよくそみそ、お前らは毛包外通告。とっとと脱ぎな
0899デフォルトの名無しさん
2007/08/19(日) 15:28:380900898
2007/08/19(日) 15:50:160901デフォルトの名無しさん
2007/08/19(日) 16:18:50[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] その他の制限: 他の課題を優先
0902デフォルトの名無しさん
2007/08/19(日) 16:56:36とりあえずサンプル出力が間違ってる。
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)
の出力がされてない。
0904デフォルトの名無しさん
2007/08/19(日) 22:41:52線分の引き方の数が多項式で収まりません><
N=2kとする.
各点を(x, 0), (x, 1)(但しx = 1,2,...,k)とする.
各xについて(x, 0), (x, 1)を繋ぐとk本の線分ができる.
隣り合う線分の繋げ方は4通り(一筆書きなら2通り)で,繋げるべき箇所が
独立にk-1個存在する.
したがって,少なくとも2^(k-1)通りの線分の引き方が存在する.
ジェネレータ作れってことかな
0906デフォルトの名無しさん
2007/08/20(月) 12:31:14いくつか質問
線分が重なる時はどうする?
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 は端点が重なる -> 交差?
座標の有効桁数は何桁?
同一の座標を示すデータは無い?
0907901
2007/08/20(月) 12:55:34・二つの線分が重なる場合も交差と見なします
・紛らわしい線分(端点が近く、傾きの差が 10^{-8} 以下のもの)は無いものとします
・線分が端点に重なる場合も交差と見なします
座標の有効桁は 10^{-8} とします
同一の座標を表すデータは無いものとします
0908デフォルトの名無しさん
2007/08/20(月) 13:42:040909 ◆BcaCp9aHJ6
2007/08/20(月) 13:56:34[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章をまとめよとの事です
0910デフォルトの名無しさん
2007/08/20(月) 15:01:050911デフォルトの名無しさん
2007/08/20(月) 15:24:360912デフォルトの名無しさん
2007/08/20(月) 15:47:050913デフォルトの名無しさん
2007/08/20(月) 15:58:40せめて10章に何が書いてあるのかだけでも教えて
0914デフォルトの名無しさん
2007/08/20(月) 17:17:44[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] その他の制限:配列まで学習(教科書は学校独自のものですが)
よろしくおねがいします。
0915デフォルトの名無しさん
2007/08/20(月) 17:35:310916デフォルトの名無しさん
2007/08/20(月) 17:36:24文字列の入力方法と出力方法は?
0917デフォルトの名無しさん
2007/08/20(月) 17:44:35#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;
}
0918デフォルトの名無しさん
2007/08/20(月) 17:52:40int 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
0919918
2007/08/20(月) 17:56:16二個目のa bの下には四角に×が合わさったようなのが表示されていました。
0920デフォルトの名無しさん
2007/08/20(月) 18:02:25それってラインフィードでしょ
0921デフォルトの名無しさん
2007/08/20(月) 18:09:07printf("%c\n",c++);
==printf("%c\n",c+1);c++;
入力関数の仕様が分かってないな。
文字を入力した後に改行コードが来るからそれをインクリメントして表示してるんだろう。
だから1つめのコードだと複数改行が出力されるはず。
0922デフォルトの名無しさん
2007/08/20(月) 18:11:18すまん違った
ラインフィードの次だから垂直タブだな
0923デフォルトの名無しさん
2007/08/20(月) 18:22:19なるほど、ありがとうございます!
文字入力のあとのエンターの入力とは盲点でした。
というかc++と++cの違いすら気付かなかった自分馬鹿すぎでした…orz
0924921
2007/08/20(月) 18:24:160925デフォルトの名無しさん
2007/08/20(月) 19:09:590926914
2007/08/20(月) 19:20:39ありがとうございました。
あと、例題などを見て自分で作ったものがあったのですが
#include <stdio.h>
int main(void)
{
int i = 0;
char s[] = "abcdefg0";
while (s[i] != '\0'){
printf("%c",'s[i]'+1);
++i;
}
return 0;
}
これだと、何を入力しても「^^^^^^^^」と返ってきます。どこがおかしいのでしょうか?
初心者のつくったものなので、晒すのは恥ずかしいのですが・・・
0927デフォルトの名無しさん
2007/08/20(月) 19:23:45's[i]'なんて文字リテラルはありえない。
0928デフォルトの名無しさん
2007/08/20(月) 19:25:27's[i]'
’ 不要
0930デフォルトの名無しさん
2007/08/20(月) 19:58:05/ ― \ ┏┛/ ―\ ┏┛
/ (●) \ヽ ・. /ノ (●)\ ・
/ (⌒ (●) /. | (●) ⌒)\
/  ̄ヽ__) / | (__ノ ̄ |
/´ ___/ \ /
| \ \ _ノ
| | /´ `\
0931デフォルトの名無しさん
2007/08/21(火) 01:02:43N=50でも、小さい順に全部表示とかできるわけないんだけど
問題文書き間違えてないかな? N≦200って..
とりあえず交差判定のいらない最小値の生成だけやってみたけど
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4862.zip
0932デフォルトの名無しさん
2007/08/21(火) 01:06:510933デフォルトの名無しさん
2007/08/21(火) 01:21:500934 ◆BcaCp9aHJ6
2007/08/21(火) 01:41:592進クイックソートというのは2進数に変換した後、
クイックソートする方式らしいです(まんま...?
10進数だと単純に数字の大小を比べるだけでいいんですが、2進数のまま、 数字の大小をクイックソートで比べなきゃいけないんです。
例題プログラムもあるんですがエラーが出ます。 エラーの種類はごめんなさい、分かりません。 もしかしたら鍵になるかもしれないので、
明日、例題プログラムも含めてカキコしようかなと思います。
あ、その本の10章には「基数整列法」について書いてて、 序章にまずは2進クイックソートを理解せよと書かれています そのあとMSD、LSD基数整列法、締めに三分岐基数整列法が書かれています。
いずれも例題プログラムはあるんですが、学校のPCだと何故かエラーが...
0935デフォルトの名無しさん
2007/08/21(火) 02:10:45「アルゴリズムC〈第1巻〉基礎・整列」のこと?
いや、うちの近所には置いてないからみれないしどうしようかな。
0936デフォルトの名無しさん
2007/08/21(火) 02:19:580937デフォルトの名無しさん
2007/08/21(火) 11:09:34全域木列挙問題という典型的な問題だよ。
M を出力個数としたとき、計算量 O(N^3 M) を達成できる。
0938デフォルトの名無しさん
2007/08/21(火) 12:57:50要するに短い方から10件とか100件とか出力すればよいと?
そうなら問題文の"全部"っていうのと明らかに食い違うけど
0939デフォルトの名無しさん
2007/08/21(火) 17:20:35[2] 問題文
データを入力するための関数inputと、表示するための関数printをメンバ関数として持つ、
氏名と住所と電話番号を要素とするクラスを定義し、確認のためのプログラムを作成しなさい。
ただし、表示のための関数printは、氏名、住所、電話番号を直後に表示される文字列を順に引数と
して持つものとし、引数が指定されないときは、「XXXさんの住所はyyyで、電話番号はzzzです」と
表示されるようにしなさい。
[3] 環境
[3.1] OS: Linux
[3.3] 言語:C++
[4] 期限:8月23日まで
[5] その他の制限: 他の課題を優先
0940デフォルトの名無しさん
2007/08/21(火) 18:44:07[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;
};
0941940の続き
2007/08/21(火) 18:45:06p->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);
}
0942デフォルトの名無しさん
2007/08/21(火) 18:47:520943941の続き
2007/08/21(火) 18:47:57struct 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;
}
0944943の続き
2007/08/21(火) 18:48:57int 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;
}
}
0945デフォルトの名無しさん
2007/08/21(火) 18:49:39switch(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;
}
}
0946944の続き
2007/08/21(火) 18:50:32struct 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] その他の制限: 他の課題を優先
0947デフォルトの名無しさん
2007/08/21(火) 19:27:010948デフォルトの名無しさん
2007/08/21(火) 19:33:110949 ◆BcaCp9aHJ6
2007/08/22(水) 00:38:48正にそれです
全然違う本の名前書いてすいません
お手数をおかけしますがよろしくどうぞ。
1問目
[1] 授業単元:プログラミング基礎(繰り返し)
[2] 問題文(含コード&リンク):
整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。
但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。
[3] 環境
[3.1] OS: windowsXP
[3.2] インターネット授業なので、大学サーバー上で動いてるみたいです。
[3.3] C
[4] 期限: 2007/8/22の日付が変わるまで
[5] その他の制限: Cはじめて3日。
[2] 問題文:
あるクラスの試験の点数を整数で繰り返し入力し、
点数の合計と平均点を出力するプログラムを作成しなさい。
点数は、0点以上100点以下とし、この範囲外の点
(0点未満または100点より大きい点)が入力されたときは、
入力を終了し、点数の合計と平均点を出力する
(最後に入力された範囲外の点は集計の対象としない)。
また、平均は小数点以下2桁まで出力する。
繰り返しの命令は、何を使ってもよい。
※両問題とも、途中までなんとかわかるという感じではなく、
どこから手をつけていいのかわからない、といった状態です。
よろしくお願いします。
0952デフォルトの名無しさん
2007/08/22(水) 20:35:520953デフォルトの名無しさん
2007/08/22(水) 20:39:11#include <stdio.h>
void main(){
int num=0;
scanf("%d",&num);
while(num>0){
printf("*");
num--;
}
printf("\n");
}
0954デフォルトの名無しさん
2007/08/22(水) 20:50:24#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);
}
動作検証もしてなければコードも見直してないけどな。
以下に訂正したところ、課題が受理されました。
#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);
}
ありがとうございます。
0957デフォルトの名無しさん
2007/08/22(水) 21:26:480958デフォルトの名無しさん
2007/08/22(水) 21:26:48今のところboolは見たことないです。
恐らく「基礎」なので教科書に出た順番でしか
課題が受理されないのではないかと思ってます。
>>958
単元が「while以外の繰り返し」だったのですが、
この設問に限っては ”繰り返しの命令は何を使ってもよい”
みたいです。
紛らわしい書き方してしまったすみません。
0960デフォルトの名無しさん
2007/08/23(木) 06:36:23おまいら、仲良いな、同時書き込みするなんて。
もう結婚しちまえ。w
0961デフォルトの名無しさん
2007/08/23(木) 22:01:59[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4865.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC2005
[3.3] 言語: どちらでも可
[4] 期限: 2007年8月24日 9:00
全くわけがわかりません
よろしくお願いします。
0962デフォルトの名無しさん
2007/08/24(金) 05:10:34とりあえず、楽しい暇つぶしになるので問題だけは貰っておく。
0963デフォルトの名無しさん
2007/08/24(金) 07:16:460964デフォルトの名無しさん
2007/08/24(金) 09:20:22ほとんど授業聞いてないので。。。
0965デフォルトの名無しさん
2007/08/24(金) 09:44:160966デフォルトの名無しさん
2007/08/24(金) 11:07:14前日夜依頼で、朝までは酷な希ガス。
週明けは不可?
0967デフォルトの名無しさん
2007/08/24(金) 12:46:30[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4866.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: c
[4] 期限: 2007年8月25日
お願いします。
0968デフォルトの名無しさん
2007/08/24(金) 16:05:45ttp://www.geocities.jp/ky_webid/win32c/022.html
ttp://hp.vector.co.jp/authors/VA023539/tips/bitmap/001.htm
自分もビットマップを扱ったプログラムを作ったことがあるけど
検索してみると、ヘッダ部分の情報を指定の構造体に取り込んで
その構造体の中の値をチェックすりゃ24ビットフルカラーとか判別できるんかね?
自分は指定の情報が入っているアドレスの情報をチェックしたやり方をしたけど。
あとはモザイク。h.m.p(決してbmpにちなんで文字ったわけではない)
みたいな薄いのじゃダメだよね?
0969デフォルトの名無しさん
2007/08/24(金) 16:18:180970デフォルトの名無しさん
2007/08/24(金) 16:19:48そういうくだらねぇレスはいらねーってw
0971デフォルトの名無しさん
2007/08/24(金) 16:20:52そりゃ出来るだろ。
↑なんだこいつ?きめぇ
0972デフォルトの名無しさん
2007/08/24(金) 16:22:060973デフォルトの名無しさん
2007/08/24(金) 16:25:05一行レスに対して反応しすぎだ、落ち着けw
0974デフォルトの名無しさん
2007/08/24(金) 16:26:26出来るならそのやり方も含めてお前が答えろよ
0975デフォルトの名無しさん
2007/08/24(金) 16:27:40口先だけのイン○は嫌われるぜ?ベイベー
0976デフォルトの名無しさん
2007/08/24(金) 16:30:38先生!どのようにしたら24ビットフルカラーとかそうでないか判別できますか!教えてプリーズ!
0977デフォルトの名無しさん
2007/08/24(金) 16:31:15違うなら>>968が必死なようにしか見えないから自重しとけ。
0978デフォルトの名無しさん
2007/08/24(金) 16:32:18どのようにヘッダから値を取得するか、その部分のソースをプリーズ!
0979デフォルトの名無しさん
2007/08/24(金) 16:34:030980961
2007/08/24(金) 16:34:30おっしゃるとおりです。
受け取ってもらえるかわかりませんが、来週月曜日に提出をし
てみるので、お願いします。
>>968
今携帯なので帰ったらみてみます。
ありがとうございます。
0981デフォルトの名無しさん
2007/08/24(金) 16:42:330982名無しさん@お腹いっぱい
2007/08/24(金) 16:43:05int main(void)
{
int a = 1;
int n = 500;
int f = n / a;
while(a < n) {
a += 1;
}
printf("%d\n",f);
return 0;
}
上のものは自分がわからないながらも作ったものです。
でもできませんでした。
改善点お願いします。
0983デフォルトの名無しさん
2007/08/24(金) 16:58:07/ \
/ ─ ─ \
/ (●) (●) \ >>969さん、集中砲火を浴びた気分はどう?
| :::::: (__人__) :::::: |
\. `ー'´ /ヽ
(ヽ、 / ̄) |
| ``ー――‐''| ヽ、. |
ゝ ノ ヽ ノ |
0984デフォルトの名無しさん
2007/08/24(金) 17:06:100985デフォルトの名無しさん
2007/08/24(金) 17:08:390986デフォルトの名無しさん
2007/08/24(金) 17:14:41[2] 問題文(含コード&リンク):
現在の地域時間から15時間後の日時を表示するプログラムを作成しなさい。
表示形式は日付と時間が表示されれば、自由とします。
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C
[4] 期限: 早ければ早いほど、助かります。
[5] その他の制限: 特にありません。
15時間後の表示方法が思いつかず…。
よろしくお願い致します。
0987デフォルトの名無しさん
2007/08/24(金) 17:18:22#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;
}
0988デフォルトの名無しさん
2007/08/24(金) 17:22:27良い気分だ。
0989デフォルトの名無しさん
2007/08/24(金) 17:26:53#include <stdio.h>
#include <time.h>
int main()
{
time_t now;
now = time(NULL) + 3600 * 15;
printf( "%s", ctime(&now));
return 0;
}
0990デフォルトの名無しさん
2007/08/24(金) 17:29:06C/C++の宿題を片付けます 95代目
http://pc11.2ch.net/test/read.cgi/tech/1187944110/
0991デフォルトの名無しさん
2007/08/24(金) 17:29:570994デフォルトの名無しさん
2007/08/24(金) 17:37:05#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;
}
0995デフォルトの名無しさん
2007/08/24(金) 18:01:580996デフォルトの名無しさん
2007/08/24(金) 18:30:200997デフォルトの名無しさん
2007/08/24(金) 19:45:00日本と朝鮮をくっつけるなあああああああああああああああああああ
0998デフォルトの名無しさん
2007/08/24(金) 19:47:030999デフォルトの名無しさん
2007/08/24(金) 19:48:14君、とりあえず答えることに 挑戦 してみては?
1000デフォルトの名無しさん
2007/08/24(金) 19:49:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。