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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
printf("%s\n","あんたの宿題片づけます");
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【歴代スレは>>2-13
2デフォルトの名無しさん:2005/05/11(水) 16:02:50
3デフォルトの名無しさん:2005/05/11(水) 16:03:18
4デフォルトの名無しさん:2005/05/11(水) 16:03:42
5デフォルトの名無しさん:2005/05/11(水) 16:05:01
>>1
6985:2005/05/11(水) 16:10:56
1さんお疲れ様でした。
前スレ埋まってしまったのでもう一度質問します
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文:
kg→gの変換プログラムを作る。
xkgのxをキーボードから入力すると

xkgはyyyygです。

と答えるプログラムを作成しなさい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限: まだ授業始まったばかりなので演算を習ったところです。

初歩的な質問ですいませんが、よろしくお願いします。


7デフォルトの名無しさん:2005/05/11(水) 16:15:40
>>6
int main(int argc, char* argv[])
{
printf( "kg→gの変換プログラムを作る。\n" );
printf( "xkgのxをキーボードから入力すると\n" );
printf( "\n" );
printf( "xkgはyyyygです。\n" );
printf( "\n" );
return ( 0 );
}
8デフォルトの名無しさん:2005/05/11(水) 16:17:35
>>6
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
printf("%dkgは%dgです。\n",x,x*1024);
return 0;
}
//要修正。
9デフォルトの名無しさん:2005/05/11(水) 16:24:32
>>8
warota
10985:2005/05/11(水) 16:28:22
>>7,8
早速のお返事ありがとうございます。
問題文わかりにくくてすいません。
後で早速試してみますね。
どうもありがとうございました。
11デフォルトの名無しさん:2005/05/11(水) 16:40:16
>>1
自分好みのスレタイに変えてんじゃねーよバカ
12デフォルトの名無しさん:2005/05/11(水) 16:49:41
こうかな?

#include<stdio.h>

int main(void)
{
char buf[256];
double x;
while(printf("重さを入力してください:"), fgets(buf, sizeof(buf), stdin) != NULL)
if(sscanf(buf, "%lf", &x) == 1)
break;
printf("%.0lf kg は %.0lf gです。\n", x, x * 1000.0);
return 0;
}
13デフォルトの名無しさん:2005/05/11(水) 16:51:09
>>11
1代目を見てみろ
好きに変えたのはぼるじょあの方だ
14デフォルトの名無しさん:2005/05/11(水) 16:56:14
[1] 授業単元:C 言語
[2] 問題文(含コード&リンク):
プログラムの実行が初めてであれば,その旨のメッセージを表示し,実行が2
回目以降であれば,1回前に実行したときの日付と時刻と「気分」を表示する
プログラムを作成せよ.すなわち,前回の時刻を表示した後に「feeling:」と
入力を促して,キーボードから文字列を読み込んで,ファイルに書き込む.
例えば,「good」と入力した場合,次回に実行したときには,
「9999-99-99-99:99:99 good」と表示すること.
[3] 環境
 [3.1] OS:iMac
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限 :無期限
[5] その他の制限:
よろしくお願いします。

15デフォルトの名無しさん:2005/05/11(水) 16:56:59
あげ忘れ
16デフォルトの名無しさん:2005/05/11(水) 16:59:57
乱数を初期化した後で、x=rnd(1)とするとどんな数をでたらめに発生させてxに代入するのですか?
17デフォルトの名無しさん:2005/05/11(水) 17:01:13
お願いします。

[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク): 静的記憶域期間が与えられたオブ
ジェクトのアドレスを表示するプログラム
を作成せよ.
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限 :2005/05/13
[5] その他の制限:なし
18デフォルトの名無しさん:2005/05/11(水) 17:10:20
[1] 授業単元:基礎プログラミング
[2] 問題文(含コード&リンク): Rnd()やIntを用いて1以上12以下の整数を乱数として発生させ
1が出たらA、2が出たらBみたいなプログラムを作る。VBコードを示せ
[3] 環境
 [3.1] OS: 98
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:
[4] 期限:明日まで[5] その他の制限:

お願いしますです
19デフォルトの名無しさん:2005/05/11(水) 17:12:14
>>18
VBかよ!!!!!
20デフォルトの名無しさん:2005/05/11(水) 17:17:22
>>14
#include <stdio.h>
#include <string.h>
#include <time.h>
#define DATE_FILE "date.txt"
int main(void)
{
char buf[256], *p = "プログラムの実行が初めてです。";
time_t t;
struct tm *tm;
FILE *fp = fopen(DATE_FILE, "r");
if(fp)
{
fgets(buf, sizeof(buf), fp);
fclose(fp);
p = buf;
}
puts(p);
printf("feeling:");
fgets(buf, sizeof(buf), stdin);
p = strchr(buf, '\n'); if(p) *p = '\0';
time(&t); tm = localtime(&t);
fp = fopen(DATE_FILE, "w");
if(fp)
{
fprintf(fp, "%04d-%02d-%02d-%02d:%02d:%02d %s", tm->tm_year + 1900, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, buf);
fclose(fp);
}
else
printf("ファイル %s が書き込み用に開けません。\n", DATE_FILE);
return 0;
}
21デフォルトの名無しさん:2005/05/11(水) 17:18:28
>>16
質問の意味が不明というかスレ違い
22デフォルトの名無しさん:2005/05/11(水) 17:19:35
>>17
#include <stdio.h>

int main(void)
{
static int i;
printf("%p\n", &i);
return 0;
}
23デフォルトの名無しさん:2005/05/11(水) 17:27:03
>>18
Option Explicit

Sub Main()

Dim I As Integer, C As String

Randomize
I = Int(Rnd * 12) + 1
C = Chr(Asc("A") + I - 1)
MsgBox C

End Sub
24デフォルトの名無しさん:2005/05/11(水) 17:29:00
>>20
どうもです。
25デフォルトの名無しさん:2005/05/11(水) 17:59:00
>>20
>printf("ファイル %s が書き込み用に開けません。\n", DATE_FILE);
fprintf(stderr, "ファイル " DATE_FILE " が書き込み用に開けません。\n");
26デフォルトの名無しさん:2005/05/11(水) 18:07:04
1] 授業単元:プログラミング技術
[2] 問題文:最初に総人数、その後n人目の点数を入力し、
  そのデータを並び替えて降順および昇順で表示するプログラムを作成しなさい
[3] 環境
 [3.1] OS WindosXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++
[4] 期限:6月11日
[5] その他の制限:
27デフォルトの名無しさん:2005/05/11(水) 18:19:31
>>23さんありがとうございました!
28デフォルトの名無しさん:2005/05/11(水) 18:22:04
>>26
> [4] 期限:6月11日

一月後でいいのか。
29デフォルトの名無しさん:2005/05/11(水) 18:50:23
>>26
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int GeSizeT(const char *itemname, size_t max) {
char buf[256]; size_t i;
for(; ; ) {
printf("%sを入力してください: ", itemname);
fgets(buf, sizeof(buf), stdin);
if(sscanf(buf, "%u", &i) == 1 && i <= max) break;
puts("エラーです。");
}
return i;
}
int cmp_asc(const void *elem1, const void *elem2) { return *(int *)elem1 - *(int *)elem2; }
int cmp_desc(const void *elem1, const void *elem2) { return *(int *)elem2 - *(int *)elem1; }
int main(void) {
char buf[256];
size_t i, sw, num = GeSizeT("総人数", (size_t)-1);
size_t *scores = malloc(sizeof(int) * num);
if(!scores) { fputs("メモリが足りません。\n", stderr); return -1; }
for(i = 0; i < num; i++) {
sprintf(buf, "%u 人目の点数", i + 1);
scores[i] = GeSizeT(buf, 100);
}
sw = GeSizeT("昇順に表示するなら 0 を、降順なら 1 ", 1);
qsort(scores, num, sizeof(size_t), sw? cmp_desc: cmp_asc);
for(i = 0; i < num; i++)
printf("%u: %u\n", i + 1, scores[i]);
free(scores);
return 0;
}
30>>26:2005/05/11(水) 18:51:29
間違えましたorz
5月です…すいません
3129:2005/05/11(水) 18:58:17
#include <limits.h> 要らなかった ○| ̄|_
32デフォルトの名無しさん:2005/05/11(水) 19:26:34
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
プログラムの実行が初めてであれば,その旨のメッセージを表示し,実行が2 回目以降であれば,
1回前に実行したときの日付と時刻と「気分」を表示するプ ログラムを作成せよ.
日付・時刻を struct tm型の値として,直接バイナリに 読み書きすること.
[3] 環境
 [3.1] OS win xp
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C言語
[4] 期限 :なし
[5] その他の制限:

33デフォルトの名無しさん:2005/05/11(水) 20:20:14
[1] 授業単元:C
[2] 問題文(含コード&リンク): 要素型がdouble型で要素数が10
である配列の全要素の値を読み書きするプログ ラムを作成せよ.
[3] 環境
 [3.1] OS:win xp
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限 :無期限
[5] その他の制限:
34デフォルトの名無しさん:2005/05/11(水) 20:29:21
どういう風に読み書きしたらいいのだろうか・・・
3533:2005/05/11(水) 20:31:55
>>33
任意に読み書きできる、という意味だと思います。
3633:2005/05/11(水) 20:32:28
>>34
任意に読み書きできる、という意味だと思います。
37デフォルトの名無しさん:2005/05/11(水) 20:35:47
前スレが埋まったのでもう一度…
[1] 授業単元:プログラミング
[2] 問題文
英文をファイル入力で読み込み、7文字以上の英単語は大文字に変換して標準出力せよ。
なお、入力にはfscanfを、出力にはprintfを用いること。
[3] 環境
 [3.1] OS:winxp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語C
期限 今週末

例えば、
This problem is inportant.
という英文が書かれたファイルを読み込んだときに
This PROBLEM is INPORTANT.
という風に変換して標準出力したいのです。
よろしくお願いします。
38デフォルトの名無しさん:2005/05/11(水) 21:25:30
>>37
#include<ctype.h>の中にint toupper(int c)とint tolower(int c)って関数がある。
前者は小文字を大文字に、後者は大文字を小文字にする。
39デフォルトの名無しさん:2005/05/11(水) 21:26:53
>>32 >14 と似ているな

#include <stdio.h>
#include <string.h>
#include <time.h>
#define DATE_FILE "date.txt"
int main(void)
{
char buf[256] = { 0 }, *p;
time_t t;
FILE *fp = fopen(DATE_FILE, "r");
if(fp) {
struct tm tm;
fread(&tm, sizeof(struct tm), 1, fp); fgets(buf, sizeof(buf), fp);
fclose(fp);
printf("%04d-%02d-%02d-%02d:%02d:%02d %s\n", tm.tm_year + 1900, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, buf);
}
else
puts("プログラムの実行が初めてです。");
printf("feeling:");
fgets(buf, sizeof(buf), stdin);
p = strchr(buf, '\n'); if(p) *p = '\0';
fp = fopen(DATE_FILE, "w");
if(fp) {
struct tm *tm; time(&t); tm = localtime(&t);
fwrite(tm, sizeof(struct tm), 1, fp); fputs(buf, fp);
fclose(fp);
}
else
printf("ファイル %s が書き込み用に開けません。\n", DATE_FILE);
return 0;
}
4039:2005/05/11(水) 21:27:57
ちなみに 「struct tm型の値として,直接バイナリに」 は本来やっちゃいけないこと。
出題したやつ祭れ。
41デフォルトの名無しさん:2005/05/11(水) 21:35:46
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク): 以下のメンバーを持つ構造体"player"をC言語で宣言せよ.

・背番号
・名前


そして、「赤星(53),藤本(9),シーツ(4),金本(6),今岡(7)」
の5名の名前と背番号をC言語で静的に宣言せよ.


