C/C++の宿題を片付け ..
[2ch|▼Menu]
116:デフォルトの名無しさん
07/05/15 21:46:11
>>114
void mainの話をするとスレが荒れるぞ

117:デフォルトの名無しさん
07/05/15 21:51:55
>>114
mainの戻り値がvoidなんて処理系依存の方法を持ち出す奴が
どういう了見でreturn 0;が美しくないとか言ってんだ

118:114
07/05/15 21:52:14
>>116
うほっw
まあいいか、return 0; でも。

>>108だっが、余りは9%4でよくねぇ?なぜに9&3 ?

119:デフォルトの名無しさん
07/05/15 21:54:12
沈黙は金

120:デフォルトの名無しさん
07/05/15 21:54:45
>>114 ん〜〜〜、な・ん・で?敢えて言うんでしょうか?理由は?何か問題でも?
int main なら return 0;はANSI、ISO準拠でなんら問題なし。幅広い環境で通用する。
void main?それはもはや世界基準にあらず、自立環境でmain関数をプログラムの開始と
定めていないようなところでなら問題ないが、あくまでもANSI、ISO準拠重視なソースであれば
なおさらvoid mainはありえない。これらのことは、ちゃんとISOにも記されているので
必要とあらば確認すべし。なお、void mainは使っちゃだめということではないので、あしからず。
あくまでも世界基準、標準化、幅広い環境で通用させるんであればint mainが望ましいとの話。

121:デフォルトの名無しさん
07/05/15 21:56:17
くせえ!
コピペの臭いがプンプンするぜ!

122:デフォルトの名無しさん
07/05/15 21:56:42
>>118は責任もって>>120を引き取るように。

123:デフォルトの名無しさん
07/05/15 22:19:31
>>112
#include    <stdio.h>

int    main()
{
    double k;
    int g;
    scanf("%lf", &k);
    g = 5*(int)(k/5 + 0.5);
    printf("%d\n", g);
    return 0;
}

124:デフォルトの名無しさん
07/05/15 22:23:55
>>118
%も四則演算子に含むという解釈なんじゃね?
実際どっちなんだろう。

125:デフォルトの名無しさん
07/05/15 22:34:28
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): キーボードから5教科のテストの成績を入力し、
合計点sumと平均点aveを計算して画面に出力するプログラムを作成しなさい。

ただし、各教科の点数とsumはint型とし、aveはdouble型とする。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C言語
[4] 期限: 今日の夜11時半まで
[5]その他の制限:

お願いします!

126:デフォルトの名無しさん
07/05/15 22:43:15
>>125
#include<stdio.h>
int main(){
int n, sum = 0;
double ave;
printf("国語:"); scanf("%d",&n); sum+=n;
printf("英語:"); scanf("%d",&n); sum+=n;
printf("社会:"); scanf("%d",&n); sum+=n;
printf("算数:"); scanf("%d",&n); sum+=n;
printf("情報:"); scanf("%d",&n); sum+=0;
printf("合計点:%d\n", sum);
ave = sum / 5.0;
printf("平均点:%lf\n", ave);
return 0;
}

127:デフォルトの名無しさん
07/05/15 23:00:35
>>110
なぜ余が、9&3になるの?教えてください。確かに実行結果は余り1になるわけだが。

128:デフォルトの名無しさん
07/05/15 23:04:57
1001=9
0011=3
------&
0001=1

129:デフォルトの名無しさん
07/05/15 23:06:40
>>99
こんな感じかなぁ(あんまり再帰を使ってないけど)。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define NMAX (INT_MAX / 2)

struct P {
  int sum;
  union {
    struct P *p[2];
    int n;
  } as;
};

int Count(struct P *p, int n)
{
  return (p->sum != 1) ? (Count(p->as.p[0], n) + Count(p->as.p[1], n)) : (p->as.n == n);
}


130:デフォルトの名無しさん
07/05/15 23:06:43
>>128
thanks!

131:129
07/05/15 23:08:10
続き
void Factorize(int total, int ctbl[], int ctblnum)
{
  struct P *ptbl, *p, *q, *r;
  int ptblnum = total;
  int i, j, n;
  
  for (i = 0; i < ctblnum; i++)
    if (ptblnum < ctbl[i])
      ptblnum = ctbl[i];
  ptblnum ++;
  if ((ptbl = calloc(ptblnum, sizeof(*ptbl))) == NULL)
    fprintf(stderr, "メモリ不足です\n");
  else {
    for (i = 0; i < ptblnum; i++)
      ptbl[i].sum = NMAX;
    for (i = 0; i < ctblnum; i++) {
      p = &ptbl[ctbl[i]];
      p->sum = 1;
      p->as.n = ctbl[i];
    }


132:デフォルトの名無しさん
07/05/15 23:08:27
>>115
fflush(stdin); ってどうゆうことですか?

133:129
07/05/15 23:09:10
続き
    for (i = 1; i <= total; i++) {
      p = &ptbl[i];
      for (j = 1; j < i; j++)
        if ((n = (q = &ptbl[j])->sum + (r = &ptbl[i - j])->sum) < p->sum) {
          p->sum = n;
          p->as.p[0] = q;
          p->as.p[1] = r;
        }
    }
    printf("%d円の内訳:\n", total);
    if (ptbl[total].sum == NMAX)
      printf("組み合わせが存在しません\n");
    else for (i = 0; i < ctblnum; i++)
      if((n = Count(&ptbl[total], ctbl[i])) != 0)
        printf("%d円 × %d枚\n", ctbl[i], n);
    free(ptbl);
  }
}

