>>947 一つのクラスに纏めることと、処理を混ぜることは等価ではない。
#仕事で>944のようなコードを書いているとしたら、とんだシンドラーシンドロームだ。
...なんか俺の所為? 荒れちゃってる? スマソ
int FindMaxPos(student_t s[], int n)
{
#define SCORE(s,i) (s[i].eng+s[i].math)
int i,maxPos=0;
for(i = 1; i < n; i++) if(SCORE(s,maxPos)<SCORE(s,i)) maxPos=i;
return maxPos;
}
これで勘弁してくれぃ
時々でいいからundefのことも思い出してください
>>954 構造体のメンバがアンダーバーで始まっているのはちょっと問題かも。
でも、qsort()を使うこと自体は悪くはないんでない?
943 :デフォルトの名無しさん :2006/06/25(日) 17:25:54
どうせなら逆順ソートにして最初の要素を取り出すようにすれば綺麗なのに。
>>957 粘着低学歴乙。これだから専門(ryは・・・
>>957 O(N)で済む作業をわざわざO(NlogN)にせんでもええやろ。
>959 は >956,954 宛
961 :
930:2006/06/25(日) 20:59:20
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
二つのテキストファイル(名前は任意。英単語のみからなる)を読み込み
strcmp関数を使い順番を判定しながら一つのテキストファイルにまとめよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 6/28まで
[5] その他の制限:strcmpを使うこと
【参】strcmp(Aの行、Bの行)を使い、その返り値(正負)によって順番を判定し、一つにまとめていく。
よってstrcmp(A, B)の関数値が負ならばAの文字列を先に出力し、
正ならばBの文字列を先に出力すればよい。
先にどちらかのテキストファイルがなくなるので、残ったファイルの処理を忘れないこと。
度々無駄にレスしてしまってすいませんorz
原文丸写しですのでこれで間違いないと思います。
962 :
デフォルトの名無しさん:2006/06/25(日) 21:24:33
[1] 授業単元:構造体
[2] 問題文:・構造体を用いて次のような文字列を入力し(300*90+6-50/10=)結果表示できる最大4桁入力の計算機を作成しなさい。
・演算子は優先順位を考慮し、ゼロで割った場合はエラーになること。
・数字の間に空白が入力されるとエラーになること。
・数字、演算子、=、空白のみで、その他が入力されるとエラーになること。
・最初に*,/が入力されるとエラーのなること。
[3] 環境
[3.1] OS:WINDOWS
[3.2] コンパイラ名とバージョン:よくわかりません
[3.3] 言語:C
[4] 期限:2006年6月30日まで
[5] その他の制限:特になし
963 :
デフォルトの名無しさん:2006/06/26(月) 10:03:57
最初からそれを出しておけば話が早かったかもね。
こんな感じか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2180.c ベクトルの要素数をD、vの次元nをN、wの次元mをMとして#defineしている。
データは標準入力から読み込み、D*N個の数値に続いて
D*M個の数値が来ることを想定している。
始めのD*N個がv、続くD*M個がwを表す。
>
すいません。↑を参考に考えたのですが
D要素というのがよくわかりません。
3要素があるものを3次元ベクトル
N要素があるものがN次元ベクトルというものと思っていますが
要素がDというのはどういうことなのでしょうか?
N*Dというのが理解できていません。
少し解説していただくとありがたいです。
>>962 #include<stdio.h>
#include<stdlib.h>
#include<setjmp.h>
#include<ctype.h>
jmp_buf buf;/* <- 構造体を用いた */
int parseAtom(char**s);
void skip(char**p){while(isspace(**p))++*p;}
int parseMul(char**s){int v = parseAtom(s);
for(;;)if(**s == '*')++*s,v*=parseAtom(s);
else if(**s=='/'){int v2;++*s;v2=parseAtom(s);
if(v2==0)longjmp(buf,1);v/=v2;}else return v;}
int parseAdd(char**s){int v = parseMul(s);
for(;;)if(**s == '+')++*s,v+=parseMul(s);
else if(**s=='-')++*s,v-=parseMul(s);else return v;}
int parseAtom(char**s){
int v;skip(s);if(**s=='('){*s+=1;v = parseMul(s);if(**s!=')')longjmp(buf,4);++*s;}
else{char*p=*s;v=strtol(p,s,0);if(p==*s)longjmp(buf,3);}skip(s);return v;}
int parse(char*s){int v = parseAdd(&s);if(*s != '=')longjmp(buf,2);return v;}
int main(){
char src[80],*errmsg[]={"ゼロ除算","=で式が終端していない","文法エラー",")の数が足りない"};
int err=setjmp(buf);if(err)printf("Error: %s\n",errmsg[err-1]);
else printf("%d\n",parse(gets(src)));return 0;}
>>963 (1,2,3) → 3次元
(1,2,3) … 1要素
(2,3,4) … 2要素
(3,1,2) … 3要素
:
(5,6,2) … N要素
(2,3,5) … 1要素
(2,8,4) … 2要素
(3,4,6) … 3要素
:
(3,5,2) … M要素
OK?
966 :
デフォルトの名無しさん:2006/06/26(月) 12:46:37
>965
なんとなくわかったような・・・
これだと963に書いている
N次元がN要素で
Dが次元ですか??
頭悪すぎ。
968 :
デフォルトの名無しさん:2006/06/26(月) 14:34:10
>967
頭悪いのでもう少し教えてください。
969 :
デフォルトの名無しさん:2006/06/26(月) 14:39:34
[1] 授業単元:プログラミング
[2] 問題文 引数の階乗を計算するdouble型の関数を作り、1から10までの階乗を表示するプログラムを作ってください
[3] 環境
[3.1] OS:XPです。。
[3.2] コンパイラ名とバージョン:よくわからないんですけどgccだと思います。
[3.3] 言語:Cです
[4] 期限:できれば今日中で(>_<)
[5]最近プログラミングを始めた初心者なのですが
授業中居眠りをしたらまったく分からなくなってしまいましたo(;△;)o。。。
友達と一緒にがんばってたのですが解決できずにここに質問してしまいました(>へ<)、
どなたかお願いします(*^_^*)
#include<stdio.h>
void kansuu(double hikisuu);
int main(void)
{kansuu(10.0);return 0;}
void kansuu(double hikisuu)
{int i;double kekka,temp,t;kekka=1;
for(i=1;i<=hikisuu;i++)
{kekka *= i;}printf("%f",kekka);}
なんでdouble型?
>>969 #include <stdio.h>
double kaijo(double n) {
if(n<=1) return 1;
return n*kaijo(n-1);
}
main() {
int i;
for(i=10; i>0; i--) printf("%2d! = %lf \n",i,kaijo(i));
}
>>969 #include <stdio.h>
double kaijo(double n) {
static double t=1;
return t*=(n++);}
main() {
int i;
for(i=1; i<=10; i++) printf("%2d! = %lf \n",i,kaijo(i));}
>>969 #include<stdio.h>
#include<math.h>
double fact(double n){
return tgamma(n+1);
}
int main(){
int i;
for(i=1;i<=10;++i)
printf("%d! = %.0f\n",i,fact(i));
return 0;
}
974 :
デフォルトの名無しさん:2006/06/26(月) 22:06:12
>964
ありがとうございました。
でも、ちょっとむずかしい・・・
>>963 要素数というのはC言語的な配列の要素数という意味で書いた。
次元は線型空間的な意味で、R^Dの部分空間の次元を意味している。
つまり、部分空間vを張る基底があったとき、その基底をなすベクトルの数がN。
Mについても同じ。
なので
>>965の説明とは逆になってしまってる。
また、D,N,Mの関係はD>=NかつD>=Mになると思われる。
3次元がどこから出てきたのかわからないけど、D=3だと少ないような。
976 :
デフォルトの名無しさん:2006/06/26(月) 22:41:28
[1]授業単元:データ構造、アルゴリズム
[2]問題文:与えられたmain関数の中で呼び出される関数を完成させプログラムを実行させる。(別のファイルに適当な番号と名前、点数を3つで1つのセットをいくつか用意し、それをソートや二分探索して結果を表示する。)
struct student{
int num;
char name[10];
int score;
};
main(){
if((Num=read_file("ファイル名"))==0)
exit(0);
quick_sort(Student,0,Num-1);
while(1){
printf("番号を入力してください。");
if(scanf("%d",&key)==EOF)
break;
if((i=bi_search(key))!=-1)
prinf("番号=%d,名前=%s,点数=%d\n",Student[i].num,Student[i].name,Student[i].score);
else
printf("データがありません。\n");
}
}
[3]環境:
[3.1]OS:Linux
[3.2]コンパイラ名とバージョン:バージョンは分からないのですが、gccでお願いします。
[3.3]言語:Cでお願いします。
[4]期限:2006年7月4日でお願いします。
[5]その他の制限:Cはだいたい習ったのですが、今いち理解できてなくて(TωT)構造体やファイルのことなどがよく分からないので誰かお願いします\(。´□`・。\)
>>976 ・以下の関数を作成すると言うことか?
read_file()
quick_sort()
bi_search()
・これらの関数仕様は変更してはいけないのか?
・struct studentにはscoreしかないが、「点数を3つ」ということはこの構造体を変更すると言うことか?
・その「別のファイル」は用意できないのか? それくらいならできるだろ。
ヒント:3つで1つのセット
>>977 本人じゃないけど「与えられたmain関数の中で呼び出される関数を完成させ」って
言ってるんだから、その仕様の関数を作る課題じゃないか?
>>977 確かに、
int read_file(const char file_name, struct student **pstudent, int *num);
とかにしたいところではあるな。
981 :
980:2006/06/26(月) 23:24:16
重大な間違いを見つけたが訂正はせん。
982 :
デフォルトの名無しさん:2006/06/27(火) 02:31:45
>975
ありがとうございました。
もう少し考えて頭を整理してみます。
983 :
超初心者:2006/06/27(火) 10:57:44
[1] 授業単元:情報処理基礎演習
[2] 問題文:順列・組合せ
キーボードから2つの整数値nとmを入力し、n個の中から
m個取り出すときの順列と組合せを求める組合せを作成して
ください。ただし、nとmの入力処理は、処理可能な範囲の
範囲が入力されるまで繰り返すようなアルゴリズムにしてく
ださい。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:よくわかりません。
[3.3] 言語:C
[4] 期限:28日水曜日午後5時
[5] その他の制限:最近defineやdo〜while文を習った。
[1] 授業単元:C言語プログラム
[2] 問題文
次の処理を行うプログラムを作成しなさい。
char型の配列strを用意し、キーボードから英数字の文字列を入力する。
格納された文字列に、アルファベットの大文字がある場合、すべて小文字に変換する。
文字列strを画面に出力する。
[3] 環境
[3.1] OS: (Windows xp [3.2] visual studio2003 [3.3] C
4]期限: ([2006年6月28日12:00まで]
[5] 配列、ループ,ポインタ
#include <stdio.h>
int main(void){
char str[256], *p = str;
scanf("%s", str);
while(*p){
if (*p >= 'A' && *p <= 'Z'){
*p += 'a' - 'A';
}
p++;
}
printf("%s\n", str);
return 0;
}
986 :
980:2006/06/27(火) 15:03:36
>>983 > 順列と組合せを求める組合せを作成
っていったいどういう意味だ?
うお、名前欄が残ってた orz
989 :
988:2006/06/27(火) 16:21:34
*** 85,91 ****
pos = (pos + num) / 2;
} else {
if (pos == 0) {
! return 0;
}
pos = pos / 2;
}
--- 85,91 ----
pos = (pos + num) / 2;
} else {
if (pos == 0) {
! return -1;
}
pos = pos / 2;
}
990 :
超初心者:2006/06/27(火) 18:08:19
ごめんなさい。
『順列と組合せを求めるプログラムを作成』です。
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。