[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限 :明日12日
[5] その他の制限:

タイガース初心者ですが、よろしくお願いします。
42デフォルトの名無しさん:2005/05/11(水) 21:50:41
>>33 期待通りの動作かは知らないが要件は一応満たしてるぞ
#include <stdio.h>
#define VALUES_FILE "values.dat"
#define VALUES_NUM 10
void Input(const char *itemname, const char *format, void *data) {
char buf[256];
for(; ; ) {
printf("%sを入力してください: ", itemname);
clearerr(stdin); *buf = '\0'; fgets(buf, sizeof(buf), stdin);
if(sscanf(buf, format, data) == 1) break;
puts("エラーです。");
}
}
int GetSizeT(const char *itemname) { size_t i; Input(itemname, "%u", &i); return i; }
double GetDouble(const char *itemname) { double d; Input(itemname, "%lf", &d); return d; }
int main(void)
{
double values[VALUES_NUM];
int i;
FILE *fp = fopen(VALUES_FILE, "r");
if(fp) { fread(values, sizeof(values), 1, fp); fclose(fp); }
else for(i = 0; i < VALUES_NUM; i++) values[i] = 0.0;
for(; ; ) {
for(i = 0; i < VALUES_NUM; i++) printf("%d: %f\n", i, values[i]);
while((i = GetSizeT("書き換える数値の番号")) >= VALUES_NUM) puts("エラーです。");;
values[i] = GetDouble("置き換える値");
fp = fopen(VALUES_FILE, "w");
if(fp) { fwrite(values, sizeof(values), 1, fp); fclose(fp); }
else fprintf(stderr, "ファイル " VALUES_FILE " が書き込み用に開けません。\n");
}
return 0;
}
43デフォルトの名無しさん:2005/05/11(水) 22:01:48
>>41

typedef struct _player {

unsigned int jersey_number;
const char* name;

} player;

static player players[] = {

{ 4, "シーツ" },
{ 6, "金本" },
{ 7, "今岡" },
{ 8, "山本浩二" },
{ 9, "藤本" },
{ 53, "赤星" }

};
44デフォルトの名無しさん:2005/05/11(水) 22:04:40
>>37
一応動くけど、fscanf() じゃ改行みんな消えちゃうよ。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define ENGLISH_FILE "english.txt"
#define BORDER 7
int main() {
char buf[256];
FILE *fp = fopen(ENGLISH_FILE, "r");
if(!fp) { fprintf(stderr, "ファイル " ENGLISH_FILE " が読み込み用に開けません。\n"); return -1; }
while(fscanf(fp, "%s", buf) != EOF) {
if(strlen(buf) > BORDER) {
char *p = buf;
while(*p) {*p = toupper(*p); p++; }
}
printf("%s ", buf);
}
fclose(fp);
getchar();
return 0;
}
4544:2005/05/11(水) 22:06:53
ここ間違いだった。

> if(strlen(buf) > BORDER) {

if(strlen(buf) >= BORDER) {
46デフォルトの名無しさん:2005/05/11(水) 22:19:45
47デフォルトの名無しさん:2005/05/11(水) 22:44:37
>>33
申し訳ないが、任意に読み書きできるという仕様は成立しないのです。
もっと具体的な動作を示す必要があります。
48デフォルトの名無しさん:2005/05/12(木) 00:25:58
>直接バイナリに」 は本来やっちゃいけない

はあ?
なんで?
49デフォルトの名無しさん:2005/05/12(木) 00:29:57
>>47
あんたが具体的な動作を日本語で示しなさい。
50デフォルトの名無しさん:2005/05/12(木) 00:35:55
>>49
じゃ、「何もしないで終了するプログラム」ということで

******* 終了 ********:
51デフォルトの名無しさん:2005/05/12(木) 00:40:45
>>44
ありがとうございます。
でも、この場合最後の単語が
xxxxxx.
と、ドットを伴っているとドットもアルファベットと認識されてしまうので
XXXXXX.
という風に6文字の英単語でも大文字に変換されてしまうのですが、どうしたらよいでしょうか?

52デフォルトの名無しさん:2005/05/12(木) 00:47:46

[1] 授業単元: プログラミングとその応用
[2] 問題文(含コード&リンク): 1以上の整数kに関して、kのkより小さい約数の合計がkに等しい時、
kを完全数という。整数nを入力して、1以上n以下の完全数を全て求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか :来週まで
[5] その他の制限: 初心者向けのプログラムでお願いします。
条件分岐習いたてレベルで。
53デフォルトの名無しさん:2005/05/12(木) 01:12:19
>51

 :
while(fscanf(fp, "%s", buf) != EOF) {
char *p;
int cnt=0;
for(p=buf; *p; ++p) if(isalpha(*p)) ++cnt; else break;
if(cnt >= BORDER)
for(p=buf; *p; ++p) if(isalpha(*p)) *p=toupper(*p);
printf("%s ", buf);
}

改行みんな消えちゃうね
54デフォルトの名無しさん:2005/05/12(木) 01:17:23
>>52
#include<stdio.h>

int is_perfect_number(unsigned int n) {
    unsigned int i, sum = 0;
    for (i = 1; i < n; i++)
        if (n / i * i == n)
            sum += i;
    return n == sum;
}

int main(void) {
    unsigned int i, n;
    printf("input n:");
    scanf("%u", &n);
    for (i = 1; i < n; i++)
        if (is_perfect_number(i))
            printf("%d is a perfect number.\n", i);
    return 0;
}
55デフォルトの名無しさん:2005/05/12(木) 01:25:29
>53

abcdef.abcdef → abcdef.abcdef
abcdefg.abcdefg → ABCDEFG.ABCDEFG

これでいいの?
56デフォルトの名無しさん:2005/05/12(木) 01:37:15
>>52
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char inbuf[256], outbuf[1024], tmp[256];
  int i, j, k, sum;
  fputs("1以上の整数を入力 > ", stdout);
  k = atoi(fgets(inbuf, sizeof(inbuf), stdin));
  for(i = 1; i <= k; i++)
  {
    sum = 0; outbuf[0] = '\0';
    sprintf(outbuf, "%d ( ", i);
    for(j = 1; j < i; j++)
    {
      if( i % j == 0 )
      {
        sum += j;
        sprintf(tmp, "%d ", j);
        strcat(outbuf, tmp);
        if( sum > i ) break;
      }
    }
    if( sum == i ) printf("%s)\n", outbuf );
  }
  return 0;
}
5754:2005/05/12(木) 01:40:15
>>52
剰余演算子を忘れてた…恥ずかしい。
ということで、一部修正。

int is_perfect_number(unsigned int n) {
    unsigned int i, sum = 0;
    for (i = 1; i < n; i++)
        if (n % i == 0)
            sum += i;
    return n == sum;
}
58デフォルトの名無しさん:2005/05/12(木) 01:43:42
>> fputs("1以上の整数を入力 > ", stdout); 
最近f系関数がはやってるけど、これは素直にputsにしても良いともう。
以上、チラシの裏からお伝えしました。
59デフォルトの名無しさん:2005/05/12(木) 01:44:57
puts は改行しちゃうからだめ
60デフォルトの名無しさん:2005/05/12(木) 02:01:16
[1] 授業単元: プログラム基礎
[2] 問題文(含コード&リンク): VBコードを記述して四則演算を行うプログラムを作成せよ。
VBコードのみも記述せよ
[3] 環境
 [3.1] OS: 98
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:今日
[5] その他の制限:
61デフォルトの名無しさん:2005/05/12(木) 02:03:31
>>60
スレ違い
62デフォルトの名無しさん:2005/05/12(木) 02:21:25
>>58
行頭プロンプトを表示したいんだろ。
puts() では改行してしまう。
63デフォルトの名無しさん:2005/05/12(木) 02:40:40
>>60

スレの名前を百編声に出して読んでみる。
C++は議論あるけど暫定で「しーぷらぷら」で

あとこっちで聞いた方がいいかと思う
VBプログラマ質問スレ(6.0以前) Part41
http://pc8.2ch.net/test/read.cgi/tech/1112414085/l50
VB.NETは別物なので、基本的に質問はこちらへ
VB.NET質問スレ (Part11)
http://pc8.2ch.net/test/read.cgi/tech/1114217190/l50
64デフォルトの名無しさん:2005/05/12(木) 03:19:02
[1] 授業単元:応用プログラミング
[2] 問題文(含コード&リンク):
英文が書かれたファイルを読み込み、ある条件の下に暗号文を作る。
その条件とは
・アルファベットは2つ後のアルファベットに変換する(例:a→c、test→vguv)
・アルファベット以外の文字(記号や漢字など)が書かれていた場合はそのままにする。
・ファイルはfscanfで読み込み、出力はfprintfまたはprintfで行う。
[3] 環境
 [3.1] OS:winXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限: 5月13日

一応、標準入力→標準出力は不完全ながらできました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/378.txt
よろしくお願いします。
65デフォルトの名無しさん:2005/05/12(木) 04:12:17
>>64
漢字ってのはShiftJIS前提でいいのか?
66デフォルトの名無しさん:2005/05/12(木) 04:35:48
>>64
漢字には対応してない。
#include <stdio.h>
#include <ctype.h>
static const char *fin_name = "data.txt", *fout_name = "result.txt";
int shift_char(int c) {
    if (isupper(c)) return (c - 'A' + 2) % ('Z' - 'A' + 1) + 'A';
    else if (islower(c)) return (c - 'a' + 2) % ('z' - 'a' + 1) + 'a';
    else return c;
}
int main(void) {
    char c;
    FILE *fin, *fout;
    if ((fin = fopen(fin_name, "r")) == NULL) {
        printf("Can't open %s.\n", fin_name);
        return 1;
    }
    else if ((fout = fopen(fout_name, "w")) == NULL){
        fclose(fin);
        printf("Can't open %s.\n", fout_name);
        return 1;
    }
    while (fscanf(fin, "%c", &c) != EOF)
        fprintf(fout, "%c", shift_char(c));
    fclose(fout);
    fclose(fin);
    return 0;
}
67デフォルトの名無しさん:2005/05/12(木) 04:55:11
%cで読むのか、苦しすぎw
fscanfのしばりはきついね
6866:2005/05/12(木) 05:03:17
>>67
他のconversion specifiersも考えてみたけど、どうしてもwhite spacesの
考慮が難しくなるから諦めた。
6941:2005/05/12(木) 12:31:36
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク): 以下のメンバーを持つ構造体"player"をC言語で宣言せよ.

・背番号
・名前


そして、「赤星(53),藤本(9),シーツ(4),金本(6),今岡(7)」
の5名の名前と背番号をC言語で静的に宣言せよ.


[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限 :後1時間後
[5] その他の制限:

タイガース初心者ですが、よろしくお願いします。

これを答えてもらったのですが、続きがありました。

(2)背番号を入力すると線形探索により名前を出力するプログラムをC言語で実装せよ.

お願いします。
答え、サンクスです。

70デフォルトの名無しさん:2005/05/12(木) 14:51:13
>>64
漢字には対応してない
#include <stdio.h>

int main(void)
{
FILE *fp = fopen(__FILE__, "r");
if (fp == NULL) {
fprintf(stderr, "can't open %s\n", __FILE__);
return 1;
}

for (;;) {
char ch[2];
if (fscanf(fp, "%1[a-xA-X]", ch) == 1) {
printf("%c", ch[0] + 2);
} else if (fscanf(fp, "%1[yzYZ]", ch) == 1) {
printf("%c", ch[0] - 24);
} else if (fscanf(fp, "%c", ch) == 1) {
printf("%c", ch[0]);
} else
break;
}

fclose(fp);

return 0;
}
71デフォルトの名無しさん:2005/05/12(木) 17:49:41
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): int86x、int86を用いて、マシン内のHDDの容量を取得、表示しなさい
[3] 環境
 [3.1] OS: WIN系
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年05月13日12:00
[5] その他の制限:拡張INT13Hの有無等も含め、容量を正しく表示すること
HDDの台数は最大4台と想定する。
シリアルATAやSCSIには対応できなくても良い。


誰か助けて下さいorz
72デフォルトの名無しさん:2005/05/12(木) 17:52:00
>>71
何のコンパイラ使ってるのかを書けよ。
73デフォルトの名無しさん:2005/05/12(木) 17:52:16
>>71
それはC言語の範囲じゃないなぁ
7471:2005/05/12(木) 17:55:55
>>72
コンパイラはTurboC++1.01です。
>>73
駄目ですか…申し訳ない
75デフォルトの名無しさん:2005/05/12(木) 17:59:52
7671:2005/05/12(木) 18:11:37
>>75
いろいろサイト探したのですが、ここは初めて見ました。
助かります。有難う御座いました。
77デフォルトの名無しさん:2005/05/12(木) 18:16:15
>>71
それは探し方が悪い。
ググって1番上に来ただけ。
http://www.google.com/search?hl=ja&q=int86x&lr=lang_ja
78デフォルトの名無しさん:2005/05/12(木) 18:20:31
>>69
俺は>>43ではないが、引用。
#include <stdio.h>
typedef struct _player {
    unsigned int jersey_number;
    const char* name;
} player;
static player players[] = {
    { 4, "シーツ" },
    { 6, "金本" },
    { 7, "今岡" },
    { 8, "山本浩二" },
    { 9, "藤本" },
    { 53, "赤星" }
};
int main(void) {
    int num, i, pos = -1;
    printf("背番号:");
    scanf("%d", &num);
    for (i = 0; i < sizeof(players) / sizeof(players[0]); i++)
        if (players[i].jersey_number == num) {
            pos = i;
            break;
        }
    if (pos != -1)
        printf("背番号%d:%s", num, players[i].name);
    else
        printf("背番号%dは見つかりませんでした", num);
    return 0;
}
79デフォルトの名無しさん:2005/05/12(木) 18:23:08
1から100までの数字を出力して、10行ごとに次の行に行きたいのですが、
100を出力した時には次の行にいかない処理にしたいのですが、
次のコードを書くと100を出力した時に次の行にいってしまいます。
これを100を出力した時に次の行にはどうやっていかないようにすればいいとですか?

#include <stdio.h>
int main(){int n;for (n = 1; n <=100; n++){printf("%4d", n);if (!(n % 10)) printf("\n");}return 0;}
80デフォルトの名無しさん:2005/05/12(木) 18:27:59
>>79
#include <stdio.h>

int main(void) {
    int n;
    for (n = 1; n <= 100; n++)
    {
        if (n != 1 && n % 10 == 1) printf("\n");
        printf("%4d", n);
    }
    return 0;
}
8180:2005/05/12(木) 19:03:51
>>79
やり直し
#include <stdio.h>

int main(void) {
    int n;
    for (n = 1; n <= 100; n++)
    {
        if (n % 10 == 1 && n != 1) printf("\n");
        printf("%4d", n);
    }
    return 0;
}
82デフォルトの名無しさん:2005/05/12(木) 19:13:25
>>79
#include <stdio.h>
int main(){int n;for (n = 1; n <=100; n++){printf("%4d", n);if (!(n % 10) %% n % 100) printf("\n");}return 0;}
8382:2005/05/12(木) 19:14:02
ミスった、訂正。
#include <stdio.h>
int main(){int n;for (n = 1; n <=100; n++){printf("%4d", n);if (!(n % 10) && n % 100) printf("\n");}return 0;}
84デフォルトの名無しさん:2005/05/12(木) 19:52:20
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
キーボードから実数を読み込み、その最大値MAXと最小値minを求める。
いくつかのデータを入力した後、Ctrl+Zを押してデータの入力を終わらせる
ようにすること。また、必ず入力した数値もすべて出力すること。
配列は使わない。
[3] 環境
 [3.1] OS:WINXP
 [3.2] コンパイラ(バージョン):VisualC++6.0
 [3.3] 言語:C
[4] 期限:5月12日22時まで
[5] その他の制限:
printf("data ?");
scanf("%f", &num);
printf("data No. %d = %f\n", i++, num);
min = num;
max = num;

while (printf("data ? "), scanf("%f", &num)!=EOF){
printf("data No. %d = %f\n", i++, num);
if(何か入れる)
min = 何か入れる;
else if(何か入れる)
max = 何か入れる;
}
を使うそうです
85デフォルトの名無しさん:2005/05/12(木) 19:57:22
フルスクラッチで作らせてくれない問題は詰まらん。
何の発展性もない。
86デフォルトの名無しさん:2005/05/12(木) 20:18:51
( ´,_ゝ`)プッ  だれもお前にタノンデネーヨ すっこんでろ
8784:2005/05/12(木) 20:20:30
自己解決しました。
88デフォルトの名無しさん:2005/05/12(木) 20:42:26
常駐プログラムを作りたいから教えて。

WinMainで作成して、Windowは非表示でOK?
常駐トレイにはどうやって表示させる?
俺のでよかったら貸してやるから教えろよ
89デフォルトの名無しさん:2005/05/12(木) 20:55:22
>>88
テンプレ使え
90デフォルトの名無しさん:2005/05/12(木) 21:03:38
【質問テンプレ】
[1] Win32API
[2] 常駐プログラムを作りたいから教えて
詳しくは >>88
[3] 環境
 [3.1] OS: WinXP PRO
 [3.2] コンパイラ(バージョン): VC++6.0
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限: 失礼しましたorz
91デフォルトの名無しさん:2005/05/12(木) 21:07:27
>>88
おまいはどういうプログラムを常駐プログラムと定義するのか。
そこから書け。そしてテンプレ使え。
92デフォルトの名無しさん:2005/05/12(木) 21:13:42
>>91
外的因子なしに終了するプログラムこそが正しいから。
93デフォルトの名無しさん:2005/05/12(木) 21:15:47
>>90
タスクトレイに追加するにはShell_NotifyIcon()を使う。
ウィンドウは非表示にするか(ShowWindow()でSW_HIDE)、CreateWindowEx()で
hWndParentにHWND_MESSAGEを指定してメッセージ専用ウィンドウにする。
9493:2005/05/12(木) 21:17:10
>>90
これ以上はこっちで
Win32API質問箱 Build31
http://pc8.2ch.net/test/read.cgi/tech/1114762194/
95デフォルトの名無しさん:2005/05/12(木) 21:17:14
>>92
なら、WordもExcelもIEも全部常駐プログラムかよ・・・。
http://e-words.jp/w/E5B8B8E9A790E38397E383ADE382B0E383A9E383A0.html
9688、90:2005/05/12(木) 21:20:00
>>91 タスクトレイに常駐するタスク
>>92 ごもっともです。右クリックでメニューを付けようかと思う。
>>93 ありがとう!調べてみる!
97デフォルトの名無しさん:2005/05/12(木) 21:26:37
>>95
∞ループしちゃってるじゃん。そんなの正しいプログラムじゃないよ。
98デフォルトの名無しさん:2005/05/12(木) 21:27:27
e-wordは間違いだらけな辞書だね。
99デフォルトの名無しさん:2005/05/12(木) 21:28:11
【質問テンプレ】
[1] 授業単元: C実務入門(新人教育)
[2] 問題文(含コード&リンク): n個の外部から入力された数値の、合計を計算して表示せよ。
一番最初に入力された値は、 nを示し、これから入力される値の個数
を意味する。(つまり、実際の入力する個数はn + 1個である)
2番目に入力する値、 すなわち加算する数値の最初には、加算する値
がまだ入力されていないため、 0を加算するものと考えてプログラム
を作る。
3番目以降の入力は、前回の計算結果を足して表示する。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): VC++6.0
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限: -を記入するとエラーで暴走してしまいます。
これを直すのはどうすれば良いのでしょうか?
10099:2005/05/12(木) 21:30:00
#include <stdio.h>
int main(void)
{
float n=0;
float no=0;
short kazu=0;
float ans=0;
puts("計算する回数を入力してください" );
scanf("%d", &kazu);
while(n < kazu)
{
puts("計算する数字を入力してください" );
scanf("%d", &no);
n ++;
ans += no;
}
printf("%d回計算しました。",kazu);
printf("計算結果は%dです。",ans);

return(0);
}
101デフォルトの名無しさん:2005/05/12(木) 21:38:01
>>99
"%d"は整数型(intなど)。floatなら"%f"
102デフォルトの名無しさん:2005/05/12(木) 21:44:30
>>99
新人教育をカンニングされると、後々評価が狂ってお互いのためにならないからできれば担当者に質問してくれ。
それと、scanf()の使い方が間違っている。fgets()とsscanf()(もしくはatoi()かatof())を組み合わせるのが常道。
103デフォルトの名無しさん:2005/05/12(木) 21:45:55
>>101
そう言う大誤解を書かないでくれ。%dが使えるのはintのみだ。その他の型には使えない。
104デフォルトの名無しさん:2005/05/12(木) 22:26:16
( ゚д゚) …
105デフォルトの名無しさん:2005/05/12(木) 22:37:01
%hdでshortだったっけ。(scanf)
10699:2005/05/12(木) 22:38:23
>>103
教材として使っている会社にある本には整数の場合%dとなっていたの
ですが、使い方が違っているということですか?
後、scanfは2箇所とも、fgets()で書くのが正解ということですか?
連投スマソ
107デフォルトの名無しさん:2005/05/12(木) 22:53:59
scanfは希望の入力が無いとバッファそのままにするから
簡単にループするぞ
108デフォルトの名無しさん:2005/05/12(木) 22:55:46
そこでgetsですよ
109デフォルトの名無しさん:2005/05/12(木) 22:56:57
>>106
%dはint型を受ける。つまり整数型。
floatは、単精度浮動小数点型だ。整数型じゃない。
そしておまいはなぜ「回数」を表現するのに
浮動小数点数を使う?普通は整数使うだろ。

入力にはバッファオーバフロー等のセキュリティ上の問題を
防止するためにもfgets()とstrtod()を使うのが定石。
110103:2005/05/12(木) 22:59:49
>>99
だからぁ、会社の担当者に聞けってば。
scanf()使えなんて言わないとは思うが、もし言うようならそれに従うべきだし。
で、整数といっても、intではなくてshortを使っているじゃないか。shortの場合は>105だ。

>>108
面白がって変なもん薦めるな。
111103:2005/05/12(木) 23:01:25
>>109
兄ちゃん兄ちゃん、回数であるkazuはshortですぜ。
もうちっとコードよく見てや。
#女性だったらゴメン。
112デフォルトの名無しさん:2005/05/13(金) 01:26:42
>>99
書き換えてみた。
#include <stdio.h>
int main(void) {
    double i, d, ans = 0;
    int n;
    printf("計算する回数を入力してください:");
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        printf("計算する数字を入力してください:");
        scanf("%lf", &d);
        ans += d;
    }
    printf("%d回計算しました。\n計算結果は%fです。", n, ans);
    return 0;
}
11384:2005/05/13(金) 01:44:38
>>87
おめーは誰だYO(・3・)

誰か解いてください
114デフォルトの名無しさん:2005/05/13(金) 01:46:02
>>112
根本的な問題が解決されていない。
115デフォルトの名無しさん:2005/05/13(金) 02:04:13
>>84
#include <stdio.h>

int main( void )
{
double num, min, max;
int i = 0;

while (printf("data ? "), scanf("%lf", &num)!=EOF){
printf("data No. %d = %lf\n", i++, num);
if( i == 1 ){
min = num;
max = num;
}
else{
min = (min>num ? num : min ) ;
max = (max<num ? num : max ) ;
}
}
if( i > 0 )
printf( "min = %lf max = %lf\n", min, max );
return 0;
}
11684:2005/05/13(金) 02:40:37
>>115ありがとうございます。助かりました。
117デフォルトの名無しさん:2005/05/13(金) 06:27:12
【質問テンプレ】
[1] 授業単元: Data Structure
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/379.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): MSVC++
 [3.3] 言語:C++
[4] 期限:なるべく早く。
[5] その他の制限:

問題文
//accumulator classを使用。
//(a)6つの数字をインプットして、平均をアウトプット。
//(b)10のaccumulatorbjectsのvectorを宣言。
//vector<accumulator<int> > count(10);
//100万のランダム数(範囲0から9)を作る。
//それぞれの値に対して、count[value]をincrementする。
//vector countにおいて、それぞれのelementの値をアウトプットする。

途中まで自分でやったのですが、
vector<accumulator<int> > count(10);の扱いがわかりません。
118デフォルトの名無しさん:2005/05/13(金) 11:54:32
【質問テンプレ】
[1] 授業単元: C実習
[2] 問題文(含コード&リンク):
200人分の児童の、国語、算数、理科、社会の4科目に関するテストの結果が存
在する。そこで、
「平均を求める関数を作成し、それを用いて各科目の平均を求めて表示せよ」[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): VC++
 [3.3] 言語:
[4] 期限:15時迄
[5] その他の制限:・作成する関数の定義は、次のようにする。
double mean(int a[], int size);
・テスト結果の表は、出題者からファイルを提供する。
・ファイルをプログラムに読み込ませるには、リダイレクトと呼ばれる方法を
用いる
11942代目 962の友人:2005/05/13(金) 12:50:01
解答ありがとうございました。助かりました。

それで… 新たな条件として分割コンパイルしてくださいと言われました。(-_-;)
分割コンパイルすると、変数をどう渡したらいいのか分からないのです。
2度も聞くのは失礼だと思ったのですが… 助けてください。m(_ _)m

【質問テンプレ】
[1] 授業単元: C言語応用
[2] 問題文(含コード&リンク):
ファイルnumber.datから0〜255の自然数Nと0〜255の自然数kを読み取り
(number.datにはNとkの間に半角スペース1個間隔開けたものが
縦に列挙されているものとする)
Nをk組以下の自然数の平方和で表現可能か、
また表現可能ならばその平方和の表現の仕方および何通りあるかを
出力するプログラムを作成せよ。
(ex) N=25,k=3
(5,0,0)
(4,3,0)
N=25,k=3,ans=2

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか:C
[4] 期限:出来るだけ早めにお願いします。m(_ _)m
[5] その他の制限:3つのファイルに分割すること。
(ファイルからの読み取り部・計算部・出力部)
120デフォルトの名無しさん:2005/05/13(金) 14:02:14
>>117
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/380.txt

accumulatorクラスをどこにも手を加えずに書くとこのようになるだろう。
intとwriteVector()、average()を共用すると、暗黙の型変換演算子が
呼び出されてプログラムの見通しが悪くなるので、explicit specialization
を行っておいた。
121デフォルトの名無しさん:2005/05/13(金) 14:07:04
あ、それと、namespace stdには同名のSTL用アルゴリズム accumulatorが
あり、関数のオーバーロードで解決されているが、一応注意。
122デフォルトの名無しさん:2005/05/13(金) 14:14:55
>>121
標準にあるのはstd::accumulate。
それから、型と関数名の間にオーバーロードは働かない。(関数名が優先され、classなどのキーワードをつけると型扱い)
123118:2005/05/13(金) 14:24:22
言語はCです。遅レスごめんなさい
124デフォルトの名無しさん:2005/05/13(金) 14:31:44
>>122
あーボケてました。スマソ。何書いてたんだろ。>>121は無かった事にして
下さい。(/ω\)ハズカシーィ
125デフォルトの名無しさん:2005/05/13(金) 14:43:03
>>118
>(5,0,0)
0って自然数だったんだ
126デフォルトの名無しさん:2005/05/13(金) 14:50:55
127デフォルトの名無しさん:2005/05/13(金) 14:51:58
>>118
ほらよ。やっつけ仕事だけどな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/381.txt
128デフォルトの名無しさん:2005/05/13(金) 15:08:30
>>126
それは集合論での考え方
0を自然数と考えるか考えないかの議論は数学板行き
129デフォルトの名無しさん:2005/05/13(金) 15:41:49
>>125
すいません^^; 0というのはあくまでも数合わせのためです。
25 = 5^{2} というふうに解釈してください。(-_-;)

k個以下ということを表現したかったのですが、
逆効果になってしまい申し訳ありません。m(__)m
130デフォルトの名無しさん:2005/05/13(金) 23:03:50
宿題 チン☆⌒ 凵\(\・∀・) まだぁ?
131デフォルトの名無しさん:2005/05/13(金) 23:16:06
[1] 授業単元: 演習
[2] 問題文(含コード&リンク): 「引数prefixで与えられる括弧つきの
前置記法の式を後置記法に変換し、引数postfixが示すキューに格納する関数
を作成せよ」という問題でプロトタイプ宣言が
void getexp(char *prefix,strut queue *postfix);
となっているとなっているのです。char *prefixはメイン関数の前置記法の式を代入するこ
とは分かっているんですけどstrut queue *postfixはいったいどういう意味な
のでしょうか?postfixのままポインタとして使えないし、それ以前にメイン
関数でポインタを作成して代入しなきゃならないのか?
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): 分からない
 [3.3] 言語:C
[4] 期限:できれば早く
132デフォルトの名無しさん:2005/05/13(金) 23:19:47
>>131
ばかだなお前は。
133デフォルトの名無しさん:2005/05/13(金) 23:23:23
おーいみんな〜。面白い >>131 がいるよ〜。
134デフォルトの名無しさん:2005/05/13(金) 23:26:51
別に面白くない
135デフォルトの名無しさん:2005/05/13(金) 23:38:01
【質問テンプレ】
[1] 授業単元: C実務入門
[2] 問題文(含コード&リンク):
200人分の、国語、算数、理科、社会の4科目に関するテストの結果が存
在する。平均を求める関数を作成し、それを用いて各科目の平均を求めて表示せよ
[3] 環境
 [3.1] OS: Win2KPro
 [3.2] コンパイラ(バージョン): VC6.0
 [3.3] 言語:C
[4] 期限:5/14 12:00迄
[5] その他の制限:取り込みはfgets()使用。scanf()使用禁止。
関数定義:double mean(int a[], int size);
テスト結果の表は、1行が1人分データをあらわし、次のように各科目の点数が
TABで区切られている。
国語 算数 理科 社会
出力データの表示形式は自由。
(ここまで出来た。) (次のレスに続く
136135:2005/05/13(金) 23:40:34
#include <stdio.h>
#define MAX_NUM 200//人数200
#define STR_BUFSIZE 20//文字列受信用バッファサイズ
#define KAMOKU 4//科目数(4)
double mean(int a[], int size);
double ave[KAMOKU];
long sum[KAMOKU];
int main(void)
{
int a[KAMOKU][MAX_NUM];
char str[STR_BUFSIZE];
char num[STR_BUFSIZE];
short i = 0;
fgets( str, STR_BUFSIZE, stdin);
printf ("%s\n", str);
for(i = 0; i >= num; i++)
while( (fgets( str, STR_BUFSIZE, stdin)) && (i < MAX_NUM))
{
i++;
num = a;
}
printf("** %d人分の平均点**\n", MAX_NUM);
printf ("%s\n", str);
return 0;
}
137デフォルトの名無しさん:2005/05/13(金) 23:58:54
>>127はsscanf()使ってるからだめなのか?
atoiでも使うしかないか。めんどい。
138デフォルトの名無しさん:2005/05/14(土) 00:19:14
>>137
sscanf()とやったら、それじゃあなくてfgetsでやってくれと言われたので
改良してみたのですが・・・
(やり方は136で良いらしい)
動かなくなってしまいまして・・・
よろしくお願いします
139デフォルトの名無しさん:2005/05/14(土) 00:49:10
>>138
>sscanf()とやったら、それじゃあなくてfgetsでやってくれと言われたので
fgets()したからこそのsscanf()だと思うが?
scanf()で駄目と言うのであれば分からん事はないが…
140デフォルトの名無しさん:2005/05/14(土) 00:59:37
>>138
fgets()で得られるのはあくまでもchar型の配列データだから、それを
数字に変換しないと計算できない(無理とは言わないが、普通はしない)。
で、char型の配列データを数字に変換するには大抵atoi()、atof()、sscanf()
などを使うわけであるが、sscanf()が禁止らしいので、atoi()を使う事になる。
但し、ポインタを知っていなければならず、見た目も汚くなるぞ。
141デフォルトの名無しさん:2005/05/14(土) 01:09:39
>>138
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/383.txt
例えばこんな感じになる。エラーチェックは全くやってないので、入力データ形式が
間違っていると即あぼんの可能性あり。
142デフォルトの名無しさん:2005/05/14(土) 11:51:23
>>131
>strut queue *postfixはいったいどういう意味な
のでしょうか?
構造体 queue のポインタという意味です。
関数getexp内で変数postfixは構造体queueのポインタ
として使用できます。なお呼び出し元から渡されている
ものはアドレスだけなので、実体は呼び出し元で定義さ
れいてる必要があります。

>>postfixのままポインタとして使えないし、それ以前にメイン
関数でポインタを作成して代入しなきゃならないのか?
関数getexpを呼ぶ側では構造体queueのアドレスを指定する
必要があります。
 (例)
struct queue post, *pt;
char pre[1000];
....
getexp( pre, &post );
または
pt = ⪯
getexp( pre, pt );

 てな感じ。
 ポインタがまだ理解できていないようですね。
 ポインタ変数に格納できるのは”ポインタ”ではなくて
”アドレス”です。
”アドレス”は"&"演算子を使って取得することができます。
 がんがれ
143デフォルトの名無しさん:2005/05/14(土) 11:54:16
キーボードから入力される100個の整数のうち、
2桁の数がいくつあるかを数えて、その個数を表示する。

こんな問題があったのですが、さっぱり分かりません。
どなたか実際にプログラムを書いて教えてもらえませんか?
144デフォルトの名無しさん:2005/05/14(土) 12:06:51
>>143

#include <stdio.h>

int main(int argc, char *argv[])
{
int tmp, num;

num = 0;
for(int i = 0; i < 5; i++)
{
scanf("%d", &tmp);
if(10 <= tmp && tmp <= 99)
{
num++;
}
}
printf("num = %d\n", num);

return 0;
}
145デフォルトの名無しさん:2005/05/14(土) 12:08:31
すまん
for(int i = 0; i < 5; i++)じゃなくて
for(int i = 0; i < 100; i++)だった
146143:2005/05/14(土) 12:24:56
エラーが7個、警告が1個出てくるんですが・・・
147デフォルトの名無しさん:2005/05/14(土) 12:28:47
>>146
>1を読め
148143:2005/05/14(土) 12:32:12
Z:\プログラミング実習\レポート\レポート4.c(8) : error C2143: 構文エラー : ';' が 'type' の前に必要です。
Z:\プログラミング実習\レポート\レポート4.c(8) : error C2143: 構文エラー : ';' が 'type' の前に必要です。
Z:\プログラミング実習\レポート\レポート4.c(8) : error C2143: 構文エラー : ')' が 'type' の前に必要です。
Z:\プログラミング実習\レポート\レポート4.c(8) : error C2143: 構文エラー : ';' が 'type' の前に必要です。
Z:\プログラミング実習\レポート\レポート4.c(8) : error C2065: 'i' : 定義されていない識別子です。
Z:\プログラミング実習\レポート\レポート4.c(8) : warning C4552: '<' : 演算子にプログラム上の作用がありません。作用を持つ演算子を使用してください
Z:\プログラミング実習\レポート\レポート4.c(8) : error C2059: 構文エラー : ')'
Z:\プログラミング実習\レポート\レポート4.c(9) : error C2143: 構文エラー : ';' が '{' の前に必要です。
149デフォルトの名無しさん:2005/05/14(土) 12:40:17
for(int i = 0; i < 5; i++)

int i;
for ( i = 0; i < 100; ++i )
150144:2005/05/14(土) 12:45:18
全部Cで書いたつもりだったのに...orz
VCTKだとコンパイル通っちまって気づかなかった。
151143:2005/05/14(土) 12:52:10
ありがとうございました!
これに少し手を加えたらできるようになりました
152デフォルトの名無しさん:2005/05/14(土) 15:23:25
[1] 授業単元: 実習
[2] 問題文(含コード&リンク):
  文字列strの中に、文字cが含まれていれば
  (複数ある場合は、最も先頭側とする)、
  その文字へのポインタを返し、含まれてなければNULLを返す関数
  char *str_chr(const char *str, int c)
  を作成せよ。
[3] 環境
 [3.1] OS: win2000Pro
 [3.2] コンパイラ(バージョン): Visual C++ (Ver7.1)
 [3.3] 言語:C++
[4] 期限:5月15日
[5] その他の制限: 文字列strと文字cへの入力は標準入力により行う。

よろしくお願いします。
153デフォルトの名無しさん:2005/05/14(土) 15:41:10
>>152
#include <iostream>
#include <cstring>
#include <string>

char * str_chr(const char * str, int c) { return std::strchr(str, c);}

int main()
{
std::string s;
char c;

std::cout << "文字列>";
std::cin >> s;

std::cout << "文字";
std::cin >> c;

std::cout << str_chr(s.c_str(), c) << endl;
}
154152:2005/05/14(土) 16:03:09
>>153
ごめんなさい!C++じゃなくてCでした・・・
ホントすいません。

C言語で書いてくれる方いらっしゃらないでしょうか・・・
155デフォルトの名無しさん:2005/05/14(土) 16:12:20
Cってconst使えたっけ?
156デフォルトの名無しさん:2005/05/14(土) 16:20:24
c89以降ならね
157デフォルトの名無しさん:2005/05/14(土) 16:23:50
>>154
#include <stdio.h>
#include <string.h>

char * str_chr(const char * str, int c)
{
for (; *str != '\0' && *str != c; str++)
;

return *str == '\0' ? NULL : (char*)str;
}

int main(void)
{
char str[256];
char ch;
char *ptr;

printf("文字列>");
scanf("%255s", str);
scanf("%*[^\n]");

printf("文字>");
scanf(" %c", &ch);

ptr = str_chr(str, ch);

printf("%s\n", ptr ? ptr : "(null)");

return 0;
}
158デフォルトの名無しさん:2005/05/14(土) 16:25:54
とりあえず書いてみたが、初心者が書いたコードだからあんまり信用するなよ。

char *str_chr(const char *str, int c)
{
unsigned int i;
for(i = 0; i < strlen(str); i++)
{
if(str[i] == c)
{
return &str[i];
}
}
return NULL;
}
159152:2005/05/14(土) 16:57:21
>>153 >>157 >>158
ありがとう!かなり参考になりました。
どうやら基本的な間違いで
関数でのreturnにおいて(char*)を付けていなかった為に動かなかったようです。
constの扱いに慣れないとダメですね。
どうもありがとうございました。

160デフォルトの名無しさん:2005/05/14(土) 18:59:16
>>152
#include <string.h>
char*str_chr(const char*str, int c){return strchr(str,c);}
161デフォルトの名無しさん:2005/05/14(土) 23:23:03
char* str_chr(char* str,char c){
    while((*str) != '\0' && (*str) != c) {
        str++;
    }
    if( (*str)==c){
        return str;
    }else{
        return NULL;
    }
}
162デフォルトの名無しさん:2005/05/14(土) 23:36:01
char *str_char(const char *str,char c) {
return *str?*str-c?str_char(str+1,c):(char*)str:NULL; }
163デフォルトの名無しさん:2005/05/15(日) 09:23:01
#define str_chr strchr
164デフォルトの名無しさん:2005/05/15(日) 10:51:30
[1] 授業単元: 演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/384.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:5月19日
[5] その他の制限: 無し

考えても考えてもさっぱり・・orz
ご指南よろしく御願いします。
165デフォルトの名無しさん:2005/05/15(日) 11:04:18
>>164
不可能。

標準入力には文字数の制限があるから。
166デフォルトの名無しさん:2005/05/15(日) 11:17:46
そんなのあったっけ?
167デフォルトの名無しさん:2005/05/15(日) 11:45:06
168デフォルトの名無しさん:2005/05/15(日) 12:39:16
制限があるのはシェルだろう。リダイレクトでやれば制限ない。
169デフォルトの名無しさん:2005/05/15(日) 14:54:37
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク)
 キーボードから全て小文字の文字列を入力し、 その文字列の先頭の文字を
大文字に変更して表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン):分かりません・・・
 [3.3] 言語:C++
[4] 期限:2005年05月17日まで

プログラミング始めたばっかりでさっぱり分かりません。
よろしくお願いします。
170デフォルトの名無しさん:2005/05/15(日) 15:28:44
↑に追加です。申し訳ありません。
注釈に
「ASCIIコード表を見て、大文字と小文字のコード番号の規則性に
注目すると、上位バイトが2バイト違うだけである」
と書いてありました。
171デフォルトの名無しさん:2005/05/15(日) 15:30:44
やっつけ

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{
char str[32 + 1];

cin >> str;
cout << char(toupper(str[0])) << &(str[1]) << endl;

return 0;
}
172デフォルトの名無しさん:2005/05/15(日) 19:46:55
[1] 授業単元:C++実務
[2] 問題文(含コード&リンク)
50名分の4科目のテストの結果が存在する。
「ヒストグラムを求める関数を作成し、それを用いて各科目ごとのヒストグラムを求めて表示せよ」
今回求めるヒストグラムは、次のとおりである。

0 〜 10ある科目が 0点〜10点だった人の人数
11 〜 20ある科目が11点〜20点だった人の人数
21 〜 30...
31 〜 40
41 〜 50
51 〜 60
61 〜 70
71 〜 80
81 〜 90
91 〜 100ある科目が91点〜100点だった人の人数
173172:2005/05/15(日) 19:50:22
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン):VC++6.0
 [3.3] 言語:C
[4] 期限:5月15日中
[5] その他の制限:sscanf()・scanf()使用禁止。入力はfgets()のみ使用。
作成する関数の定義は、次のようにする。
int histgram1(int points[], int nchild, int low, int high);
points:各児童の、ある科目に関する点数が入って
いる配列。
nchild:児童の人数。
low:点数の範囲の最小値
high:点数の範囲の最大値
返り値はintで、lowとhighで指定された範囲の点数を取っている児童
の人数である。
・main()とhistgram1()は別々のファイルに作成する。
(分割コンパイルの練習)
174デフォルトの名無しさん:2005/05/15(日) 20:37:55
>>172-173
[1] 授業単元:C++実務 なのに  [3.3] 言語:C なのか。
それはいいとして、「50名分の4科目のテストの結果」 はどこから入力する?
175デフォルトの名無しさん:2005/05/15(日) 20:48:27
プログラミングの知識が乏しいので、不備があるかもしれません。
以下の2問が分かりません。助力を願いたいです。どなたか宜しくお願いします。


[1] 授業単元:プログラミング基礎
[2]
問題文1:
変数a、b、cの値が、三角形の3辺の長さとして正しいかどうか判定する条件式を書け。
三角形のどの2辺の和も残りの1辺より小さくないという性質を用いること。

問題文2:
n人分(n>10、最初に入力データで指定する)の試験の点数(0点以上100点以下)を入力し
A、B、C、Dの成績評価を行うプログラムを作り実行せよ。
(D:0点〜59点 C:60点〜69点 B:70点〜79点 A:80点〜100点)
プログラムはif…else if文を用いて表現すること。
範囲外の数字に対してはエラーの表示を行うこと。

[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン):分かりません
 [3.3] 言語:C
[4] 期限:明日(5月16日)の正午まで
[5] その他の制限:
授業で習った範囲(if,switch,do,while,for,配列)を使ってお願いします。
176デフォルトの名無しさん:2005/05/15(日) 20:48:48
>>172>>173
また例によってリダイレクトによる入力か。明記してくれ。
177デフォルトの名無しさん:2005/05/15(日) 21:27:08
>>175
解1
if(a>0&&b>0&&c>0&&a<b+c&&b<c+a&&c<a+b)
178172:2005/05/15(日) 22:03:29
自己解決できました。
179172:2005/05/15(日) 22:21:23
取り込みは、別ファイルからの入力です。
(今出題者に聞いてみたらそう言ってました)
自分では別コンパイルとか調べてみたけど判らなかったのでよろしくお願いします
180デフォルトの名無しさん:2005/05/15(日) 22:47:43
>>179
/* main.c */
#include "sub.h"
int main(void)
{
  sub();
  return 0;
}

/* sub.h */
void sub(void);

/* sub.c */
#include <stdio.h>
#include "sub.h"
void sub(void)
{
  printf("sub\n");
}

cl /c main.c
cl /c sub.c
cl main.obj sub.obj
...こんな感じだろーか。
181179:2005/05/15(日) 23:05:10
ありがとうございました。
182デフォルトの名無しさん:2005/05/15(日) 23:07:16
入力された数を昇順(CASE4の部分)に並べ替えるという課題がでているのですが下記のように入力して実行したところ、

Warning W8060 9-1.c 60: Possibly incorrect assignment in function main
Warning W8004 9-1.c 84: 'i' is assigned a value that is never used in function m
ain
とエラーがでてしまいました。どの部分が間違えているのでしょうか?

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/386.c
183デフォルトの名無しさん:2005/05/15(日) 23:12:02
>>182
>>1を嫁
184デフォルトの名無しさん:2005/05/15(日) 23:16:31
>>182
60行:for(i=0;i=num-1;i++){
i<=num-1か、i<num-1の間違いか?
84行:60行でnum-1を代入しているので、直前のi=0が無視されている
185182:2005/05/15(日) 23:19:25
>>183
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):入力された数を昇順(CASE4の部分)に並べ替えるという課題です。
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/386.c

[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン):Borand C
 [3.3] 言語:C
 [4] 期限:2005年05月16日08:15

よろしくお願いいたします。
186デフォルトの名無しさん:2005/05/15(日) 23:36:39
授業 C言語必須2単位
OS ウィンドウズxp

改行までが空白なら削除するプログラムをつくりたいのですが
うまくいきません。途中までつくったのですが・・・
どなたかご教授お願いします。

int hyozi(char string_check[SIZE])
{
int n;
int status = OK;


for(n = 0; string_check[n] == '\n';n++)
{
if(string_check[0] == '\n')
return NG;

else if(string_check[n] == ' ')
status = NG;
else
return OK;
}
return(status);
}
187デフォルトの名無しさん:2005/05/15(日) 23:38:32
[1] 授業単元: プログラミング論
[2] 問題文(含コード&リンク): 次のプログラムを2つのファイルに分割して実行できるようにせよ。
(複数モジュールにしろ)
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年5月16日の朝
188187:2005/05/15(日) 23:38:58
#include<stdio.h>
#include<process.h>

/*例題11−1:法王の名前 */

static int count;
main()
{
int generation;

for(;;)
{ printf("\n>何代目ですか? ");
scanf("%d",&generation);
count = 0;
if ( generation==0 )
exit(1);
pope(generation);
printf("\n関数popeは%d回呼ばれました。",count);
}
}/* End of main */

pope(n)
int n;
{
count++;
if ( n==1 )
printf("ヨハネ ");
else if ( n==2 )
printf("パウロ ");
else pope(n-2),pope(n-1);
}/* End of pope */
189デフォルトの名無しさん:2005/05/15(日) 23:49:18
>2つのファイルに分割して実行

何一店の?
a.exeファイルとdllファイルの2つにする
b.分割コンパイルの話? (ほにゃらら.c と ちょめちょめ.c の2つに分割)
c.ヘッダファイルとソースに分割? (ぺけぺけ.h と ほげほげ.c の2つに分割)

どれかなのか?あるいは別のなにかなのか?
190187:2005/05/15(日) 23:50:23
分割コンパイルの話です。
191187:2005/05/15(日) 23:53:23
「〜.c」「****.c」をつくり、実行する際には、個々にコンパイルして
オブジェクトファイルを作成し、最後にリンカで実行可能プログラムにするらしいです。

とりあえず、「〜.c」「****.c」ができれば良いのですが・・・。
192デフォルトの名無しさん:2005/05/15(日) 23:55:13
>改行までが空白なら削除するプログラム

意味が不明だが、
string_checkが改行までが空白なら NG を返す。
string_checkが改行までに空白以外の文字があるなら OK を返す、という
int hyozi(char *string_check) を作ればよいのか?

int hyozi(char *string_check)
{
while(*string_check==' ') ++string_check;
if(*string_check!='\n') return NG;
return OK;
}

193デフォルトの名無しさん:2005/05/15(日) 23:55:24
よろしくお願いします。

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
「Ford-Fulkersonアルゴリズムに対して、
故意に計算速度が遅くなるよう増大路を選択させるようなプログラムをつくりなさい。」

ソースは改悪前のものです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/387.txt

[3] 環境
 [3.1] OS: Windows98
 [3.2] コンパイラ(バージョン): Borland C++ Compiler
 [3.3] 言語:C
[4] 期限:2005年5月17日17:30まで
194デフォルトの名無しさん:2005/05/15(日) 23:58:11
>187

countをpope()の引数に追加してはダメ?
グローバル変数を使わなければならないのか?
195187:2005/05/16(月) 00:03:49
>>194
すみません。知識不足の為、質問の内容が分かりません。
しかし自分なりに書き直してよいと書いてありました。
196デフォルトの名無しさん:2005/05/16(月) 00:21:20
>187
>194
おそらくグローバルでないとダメなんだろう
-----[main.c]-----
 :
/* static int count; */
int count;
main() {
int generation;
for(;;) { printf("\n>何代目ですか? ");
scanf("%d",&generation);
count = 0;
if ( generation==0 ) exit(1);
pope(generation);
printf("\n関数popeは%d回呼ばれました。",count);
}
}/* End of main */
-----

-----[sub.c]-----
 :
/* static int count; */
extern int count;
pope(n)
int n;
{ count++;
if ( n==1 ) printf("ヨハネ ");
else if ( n==2 ) printf("パウロ ");
else pope(n-2),pope(n-1);
}/* End of pope */
-----
197デフォルトの名無しさん:2005/05/16(月) 00:25:31
>>187-188
/* main.c */
#include <stdio.h>
int count = 0;
main()
{
  /* 元のmain関数をそのまま使用 */
}

/* pope.c */
#include <stdio.h>
extern int count;

pope(n)
int n;
{
  /* 元のpope関数をそのまま使用 */
}
198デフォルトの名無しさん:2005/05/16(月) 00:28:53
よろしくお願いします

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):「基数ソート法」により int 型配列をソートするプログラムを作成せよ
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005/5/19
[5] その他の制限:
* プログラムは,標準入力から任意個の整数を受け取り,ソートして出力する.
* プログラムは,コマンドライン引数において基数のビット数 k が指定された場合, 2^k 進数の基数ソートを行うものとする.指定のない場合は,16 進数の基数ソートを行うこと.

例: 2^6 = 64 進数の基数ソートを実行する
% ./radix_sort 6

* ソートを行う関数名は radix_sort とする.
o 引数は,整数配列 array と要素数 num と基数のビット数 radix_bits とする.
o 戻り値はなし
* プログラムは,コマンドライン引数においてデバッグ用のオプション -d が指定された場合,
ソートの経過を標準エラー出力に出力すること
199187:2005/05/16(月) 00:31:44
>>196-197
お2人様ありがとうございます
かなり複雑に考えてしまいました・・・
externとか変なところにつけていましたし・・・

ぜひ参考にさせていただきます
200デフォルトの名無しさん:2005/05/16(月) 00:52:17
[1] 授業単元:ポインタ
[2] 問題文(含コード&リンク):
1.a="sample",b="program"の文字列をポインタ変数を使って結合し、配列moji[14]に入れる(a,bはポインタ変数)
2.一次元配列a[8]="sample",b[8]="program"の文字列をポインタ変数を使って入れ替える
[3] 環境
 [3.1] OS:NT
 [3.2] コンパイラ(バージョン):95か98
 [3.3] 言語:C
[4] 明日(今日)
[5] その他の制限:
よろしくおねがいします。
201デフォルトの名無しさん:2005/05/16(月) 00:57:24
>[3.2] コンパイラ(バージョン):95か98
ハァ?
202デフォルトの名無しさん:2005/05/16(月) 01:01:39
>>200

共通
void Strcpy ( char *a, char *b ) {
while ( ( *a = *b ) != '\0' ) a++, b++ ; }

void Strcat ( char *a, char *b ) {
while ( *a != '\0' ) a++ ;
Strcpy ( a, b ) ; }


char *a="sample" ;
char *b="program" ;
char moji[14] ;
Strcpy(moji,a) ;
Strcat(moji,b) ;


char a[8]="sample" ;
char b[8]="program" ;
char c[8] ;
Strcpy ( c, a ) ;
Strcpy ( a, b ) ;
Strcpy ( b, c ) ;
203デフォルトの名無しさん:2005/05/16(月) 01:43:42
>>193
たぶん、データファイルもいじらんと無理だと思う。
ttp://www-or.amp.i.kyoto-u.ac.jp/members/yagiura/graph-th/LA0102-040708.pdf を参照。
順列生成に関しては、奥村センセのソースを読むべし。
(ちゅーか、気合のあるヒト、プログラムは任せた)
204デフォルトの名無しさん:2005/05/16(月) 02:41:39
試験の成績、合計の高い順に並び替える。
明日中にお願いします
C++です。
int i,j,temp;
int na[A][B]={1,17,43,30}; /*番号1番の学生 数学 理科 英語*/
int nb[A][B]={2,38,39,55}; /*2番*/
int nc[A][B]={3,100,86,58}; /*3番*/
int nd[A][B]={4,95,88,63}; /*4番*/
int ne[A][B]={5,23,52,72}; /*5番*/
int nf[A][B]={6,62,49,58}; /*6番*/
int ng[A][B]={7,77,80,84}; /*7番*/
int nh[A][B]={8,45,25,62}; /*8番*/
int ni[A][B]={9,69,73,48}; /*9番*/
int nj[A][B]={10,81,77,95}; /*10番*/
int nk[A][B]={11,83,64,55}; /*11番*/
int nl[A][B]={12,51,47,47}; /*12番*/
int nm[A][B]={13,42,62,85}; /*13番*/
int nn[A][B]={14,36,50,64]; /*14番*/
int no[A][B]={15,60,76,38}; /*15番*/
205デフォルトの名無しさん:2005/05/16(月) 02:52:49
>>204
配列として間違ってるし、添字ではなくn*みたいな形式で
書かれている場合にスマートなソートのプログラムは
書けない。
206デフォルトの名無しさん:2005/05/16(月) 03:11:56
>>204
テンプレ(>>1)使え。
それと、問題文はデータも含めて全部書け。
207デフォルトの名無しさん:2005/05/16(月) 03:35:35
>>198
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/388.txt
ビット数 20 あたりでディスクスワップ始まると思う
208183:2005/05/16(月) 07:04:52
209デフォルトの名無しさん:2005/05/16(月) 08:47:48
>>208
なぜ h 抜きで?
210175:2005/05/16(月) 09:20:33
>>177
解答をありがとうございました。感謝します。

問題文2ですが、自分でも挑戦してるのですが中々うまくいきません。
どなたか大まかなヒントでも頂けないでしょうか?
211デフォルトの名無しさん:2005/05/16(月) 10:12:23
>>175
if(point>100 && point<0){/* エラー処理 */}
else if(point<60){/* 評価D */}
else if(point<70){/* 評価C */}
else if(point<80){/* 評価B */}
else {/* 評価A */}
212デフォルトの名無しさん:2005/05/16(月) 10:12:51
>>210
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/390.txt
あなたの言う 「授業で習った範囲」 がどの程度かわからないので使えるもの使った。
ダウングレードくらいは自分でやれ。
213デフォルトの名無しさん:2005/05/16(月) 10:14:30
point>100 && point<0
じゃない
point>100 || point<0
だorz
214210:2005/05/16(月) 10:23:56
>>212
解答ありがとうございます。
しかしサッパリ理解できませんでした (;´Д`)
完璧に動作するだけに勿体無い…
せっかく作成して頂いて申し訳ないですが、もうちょい自分で頑張ってみます。
215デフォルトの名無しさん:2005/05/16(月) 10:41:00
>>214
自分で 「大まかなヒントでも」 と言ってるのに 211 はスルーかよ
216210:2005/05/16(月) 10:56:28
>>211
下のレスに気を取られてて指摘されるまで気付きませんでした…ゴメソ
参考にします。配列は使わないみたいですね。見当違いなことをやってたかも…

217デフォルトの名無しさん:2005/05/16(月) 13:53:10
[1]授業単元:アルゴリズム論
[2]rand関数を使って0〜99の乱数を発生させる。
  ハッシュ関数としてキーの値の1/2を使う。***に当てはまるものを入れよ。
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005/05/20まで

プログラミング始めたばかりでさっぱりわかりません。
先輩方教えてください。

#include <stdio.h>
#include <stdlib.h>
int hash(int);
int main(void) {
int ran;

ran = rand();
ran = ran % 100;

data[*****] =***;

}
int hash(int x){
return ***;
}
218デフォルトの名無しさん:2005/05/16(月) 14:11:31
> ran = rand();
> ran = ran % 100;
こんな使い方初めて見た・・・。
まぁ、確かに動くけどさ・・・。

> data[*****] =***;
宣言されて無いのですが、良いの?
219デフォルトの名無しさん:2005/05/16(月) 14:13:29
>>217
data がどこにも宣言されてないが、

> data[*****] =***;

data[hash(ran)] = ran;

> return ***;

return x / 2;

でいいんでねーの?
・・・何がやりたいんだかようわからん
220デフォルトの名無しさん:2005/05/16(月) 14:49:40
課題を2つだされたのですがさっぱりわかりません、よろしくお願いします。
[1]授業単元:プログラミング論
[2]線形探索を応用して挿入しようとするデータの場所を特定する(iとする)
 最後から前に向かってdata[k+1]=data[k]を実行し、一つ後ろにずらす。これをk=iになるまで繰り返す
  data[i]にキーを挿入する。空欄をうめてプログラムを完成させよ。
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005/05/23の夕方5時まで


#include <stdio.h>
int main(void) {
int i,k,key, data[101];
/*配列に偶数をつめる*/
/*keyをキーボードから読み込む*/
/*線形探索で先頭より探して挿入位置をiとする*/
for (; k < *** ; ***) {
/*データを後ろにずらす*/
 }
/*結果を印字*/
return 0;
}

221220:2005/05/16(月) 14:50:19
[1]授業単元:プログラミング論
[2]先頭をl、最後をhとすると、中間mは(1+h)/2となる
  繰り返しの終了条件はlとm、あるいはmとhが等しいときとなる。
  空欄をうめてプログラムを完成させよ。
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005/05/23の夕方5時まで

#define N_DATA 100
#include <stdio.h>
int main(void) {
int l,m,h,key, data[101],result =0;
/*配列に要素をつめる(0~100)*/
/*keyをキーボードから読み込む*/
l = 0; h = N_DATA; m = (1+h)/2;
for (; ***||*** ; ***) {
/*データを後ろにずらす*/
 /*data[m]をキーを比較して等しければ見つかったのでresultを1として抜け出す。
  さもなければ大小関係により1かhを変更する*/
 }
/*結果を印字*/
return 0;
}

222デフォルトの名無しさん:2005/05/16(月) 15:16:24
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):(1)配列 studentGrades を宣言し、下記の値(点数)をキーボードより入力し初期値した後、一覧表示せよ。
(#define文を使用して学生数を STUDENTS,科目数を EXAMS,とすること。)

           学科名
       [A]  [B]  [C]  [D]  
   学生1 77 68  86 73
   学生2 96 87  89 78
   学生3 70 90  86 81 
(2)最低点を表示するプログラムを作成せよ(実行結果→最低点:68)
(3)最高点を表示するプログラムを作成せよ
(4)各学生毎の平均点表示機能を追加せよ
(5)全機能を同時に実行し、実行結果を確認せよ
[3] 環境
 [3.1] OS: Linux 3.1
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年5月18日19:00まで
[5] その他の制限:関数を使用せずに作成せよ。for文を用いて作成せよ

すいません、問題が多いのでめんどうな場合は上記のいずれかだけでも構いません
よろしくお願いしますm(_ _)m
223デフォルトの名無しさん:2005/05/16(月) 15:38:01
>>222
[2](5)同時に実行とは? まさか、並列処理しろとでも?
[5]関数を使用せずにとは? まさか、表示も全て関数を利用せずに行なうのか?
224デフォルトの名無しさん:2005/05/16(月) 15:43:54
揚げ足はおいしい
225デフォルトの名無しさん:2005/05/16(月) 15:50:57
[1] 授業単元:プログラミング言語演習2
[2] 問題文(含コード&リンク):
1.int型の配列data「500×300」がある。
このデータの配列を逆(上下・左右)にするプログラムをclass arrayの下に作り、
class ex1(メイン)から起動するようなプログラムを作れ。

2.1で反転したdataに対して、以下の演算を施した結果の配列EDGE[500×300]を求めて、
data+EDGE(加算)を行った結果をdata配列に入れるプログラムを作れ。
      2  2
data[i][j]= Σ  Σdata[i+k][j+l]*W[R][l]
      k=0 l=0
考え方はW[3×3]のラプラシアンフィルタを使う。
[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年05月11日15:00まで
[5] その他の制限:
1のほうは何とかできそうなんですが、
2のラプラシアンフィルタのやり方が良くわかりません。
よろしくお願いします。
226デフォルトの名無しさん:2005/05/16(月) 16:00:01
>>225
W[R][l]じゃなくてW[k][l]だろ?
で、ラプラシアンフィルタについてはこの辺を参考に。
ttp://www.mis.med.akita-u.ac.jp/~kata/image/lap8.html
227222:2005/05/16(月) 16:04:35
>>223
[2](5)に関しては(1)〜(4)の実行結果を同時に表示するようなプログラムを作成しろとの事です
わかりずらくてすいません;
[5]はよくわからないんですがプリントにそう書いてあるんですよね・・
なんかややこしいので「関数を使用せずに〜」というのは無視してください
228デフォルトの名無しさん:2005/05/16(月) 16:19:05
229デフォルトの名無しさん:2005/05/16(月) 16:39:49
>>225
classの下にプログラムを作るとか、classから起動するプログラムとか、
もっと一般的な言葉で解説するか具体例を挙げてくれ。
つーか、何とかできそうなら書いて味噌。
230222:2005/05/16(月) 16:44:54
>>228
ありがとうございます!
見たところそれで全部できそうですね
すごく参考になりました
どうもです^^
231220:2005/05/16(月) 16:54:41
すいません、期日が明日になったのを忘れてました;
単位落とすと学校辞めないといけなくなるので何卒よろしくお願いいたします;;
232183:2005/05/16(月) 17:17:49
>>209
いつもの癖が出ただけ。キニスンナ
233151:2005/05/16(月) 17:27:03
>>220
#include <stdio.h>

int main(void) {
int i,k,key, data[101];
/*配列に偶数をつめる*/
for(i = 0; i < 100; i++)
data[i] = i * 2;
/*keyをキーボードから読み込む*/
printf("keyを入力してください: ");
scanf("%d*\n*", &key);
/*線形探索で先頭より探して挿入位置をiとする*/
for(i = 0; i < 100; i++) {
if(data[i] >= key)
break;
}
for (k = 99; k >= i ; k--) {
/*データを後ろにずらす*/
data[k + 1] = data[k];
}
data[i] = key;
/*結果を印字*/
for(i = 0; i < 101; i += 5) {
for(k = 0; k < 5 && i + k <= 100; k++)
printf("data[%3d]=%3d ", i + k, data[i + k]);
putchar('\n');
}
return 0;
}

>>221
問題文があいまいで回答できなかった。
234デフォルトの名無しさん:2005/05/16(月) 19:06:17
[1] 授業単元: プログラム1
[2] 問題文(含コード&リンク):
■■ソケットの生成■■
2台のマシン(tokiとkenshirou)でソケットを用いた通信を行ってもらいます.
以下に送信側と受信側の動作を説明します.

・送信側
  文字列が書き込まれたファイル(前回のプログラムで書き込んだファイル等)か

 文字列を読み込み,文字列を適当な文字数ごとに分割して,ソケットを用いて受信

 に送信する.
 
・受信側
  受信した文字列を出力する.

 ファイルから読み込んだ文字列を分割せずに送信する場合からやってみてくださ
い.
 通信には,UDPを用い,ポート番号は1万+学籍番号の下3桁(10771など)を使って
 ください.

[3] 環境
 [3.1] OS: Linux 3.1
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年05月18日まで
[5] その他の制限:

よろしくお願いします。
235デフォルトの名無しさん:2005/05/16(月) 19:20:46
#include<stdio.h>
int *sisoku(int,int);
void main(void)
{
int *result;
result=sisoku(3,2);
printf("\n TASU=%d HIKU=%d KAKERU=%d WARU=%d\n",
*result,*(result+1),*(result+2),*(result+3));
}
int *sisoku(int i,int j)
{
static intref[4];
ref[0]=i+j;
ref[1]=i-j;
ref[2]=i*j;
ref[3]=i/j;
return(ref);
}
長くてすみません。このプログラムはグローバル関数宣言らしいんです
けど、ローカル関数宣言にするには、どーしたらいいんですか?
236デフォルトの名無しさん:2005/05/16(月) 19:27:38
ローカル関数宣言て何かしら?
2行目の宣言をmain関数内に入れるか、staticを付けるか、
多分どっちかなんだろうな。
237デフォルトの名無しさん:2005/05/16(月) 19:29:09
>>235
ローカル関数宣言って他からexternで関数を読めないって事で良いのかな?

#include<stdio.h>
static int *sisoku(int i,int j);
void main(void)
{
int *result;
result=sisoku(3,2);
printf("\n TASU=%d HIKU=%d KAKERU=%d WARU=%d\n",
*result,*(result+1),*(result+2),*(result+3));
}
static int *sisoku(int i,int j)
{
static int ref[4];
ref[0]=i+j;
ref[1]=i-j;
ref[2]=i*j;
ref[3]=i/j;
return(ref);
}
238デフォルトの名無しさん:2005/05/16(月) 19:33:34
>>235
main関数内に入れたいんですけど、どーやればいいんですか?
239デフォルトの名無しさん:2005/05/16(月) 19:42:54
>>238
そんなん文字通り

#include<stdio.h>
void main(void)
{
int *result;
int *sisoku(int,int);
result=sisoku(3,2);
printf("\n TASU=%d HIKU=%d KAKERU=%d WARU=%d\n",
*result,*(result+1),*(result+2),*(result+3));
}
int *sisoku(int i,int j)
{
static intref[4];
ref[0]=i+j;
ref[1]=i-j;
ref[2]=i*j;
ref[3]=i/j;
return(ref);
}
240デフォルトの名無しさん:2005/05/16(月) 19:47:22
>>239
エラーがいっぱいでたんですけど…
ちゃんと動くようにお願いします。
241デフォルトの名無しさん:2005/05/16(月) 19:49:26
>>240
それならコンパイラのバージョンを明記しいや。
VC++6.0なら通ったで?
242デフォルトの名無しさん:2005/05/16(月) 19:52:41
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):
ユーザーからの入力nを読み込み、n個の配列を作りなさい。
配列の中はa[0]=0 , a[1]=1 のように要素数?の数字を入れること。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):VisualStudio.NET
 [3.3] 言語:C