int main(void)
{
  int ctbl[] = { 1, 3, 7, 9, 13, 66, };
  
  Factorize(179, ctbl, 6);
  return 0;
}


134:デフォルトの名無しさん
07/05/15 23:23:29
>>115
入力ストリームに対するfflushは未定義動作
scanfで読み飛ばしとけ

135:115
07/05/15 23:28:10
>>134
適当に書いただけだから>>132に言ってやってくれ

136:デフォルトの名無しさん
07/05/15 23:54:52
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク)
7bitのASCIIコード表を出力するプログラムを作成せよ。

出力例

  0  1  2  3・・・・7
-------------------
0:** **     0   p
1:** **  !  1   q
2:** **  "  2   r
3:** **  #  3   s


F:** **  /  ?   **

印刷できない文字は、**を出力しなさい。

[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 5月16日AM:10:30まで
[5] その他の制限: 2つのforとisprintという関数を使用する

よろしくお願いします。

137:デフォルトの名無しさん
07/05/16 00:08:37
10個の整数データを木構造に保存するときを考える.まず,ポインタにより木を実現し,データを保存せよ.(ファイルからデータを読み込み,木構造ができるようにすると良い)
次に,キーボードから前順,中順,後順を選択する.
すると,その順で木をなぞり,指定した順にデータを表示する(再帰プログラミングで作成せよ).

すみませんが教えて下さい。

138:デフォルトの名無しさん
07/05/16 00:20:03
>>136
#include<stdio.h>
#include<ctype.h>
int main(){
int i,j,k;
for(i=0;i<=0xF;i++){
for(j=0;j<=7;j++){
k = i*8+j;
if( isprint(k) )printf(" %c ", k);
else printf("** ");
}
printf("\n");
}
return 0;
}
なんか激しく間違えてるけど直すのたるいから誰かよろしく

139:デフォルトの名無しさん
07/05/16 00:20:18
>>27です。

>>39を参考に、1秒程度で出力するものができました。

>>43->>44も試したんですが、これも凄いですね。
でも、これだとオレが書いてないって明白なので、参考としていただきます。


他にもいろいろと勉強になるコードありがとうございました。


140:デフォルトの名無しさん
07/05/16 00:27:01
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:今日のPM13:00
[5] その他の制限:
問題1:キーボードより2つの値を入力し、比較結果を表示しなさい
実行画面
変数aの入力==>3
変数bの入力==>8
結果:8>3
変数aの入力==>8
変数bの入力==>3
結果:8>3
変数aの入力==>5
変数bの入力==>5
結果:5=5










141:140の続き
07/05/16 00:31:43
問題2:2人の得点を入力し勝者を表示しなさい
実行結果
aさんの得点==>200
bさんの得点==>150
aさんの勝ち
aさんの得点==>100
bさんの得点==>250
bさんの勝ち
aさんの得点==>120
bさんの得点==>120
引き分け
問題3:点数を入力し、合否を表示せよ
60点以下合格、範囲(O〜100)以外はエラーとする
実行結果
点数入力==>60
合格です
点数入力==>59
不合格です
点数入力==>−1
点数を入力エラー(0未満)です
点数入力==>101
点数の入力エラー(100を超える)です


142:140の続き
07/05/16 00:32:53
問題4:キーボードより入力した文字を変換(大文字→小文字、小文字→大文字)し表示しなさい
実行結果
文字入力==>A
変換後:a

文字入力==>n
変換後:N

文字入力==>S
変換後:変換できない

以上の問題がどうしてもわからないのでよろしくお願いします

143:デフォルトの名無しさん
07/05/16 00:32:53
[1]c言語 
[2]raw画像を読むためfreadを使ったの関数を作る。

void FIO_read_raw(char *filename, unsigned short *ad, int width, int height){


FILE *fp_in;

if((fp_in==fopen(filename,"rb"))==NULL){

printf("Can't File Open!\n");

exit(1);

}

fread( ad, sizeof(unsigned short),width*height,fp_in);

fclose(fp_in);

}

と作ったのですが、

error C2143: 構文エラー : ')' が 'constant' の前に必要です。
error C2143: 構文エラー : ';' が 'constant' の前に必要です。
fatal error C1004: 予期せぬ EOF が検出されました。

とでてしまいました。どのようにすればいいか教えてください。よろしくお願いします。


144:140 141 142の問題
07/05/16 00:33:54
この4問わかる方がいましたら教えてください

145:デフォルトの名無しさん
07/05/16 00:37:06
if((fp_in=fopen(filename,"rb"))==NULL)

146:デフォルトの名無しさん
07/05/16 00:52:34
>>136
#include <stdio.h>
#include <ctype.h>

int main(void)
{
int ch[128],a[16][8];
size_t i,j,cnt,sz=sizeof(ch)/sizeof(ch[0]);
size_t wd=2;
for(i=0; i<sz; i++) ch[i]=i;

for(i=0,cnt=0; i<8; i++) {
for(j=0; j<16; j++) {
a[j][i]=ch[cnt++];
}
}

printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<16; i++) {
printf("%X:",i);
for(j=0; j<8; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
puts("");
}

return 0;
}

147:デフォルトの名無しさん
07/05/16 00:57:01
>>136 訂正。いらんことしてたわ。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void)
{
int a[ROW][COL];
size_t i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}

