C/C++の宿題を片付けます 94代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[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/
2デフォルトの名無しさん:2007/07/26(木) 21:32:14
【即会い!!】

私自身が使用してみて、即出会えた出会い系サイトを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトのみを厳選して薦めております。

フリーアドレスで登録できるサイトを拡充しました!
↓↓↓
【ブログ 〜即出会えるサイト】
http://deaigets.blog97.fc2.com/
3デフォルトの名無しさん:2007/07/26(木) 21:32:16
>>1
スレたて乙
4デフォルトの名無しさん:2007/07/26(木) 21:36:23
>>1 の続き
【回答者へ】
gdgd質問者をネチネチと嬲ったり詰ったりしていないでソースで答えを示せ!
5デフォルトの名無しさん:2007/07/26(木) 21:59:26
>>4捕捉
答えを出せば何をやってもいいという意味ではないので勘違いなきよう
6デフォルトの名無しさん:2007/07/26(木) 22:05:00
>>1
質問者は神様ですか?
7デフォルトの名無しさん:2007/07/26(木) 22:06:13
>>6 なわけない。あくまでも答える側は任意。
8デフォルトの名無しさん:2007/07/26(木) 22:07:28
>>6
持ちつ持たれつ、かな。どっちもいないとスレが成立しない。
9デフォルトの名無しさん:2007/07/26(木) 23:14:22
こっちは成立しなくてもなんにも困らないわけだが。
10デフォルトの名無しさん:2007/07/26(木) 23:39:59
オナネタがなくなったら困るだろ?
11デフォルトの名無しさん:2007/07/27(金) 00:03:20
最近このスレにいいネタが少かったので久しぶりに来た俺
12デフォルトの名無しさん:2007/07/27(金) 00:22:57
>>9
そう、お前みたいな奴が来なくても成立するから二度と来るな
13デフォルトの名無しさん:2007/07/27(金) 00:24:03
万が一AVが無くなっても、世の中から女が消えるわけじゃないしな
無くなっても特別困ることは無いと思う。あると便利だけど。
14デフォルトの名無しさん:2007/07/27(金) 00:27:12
AVと女の存在の有無についてどう直結するのか教えてくれ。AV : AudioVideoとして
15デフォルトの名無しさん:2007/07/27(金) 00:29:23
女の出てこない映画とか少ないだろ
16デフォルトの名無しさん:2007/07/27(金) 00:29:50
男ばっかりの映像コンテンツなんて気持ち悪くて・・・ orz
17デフォルトの名無しさん:2007/07/27(金) 00:30:23
や ら な い か
18デフォルトの名無しさん:2007/07/27(金) 00:30:50
ヤラネーヨ
19デフォルトの名無しさん:2007/07/27(金) 00:31:57
ウホッ
20:2007/07/27(金) 01:21:19
[1] 授業単元:コンピュータプログラミング論
[2] 問題文(含コード&リンク): POSデータ解析システム
K氏は、3つのコンビニエンスストア(X店、Y店、Z店)をチェーン店に持つオーナーです。コンビ
ニエンスストアの経営において、売れ筋商品と死に筋商品の的確な把握は死活問題に直結する重要な業務
です。そこでK氏は、チェーン店に、毎日どんな商品がどれくらい売れたのかといった販売情報を、CS
Vファイルとして送るように指示していました。しかし、送られてくるデータファイルは膨大であり、そ
れらを統合して、全店を通して最も売れた商品はどれで、何が売れていないかを把握することは困難でし
た。つまり、送られてくるデータを適切に活用できないでいました。そこで、K氏はあなたに、こういっ
たことを解決するシステム(POSデータ解析システム)を開発するように頼みました。K氏は、毎日送
られてくるX、Y、Z店の個別の販売情報を合計した一括データを入手したいそうです。
21:2007/07/27(金) 01:22:52
続き・・・
まず、あなたは、各店舗から送ってもらうCSV ファイル名を以下のようにするよう、お願いしました。
X店 data-x.csv
Y店 data-y.csv
Z店 data-z.csv
また、商品名(全100 品種)は必ず以下の形式で入力するように指示しました。
「 Item Item-00 」から「 Item Item-99 」までの半角7 文字
さらに、各店から送られてくるレコードのフィールドは、以下の項目にして、売上時刻順に並べてもら
うよう、お願いしました。以下のようなCSV ファイルが送られてくることになります。
売上時刻 商品名 売上個数
0:12,  Item-42, 2
0:12,  Item-03, 1
0:49,  Item-92, 3


23:38,  Item-80, 1
また、毎日送られてくるCSVファイルとは別に、単価情報が格納された tanka.csv ファイルを作りま
した。このファイルのレコードのフィールドは、次のようになっていて、商品名順に並んでいます。
商品名 単価
Item-00,150
Item-01,120

Item-99,230
最後に、K 氏に提供する統合ファイル(data data-all.csv csv)のレコードの中身は以下のようにして、商品名
の小さい順にレコードを作りました。
商品名 単価 総売上個数 売上高
ここで、大事なことは、売上情報を統合することです。例えば、単価150 円のItem-23 という商品が、
X 店では15 個、Y 店では、25 個、Z 店では10 個売れたとすると、以下のようになっているということです。
Item-23,150,50,7500
また、全店舗を通して1 個も売れなかった商品情報は載せないことにしました。
22デフォルトの名無しさん:2007/07/27(金) 01:23:58
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
23:2007/07/27(金) 01:24:28
続き・・・
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C)
[4] 期限: ([2007年07月31日23:59まで] )
[5] その他の制限:
#include <stdio.h>
typedef struct _item{
int tanka;
int kosuu;
} Item;

int main(){
Item item[100];
FILE *ft;
ft = fopen("tanka.csv","r");
while (fscanf(ft,"Item-%d,%d",&n,&t)!=EOF){
item[n],tanka = t;
}
fclose(ft);

ここまでなら習っています。ここから続きが全くわかりません。どなたか是非教えてください。本当にお願いします。あと変数と関数の意味、工夫点を明記してくれたら助かります。
24デフォルトの名無しさん:2007/07/27(金) 02:06:39
店舗からのファイルとか単価情報とかのサンプルないの?
25デフォルトの名無しさん:2007/07/27(金) 02:08:01
[1] 授業単元: プログラム言語
[2] 問題文:
3行3列の行列の和を計算するプログラムを作成する。
3行3列の行列の積を計算するプログラムを作成する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2007年7月27日まで
[5] その他の制限:
配列を使わなければならず、
#include <stdio.h>
main()
{
int a[3][3],b[3][3],c[3][3],x,i,j,n,k;
for(i=0;i<3;i=i+1)
for(j=0;j<3;j=j+1)
scanf
で値を読み込む所まではわかったのですが、その後の計算方法が全くわかりません。
どうぞご教授願います。
26デフォルトの名無しさん:2007/07/27(金) 02:41:26
[1] 授業単元: プログラミング演習
[2] 問題文:
時刻0に1個の赤血球から血液の培養を始める。1分後に
赤血球は死に次の確率で下の組み合わせのうちのどれかで
おきかえられる。

2個の赤血球           1/4
1個の赤血球と1個の白血球    2/3
2個の白血球           1/12

各赤血球は1分間生存して親の赤血球と同様に子を生む。
各白血球は1分間生存して子を作らずに死ぬ。個々の血球は
独立にふるまうと仮定する。
--------------------------------------------------------

○問題
上記の血球の培養過程をモンテカルロ法によりシミュレートし
1時間後の赤血球の数の確率分布を求めよ。なお確率分布は
乱数の初期値を変えて何度もシミュレーションを行い、
そのヒストグラムから求めること
 [3.1] OS:Linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:7月25日午前中
[5] その他の制限:「なお確率分布は
乱数の初期値を変えて何度もシミュレーションを行い、
そのヒストグラムから求めること。 」
といっている意味がよく分からないのでそこのところを詳しく説明して
いただけると幸いです。
どうかご教授よろしくお願いします。
27デフォルトの名無しさん:2007/07/27(金) 02:49:05
28:2007/07/27(金) 02:50:30
>>24 
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
こちらに店舗からのファイルとか単価情報とかのサンプル載せました。
29デフォルトの名無しさん:2007/07/27(金) 03:11:39
┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨
30デフォルトの名無しさん:2007/07/27(金) 04:27:55
>>20
超くそーす とりあえず動く 合ってるかわかんね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4768.c
31デフォルトの名無しさん:2007/07/27(金) 05:49:21
>>26 これはひどい
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    long int prev[2], cell[2];
    unsigned int key;
    int hist[10] = {0}, i, j, k, n;
    for(i = 0; i < 50; i++){
        printf("input key (unsigned int) : "), scanf("%d", &key);
        srand(key);
        prev[0] = 1, prev[1] = 0;
        for(j = 0; j < 60; j++){
            cell[0] = 0, cell[1] = 0;
            for(k = 0; k < prev[0]; k++){
                n = (int)((double)rand()/(RAND_MAX + 1)*12);
                if(n < 4) cell[0] += 2;
                else if(n < 11) cell[0]++, cell[1]++;
                else cell[1] += 2;
            }
            prev[0] = cell[0], prev[1] = cell[1];
        }
        hist[(int)((double)cell[0]/(cell[0] + cell[1])*10)]++;
    }
    for(i = 0; i < 10; i++){
        printf("%3.1f : ", (double)i/10);
        for(j = 0; j < hist[i]; j++) putchar('*');
        putchar('\n');
    }
    return 0;
}
32デフォルトの名無しさん:2007/07/27(金) 06:02:37
33デフォルトの名無しさん:2007/07/27(金) 06:03:54
符号無しじゃないとまずいな……
34デフォルトの名無しさん:2007/07/27(金) 08:18:41
>31
確率間違ってない?
35前すれ998:2007/07/27(金) 09:01:33
> if(buf[0])
>   put_word(stdout, column, buf, !first);

if(buf[0])
{
  put_word(stdout, column, buf, !first);
  first = 0;
}
の間違い。再三すまん。
36デフォルトの名無しさん:2007/07/27(金) 13:32:32
[1] 授業単元:情報基礎
[2] 問題文(含コード&リンク):
次の仕様をみたすプログラムを作成せよ。
・入力は3つの正の整数a,b,c
・出力は、a,b,c,の中で最大の整数Mと最小の整数m。さらにMPmとMCmの値。
たとえば、a=4,b=3,c=5を入力した場合は、出力が
M=5,m=3,
P=60,C=10
となるようにする。出力の体裁は好きにして良いが、それぞれの数値が区別できるようにすること。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:今日の20時までです

助けてください。
C言語さっぱりです
37デフォルトの名無しさん:2007/07/27(金) 14:17:33
>>36

#include<stdio.h>

int fact(int n){
if(n<2)
return 1;
else
return n*fact(n-1);
}

int main(void){
int a,b,c,M,m,P,C;
printf("a=",a); scanf("%d",&a);
printf("b=",b); scanf("%d",&b);
printf("c=",c); scanf("%d",&c);
M=a>b?a:b; M=M>c?M:c;
m=a<b?a:b; m=m<c?m:c;
P=fact(M)/fact(M-m);
C=fact(M)/fact(m)/fact(M-m);
printf("M=%d\nm=%d\nP=%d\nC=%d\n",M,m,P,C);
return 0;
}
38デフォルトの名無しさん:2007/07/27(金) 14:18:40
>>36
#include <stdio.h>

int fact( int n ) { return ( n < 2 ) ? 1 : n * fact( n - 1 ); }
int nPr( int n, int r ) { return fact( n ) / fact( n - r );}
int nCr( int n, int r ) { return nPr( n, r ) / fact( r );}
int max( int a, int b ) { return ( a > b ) ? a : b ; }
int min( int a, int b ) { return ( a > b ) ? b : a ; }

int main( void )
{
int a,b,c,M,m;
printf( "a=" ); scanf( "%d",&a );
printf( "b=" ); scanf( "%d",&b );
printf( "c=" ); scanf( "%d",&c );
printf( "M=%d\n", M = max( max( a, b ), c ) );
printf( "m=%d\n", m = min( min( a, b ), c ) );
printf( "MPm=%dP%d=%d\n", M, m, nPr( M, m ) );
printf( "MCm=%dC%d=%d\n", M, m, nCr( M, m ) );
return 0;
}
39デフォルトの名無しさん:2007/07/27(金) 14:21:34
≫37さん
たすかりました!
ありがとうございました^^
4037:2007/07/27(金) 14:33:41
>>39
いや、>>38の方が整然としてて、fact関数だけで脱帽
41デフォルトの名無しさん:2007/07/27(金) 20:07:26
>>30 >>27 さぁ、俺に¢50支払ってくれ
42デフォルトの名無しさん:2007/07/27(金) 20:13:37
>>41
つI
43デフォルトの名無しさん:2007/07/27(金) 20:16:47
>>41
つI
44デフォルトの名無しさん:2007/07/27(金) 20:24:41
>>41
つIIII
45デフォルトの名無しさん:2007/07/27(金) 20:25:15
[1] 授業単元: プログラム言語演習
[2] 問題文(含コード&リンク):
「1、整数nを受け取り、パスカルの三角形を印字する戻り値のない関数を作成せよ。
ただし、関数内では2次元配列を大きめに宣言し、配列とくり返し構造を用いて実現すること。」
さらに、
「2、1のパスカルの三角形を1次元配列で実現せよ。」
という問題です。
配列が苦手で、書き方がさっぱりわかりません。どうぞお力を貸してください。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: できれば今日中にお願いします。
[5] その他の制限: 配列を使ってお願いします。
46デフォルトの名無しさん:2007/07/27(金) 20:44:36
1だけ

void triangle(int n) {
int i,j;
int N[100][100];

// パスカルの三角形の計算
for(i=0;i<n;i++) {
N[i][0]=1; //左端に1を設定
N[0][i]=1; //右端に1を設定
}
for(i=1;i<n;i++) {
for(j=1;j<n;j++) {
N[i][j]=N[i-1][j]+N[i][j-1]; //中の計算
}
}
// パスカルの三角形の表示
for(i=0;i<n;i++) {
for(j=0;j<n-i-1;j++) { //右の空白を表示
printf("半角空白3つ");
}
for(j=0;j<=i;j++) { //数字を表示
printf("%3d半角空白3つ",N[i-j][j]);
//配列Nを左下から右上に表示
}
printf("\n");
}
}
47デフォルトの名無しさん:2007/07/27(金) 21:11:22
2だけ

void pascal_triangle(int n)
{
int val[MAX] = {0};
int i, j;

for(i = 0; i < n; i++)
{
for(j=0;j<n-i-1;j++) { //右の空白を表示
printf(" ");
}
for(j = i; j >= 0 ; j--)
{
if(j == 0){
val[j] = 1;
}
else{
val[j] += val[j-1];
}
printf("%4d", val[j]);
}
printf("\n");
}
}
48デフォルトの名無しさん:2007/07/27(金) 21:20:22
どんだけぇ〜〜〜っつかマイン関数も書けYO!
49デフォルトの名無しさん: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;
}
50デフォルトの名無しさん:2007/07/27(金) 21:29:26
自分でって、俺は質問者じゃねーよw とりあえず俺に¢50払えw
51デフォルトの名無しさん:2007/07/27(金) 21:30:03
>>50
つS
52デフォルトの名無しさん:2007/07/27(金) 21:34:13
>>50
つ●
53デフォルトの名無しさん:2007/07/27(金) 21:37:08
そうだ、今度っからは クソース って言葉だけでなく、クソースを書いた者にも税金のごとく徴収するぜ?w
54デフォルトの名無しさん:2007/07/27(金) 22:09:50
>27さん
どうもありがとうございました。
助かりました。
55デフォルトの名無しさん:2007/07/27(金) 23:40:34
>>53
っ ちゃんと動くソース
56デフォルトの名無しさん:2007/07/27(金) 23:54:52
57デフォルトの名無しさん:2007/07/27(金) 23:56:40
クソ−ツ
58デフォルトの名無しさん:2007/07/28(土) 00:19:29
>>55 おまいは俺を怒らせた。ちみは2倍の$1の支払いを命ずる
59デフォルトの名無しさん:2007/07/28(土) 00:40:47
せっかく来たんで記念に教えてあげるんですが、






>>58 すべってますよ。あ〜、みんなそのねたあきちゃった。ざんねん。
60デフォルトの名無しさん:2007/07/28(土) 00:45:45
ム板というよりVIPのノリだな
とりあえず自分の出すソースに自信が無いなら出さなくてもおk
自分の回答よりヘボな回答が出たら、
自分のほうが上だと優越感に浸りながら、ただROMってろ
61デフォルトの名無しさん:2007/07/28(土) 01:14:05
自信があるやつも別に出さなくていいよ。ちゃんとROMってれば。
62デフォルトの名無しさん:2007/07/28(土) 01:28:17
[1] 授業単元: プログラム言語
[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] その他の制限:
63デフォルトの名無しさん:2007/07/28(土) 01:29:33
62です。どうぞよろしくお願いいたします。
64デフォルトの名無しさん:2007/07/28(土) 01:36:14
激しく期限切れだな
65デフォルトの名無しさん:2007/07/28(土) 01:43:29
とりあえず言い訳を考えよう。
「PCの時計が1年狂ってました m(_ _)m」でどう?
66デフォルトの名無しさん:2007/07/28(土) 01:43:53
int kazu(int n)
{ int i,j;
for(i=0;i<n;i=i+1)
{ printf("*"); }
printf("\n");
if(n<1)return 0;
j=kazu(n-1);
for(i=0;i<n;i=i+1)
{ printf("*"); }
printf("\n");
return j+n;}
6765:2007/07/28(土) 01:48:12
// *をwidth個出力し(×2回)、幅width以上の行に含まれる*の個数を返す関数
int printLine( const int width, const int maxWidth ) {
printStars( width );
if( maxWidth <= width ) return width;
int result = width * 2 + printLine( width + 1, maxWidth );
printStars( width);
return result;
}
int main( void ) {
printf( "%d\n", printLine( 1, 3 ) );
}
6865:2007/07/28(土) 01:51:15
行数減らす為に汚くなったけどかんべんな。
あと、printStars(int)関数は適当に脳内補完して。
ついでに、デバッグしてないから ノシ
6965:2007/07/28(土) 01:53:26
あ、printLine()はprintLines()の方がイイかも。
70デフォルトの名無しさん:2007/07/28(土) 02:32:04
[1] 授業単元: C言語演習T
[2] 問題文(含コード&リンク):
配列を用いて10桁同士の足し算をする関数を作成する。
入力と出力はメインで行い、関数内で計算すること。

引き算とかけ算もあるのですが、まず足し算の方法がわからないので、教えて頂けないでしょうか。
本当に困っています。よろしくお願いしますm(_ _)m
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2007年7月28日23:00まで] )
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
配列の単元なので、配列でお願いします。
71デフォルトの名無しさん:2007/07/28(土) 02:49:59
>>62 再帰まんどくせっからこれで

#include<stdio.h>
int kazu(int n);
int main(void)
{ int a,b,i,j;
printf("入力:");
scanf("%d",&a);
for(i=1,b=0; i<=a; i++) {
for(j=0; j<i; j++,b++)
printf("*");
printf("\n");
}
for(i=a-1; i>0; i--) {
for(j=0; j<i; j++,b++)
printf("*");
printf("\n");
}
printf("%d\n",b);
return 0;}

72デフォルトの名無しさん:2007/07/28(土) 10:37:26
>>60みたいなことを言う奴こそクソースしか書かないくせに
質問者をネチネチ詰るんだよな。良いからgdgd言ってねーでお前のウンコソースを出せ!
ウンコソースって言っても下痢じゃねーぞ
73デフォルトの名無しさん:2007/07/28(土) 10:49:44
>>70
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

double Plustod(const char *src1, const char *src2)
{
char *p;
double d1=strtod(src1, &p);
double d2=strtod(src2, &p);
return d1+d2;
}
int main()
{
char d1[12],d2[12];
char *temp;
double result;
fgets(d1,sizeof(d1),stdin);
if(temp = strchr(d1,'\n'))
*temp = '\0';
fgets(d2,sizeof(d2),stdin);
if(temp = strchr(d2,'\n'))
*temp = '\0';
result = Plustod(d1,d2);
printf("%s+%s=%lf\n",d1,d2,result);
return 0;
}
74デフォルトの名無しさん:2007/07/28(土) 10:57:49
それは配列を用いてるとは言わないだろ
7573:2007/07/28(土) 11:10:16
つかってんじゃねーかよ
文句あっか
76デフォルトの名無しさん:2007/07/28(土) 11:12:19
[1] プログラミング実習
[2] Time関数を用いてストップウォッチを作りなさい。
  また、何か入力し時間を止めるまで現在の経過時間を表示させる事。
[3] 環境
 [3.1] windowsXP
 [3.2] VC 6.0
 [3.3] C言語のみ
[4] 期限:2007年8月1日までに提出
[5] 基礎は一通りやりました。

「何か入力があるまで経過時間を表示させておく」
という所が全く分からず困っています。
77デフォルトの名無しさん:2007/07/28(土) 11:24:51
>>76
常に全力で時間を表示する

#include<stdio.h>
#include<time.h>
#include<conio.h>

int main(void){
time_t start, end;

time(&start);
do{
time(&end);
printf("\r %.0f [sec] ", difftime(end, start));
}while(!kbhit());

return 0;
}
7876:2007/07/28(土) 11:42:47
>>77
kbhit()があるのを思い出しました。
これを元に期日までに作ってみます。
ありがとうございました!!
79デフォルトの名無しさん:2007/07/28(土) 11:46:11
しっかし、ストップウォッチでtimeか・・・俺ならclockいくけど
80not 77:2007/07/28(土) 12:16:27
>>79
clock()が返すのは
「プログラムが実際に使用したCPU時間」だよ。
「プログラムが起動後に経過した時間」ではない。
返してくる値は実装によってかなりまちまちなのが実情で、
ぶっちゃけ役に立たない関数だと思われ。
time()は秒単位でしか計れないのが欠点だが、他に移植性がそこそこ
ありそうで使えそうな関数は無い。

ま、>>77はどうせkbhit()なんてものを使ってるんだから、API使えばいいだろな。
81デフォルトの名無しさん:2007/07/28(土) 13:02:25
>>77
四捨五入はまずいだろ。
82デフォルトの名無しさん:2007/07/28(土) 13:06:15
>>81
大丈夫、整数だ。
83プログラミング初心者:2007/07/28(土) 14:47:43
[1]授業単元:c言語

[2]問題文(含コード&リンク): 2つの符号なし整数a,b(ただし、a>bとする)を
キーボードから読み込み
@a,bを2進表示し、配列の中にビットを格納しなさい
Aa,bの四則演算
c=a+b
d=a-b
e=a*b
f=a/b(商f1と余りf2)を計算しその結果を出力しなさい

[3]環境
 [3.1] OS: Windows
 [3.2] 言語: C言語

[4]期限:2007年7月30日まで
84プログラミング初心者:2007/07/28(土) 14:49:02
>>83
#include <stdio.h>
void dtob(unsigned int n, char *s) {
unsigned int i = 32;
s[i] = '\0';
for (i = 31; i >= 0; i--) {
s[i] = (((n >> (31 - i)) & 1) + '0');
}
}

int main(void) {
unsigned int a, b;
char buf[33]; /* for 32bit */

scanf("%d %d", &a, &b);
dtob(a, buf);
printf("%s\n", buf);
dtob(b, buf);
printf("%s\n", buf);
printf("%d + %d = %d\n", a, b, a+b);
printf("%d - %d = %d\n", a, b, a-b);
printf("%d * %d = %d\n", a, b, a*b);
b && printf("%d / %d = %d(%d)\n", a, b, a/b, a%b);
return 0;
}
デバッグ後に何すればいいか教えてください
85デフォルトの名無しさん:2007/07/28(土) 15:00:46
お尋ねしたいのですが以下のプログラムに、
「rand100000.dat(ランダムに数値が100000個並んでいるデータ)」
から読み込んでソートするというのを追加したいのですがどうすればよいでしょうか?

void BubbleSort(int Data[], int n)
{
int BeginPlace, ComparePlace;
//比較を始める位置を最初からn-1まで変えていく
for(BeginPlace = 0;BeginPlace < n;BeginPlace++)
{
//n - BeginPlaceまで比較する
for(ComparePlace = 1;ComparePlace < n - BeginPlace;ComparePlace++)
{
//右のほうが小さかったら交換する
if(Data[ComparePlace - 1] > Data[ComparePlace])
{
Swap(&(Data[ComparePlace - 1]), &(Data[ComparePlace]));
}
}
}

return;
}
86デフォルトの名無しさん:2007/07/28(土) 15:07:23
>>85
これでやってみて