[4] 期限:今日中にお願いします。
[5] その他の制限:特になし。今まで入力から配列を確保したことが無くて混乱しています…誰か助けてください…
243デフォルトの名無しさん:2005/05/16(月) 19:56:10
>>241
下から7段目の static intref[4];のやつが
intとref[4];の間にスペースが開いてなかったみたいです。
ちゃんと動きました。ありがとうございます^^
244デフォルトの名無しさん:2005/05/16(月) 20:01:42
>>477
これは酷い…
245デフォルトの名無しさん:2005/05/16(月) 20:07:27
>>242

#include <stdio.h>
#include <malloc.h>
int main( int argc, char* argv[] )
{
int *a;
int n;
int i;

/* n の入力 */
printf( "n = ?" );
scanf( "%d", &n );
/* memory 確保 */
a = ( int * )malloc( sizeof( int ) * n );
if ( a == NULL ) return 1;
/* 配列の初期化 */
for ( i = 0; i < n; i++ ) a[ i ] = i;
/* 配列を処理するコードをここに書く */

/* memory 解放 */
free( ( void * )a );
return ( 0 );
}
246242:2005/05/16(月) 20:09:28
>>245
ポインタが出てきますね。ちょっと難しそうですが頑張ってみます。助かりました。ありがとうございました。
247Be名無しさん:2005/05/16(月) 21:17:59
http://tmp5.2ch.net/test/read.cgi/mog2/1116177047/
ここのスレ住人が速攻で回答してくれます
皆さん書き込みしましょう
248デフォルトの名無しさん:2005/05/16(月) 21:53:30
>>234 には解答つかないだろうな
249デフォルトの名無しさん:2005/05/16(月) 22:02:53
>>248
正直面倒くせえ
250193:2005/05/16(月) 22:13:17
>>203
なるべく流量を増やさないように増大路を増やせばいいというのはわかるのですが、
どのあたりで条件判定を入れて処理させればいいのやら・・・色々考えてるけどわからないです。
251デフォルトの名無しさん:2005/05/16(月) 23:10:39
>>250
経路をリストアップし、評価関数を使い、もっとも得点の高い(低い)経路を選択する。
評価基準はあなたの言うように、流量でよいのでわなかろーか。
なんか、A*(エースター)探索アルゴリズムの逆バージョンだな。
252デフォルトの名無しさん:2005/05/16(月) 23:19:46
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
サーバー→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/393.txt
クライアント→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/394.txt
ゲームサンプルプログラム→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/395.txt
問題→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/396.txt
上の「問題」の「6. キーボード版 Network対戦用ゲーム 作成」をやってほしいのですが…。
[3] 環境
 [3.1] OS:Red Hat Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005/5/25 12:00まで