148:デフォルトの名無しさん
07/05/16 00:58:59
>>136 ぐぼぉ、またはり間違えた。すまそ。たぶんこれで最後でおkかと。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void) {
int a[ROW][COL],i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}

149:>140
07/05/16 02:34:04
...高難度ぢゃね?
#include <stdio.h>
int getVal(char *val)
{
    int v;
    char buf[256];
    printf("変数%sの入力==>", val);
    fgets(buf, sizeof(buf), stdin);
    sscanf(buf, "%d", &v);
    return v;
}
void printCmp(int a, int b)
{
    char sign[3], Num[][3]={"0","1","2","3","4","5","6","7","8","9"};
    if(a<b) sprintf(sign,"<");
    if(a>b) sprintf(sign,">");
    if(a==b) sprintf(sign,"=");
    printf("結果:%s%s%s\n", Num[a], sign, Num[b]);
}
int main(void)
{
    int a,b,loop;
    printf("1:キーボードより2つの値を入力し、比較結果を表示\n");
    for(loop=0; loop<3; ++loop){
        a=getVal("a");
        b=getVal("b");
        printCmp(a, b);
    }
    return 0;
}

150:>142
07/05/16 02:58:46
>    文字入力==>S
>    変換後:変換できない

kwsk


151:デフォルトの名無しさん
07/05/16 03:16:44
同じ問題前にも見たな。
で、同じようにそこ突っ込まれてた。

