トップページ⇒tech
1001コメント418KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(12)
あなたが解けない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/
0153名無しさん@そうだ選挙に行こう2007/07/29(日) 00:51:21
>>152
確かにそれもありだな
0154名無しさん@そうだ選挙に行こう2007/07/29(日) 00:54:00
素因数とは書いてないのだから、>152だろ。
更に自分自身を除くと言う条件がついていれば完全数チェックに使えるけど。
0155名無しさん@そうだ選挙に行こう2007/07/29(日) 00:58:54
149です。
説明不足で申し訳ありません。
152さんのように出力できるようにお願いします。
0156名無しさん@そうだ選挙に行こう2007/07/29(日) 01:05:57
再起を使わないと簡単なんだが。
さてどこで使うと良いのか、思案中w
0157名無しさん@そうだ選挙に行こう2007/07/29(日) 01:06:56
>>156
再起をどう使うのか、難しいな。
再帰なら簡単に使えるのだが。
0158名無しさん@そうだ選挙に行こう2007/07/29(日) 01:08:17
>>156 orz
0159名無しさん@そうだ選挙に行こう2007/07/29(日) 01:11:35
おや、>>158が再起不能に。
0160名無しさん@そうだ選挙に行こう2007/07/29(日) 01:17:37
うわ、つまんね
0161名無しさん@そうだ選挙に行こう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文のほうがスマート
0162名無しさん@そうだ選挙に行こう2007/07/29(日) 01:20:14
psychic(サイキック)な奴らだな
0163名無しさん@そうだ選挙に行こう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;
}
0164名無しさん@そうだ選挙に行こう2007/07/29(日) 01:27:24
せめてリエントラントにしたほうがいい
01654602007/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);

0166460って何だ?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; 
}
0167名無しさん@そうだ選挙に行こう2007/07/29(日) 01:57:09
161さん、164さん、どうもありがとうございます。
161さんにお聞きしたいのですが、nに数字を読み込むということで合っていますか?
また、divはどのような働きをするのか、教えていただけないでしょうか。
勉強不足のため、お手をわずらわせて大変申し訳ありませんが、お願いできましたら幸いです。
0168名無しさん@そうだ選挙に行こう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;
}
0169名無しさん@そうだ選挙に行こう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);
0170名無しさん@そうだ選挙に行こう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; 
}
01711682007/07/29(日) 02:10:24
まだ変だなw
酒気帯びモードなので、今日は再起出来ないかも
0172名無しさん@そうだ選挙に行こう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);

0173名無しさん@そうだ選挙に行こう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; 
}
01741722007/07/29(日) 02:20:12
満足だああああぁあああ
0175デフォルトの名無しさん 2007/07/29(日) 02:24:41
ブラウザに載っけるソースに無理に全角スペースで
インデントつけたら、見る方にとっては、コピペしたとき
邪魔なだけなんじゃないか?
0176名無しさん@そうだ選挙に行こう2007/07/29(日) 02:25:22
わざとだろ、キニスンナ
0177名無しさん@そうだ選挙に行こう2007/07/29(日) 02:28:25
全角スペースなんか入れてねえづらよ
0178名無しさん@そうだ選挙に行こう2007/07/29(日) 02:37:45
全角スペースを半角スペースにする置換をすりゃええがな。
頼むから痴漢はしちゃだめだぞ。
0179名無しさん@そうだ選挙に行こう2007/07/29(日) 02:39:16
ブロックの開始後とにタブか空白で字下げするスクリプトのほうがよっぽど有益だ
0180名無しさん@そうだ選挙に行こう2007/07/29(日) 08:16:01
専ブラのポップアップだとちゃんと半角インデントつくんだから余計なことはしなくていいよもう!
0181名無しさん@そうだ選挙に行こう2007/07/29(日) 08:40:34
コピペしやすいようにわざわざ&nbsp;でインデントしてるのに叩かれててワラタ
0182名無しさん@そうだ選挙に行こう2007/07/29(日) 08:49:02
>>181
それって、&nbsp;がペーストされるんだけど。
0183名無しさん@そうだ選挙に行こう2007/07/29(日) 09:07:22
うpろだ使えばよくね?
0184名無しさん@そうだ選挙に行こう2007/07/29(日) 09:34:06
>>182
それは使ってるブラウザに依る。
JaneやIEなら半角スペースがペーストされるはず。
0185デフォルトの名無しさん2007/07/29(日) 10:54:57
このスレをIEとかFireFoxで開いてコピーすればいい
Janeだとnbsp;に変換されてて多少面倒だね
まあそんな細かいことどーでもいいじゃないか
0186名無しさん@そうだ選挙に行こう2007/07/29(日) 11:04:13
/**/でインデントしようぜ!
0187名無しさん@そうだ選挙に行こう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;
}