[5] その他の制限:
253デフォルトの名無しさん:2005/05/16(月) 23:35:05
単元:C言語 問題文は以下の通りです。英語の問題を翻訳したんで少し分かりにくいかもです。

既存する配列に対して挿入、削除、検索をし、また配列要素を表示させるプログラムを作りなさい。
main関数:
1 数列の定義 int a[100]={5,20,50,100}, n=4; /* nを数列の長さとする */
2 下のメニューを表示させる
(1)配列要素の挿入(2)配列要素の削除 (3)配列要素の検索 (4)全ての要素の表示 (5)終了
3 上記の入力に基づき、相応の関数を用いさせる
4 挿入の場合:もし戻り値が0ならば、「この数は既に存在しています。挿入できません」
  と表示させる。戻り値が1の場合、n+1をし且つ4「全ての要素の表示」の関数を使い挿入後の要素値を表示させる
5 削除の場合:戻り値が0の場合「この数は数列の中に存在しません。削除できません」
        戻り値が1の場合n-1をし且つ4と同じく要素値を表示させる
6 検索の場合:戻り値が-1の場合「見つかりません」と表示
        戻り値が負数の場合、検索した要素のアドレス(?)を表示
7 プログラムは5終了を実行するまで繰り返し行うことができる

挿入関数:
1 既に数値が存在するため挿入不可の場合、戻り値を0とする
2 挿入後の戻り値を1とする
削除関数
1 削除不可の場合、戻り値を0とする
2 正常に削除できた場合、戻り値を1とする
検索関数
1 見つけた場合戻り値は対応するアドレス(?)とする
2 見つけれない場合は戻り値を-1とする
全ての要素の表示
1 配列の長さによって、順次に要素の値を表示させる


254225:2005/05/16(月) 23:38:31
>>226
間違ってました。スマソ。
ラプラシアンフィルタでググってそのページも見たんだが、いまいちピンとこないんです。
画像処理をCでやるのが間違っているんですかね。

>>229
classというのは関数の名前です。
1のほうは

#include <stdio.h>
int main(void) {
int i,j,temp,data[500][300];
for(i = 1; i < 500; i++) {
printf("%d\n",data[i][j]);
}
retuen 0:
}
int class array(int data[i][j])
{
int temp,i,j;
for(i = 1; i <= 500; i++){
for(j = 1; j <= 300; j++){
temp = data[500-i][300-j];
data[500-i][300-j] = data[i][j];
data[i][j] = temp;
}
}
return;
}

こんなカンジかと。
255253:2005/05/16(月) 23:38:41
配列の定義 int a[100]={5,20,50,100}, n=4; /* nを配列の長さとする */

の間違いです。すんません。
256デフォルトの名無しさん:2005/05/17(火) 01:36:58
>>253

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

久しぶりにまずいカルボナーラを作ったよ。
味わってくれ。(汗。
257256:2005/05/17(火) 01:41:30
そうそう、デバッグは甘く作ったから、要デバッグ。
258253:2005/05/17(火) 02:26:10
>>256
スマソ。なんでか分からないけど、見ることができませぬ。
できればコピペでここにお願いします。
259デフォルトの名無しさん:2005/05/17(火) 02:45:04
>>234
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/400.zip
とりあえず動いた。
Linux3.1って何だよ!
260253:2005/05/17(火) 03:20:34
急いでいるので早くしてもらえませんか?
261253:2005/05/17(火) 03:20:48
>>256
急いでるんで早くしてもらえます?
262253:2005/05/17(火) 03:21:02
本当に急いでるんです!!!
263デフォルトの名無しさん:2005/05/17(火) 03:21:02
すっげぇ悪質なイタズラ思いついたwwww
http://ex10.2ch.net/test/read.cgi/news4vip/1116266649/
264253:2005/05/17(火) 03:21:16
とっとと教えてくださいよ。馬鹿なんですか?
265デフォルトの名無しさん:2005/05/17(火) 03:21:33
>>260
なんだいきなりそのたいどわwwwww
266253:2005/05/17(火) 03:21:34
ああーもう。
書き込むのおっせえなぁもう
267デフォルトの名無しさん:2005/05/17(火) 03:21:47
はえーよww
268デフォルトの名無しさん:2005/05/17(火) 03:21:55
>>263
VIPのせいにすんなよラウンコ
269デフォルトの名無しさん:2005/05/17(火) 03:22:00
>>253
ちょっと待て!!それが人に聞く態度か!!
270253:2005/05/17(火) 03:22:03
とっととうp汁!
271デフォルトの名無しさん:2005/05/17(火) 03:22:17
>>253
は?しねよ
272デフォルトの名無しさん:2005/05/17(火) 03:22:28
>>263
VIPにへんなスレ建てんなラウンコ
273デフォルトの名無しさん:2005/05/17(火) 03:22:31
>>253
いい加減にしてください!!!
訴えますよ!!!
274デフォルトの名無しさん:2005/05/17(火) 03:22:36
>>253
急に態度が変わったね
275256:2005/05/17(火) 03:22:40
>>253
なんだ?頭くるっちゃたのか?
276253:2005/05/17(火) 03:22:54
この程度の問題も出来ないのに本当にあんたCプログラマ?
277デフォルトの名無しさん:2005/05/17(火) 03:23:40
私は西洋梨が大好きです。
お店でよく売られているのはラ・フランスです。
興味があったので調べてみたら代表的なものは
「ラ・フランス」「バートレット」「ル・レクチェ」の3種だそうです。
私は「ラ・フランス」しか知りません。
「ラ・フランス」は100%外国から来たモノだと思っていたのですが
フランスの梨苗を 山形に植え改良を重ねて出来たのがラ・フランスなんだそうです。

こんな話をしていたら食べたくなってきました。
    /\___/ヽ
   /''''''   '''''':::::::\
  . |(●),   、(●)、.:| 
  |   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/
  ,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
:   |  '; \_____ ノ.| ヽ i
    |  \/゙(__)\,|  i |             それがVIPクオリティ
    >   ヽ. ハ  |   ||            http://ex10.2ch.net/news4vip/
278253:2005/05/17(火) 03:23:54
私の時間返してもらえませんか???
279256:2005/05/17(火) 03:24:02
ちょっと待てよ、なんか人違くないか?>>253
280253:2005/05/17(火) 03:25:07
そんなことよりオレの歌を聴いてください

お魚くわえたドラネコー♪
281253:2005/05/17(火) 03:25:23
本物は私です。お願いですからとっとと答えろ。
282253:2005/05/17(火) 03:26:06
いや違くはないですよ
それよりあんたの技術力の低さが問題だ。
カルボナーラでも食ってろデブ
283253:2005/05/17(火) 03:26:38
本当に急いでるんです。
偽者は無視して質問に答えてください。
284253:2005/05/17(火) 03:27:06
それではアンコールにお答えしまして

はしれーこうそくのてーいーこーくかげきだんー♪
285デフォルトの名無しさん:2005/05/17(火) 03:27:12
>>279
あんたにはガッカリだ・・・
286253:2005/05/17(火) 03:27:59
さらにアンコールにお答えして

あしたは〜晴れるねジャンポール♪
287256:2005/05/17(火) 03:28:36
>>286
待ってました!
288778:2005/05/17(火) 03:29:06
すみません、自己解決しました。
289デフォルトの名無しさん:2005/05/17(火) 03:29:57
すみません。僕のせいでだいぶスレが荒れてしまいました…
今更謝って済む問題ではないですよね…反省してます。
本当に申し訳ありませんでした。
290デフォルトの名無しさん:2005/05/17(火) 03:30:04
>>778
半年romってろ!
291デフォルトの名無しさん:2005/05/17(火) 03:30:18
>>288
おまwwwww
スレまちがえてるwwwwwwww
292デフォルトの名無しさん:2005/05/17(火) 03:31:05
スゲー横柄な質問者ってのは、昔から居るよなぁ。(溜息)
293デフォルトの名無しさん:2005/05/17(火) 03:33:40
またラウンコか・・・
294デフォルトの名無しさん:2005/05/17(火) 03:36:33
オモシロカッタヨ
295デフォルトの名無しさん:2005/05/17(火) 03:41:56
なに?
ラウンジって何なの?
296デフォルトの名無しさん:2005/05/17(火) 03:47:44
>>295
2ch内の荒らしの集団
初心者をオフに誘ってレイプとかするらしいよ
皆さん気をつけてください
297253:2005/05/17(火) 03:55:33
>>260-287
の253はニュー速VIPの悪戯ですので勘違いせぬようお願いします。
298デフォルトの名無しさん:2005/05/17(火) 03:57:00
ラウンジの人たちだね・・・
299デフォルトの名無しさん:2005/05/17(火) 03:57:38
答えてやるから質問を3行にまとめろ
300デフォルトの名無しさん:2005/05/17(火) 03:57:54
>>296
最悪だなラウンジって
301デフォルトの名無しさん:2005/05/17(火) 03:58:06
>>299
お兄ちゃんの
おちんちん
何センチ?
302デフォルトの名無しさん:2005/05/17(火) 03:58:19
>>299


303デフォルトの名無しさん:2005/05/17(火) 04:02:19
きさま
えがしら
ろっぷんだろ
304193:2005/05/17(火) 06:27:06
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/401.txt

つくって、コンパイルが通ったけど、何にも結果が出力されてこない・・・
もう限界だ、寝るorz
305デフォルトの名無しさん:2005/05/17(火) 06:36:44
[1] 授業単元:繰り返し文・配列
[2] 問題文
1・適当な2つの3行×3列の行列a,bを定め、両者の和行列cを計算するプログラムを書け。
 ヒント:2次元配列a[3][3] b[3][3]を定め、2重ループを使ってi,j成分をc[i][j]=a[i][j]+b[i][j]とすればよい
2・行列a,bの積行列cを求めるプログラムを書け。
 ヒント:制御変数kを使った3重ループとし、c[i][j]=a[i][j]×b[i][j]とすればよい。

[3] 環境
 [3.1] OS: WINDOWS XP
 [3.3] 言語:C

お願いします。
306デフォルトの名無しさん:2005/05/17(火) 07:16:31
期限書いてないから急ぎかわからないので大まかに
int i,j,k,tmpは初めに宣言しておくこと
複数の計算をforにやらせたいときは{}でまとめないと
積ではforのあとの1つtmp=0しかやってくれないことに注意
逆に和のように1つの時は{}を省略できる
積で{}を取るとどうなるか提出後に考えてみるのも一興


for(i=0;i<3;i++)
for(j=0;j<3;j++)
c[i][j]=a[i][j]+b[i][j];


for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
tmp=0;
for(k=0;k<3;k++)
tmp+=a[i][k]*b[k][j];
c[i][j]=tmp:
}
307デフォルトの名無しさん:2005/05/17(火) 08:35:41
>>254
いやそれ、未だ全然わかんないから。
つーか、コンパイルとおらねぇだろよ。
ついでに言えば、反転処理も間違ってる。
308デフォルトの名無しさん:2005/05/17(火) 09:59:18
[1] 授業単元
宿題ではないのですが初心者スレで
こちらのスレを薦められたので来ました
[2] 問題文
文字列をクイックソートを使って昇順にソートしたい
(qsort()は使わずに)
[3] 環境
 [3.1] OS: WINDOWS XP
 [3.3] 言語:C/C++
[4] 期限:無期限

作りかけのもの
ttp://vip-et.ddo.jp/vipet/cgi-bin/img/405.zip

Ignore.txtを行ごとに読み込んで、行をソートして上書きするプログラムです。
悩んでいるのはsort.cppの部分です。よろしくお願いします。
309デフォルトの名無しさん:2005/05/17(火) 10:18:16
1]授業単元:プログラミング論I
[2]2分探索のプログラムを作成せよ
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005年5月18日まで

期限せまってるのですがさっぱりわかりません、よろしくお願いいたします。
310デフォルトの名無しさん:2005/05/17(火) 11:18:48
>>259
ありがとうございます!
ソース見て勉強します。
311デフォルトの名無しさん:2005/05/17(火) 11:23:40
312デフォルトの名無しさん:2005/05/17(火) 11:49:42
>>309
問題が抽象的すぎます。
313デフォルトの名無しさん:2005/05/17(火) 11:56:03
>>311
早速読んでみます
ありがとうございました
314309:2005/05/17(火) 12:38:47
なんかこの続きを作れって感じなのですが、さっぱり、、
ヒントをだされても何がなにやら、、

・先頭をl、最後をhとすると、中間mは(1+h)/2となる
・繰り返しの終了条件はlとm、あるいはmとhが等しい時となる。
#define N_DATA 100
#include <stdio.h>
int main(void){
int l, m, h, key, data[101], result=0;
315デフォルトの名無しさん:2005/05/17(火) 12:44:16
> #define N_DATA 100
> int l, m, h, key, data[101], result=0;

こんなコードを問題で出すから生徒は育たないのだと思う。
316デフォルトの名無しさん:2005/05/17(火) 12:50:01
些細なことだけど

・先頭をl、最後をnとすると、中間mは(l+n)/2となる
・繰り返しの終了条件はlとm、あるいはmとnが等しい時となる。
#define N_DATA 100
#include <stdio.h>
int main(void){
int l, m, n, key, data[101], result=0;

なきがする
317デフォルトの名無しさん:2005/05/17(火) 12:50:07
>>314
>>1
> ・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
318309:2005/05/17(火) 13:09:10
大変失礼しました。期限がせまっててあせってるのでつい、、
319デフォルトの名無しさん:2005/05/17(火) 13:09:21
>>317
はあ?何をとちくるってんだこのボケは
320デフォルトの名無しさん:2005/05/17(火) 13:32:46
>>319
情報を小出しにするなって事だろ
321デフォルトの名無しさん:2005/05/17(火) 14:07:17
>>309
期限って明日やん。この程度の問題でそんなん迫っているとは言わん。
こんなもんで良いんか?

#include <stdio.h>
#define N_DATA 100
#define DATA_COUNT ( N_DATA + 1 )
int main( void )
{
int i, l, m, n, key, data[ DATA_COUNT ], result = 0;
l = 0;
n = N_DATA;
for ( i = 0; i < DATA_COUNT; i++ ) data[ i ] = i + 1;
printf( "key ? " );
scanf( "%d", &key );
m = ( l + n ) / 2;
while ( 1 ) {
printf( "l = %d n = %d data[ %d ] = %d\n", l, n, m, data[ m ] );
if ( m == l || m == n || data[ m ] == key ) break;
else if ( data[ m ] > key ) { n = m; m = ( l + n ) / 2; }
else { l = m; m = ( l + n ) / 2 + 1; }
}
if ( data[ m ] == key ) printf( "Found data[ %d ] = %d\n", m, data[ m ] );
return ( result );
}

うん、汚ねぇソース。
322321:2005/05/17(火) 14:31:48
あ、一カ所間違ってら。まぁ、理解して修正してくれ。
323193:2005/05/17(火) 16:37:09
何か、荒らしのせいで随分レスがすすんでしまったみたいなんですけど、
実行してしばらく経っても全然結果が出てこないんですよね。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/401.txt

あと1時間で出さなきゃいけないのに何も思いつかないorz
324デフォルトの名無しさん:2005/05/17(火) 16:40:35
>>323
故意に計算速度を遅くしているからじゃないか?
325デフォルトの名無しさん:2005/05/17(火) 16:40:37
寝たあと、すごいことになってたんだな。
偽者出現したり、やっぱここも2chだな。(笑
326デフォルトの名無しさん:2005/05/17(火) 16:52:56
>>323
そんなときこそ、デバッグプリントを活用するんだ。
たとえば、forで今、何番目を処理してるか?とかコンソールに出すと、視覚的に良くわかる。
でも、ソースが汚くなる諸刃の剣。と。
327デフォルトの名無しさん:2005/05/17(火) 16:57:37
>>326
オマエ、諸刃の剣いってみたかったんちゃうかと。
328193:2005/05/17(火) 17:03:54
>>324
だって、それが目的ですもの
329デフォルトの名無しさん:2005/05/17(火) 18:08:02
>>327
だって、それが目的ですもの
330デフォルトの名無しさん:2005/05/17(火) 18:44:22
一生のお願いです。助けてください!!
【質問テンプレ】
[1] 授業単元: バイオインフォマティックス
[2] 問題文(含コード&リンク):
http://www.geocities.jp/arerenore1357/HW.zip
この中に途中までのコードと問題文が含まれています。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): MSVC
 [3.3] 言語:C++
[4] 期限:なるべく早く。
[5] その他の制限:
コードはだいたい出来ていて、あとは、align 関数を完成させるだけです。
本当、窮地なんです。
助けてください。お願いします!!
331デフォルトの名無しさん:2005/05/17(火) 19:00:08
>>330
問題文はどこ?
332デフォルトの名無しさん:2005/05/17(火) 19:04:45
>>330
問題文ないよね?
333デフォルトの名無しさん:2005/05/17(火) 19:09:14
オレも探しちったぜ
あの暗号が問題文かと

んなわきゃねー
334デフォルトの名無しさん:2005/05/17(火) 19:10:32
[1] 情報処理
[2] 問題文
キーボードから入力した数値を小さい値の順に並べるプログラム。
ただし、関数を作る)
[3] 環境
 [3.1] OS: WINDOWS XP
 [3.3] 言語:C
[4] 期限:無期限
初歩的な質問ですがお願いします。
335デフォルトの名無しさん:2005/05/17(火) 20:07:11
336デフォルトの名無しさん:2005/05/17(火) 20:45:18
[1] 授業単元:C++応用
[2] 問題文(含コード&リンク):
200人分の、4科目のデータが存在する。これをヒストグラムを表示する関数を
使用し、表示せよ
ヒストグラムの表示方法
0 〜 10ある科目が 0点〜10点だったの人数
11 〜 20ある科目が11点〜20点だったの人数
21 〜 30...
31 〜 40
41 〜 50
51 〜 60
61 〜 70
71 〜 80
81 〜 90
91 〜 100ある科目が91点〜100点だったの人数
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):VC++6.0Pro
 [3.3] 言語:C++
[4] 期限:今日中にお願いします。
[5] その他の制限:データは別ファイルから参照。↓の関数を必ず使う
/* 構造体の定義 */
struct HistgramRange
{
int low;
int high;
};
337336:2005/05/17(火) 20:48:29
/* 構造体を用いた変数の宣言と初期化 */
struct HistgramRange ranges[] =
{
{ 0, 10 },
{ 11, 20 },
{ 21, 30 },
{ 31, 40 },
{ 41, 50 },
{ 51, 60 },
{ 61, 70 },
{ 71, 80 },
{ 81, 90 },
{ 91, 100 }
}
作成する関数の定義は、次のようにする。
void histgram2(int points[],
int nchild,
struct HistgramRange hist[],
int nhist,
int results[]);
(ここまで出来ました。ロダ使えないので長レスごめんなさい)
338336:2005/05/17(火) 20:50:50
#include <stdio.h>
#define NINZUU 200//処理する人数(200)
#define STR_BUFSIZE 30//文字列受信用バッファサイズ
#define KAMOKU 4//科目数(4)
#define KOKUGO0//国語
#define SANSUU1//算数
#define RIKA2//理科
#define SYAKAI3//社会
int atoi_c(char buf[]);
char *skipws(char *str);
int histgram1(int points[], int nchild, int low, int high);
int main(void)
{char buf[STR_BUFSIZE];//文字列受信用バッファ
int a[KAMOKU][NINZUU];//科目x人数別の点数情報
int i = 0;
struct HistgramRange
{int low;
int high;};
while (fgets(buf, STR_BUFSIZE, stdin) != NULL)
{
char *p = buf;
a[KOKUGO][i] = atoi_c(p);
p = skipws(p);
a[SANSUU][i] = atoi_c(p);
p = skipws(p);
a[RIKA][i] = atoi_c(p);
p = skipws(p);
a[SYAKAI][i] = atoi_c(p);
printf("%d人 国語 : %d,算数 : %d,理科 : %d,社会 : %d\n", i, a[KOKUGO][i], a[SANSUU][i], a[RIKA][i], a[SYAKAI][i]);
i++;
if (i == NINZUU)//処理可能な上限人数に達した場合も、集計を終了する
break;}
339336:2005/05/17(火) 20:52:47
int xa1_1 = histgram1(a[KOKUGO], i, 0, 10);
int xb1_2 = histgram1(a[SANSUU], i, 0, 10);
int xc1_3 = histgram1(a[RIKA], i, 0, 10);
int xd1_4 = histgram1(a[SYAKAI], i, 0, 10);
printf ("0-10 国語 : %d 人, 算数 : %d 人,理科 : %d 人,社会 : %d 人\n", xa1_1,xb1_2,xc1_3,xd1_4);

int xa2_1 = histgram1(a[KOKUGO], i, 11, 20);
int xb2_2 = histgram1(a[SANSUU], i, 11, 20);
int xc2_3 = histgram1(a[RIKA], i, 11, 20);
int xd2_4 = histgram1(a[SYAKAI], i, 11, 20);
printf ("11-20 国語 : %d 人, 算数 : %d 人,理科 : %d 人,社会 : %d 人\n", xa2_1,xb2_2,xc2_3,xd2_4);
(100まで続く)
return 0;
}
int histgram1(int points[], int nchild, int low, int high)
{

int i = 0;
short count = 0;

for (i = 0; i < nchild; i++)
{if ( (low <= points[i]) && (points[i] <= high) )
count++;
}
return count;
}int atoi_c(char buf[])
340336:2005/05/17(火) 20:54:00
{
int x = 0;//変換中の数値
short i = 0;//現在処理中の桁(要素番号)

while ( ('0' <= buf[i]) && (buf[i] <= '9') )//bufの中身は数字か?
{
x *= 10;//下の桁が見つかったので1桁大きくする
x += buf[i] - '0';//bufのi桁目を数字に変換
i ++;//一つ下の桁を見に行く
}
return x;
}char *skipws(char *str)
{
while (('0' <= *str) && (*str <= '9'))//読み終わった数字
str++;
while (!(('0' <= *str) && (*str <= '9')) && *str != '\0')//次の数字に当たるまでポインタを進める
str++;
return str;
}