152:デフォルトの名無しさん
07/05/16 06:49:17
>>143
if((fp_in==fopen(filename,"rb"))==NULL){

if((fp_in=fopen(filename,"rb"))==NULL){


153:デフォルトの名無しさん
07/05/16 07:07:57
>>138さん >>146さん >>148さん
ありがとうございます

154:デフォルトの名無しさん
07/05/16 07:35:14
1:C言語
テーマ:繰り返し処理(for文)
問題1:1〜10までの合計を求め表示しなさい
実行画面
合計:55

問題2:キーボードより入力した数分の、"*"を表示しなさい
実行画面
整数入力==>5
結果:*****

問題3:2つの数値を入力し、範囲の合計を表示しなさい
実行画面
整数1(小)入力==>5
整数2(大)入力==>7
5〜7の合計:18
以上の3問ですよろしくお願いします

155:デフォルトの名無しさん
07/05/16 07:43:22
>>154
問題1
for(;;){
printf("合計:%d\n", 1+2+3+4+5+6+7+8+9+10);
goto EndRuupu;
}
EndRuupu:

問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(;;){
printf("*");
if(--n==0) goto EndRuupu;
}
EndRuupu:
printf("\n");


156:デフォルトの名無しさん
07/05/16 07:49:18
問題3
int show, die, kei=0;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d〜%dの合計:", show, die);
for(;;){
kei += show;
if(++show>die) goto EndRuupu;
}
EndRuupu:
printf("%d\n", kei);

157:デフォルトの名無しさん
07/05/16 08:08:20
>>154
こっちは悪い例。
問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(; n!=0; n--) printf("*");
printf("\n");

問題3
int show, die, kei;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d〜%dの合計:", show, die);
for(kei=0; show<die; show++) kei += show;
printf("%d\n", kei);

158:デフォルトの名無しさん
07/05/16 09:14:33
>>94
本当だな。std::read()の方がいいな

159:デフォルトの名無しさん
07/05/16 10:43:32
>>158
この場合はiosのフォーマット変換層自体いらないので、実はfstreamでなくて
filebufのほうが無駄が無くていい。
↓のような感じ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ただし、filebufの内部を直接読み書きしない限りは
ファイルバッファのバッファに読み込み→ユーザバッファにコピー
という無駄が発生するので、どうしたって低水準I/Oよりは遅くなると思われ。

160:デフォルトの名無しさん
07/05/16 10:48:36
>>159
なるほど。こういうのは初めて見ました。
rdbuf()を使った物は見た事があるのですが。
Cに勝てないのは辛い所ですね。

161:デフォルトの名無しさん
07/05/16 12:26:06
1:C言語
2:
問題1:数値を入力し、以下のように表示しなさい
実行画面
整数入力==>8
********
*******
******
*****
****
***
**
*


162:161の続き
07/05/16 12:34:17
問題2:10進数を入力し8ビットの2進数に変換し表示しなさい
実行画面
10進数入力==>118
2進数:01110110
以下の2問よろしくお願いします



163:デフォルトの名無しさん
07/05/16 12:40:41
(1):C言語
(2):制限時間あと3時間
(3):問題文
問題:2重のfor文を使って、以下のような九九表を完成させなさい
実行画面  
 1 2 3 4 5 6 7 8 9
_ _ _ _ _ _ _ _ _ _ _ _
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
わかる方が居ましたらお願いします


164:デフォルトの名無しさん
07/05/16 12:53:34
>>163
#include <stdio.h>
int main()
{
for (int iy = 0; iy <= 9; ++iy) {
if (iy == 0) {
printf(" | 1 2 3 4 5 6 7 8 9\n"
"-+--------------------------\n");
continue;
}
for (int ix = 0; ix <= 9; ++ix) {
if (ix == 0) {
printf("%1d|", iy);
} else {
printf("%2d%c", ix * iy, ix < 9 ? ' ' : '\n');
}
}
}
return 0;
}


165:デフォルトの名無しさん
07/05/16 12:59:16
>>161
#include <stdio.h>

int main()
{
    int i, n;
    printf("整数入力==>");
    if (scanf("%d", &n) == 1) {
        while (i = n--) {
            while (i--)
                putchar('*');
            putchar('\n');
        }
    }
    return 0;
}

166:デフォルトの名無しさん
07/05/16 13:02:59
>>162
#include <stdio.h>
#include <string.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
char buf[4];
sprintf(buf, "%03o", num);
printf("binary number:");
for (int ic = 0; ic < 3; ++ic) {
static char const * const binaries[] = {
"000", "001", "010", "011", "100", "101", "110", "111"
};
printf("%s", binaries[buf[ic] - '0'] + (ic == 0 ? 1 : 0));
}
printf("\n");
return 0;
}


167:デフォルトの名無しさん
07/05/16 13:10:56
>>162
// 前半は>166を流用
#include <stdio.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
static char const * const binaries[] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};
printf("binary number:%s%s\n", binaries[num >> 4], binaries[num & 0xf]);
return 0;
}


168:デフォルトの名無しさん
07/05/16 13:55:23
>>161
これ一ヶ月ほど前に見たような

169:デフォルトの名無しさん
07/05/16 13:59:46
スレリンク(tech板:473番)
だったわ、宿題じゃなかったか


170:デフォルトの名無しさん
07/05/16 14:07:31
俺も見たような気がしたけどこれだった
スレリンク(tech板:417番)

171:デフォルトの名無しさん
07/05/16 14:12:41
これってprint増やす以外に作る方法ってありますか?

// 配列を反転するプログラム(の予定)
#include <stdio.h>
int tables[10];
void print(void)
{
for (int i = 0; i < 10; i++) {
printf("%d:", i);
printf("%d\n", tables[i]);
}
printf("\n");
}
void reverse(void)
{
for (int i = 0; i < 10/2; i++) {
tables[i] = tables[9-i];
tables[9-i] = tables[i];
}
}

int main(void)
{
for (int i = 0; i < 10; i++) {
tables[i] = i + 100;
}

172:デフォルトの名無しさん
07/05/16 14:27:26
>print増やす
意味が分からん。
それよりもmain内で関数が呼ばれてない。
あと、配列をグローバルにする必要性は無い。

173:デフォルトの名無しさん
07/05/16 14:59:42
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
10個の実数データをキーボードから入力し,配列data[10]に格納しなさい。そして,各要素の小さい方からの順位を決定して,別の配列rank[10]に格納しなさい。最後に,入力データdata[10]と順位rank[10]をともに出力しなさい。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語:C
[4] 期限:日曜日
[5] その他の制限:

よろしくお願いします。

174:デフォルトの名無しさん
07/05/16 15:23:15
>>133
助かりました!ありがとうございます!

175:デフォルトの名無しさん
07/05/16 15:43:15 BE:139752498-2BP(222)
>>173
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=atof(tmp);}
qsort(data,sizeof(data)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}