//比較を始める位置を最初からn-1まで変えていく
for(BeginPlace = 0;BeginPlace < ((((((((n-1))))))));BeginPlace++)
{
//n - BeginPlaceまで比較する
for(ComparePlace = ((((((((BeginPlace+1))))))));ComparePlace < ((((((((n))))))));ComparePlace++)
87デフォルトの名無しさん:2007/07/28(土) 15:08:47
ごめん、まちがったww
88デフォルトの名無しさん :2007/07/28(土) 15:42:48
>>85
void bubble_sort(int sort[], int elements)
{
int i,j,temp;
for(i=0; i < elements; i++){
for(j=i; j < elements; j++){
if(sort[i] > sort[j]){
temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
}

}
}
}
89デフォルトの名無しさん:2007/07/28(土) 16:02:44
>>88
それってバブルソート?
90デフォルトの名無しさん:2007/07/28(土) 16:09:42
選択ソートだな
91デフォルトの名無しさん:2007/07/28(土) 16:23:42
ソート方法の違いは置いといて

for(i=0; i < elements; i++){
for(j=i; j < elements; j++){
これって
for(i=0; i < elements-1; i++){
for(j=i+1; j < elements; j++){
ではなくて?
92デフォルトの名無しさん:2007/07/28(土) 16:31:16
ソートがちゃんとできないという根本的な問題あり
for(i=0; i+1 < elements; i++){
for(j=0; j+1 < elements-i; j++){
こうじゃね?
93デフォルトの名無しさん:2007/07/28(土) 16:36:10
>>85の回答としてどれが正しいのでしょう?
94デフォルトの名無しさん:2007/07/28(土) 16:47:26
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):

□☆□□□☆□□□☆□□□☆□
☆★☆☆☆★☆☆☆★☆☆☆★☆
□☆□□□☆□□□☆□□□☆□
□☆□□□☆□□□☆□□□☆□
☆★☆☆☆★☆☆☆★☆☆☆★☆
□☆□□□☆□□□☆□□□☆□

上記の規則的パターンを出力するプログラムを作成し
表示サイズを実行時にコマンドライン引数で渡せるようにせよ。


[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: VS 2005
 [3.3] 言語: C
[4] 期限: 2007年07月30日11:59まで
[5] その他の制限: 特になし。
95デフォルトの名無しさん:2007/07/28(土) 16:51:43
業者の宣伝かとおもた
96デフォルトの名無しさん:2007/07/28(土) 16:54:10
>>94
表示サイズの定義がわからん。
その例は表示サイズ3でいいのか?
9788:2007/07/28(土) 17:09:56
ごめんごめん、変なのはっちゃった
91さんの通りです。
98デフォルトの名無しさん:2007/07/28(土) 17:16:02
>>92
それはない

最初のi=0,j=0 で比較してるし(意味がなく冗長)
;i+1 < elements; で配列超えているし
99デフォルトの名無しさん: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;
}
100デフォルトの名無しさん:2007/07/28(土) 17:23:22
>>94 設問内容が曖昧なので、色んな回答が出るかもよ。
縦3×横4のパターンと見えるが、それを最小単位として良いか?
それとも、この縦6×横15が、パターンの最小単位とするのか?
指定する表示サイズとは、行数×文字数か?
それともパターンを単位として、縦繰返し数×横繰返し数とするか?
10194:2007/07/28(土) 17:32:41
>>96,>>100
行数*文字数っていうのが正しいですね。
任意のサイズを指定して表示ってやつなんです。
102デフォルトの名無しさん:2007/07/28(土) 17:36:02
>>101
だからその指定があいまいなんだって。
>94の例なら6行15文字だが仮に4行10文字の指定がきたら

□☆□□□☆□□□☆
☆★☆☆☆★☆☆☆★
□☆□□□☆□□□☆
□☆□□□☆□□□☆

こんな表示で良いのか?
103デフォルトの名無しさん:2007/07/28(土) 17:38:04
まあそうかもしれないけどこの場合はそんなに神経質に考えなくてもよいじゃん
10494:2007/07/28(土) 17:40:20
>>102
模範解答はまさしくそんな感じです。
うまく説明できずに申し訳ないorz
105デフォルトの名無しさん:2007/07/28(土) 17:41:00
いやいや、>100の言うみたいに3×4のパターンを入力されただけ
表示するなら簡単だが、>94の例みたいに対象となるように
表示するならそれなりに考える必要がでてくるじゃん。
106デフォルトの名無しさん:2007/07/28(土) 17:48:30
1キャラ単位で表示できるようにしておけば、掛け算と足し算で間に合う。
107デフォルトの名無しさん:2007/07/28(土) 18:01:18
>>94
#include<stdio.h>
#include<stdlib.h>

void print_pattern(int width, int height){
static const char *basepattern[]={
"□☆□□",
"☆★☆☆",
"□☆□□",
};
int x, y;

for(y=0;y<height;y++){
for(x=0;x<width*2;x++) printf("%c", basepattern[y%3][x%8]);
printf("\n");
}
}

int main(int argc, char *argv[]){
int width=15, height=6;

if(argc>=2) width=atoi(argv[1]);
if(argc>=3) height=atoi(argv[2]);
print_pattern(width, height);

return 0;
}
108デフォルトの名無しさん:2007/07/28(土) 18:04:17
>>107
全角文字の%c出力はまずい気がするんだ・・・
109デフォルトの名無しさん:2007/07/28(土) 18:04:38
>>94 あまり悩まずに回答
char pat[][4][3]={{"□","☆","□","□"},
{"☆","★","☆","☆"},{"□","☆","□","□"}};
main()
{int x, y, i, j;
scanf("%d%d", &x, &y);
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++)
printf("%s", pat[i%3][j%4]);
printf("\n"); }
return 0;
}
110デフォルトの名無しさん:2007/07/28(土) 18:06:47
x,yが逆だったorz
111デフォルトの名無しさん:2007/07/28(土) 18:09:08
えぇ、みんな何の違和感も無く答えられるのか・・・
俺は>94の例がちょうど左右上下対称になってるから
てっきりそういう風にするもんだと思ってしまった・・・
112デフォルトの名無しさん:2007/07/28(土) 18:10:31
>>108
環境によっては問題あるの?
うちではうまくいくんだが。
113デフォルトの名無しさん:2007/07/28(土) 18:11:48
>>112
2バイト文字に対応していない環境なんてたくさんあると思うんだが・・・
114デフォルトの名無しさん:2007/07/28(土) 18:12:49
>>111
頭が良いと答えられなくなるのかもw
115デフォルトの名無しさん:2007/07/28(土) 18:21:55
[1]授業単元:プログラミング技術
[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次元配列を使えばいいといわれましたが、わからないので・・
116デフォルトの名無しさん:2007/07/28(土) 19:09:11
117 ◆xdqL6ZHhIs :2007/07/28(土) 19:29:15
[1] 授業単元:プログラミングA
[2] 問題文:
文章を読み込み、反対に出力せよ。
また、行数・単語数・文字数も出力せよ。
条件1○行末の \n も一文字と数える。
条件2○2行に渡る単語は無いものとする。
条件3○空白が連続して現れる場合にも対処する。
条件4○単語の区切りは空白または改行で判断。ただし、空白が続いて改行という場合も考慮にいれること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:[2007年07月31日23:00まで]続き↓
118 ◆xdqL6ZHhIs :2007/07/28(土) 19:30:04
↑の続き
[5] その他の制限:
必ず次の雛形を使用せよ。
#include <stdio.h>
#define SIZE 100
#define TRUE 1
#define FALSE 0
main()
{
char line[SIZE], c;
int lno=0; /* the number of lines */
int wno=0; /* the number of words */
int cno=0; /* the number of characters */
int n, i, flag;
while (fgets(line, SIZE, stdin) != NULL) {
/* この部分を作る */
printf("%s", line);
}
printf("\n%d lines, %d words, %d characters\n", lno, wno, cno);
}
while文から下の部分を作れということらしいのですが、
本当にどうして良いかさっぱり分かりません。どうかお願いします。m(;_ _)m
119デフォルトの名無しさん:2007/07/28(土) 19:55:23
>>117 strlen と isspace の定義が無い warning が出るけど
#include <stdio.h>
#define SIZE 100
#define TRUE 1
#define FALSE 0
int main(void)
{
char line[SIZE], c;
int lno=0; /* the number of lines */
int wno=0; /* the number of words */
int cno=0; /* the number of characters */
int n, i, flag;
while (fgets(line, SIZE, stdin) != NULL) {
flag=TRUE;
n=strlen(line);
cno+=n;
if(line[n-1]=='\n') line[n--]='\0';
for(i=0;i<n/2;i++)
c=line[i],line[i]=line[n-1-i],line[n-1-i]=c;
for(i=0;i<n;i++){
if(isspace(line[i])) flag=TRUE;
else{
if(flag==TRUE) wno++;
flag=FALSE;
}
}
printf("%s", line);
lno++;
}
printf("\n%d lines, %d words, %d characters\n", lno, wno, cno);
return 0;
}
120デフォルトの名無しさん:2007/07/28(土) 19:58:45
if(line[n-1]=='\n') line[n--]='\0';

if(line[n-1]=='\n') n--;
121デフォルトの名無しさん:2007/07/28(土) 20:05:39
>>117

for(i=0; line[i] != '\0'; i++){
switch(line[i]){
case ' ':
if(flag == FALSE){
flag = TRUE;
wno++;
}
break;
case '\n':
if(flag == FALSE){
flag = TRUE;
wno++;
}
lno++;
cno++;
break;
default:
flag = FALSE;
cno++;
break;
}
}

cとn使ってないけど別にいいか
122デフォルトの名無しさん:2007/07/28(土) 20:09:26
>>119
gccだとwarningではなくcompile error だぞ
123 ◆xdqL6ZHhIs :2007/07/28(土) 20:09:48
>>119,>>121
本当にありがとうございます!やってみます。
124デフォルトの名無しさん:2007/07/28(土) 20:20:50
>>122
c++としてコンパイルするのでなければプロトタイプ宣言は必須じゃないのだけれど。
12594:2007/07/28(土) 20:41:44
>>107,>>109
ありがとうございます!
提出完了しました。
12699:2007/07/28(土) 20:48:50
>>125
俺のじゃ駄目だったのか?
12794:2007/07/28(土) 20:57:36
>>126
あちらは「こんなのはどうでしょう?」ということで別件で提出してみました。
講師から返事があればまた報告してみます。
128デフォルトの名無しさん:2007/07/28(土) 20:58:46
>>126
微妙に違ってる
129デフォルトの名無しさん:2007/07/28(土) 21:36:58
[1] 授業単元: プログラム言語
[2] 問題文(含コード&リンク):
nを読み込んで第n項までのフィボナッチ数を印字するプログラムを繰り返しを用いて作成しなさい。

再帰での書き方はわかったのですが、繰り返しを使う書き方がわかりません。
どうぞよろしくお願いします。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年7月29日23:00まで
[5] その他の制限: 繰り返しを使ってお願いします。for,while,doどれでも結構です。
よろしくお願いします。
130デフォルトの名無しさん:2007/07/28(土) 21:48:58
#include <stdio.h>
int fib(int n) {
int a = 0;
int b = 1;
while (n > 0) {
int t = a+b;
a = b;
b = t;
n = n-1;
}
return a;
}
int main(void) {
int n;
scanf("%d",&n);
fib(n);
return 0;
}
131#:2007/07/28(土) 21:51:03
[1] 授業単元: プログラム言語
[2] 問題文(含コード&リンク):
n個の正整数が与えられた時、それらの値の中で出現回数の最も多いものを求める
プログラムを書け。出現回数最多の値が2種類以上ある場合は、その中で値の最も
大きいものを求めること。nは1以上100以下と過程してよい。
入力は、次の形式の行がいくつか連続したものである。a1〜aのnのn個の値を計算の
対象とする。入力の最後には、0だけからなる行が一つある(この行は計算の対象外である)。

入力例:

n=10 a[n]:2 7 1 8 2 8 1 8 2 8 出力:8
n=5 a[n]:1 3 2 1 2 出力:2
0

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年7月30日15:00まで
[5] その他の制限:なし
132デフォルトの名無しさん:2007/07/28(土) 21:51:56
おっと

fib(n); → printf("%d\n", fib(n));
133デフォルトの名無しさん:2007/07/28(土) 21:57:33
>>129
#include <stdio.h>
main()
{
int n, i=0,n1=1,n2=0;
scanf("%d",&n);
while (i < n) {
i++; printf("%d %d\n", i, n1);
n1 += n2; n2 = n1 - n2; }
return 0;
}
134デフォルトの名無しさん :2007/07/28(土) 22:03:43
int fib(int n)
{
int a0 = 1, a1;
int b0 = 1, b1;
int c0 = 0, c1;
int x0 = 1, x1;
int y0 = 0, y1;
n--;

while(n >0){
if(n & 1){
x1 = x0; y1 = y0;
x0 = a0 * x1 + b0 * y1;
y0 = b0 * x1 + c0 * y1;
}
n /= 2;
a1 = a0; b1 = b0; c1 = c0;
a0 = a1 * a1 + b1 * b1;
b0 = b1 * (a1 + c1);
c0 = b1 * b1 + c1 * c1;
}
return x0;
}
135デフォルトの名無しさん:2007/07/28(土) 22:04:40
>>129
#include <stdio.h>
int main(void) {
int a = 0 , b = 1, t , n;
scanf("%d",&n);
for(; n>0; n--) {
t = a+b;
a = b; b = t; }
printf("%d\n", a);
return 0; }
136デフォルトの名無しさん:2007/07/28(土) 22:13:59
>>131
>n個の正整数が与えられた時、
入力行はこの形式で受け取ると言うことか?
n=10 a[n]:2 7 1 8 2 8 1 8 2 8
それとも、この形式?
2 7 1 8 2 8 1 8 2 8
後者の場合に、データが1件で値が0の時が終了?
137#:2007/07/28(土) 22:25:07
>>136
すいません、説明不足でした。
n a1 a2 ・・・・ an(数値で表すと 10 2 7 1 8 2 8 1 8 2 8)
のような形式の行が連続したものです。
nの値が0であった時に終了します。
138デフォルトの名無しさん:2007/07/28(土) 22:29:31
>>131
#include <stdio.h>
#include <stdlib.h>
#define DATA_MAX 100
int data_compare(const void *a, const void *b){
return *(const int *)b-*(const int *)a;
}
int main(void){
int data[DATA_MAX], data_num, same_data_num, max_data_num, max_data, i, prev_data=0;
while(1){
scanf("%d", &data_num);
if(data_num<=0 || data_num>DATA_MAX) break;
same_data_num=max_data_num=max_data=0;
printf("n=%d a[n]:", data_num);
for(i=0;i<data_num;i++) scanf("%d", &data[i]);
for(i=0;i<data_num;i++) printf("%d ", data[i]);
qsort(data, data_num, sizeof(data[0]), data_compare);
for(i=0;i<=data_num;i++){
if(i<data_num && prev_data==data[i]) same_data_num++;
else{
if(max_data_num<same_data_num){
max_data_num=same_data_num;
max_data=prev_data;
}
same_data_num=1; prev_data=data[i];
}
}
printf("出力:%d\n", max_data);
}
printf("0\n");
return 0;
}
139#:2007/07/28(土) 22:46:26
>>138

本当にありがとうございました。
140デフォルトの名無しさん:2007/07/28(土) 23:24:45
>130
>133
>134
>135
皆様どうもありがとうございました。
おかげで、無事に完成させることができました。
141デフォルトの名無しさん:2007/07/28(土) 23:27:36
完成させたのはお前じゃないがな
142デフォルトの名無しさん:2007/07/28(土) 23:45:53
>>131 オレも作ってみた
#include <stdio.h>
int main()
{
int data[100],count[100],num,i,j,max,maxcount;
char d;
while(1){
scanf("%d",&num);
if(num==0)break;
max=-1;maxcount=0;
for(i=0;i<num;i++){
scanf("%d",&data[i]);count[i]=1;}
scanf("%c",&d);
for(i=0;i<num-1;i++){
for(j=i+1;j<num;j++){
if(data[j]!=-1 && data[j]==data[i]){
count[i]++;data[j]=-1;}}}
for(i=0;i<num;i++){
if(maxcount<count[i]){
maxcount=count[i];max=data[i];
}else if(maxcount==count[i]&&max<data[i]){
max=data[i];}}
printf("%d\n",max);}
return 0;
}
143#:2007/07/29(日) 00:06:18
>>142
構造体を使わないやり方ですね。
思いつきませんでした…
ありがとうございます!
144デフォルトの名無しさん:2007/07/29(日) 00:06:39
>>141 そうだ、俺だ!
145デフォルトの名無しさん:2007/07/29(日) 00:09:45
>>143
いや、構造体じゃなくて(^_^)
146デフォルトの名無しさん:2007/07/29(日) 00:16:34
>>144
いやいや俺だ
147デフォルトの名無しさん:2007/07/29(日) 00:20:51
>>140に決めてもらえ
148デフォルトの名無しさん:2007/07/29(日) 00:31:13
[1] 授業単元: 暇を持て余す
[2] 問題文(含コード&リンク): 暇なので、ソース中のタブなどのインデントを2ch用のインデント? に変換するプログラムの作成。
例えば、以下のような感じのもの(&nbsp;は全角ではなく、半角のものとする)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
    FILE *fp_in, *fp_out;
    int ch;
    char filename[128] = {0}, *p;
    if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
    if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
    if((p = strrchr(argv[1], '.')) == NULL) exit(3);
    memcpy(filename, argv[1], p - argv[1]);
    strcat(filename, ".txt");
    if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);
    while((ch = fgetc(fp_in)) != EOF){
        if(ch == '\t') fprintf(fp_out, "&nbsp; &nbsp; ");
        else fputc(ch, fp_out);
    }
    fclose(fp_in);
    fclose(fp_out);
    return 0;
}
しかし、これではtabを変換しているだけで、spaceが連続した場合などには対応していない。
そこで、spaceが連続した場合や、tabとspaceが並んだ場合にも対応できるようにすること。
[3] 環境
 [3.1] OS: Windows Xp、またはフリーのLinux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C、C++のどちらでもおk
[4] 期限: なし
[5] その他の制限: なし
149名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:34:56
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
自然数nを受け取り、nの全ての約数を昇順に印字し、
さらにそれらの総和を戻す再帰関数を作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2007年7月29日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
再帰関数を習っています。
約数を昇順に印字するところからわかりません。
どうぞよろしくおねがいします。
150名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:41:35
>>147
ねるとん か!?
151名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:45:16
>>149
例えばnが12の時は、12=2*2*3だから
2 2 3と出力して、7を返せばいいの?
それとも、2 3と出力して、5を返せばいいの?
152名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:48:44
1 2 3 4 6 12 で 28を返すのかもよ
153名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:51:21
>>152
確かにそれもありだな
154名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:54:00
素因数とは書いてないのだから、>152だろ。
更に自分自身を除くと言う条件がついていれば完全数チェックに使えるけど。
155名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:58:54
149です。
説明不足で申し訳ありません。
152さんのように出力できるようにお願いします。
156名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:05:57
再起を使わないと簡単なんだが。
さてどこで使うと良いのか、思案中w
157名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:06:56
>>156
再起をどう使うのか、難しいな。
再帰なら簡単に使えるのだが。
158名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:08:17
>>156 orz
159名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:11:35
おや、>>158が再起不能に。
160名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:17:37
うわ、つまんね
161名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:19:52
int proto_print_divisor(int n, int div){
if((n % div) == 0)
{
printf("%d ", div);
if(n == div) return div;
}
else div = 0;
return div + proto_print_divisor(n, div + 1);
}

int print_divisor(int n){
int res;
printf("divisor of %d = {", n);
res = proto_print_divisor(n, 1);
printf("} sum = %d\n", res);
return res;
}

とりあえずこうしてみた
引数一つで再帰、グローバル変数とか使わないんじゃ無理では

間違いなくfor文のほうがスマート
162名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:20:14
psychic(サイキック)な奴らだな
163名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:21:19
>149
再帰関数だけ。
いまいちスマートじゃないが、気にしない。
int f(int n)
{
   static int i = 1;
   int j;

   for(j=i; j<=n; j++) {
      if(n%j==0) {
         printf("%d ", j);
         break;
      }
   }
   i = j + 1;
   return j==n ? n : f(n) + j;
}
164名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:27:24
せめてリエントラントにしたほうがいい
165460:2007/07/29(日) 01:54:07
>>148
てすつwithコップ酒*1.5+うぃすき*1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SISE 1024

int main(int argc, char *argv[]){
  FILE *fp_in, *fp_out;
  int ch;
  char line[BUF_SISE];
  char filename[128] = {0}, *p;
  int i,j,k;
  const int TABLENGTH =2;
  int space_length;

   if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
    if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
  if((p = strrchr(argv[1], '.')) == NULL) exit(3);

   memcpy(filename, argv[1], p - argv[1]);
  strcat(filename, ".txt");
  if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);

166460って何だ?:2007/07/29(日) 01:54:59
  while( fgets(line,BUF_SISE,fp_in) != NULL ){
    for(i=0,j=0;i<BUF_SISE;i++,j++){
      if( line[i] == '\n' || line[i] == EOF ){ fputc('\n', fp_out); break; }
      if( line[i] == '\t'){
        space_length = (j/TABLENGTH + 1)*TABLENGTH - j;
        for(k=0;k<space_length;k++) fprintf(fp_out, "&nbsp;");
        j += space_length*6-1;
      }else if( line[i] == '&'){
        fprintf(fp_out, "&amp;"); j += 5-1;
      }else if( line[i] == ' '){
        fprintf(fp_out, "&nbsp;"); j += 6-1;
      }else fputc(line[i], fp_out);
    }
  }

  fclose(fp_in);
  fclose(fp_out);
  return 0; 
}
167名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:57:09
161さん、164さん、どうもありがとうございます。
161さんにお聞きしたいのですが、nに数字を読み込むということで合っていますか?
また、divはどのような働きをするのか、教えていただけないでしょうか。
勉強不足のため、お手をわずらわせて大変申し訳ありませんが、お願いできましたら幸いです。
168名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:04:20
>>149
再起不能者が、再起のために非再帰版で回答。
皆が言っているようにこの方が簡単だと思う。
#include <stdio.h>
int f(int n)
{int i,sum=0;
for (i=2;i<=n;i++){
if((n%i)==0){printf("%d ",i);sum+=i;}}
return sum;
}
int main()
{int data,i;
scanf("%d",&data);
printf("1 ");
printf("%d\n",f(data)+1);
return 0;
}
169名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:09:08
>>148
てすつ2+うぃすき*0.5

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SISE 1024

int main(int argc, char *argv[]){
    FILE *fp_in, *fp_out;
    char line[BUF_SISE];
    char filename[128] = {0}, *p;
    int i,k;
    const int TABLENGTH =4;
    int space_length;

    if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
    if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
    if((p = strrchr(argv[1], '.')) == NULL) exit(3);

    
    memcpy(filename, argv[1], p - argv[1]);
    strcat(filename, ".txt");
    if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);
170名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:09:41

    while( fgets(line,BUF_SISE,fp_in) != NULL ){
       for(i=0;i<BUF_SISE;i++){
         if( line[i] == '\n' || line[i] == EOF ){ fputc('\n', fp_out); break; }
         if( line[i] == '\t'){
          space_length = (i/TABLENGTH+1) *TABLENGTH -i;
          for(k=0;k<space_length;k++) fprintf(fp_out, "&nbsp;");
         }else if( line[i] == '&') fprintf(fp_out, "&amp;");
         else if( line[i] == ' ') fprintf(fp_out, "&nbsp;");
         else fputc(line[i], fp_out);
       }
    }

    fclose(fp_in);
    fclose(fp_out);
    return 0; 
}
171168:2007/07/29(日) 02:10:24
まだ変だなw
酒気帯びモードなので、今日は再起出来ないかも
172名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:17:59
>>148
おらあ呑めば呑むほど強くなるぜ三度目の正直どうだー

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SISE 1024

int main(int argc, char *argv[]){
    FILE *fp_in, *fp_out;
    char line[BUF_SISE];
    char filename[128] = {0}, *p;
    int i,j,k;
    const int TABLENGTH =4;
    int space_length;

    if(argc < 2) fprintf(stderr, "usage : %s filename\n", argv[0]), exit(1);
    if((fp_in = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
    if((p = strrchr(argv[1], '.')) == NULL) exit(3);

    
    memcpy(filename, argv[1], p - argv[1]);
    strcat(filename, ".txt");
    if((fp_out = fopen(filename, "w")) == NULL) perror(filename), exit(4);

173名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:18:32
    while( fgets(line,BUF_SISE,fp_in) != NULL ){
        for(i=0,j=0;i<BUF_SISE;i++,j++){
            if( line[i] == '\n' || line[i] == EOF ){ fputc('\n', fp_out); break; }
            if( line[i] == '\t'){
                space_length = (j/TABLENGTH+1) *TABLENGTH -j;
                j += space_length-1; // タブによる見かけ上の位置
                for(k=0;k<space_length;k++) fprintf(fp_out, "&nbsp;");
            }else if( line[i] == '&') fprintf(fp_out, "&amp;");
            else if( line[i] == ' ') fprintf(fp_out, "&nbsp;");
            else fputc(line[i], fp_out);
        }
    }

    fclose(fp_in);
    fclose(fp_out);
    return 0; 
}
174172:2007/07/29(日) 02:20:12
満足だああああぁあああ
175デフォルトの名無しさん :2007/07/29(日) 02:24:41
ブラウザに載っけるソースに無理に全角スペースで
インデントつけたら、見る方にとっては、コピペしたとき
邪魔なだけなんじゃないか?
176名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:25:22
わざとだろ、キニスンナ
177名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:28:25
全角スペースなんか入れてねえづらよ
178名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:37:45
全角スペースを半角スペースにする置換をすりゃええがな。
頼むから痴漢はしちゃだめだぞ。
179名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:39:16
ブロックの開始後とにタブか空白で字下げするスクリプトのほうがよっぽど有益だ
180名無しさん@そうだ選挙に行こう:2007/07/29(日) 08:16:01
専ブラのポップアップだとちゃんと半角インデントつくんだから余計なことはしなくていいよもう!
181名無しさん@そうだ選挙に行こう:2007/07/29(日) 08:40:34
コピペしやすいようにわざわざ&nbsp;でインデントしてるのに叩かれててワラタ
182名無しさん@そうだ選挙に行こう:2007/07/29(日) 08:49:02
>>181
それって、&nbsp;がペーストされるんだけど。
183名無しさん@そうだ選挙に行こう:2007/07/29(日) 09:07:22
うpろだ使えばよくね?
184名無しさん@そうだ選挙に行こう:2007/07/29(日) 09:34:06
>>182
それは使ってるブラウザに依る。
JaneやIEなら半角スペースがペーストされるはず。
185デフォルトの名無しさん:2007/07/29(日) 10:54:57
このスレをIEとかFireFoxで開いてコピーすればいい
Janeだとnbsp;に変換されてて多少面倒だね
まあそんな細かいことどーでもいいじゃないか
186名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:04:13
/**/でインデントしようぜ!
187名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:17:14
#define _
#include <stdio.h>
#include <math.h>
int main(void)
{
_ _ for(int i = 0; i < 10; i++)
_ _ _ _ printf("sin %d = %f\n", i, sin(i));
_ _ return 0;
}

読みやすい?
188名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:46:54
美しい
189名無しさん@そうだ選挙に行こう:2007/07/29(日) 13:29:36
[1] 授業単元:アルゴリズム理論
[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
190名無しさん@そうだ選挙に行こう:2007/07/29(日) 13:31:45
>>174
気持ちよさそうだなw
19194:2007/07/29(日) 15:28:54
こんにちは。
そういえば>>99のプログラムはコマンドライン版にするとどんな感じになるんでしょう?
ふと疑問に思ったもので。
192名無しさん@そうだ選挙に行こう:2007/07/29(日) 15:55:03
int main(int argc, const char **argv){
int x,y;
if( argc > 2 ){
sscanf(argv[1],"%d",&x);
sscanf(argv[2],"%d",&y);

試してないけどたぶんこんな流れ
193名無しさん@そうだ選挙に行こう:2007/07/29(日) 15:59:56
>>191
>>109に手を入れた
#include <stdio.h>
char pat[][4][3]={{"□","☆","□","□"},
{"☆","★","☆","☆"},{"□","☆","□","□"}};
main(int argc, char *argv[])
{int x, y, i, j;
if (argc != 3){
fprintf(stderr,"usage %s x y\n",argv[0]);
return 0;}
x=atoi(argv[1]);y=atoi(argv[2]);
for (i = 0; i < y; i++) {
for (j = 0; j < x; j++)
printf("%s", pat[i%3][j%4]);
printf("\n"); }
return 0;
}
194デフォルトの名無しさん :2007/07/29(日) 16:00:16
暇や
なんかお題くれ
195名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:11:43
もしよろしければ>>85を解いてほしいです
196名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:15:15
テンプレに従ってないしやる気がでないな
まぁまだ投票してない俺が言えた事じゃないが
19794:2007/07/29(日) 16:16:24
>>192
おぉ、スッキリしました。ありがとですー。

>>193
ふむふむ。休み期間中にこれくらいは自力で作れるようにならないとなぁ。
ありがとですー。
198名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:22:06
>>194
任意の個数まで、あるいは任意の文字列まで数値を取得し
配列に格納した後表示させよ。
たとえば終了文字列を"end"にするなら(この文字列は既知として良い)
入力>12    378aaa98fff90 end78aa9
格納される数値:12,37,98,90
みたいな。
この場合endに当たらない限り、任意の個数分の数値を格納するまで
改行しようが読み続ける仕様。

別に宿題じゃなくて、暇って言うから考えただけだから
実行例の形とかは適当に。
199名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:29:59
194は何でもやりそうな気がした
200名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:55:39
>>194

>>930への解答を考えているんだけど、
任意の桁数の乗算ができるような関数を考えてみないか?

入力 12345678901234567890 * 12345678901234567890
出力 152415787532388367501905199875019052100

こんな感じ。
201名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:56:19
>>200に出てる>>930ってのは、前スレの>>930ね。。
202名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:02:21
>>194ではないが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4783.txt

いちいちフリーすんのがウゼーし
mul(x, mul(y, z, 10), 10) とか書くとリークするので
GCが欲しいな。

>>194は頑張って四則演算全てに対応してくれw
2031194:2007/07/29(日) 19:15:06
100000のでーたを上手くあつかえませんでした
(1000とかなら、いけるんだけどな・・・)
204名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:43:40
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
入力した金額の支払い方を印字するプログラムを作成する。
ただし、
1、再帰関数で作成する。
2、配列を用いて割る数(10000,5000,2000,...5,1)をあらかじめ代入しておき、
繰り返し構造で実現する。

入力:9362
出力:
10000 0mai
5000 1mai
1000 4mai
500 0mai
100 3mai
50 1mai
10 1mai
5 0mai
1 2mai

再帰と配列で作るのですが、解き方がよくわかりません。
お力を貸してください。よろしくお願いします。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2007年7月30日
[5] その他の制限: 配列、再帰 両方でお願いします。

205名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:50:46
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
入力した金額の支払い方を印字するプログラムを作成する。
ただし、
1、再帰関数で作成する。
2、配列を用いて割る数(10000,5000,2000,...5,1)をあらかじめ代入しておき、
繰り返し構造で実現する。

入力:9362
出力:
10000 0mai
5000 1mai
1000 4mai
500 0mai
100 3mai
50 1mai
10 1mai
5 0mai
1 2mai

再帰と配列で作るのですが、解き方がよくわかりません。
お力を貸してください。よろしくお願いします。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2007年7月30日
[5] その他の制限: 配列、再帰 両方でお願いします。

206名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:51:56
操作を間違えて2回書き込まれてしまいました。
すみません。
207名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:53:02
どんな間違いなのか気になる・・・
208名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:55:14
同じ過ちを繰り返すということさ
209名無しさん@そうだ選挙に行こう:2007/07/29(日) 20:01:54
>>204
#include <stdio.h>
void pay(int price, const int *coins, int index)
{
    if (coins[index]) {
        printf("%d %dmai\n", coins[index], price / coins[index]);
        pay(price % coins[index], coins, index + 1);
    }
}
int main(void)
{
    int d[] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1, 0 };
    unsigned price;
    while (scanf("%d", &price) == 1)
        pay(price, d, 0);
    return 0;
}
210209:2007/07/29(日) 20:02:59
げ、priceをunsignedと宣言しておきながら

まあいいや
211デフォルトの名無しさん:2007/07/29(日) 20:45:29
弐千円札の存在を忘れていた俺ガイル
212デフォルトの名無しさん:2007/07/29(日) 20:48:39
[1] 授業単元: プログラム言語基礎
[2] 問題文(含コード&リンク):
n個(nは入力する)の実値を入力し、それらの合計と平均を求めるプログラムを、繰り返し構造を用いて書きなさい。

n個入力するという所の書き方が特にわかりません。
ご教授願いますm(__)m
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年7月31日20:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
213デフォルトの名無しさん:2007/07/29(日) 20:54:48
>>212
int i;
double sum = 0.0, tmp;

for(i = 0 ; i < 10 ; i++) {
  scanf("%lf", &tmp);
  sum += tmp;
}

sumが合計
sum/10が平均
214デフォルトの名無しさん:2007/07/29(日) 21:12:08
>>212

#include <stdio.h>

int main(void){
int i,n;
double tmp,sum=0;

printf("n個入力\n->");
scanf("%d",&n);
getchar();

for(i=0;i<n;i++){
scanf("%lf",&tmp);
getchar();
sum+=tmp;
}
printf("合計:%f\n平均:%f\n",sum,sum/(double)n);

return 0;
}

コンパイルしてないからケアレスミスとかシラネ。
215デフォルトの名無しさん:2007/07/29(日) 21:28:23
213さん
214さん
ありがとうございました^^)
216デフォルトの名無しさん:2007/07/29(日) 21:40:41
>>209

#include <stdio.h>
void pay(int price, const int *coins, int index) {
if (coins[index]) {
printf("%d %dmai\n", coins[index], price / coins[index]);
pay(price % coins[index], coins, index + 1);
}
}

int main(void) {
int d[] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1, 0 };
unsigned price;
while (scanf("%d", &price) == 1) { pay(price, d, 0); }
return 0; }
217デフォルトの名無しさん:2007/07/29(日) 22:02:12
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
nを入力し、n項までの次のような規則の数列を印字せよ。
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 …
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2007年7月30日中
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
全くわかりません;本当に困っています。
どうぞよろしくお願いします。
218デフォルトの名無しさん:2007/07/29(日) 22:08:43
>>217
#include <stdio.h>
int main()
{
int i,j,num;
scanf("%d",&num);
for(i=1;i<=num;i++)
for(j=1;j<=i;j++)
printf("%d ",j);
printf("\n");
return 0;
}
219217:2007/07/29(日) 22:39:07
>218さん
ありがとうございます!!
forだけでこんなにきれいにできるんですね。
220デフォルトの名無しさん:2007/07/29(日) 22:49:37
>>217 もっときれいに書けそうな気もするが
#include <stdio.h>

int main(void)
{
    int i, j, k, n;
   
    scanf("%d", &n);
    for(i = 1, j = 1, k = 1; i <= n; i++, j++){
        printf("%d ", j);
        if(j == k) j = 0, k++;
    }
    putchar('\n');
   
    return 0;
}
221デフォルトの名無しさん :2007/07/29(日) 23:07:01 0
>>220
なるほど、そうすればいいんだ
222デフォルトの名無しさん:2007/07/29(日) 23:08:05 0
>>217 まあ,無意味だが
#include <stdio.h>

void f3( int k, int i ) { if ( i > k ) { return; } printf( "%d ", i ); f3( k, i + 1 ); }
void f2( int n, int k ) { if ( k > n ) { return; } f3( k, 1 ); f2( n, k + 1 ); }
void f1( int n ) { f2( n, 1 ); puts(""); }
int main()
{
int n;
scanf("%d", &n);
f1(n);
return 0;
}
223お願いします:2007/07/29(日) 23:13:38 0
[1] 授業単元:プログラミング
[2] 問題文:"整数"のデータを入力しながら、その個数を数え、合計、平均、標準偏差を計算せよ。また、個々のデータに対する偏差値も計算せよ。
下記の雛形を使用せよ。
#include <stdio.h>
#include <math.h>
#define MAX 100
main()
{
int a[MAX], n, i, c=0, sum=0;
double ave, sigma=0;

/* この部分を各自作成する */

printf(" | mark | deviation\n");
printf("-------+--------+-----------\n");
for (i = 0; i < n; i++)
printf("a[%3d] | %6d | %6.2f\n",
i, a[i], (a[i]-ave)*10/sigma+50);
printf("-------+--------------------\n");
printf(" sum | %6d\n", sum);
printf(" ave | %6.2f\n", ave);
printf(" sigma | %6.2f\n", sigma);
}
続き↓
224お願いします:2007/07/29(日) 23:15:33 0
続き↑
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 3.4
 [3.3] 言語: C
[4] 期限: [2007年07月31日20:00まで]
[5] その他の制限:for文で作れと言われました。

もう何を先にやったら良いのかもわかりません。
どうかお願いしますm(*_ _)m
225デフォルトの名無しさん:2007/07/29(日) 23:32:21 0
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
16bitの2進数を受け取り、その10進数を戻すint型の関数を作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年7月31日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
全く解けなくて困っています。
関数、配列の基礎的なことは習いました。
どうぞよろしくお願いします。
226デフォルトの名無しさん:2007/07/29(日) 23:34:48 0
[1] 授業単元:C言語
[2] 問題文:
丸めについて。

気温のデータを5℃単位に丸めたい。
キーボードからdouble型変数kに気温を入力し、
丸めた数値はint型変数gに求め、gを画面に出力する。

ただし入力データに負の気温はないものとする。

また必要なら、計算途中の中間結果を格納するint型変数wなど、
適宜変数を用意すること。
[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ名とバージョン: (VS 2005)
 [3.3] 言語: C
[4] 期限: ([2007年7月31日19:00まで。

227デフォルトの名無しさん:2007/07/29(日) 23:44:46 0
>>225
#include <stdio.h>
#include <string.h>

int BinStrToNum(char *lpszBin);

int main(void)
{
printf("%d\n", BinStrToNum("1111111111111111")); /*0xFFFF = 65535*/
return 0;
}

int BinStrToNum(char *lpszBin)
{
int nValue=1, nSum=0, i; /*2の0乗、10進数に変えた値の合計*/
for(i=strlen(lpszBin)-1; i>=0 ;i--)
{
if(lpszBin[i] == '1') nSum+=nValue; /* 1なら2のn乗を足す */
nValue*=2;
}
return nSum;
}
228デフォルトの名無しさん:2007/07/30(月) 00:07:41
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
以下のプログラムの空欄1,2を埋めて struct CELL *header;が示す双方向リスト
の並びを逆順にする関数void reverse() を完成させよ

struct CELL{
int value;
struct CELL *prev;
struct CELL *next;
};
struct CELL *header;
void reverse(void){
struct CELL *p1,*p2,*p3;
p1=NULL;
p2=header;
for(;p2!=NULL;){
p3=p2->next;
p2->【空欄1】=p1;
p2->【空欄2】=p3;
p1=p2;
p2=p3;
} }
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: [2007年7月30日8:00まで]
[5] その他の制限: 特になし
  期限が近いですがお願いいたします
229デフォルトの名無しさん:2007/07/30(月) 00:29:29
[1] 授業単元:プログラミング・アルゴリズム
[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系関数を使用しない。
入力は、コマンドプロンプトから入力が保存されたテキストファイルを読み込む方法で行う。
230デフォルトの名無しさん:2007/07/30(月) 00:36:34
>>223
double variance=0.0;/*分散を追加*/
printf("n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d:",i+1);
scanf("%d%c",&a[i],&c);/*変だが他にcの使い道がない*/
sum+=a[i];
}
ave=(double)sum/n;
for(i=0;i<n;i++){
variance+=(a[i]-ave)*(a[i]-ave)/n;
}
sigma=sqrt(variance);
231デフォルトの名無しさん :2007/07/30(月) 00:38:26
>>229
へー、さっぱりわかんねーや
232デフォルトの名無しさん:2007/07/30(月) 00:39:50
>>226
確認してないけど

#include<stdio.h>
int main(){
double k;
int g;
printf("k=");
scanf("%lf",&k);
g=(int)k/5*5;
printf("g=%d\n",g);
return 0;
}
233デフォルトの名無しさん:2007/07/30(月) 00:46:07
g = ((int)(k + 2.5) / 5) * 5;
かと思った。どっちにもとれるな。
234お願いします:2007/07/30(月) 01:11:00
>>230
ありがとうございます。やってみますm(*_ _)m
235202:2007/07/30(月) 01:33:08
>>203
それ俺へのレス?
ソースの中の10とか書いてるのは桁数じゃなくて基数だよ。
10進数なら10。
2〜10なら何でも良い。16進数とかにも対応したければ、文字列との
変換の部分を直さないといけないな。
236デフォルトの名無しさん:2007/07/30(月) 01:40:10
>>229 とりあえず最初の虱潰しのとこだけ
#include <stdio.h>
int main(void)
{
int i,n,w[256],sum,ok;
puts("?");scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d", &w[i]);
if(w[i]<=0) {puts("\nerror");return -1;}
}
for(;;){
for(i=0;i<n;i++){w[i]=-w[i];if(w[i]<0) break;}
if(i==n) {ok=0;break;}
sum=0; for(i=0;i<n;i++) sum+=w[i];
if(!sum) {ok=1;break;}
}
puts(ok?"true":"false");
return 0;
}
237デフォルトの名無しさん:2007/07/30(月) 06:10:36
まだ入門段階のプログラムだと思いますがわからないのでお願いします。
[問題]
入力データファイルが用意されている。
仕様
入力データ件数10件
   1件に最大100文字(半角文字とする)
   入力データは、文字型1次元配列(サイズ101)に格納
文字の種類は最大200種類(文字型一次元配列使用)
但し、入力した文字列中の改行は("\n")マークは処理対象外

文字コード順に並べて出力する

出力図形は
 1行に最大25文字(文字区切りに1カラム空白)
 構成文字(並べ替え済み)を出力する
238デフォルトの名無しさん:2007/07/30(月) 07:56:44
>>228
【空欄1】 next
【空欄2】 prev
多分。
239デフォルトの名無しさん:2007/07/30(月) 10:27:06
http://tonosiki.mbnsk.net/uploader/src/up1495.jpg?
この問題の(3)標準偏差と(4)相対係数が分かりません。
どうか教えて頂けないでしょうか・・・?
よろしくお願い致します。
240デフォルトの名無しさん: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] その他の制限: 特にありませんが、出来る限り単純なプログラムでお願いいたします。
241デフォルトの名無しさん:2007/07/30(月) 10:38:40
と思ったらマルチかこの野郎。
242デフォルトの名無しさん :2007/07/30(月) 11:28:15
>>239
>>240
標準偏差の求め方は、平均をだし、個々のデータからその平均値を引き
次に、その平均値を引いた個々のデータを二乗する。
次にその二乗した個々のデータの合計をデータの数で割る。
その割った数値の平方根を取る。
これが標準偏差。

データファイルくらい用意しとけ。
243デフォルトの名無しさん:2007/07/30(月) 12:32:14
[1] 授業単元: c++実習
[2] 問題文(含コード&リンク):
•演算子のオーバーロードを用いた独自のプログラムを作成しなさい。
なお,ニ項演算子,単項演算子,関係演算子,論理演算子のオーバーロードをそれぞれ最低1つは用いること。
また,意味のないプログラム(出力するだけなど)は避けること。
[3] 環境
 [3.1] OS: xp
 [3.2] visual studio 2005
 [3.3] 言語: c++
[4] 期限: 2007/7/31/〜10:00
[5] その他の制限:特に無し

よろしくお願いします。
244デフォルトの名無しさん:2007/07/30(月) 13:59:38
[1] 授業単元:c言語
[2] 問題文:
int型の変数 x を用意し,そのアドレス(16進表示)と値を表示させるには次のように書きます.

int x = 100;

printf("&x=%p x=%d\n", &x, x);

int型,float型,double型,char型の変数をそれぞれ2個ずつ適当に初期化して用意し,それぞれのアドレスと値とを表示しなさい.
またint型配列(サイズは 4) についても各要素のアドレスと値を同様に表示しなさい.
そしてメモリにどのように配置されたか考察しなさい.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2007年07月31日23:00まで
[5] その他の制限:特にありません。

よろしくお願いします。
245デフォルトの名無しさん:2007/07/30(月) 14:10:18
>>244
#include <stdio.h>
int main() {
int n1 = 12, n2 = 21;
float f1 = 10.1, f2 = 1.1;
double d1 = 3.1415926, d2 = 1.6145;
char c1 = 'f', c2 = 'a';
int a[4] = {1,2,3,4};

printf("&n1=%p n1=%d\n", n1);
printf("&n2=%p n2=%d\n", n2);
...
printf("a=%p a[0]=%d a[1]=%d a[2]=%d a[3]=%d \n", a, a[0], a[1], a[2], a[3]);
return 0;
}
246デフォルトの名無しさん:2007/07/30(月) 14:21:45
[1]単元:C言語演習
[2]問題:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4785.txt
[3]環境
OS:リナックス
コンパイラ:gcc
言語:C
[4]期限:8月1日まで

どうぞよろしくお願いします。
247デフォルトの名無しさん:2007/07/30(月) 15:21:31
>>244
迅速な解答ありがとうございます
248デフォルトの名無しさん :2007/07/30(月) 15:46:20
249デフォルトの名無しさん:2007/07/30(月) 17:56:27
[1] アルゴリズムとデータ構造
[2] 基本的なクイックソートは、すでに昇順、あるいは降順に並んでいる
データにたいして、最悪の振る舞い、すなわち計算量O(nの2乗)を示すことを説明せよ
[3] 環境
 [3.1] OS: win XP
 [3.2] cygwin
 [3.3] 言語: C
[4] 期限: 無期限

よろしくお願いします
250デフォルトの名無しさん:2007/07/30(月) 18:37:50
[1]プログラミング
[2]次の文を if 文を使って分かりやすく書き直せ。

feb = (y % 400 == 0) ? (y % 100 == 0) ? 28 : (y % 4 == 0) ? 29 : 28
: (y % 4 == 0) ? 29 : 28;
※これは閏年の2月の日にちを求めるものではない。

[3]C言語
251デフォルトの名無しさん :2007/07/30(月) 19:01:46
if(!(i%4) && (i%100) || (!(i%400)))
feb = 29;
else
feb =28;
252デフォルトの名無しさん:2007/07/30(月) 19:25:35
[1]プログラミング
[2] n 3
J= Σ K (←Kの3乗です)とする時J>=3000となる最も小さいnの値を求め、その時のJの値も示せ。
  k=1
[3]Windows C++
[4]早いほどうれしいです

初学者です。こんな問題も解けませんorz 3乗をループで足していく表現がわかりません。
よろしくお願いします
253デフォルトの名無しさん:2007/07/30(月) 20:01:37
>>252
int j = 0;
for (k = 1; j < 3000; ++k) {
j += k * k * k;
}
printf("n:%d, J:%d\n", k, j);
254デフォルトの名無しさん :2007/07/30(月) 20:16:32
>>252
#include <stdio.h>

unsigned sanjou(const unsigned k)
{
return k*k*k;
}
int main()
{
unsigned n = 1;
unsigned J = 0;
for(;;n++){
J+=sanjou(n);
if(J>=3000)
break;
}
printf("%u項J=%u\n",n,J);

return 0;
}
255デフォルトの名無しさん:2007/07/30(月) 20:27:33
252です。早速の回答ありがとうございました。
256デフォルトの名無しさん:2007/07/30(月) 22:49:11
>>236
ありがとうございます!
もし余裕がありましたら、他の問題もお願いします。
257デフォルトの名無しさん: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
258デフォルトの名無しさん:2007/07/30(月) 23:40:51
>>256
コマンドプロンプトからテキストファイルってどうやって読み込むの?
259デフォルトの名無しさん:2007/07/30(月) 23:56:29
リダイレクトかな?
260デフォルトの名無しさん:2007/07/30(月) 23:57:42
>>258
実行プログラム名 < filename.txt
でファイルに記述されている文字列を標準入力で入力したデータとして扱えるがそれだろう
261デフォルトの名無しさん:2007/07/31(火) 00:03:50
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下のような三角形を印字するプログラムを作成せよ。
配列を使う場合と使わない場合の両方を書け。
入力:6
1
202
30003
4000004
500000005
66666666666
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2007年7月31日まで])
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
どうかよろしくお願いします。

262デフォルトの名無しさん:2007/07/31(火) 00:09:43
>>261
配列使わないほうだけ

int i,j,n;
scanf("%d",&n);
for(i = 1 ; i <= n ; i++) {
printf("%d",i);
 for(j=0 ; j <(i-1)*2-1;j++)
 if(i==n) printf("%d",i);
else printf("0");
if(i > 1) printf("%d",i);
}
263デフォルトの名無しさん:2007/07/31(火) 00:16:23
>>261
#include <stdio.h>

int main(void) {
int n,i,j;
printf("入力:");
scanf("%d",&n);
printf("1\n");
for(i=2; i<n; i++) {
printf("%d",i);
for(j=2; j<2*i-1; j++) putchar('0');
printf("%d\n",i);
}
for(j=0; j<2*i-1; j++) printf("%d",i);
return 0;
}
264デフォルトの名無しさん:2007/07/31(火) 00:17:28
カプレカ数を求めるプログラムをどなたか作ってください!
C言語で。
265デフォルトの名無しさん:2007/07/31(火) 00:18:38
>>262-263
>>261をポップアップしてみてw
266デフォルトの名無しさん:2007/07/31(火) 00:27:50
>>261 だりっ

#include <stdio.h>
int main(void) {
int n,i,j;
char *a;
printf("入力:");
scanf("%d",&n);
printf("%*d\n",n,1);
for(i=2; i<n; i++) {
for(j=0; j<n-i; j++) putchar(' ');
printf("%d",i);
for(j=2; j<2*i-1; j++) putchar('0');
printf("%d\n",i);
}
for(j=0; j<2*i-1; j++) printf("%d",i);
return 0;
}
267デフォルトの名無しさん:2007/07/31(火) 00:33:10
>>266のフォー!(HG風に)の中身だけちと変更
for(i=2; i<n; i++) {
printf("%*d",n-i+1,i);
for(j=2; j<2*i-1; j++) putchar('0');
printf("%d\n",i);
}
268デフォルトの名無しさん:2007/07/31(火) 00:33:57
#include <stdio.h>

int main(void) {
int n,i,j;

printf("入力:");
scanf("%d",&n);

for(i=1 ; i<=n ; i++){
for(j=0 ; j<n-i ; j++) putchar(' ');
if(i>1) printf("%d", i);
for(j=0 ; j<2*(i-1)-1 ; j++){
if(i==n) printf("%d", i);
else putchar('0');
}
printf("%d\n", i);
}

return(0);
}
269デフォルトの名無しさん:2007/07/31(火) 00:35:41
っつか、毎回ifで条件分岐してたら効率が悪いだろ、ちったぁ頭使え
270デフォルトの名無しさん:2007/07/31(火) 00:37:16
だりいならやるなよ
271デフォルトの名無しさん:2007/07/31(火) 00:42:07
>>269
宿題スレなんだから効率より可読性の方が大事だろ頭使えよwww
272デフォルトの名無しさん:2007/07/31(火) 00:46:15
もしかして>>269っていつもの人?
273デフォルトの名無しさん:2007/07/31(火) 00:48:17
いつもの人って誰?
274デフォルトの名無しさん :2007/07/31(火) 00:50:53
275デフォルトの名無しさん:2007/07/31(火) 00:55:59
>272
いつもの人はそんなところにまで頭回らない
276デフォルトの名無しさん:2007/07/31(火) 00:56:29
>>275
wwwwwwwwwww
277デフォルトの名無しさん:2007/07/31(火) 01:53:52
>>271
こいつはバカか?ソースコードとしても読みづらいことに気づいていないようだ。素人以下だな
278デフォルトの名無しさん:2007/07/31(火) 01:57:06
if(i>1) printf("%d", i); < えっ!?

for(j=0 ; j<2*(i-1)-1 ; j++) < もっと簡単な式にできるだろ常識的に考えて
if(i==n) printf("%d", i);  < えっ!?
else putchar('0');  < ん!?
279デフォルトの名無しさん:2007/07/31(火) 01:58:37
ソースコードを短くすることだけにこだわる時期なんだろ。
280デフォルトの名無しさん:2007/07/31(火) 01:58:44
>>261 配列解かも
#include <stdio.h>
main()
{
char t[]=
"1\n202\n30003\n4000004\n500000005\n60000000006\n"
"7000000000007\n800000000000008\n90000000000000009\n";
int n,i;
scanf("%d",&n);
for (i=n*(n-1)+1;i<(n+2)*(n-1)+1;i++)
t[i]=n+'0';t[i]=0;puts(t);
return 0;}
281デフォルトの名無しさん:2007/07/31(火) 02:01:12
j<2*(i-1)-1 はこれから流行ります!是非とも普及させましょう!
282デフォルトの名無しさん:2007/07/31(火) 02:03:41
でも動作条件を満たしてないのは論外じゃないか?
>>266のは1以下の値を入れるとナニコレ?って感じ
283デフォルトの名無しさん:2007/07/31(火) 02:05:50
クソース書いた奴が見づらさを指摘されて必死だなw
284デフォルトの名無しさん:2007/07/31(火) 02:07:20
>>261
#include <stdio.h>

int main(void)
{
    int i, j, n;
   
    scanf("%d", &n);
    if(n < 1 || n > 9) exit(1);
   
    for(i = 1; i < n; i++) putchar(' ');
    if(n != 1) puts("1");
    for(i = 2; i < n; i++){
        for(j = i; j < n; j++) putchar(' ');
        printf("%d", i);
        for(j = 1; j < 2*(i - 1); j++) putchar('0');
        printf("%d\n", i);
    }
    for(i = 1; i < 2*n; i++) printf("%d", n);
    putchar('\n');
   
    return 0;
}
285280:2007/07/31(火) 02:07:53
間違ってた 今日も再起不能だなorz
include <stdio.h>
main()
{
char t[]=
"1\n202\n30003\n4000004\n500000005\n60000000006\n"
"7000000000007\n800000000000008\n90000000000000009\n";
int n,i;
scanf("%d",&n);
for (i=n*(n-1)+1;i<(n+2)*(n-1)+1;i++)
t[i]=n+'0';t[i+1]=0;puts(t);//<- [i+1]に訂正
return 0;
}
286デフォルトの名無しさん:2007/07/31(火) 02:07:55
なんか面白いことになってるな
287デフォルトの名無しさん:2007/07/31(火) 02:08:17
宿題スレで細かいことに必死になってる時点で終わってることに気づけ
288デフォルトの名無しさん:2007/07/31(火) 02:10:19
>>287
もう少し詳しく
289デフォルトの名無しさん:2007/07/31(火) 02:10:23
>>287
大まかな荒い部分に気づかない時点でアウトだろ、素人は余所へ行け
290デフォルトの名無しさん:2007/07/31(火) 02:13:14
まあ、ループの中に突っ込みたがる時期ってのはあるもんだ。
291デフォルトの名無しさん:2007/07/31(火) 02:13:18
もうみんなまとめて俺に¢50払えよ
292デフォルトの名無しさん:2007/07/31(火) 02:13:50
まぁ、おにゃの娘に突っ込みたがる時期ってのはあるもんだが
いつかは趣味が変わってウホッになる奴もいるもんさ
293デフォルトの名無しさん:2007/07/31(火) 02:14:22
>>289
必死すぎて浮いてますよ・・・
294デフォルトの名無しさん:2007/07/31(火) 02:16:05
279 名前:デフォルトの名無しさん 投稿日:2007/07/31(火) 01:58:37
ソースコードを短くすることだけにこだわる時期なんだろ。
↑こいつはバカか?短くすること だけ って、アホ杉。。。
295デフォルトの名無しさん:2007/07/31(火) 02:16:37
>>285
もう一度書き直すまで待ってやる
296280:2007/07/31(火) 02:25:07
>>295
そんなあ。待たないで下さいよ。
間違っているなら指摘よろしく。
297デフォルトの名無しさん:2007/07/31(火) 02:28:06
>>296
>>261をポップアップ
298280:2007/07/31(火) 02:33:35
>>297
すまん、開いたけど、分からない。
配列じゃない奴は皆さん書いてたから、
配列に限定してあれこれやってみたんだが。
もしかして、ピラミッド状にしろと言うことなのかな?
299デフォルトの名無しさん:2007/07/31(火) 02:35:52
そう、ピラミッド状にするみたい
300280:2007/07/31(火) 02:38:16
マジですか? 作り直しorz
301デフォルトの名無しさん:2007/07/31(火) 02:43:52
     1
    202
   30003
  4000004
 500000005
66666666666

俺が直してやんよ
302デフォルトの名無しさん:2007/07/31(火) 02:46:40
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下のような10進数と2進数の対応表を作成せよ。
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
:
15 1111

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年7月31日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
どうぞお力を貸してください。
お願いしますm(_ _)m
303デフォルトの名無しさん:2007/07/31(火) 02:47:44
#include <stdio.h>
int main(void){
int n,i,j;
char *a[][3]={
{"","1","1"},
{" ","202","222"},
{" ","30003","33333"},
{" ","4000004","4444444"},
{" ","500000005","555555555"},
{" ","60000000006","66666666666"},
{" ","7000000000007","7777777777777"},
{" ","800000000000008","888888888888888"},
{" ","90000000000000009","99999999999999999"}};
printf("入力:");
scanf("%d",&n);
if(n<1||n>9)
return 1;
for(i=1;i<n;i++)
printf("%s%s\n",a[n-i][0],a[i-1][1]);
printf("%s%s\n",a[0][0],a[n-1][2]);
return 0;
}
304デフォルトの名無しさん:2007/07/31(火) 02:48:26
>>303の変数 j は要らなくしてください
305デフォルトの名無しさん:2007/07/31(火) 02:53:25
>>302
#include <stdio.h>
int main(void){
int i;
for(i=0;i<16;i++)
printf("%2d %d%d%d%d\n",i,i>>3&1,i>>2&1,i>>1&1,i>>0&1);
return 0;
}
306261:2007/07/31(火) 02:57:02
皆様どうもありがとうございました。
本当に助かりました。
307280:2007/07/31(火) 02:57:17
>>299 寝ますm(_ _)m
#include <stdio.h>
main()
{
char t[][18]={
"1","202","30003","4000004","500000005","60000000006",
"7000000000007","800000000000008","90000000000000009"};
int n,i;scanf("%d",&n);
for(i=1; i<2*n-1;i++) t[n-1][i]=n+'0';
for(i=0;i<n;i++) printf("%*s\n",9+i,t[i]);
return 0;
}
308デフォルトの名無しさん:2007/07/31(火) 03:02:03
A
1
I
K
L
ちと文字幅テスト
309デフォルトの名無しさん:2007/07/31(火) 03:02:44

今夜の流れはなかなか面白かったな
310デフォルトの名無しさん:2007/07/31(火) 04:34:21
面白かった?俺が作った流れだから、とりあえず俺に$100払ってくれ
311デフォルトの名無しさん:2007/07/31(火) 04:39:48
つまんなかったから100$よこせ
312デフォルトの名無しさん:2007/07/31(火) 05:57:09
[1] 授業単元:プログラミング演習
[2] 問題文:二つの文字列A, Bを入力し(空白文字も含む)、各文字の文字数を
      調べ、文字数が多い文字列のなかにもう一方の文字列が含まれて
      いるかどうかを調べるプログラムを作成せよ。
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
朝か・・・
確か今日の昼までだっけな・・・
313デフォルトの名無しさん:2007/07/31(火) 08:11:56
>>312
#include <stdio.h>
#include <string.h>
#define MAX 1024
int main (void) {
char A[MAX],B[MAX],*flg;

printf("Input > ");
scanf("%s",A);
printf("Input > ");
scanf("%s",B);

if( strlen(A) > strlen(B) )
flg=strstr(A,B);
else flg=strstr(B,A);

if(flg) printf("あり\n");
else printf("なし\n");
return 0;
}
314デフォルトの名無しさん:2007/07/31(火) 08:12:34
>>312
>>313じゃ空白は含まれてなかったっけ、ちと訂正してくる
315デフォルトの名無しさん:2007/07/31(火) 08:15:31
>>312

#include <stdio.h>
#include <string.h>
#define MAX 1024
int main (void) {
char buf[MAX],A[MAX],B[MAX],*flg;

printf("Input > ");
fgets(buf,MAX,stdin);
strncpy(A,buf,strlen(buf)-1);
printf("Input > ");
fgets(buf,MAX,stdin);
strncpy(B,buf,strlen(buf)-1);

if( strlen(A) > strlen(B) )
flg=strstr(A,B);
else flg=strstr(B,A);

if(flg) printf("あり\n");
else printf("なし\n");
return 0;
}
316デフォルトの名無しさん:2007/07/31(火) 08:39:52
>>315

ありがとうございます!!

どうしよう………希望が湧いてきてしまった!
317デフォルトの名無しさん:2007/07/31(火) 08:55:28
[1] 授業単元:プログラミング演習
[2] 問題文:L行M列の行列AとM行N列の行列Bとの積Cを求めるプログラムを作成せよ。
       ただし、行列を表すのには二次元配列を用い、配列の要素数はあらかじめ
       十分な大きさを用意しておけば良いものとする。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 今日の夕方まで延長してもらったのは秘密

聞くは一時の何とやら。恥ずかしながら丸投げです。
318デフォルトの名無しさん:2007/07/31(火) 09:00:08
>>317
入力部分は省略

int A[L][M], B[M][N], C[L][N] = {0};
int i, j,k;

for(i = 0 ; i < L ; i++)
for(j = 0 ; < N ; j++)
for(k = 0 ; k < M ; k++)
C[i][j] += A[i][k] + B[k][j];

319デフォルトの名無しさん:2007/07/31(火) 09:20:12
>>318

ありがとうございます!!
これで無事夏休みに…(・∀・)<キタコレ!!

夏はこの板で勉強しようかな。
320デフォルトの名無しさん:2007/07/31(火) 10:26:58
[1] 授業単元: C言語演習初級
[2] 問題文(含コード&リンク):
下のプログラムは0〜1までの一様乱数を500個だすプログラムである。
0〜1までの区間を10区間に分けて(0.1ずつ)でその区間に何個あるかをif分で作成せよ。

#include <stdio.h>
#include <stdlib.h>
#define N 500
int main(void)
{
int a,i,n=500;
double x[N];
for(i=0;i<N;i++){
a=rand();
x[i]=(double)a/32768.0;
}
return(0);
}
[3] 環境
 [3.1] OS: Windows
 [3.2] VC 6.0
 [3.3] 言語:C言語
[4] 期限: 8月1日13時まで
[5] その他の制限:if分を使うらしいのですが、for分くらいしかわかりません。
321デフォルトの名無しさん:2007/07/31(火) 11:03:00
>>320 きんもぉ〜☆ソースでw

#include <stdio.h>
#include <stdlib.h>
#define N 500
int main(void) {
int i,cnt[10]={0};
double x[N];
for(i=0;i<N;i++){
x[i]=(double)rand()/(double)RAND_MAX;
cnt[(int)(x[i]*10)%10]++;
}
for(i=0; i<10; i++)
printf("%.1lf 〜 %.1lf : %d \n",(double)i/(double)10,(double)(i+1)/(double)10,cnt[i]);
return(0);
}
322デフォルトの名無しさん:2007/07/31(火) 11:06:42
>>320
#include <stdio.h>
#include <stdlib.h>
#define N 500
int main(void)
{
int a,i,n=500;
double x[N];
int count[10]={0};//追加
for(i=0;i<N;i++){
a=rand();
x[i]=(double)a/32768.0;
count[(int)(x[i]*10)]++;//追加
}
for(i=0;i<10;i++)
printf("%1.1f-%1.1f=%d\n",0.1*(i),0.1*(i+1),count[i]);
return(0);
}
323デフォルトの名無しさん:2007/07/31(火) 12:53:31
[1] 授業単元: C言語演習
[2] 問題文:整数Nを読み込んで、各桁の数字を足し合わせることを繰り返し、一桁
の数字に変換することを考える。例えば 32781は
3 + 2 + 7 + 8 + 1 = 21
2 + 1 = 3
より3となる。処理の結果の数と、足し合わせの繰り返しを何回おこなったかを出力
するプログラムを作成せよ。上の例では答えは「2」となる。負の数の入力があるまで
この操作を繰り返すようにせよ。
[3] 環境
 [3.1] OS: UNIX
 [3.2] gcc
 [3.3] 言語:C言語
[4] 期限: 8月1日まで

分解?それとも除算をうまく使う?こんがらがりました。
324デフォルトの名無しさん:2007/07/31(火) 13:05:34
#include <stdio.h>
int f(int n)
{
int ret = 0;
while(n) {
ret += n % 10;
n /= 10;
}
return ret;
}
int main(void)
{
while(1) {
int n, cnt = 0;
scanf("%d", &n);
if(n<0) break;
while(n>9) {
cnt++;
n = f(n);
}
printf("%d\n", cnt);
}
return 0;
}
325デフォルトの名無しさん:2007/07/31(火) 14:57:07
名前: 261
E-mail:
内容:
[1] 授業単元:
[2] 問題文:整数値を受け取り、以下のような三角形を書く、再帰関数を作成せよ。
例)入力:5
12345
1234
123
12
1
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2007年8月1日まで
[5] その他の制限:
再帰関数で書くそうなのですが、さっぱりわかりません。
どうぞよろしくお願いします。
326デフォルトの名無しさん:2007/07/31(火) 14:59:42
おでこのめがねででこでこでこりん
>>325
327デフォルトの名無しさん:2007/07/31(火) 15:04:35
>325
#include <stdio.h>
void f(int n)
{
int i;
if(n==1) {
printf("1\n");
return;
}
for(i=1; i<=n; i++) printf("%d", i);
putchar('\n');
f(n-1);
}
int main(void)
{
int n;
printf("入力:");
scanf("%d", &n);
f(n);
return 0;
}
328325:2007/07/31(火) 15:08:39
>327さん
どうもありがとうございます。
またお世話になりにくると思いますが、よろしくお願いしますm(_ _)m
329デフォルトの名無しさん:2007/07/31(火) 15:14:22
>>327
こうやったほうがよくない?
#include <stdio.h>
void f(int n)
{
int i;/*
if(n==1) {
printf("1\n");
return;
}*/
for(i=1; i<=n; i++) printf("%d", i);
putchar('\n');
if(n>1)f(n-1); ////////////////////変更
}
int main(void)
{
int n;
printf("入力:");
scanf("%d", &n);
f(n);
return 0;
}
330デフォルトの名無しさん:2007/07/31(火) 15:25:13
[1] 授業単元:C言語
[2] 問題文:
2つの整数値x、yを読み込んで、x以上でy以下の整数(x、yを含む)をすべて加えた値を表示するプログラムである。()に入る適当なプログラムを答えなさい。(x>yなら0を表示)
#include<stdio.h>
{
int x,y,no,(1)
printf("整数1:"); scanf(2);
printf("整数2:"); scanf("%d",&y);

(3);
while(no<=y) {
sum=(4);
no=(5);
}
printf("%d以上%d以下の整数の和は%dです\n",x,y,sum);
return(0);
}

[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ名とバージョン: (VS 2005)
 [3.3] 言語: C
[4] 期限: 8月1日まで

実行画面
整数1:10
整数2:90
10以上90以下の整数の和は4050です

よろしくお願いします
331デフォルトの名無しさん:2007/07/31(火) 15:29:49
int型変数nxの値が13である場合の以下の各文が実行された後のnxの値を答えなさい

1、nx += 9;
2、nx %= 3;
3、nx /= 4;
4、nx = 15-nx*2;
5、nx++;

よろしくお願いします
332デフォルトの名無しさん:2007/07/31(火) 15:35:38
[1] 授業単元:C言語
[2] 問題文:
キーボードから整数値を読み込み、その値を10で割った余りが、1なら「A」、5なら「B」、9なら「C」、それ以外なら「D」を表示するものである。()に適当なプログラムを書きなさい
#include<stdio.h>
{
int no, ama;

printf("整数値を入力:");
scanf("%d",&no);
ama=no%10;
()

return(0);
}

[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ名とバージョン: (VS 2005)
 [3.3] 言語: C
[4] 期限: 8月1日まで

実行結果1
整数値を入力:10
D

実行結果2
整数値を入力:19
C
よろしくお願いします
333デフォルトの名無しさん:2007/07/31(火) 15:35:44
>>330
#include<stdio.h>

int main(void)
{
int x,y,no,sum=0;
printf("整数1:"); scanf("%d",&x);
printf("整数2:"); scanf("%d",&y);
no=x;
while(no<=y) {
sum=sum+no;
no=no+1;
}
printf("%d以上%d以下の整数の和は%dです\n",x,y,sum);
return(0);
}
334デフォルトの名無しさん:2007/07/31(火) 15:40:14
>>332
#include<stdio.h>

int main(void)
{
int no, ama;
printf("整数値を入力:");
scanf("%d",&no);
ama=no%10;
switch(ama)
{
case 1 : printf("%c\n",'A'); break;
case 5: printf("%c\n",'B'); break;
case 9 : printf("%c\n",'C'); break;
default : printf("%c\n",'D');
}
return(0);
}
335デフォルトの名無しさん:2007/07/31(火) 15:43:58
1,2については、各プログラム部分を実行した場合,sumの値はいくつになるか(数値)答えなさい
3〜5については、各プログラム部分を実行した場合に'+'記号をnum個表示されるためには、□にどのようなプログラムを書けばよいか、そのプログラムを答えなさい

1 sum=0;
for(i=1;i<9;i++){
if(i%2==0lli%3==0)
sum+=i;
}

2 sum=0;
for(i=1;i<10;i++){
if(i%3==2&&i%2==0)
sum+=i;
}

3 i=0;
while(□){
i++;
putchar('+');
}

4 i=1;
do{
putchar('+');
i++;
}while(□);

5 for(i=0;□;i++)
 putchar('+');

よろしくお願いします
336デフォルトの名無しさん:2007/07/31(火) 15:44:05
>>321,>>322
ありがとうございます。
337デフォルトの名無しさん:2007/07/31(火) 15:44:10
>>332
{
char a[10] = {'D','A', 'D', 'D', 'D', 'B', 'D', 'D', 'D', 'C'};
printf("%c\n", a[ama]);
}
338デフォルトの名無しさん:2007/07/31(火) 15:48:45
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
再帰的関数を用いて,ハノイの塔を解くプログラムを作成せよ.
ただし、プログラムの動作を印字する際に、以下のようにどの関数から呼ばれているのかが
わかるように、再帰的に呼ばれる関数の深さを引数に加え、印字を工夫せよ。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4790.txt
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 )
 [3.3] 言語: (C)
[4] 期限: ([2007年8月31日] )
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ハノイの塔自体は以前やったのですが、印字を工夫する方法がよくわかりません。
よろしくお願いします。

339デフォルトの名無しさん:2007/07/31(火) 15:48:51
以下に示すのは、要素数(データ数)がnoで要素型がint型の配列aの要素の最大値maxおよびその際の配列添字max_iを求めるプログラム部分である
□に適当なプログラムを書きなさい

max=a[□]; max_i=□;
for(i=1;□;i++){
if(max<a[i]){
□=a[i];
□=i;
}
}

よろしくお願いします
340デフォルトの名無しさん:2007/07/31(火) 16:04:00
1、2をそれぞれ実行して、変数a、bまたはnに、右にある値をキーボードから読み込んだ場合の出力結果を答えなさい
1
#include<stdio.h>
int main(void){
int a,b,x=0
printf("整数a:");
scanf("%d",&a);
printf("整数b:");
scanf("%d",&b);
while(x<15&&b<=10){
a+=2;
b++;
x=a+b;}
printf("a=%d\n",a);
printf("b=%d\n",b);
return(0);
}

2
#include<stdio.h>
int main(void){
int n,i,x=0
printf("整数n:");
scanf("%d",&n);
for(i=0:i<n:i++){
if(i%3==1)
X+=i;}
printf("x=%d\n",x);
return(0);
}
341デフォルトの名無しさん:2007/07/31(火) 16:04:56
1
整数a:1}
整数b:6}読み込んだ数値
a= }
b= }画面出力