以上になります。長レスごめんなさい。
構造体での表示方法がどうしてもわかりません。よろしくお願いします
341193 ◆vVe.Z3fuuw :2005/05/17(火) 21:25:01
まだ>>323から進展がない件
もう締め切りが過ぎてしまった件
342デフォルトの名無しさん:2005/05/17(火) 21:44:13
>>340
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/404.txt

> 作成する関数の定義は、次のようにする。
> void histgram2(int points[],
> int nchild,
> struct HistgramRange hist[],
> int nhist,
> int results[]);

クソなプロトタイプだな。
343デフォルトの名無しさん:2005/05/17(火) 21:56:49
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): マシンイプシロンを計算するプログラムを作成せよ(floatの場合とdoubleの場合の2種類)
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:明後日
[5] その他の制限: 1.0にある変数aを足したときPCが1.0+a>1.0と認識できなくなる瞬間がある。aの値をa=a/2のように各ループで計算し、不等式で判断するとよい。但し、認識できなくなる直前のaがマシンインプロシオンであることに注意せよ。
との事ですがいまいち分かりません;;どなたかご教授宜しくお願い致します。
344340:2005/05/17(火) 21:59:48
>>342
ありがとうございました。助かりました。
345デフォルトの名無しさん:2005/05/17(火) 22:07:00
[1] 授業単元:基礎プログラミング
[2] 問題文(含コード&リンク): n個の乱数(整数)を発生させ、そのn個の整数が素数であるかどうかを判別するプログラムを作成せよ。但し、整数の上限は1000とする。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:
[4] 期限:明日

お願いしますです
346345:2005/05/17(火) 22:07:57
すいません言語Cです
347デフォルトの名無しさん:2005/05/17(火) 22:11:13
>>343
んで、答えはこんなんだ。
double a = 1.0;
double old_a;
while (a + 1.0 > a) {
  old_a = a;
  a /= 2;
}
printf("%f\n", a);
でもなぁ。i386系のCの浮動小数点演算は、これで正確にでるかはわからんなぁ。
348デフォルトの名無しさん:2005/05/17(火) 22:12:09
[1] 授業単元: C言語基礎
[2] 問題文(含コード&リンク):数列int a[10]={1,2,3}に入力した数値を加え、小さい方から大きい方へと並び替え、表示させる
[3] 環境
 [3.1] OS: windows XP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:できれば今日中に・・・
349デフォルトの名無しさん:2005/05/17(火) 22:16:50
>>345

/* 1以上n以下の乱数を返す */
int random(int n) {return rand() % n + 1}
/* 素数なら真を返す */
int is_prime(int n) {
int i;
for (i = 2; i <= n; i++)
if (n % i == 0)
return 1;
return 0;
}
main(void) { /* 力尽きた */}
350デフォルトの名無しさん:2005/05/17(火) 22:18:40
ソートは食傷気味。
351デフォルトの名無しさん:2005/05/17(火) 22:22:43
>>347
なぜか動きません・・・orz
352デフォルトの名無しさん:2005/05/17(火) 22:27:50
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):
  与えられた文章から最も文字数の多い行を表示しなさい
  例)今日は
    とても良い天気なので
    公園に行きました
  解)とても良い天気なので    
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C


皆さんなら、朝飯前ですか?
353デフォルトの名無しさん:2005/05/17(火) 22:31:57
>>348
#include <stdio.h>
int main() {
char buf[256];
int i, j, tmp, a[10] = { 1, 2, 3 };
const int size = sizeof(a) / sizeof(*a);
for(i = 0; i < size; i++) {
for(; ; ) {
printf("%d 番目に加える数値を入力してください: ", i + 1);
*buf = '\0';
fgets(buf, sizeof(buf), stdin);
if(sscanf(buf, "%d", &tmp))
break;
fputs("エラー: 数値として認識できません。\n", stderr);
}
a[i] += tmp;
}
for(i = 1; i < size; i++) {
for(j = i; j < size; j++)
{
if(a[j - 1] > a[j])
{
tmp = a[j - 1];
a[j - 1] = a[j];
a[j] = tmp;
}
}
}
for(i = 1; i < size; i++)
printf("%d: %d\n", i + 1, a[i]);
return 0;
}
354デフォルトの名無しさん:2005/05/17(火) 22:31:58
>>352
>皆さんなら、朝飯前ですか?

なんかムカツク。
朝飯まで時間があるから自分でやれ。
355デフォルトの名無しさん:2005/05/17(火) 22:33:42
>>353
ありがとうがざいます。これで明日からちゃんと学校に通えれます。
356352:2005/05/17(火) 22:34:06
>>354
すみません・・・一言多かったです m(_ _)m
反省してます。
357デフォルトの名無しさん:2005/05/17(火) 22:36:43
>>348
#include <stdio.h>
#include <stdlib.h>
#define ArrayMax (10)
int func(const void* a,const void* b){
    int aa= (*(int*) a);
    int bb= (*(int*) b);
    if(aa>bb) return 1;
    if(aa == bb) return 0;
    if(aa<bb) return -1;
    return 0;
}
int main(void)
{
    int a[ArrayMax];
    for(int i=0;i<ArrayMax;i++){
        printf("%d-",i+1);
        scanf("%d",&a[i]);
    }
    for(int i=0;i<ArrayMax;i++){
        printf("%d ",a[i]);
    }
    puts("\n*start sort*\n");
    qsort(a,ArrayMax,sizeof(int),func);
    for(int i=0;i<ArrayMax;i++){
        printf("%d ",a[i]);
    }
    return 0;
}
358デフォルトの名無しさん:2005/05/17(火) 22:39:09
>>352
#include <stdio.h>
#include <string.h>

#define BUF_SIZE 256

int main()
{
char buf[BUF_SIZE], longest[BUF_SIZE] = "";
size_t len, maxlen = 0;

while(fgets(buf, sizeof(buf), stdin) != NULL)
{
len = strlen(buf);
if(len && buf[len - 1] == '\n')
buf[--len] = '\0';
if(len > maxlen)
{
maxlen = len;
strcpy(longest, buf);
}
}
puts("最も長い行:");
puts(longest);
getchar();
return 0;
}
359デフォルトの名無しさん:2005/05/17(火) 22:39:14
[1]授業単元:データ構造
[2] ダミー節点を使わないリスト構造を用いて,挿入整列の
プログラムを作成せよ
・リスト構造は,ポインタによるリンクリストを用いること
・整列前のリスト内の各要素,整列後のリスト内の各要素を
 表示するようにすること
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン): cygwin
[3.3]言語:C言語
[4]期限:2005/05/23

結構考えたつもりなんですがさっぱりわかりません。
どうかよろしくお願いします。
360デフォルトの名無しさん:2005/05/17(火) 22:42:49
>>359
どこまで考えたんだ?
361デフォルトの名無しさん:2005/05/17(火) 22:44:11
>>357
int func(const void* a,const void* b){
return *(int*)a - *(int*)b;
}
一行ですむものを。
362デフォルトの名無しさん:2005/05/17(火) 22:46:15
>>349
#includeから書いていただけると嬉しいです;
363デフォルトの名無しさん:2005/05/17(火) 22:48:14
>>361
おお、そんな方法が。
勉強になります。
さんきゅー。
364デフォルトの名無しさん:2005/05/17(火) 22:48:22
>>360
色々な参考書読んだのですが、プログラムを作るとなると手が出ません^^;
つまり、手付かずの状態です。全く分かりません^^;
365デフォルトの名無しさん:2005/05/17(火) 22:48:22
問題が2つ出たのですがさっぱり解りません。
先輩方宜しくお願いします。

[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):ダミー節点を使わないリスト構造を用いて,挿入整列のプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):bcc
 [3.3] 言語:C
[4] 期限:5月22日まで
[5] その他の制限:
リスト構造は,ポインタによるリンクリストを用いること
整列前のリスト内の各要素,整列後のリスト内の各要素を表示するようにすること
366352:2005/05/17(火) 22:48:32
>>358
ありがとうございました
助かりました
367デフォルトの名無しさん:2005/05/17(火) 22:53:24
>>364
本を読んでいるだけではプログラミングなんて身につかない。
自然言語にも言えることだけど。
368365:2005/05/17(火) 22:54:12
[2] 問題文(含コード&リンク):配列によるリストを用いて,Josephusの問題を解法するプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):bcc
 [3.3] 言語:C
[4] 期限:5月22日まで
[5] その他の制限:無し

宜しくお願いします。
369デフォルトの名無しさん:2005/05/17(火) 23:14:06
>>367
はい、すみません。でも今回は本当にわからなかったんです。
どうかよろしくお願いしますm(__)m
370デフォルトの名無しさん:2005/05/17(火) 23:17:15
[1] 情報処理
[2] 問題文
テストの点数を入力していき、最高点、最低点、平均点を計算するプログラムを作成せよ
入力の値が負になったとき、入力は終了とする
[3] 環境
 [3.1] OS:linux
 [3.3] 言語:C
[4] 期限:明日
[5] その他の制限:入力値を用いて判定式を作成し、while分に応用する

よろしくお願いします
371デフォルトの名無しさん:2005/05/17(火) 23:20:14
激しくちゃぶ台ひっくり返したい。
372デフォルトの名無しさん:2005/05/17(火) 23:20:27
[1] 授業単元:C
[2] 問題文(含コード&リンク):ガウスの消去法。入力、前進代入、後進代入、出力の関数を使う。
[3] 環境
 [3.1] OS: WinXp
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:5月18日
[5] その他の制限:

数学系のプログラミングがまったくできません。
よろしくお願いします。
373デフォルトの名無しさん:2005/05/17(火) 23:25:03
>>372
数学系でないプログラミングを教えて欲しい。
374デフォルトの名無しさん:2005/05/17(火) 23:26:31
言語処理とか数学系じゃない・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ような気がちょっとする。
375デフォルトの名無しさん:2005/05/17(火) 23:42:29
>>252をどうか・・・お願いします
376デフォルトの名無しさん:2005/05/17(火) 23:46:25
>>361
aが指してる値がINT_MINで、bが指してる値が正だと
ヘンなことになるな。
377デフォルトの名無しさん:2005/05/17(火) 23:50:57
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):ポインタ変数の配列 char*a[5]; に
英単語を5個入力し、逆順に出力するプログラムをつくれ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 5月18日
[5] その他の制限:  特にありません。

どなたかよろしくお願いします。
378デフォルトの名無しさん:2005/05/17(火) 23:52:43
>>370
#include<stdio.h>
int main(){
    int min,max,sum=0,num=0,point=0;
    printf("点数を入力して下さい。\n負の数を入力すれば終了します。\n");
    scanf("%d",&point);
    min = max = point;
    while(point>=0)
    {
        ++num;
        if(min > point)min = point;
        if(max < point)max = point;
        sum += point;
        scanf("%d",&point);
    }
    if(num != 0) printf("最高点は%d点です。\n最低点は%d点です。\n平均点は%d点です。\n",max,min,sum/num);
    else printf("得点が入力されていません");
}
379デフォルトの名無しさん:2005/05/18(水) 00:00:30
>>365
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/405.txt
希望通りのものかどうか知らんが
380デフォルトの名無しさん:2005/05/18(水) 00:17:54
>>379
359ですが365と重複していたので解決しました。
ありがとうございました。
381デフォルトの名無しさん:2005/05/18(水) 00:19:38
>>378
ありがとうございます!助かりました
382デフォルトの名無しさん:2005/05/18(水) 00:25:59
>>252
問題の情報が十分に与えられていない。無理。
383デフォルトの名無しさん:2005/05/18(水) 00:59:43
>>377
#include <stdio.h>
#include <string.h>

#define BUF_SIZE 256

int main()
{
const char *seps = " ,\t\n";
static char inbuf[BUF_SIZE], abuf[BUF_SIZE];
char *a[5], *str, *writepos = abuf;
const size_t size = sizeof(a) / sizeof(*a);
size_t num = 0, i;
while(num < size)
{
*inbuf = '\0';
fgets(inbuf, sizeof(inbuf), stdin);
str = strtok(inbuf, seps);
while(str)
{
a[num] = writepos;
writepos += sprintf(writepos, "%s%c", str, '\0');
if(++num == size)
break;
str = strtok(NULL, seps);
}
}
for(i = size; i; )
printf("%s ", a[--i]);

return 0;
}
384デフォルトの名無しさん:2005/05/18(水) 01:04:10
書き忘れていましたが、>>365は自分で教科書を参考にしながら書いていたら以下のようになりました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/406.txt
385デフォルトの名無しさん:2005/05/18(水) 01:22:01
>>382
いや、あれ以上与えようが・・・。
サーバーとクライアントのチャットができるプログラムを、395.txtのゲームができるように、
少し変えてもらうだけでいいんですが。
386デフォルトの名無しさん:2005/05/18(水) 01:33:28
>>385
情報も環境もないのに出来るわけ無いだろ。
自分に出来ないことを 「だけ」 って言うな。
387377:2005/05/18(水) 01:39:37
>>383
ありがとうございます。とても助かりました。
388デフォルトの名無しさん:2005/05/18(水) 02:46:25
>>330
desu. suimasen. koredesu.
http://www.geocities.jp/arerenore1357/HW.cab

honto, onegai simasu!!
389デフォルトの名無しさん:2005/05/18(水) 02:59:40
【質問テンプレ】
[1] 情報通信:
[2] ttp://www.musication.to/prog/erl.html のBを求める計算のプログラム:
[3] 環境
 [3.1] OS:linux
 [3.3] 言語:C
[4] 期限:18日 13:00まで
[5] なし

計算式がわかっているのにどうにもできません。
どうかよろしくおねがいします。
390デフォルトの名無しさん:2005/05/18(水) 03:23:36
>>389
a は何で n は何で x は何だ?
391デフォルトの名無しさん:2005/05/18(水) 03:31:13
xはforループの変数だろ。
392389:2005/05/18(水) 03:42:03
すいません。
とりあえずaとnは自分で入力する変数ということで。
xは入れなくてもΣで動くと思います。
393デフォルトの名無しさん:2005/05/18(水) 04:15:48
>>392 藁った。

ところで、呼量がaで、回線容量がnだな。
Bは呼損率だが、それを求めてほしーよーだ。
リンク先では、aとBを与えてnを求めるプログラムだから混乱するわな。

あと、0の階乗は1な。
数学ライブラリを使うときは、-lm忘れんなよ。
394デフォルトの名無しさん:2005/05/18(水) 05:42:54
>>306
ありがとうございます。
遅くなってすいません。
395デフォルトの名無しさん:2005/05/18(水) 07:15:21
>>343
float版は自分でやんなさい

#include <stdio.h>

#define ONE 1.0
double deps(void)
{
double eps = ONE;
do {
eps *= 0.5;
} while( eps+ONE != ONE );
eps *= 2;
return eps;
}

int main( void )
{
printf( "%e\n", deps() );
return 0;
}
396デフォルトの名無しさん:2005/05/18(水) 07:50:09
[1] プログラミング演習
[2] 簡単なモグラたたきゲームを作れ
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:今日のお昼まで
 
今日中に外部構造、内部構造くらい作らないといけないのですが、全くわかりませぬ。
使用するグラフィックは素材集から流用しまつ。
397デフォルトの名無しさん:2005/05/18(水) 07:58:16
>>396 ネタどーも。
398デフォルトの名無しさん:2005/05/18(水) 07:58:50
宿題の提出時には

#include <2c.h>