176:デフォルトの名無しさん
07/05/16 15:44:04
C言語ではないんですがアルゴリズムのフローチャートを書ける方居ますか?
問題1:平均点計算
点数を入力して、平均点を出力するフローを答えなさい[入力した点数が0より小さい時終了する]
問題2:合計
1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
の2問のフローチャートがどうしてもわからないので何方か解る方がいましたら教えてください
いくら考えても解らないので何方かお願いします

177:デフォルトの名無しさん
07/05/16 15:44:40
>>171 こういう事か?

今、××を見ながらCの勉強をしています。
そこに「ある配列を反転した内容を別の配列にコピーする」というプログラムあり、
それを改造して、「あるひとつの配列の内容を反転する」プログラムを自力で作ってみました。
しかしコンパイルは通るのですが、実行してみると思ったとおりの結果にならなくて困っています。
元のプログラムでは表示用の関数printが2つに分かれており、
それをひとつにまとめてしまったのが原因なのでしょうか?
配列がひとつしか無いので表示用の関数は1つだけにしたいのですが、
上手いやり方はありませんか?

178:デフォルトの名無しさん
07/05/16 16:08:13 BE:67935757-2BP(222)
>>175訂正
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=rank[i]=atof(tmp);}
qsort(rank,sizeof(rank)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}

179:デフォルトの名無しさん
07/05/16 16:13:28
CUIばっかじゃねーか

180:デフォルトの名無しさん
07/05/16 16:37:06
10個の整数データを木構造に保存し、
順に木をなぞる再起プログラミングを作成せよ.

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。

181:デフォルトの名無しさん
07/05/16 16:39:22
マルチ
スレリンク(tech板:851番)

182:デフォルトの名無しさん
07/05/16 16:39:26 BE:34937892-2BP(222)
>>180
>順に木をなぞる再起プログラミングを作成せよ.

何の順だ。

183:デフォルトの名無しさん
07/05/16 16:46:38
他人に質問できるレベルにさえ達してないのか

184:デフォルトの名無しさん
07/05/16 17:01:22
>>183
課題をそのままコピーしただけなのですが・・・すいません。

>>182
「順」っていう言葉がなければ大丈夫ですかね?
分かる範囲でいいので、ぜひご指導お願いします。

10個の整数データを木構造に保存し、
木をなぞる再起プログラミングを作成せよ.

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。


185:デフォルトの名無しさん
07/05/16 17:04:21
>>173
#include <stdio.h>
int main(void){
int i,j,rank[10]={0};double data[10];char buf[256];
for(i=0;i<10;){
printf("%d番目の実数を入力して下さい:",i+1);
fgets(buf,255,stdin);
if(!sscanf(buf,"%lf",data+i)) continue;
++i;
}
for(i=0;i<10;++i){
for(j=0;j<10;++j){
if(data[i]<=data[j]) ++rank[j];
}
}
for(i=0;i<10;++i) printf("data[%d]=%f\n",i,data[i]);
for(i=0;i<10;++i) printf("rank[%d]=%d\n",i,rank[i]);
return 0;
}

186:デフォルトの名無しさん
07/05/16 17:18:00 BE:69876094-2BP(222)
>>184
情報が足りねえって言ってるのにさらに減らすのはどういう嫌がらせですか。
「どんな木をどうやってなぞるのか」と聞いてるのに。

187:デフォルトの名無しさん
07/05/16 17:30:17
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

よろしくお願いします。


188:デフォルトの名無しさん
07/05/16 17:47:49
高校1年です

[1] プログラミング
[2] キーボードから固定費・変動費・単価・商品の売れた数を受け取り、収益と収益における固定費・変動費それぞれの割合、純利益を表示するプログラムをC言語で記述せよ
[3] 環境
 [3.1] 窓達XP
 [3.2] Borland C++ Compiler 5.5
 [3.3] C
[4]明日の情基の時間までに提出
[5] 専用のプリントに記述し提出、プログラムの動作を確認できる環境があれば確認して提出。その際、失敗したプログラムは消さないようにすること

動作確認は出来る環境です

一応書いたのですが、固定費割合と変動費割合が算出されません


189:デフォルトの名無しさん
07/05/16 17:49:33
>>188の課題で私が書いたプログラムを晒しときますね
固定費・変動費の割合が0.000000000になる以外は正常に算出されます

