ぼるじょあがC/C++の宿題を片づけますYO! 47代目
■ このスレッドは過去ログ倉庫に格納されています
0001ぼるじょあ ◆yBEncckFOU
2005/07/05(火) 09:19:12わからない宿題を片づけますYO!
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:Windows/Linux/等々
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:どこまで習っているか、等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【前スレ】
C/C++の宿題を片付けます 46代目
http://pc8.2ch.net/test/read.cgi/tech/1119514274/
【歴代スレは>>2-13】
0357デフォルトの名無しさん
2005/07/08(金) 19:41:25[2] 問題文(含コード&リンク): 配列x[5]={1.4.5.2.3}を小さい順にソートするプログラムを作成せよ。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ(バージョン):VC++6.0
[3.3] 言語:C
[4] 期限:明日中
[5] その他の制限:ポインタを使ってお願いします。
0358デフォルトの名無しさん
2005/07/08(金) 19:59:48#include <stdlib.h>
#include <stdio.h>
int greater_int(const void *x, const void *y){return *(int*)x < *(int*)y;}
int main()
{
int i, x[5]={1,4,5,2,3};
sqort(x,5,sizeof(int),greater_int);
for(i = 0; i< 5; ++i) printf("%d ", x[i]);
putchar('\n');
return 0;
}
0359デフォルトの名無しさん
2005/07/08(金) 20:01:510360358
2005/07/08(金) 20:01:57訂正しました。
>>357
#include <stdlib.h>
#include <stdio.h>
int less_int(const void *x, const void *y){return *(int*)x - *(int*)y;}
int main()
{
int i, x[5]={1,4,5,2,3};
qsort(x,5,sizeof(int),less_int);
for(i = 0; i< 5; ++i) printf("%d ", x[i]);
putchar('\n');
return 0;
}
0361358
2005/07/08(金) 20:03:100362デフォルトの名無しさん
2005/07/08(金) 20:20:46まずはプロトコルをどうしたいのかはっきりさせろ。
問題文に無い機能を盛り込んでないか?
問題文からはユーザのリストを取得したり(クライアント側で)ユーザを
指定して送信したりする機能が必要とは思われない。
1) クライアントからの最初の送信行はユーザ名として扱う。これは
クライアント側には返送・転送されない。
2) クライアントからの二行目以降の送信行は、先頭にユーザ名を付加して
全てのクライアントに送信される。
3) 通信終了はクライアント側からの切断にて行う。クライアントは
EOF文字を端末から入力された場合に、通信を終了する。
この程度で十分だと思うが。
これでも行指向ではあるので、クライアント毎のバッファ管理は必須だ。
stdioとselect()との併用はよろしくないので、自前でやる必要がある。
0363デフォルトの名無しさん
2005/07/08(金) 21:01:20何となくだが、求められているのはこんなレベルのような気がする。
#include <stdio.h>
int main(void) {
int i, j, temp, x[5] = {1, 4, 5, 2, 3};
for (i = 0; i < 4; i++)
for (j = 0; j < 4 - i; j++)
if (x[j + 1] < x[j]) {
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
}
for (i = 0; i < 5; i++) printf("\t%d", x[i]);
return 0;
}
0364デフォルトの名無しさん
2005/07/08(金) 21:01:29ありがとうございました。
0366デフォルトの名無しさん
2005/07/08(金) 21:24:46ポインタ使うの忘れてた。
#include <stdio.h>
void sort(int* x, int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - 1 - i; j++)
if (x[j + 1] < x[j]) {
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
}
}
int main(void) {
int i, x[5] = {1, 4, 5, 2, 3};
for (i = 0; i < 5; i++) printf("\t%d", x[i]);
printf("\n");
sort(x, 5);
for (i = 0; i < 5; i++) printf("\t%d", x[i]);
return 0;
}
0367デフォルトの名無しさん
2005/07/08(金) 21:41:25サーバ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/685.txt
クライアント
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/686.txt
仕様は>>362の通りに簡略化してある。
なお俺はLinux環境は持ってないのでそのつもりで。
0368デフォルトの七資産
2005/07/08(金) 21:41:47[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
暦の年号を西暦に変換するプログラムを列挙体(enum)を用いた方法で作成せよ。
ヒント(西暦=明治:m+1867、大正:t+1911、昭和:s+1925、平成:h+1988)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):Borland C++ Compiler5.5
[3.3] 言語:C
[4] 期限無
[5] できるだけ簡単におねがいします。
列挙体(enum)のもお願いできますか。
BY 昨日の電車男で2chの人大好きになりましたデフォルトの七資産でした。w
0369デフォルトの名無しさん
2005/07/08(金) 21:44:11直ぐ後にイニューム版も貼られてただろ
0370デフォルトの名無しさん
2005/07/08(金) 21:52:320371デフォルトの名無しさん
2005/07/08(金) 23:11:00[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=687
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):VC++6.0
[3.3] 言語:C言語
[4] 期限:来週の月曜まで
[5] その他の制限:for文を使用、多重ループ
どなたかよろしくお願いします・・・。
0372デフォルトの名無しさん
2005/07/08(金) 23:14:35#include<stdio.h>
int main(void)
{
for (;0;) for (;0;);
return printf("-++++\n*-+++\n**-++\n***-+\n****-\n"), 0;
}
0373デフォルトの名無しさん
2005/07/08(金) 23:17:52#include <stdio.h>
int main()
{
int n, x, y;
scanf("%u", &n);
for(y = 0; y < n; ++y)
{
for(x = 0; x < n; ++x)
{
if( x > y ) putchar('*');
else if( x < y ) putchar('+');
else putchar('-');
}
putchar('\n');
}
return 0;
}
0374373
2005/07/08(金) 23:23:250375デフォルトの名無しさん
2005/07/08(金) 23:32:38http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/688.txt
よろしくお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/688.txt
よろしくお願いします
0376デフォルトの名無しさん
2005/07/08(金) 23:37:29>合計得点以外の適当なデータを入力できるようにせよ。
これの意味がわからん。
0377デフォルトの名無しさん
2005/07/08(金) 23:42:030378デフォルトの名無しさん
2005/07/08(金) 23:42:570379デフォルトの名無しさん
2005/07/08(金) 23:48:21stdata構造体の配列を作成する。
そして生徒一人につき1つ何でもいいからデータを
入れられるようにすればいいようです。
いろいろミスが多くて申し訳ありませんでした
0380デフォルトの名無しさん
2005/07/08(金) 23:52:100381デフォルトの名無しさん
2005/07/08(金) 23:53:54#include <stdio.h>
/* 1 */
struct stdata { int no, char name[11]; int score[5];}
/* 2 */
struct stdata g_data1[10];
int set_data(int index, int no, char *name, int score[4])
{
if( index < 0 || index > 11) return 0;
else
{
struct stdata *p = g_data[index];
p->no = no;
strncopy(p->name, name, 10);
memmove(p->score+1, score, sizeof(int)*4);
return 1;
}
}
/* 3 */
void goukei(struct stdata *astdata)
{
if( astdata != NULL )
{
int i;
astdata->score[0] = 0; /* score[0] に合計点 */
for(i = 0; i < 4; ++i) astdata->score[0] += astdata->score[i];
}
}
0382デフォルトの名無しさん
2005/07/08(金) 23:54:27#include <string.h> ね。
0383デフォルトの名無しさん
2005/07/08(金) 23:55:26使わないほうが良いぞ。
0384デフォルトの名無しさん
2005/07/09(土) 00:01:27#include <string.h>
/* 1 */
struct stdata { int no; char name[11]; int score[5];};
/* 2 */
struct stdata g_data[10];
int set_data(int index, int no, char *name, int score[4])
{
if( index < 0 || index > 11) return 0;
else
{
struct stdata *p = &g_data[index];
size_t len = strlen(name);
p->no = no;
memmve(p->name, name, 10);
p->name[len > 11 ? 11 : len] = '\0';
memmove(p->score+1, score, sizeof(int)*4);
return 1;
}
}
/* 3 */
void goukei(struct stdata *astdata)
{
if( astdata != NULL )
{
int i;
astdata->score[0] = 0; /* score[0] に合計点 */
for(i = 0; i < 4; ++i) astdata->score[0] += astdata->score[i];
}
}
0385デフォルトの名無しさん
2005/07/09(土) 00:02:20memmve()とかいうなぞの関数を使っているので
たぶんそれもコンパイルできないぞ
0386デフォルトの名無しさん
2005/07/09(土) 00:03:51struct stdata *create_stdata(size_t n){return malloc(n * sizeof(struct stdata)); }
0387デフォルトの名無しさん
2005/07/09(土) 00:03:56strncat()はそうでもないので、そっちを使うとよい。
先頭に\0セットしてからstrncat()すれば、望みの結果を得られる。
0388デフォルトの名無しさん
2005/07/09(土) 00:05:40>>381が苦労してるみたいなのでうp
#include <stdio.h>
struct stdata {int no; char name[10]; int point[5]; };
void goukei(struct stdata * astdata) {
int i;
for (i = 0; i < 4; ++i) astdata->point[4] += astdata->point[i];
}
int main(void) {
struct stdata data[10] = {0};
int i, j;
for (i = 0; i < 2; ++i) {
scanf("%d%9s", &data[i].no, data[i].name);
for (j = 0; j < 4; ++j) scanf("%d", &data[i].point[j]) ;
goukei(&data[i]);
}
return 0;
}
0389384
2005/07/09(土) 00:05:48○ if( index < 0 || index > 9) return 0;
× memmove(p->name, name, 10);
○ memmove(p->name, name, len > 10 ? 10 : len);
失礼しました。
0390デフォルトの名無しさん
2005/07/09(土) 00:06:47>>373
ありがとうございます。助かりました。
一晩中考えてたんですが全く分からなくて・・・。
しかし早いですねぇ。
0391デフォルトの名無しさん
2005/07/09(土) 00:10:16[2] 問題文(含コード&リンク):
次のプログラムを実行してブラウザで表示させんですが、ブラウザを開くと
真っ白のページしかでてきません。コンパイラ時点でエラーは無いですι(´Д`υ;)
http://tokyo.cool.ne.jp/k-12/
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C言語
[4] 期限:今日まで(すみません(´Д`;))
[5] その他の制限:本当基礎しか教わってません。
簡単な説明お願いします(´・ω:;.:...
0392デフォルトの名無しさん
2005/07/09(土) 00:14:05ブラウザは自分では実行せず、z.htmlという名前のファイルをカレントディレクトリ
に作ってその中に出力するだけのようだが
そのファイルの中身はどうなってるのかね?空か?
0394デフォルトの名無しさん
2005/07/09(土) 00:15:09int main(void) {
struct stdata * data;
unsigned int n, i, j;
scanf("%u", &n);
data = malloc(sizeof(struct stdata) * n);
for (i = 0; i < n; ++i) {
scanf("%d%9s", &data[i].no, data[i].name);
for (j = 0; j < 4; ++j) scanf("%d", &data[i].point[j]) ;
goukei(&data[i]);
}
free(data);
return 0;
}
>>388 俺もミスってる
× for (i = 0; i < 2; ++i) {
○ for (i = 0; i < 10; ++i) {
0395デフォルトの名無しさん
2005/07/09(土) 00:17:22title要素が閉じていない。
0396デフォルトの名無しさん
2005/07/09(土) 00:19:33× strcat(w, "<title>HP<title>\n");
○ strcat(w, "<title>HP</title>\n");
0397デフォルトの名無しさん
2005/07/09(土) 00:20:05[2] 問題文(含コード&リンク):
#define N 10
int main(void)
{
int aa[N], bb;
bb = sum(aa);
printf("sum=%d\n",bb);
return 0;
}
int sum(int num[N])
{
int n, s=0;
for(n=0;n<N;n++)
s+=num[n];
return s;
}
↑これを修正し、double型の配列変数に格納されている値の平均値を求める関数ave
を作成せよ。またaveもdouble型とする。
[3] 環境
[3.1] OS:UNIx
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年7月11日まで
[5] その他の制限:まだ入門編というところでしょうか
0398デフォルトの名無しさん
2005/07/09(土) 00:21:40氏ね
0399デフォルトの名無しさん
2005/07/09(土) 00:22:16それの何が問題なのか?
0400デフォルトの名無しさん
2005/07/09(土) 00:23:57入門編どころの騒ぎじゃないな
int → double
後は書式指定子
0401デフォルトの名無しさん
2005/07/09(土) 00:25:02>[3.1] OS:UNIx
おちゃめだな
0402デフォルトの名無しさん
2005/07/09(土) 00:25:06int main(void)
{
double array[N], average;
average = ave(array);
printf("sum = %g\n", average);
return 0;
}
double sum(double a[])
{
int i;
double s = 0;
for(i = 0; i < N; i++)
s += num[i];
return s;
}
double ave(double a[])
{
return sum(a) / N;
}
0403391
2005/07/09(土) 00:30:36どうもありがとうございました!!
>>395様>>396様のご指導通りtitle要素を終わらせたら表示できました
本当に早い対処ありがとうございました
0404333
2005/07/09(土) 00:55:05「足し合わせると1000になるような二つの素数の組を全て求めるプログラムをつくる」っていうものなのですが全然わかりません...教えてください。
0405デフォルトの名無しさん
2005/07/09(土) 00:59:57[2] 問題文(含コード&リンク):
あるファイル(seiseki.txt)を読み込んで、各生徒ごと・各科目ごと
それぞれの合計点・平均点・最高点を求めよ。
プログラムに、構造体を用いる事。
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年7月11日まで
[5] その他の制限:
「seiseki.txt」の中身は下記の通りです。
1番左のアルファベットは名前で、次の列から順番に
英語、数学、国語、理科、社会の点数を示しています。
A 70 56 66 45 88
B 66 85 68 55 73
C 55 65 53 67 55
D 85 72 76 58 65
E 92 70 45 73 55
F 56 57 52 62 82
G 72 62 33 85 95
H 46 95 48 72 34
I 83 42 88 92 56
J 68 65 91 82 66
0406デフォルトの名無しさん
2005/07/09(土) 01:51:48#include <stdio.h>
#include <math.h>
#define N 1000
int main()
{
static int buf[N];
int i,j;
for(i = 2; i < sqrt(N); ++i)
{
if( buf[i] ) continue;
for(j = i+i; j < N; j += i) buf[j] = 1;
}
for(i = 2, j = 0; i < N; ++i)
{
if( buf[i] ) continue;
buf[j++] = i;
}
buf[j] = 0;
i = 0;
while( i <= j )
{
if( (buf[i] + buf[j]) == N) printf("%u %u\n", buf[i], buf[j]);
++i; --j;
}
return 0;
}
0407333
2005/07/09(土) 01:58:140408デフォルトの名無しさん
2005/07/09(土) 02:00:390409406
2005/07/09(土) 02:07:56力技だ。
for( i = 0; buf[i]; ++i)
for(j = i; buf[j]; ++j)
if((buf[i]+buf[j])==N) printf("%u %u\n", buf[i], buf[j]);
return 0;
0410406
2005/07/09(土) 02:22:30#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 1000
int cmp_int(const void *a, const void *b){ return *(int*)a - *(int*)b;}
int main()
{
static int buf[N];
int i,j,*p, key, save;
for(i = 2; i < sqrt(N); ++i)
{
if( buf[i] ) continue;
for(j = i+i; j < N; j += i) buf[j] = 1;
}
for(i = 2, j = 0; i < N; ++i)
if( !buf[i] ) buf[j++] = i;
buf[j] = 0; save = N;
for(i = 0; buf[i] < save; ++i)
{
key = N - buf[i];
if(NULL != (p = bsearch(&key,buf, j, sizeof(int), cmp_int)))
{
printf("%d %d\n", buf[i], *p);
save = *p;
}
}
return 0;
}
0411デフォルトの名無しさん
2005/07/09(土) 02:27:06#include <stdio.h>
int is_prime(int n)
{
int i;
if (n < 2)
return 0;
for (i = 2; i < n; i++)
if ((n % i) == 0)
return 0;
return 1;
}
int main(void)
{
int i;
for (i = 2; i < 500; i++) {
if (is_prime(i) && is_prime(1000-i))
printf("%d %d\n", i, 1000-i);
}
return 0;
}
04121/2
2005/07/09(土) 02:48:57#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFMAX 512
#define DELIMITER " "
typedef struct _Person {
char *name;
int total;
}Person;
int line_sum( FILE *fp ) {
char buf[BUFSIZ];
int line = 0;
for ( ; fgets( buf, BUFMAX, fp ); line++ ) { }
if ( strchr( buf, '\n' ) != NULL ) line--; // 改行で終わっていたら
return line;
}
04132/2
2005/07/09(土) 02:50:47int main( int argc, char *argv[] )
{
FILE *fp;
char buf[BUFSIZ];
char *p;
int before_total = 0, i;
int id,no,line; // 一番大きかった人の 番号が id に入る
Person *p_person;
fp = fopen( "seiseki.txt", "r" );
if ( fp == NULL ) {
fprintf( stderr, "file not found" ); return 1;
}
line = line_sum( fp );
p_person = (Person*)calloc( line, sizeof( Person ) );
fseek( fp, 0L, SEEK_SET );
for ( no = 0; no < line; no++ ) {
fgets( buf, BUFMAX, fp );
if ( strchr( buf, '\n' ) != NULL ) *strchr( buf, '\n' ) = '\0';
p_person[no].name = strtok( buf, DELIMITER );
printf( "%s さん :" ,p_person[no].name );
for ( i = 0; (p = strtok( NULL, DELIMITER )) != NULL; i++ ) {
printf( " %s " ,p );
p_person[no].total += atoi( p );
}
04142/2 ... last
2005/07/09(土) 02:51:31if ( p_person[no].total > before_total ) {
before_total = p_person[no].total; // 前回の結果を残す
id = no;
}
}
printf( "\n最高得点は %s さんの %d 点でした" ,p_person[id].name ,p_person[id].total );
fclose( fp );
free( p_person );
return 0;
}
0415412
2005/07/09(土) 02:56:26if ( strchr( buf, '\n' ) != NULL ) line--; // 改行で終わっていたら
ここいらないや。削除しといてください。
struct 使う必要性があまりなかったので、無理に使ってコードが長くなってしまった・・・
すみません。
0416デフォルトの名無しさん
2005/07/09(土) 02:59:39なんでわざわざCでそんなことやらなあかんのじゃ
出題者の発想の貧困の表れか
0417デフォルトの名無しさん
2005/07/09(土) 03:14:08別に数学だろうが三角木馬だろうが何でも良いんじゃ?
0418デフォルトの名無しさん
2005/07/09(土) 03:21:360419デフォルトの名無しさん
2005/07/09(土) 03:25:340420デフォルトの名無しさん
2005/07/09(土) 05:18:44……それなりに面白いと思うんだが。
0421デフォルトの名無しさん
2005/07/09(土) 06:17:010422デフォルトの名無しさん
2005/07/09(土) 09:01:541行1データの入力にしておけばパイプラインを組み合わせて色々できるしね。
0423デフォルトの名無しさん
2005/07/09(土) 09:27:02{
int i;
if (n < 2) return 0;
for (i = 2; i < n; i++)
if ((n % i) == 0) return 0;
return 1;
}
↓
if (n < 2) return 0;
if (n%2==0) return 1;
for (i = 3; i < n/2; i+=2)
if ((n % i) == 0) return 0;
return 1;
0424デフォルトの名無しさん
2005/07/09(土) 09:28:06はぁ?
0425デフォルトの名無しさん
2005/07/09(土) 09:58:09>struct 使う必要性があまりなかったので
>405
>1番左のアルファベットは名前で、次の列から順番に
>英語、数学、国語、理科、社会の点数を示しています。
もれなら
#define NUM_OF_SUB 5
struct _Person {
char name[NAME_LEN];
int sc[NUM_OF_SUB+1]; /* +1は合計の分 */
}
だな
>typedef struct _Person {
>char *name;
>int total;
>}Person;
0426354
2005/07/09(土) 13:06:21>>356
「確実に止まる」は満たしてないですが、「確率1で止まる」ことになるので、
それほど題意を曲げているわけではないですよ。
0427デフォルトの名無しさん
2005/07/09(土) 13:17:390428デフォルトの名無しさん
2005/07/09(土) 14:46:19何回以内に必ず停止する。
ならOKだと思うが、
何回操作しても停止しない可能性がある。
というのはダメだと思う。
さて、次のプログラムは必ず止るといえるか?
while (rand() % 10 == 0)
;
0429デフォルトの名無しさん
2005/07/09(土) 15:27:570430デフォルトの名無しさん
2005/07/09(土) 15:29:200431デフォルトの名無しさん
2005/07/09(土) 16:40:510432デフォルトの名無しさん
2005/07/09(土) 16:52:12一週間くらいは許容範囲だと思うが
0433デフォルトの名無しさん
2005/07/09(土) 17:09:570434デフォルトの名無しさん
2005/07/09(土) 18:15:05[2]期限 7月12日火曜日(午後5時
[3]どうかよろしくおねがいしますorz
会員番号 氏名 性別 生年月日
1 Noriko ITAKURA F 1983 7 25
2 Akemi UTSUNOMIYA F 1990 10 14
3 Hideki KINUGASA M 1987 9 16
4 Tomoko KISAKI F 1975 10 14
5 Takuya UMEMOTO M 1975 10 16
6 Jun-ichi AKAMATSU M 1982 3 16
7 Nobuta NONI M 1988 12 29
8 Shizuka MINOMOTO F 1989 1 9
会員 第一ピリオド 第二ピリオド 第三ピリオド
番号 ゲーム数 ゲーム数 ゲーム数
#1 #2 #3 #4 #5 #1 #2 #3 #4 #5 #1 #2 #3 #4 #5
1 6 3 5 7 9 8 8 5 2 0 3 7 6 5 2
2 1 2 4 7 10 10 10 3 7 10 5 7 7 8 9
3 2 4 2 5 2 1 8 10 3 6 6 7 6 8 5
4 5 8 0 10 0 9 8 9 10 10 5 5 5 3 5
5 1 2 3 4 5 6 7 8 9 10 9 8 7 9 5
6 8 8 4 8 3 6 7 2 8 6 8 9 8 2 0
7 6 6 1 6 6 1 6 7 4 9 1 8 10 5 3
8 7 3 4 7 2 8 9 7 3 2 4 5 10 9 7
上記ファイルmember_data.dat を読み込み会員氏名、生年月日、性別をソート表示するとともに、それらを各自のホームディレクトリ(またはカレントディレクトリにASCII形式で保存するプログラムを作成し、実行しなさい
なお、このプログラムでも構造体struct club_dt に対する構造体変数はグローバルとして宣言しないこと
0435デフォルトの名無しさん
2005/07/09(土) 18:15:57�@ファイル読み込みに関してはload()なる関数を定義し、その内部で実行させること
(fread()関数を用いよ)
�Aメニューを表示し、氏名によるアルファベット順ソートか生年月日による年齢順ソートかを選ばせる、適切な入力がなされるまで繰り返しメニュー表示を繰り返させること
<メニュー例>
MENU
1.Sorting in alphabetical order/2.Sorting in order of age.
Please input number:
アルファベット順ソートに関してはsort_al()なる関数を定義し、その内部でソート実行。表示。保存させる。ただし、ソートは会員の姓に基づき実行し、表示は氏名性別生年月日の順とする。保存時のファイル名は"member_data_al.dat"とすることゲーム成績は保存しなくてよい
<ソート結果、保存ファイル内容例>
Jun-ichi AKAMATSU M 1982 3 16
Noriko ITAKURA F 1983 7 25
Hideki KINUGASA M 1987 9 16
Tomoko KISAKI F 1975 10 14
Shizuka MINOMOTO F 1989 1 9
Nobuta NONI M 1988 12 29
Takuya UMEMOTO M 1975 10 16
Akemi UTSUNOMIYA F 1990 10 14
年齢順ソートに関してはsort_age()なる関数を定義し、その内部でソート実行・表示・保存させる。ただし、ソートは結果が高齢順となるようにし、表示は氏名性別生年月日の順とする。保存時のファイル名は" member_data_age.dat"とすることゲーム成績は保存しなくてよい
<ソート結果、保存ファイル内容例>
Tomoko KISAKI F 1975 10 14
Takuya UMEMOTO M 1975 10 16
Jun-ichi AKAMATSU M 1982 3 16
Noriko ITAKURA F 1983 7 25
Hideki KINUGASA M 1987 9 16
Nobuta NONI M 1988 12 29
Shizuka MINOMOTO F 1989 1 9
Akemi UTSUNOMIYA F 1990 10 14
以上です、おねがいします(;´・ω・`A
0436デフォルトの名無しさん
2005/07/09(土) 18:18:220437デフォルトの名無しさん
2005/07/09(土) 18:30:31それならちょっと飯食った後誰もやって無さそうなら練習がてら考えてみるよ
0438デフォルトの名無しさん
2005/07/09(土) 20:57:24[2]問題文:リストから削除する、関数del_listを作成する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/690.txt
★で囲った部分怪しいと思います。。
どうか修正お願いします_| ̄|○
[3]環境
[3.1]OS:XP
[3.2]コンパイラ:VC++ 6.0
[3.3]言語:C ++
[4]期限:7/10
0439デフォルトの名無しさん
2005/07/09(土) 21:17:52NODE *del_list(NODE deldata)
{
NODE **p;
for (p = &head; *p != NULL; p = &(*p)->next) {
if (strcmp(deldata.name, (*p)->name) == 0) {
NODE *res = *p;
*p = (*p)->next;
return res;
}
}
return NULL;
}
0440デフォルトの名無しさん
2005/07/09(土) 21:37:51>if★(strcmp(deldata.name,head->name)){★//リストの先頭なら
これだと「リストの先頭じゃないなら」になる。
>return ★head;★
return back;
>while(★p != NULL && strcmp(deldata.name,p->name) >= 0★){
... > 0
= があると、pが指すのが取り除くノードの次のノードになってしまう。
>★head->next= p;★
back->next = p->next;
0441デフォルトの名無しさん
2005/07/09(土) 22:41:06[2]問題文:
�@「jrand(j)」という関数を使って{1,2,...,j}の中からn個の数をランダムに取り出し、
配列変数に記憶させ、記憶させた内容を表示させるmainプログラムを書きなさい。
�Aint型配列とその大きさを入力変数として、最大値最小値を計算して返す関数プログラムを書きなさい
�B�Aを使って、�@で作ったプログラムに、配列データの最大値、最小値を計算して表示するプログラムを付け加えなさい。
[3]環境
[3.1]OS:XP
[3.2]コンパイラ:VC++ 6.0
[3.3]言語:C
[4]期限:7/10
どうぞよろしくおねがいします。
0442デフォルトの名無しさん
2005/07/09(土) 22:48:35仕様がよく分からん。nはどうやって与えるのか?
配列は大域変数でいいのかポインタで渡すのか?
0444デフォルトの名無しさん
2005/07/09(土) 23:06:41{1...10}の中から2000個の数をねぇ・・・
0445438
2005/07/09(土) 23:08:4804461/2
2005/07/09(土) 23:11:27#define N 2000
int jrand(int, int*);
int maximum(int *, int);
int minimum(int *, int);
int main(void) {
int i, src[N];
jrand(10, src);
for (i = 0; i < N; i++)
printf("%d\n", src[i]);
putchar('\n');
printf("最大値:%d\n最小値:%d", maximum(src, N), minimum(src, N));
return 0;
}
//エラー時、負を返す
int jrand(int j, int *buf) {
int i;
for (i = 0; i < N; i++)
while ((buf[i] = (random() * N) % (j + 1)) <= 0);
return 0;
}
04472/2
2005/07/09(土) 23:11:56int maximum(int *src, int nums) {
int max = src[0], i;
for (i = 1; i < nums; i++)
if (src[i] > max) max = src[i];
return max;
}
//最小値を返す
int minimum(int *src, int nums) {
int min = src[0], i;
for (i = 1; i < nums; i++)
if (src[i] < min) min = src[i];
return min;
}
作ったがNとJ逆じゃないか?まぁその辺は自分で修正してくれ
0448デフォルトの名無しさん
2005/07/09(土) 23:12:34最大値最小値を計算して返す関数?
けいさんってたしざん?ひきざん?二つをかえすって、いっぺんに二つ返すの?
それは引数のフラグでどちらを返すか判断するの?
0449デフォルトの名無しさん
2005/07/09(土) 23:20:01お礼忘れないようにネ!
0451デフォルトの名無しさん
2005/07/09(土) 23:32:22gccで普通にコンパイル通るんで見落としてたがエラー出たら
コメントをC89準拠にしてくれ
0452デフォルトの名無しさん
2005/07/09(土) 23:39:42#include <stdio.h>
#include <stdlib.h>
int jrand(int j) { return rand() % j + 1; }
void max_and_min(const int * arr, int length, int * pmax, int * pmin)
{
int i;
*pmax = *pmin = arr[0];
for (i = 1; i < length; i++) {
if (*pmax < arr[i]) *pmax = arr[i];
if (*pmin > arr[i]) *pmin = arr[i];
}
}
int main(void)
{
int arr[2000];
int i, length = sizeof(arr)/sizeof(arr[0]);
int max, min;
for (i = 0; i < length; i++) {
arr[i] = jrand(10);
}
max_and_min(arr, length, &max, &min);
printf("最大値:%d, 最小値:%d\n", max, min);
return 0;
}
0453デフォルトの名無しさん
2005/07/09(土) 23:40:500454デフォルトの名無しさん
2005/07/10(日) 00:55:05[2] 問題:
じぶんで書いたコード:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/691.txt
課題内容はこちら:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/692.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1
[3.3] 言語:C
[4] 期限:日曜PM5:00まで
[5] 制限:配列の内容はポインタで示さなければならないらしいですが
自分で書いたコードがどうしても変なのに表示されます
. ('A`#) イライラ
_| ̄ ̄||)_
/旦|――||// /|
| ̄ ̄ ̄ ̄ ̄| ̄| . |
|_____|三|/
3つめのedge_processingの関数がたぶんおかしいのだと思いますが
具体的にどこが間違ってるのかわかりません
分かる方いらしたら教えてください
0455デフォルトの名無しさん
2005/07/10(日) 01:21:42素直にncol,nrowを使おう。12x12確保してるんだから、main内ではそれを生かすこと。
それと、エッジ作るところでは外枠が上下左右1列ずつなんだから、
確保された目盛りは12x12のままだが、10x10の処理になる。
edge_processing(11,11, &m1[1][1], &m2[1][1]);
↓
edge_processing(nrow,ncol, &m1[0][0], &m2[0][0]);
void edge_processing(int nrow, int ncol, int *m1_p, int *m2_p)
{
int i,j;
for(i=0; i<nrow; i++){
for(j=0; j<ncol; j++){
if (i > 0 && i < nrow - 1 && j > 0 && j < ncol - 1) /* 追加:応急処置 */
*m2_p=*(m1_p + (i-1) * ncol + j)+*(m1_p + (i+1) * ncol + j)+*(m1_p + i * ncol + (j-1))+*(m1_p + i * ncol + (j+1))-4**(m1_p + i * ncol + j);
m1_p++; /* 追加 */
m2_p++;
}
}
}
0456デフォルトの名無しさん
2005/07/10(日) 01:23:03■ このスレッドは過去ログ倉庫に格納されています