を忘れるな
399396:2005/05/18(水) 08:03:44
ちょっとプログラムが長く?なりそうだと思うので、使うべき関数だけでも教えてもらえると幸いです(;´Д`)

あとこの文献が参考になる!ってのありませんでしょうか?ネト通販でいろいろ探してますがみつからんとです・・
400193 ◆vVe.Z3fuuw :2005/05/18(水) 08:03:56
>>323の方針から一旦離れて、
Pick_up_Next_Node()で計算回数を減らしてやろうと思っていじってみたものの
全くへっていない・・・
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/409.txt

* Flow augmented by 1 through 4 + 3 + 2 + 1
* Flow augmented by 1 through 4 + 2 + 3 + 1

を交互に出させるにはどうすればいいのでしょうか。
やっぱり↓を修正していくしかないのでしょうか。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/401.txt
401デフォルトの名無しさん:2005/05/18(水) 08:28:00
【質問テンプレ】
[1] 授業単元:Data structure
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/410.txt
[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ(バージョン):MSVC
 [3.3] 言語:C++
[4] 期限:なるべくはやく。
[5] その他の制限:
mainとsum関数はあたえられたものです。
自分なりにやってみたのですが、エラーが出ます。
よろしくお願いします。
402デフォルトの名無しさん:2005/05/18(水) 09:04:54
>>389
#include <stdio.h>

int main( void )
{
double a, b, val1, val2, val3, val4;
int n;

printf( "呼量:" );
scanf( "%lf", &a );
printf( "損失率:" );
scanf( "%lf", &b );

val1 = val2 = val3 = 1;
n = 0;
do {
n++;
val1 *= n;
val2 *= a;
val3 += val2 / val1;
val4 = val2 / val1 / val3;
} while( b < val4 );

printf( "回線数:%d\n", n );
return 0;
}
403デフォルトの名無しさん:2005/05/18(水) 09:57:02
[1] 授業単元: プログラミング演習
[2] 問題文:
ユーザーに 実数 a, b, c を代入してもらい、a * x * x + b * x + c = 0
の解を求めるプログラムを作成する。ただし a != 0.0 かどうかは考えなくても良いとする。
a, b, c の値によって、2個の実数解、重解、2個の虚数解、が求まる。 それぞれの場合について

実数解ならば、
入力パラメータは
a = 1.0, b = 4.0, c = 3.0 です。

2個の実数解を持ちます。答えは
x1 = -1.0000000 です。
x2 = -3.0000000 です。

重解ならば、
入力パラメータは
a = 1.0, b = 4.0, c = 4.0 です。

1個の重解を持ちます。答えは
x1 = -2.0000000 です。

虚数解ならば、
入力パラメータは
a = 1.0, b = -2.0, c = 5.0 です。

2個の虚数解を持ちます。答えは
x1 = 1.00000 + 2.00000 i です。
x1 = 1.00000 - 2.00000 i です
404403:2005/05/18(水) 09:57:30
と表示するプログラムを作成せよ。実数解と重解を求める場合には、平方根を用いなければ
ならないが、これは sqrt() 関数をもちいること。また、C言語には虚数型という型は存在しないので、
虚数解を求める場合は、実数部分 reと、虚数部分 imとを個別に求め、
printf( "x1 = %lf + %lf i です。\n", re, im ); のように表示せよ。

[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:明日まで [5] その他の制限: なし

どなたかご教授お願いしますm(_ _)m
405デフォルトの名無しさん:2005/05/18(水) 11:09:01
#include<stdio.h>
#include<math.h>

int main(int argc,char **argv){
    double a,b,c,d;
    scanf("%lf %lf %lf",&a,&b,&c);/* 入力 */
    d=b*b-4.0*a*c;/* 判別式 */
    printf("入力パラメータは\n a = %f, b = %f, c = %f です。\n\n",a,b,c);
    if(d>0){/* 異なる2実数解 */
        printf("2個の実数解を持ちます。答えは\n");
        printf("x1 = %f です。\n",(-b+sqrt(d))/(2.0*a));
        printf("x2 = %f です。\n",(-b-sqrt(d))/(2.0*a));
    }else if(d<0){/* 異なる2非実数解 */
        printf("2個の虚数解を持ちます 。答えは\n");
        printf("x1 = %f + %f i です。\n",-b/(2.0*a),sqrt(-d)/(2.0*a));
        printf("x1 = %f - %f i です\n",  -b/(2.0*a),sqrt(-d)/(2.0*a));
    }else{/* 重解 */
        printf("1個の重解を持ちます。答えは\n");
        printf("x1 = %f です。\n",-b/(2.0*a));
    }
    return 0;
}

-lm オプションを忘れずに
虚数解の誤植もあえてそのままにしてみた。気になるようだったら直すように
406デフォルトの名無しさん:2005/05/18(水) 12:33:46
>>402
損失率が解のを求めてほしいんじゃなかったっけ?
と言うやってもいない人間の俺ガイル
407デフォルトの名無しさん:2005/05/18(水) 12:40:26
また重複すいません。
【質問テンプレ】
[1] 授業単元: バイオインフォマティックス
[2] 問題文(含コード&リンク):
http://www.geocities.jp/arerenore1357/HW.cab
この中に途中までのコードと問題文が含まれています。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): MSVC
 [3.3] 言語:C++
[4] 期限:なるべく早く。
[5] その他の制限:
コードはだいたい出来ていて、あとは、align 関数を完成させるだけです。
本当、窮地なんです。
助けてください。お願いします!!
408だだ:2005/05/18(水) 12:45:36
[1] オブジェクト指向論
[2] keybd_event を使って一番上のウインドウ(テキストファイルやコンソールウインドウ)に
1\n
2\n・・・・・・・
10\n
11\n
と表示させるようにプログラムを組む
[3] 環境
 [3.1] OS: Windows XP SP2
 [3.2] コンパイラ(バージョン):Visual C++ 6.0 SP5
 [3.3] 言語:C++
[4] 期限:2005年05月19日まで
[5] その他の制限: 関数化していただけるとうれしいです。
409デフォルトの名無しさん:2005/05/18(水) 14:35:12
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/411.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):bcc 5.5
 [3.3] 言語:C
[4] 期限:2005年05月20日まで
[5] その他の制限:構造体を使っていただけると助かります。
410デフォルトの名無しさん:2005/05/18(水) 14:35:41
[1] 授業単元: 情報
[2] 問題文(含コード&リンク):適当な範囲で値をとる整数の乱数を発生させ、
それを 365 で割った余りを計算する作業を繰り返す。余りとして0から364 までが考えられるが、
それぞれ何回出現したかを数えておくプログラムをお願いします。
[3] 環境  
[3.1] OS: WinXP
[3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか Cでお願いします。
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 5月19まで
411デフォルトの名無しさん:2005/05/18(水) 14:58:06
[1] 授業単元: アルゴリズムI
[2] 問題文(含コード&リンク):データとして0から100までの整数を配列の先頭から順に繰り返し文を使って詰める。
              その後、2つ目の繰り返し文で全データを表示する(数値のみでよい)
              このプログラムを書きなさい。
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C言語
[4] 期限:2005年5月19日の朝9時まで

先輩方、ご教授お願いします。
412403:2005/05/18(水) 15:20:23
>>405さん
丁寧な解答ありがとうございます。
おかげで助かりました。
413デフォルトの名無しさん:2005/05/18(水) 15:34:19
>>410

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

int main(int argc,char **argv){
    int a[365]={0},b,i;
    for(i=0;i<10000;i++)
    {
        b=rand() % 365;
        a[b]++;
    }
    for(i=0;i<365;i++)
    {
        printf("%3d-%03d ",i,a[i]);
    }
    return 0;
}
やっつけで作ってみたけど
・乱数に関して制限はないか(stdlib.hのものでokなのか、自分で作ってこいとか)
・乱数を365で割った余りを計算するがどこで終了するか(上のは10000回で打ち切り)
・余りkがいくつ出たかとか記憶はするが結果を表示するのかどうか
そのへんがわからないので勝手に設定した。
414デフォルトの名無しさん:2005/05/18(水) 15:46:06
>>411
#include<stdio.h> 

int main(int argc,char *argv[]){
 int a[101],i;
 for(i=0;i<101;i++)a[i]=i;
 for(i=0;i<101;i++)printf("%d ",a[i]);
 return 0;

ホントニコレデイインダロウカ…
415デフォルトの名無しさん:2005/05/18(水) 15:47:39
>411
#include <stdio.h>

#defineMAX_INTEGER 100

int main()
{
int i_array[ MAX_INTEGER + 1 ], i;

for( i = 0; i <= MAX_INTEGER; i++ )
i_array[ i ] = i;

for( i = 0; i <= MAX_INTEGER; i++ )
printf( "%3d ", i_array[ i ] );

return 0;
}

問題を誤解していたらスンマソン
416デフォルトの名無しさん:2005/05/18(水) 16:45:35
【質問テンプレ】
[1] 授業単元:アルゴリズム演習1
[2] 問題文(含コード&リンク):
@二つの整数を入れて、その公約数をすべて表示せよ
Aはじめに人数を入力、その人数分、交通費を入力。
  するとお金の種別ごと(一万円、五千円、千円、五百円、百円、五十円、十円、一円)
  に何枚用意する必要があるか表示してくれるプログラムを作成せよ。
  例:2人で530円と380円の場合
    はじめに、”2”次に”530””380”といれたら、
    五百円玉 1枚、百円玉 3枚、 五十円玉 1枚、十円玉 6枚 と表示される。
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):VC++ .NET (7.1)
 [3.3] 言語:C言語
[4] 期限:5月19日早朝まで

よろしくお願いします。
417デフォルトの名無しさん:2005/05/18(水) 16:50:57
整数のデータを線形リストに格納しているとする。リストは次のように
定義され、空はマクロNULLで表す。

struct ListNode{
int value;
struct ListNode* next;
};

リストと正の整数nを受け取り、nよりも大きな値を持つ要素の位置と
値を出力する、次のような名前と型を持つC言語の関数を定義せよ。

void printLargerList(struct ListNode* data,int n);

ただし最初の要素の位置を0番目と数えることにする。

お願いします。
418デフォルトの名無しさん:2005/05/18(水) 16:51:32
そんな金種計算ここでやるなよ
419デフォルトの名無しさん:2005/05/18(水) 16:59:40
>>395
できました!ありがとうございました
・・・が、floatがわからないですorz
420デフォルトの名無しさん:2005/05/18(水) 17:32:00
>>416
(1)
#include <stdio.h>
int main(void) {
    int a, b, i, m;
    printf("a?:"); scanf("%d", &a);
    printf("b?:"); scanf("%d", &b);
    m = a < b ? a : b;
    for (i = 1; i <= m; i++) if (!(a % i) && !(b % i)) printf("%d\n", i);
    return 0;
}
421デフォルトの名無しさん:2005/05/18(水) 17:34:23
>>416
二千円は?
422デフォルトの名無しさん:2005/05/18(水) 17:51:34
>>417
デバッグしてないけど、こんな感じか??

void printLargerList(struct ListNode* data,int n){
    struct Node* N=data;
    int i=0; 
    while(N != NULL){
        if(N->value >n){
            printf("%d-%d\n"i,N->value);
        }
        i++;
        N = N->next;
    }
    return;
}
423デフォルトの名無しさん:2005/05/18(水) 17:52:20
>>421
銀行で寝てて誰も知らないんだよ。(笑
424デフォルトの名無しさん:2005/05/18(水) 17:53:50
>>416
(2) 枚数を全角で表示していない。枚数を読点で区切って表示していない。
#include <stdio.h>
int main(void) {
    int i, count, fare, yen[9] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1}, need[9] = {0};
    char yen_notation[9][9] = {"一万円札", "五千円札", "千円札", "五百円玉", "百円玉", "五十円玉", "十円玉", "五円玉", "一円玉"};
    printf("人数は?:"); scanf("%d", &count);
    while(count-- > 0)
    {
        printf("交通費は?:"); scanf("%d", &fare);
        for (i = 0; i < 9; i++)
        {
            while(fare >= 0) {fare -= yen[i]; need[i]++;}
            fare += yen[i]; need[i]--;
        }
    }
    for (i = 0; i < 9; i++) if (need[i]) printf("%s %d枚 ", yen_notation[i], need[i]);
}
425416:2005/05/18(水) 17:56:37
>>421さん、えっと、特に問題文に書いた以上の指示はなかったんで、どちらでもいいとおもいます。
すみません。
>>420
ありがとうございました。
たすかりました。
426416:2005/05/18(水) 18:02:50
>>426さん
ありがとうございます。
考えたとき、さっぱりわからなかったんで、
ちょっと、これを参考にやり直してみようとおもいます。

返信をくれた方々、本当にありがとうございました。
感謝です。
427デフォルトの名無しさん:2005/05/18(水) 18:03:04
[1] 授業単元:プログラミング応用課題
[2] 問題文:入力1〜10000までの任意の整数を例のように正規化せよ
ただし、条件分岐命令は使用禁止
例:
入力 出力
1〜 8 8
9〜16 16
17〜32 32
33〜64 64
以下出力が2乗で増えていく

[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限 :2005/05/31
[5] その他の制限:なし

これ、if無しでどうやって作ればいいのか・・・orz
おねがいします。
428デフォルトの名無しさん:2005/05/18(水) 18:04:14
>>422
>struct Node* N=data; 
struct ListNode* N=data;
の間違い。コンパイル位するんだった。 
429デフォルトの名無しさん:2005/05/18(水) 18:05:40
>>427
1引いて8で割り、その結果に1を足して8掛ける。
430デフォルトの名無しさん:2005/05/18(水) 18:07:51
>>424
ちょっと待て、入力も全角になってないぞ。
431デフォルトの名無しさん:2005/05/18(水) 18:08:44
>>429
冗長ロジック乙。
432デフォルトの名無しさん:2005/05/18(水) 18:12:01
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):借入金の返済シミュレーションを行うプログラムを作成せよ
[3] 環境  
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 明日(できれば今日中)
[5] その他の制限:
実行例
借入金を入力してください:1000
毎月の返済額を入力してください:300
金利/月率(%)を入力してください:5
1ヶ月目:返済額=1050円、償還額=300円、残額705円
2ヶ月目:返済額=740.25円、償還額=300円、残額440.25円
3ヶ月目:返済額=462.2625円、償還額=300円、残額162.2625円
4ヶ月目:返済額=170.375625円、償還額=171円、残額0円
※最後は小数だとおかしいので繰上げで整数になります

どうか宜しくお願いしますm(_ _)m
433427:2005/05/18(水) 18:17:57
>>429
即レスありがとうございます。
若干結果が変わるようですが、大変参考になりました。
がんばってみます。
434デフォルトの名無しさん:2005/05/18(水) 18:24:22
>>433
>>427ではだめだと思うぞ。for文の条件式はさすがにいいだろうと
思い、次のようなプログラムを作った。でもこれ入力に対応してない
んだよね。もう少しいじれば何とかなると思うんだが・・・・
#include <stdio.h>

int main(void)
{
 int i = 1, k;

 for (k = 8; k < 256; k *= 2)
  for (; i <= k; i++) {
   int j = (i - 1) / k + 1;
   printf("%d %d, ", i, j * k);
  }
 return 0;
}
435デフォルトの名無しさん:2005/05/18(水) 18:24:58
>>427
whileは使ってもいいの??
436デフォルトの名無しさん:2005/05/18(水) 18:28:40
[1] 授業単元: アルゴリズム論
[2] 問題文(含コード&リンク):キーボードから任意の整数(これをキーという)を入力する。
              データの入った配列を前から順に調べてキーと一致するデータをもつ要素の
              添字を表示する。一致しない時はー1を表示する。
              このプログラムを作りなさい。
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C言語
[4] 期限:2005年5月19日13時まで

明日のテストに必ずでるそうなんですがさっぱりわかりません、先輩方助けてください。
437デフォルトの名無しさん:2005/05/18(水) 18:36:23
>>427
多分これでいいはず。
ポイントは、正規化する数字が2乗されていること。
普段あんまり使わないというか、古のテクニックが役に立ったというところか。

void main(){
    int i;
    int j=0,k=0;
    puts("Input...");
    scanf("%d",&i);

    while(j<i){
        j=8*(1<<k-1);
        k++;
    }
    printf("%d",j);
}
438437:2005/05/18(水) 18:39:47
>>437
>j=8*(1<<k-1); 
j=8*(1<<k);
の間違い。 
-1しても意味ない。
439デフォルトの名無しさん:2005/05/18(水) 18:41:21
>>436
馬鹿丸出しで申し訳ないが、添字って何を指しているの?
要素の中身を表示すればいいのかな?
440デフォルトの名無しさん:2005/05/18(水) 18:44:27
a[n]ならnが添字
441デフォルトの名無しさん:2005/05/18(水) 18:44:59
>>436
データの入った配列がどんなのかは知らんから適当に作った。

#include <stdio.h>
#define NUM 4
int main(int argc, char *argv[])
{
int a[NUM] = {2, 4, 8, 16};
int i, key;

scanf("%d", &key);
for(i = 0; i < NUM; i++)
{
if(a[i] == key)
{
printf("%d\n", i);
return 0;
}
}
printf("-1\n");

return 0;
}
442デフォルトの名無しさん:2005/05/18(水) 18:45:37
>>440
ああ、そっちか。
サンキュー。勉強になった。
443デフォルトの名無しさん:2005/05/18(水) 18:52:43
>>437
シフトを使わないで、必要ない所も削ったら次のようになった。
どちらにしろ、for()やwhile()の条件式が使えないと無理そう。
int main(void)
{
 int i = 1, j, k, l;

 scanf("%d", &l);

 for (k = 8; k < l; k *= 2)
  i = k;

 j = (i - 1) / k + 1;
 printf("%d\n", j * k);

 return 0;
}
444デフォルトの名無しさん:2005/05/18(水) 18:53:23
>>436
#include <stdio.h>
#define DataMax (10)

int Find(int* data,int key,int n){
    int i=0;
    for(i=0;i<n;i++){
        if(data[i] == key){
            return i;
        }
    }
    return -1;
}

int main(void)
{
    int data[DataMax];
    int key=0,i=0,ret=0;
    for(i=0;i<DataMax;i++){
        data[i]=i;
    }
    puts("Input Key...");
    scanf("%d",&key);
    ret=Find(data,key,DataMax);
    printf("Result:%d",ret);
    return 0;
}
445デフォルトの名無しさん:2005/05/18(水) 18:56:00
>>427
完全に条件判断削除
bit演算使うの久しぶりだったよ

#include<stdio.h>
int main(){
int i;
puts("Input...");
scanf("%d",&i);
--i;
i |= (i>>8);
i |= (i>>4);
i |= (i>>2);
i |= (i>>1);
i+= 8;
i&=~7;
printf("%d",i);
}
446デフォルトの名無しさん:2005/05/18(水) 19:02:45
>>445
おしい
447デフォルトの名無しさん:2005/05/18(水) 19:06:46
いやいいのか、すまん
448437:2005/05/18(水) 19:08:16
>>445
うえー、まじで条件分岐ないし。
なにやってんだかわからNEEEEE。

>>446
回答ください。
449デフォルトの名無しさん:2005/05/18(水) 19:11:27
10000までというのがミソだったな
450デフォルトの名無しさん:2005/05/18(水) 19:19:04
ハイ、次々。
451445:2005/05/18(水) 19:20:20
簡単に説明。

簡単に説明するため基本的に2進数で書きます
出力が100000になるためには10001 <= i <= 100000が条件
ここでi = i-1を代入すると
10000 <= i <= 11111
ここからi-1の立っている最上位ビットの一つ左のbitだけ立った数が目的の数とわかります
でi|(i>>8)と似た形の連続の式は立っている最上位ビットを最下位ビットまで普遍させるための式
これで数は11111になるので1を最後に加えることによって目的の数を作る。
ただ、1<=i<=8の時だけはi=8になるという制約があるので7を足して~7とのandをとって強制的に繰上げを行っている。

ただし65536を超えると動作しないの注意。
452427:2005/05/18(水) 19:20:28
うへぁ!!!神!!!!
何やってるかわからないけど完璧でした!

問題がおかしいと思って今問い合わせていましたが
赤っ恥かきそう・・・

勉強させてもらいます
ありがとうございました。
453 ◆u2YjtUz8MU :2005/05/18(水) 20:00:51
[1] 授業単元: プログラミング課題
[2] 問題:0〜19までの中からランダムにすべて異なる数5個を作りたいです。
2個だったら1個目と2個目を比べて異なる数だったら終わりにすれば簡単にできるのですが
5個の場合も同じように全部比べて異なる数が出るまで乱数作り続けるしかないでしょうか?
[3] 環境 : C,C++どちらでも可
[4] 期限:無期限
[5] その他の制限:
454デフォルトの名無しさん:2005/05/18(水) 20:08:41
>>453
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAXN 20

void random_shuffle(int a[], int n)
{
 int i, j;

 srand((unsigned)time(NULL));
 for (i = n - 1; i > 1; i--) {
  int t;
  j = rand() % i;
  t = a[i], a[i] = a[j], a[j] = t;
 }
}

int main(void)
{
 int i, a[MAXN];

 for (i = 0; i < MAXN; i++)
  a[i] = i;
 random_shuffle(a, MAXN);
 for (i = 0; i < 5; i++)
  printf("%d%s", a[i], (i == 4) ? "\n" : ", ");

 return 0;
}
455デフォルトの名無しさん:2005/05/18(水) 20:09:32
>>453
C++だったら、std::random_shuffle()というアルゴリズムを使えばいい。
456デフォルトの名無しさん:2005/05/18(水) 20:17:49
>>453
C++ならこうする。

#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    std::srand((unsigned int)(std::time(0)));
    std::vector<int> v(20);
    for (int i = 0; i < v.size(); ++i) v[i] = i;
    std::random_shuffle(v.begin(), v.end());
    v.resize(5);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
}
457デフォルトの名無しさん:2005/05/18(水) 20:27:37
[1] 授業単元: 関数の扱い
[2] 問題文(含コード&リンク):
1:適当な角度(x)を引数とし、戻り値としてsin^2(x)+cos^2(x)を与える関数プログラムをかけ。
2:1で使ったプログラムを使い、0°〜90°の間で10°刻みに計算した結果を表示するプログラムを書け。
だたし、プロトタイプ宣言を省略してはいけない。

[3] 環境
 [3.1] OS:XP
 [3.3] 言語:C/
[4] 期限:2005年05月20日まで。
[5] その他:
1の問題はこんなプログラムを考えてみたのですが、これだと問題が要求しているプログラムとは違いますよね・・・
宜しくお願いします。
#include <stdio.h>
#include <math.h>

int main (void)
{
float a,b,c,x;
printf("xの角度を入力してください\nx=");
scanf("%f", &x);
a=sin(x/180);
b=cos(x/180);
c=a*a+b*b;
printf("sin^2(x)+cos^2(x)=%f\n",c);

return 0;
}

458デフォルトの名無しさん:2005/05/18(水) 20:29:51
別関数にしろって事だろ。
double sincos(double x)
{
 return pow(sin(x), 2) + pow(cos(x), 2);
}
459デフォルトの名無しさん:2005/05/18(水) 20:37:19
>>457
>プロトタイプ宣言を省略してはいけない。

main関数とは別に関数をつくらなきゃいけない。
>>458のように。

#include <stdio.h>
#include <math.h>

double sincos(double x){ return pow(sin(x), 2) + pow(cos(x), 2); }

int main (void)
{
double c,x;
printf("xの角度を入力してください x=");
scanf("%lf", &x);
c = sincos(x)
printf("sin^2(x)+cos^2(x)=%lf\n",c);

return 0;
}

久々に人に対して教えるんで、自信ないけど、まあこんな感じだw
460453 ◆u2YjtUz8MU :2005/05/18(水) 20:37:44
>>454-456
ありがとうございました。
461デフォルトの名無しさん:2005/05/18(水) 20:39:20
>>457
あーそれと、Cのsin()、cos()はradianを引数に取るので、入力する
角度の指定が必要。
弧度法ならそのままでいいが、degreeなら、2π/360=π/180を掛けとけ。
462デフォルトの名無しさん:2005/05/18(水) 20:42:43
>>453

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

int main(void)
{
int n = 5;
int i;

srand((unsigned)time(NULL));
for (i = 0; n > 0; i++) {
if (rand() % (20 - i) < n) {
printf("%d\n", i);
n--;
}
}

return 0;
}
463デフォルトの名無しさん:2005/05/18(水) 20:55:15
[1]授業単元:アルゴリズム論I
[2]キーボードから0から100までの偶数をランダムに入力し、配列に納めていく。その際、入力した
  値の1/2の値の添字をもつ配列要素に入力するデータを納めるものとする。その後、別のグループで入力された
  配列要素の値のみを表示する。このプラグラムを書け。実行時には20個のデータを入力しなさい。
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005/05/20まで

問題文を読んでもさっぱり、、、ご教授お願いします;
464365:2005/05/18(水) 21:02:13
>>379様、ありがとうございます。
コードを参考にしながらそれっぽい物を作成しいましたが、実行時にエラーが発生してしまいます。
よろしければ添削お願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/415.txt
465デフォルトの名無しさん:2005/05/18(水) 21:06:10
>>458
>>459
>>461
ありがとうございます。
466345:2005/05/18(水) 22:10:45
[1] 授業単元:基礎プログラミング
[2] 問題文(含コード&リンク): n個の乱数(整数)を発生させ、そのn個の整数が素数であるかどうかを判別するプログラムを作成せよ。但し、整数の上限は1000とする。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:
[4] 期限:今日中

すいません明日提出なので宜しくお願いします;;
467デフォルトの名無しさん:2005/05/18(水) 22:36:36
>>466
0も正数だっけ?わすれた!

#include <stdio.h>
#include <stdlib.h>
int issosu( long int val )
{
long int i;
for( i = 2; i<val ; i++ )
if( val % i == 0 ) return 0;
return 1;
}
int main( int argc, char *argv[] )
{
long int val, n, count;
for( count=0; count<atoi( argv[1] );count++ ) {
do {
val = random();
} while( ! ( val > 0 && val <=1000) );
if( issosu( val ) ) {
printf( "%ld は素数である\n", val );
}
else {
printf( "%ld は素数でない\n", val );
}
}
return 0;
}
468デフォルトの名無しさん:2005/05/18(水) 22:39:11
整数だが正の数ではない
469デフォルトの名無しさん:2005/05/18(水) 22:41:37
]「jisho.txt」というファイルの辞書(1行に「表記,読み,品詞」という1つの
言葉が入る 例えば、「亀,カメ,0010」のようなカンジなものが約10万語つ
まり約10万行ほどある。)を配列に読み込み、表記・読み・品詞(品詞は4桁の
数字で表す)を指定すると、その情報を標準出力に出力するプログラムの作成。
《流れ》
@単語の個数を数える Aメモリ確保 B辞書を読み込み C検索情報入力 D出力する。失敗の場合、失敗メッセージを出力。

[3.1.]linux
[3.3.]
[4]至急

ここに一応ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/416.txtに私のものを置いておきました。ただ、「セグメントエラー」がおきます。指摘など宜しくお願いいたします。
470デフォルトの名無しさん:2005/05/18(水) 22:43:17
>>466 せめて、言語がCかC++かくらいは書こうや。

#include <stdlib.h>
#include &math.h>

/* 0以上x未満の乱数を返す */
double random(int x)
{
  return rand() / ((double) MAX_RAND + 1) * x;
}

/* nが素数なら真を返す */
int is_prime(int n)
{
  int i, last;

  if (n < 2)
    return 0;
  if (n == 2)
    return 1;
  last = sqrt(n);
  for (i = 3; i <= last; i += 2)
    if (n % i == 0)
      return 1;
  return 0;
}
471345:2005/05/18(水) 22:53:38
>>470
すいませんCです・・m(_ _)m
やってみたのですがエラーがでてしまいました
472デフォルトの名無しさん:2005/05/18(水) 22:55:50
>>469 書き忘れ[3-2] Cで。
473デフォルトの名無しさん:2005/05/18(水) 23:01:28
>>471
×&math.h>
○<math.h>
474345:2005/05/18(水) 23:02:45
>>473
そこは直してあるのですが
だめみたいです・・・printfで素数を表示するのもどうしたらいいのでしょうか
475デフォルトの名無しさん:2005/05/18(水) 23:02:59
おう。&lt;と書こうとしたんだが、セミコロン忘れてたよ-だわ。
476デフォルトの名無しさん:2005/05/18(水) 23:20:23
>>466
折角作ったからうp。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define PrimeMax (1000)
#define TRUE (1)
#define FALSE (0)
int IsPrime[PrimeMax];
void hurui(int *p,int n){
int i,j;
for(i =2;i<n;i++){for(j=2;(i*j)<n;j++){
p[i*j]=TRUE;
}}}
int PrimeCheck(int *p,int cmp){
if(cmp>=PrimeMax) return -1;
return p[cmp] ? FALSE:TRUE;
}
int main(void)
{int i,n,pri;
srand(time(NULL));
memset(IsPrime,0x00,sizeof(int)*PrimeMax);
hurui(IsPrime,PrimeMax);
for(i=0;i<PrimeMax;i++) if(PrimeCheck(IsPrime,i) == TRUE) printf("%d ",i);
puts("\n");
puts("Input N...");scanf("%d",&n);
for(i=0;i<n;i++){
if(PrimeCheck(IsPrime,pri=(rand()%PrimeMax)) == TRUE){
printf("%d is prime! \n",pri);
}else{
printf("%d is Not prime! \n",pri);
}}return 0;}
477デフォルトの名無しさん:2005/05/18(水) 23:21:10
>>386
すいませんでした。情報と環境を全部うpしました。
http://uppp.ath.cx/src/uppp1483.zip

>>252をどうかよろしくお願いします。
478デフォルトの名無しさん:2005/05/18(水) 23:23:21
>>474
そだな。main()がないわな。
479デフォルトの名無しさん:2005/05/18(水) 23:23:45
>>476
今日はミスが多いな。
#include <memory.h>
を追加。
後は、全角スペースを旨く取り除いてくれ。
480デフォルトの名無しさん:2005/05/18(水) 23:23:56
[2] 問題文(含コード&リンク): ファイルを読み込みソート(選択ソート法)してファイル出力する
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VisualStudio.NET
 [3.3] 言語:C++
[4] 期限:2005年5月19日21:00まで
構造体配列を使用した時の文字列の扱いかたがわかりません。
エラー: error C2106: '=' : 左のオペランドが、左辺値になっていません。
SubTable[k+1].name=SubTable[k].name; SubTable[k].name=name;
このような代入はできないようです。どうすればいいのでしょうか
structSUBJECT
{
intcode;// 科目コード
charname[ SUBNAME_LEN + 1 ];// 科目名 (+1はNULLの分)
intdayCode;// 曜日  (+1はNULLの分)
inthour;// 時限
};
struct SUBJECTSubTable[ max ];// 科目データ構造体配列の定義
//途中省略//
voidSelSort( int no, SUBJECT* SubTable )
{
int n,k,w1,w3,w4;
char name[ SUBNAME_LEN + 1 ];
for(n=1;n<no;n++){
w1=SubTable[n].code; name=SubTable[n].name; w3=SubTable[n].dayCode; w4=SubTable[n].hour;
for(k=n-1;k>=0;k--){
if(SubTable[k].code>w1){
SubTable[k+1].code=SubTable[k].code;
SubTable[k].code=w1;
*この部分がわかりません-> SubTable[k+1].name=SubTable[k].name;
           -> SubTable[k].name=name;
//以下省略
481デフォルトの名無しさん:2005/05/18(水) 23:28:54
>>479
俺も酒飲みながら片手間に書いてるとよく間違う(^_^;)
趣味の時間だしな。
482デフォルトの名無しさん:2005/05/18(水) 23:29:42
>>480
char[]型の代入はサポートされてないがな。
memcpy or strcpy使うか、そもそもstd::stringに変えてしまうかしたほうが良いと思う。
483デフォルトの名無しさん:2005/05/18(水) 23:30:26
>>480
strcpy()
C/C++には配列のコピー演算子はない。C++でクラスなら代入演算子や
コピーコンストラクタを定義する事はできる。またPODでも構造体なら
operator=がデフォルトで存在する。
484デフォルトの名無しさん:2005/05/18(水) 23:41:28
>>481
酒を飲んでるわけじゃないんだけど、しらふでもこの有様で。:)
コンパイル位は通すべきだった。

VC2003のコンソールプロジェクト使ってるんだけど、
開いたときに最初から書いてあるコードを削除するときにポカしまくりで。
いや、まいった。何でブランクプロジェクトがなくなったんだろ。スッゴイ不便。
愚痴になっちゃった。
今後精進します。
485デフォルトの名無しさん:2005/05/18(水) 23:42:28
486デフォルトの名無しさん:2005/05/18(水) 23:53:41
>>484
あるよ。
ウィザードのダイアログの左側メニューで
「アプリケーションの設定」を選択後、
「空のプロジェクト」チェックボックスを選択汁。
487デフォルトの名無しさん:2005/05/18(水) 23:59:31
>>485
ありがとうございます。少し理解に苦しむところもありますが、きちんと実行できました。ただ、私はまだ初心者なので私の作った物の推敲をしてくれればと思います。よろしくおねがいします
488デフォルトの名無しさん:2005/05/19(木) 00:04:03
>>486
あ''〜〜〜ぁ!!!!
背景と同化してて選択できるなんて全く思いつかなかった。
ありがとう、一個賢くなったよ。
489デフォルトの名無しさん:2005/05/19(木) 00:08:05
[1] 授業単元: アルゴリズムとデータ構造
[2] 問題文(含コード&リンク): 与えられた配列Xについて、35以上かつ95未満の要素の数を求めよ。
それをユーザ関数を使ってあらわせ。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン):bcc
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限: 例題に上記の処理を追加する問題でした。
ユーザ関数にする前までは出来たので、書いておきます。
よろしくお願いします。
#include <stdio.h>
int main(void) {
int x[16]={53,21,34,31,25,129,12,80,28,98,7,24,92,51,54,5},
count[11],i,d,n,a;
n=16;
a=0;
for(i=0;i<=10;i++) count[i]=0;
for(i=0;i<=n-1;i++) {
d=x[i]/10;
if(d>10) d=10;
count[d]++;
}
for(i=0;i<=9;i++) printf("%5d台 :%2d\n",i*10,count[i]);
printf("100以上 :%2d\n",count[10]);
for(i=0;i<=n-1;i++) if(35<=x[i] && x[i]<95) a++;
printf("35以上95未満の要素の数は%d\n",a);
return 0;
}
490デフォルトの名無しさん:2005/05/19(木) 00:22:05
>>for(i=0;i<=n-1;i++) if(35<=x[i] && x[i]<95) a++; 
for(i=0;i<=n-1;i++) if(IsMatch(x[i])) a++;

/*----IsMatch-----------*/
int IsMatch(int val){
    if(35<=val && val<95){
         return 1;
    }else{
         return 0;
    }
}
/*----------------------*/

こんな感じか?
491489:2005/05/19(木) 00:45:23
>490
ありがとうございます。
voidでやってつまづいたので、intでやってみます。

自分でやってみたのは下記のものなのですが、
ユーザ関数とポインタがいまいち理解できていないため
エラーが出てしまいます。
もしよければvoidでのやり方もお願いします。

youso(n);

void youso(int *x) {
int i,n,a;
for(i=0;i<=n-1;i++) if(35<=x[i] && x[i]<95) a++;
printf("35以上95未満の要素の数は%d\n",a);
}
492デフォルトの名無しさん:2005/05/19(木) 00:54:31
>>407
です。
すいません。
どなたか助けていただけないでしょうか。
これが出来ないと、次の実験でも使えなくて、
これから先の課題が出来ないのです。
ほんと、お願いします。
align関数を埋めるだけだと思うのですが・・・。
お願いします。
493デフォルトの名無しさん:2005/05/19(木) 01:04:35
>>491
こんな感じか??

#include <stdio.h> 

void youso(int *x,int n) { 
int i,a=0; 
for(i=0;i<=n-1;i++) if(35<=x[i] && x[i]<95) a++; 
printf("35以上95未満の要素の数は%d\n",a); 

int main(void) { 
    int x[16]={53,21,34,31,25,129,12,80,28,98,7,24,92,51,54,5}, 
    count[11],i,d,n,a; 
    n=16; 
    a=0;    
    for(i=0;i<=10;i++) count[i]=0; 
    for(i=0;i<=n-1;i++) { 
        d=x[i]/10; 
        if(d>10) d=10; 
        count[d]++; 
    } 
    for(i=0;i<=9;i++) printf("%5d台 :%2d\n",i*10,count[i]); 
    printf("100以上 :%2d\n",count[10]); 
    /*
    for(i=0;i<=n-1;i++) if(35<=x[i] && x[i]<95) a++; 
    printf("35以上95未満の要素の数は%d\n",a); 
    */
    youso(x,n);
    return 0; 
494489:2005/05/19(木) 01:18:00
>493
ありがとうございます!
すごく悩んでたのですっきりしました。


C言語の授業もっとマジメに受けておくべきでしたorz
勉強しなおさなくては。
495デフォルトの名無しさん:2005/05/19(木) 01:24:11
>>494
がんがれ。
496デフォルトの名無しさん:2005/05/19(木) 01:27:20
>>ALL
おやすみ〜。
497463:2005/05/19(木) 06:14:09
[1]授業単元:アルゴリズム論I
[2]キーボードから0から100までの偶数をランダムに入力し、配列に納めていく。その際、入力した
  値の1/2の値の添字をもつ配列要素に入力するデータを納めるものとする。その後、別のグループで入力された
  配列要素の値のみを表示する。このプラグラムを書け。実行時には20個のデータを入力しなさい。
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005/05/20まで

今日中に出さないとまずいので、何卒よろそくおねがいします;;
498デフォルトの名無しさん:2005/05/19(木) 06:56:22
>>497
問題正しい?
「入力された回数を配列要素に代入する」なら判るけど...
499デフォルトの名無しさん:2005/05/19(木) 07:08:16
"別のグループで入力された配列要素の値のみを表示"の意味がわからない...orz
500デフォルトの名無しさん:2005/05/19(木) 08:21:54
要素数3(全部char型)の構造体にファイルから文字列を読み込んで格納したいのですが、
ファイルの中身と実際格納する文は何と書いたらいいのでしょうか?
テキストがファイルの入出力まで記述されておらず、調べてもいまいち分かりませんでした。
例えば、以下のように格納したいと思います。
main関数で実際そう宣言してもいいのですが、以下のように3×3では済まずとても大きくなるもので…

structure std[] = {
{"aaa","bbb","ccc"},
{"ddd","eee","fff"},
{"ggg","hhh","iii"}, }
501デフォルトの名無しさん:2005/05/19(木) 08:40:01
>>500
typedef struct str_tag
{
char hoge[32 + 1];
char hogehoge[32 + 1];
char hogehogehoge[32 + 1];
}STR;

ならば

STR str;
FILE *fp = fopen("hoge.dat", "r");
fscanf(fp, "%s%s%s", str.hoge, str.hogehoge, str.hogehogehoge);
502463:2005/05/19(木) 08:48:24
[1]授業単元:アルゴリズム論I
[2]キーボードから0から100までの偶数をランダムに入力し、配列に納めていく。その際、入力した
  値の1/2の値の添字をもつ配列要素に入力データを納めるものとする。その後、別のループで入力された
  配列要素の値のみを表示する。このプラグラムを書け。実行時には20個のデータを入力しなさい。
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005/05/20まで

すいません、問題文を一部間違っていました、大変申し訳ありません。
503デフォルトの名無しさん:2005/05/19(木) 09:32:17
#include<stdio.h>
#define INPUTVAL_MAX 100
int main( int argc, char* argv[] )
{
int data[ INPUTVAL_MAX / 2 ];
int v;
int i;

for ( i = 0; i < INPUTVAL_MAX / 2; i++ ) data[ i ] = -1;
printf( "Please do data input.\n" );
printf( "'Ctrl + Z' key for end.\n" );
while ( 1 ) {
printf( "data = ?" );
if ( scanf( "%d", &v ) == EOF ) break;
if ( 0 <= v && v <= INPUTVAL_MAX && v % 2 == 0 ) {
data[ v / 2 ] = v;
} else {
printf( "Illegal data.\n" );
}
}
printf( "Inputted data.\n" );
for ( i = 0; i < INPUTVAL_MAX / 2; i++ ) if ( data[ i ] >= 0 ) printf( "%d\n", data[ i ] );
return ( 0 );
}
504デフォルトの名無しさん:2005/05/19(木) 13:39:58
>>13
違う。
もっと前からタイトルは>>1の好きなようにしていた。
505デフォルトの名無しさん:2005/05/19(木) 14:13:49
[1]アルゴリズム論I
[2]配列に0から100までの偶数を先頭から順に間を空けずに詰める。キーボードから1から99の間の奇数を入力し
 その数と要素の値を順次比較する。そしてその数を順序関数を維持して配列に納める。その後、全データを表示する。
[3]環境
[3.1]OS:WinXP
[3.2]コンパイラ(バージョン):
[3.3]言語:C言語
[4]期限:2005年5月20日17時まで

今年の4月からC言語を学び始めたのですがさっぱり、、、先輩方ご教授お願い致します。
506デフォルトの名無しさん:2005/05/19(木) 14:38:08
#include<stdio.h>
#define INPUTVAL_MAX 100
int main( int argc, char* argv[] )
{
int data_even[ INPUTVAL_MAX / 2 + 1 ];
int data_odd[ INPUTVAL_MAX / 2 ];
int v;
int i;
for ( i = 0; i <= INPUTVAL_MAX / 2; i++ ) data_even[ i ] = i * 2;
for ( i = 0; i < INPUTVAL_MAX / 2; i++ ) data_odd[ i ] = -1;
printf( "Please do data input.\n" );
while ( 1 ) {
printf( "'Ctrl + Z' key for end.\n" );
printf( "data = ?" );
if ( scanf( "%d", &v ) == EOF ) break;
if ( 0 <= v && v <= INPUTVAL_MAX && v % 2 == 1 ) {
data_odd[ v / 2 ] = v;
printf( "All data.\n" );
for ( i = 0; i <= INPUTVAL_MAX; i++ ) {
switch ( i % 2 ) {
case 0 : printf( "%d\t", data_even[ i / 2 ] ); break;
case 1 : if ( data_odd[ i / 2 ] >= 0 ) printf( "%d\t", data_odd[ i / 2 ] ); break;
}
}
printf( "\n" );
} else {
printf( "Illegal data.\n" );
}
}
return ( 0 );
}
507デフォルトの名無しさん:2005/05/19(木) 15:54:15
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):ろだのC/C++宿題スレ42代目3のNo.423です。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:明日の午前八時まで
[5] その他の制限:特にないです。

どうかよろしくおねがいします。ごめんなさい
508デフォルトの名無しさん:2005/05/19(木) 15:59:49
>>507
リンクくらい貼れや。
509デフォルトの名無しさん:2005/05/19(木) 16:11:05
>>508
ご指摘ありがとうございます

[1] 授業単元:データ構造
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/423.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:明日の午前八時まで
[5] その他の制限:特にないです。

こうですか。ごめんなさい。迷惑かけました
510デフォルトの名無しさん:2005/05/19(木) 16:21:31
ステレオ16bitWAVEファイルの左右個別の平均音量をdBで取得したいです。
short型で左右別の配列にデータを格納までは出来たのですが、計算方法が分かりません。

dB=20*log(A1/A2)
A1とA2の振幅が、この場合何を意味しているのでしょうか?
511デフォルトの名無しさん:2005/05/19(木) 17:39:04
>>509
C++で書きたくなるのをうずうずとこらえながらCで書いた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/424.txt
512デフォルトの名無しさん:2005/05/19(木) 18:20:21
>>402の損失率と呼量を求めるものもどなたか教えてください。
513デフォルトの名無しさん:2005/05/19(木) 18:28:29
>>510
デシベルは相対的な単位だから、wavファイルから直接デシベル
単位で音圧を求めることは出来ない。
514デフォルトの名無しさん:2005/05/19(木) 18:33:32
>>511
あ、あ、ありがとうございます。
もっとCの練習します。
515デフォルトの名無しさん:2005/05/19(木) 18:43:58
>>510
A1: 入力音量
A2: 基準音量(1Vrms だったっけ)
入力信号は 16bit だと, 折れ線とか対数とかで圧縮してあると思うぞ.
516デフォルトの名無しさん:2005/05/19(木) 19:03:11
>>389
#include <stdio.h>

int main( void )
{
double a, b, val1, val2, val3;
int n, count;

printf( "呼量:" );
scanf( "%lf", &a );
printf( "回線数:" );
scanf( "%d", &n );

val1 = val2 = val3 = 1;
for( count=1; count<=n; count++ ){
val1 *= n;
val2 *= a;
val3 += val2 / val1;
}
b = val2 / val1 / val3;

printf( "損失率:%lf\n", b );
return 0;
}
517デフォルトの名無しさん:2005/05/19(木) 19:45:12
以下URLにあるプログラムなのですが、コンパイル時に

002.c: In function `main':
002.c:105: error: incompatible type for argument 1 of `search'

と表示されてしまいます。
どこがどう違うのかかれこれ小一時間色々やってますがさっぱりです…
main関数のsearch文のstrが悪いってことですよね?
ファイル操作や型宣言のどこかでしょうか?

http://www.za.ztv.ne.jp/yosi-h/
518デフォルトの名無しさん:2005/05/19(木) 19:59:19
>>517
searchの第1引数はDICの配列なのに、mainではSTRを
入れているから。
519デフォルトの名無しさん:2005/05/19(木) 20:04:52
1] 授業単元:C++応用
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/423.txt
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン): VC6.0
 [3.3] 言語:C++
[4] 期限:本日中
[5] その他の制限:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/425.cpp
この部分まで出来ましたが、この後がわかりません。よろしくお願いします。
520519:2005/05/19(木) 20:11:52
[2] 問題文を間違えました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/426.txt
よろしくお願いします
521517:2005/05/19(木) 20:16:18
>>518
ありがとうございます!確認してみます。
522デフォルトの名無しさん:2005/05/19(木) 20:27:11
>>516 
見て理解します。
ありがとうございました。
523デフォルトの名無しさん:2005/05/19(木) 20:35:27
>>519
C++には見えないのですが…
524519:2005/05/19(木) 21:14:49
>>523
始めはC++で作成していたのですが、出題者に数回添削されていたら
何時の間にかC++なのにCっぽく(汗
エラーの原因がわからなくなってしまいまして・・・よろしくお願いします
525デフォルトの名無しさん:2005/05/19(木) 21:24:35
>>524

>j = (int)argv[num]; //argvから数値を読み込み、jに代入する

この行何?普通atoi()かsscanf()だと思うが・・・・
526524:2005/05/19(木) 21:33:50
>>525
あ、本当だ・・・何時の間にか直されている(汗
(元はatoi()で作っていました)
よろしくお願いします。
527デフォルトの名無しさん:2005/05/19(木) 21:38:22
>>526
これさあ、全部C++で作り直して、一発で合格させてもらった方がいいよ。
多分担当の教官は、頭が古くてC++がわからず、C風にどんどん直すも、
間違いだらけの添削やってるみたいだから。
528デフォルトの名無しさん:2005/05/19(木) 22:21:20
忘れられてるといけないので・・・
>>252>>477
をやってくれる神を待っています
529524:2005/05/19(木) 22:23:33
なるほどです。
*数値が足りない
*0による割り算が発生する
*全てに当てはまらない場合
の場合の条件はどのようにすればいいのか教えてもらってよいでしょうか?
条件がわからなくなってしまいましたので・・・(汗
530デフォルトの名無しさん:2005/05/19(木) 22:43:56
[1] 授業単元: 3DCGプログラミング
[2] 問題文(含コード&リンク):(1)「Vector3D」型に対し、内積値を返す関数
innerProdを作成せよ。引数は以下の構成とする。
double innerProd(struct Vector3D v1, struct Vector3D v2);
(2)「Vector3D」型に対し正規化を行う関数vecNormalizeを作成せよ。引数は
以下のような構成とする。ただし、引数に0ベクトルが与えられた場合はなにも
しないものとする。
void vecNormalize(struct Vector3D *v);

[3] 環境
 [3.1] OS:Win XP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:明日の午前6時までです
[5] その他の制限:

お力添えをいただければと思います。
どうかよろしくお願いします。
531デフォルトの名無しさん:2005/05/19(木) 23:11:35
>>529
それは作ったけど、「数値の形式が不正」ってのは、atof()だけでは
判断できない。多分小数点が2個あるとか、符号が連続して付いて
いるとかだと思うが、その場合sscanf()で、戻り値を見たい。

しかし問題文の条件にはsscanf()を使っていいような場所が見あたらない
ので、作れない。それで、今回は「数値の形式が不正」のエラーを省略
している。ここは自分で直して欲しい。

後はだいたい動くようだ。

それから、インクルード・ヘッダもC形式の指定になっているので、あえてC++
独自の機能を使う事を避けた。強いて言えばvoidとreturn 0;を省略している
事くらい。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/427.txt
532デフォルトの名無しさん:2005/05/19(木) 23:15:32
>>529
スマソ。間違いがあったので修正した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/428.txt
533デフォルトの名無しさん:2005/05/19(木) 23:20:10
>>252
http://www.comm.musashi-tech.ac.jp/~kyomuka/sylb/2004/26/2605300.htm
これか?
"プログラミングスキルが足りないと感じた学生は早めに申し出れば指導を行う"
とあるじゃないか。いい先生じゃないか。逝ってきなさい。
534デフォルトの名無しさん:2005/05/19(木) 23:25:04
>>530
Vector3D型とはどんな型か分からないと、プログラムは書けないぞ。
535デフォルトの名無しさん:2005/05/19(木) 23:25:58
>530
(1)はこんな感じかな。
ぐぐるさん見ながらだけどね。
何に使えるかわからない。
double innerProd(struct Vector3D v1, struct Vector3D v2){
    return (v1.x*v2.x)+(v1.y*v2.y)+(v1.z*v2.z);
}
536デフォルトの名無しさん:2005/05/19(木) 23:30:38
>>530
double innerProd(struct Vector3D v1, struct Vector3D v2)
{
return (v1.x * v2.x + v1.y * v2.y + v1.z * v2.z);
}
void vecNormalize(struct Vector3D *v)
{
double norm = v->x * v->x + v->y * v->y + v->z * v->z;
if(norm != 0.0) {
v->x /= norm;
v->y /= norm;
v->z /= norm;
}
}
作るだけ作ったけど、>>534の忠告は正しい。
537デフォルトの名無しさん:2005/05/19(木) 23:34:19
数学の素養が無いので以下を見て作った。
http://hakuhin.hp.infoseek.co.jp/main/as/vec3d.html#VEC3D_07
/*---------------------------------------------------------*/
#include <cmath>
void vecNormalize(struct Vector3D *v){
    if(v == NULL) return;
    double length = (v->x*v->x) + (v->y*v->y) + (v->z*v->z);
    if(length == 0.0) return;
    length = std::sqrt(length);

    if(length > 0) length= (1/length);
    v->x = v->x*length;
    v->y = v->y*length;
    v->z = v->z*length;
     return;
}
538537:2005/05/19(木) 23:35:52
おっと遅かったか。
539530:2005/05/19(木) 23:39:39
すみませんでした。
Vector3D型なんですけど、
struct Vector3D{
double x;
double y;
double z;
};
です。
構造体を使った問題なんですが
構造体の作り方や宣言の仕方、それをメイン関数にどう反映させていいものなのかが
よくわかりません・・・
二つのベクトルにそれぞれ数値を入れて内積値を出力させるというものに
したいのです。
自分でも今現在いろいろ検索してみて調べてるのですが
一つのプログラムにまとめようとすると混乱してしまって・・・
540デフォルトの名無しさん:2005/05/19(木) 23:42:40
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):for文を用いて1〜nまでの二乗の積算値を求めるプログラム
(1+2^2+3~2+4~2+5~2+・・・・)を作成せよ
[3] 環境
 [3.1] OS: windowsxp
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:明日中
[5] その他の制限:特になしです。よろしくお願いします。
541デフォルトの名無しさん:2005/05/19(木) 23:49:07
上の(1+2^2+3~2+4~2+5~2+・・・・)は
(1+2^2+3^2+4^2+5^2+・・・・)の間違いです。すいません。
542デフォルトの名無しさん:2005/05/19(木) 23:49:37
int main(void){
 int n,s=0;
 scanf("%d",&n);
 for(;n>0;n--)
  s += n*n;
 printf("%d\n",s);
 return 0;
}
543デフォルトの名無しさん:2005/05/19(木) 23:49:49
>>530
こんな感じかい?
数字は好きにいじってちょ。
#include <iostream>
double innerProd(struct Vector3D v1, struct Vector3D v2){ 
    return (v1.x*v2.x)+(v1.y*v2.y)+(v1.z*v2.z); 


int main(){
    struct Vector3D v1,v2;
    v1.x=1;v1.y=1;v1.z=1;
    v2.x=1;v2.y=1;v2.z=1;

    double ip=innerProd(v1,v2);
    std::cout<<ip<<std::endl;

}
544デフォルトの名無しさん:2005/05/19(木) 23:52:14
>>540
#include <stdio.h>

int main( int argc, char *argv[] )
{
int n, sum;
n = atoi( argv[1] );

sum = 0;

for( ;n > 0; n-- )
sum += n*n;

printf( "%d\n", sum );

return 0;
}
545530:2005/05/20(金) 00:02:11
多くのかたがたにお答えいただきまことにありがとうございました。
また質問の内容に不明な点があったことについてお詫びします。
みなさんからお答えいただいたものをもとに頑張ってみようと思います。
546543:2005/05/20(金) 00:19:17
>>543
はちょっとおせっかいだったかな。すまぬ。
547540:2005/05/20(金) 00:22:13
ありがとうございました。
548デフォルトの名無しさん:2005/05/20(金) 08:48:06
>>407
です。
どなたか助けてもらえないでしょうか。
明日までなのですが、自分にはお手上げです。
Matrixの1スペースを決める際に、上を−1したものか、下を−1したものか、
ななめを表の数字で足したものかのどれかの一番大きいものを取るのです。
もし、問題がよく分からなかったら説明しなおします。
たぶん、struct AminoAcidAlignmentの中で、
vector<vector<int> >
vector<vector<Move>>を使って
for(int i=1;i<=length1;i++)
for(int j=1;j<=length2;j++)
const int some = kscoreMatrix[s1.AAnums[i=1][s2.AAnums[j-1]];

本当、よろしくお願いします。
549デフォルトの名無しさん:2005/05/20(金) 09:33:15
550デフォルトの名無しさん:2005/05/20(金) 10:48:59
山田改?
551デフォルトの名無しさん:2005/05/20(金) 10:59:40
>>548
問題文の
「右、左、斜め上で一番大きい数字を取る。左右と同じ数字の場合は斜め上優先。」
がわかんね〜。どういう事?どこを基準で考えているの?
552デフォルトの名無しさん:2005/05/20(金) 12:18:11
>>551
ありがとうございます。
わたしの書いた問題文の後半の後ろから直線的に辿っていくっていうのは、
たぶんどうでもいいと思う。
ただ表を完成させて、一番右下の数字がどれだけ似かよっているかを
表すから、それを返せばいいんだと思う。

>>右、左、斜め上で一番大きい数字を取る。左右と同じ数字の場合は斜め上優先。
右じゃなくて、上でした。
一つマスを埋めるたびに、左の数を−1した数と、上の数を−1した数と
その埋めなければならない場所に相当した数を表から取って来て、
その数と斜め上の数を足したものを比べて、
一番大きい数をそこに埋めていくとやります。
それをやって出来上がった表の一番下の数がどれだけ似通っているかを
示す数です。
553551:2005/05/20(金) 13:20:33
>>552
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
Cだけど、こんなんで良いの?
C++への変換は自分でやって。
554デフォルトの名無しさん:2005/05/20(金) 13:40:23
>>551
ありがとうございます。
でも、vector<vector<int> >
vector<vector<Move>>を使って
あのプログラムに埋め込まなきゃいけないんです・・・。
555デフォルトの名無しさん:2005/05/20(金) 14:05:30
>>554
アホか。そういうのは先に「その他の条件」に書いておけ。
その為のテンプレだろうが。
556551:2005/05/20(金) 14:18:55
オレ C++ 分らないんだよね・・・。
557デフォルトの名無しさん:2005/05/20(金) 14:43:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):身長(cm,センチメートル)と体重(kg,キログラム)をヤードポンド法に換算するプログラムを作成せよ.
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:5月23日
[5] その他の制限:
グローバル変数は使用しない.
以下の関数を作ること
身長(cm)と体重(kg)を入力する関数(身長,体重が戻り値)
身長を計算する関数(身長(cm)を引数,変換結果を戻り値)
体重を計算する関数(体重(kg)を引数,変換結果を戻り値)
結果を表示する関数.
身長は○フィート○インチと表示すること.
体重は○ポンドと計算すること.
cm, kgとヤードポンド法の間には以下のような関係がある.
1ヤード(yd)=3フィート(ft)=91.44cm
1フィート(ft)=12インチ(in)=30.48cm
1インチ(in)=2.54cm
1ポンド(lb)=0.45359237kg

宜しくお願いします!
558デフォルトの名無しさん:2005/05/20(金) 15:09:11
>>557
それくらい自分の脳みそで考えてできないとまずいだろ。
559デフォルトの名無しさん:2005/05/20(金) 15:18:52
[1] 授業単元:C言語
[2] 問題文:if文を用いてジャンケンプログラムを作れ。
[3] 環境
 [3.1] OS:WindowsXP Pro SP2
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:5月23日
[5] その他の制限:グーの入力…'G' チョキの入力…'T' パーの入力…'P'
※「あいこ」も判定せよ…「あいこです」表示
※'G'、'T'、'P'以外の入力は「入力エラー」と表示

マジ勘弁してください先生orz
宜しくお願いします。
560デフォルトの名無しさん:2005/05/20(金) 15:22:58
>>559
単元がC言語なのに、プログラム言語がC++とはこれ如何に
561デフォルトの名無しさん:2005/05/20(金) 15:34:33
>>557
#include <stdio.h>
#include <math.h>
struct HW{float cm,ft,in,kg,lb;};
HW input(){HW ret={0};printf("Height(cm),Weight(kg)= ");scanf("%f,%f",&ret.cm,&ret.kg);return ret;}
float cm2in(float *ft,float *in,float cm){*ft=floorf(cm/30.48f);*in=(cm-*ft*30.48f)/2.54f;return *in;}
float kg2lb(float *lb,float kg){*lb=kg/0.45359237f;return *lb;}
void output(HW hw){printf("Height= %.3f ft %.3f in\nWeight= %.3f lb\n",hw.ft,hw.in,hw.lb);}
int main(){
HW hw=input();
cm2in(&hw.ft,&hw.in,hw.cm);
kg2lb(&hw.lb,hw.kg);
output(hw);
return 0;}
562デフォルトの名無しさん:2005/05/20(金) 15:43:20
>>557
最近算数やってないので出力を確認すること。
#include <stdio.h>
#include <math.h>
#define INCH ((double)(2.54))
#define FEET (12*INCH)
#define POND ((double)( 0.45359237))
typedef struct Pair_{
    double fst,snd;
}Pair;
Pair Input(){
    Pair p;
    puts("Input 身長(cm)");
    scanf("%lf",&p.fst);
    puts("Input 体重(kg)");
    scanf("%lf",&p.snd);
    return p;
}
double cmToin(Pair* p ){return p->fst/INCH;}
double kgTold(Pair* p){return p->snd/POND;}
void Output(Pair* p){
    int feet=p->fst/FEET;   int inch=fmod(p->fst,FEET);int pond=p->snd;
    printf("身長:%dフィート%dインチ\n体重:%dポンド",feet,inch,pond);
    return;}
int main(){
    Pair p,p2;
    p=Input();
    p2.fst=cmToin(&p);
    p2.snd=kgTold(&p);
    Output(&p2);
}
563デフォルトの名無しさん:2005/05/20(金) 15:43:31
564デフォルトの名無しさん:2005/05/20(金) 15:59:52
>>559
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(0)));
char c, cpu;
cpu = static_cast<char>(rand() % 3);
cout << "ジャンケンを入力してください (グー='G'、チョキ='T'、パー='P'): ";
cin >> c;
if(cpu == 0) { cpu = 'G'; cout << "CPU: グー" << endl; }
else if(cpu == 1) { cpu = 'T'; cout << "CPU: チョキ" << endl; }
else { cpu = 'P'; cout << "CPU: パー" << endl; }
if(c == cpu)
cout << "あいこです" << endl;
else if(c == 'G' && cpu == 'T' || c == 'T' && cpu == 'P' || c == 'P' && cpu == 'G')
cout << "あなたの勝ちです" << endl;
else if(c == 'G' && cpu == 'P' || c == 'T' && cpu == 'G' || c == 'P' && cpu == 'T')
cout << "あなたの負けです" << endl;
else
cout << "入力エラー" << endl;
return 0;
}
565デフォルトの名無しさん:2005/05/20(金) 16:08:21
>>555
すいません。書き直します。

【質問テンプレ】
[1] 授業単元: バイオインフォマティックス
[2] 問題文(含コード&リンク):
http://www.geocities.jp/arerenore1357/HW.cab
この中に途中までのコードと問題文が含まれています。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): MSVC
 [3.3] 言語:C++
[4] 期限:なるべく早く。
[5] その他の制限:
たぶん、struct AminoAcidAlignmentの中で、
vector<vector<int> >
vector<vector<Move>>を使って
for(int i=1;i<=length1;i++)
for(int j=1;j<=length2;j++)
const int some = kscoreMatrix[s1.AAnums[i=1][s2.AAnums[j-1]];
ってやるんだと思います。

コードはだいたい出来ていて、あとは、align 関数を完成させるだけです。
本当、窮地なんです。
どなたかC++できる方、助けてください。お願いします!!
566デフォルトの名無しさん:2005/05/20(金) 16:16:05
567デフォルトの名無しさん:2005/05/20(金) 16:23:40
>>559
久々にゲームっぽいものを作った。結構楽しかったよ。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
の102またはNo.431
568デフォルトの名無しさん:2005/05/20(金) 16:28:43
>>567
ジャンケンの手をエコーバックさせればもうちょっとフレンドリーになるが、忘れていた。
独自にやる気があったらやってくれ。
569559:2005/05/20(金) 16:30:12
>>560
C言語という授業なんですが、C++をやってるんです・・・

>>563
ありがとうございます。学校で盛り上がりましたw
まだ習っていない文法があったのでもうちょっと簡単にできないでしょうか?
それと、書き忘れていたことがありました・・・ 訂正します。

[1] 授業単元:C言語
[2] 問題文:if文を用いてジャンケンプログラムを作れ。
[3] 環境
 [3.1] OS:WindowsXP Pro SP2
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:5月23日
[5] その他の制限:グーの入力…'G' チョキの入力…'T' パーの入力…'P'
※「あいこ」も判定せよ…「あいこです」表示
※'G'、'T'、'P'以外の入力は「入力エラー」と表示

     【実行画面例】
    Aさんの手は? G
    Bさんの手は? P

    Bさんの勝ちです

     ↑こんな感じで表示できるようにお願いします。
570デフォルトの名無しさん:2005/05/20(金) 16:43:22
>>569
ジャンケンでもそうだけど、後だし禁止。
571デフォルトの名無しさん:2005/05/20(金) 16:46:43
>>570
中出しは・・・・してもいいのか?ハァハァ
572デフォルトの名無しさん:2005/05/20(金) 16:50:34
>>571
突っ込むための穴が無いのでできません。残念!!
573デフォルトの名無しさん:2005/05/20(金) 16:58:10
そこでコレの出番です。

つ「セキュリティーホール」
574デフォルトの名無しさん:2005/05/20(金) 16:58:51
すみません、ほかの所で聞いたらスレ違いと言われてしまったので、ここで質問させていただきます。
[1] 授業単元:情報実験
[2] 問題文(含コード&リンク):
下のプログラムを実行すると以下の出力が得られた。値(1)、(2)、(3)を求めよ。
#include<stdio.h>
int main(void){
int ai[3]={(1), (2), (3)};
int n;
for(n=0;n<5;n++)
printf("%d,%d\n", n, *(int *)(((char *)(ai+1))-n));
for(n=0;n<2;n++)
printf("%d, %d\n", n, *((short *)(&ai[sizeof(ai)/sizeof(int)-1])+n));
}
出力結果
0, 1
1, 256
2, 65536
3, 16777216
4, 0
0, -9
1, 9
[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ(バージョン): わかりません・・
 [3.3] 言語:C
[4] 期限:来週の火曜日まで
[5] その他の制限: どうしてそうなるのかを考察すること
(1)=0, (2)=1, (3)=-9 とすると最後の行以外は出るのですが、0から4の値と、最後の9がどうして出るのかがわかりません。どなたか教えてください。9は配列の外側に行ってるような気がするのですが・・。
575デフォルトの名無しさん:2005/05/20(金) 17:06:43
そんなとこはみ出させちゃって、
これが良いのか!?
ん?これがいいのか!!
576デフォルトの名無しさん:2005/05/20(金) 17:10:34
ああ、入ってくるぅ〜
トロイ入ってくるぅ〜〜!!

トロイ「俺の(バックドア)でガバガバにしてやるぜ!」
577デフォルトの名無しさん:2005/05/20(金) 17:12:03
>>574
(1) 0
(2) 1
(3) 655351
578デフォルトの名無しさん:2005/05/20(金) 17:19:07
どうしてそうなるのかを考察すること
579デフォルトの名無しさん:2005/05/20(金) 17:20:21
ああっ!エネマグラによるドライオーガズムで、一時間以上も逝きっぱなしよ!
580デフォルトの名無しさん:2005/05/20(金) 17:41:39
>>574
これでわかるか?

 <- ai[0]-> <- ai[1]-> <- ai[2]->
 xx xx xx xx xx xx xx xx xx xx xx xx
0:      01 00 00 00
1:     00 01 00 00
2:   00 00 01 00
3:  00 00 00 01
4:00 00 00 00
0:            f7 ff
1:               09 00
581デフォルトの名無しさん:2005/05/20(金) 17:47:13
>>569
このプログラムには不備がかなりある。
つまりエラーチェックをもう少し進めよ。
#include <iostream>

int main(){
char Hund[2];

std::cout<<"Aさんの手は?";
std::cin>>Hund[0];
std::cout<<"Bさんの手は?";
std::cin>>Hund[1];

if(Hund[0] == Hund[1]){
std::cout<<"あいこです"<<std::endl;
return 0;
}
if(Hund[0] == 'P')
if(Hund[1] == 'G')std::cout<<"Aさんの勝ち。";
else std::cout<<"Bさんの勝ち。";
if(Hund[0] == 'T')
if(Hund[1] == 'P')std::cout<<"Aさんの勝ち。";
else std::cout<<"Bさんの勝ち。";
if(Hund[0] == 'G')
if(Hund[1] == 'T')std::cout<<"Aさんの勝ち。";
else std::cout<<"Bさんの勝ち。";

std::cout<<std::endl<<"End"<<std::endl;

}
582デフォルトの名無しさん:2005/05/20(金) 17:49:42
>>579
いいなー。
583デフォルトの名無しさん:2005/05/20(金) 18:22:46
>>565
見たけどやる気が起きない。
584デフォルトの名無しさん:2005/05/20(金) 18:24:11
以下のように4つのchar型の要素を持った構造体にファイルから文字列を読み込みたいのですが、
最後の文がおかしいらしくきちんと格納されません。
ファイルの中身と格納する文はどう書けばいいのでしょうか?

とりあえずコンパイラを通すためにstr[0]のみに入れようとしたのですが、
例えばfor文で回しても変えられるのはstr[i]の部分だけですよね?
ファイルの中身を
str[0]のAAAに入れる文 ; str[0]のBBBに入れる文 ; str[0]のCCCに入れる文 ; str[0]のDDDに入れる文
str[1]のAAAに入れる文 ; str[1]のBBBに入れる文 ; str[1]のCCCに入れる文 ; str[1]のDDDに入れる文
としたとして、for文の2周目で2行目の文を入れる方法もよく分かりませんでした。
テキストがファイルの処理まで扱ってないためググって頑張ったのですが限界です('A`)