{
int tanka,kote,hen,rie,ure_kazu,ure_kane;
float kote_wari,hen_wari;

printf("単価はいくら?\n");
scanf("%d",&tanka);

printf("いくつ売れた?\n");
scanf("%d",&ure_kazu);

printf("固定費用は?\n");
scanf("%d",&kote);

printf("変動費用を算出して入力してください\n");
scanf("%d",&hen);

ure_kane = ure_kazu * tanka;
       rie = ure_kane - (kote + hen);

kote_wari = (kote / ure_kane) * 100;
hen_wari = (hen / ure_kane) * 100;

printf("収益は%d、収益における固定費と変動費の割合はそれぞれ%f%、%f%です。よって貴社の利益は%dです。",ure_kane,kote_wari,hen_wari,rie);

return 0;
}

190:デフォルトの名無しさん
07/05/16 17:55:23
>>189
スレ違い。

整数割る整数は整数になる。実数にしたいなら、キャストしとけ。
ついでに言えば、特にケチる理由がないならdoubleにしとけ。
floatでは、10進換算で7桁程度しか精度がないぞ。
Ex.
double kote_wari = (double) kote / ure_kane * 100.;

191:デフォルトの名無しさん
07/05/16 17:56:03 BE:104814296-2BP(222)
>固定費・変動費の割合が0.000000000になる

理由をまず考えろ。

192:デフォルトの名無しさん
07/05/16 17:56:54
小手割りって何かの技みたいだな。

193:デフォルトの名無しさん
07/05/16 17:58:48
>>190
わかりました
100.0000を超えることはないのでfloatで十分だと思ったのですが…
doubleでやってみますね
キャストはまだ習ってませんがjavaで学んだのでやってみます
ありがとうございました

194:デフォルトの名無しさん
07/05/16 17:59:59
>>191
分かりませんでしたのでここで質問させていただきました
あれ?もともとの公式が間違ってるのかな…?

195:デフォルトの名無しさん
07/05/16 18:04:55
>>194
>190

196:デフォルトの名無しさん
07/05/16 18:05:37
>>190
キャストがよく分からなかったので変数を全てfloatで宣言したら正常に動作しました
本当にありがとうございました

197:デフォルトの名無しさん
07/05/16 18:06:33
hen_wari = (hen / ure_kane) * 100;
hen=200,ure_kane=400の場合、200÷400=0余り200
hen_wari = (200 / 400) * 100;
hen_wari = 0 * 100;
hen_wari = 0;

198:デフォルトの名無しさん
07/05/16 18:10:42
>>196
その大雑把な応用性は現場にはとても必要なものだ
しかし大雑把過ぎると精密さが要求されるプログラムでしくじるかもな

199:デフォルトの名無しさん
07/05/16 18:44:55 BE:104814296-2BP(222)
最低限、作用機序を理解していることが前提だがな。
「理由は分からないけどこうしたら直った」という対処は迷惑でしかない。

200:デフォルトの名無しさん
07/05/16 20:05:27
>>188
この前入学したばかりなんだろ?
なんかレベル高い授業やってんな

201:デフォルトの名無しさん
07/05/16 20:11:29
>>188は高学歴

202:デフォルトの名無しさん
07/05/16 20:14:51
>200
用語が難しそうに見えるだけで、やってることは数字入力に四則演算程度の入門レベルだろ。

203:デフォルトの名無しさん
07/05/16 20:17:02
>>202
高校一年でだぞ?

204:デフォルトの名無しさん
07/05/16 20:45:25
私が高校一年の時はCじゃなくてアセンブリだったな orz どう考えても低(ry

205:デフォルトの名無しさん
07/05/16 20:47:36
高1でアセンブラか。
そりゃずいぶんと低レベルだな。

206:デフォルトの名無しさん
07/05/16 20:52:58
>>205
俺なんか中学のときにトランジスタを・・・


207:デフォルトの名無しさん
07/05/16 20:56:22
それは趣味だろ
義務教育でトランジスタとか触るの?

208:デフォルトの名無しさん
07/05/16 20:58:39
もしかして、ゆとり世代には
「技術」という科目は無いのか?


209:デフォルトの名無しさん
07/05/16 20:58:46
もう20年以上まえになるが...
高校の頃, 必死こいてセグメントレジスタ気にしながら 8086 アセンブラで
lisp 処理系を作ろうとしていた当時の俺って低レベルですか?


210:デフォルトの名無しさん
07/05/16 21:08:09
>>207-208
10年前中学生だった俺は授業の中でトランジスタを触ることがあった。
>>209
低レベルだね


211:デフォルトの名無しさん
07/05/16 21:14:28
>>208
ゆとり直前世代ですがありました

皆さんが低レベルと言ってるのは、低級と言い換えても構いませんね!
大学入って初めてCに触れてるくらいだから俺はかなり高レベル

212:デフォルトの名無しさん
07/05/16 21:15:50
俺なんか小学校のときにそろばんを・・・

213:デフォルトの名無しさん
07/05/16 21:17:28
低水準のことじゃないのか。

214:デフォルトの名無しさん
07/05/16 21:17:32
>>211
俺にとっては C はアセンブラの延長
っか, マシンに依存しないアセンブラ
十分, 低レベル言語


215:デフォルトの名無しさん
07/05/16 21:46:05
ゆとりだけど技術あったよ
中学1年と2年で木工、3年でPC
選択ではタイニーベーシックもやる

ちなみに>>188の高校は大体予想が付く
普通の工業では固定費割合とかの経営側のことはやらない
たぶん初級シスアド狙ってる学校
だから初級シスアド試験一部免除校リストのどれかだろ

216:デフォルトの名無しさん
07/05/16 22:07:39
int flag = 0;

while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do(); }