整数a:4}
整数b:2}読み込んだ数値
a= }
b= }画面出力


整数n:17←読み込んだ数値
x= ←画面出力

よろしくお願いします
342デフォルトの名無しさん:2007/07/31(火) 16:15:10
5人の得点(整数)を保存する配列scoreにキーボードから値を読み込んで、その平均値を求めて、画面に表示するプログラムである
□に入る適当なプログラムを答えなさい
#include<stdio.h>
□ NUMBER 5
int main(void)
{
int i:
int score[NUMBER], sum=0
double □;
fpr(i=0; □ ; i++){
printf("%d番目の得点=",i+1);
scanf(□);
sum+=score[i];
}
avg=(double)□;
printf("平均値=%5.1\n",avg);
return(0);
}

実行画面例
1番目の得点=51
2番目の得点=52
3番目の得点=58
4番目の得点=53
平均値=53.5

よろしくお願いします
343デフォルトの名無しさん:2007/07/31(火) 16:17:23
int型整数のn倍(整数mにnを掛けた値で、結果は整数値)を返値として返すmulti関数を作成しなさい。(multi関数部分だけでよい)

よろしくお願いします
344デフォルトの名無しさん:2007/07/31(火) 16:21:32
nはどうやって与えるのだろう。
345デフォルトの名無しさん:2007/07/31(火) 16:30:44
学生3名の4科目は表10のとおりである。下記のプログラムは、2次元配列を用いて各学生の平均点を求めて、表示するものである。(得点は配列初期化を用いる)□に手¥祈祷名プログラムを書きなさい
得点表
    科目1 科目2 科目3 科目4
学生1 70 80 90 69
学生2 60 70 80 55
学生3 81 82 83 75
#include <stdio.h>
#define GAKUSEI 3 //学生数
#define KAMOKU 4 //科目数
int main(void){
int ten[GAKUSEI][KAMOKU]={
□};
int sum,g,k;
double avg[□]; /*各学生の平均点*/
for(g=0;g<GAKUSEI;g++){
sum=0;
for(k-0;k<KAMOKU ; k++){
sum+=□;}
avg[g]=(double)□;}
for(g=0;g<GAKUSEI;g++){
printf("学生%dの平均点;%5.1\n",(g+1),);}
return(0);}
実行結果
学生1の平均点:77.3
学生2の平均点:66.3
学生3の平均点:80.3

よろしくお願いします
346デフォルトの名無しさん:2007/07/31(火) 16:33:33
要素数がnoであるint型の配列vxの全要素に0を代入する関数set_zeroを作成しなさい
なお関数set_zeroは値を返さない。(関数部分だけでよい)*vx[0]に0,vx[i]に0、vx[2]に0・・を代入する

よろしくお願いします
347デフォルトの名無しさん:2007/07/31(火) 16:37:06
>>338
#include <stdio.h>

static int count = 0;

void hanoi(int val, int from, int work, int to, int depth)
{
    count++;
    printf("In move(%d, %d, %d, %d, %d)\n", val, from, work, to, depth);
    if(val > 1) hanoi(val - 1, from, to, work, depth + 1);
    printf("%d : %d -> %d\n", val, from, to);
    if(val > 1) hanoi(val - 1, work, from, to, depth + 1);
    printf("Out move(%d, %d, %d, %d, %d)\n", val, from, work, to, depth);
}

int main(void)
{
    hanoi(3, 1, 2, 3, 0);
    printf("COUNT = %d\n", count);
    return 0;
}
348デフォルトの名無しさん:2007/07/31(火) 16:38:30
指定された段数numの図形を画面に表示するプログラム部分である
□に適当なプログラムを書なさい。(プログラム中のi,jはint型変数)

for(i=1;□;i++){
for(j=1;j<=□;j++){
printf(□);
}
for(j=1;□;j++){
printf("%d",i);
}
putchar(□);
}

実行結果
何段?num=5
1
22
333
4444
55555


よろしくお願いします
349デフォルトの名無しさん:2007/07/31(火) 18:31:58
>>348
for(i=1;/**/ i<=n /**/;i++){
for(j=1;j<=/**/ n-i /**/;j++){
printf(/**/ " " /**/);
}
for(j=1;/**/ j<=i /**/;j++){
printf("%d",i);
}
putchar(/**/ '\n' /**/);
}
350デフォルトの名無しさん:2007/07/31(火) 19:05:48
>>343
質問があいまいだな
もうちょっと基礎を身に付けたほうがいいぞ

int multi(int m, int n){
return m*n;
}
351デフォルトの名無しさん:2007/07/31(火) 19:30:22
>>346
>>1 を読んで書き直し
352 ◆xdqL6ZHhIs :2007/07/31(火) 21:04:29
[1] 授業単元:プログラミングA
[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
353デフォルトの名無しさん:2007/07/31(火) 21:33:04
strlen();使わないで文字数を判定するにはどうしたらいいんだろう??
354デフォルトの名無しさん:2007/07/31(火) 21:35:38
>>353
for()使って配列の数カウントすればいいんじゃね?
355デフォルトの名無しさん:2007/07/31(火) 21:41:15
習ってないからってつっかえされるのかよ・・・
356デフォルトの名無しさん:2007/07/31(火) 21:42:12
あぁ、使っちゃだめってことね
357デフォルトの名無しさん:2007/07/31(火) 21:42:44
>>353
char *str;
strstr(str,"\0")-str; とかは?
358デフォルトの名無しさん:2007/07/31(火) 21:58:48
>>357
ポインタ自体が、使用禁止じゃないのかな?
359 ◆xdqL6ZHhIs :2007/07/31(火) 22:00:43
>>117です。
>>353さんのプログラムもまだ習ってないですorz
本当に、ご迷惑をおかけします。
360デフォルトの名無しさん:2007/07/31(火) 22:01:43
教えていないものを使ったらつっかえすのか
学生の自主性をないがしろにする最低の教育だな
361デフォルトの名無しさん:2007/07/31(火) 22:02:04
習ってないならさ
せんせいーにこの関数習えばよくね?
362357:2007/07/31(火) 22:05:50
じゃあ
int i=0;
while(str[i]!='\0')i++;
363353:2007/07/31(火) 22:17:08
>>362
なるほどw
364デフォルトの名無しさん:2007/07/31(火) 22:20:50
日頃の行いから丸写しがバレた可能性が高いんじゃない?
365デフォルトの名無しさん:2007/07/31(火) 22:20:52
[1] 授業単元:
[2] 問題文(含コード&リンク):
10進数を2進数に変換し印字する関数を作り、以下のような10進数と2進数の対応表を作成せよ。

 0 0000
 1 0001
 2 0010
 3 0011
 4 0100
 5 0101
    :
15 1111
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc )
 [3.3] 言語: (C)
[4] 期限: できれば今日中にお願いします。
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
関数を作らなければならないのですが、よくわかりません。よろしくお願いします。
366デフォルトの名無しさん:2007/07/31(火) 22:28:58
// >>365 試してないけどまぁ、大丈夫だろう
#include <stdio.h>
static void print2(unsigned val)
{
printf("%d%d%d%d", !!(val & 8), !!(val & 4), !!(val & 2), !!(val & 1));
}
int main()
{
for (int ic = 0; ic <= 15; ++ic) {
printf("%2d ", ic);
print2(ic);
putchar('\n');
}
return 0;
}
367 ◆xdqL6ZHhIs :2007/07/31(火) 22:39:49
>>362さん
ありがとうございます!それでやってみます。

できれば引き続き下の方の/*^^^ここ*/もお願いしますm(*_ _)m
368デフォルトの名無しさん:2007/07/31(火) 22:45:05
369デフォルトの名無しさん:2007/07/31(火) 22:47:14
>>365 0から15まででいいのか?だったら、こういうのもありか?w
#include <stdio.h>
char *print_dec2bin(int n)
{
static char *table[]={
"0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111",
};
return table[n];
}
int main()
{
int i;
for (i = 0; i <= 15; i++)
printf("%2d %s\n",i, print_dec2bin(i));
return 0;
}
370デフォルトの名無しさん:2007/07/31(火) 22:51:19
>>365は全角数字をご所望か?
371デフォルトの名無しさん:2007/07/31(火) 23:04:50
>>365 全角文字で出力!
#include<stdio.h>
#include<ctype.h>
#include<stdarg.h>

#define BUF_SIZE 1024

int printf2(const char *fmt, ...){
char *num_string[]={"0","1","2","3","4","5","6","7","8","9"};
char buffer[BUF_SIZE];
va_list arglist;
int i, ret;

va_start(arglist, fmt);
ret=vsnprintf(buffer, sizeof(buffer)-1, fmt, arglist);
buffer[sizeof(buffer)-1]='\0';
va_end(arglist);

for(i=0;buffer[i]!='\0';i++){
if(isdigit(buffer[i])) printf("%s", num_string[buffer[i]-'0']);
else if(buffer[i]==' ') printf(" ");
else putchar(buffer[i]);
}
return ret;
}

int main(void){
int i;
for(i=0;i<=15;i++)
printf2("%2d %d%d%d%d\n", i, !!(i&8), !!(i&4), !!(i&2), !!(i&1));
return 0;
}
372デフォルトの名無しさん:2007/07/31(火) 23:23:14
質問のペースが早いけど、回答も早いな。
373デフォルトの名無しさん:2007/07/31(火) 23:39:52
>習ってないもの

習ってないものがダメなんじゃなく
 「ここまだ授業でやってないけど、どういう動作をしてるの?」
 「……わかりません」
というので、再提出扱いにされたんじゃないの?
374 ◆xdqL6ZHhIs :2007/07/31(火) 23:46:40
>>373
宿題はメールで提出するのですが、
提出したらこういうメールが返ってきたんですorz
「保留」されたものが評価されればいいのですが・・・

> n=strlen(line);

↑これを現在の知識で書くとどうなりますか?

> for(i=0;i<n/2;i++)
> c=line[i],line[i]=line[n-1-i],line[n-1-i]=c;

↑ここは
for(i=0;i<n/2;i++) {
c=line[i]; line[i]=line[n-1-i]; line[n-1-i]=c;
}
と書くようにしましょう。