typedef struct{
char AAA[20];
char BBB[20];
char CCC[20];
char DDD[20];
} STR;

STR str[50] = {'\0'};

FILE *fp = fopen("001.dat", "r");
fscanf(fp, "%s%s%s%s", str[0].AAA, str[0].BBB, str[0].CCC,str[0].DDD);

585デフォルトの名無しさん:2005/05/20(金) 18:35:46
>for文の2周目で2行目の文を入れる方法
入力関数はストリームの先頭から文字を「取り出す」(いい加減な説明だけど、最初はそういう理解で十分)
だから、1周目で1行目の文を入れたら、(ストリームに1行目は残ってないので)自動的に2周目で2行目の文が入る。

(残ってない は実は嘘だけど気にすんな)
586584:2005/05/20(金) 18:39:30
>>585
アナルヘソ(・∀・)
指定しなくてもとにかく順番に入れてくれるってことですね。
ただファイルの中身とfscanf文は上記のようにしてあるのですが、
BBBに入れたい文がAAAに続けて入っていたりします。
きちんと区切って入れるにはどうしたらいいのでしょうか?
587デフォルトの名無しさん:2005/05/20(金) 18:53:02
>>585では無いが、区切り文字を入れると良いよ。
一般的なのは、ホワイトスペース、またはコンマかな。
本文に出てこない文字を区切り文字にするといい。
588デフォルトの名無しさん:2005/05/20(金) 18:55:10
>>587
584のテキストはセミコロンで区切られているように見えるが。
589デフォルトの名無しさん:2005/05/20(金) 18:57:22
おっと、見落としてた。
fscanf("%s;%s;%s;%s",str[0].AAA, str[0].BBB, str[0].CCC,str[0].DDD); 
でどうだろう??
590デフォルトの名無しさん:2005/05/20(金) 18:58:07
fscanf(fp.....
fpわすれてた。
591584:2005/05/20(金) 19:05:27
>>587
区切り文字はfscanf側ですね。
一応>>584のような記述で実行しての不具合だったので、
ファイル側は一応まともに区切られてはいるってことですよね。
今は自宅にいて試せる環境にないのですが、後日fscanf側を変更してやってみます。
>>585-590 みなさまありがとうございました。
592デフォルトの名無しさん:2005/05/20(金) 19:06:43
うまく動きません。二分探索です。
#include <stdio.h>
#define MAX 10
struct student {
int key;
char name[10];
};


struct student Student[MAX]={{8,"Hanada"},{5,"Goto"},{24,"Nishida"},{10,"Toh"},{3,"Sasaki"}};
int Num=5;







593デフォルトの名無しさん:2005/05/20(金) 19:07:47
main()
{
int i;
int tgt_key;


while(1) {
printf("Please input the key.\n");
if (scanf("%d", &tgt_key)==EOF)
break;
if((i=bi_search(tgt_key))!=-1)
printf("Found! key=%d, Name=%s \n",
Student[i].key, Student[i].name);
else
printf("Not found.\n");

}
}


594デフォルトの名無しさん:2005/05/20(金) 19:09:30
int bi_search(int target)
{
int hi, lo, mid;
lo=0; hi=MAX-1; /* nは配列の大きさ */

while(lo <= hi) { /* この条件が成立しなければ,データは無い */
mid=(lo+hi)/2; /* 中央のデータのインデックス */
if (target==Student[mid].key)
return mid;
else if(target<Student[mid].key)
hi=mid-1; /* 左半分を再探索 */
else
lo=mid+1; /* 右半分を再探索 */
}
return -1; /* 見つからなかった */
}
595デフォルトの名無しさん:2005/05/20(金) 19:11:48
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): ポーランド記法を逆ポーランド記法に変換するプログラムを作成せよ。
ただし、逆ポーランド記法は以下のトークンの列で表現する。
  struct token{
enum{NUM,ADD,SUB,MUL,DIV}type;
int value;
};
NUMは数値を示し、ほかは演算記号です。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:なるべく早く
[5] その他の制限: できればキューに格納してほしい
596デフォルトの名無しさん:2005/05/20(金) 19:18:30
>>592-594
テンプレつかっておくれ。
597デフォルトの名無しさん:2005/05/20(金) 19:26:51
>>592
2分探索はソート済みのデータじゃないと無理。