C++でAPIを利用したゲームを作成しています。
ここで、Testというクラスがあらかじめ定義されているとしてください。
flagが100になった(つまりループが100回回ったとき)に敵を発生させたく、このようなプログラムを書きました。
しかし、コンパイル時に、t2が定義されていない識別子となり、はじかれてしまいます。(最終行)
どのように対処すればよろしいのでしょうか?
whileループ前にt2を確保しておけば動作するのですが、それでは今後困ることがでるので・・・。
宜しくお願いします。

環境:VC++6.0

217:デフォルトの名無しさん
07/05/16 22:11:55
ループ内で変数確保とはびっくりした。これっていいの?

218:デフォルトの名無しさん
07/05/16 22:12:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  与えられたnに対し、分母がn以下で値が0以上1以下の既約分数をすべて求めよ。(再帰を使うこと。)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです。

219:216
07/05/16 22:16:54
ループ内でflag++;という分を書き忘れてしまいました。
int flag = 0;

while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do();
flag++;}
です。

>>217
やっぱりまずいんでしょうかねぇ。
でもあるタイミングで敵を発生させるときとかどうしたらいいのかわかりません・・・。

220:デフォルトの名無しさん
07/05/16 22:26:09
>>216 >>219
スレ違い
スコープについて勉強してこい

221:デフォルトの名無しさん
07/05/16 22:40:00
>>186
根付き木で、深さ優先探索です。

222:216
07/05/16 22:40:15
やはりあらかじめ作成しておいて、後に削除するしかないのでしょうか・・・。
それだと、敵をある時間に生成する上手い方法ありませんか?

223:デフォルトの名無しさん
07/05/16 23:04:59
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字列@と文字列Aを比較し、正しければ○、正しくなければ×を出力せよ。
文字列は半角英数、全角、空白、記号も含める。
(文字列@、Aともに空白の場合はエラーを出力する。)

<実行結果>
文字列@を入力してください。---> (入力後、実行で下段を表示)
文字列Aを入力してください。---> (入力後、実行で結果を表示)
結果:○

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:Visual Studio
 [3.3] 言語:C
[4] 期限:5/17
[5] その他の制限: 無し

224:デフォルトの名無しさん
07/05/16 23:10:12
>>223
#include<stdio.h>
#include<string.h>
int main(){
char str1[1000],str2[1000];
printf("文字列@を入力してください。--->");
scanf("%s",str1);
printf("文字列Aを入力してください。--->");
scanf("%s",str2);
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
return 0;
}

225:デフォルトの名無しさん
07/05/16 23:14:13
>>224
ありがとうです。
でも、1000文字を超えたらアウトですよね?
その場合、どうしたらいいですか?
それと、両方とも空白時のエラーメッセージはどうしましょう・・・

226:デフォルトの名無しさん
07/05/16 23:18:16
>>225
ごめん、普通にエラーとか忘れてた orz
#include<stdio.h>
#include<string.h>
#define N 1000
int main(){
char str1[N],str2[N];
printf("文字列@を入力してください。--->");
fgets(str1,N,stdin);
printf("文字列Aを入力してください。--->");
fgets(str2,N,stdin);
if(strlen(str1)>1||strlen(str2)>1)
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
else
printf("エラー\n");
return 0;
}
さっきよりほんの少しだけまともに書いてみた。
メモリの許す限り文字列を比較したいなら、勉強して自分でがんがれ

227:>222
07/05/16 23:50:06
宣言をループの外で
確保はループの中で

228:デフォルトの名無しさん
07/05/17 01:43:48
>問題2:合計
>1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい

[開始]
 |
[計算結果s=0]
 |
[カウンタn=1]
  |
 [カウンタi=1]
   |
  [s=s+i]
   |
  [i=i+1]
   |
 [カウンタi<=nの間繰り返し]
  |
 [n=n+1]
  |
[カウンタn<=10の間繰り返し]
 |
[計算結果s表示]
 |
[終了]

229:デフォルトの名無しさん
07/05/17 01:45:33
>>225
応用でstring.hを使わずに考えられると力が付くぞ