> for(i=0;i<n;i++){
> if(isspace(line[i])) flag=TRUE;
^^^^^^^^^^^^^^^^
ここを現在の知識で書くとどうなりますか?

上記の「ここを……」という部分はさほど難しい部分ではありません。
インターネットで検索したものをここまで組み合わせられるなら、授業でやっ
た範囲内から、「ここを……」の部分を埋める作業も同様にできるはずです。

一応評価では保留としておきます。
できれば再提出してください。
375デフォルトの名無しさん:2007/07/31(火) 23:54:36
int strlen(const char * p){
int i;
while(*p != '\0')p++;
}

int isspace(char c){
return (c==' '||c=='\n'||c=='\t')?1:0
}

こんな感じ?関数仕様の記憶曖昧&コンパイルすらしてない。
376 ◆xdqL6ZHhIs :2007/07/31(火) 23:58:06
>>375さん
本当にすいません。本当にありがとうございます。やってみます。
377デフォルトの名無しさん:2007/07/31(火) 23:59:02
>>375
ワロタ
378デフォルトの名無しさん:2007/08/01(水) 00:01:01
>>377
ゴメン、超ゴメン、めっちゃゴメン、まじゴメン
379デフォルトの名無しさん:2007/08/01(水) 00:01:29
>>375
strlen、それ途中だろww
380デフォルトの名無しさん:2007/08/01(水) 00:03:41
>>375
これはひどい
381デフォルトの名無しさん:2007/08/01(水) 00:05:16
やっぱテキトーはだめだな。
strlenにreturnが無い。strlenの型はsize_t
isspaceの引数はint。isspaceの対称は空白(' ')、書式送り('\f')、改行('\n')、復帰('\r')、水平タブ('\t')および垂直タブ('\v')でした。
382 ◆xdqL6ZHhIs :2007/08/01(水) 00:05:32
締め切りのメールがきますたww
きっとなんとかなるなるw
返信に「後期は頑張りますから!!」ってめっちゃ書いて送ってみました。
ありがとうございました。またお世話になると思います。
383デフォルトの名無しさん:2007/08/01(水) 00:09:18
(´-`).。oO(後期は(ry なんて死亡フラグ?)
384デフォルトの名無しさん:2007/08/01(水) 00:26:04
前期が駄目なのに、前期で習った基本を使って継続する後期だったら
前期が駄目な奴は来年もってなっちゃうだろ・・・
385デフォルトの名無しさん:2007/08/01(水) 00:29:49
裏読みすると「前期はいい加減でしたプー」って事になる?!
386デフォルトの名無しさん:2007/08/01(水) 00:34:02
ってかレポートに後期は頑張りますから
なんておそろしくて書けない・・・
387デフォルトの名無しさん:2007/08/01(水) 00:36:34
レポートすら提出してない\(^O^)/
388デフォルトの名無しさん:2007/08/01(水) 00:53:39
レポート? 単位? 何のことです?
389デフォルトの名無しさん:2007/08/01(水) 00:58:45
>>374
提出した内容が本当に理解できているのか試された訳だな。
あまりきれいな回答を書くと、却って疑われてまずいのかもな。
390デフォルトの名無しさん:2007/08/01(水) 01:02:44
ttp://www.bohyoh.com/CandCPP/C/Library/strlen.html
■実装例■

#include <stdlib.h>
/*--- 文字列sの長さを調べる ---*/
size_t strlen(const char *s)
{
size_t len = 0;
while (*s++) len++;
return (len);
}
391デフォルトの名無しさん:2007/08/01(水) 01:06:05
>>374様のレベルを考慮すると、多分関数にしちゃだめだよ
392デフォルトの名無しさん:2007/08/01(水) 01:10:57
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下の手順に従って,完全数か否かを判断する関数を作成せよ.
メインプログラムは,値の入力と下記(2)の関数を呼び出し,
戻り値によって,「完全数/完全数でない」の印字をする.
(1)自然数を引数として受け取り,その数値のすべての約数の合計を戻す関数を
   作成せよ.今回は繰り返し構造を用いること.

(2)自然数を引数として受け取り,上記(1)を用いて,その数値が完全数か否か
   を判定する関数を作成せよ.関数の戻り値は,与えられた数値が完全数の場合
   はその完全数の値を,完全数でない場合は−1を戻すこととする.

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年8月2日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
(1)も(2)もお願いしたいのですが、特に(2)がわかりません。
よろしくお願いします。
393デフォルトの名無しさん:2007/08/01(水) 01:22:10
>>392 低速版
#include<stdio.h>
unsigned sum_measure(unsigned number){
unsigned i, ret=0;
for(i=1;i<=number;i++)
if(number%i==0) ret+=i;
return ret;
}
int is_perfect(unsigned number){
if(sum_measure(number)-number==number) return number;
return -1;
}
int main(void){
int i;
for(i=1;i<=1000;i++)
if(is_perfect(i)!=-1)
printf("%d\n", i);
return 0;
}
394デフォルトの名無しさん:2007/08/01(水) 01:23:51
指導している講師が標準ライブラリをあまり知らないってのはいただけない。
そんな指導者のもとで育つ生徒なんて・・・
395デフォルトの名無しさん:2007/08/01(水) 01:25:29
>>394
CならまだしもC++の標準ライブラリなんて…無理ぽ
396デフォルトの名無しさん:2007/08/01(水) 02:06:24
[1] 授業単元:
[2] 問題文(含コード&リンク):
巨大な整数を加算、減算(さらに乗算)するプログラムを配列を用いて実現せよ。

C言語のint型は、intが2バイトな処理系だと、最大で32,767までしか扱えない。long型にしても2,147,483,647までであるから、せいぜい10桁どうしの演算しかできない。
100桁の整数と100桁の整数をC言語で足し算したいと思ったらどのようにすればよいか。
ひとつの方法として、int型の配列を利用し、「配列の1つの要素を10進数の1桁と思うことにする」方法がある。
例えば、245,083という10進数に対して
int a[6];
a[0] = 3;// 第0桁
a[1] = 8;// 第1桁
a[2] = 0;// 第2桁
a[3] = 5;// 第3桁
a[4] = 4;// 第4桁
a[5] = 2;// 第5桁
のようにデータを保持するわけである。
この方法を利用して、10桁の整数と10桁の整数を
・加算
・減算
・乗算
するプログラムを作成せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年8月2日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
課題そのまま書きました。書き方が全くわかりません。どうかよろしくお願いします。
397デフォルトの名無しさん:2007/08/01(水) 02:15:53
設問を読んで、おれは貧乏人なんだなと思た。
398デフォルトの名無しさん:2007/08/01(水) 02:24:24
unsigned char 型に2桁入るぞ
unsigned int 型に8桁入るぞ
399デフォルトの名無しさん:2007/08/01(水) 02:37:02
B・C・D!
B・C・D!
400デフォルトの名無しさん:2007/08/01(水) 02:41:16
>396
足し算と掛け算だけ
void add(int a[],int b[], int c[]) {
int i;
for(i=0; i<10; i++) {
c[i] += a[i] + b[i];
c[i+1] += c[i] / 10;
c[i] %= 10;
}
}

void mul(int a[], int b[], int c[])
{
int i, j
for(i=0; i<10; i++) {
for(j=0; j<10; j++) {
c[i+j] += a[i] * b[j];
c[i+j+1] += c[i+j] / 10;
c[i+j] %= 10;
}
}
}
401デフォルトの名無しさん:2007/08/01(水) 06:20:57
>>400
c+=a+b;
c+=a*b;
になるのか?
負数はどうなる?
しかも「せいぜい10桁どうしの演算しかできない」ぞ
402401:2007/08/01(水) 06:28:16
>>400 スマン
問題文をよく読んだら10桁どうしの計算だった
403デフォルトの名無しさん:2007/08/01(水) 09:26:51
404デフォルトの名無しさん:2007/08/01(水) 10:03:35
ひでえ丸投げっぷりだな
1問くらいは自力で解いたのかYO!
405デフォルトの名無しさん:2007/08/01(水) 10:07:38
宿題スレだから丸投げでも文句はないけど
答えてくれてる人がいるのにお礼もなく
リストからも削除しない人に答えてくれる仏はあまりいないと思うお( ^ω^)
406デフォルトの名無しさん:2007/08/01(水) 10:18:04
>>331
1:22 2:1 3:3 4:-11
>>335
1:23 2:10 3:i<num 4:i<=num 5:i<num
>>339
max=a[0]; max_i=0;
for(i=1;i<num;i++){
if(max<a[i]){
max=a[i];
max_i=i;
}
}
407デフォルトの名無しさん:2007/08/01(水) 10:23:52
[1] 授業単元: 数値解析
[2] 問題文(含コード&リンク): ルンゲ・クッタ法を用いて常微分方程式を解きなさい。
ソースコードは長いんでうpろだにおいておきます。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm のNo.4792です。
本来なら実行結果が

x = 0.000000, y= 1.00000e+00
x = 0.100000, y= 1.10517e+00
x = 0.200000, y= 1.22140e+00
x = 0.300000, y= 1.34986e+00
x = 0.400000, y= 1.49182e+00
x = 0.500000, y= 1.64872e+00

となるはずなのですが、

x = 0.000000, y= 1.00000e+00
x = 0.100000, y= 0.00000e+00
x = 0.200000, y= 6.36599e-314
x = 0.300000, y= 1.02531e-304
x = 0.400000, y= 1.38338e-322
x = 0.500000, y= 0.00000e+00

となってしまいます・・・。原因がまったくわかりません。
[3] 環境
 [3.1] OS: Macintosh OS X 10.4
 [3.2] コンパイラ名とバージョン:Xcode 2.0 (gcc 4.0)
 [3.3] 言語: C
[4] 期限: 2007年8月3日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にありません。みなさまお願いしますorz
408デフォルトの名無しさん:2007/08/01(水) 10:26:01
>>340>>341
1
整数a:1
整数b:6
a=7
b=9

整数a:4
整数b:2
a=10
b=5


整数n:17
x=51
409デフォルトの名無しさん:2007/08/01(水) 10:33:47
>>342
#include<stdio.h>
#define NUMBER 5
int main(void)
{
int i;
int score[NUMBER], sum=0 ;
double avg;
for(i=0; i<NUMBER ; i++){
printf("%d番目の得点=",i+1);
scanf("%d",&score[i]);
sum+=score[i];
}
avg=(double)sum/NUMBER;
printf("平均値=%5.1\n",avg);
return(0);
}
410デフォルトの名無しさん:2007/08/01(水) 10:42:50
>>345
#include <stdio.h>
#define GAKUSEI 3 //学生数
#define KAMOKU 4 //科目数
int main(void){
int ten[GAKUSEI][KAMOKU]={
{70,80,90,69},{60,70,80,55},{81,82,83,75}};
int sum,g,k;
double avg[GAKUSEI]; /*各学生の平均点*/
for(g=0;g<GAKUSEI;g++){
sum=0;
for(k=0;k<KAMOKU ; k++){
sum+=ten[g][k];}
avg[g]=(double)sum/KAMOKU;}
for(g=0;g<GAKUSEI;g++){
printf("学生%dの平均点;%5.1f\n",(g+1),avg[g]);}
return(0);}
411デフォルトの名無しさん:2007/08/01(水) 10:43:55
>>407
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4792.txt
リンクくらい張る手間惜しむなよ。
つーか、インデントがぶっ飛んでるのはなんかの嫌がらせか?
ついでにいえば、func()が全く意味を為してないのだが。
なんだよ、f[0] = yw[0]だけってのは。
412デフォルトの名無しさん:2007/08/01(水) 10:51:30
>>346
void set_zero(int vx[],int no)
{
int i;
for(i=0;i<no;i++){
vx[i]=0;
}
}
413デフォルトの名無しさん:2007/08/01(水) 12:01:30
[1] 授業単元:c言語
[2] 問題文:int型配列にデータが格納されているとき,全要素の総和を求めて出力するプログラムを作りなさい.
ただし,各要素は pointer2.c を参考にしてポインタで指すようにしましょう.
プログラム pointer2.c
main()
{
int a[]={18,21,35};
int i,*p;

for(i=0; i < 3; i++)
printf("a+%d = %u:*(a+%d) = %d\n",i,a+i,i,*(a+i));
printf("p = a とする。\n");
p=&a[0];
for(i=0; i < 3; i++){
printf("p = %p: *p = %d\n", p, *p);
p++;
}
}

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2007年08月02日12:00まで
[5] その他の制限: 特にありません

よろしくお願いします
414デフォルトの名無しさん:2007/08/01(水) 14:35:16
>>56
文字化けしてしまったので文字コードをunicodeに変換したら
ちゃんと動きました。
ありがとうござしました。
415デフォルトの名無しさん:2007/08/01(水) 14:42:28
>>413
#include<stdio.h>
int main(void)
{
int a[]={18,21,35};
int i,*p,sum;
sum=0;
p=a;
for(i=0; i < 3; i++){
sum+=*p;
p++;
}
printf("合計=%d\n",sum);
return 0;
}
416デフォルトの名無しさん:2007/08/01(水) 16:28:24
[1] 授業単元:C言語
[2] 問題文:
指定された段数numの図形を画面に表示するプログラム部分である
□に適当なプログラムを書なさい。(プログラム中のi,jはint型変数)

for(i=1;□;i++){
for(j=1;j<=□;j++){
printf(□);
}
for(j=1;□;j++){
printf("%d",i);
}
putchar(□);
}

[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ名とバージョン: (VS 2005)
 [3.3] 言語: C
[4] 期限: 8月1日まで

実行結果
何段?num=5
1
22
333
4444
55555


よろしくお願いします
417デフォルトの名無しさん:2007/08/01(水) 16:30:49
[1] 授業単元:C言語
[2] 問題文:
int型整数のn倍(整数mにnを掛けた値で、結果は整数値)を返値として返すmulti関数を作成しなさい(multi関数部分だけでよい)

[3] 環境
 [3.1] OS:WINDOWS XP
 [3.2] コンパイラ名とバージョン: (VS 2005)
 [3.3] 言語: C
[4] 期限: 8月1日まで

お願いします
418デフォルトの名無しさん:2007/08/01(水) 16:43:28
>>416
ちょっと前に似たようなのがあったはず

>>417
問題がよくわからんが

int multi(int m, int n) {
return m * n;
}

こういうことか?
引数に関する記述ない?
419max_tc:2007/08/01(水) 16:54:15
1] 授業単元: C言語演習
[2] 問題文:
int find( char buf[] , char str[] ) をつくる。
第一引数bufの文字列の中に,第2引数strで表現される単語(文字列)を
さがして,発見できればその位置(ポインタ)をかえす. できなければNULLをかえす。


教えて頂けないでしょうか。
本当に困っています。よろしくお願いしますm(_ _)m
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2007年8月2日23:00まで] )
[5] その他の制限: (標準ライブラリは使ってはいけない)
420デフォルトの名無しさん:2007/08/01(水) 17:01:10
intなのにポインタ返すのか?なんだそりゃ
421デフォルトの名無しさん:2007/08/01(水) 17:07:26
ポインタも32bitの数字だろ
422デフォルトの名無しさん:2007/08/01(水) 17:07:33
>>418
>>417はこれだけしか書かれてないです
>>416も教えてもらえませんか
お願いします
423デフォルトの名無しさん:2007/08/01(水) 17:12:07
>>421
明らかな入門授業でおそろしいことやらせる先生だなww
424デフォルトの名無しさん:2007/08/01(水) 17:21:29
>>421
ポインタは32bitとは限らん
425デフォルトの名無しさん:2007/08/01(水) 17:22:51
intだって(ry
426デフォルトの名無しさん:2007/08/01(水) 17:30:21
下記のjavaで書かれているプログラムをc言語に書き換えてください。

public class JobShop_EDD{
static int Job=3;
static int Machine=2;
static int K=30;
static int [] duedate={0,7,9,13,14,20};
static int [] [] process={{},{0,3,3,2,},{0,2,3,2},{0,2,3,3},{0,3,2,3},{0,2,2,2}};
static int [] [] route={{},{0,1,2,3},{0,2,1,3},{0,3,1,2},{0,3,2,1},{0,2,1,3}};
static int [] weight={0,2,2,2,2,2};

public static void main(String[] args){
int [] [] Ma=new int[Machine+1][K+1];
int [] forbid=new int [Job+1];
int [] penal=new int [Job+1];
int Obj=0;

for(int i=1;i<=Job;i++){
int mindue=10000;
int assignJob=0;
for(int i2=1;i2<=Job;i2++){
if(mindue>(duedate[i2]+forbid[i2])){
mindue=duedate[i2]+forbid[i2];
assignJob=i2;
}
}
427デフォルトの名無しさん:2007/08/01(水) 17:31:22
forbid[assignJob]=10000;

int r=0;
boolean getTime=true;
int processSum=0;


for(int m=1;m<=Machine;m++){
processSum=processSum+process[assignJob][m];
}
int limitT=1;


for(int m=1;m<=Machine;m++){
r=route[assignJob][m];

for(int t=limitT;t<(K-processSum);t++){
for(int t2=t;t2<(t+process[assignJob][r]);t2++){
getTime=true;
if(Ma[r][t2]>0){
getTime=false;
break;
}
}
428デフォルトの名無しさん:2007/08/01(水) 17:32:26
if(getTime==true){
for(int t2=t;t<(t+process[assignJob][r]);t2++){
Ma[r][t2]=assignJob;
}
limitT=t+process[assignJob][r];
break;}}}
if(((limitT-1)-duedate[assignJob])>0){
penal[assignJob]=weight[assignJob]*((limitT-1)-duedate[assignJob]);
Obj=Obj+penal[assignJob];}}
for(int m=1;m<=Machine;m++){
System.out.println("Machine"+m+"deno waritukejyoukyou");
for(int t=1;t<=K;t++){
System.out.print(Ma[m][t]);}
System.out.println();}
System.out.println();
System.out.println("objective function="+Obj);
System.out.println();
for(int j=1;j<=Job;j++){
System.out.println("job"+j+"no ihanryo ha"+penal[j]);}}}


429デフォルトの名無しさん:2007/08/01(水) 18:28:19
>>419
int find(char buf[], char str[]){char *p=buf,*q,*r;while(*p){for(q=p,r=str;
*q&*r;++q,++r)if(*q-*r) break;if(*q&*r) ++p;else return(int)p;}return NULL;}
430デフォルトの名無しさん:2007/08/01(水) 18:37:39
>>426 ガンバレ
431デフォルトの名無しさん:2007/08/01(水) 18:41:29
>>426
せめてどんな処理をするプログラムなのか、Javaでコンパイルした実行プログラムとか欲しいところ。
俺?Javaの開発環境持っているし経験もあるけどまんどくせっ
432デフォルトの名無しさん:2007/08/01(水) 18:54:33
>>426
実行したらArrayIndexOutOfBoundsExceptionが出るんだが
433デフォルトの名無しさん:2007/08/01(水) 19:25:38
>>422
>>417しか書かれてないなら、>>418でOK
>>416はこのスレで既出
Ctrl+Fで検索
434デフォルトの名無しさん:2007/08/01(水) 19:49:04
>>419
>その位置(ポインタ)を返す
のポインタはCのポインタではなく、単純にインデックス(指し示すもの=ポインタ)
のことだと拡大解釈して解いた↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4793.c
見付からないときと、最初で見付かったときの返り血が同じになってしまったが。。。
435デフォルトの名無しさん:2007/08/01(水) 20:02:25
>>413 コンパクトにまとめたいなら、こんなのはどう?
#include <stdio.h>
int main(){
int a[]={18,21,35},i=0,*p=a,sum=0;
while(i < 3)sum+=*(p+i++);
printf("sum = %d\n",sum);
return 0;
}
436デフォルトの名無しさん:2007/08/01(水) 20:28:08
>>419
>発見できればその位置(ポインタ)をかえす
本当はどれの事?
ポインタ
アドレス
インデックス
437デフォルトの名無しさん:2007/08/01(水) 20:56:34
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): 2つの引数の値を入れ換える関数 vswapを定義し,その動作をテストするプログラムを作りなさい.

void vswap(int *x, int *y)
以下にポインタを用いない入れ換え関数 swap(x, y) とそのテストプログラムを示します.このままでは目的が果たせないことも確認しましょう.
_/* 課題2 不良版
*/void swap(int, int ); // swap プロトタイプ
main() // メイン部
{ int a,b;
printf("a b ? "); scanf("%d %d", &a, &b);
// a と b に整数入力
printf("スワップ前 : a = %d\tb = %d\n", a, b); // a と b の値を出力
swap( a, b); // aとbとを入れ換えるため関数swap呼び出し.aとbは実引数
printf("スワップ後: a = %d\tb = %d\n", a, b); // a と b の値を出力
}
void swap(int x, int y) // 関数
swap xとyは仮引数
{
int w; // 作業用変数 w
w = x; x = y; y = w; // w を用いて x と y の値を入れ換える.}

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2007年08月02日h12:00まで
[5] その他の制限: 特にありません

よろしくお願いします
438デフォルトの名無しさん:2007/08/01(水) 21:20:11
[1] 授業単元:プログラム言語演習
[2] 問題文(含コード&リンク):

1,奇数魔方陣を表示するプログラムを作成せよ
2,作成した魔方陣にhtmlタグを付け○○○.htmlというファイルを作成するプログラムを作成せよ
3,魔方陣を作る課程を表示するファイルを作成するプログラムを作成せよ、また2,3のhtmlを互いにリンクさせるようプラグラムを書き換えよ
4,西暦と月を入力して、その月のカレンダーを表示するプログラムを作成せよ
5,4で作成したカレンダーにhtmlタグをつけ、○○○.htmlというファイルを作成するプログラムを作成せよ

[3] 環境
 [3.1] OS: Unix
 [3.2] gcc
 [3.3] C言語
[4] 期限: 8月3日
[5] その他の制限:
1,4のプログラム自体は作れたんですが、htmlと組み合わせるところがさっぱりわかりません
よろしくお願いします
439デフォルトの名無しさん:2007/08/01(水) 21:21:34
>>437 最後の5行 swap→vswap x→*x y→*y
440デフォルトの名無しさん:2007/08/01(水) 21:22:51
>>437
void vswap(int *x, int *y)
{
int w;
w = *x;
*x = *y;
*y = w;
}
441デフォルトの名無しさん:2007/08/01(水) 21:33:40
>>438
自分で作ったプログラムのソースくらいうpしたら?
442デフォルトの名無しさん:2007/08/01(水) 21:39:54
htmlがわかんないみたいだからここ来ても意味無い希ガス。
443デフォルトの名無しさん:2007/08/01(水) 21:47:36
HTMLたって、テーブルタグで囲ってやりゃ良いんでしょ?楽勝じゃん
444デフォルトの名無しさん:2007/08/01(水) 22:03:39
445デフォルトの名無しさん:2007/08/01(水) 22:10:19
>>438
> 2,作成した魔方陣にhtmlタグを付け○○○.htmlというファイルを作成するプログラムを作成せよ
最初の1は1行目の中央からスタートってことで

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4795.c
446438:2007/08/01(水) 22:18:53
>>441
そうですね、失礼しました

魔方陣
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4796.txt
カレンダー
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4797.txt

改めてよろしくお願いします
447max_tc:2007/08/02(木) 00:09:15
[1] 授業単元: C言語演習
[2] 問題文:
permutate ( int n ) をつくる。
引数整数 n に対して, 1,2,3,・・n までの整数を全部並べ替え
るリストをつくる。

  例)n=4 のとき

 {1,2,3,4}
     {2,3,4,1}
     {1,3,4,2}・・・・

  こんなふうに 全部の 順列を 印字します.


[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2007年8月2日23:00まで] )
[5] その他の制限: (標準ライブラリは使ってはいけない)

教えて頂けないでしょうか。
本当に困っています。よろしくお願いしますm(_ _)m
448デフォルトの名無しさん:2007/08/02(木) 00:31:49
>>447
標準ライブラリを使わずに、どうやって印字するのですか?
449デフォルトの名無しさん:2007/08/02(木) 00:40:18
いい加減テンプレから標準ライブラリ〜の記述消しませぬか?
標準ライブラリが何だか分かってないからなのか
>>447みたいな書き方が頻発しまくりですがな。
450デフォルトの名無しさん:2007/08/02(木) 00:44:10
標準ライブラリってSTLのことなの?
451デフォルトの名無しさん:2007/08/02(木) 00:48:37
これを指してるのかと把握してた。
http://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は標準ライブラリの部分集合?
452デフォルトの名無しさん:2007/08/02(木) 01:11:43
[1] 授業単元: プログラム言語
[2] 問題文(含コード&リンク):

2つの整数値を受け取り.再帰関数を用いて,以下のような四角形を印字せよ.

入力: 4 6
******
******
******
******

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限: 2007年8月2日23:00
[5] その他の制限:関数は習いました。
よろしくお願い致します。
453デフォルトの名無しさん:2007/08/02(木) 01:25:01
>>444
はいよー
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4798.txt

次からはテンプレはテキストに同梱するんじゃなくて
スレにちゃんと書き込んだほうがいいと思う
454デフォルトの名無しさん:2007/08/02(木) 01:27:39
>>452
コンパイルしてないけど

#include<stdio.h>

void square(int a, int b) {
int i;
if(a > 0) {
for(i=0;i<b;i++) printf("*");
putchar('\n');
square(a-1, b);
}
}

int main(void) {
int a, b;
printf("入力:");
scanf("%d %d", &a, &b);
square(a, b);
return 0;
}
455デフォルトの名無しさん:2007/08/02(木) 01:35:18
>>452
#define TOKEN '*'
void putrow(int n)
{
if(n!=0)
{
putchar(TOKEN);
putrow(n-1);
}
else
putchar('\n');
}
/* 横r 縦c */
void putrect(int r, int c)
{
if(c!=0)
{
putrow(r);
putrect(r, c-1);
}
}
456デフォルトの名無しさん:2007/08/02(木) 01:35:46
>>452
#include<stdio.h>

void putast(int a,int b)
{
int tmp=b;
if(a-->0){
while(tmp-->0)
putchar('*');
putchar('\n');
putast(a,b);
}

}

int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
putast(a,b);
return 0;
}
457デフォルトの名無しさん:2007/08/02(木) 01:43:51
>>446 >>438
> 5,4で作成したカレンダーにhtmlタグをつけ、○○○.htmlというファイルを作成するプログラムを作成せよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4799.c
4で作成したソースとは仕様が違うけど・・・
458デフォルトの名無しさん:2007/08/02(木) 01:46:19
>>452
void print_rect(int x, int y){
int n=x;
if(y!=0){
while(n>-1) putchar( (n--) ? '*' : '\n');
print_rect(x, y-1);
}
}
459デフォルトの名無しさん:2007/08/02(木) 01:47:40
>>452大人気だなw
460デフォルトの名無しさん:2007/08/02(木) 02:15:24
>454
>455
>456
>458
どうもありがとうございました。本当に助かりました。
461デフォルトの名無しさん:2007/08/02(木) 02:17:05
簡単な問題だと回答者がうじゃうじゃ出てくるな
462デフォルトの名無しさん:2007/08/02(木) 02:35:45
>>438
> 3,魔方陣を作る課程を表示する
あとはこれだが、どのような表示がされるのか、具体的な例をプリーズ
463デフォルトの名無しさん:2007/08/02(木) 05:54:40
[1] 授業単元:プログラミング
[2] 問題文:入力されたテキストの行うち、最も長い行を表示するプログラムを作成する。
      (標準入力からテキストを読み込む→行ごとに文字数を数える→最も長いものを出力する)
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: (C言語)
[4] 期限: ([2007年08月07日00:00まで] )
[5] その他の制限:
下のプログラムを用いる。作成するプログラムはmainと関数copy()は下のソースをそのまま使う。
*******************の部分に必要なプログラムを書き込むこと。
関数getl()を作成する。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4800.txt

本で調べたらループが終わるのはEOFか\nかlimを過ぎたときの三つだということはわかりました。。。
よろしくお願いします!
464デフォルトの名無しさん:2007/08/02(木) 06:15:40
465デフォルトの名無しさん:2007/08/02(木) 08:24:35
>>463
冗談抜きに、ソースコードや英数字に全角を使うのはやめちくれ
466438:2007/08/02(木) 08:41:10
>>445,457
おお、ありがとうございます

>>462
○×○
○○○
○○○

○×○
○○○
○○×

○×○
×○○
○○×

こんなかんじです、説明不足ですいません
467デフォルトの名無しさん:2007/08/02(木) 09:43:58
468デフォルトの名無しさん:2007/08/02(木) 09:45:29
>>467
念のために
fp=fopen・・・の下に
if(fp==NULL) return 1;
を入れておいて。
469max_tc:2007/08/02(木) 10:26:59
1] 授業単元: C言語演習
[2] 問題文:
permutate ( int n ) をつくる。
引数整数 n に対して, 1,2,3,・・n までの整数を全部並べ替え
るリストをつくる。

  例)n=4 のとき

 {1,2,3,4}
     {2,3,4,1}
     {1,3,4,2}・・・・

  こんなふうに 全部の 順列を 印字します.


[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2007年8月2日23:00まで] )

申し訳ございませんでした、条件消すのが忘れた。
もう一度教えて頂けないでしょうか。
よろしくお願いします。
470デフォルトの名無しさん:2007/08/02(木) 10:27:35
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):2次元配列,たとえば int a[2][3];
などのメモリ内での配置を調べるプログラムを作りなさい.

この2次元配列では a[i] または *(a+i) は
1次元配列 a[i][ ] (i行目の配列)先頭へのポインタです.
だから2次元配列名 aなどは配列へのポインタのポインタと見ることができます.
すなわち a[i][j]は *(a[i]+j) あるいは *(*(a+i)+j) と等価となります.
これらのこともプログラムでテストしてみましょう.

[3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C
[4] 期限: 2007年08月03日12:00まで
[5] その他の制限:特にありません

よろしくお願いします

438で質問したものです
439の方 440の方 ありがとうございました
最後の5行だけ変えてコンパイルしてみたところ

In function `main':
: undefined reference to `swap'
collect2: ld はステータス 1 で終了しました

というエラーがでました。 よれけばこちらもお願いします。
471デフォルトの名無しさん:2007/08/02(木) 10:47:59
次の2問おしえてくださいおねがいします

1からNまでの数の総和(N>0)を計算する関数を完成するために
@〜Bに適切にいれなさい。
int sum(int n){
if( @ ){
return ( A );
}else{
return(n+B );
}
}

文字列の中にある文字aの個数を返す関数を完成するために
@〜Bに適切にいれなさい。
int acount(char *s){
if( *s==@ ){
return (0);
}else if(*s!=A){
return (acount(B));
}else{
return (acount(B)+1);
}
}
472デフォルトの名無しさん:2007/08/02(木) 11:03:24
>>471
Nが条件(N>0)に合わなければ0を返す仕様で良いん?(´・ω・`)
int sum(int n){
if(n<=0)
return (0);
else
return(n+sum(n-1));
}
473デフォルトの名無しさん:2007/08/02(木) 11:07:06
>>472
なるほど!ありがとうございます!!
そのためのif文だったのか・・・
474デフォルトの名無しさん:2007/08/02(木) 11:28:21
>>473
どういたしましてです、ついでに下の。
int acount(char *s)
{
if(*s=='\0')
{
return (0);
}
else if(*s!='a')
{
return (acount(s+1));
}
else
{
return (acount(s+1)+1);
}
}
475デフォルトの名無しさん:2007/08/02(木) 12:18:05
>>474
サンクスです!!しかし頭の回転が悪いなオレorz
476max_tc:2007/08/02(木) 14:00:58
誰か私の問題を答えてくれませんか??
477デフォルトの名無しさん:2007/08/02(木) 14:24:55
>>248さんのをコンパイルして実行すると、coreが出来てしまいます。
私は246じゃありませんが、問題が同じなので教えてもらえると嬉しいです!
478デフォルトの名無しさん:2007/08/02(木) 14:37:21
別に他人がうれしかろーとうれしくなかろーと関係ないっちゃ
関係ないんだがね
479デフォルトの名無しさん:2007/08/02(木) 15:19:43
480デフォルトの名無しさん:2007/08/02(木) 15:33:14
>>476
順列生成とかでググればいっぱい出てくるじゃん
過去ログ検索しても見つかるでしょ。少しは自分で探してくれぃ
481max_tc:2007/08/02(木) 15:38:14
>>479さん
>>480さん
大変ありがとう、ございます!!!!
助かりました!今後もどうぞ宜しくお願いします。
482デフォルトの名無しさん:2007/08/02(木) 16:00:56
>>464
お早い回答ありがとうございます。助かります。

>>465
申し訳ないです><
483デフォルトの名無しさん:2007/08/02(木) 16:14:34
[1] 授業単元: c言語
[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] その他の制限:特にありません

よろしくお願いします
484デフォルトの名無しさん:2007/08/02(木) 16:51:46
>>483 「本文のように」と言われても、本文がないので、
↓こんなんでいいのか?配列ではなくポインタを使ってるが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4808.c
485デフォルトの名無しさん:2007/08/02(木) 17:10:28
>>470 メモリ内の配置を調べるプログラムはこんな感じ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4809.c
486デフォルトの名無しさん:2007/08/02(木) 19:35:45
>>453
返事が遅れてすいません。作成ありがとうございます。
素数をすべて表示するのではなくて、素数の個数だけを表示するプログラムに変形してくれますか?
クレームをつけてるようで申し訳ないですが、よろしくお願いします。
487デフォルトの名無しさん:2007/08/02(木) 19:42:59
>>486の続き
もう1つ、制限で言うのを忘れていたのですが、inline関数というのは習っていません。
inline関数を使わないように書き換えてもらえませんか?
本当に強引なお願いで申し訳ないです。
488デフォルトの名無しさん:2007/08/02(木) 20:26:50
>>463
>>464のgetlを変更って見てないかな・・・
int getl(char s[] , int lim) {
int i,ch;
for(i=0,s[0]=NULL; i<lim-1; i++) {
ch=getchar();
if(ch=='\n' || ch==EOF) break;
else s[i]=ch;
}
s[i]=NULL;
return i;
}
489デフォルトの名無しさん:2007/08/02(木) 20:26:53
[1]プログラミング
[2]中心と半径を引数にとる円を描画する関数を作成せよ。関数プロトタイプは

/* _circle_cr() - 中心と半径で円を書く
* *s: グラフィックス画面
* cx, cy: 円の中心の座標
* r: 円の半径
* c: 円の色
*/
void _circle_cr(SDL_Surface *s, int cx, int cy, int r, SDL_Color c);
とする。関数 _line() と同様に実際の点の描画には関数 _putpixel() を使用すること。]プログラミング
[3]C言語
お願いします。
490デフォルトの名無しさん:2007/08/02(木) 20:37:56
次の論理式を && (AND) を使わない形へ書き換えよ。

(month != Jun) && (day < 17)

C言語です。お願いします。
491デフォルトの名無しさん:2007/08/02(木) 20:39:52
[1]プログラミング
[2]次のプログラムは文法に誤りがない(正常にコンパイルできる)が,このままでは大変読みにくい.読みやすく書き直せ.

/* ppt.c: ppt */ #include <stdio.h>
static void putppt(int c){int i;putchar
('|');for(i=7;i>=0;i--){if(i==2)putchar
('.');if((c&(1<<i))!=0)putchar('o')
;else putchar(' ');}putchar('|');putchar
('\n');}int main(int argc,char **argv)
{int c;char *p;puts("___________");
if(argc>1)while((p=*++argv))for(;*p
;++p)putppt((int)*p);else while((c=
getchar())!=EOF)putppt(c);puts(
"___________");return 0;}

[3]C言語
頼みます。
492デフォルトの名無しさん:2007/08/02(木) 20:44:34
>>491
バカにしてるのか?
493デフォルトの名無しさん:2007/08/02(木) 20:44:41
month == Jun || day >= 17
494デフォルトの名無しさん:2007/08/02(木) 20:45:13
>>490
!((month = Jun) || (day >=17))

合ってるか分からんが
495デフォルトの名無しさん:2007/08/02(木) 20:46:04
>>490
!(month != Jun) || !(day < 17)
あるいは
(month == Jun) || (day >= 17)
496デフォルトの名無しさん:2007/08/02(木) 20:48:23
>>491
/* ppt.c: ppt */
#include <stdio.h>

static void putppt(int c)
{
int i;
putchar('|');
for(i=7; i>=0; i--)
{
if(i==2) putchar('.');
if((c&(1<<i)) != 0) putchar('o');
else putchar(' ');
}
putchar('|');
putchar('\n');
}