hi=MAX-1;
でなく
hi= Num-1;
でないか?
598デフォルトの名無しさん:2005/05/20(金) 19:31:14
>>595
スタックではなく?
599デフォルトの名無しさん:2005/05/20(金) 19:51:03
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/432.txt
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005/5/23
[5] その他の制限:特に無し

ご指南よろしくおねがいします。
考えれば考えるほど頭がこんがらがってくる・・・OTZ
600デフォルトの名無しさん:2005/05/20(金) 20:58:42
>599
なんか変な仕様だな。
とりあえず、一つのListのvalueが一桁の数値を持つようだな。
これを踏まえてだな。
intに変換する関数。
int DisitToInt(disit *data);
をつくって、intでごにょごにょして、
disit* IntToDisit(int val);
を作ってというのが一つの案なんだが、
読み直してみると、結構面倒だな。
あっさりINT32分超えそう。
すまん、やくにたってないな。
601デフォルトの名無しさん:2005/05/20(金) 21:04:24
602デフォルトの名無しさん:2005/05/20(金) 21:17:01
えっと、やっぱり>>252>>477は難しいんでしょうか。
さっぱり分からないので、「こーすればいいんじゃないの?」みたいなアドバイスでもいいのでご指南よろしくお願いします・・・
603デフォルトの名無しさん:2005/05/20(金) 21:26:15
>>601
ご回答ありがとうございます。
・・・が,9999と1を入力しても10000にならないです・・・
604デフォルトの名無しさん:2005/05/20(金) 21:38:06
605デフォルトの名無しさん:2005/05/20(金) 21:56:36
>604
わざわざご丁寧に有難うございました。
考え方一つでここまで単純にすることができるんですね・・・
606デフォルトの名無しさん:2005/05/20(金) 22:07:45
もう遅いのは承知だけど、あげ。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/435.txt
607デフォルトの名無しさん:2005/05/20(金) 22:14:52
>>602
興味が無いわけではないけど、僕はWindows使いなので手が出ません。
まーソケットは扱ったこと無いから元々手が出ないかもしれんが。
608デフォルトの名無しさん:2005/05/20(金) 22:31:33
>598
595のものですが関数のプロトタイプ宣言が
例)void change(char *pre,struct queue *postfix)
な感じになればいいんです。
609デフォルトの名無しさん:2005/05/20(金) 23:18:57
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
1.
2つの整数を読み込み、最大公約数と最小公倍数を計算するプログラムを作成せよ.但し,main関数の他に以下の関数を必ず使用すること.
整数の読み込み(読み込んだ整数を戻り値とする関数)
最大公約数の計算(2つの整数を引数,結果を戻り値)
最小公倍数の計算(2つの整数を引数,結果を戻り値)
結果を表示する関数(最大公約数,最小公倍数を引数)
2.
フェボナッチ数列{a_n}の要素,a_1, a_2, ..., a_20の中で素数である要素をカウントし,それらを表示するプログラムを作成せよ.但し,main関数以外に関数として以下の関数を作成すること.
数列を計算する(nを引数とし,a_nを戻り値)
素数を判別する(整数aを引数とし,素数の場合1,素数でない場合0を戻り値とする関数)
表示(1)(素数を引数とし,結果を表示)
表示(2)(カウントした数を引数とし,結果を表示)

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:5月22日まで
[5] その他の制限:あまり難しい事は習っていないので簡単?なプログラムで。。。
あつかましいですが宜しくお願いします。
610デフォルトの名無しさん:2005/05/20(金) 23:56:32
>>565
やばい。あとしめきりまで、6時間しかありません。
必死なんです。どなたか手伝ってください。
ほんと、お願いします!!!!!!!

611デフォルトの名無しさん:2005/05/20(金) 23:59:54
>>609 1個目
#include <stdio.h>

int gcd(int a, int b)
{ /* 最大公約数。アルゴリズムはユークリッドの互除法 */
if(b == 0) return a;
return gcd(b, a % b);
}

int lcm(int a, int b)
{ /* 最小公約数。アルゴリズムは…特になし。 */
int ggcd = gcd(a, b);
return a * (b / gcd(a,b));
}

int main(void)
{
int a, b;
printf("a=?"); scanf("%d", &a);
printf("b=?"); scanf("%d", &b);
printf("GCD(%d,%d)=%d\n", a, b, gcd(a, b));
printf("LCM(%d,%d)=%d\n", a, b, lcm(a, b));
return 0;
}
612デフォルトの名無しさん:2005/05/21(土) 00:06:10
>>610
仕方ないから大雑把にアルゴリズムだけ。実際には自分で組め。
まずは表作り。詳しい書き方は(C++を)知らん。
vector<vector<int> > table; // 左端、上端の初期化を忘れずに
for(int i=1;i<=length1;i++)
for(int j=1;j<=length2;j++) {
int fromleft = table[i-1][j]-1;
int fromup = table[i][j-1]-1; // upは文法的におかしい?
int fromdiagonal=table[i-1][j-1]+Matrix[Indexof[s1[i]]][Indexof[s2[j]]]; // ここは適宜直せるだろう
table[i][j] = max(fromleft, fromup, fromdiagonal); // ここもif等で書き換える必要有り
}
これを貴様がC++に移行している間に次を書いとく。
613デフォルトの名無しさん:2005/05/21(土) 00:15:59
>>610 Move vector の作成
vector<Move> 変数名を指定されていた気がするけど忘れた。ここでは v にしておく。
for(int i = length1-1, j = length2-1; i != 0 || j != 0; ) {
int left, up, diag;
left = table[i-1][j];
up = table[i][j-1];
diag = table[i-1][j-1];
if(diag >= left && diag >= up) {
v.push_back(斜め); // enum 忘れた
i--;
j--
} else if(left >= up) {
v.push_back(1にブランク); // 同上
i--;
} else {
v.push_back(2にブランク); // 同上。もしかしたら「1にブランク」「2にブランク」は逆かも。
j--;
}
}
scoreの計算方法は示されてなかったが、おそらく
score=table[length1-1][length2-1];
あとは5時間半がんばれ。
614デフォルトの名無しさん:2005/05/21(土) 00:23:09
>>609
素数の判定だけ

int IsPrime(int n)
{
int i;

if(n < 2) return 0;
if(n==2) return 1;
if(n % 2 == 0) return 0;
for(i = 3; i <= sqrt(n); i += 2)
if(n % i == 0) return 0;
return 1;
}

615デフォルトの名無しさん:2005/05/21(土) 00:25:30
>>614
素数判定するんだったらもっとマシなアルゴリズム使えよwww
616611:2005/05/21(土) 00:33:26
>>609 2個目。表示に関して(1)と(2)の区別の意味が分からんのでそこは放置してる
改行が多い関係で省いたけどisprimeに関しては>>614といっしょ。
#include <stdio.h>
int fibo(int n)
{
int i, a, b, c;
if(n < 1) return 0;
if(n < 3) return 1;
a = b = c = 1;
for(i = 2; i < n; i++) { a = b; b = c; c = a + b; }
return c;
}
int main(void) {
int i, n, fib, count = 0;
printf("n=?"); scanf("%d", &n);
for(i = 1; i < n; i++) {
fib = fibo(i);
if(isprime(fib) == 1) { printf("%d\n", fib); count++; }
}
printf("The number of prime numbers is %d\n", count);
return 0;
}

>>615 AKSですか?
617Me != 615:2005/05/21(土) 01:03:20
作りおきだが。
int *sieve_of_eratosthenes(int upper) {
    int i, notprime, *integers = (int*)malloc(sizeof(int) * (upper + 1));
    for (i = 2; i <= upper; i++) integers[i] = 1;
    integers[0] = integers[1] = 0;
    for (i = 2; i <= upper / 2; i++) {
        notprime = i;
        while ((notprime += i) <= upper) integers[notprime] = 0;
    }
    return integers;
}

int is_prime(int n) {
    int *sieve = sieve_of_eratosthenes(n), ret = sieve[n];
    free(sieve);
    return ret;
}
618609:2005/05/21(土) 01:23:57
皆さんありがとうございます
1番はできたのですが2番の616さんのプログラムがエラー出てしまいます・・
619ME->NewFace:2005/05/21(土) 01:26:23
フェボナッチ数自体があってるか謎。
数学の素養がないとこういうときつらいな〜。
#include <stdio.h>
#include <stdlib.h>
#define TRUE (1)
int F(int n){
    if(n==1) return 1;
    if(n==2) return 1;
    return F(n-2)+F(n-1);
}
int EratosthenesSieve(char *p,int n){/*エラトステネスの篩*/
    int i,j;
    for(i =2;i<n;i++){
        if(p[i]==TRUE) continue;
        for(j=2;(i*j)<n;j++){
            p[i*j]=TRUE;
        }
    }
    return 0;
}
int main(){
    int n,f;char *buf;
    puts("Input N...");scanf("%d",&n);
    f=F(n);
    printf("%d",f);
    buf = (char*)calloc(f+1,sizeof(char));
    EratosthenesSieve(buf,f+1);
    if(buf[f] != TRUE)puts("Prime!!");
    else puts("Not Prime!!");
    free(buf);
    return 0;
}
620616:2005/05/21(土) 01:37:28
>>618
isprime関数を>>614のから
int isprime(int n)
{
int i;
if(n < 2) return 0;
if(n==2) return 1;
if(n % 2 == 0) return 0;
for(i = 3; i * i <= n; i += 2) /* ここが違う */
if(n % i == 0) return 0;
return 1;
}
にしてみ?表示用の関数2つ作らなきゃならんらしい(それぞれ何を出力するのか問題文からはよく分からん)
からそのままだとアウトだが。
621デフォルトの名無しさん:2005/05/21(土) 02:14:17
>>ALL
おやすみ〜。
622デフォルトの名無しさん:2005/05/21(土) 02:18:41
エラーが出るときはエラーメッセージをコピペ。
623デフォルトの名無しさん:2005/05/21(土) 02:26:46
>>620
ありがとうございます!できました。
自分も問題文がよくわかりませんorz
624デフォルトの名無しさん:2005/05/21(土) 02:50:00
>表示(1)(素数を引数とし,結果を表示)
>表示(2)(カウントした数を引数とし,結果を表示)

void put_1(int n){ printf("%d は素数です\n",n); }
void put_2(int n){ printf("素数である要素は %d あります\n", n); }
625デフォルトの名無しさん:2005/05/21(土) 03:23:44
>>612,613
ありがとうございます。
私も、やることのアルゴリズムはわかるんですよ。
でも、このもとあるコードが理解できてないんですね。。。
これだけでもRunするんですよ。
それらを、どういうふうにこのコードにそって
書いたらいいのかが、全くわからないんですね。。。
すいません。
もし、C++が分かる方がいたら、教えてください。
ほんと、お願いします。
626625:2005/05/21(土) 03:55:29
627デフォルトの名無しさん:2005/05/21(土) 03:57:39
ジャンケンプログラム作成を依頼した>>559>>569です。
回答ありがとうございました。
習っていない文法があったので、もう少し簡単目なのではできないのでしょうか?
ttp://www.media.osaka-cu.ac.jp/~k-abe/2001-JS-OSAKA-U/C.html
↑ここの最初からbreak文あたりまでしかまだ習っていないので・・・
628625:2005/05/21(土) 04:11:39
これができないと、次の課題もできなくて、
このクラス、パスできないかもしれないのです。
お願いです。助けてください。
629デフォルトの名無しさん:2005/05/21(土) 04:22:22
>>628
お金払って、それなりの人にやってもらえば?
大事な単位なんでしょ。そんな問題をタダでやってもらおうなんて虫が良すぎる。
お金払ってやってもらう価値があるんでしょ?
それにいい加減ウザイ。
630625:2005/05/21(土) 04:26:46
>>629
テメエには言ってねえよ(゚Д゚ )ゴルァ!!余計な茶々入れるんじゃねーよ。
私は解いて下さるだけにお願いしているのです。
どうかお願いしますm(_ _)m
631デフォルトの名無しさん:2005/05/21(土) 04:28:23
>625って明確に落ちこぼれてきてるよな。
632デフォルトの名無しさん:2005/05/21(土) 04:29:44
>>630
諦めろ。
633デフォルトの名無しさん:2005/05/21(土) 06:27:47
age
634625:2005/05/21(土) 06:31:46
やってくれた方にはお礼します。
あと2時間しかないです。
630は私ではありません。
635デフォルトの名無しさん:2005/05/21(土) 06:32:09
>>630 はネタだと思うが。

>>625 よ、学校にお友達いないのか?

回答者にとってここは人助けのためにあるのではなくって、
暇つぶし程度だとおもう・・・そんなに期待しないよーに。

それと、FAQかなぁ。

Q.解けないと単位もらえない。
A.知ったこっちゃない。

Q.急いでください。
A.回答者は急ぐ義理はない。

(とか書くと、やさしいおせっかいさんが、プログラム書いてくれるハズ)
636デフォルトの名無しさん:2005/05/21(土) 06:41:01
荒れてるなー。

>>634
問題どこ? リンク貼っといて。
それと、お礼はなんですか? いくら出せますか?
637625:2005/05/21(土) 06:41:17
>>635
無理に急いでくださいとは言える立場ではないのは分かってます。
締め切りすぎた後でもこれは必要なので、お願いします。
638625:2005/05/21(土) 06:47:16
>>636
メールください。
639デフォルトの名無しさん:2005/05/21(土) 06:50:49
・・・んー・・・yahooメールの人は信用してないんで。
ごめんねー。
640625:2005/05/21(土) 06:52:17
>>636
もう一度張ります。
【質問テンプレ】
[1] 授業単元: バイオインフォマティックス
[2] 問題文(含コード&リンク):
http://www.geocities.jp/arerenore1357/HW.cab
この中に途中までのコードと問題文が含まれています。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): MSVC
 [3.3] 言語:C++
[4] 期限:なるべく早く。
[5] その他の制限:
たぶん、struct AminoAcidAlignmentの中で、
vector<vector<int> >
vector<vector<Move>>を使って
for(int i=1;i<=length1;i++)
for(int j=1;j<=length2;j++)
const int some = kscoreMatrix[s1.AAnums[i=1][s2.AAnums[j-1]];
ってやるんだと思います。
他にもやり方があれば、別にかまいません。

コードはだいたい出来ていて、あとは、align 関数を完成させるだけです。
641625:2005/05/21(土) 06:53:04
どこのメールだったらいいのですか?
家のメアドはここには張りたくないのですが・・・。
642デフォルトの名無しさん
フリーメール系はダメなんじゃない?
プロバイダのメールとか学校のメールとかか?