読みやすい?
0188名無しさん@そうだ選挙に行こう2007/07/29(日) 11:46:54
美しい
0189名無しさん@そうだ選挙に行こう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
0190名無しさん@そうだ選挙に行こう2007/07/29(日) 13:31:45
>>174
気持ちよさそうだなw
0191942007/07/29(日) 15:28:54
こんにちは。
そういえば>>99のプログラムはコマンドライン版にするとどんな感じになるんでしょう?
ふと疑問に思ったもので。
0192名無しさん@そうだ選挙に行こう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);

試してないけどたぶんこんな流れ
0193名無しさん@そうだ選挙に行こう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;
}
0194デフォルトの名無しさん 2007/07/29(日) 16:00:16
暇や
なんかお題くれ
0195名無しさん@そうだ選挙に行こう2007/07/29(日) 16:11:43
もしよろしければ>>85を解いてほしいです
0196名無しさん@そうだ選挙に行こう2007/07/29(日) 16:15:15
テンプレに従ってないしやる気がでないな
まぁまだ投票してない俺が言えた事じゃないが
0197942007/07/29(日) 16:16:24
>>192
おぉ、スッキリしました。ありがとですー。

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

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

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

入力 12345678901234567890 * 12345678901234567890
出力 152415787532388367501905199875019052100

こんな感じ。
0201名無しさん@そうだ選挙に行こう2007/07/29(日) 16:56:19
>>200に出てる>>930ってのは、前スレの>>930ね。。
0202名無しさん@そうだ選挙に行こう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
020311942007/07/29(日) 19:15:06
100000のでーたを上手くあつかえませんでした
(1000とかなら、いけるんだけどな・・・)
0204名無しさん@そうだ選挙に行こう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] その他の制限: 配列、再帰 両方でお願いします。

0205名無しさん@そうだ選挙に行こう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] その他の制限: 配列、再帰 両方でお願いします。

0206名無しさん@そうだ選挙に行こう2007/07/29(日) 19:51:56
操作を間違えて2回書き込まれてしまいました。
すみません。
0207名無しさん@そうだ選挙に行こう2007/07/29(日) 19:53:02
どんな間違いなのか気になる・・・
0208名無しさん@そうだ選挙に行こう2007/07/29(日) 19:55:14
同じ過ちを繰り返すということさ
0209名無しさん@そうだ選挙に行こう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;
}
02102092007/07/29(日) 20:02:59
げ、priceをunsignedと宣言しておきながら

まあいいや
0211デフォルトの名無しさん2007/07/29(日) 20:45:29
弐千円札の存在を忘れていた俺ガイル
0212デフォルトの名無しさん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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0213デフォルトの名無しさん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が平均
0214デフォルトの名無しさん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;
}

コンパイルしてないからケアレスミスとかシラネ。
0215デフォルトの名無しさん2007/07/29(日) 21:28:23
213さん
214さん
ありがとうございました^^)
0216デフォルトの名無しさん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; }
0217デフォルトの名無しさん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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
全くわかりません;本当に困っています。
どうぞよろしくお願いします。
0218デフォルトの名無しさん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;
}
02192172007/07/29(日) 22:39:07
>218さん
ありがとうございます!!
forだけでこんなにきれいにできるんですね。
0220デフォルトの名無しさん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;
}
0221デフォルトの名無しさん 2007/07/29(日) 23:07:010
>>220
なるほど、そうすればいいんだ
0222デフォルトの名無しさん2007/07/29(日) 23:08:050
>>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;
}
0223お願いします2007/07/29(日) 23:13:380
[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);
}
続き↓
0224お願いします2007/07/29(日) 23:15:330
続き↑
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 3.4
 [3.3] 言語: C