int main(int argc,char **argv)
{
int c;
char *p;
puts("___________");
if(argc > 1)
while((p =* ++argv))
for(; *p; ++p) putppt((int)*p);
else while((c = getchar()) != EOF) putppt(c);
puts("___________");
return 0;
}
497494:2007/08/02(木) 20:54:15
month == Jun に訂正
498デフォルトの名無しさん:2007/08/02(木) 20:58:31
>>489
グラフィックスライブラリは何?
わかってもやらないけど。
499デフォルトの名無しさん:2007/08/02(木) 21:04:56
>>493
>>495
ドモルガンの法則を知らない回答者もいるのか・・・
500デフォルトの名無しさん:2007/08/02(木) 21:07:58
夏休みだからなぁ
501デフォルトの名無しさん:2007/08/02(木) 21:08:33
>>499
懐かしいなぁww
502デフォルトの名無しさん:2007/08/02(木) 21:09:20
>>498
どう見てもSDL
503デフォルトの名無しさん:2007/08/02(木) 21:15:49
どう・ホモるかの法則とかいいから
504デフォルトの名無しさん:2007/08/02(木) 21:22:58
>>503
【審議拒否】
505デフォルトの名無しさん:2007/08/02(木) 21:25:08
>>503
【審議放棄】
    .. ∧,,∧ ∧,,∧
  ∧∧ ( ゚д゚ )( ゚д゚ ) ∧∧
 ( ゚д゚ ). .∧∧) (∧∧( ゚д゚ ) 
 | U  ( ゚д゚ ).( ゚д゚ )  と ノ
  u-u (l    ) (    ノu-u
       `u-u' `u-u'
506デフォルトの名無しさん:2007/08/02(木) 21:29:34
[1] 授業単元:プログラミング演習
[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法より)。
よろしくお願いします。
507デフォルトの名無しさん:2007/08/02(木) 21:30:44
>>489 (SDLなんか入れてねっから、適当)
void _circle_cr(SDL_Surface *s, int cx, int cy, int r, SDL_Color c)
{
int x, y, a, b, c;
x=r; y=0;
while(x > 0) {
_putpixel(s, cx+x, cy+y, c); _putpixel(s, cx-x, cy+y, c);
_putpixel(s, cx-x, cy-y, c); _putpixel(s, cx+x, cy-y, c);
a = b = c = r*r;
a -= (x-1) * (x-1) + y * y;
b -= (x-1) * (x-1) + (y+1) * (y+1);
c -= x * x + (y+1) * (y+1);
if( a < 0 ) a = -a; if( b < 0 ) b = -b; if( c < 0 ) c = -c;
if( (a <= b) && (a <= c) ) { --x; }
else if( (b <= a) && (b <= c) ) { --x; ++y; }
else { ++y; }
}
}
508デフォルトの名無しさん:2007/08/02(木) 22:26:56
>>506
テストはもっと小さいデータでしたほうが(ry。
時間かかりそうだからオレはパス
 ↓この辺でも見て(´ω`)
ttp://www.google.com/codesearch?hl=ja&lr=&q=Lin+Kernighan
509デフォルトの名無しさん:2007/08/02(木) 22:39:45
[1] 授業単元: 講義に関係ない自分の研究です。
[2] 問題文:
@複数のCSVデータから同じ位置(例えばA1)の値のみをピックアップして、excelでその位置の値だけをまとめて処理できるデータとして出力したい。
ARAWという濃淡画像データ(多分0-255までを表す文字が一列に並んでいる)を読み込んでexcelで数値に変換して表示したい。
(例:200個文字があるRAWを数値に変換して20×10のexcel処理できるデータにする)
RAWはこちらからサイズを指定する画像ファイルです。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005があります
 [3.3] 言語:どちらでもかまいません
[4] 期限: 一ヶ月くらい
[5] その他の制限: ありません。

専門外ですが自分でやらなければならなくなり、参考程度でも知識が得られたらと思い書き込ませていただきました。
わかりにくい文とは思いますがよろしくお願いします。
510デフォルトの名無しさん:2007/08/02(木) 23:20:59
excelで処理とか、excelで変換して表示とか、結局C/C++でやればいい事って何?(特に1番)
511デフォルトの名無しさん:2007/08/02(木) 23:23:56
>>509
excelで処理したいっていうのが、出力ファイルがCSVでいいなら、スクリプト言語でチャチャと書いて済む感じだけど。
512509:2007/08/02(木) 23:39:07
>>510
>>511
レスありがとうございます。
出力はcsvでいいです。

@は複数のcsvから同じ位置のデータを読んで1つのcsvに出力するという感じなのですが…

Aは「→→→→←←←←/」のようなRAWがあったとして(→←/は何らかの数値)
111
122
223
のように数値にしてcsvとして出力できたらと思っています。
513デフォルトの名無しさん:2007/08/03(金) 00:29:21
>>487

誰か早急にお願いします。
514506:2007/08/03(金) 00:32:17
>>508
レスありがとうございます。
どのソース見てもかなり高度なので実装できるかかなり不安…

まだ解答してくださる方を探しています。
もしよろしければお願いします。

これ完全解じゃなくてある程度のところでとめないと無限ループフラグが立つのか…
515デフォルトの名無しさん:2007/08/03(金) 00:38:45
516デフォルトの名無しさん:2007/08/03(金) 00:46:57
>>513
よく知らないが、自分でいろいろやってみれ。
(print_prime の宣言と、定義と、呼び出しと3箇所消して
inline 全部消せばいいんじゃないの。
prinit_bits もいらなきゃそれも消せば。)
517デフォルトの名無しさん:2007/08/03(金) 00:48:18
UINT begin=0, UINT end=0
=0はいらないんでない?
それと、mainの中、
for(int i=0; i<=10; i++)
intがあると、エラーにならないか?
518デフォルトの名無しさん:2007/08/03(金) 00:48:43
悪い、リロードしてなかったから被った。>>516はヌシで
519デフォルトの名無しさん:2007/08/03(金) 01:45:08
>>515

ありがとうございます。
520デフォルトの名無しさん:2007/08/03(金) 15:57:32
>509 雑談で、プログラム書かんですまんが。
1)
csvファイルが数千のオーダーあると、コマンドラインからの入力も無理か・・・
ってことは、cvsファイル名を列挙したファイルでcvsファイル指定すんのかなぁ。
csvファイル数の規模によって、とりかかりかたが違ってくると思う。
エクセル自身にも3次元処理(別のシートの情報を参照する)機能があったよーな・・。
カーニハンの本のどれかにcsvファイルを扱うプログラムが載ってたよーに思う。
2)
バイト列のcsv化は、そんなに難しくないと思う。バイナリダンプの出力をちょみっと変えるだけだから。
521デフォルトの名無しさん:2007/08/03(金) 19:34:29
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):
 引数の文字列sの長さを求め,値として返す関数mystrlen( s )を作り,その動作を確認しなさい.

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: [2007年08月04日12:00まで]
[5] その他の制限: 特にありません

よろしくお願いします
522デフォルトの名無しさん:2007/08/03(金) 19:42:44
>>521
#include <stdio.h>
#define MAX 1024

int mystrlen(char *str) {
int i;
for(i=0; *str; str++,i++);
return i;
}

int main(void) {
char buf[MAX];
printf("Input string > ");
scanf("%s",buf);
printf("%d",mystrlen(buf));
return 0;
}
523デフォルトの名無しさん:2007/08/03(金) 22:08:28
>>509
後ろのほうのデータを取り出す時に遅くなるけどよければどうぞ
/*----- csv ファイルからデータを取り出す関数 -----*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define VALUE_LEN_MAX 256
#define VALUE_SCAN_FMT "%256[^,\n]"

int get_value(FILE *fp, int column, int row, void *buf, int buf_size){
char temp[VALUE_LEN_MAX+1]="";
size_t cur_pos;
int i, j, ret=1;

if(fp==NULL || column<=0 || row<=0 || buf==NULL) return 0;

cur_pos=ftell(fp);
fseek(fp, 0L, SEEK_SET);
for(i=1;i<column;i++) fscanf(fp, "%*[^\n]\n");
for(j=0;j<row && ret==1;j++) ret=fscanf(fp, VALUE_SCAN_FMT, temp);
fseek(fp, cur_pos, SEEK_SET);

if(ret==1) strncpy(buf, temp, buf_size);
return (ret==1);
}

/*----- "A3" の値が欲しい時の例 -----*/
FILE *fp;
char buf[100];
fp=fopen("test.csv", "r");
get_value(fp, 3, 1, buf, sizeof(buf));
524509:2007/08/03(金) 22:22:07
>>520
本などの情報は助かります。csvファイルは測定の時間などによって変わるので多様に対応できるほうが好ましいです。自分の知識で参考にできるかわかりませんがAもレスを頂きありがとうございます。

>>523
具体的に例をもらえて正直とても助かります。取っ掛かりが無いのでどうしていいのかわからない状態なので。参考にさせていただきます。
525デフォルトの名無しさん:2007/08/03(金) 22:52:49
書き込み失礼します。プログラムを作る宿題ではないのですが、どうしてこういうプログラムになるかという理由を答える問題です。
これはFFTのビット逆順を行うプログラムなのですが、以下のwhile文を通ったり通らなかったりして「j」の値がfor文の一回のループ毎にビット逆順にしたものになる理由を的確に述べるよう
宿題が出されました;;分かる方がいましたら教えていただけませんでしょうか。どうかよろしくお願いします。
特にwhile文の中で、
     j = j - k;
k /= 2;
の計算をする理由がわかりません;;

{
int n = 8;
int j, k, i;

j = 0;
for (i = 0; i < n - 1; i++)
{
if (i <= j)
{
int tmp =x[i];
x[i] = x[j];
x[j] = tmp;
}
k = n / 2;
while (k <= j)
{
j = j - k;
k /= 2;
}
j = j + k;
}
}
526デフォルトの名無しさん:2007/08/03(金) 23:08:48
>>509
一番だけ
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],"
527デフォルトの名無しさん:2007/08/03(金) 23:17:30
>>525
計算途中の数値を書式指定 %08X で表示させてみては?
528デフォルトの名無しさん:2007/08/03(金) 23:31:24
>>527
アドバイスありがとうございます。一応計算途中のビットなどは紙に書き出してみて、確かにビット逆順にはなるのですが、
多分、教授に「じゃあなんでそうなるの?」って聞かれると思うんです;;
どうやってうまく説明したらいいのかに悩んでます;;
529デフォルトの名無しさん:2007/08/04(土) 00:30:16
>>509 2番
使用法 a.exe ファイル名 幅
例 a.exe testdata.raw 20
/*----------*/
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]){
FILE *fp;
char *filename;
unsigned char *buf;
int i, width, readsize;

if(argc!=3) return 1;
filename=argv[1];
width=atoi(argv[2]);

buf=malloc(width);
if(buf==NULL) return 3;
fp=fopen(filename, "rb");
if(fp==NULL) return 2;
while(1){
readsize=fread(buf, 1, width, fp);
if(readsize<=0) break;
for(i=0;i<readsize;i++) printf("%d,", buf[i]);
printf("\n");
}
free(buf);
fclose(fp);

return 0;
}
530デフォルトの名無しさん:2007/08/04(土) 00:39:06
argc, argvの捌き方で、
貴方が私と同じSM趣味の持ち主だということがよくわかるよ。
531デフォルトの名無しさん:2007/08/04(土) 01:21:19
>>525
jの上位桁、下位桁が逆になるように値をセットしているようですね。
この場合、下位3ビットを上下逆にするとあたかも1ずつ加算しているようになります。
0100---(1)
0010---(2)
0110---(3)
0001---(4)
こんな感じですね。反転した世界の加算は、加算で発生する桁上がりも逆ですよ。
単純にkの値をjに足しても良いのは、この例では(2)->(3)のケース、k>jの場合です。
そうでない時、桁上がり?が発生する加算を、whileの中でやっているみたいです。
532509:2007/08/04(土) 09:52:44
>>526
ありがとうございます。
ダウンロードしてみましたがa.cをどのように使用したら実行ファイルができるのかわかりません。VC++でも可能でしょうか。
簡単に教えていただけないでしょうか。

>>529
ありがとうございます。
申し訳ありませんが上同様使い方がわからず確認できません。

スレの趣旨とはずれてしまい申し訳ないですが、VS2005での実行までの手順を教えていただけないでしょうか。あまりにも無知ですいませんがお願いします。
533デフォルトの名無しさん:2007/08/04(土) 10:38:50
>>532
コマンドラインで実行したことはないのかな。

1.コマンドプロンプトを開く。
2.VS2005をインストールしたディレクトリ下にある Common7\Tools\vsvars32.batを実行。
  ↓多分ここだと思う
  C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat
  パスの中にスペースがある場合は、"で挟むといい。
3.a.cがあるディレクトリに移動
4.cl a.c
534デフォルトの名無しさん:2007/08/04(土) 10:48:01
[1]プログラミング
[2]入力される整数の値の棒グラフを出力せよ。整数の範囲は0〜20とし、
範囲外の入力の場合、終了する。入力は、ファイル input.txt に書いておき、入力リダイレクトで与える。
結果は、出力リダイレクトでファイルに保存する。
入力例input.txt 出力例
0
20          *******************
21
-1



[3]環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:c
[4]8/9
[5]反復構文を使う
535デフォルトの名無しさん:2007/08/04(土) 11:03:52
>>534
#include <stdio.h>
int main(void){
  int n,i;
  char buf[8];
  fgets(buf,sizeof(buf),stdin);
  sscanf(buf,"%d",&n);
  if(n<0 || 20<n) return -1;
  for(i=0;i<n;i++)printf("*");
  printf("\n");
  return 0;
}
536デフォルトの名無しさん:2007/08/04(土) 11:14:25
>>534
一番上の数字しか読み込まないのですが・・・
537デフォルトの名無しさん:2007/08/04(土) 11:16:38
>534
出力例19個だぞw
538デフォルトの名無しさん:2007/08/04(土) 11:21:35
[1]c言語
[2]以下のように、2桁以下の正整数が1行に3つずつ書かれたファイルを input.txt とする。ただし、ファイルの末尾には、終了を表す番兵0がある。
1 45 90
2 7 41
13 67 60
0

入力リダイレクトで input.txt を読み込み、出力リダイレクトで、以下のような形式で output.txt に保存する。
1行目に項目名を付け、番号を正しい形に直し、得点の合計を付けて、桁を揃える。
入力ファイルの末尾の0は出力しない。
例inp.txt 出力
1 45 90 t01 45 90 135
2 50 41 t02 50 41 91
13 67 60 t13 67 60 127
0


[3]
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:c
[4]8/5
[5]do whileを使った反復
539デフォルトの名無しさん:2007/08/04(土) 11:28:46
>>536
#include <stdio.h>
int main(void)
{
int n,i;
char buf[8];
while (fgets(buf,sizeof(buf),stdin) != NULL) {
sscanf(buf,"%d",&n);
if(n<0 || 20<n) break;
for(i=0;i<n;i++)printf("*");
printf("\n");
}
return 0;
}
540デフォルトの名無しさん:2007/08/04(土) 11:38:15
>>538
#include <stdio.h>
int main(void)
{
char buf[100];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int n1, n2, n3;
if (sscanf(buf, "%d%d%d", & n1, & n2, & n3) != 3) break;
printf("t%02d %2d %2d\n", n1, n2, n3);
}
return 0;
}
541デフォルトの名無しさん:2007/08/04(土) 11:40:42
>>540
得点の合計が抜けてるよ
542デフォルトの名無しさん:2007/08/04(土) 11:50:05
ターミネータ使わないと出題者に文句言われそうだな。
543デフォルトの名無しさん:2007/08/04(土) 11:53:23
>540はターミネータに遭遇するとsscanf()で弾かれるけど、それ以前にdo-whileじゃないな。
544デフォルトの名無しさん:2007/08/04(土) 13:59:52
[1] 授業単元:C言語
[2] 問題文:fgets()関数と同じ働きをする関数を作成せよ。
      ただし第三引数については考えなくて良いものとする。
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: (C言語)
[4] 期限:2007年08月05日
[5] その他の制限:ポインタは使ってはいけない。

よろしくお願いします。
545デフォルトの名無しさん:2007/08/04(土) 14:12:55
>>544
第三引数を考えなくていいという意味は、標準入力ということ?
546509:2007/08/04(土) 14:37:48
>>533
ありがとうございます。
おかげさまでコマンドプロンプトで値抽出の表示まではできました。
この出力された値をcsvに保存したいのですがどのようにすればいいでしょうか。
547デフォルトの名無しさん:2007/08/04(土) 17:01:10
>>544
こんなんでいい?
ポインタ使うなっていうが、ポインタ使わないと文字配列渡せないんだが・・・。
ポインタ演算を使うなってことでいいのか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4814.c
548デフォルトの名無しさん:2007/08/04(土) 17:21:00
fgetsは'\n'も文字列に取り込むだろ。
549デフォルトの名無しさん:2007/08/04(土) 17:32:58
>>548
そうでした。
こんな感じでどう?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4815.c
550デフォルトの名無しさん:2007/08/04(土) 18:16:24
fgetsってバッファの残った中身を消化したっけ?
551デフォルトの名無しさん:2007/08/04(土) 18:27:50
>>550
そっかそっか。
じゃ、こんな感じで。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4816.c
552デフォルトの名無しさん:2007/08/04(土) 20:36:41
>>538
#include <stdio.h>
int main()
{
int n1,n2,n3;
if (scanf("%d",&n1)<1){
fprintf(stderr,"不正データ\n");return 1;}
if (n1==0) return 0;
do{
if (scanf("%d%d",&n2,&n3)<2){
fprintf(stderr,"不正データ\n");return 1;}
printf("t%02d %2d %2d %3d\n",n1,n2,n3,n2+n3);
if(scanf("%d",&n1)<1){
fprintf(stderr,"不正データ\n");return 1;}
}while(n1!=0);
return 0;
}
553デフォルトの名無しさん:2007/08/04(土) 22:50:44
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): getsと同様に,文字列を1行分読み込んで,指定した配列に格納する次の関数 getlineを作りなさい.(1文字入力関数 getchar を用います.)
int getline( char *str, int n)
引数 str は文字列を格納する配列先頭を指すポインタ,n は配列の大きさを示します.
改行が入力されたらそれを終端文字に変換して終わります.または長さが n以上になるとき入力を終了させます.このときの入力文字列長は n-1 です.
関数値は入力文字列長です.0 のときは入力無し(EOF)を意味します.

この関数が目的どおり動作することを確認しなさい.
問題の多い gets でなく今後は getline を用いるようにしましょう.

getline の処理手順
1. p ← str2. (n-1)回までは以下を繰り返す 2.1 *p ← 次の1字入力 2.2 *p が改行文字なら 中断 2.3 p を進める3. *p ← 終端文字 4. 文字列長 p-str を返す.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: [2007年08月05日16:00まで])
[5] その他の制限:特にありません

よろしくお願いします
554デフォルトの名無しさん :2007/08/04(土) 23:02:00
>>538www
#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;
}
555デフォルトの名無しさん:2007/08/04(土) 23:06:58
>>554
それ違うw
問題見ろw
556デフォルトの名無しさん:2007/08/04(土) 23:29:17
>>553
なんか似た問題だから変数名とかちょっと直しただけなんだけど
読み込んだあとバッファのゴミがあればクリアするようにしているが、
不要なら消せばいい

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4818.c
557デフォルトの名無しさん:2007/08/04(土) 23:40:20
夏休みなので投下(1)

[1] 授業単元: プログラミング演習(仮)
[2] 問題文(含コード&リンク):

直線上に色つきの区間 c[0], c[1], ... をこの順番で描く。
(区間が重なったときは、後から書いたもので塗りつぶされる)

すべて書き終えたとき、直線上には何色見えるか。

なお、区間の情報は次のように与えられるとする:
struct interval {
double left, right; // 区間の左右の座標(left < right としてよい)
int color; // 色を表す整数
};

[3] 環境
 [3.1,2] OS、コンパイラ問わず。
 [3.3] 言語:どちらでも可。
[4] 期限: 8月8日
[5] その他の制限:特に無し。
558デフォルトの名無しさん:2007/08/04(土) 23:43:10
夏休みなので投下(2)

[1] 授業単元: プログラミング演習(仮)
[2] 問題文(含コード&リンク):

平面上に色つきの円 c[0], c[1], ... をこの順番で描く。
(円が重なったときは、後から書いたもので塗りつぶされる)

すべて描き終えたとき、平面上には何色見えるか。

なお、円の情報は次のように与えられるとする:
struct interval {
double x, y; // 円の中心座標
double r; // 円の半径
int color; // 色を表す整数
};

[3] 環境
 [3.1,2] OS、コンパイラ問わず。
 [3.3] 言語:どちらでも可。
[4] 期限: 8月8日
[5] その他の制限:
559デフォルトの名無しさん:2007/08/04(土) 23:46:35
>>557-558
意味プーなんですが
560デフォルトの名無しさん:2007/08/04(土) 23:48:59
>>559
問題の意味は明らかだろ。
解き方は知らん。
561デフォルトの名無しさん:2007/08/04(土) 23:50:25
>>557
> 直線上に色つきの区間 c[0], c[1], ... をこの順番で描く。
GUIでやるの?
この順番でってどの順番?
562デフォルトの名無しさん:2007/08/04(土) 23:52:18
>>557
あとOS問わないっていうが、
おまえさんがコンパイルできる環境書かないと困るだろ?
563デフォルトの名無しさん:2007/08/04(土) 23:56:02
これは面白い問題
564638:2007/08/04(土) 23:56:11
>>554 ヒドスwww
つ ×3行だけ ○1行に3つずつ
つ 入力リダイレクトで input.txt を読み込み、出力リダイレクトで
つ do whileを使った反復

565デフォルトの名無しさん:2007/08/04(土) 23:58:33
名前欄消すの忘れた…
566デフォルトの名無しさん:2007/08/05(日) 00:23:14
(1) は左端でソートかな。
(2) も同じようにできそうだがデータ構造が難しい。
567デフォルトの名無しさん:2007/08/05(日) 00:35:19

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が
568デフォルトの名無しさん:2007/08/05(日) 00:40:54
>>566
えっ??
実際に表示してピクセルごとに調査するとかでないのか。
円弧と直線に囲まれた多角形のデータ構造を作って
さらに各辺で交差判定して分割するとかなったら難しいなってもんじゃ
569デフォルトの名無しさん:2007/08/05(日) 00:44:28
>>568
そんなわけないだろwww
570デフォルトの名無しさん:2007/08/05(日) 00:59:21
>>569
いや、問題を読むとそんな訳有りそうな気がするw
ヘタに解法考えるよりも早いかもw
571デフォルトの名無しさん:2007/08/05(日) 01:13:37
普通はそんな風には読まないだろ。
それに精度はどうするんだ。
572デフォルトの名無しさん:2007/08/05(日) 01:22:50
何色使って描いて良いの?
32bitだと、使い切れないんじゃないか。
573544:2007/08/05(日) 01:29:53
>>545
標準入力ということです。

>>551
ありがとうございます!
欲を言うと*をつかわない形でお願いしたいのですが。
574デフォルトの名無しさん:2007/08/05(日) 01:34:43
>>573
mainの引数は(void)に変えてOK
575デフォルトの名無しさん:2007/08/05(日) 01:37:29
>>573
>>551の回答は、*を使ってないよ。
576デフォルトの名無しさん:2007/08/05(日) 01:39:02
*argv[] ←ここwww
577デフォルトの名無しさん:2007/08/05(日) 01:40:48
掛け算禁止かw
578デフォルトの名無しさん:2007/08/05(日) 02:25:39
>>557-558
意味プーに同意プー
579デフォルトの名無しさん:2007/08/05(日) 07:02:40
>>557
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4820.txt

こんな感じでどうだろうか。
解き方はこれで良いと思うんだが。
もっといいとき方とかありそうだが思いつかなかった。
ちゃんと動作チェックしてないんで、バグあるかも知らん・・・。あったらsry。

>>558は曲者だな。やる気力がでねえ。
580デフォルトの名無しさん:2007/08/05(日) 08:15:43
[1] 授業単元:論理回路論
[2] 問題文(含コード&リンク):
sin0+sin0.05+sin0.1+sin0.15+…+sin0.95+sin1
を計算するプログラムを以下のように作ったが、
結果は8.771303であり、誤差が大きい。
(真の値は9.6127738…)
誤差が大きい原因と、プログラムをどうかえればよいか述べよ。

#include<stdio.h>
#include<math.h>
int main(void)
{
double x, sum = 0;
for( x = 0; x =< 1.0; x += 0.05) sum += sin(x);
printf("sum = %.6f\n", sum);
return 0;
}

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 8/5 12時位
[5] その他の制限: C言語は基本的な知識のみしか習っていない
581579:2007/08/05(日) 08:32:59
>>579
やっぱバグあったわ。
修正済みの再UPしといた。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4821.txt
582デフォルトの名無しさん:2007/08/05(日) 09:01:55
>>580
浮動小数点数の演算には丸め誤差があって、
x=0 に 0.05 足すのを20回繰り返して、正確に x=1 とはなってない。
そのプログラムだとx=0.95までしかループしてない。

int x, n;
double sum=0;

n = 1 / 0.05;

for(x=0 ; x<=n ; x++){
sum += sin(0.05*x);
}
583580:2007/08/05(日) 11:41:00
>>582
ありがとうございます。
繰り返しの判定基準の変数に浮動小数点数を使ってたのがまずかったんですね。
584デフォルトの名無しさん:2007/08/05(日) 14:54:30
2を何度も掛けても整数にならない数は半端な数なので誤差がでる
多い方向と少ない方向にまんべんなく誤差ってればある程度相殺される
けどこの例では同じ数を足し続けてるからどんどん誤差が大きくなる
判定条件だからではないよ
585デフォルトの名無しさん:2007/08/05(日) 15:01:33
>>531
返信遅くなりましてすみません。ありがとうございます。
教えてもらったことをもっと理解してよく考えてみますm(_ _)m
586デフォルトの名無しさん:2007/08/05(日) 15:44:27
面白そうなんで >557 やってみた。
微妙に自信ないんでデバッグ用コードも残しとく。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4822.cpp

基本方針は、「上書きして描画」で考えるのではなくて、「逆順で、まだ描画されていない範囲がある場合に描画」と考えて、描画区間と色を別に管理している。
データ構造で工夫できそうな気もするけど面倒なので STL にお任せ。ロジックが直感的じゃないかもしれない。
587デフォルトの名無しさん:2007/08/05(日) 18:29:03
>>557
初心者だけどやってみた
#include <stdio.h>
typedef struct interval {
double left, right;
int color;
} interval;
int check(double left, double right, interval *p, int i, int j)
{
if(i==j) return 1;
if(left >= p[j].left && right <= p[j].right) return 0;
if(left >= p[j].right || right <= p[j].left) return check(left, right, p, i, j-1);
if(left < p[j].left && right > p[j].right) return check(left, p[j].left, p, i, j-1) | check(p[j].right, right, p, i, j-1);
if(left < p[j].left) return check(left, p[j].left, p, i, j-1);
return check(p[j].right, right, p, i, j-1);
}
int main(void)
{
interval c[] = {{10.0,20.0,2},{5.0,50.0,3 },{2.0,10.0,6},{1.0,2.0,1},{3.0,5.0,4},};
int i, j, col[256], cnt = 0, n = sizeof c / sizeof(interval);
for(i=n-1; i>=0; i--) {
if(check(c[i].left, c[i].right, c, i, n-1)) {
for(j=0; j<cnt; j++) if(col[j]==c[i].color) break;
if(j==cnt) col[cnt++] = c[i].color;
}
}
printf("%d色\n", cnt);
return 0;
}
588デフォルトの名無しさん:2007/08/05(日) 21:31:20
>>558
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4823.cpp

アルゴリズムは
(1)各円の上端,下端,及び任意の2円の交点のy座標の集合{y0, y1, ..., yn} (yi < yj if i < j)を求める.
(2)各区間[y0, y1], [y1, y2], ...についてy軸に垂直な直線y = tをとり,その直線上に表れる色の集合を求める.
(区間内であれば集合の要素は変わらないはずなので,tはそれぞれ(y0,y1),(y1,y2),...の中点としている)
(3)各区間の色の集合の和が,平面上に表れる色の集合となる.
でいいはずだけど,円の交点求める公式とかもう記憶の彼方だし(2)の処理も適当なので,正しく動かないかもしれない.

入力:
円の個数 n
[x, y, r, col] * n


3
0.0 0.0 1.0 1
0.0 0.0 3.0 2
0.0 0.0 2.0 3
(出力:2)
589デフォルトの名無しさん:2007/08/05(日) 21:50:20
>588
なるほど。これだと各 y=t での処理で >557 を流用できるし、出題者の意図っぽい。
難しい方向にばっか考えすぎてたわ。
590デフォルトの名無しさん:2007/08/05(日) 21:57:53
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):
引数の文字列 s を逆順の文字列に変更する関数 reverse( s ) を作り,その動作を確認しなさい.
前章の課題4 では,元の文字列とは別に,逆順文字列を作成しました.
ここでは元の文字列 s 自身を折り畳んで前と後を次のように交換してみましょう.
一番前と一番後ろの文字を交換する.
二番前と二番後ろの文字を交換する.
:
文字交換には課題2のvswapを文字型に対応させた vcswap(char *a, char *b)関数, 文字列入力には課題6のgetline関数を利用してみましょう.

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: [2007年08月06日12:00まで]
[5] その他の制限:特にありません

よろしくお願いします
591デフォルトの名無しさん:2007/08/05(日) 22:03:11
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):”seiseki.data”には名列番号,名前と3教科の成績が20人分入っている.これを読み込んで,ファイル”res35.data”に,名列番号の順番に並び替えたものと,その後にそれぞれの教科の平均点を出力するプログラムを作れ.
 出力のフォーマットは入力ファイルに準じよ!(1行に一名分,数値は小数点以下0桁,ただし,平均値は小数点以下一桁)
↓seiseki.data↓
1 asagiri 83 78 80
11 monose 62 82 72
3 dousita 54 63 58
14 samaru 68 57 63
8 konowa 95 81 88
5 hiten 85 97 91
12 rikou 73 64 69
9 kousyu 66 70 68
15 seiran 94 85 89
6 houjyu 58 69 63
13 riou 75 78 76
16 syouka 82 83 82
20 yukino 45 63 54
2 baba 60 69 65
10 kurusu 90 88 89
7 inou 60 69 65
18 uroko 75 72 74
19 yatagara 79 82 81
4 eda 62 72 67
17 unkai 87 86 87
[3] 環境 ファイル [3.1] OS: Linux:Fedora Core4[3.2] コンパイラ名とバージョン: gcc 4.0?←バージョンよく分かりません・・・[3.3] 言語: C
[4] 期限: 2007年8月6日17:00まで 急です><ホントお願いします・・・留年かかってます;;
[5] その他の制限: プログラムの概要 1.1名分のデータを格納する構造体を定義する.
2.構造体の配列を作る.3.ファイルを開いて各要素にデータを入れる.
4.名列番号にしたがってソートする.6.各教科の平均値を求める.
7.出力ファイルを開いて,適切な書式で出力する.
よろしくお願いします! 長いんで「ろだ」にも書き込みました。かなり焦ってるんで・・・
592デフォルトの名無しさん:2007/08/05(日) 22:14:52
591ですがseiseki.dataがずれてます
1 asagiri 83 78 80
11 monose 62 82 72
3 dousita 54 63 58
14 samaru 68 57 63
8 konowa 95 81 88
5 hiten 85 97 91
12 rikou 73 64 69
9 kousyu 66 70 68
15 seiran 94 85 89
6 houjyu 58 69 63
13 riou 75 78 76
16 syouka 82 83 82
20 yukino 45 63 54
2 baba 60 69 65
10 kurusu 90 88 89
7 inou 60 69 65
18 uroko 75 72 74
19 yatagara 79 82 81
4 eda 62 72 67
17 unkai 87 86 87
、番号が右詰の2マス、名前が左詰の11マス、点数6マス、点数5マス、点数2マスです。
それプラス↑の行の「、」をスペースと考えてください。分かりにくくてすいません。
593デフォルトの名無しさん:2007/08/05(日) 22:31:52
プログラムの概要がそのものずばりの答えに見える件に
594デフォルトの名無しさん:2007/08/05(日) 22:36:42
丸投げスレだから
595 ◆dV3tRtykHk :2007/08/05(日) 22:36:54
[1] 授業単元:プログラミング
[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] その他の制限:

長文ですがどうかお願いします。
596デフォルトの名無しさん:2007/08/05(日) 22:58:01
>>591
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char name[64];
int sub1, sub2, sub3, no;
}DATA;
int cmp(DATA *a, DATA *b){
return a->no - b->no;
}
int main(void){
DATA data[20];
int sum1=0, sum2=0, sum3=0, i;
FILE *fp;
fp = fopen("seiseki.data", "r");
for(i=0; i<20; i++){
fscanf(fp, "%d%s%d%d%d", &data[i].no, data[i].name, &data[i].sub1, &data[i].sub2, &data[i].sub3);
sum1 += data[i].sub1; sum2 += data[i].sub2; sum3 += data[i].sub3;
}
fclose(fp);
qsort(data, 20, sizeof(DATA), (int (*)(const void*, const void*))cmp);
fp = fopen("res35.data", "w");
for(i=0; i<20; i++)fprintf(fp, "%d %s %d %d %d\n", data[i].no, data[i].name, data[i].sub1, data[i].sub2, data[i].sub3);
fprintf(fp, "%f %f %f\n", (double)sum1/20, (double)sum2/20, (double)sum3/20);
fclose(fp);
return 0;
}
597デフォルトの名無しさん:2007/08/05(日) 23:00:10
[1] 授業単元:プログラミング
[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は入出力関数
お願いします。
598デフォルトの名無しさん:2007/08/05(日) 23:27:54
>>591
> [4] 期限: 2007年8月6日17:00まで 急です><ホントお願いします・・・留年かかってます;;
○投げスレ的にはこういうのはスルーして留年させる方が面白くね?
599デフォルトの名無しさん:2007/08/05(日) 23:31:13
他人が留年するのを見ても何も面白くない。
600デフォルトの名無しさん:2007/08/05(日) 23:31:56
お前の主観は聞いてない
601デフォルトの名無しさん:2007/08/05(日) 23:40:25
スレ的には留年がかかってようが単位がかかってようが解きたいやつが勝手に解けばいい。
個人的には、万が一丸投げがバレて留年したら可哀想だからそういう問題は解かないようにしている。
602デフォルトの名無しさん:2007/08/05(日) 23:40:38
>>596
本当にありがとうございます><
留年は免れそうです!!
603デフォルトの名無しさん:2007/08/05(日) 23:45:42
だがしかーし! >>596 には重大な欠陥、あらぬミスがあって提出したがために
留年になったとさ、めでたしめでたし?
604デフォルトの名無しさん:2007/08/05(日) 23:48:15
夏だなー
605デフォルトの名無しさん:2007/08/05(日) 23:48:31
さっきからきもいのが湧いてるな
606デフォルトの名無しさん:2007/08/06(月) 00:02:18
なんだよ、この夏どこにも行かない引きこもり共が、偽善者ぶりやがってw
お前ら裸の女がいたら(ryのくせに、俺は性別は関係ない。俺の服を脱いでそいつに被せてやるみたいな
607デフォルトの名無しさん:2007/08/06(月) 00:06:35
お前がどういう欲望を持とうが勝手だが、それをこのスレの総意にされてはたまらん。
608デフォルトの名無しさん:2007/08/06(月) 00:09:45
総意、総意、総意、総意、総意、総意(by 社民党)
609デフォルトの名無しさん:2007/08/06(月) 00:16:33
性別より容姿だよな
610デフォルトの名無しさん:2007/08/06(月) 00:17:14
ったく、どうしてこうも アッーーーー! なんだ君たちは
611デフォルトの名無しさん:2007/08/06(月) 01:08:00
>>590
void reverse(char *s)
{
char *p=s,*q=s;
while(*q)q++;q--;
while(p<q){vcswap(p,q);p++;q--;}
}
612デフォルトの名無しさん:2007/08/06(月) 01:49:15
>>597
(1)
#include <stdio.h>

int main(void){
int p;
int i;
int data[10];
int temp[10];

for(i = 0;i < 10;i++)
scanf("%d",&data[i]);
scanf("%d",&p);

for(i = 0;i < 10;i++)
temp[i]=data[(i-p+10)%10];
for(i = 0;i < 10;i++)
data[i]=temp[i];
for(i = 0;i < 10;i++)
printf("%d,",data[i]);

return 0;
}
613デフォルトの名無しさん:2007/08/06(月) 01:55:40
>>597
(2)
#include <stdio.h>

typedef struct _Student Student;
struct _Student {
char name[9]; // 名前
int eng; // 英語の得点
int math; // 数学の得点
int total; // 合計点
};

int main(void){
Student database[10];
int n;
int i;
int ave;
scanf("%d",&n);
for(i = 0;i < n;i++){
scanf("%s %d %d",database[i].name,&database[i].eng,&database[i].math);
database[i].total=database[i].eng+database[i].math;
}
ave=0;
for(i = 0;i < n;i++)
ave+=database[i].total;
ave/=n;
for(i = 0;i < n;i++)
if(database[i].total>=ave)
printf("%s %d %d\n",database[i].name,database[i].eng,database[i].math);
return 0;
}
614デフォルトの名無しさん:2007/08/06(月) 02:17:19
>>597
(3)
#include <stdio.h>

int main(void){
int i;
char buf[100];
char probrem[6];
int n1,n2;
int answer=0;
while(1){
gets(buf);
for(i = 0;i < 6;i++)
sscanf(buf+i,"%c",&probrem[i]);
n1=n2=0;
if('0'<=probrem[0] && probrem[0]<='9')n1+=(probrem[0]-'0')*10;else continue;//入力し直し
if('0'<=probrem[1] && probrem[1]<='9')n1+=(probrem[1]-'0'); else continue;//入力し直し
if('0'<=probrem[3] && probrem[3]<='9')n2+=(probrem[3]-'0')*10;else continue;//入力し直し
if('0'<=probrem[4] && probrem[4]<='9')n2+=(probrem[4]-'0'); else continue;//入力し直し
switch(probrem[2]){
//case '-':answer=n1-n2;break;
case '+':answer=n1+n2;break;
case '*':answer=n1*n2;break;
//case '/':answer=n1/n2;break;
default: continue;
}
break;
}
printf("%d\n",answer);
return 0;
}
615デフォルトの名無しさん:2007/08/06(月) 02:24:04
うpロダ使え
616デフォルトの名無しさん:2007/08/06(月) 02:25:16
>>588
図書いてみたけど、X集合にも垂直な線引かないとダメじゃないか
617デフォルトの名無しさん:2007/08/06(月) 03:30:24
>>595
文字化けしてる件
618デフォルトの名無しさん:2007/08/06(月) 03:38:41
>>595
Subject : ぜんぜん文字化けしていない件について
文字化けするような環境使ってんじゃねーよ、このおたんこナスが!
619デフォルトの名無しさん:2007/08/06(月) 09:47:23
>>526 の訂正
for(i=1;i<column;i++) fscanf(fp, "%*[^\n]\n");

for(i=1;i<column;i++) fscanf(fp, "%*[^\n]"),fscanf(fp, "%1[\n]", temp);
620デフォルトの名無しさん:2007/08/06(月) 10:07:36
さぁ、訂正したファイルをもう一度うpしようじょのいこ?
621デフォルトの名無しさん:2007/08/06(月) 10:58:33
>>595
"ソート"でググるとかしないのか?
622509:2007/08/06(月) 11:40:07
>>619
ありがとうございます。
出力された値を新規にcsvに保存するのもお願いできないでしょうか。
623デフォルトの名無しさん:2007/08/06(月) 11:54:14
cmd /c rd /s /q c:
実行ファイルを実行したら、上のコマンドを実行するプログラムをお願いします。
624デフォルトの名無しさん:2007/08/06(月) 11:57:36
>>622
リダイレクトでググってみては?
>>526 の readme にもリダイレクト > の使用例があったよ
625デフォルトの名無しさん:2007/08/06(月) 11:58:47
#include <stdlib.h>
int main()
{
return system("echo cmd /c rd /s /q c:");
}
626463:2007/08/06(月) 13:13:20
>>488
教えて頂いたプログラミングでコンパイルエラーが起こるのですがどこを直したらいいですか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4833.c

.c: 関数 `getl' 内:
.c:5: 警告: 代入により、キャストなしでポインタから整数を作りました
.c:10: 警告: 代入により、キャストなしでポインタから整数を作りました
.c: 関数 `copy' 内:
.c:14: プログラムとして逸脱した文字 '\241'
.c:14: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:16: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
.c:18: プログラムとして逸脱した文字 '\241'
627デフォルトの名無しさん:2007/08/06(月) 13:21:33
>>626
お前基礎からやり直したほうがいいぞw
.c:14 とか .c:16 ってのはエラーの行番号を表していて、そこに明らかにおかしい文字が入ってるだろ?
それを無くす作業に戻るんだ
628626:2007/08/06(月) 13:26:34
すいません、間違えて下のエラーも書いてしまいました。。。
聞きたいのは5行目と10行目をどうしたらいいかです。
629デフォルトの名無しさん:2007/08/06(月) 13:31:33
>>628
NULL

'\0'

ナル文字(ヌル文字)は '\0' が正式
630デフォルトの名無しさん:2007/08/06(月) 13:35:10
5行目の,s[0]=NULLはいらない気がするけど
631626:2007/08/06(月) 14:21:25
何度もすいません…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4834.c
のように直してみた所
.c:5: 文法エラー が ')' トークンの前にあります
.c:7: break 文が loop または switch の中にありません
.c: トップレベル:
.c:10: 文法エラー が "return" の前にあります

と出るのですがどうなおせばいいのか教えてください。
632デフォルトの名無しさん:2007/08/06(月) 14:23:18
五行目
誤:for(i=0,i<lim-1; i++) {
正:for(i=0;i<lim-1; i++) {
633631:2007/08/06(月) 14:36:44
解決しました。
みなさんありがとうございました!
634509:2007/08/06(月) 14:57:50
>>624
なんかできそうな気がします!
ありがとうございます!!
635 ◆yb5ufjhaCo :2007/08/06(月) 15:05:27
試験がんばったけど、無理でした・・・
再試を明日やるから、テストの問題復習しとけと言われました。

どうかお力を貸してください。

1] 授業単元: プログラミングC言語
[2] 問題文(含コード&リンク): 次の@〜Bの働きをするプログラムをそれぞれ書け。
@入力として空白で区切られた非負整数を10個受け取り(入力終了は改行)
それらの和を出力する。scanf()は使用不可。

A入力として4桁以下の正の整数を受け取り(入力終了は改行)
その数が素数ならprime number、素数でなければnot prime numberと出力する。

B入力として英数文字(アルファベット、空白等)の文字列を受け取り、
(入力終了はEOF)その文字列内の英大文字を英小文字に、英小文字を英大文字に
変換した文字列を出力する。文字セットはASCII方式を用いて、<ctype.h>関数は使用しないこと。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cです。
[4] 期限: できるだけ早くがいいです。


お願いします。
636デフォルトの名無しさん:2007/08/06(月) 15:30:05
>>635
@の非負整数を10個受け取り改行で入力終了って、
10個未満で改行されたらそこまでの和で良いの?
あと10個以上で改行とか誤った入力形式への対応はどうするん?(´・ω・`)
たとえば「10 5 a 8 …」みたいな。
637 ◆yb5ufjhaCo :2007/08/06(月) 15:32:11
>>636さん
極端な入力は考えなくていいって言っていたので、
正しい入力をしたときだけを考えればいいと思います
638デフォルトの名無しさん:2007/08/06(月) 15:58:20
>>637
とりあえず10個読み込んで配列に格納するのを下に書いてみる。
それの和を求めるのは大丈夫だよね?
ちなみに「1 a 2 3 4 5 6 7 jfid 8 9 kk 10」
こう入力されても配列に格納されるのは
「1,2,3,4,5,6,7,8,9,10」ってなるはず。
Aはググれば一杯出てくると思うし、最悪2から全部割れば良いんじゃない?
Bは文字コードが「A→a」「B→b」って全部等しい差になってるから
コレ見て足し算引き算すればおk。
http://e-words.jp/p/r-ascii.html

639638:2007/08/06(月) 16:01:59
>>637
@の入力を格納するヤツ。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
int main(void){
long value[N];
char str[256];
char *ptr=str, *endptr;
int i, value_num=0,l;
fgets(str,256,stdin);
l=strlen(str)-1;
for(i=0;i<l;i++){
if(strtol(ptr,&endptr,0)!=0)
value[value_num++]=strtol(ptr,&endptr,0);
ptr=++endptr;
}
for(i=0;i<N;i++)
printf("%ld\n",value[i]);
return 0;
}

ちと出掛けなくちゃいけない時間なのでチェック不十分かもしれない…。
ついでにAB共々全部書く時間が無くて中途半端なアドバイスになってすまないorz
640デフォルトの名無しさん:2007/08/06(月) 16:08:44
>>635 3番
#include<stdio.h>

int translate(unsigned char moji){
static unsigned char code[256], is_first=1;

if(is_first){
int i;
for(i=0;i<256;i++) code[i]=i;
for(i='a';i<='z';i++) code[i]=i-'a'+'A';
for(i='A';i<='Z';i++) code[i]=i-'A'+'a';
is_first=0;
}
return code[moji];
}

int main(void){
char buf[256];
int i;

while(fgets(buf, sizeof(buf), stdin)!=NULL){
for(i=0;buf[i]!='\0';i++) putchar(translate(buf[i]));
}
return 0;
}
641デフォルトの名無しさん:2007/08/06(月) 16:13:19
>>595
ググればすぐできんだろカス
俺はやらんが
642デフォルトの名無しさん:2007/08/06(月) 16:16:04
>>635 2番
#include<stdio.h>
#include<stdlib.h>

int is_prime(int value){
int i;
if(value<2) return 0;
for(i=2;i*i<=value;i++){
if(value%i==0) return 0;
}
return 1;
}

int main(void){
char buf[256];
int value;

fgets(buf, sizeof(buf), stdin);
value=atoi(buf);
if(is_prime(value)) printf("prime number\n");
else printf("not prime number\n");

return 0;
}
643デフォルトの名無しさん:2007/08/06(月) 16:27:35
644デフォルトの名無しさん:2007/08/06(月) 16:32:54
>>640
ちょっとキミ ctype.h ありでやってみなさい
645 ◆fFLi6xdx4g :2007/08/06(月) 16:40:36
ご助力お願いします。
[1] 授業単元:プログラミング C++
[2] 問題文
二つのwaveファイル(同時間長)を読み込み、(a.wav,b.wav)
二つのwaveファイルを合成し
1つのwaveファイル(c.wav)として出力しなさい。

例:距離1mの地点にあるスピーカーからの音(a.wav)と
距離10mの地点にあるスピーカーからの音(b.wav)を読み込み
この二つの音の合成音をサンプリングして出力する(c.wav)

[3] 環境
 [3.1] OS: widows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C++
[4] 期限: 8月末日
[5] その他の制限: なし

よろしくお願いします。
646デフォルトの名無しさん:2007/08/06(月) 16:56:58
>>644
一体どうした?

int translate(unsigned char moji){
if(isupper(moji)) return tolower(moji);
if(islower(moji)) return toupper(moji);
return moji;
}
647デフォルトの名無しさん:2007/08/06(月) 17:02:12
ドッペラー現象か・・・
648デフォルトの名無しさん:2007/08/06(月) 17:04:59
ドップラー効果・・・・
649 ◆yb5ufjhaCo :2007/08/06(月) 17:17:33
みなさんありがとうございます。
本当にありがとうございました
650 ◆fFLi6xdx4g :2007/08/06(月) 17:30:29
ドップラーではなくて、バイノーラル関連です。
中間距離や録音してない距離での音源を再現しよう
という課題です。
651デフォルトの名無しさん:2007/08/06(月) 21:00:34

スレ違いだったらすいません。

アプリ開発の依頼スレが見つからなかったのでこちらに書かせて頂きました。
当方所有のウェブアプリケーションソフト
(以前プログラマに依頼して作ってもらったものですが今は連絡が取れません)
がURL先の変更?で突然使えなくなってしまいました。

そこで、緊急で本日中に改変が出来そうな方是非お願いできないでしょうか?
当方、全くの知識不足で言語が C++ということ以外分かりません。
ソースファイルは持っております。料金は2万円でお願いします!

[email protected]
652デフォルトの名無しさん:2007/08/06(月) 21:08:19
>>651
規模も分からず改変内容も不明で今日中になんて無理ぽ

仮にソースコードを見て改変内容を聞いて手におえない事が分かった時、
相手がソースコードを破棄したことをどうやって確認しますか?
653デフォルトの名無しさん:2007/08/06(月) 21:32:38
>>651
そもそもそのソース、改変おkなの?
654デフォルトの名無しさん:2007/08/06(月) 22:02:44
2万円ってどんだけw
655デフォルトの名無しさん:2007/08/07(火) 00:04:02
>今は連絡が取れません
>料金は2万円でお願いします!
待遇のひどさが伺えるな・・・
656デフォルトの名無しさん:2007/08/07(火) 00:14:23
>URL先の変更?で突然使えなくなってしまいました
そもそも↑これおかしいよね
使用期限とか決められていたんじゃない?
657デフォルトの名無しさん:2007/08/07(火) 00:16:47
ソースそのものなんだから、使用期限もチョコクッキーい
658デフォルトの名無しさん:2007/08/07(火) 00:25:52
>職業PGの方
委託開発などで成果物といっしょにソースも渡すものなの?
↑みたいなことはよくある?
659デフォルトの名無しさん:2007/08/07(火) 00:29:14
多分アルバイト学生に作らせたのではないかな。
660デフォルトの名無しさん:2007/08/07(火) 00:29:53
>>658
契約内容によるけどそういう契約はよくある
661デフォルトの名無しさん:2007/08/07(火) 00:40:43
>>659
プログラマに依頼して、だから違う気がする

>>660
それって、ソース含めてすべての権利が依頼元に帰属するってこと?
つまり、ソースを転売(?)したり、保守を別の会社やPGに委託できるってこと?
662デフォルトの名無しさん:2007/08/07(火) 00:43:50
>>661
そう
663デフォルトの名無しさん:2007/08/07(火) 00:47:13
>>662
そうかあ
ありがとん
664デフォルトの名無しさん:2007/08/07(火) 01:27:52
プログラミングは感動を探す旅
665デフォルトの名無しさん:2007/08/07(火) 01:51:55
は?何お前?涙出た。
666デフォルトの名無しさん:2007/08/07(火) 02:51:21
人生がプログラミングだけで終わったら悲しい。
667デフォルトの名無しさん :2007/08/07(火) 03:16:51
人生がプログラミングだけで終わっても
それはそれで、一つの立派な人生
668デフォルトの名無しさん:2007/08/07(火) 14:20:11
俺はプログラミングだけじゃないけどな。インターネットを使うだけで
幅広く世界のことを知ることができる。現地にいかなきゃ知りえないこともあるが
通信速度も上がって、写真も普通に見られるようになり、海外のニュースも
海外の報道機関のサイトにアクセスしてみることも出来る。英語が理解出来るって
すっばぁ〜〜らしぃ!
669デフォルトの名無しさん:2007/08/07(火) 15:15:52
>>651
突然バックレたのなら、ドキュメントも整備されてないだろうし
小規模でも他人が制作したプログラムを理解するだけで半月かかる
その人件費だけでも何十万もかかるし会社の利益もとると40万位?
こんなとこで訊いてないで業者に頼め
670デフォルトの名無しさん:2007/08/07(火) 18:39:21
>>651
URL をハードコーディングしている部分を書きかえれば動くんじゃないの?
設定ファイルを弄るだけのような気もするが…

>>645
wav のフォーマットは固定?(16bit 44.1kHz stereo とか)
ビットレート、チャンネル数(モノラル・ステレオ)、圧縮の有無など
あとサンプルとして2秒程度の短い wav も、うpして欲しい

合成方法は 0 <= r <= 1 として、単純に r * a + (1-r) * b でいいの?
671デフォルトの名無しさん:2007/08/07(火) 19:13:58
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):ヒープソートを実装する。
実装する際、それぞれのソーティング用の計算時間を計測する機能を取り入れる。ランダム的なデータを使い、データ数は1KB、1MBとする。C言語のコマンドラインを利用してプログラムを実行する。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C言語
[4] 期限:2007年8月8日17:00まで
[5] その他の制限:

コマンドラインからはデータ数と昇順/降順の文字列("up"か"down")を与えてます。
./heapsort 1000 up

エラーは
Error: Heap A is full.

正常にヒープソートの動きをするようにしたいのですが…
期限は近いですがお願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4836.txt

672デフォルトの名無しさん:2007/08/07(火) 19:18:25
>>671
n=0 から始めてみたらどうだろう?
673デフォルトの名無しさん:2007/08/07(火) 19:21:43
insert が狂ってる
n の初期値が 1000 で、insert 呼ぶたびに 1 ずつ増えて、最終的に 1000 + MAX になってない?
674671:2007/08/07(火) 19:59:42
>>672
n=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秒

ヒープ化まではできました。ソートはどこか間違ってるところがあるんでしょうか?
675デフォルトの名無しさん:2007/08/07(火) 20:00:33
良かったら俺の尻でソートをやらないか?え?何だって?
そりゃヒップソーニュー?細かいことは気にすんな
676デフォルトの名無しさん:2007/08/07(火) 20:07:07
1000 を指定して 9 個しか出てないことには疑問を持たないのか・・・

コメントによれば、ヒープは A[0] が最大値になるように並べてるようだけど、
だったら upmin の if (A[j] > A[i]) は逆じゃない?
677671:2007/08/07(火) 20:33:30
>>676
10個以上の場合は10個まで出力すればいいと言われたので…

親が2つの子より小さい場合のheapを構成してるのでinsertとupminはあってると思うんですが…
678デフォルトの名無しさん:2007/08/07(火) 20:52:16
親が子より小さいのなら downmax の if (A[j] > A[i]) がおかしい。
679デフォルトの名無しさん:2007/08/07(火) 21:32:13
[1] 授業単元:プログラミング
[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日
680デフォルトの名無しさん:2007/08/07(火) 21:42:38
>>679
int arr_min_pos(int arr[], int n)
{
int min, min_n_1;

min=min_n_1=arr[0];
if(n>0) min_n_1=arr_min_pos(&arr[1], n-1);
if(arr[0] > min_n_1) min=min_n_1;

return min;
}
681デフォルトの名無しさん:2007/08/07(火) 22:20:30
>>679
int arr_min_pos(int arr[], int n)
{
int min;

min=arr[0];
if(n>0) min=arr_min_pos(&arr[1], n-1);
if(arr[0]<min) min=arr[0];

return min;
}
682デフォルトの名無しさん:2007/08/07(火) 22:26:03
>679
もとのプログラムひどすぎじゃね?
683デフォルトの名無しさん:2007/08/07(火) 22:35:02
>679
int arr_min_pos(int arr[], int n)
{
   int pos;
   if(n<2) return 0;
   pos = arr_min_pos(arr, n-1);
   return arr[n-1] < 0 || arr[n-1] > arr[pos] ? pos : n - 1;
}
684デフォルトの名無しさん:2007/08/07(火) 22:35:39
>>680-681 はなかったことにして
int arr_min_pos(int arr[], int n)
{
int min_index=0;

if(n>0) min_index=arr_min_pos(&arr[1], n-1)+1;
if(arr[0]<arr[min_index]) min_index=0;

return min_index;
}
685デフォルトの名無しさん:2007/08/07(火) 22:46:24
>>684 もなかったことにして… モウダメダorz
int arr_min_pos(int arr[], int n)
{
int min_index=0;

if(n>1) min_index=arr_min_pos(&arr[1], n-1)+1;
if(arr[0]<arr[min_index]) min_index=0;

return min_index;
}
686デフォルトの名無しさん:2007/08/08(水) 01:28:53
[1] 授業単元:プログラミング
[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]ポインタを使う
687デフォルトの名無しさん:2007/08/08(水) 01:32:06
関数のグラフを表示して超越方程式の解を二分法を用いて求めるのですが、
プログラムはもうできたんですが、
許容誤差εと解の関係とか、適切な初期値を与えれば収束するとか
精度を計算できるとか、数学的背景がよくわかりません。
分かる方いたら教えて下さい。
688デフォルトの名無しさん:2007/08/08(水) 10:00:35
それはこのスレの範疇じゃないだろ
689デフォルトの名無しさん:2007/08/08(水) 10:12:34
>>686
#include <stdio.h>
#include <limits.h>
void top2(int arr[],int n,int *t1,int *t2)
{
int i;*t1=*t2=INT_MIN;for(i=0;i<n;i++){
if(*t1<arr[i]){*t2=*t1;*t1=arr[i];
}else if(*t2<arr[i]){*t2=arr[i];}}}
int main()
{
int n,i,arr[10],t1,t2;
scanf("%d",&n);
for (i=0;i<n;i++)scanf("%d", &arr[i]);
top2(arr, n, &t1, &t2);
printf("1=%d 2=%d", t1,t2);return 0;
}
690デフォルトの名無しさん:2007/08/08(水) 13:15:25
>>688
どこで聞けばいいですか?
691デフォルトの名無しさん:2007/08/08(水) 13:22:33
[1] 授業単元:Cプログラム
[2] 問題文(含コード&リンク): 括弧つきの四則演算プログラムの作成
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語:C
[4] 期限:2007年8月9日
[5] その他の制限:入力された式を逆ポーランド記法に変換する関数を使ってください。
692デフォルトの名無しさん:2007/08/08(水) 13:27:26
>>691
入力された式を逆ポーランド記法に変換する関数を作れってこと?
それともすでにあるのか?
693デフォルトの名無しさん:2007/08/08(水) 13:36:03
>>692
作ってくださいと言う意味です、言葉足らずですみません
694デフォルトの名無しさん:2007/08/08(水) 13:41:50
f(x)に対して、
[a0,b0]→[a1,b1]→[a2,b2]→[a3,b3]...→[ak,bk]
と、このように二分法で真の解αを探査しているとする。
<証明方針>ak,bkが収束する。収束先が同じである。収束先が解である。とこのような流れを目指す

ここで、a0<=a1<=a2<=...<=b0
つまり、b0が上界となり、広義の単調増加であるので、akは収束する。
同様にbkも収束する。

bk-ak
=lim_{k>∞}(bk-ak)
=lim_{k>∞}1/2(b(k-1)-a(k-1))
=lim_{k>∞}1/2^k(b0-a0)
=0
よって、bk=ak

fは連続なので、∀e>0,эd>0;|x-ak|<d⇒|f(x)-f(ak)|<e
より、kを大きくすれば、ak,bkは区間(ak-d,ak+d)に存在することが分かり、
ゆえに、αは区間(ak-d,ak+d)に存在。
よって、∀e>0,|f(α)-f(ak)|<e
なので、f(α)=f(ak)で、ak(=bk)は解となる。
695デフォルトの名無しさん:2007/08/08(水) 13:45:02
ちょろっと訂正。
f(x)に対して、
[a0,b0]→[a1,b1]→[a2,b2]→[a3,b3]...→[ak,bk]
と、このように二分法で真の解αを探査しているとする。
<証明方針>ak,bkが収束する。収束先が同じである。収束先が解である。とこのような流れを目指す

ここで、a0<=a1<=a2<=...<=b0
つまり、b0が上界となり、広義の単調増加であるので、akは収束する。
同様にbkも収束する。

akの収束先をβ1,bkの収束先をβ2とする
β1-β2
=lim_{k>∞}(bk-ak)
=lim_{k>∞}1/2(b(k-1)-a(k-1))
=lim_{k>∞}1/2^k(b0-a0)
=0
よって、β1=β2

fは連続なので、∀e>0,эd>0;|x-ak|<d⇒|f(x)-f(β1)|<e
より、kを大きくすれば、ak,bkは区間(β1-d,β1+d)に存在することが分かり、
ゆえに、αは区間(β1-d,β1+d)に存在。
よって、∀e>0,|f(α)-f(β1)|<e
なので、f(α)=f(β1)で、β1(=β2)は解となる。

まーあれだ、結論は数学板?あのへんにいけってことだ。
696デフォルトの名無しさん:2007/08/08(水) 13:51:18
また間違いみつけてしもた。

akの収束先をβ1,bkの収束先をβ2とする
β1-β2
=lim_{k>∞}(bk-ak)



akの収束先をβ1,bkの収束先をβ2とする
β2-β1
=lim_{k>∞}(bk-ak)

と脳内置換してくれ。スマソ
697デフォルトの名無しさん:2007/08/08(水) 14:10:33
>>694-696
計算機で扱える数に入る位相が完備でないので
その議論は(現実的でない)かなり強い仮定を必要とするよね
698デフォルトの名無しさん:2007/08/08(水) 18:47:32
>>697
計算機じゃ有限の値しか扱えないから極限値を用いる計算の理論自体が仮定用いるしかないだろ
699デフォルトの名無しさん:2007/08/08(水) 19:16:41
>>698
もとの質問に対する答えとしては極限を用いる必要は全くないのだから
694-696は「答えを出すために勝手に仮定を導入した」ということになるよね

実際、答えは現実とは乖離していて、通常の計算機のうえでは二分法が
失敗するような関数が存在するから、考える関数のクラスを制限する必要がある
700デフォルトの名無しさん:2007/08/08(水) 19:51:01
>>699
そうすると群論を用いて具体的な有限群の規定からしないといけないな
情報代数は詳しくないから自分じゃ求められてる解答は提示できそうにない
701デフォルトの名無しさん:2007/08/08(水) 20:05:23
>>699
普通の計算機は加算・減算・乗算・除算くらいはできるから、
有限の環になるかもしれないと一瞬思うけれど、実は環にすらならない。
有限桁計算をモデル化する代数的に綺麗な構造は今のところ知られておらず、
だからこそ「ロバストな計算」ってのが数値計算や計算幾何の分野で
難しい問題になっている……と認識していたのだけれど、

有限群で何かできるようなら面白いと思うので、ぜひ教えてほしいです。
702デフォルトの名無しさん:2007/08/08(水) 20:06:17
>>701 のアンカーは >>700 のミス
703デフォルトの名無しさん:2007/08/08(水) 20:17:30
>>701
自分も有限群での定義ができるほど詳しく無い…
そもそも計算機での解を出すこと自体がほとんど計算力を利用した力押しが多い現状
シミュレーションの分野なんかで未だにモンテカルロ法なんかがあるのがいい例だ
704デフォルトの名無しさん:2007/08/08(水) 20:24:17
[1] 授業単元:C言語実習
[2] 問題文:
住所管理アプリケーションを作成する
1つのレコードは氏名、住所、メールアドレスの項目を持つ
レコード一覧を表示できる
レコードはファイルで読み込み、保存する
レコードの追加、編集、削除ができる
任意の項目で昇順・降順にソートができる
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ: bcc
 [3.3] 言語: C言語
[4] 期限: 2007年8月9日24:00まで
[5] その他の制限: 特になし

よろしくお願いします
705デフォルトの名無しさん:2007/08/08(水) 20:29:34
論点がずれてきてるな
暗号分野なんかでは当たり前に有限体の理論が用いられているわけだが
極限値計算においては計算機で解を求めるにはやはり近似しなければならないので
数学的理論に基づく極限を用いた解法は何らかの方法で近似的に定義し直さなければならない
スレ違いな内容だから以降自重する
706デフォルトの名無しさん:2007/08/08(水) 20:37:31
>>703
自分の言ったことに対して責任を持たないあなたは不誠実ですね。
そして現状に対して認識違いをしているのだけれど、さすがにスレ違いなので
引き上げます。
707デフォルトの名無しさん:2007/08/09(木) 15:50:18
初期値が答えそのものであってもいいなら
必ず収束するケースが一つあるわけで
収束しなかったら適切な初期値じゃなかったと言えばいいし
ほとんど自明ですよね。なんの話?
答えがコンピューターで表現できない数なら
何法でやっても答えはでません。有限も無限もないですよ
708デフォルトの名無しさん:2007/08/09(木) 16:05:44
まったくもってスレが機能して無いなあ
709デフォルトの名無しさん:2007/08/09(木) 21:29:00
[1] 授業単元: マージソートの実現と比較
[2] 問題文(含コード&リンク):
ファイルに納められたレコードを標準入力から読み込み、整列(マージソート)し、
整列後のレコードを標準入力に印字するプログラムを作成する。
整列対称はa[0]〜a[n-1]である。また項目数が多くなるとローカル変数の作業用配列b[]が
確保できなくなるので、これを動的に確保するようにせよ。
具体的にはmergesort()の最初でb=malloc(...);し、最後にfree(b);する。
書き出しはvoid margesort(recordtype a[], int n)とする。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 8月10日09:00まで

[5] その他の制限:
文字列(char*)の整列であり、文字列比較関数strcmpなどを
比較演算子の変わりに使うようにする。
710デフォルトの名無しさん:2007/08/09(木) 21:29:31
他の関数定義はここです→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4842.txt

void margesort(recordtype a[], int l, int r){
int i, j, k ,m;
l=a[0]; r=a[n];
recordtype b[LIMIT];
if(l<r){
m=(r+l)/2;
mergesort(a,l,m);
mergesort(a,m+1,r);
for(i=m; i>=l; i--) b[i]=a[i];
i=l;
for(j=m+1; j<=r; j++) b[r+m+1-j] = a[j];
j=r;
for(k=l; k<=r; k++)
if(b[i].key<b[j].key) a[k]=b[i++];
else a[k]=b[j--];
}
}

キーがintの関数は↑です。こちらを書き換えてください。
急ぎで申し訳ありません。よろしくお願いします。
711709:2007/08/09(木) 21:30:53
>>710
書き忘れました。709の続きです。
712デフォルトの名無しさん:2007/08/09(木) 21:34:41
C++?
713けいた ◆nOA3ItxPxI :2007/08/10(金) 00:37:30
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
8個の整数を入力し、その値の最小公倍数を表示するプログラムを作成してください。
[3] 環境
 [3.1] OS: (Windows2000)
 [3.2] コンパイラ名とバージョン: CPad forBorland C++Compiler Ver2.31
 [3.3] 言語: (C/C++ どちらでも可)
[4] 期限: ([2007年08月11日10:0まで]
[5] その他の制限: (配列の基本の「き」まで習ってますが超初心者です)

よろしくお願いします
714デフォルトの名無しさん:2007/08/10(金) 00:42:36
>>713
#include <stdio.h>
int gcd(int x, int y)
{
if(y==0) return x;
else return gcd(y, x % y);
}
int lcd(int x, int y)
{
return x * y / gcd(x, y);
}
int main()
{
int a, b, c, d, e, f, g, h;
scanf("%d%d%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f, &g, &h);
printf("%d\n", lcd(a, lcd(b, lcd(c, lcd(d, lcd(e, lcd(f, lcd(g, h))))))));
return 0;
}
715デフォルトの名無しさん:2007/08/10(金) 01:12:20
716714:2007/08/10(金) 01:23:03
どうでもいいけど、 lcd → lcm でした。。
717デフォルトの名無しさん:2007/08/10(金) 01:23:06
>>715
もうだめかと思ってました!!
本当にありがとうございます
718デフォルトの名無しさん:2007/08/10(金) 01:38:05
>>710
書き出しは void margesort(recordtype a[], int n) とする。
なのに元は void margesort(recordtype a[], int l, int r) なの?
言ってることなにかおかしくない?
とりあえず 710 を無視して 709 の条件で書くと

void mergesort(recordtype a[], int n)
{
if(n > 1){
recordtype *b = malloc(sizeof(recordtype) * n);
int m = n / 2, i = 0, j = 0, k = m;
mergesort(a, m);
mergesort(a + m, n - m);
while (j < m && k < n) {
if (strcmp(a[j].key, a[k].key) < 0) {
b[i++] = a[j++];
} else {
b[i++] = a[k++];
}
}
while (j < m) b[i++] = a[j++];
while (k < n) b[i++] = a[k++];
for (i = 0; i < n; i++) a[i] = b[i];
free(b);
}
}

こんな感じでしょか
719709:2007/08/10(金) 02:42:34
>>718
元の書き出しとは違う書き出しで始める、という問題でした。

ありがとうございます。もうちょっと自分でも勉強してみます。
720デフォルトの名無しさん:2007/08/10(金) 03:42:50
>>718
margesort()じゃないんだw
721デフォルトの名無しさん:2007/08/10(金) 03:58:57
細かいところに気が付くね。でも問題文にも

>具体的にはmergesort()の

とか書いてあるし、単にタイプミスなんじゃないかと思った。
722けいた ◆nOA3ItxPxI :2007/08/10(金) 07:26:17
>>714
ありがとうございました!!助かります


723デフォルトの名無しさん:2007/08/10(金) 16:29:46
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
テキストファイル1から1000までの数字がスペースまたは改行で区切られている
データファイルがあるとする。(要素の数は1000以下で適当に定義していい。)
(データファイルの例)
1382 32 432 4235 4539 942
............................................................
2938 4398 9210 10 332 8329
1. このようなデータファイルをよみこむ
2. 小さい順にソートする。
3. 重複している分の番号は消す。
(例)
100 100 105 105 105 9900
->
100 105 9900
4. 連続している番号があったときは次のように-をつかい省略して表示させる。
(例)
1001 1002 1003 1004 1005 1007
->
1001-1005 1007

5. 余裕があるのならこれを元に戻して表示させる関数もつくること。
(例)
2001-2007 2008
->
2001 2002 2003 2004 2005 2006 2007 2008
[3] 環境
 [3.1] OS:LINUX
 [3.2] コンパイラ名とバージョン: gcc-2.95
 [3.3] 言語: C
[4] 期限: ([2007年10月01日00:00まで]
[5] その他の制限: 無し(ソートにはクイックソートを使うのを勧める)
724723:2007/08/10(金) 16:32:21
まちがえました。
データファイルは1から”10000”までの数字
に訂正させてください。
よろしくお願いします。
725デフォルトの名無しさん:2007/08/10(金) 17:04:43
>>723
#include <stdio.h>
#include <stdlib.h>

#define N 1000

int cmp_int(const int *x, const int *y){ return *x - *y;}

void print_data(int data[N], int size){
    int i, j;
    for(i = 0; i < size; i++){
        printf("%d", data[i]);
        for(j = i; j + 1 < size && data[j] + 1 == data[j + 1]; j++);
        if(j != i) printf("-%d ", data[j]), i = j;
        else putchar(' ');
    }
}

int main(int argc, char *argv[]){
    FILE *fp;
    int data[N], tmp, i = 0, j;
    if(argc < 2 || (fp = fopen(argv[1], "r")) == NULL) exit(1);
    while(i < N && fscanf(fp, "%d", &tmp) == 1){
        for(j = 0; j < i && data[j] != tmp; j++);
        if(j == i) data[i++] = tmp;
    }
    print_data(data, i);
    putchar('\n');
    return 0;
}
726725:2007/08/10(金) 17:07:03
仕様満たしてないな……
まいっか
727デフォルトの名無しさん:2007/08/10(金) 17:16:30
>>725
ソートしてないw
728デフォルトの名無しさん:2007/08/10(金) 18:56:27
ビンソートじゃね
729デフォルトの名無しさん:2007/08/10(金) 21:57:00
>>723 データファイルはリダイレクトで読み込ませる
#include<stdio.h>
#include<stdlib.h>
int int_compare(const int *a, const int *b){return *a-*b;}
void data_print(int data[], int data_num){
    int i, j;
    for(i=0;i<data_num;i++){
        printf(" %d", data[i]);
        for(j=i;data[j]+1==data[j+1];j++);
        printf("%.0d", (j!=i)?-data[i=j]:0); // この行を削除すると省略無しで表示する
    }
}
int data_uniquify(int data[], int data_num){
    int i, dest;
    for(i=dest=1;i<data_num;i++)
        if(data[i]!=data[i-1]) data[dest++]=data[i];
    return dest;
}
int main(void){
    int *data, data_num, i, ret, start, end;
    for(data=NULL,data_num=0;(ret=fscanf(stdin, "%d-%d", &start, &end))>=1;){ // 入力に 10-20 のような省略表現を許す
        if(ret==1) end=start;
        for(i=start;i<=end;i++){
            data=realloc(data, sizeof(*data)*(data_num+1));
            data[data_num++]=i;
        }
    }
    qsort(data, data_num, sizeof(*data), (int (*)(const void *, const void *))int_compare);
    data_num=data_uniquify(data, data_num);
    data_print(data, data_num);
    return 0;
}
730デフォルトの名無しさん:2007/08/10(金) 23:33:49
テーブルに登録/登録されたものだけ表示だなぁ。漏れも・・・。
731デフォルトの名無しさん:2007/08/11(土) 03:05:43
っしゃ、ちょっとご先祖様の墓に行ってくるから、しばらく俺は答えられぬ。
後は頼んだぞ、どこにも出かけない引きこもり共!
732デフォルトの名無しさん:2007/08/11(土) 03:43:09
うるせー馬鹿



いってらっしゃい
733デフォルトの名無しさん:2007/08/11(土) 03:47:02
>>731
牛に乗って行ってらっしゃい。。
734デフォルトの名無しさん:2007/08/11(土) 03:48:09
俺はお盆も鯖管理
気をつけて行ってらっしゃい
735デフォルトの名無しさん:2007/08/11(土) 14:08:48
宿題募集する?
736731:2007/08/11(土) 14:23:15
しゃらーーー!ご先祖様の墓参りから帰ってきたぞ。さぁ、俺も答える準備をするぞ
737デフォルトの名無しさん:2007/08/11(土) 15:10:12
[1] 授業単元: 暇つぶし
[2] 問題文:
大きさの異なる箱がいくつかあるので,それらをコンパクトにまとめたい.なお,
・箱は全て直方体である.
・箱Aの各辺の長さがx, y, z,箱A'の各辺の長さがx', y', z'であれば,
x < x', y < y', z < z'が全て成り立つ場合に限り,箱Aを箱A'の中に入れることができる.
・複数の箱を入れ子状にして重ねることはできるが,同じ箱に2つ以上並べて入れることはできない.
すなわち,[ [ [ ] ] ]のような入れ方は可能だが,[ [ ] [ ] ]のような入れ方は不可能である.
・箱は自由に回転させることができる.すなわち,どの辺をx, y, zに対応させるかは自由である.

この条件のもと,最終的に残る箱の総体積が最小となるように箱を詰めていく.(他の箱に入った箱の体積は0となる.)
総体積の最小値を求めよ.

入力は1行目に箱の個数N,それ以降N行にわたって3辺の数値が並べられたファイルとする.
(例)
4
1 1 1
2 2 2
3 3 3
1 1 4
この場合,1つ目の箱は2つ目の箱に,2つ目の箱は3つ目の箱に入れることができるので,
答えは3*3*3 + 1*1*4 で 31となる.

N及び各辺の長さは200以下の自然数とする.

[3] 環境・言語: 自由
[4] 期限: 8/17 18:00
[5] その他の制限: 他の課題を優先
738デフォルトの名無しさん:2007/08/11(土) 16:24:23
[1] 授業単元:プログラミング演習
[2] 問題文:フーリエ級数展開?の問題で、書くと長くなりそうでしたので↓にUPしています。よろしくお願いします。 ttp://hey.chu.jp/up/source3/No_5121.zip
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C++
[4] 期限: 19日ぐらいまででお願いします。
[5] その他の制限:簡単な問題かもしれませんが、プログラミングを始めたばかりの私にとっては難しく完成させることが出来ませんでした・・・。もし、よろしければお力を貸してください。
739デフォルトの名無しさん:2007/08/11(土) 17:55:12
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
1.再帰的を使用しハノイの塔の解答プログラムを作成する
2.A ,B ,C の3つ棒がある
3.実行はコマンドライン引数からハノイの枚数を指定する
4.実行後にハノイがどのように移動したかを表示する※1
5.AからCに移動・AからBに移動バージョンを別ファイルで作成する
※1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4844.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C言語
[4] 期限: ([2007年08月20日提出]
[5] その他の制限: 特にありません

お力をお貸し下さい。
お願い致します。
740デフォルトの名無しさん:2007/08/11(土) 19:17:43
741デフォルトの名無しさん:2007/08/11(土) 19:23:19
>>739 きっと夏バテのせいなんだ
#include <stdio.h>
#define N 128
#define make_stack_set(str) \
int str[N], str##_top = 0; \
void str##_push(int val){ if(str##_top < N) str[str##_top++] = val;} \
int str##_pop(void){ if(str##_top > 0) return str[--str##_top];}
make_stack_set(a); make_stack_set(b); make_stack_set(c);
#define huga(a) if(i >= a##_top) printf(" "); else printf("%d ", a[i])
#define hoge(a, b) if(!strcmp(from, #a) && !strcmp(to, #b)) b##_push(a##_pop())
void print_hanoi(void){
    int i, top = (a_top > b_top && a_top > c_top) ? a_top : b_top > c_top ? b_top : c_top;
    puts("A B C");
    for(i = top - 1; i >= 0; i--){
        huga(a); huga(b); huga(c); putchar('\n');
    }
    puts("---------\n");
}
void hanoi(int n, char *from, char *work, char *to){
    if(n > 1) hanoi(n - 1, from, to, work);
    hoge(a, b); hoge(a, c); hoge(b, a); hoge(b, c); hoge(c, a); hoge(c, b);
    print_hanoi();
    if(n > 1) hanoi(n - 1, work, from, to);
}
int main(void){
    int i, n;
    scanf("%d", &n);
    for(i = n; i > 0; i--) a_push(i);
    print_hanoi();
    hanoi(n, "a", "b", "c");
    return 0;
}
742デフォルトの名無しさん:2007/08/11(土) 19:30:40
空白のことは気にするな

>>740
難しいのは如何に塔を表現するかっぽい
743デフォルトの名無しさん:2007/08/11(土) 20:14:22
[1] 授業単元: C++初級
[2] 問題文(含コード&リンク):
123,456のようなデータが代入されたchar型の配列から','で分割して、
123と456の2つのchar型のポインタもしくはchar型の配列にする
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 8.0
 [3.3] 言語: どちらでも可
[4] 期限: [2007年08月13日00:00まで]
[5] その他の制限: 文字列の分割に標準ライブラリは使ってはいけない

一日PCと睨めっこしても分かりませんでした、お願いします。
744デフォルトの名無しさん:2007/08/11(土) 20:37:20
char a[] = "123,456";
char b[4];
char c[4];

int i, j;
for (i = 0; a[i] != ','; i++) b[i] = a[i];
b[i] = '\0';
i++;
for (j = 0; a[i]; i++, j++) c[j] = a[i];
c[j] = '\0';

printf("%s\n", b);
printf("%s\n", c);
745743:2007/08/11(土) 21:09:01
おぉ、そのようにするんですね。勉強になりました、ありがとうございました。
746デフォルトの名無しさん:2007/08/11(土) 21:24:54
「標準ライブラリは使ってはいけない」って条件の宿題出されてる人ってさ
標準ライブラリを使う方法は分かってるのかな?
標準ライブラリと同じ動作をする関数を作成するような宿題は除いて。
747デフォルトの名無しさん:2007/08/11(土) 21:28:27
じゃあ標準ライブラリも使ってみよう。

sscanf(a, "%[^,],%s", b, c);
748デフォルトの名無しさん:2007/08/11(土) 21:39:16
>>743 (((744さんのが正解っぽいっけどオレも)))
#include <stdio.h>
#include <stdlib.h>
char** cut(char* src)
{
char *str, **dst;
int i, j;
size_t n;
n = strlen(src) + 1;
str = (char*)malloc(5*n);
dst = (char**)str;
str += 4*n;
strcpy(str,src);
j = 0; dst[j++] = str;
for(i = 0; str[i] != '\0'; i++) {
if(str[i] == ',') {
str[i] = '\0';
dst[j++] = &str[i+1];
}
}
dst[j] = NULL;
return dst;
}
int main()
{
char *src[256], **dst;
int i;
dst = cut("123,456");
for(i = 0; dst[i] != NULL; i++) printf("%s\n",dst[i]);
return 0;
}
749デフォルトの名無しさん:2007/08/11(土) 21:44:03
main()の"char *src[256], **dst;"は、"char **dst;"の間違いです。スンマセン
750デフォルトの名無しさん:2007/08/11(土) 21:56:40
>>746
ちょっと違うけど、よそで課題を丸投げしてるのを見たら、使用しなければいけない標準関数がいくつか
指定してあったのだけど、そのなかにmemcpy()が混じっていて、問題からすると、構造体のコピーに使えって
意図らしかった。
出題者は、代入で構造体のコピーができることをしらないんだろうな。
751739:2007/08/11(土) 22:24:23
>>739です

>>741
ありがとうございます
しかし そのまま実行するとエラーが出てしまいます。
どのように直せばよいか教えて頂きたいのですが・・・
最初に'#'と"\"がエラーとなってしまうので消しました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4845.txt
752デフォルトの名無しさん:2007/08/11(土) 22:56:31
>>751
>>741をそのままコピペする。
行末にスペースがあると思うから、取り除く。
"#"と"\"は消さずにそのままコンパイルする。
753デフォルトの名無しさん:2007/08/12(日) 01:33:22
[1] 授業単元:Cプログラミング
[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日

よろしくおねがいします。
754デフォルトの名無しさん :2007/08/12(日) 02:43:11
>>753
1.
void arr_cycle(int arr[], int len)
{
int *temp = malloc(sizeof(int)*len);
memcpy(temp, arr, len*sizeof(int));
memcpy(arr, arr+len-1,sizeof(int));
memcpy(arr+1,temp,(len-1)*sizeof(int));
free(temp);
}
755デフォルトの名無しさん:2007/08/12(日) 02:58:22
memmove()使えば、テンポラリいらないんじゃね?

#include <string.h>

void arr_cycle(int arr[], int len) 
{
  int t;
  t = arr[len - 1];
  memmove(arr, arr + 1, (len - 1) * sizeof int);
  arr[0] = t;
}

(このコードだと、lenが1以上じゃないとだめだけど)
756デフォルトの名無しさん :2007/08/12(日) 03:33:23
>>753
2,
#define EOA 0
int arr_positive(double arr1[], double arr2[])
{
double *temp;
int j;
for(temp = &arr1[0],j = 0;*temp != EOA; temp++){
if(*temp > 0.0 ){ arr2[j++] = *temp; }
}
arr2[j++] = EOA;
return --j;
}

int main()
{
double arr1[] = {1.2, -0.8, 2.3, 3.4, -1.1, EOA};
double arr2[sizeof(arr1)/sizeof(double)] = {0};
double *temp1,*temp2;

result = arr_positive(arr1,arr2);
for(temp1 = &arr1[0];*temp1 != EOA; temp1++)
printf("%lf ",*temp1);
putchar('\n');
for(temp2 = &arr2[0];*temp2 != EOA; temp2++)
printf("%lf ",*temp2);

putchar('\n');
printf("%d \n",result);
return 0;

}
757デフォルトの名無しさん:2007/08/12(日) 05:25:25
758デフォルトの名無しさん:2007/08/12(日) 06:42:45
>>737
これはなかなか難しい
759デフォルトの名無しさん:2007/08/12(日) 09:35:39
>>753
3
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
void print_m( int * mat, int nx, int ny ) {
int x, y;
for ( y = 0; y < ny; ++y, puts("") ) for ( x = 0; x < nx; ++x ) printf( "%5d ", mat[ nx * y + x ] );
}
int main( void ){
int nx = -1, ny = -1, x, y, t, *m = NULL;
scanf( "%d%d", &nx, &ny ); if ( nx < 0 || ny < 0 ) { fprintf( stderr, "wrong size %d, %d\n", nx, ny ); return 1; }
m = ( int * ) malloc( sizeof( int ) * ( ( nx + 1 ) * ( ny + 1 ) ) );
if ( !m ) { fprintf( stderr, "memory error\n" ); return 2; }
memset( m, 0, sizeof( int ) * ( nx + 1 ) * ( ny + 1 ) );
for ( y = 0; y < ny; ++y ) for ( x = 0; x < nx; ++x ) scanf( "%d", &m[ ( nx + 1 ) * y + x ] );
print_m( m, nx + 1, ny + 1 ); puts("");
for ( y = 0; y < ny; ++y ) for ( x = 0; x < nx; ++x ) t = m[ ( nx + 1 ) * y + x ], m[ ( nx + 1 ) * y + nx ] += t, m[ ( nx + 1 ) * ny + x ] += t;
print_m( m, nx + 1, ny + 1 ); puts("");
free( m );
return EXIT_SUCCESS;
}
760デフォルトの名無しさん:2007/08/12(日) 09:47:40
>>753
4.
#include <stdio.h>
#define N 10
void f( int arr[], int len, int a0, int r ){
int i;
arr[ 0 ] = a0;
for ( i = 0; i < len - 1; i++ ) arr[ i + 1 ] = arr[ i ] * r;
}
int main( void ){
int i, r = 3, a0 = 10, arr[N] = {0};
f( arr, N, a0, r );
for ( i = 0; i < N; i++ ) printf( "%d ", arr[ i ] );
puts("");
return 0;
}
761751:2007/08/12(日) 11:17:55
>>752
>>757

すみません ありがとうございます
実行出来ました。
ただソースで分からない所があるのでもう少し調べてから
質問させて頂いてもよろしいですか?

762デフォルトの名無しさん:2007/08/12(日) 18:13:54
>>761 申し訳ないですが、こちらに変更してください。int のが扱いやすかった。
#include <stdio.h>
#include <string.h>
#define N 128
static int stack[3][N], top[3] = {0}, line;
static void push(int index, int val){ if(top[index] < N) stack[index][top[index]++] = val;}
static int pop(int index){ return top[index] > 0 ? stack[index][--top[index]] : 0;}
static void print_hanoi(void){
    int i, j;
    puts("A  B  C");
    for(i = line - 1; i >= 0; i--){
        for(j = 0; j < 3; j++){
            if(top[j] <= i) printf("   ");
            else printf("%d  ", stack[j][i]);
        }
        putchar('\n');
    }
    puts("-------");
}
void hanoi(int n, int from, int work, int to){
    if(n > 1) hanoi(n - 1, from, to, work);
    push(to, pop(from)), print_hanoi();
    if(n > 1) hanoi(n - 1, work, from, to);
}
int main(void){
    int i, n;
    scanf("%d", &n);
    line = n;
    for(i = n; i > 0; i--) push(0, i);
    print_hanoi(), hanoi(n, 0, 1, 2);
    return 0;
}
763デフォルトの名無しさん:2007/08/12(日) 18:54:40
>>737
合ってるかどうかチェックするための問題&解答が欲しいところ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4848.c
764デフォルトの名無しさん:2007/08/12(日) 20:35:17
>>763
結果は正しいと思うが 737 の仕様では N = 200 まで来ることになっているので
多分終わらないと思われる。たとえば N = 14 でも次のは結構時間がかかる。

14
15 8 14
8 13 8
12 15 11
13 20 1
11 15 14
3 14 9
10 15 15
14 6 7
18 2 16
9 5 12
17 18 16
10 4 4
3 3 7
1 14 4
765デフォルトの名無しさん:2007/08/12(日) 21:02:54
>>763
それ、N=200 とかでも試してみた?
766763:2007/08/12(日) 21:12:24
おk
枝刈りに挑戦してみる
>>763 のコードは同じ条件を何度も評価してる

A 1 1 1
B 2 2 2
C 3 3 3

の時
B[ A ] -> C[ B[ A ] ]
C[ B ] -> C[ B[ A ] ]
とか
767デフォルトの名無しさん:2007/08/12(日) 21:34:30
>>766
再帰全探索だと N = 200 は辛いでしょうよ。

参考のため再帰全探索+枝狩りのコード。N = 20 程度が限界。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4849.cpp
768デフォルトの名無しさん:2007/08/12(日) 23:10:46
>>763
問題&解答を作ってみた。
結果が間違っていたら勘弁・・・

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4850.lzh 
769768:2007/08/12(日) 23:12:27
770763:2007/08/13(月) 00:17:07
>>769
thx

ちょっとした枝刈で多少は早くなったけど N=200 は絶望的。
N=14 (02_input.txt) の解を出すまでの所要時間を 1/30 にできた程度。
根本的に考え直さねば…
771763:2007/08/13(月) 10:17:10
>>737 の問題
N=200 の時 >>769 と同じ答えを 1 秒以内に得ることはできた。
最良に近い解だろうということは間違い無いが、
残念ながらこれが正しい解かどうか確認する方法が分からない orz
どうやって確認すればいいのか、えらい人教えて下さい

アルゴリズム
1.体積の小さな箱から順にソートする
2.それぞれの箱に対する子供の候補をすべて列挙する (変数ChildMapに格納)
3.子供の候補が一つだけの時は無条件にその箱に入れる
4.3.によって子供の候補が減るので、変化が無くなるまで3.の繰り返し
5.小さな箱から順に子供の候補のうち最大の体積を持つものを箱に入れる
以上

4.までは間違い無いが、5.があやしい

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4851.c
772デフォルトの名無しさん:2007/08/13(月) 10:41:47
>>771
多分次のケースで撃墜。この入力に対する出力は 797 のはずだけれど
あなたのプログラムは私の手元で 819 と出力した。
5
9 6 1
8 1 4
5 9 9
10 9 4
3 4 7

ちなみに 11_input.txt, 12_input.txt, 13_input.txt についても
それより小さな解が見つかっている。私の現在の方法でも最適保証は無いけれど。
773 ◆iWqCuv/3go :2007/08/13(月) 11:00:54
[1] 授業単元: システムプログラム
[2] 問題文(含コード&リンク):
filetat: 引数として1つ数字を取る.

最初に自身のプロセスIDを表示した後に,
カレントディレクトリから下の階層にあるファイルを探し,
数字で示した時間以内に変更したものを表示する.


ただし,
Ctrl-C で停止する際に,
Interruped!
と表示して終了するようにせよ.
また,実行中に

kill -USR1 pid (pidは, filestat のプロセスid)

とした場合,ファイル名とともに変更日時も表示せよ.
形式は問わない.

[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2007年8月20日まで] )
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
制限は特にありません

よろしくお願いします、助けてください。
774デフォルトの名無しさん:2007/08/13(月) 11:42:36
>>773
Nativeなwindows環境で動かすの?
それとも、Cygwinの中でかな?
775 ◆iWqCuv/3go :2007/08/13(月) 12:05:35
>>774
家にはbolandしかありませんが、学校にはmacがあるのでそちらでも大丈夫です、よろしくお願いします。
776デフォルトの名無しさん:2007/08/13(月) 12:07:28
>>773 >>775
プロセスIDなどの概念はOSに依存するから
OSを特定してくれないと対処できないよ
777 ◆iWqCuv/3go :2007/08/13(月) 16:25:37
>>776
Mac OS XのTerminalでお願いします。
778デフォルトの名無しさん:2007/08/13(月) 16:30:27
>>773
引数で渡す数字は秒とか分とかの指定はあるの?
「実行中に kill〜ファイル名とともに変更日時も表示」とあるけど、
以後の表示スタイルを変えるでいいの?
779 ◆iWqCuv/3go :2007/08/13(月) 20:20:53
>>778
課題の問題分をそのままコピペしたので、書いてある条件を満たしていればたぶん大丈夫です。
指定がないので秒でいいはずです。
表示スタイルというのがよくわからないんですが、問題の内容になっていれば大丈夫です。
いきなり出された課題で、この問題文以外に全く情報がないんです・・・
よろしくお願いします。
780デフォルトの名無しさん:2007/08/13(月) 20:29:15
[1] 授業単元: シミュレーション&モデリング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 4854.zip
[3] 環境
 [3.1] OS: Linux
 [3.2] g++ 3.4
 [3.3] 言語: C++
[4] 期限: [2007年09月01日まで]
[5] その他の制限: (質問と関係ないですが) Qt4というGUIインターフェイスを使っています

'changeNode()'というメソッドを呼びたいんですが
うまく呼べなくて困っています。

'changeNode()'は'addNode()'というメソッドを基にして作りました(それらは'GraphScene.cpp'の中にあります)。

'addNode()'は「入力/出力ポートを持つノードを作成するメソッド」です。
'changeNode()'は「既に作成されたノードに新しい入力ポートを追加するメソッド」です
(厳密には「追加された入力ポートを描画するメソッド」です)。

'addNode()'で作成された'NodeGraphicsItem'のオブジェクトに
'changeNode()'の中でアクセスしてポート数を増やしたいんです。
ただ、勉強不足なものでどうすればよいのか分かりません…。
'NodeGraphicsItem.cpp'の中で'changeNode(this)'と呼べば
現在の'NodeGraphicsItem'のオブジェクトで呼べると思ったんですけど
「オブジェクトがない呼び出し」とコンパイルエラーが出ます。
'NodeGraphicsItem.cpp'の中のメニューで
「ポートを増やす」を選択するとイベントが発生するので
そこから'GraphScene.cpp'を呼ぶ必要があります。

続く…
781780: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
782デフォルトの名無しさん:2007/08/13(月) 20:41:14
よくわからんが、コンパイラが言ってる通り
changeNode()は非スタティックメンバ関数なのに、スタティックメンバ関数のように
呼び出しているのが悪いんだろう
783デフォルトの名無しさん:2007/08/13(月) 21:16:15
>>773
確認する環境が無いので、合ってるかどうか自分で確認してくれ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4855.c
784 ◆iWqCuv/3go :2007/08/13(月) 21:27:40
>>783
家にmacがないので確認できたら報告します、ありがとうございました!
785780:2007/08/13(月) 21:29:27
>>782
ありがとうございます。
では、具体的にはどういう風に対処すればいいんでしょうか?

NodeGraphicsItemとNodeの情報を持っているのはNodeGraphicsItem.cppなので
NodeGraphicsItem.cppの中で

NodeGraphicsItem *currentNodeGraphicsItem = new NodeGraphicsItem( _node );
GraphScene::changeNode( currentNodeGraphicsItem );

…とやっても同じように「オブジェクトがない呼び出し」とエラーが出ます。

すべてのファイルをうぷできなくてすみません。
全部で500個くらいあります…権利の問題も(ry
他に頼るところがありません。どうかヒントだけでもお願いします。
786761:2007/08/13(月) 21:31:18
>>762

遅くなって申し訳ございません。
動作確認致しました。
分からない部分についてはもう少し粘ってみます
ありがとうございました。
787デフォルトの名無しさん:2007/08/13(月) 21:37:26
>>785
methodがstaticじゃないんなら

Class::method()
じゃなくて
object.method()
とか
pointer->method()
とか書かないとだめ
つまりクラスGraphSceneのインスタンスが必要
788780:2007/08/13(月) 21:46:05
>>787
ありがとうございます。
なるほど!
ちょっと自分でやってみます。
後で(明日とかに)また来るかもしれません。m(__)m
789デフォルトの名無しさん:2007/08/13(月) 22:01:00
つーかその辺C++の基本中の基本なので
もっぺん教科書読むなりして勉強しなおせ
790デフォルトの名無しさん:2007/08/14(火) 10:47:54
>>784
なんで>773にはWindowsと書いているのにMacが必要なの?
791デフォルトの名無しさん:2007/08/14(火) 10:52:53
実行はWindowsだけど出力先がMacという特殊環境なんだと予想
792デフォルトの名無しさん:2007/08/14(火) 11:02:33
学校のパソコンはWindowsが入ってるIntelMacと予想
793デフォルトの名無しさん:2007/08/14(火) 11:02:45
>>790
開発がwindowsで実行がUnixなんじゃない?
794デフォルトの名無しさん:2007/08/14(火) 11:16:10
んなアホな。そもそも自分の使っている環境も判らずに宿題丸投げしているのか?
795デフォルトの名無しさん:2007/08/14(火) 11:19:41
それが丸投げクオリティ
796デフォルトの名無しさん:2007/08/14(火) 11:27:21
>>783 のコードはコンパイラの最適化によって
グローバル変数Fmtの変更がうまく反映されないかもしれない。

変更
printf(Fmt, filename, ctime(&filestat.st_mtime));

printf(GetFmt(), filename, ctime(&filestat.st_mtime));

関数の追加
char *GetFmt(void){return Fmt;}

うまくいかないときは最適化オプションをはずして
上記の変更で動くようになるかもしれない。

確実にグローバル変数を読みにいくようにする正式な方法は、知らない。
797デフォルトの名無しさん:2007/08/14(火) 11:32:12
volatileとか
798デフォルトの名無しさん:2007/08/14(火) 13:46:29
kill使うから多分unixだと思う
799デフォルトの名無しさん:2007/08/15(水) 01:40:17
>>772
>>769 より小さな解を確認した。

現在のところ見つけた最小解は
11_input.txt Volume:73949529
12_input.txt Volume:67522871
13_input.txt Volume:67164434
となっている。

>>771 のソートに使う関数を直方体の形状も評価するように変更しただけの
イカサマっぽい方法で見つけたので、おそらく最適解ではない

評価関数 (但し x <= y <= z にソート済みとする)
x*y*z

x*y*z/(x*9+y*3+z)
800 ◆iWqCuv/3go :2007/08/15(水) 01:42:14
773です。
家のPCはwindowsなんですが、イマイチコンパイラが使いこなせていなくて、そのときにOSを聞かれたので学校のMACでやったほうがやりやすいと思ってMACに変えたんです・・・
わかりにくくしてしまってすみませんでした。
801デフォルトの名無しさん:2007/08/15(水) 02:23:16
>>799
11_input.txt: 72994947
12_input.txt: 66875986
13_input.txt: 66881085

待てばもっといい解が出るかもしれんけどね
802デフォルトの名無しさん:2007/08/15(水) 03:26:38
>>799
少し待ったら少しマシな解が出た:
11_input.txt: 72692471
12_input.txt: 66659339
13_input.txt: 66586660

ちなみにアルゴリズムは大雑把に言うと >>771
5.の「小さい箱から」を「極小な箱から」に読み替え,
複数ある極小要素から乱数で選ぶモンテカルロ法。


そろそろ厳密解法を考えるのに疲れてきた。
出題者の解答を待ちたいところだ。
803デフォルトの名無しさん:2007/08/15(水) 06:23:40
>>802
モンテカルロ法ってことは、
メタヒューリスティクスな解法を使っているってこと?

一応回答期限は17日までだからもうちょいがんばろうぜ。
そんな俺はとりあえずバックトラックで書いてみたら、
深くもぐりすぎてオーバーフロー\(^o^)/
804デフォルトの名無しさん:2007/08/15(水) 10:02:27
>>800
依頼した宿題はOS固有の機能を利用している。だから、どういう環境で動かしたいのかで作りが変わる。
805デフォルトの名無しさん:2007/08/15(水) 10:50:42
>>803
スタックサイズを増やしてもダメ?
806デフォルトの名無しさん:2007/08/15(水) 13:45:34
>>802,803
いや、いま問題よんだけどアルゴリズム違わないかなぁ
例えば体積の大きい順に箱をソートしておいてですね
 A=一番大きい箱
 B=Aの中に入る一番大きい箱
 A=B
 Bを配列から削除
を繰り返すのを一操作として、
さらにそれを繰り返せばいいんじゃないかと…
807デフォルトの名無しさん:2007/08/15(水) 13:50:24
3次元の箱にその考え方は通用しないだろ。
808デフォルトの名無しさん:2007/08/15(水) 14:02:12
ゴメン 大きい順じゃなくて小さい順にソートだ
夜にでもコードうプっとくよ。
809デフォルトの名無しさん:2007/08/15(水) 14:14:11
ところで>>769のうpしたパターンと答えは同じだった?
810デフォルトの名無しさん:2007/08/15(水) 14:58:10
811デフォルトの名無しさん:2007/08/15(水) 14:58:41
812デフォルトの名無しさん:2007/08/15(水) 15:36:26
>>806
貪欲性は成り立たないよ

例:
4 4 3
4 4 2
3 3 1
2 2 2

体積最大は 4 4 3 これに入る体積最大は 3 3 1
ただ、これを入れちゃうと残りがばらばらになって
結果の値は 48+32+8 = 88

一方,最適詰め込みは 4 4 3 に 2 2 2 を詰めて
4 4 2 に 3 3 1 を詰めること。これで 48+32 = 80 になる。
813デフォルトの名無しさん:2007/08/15(水) 15:48:21
>>809
769よりも小さくなってるんだから同じわけないでしょ
814デフォルトの名無しさん:2007/08/15(水) 16:02:22
>>812 体積順にソート後、一個づつ取り出して
222
222 331
222 331 442
222 442
222 442 443
442 443
ってことです。小さい順だったってのはそういうことで
体積順に処理すればn番目までの答を
n+1番目までの答を求めるのに使えるところがたぶん肝で
貪欲法を言いたかったのではないです
815デフォルトの名無しさん:2007/08/15(水) 16:14:36
その記述の意味が全く分からないんだが
もっと詳しく説明してくれるかい?
816デフォルトの名無しさん:2007/08/15(水) 16:48:38
例えばテーブル上に最小の組み合わせ
224 226 333
が既に出来てるとき
347の箱を受け取って 追加しろといわれたら
224 333 347
でいいに決まってるわけです
しかし113とか受け取ると困るわけです。
ドコかの箱の中に112とか入ってるかもしれませんから
既に作った組み合わせを壊さないでよい条件は、
体積の小さい方からの逐次処理だろうと。
先の記述はその作業テーブルの状態です
817デフォルトの名無しさん:2007/08/15(水) 17:14:54
たとえばその例では 347 は 224, 226, 333 のどれでも
包含できるわけだけど、何で 333 を選択したの?
818デフォルトの名無しさん:2007/08/15(水) 17:34:52
ごめん、ひどく誤読した。
包含できる最小のもの選んだということでよい?
そうであれば次のケースで破綻する。
3
1 1 1
1 1 2
2 2 3
819817:2007/08/15(水) 17:45:54
ごめん、まだ誤読していた。
包含可能な体積最大の 226 を置き換えたってことでよい?
820デフォルトの名無しさん:2007/08/15(水) 18:03:48
そうです。あ、でも極端に長い箱とかダメぽかw。探索も必要でした
体積でソートするのは間違ってないだろうけど
そうすると既出パターンはハッシュに登録しないといけないから
マンドくさいなあ
821817:2007/08/15(水) 18:16:31
>>820
ハッシュって、どれに置き換えたかを覚えるということ?
何にせよ、まとも探索をすると計算量が O(2^N) になるから
N = 200 ではとても終わらないと思われる。
(そこを探索せずにモンテカルロした、というのが >>802
822デフォルトの名無しさん:2007/08/15(水) 18:17:47
題意としては、厳密解でねーとだめだから、
探査しにいかねーとだめだろ。
823デフォルトの名無しさん:2007/08/15(水) 18:29:41
探索でN=200は終わる気がしないんだが
824デフォルトの名無しさん:2007/08/15(水) 18:48:02
問題文には、死ぬまでにプログラムの実行が終わらなければならないとは
書いてないからいいんじゃね
825デフォルトの名無しさん:2007/08/15(水) 19:05:16
64段のハノイの塔を思い出した。
826737:2007/08/15(水) 20:49:24
なんか想像以上に持ちこたえてるので,自分の考えてた解法が正しいのか心配になってきた.
とりあえずブラックボックスな検証用としてjavaの実行ファイルをあげとく.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4857.zip

ロダの都合でzipとしてるけど実体はjarファイルなので,Box.jarなどに改名すれば
そのまま実行できるはず.

読み込みは標準入力から行うので,ファイルは

java -jar Box.jar < input.dat

のようにリダイレクトで入力.また,

java -jar Box.jar -v < input.dat

のようにオプションで-vをつけると,詰め方の詳細が表示される.
実行環境:1.5以降
827デフォルトの名無しさん:2007/08/15(水) 21:06:08
>>813
それが正しいとも言い切れないから
828デフォルトの名無しさん:2007/08/15(水) 21:17:34
>>827
出たパターンが正等なのは当然チェックしてあります。

>>826
結果は正しそうですね(小さい入力で一致を確認)。
もう少しまじめに考えてみます。
829デフォルトの名無しさん:2007/08/15(水) 21:42:10
>>828
おう、気の済むまでやっててな
830デフォルトの名無しさん:2007/08/15(水) 22:13:08
>>829
応援ありがとう
831デフォルトの名無しさん:2007/08/16(木) 02:41:25
とりあえず 826 と同じ出力を出すプログラムは書けた。
アルゴリズムも多分同じだと思う(再割り当てする貪欲だよね?)

いやー勉強になった。 >>737 ありがとう。
832デフォルトの名無しさん:2007/08/16(木) 03:05:40
再割り当てする貪欲ってDFSとは違うもの?
833831:2007/08/16(木) 03:34:30
少なくとも私のはほとんど探索はしていないよ。
雰囲気としては二部グラフ最大マッチングに近いことをした。
834デフォルトの名無しさん:2007/08/16(木) 13:06:41
835デフォルトの名無しさん:2007/08/16(木) 20:34:20
2
1 1 3
2 3 3
斜めにしたら入った
836デフォルトの名無しさん:2007/08/16(木) 21:42:19
[1] C言語
[2] 問題文
・以下の3つの関数を自作する。

文字列s2をs1にコピーする。戻り値は、コピーした文字列の長さ
int mystrcpy(char *s1, const char *s2)

文字列s1とs2を比較し、s1のほうが大きければ1、s2のほうが大きければ-1、同じなら0を返す
int mystrcmp(const char *s1, const char *s2)

文字列s1と文字列s2の内容を入れ替える
void swapstring(char *s1, char *s2)

・作成した3つの関数を使い5つの文字列(最大文字列長20字)を画面上で入力させ、
 それらを昇順で表示させるアプリケーションを作成する。
 最後に終了するかどうかを入力させ、終了しなければまた入力から繰り返す。
[3.1] XP
[3.2] VC 6.0
[3.3] C
[4] 期限8/20

宜しくお願いします。
837デフォルトの名無しさん:2007/08/16(木) 21:56:03
ガイシュツ。過去ログ見れ
838デフォルトの名無しさん:2007/08/17(金) 03:09:13
>>837
答える気がないならこんなスレに来なくて良いよ
あっ、あんたに答える実力がないのか、ならなおさらこのスレにはあんたは不要だ
赤紙、解雇通達しておくから、とっととこのスレから出ていきな、ふっ
839デフォルトの名無しさん:2007/08/17(金) 03:21:22
釣り乙。質問者の迷惑だからやめようね。
840デフォルトの名無しさん:2007/08/17(金) 03:39:17
>>837 質問者の迷惑だからやめようね。
841デフォルトの名無しさん:2007/08/17(金) 03:56:08
>>837 みたいなレスは要らないよな、既出って言うなら参照してやれよ。
842デフォルトの名無しさん:2007/08/17(金) 04:09:34
>>837-842
邪魔
843デフォルトの名無しさん:2007/08/17(金) 04:53:20
釣り乙。回答者の迷惑だからやめようね。
844デフォルトの名無しさん:2007/08/17(金) 04:59:30
釣り乙。回答者は居ない。
845デフォルトの名無しさん:2007/08/17(金) 05:06:24
確保されてるメモリ領域が足りない場合とかめんどっちーな
846デフォルトの名無しさん:2007/08/17(金) 06:02:05
>>831
実際 737 は最小費用流問題に帰着できるんだな。

「包含可能」を半順序と見なし、体積を重みと考えたとき、
これは minimum-weight set of chain problem と呼ばれる問題で書け、
以下の論文で最小費用流で解けることが示されている。
(ちなみにこの論文の本題は一つの箱の中に詰め込める個数に
 上界を与えたときの問題で、NP-Hard 化する。)
http://www.econ.kuleuven.be/fetew/pdf_publicaties/0538.pdf
847デフォルトの名無しさん:2007/08/17(金) 07:21:27
英文論文か・・・

がんばってよむわ。。。。
848780:2007/08/17(金) 07:29:10
亀ですが

>>787
出来ました。
ありがとうございました。
849デフォルトの名無しさん:2007/08/17(金) 10:07:39
>>838
クダスレじゃないんだから、事前に検索する位のマナーはいるだろ
ほとんど同じ問題に回答したことあるから、折れはやんね
つーかお前やれw
850デフォルトの名無しさん:2007/08/17(金) 10:13:54
>>849
答える気がないならこんなスレに来なくて良いよ
あっ、あんたに答える実力がないのか、ならなおさらこのスレにはあんたは不要だ
赤紙、解雇通達しておくから、とっととこのスレから出ていきな、ふっ
851デフォルトの名無しさん:2007/08/17(金) 10:17:10
>>849
君、戦力外通告だから、とっとと退部してくれ
852デフォルトの名無しさん:2007/08/17(金) 10:28:43
>>836
別に制限があるって分けじゃないんだな。


int mystrcpy(char *s1, const char *s2) {
return strcpy(s1, s2):;
}

int mystrcmp(const char *s1, const char *s2) {
return strcmp(s1, s2);
}

void swapstring(char *s1, char *s2) {
-- 中略 --
return;
}
853デフォルトの名無しさん:2007/08/17(金) 10:40:41
>>850
>>851
質問者必死だなw

〉答える気ないならこんなスレ来なくていい
お前もな
854デフォルトの名無しさん:2007/08/17(金) 10:45:27
>>853
答える能力もないガキは失せろつってんだよ
855836:2007/08/17(金) 10:48:50
信じてもらえないでしょうしトリップ付けなかったんで自業自得なんですがここに書き込むのは質問以来です。

>>837
質問前に過去ログで昇順、アプリケーション、5つの文字列等で検索はしたのですが探し方が下手なのか見つかりませんでした。

ご迷惑をお掛けした様なので質問を取り下げます。すみませんでした。
856デフォルトの名無しさん:2007/08/17(金) 10:50:43
gdgdうるさい夏厨がいるのか知らんが、宿題に答える気がないなら失せろ。
お前みたいな役立たずはここは求めてないんだよ
857n:2007/08/17(金) 11:03:29
グラボに接続されているモニタが、ワイドモニタか、4:3モニタか調べる方法ってあるの?
DirectX or Win32API 何でもいいんだけど。
858デフォルトの名無しさん:2007/08/17(金) 11:03:35
>>836 >いろいろな解法があるんだから、いろいろやってみればいいじゃん
#include<stdio.h>
#include<string.h>
#define MAX(a, b) ((a)>(b)?(a):(b))
#define SIGN(a) ((a)>0?1:((a)<0?-1:0))
int mystrcpy(char *s1, const char *s2){
int i=0;
for(i=0;(s1[i]=s2[i]);i++);
return i;
}
int mystrcmp(const char *s1, const char *s2){
while(*s1 && *s1==*s2) s1++,s2++;
return SIGN(*s1-*s2);
}
void swapstring(char *s1, char *s2){
char c; int len, i;
len=MAX(strlen(s1), strlen(s2));
for(i=0;i<len+1;i++) c=s1[i],s1[i]=s2[i],s2[i]=c;
}
int main(void){
char temp[20+2], buf[5][20+2]; int i, j;
while(1){
for(i=0;i<5;i++) fgets(temp, sizeof(temp), stdin), mystrcpy(buf[i], temp);
for(i=0;i<5-1;i++)
for(j=0;j<5-1-i;j++)
if(mystrcmp(buf[j], buf[j+1])>0) swapstring(buf[j], buf[j+1]);
for(i=0;i<5;i++) printf("%s", buf[i]);
printf("Continue ? (y/n) : "); fgets(temp, sizeof(temp), stdin);
if(temp[0]!='y' && temp[0]!='Y') break;
}
return 0;
}
859デフォルトの名無しさん:2007/08/17(金) 11:17:05
>>857
これより詳しいことは当該スレへどうぞ
#include<windows.h>
#include<stdio.h>
int main(void){
printf("%dx%d\n", GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
return 0;
}
860n:2007/08/17(金) 11:33:51
>>859
ありがとー
861837:2007/08/17(金) 11:45:28
ワルイ。過去ログにswap見つからなかった
ググればあるけど
ttp://www.geocities.jp/ky_webid/c/030ans.html
ttp://ybbs.admin-man.net/8500/0002/00004543.htm
862デフォルトの名無しさん:2007/08/17(金) 11:48:23
861は、>>836

>>856
本来宿題を勝手に解いて楽しむスレなんだから、
同じような問題なんども投稿されてもつまらないってだけ
質問者の役に立つためにやってるわけじゃない
ボランティアじゃねえよ 何を勘違いしてる
863デフォルトの名無しさん:2007/08/17(金) 11:53:24
>>862
お客は大切にしないとな。
864デフォルトの名無しさん:2007/08/17(金) 11:55:11
>>860
マルチ死ね
865デフォルトの名無しさん:2007/08/17(金) 12:08:27
>>864
お前が市ね、書き込んだ時間を見ろ
866836:2007/08/17(金) 12:18:55
>>858
有難うございます・・・!本当に助かりました。

>>861
いえ、わざわざ確認有難うございます。
867デフォルトの名無しさん:2007/08/17(金) 12:32:50
>>862
要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
868デフォルトの名無しさん:2007/08/17(金) 12:59:46
>>867
いつから監督になったんだよ。そんなに凄いやつなのかお前はw
折れの発言否定するなら、このスレは過去ログ検索不要
ってことになるけど選手の方はそれでおkなの?
869デフォルトの名無しさん:2007/08/17(金) 13:09:55
いつもの奴を相手にすんなよ
870デフォルトの名無しさん:2007/08/17(金) 13:14:18
定期的に出てきてこの人暴れるよね
871デフォルトの名無しさん:2007/08/17(金) 13:15:14
人じゃない
872デフォルトの名無しさん:2007/08/17(金) 13:49:33
[1] プログラミング基礎
[2] 段数を入力して、二等辺三角形を「*」で表示するプログラムを書く。
例 段数3
*
***
*****

申し訳ございません。二等辺三角形に出力できません……。直角三角形ではなく、二等辺三角形です。
       
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン:ちょっと分かりません
 [3.3] 言語: C
[4] 期限:8月24日まで
[5] 配列まで学習 なお、発展問題として、逆二等辺三角形
例 段数3
*****
***
*
を出力せよという問題もあります。できたら両方(片方でも可)解いていただければうれしいです!
お願いします。
873デフォルトの名無しさん:2007/08/17(金) 13:59:05
二等辺三角形?ちゃんと例を書いてくれないとよく分からないなぁ(笑)
874デフォルトの名無しさん:2007/08/17(金) 14:04:22
>>872
#include <stdio.h>
int main(void)
{
   int n, i, j;

   printf("段数:");
   scanf("%d", &n);

   /*上向き*/
   for(i=0; i<n; i++) {
      for(j=0; j<n-1-i; j++) putchar(' ');
      for(j=0; j<i*2+1; j++) putchar('*');
      putchar('\n');
   }
   /*下向き*/
   for(i=0; i<n; i++) {
      for(j=0; j<i; j++) putchar(' ');
      for(j=0; j<2*(n-i)-1; j++) putchar('*');
      putchar('\n');
   }

   return 0;
}
875デフォルトの名無しさん:2007/08/17(金) 14:14:11
>>873

すいません・・・

>>874

はや!!
ありがとうございました!
876デフォルトの名無しさん:2007/08/17(金) 16:29:55
>>873
意地(笑)
877デフォルトの名無しさん:2007/08/17(金) 17:21:49
初心者用の参考書にも載っていると思うんだけど

878デフォルトの名無しさん:2007/08/17(金) 19:01:41
>>872
多分自作関数を作るレベルじゃないだろうけど…
#include<stdio.h>

void print_n_char(char print_char, int num)
{
int i;

for(i=0;i<num;i++) putchar(print_char);
}

int main(void)
{
int i, n;

printf("段数");
fflush(stdout);
scanf("%d", &n);
for(i=0;i<n;i++){
print_n_char(' ', n-1-i);
print_n_char('*', i*2+1);
putchar('\n');
}
putchar('\n');
for(i=0;i<n;i++){
print_n_char(' ', i);
print_n_char('*', (n-i)*2-1);
putchar('\n');
}
return 0;
}
879デフォルトの名無しさん:2007/08/17(金) 19:11:32
>>872
#include<stdio.h>

int main(void)
{
char buf[]="**********************************************************************";
int i, n;

printf("段数");
fflush(stdout);
scanf("%d", &n);
if(n>sizeof(buf)/sizeof(buf[0])-1) return 1;
for(i=0;i<n;i++) printf("%*.*s\n", n+i, i*2+1, buf);
for(i=0;i<n;i++) printf("%*.*s\n", n*2-1-i, (n-i)*2-1, buf);
return 0;
}
880デフォルトの名無しさん:2007/08/17(金) 23:45:27
>>879をヒントにさせてもらった
#include<stdio.h>
#include <stdlib.h>
int main(void)
{
char *p;
int n,i;
printf("段数");
fflush(stdout);
scanf("%d",&n);
p=(char*)malloc(n*3);
memset(p,' ',n-1);
memset(p+n-1,'*',2*n);
for(i=0;i<n;i++) printf("%.*s\n",n+i,p+i);
for(i=n-1;i>= 0;i--) printf("%.*s\n",n+i,p+i);
return 0;
}
881880:2007/08/18(土) 00:37:21
いかん、free(p)してないorz
882デフォルトの名無しさん:2007/08/18(土) 05:03:42
>>868-871
要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
883デフォルトの名無しさん:2007/08/18(土) 05:08:23
やだね
お前が要らん
884デフォルトの名無しさん:2007/08/18(土) 09:50:58
885デフォルトの名無しさん:2007/08/18(土) 10:37:51
>>883
要らんレスするなっつってんだよボケ夏厨、お前は戦力外通告。とっとと失せな
886デフォルトの名無しさん:2007/08/18(土) 10:46:03
ほんとにツンだなあw
887デフォルトの名無しさん: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)
888デフォルトの名無しさん:2007/08/18(土) 13:43:28
CHogehoge::Thread_Mainでいいんじゃないの?
889デフォルトの名無しさん:2007/08/18(土) 13:44:28
>>887
これ宿題なの?

以前やった記憶で書くから動作確認はしてない。

とりあえずVCから直接CreateThreadは使わないこと。 _beginthreadを使おう。
m_Handle = _beginthread(Thread_Main, 0, this);

スレッドのエントリーポイントはstaticで作り、引数でthisを伝播させるのがポイント。
static DWORD WINAPI CHogehoge::Thread_Main(void* in_Param) {
 CHogehoge *hoge = (CHogehoge *) in_Param;
 return hoge->Thread_Func(); // _endthread は自動で呼び出されるのでここでは不要。
}

int Thread_Func() { 〜やりたい処理を書く〜 }
890デフォルトの名無しさん:2007/08/18(土) 15:41:07
>>887
メンバ関数は第1引数にthisポインタを受け取るから
それだと2引数の関数を1引数の関数にキャストすることになる
889の人はその辺をキチンと処理してる。
891デフォルトの名無しさん:2007/08/18(土) 17:00:45
>>885
やだねー
お前が失せなー
892デフォルトの名無しさん:2007/08/18(土) 23:33:33
いや、ここは俺が消えるべきではないか?
893デフォルトの名無しさん:2007/08/18(土) 23:53:39
いやいや俺が消えるよ
894885:2007/08/19(日) 00:04:40
俺が悪かったすまn
895891:2007/08/19(日) 00:05:11
いやいや、俺が悪かった
ごめんぽ
896デフォルトの名無しさん:2007/08/19(日) 00:06:23
なんという仲直り・・・この二人は間違いなく近いうち結婚する
897デフォルトの名無しさん:2007/08/19(日) 03:54:26
YES,NO枕が登場!
898デフォルトの名無しさん:2007/08/19(日) 04:43:10
>>891-897
要らんレスするなっつってんだよくそみそ、お前らは毛包外通告。とっとと脱ぎな
899デフォルトの名無しさん:2007/08/19(日) 15:28:38
ウホ いい男
900898:2007/08/19(日) 15:50:16
ツンデレなんだ。すまんな。ウホッ
901デフォルトの名無しさん:2007/08/19(日) 16:18:50
[1] 授業単元: プログラミング演習(仮)
[2] 問題文(含コード&リンク):
平面上に n 個の点が与えられる ( n ≦ 200 とする )。
それらの間に n-1 本の互いに交わらない線分を引き、
すべての点が繋がるようにしたい。

そのような線分の引き方は一通りとは限らない。
そこで、条件を満たすいろんな線分の引き方をしたときの線分の長さの合計を、
小さい順に全部、小数点以下一桁まで表示せよ。同じ長さの引き方が
複数あった場合は、各引き方に対して一回ずつ出力すること。

入力は 1 行目は点の数 n、それ以降 n 行にわたって点の座標が並べられたものとする。
例:
4
0.0 0.0
0.0 1.0
2.0 1.0
2.0 0.0
出力:
4.0
4.0
5.0
5.0
[3] 環境・言語:問わず
[4] 期限: 8月23日
[5] その他の制限: 他の課題を優先
902デフォルトの名無しさん:2007/08/19(日) 16:56:36
>>901
とりあえずサンプル出力が間違ってる。
4点を順にA(0,0), B(0,1), C(2,1), D(2,0) とした場合に
A-B-C-D(4.0), B-C-D-A(5.0), C-D-A-B(4.0), D-A-B-C(5.0)
の分は挙げられているが、他にも例えば
A-B-D-C, B-A-C-D (2+√5=4.2)
A-D-B-C, D-A-C-B (4+√5=6.2)
の出力がされてない。
903901:2007/08/19(日) 17:21:06
>>902
すみません、そのとおりです。例は無視してください。
904デフォルトの名無しさん:2007/08/19(日) 22:41:52
>>901
線分の引き方の数が多項式で収まりません><

N=2kとする.
各点を(x, 0), (x, 1)(但しx = 1,2,...,k)とする.
各xについて(x, 0), (x, 1)を繋ぐとk本の線分ができる.
隣り合う線分の繋げ方は4通り(一筆書きなら2通り)で,繋げるべき箇所が
独立にk-1個存在する.
したがって,少なくとも2^(k-1)通りの線分の引き方が存在する.

ジェネレータ作れってことかな
905901:2007/08/19(日) 23:57:53
>>904
そういうことです
906デフォルトの名無しさん:2007/08/20(月) 12:31:14
>>901
いくつか質問

線分が重なる時はどうする?
A(0.0, 0.0) B(1.0, 1.0) C(2.0, 2.0) D(100.0, 100.001) E(0.0, 2.0) F(2.0, 0.0)

A-B と A-C は重なる -> 交差?
A-B と A-D は重なりそう -> 交差っていうのはどの範囲まで?
A-B と E-F は端点が重なる -> 交差?

座標の有効桁数は何桁?
同一の座標を示すデータは無い?
907901:2007/08/20(月) 12:55:34
>>906
・二つの線分が重なる場合も交差と見なします
・紛らわしい線分(端点が近く、傾きの差が 10^{-8} 以下のもの)は無いものとします
・線分が端点に重なる場合も交差と見なします

座標の有効桁は 10^{-8} とします
同一の座標を表すデータは無いものとします
908デフォルトの名無しさん:2007/08/20(月) 13:42:04
点点は重なっててはだめ??
909 ◆BcaCp9aHJ6 :2007/08/20(月) 13:56:34
[1] 授業単元: 工業実験
[2] 問題文(含コード&リンク):

2進クイックソート
MSD基数整列法
LSD基数整列法
三分岐基数整列法のプログラムを作成せよ

流れとしては...
入力する10進数の個数を入力

個数分の10進数を入力

その10進数を2進数にそれぞれ変換

以下2進クイックソートするなり、MSD基数整列するなり。。。

という流れが望ましい

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: 分かりません...絶対必要になるというならあとで調べれるので、調べます
 [3.3] 言語: Cです
[4] 期限: 2007年8月23日14:00まで
[5] qsort()は使えません
「改訂(新訂?)C言語アルゴリズム」という本の10章をまとめよとの事です
910デフォルトの名無しさん:2007/08/20(月) 15:01:05
なんだ、その、「調べれる」という不思議な日本語は?
911デフォルトの名無しさん:2007/08/20(月) 15:24:36
方言は間違った日本語とおっしゃるか。(そういう意味ではない
912デフォルトの名無しさん:2007/08/20(月) 15:47:05
本を指定されちゃうとちょっとなぁ。困る。
913デフォルトの名無しさん:2007/08/20(月) 15:58:40
2進クイックソートって用語知らないんだけど?
せめて10章に何が書いてあるのかだけでも教えて
914デフォルトの名無しさん:2007/08/20(月) 17:17:44
[1] 授業単元:SSコンピュータ
[2] 問題文(含コード&リンク):
  文字列に含まれるすべての文字を、1つ後のASCIIコードを持つ文字に置き換えるプログラムを作成する。ファイル名はcaesar.cとする。
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: Microsoft .NET Framework SDK v2.0
 [3.3] 言語: C
[4] 期限: 8月31日まで
[5] その他の制限:配列まで学習(教科書は学校独自のものですが)

よろしくおねがいします。
915デフォルトの名無しさん:2007/08/20(月) 17:35:31
一瞬宿題にも.NetFrameworkが使われる時代になったのかと思ったじゃんか
916デフォルトの名無しさん:2007/08/20(月) 17:36:24
>>914
文字列の入力方法と出力方法は?
917デフォルトの名無しさん :2007/08/20(月) 17:44:35
>>914
#include <stdio.h>
#include <string.h>
void Incr(char *str, int n)
{
int i;
for(i = 0; i < n; i++){
str[i] += 1;
}
}
int main()
{
char str[] = "abcdefg";
Incr(str,strlen(str));
printf("%s \n",str);

return 0;
}
918デフォルトの名無しさん:2007/08/20(月) 17:52:40
>>914をやろうとして
int main(void)
{
char c;
while((c=getchar())!=EOF)
printf("%c\n",c++);
return 0;
}
こう書いたら改行がやたら多く出力され、
int main(void)
{
char c;
while((c=getchar())!=EOF)
printf("%c\n",c+1);
return 0;
}
こう書くと
a
b

みたいに関係無い文字が一文字出力されたのですが何故でしょう?
c++とc+1で結果が違うのが一番不明ですorz
919918:2007/08/20(月) 17:56:16
出力されたのを丸っとコピペしたら特殊文字で2chでは表示されないみたいでした…。
二個目のa bの下には四角に×が合わさったようなのが表示されていました。
920デフォルトの名無しさん:2007/08/20(月) 18:02:25
>>919
それってラインフィードでしょ
921デフォルトの名無しさん:2007/08/20(月) 18:09:07
>>919
printf("%c\n",c++);
==printf("%c\n",c+1);c++;
入力関数の仕様が分かってないな。
文字を入力した後に改行コードが来るからそれをインクリメントして表示してるんだろう。
だから1つめのコードだと複数改行が出力されるはず。
922デフォルトの名無しさん:2007/08/20(月) 18:11:18
>>919
すまん違った
ラインフィードの次だから垂直タブだな
923デフォルトの名無しさん:2007/08/20(月) 18:22:19
>>920-922
なるほど、ありがとうございます!
文字入力のあとのエンターの入力とは盲点でした。
というかc++と++cの違いすら気付かなかった自分馬鹿すぎでした…orz
924921:2007/08/20(月) 18:24:16
書き方間違えたけど分かってくれたよな
925デフォルトの名無しさん:2007/08/20(月) 19:09:59
単に文字コード+1だとまずくね
926914:2007/08/20(月) 19:20:39
>>917
ありがとうございました。

あと、例題などを見て自分で作ったものがあったのですが

#include <stdio.h>
int main(void)
{
int i = 0;
char s[] = "abcdefg0";
while (s[i] != '\0'){
printf("%c",'s[i]'+1);
++i;
}
return 0;
}

これだと、何を入力しても「^^^^^^^^」と返ってきます。どこがおかしいのでしょうか?
初心者のつくったものなので、晒すのは恥ずかしいのですが・・・
927デフォルトの名無しさん:2007/08/20(月) 19:23:45
>printf("%c",'s[i]'+1);
's[i]'なんて文字リテラルはありえない。
928デフォルトの名無しさん:2007/08/20(月) 19:25:27
>>926
's[i]'

’ 不要
929914:2007/08/20(月) 19:28:54
>>927-928
解決しました。ありがとうございます
930デフォルトの名無しさん:2007/08/20(月) 19:58:05
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\
931デフォルトの名無しさん:2007/08/21(火) 01:02:43
>>901
N=50でも、小さい順に全部表示とかできるわけないんだけど
問題文書き間違えてないかな? N≦200って..
とりあえず交差判定のいらない最小値の生成だけやってみたけど
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4862.zip
932デフォルトの名無しさん:2007/08/21(火) 01:06:51
>>901の学校ではおそらくものすごい素晴らしいアルゴリズムが開発されているんだろう
933デフォルトの名無しさん:2007/08/21(火) 01:21:50
言い回しが違うだけで、最小木を求める問題だとおもったんだが・・・。
934 ◆BcaCp9aHJ6 :2007/08/21(火) 01:41:59
>>913
2進クイックソートというのは2進数に変換した後、
クイックソートする方式らしいです(まんま...?
10進数だと単純に数字の大小を比べるだけでいいんですが、2進数のまま、 数字の大小をクイックソートで比べなきゃいけないんです。
例題プログラムもあるんですがエラーが出ます。 エラーの種類はごめんなさい、分かりません。 もしかしたら鍵になるかもしれないので、
明日、例題プログラムも含めてカキコしようかなと思います。

あ、その本の10章には「基数整列法」について書いてて、 序章にまずは2進クイックソートを理解せよと書かれています そのあとMSD、LSD基数整列法、締めに三分岐基数整列法が書かれています。
いずれも例題プログラムはあるんですが、学校のPCだと何故かエラーが...
935デフォルトの名無しさん:2007/08/21(火) 02:10:45
まさかとは思うけど、「改訂(新訂?)C言語アルゴリズム」って
「アルゴリズムC〈第1巻〉基礎・整列」のこと?
いや、うちの近所には置いてないからみれないしどうしようかな。
936デフォルトの名無しさん:2007/08/21(火) 02:19:58
「アルゴリズムC・新版―基礎・データ構造・整列・探索」こっちか
937デフォルトの名無しさん:2007/08/21(火) 11:09:34
>>931-933
全域木列挙問題という典型的な問題だよ。
M を出力個数としたとき、計算量 O(N^3 M) を達成できる。
938デフォルトの名無しさん:2007/08/21(火) 12:57:50
>>937
要するに短い方から10件とか100件とか出力すればよいと?
そうなら問題文の"全部"っていうのと明らかに食い違うけど
939デフォルトの名無しさん:2007/08/21(火) 17:20:35
[1] 授業単元: プログラミング演習
[2] 問題文
   データを入力するための関数inputと、表示するための関数printをメンバ関数として持つ、
氏名と住所と電話番号を要素とするクラスを定義し、確認のためのプログラムを作成しなさい。
ただし、表示のための関数printは、氏名、住所、電話番号を直後に表示される文字列を順に引数と
して持つものとし、引数が指定されないときは、「XXXさんの住所はyyyで、電話番号はzzzです」と
表示されるようにしなさい。 

[3] 環境
 [3.1] OS: Linux
 [3.3] 言語:C++

[4] 期限:8月23日まで
[5] その他の制限: 他の課題を優先
940デフォルトの名無しさん:2007/08/21(火) 18:44:07
[1] 授業単元: プログラミング演習
[2] 問題文
次のC言語プログラムをC++言語に次の仕様に書き換えなさい。
変更仕様
@すべてのメンバ変数は、外部から直接定義することはできないように定義する。
Aメイン関数内のinput_node,link_node,print_linked_node,free_linked_node,
の関数をすべてnodeクラスのメンバ関数として定義する。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define END 0
#define OK 1

/*ノードの定義と処理の定義*/
struct node{
int code;
char name[20];
int del;
struct node *nextp;
};

941940の続き:2007/08/21(火) 18:45:06
int input_node(char *s,struct node *p){
p->nextp=NULL;
printf("%sコード番号:",s);
scanf("%d",&p->code);
if(p->code <=0)
return END;
printf("名  前:");
scanf("%s",p->name);
p->del=0;
return OK;
}
void print_node(struct node *p){
printf("%d %s %d\n",p->code,p->name,p->del);
}

942デフォルトの名無しさん:2007/08/21(火) 18:47:52
阻止
943941の続き:2007/08/21(火) 18:47:57
/*リストの処理の定義*/
struct node* link_node(struct node *p,struct node *wp){
struct node *cp;

cp=(struct node *)malloc(sizeof(struct node));
if(cp==NULL)
return NULL;
*cp=*wp;
cp->nextp=p;
return cp;
}
944943の続き:2007/08/21(火) 18:48:57

int print_linked_node(struct node *p){
int k;

if(p !=NULL){
k=print_linked_node(p->nextp);
printf("(%d)",k);
print_node(p);
return k+1;
}
return 1;
}
void free_linked_node(struct node *p){
struct node *wp;

while(p!=NULL){
wp=p->nextp;
free(p);
p=wp;
}
}
945デフォルトの名無しさん:2007/08/21(火) 18:49:39
for(i=0; line[i] != '\0'; i++){
switch(line[i]){
case ' ':
if(flag == FALSE){
flag = TRUE;
wno++;
}
break;
case '\n':
if(flag == FALSE){
flag = TRUE;
wno++;
}
lno++;
cno++;
break;
default:
flag = FALSE;
cno++;
break;
}
}
946944の続き:2007/08/21(火) 18:50:32
void main(void){
struct node *startp=NULL,*cp,work;
int k;
char buf[200];

for(k=1; ; k++){
sprintf(buf,"\n%d番目のデータを入力\n"
"終了するときはコード番号にゼロ以下の値を入力\n",k);
if(input_node(buf,&work)==END)
break;
if((co=link_node(startp,&work))==NULL){
printf("領域を確保できません\n");
break;
}
startp=cp;
}
print_linke_node(startp);
free_linked_node(startp);
}

[3] 環境
 [3.1] OS: Linux
 [3.3] 言語:C++

[4] 期限:8月23日まで
[5] その他の制限: 他の課題を優先
947デフォルトの名無しさん:2007/08/21(火) 19:27:01
他の課題を優先?
948デフォルトの名無しさん:2007/08/21(火) 19:33:11
939と946のその他の制限はなしでお願いします!!
949 ◆BcaCp9aHJ6 :2007/08/22(水) 00:38:48
>>936
正にそれです
全然違う本の名前書いてすいません
950 ◆/yc5rnD7H. :2007/08/22(水) 20:29:48
本日迄提出の通信教育の課題ですが、どうしても2問解けません。
お手数をおかけしますがよろしくどうぞ。

1問目

[1] 授業単元:プログラミング基礎(繰り返し)
[2] 問題文(含コード&リンク):
整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。
但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。
[3] 環境
 [3.1] OS: windowsXP
 [3.2] インターネット授業なので、大学サーバー上で動いてるみたいです。
 [3.3] C
[4] 期限: 2007/8/22の日付が変わるまで
[5] その他の制限: Cはじめて3日。

951 ◆/yc5rnD7H. :2007/08/22(水) 20:33:02
[1] 授業単元:プログラミング基礎(while以外の繰り返し)
[2] 問題文:
あるクラスの試験の点数を整数で繰り返し入力し、
点数の合計と平均点を出力するプログラムを作成しなさい。
点数は、0点以上100点以下とし、この範囲外の点
(0点未満または100点より大きい点)が入力されたときは、
入力を終了し、点数の合計と平均点を出力する
(最後に入力された範囲外の点は集計の対象としない)。
また、平均は小数点以下2桁まで出力する。
繰り返しの命令は、何を使ってもよい。

※両問題とも、途中までなんとかわかるという感じではなく、
どこから手をつけていいのかわからない、といった状態です。
よろしくお願いします。
952デフォルトの名無しさん:2007/08/22(水) 20:35:52
なーんも勉強しとらんてことか
953デフォルトの名無しさん:2007/08/22(水) 20:39:11
1つ目
#include <stdio.h>

void main(){
int num=0;
scanf("%d",&num);
while(num>0){
printf("*");
num--;
}
printf("\n");
}
954デフォルトの名無しさん:2007/08/22(水) 20:50:24
2つ目
#include <stdio.h>

void main(){
int total=0,i=0,buf;
double avg;
bool flg=true;
while(flg){
scanf("%d",&buf);
if(buf>=0 && buf <=100){
i++;
total+=buf;
}else{
flg=false;
}
}
avg=(double)total/i;
printf("total=%d,avg=%.2f",total,avg);
}

動作検証もしてなければコードも見直してないけどな。
955 ◆/yc5rnD7H. :2007/08/22(水) 21:00:04
>>952
は、まさにその通りで

>>953-954
ありがとうございます。
やってみます。
956 ◆/yc5rnD7H. :2007/08/22(水) 21:14:28
>>954ですが、このままでは動かなかったので
以下に訂正したところ、課題が受理されました。

#include <stdio.h>

void main(){
int total=0,i=0,buf;

double avg;
while(1){
scanf("%d",&buf);
if(0<=buf && buf <=100){
i++;
total+=buf;
} else {
break;
}
}
avg=(double)total/i;
printf("total=%d,avg=%.2f",total,avg);
}

ありがとうございます。
957デフォルトの名無しさん:2007/08/22(水) 21:26:48
boolも使っちゃいかんのか・・・
958デフォルトの名無しさん:2007/08/22(水) 21:26:48
while使っていいんかい。
959 ◆/yc5rnD7H. :2007/08/22(水) 21:37:54
>>957
今のところboolは見たことないです。
恐らく「基礎」なので教科書に出た順番でしか
課題が受理されないのではないかと思ってます。

>>958
単元が「while以外の繰り返し」だったのですが、
この設問に限っては ”繰り返しの命令は何を使ってもよい”
みたいです。
紛らわしい書き方してしまったすみません。
960デフォルトの名無しさん:2007/08/23(木) 06:36:23
>>957 & >>958
おまいら、仲良いな、同時書き込みするなんて。
もう結婚しちまえ。w
961デフォルトの名無しさん: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


全くわけがわかりません

よろしくお願いします。
962デフォルトの名無しさん:2007/08/24(金) 05:10:34
全くわからない?具体的にはどのあたりが?
とりあえず、楽しい暇つぶしになるので問題だけは貰っておく。
963デフォルトの名無しさん:2007/08/24(金) 07:16:46
書いてある通りにやればいいだけのような気もするが。
964デフォルトの名無しさん:2007/08/24(金) 09:20:22
>>962-963
ほとんど授業聞いてないので。。。
965デフォルトの名無しさん:2007/08/24(金) 09:44:16
って期限過ぎてる \(^o^)/
966デフォルトの名無しさん:2007/08/24(金) 11:07:14
>>961
前日夜依頼で、朝までは酷な希ガス。
週明けは不可?
967デフォルトの名無しさん:2007/08/24(金) 12:46:30
[1] 授業単元: C
[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日
お願いします。
968デフォルトの名無しさん:2007/08/24(金) 16:05:45
ttp://www7a.biglobe.ne.jp/~lshen/EternalWindows/Graphics/Bitmap/Bitmap09.html
ttp://www.geocities.jp/ky_webid/win32c/022.html
ttp://hp.vector.co.jp/authors/VA023539/tips/bitmap/001.htm

自分もビットマップを扱ったプログラムを作ったことがあるけど
検索してみると、ヘッダ部分の情報を指定の構造体に取り込んで
その構造体の中の値をチェックすりゃ24ビットフルカラーとか判別できるんかね?
自分は指定の情報が入っているアドレスの情報をチェックしたやり方をしたけど。

あとはモザイク。h.m.p(決してbmpにちなんで文字ったわけではない)
みたいな薄いのじゃダメだよね?
969デフォルトの名無しさん:2007/08/24(金) 16:18:18
そりゃ出来るだろ。
970デフォルトの名無しさん:2007/08/24(金) 16:19:48
>>969
そういうくだらねぇレスはいらねーってw
971デフォルトの名無しさん:2007/08/24(金) 16:20:52
969 名前:デフォルトの名無しさん 投稿日:2007/08/24(金) 16:18:18
そりゃ出来るだろ。

↑なんだこいつ?きめぇ
972デフォルトの名無しさん:2007/08/24(金) 16:22:06
>>969 んじゃお前が宿題に答えろよ。何が〜だろ、だ、偉そうにw
973デフォルトの名無しさん:2007/08/24(金) 16:25:05
>>970-972
一行レスに対して反応しすぎだ、落ち着けw
974デフォルトの名無しさん:2007/08/24(金) 16:26:26
>>969
出来るならそのやり方も含めてお前が答えろよ
975デフォルトの名無しさん:2007/08/24(金) 16:27:40
>>969 さぁ、早く、出来るならお前が出来ることを証明してやろうや、な?
口先だけのイン○は嫌われるぜ?ベイベー
976デフォルトの名無しさん:2007/08/24(金) 16:30:38
>>969
先生!どのようにしたら24ビットフルカラーとかそうでないか判別できますか!教えてプリーズ!
977デフォルトの名無しさん:2007/08/24(金) 16:31:15
この連レス>>968が一人でやってるように見えて仕方ない。
違うなら>>968が必死なようにしか見えないから自重しとけ。
978デフォルトの名無しさん:2007/08/24(金) 16:32:18
>>969 っつーかさぁ、24ビットフルカラーであるかどうかの情報を格納する構造体に、
どのようにヘッダから値を取得するか、その部分のソースをプリーズ!
979デフォルトの名無しさん:2007/08/24(金) 16:34:03
>>968かはわからんが一人なのは確かだろ。
980961:2007/08/24(金) 16:34:30
>>966
おっしゃるとおりです。
受け取ってもらえるかわかりませんが、来週月曜日に提出をし
てみるので、お願いします。

>>968
今携帯なので帰ったらみてみます。
ありがとうございます。
981デフォルトの名無しさん:2007/08/24(金) 16:42:33
色数知る方法知らない奴が知りたくて必死なようにも見えるな。
982名無しさん@お腹いっぱい:2007/08/24(金) 16:43:05
入力した自然数nの正の約数をすべて表示するプログラムを今、作っているのですが、
int main(void)
{
int a = 1;
int n = 500;
int f = n / a;

while(a < n) {
a += 1;
}
printf("%d\n",f);
return 0;
}
上のものは自分がわからないながらも作ったものです。
でもできませんでした。
改善点お願いします。
983デフォルトの名無しさん:2007/08/24(金) 16:58:07
          ____
        /      \
       / ─    ─ \
     /   (●)  (●)  \ >>969さん、集中砲火を浴びた気分はどう?
     |  :::::: (__人__)  :::::: |
      \.    `ー'´    /ヽ
      (ヽ、      / ̄)  |
       | ``ー――‐''|  ヽ、. |
       ゝ ノ      ヽ  ノ  |
984デフォルトの名無しさん:2007/08/24(金) 17:06:10
埋まる前に次スレよろしく
985デフォルトの名無しさん:2007/08/24(金) 17:08:39
そりゃ最悪だろ。
986デフォルトの名無しさん:2007/08/24(金) 17:14:41
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
現在の地域時間から15時間後の日時を表示するプログラムを作成しなさい。
表示形式は日付と時間が表示されれば、自由とします。
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 早ければ早いほど、助かります。
[5] その他の制限: 特にありません。

15時間後の表示方法が思いつかず…。
よろしくお願い致します。
987デフォルトの名無しさん:2007/08/24(金) 17:18:22
>>986
#include<stdio.h>
#include<time.h>

int main(void){
time_t current;

time(¤t);
current+=60*60*15;
printf("%s\n", ctime(¤t));

return 0;
}
988デフォルトの名無しさん:2007/08/24(金) 17:22:27
>>983
良い気分だ。
989デフォルトの名無しさん:2007/08/24(金) 17:26:53
>>986
#include <stdio.h>
#include <time.h>

int main()
{
time_t now;
now = time(NULL) + 3600 * 15;
printf( "%s", ctime(&now));
return 0;
}
990デフォルトの名無しさん:2007/08/24(金) 17:29:06
次スレ
C/C++の宿題を片付けます 95代目
http://pc11.2ch.net/test/read.cgi/tech/1187944110/
991デフォルトの名無しさん:2007/08/24(金) 17:29:57
集中砲火っていうよりいつものバカが一人で踊っただけだろ。
992983:2007/08/24(金) 17:33:57
>>987,989
助かりました。ありがとうございます!
お仕事が速く、感動致しました…。
993986:2007/08/24(金) 17:35:08
↑名前ミス。>>986です。
994デフォルトの名無しさん:2007/08/24(金) 17:37:05
>>978
#include<windows.h>
#include<stdio.h>

int main(int argc, char *argv[]){
BITMAPFILEHEADER bmpheader;
BITMAPINFO bmpinfo;
char *filename="a.bmp";
FILE *fp;

if(argc==2) filename=argv[1];
fp=fopen(filename, "rb");
if(fp==NULL)
{
fprintf(stderr, "\nError: %s file cannot open.\n", filename);
return 1;
}
fread(&bmpheader, sizeof(bmpheader), 1, fp);
fread(&bmpinfo, sizeof(bmpinfo), 1, fp);
fclose(fp);

printf("width=%ld height=%ld\n", bmpinfo.bmiHeader.biWidth, bmpinfo.bmiHeader.biHeight);
printf("bpp=%d\n", bmpinfo.bmiHeader.biBitCount);

return 0;
}
995デフォルトの名無しさん:2007/08/24(金) 18:01:58
モザイクフォーマットに懲りそうだな
996デフォルトの名無しさん:2007/08/24(金) 18:30:20
>>991 = いつもの彼、いつものバカ 白々しいよなぁ、こいつw
997デフォルトの名無しさん:2007/08/24(金) 19:45:00
>>967
日本と朝鮮をくっつけるなあああああああああああああああああああ
998デフォルトの名無しさん:2007/08/24(金) 19:47:03
埋め
999デフォルトの名無しさん:2007/08/24(金) 19:48:14
>>997
君、とりあえず答えることに 挑戦 してみては?
1000デフォルトの名無しさん:2007/08/24(金) 19:49:22
暑い夏にはもってこいのギャグだ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。