230:デフォルトの名無しさん
07/05/17 01:51:50
>>225
1000文字超えたときのこと考えるとCじゃ無理

231:デフォルトの名無しさん
07/05/17 03:07:06
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

前に書いたのですが、スルーされてしまったのでもう一度書かさせてもらいます。
非常に困ってます。どうかよろしくお願いします。

232:デフォルトの名無しさん
07/05/17 03:08:46
>書かさせてもらいます
さ入れ言葉

233:デフォルトの名無しさん
07/05/17 05:26:00
>>231
/*

正方行列の和・差・積を表示するプログラム

*/

#include <stdio.h>

/* ユーザ定義型宣言 */
#define DIM 4
typedef struct
{
int element[DIM][DIM];
}matrixSquare;

/* 関数宣言部 */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2);
void inputMatrixSquare(matrixSquare* ms);
void putMatrixSquare(matrixSquare ms);



234:デフォルトの名無しさん
07/05/17 05:26:21
/* メイン関数 */
int main(void)
{
matrixSquare ma, mb;

/* 正方行列に数値を入力する */
{
printf("4x4の正方行列aを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&ma);
printf("4x4の正方行列bを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&mb);
/* 入力バッファに溜まるので、一気に全ての要素を入力しても良い */
}

/* 和・差・積を表示する */
{
printf("aとbの和\n"); putMatrixSquare(AddSqu(&ma, &mb));
printf("aとbの差\n"); putMatrixSquare(SubSqu(&ma, &mb));
printf("aとbの積\n"); putMatrixSquare(MulSqu(&ma, &mb));
}
return 0;
}



235:デフォルトの名無しさん
07/05/17 05:27:06
/* */
/* 関数の実装 */
/* */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の和を返す */
{
matrixSquare mRes;
int y, x;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] + m2->element[y][x];
}
}
return mRes;
}


236:デフォルトの名無しさん
07/05/17 05:27:37
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の差を返す */
{
matrixSquare mRes;
int y, x;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] - m2->element[y][x];
}
}
return mRes;
}


237:デフォルトの名無しさん
07/05/17 05:27:54
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の積を返す */
{
matrixSquare mRes;
int x, y, k;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
int tmp;
for(k=0, tmp=0; k!=DIM; k++)
{
tmp += m1->element[k][x] * m2->element[y][k];
}
mRes.element[y][x] = tmp;
}
}
return mRes;
}


238:デフォルトの名無しさん
07/05/17 05:29:31
void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i;

for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
scanf("%d %d %d %d", &(ms->element[i][0]), &(ms->element[i][1]), &(ms->element[i][2]), &(ms->element[i][3]));
}
printf("\n");
}


239:デフォルトの名無しさん
07/05/17 05:30:12
void putMatrixSquare(matrixSquare ms)
/* 正方行列を標準出力へ書き出す */
{
int x, y;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
printf("%10d ", ms.element[y][x]);
}
printf("\n");
}
}

[EOF]

240:デフォルトの名無しさん
07/05/17 05:55:40
>238訂正

void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i, j;

for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
for(j=0; j!=DIM; j++)
{
scanf("%d", &(ms->element[i][j]));
}
}
printf("\n");
}


241:デフォルトの名無しさん
07/05/17 05:56:55
うpロダ使えYO!

242:216
07/05/17 06:06:30
>>227 ありがとうございます無事できました。

クラスをnewで作成したとします。(仮に*test)とします。
これをクラス内のメソッドで消す方法はありませんか?
つまり、自クラスで自分をdeleteするということです。
自分は自信の名前を知らないので、
delete test ; と記述することが出来ません。
あらかじめprivate変数として自信の名前を記録しておく他ないのでしょうか?

243:デフォルトの名無しさん
07/05/17 06:50:35
delete This;

244:デフォルトの名無しさん
07/05/17 06:51:24
↑間違い
delete this;
です。

245:デフォルトの名無しさん
07/05/17 06:54:03
てかこれは基本中の基本であってもう一度C++勉強し直せ

246:デフォルトの名無しさん
07/05/17 08:01:23
>>231
問2。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

247:デフォルトの名無しさん
07/05/17 09:10:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  【処理方式】
@ int型変数に値を入力する。(0〜9)
A chg関数に、入力した値を渡す。(ポインタ)
B その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
C Main関数にてchgにて計算された値を表示する。
【処理結果】
 Cnt =>XXXX
 cnt(chg後)  :XXXX
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです

248:デフォルトの名無しさん
07/05/17 09:41:50
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
int main(){
int cnt;
printf("Cnt =>");
scanf("%d",&cnt);
if(cnt<0 && 9<cnt) return 1;
chg(&cnt);
printf("cnt(chg後)  :%d\n",cnt);
return 0;
}


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4178日前に更新/299 KB
担当:undef