[4] 期限: [2007年07月31日20:00まで]
[5] その他の制限:for文で作れと言われました。

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

0227デフォルトの名無しさん2007/07/29(日) 23:44:460
>>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;
}
0228デフォルトの名無しさん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] その他の制限: 特になし
  期限が近いですがお願いいたします
0229デフォルトの名無しさん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系関数を使用しない。
入力は、コマンドプロンプトから入力が保存されたテキストファイルを読み込む方法で行う。
0230デフォルトの名無しさん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);
0231デフォルトの名無しさん 2007/07/30(月) 00:38:26
>>229
へー、さっぱりわかんねーや
0232デフォルトの名無しさん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;
}
0233デフォルトの名無しさん2007/07/30(月) 00:46:07
g = ((int)(k + 2.5) / 5) * 5;
かと思った。どっちにもとれるな。
0234お願いします2007/07/30(月) 01:11:00
>>230
ありがとうございます。やってみますm(*_ _)m
02352022007/07/30(月) 01:33:08
>>203
それ俺へのレス?
ソースの中の10とか書いてるのは桁数じゃなくて基数だよ。
10進数なら10。
2〜10なら何でも良い。16進数とかにも対応したければ、文字列との
変換の部分を直さないといけないな。
0236デフォルトの名無しさん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;
}
0237デフォルトの名無しさん2007/07/30(月) 06:10:36
まだ入門段階のプログラムだと思いますがわからないのでお願いします。
[問題]
入力データファイルが用意されている。
仕様
入力データ件数10件
   1件に最大100文字(半角文字とする)
   入力データは、文字型1次元配列(サイズ101)に格納
文字の種類は最大200種類(文字型一次元配列使用)
但し、入力した文字列中の改行は("\n")マークは処理対象外

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

出力図形は
 1行に最大25文字(文字区切りに1カラム空白)
 構成文字(並べ替え済み)を出力する
0238デフォルトの名無しさん2007/07/30(月) 07:56:44
>>228
【空欄1】 next
【空欄2】 prev
多分。
0239デフォルトの名無しさん2007/07/30(月) 10:27:06
http://tonosiki.mbnsk.net/uploader/src/up1495.jpg?
この問題の(3)標準偏差と(4)相対係数が分かりません。
どうか教えて頂けないでしょうか・・・?
よろしくお願い致します。
0240デフォルトの名無しさん2007/07/30(月) 10:37:36


大変失礼致しました。
もしお時間がございましたらよろしくお願いいたします。

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):http://tonosiki.mbnsk.net/uploader/src/up1495.jpg
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 07/8/1
[5] その他の制限: 特にありませんが、出来る限り単純なプログラムでお願いいたします。
0241デフォルトの名無しさん2007/07/30(月) 10:38:40
と思ったらマルチかこの野郎。
0242デフォルトの名無しさん 2007/07/30(月) 11:28:15
>>239
>>240
標準偏差の求め方は、平均をだし、個々のデータからその平均値を引き
次に、その平均値を引いた個々のデータを二乗する。
次にその二乗した個々のデータの合計をデータの数で割る。
その割った数値の平方根を取る。
これが標準偏差。

データファイルくらい用意しとけ。
0243デフォルトの名無しさん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] その他の制限:特に無し

よろしくお願いします。
0244デフォルトの名無しさん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] その他の制限:特にありません。

よろしくお願いします。
0245デフォルトの名無しさん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;
}
0246デフォルトの名無しさん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日まで

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

よろしくお願いします
0250デフォルトの名無しさん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言語
0251デフォルトの名無しさん 2007/07/30(月) 19:01:46
if(!(i%4) && (i%100) || (!(i%400)))
feb = 29;
else
feb =28;
0252デフォルトの名無しさん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乗をループで足していく表現がわかりません。
よろしくお願いします
■ このスレッドは過去ログ倉庫に格納されています