#include <windows.h> int main() { MessageBox(0,"スレ立て乙"," ",0); return 0; }
#include<stdio.h>
int main(void){
while(1){
puts("
>>1 スレ立て乙");
}
return 0;
}
class otu{ public static void main(String arg[]){ while(true){ System.out.println("スレ立て乙"); } }
りょーかい・・・って、当たり前だけど、ヘッダだけじゃ、実行ファイル作れないのよね・・・(^^;;
HALOでコブナントぶっ殺してくるからあとは頑張って
9 :
9 :2006/01/18(水) 04:53:09
[1] 授業単元:プログラミングB [2] 問題文(含コード&リンク): #include <stdio.h> int ch; void getch0(void) { ch = getchar(); } int expression(void); int factor(void) { int val; if(ch >= '0' && ch <= '9') { val = ch-'0'; getch0(); } else if(ch == '(') { getch0(); val = expression(); getch0(); } return val; } int term(void) { int val; val = factor(); while(ch == '*') { getch0(); val = val * factor(); } return val; }
10 :
9 :2006/01/18(水) 04:54:00
int expression(void) { int val; val = term(); while(ch == '+') { getch0(); val = val + term(); } return val; } int main(void) { printf("expression? "); getch0(); printf("value=%d\n", expression()); } この計算プログラムにおいて,2*(3+(4+5)*6) を計算するとき, どういう順番で,expression, term, factorを呼び出して計算がなされて, 最終的な答えに行き着くのかを説明しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月20日まで 何とぞお手柔らかにお願いします!
11 :
9 :2006/01/18(水) 04:57:56
慌てず急いで正確にな
12 :
9 :2006/01/18(水) 04:59:30
ちゃんとやれよ。
13 :
9 ◆jcfgG7aJMA :2006/01/18(水) 05:07:11
>>9-10 浅学な我輩にはなかなか面白いプログラムだったよ
2*(3+(4+5)*6)
expression //mainより 戻り値117
term
factor
factor
expression //最初の( , 戻り値57
term
factor
term
factor
expression //2番目の( , 戻り値9
term
factor
term
factor
factor
ごめ//mainより 戻り値117 → 戻り値114 何やってんだか
16 :
9 :2006/01/18(水) 07:55:04
>>14-15 どうもありがとうございます。そんなにややこしいんですか!・・・
あの〜、ちなみにこのプログラムってどのコマンドで数字を読み取ってるんですか?
scanf() みたいなものが見当たらないので・・・
慣れてる人は簡単に思うけど俺にとっては結構面白いプログラムだったね 数式を受け取ってどの様に処理してるかは、入力ストリームの話題になるんだけど 文字を受けとる関数はgetch0()関数のgetchar()関数 こいつは標準入力デバイスのバッファからEOFになるまで1文字1文字を読み込む関数で 例えば次のプログラムを見ると int ch; while( (ch=getchar())!=EOF ) printf("%c %d\n",ch,ch); getcharの動作が良くわかる 次に int ch while( (ch=getchar())!=EOF ){ printf("%c %d\n",ch,ch); fflush(stdin); } を実行してみると"標準入力デバイスのバッファってのが良くわかるはず 適当にぐぐって
括弧が閉じてないと無限ループ ァ ∧_∧ ァ,、 ,、'` ( ´∀`) ,、'` '` ( ⊃ ⊂) '`
19 :
9 :2006/01/18(水) 08:33:55
>>17 丁寧にどうもありです。調べて理解できるようにがんばります!
[1] 授業単元: 大学のゼミ
[2] 問題文(含コード&リンク):
問題文自体は無いのですが、コンソール画面上で動く、サーバーとクライアントの通信をする
簡単なゲームプログラムに組み込むタイマー(カウントダウン)を作りたいのです。
仕様としては、サーバー側プログラムの起動時に、引数としてint型で時間の「分」(min)を渡すと、ゲームが開始し、
ゲーム中は画面の端に「mm:ss」と表示してカウントダウンしていく感じにしたいです。
そのタイマーが00:00になったとき、ゲームが終了するようにしたいです。
[3] 環境
[3.1] OS: Linux(RedHat7)
[3.2] コンパイラ名とバージョン: gcc (付属のもので、バージョンは分かりません)
[3.3] 言語: C
[4] 期限: 2006年1月18日 13時15分
[5] その他の制限: 標準ライブラリとmylib.hというヘッダを利用します。
【添付】
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1491.zip mylib.hは添付のファイルの中にあり、純粋にコンパイルしたもののみ使う形です。
ゲーム自体は、添付のファイル内にあるtagというフォルダの中にある鬼ごっこプログラムです。
(他のフォルダ内のものは今回は使わないです。)
よろしくお願いしますm(_ _)m
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): @ 変数x,yにそれぞれ4と9を代入して,x/yを計算し,商sと余りrを出力するプログラムを作 成せよ。 A sを入力し,sから100までの整数のうち7の倍数となる整数を出力するプログラムをfor文ま たはwhile文を用いて作成せよ。 B n円を入力した後,画面に「1・ドル 2・ユーロ 3・ウォン」と表示され,1,2,3のいず れかの番号を入力すると,その指定した通貨の額にn円を換算するプログラムを作成せよ。 なお、為替レートは,ネットなどで調べること。 C n人分について国語,社会,数学,理科,英語の5科目の得点を入力し,それぞれの合計点を 計算した後,n人を合計点の小さい順に並び替え,出力するプログラムを作成せよ。ただし ,各科目の変数名をko,sy,su,ri,eiとし,配列名はtokutenとすること。 D 10文字以内の文字列(英字)を入力し,母音(a,i,u,e,o)を取り除いた文字列を出力 するプログラムを作成せよ。(例:momotarou → mmtr) [3] 環境 [3.1] OS: WindowsXP [3.2] すいません。わかりません [3.3] 言語: C [4] 期限: [2006年01月25日24:00まで] [5] その他の制限:特にありません。 5問もあって申し訳ありませんが、初心者なので難しいです。よろしくお願いします。
24 :
22 :2006/01/18(水) 10:48:48
>>23 過去ログ読みました。
Aはできました!ありがとうございます。@はまだです。
BCDも個別で出てるはず @ぐらいはがんがれ。
ウォンが気に食わないのでその課題はしたくないです
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):50人のアルファベット表記の名前を、 (1)マージソート (2)クイックソート で辞書順にソートして出力する プログラムを作成せよ。各プログラムのアルゴリズムも記述すること。 50人の名前は二次元配列で実現し、プログラム内で設定すること(ファイルから読み込むなどの処理は不要)。 [3] 環境 [3.1] OS: WindowsXP Pro [3.2] コンパイラ名とバージョン: Borland C 5.5 [3.3] 言語: C [4] 期限: 2006年1月18日19:00まで [5] その他の制限: 特にありません。時間が迫っておりますのでよろしくお願いいたします。
28 :
23 :2006/01/18(水) 11:29:46
作った覚えはあるんだが…
微妙に改変されてるな。
実は
>>22 が宿題先生じゃないのか?
29 :
23 :2006/01/18(水) 11:40:29
>>22 D小文字aiueoのみ対応
#include <stdio.h>
int main()
{
char s[10+1],*p;
fgets(s,10+1,stdin);
p=s;
while(*p!='\0'){
if(*p!='a'&&*p!='i'&&*p!='u'&&*p!='e'&&*p!='o')
putchar(*p);
*p++;
}
return 0;
}
30 :
loi ◆qMuXz8UNv6 :2006/01/18(水) 11:56:03
[1] プログラミング入門 [2]• ファイルから数値データを読み込み,その数値の平均をファイルに書き込むプログラ ムを作成する • 数値データは全部で100行(ファイルには実際に100 行以上存在している) • 数値データの入っているファイルは授業用HP にある.なおデータは実数である. ファイル名: kadai.dat • 平均を書き込むファイル名はheikin.dat とする.平均はすべてのデータ(600個)の平 均とする [3] 環境 [3.1] Windows [3.2] コマンドプロンプト 秀丸 [3.3]C [4] 本日中 [5] 正直まったくわかりません。というか授業にでていないです。 でも単位が欲しいです。どうすれば課題を提出できるか教えてくれませんか? お願いします。
31 :
loi ◆qMuXz8UNv6 :2006/01/18(水) 11:57:36
以下を参考にしてください include "stdio.h" /* file_read 関数は【】内を記述する */ double file_read( void ) { 【 】 int i, j; double data[600]; double heikin; 【 】 for( i=0 ; i<600 ; i+=6 ) { for( j=0 ; j<6 ; j++ ) 【 】 } for( i=0, heikin=0.0 ; i<600 ; i++ ) { heikin += data[i]; } heikin /= 600.0; printf("heikin -> %lf\n",heikin); 【 】 return heikin; } /* file_write 関数の中身を全部記述すること */ void file_write( double heikin ) { /* ここの中身を記述する */ }
授業に出てないのなら理由はどうあれ単位もらえないくて当たり前
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): [T] n人分について国語,社会,数学,理科,英語の5科目の得点を入力し, 各科目の最高点を出力するプログラムを作成せよ。 ただし,各科目の配列名をjap,soci,math,sci,engとすること。 [U] 5人の学生の4科目の試験の得点(1科目につき満点は100点)を入力する. 1人分入力する毎に「合計得点が240点以上で, かつ各得点が40点以上であるとき合格とする」の条件で,合否を判定せよ. [3] 環境 [3.1] OS: WindowsXP [3.2] 初心者なんでわかりません。 [3.3] 言語: C かな。 [4] 期限: [2006年01月20日まで] C言語難しくて、僕には全くわからないです。 よろしくお願いします!!!
>>30 kadai.dat っていうやつをアップして
36 :
デフォルトの名無しさん :2006/01/18(水) 12:27:57
#include<stdio.h> main() { int dec, bit, coef=0; char hex[11]={0}, endchar; do{ printf("10進法での数字を入力してください"); scanf("%d%c",&dec,&endchar); printf("10進法の%3d\tは",dec); while(dec!=0) { bit=dec%16; dec/=16; hex[coef] = "0123456789ABCDEF"[bit]; ++coef; } printf("16進法では%10s\n",hex); return; } while(endchar!='*'); } だと210がD2じゃなくて2Dってでるんですけどどこが間違ってますか?
>>36 int a = 210;
printf( "\X\n", a );
japか なめんじゃねーぞ糞が
>>36 あ、
>>37 は
printf( "%X\n", a );
ね。失礼。
41 :
36 :2006/01/18(水) 13:37:52
>>40 さん、すいません
質問の仕方が悪かったです、
210だったら2D、258だったら201、280だったら811
というように1桁目>2桁目>3桁目というふうに出力されるのを直したくて質問しました。
前スレの854さんに教えていただいたのを実際に使うとこうなってしまい、今日提出なんで焦ってます。
あせってるは自業自得
coef=0 ===> coef=9 ++coef ===> --coef hex) ===> hex + coef + 1)
44 :
デフォルトの名無しさん :2006/01/18(水) 14:17:36
10桁での一次連立方程式の解き方をおしえてください。
45 :
40 :2006/01/18(水) 14:20:40
>>41 printf のフォーマット使いたくないならこれでどう?
#include <stdio.h>
char *convert_base( unsigned n, unsigned base )
{
static char buf[ 1024 ];
char *end = buf + sizeof(buf) - 1;
char *expression = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
*end-- = '\0';
while ( buf != end ) {
*end = expression[ n%base ];
if ( n < base ) break;
n /= base; --end;
}
return end;
}
int main( void )
{
char buf[32];
int a;
while (1) {
fgets( buf, sizeof(buf), stdin );
if ( buf[0] == 'q' ) break;
sscanf( buf, "%d", &a );
printf( " %d\t%s", a, convert_base(a,2) );
printf( "\t%s", convert_base(a,8) );
printf( "\t%s\n", convert_base(a,16) );
}
}
>>36 これで良いや。
#include<stdio.h>
int main()
{
int dec, bit, coef;
char hex[11]={0}, endchar;
do{
printf("10進法での数字を入力してください");
scanf("%d%c",&dec,&endchar);
printf("10進法の%3d\tは",dec);
for(coef=10;dec;dec/=16){
bit = dec%16;
hex[--coef] = bit["0123456789ABCDEF"];
}
printf("16進法では%10s\n",hex+coef);
}while(endchar!='*');
return 0;
}
48 :
30 :2006/01/18(水) 15:22:40
kadai.datです 1.3 4 0 0 36.179598 36.179598 1.3 4 0 0.1 36.238542 36.238542 1.3 4 0 0.2 36.238542 36.238542 1.3 4 0 0.3 36.238542 36.238542 1.3 4 0 0.4 35.268814 35.268814 1.3 4 0 0.5 35.022824 35.022824 1.3 4 0 0.6 36.626796 36.626796 1.3 4 0 0.7 38.423352 38.423352 1.3 4 0 0.8 42.404821 42.404821 1.3 4 0 0.9 50.056847 50.056847 1.3 4 0 1 56.29155 56.29155 1.3 4 0 1.1 63.364309 63.364309 1.3 4 0 1.2 69.133599 69.133599 1.3 4 0 1.3 73.891168 73.891168 1.3 4 0 1.4 77.865372 77.865372 1.3 4 0.1 0.1 36.238542 36.238542 1.3 4 0.1 0.2 36.238542 36.238542 1.3 4 0.1 0.3 36.238542 36.238542 1.3 4 0.1 0.4 35.126008 35.126008 1.3 4 0.1 0.5 35.149002 35.149002 1.3 4 0.1 0.6 37.415956 37.415956 1.3 4 0.1 0.7 39.538102 39.538102 1.3 4 0.1 0.8 44.041386 44.041386 1.3 4 0.1 0.9 52.435181 52.435181 1.3 4 0.1 1 58.998314 58.998314 1.3 4 0.1 1.1 66.336784 66.336784 1.3 4 0.1 1.2 72.194806 72.194806 1.3 4 0.1 1.3 76.944402 76.944402 1.3 4 0.1 1.4 80.857437 80.857437
49 :
30 :2006/01/18(水) 15:24:17
1.3 4 0.2 0.2 36.238542 36.238542 1.3 4 0.2 0.3 36.238542 36.238542 1.3 4 0.2 0.4 35.003256 35.003256 1.3 4 0.2 0.5 35.544757 35.544757 1.3 4 0.2 0.6 38.752023 38.752023 1.3 4 0.2 0.7 41.186905 41.186905 1.3 4 0.2 0.8 46.237783 46.237783 1.3 4 0.2 0.9 55.412151 55.412151 1.3 4 0.2 1 62.247766 62.247766 1.3 4 0.2 1.1 69.790496 69.790496 1.3 4 0.2 1.2 75.667226 75.667226 1.3 4 0.2 1.3 80.342333 80.342333 1.3 4 0.2 1.4 84.136243 84.136243 1.3 4 0.3 0.3 36.238542 36.238542 1.3 4 0.3 0.4 35.452965 35.452965 1.3 4 0.3 0.5 36.77885 36.77885 1.3 4 0.3 0.6 41.180944 41.180944 1.3 4 0.3 0.7 43.711862 43.711862 1.3 4 0.3 0.8 49.223951 49.223951 1.3 4 0.3 0.9 59.133336 59.133336 1.3 4 0.3 1 66.113423 66.113423 1.3 4 0.3 1.1 73.747224 73.747224 1.3 4 0.3 1.2 79.538658 79.538658 1.3 4 0.3 1.3 84.05313 84.05313 1.3 4 0.3 1.4 87.659236 87.659236
50 :
30 :2006/01/18(水) 15:25:13
1.3 4 0.4 0.4 38.388558 38.388558 1.3 4 0.4 0.5 38.388558 38.388558 1.3 4 0.4 0.6 44.500205 44.500205 1.3 4 0.4 0.7 46.779962 46.779962 1.3 4 0.4 0.8 52.761729 52.761729 1.3 4 0.4 0.9 63.546086 63.546086 1.3 4 0.4 1 70.61663 70.61663 1.3 4 0.4 1.1 78.302961 78.302961 1.3 4 0.4 1.2 83.945404 83.945404 1.3 4 0.4 1.3 88.23714 88.23714 1.3 4 0.4 1.4 91.595744 91.595744 1.3 4 0.5 0.5 44.451739 44.451739 1.3 4 0.5 0.6 51.347464 51.347464 1.3 4 0.5 0.7 51.347464 51.347464 1.3 4 0.5 0.8 57.603556 57.603556 1.3 4 0.5 0.9 69.419834 69.419834 1.3 4 0.5 1 76.38392 76.38392 1.3 4 0.5 1.1 83.987591 83.987591 1.3 4 0.5 1.2 89.329809 89.329809 1.3 4 0.5 1.3 93.259877 93.259877 1.3 4 0.5 1.4 96.259406 96.259406
51 :
30 :2006/01/18(水) 15:25:54
1.3 4 0.6 0.6 51.347464 51.347464 1.3 4 0.6 0.7 51.347464 51.347464 1.3 4 0.6 0.8 60.812886 60.812886 1.3 4 0.6 0.9 75.35268 75.35268 1.3 4 0.6 1 82.39328 82.39328 1.3 4 0.6 1.1 90.047312 90.047312 1.3 4 0.6 1.2 95.065067 95.065067 1.3 4 0.6 1.3 98.574162 98.574162 1.3 4 0.6 1.4 101.152511 101.152511 1.3 4 0.7 0.7 51.347464 51.347464 1.3 4 0.7 0.8 70.349869 70.349869 1.3 4 0.7 0.9 86.527557 86.527557 1.3 4 0.7 1 91.687356 91.687356 1.3 4 0.7 1.1 98.379777 98.379777 1.3 4 0.7 1.2 102.38411 102.38411 1.3 4 0.7 1.3 105.012379 105.012379 1.3 4 0.7 1.4 106.860022 106.860022
52 :
30 :2006/01/18(水) 15:26:29
1.3 4 0.8 0.8 100.859711 100.859711 1.3 4 0.8 0.9 100.859711 100.859711 1.3 4 0.8 1 100.859711 100.859711 1.3 4 0.8 1.1 106.202542 106.202542 1.3 4 0.8 1.2 108.970987 108.970987 1.3 4 0.8 1.3 110.632941 110.632941 1.3 4 0.8 1.4 111.735982 111.735982 1.3 4 0.9 0.9 100.859711 100.859711 1.3 4 0.9 1 100.859711 100.859711 1.3 4 0.9 1.1 108.970987 108.970987 1.3 4 0.9 1.2 111.735982 111.735982 1.3 4 0.9 1.3 113.099775 113.099775 1.3 4 0.9 1.4 113.904037 113.904037 1.3 4 1 1 100.859711 100.859711 1.3 4 1 1.1 116.846683 116.846683 1.3 4 1 1.2 116.846683 116.846683 1.3 4 1 1.3 116.846683 116.846683 1.3 4 1 1.4 116.846683 116.846683
大変だ、荒らされてる
>>30 #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
static double next_double( FILE *fp, double *d )
{
char buf[256], *p = buf, c;
while ( !isdigit( c = fgetc(fp) ) )
if ( c == EOF ) return 0;
ungetc( c, fp );
while ( isdigit( c=fgetc(fp) ) || c == '.' )
*(p++) = c;
*p = 0;
*d = atof( buf );
return 1;
}
int main( void )
{
char *filename = "kadai.dat";
FILE *fp;
double sum = 0, d;
unsigned num = 0;
if ( NULL == ( fp = fopen( filename, "r" ))) return 1;
while ( next_double( fp, &d ) ) { sum += d; ++num; }
printf( "Sum: %lf\nNum: %u\nAverage: %lf\n", sum, num, (sum/num) );
fclose( fp );
return 0;
}
間違った 4行目: static double next_double( FILE *fp, double *d ) じゃなくて 訂正 : static int next_double( FILE *fp, double *d )
56 :
デフォルトの名無しさん :2006/01/18(水) 17:05:10
>>21 うん、大学の宿題だけど・・・ほとんどの人がそうじゃないの?
57 :
デフォルトの名無しさん :2006/01/18(水) 17:14:37
多桁の割り算のプログラムが作れません。助けてください。
助けて欲しかったらちゃんとテンプレに従って内容を書けよ。
すみませんが>27をお願いします、これで単位が決まるんです
50人分の名前考えるとか無理
マージとクイック程度の物が理解できないのに アルゴリズムの単位が貰えるなんてどう考えてもおかしいよな
んでクイックソートでqsort使ったらだめだとか言うんだろ
64 :
デフォルトの名無しさん :2006/01/18(水) 18:43:10
言うだけ言って27はどっか逝ったなw
>>63 一応、あれの実装は処理系定義じゃなかったっけ?
>>65 ISO/IEC 9899:1999には、その件については何も書かれてないな。
クイックソートを単方向リストで実装したときは死んだ。 かなり頑張った。
68 :
デフォルトの名無しさん :2006/01/18(水) 19:34:32
[1] 授業単元:プログラミング [2] 問題文: 1.入力用テキストファイルに番号、2科目の得点(0〜100) を用意する。データ数は5。 2.↑のデータを出力用テキストファイルに出力する。 3.副プログラムを利用し、2科目それぞれの合計点と平均点を出力ファイル の2.の続きに出力する。(ポインタ変数を扱い、主プログラム とは別に記憶し、includeする。) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: わかりません [3.3] 言語: C++ [4] 期限:本日中 たらない頭を使って考えましたがわかりませんでした。 よろしくお願いします!!
いますよ、所用でいなかっただけです この他にもあって他は出来てるんですがどうしてもこれだけできないんです
>>69 来年、もう一度受けろや
そんなのが理解できないならオワットル
>>70 ここで出てる課題ってクイックソートよりだいぶ程度が低いのが多いけどな。
クイックソートtは結構面倒くさい。
むしろクイックソートが自力で実装できるようになれば、Cは大体理解できてると思う。
>>69 んなら、50人分のアルファベット表記の名前リストだけ作って
>>1 の所にでもうpしれ。
手持ちのマージソートルーチンとクイックソートルーチンを
くっつけてみるから。
73 :
むう :2006/01/18(水) 20:10:47
[1] 授業単元:Cプログラム [2] 問題文:配列[2][2]にそれぞれ0か1が格納されている。 [0][0] [1][0] [2][0] [0][1] [1][1] [2][1] [0][2] [1][2] [2][2] 0なら上下左右に移動でき、1なら移動できない。そのとき現在地と目的地を入力し 目的地まで最短で移動するプログラムを作成せよ。出力は「↑に移動する。→に移動する。→に移動する。↑に移動する」というようにする事 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual Windows For BC++ [3.3] 言語:C [4] 期限:無期限 よろしくおねがいします
74 :
デフォルトの名無しさん :2006/01/18(水) 20:10:55
[1] 授業単元: 情報処理基礎 [2] 問題文: 整列されたn 個の数列から二分探索でデータを探索する場合、 与えるデータによって比較する回数は異なるはずである。 そこで、nを1〜10万まで変化させ、その都度、最悪の比較回数を求めるプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限: 1月23日 [5] その他の制限:
75 :
デフォルトの名無しさん :2006/01/18(水) 20:11:37
よろしくお願いします
76 :
デフォルトの名無しさん :2006/01/18(水) 20:14:46
[1] 授業単元: 情報処理基礎 [2] 問題文:CGIを使ったプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限: 1月23日 [5] その他の制限: CGIを使っていればどういうプログラムでもいいです。 よく分からないので、お願いいたします。
78 :
デフォルトの名無しさん :2006/01/18(水) 20:18:38
79 :
デフォルトの名無しさん :2006/01/18(水) 20:21:11
>>77 もう少し複雑なプログラムとかもありますか?
>>76 に書き忘れたのですが、あと2つCGIプログラムを作らない
といけないらしいです
ちゃんと内容を書け。
>>68 C++?
Cじゃないの?
本当にC++?
ウソじゃない?
83 :
デフォルトの名無しさん :2006/01/18(水) 21:43:27
>>83 C と C++ の区別が出来てますか、ということね。
文字を出力するのに使うのは printf と習ったか、cout と習ったか、どっち?
85 :
デフォルトの名無しさん :2006/01/18(水) 21:51:25
#include <:iostream.h> と習いましたか? #include <iostream> と習いましたか?
>>84 この問題を解くのに、
そんなにCとC++の違いが影響するのか?
違ってたらエラーが出ます。直してください。と言われる<影響
言語 C++って書いてあるからC++で解答したら、 やっぱりCで書いてって言われたことある。
90 :
デフォルトの名無しさん :2006/01/18(水) 21:57:12
>>86 #include<iostream.h>と習いました
標準C++は、普及してないみたいだな。・・・と、いうわけで、C++の人、よろしく。 標準C(C89)はけっこう普及しとるようだが。
>>74 2分探索 真面目に書くのメンドクセ。
#include<stdio.h>
unsigned ulog2(unsigned int n){
unsigned r=0,i=16;
do if(n>>i)n>>=i,r+=i;while(i>>=1);
return r;
}
int main(void){
int i;
printf("数列の要素数 最悪の比較回数\n");
for(i=1;i<=100000;++i)printf("%12d%16d\n",i,ulog2(i)+1);
return 0;
}
94 :
デフォルトの名無しさん :2006/01/18(水) 22:42:17
[1] 授業単元: 情報処理研究 EUCコードでひらがな「あ」は(164,162)の2バイトです。 文字→EUCコード数値への変換プログラムはできたのですが、 逆(EUCコード数値→文字)ができません・・・ つまり (164,162) を入力して「あ」に変換するにはどうすればいいのでしょうか? お願いします。
95 :
デフォルトの名無しさん :2006/01/18(水) 22:45:52
>>92 いわれのない非難だが、コラっぽい笑顔がムカつく_| ̄|○
名前忘れた関西系の大御所漫才師みたい
>>94 これでいいのかな?
int main(void)
{
int a,b;
::printf("code1 code2->");
::scanf("%d%d",&a,&b);
char s[3] = {(char)a,(char)b,0};
::printf("->");
::printf(s);
::system("pause");
return 0;
}
>>94 #include <stdio.h>
int main( void )
{
char a = 164, b = 162;
printf("%c%c\n", a, b );
return 0;
}
>>96 気になるから是が非でも名前を思い出してくれ。
てゆかこの画像有名だよね。
system("pause") って何?
>>97 って、DOS プロンプトで EUC でるかよ
「これでいい?」とかいって、いいわけない
鶴瓶w
ツッコミ激しいな。 systemは消して。
106 :
デフォルトの名無しさん :2006/01/18(水) 23:23:12
1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): list<int> 型の要素全ての和を求める関数 int sumlist(list<int>&) を定義して下さい. #include <iostream> #include <list> using namespace std; int main(){ list<int> lst; for(int i=0 ; i < 10 ; i++)lst.push_back(i); cout << "size =" << lst.size() << endl; for(list<int>::iterator it = lst.begin(); it != lst.end() ; ++it) cout << *it << ' '; cout << endl; for(list<int>::iterator it = lst.begin(); it != lst.end() ;){ if((*it) % 3 == 0){ it = lst.erase(it); } else { ++it; } } for(list<int>::iterator it = lst.begin(); it != lst.end() ; ++it) cout << *it << ' '; cout << endl; return 0;} [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: マイクロソフトビジュアルスタジオ [3.3] 言語: C++ [4] 期限: 1月23日 [5] その他の制限:
107 :
むう :2006/01/18(水) 23:26:54
>>73 すいません。スルーされそうなのでどなたか
お願いします。
自分では何やっていいか全くわからずです…。
友達は「幅優先探索」使えばいーんじゃねー?とか言ってたんですが
それも意味不明です・・。
>>107 幅優先探索ってのはある地点(A)から1回で移動可能な全ての場所に行ってみて
その中でゴールがあれば終了。この時点でA→どこかってのが全部探索できた
次にゴールにどれも達してなければ、それぞれの地点(Bn)からまた1回で移動できる
全ての地点へ行ってみて同様の判定をする。これでA→Bn→どっかを探索終了
これを繰り返していくのが幅優先探索
対照的なのに深さ優先ってのがあるが、これはとりあえずA→Bと決めたら
後はそれをひたすら終端まで探った上で、ダメなら一段戻ってまた最後まで
ってのをひたすら繰り返す
無期限ならとりあえず自力で思うように作ってみれ
そっちの方が自分のためにもなる
>>106 前スレで俺が答えた
あれで不満なら氏ね
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): 学籍番号と試験の点数のペアーを入力するものとする(「0 0」を入力すると終了し,データ数は100以下である)。 なお,データは,学籍番号順に入力されるわけではない。 このとき,試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力するプログラムを書け。 ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする。 結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC6.0 [3.3] 言語:C++ [4] 期限: 一月下旬 [5] その他の制限:特になし。よろしくお願いします。
[1] 授業単元:プログラミン [2] 問題文(含コード&リンク): 文字列(空白含まない)の子音だけを取り出す関数getconsntを作成せよ。 getconsntの引数は2つ。第1引数は対象の文字列、 第2引数は作成される(子音だけの)文字列を入れる配列とせよ。 例 char ans[100]; ..... getconsnt("Doraemon",ans); printf("%s\n",ans) ↓ Drmnと表示される [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:borland [3.3] 言語:C [4] 期限:1月23日まで [5] その他の制限: 初心者にも分かるような簡単なプログラムでお願いします。 出来れば解説コメントがあるととても助かります。_(._.)_
>>112 そいつは俺もすぐに思いついたが、一応ループにしたのが
>>113 。
確かに出題条件を読むと、アルゴリズムを使ってはいけないとは
どこにも書いてないもんな。
>>111 できるかぎり分かりやすく書いた
#include <stdio.h>
int isvowel( char c )
{
const char vowels[] = "aeiouAEIOU", *p;
for ( p = vowels; *p; ++p )
if ( *p == c ) return 1;
return 0;
}
void getconsnt( const char *str, char *ret )
{
for ( ; *str; ++str ) {
if ( isvowel( *str ) ) continue;
*ret++ = *str;
}
*ret = 0;
}
int main( void )
{
char ans[100];
getconsnt("Doraemon",ans);
printf("%s\n",ans);
return 0;
}
>>111 俺もわかりやすく書いたつもり
#include <stdio.h>
void getconsnt(const char* src, char* dest) {
/* srcのそれぞれの文字に対して処理を順番に行う。 */
do {
switch(*src) {
case 'a': case 'i': case 'u': case 'e': case 'o':
case 'A': case 'I': case 'U': case 'E': case 'O':
/* aiueoのいずれかなら何もしない */
break;
default:
/* aiueo以外ならsrcからdestに文字をコピーし、destを1文字進める */
*dest = *src; dest++;
break;
}
} while (*src++ != '\0'); /* いずれにせよ、srcを1文字進める */
}
int main(void) {
char ans[100];
getconsnt("Doraemon", ans);
printf("%s\n", ans);
return 0;
}
118 :
デフォルトの名無しさん :2006/01/19(木) 00:33:22
ちんちんがおっきくなるプログラムを作成せよ
120 :
110 :2006/01/19(木) 00:52:05
>>117 ありがとうございます。
マヌケな質問とは思いますが出力する数字を左詰めにするにはどうすれば良いでしょうか?
大学に送信すると自動的に適当な数字を入力して正否を確認してくれるのですが
どうやら出力する答えは左詰めで
番号 点数
番号 点数
となっていないとないと間違い扱いになるみたいです。
私には
>>117 のプログラムは難しくてほとんど手を付けれ無いのでよろしくお願いします。
>>117 operator<の動きが直感に反するので、
通常の比較にして、stable_sortにはrbegin(),rend()を渡すほうがよいかと。
[1] 授業単元:プログラミング言語U [2] 問題文(含コード&リンク): 打ち込んだ式を計算する、* / ( )等の優先順位を含む四則演算のプログラムを作れ。 ただし、イコールキー(=)を押下した時点で答えをイコールの右に表示させること。 [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 2006年01月27日09:00まで [5] その他の制限: 特になし。よろしくお願いします
ただし以降がかなり無理な予感。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 次のintの配列に格納されている整数がある、キーボードから整数値を入力。 入力した整数が配列にあるかをディスプレイに表示するプログラムを作成せよ。 int a[] = {15 10 5 1 8 21 5 18 ]; [3] 環境 [3.1] OS: Windows [3.2] VC [3.3] 言語:C [4] 期限: ([2006年01月19日12:00まで] [5] その他の制限: サーチにちょっと触れた所までです。 サーチの授業の予習として出されたのですが分かりません。 どうかよろしくお願いいたします。
>>126 #include<stdio.h>
int main(void){
int a[] = {15,10,5,1,8,21,5,18};
int x,i;
scanf("%d",&x);
for(i=0;i<8;i++)
if(a[i]==x){
printf("%d番目に%dはある\n",i+1,x);
return 0;
}
puts("無いな");
return 0;
}
128 :
110 :2006/01/19(木) 01:29:03
>>128 別解。
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
struct student {
int student_num, score;
};
std::ostream& operator<<(std::ostream& ost, const student& rhs) {
ost << rhs.student_num << ' ' << rhs.score;
return ost;
}
std::istream& operator>>(std::istream& ist, student& rhs) {
ist >> rhs.student_num >> rhs.score;
return ist;
}
bool operator<(const student& lhs, const student& rhs) {
return lhs.score < rhs.score;
}
int main() {
std::vector<student> container;
for (int count = 0; count < 100; ++count) {
student input;
std::cin >> input;
if (input.student_num == 0 && input.score == 0) break;
container.push_back(input);
}
std::stable_sort(container.rbegin(), container.rend());
std::copy(container.begin(), container.begin() + std::min(std::vector<student>::size_type(11), container.size()), std::ostream_iterator<student>(std::cout, "\n"));
return 0;
}
>>124 それは環境依存な内容で、与えられた環境のコンソールを使って
標準Cを使っては実現できない。参考までに以前出した電卓をどぞ。
#include <stdio.h>
int error_code; double expr(FILE *fp); double term(FILE *fp); double fact(FILE *fp);
double expr(FILE *fp) {
double ret = term(fp); int ope;
while ((ope = fgetc(fp)) == '+' || ope == '-') if (ope == '+') ret += term(fp); else ret -= term(fp);
ungetc(ope, fp);
return ret;
}
double term(FILE *fp) {
double ret = fact(fp), temp; int ope;
while ((ope = fgetc(fp)) == '*'|| ope == '/' || ope == '%') if (ope == '*') ret *= term(fp); else if ((temp = term(fp)) != 0.) if (ope == '/') ret /= temp; else ret = (int)ret % (int)temp; else ret = error_code = 1;
ungetc(ope, fp);
return ret;
}
double fact(FILE *fp) {
double d; int parenthesis;
if (fscanf(fp, "%lf", &d) == 1) return d;
else if ((parenthesis = fgetc(fp)) =='(') {
d = expr(fp);
if ((parenthesis = fgetc(fp)) != ')') return error_code = 2; else return d;
}
else return error_code = 3;
}
int main(void) {
double d; error_code = 0; d = expr(stdin);
if (!error_code) printf("result:%lf", d);
else printf("error code:%d", error_code);
}
131 :
124 :2006/01/19(木) 01:46:34
>>125 ,130
環境依存と判らずにすみませんでした。
>>130 ありがとうございます。参考にさせてもらいます
133 :
デフォルトの名無しさん :2006/01/19(木) 07:40:07
134 :
デフォルトの名無しさん :2006/01/19(木) 08:24:32
>>108 ありがとうございました!!
iteratorがポインタだと言い張り提出しました
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): キーボードからファイル名を読み込み、そのファイル中の数字、文字の個数を カウントして画面に表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] borland [3.3] C [4] 期限: 2006年1月20日16:00まで [5] その他の制限: 特になし これ出さないと単位がやばいのに、さっぱり分かりません。 お願いします。
文字というのは全角も含むのかね?文字コードは?
半角のみ 文字コードはアスキーコードです。
>>135 #include <stdio.h>
#include <ctype.h>
int main()
{
long ch[256] = {0};
char fn[256];
int in;
FILE *fp;
printf("INPUT FILENAME>>");scanf("%s",fn);
if ((fp = fopen(fn, "r")) != NULL) {
while ((in = getc(fp)) != EOF) ch[in]++;
for (in = 0; in <= 255; in++) if(isalnum(in) && ch[in] != 0) printf("%c %ld\n",in,ch[in]);
fclose(fp);
}
return 0;
}
こんなもんかな?あまりチェックしてないからバグあったら自分でなんとかしてくれ。
>>138 ありがとうございます。ちゃんと動きました。
ただ、文字数の合計を表示するには、どうすればいいのでしょうか?
>>1 ・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
文字と数字の個数のカウントだから138のソースは見当違いだな。
じゃあ、こうか。 long ch = 0; char fn[256]; int in; FILE *fp; printf("INPUT FILENAME>>");scanf("%s",fn); if ((fp = fopen(fn, "r")) != NULL) { while ((in = getc(fp)) != EOF) if(isalnum(in)) ch++; printf("数字、文字の個数=%ld\n",ch); fclose(fp); } return 0;
>>118 #include <stdio.h>
int main(void)
{
int i;
char name[256];
printf("名前を入力 < ");
gets(name);
printf("回数を入力 < ");
scanf("%d",&i);
for (;i>0;i--){
printf("%s君、大好き\n",name);
}
return 0;
}
これでどうだ?
後は自分の想像力でw
>>142 ありがとうございます。
何とか進級できそうです。
このスレはある程度簡単なものだったら初心者には勉強にはなるが、 難しいと退屈だな。 誰か初心者向けの問題だしてくれ。 スレ違いだったらスマン
>>145 過去スレにいくらでもあるだろ
かってに探してやれよ
[1] 授業単元:プログラミング言語U
[2] 問題文(含コード&リンク):
http://omegaterritory.fc2web.com/ [3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 早ければ早いほど嬉しいです。遅くて1月22日まで
[5] その他の制限: できるだけ分かりやすいプログラムでお願いしますm(__)m
プログラムはメールにてお願いします。
[email protected] へ
148 :
デフォルトの名無しさん :2006/01/19(木) 14:34:43
c++なんですけど ダイアログベースで別ウインドウを開いてグラフを表示させたいんですけど ウインドウを開くコマンドってなんですか?
#include <gtkmm.h> int main( int argc, char **argv ) { Gtk::Main kit( argc, argv ); Gtk::Window window; Gtk::Main::run( window ); return 0; }
>>143 想像力使っていいならこれで十分だな.
#include <stdio.h>
void main(){puts("んっ…ぅ…ぁん…");}
たしかに、それで十分だ。
>>118 の宿題は片付いたw
[1] 授業単元: C言語入門 [2] 問題文(含コード&リンク): 九九を 1×1=1 1×2=2 1×3=3 ・ ・ ・ と言うように9の段まで、1〜9の間で入力された数字の九九を表示させたいです。 始めて1週間も経っていない超初心者なので、 お手柔らかにお願いします。 for文を使って九九は出来ましたが、うまく 6×5=30 と言う形にできません。 よろしくお願いします。 [3] 環境 [3.1] OS: Windows [3.2] VisualC++ 6.0 [3.3] 言語: C++ [4] 期限: 今日中 [5] その他の制限: 関数をちょっとかじった辺りまでです。
int main(void) { int i, j; for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ printf("%d*%d=%d\r\n", i, j, i * j); } } return 0; } だれか、未解決の宿題まとめて。
やっててもわかりませんでした。助けてください
[1] 授業単元:プログラミングおよび演習
[2] 問題文(含コード&リンク): 培風館の「VisualC++で学ぶプログラミング」よりP93問題18
配列のデータを昇順(小さい順)に並び替える関数を作りなさい。
ただし、次の誕生日をデータとし、月と日を2つの配列に入力してから、関数を呼び出して並べ替えなさい
なお、入力形式は月/日とし、/をデータの区切りとして、以下の5件の誕生日データを入力しなさい
誕生日データ:09/15 03/21 12/31 05/05 04/29
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual C++と言うソフト使ってますがよくわからないです
[3.3] 言語: C++?
[4] 期限: 2006年01月20日 明日提出です。前日にやればいいとかなめてました…orz
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1504.txt 行先頭がQの行以外はヒントとして先に提示され
Qの部分が課題で、一応自分なりに入れてみたけれども動かないです
>>154 です。
自己解決しました。
お騒がせしましたm(_ _)m
作ったけど自己解決されたorz
>>156 関数そのものを作れって?
ソートのアルゴリズムは?
何でも良いならバブルソートなら超簡単だからぐぐって自分でやってみ
マージソートやクイックソートはちと複雑だがな
161 :
156 :2006/01/19(木) 16:57:59
前に授業内で習ったのも多分そのバブルソートなので 今回もそれでいいと思います。 今自分でもどこがダメなのか考えてるので、とりあえずソートの部分調べて作ってきます
なんかどれでもいいっていうならクイックソートでも作っていけば点数うpって感じだな
>>158 サソ せっかく作って頂いたのにすいませんでした。
とってつけた謝罪なんて醜いからしなくても良いよ
166 :
156 :2006/01/19(木) 17:18:11
>>163 ありがとうございます
やってみたところ
順番は並び変わっていたのですが、結果が
3/-858993460
4/-858993460
5/-858993460
9/-858993460
12/-858993460
と、全部の日付が-858993460とかなっちゃって…ショボン(´・ω・`)
問題で出されたQの部分で書き換えていただいた所は自分で理解できたと思うのですが…日付の表示の原因がわからないです
もしかして、どこか先にヒントとして提示されていた部分のコピペが間違っていたのでしょうか…?
>>165 とってつけた謝罪なら最初からしませんから。
おやおや
教授に文句言っといてくれ。 ×for(i=0;i<5;++i) printf("%02d/%02d\n",mm[i],dd[j]); ~~ ○for(i=0;i<5;++i) printf("%02d/%02d\n",mm[i],dd[i]); [j]と[i]の違いです。
170 :
156 :2006/01/19(木) 17:28:59
>>169 !! ありがとうございます 明日文句言ってきます
てかなんで自分で気づかなかったんだろう…
ともかくこれで完成のはず(`・ω・´)
結果
3/15
4/21
5/31
9/ 5
12/29
日付の方だけが何故か入力した順番そのまま出てきてるようです…ナズェダ(´・ω;;:;,.
というかプログラムを全て壊してしまうかもしれないけど scanf("%s",str); として日付を文字列として受け取って sscanf(str,"%d%c%d",&month,&temp,&date); みたいな使い方をすればコードが簡単になると思う いやごめんね
このまま教授に提出してくれ 私にもわけ和漢ね。教授にも間違いはあったんだし文句はいわんだろ。
174 :
156 :2006/01/19(木) 17:44:23
>>171 えと…スイマセン、sscanfとか多分習ってないです。持ってるテキストにも載ってなかったですorz
もっと勉強してやり方がわかってから使わせていただきます。ありがとうございます
>>172 了解です。このまま出して、あとは質問してきます
自分ひとりでは、どこが間違っているかわからなかったのでとても助かりました。本当にありがとうございます
また演習でどうしてもわからなかったときは質問に来るかもしれないので
そのときはよろしくお願いします
175 :
156 :2006/01/19(木) 17:56:33
>>173 おぉ、ありがとうございます。試してみます
結果
3/15
4/21
5/31
9/ 5
12/29
sort()の同じ月の場合のところにif(dd[i]>dd[j]){}をはさんだのはわかったのですが
結果変わらず…orz
176 :
173 :2006/01/19(木) 17:57:16
俺も同じ間違いしてるし_| ̄|○ 月だけスワップして、日付変えてないでヤンスw if(mm[i]>mm[j]){ Q work1=mm[j]; Q mm[j]=mm[i]; Q mm[i]=work1; Q work2=dd[j]; //ここ追加 Q dd[j]=dd[i]; // Q dd[i]=work2; // } }
177 :
156 :2006/01/19(木) 18:08:14
>>174 sort()内の
if(mm[i]>mm[j]){
Q work1=mm[j];
Q mm[j]=mm[i];
Q mm[i]=work1;
のあとに
Q work2=dd[j]; //ここ追加
Q dd[j]=dd[i]; //
Q dd[i]=work2; //
}
}
を入れて試してみましたが…変わりません……日付だけ並び変わらないです
自分の入れるところが間違ってるのでしょうか???
178 :
173 :2006/01/19(木) 18:16:17
179 :
156 :2006/01/19(木) 18:24:33
>>178 おおおできました!できましたよ!
if(mm[i]>mm[j]){のなかでもdd[]の日付を並び替えないといけないんですね
色々時間を取らせてしまってスイマセン。これで心配事が一つ減りました
本当に助かりました。ありがとうございます
180 :
age :2006/01/19(木) 19:00:01
さあ、次の宿題来い
181 :
163 :2006/01/19(木) 20:20:01
だれか163のどこが悪いのか教えてくれー 気になってしょうがない
182 :
173 :2006/01/19(木) 20:25:18
>>181 ,〜'´ ̄ヽ
ミハ^^ヽヽ( | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ル ゚∀゚)ζ< 宿題なんだから
, -|  ̄ll~|- 、 | 先生の意向に従っていただこうッ!!
.〈 イ 〈 |___________________
183 :
163 :2006/01/19(木) 20:28:48
あんな糞コードを宿題に出す馬鹿は先生じゃねーよ。 少なくとも敬おうとは思わない、寝ながら講座開いてんじゃねーよ。
185 :
デフォルトの名無しさん :2006/01/19(木) 21:17:56
>>150 再アプお願いします。
もしくは57代目の852さん再アプお願いします。
[1] 授業単元:プログラミング [2] 問題文:次のような英小文字の「変換規則」が複数個入ったファイルを用意する。例えばruleとする。 a -> b b -> c b -> x c -> z 変換規則のファイル名、及び「開始文字」を入力し、変換規則を可能な限り使い、変換できなくなるまで変換の過程を出力せよ。何通りもある場合はせべて出力せよ。ただし、変換過程にループがある場合にはその旨を表示して終了すること。 〜例1〜 変換規則のファイル:rule 開始文字:a 出力: [1]a -> b -> c -> d [2]a -> b -> x 〜例2〜 変換規則の例 a -> b b -> a 開始文字:a 出力:ループがあります。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:borland [3.3] 言語:C [4] 期限:2006年1月22日まで [5] その他の制限:特にありません。 まるで分かりません。助けて下さい…OTL できるだけ分かりやすいプログラムだとありがたいです。
変換規則は独自に作るんだろ。 a -> a だけでいいじゃん
問題文も解法は自明と思うが.
オートマトンを念頭に置いた問題じゃないかな?
伝統的な記号処理の問題じゃないかな。 今でも廃れていない。
危険対とか合流性・停止性の話だと思うけど、 もう忘れた。
DFAを有向グラフで表し、深さ優先探索を行って、巡回を回避 するって問題らしいな。
有向グラフはAdjacency Matrixで簡単に表現できるから、後は 要素数を先にスキャンして、何×何の行列を確保するか調べて おく必要があるな。そこに気をつければ割と簡単かも。
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): 全部で20個の整数データを順に入力するものとする。 その際,各データを入力する毎に,新たに入力されたデータが,すでに入力されたデータと異なる場合だけ, そのデータを出力するプログラムを書け。 なお,データは,1行に1つずつ出力せよ. [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC6.0 [3.3] 言語:C++ [4] 期限: 一月下旬 [5] その他の制限:特になし。よろしくお願いします。
これは推移閉包(transitive closure)を求める問題に帰結できそうだ。 Warshal 推移閉包 でぐぐってみると良い。
>>196 #include<set>
#include<iostream>
int main(){
using namespace std;
set<int> sets;
for(int i=0,j;i<20 && cin >> j;sets.insert(j),++i)
if(!sets.count(j))cout << j << endl;
}
>>198 forの条件式には、本当の意味での条件式のみを入れて
読み取りなどはループ本体に書けと何かの本で見た希ガス
200 :
198 :2006/01/19(木) 23:53:18
んー確かにforに入力のテストを入れるのは少し読みにくいか。 となるとこんな感じかな。 #include<set> #include<iostream> int main(){ using namespace std; set<int> sets; for(int i=0,j ; i < 20 ; ++i) if(!(cin >> j))break; else if(sets.insert(j).second)cout << j << endl; }
201 :
デフォルトの名無しさん :2006/01/20(金) 00:16:31
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 引数xのn乗を返す関数my_pow設計せよ。ただし、引数の型はx:double,n:int とし、戻り値はdoubleとする。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月21日でお願いします。 [5] その他の制限:特にないです。
>>201 適当に
double my_pow(double x,int n){
double r = 1;
unsigned u = n;
if(n<0)u = -n,x = 1/x;
do if(u%2)r *= x;while(x *= x,u/=2);
return r;
}
>>201 double my_pow(double x, int n)
{
int i = 0;
double base = 1;
for(i = 0; i < n; ++i)
base *= x;
return base;
}
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1,2,3,4,5,6,7,8,9を一つずつ使ってできる9桁の数(例えば294618375など)をyとする。 また、xを正の整数とする。 そこで、y=x*x が成り立つyとxの値をそれぞれ求め、 y=????????? x=????? y=????????? x=????? y=????????? x=????? 上記のような形式で値を出力するプログラムを書け。 [3] 環境 [3.1] OS: Windows XP [3.2] VC++ 6.0 [3.3] 言語:どちらでも可 [4] 期限: 2006年01月23日20:00まで [5] その他の制限:特にありません。 一度自分でやってみたのですが、技量不足故に全く手がつきませんでした。 どうかよろしくお願いいたします。
206 :
186 :2006/01/20(金) 00:47:56
>>202 ありがとうございます。なんとかやってみます。
207 :
デフォルトの名無しさん :2006/01/20(金) 00:55:13
>>205 #include <stdio.h>
#include <math.h>
int match(int y){
int flg = 0;
if(y<123456789||987654321<y) return 0;
while(y){
int p = 1<<(y%10);
if(p&1||flg&p) return 0;
flg|=p;
y/=10;
}
return 1;
}
main(){
int begin = (int)floor(sqrt(123456789));
int end = (int)ceil(sqrt(987654321));
int x;
for(x=begin; x<end; ++x) if(match(x*x)) printf("y=%d x=%d\n", x*x, x);
}
>>205 #include <stdio.h>
int chk[10];
int check(int y){
int i, r, z;
if(y < 100000000) return -1;
if(y > 999999999) return 0;
for(i = 0; i < 10; i++) chk[i] = 0;
z = y;
while(z > 0){
r = z % 10;
if(chk[r] == 0 && r != 0) chk[r] = 1;
else return -1;
z /= 10;
}
return 1;
}
int main(void){
int x = 1, y, c;
while(1){
y = x * x;
c = check(y);
if(c == 0) break;
else if(c == 1) printf("y=%d x=%d\n", y, x);
x++;
}
return 0;
}
>>205 #include<algorithm>
#include<iostream>
#include<math.h>
int main(){
int y[9];
for(int i=1;i<10;++i)y[i-1]=i;
do{
int value = 0;
for(int i=0;i<9;++i)value = value * 10 + y[i];
int x = static_cast<int>(sqrt((double)value));
if(x*x == value)std::cout << "y="<<value << " x="<<x<<std::endl;
}while(std::next_permutation(y,y+9));
}
211 :
デフォルトの名無しさん :2006/01/20(金) 01:01:16
[1] 授業単元:プログラミングT [2] 問題文(含コード&リンク): int x; scanf("%d",&x); printf("%d",x); 上記のようにprintf()では引数に&を使わないのにscanf()では 使う理由を説明せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月22日でお願いします。 [5] その他の制限:特にないです。
使わないと望みどおりの結果を得られないから
仕様ですとしか言い様がないなぁ ライブラリ設計者に聞いてみたいところだが
char buf[10]; scanf("%s",buf); printf("%s",buf); 上記のようにscanfで&を使うとは限らない。 単なる仕様
>205 #include <cmath> #include <cstdio> using namespace std; bool isOK( int y ) { bool digit[10]={}; for( int i = 0, j = 100000000; i < 9; ++i, j/=10 ) { int n = y / j; y %= j; digit[n] = true; } for( int i = 1; i <= 9; ++i ) if( !digit[i] ) return false; return true; } int main( ){ // 123456789 <= x*x <= 987654321 より x上限がわかる int max_x = (int)floor( sqrt( 987654321.0 )); int min_x = (int)ceil( sqrt( 123456789.0 )); for( int x = min_x; x <= max_x; ++x ) { int y = x * x; if( isOK( y )) printf( "y=%d x=%d\n", y, x ); } }
こういうことだろう。 scanfでは与えられた引数の値を書き換える必要があるため。 もしscanfがポインタ渡しではなかったとしたら、 クライアント側で宣言した引数の値をscanf関数が変更することはできない。 printfは与えられた引数の値の変更が一切発生しないため、値渡しでよい。
printfでも printf( "%p", &hoge ) みたいに&付けたりあり得るしな。
>>208 >>209 >>210 >>215 質問してまだあまり経っていませんが、直ぐにお答えしていただいて有難うございます。
皆さんの優しさに本当に感謝いたします。
これからも皆さんを見習って、私も誰かに教えられるような腕前になるまで努力していこうと思います。
本当に有難うございました。
いや、問題はおかしくない。
>>211 ではまず例を提示しており、
その例を引き合いにして、「printfでは&を使わず、scanfでは&を使う。なぜか?」と聞いている。
scanfでは&を「必ず」使うとは書いていないし、
printfでは&を「必ず」使わないとも書いていない。
まあ、悪文ではあるわな。
221 :
211 :2006/01/20(金) 01:33:13
明日授業があるので、皆さんに教えてもらった事を参考に 質問してきます。ありがとうございました。
とゆうか出題者はその問題によって何を理解させたいんだろうな scanfが値を格納する関数であることを考えれば 引数は左辺値でなければならないことは自明だし そうであれば少なくとも値型であるintでは 左辺値とするためにアドレス演算子を使うのは至極当然
[1] 授業単元: C言語実習 [2] 問題文(含コード&リンク): ポインタ配列の変数を下記の文字列(”JANUARY”〜”DECEMBER”)で初期化 1 ’R’が含まれている文字列を表示 2 各文字列で’R’が最初に見つかった所は先頭から何文字目かを表示する 初期化文字列:"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER" ○実行結果例 Rがある月はJANUARYで6文字目です [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 20日24:00 [5] strchr()
まぁ牡蠣でも食べて落ち着け。
>>223 #include <stdio.h>
#include <string.h>
int main() {
const char *Month[] = { "JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER",NULL };
const char **aaa;
char *bbb;
for(aaa=Month; *aaa!=NULL; aaa++)
{
bbb = strchr(*aaa,'R');
if (bbb != NULL){ printf("%s %d\n", *aaa, bbb-*aaa+1); }
}
return 0;
}
>>223 #include <stdio.h>
#include <string.h>
int main(void)
{
char* month[] = {"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"};
char* p;
int i;
for( i = 0 ; i < 12 ; i++ ) {
p = strchr(month[i], 'R');
if( p != NULL ) printf("Rがある月は%sで%d文字目です\n", month[i], p - month[i] + 1);
}
return 0;
}
脳内コンパイル
>>211 出題者がxをどうにかしたいと思っているから、と答えれ
>>211 その問題解けないようじゃ
C/C++なんかやめて
JAVAに行きなさい
229 :
211 :2006/01/20(金) 02:43:16
わかりました。
230 :
211 :2006/01/20(金) 02:45:26
231 :
名無し :2006/01/20(金) 03:06:19
[1] 授業単元:再帰法(階乗の計算) [2] 問題文:[入力]6以下の自然数N(決して7以上の数を入力しないよう!) [処理]N!を再帰法を使って計算する。[出力]入力の階乗(factorial)!の計算結果を出力。 [説明]fac(n)=1 n=1の時,fac(n)=n*fac(n-1) n>1の時、が階乗!の再帰的な定義である。 この定義をそのまま、関数(再帰的関数)として定義せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2006年1月22日9:00まで] [5] その他の制限: お願いします。
>>231 #include <stdio.h>
int kaijo(int n)
{
if (n==1)
return 1;
return kaijo(n-1)*n;
}
int main()
{
int n,ans;
scanf("%d", &n);
ans=kaijo(n);
printf("%d\n", ans);
return 0;
}
233 :
名無し :2006/01/20(金) 03:16:49
[1] 授業単元:再帰法と分割統治法 [2] 問題文:[入力]32個の異なる二桁の自然数[操作]32個の自然数の中で最大値(MAX)と最小値(MIN)を求める。 [出力]入力データ、最大値(MAX)と最小値(MIN) [説明]入力された32個のデータを配列に記憶。記憶された32個のデータを集合と考え、配列の添数(インデックス index) m,n(m<nを仮定)を 使って配列のm番目からn番目までのデータを含む部分集合は添数を使って(m,n)で表せる。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2006年1月22日9:00まで] [5] その他の制限:
最小値と最大値を取り出すのではなく 求めるっつーことはソートの関数作れって事でしょ バブルソートなんかは簡単だから自分で作ってみなさいな
>>234 単元が分割統治と再帰だからソートを実装するのが
求められてるのだとしたら、バブルじゃなく
クイック・マージが妥当だろ
問題の粒度を小さくするならマージかクイックが最適だな
ところでなんで231のは7!以上は駄目なのだろうか
>>237 オーバーフローじゃね?
確か16bit整数型だと8!でオーバーフロー起こす
もっともそれでも7!がダメな理由が分からんが
それにlongや(C99なら)long long使えばもっと伸びるしな
宿題全然関係ないけどBCCでlong long int て使えないの?
つかえね。
241 :
デフォルトの名無しさん :2006/01/20(金) 12:30:49
[1] 授業単元: C言語プログラミング [2] 問題文 学生20人の成績を入力すると、上位5人の成績・全体の平均点・ 最低点を出力するプログラムを作成せよ。 [3] 環境 [3.1] WindowsXP [3.3] C言語 [4] 期限: 1月22日午前10時 [5] その他の制限: 初心者なのでできるだけ簡単な方法でお願いします。 理解できるのは、if,for,while,配列,関数がかろうじて少し…といった レベルです。 どなたかよろしくお願いします!!
[1] 授業単元:情報処理 [2] 問題文:符号なし16進数を文字列s[]に変換する関数ItoH(n,s)を作りなさい。 nを16で割った余りが16進数の一番低位の数となります。これを'0'〜'9'または'A'〜'F' の文字に変換します。次に16で割った商を新しいnとして上の変換を繰り返していきます。 できあがった文字列は、逆順に並んでいますので、文字列の順序を入れ替えていきます。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 一時間以内でお願いします。 [5]<string.h>を使ってください。 おながいします
>>241 (゚Д゚)ノ ァィ
#include<stdio.h>
int main(void){
int ten[20],i,k,c;
float s=0.0;
for(i=0;i<20;i++){
scanf("%d",&ten[i]);
s += ten[i];
}
s /= 20;
for(i=0;i<5;i++)
for(k=19;k>i;k--)
if(ten[k]>ten[k-1]){
c = ten[k];
ten[k] = ten[k-1];
ten[k-1] = c;
}
for(i=0;i<5;i++)
printf("%d\n",ten[i]);
printf("平均点:%f点\n",s);
return 0;
}
13時44分辺りにうpるか
>>242 <string.h>ってどこに使うんだ?
sprintf使えば1行で出来るな…
作ってみたがstring.hの使いどころが分らないw 無理やり使えないことはないが何か違う気がする
sprintfはともかくとして string.h使うならC++まで拡張して逆方向反復子が使えて便利だったのに
string.hを使ってstrrevを使わせたいみたいです。
文字列反転の関数Cにあったのか・・・
253 :
241 :2006/01/20(金) 13:38:40
>243 素早い回答ありがとうございます! もうお返事あるとは思わず少し感動…。 なのですが、これだと上位5人の成績表示されないと思うのですが… どう直せばよいのかも分からずorz すみません、どなたかお願いします!!
>>253 (゚Д゚)ノ 悪い最低点忘れてたw
#include<stdio.h>
int main(void){
int ten[20],i,k,c;
float s=0.0;
for(i=0;i<20;i++){
scanf("%d",&ten[i]);
s += ten[i];
}
s /= 20;
for(i=0;i<19;i++)
for(k=19;k>i;k--)
if(ten[k]>ten[k-1]){
c = ten[k];
ten[k] = ten[k-1];
ten[k-1] = c;
}
puts("上位点");
for(i=0;i<5;i++)
printf("%d\n",ten[i]);
printf("最低点:%d\n",ten[19]);
printf("平均点:%f点\n",s);
return 0;
}
>>242 そろそろ行くか
#include<stdio.h>
#include<string.h>
void ItoH(int,char*);
void ItoH(int n,char *s){
char str[]="0123456789ABCDEF";
int i=0;
do{
s[i] = str[n%16];
n = n/16;
i++;
}while(n>0);
s[i] = '\0';
strrev(s);
}
int main(void){
char s[256];
int n;
printf("数字入力:");
scanf("%d",&n);
ItoH(n,s);
printf("%s\n",s);
return 0;
}
257 :
デフォルトの名無しさん :2006/01/20(金) 14:45:06
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): ファイル名をコマンドラインで指定し、その内容を256バイトずつ1ブロックとして、16進と文字列形式でダンプ出力した上で、その内容を16進コードで更新するプログラムを作る。 ただし表示ブロック位置(先頭を0とする)はキーボードから入力するものとして、負値またはエンターキーのみが入力させるまで続ける。ブロック内の更新データの先頭はアドレスは16進で入力する。 更新データは2桁で1バイトの16進データを入力する。 :実行例: a:\e12345.exe e12345.c BLNo.->2 000200: 64 69 2e ・・・・・・・・・・・・・・ 63 28 dio.h>・v oid spc( 000210: 69 6e 74 ・・・・・・・・・・・・・・ 28 6e int n)・{ ・・if ((n |||途中省略||| 0002f0: 0a 09 7d ・・・・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi); ADR->12 DATA->a1a2a4 000200: 64 69 2e 68 3e・・・・・・・・・・・ 63 28 dio.h>・v oid spc( 000210: 69 6e a1 a2 a4 ・・・・・・・・・・ 28 6e int n)・{ ・・if ((n |||途中省略||| 0002f0: 0a 09 7d 0a 09・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi); DATA->_ ADR->_ Change OK?->y BLNo.-> [3] 環境 Windows C言語 [4]2006/01/20 18:00まで
259 :
256 :2006/01/20(金) 15:11:53
五目並べ作れって言われたんですがどうすればいいんでしょう
>>259 なんで単発スレ立ててるんだよ
もうくるな
262 :
デフォルトの名無しさん :2006/01/20(金) 15:24:01
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
ファイル名をコマンドラインで指定し、その内容を256バイトずつ1ブロックとして、16進と文字列形式でダンプ出力した上で、その内容を16進コードで更新するプログラムを作る。
ただし表示ブロック位置(先頭を0とする)はキーボードから入力するものとして、負値またはエンターキーのみが入力させるまで続ける。ブロック内の更新データの先頭はアドレスは16進で入力する。
更新データは2桁で1バイトの16進データを入力する。
:実行例:
a:\e12345.exe e12345.c
BLNo.->2
000200: 64 69 2e ・・・・・・・・・・・・・・ 63 28 dio.h>・v oid spc(
000210: 69 6e 74 ・・・・・・・・・・・・・・ 28 6e int n)・{ ・・if ((n
|||途中省略|||
0002f0: 0a 09 7d ・・・・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi);
ADR->12
DATA->a1a2a4
000200: 64 69 2e 68 3e・・・・・・・・・・・ 63 28 dio.h>・v oid spc(
000210: 69 6e a1 a2 a4 ・・・・・・・・・・ 28 6e int n)・{ ・・if ((n
|||途中省略|||
0002f0: 0a 09 7d 0a 09・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi);
DATA->_
ADR->_
Change OK?->y
BLNo.->
[3] 環境 Windows C言語
[4]2006/01/20 18:00まで
ここまで作りました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1512
意味がわからんからやらない
264 :
デフォルトの名無しさん :2006/01/20(金) 15:25:34
ageてるからやらない
fprintf(
>>262 ."%s"."氏ね");
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): 文字列sの中の異なった文字の数を(種類)を数える関数SuteStr(s,t)を作りなさい。 文字列t[]には文字の種類を入れることにします。 <ヒント> 文字列sの要素*sを1つずつチェックしていきます。t[]には、今まで出てきた文字の種類を 入れておきます。文字*sと同じ文字がt[]の中になかったら、t[]の後に追加します。文字列 s[]の中に'\0'が出てくるまで繰り返します。 <実行例> Input String: C-language Different char number is 8 Output String:C-langue [3] 環境 [3.1] OS: mac osX 10.4.4 [3.2] コンパイラ名とバージョン: X code2.0 [3.3] 言語: C言語 [4] 期限: 今日の五時まで [5] その他の制限: なし もう無理。教えてください。
268 :
デフォルトの名無しさん :2006/01/20(金) 15:29:22
やらないのでなく できないとはっきり言え
>>268 だから 意味が分らない=できない
のつもり^^;
はいはい
>>262 英数字だけ?
それとも2バイト文字も含む訳?
/* 名前はテケトー */ int count(char *s) { int table[256] = {0}; int i, sum = 0; for (; *s; s++) table[(unsigned char) *s]++; for (i = 0; i < 256; i++) if (table[i]) sum++; return sum; }
>>273 惜しい
int a(char *b) { int c[256] = {0}, d = 0; for (; *b; b++) if (!c[*(unsigned char *) b]++) d++; return d; }
あんたらt[]に文字入れる気無しですか
>>277 気づいたら直してあげなよ・・・
int SuteStr(const char *s, char *t)
{
int table[256] = {0};
int count = 0;
for (; *s; s++) {
if (table[*(const unsigned char *) s]++ == 0) {
*t++ = *s;
count++;
}
}
*t = '\0';
return count;
}
ところで char配列をqsortして 値が大きくなったらカウンターの数をインクリメントするってのは駄目?
>>279 有りだろ
むしろそっちの方がわかりやすくね?
ダヨネ
一度作ったんだけど何か回答出てたんでソース消しちゃったよ(´・ω・`)
俺が情報系の教官だったらこのスレチェックするなあ。 ところで、ときどきVisualC++でっていう指定があるけど、 学校のコンピュータに入ってんのかな?
>>285 俺が教官でも最低限、自分の担当する言語の宿題スレは確認するな
VC++なんて入れたらとんでもない金掛かると思うがな
まぁ入ってるところもあるんじゃねーの
俺の所はおそらくずっとLinux(GCC)だろうが
vcを全端末に入れると金かかるよね。 gcc,g++,borland c++だったら、ただだから たいていの教育機関にはこれらが入ってると思う。 てか、初心者はプログラムの本質学ぶのが目的だから vc使わなくてもいいような気もする・・・
288 :
デフォルトの名無しさん :2006/01/20(金) 16:52:52
[1] 授業単元:情報処理[2] 問題文: #incude <stdio.h> #define LOW 3 /* 行数 */ #define COLUMN LOW /* 列数 */ int main(){int i,j,k; double A[LOW][COLUMN + 1]={{3,2,1,10},{2,5,2,18},{1,4,1,12}}; double d; double x[3] = {0,0,0}; /* 答えを入れる */ double b[3] = {0,0,0}; /* 式(6)で使う */ double s = 0; /* 0で初期化 */ /* 【前進消去】 */ for ( j=___A___; j < ___B___ ; j++ ){d = ___C___; for ( k = 0; k <= COLUMN; k++ ){___D___; }}} /* b=(b1,b2,b3)をつくる */ for ( i=0 ; i<LOW ; i++ ){b[i] = A[i][3];} /* 【後退代入】 */ for ( i=LOW-1; i>= 0 ; i-- ){s = 0; for ( k = i+1; k < COLUMN; k++ ){ /* 式(6)Σを計算 */ ___E___; } x[i] = ___F___; /* 式(6)のxを計算 */ } for ( i=0 ; i<LOW ; i++ ){ /* 変形した行列の表示 */ printf ("%d: %lf %lf %lf\n", i, A[i][0],A[i][1],A[i][2], A[i][3]); } printf ("X = (%lf %lf %lf)^T\n", x[0], x[1], x[2]); return 0;} 解答がx1=(1,2,3)となるように(A)(B)(C)(D)(E)(F)をもとめよ [3.3] 言語: C言語 [4] 期限: 一時間
289 :
デフォルトの名無しさん :2006/01/20(金) 16:58:45
>>286 うちの大学は全てのPCにVS.NETが入ってる
しかも授業ではCPadを使う
>>289 ちょwww
どこの大学?
うち国立だけど、pascal、gcc、lisp、prologなんか入ってるOTZ
うちは Mac だし国立でも私立でも専門でもいろいろあるんじゃないの?
>>287 むしろ初心者にVCなんて使わせたら、悪影響な気がするがな
VCの補助機能は確かに便利だが、純粋にプログラミングの
本質的な部分を覚えるのにはかえって邪魔になる
>>290 俺も国立だが、gpc/gcc/g++/csccなんかが入ってるな
うちは高専だが全部にVC++が入ってるな
お兄さんの大学BASICと汗だけだった('A`;) ...
VC だと、ヘッダファイルの変さを我慢すると、標準入出力を使う コンソールアプリケーションのトレースができたりする。
296 :
デフォルトの名無しさん :2006/01/20(金) 17:22:25
【質問テンプレ】 携帯からの書き込みですのでコピペできませんでした C言語 期限 今日の19時頃まで 問い 整列済みデータを二分木で表現 整列済みデータは乱数を発生させて自分でソート って感じで… もしできたら 二分木から指定した値を検索するプログラムも… ょろしくです(>_<)
携帯電話にコンパイラとデバッガはついていません
298 :
デフォルトの名無しさん :2006/01/20(金) 17:58:13
>>290 地元の私立大学
偏差値は低いが金は有り余ってる
違法コピーを通報しますた。
うちの大学のPCにも全部VS.NETとか入ってたな。 っていうか、夏休みが終わって学校に行ってみたら100台くらいのPCがPen4 3.2G、メモリ768MB、WinXPに総入れ替えしてあったりしたし
>>295 > VC だと、ヘッダファイルの変さを我慢すると、標準入出力を使う
> コンソールアプリケーションのトレースができたりする。
それってgdbとかでは出来ないの?
>>301 gdb ってエディタと連動してたっけ?
>>300 えらく豪勢なPCだな・・・('A`)
俺の所はDELLのPen4(2GHz程度っぽい)に入ってたXPをわざわざ消して
VineLinux入れてある
まぁ開発用途で使う俺らにとってはXPより使いやすいんだがな
>302 emacsなら可。 よく知らんがリモートデバッグ機能使えば、いろいろできるかもしれん。 >296 二分探索木の挿入とトラバース、探索だな。
[1] 授業単元:プログラミングのレポート [2] 問題文(含コード&リンク):WindowsXPでデスクトップ画面を左右反転させるプログラムを作成せよ [3] 環境 [3.1] OS: WindowsXP [3.2] VC++ [3.3] 言語: C++ [4] 期限: 1月31日の17時まで。 [5] その他の制限: 特になし ビデオカードなんかで回転ができるんだから、左右反転もすぐできるかと思ったけど やってみたら全然わかんね・・・ orz よろしくお願いします。
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): 平面上の点の数n(n≦100),及び,n個の点の座標を配列 x,及び,y に読み込み, すべての点の間の距離を計算し,その距離が最大になる点の組(2つの点の座標.最初に入力した点の座標を最初), 及び,その距離を出力するプログラムを書け。 (入力例) コメントの部分は除く 3 // 点の数 0 10 // 1 番目の点の x 及び y 座標 0 0 // 2 番目の点の x 及び y 座標 20 0 // 3 番目の点の x 及び y 座標 (出力例) コメントの部分は除く 0 10 // 1 番目の点の x 及び y 座標 20 0 // 3 番目の点の x 及び y 座標 22.36・・・ // 2点間の距離 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC6.0 [3.3] 言語:C++ [4] 期限: 一月下旬 [5] その他の制限:特にありません。よろしくお願いします。
下旬っていつだよ
[1]授業単元:プログラミング [2]問題文:@0〜1.0の範囲の二組の実数の乱数を5回生成し、 それらをx,yとして得られた5つのxy座標上の点(x,y)を画面に表示する A40から65の任意の整数をキーボードから入力し、その文字コードに対応するchar型文字を表示する [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト [3.3]言語:C [4]期限:月曜 [5]その他の制限:出来れば全文でお願いします
[1] 授業単元:OSの基礎 [2] 問題文(含コード&リンク):哲学者の食事の説明と解決策 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限: 今日中 [5] その他の制限:ありません。よろしくお願いします。
311 :
名無し :2006/01/20(金) 22:34:44
>>309 (1)はコマンドプロンプトなのに画面に表示と言う辺りが無理だな。
どうやって画面に表示するのか教わっているならその情報を提示しろ。
(2)も、標準入出力でいいのかWinAPIを使うのか、printf()などを使うのかcoutを使うのか、
はっきりしないことには手を出しにくいし。
馬鹿はお前
>>310 「哲学者の食事の問題」のどこがCと関係あるんだ?
つーか、ぐぐればわかることだろ。
>313=309か? 恥の上塗りだな。
>>233 最小を求める部分だけ。
int min(int x, int m, int n)
{
int a, b;
if (m > n)
return min(x, n, m);
if (m == n)
return x[m];
a = x[m];
b = min(x, m + 1, n);
return (a < b) ? a : b;
}
・・・ウソはついていない。
あ、ウソあった。・・・まあ、いいや。
>>315 書き込んでしまった後に気付いた。スレ違いスマソ
>>312 @やり方は教わってません。これは普通に考えたらできないって話ですかね
Aprintfでお願いします。WinAPIとcoutは習ってません
>>310 説明。
哲学者が食事をしようと、食材を入れた箱を開けようとする。
ふと哲学者の脳裏にひょっとして、あけたらまずいんちゃうか? という思いがかすめる。
けっこう前のだし・・・・。
箱を開ければ状態は確定するが、箱を開ける前、
箱の中の状態は食べられるものか食べられないものかの状態が入り混じっている。
・・・って、こんなんじゃなかったっけ?
解決策は、箱を開けるとヤバイかもしんないので、箱は絶対に開けない。
>>321 @普通に考えたら
(0.1,0.6) (0.2,0.7) (0.3,0.8) (0.4,0.9) (0.5,0.0)
のような表示を出せばいいだけだろうな
A言語がCならAPIだのcoutなんて言い出さないよな
>>323 その解釈であってると思います。レスありがとうございます
どなたかお願いします
327 :
241 :2006/01/20(金) 23:28:02
>255 このスレ回転速いですね…; お礼遅くなってすみません、ありがとうございました!
哲学者の食事って、アレじゃないの? フォークとナイフが2人分しか用意されてない四角のテーブルに 4人の哲学者が座り、瞑想を終えた哲学者からさっさとフォーク、ナイフ を取って食事を始めるって奴。 デッドロックのシミュレーションだと思う。要するに、デッドロックが起きない ようにうまくプログラムをせよって事か?
>>324 (1)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i;
srand((unsigned int)time(NULL));
for (i = 0; i < 5; i++) printf("(%f, %f)", 2 * rand() / (RAND_MAX + 1.0), 2 * rand() / (RAND_MAX + 1.0));
}
(2)
#include <stdio.h>
int main(void) {
int c;
scanf("%d", &c);
if (40 <= c && c <= 65) printf("%c", (char)c);
}
>>328 それです。哲学者のルーチンを二つに分けて考えようとしたのですが、これは反則ですか?
Aは周りを気にせず自己中に食いたいときに食う。
Bは隣が食ってたら終わるまで待つ。
といった感じに。
>>310 説明:
おなかをすかせた哲学者が角を曲がったところ、100メートル先に焼きいも屋をハケーン。
小カール君にもすんでのところで勝てそうだった経験のある哲学者は50メートル6秒フラットの俊足。
一方、リアカー商いの焼きいも屋のおじいさんは足取りも重く6秒で3メートルも進めたらいいとこ。
しかし哲学者が焼きいも屋を最初に見かけたところまでたどりつくと、
耳の遠いおじいさんはこちらの呼びかけにも気づかず5メートルほど先に行ってしまった。
あわてて哲学者がそこまで追いついても、その頃にはおじいさんはおじいさんなりのペースでまた先に。
哲学者とおじいさんの速さの比を20:1とすると、
哲学者がおじいさんがいたところにたどりつくたびに、おじいさんはその20分の1だけ先に行っていることになり、
哲学者は永遠に焼きいもを食べられない…って問題。
解決策:
宇宙は閉じているので全く反対方向に走れば
しばらくすると正面をこちらむきに歩いてくるおじいさんと出会うことになる。
>>307 これで分からなければ勉強不足、と言えるほど簡単に書いた。
#include <cmath>
#include <iostream>
int main() {
int n;
std::cin >> n;
double x[100], y[100];
for (int i = 0; i < n; ++i) std::cin >> x[i] >> y[i];
int index_start = 0, index_end = 0;
double dist2, max_dist2 = 0;
for (int i = 0; i < n; ++i)
for (int j = i; j < n; ++j)
if ((dist2 = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j])) > max_dist2) {
index_start = i; index_end = j;
max_dist2 = dist2;
}
std::cout << x[index_start] << ' ' << y[index_start] << '\n' << x[index_end] << ' ' << y[index_end] << '\n' << std::sqrt(max_dist2) << std::endl;
return 0;
}
>>331 上手だな。
(なお、シュレディンガーの半死半生の猫の話はHALってマンガからの引用)
えーっと。哲学者の食事の解説(上手な解説はWebで見てくれ。脳内の情報だけで書いてる)
A)円形の卓があって、哲学者がN人居て、その間に1つづつ食器が置いてある。
B)哲学者は食器を2つ使わないとメシが喰えない。
C)哲学者は以下の動作を1つだけする
C1)まだ食器を持っていないなら、右手の食器を取ろうとする。右手の食器が開いていなければ次のチャンスを待つ
C2)C1が完了していれば、左手の食器を持とうとする。左手の食器が開いてなければ次のチャンスを待つ
C3)両手に食器を持っていれば、(メシを一口喰って)両手の食器を離す
D)哲学者が行動する順序はランダムである(続けて1人の哲学者が行動を続けることもある)
・・・ってすると、そのうち状態が変化しなくなってしまう。
改善:
食器に1〜Nの番号を振る(Cらしく、0〜N-1でも可)。
C1〜C2)を次のように変える。
C1)左右にある食器のうち若い番号の食器を持とうとする。持てなかったらC1へ
C2)もう一方の番号の食器を持とうとする。持てなかったらC2へ
誰か野球チームのプログラム作ってよ
デッドロックの問題か。
340 :
310 :2006/01/21(土) 00:49:49 BE:176840036-
>>336 持てるようになるまでtryし続けるってことですね。
どうもありがとうございます
みなさん、スレ違いなのにすみませんでした。
341 :
デフォルトの名無しさん :2006/01/21(土) 00:59:30
OSの授業で出た問題なんですが ↓これは何をするプログラムですか?実行結果も教えてください。 #include <errno.h> #include <dirent.h> #include <stdio.h> int main(void) { DIR * dir; struct dirent * ent; /* "." is the current directory */ if (!(dir = opendir("."))) { perror("opendir"); return 1; } /* set errno to 0, so we can tell when readdir() fails */ errno = 0; while ((ent = readdir(dir))) { puts(ent->d_name); /* reset errno, as puts() could modify it */ errno = 0; } if (errno) { perror("readdir"); return 1; } closedir(dir); return 0; }
>>331 面白そうだな
つまりデッドロックが発生するまでをシミュレートしろということか
暇が出来たときに作ってみるか
ただの極限使った収束じゃないか
>>341 ls
実行結果は状況依存。環境依存じゃなくて状況依存。なので答えられん。
デッドロックの問題を真面目に書こうとすれば、Windowsなら スレッド使った方がすっきり書けるね。 手持ちのWin32システムサービスプログラミングって本に例が 載ってる。mutexを使って同期を取っているが、デッドロックの 回避にはWaitForMultipleObjects()を使ってる。 ま、この単純な方法では、スタベーション(飢餓状態)という 別の問題が発生するので、待機時間を無限ではなくて タイムアウトを設定する事で回避しているね。
>>330 そいつは哲学者の問題とは違ったニュアンスになるぞ。
Aばかり食いっぱなしになって、Bは飢え死にする。
ダイクストラが例えた哲学者の問題は、すべての者が
同様の権利を持つものだ。
つーかこの本のプログラムリストを今から打ち込んで
>>1 にうp
しとくから、後は自分で考えれ。
著作権の問題があるから本当はまずいんだが・・・・・・
348 :
デフォルトの名無しさん :2006/01/21(土) 01:41:29
こんばんは。 フローチャートでCのポインタを描くにはどのようにしたらいいですか? 例えば *foo = *foo + 5; だとどうなるのでしょうか。 よろしくお願いします。
その前に*foo += 5って書けや
350 :
デフォルトの名無しさん :2006/01/21(土) 01:43:41
敢えて*foo = *foo + 5;と書いておきました。
アドレスfoo番地のデータ(整数なり、キャラクタなり、オブジェクトなり、てきとー)に5を加算する。
アドレスが5バイト分ずれる
354 :
デフォルトの名無しさん :2006/01/21(土) 01:47:22
>>351 ありがとうございます。
記号は処理を表す長方形でいいですか?
突っ込まれる前に書いておくと
>>353 は
fooがchar*とかだった場合な
>>350 普通、フローチャートで型は指定しないよ
あー・・・流儀がいっぱいあるからさ・・・資料をみせてもらえば、分かる・・・<処理を表す記号
>>355 あ・・・確かにsizeof(型)分ずれるにしとこう
どっちにしろ間違ってるけど
int **foot;と定義されていれば、・・ウソではないが・・。
またバカが来たぞw
>351 >357 >360 でつ。どーせ馬鹿でつ(涙)
363 :
デフォルトの名無しさん :2006/01/21(土) 01:53:33
ところで、もまえら、いつねてるの? もれは、さけを、もういっぱいのんだら、ねるぅ。
a = 0と同じやつ記号使っといてくださいな。>フローチャートの人。 多分、処理だとは思うけど。
>>310 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1515.txt これは本のリストをC用に書き直しただけなので、そのまま提出すると
バレる可能性がある。適当に修正しといた方がいい。
簡単に説明すると、csStat[]は、現在持たれている箸(もしくはフォーク)
を表す。pStat[]は、現在実際に飯を食っている哲学者を表す。
だから、csStat[]で 1 になっている数は pStat の 1 の丁度2倍になるはずだ。
numPhilosopherは、哲学者の数を表す。これを10とか20とかに変更
してコンパイルしても、デッドロックが起きない事が確認できると思う。
尚、このプログラムはスタベーションへの対策はしていない版である。
プログラムは必ずマルチスレッドでコンパイルする事。以上。
367 :
デフォルトの名無しさん :2006/01/21(土) 01:59:01
ありがとうございました! 頑張って残り終わらせます。
訂正。 ×だから、csStat[]で 1 になっている数は pStat の 1 の丁度2倍になるはずだ。 ○だから、csStat[]で 1 になっている数は pStat の 1 の丁度2倍になるはずだが、 他のスレッドでまだ1本しか箸を取っていないタイミングもあるので、少なくなる 事がある。
んー・・・まあ・・・スレッドやらマルチプロセスやらforkで組むのが正解なんだろぉなぁ・・・ ほえほえなアルコール漬けの脳みそで、Cでシングルスレッドなプログラムを構築していた漏れ。 哲学者の状態は関数ポインタだった。
自前でラウンドロビンをシミュレートしてもいいけど、mutexなんかの 実現が困難だと思う。まあいろいろ方法はあるが。
[1]授業単元:プログラミング [2]問題文:@50〜60の整数の乱数を5個生成し配列Sに格納した後それらの和を求める A入力したアルファベットを大文字→小文字、小文字→大文字に変換して表示する [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト [3.3]言語:C [4]期限:月曜 さっき解いてもらったばかりなんですが、まだあったんでお願いします 度々すいません
(1)50〜60というのは、50以上60以下のことか? (2)入力の仕方、出力の仕方を提示せよ。
>>372 @その通りです
AskuAA→SKUaa
こんな感じです
(1)了解 (2)そーじゃなくって、文字列を入力させるやりかたを教わらなかったか?
375 :
デフォルトの名無しさん :2006/01/21(土) 02:25:58
>>374 gets
puts
とかのことですかね?
>>377 (1)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int S[5], i, sum = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 5; i++) S[i] = 50 + (int)(11 * rand() / (RAND_MAX + 1.0));
for (i = 0; i < 5; i++) sum += S[i];
for (i = 0; i < 5; i++) printf("%d\n", S[i]);
printf("sum:%d\n", sum);
return 0;
}
(2)
#include <stdio.h>
#include <ctype.h>
int main(void) {
int c;
while ((c = getchar()) != EOF && c != '\n')
if (islower(c))
putchar(toupper(c));
else
putchar(tolower(c));
return 0;
}
前スレで貼ったけどもう1回 [1] 授業単元:プログラミングII演習 [2] 問題文(含コード&リンク): 自分の好きな野球チームの選手名、背番号、ポインタの入る構造体を 9つ作り打順通りのリニアリストを作れ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 2006/1/24/ [5] その他の制限: 名前とか適当でいいんでお願いします
好きな野球チームがない漏れはなじょすればよかと?
>>380 main(){
struct tagBaseballPlayer{
char name[256];
char no[4];
struct tagBaseballPlayer* next;
} team[] = {
{ "泉孝介", "8", 0 },{ "栄口勇人", "4", 0 },{ "巣山尚治", "6", 0 },
{ "田島悠一郎", "5", 0 },{ "花井梓", "9", 0 },{ "沖一利", "3", 0 },
{ "水谷文貴", "7", 0 },{ "三橋廉", "1", 0 },{ "安部隆也", "2", 0 }
};
int i;
for(i=0;i<8;++i) team[i].next = &team[i+1];
}
ポイントは「背番号」をintにしてしまうと"00"が表現できないという指摘がはいるとこか?
背番号00なんて0と等価じゃん
385 :
デフォルトの名無しさん :2006/01/21(土) 04:16:26
おいおいバブルソートぐらい少しは調べてやってくれ 何でもいいから間違ったソースぐらいうpってくれ
>>385 4 3 2 1 5
3 4 2 1 5
3 2 4 1 5
3 2 1 4 5
3 2 1 4 5
2 3 1 4 5
2 1 3 4 5
2 1 3 4 5
2 1 3 4 5
1 2 3 4 5
>>387 ,386
バブルソート自体は分かるんですけど、
線形リストでやろうとするとどのようにすればいいのか
よく分かりません。
48行目の Node *ptr = list->head; としてる意味がわからないんだけど、これ何してるの
>>389 先頭ノードをポインタptrに格納しています。
>>383 ありがとうございます
00は使わないです
>>389 とりあえず考えた
バブルソートはどうしても自分の一個前の値のポインタが必要だから
Nodeのポインタの配列を必要な数だけ(別途存在するノードの関数を作成する)確保して(lplpNodeとする)
lplpNodeに順々に存在するNodeへのポインタを格納して
それを参照しながら、必要とあらばアドレスを入れ替えてバブルソートするってのはどう?
ただ問題はlplpNode配列の個数の限界がsizef(int)個になるんだけどね
言葉足らずだった (別途存在するノードの関数を作成する) → 別途存在するノードの個数を計算する関数
「前の値のポインタ」というのは視点によるんじゃないでしょうか。
>>385 線形リストに格納したデータをソートする。
バブルソートでやれって指定なのか?
>>385 int CompareData(void *lhs, void *rhs){return ((Data*)lhs)->num - ((Data*)rhs)->num;}
void sort(List *list, int(*pfnCompare)(void *lhs, void *rhs)){
Node *p, *prev;
int changed=1;
if(!list->head||!list->head->next) return;
while(changed){
changed=0;
if(pfnCompare(&(list->head->data), &(list->head->next->data))>0){
Node *temp1 = list->head->next, *temp2 = list->head->next->next;
list->head->next->next = list->head; list->head->next = temp2; list->head = temp1;
changed=1;
}
prev=list->head;
for(p=list->head->next; prev->next->next; p=prev->next){
if(pfnCompare(&(p->data), &(p->next->data))>0){
Node *temp = p->next->next;
prev->next = p->next; p->next->next = p; p->next = temp;
changed=1;
}
prev=prev->next;
}
list->crnt=p;
}
}
呼び出しは: sort(&list, CompareData);
もっと簡単になりそうな気もする。
RPCのプログラム番号nsrmmdは390104だけど、nsrmmdbdも同じでしたっけ?
398 :
デフォルトの名無しさん :2006/01/21(土) 22:23:06
[1] 授業単元:シミュレーション
[2] 問題文(含コード&リンク):
2つの窓口をもった航空機check-inカウンタがあるとする
客の到着時間timeとサービス時間durが与えられた時、客の平均待ち時間を求めることを考える。
例えば、客A,B,C,D,E,F,Gが以下のような時間単位でカウンタに到着し、サービスを受けた場合の平均待ち時間を計算してみなさい。
time dur
A 1 3
B 2 3
C 3 4
D 4 2
E 5 5
F 6 2
G 7 3
2つの待ち行列Q1、Q2とする客は待ち行列の短い方でサービスを受ける。また、待ち行列の長さが同じなら、Q1でサービスを受けるとする
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (VC 6.0またはbcc32)
[3.3] 言語: (C/C++/どちらでも可)
[4] 期限: ([2006年01月23日まで])
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1518.cpp このサンプルの欠けている関数を埋めていくと完成するらしい。
でも、上のコードが読みづらい場合は0から好きなように作ってもよいそうです。
二つQueueがあって、待ちが少ない方に新しくきた客がpushされていくシミュレーションで、
待ち始めてからサービス終了してpopするまでの待ち時間の平均値を出せという問題のようです。
割と難しいのではないかと思いますが、どうかよろしくお願いします。
399 :
デフォルトの名無しさん :2006/01/21(土) 22:33:48
[1] 授業単元:C++言語 [2] 問題文(含コード&リンク): 同じ長さの文字列2個(s1,s2)を比較して s1>=s2なら1 s1<s2なら0 を返す関数を作成せよ。 また、文字列の大小は辞書順。例えば a>b a=a ab>ac となる。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC++ 6.0 [3.3] 言語: C++ [4] 期限: 2006年1月24日まで [5] その他の制限: ポインタを使うこと。また、文字列に含まれる文字は小文字のみ。 よろしくお願いします。
>>399 #include <string>
int compare(const std::string& lhs, const std::string& rhs){
return std::lexicographical_compare(rhs.begin(), rhs.end(), lhs.begin(), lhs.end()) ? 0 : 1;
}
どこにポインタ使うんだ? そんな「C++言語」って授業は受ける価値なし。
っていうかs1<s2がtrueだろ。常識的に考えて。
>>399 はもしやstring.hのstrcmpに変わる関数を作れってことなのだろうか。
全然C++じゃないが。
>>398 ソースがどう見てもCなんだが、本当にC++でもいいのか?
>>400 悪意があって言う訳ではないので誤解しないで欲しい。
lexicographical_compare()は#include <algorithm>が必要。
>>399 出題者(センセ)のセンスを疑う問題だな
>>403 VCだと通っちまうので忘れてた。thnx.
408ですが、Customerのデフォルトコンストラクタは消してください。
さらに訂正。 列への追加は、サービス終了判定のあとが正しいですね。 timeループの中を、counter_a/bの終了判定、列への追加while、開始時刻設定の順に訂正します。
411 :
名無し :2006/01/22(日) 01:04:38
>>233 の期限が近いので、
どうかよろしくお願いします。
説明のどこが説明になっているのかがわからん
こんばんわ ポインタについて質問させてください int i; void*p; uint32*ui32p; p = malloc(1024); ui32p = (uint32* )p; for (i=0;i<5;i++) ui32p[i] = i*i; ↑のソースで一番下の行がどういった動作をしているのかがわかりません uint32型のポインタに[ ]をつけるというのはどういうことなのでしょうか? 文字列のポインタに[ ]をつけるのはよく見かけるのですが・・・
>>411 こんなのでいかがか
int find_max(int *a, int m, int n) {
int b, c;
switch (n - m) {
case 1:
return a[m] < a[n] ? a[n] : a[m];
case 0:
return a[m];
default:
return (b = find_max(a, m, (m + n) / 2)) < (c = find_max(a, (m + n) / 2 + 1, n)) ? c : b;
}
}
int find_min(int *a, int m, int n) {
int b, c;
switch (n - m) {
case 1:
return a[m] < a[n] ? a[m] : a[n];
case 0:
return a[m];
default:
return (b = find_min(a, m, (m + n) / 2)) < (c = find_min(a, (m + n) / 2 + 1, n)) ? b : c;
}
}
#include <stdio.h>
int main(void) {
int i, a[32];
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) scanf("%d", a + i);
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d\n", a[i]);
printf("\nMax:%d\nMin:%d\n", find_max(a, 0, sizeof(a) / sizeof(a[0]) - 1), find_min(a, 0, sizeof(a) / sizeof(a[0]) - 1));
return 0;
}
>>413 何のポインタだろうが、a[i]は*(a + i)と同じ。
>>413 ポインタに[]をつけるのは配列と同じとでも考えてればよか
char *p="ABCDEF";
*pはAだしp[0]もAだ
417 :
413 :2006/01/22(日) 01:52:11
>>415-416 数値型に対して*(a + i)のようにするというのがどういうことなのかわかりません
文字列ならば*(a + i)でi個先の文字を参照したりできますが数値型だと何を参照するのでしょうか?
もちろん数値ですが何か?
419 :
デフォルトの名無しさん :2006/01/22(日) 01:56:58
1] 授業単元:情報処理T [2] 問題文(含コード&リンク): 以下の関数を完成せよ。 int hoge(x,y) int x,*y; { /* 関数の機能: 「変数xの値」と「ポインタyが示す変数値」をかけたものを「ポインタyが示す変数値」 に代入する。戻り値は「変数xの値」と「ポインタyが示す変数値」を足したものとする。 */ } 3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月23日でお願いします。 [5] その他の制限:特にないです。
つまんねぇ
この時期にこの程度の問題ができないなら素直に単位落としとけ
>>419 *&*y = *&*&*&x*&**y;
return *&*&*&x+&**y;
423 :
413 :2006/01/22(日) 02:06:16
>>418 ということは413のコードだと1024バイトの領域を確保してるのでuint32型の数値が256格納できる
したがって、ui32p[0]〜ui32p[255]までは値を格納できると考えてよいのでしょうか?
424 :
デフォルトの名無しさん :2006/01/22(日) 02:06:34
>>423 そういうこと
>>419 その引数の宣言方法は古い。その先生に「貴方の頭は化石ですか?」と
言ってやれ。
int hoge(int x, int *y) {
*y *= x;
return x + *y;
}
>>426 ま、そのうち分かるんだろうけど、面倒なことにはなるな。
しかし、そこのとこの教育方法については毎回宗教戦争じみたことに
なるから、やめとこ。
>>426 マズイがマズはこれでいいと思う
本格的に困ったらまた相談に来るなり
自分で調べるなりするでしょ
大学の授業とかなら同じと考えてもまぁいいと思ってそう書いちゃった
430 :
413 :2006/01/22(日) 02:13:26
>>425 ありがとうございました
ようやく寝ることができます
ゆとり教育だ
ゆとり教育は大学関係ねぇw
>>425 こうじゃないのか?
int hoge(int x, int *y) {
int tmp = *y;
*y = x * tmp;
return x + tmp;
}
int ret, x=2, y=3; ret = hoge(x,&y); とかやると
>>425 の場合はy = 6, ret = 8
>>434 の場合はy = 6, ret = 5
てことじゃねーの?
[1] プログラミング [2] テキストファイルを読み込み、単語検索のアルゴリズムを作成する。 テキストファイルの中には数字や記号はなく、単語と単語の間はスペースが存在します。 [3] [3.1] OS:Linux [3.2]コンパイラ名:gcc [3.3]言語:C [4]2006/1/30まで 手こずってます。よろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードからEnqueue,Dequeue,Endの指示を読み込み、Enqueueであればscanfで整数データを読み込み、 データをキューへ追加、Dequeueであればキューからデータを削除するプログラムを作ること。 キューの処理はEndの指示を読み込まれた時点で終了する。各指示の実行後のキューを画面表示するようにすること。 [実行例] 1-20>a Enqueue[1],Dequeue[2]End[0]:1 Data>4 List:[ 4] Enqueue[1],Dequeue[2]End[0]:1 Data>3 List:[ 4, 3] Enqueue[1],Dequeue[2]End[0]:2 List:[ 3] Enqueue[1],Dequeue[2]End[0]:1 Data>5 List:[ 3, 5] Enqueue[1],Dequeue[2]End[0]:2 List:[ 5] Enqueue[1],Dequeue[2]End[0]:2 List:[] Enqueue[1],Dequeue[2]End[0]:0 List:[] 1-20> [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月23日まで [5] その他の制限: 学び始めて間もなく理解していきたいので、多少コメントを含めて頂けると助かります。 宜しくお願いしますm(_ _)m
440 :
デフォルトの名無しさん :2006/01/22(日) 11:10:26
>>438 int SWProc(void){ printf("発見\n"); return 0; }
int SerchWord(char *filename,char *key,int(*lpSWProc)(void) = SWProc)
{
FILE *in = fopen(filename,"r");
if(!in) return 0;
char *lpBuf = (char*)calloc(1024,sizeof(char));
if(!lpBuf){ fclose(in); return 9; }
while(fscanf(in,"%s",lpBuf)!=EOF)
if(!strcmp(lpBuf,key)) lpSWProc();
free(lpBuf); fclose(in); return 1;
}
SerchWord関数
char *filename 対象ファイルの名称
char *key 検索文字
int(*lpSWProc)(void) = SWProc コールバック関数もどき(判らなければ指定しなくてOK)
filenameを"r"モードでオープンして全単語(EOFまで)をkeyと照会
もしkeyとその単語が一致した場合SWProc関数もしくは第3引数で指定された関数が処理される。
使い方 SerchWord("nurupo.txt","こんにちは");
戻り値 0ならば関数失敗、0以外なら成功
#include <stdio.h> #include <stdlib.h> #include <string.h>
追伸:C++の機能つかっちまいました
442 :
デフォルトの名無しさん :2006/01/22(日) 12:22:25
443 :
デフォルトの名無しさん :2006/01/22(日) 14:09:37
【質問テンプレ】 [1] 情報処理 [2] ニュートン法orロンバーグ積分を用いて数値計算を行う(無理数など、出来れば自然対数の底) [3] ビジュアルc [3.1] OS: Windows [3.2] ビジュアルc [3.3] c++ [4] 今日中 [5] その他の制限:for文if文中心でお願いします。
[1] 授業単元: 演算と型 [2] 問題文 整数(AとB)をスキャンして Aの値はBの〜%か求める。 [3] C Pad for Borland C++Compiler [3.1] OS: Windows XP Pro [3.2] BCC55 [3.3] C [4] 今日中 [5] まだまだ始めの方なんですけど
>>444 #include<stdio.h>
int main()
{
int a,b;
scanf("%d,%d",&a,&b);
printf("%dは%dの%d%です\n",a,b,a*100/b);
return 0;
}
>>444 #include<stdio.h>
int main(void){
long a,b;
double par;
printf("Aを入力:");scanf("%ld",&a);
printf("Bを入力:");scanf("%ld",&b);
par = (double)a*100/b;
printf("AはBの%f%\n",par);
return 0;
}
結婚式はいつですか?
>>446 、
>>447 ダメ。
printf()の書式中では'%'は"%%"としないといけない。ついでに言えば、percentなんだからparはないだろ。
>>446 >>447 有り難うございます〜。
447の中には習ってないのがあったので
446を使わせてもらいます。
二人とも有り難うございました〜^^
>>449 あ・・\\だけじゃなかったか
スペルは英語できないから勘弁
>>451 '\\'はいつでもそう書かなければならないけど、
'%'はprintf()系scanf()系の書式文字列内のみだから念のため。
454 :
444 :2006/01/22(日) 15:44:06
望洋さんのC入門編って演習の解答が付いてないから困るね
完璧(*^ー゚)b
>>456 それを直すんなら
訂正前>while(s1[i]==s2[i]){
訂正後>while(s1[i] != '\0' && s1[i]==s2[i]){
だな。
>>458 s2 もチェックな
あと関数名がキモい
そお?関数名キモイ?
ああ、関数名がパーフェクトにキモイな
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 球の半径r(倍精度浮動小数点型の変数)の値を関数scanfで入力して、 その面積S1と表面積S2(S1,S2は倍精度浮動小数点型変数)を計算し、 表示(出力)するという作業を繰り返すプログラムを作成せよ。 ただし、半径rとして数値0が入力されたときには、その処理を終了することとする。 また、面積はS1=π(r*r)、表面積はS2=4π(r*r)で計算されるものとする。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:StudyC [3.3] 言語:C [4] できれば火曜までに [5] 宿題とかじゃなく、テスト勉強のですがお願いします。
面積S1じゃなくて体積V1じゃね?
ああごめんS1は円ね
>>464 #include<stdio.h>
#define pi 3.14159
void kyu(double r){
printf("S1 = %f\n",pi*r*r);
printf("S2 = %f\n",4*pi*r*r);
}
int main(void){
double r;
while(1){
scanf("%lf",&r);
if(r==0.0)break;
kyu(r);
}
return 0;
}
468 :
464 :2006/01/22(日) 16:46:53
>>467 速攻の返答、多謝多謝。
有難うございました。
470 :
464 :2006/01/22(日) 16:59:26
[1] 授業単元:C言語プログラミング演習1 [2] 問題文: 要素数20、char型の配列mojiを用意し、入力する。ポインタ変数を用いて 文字数を求めるプログラムを作成しなさい。 char moji[20]; char *mp = moji; //ポインタ変数 int cnt; //文字数 実行結果 文字列入力==>ABCD 文字数:4 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 明日の午前まで。 [5]標準関数strlenは使わないこと。
[1] 授業単元:C言語プログラミング演習2 [2] 問題文: char型の配列mojiを用意し、初期化する。ポインタ変数を用いて大文字、 小文字、数字の文字数を求めるプログラムを作成しなさい。 char moji[]="AB12aDy3"; char *mp = moji; //ポインタ変数 int alphl; //大文字の数 int alphs; //小文字の数 int num; //数字の数 実行結果 英大文字:3 英小文字:2 数字:3 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 明日の午前まで。 この2つです。お願いします。
>>471 int strlen(char *lpStr)
{
int count=0;
while(lpStr[count]) ++count;
return count;
}
こんなんでいいんじゃない?
>>472 2バイト文字は含むの?
>>471 #include<stdio.h>
int main(void)
{
char moji[20];
char *mp = moji; //ポインタ変数
int cnt; //文字数
printf("Input string\n");
gets(moji);
for(cnt=0;*(mp+cnt)!='\0';cnt++)
{}
printf("count:%d\n",cnt);
return 0;
}
>>472 #include<stdio.h>
int main(void)
{char moji[]="AB120aDy3";
char *mp = moji; //ポインタ変数
int alphl; //大文字の数
int alphs; //小文字の数
int num; //数字の数
int cnt;
alphl=0;
alphs=0;
num=0;
for(cnt=0;*(mp+cnt)!='\0';cnt++){
if(*(mp+cnt)>='A'&&*(mp+cnt)<='Z'){
alphl++;
}
else if(*(mp+cnt)>='a'&&*(mp+cnt)<='z'){
alphs++;
}
else if(*(mp+cnt)>='0'&&*(mp+cnt)<='9'){
num++;
}
}
printf("大文字:%d\n",alphl); printf("小文字:%d\n",alphs); printf("数字:%d\n",num);
return 0;
}
>>472 #include<stdio.h>
int main(void){
char moji[]="AB12aDy3";
char *mp = moji; //ポインタ変数
int alphl=0; //大文字の数
int alphs=0; //小文字の数
int num=0; //数字の数
while(*mp!='\0'){
if(*mp>='A'&&*mp<='Z')alphl++;
else if(*mp>='a'&&*mp<='z')alphs++;
else if(*mp>='0'&&*mp<='9')num++;
mp++;
}
printf("英大文字:%d\n",alphl);
printf("英小文字:%d\n",alphs);
printf("数字:%d\n",num);
return 0;
}
ありがとうございました。
islowerとか使った方が格好良くないか?
宿題なんだから余計なものは使わない方がいいんじゃないか 提出する本人が知っていて使う分には問題ないと思うが
でもislowerとか使うのも一理あると思いました
is系ちょっと特殊だからな 出てこない授業も少なくない希ガス
皆がかっこよすぎて、たびたび惚れる。いつかおまいらを越す
たかが宿題を解いたくらいで惚れるだの越すだの言わないでくれ。
変な会話成立させないでくれ
俺のぶっといマグナムでお前のケツシェイクしてやろうか
直径1センチしかないくせによく言うわ
>>485 ガンガル。
>>485 いや素でかっこいい。知識ある者への敬う気持ちが生まれた。
モチベーションの確保にも役に立つし。
てかマジかっけ〜よ・・・。
>>487 くれ!!DNAを。
マグナムじゃなくデリンジャーだろ( ´,_ゝ`)
それ早漏ってこと?
ムケちんぽなのに早漏の漏れはどうすれば? 俺20秒あれば昇天できんだけど・・・OTL
20秒とか自慰でも無理あるんだが
質問なんですけど、というより宿題で 「C言語を使って実行すると特定のレジストリを書き換えるプログラムを作れ」 というのが出題されたのですが、どうしたらいいのでしょうか?
>>494 RegCreateKeyEx
とか
RegSetValueEx
とか
>>497 できれば具体例を教えていただけないでしょうか?
宿題なら質問テンプレを使用の事。
>>494 です。
[1] 授業単元: プログラミングV
[2] 問題文(含コード&リンク): C言語を使って実行すると特定のレジストリを書き換えるプログラムを作れ
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: ([2006年2月04日午後まで]
[5] その他の制限: 特になし
[1] 授業単元: 基礎情報処理 [2] 問題文 次のようなLISPプログラムを書け アトムとして整数のみを含むs表現wを入力とし、w中に現れる0以外の整数を全て掛け合わせた結果を計算する関数MULTALL(w)を帰納的に定義せよ 帰納的でないプログラムは回答と見なさない 例 w=((3.((1.0).−2)).(2.0))のとき、MULTALL(w)=−12。 LISPの文法の詳細については問わないが、なるべく読みやすく書くこと。 なお、整数の乗算には、以下のLISPの組み込み関数TIMESを使うこと。 TIMES(m、n) =m×n [3] 環境 [3.1] OS: Windows [3.2] ごめんなさい、わかりません [3.3] 同上 [4] 期限:今月中 超初心者なので、教科書とか読んでもサッパリです、出来ればどなたかどうかお願いします。
LIPSとC/C++言語は別物だ
そうなんですか、ごめんなさい 正直コンピューター系とかは皆同じに見えてしまう… スレ違いになるかもしれないど、その違いだけでも教えてもらえますか?
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):自由課題、ただし条件判断と繰り返し命令、配列は かならず用いること。関数、ポインターなどは必要に応じて用いればよい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限: 1月23日12:00まで [5] その他の制限:なし C言語の授業が分からなかったため最終課題ながら 全然思いつきませんでした、よろしくお願いします。
>>504 オセロ
#include <stdio.h>
int*i,p,t,a,d,v,m[91]={-10,-9,-8,-1,1,8,9,10},s;int k(){if(m[p]==0)for(i=m;*i;i
++){for(v=p+*i;m[v]==9-t;v+=*i){}if(v-p-*i&&m[v]==t&&(s=a=v=p,d))do m[v]=t,v+=*
i;while(m[v]-t);}return 0;}int main(){for(m[40]=m[50]=s=t=3,m[41]=m[49]=6;s-1;a
=d=0){for(p=8;++p<82;printf("・\0○\0●\0\n"+m[p]))p%9?k():m[p]=9;for(a?d=a=p=9
:s?s=0,puts("pass"):s++;a==9;k())t-6?scanf("%d%d",&p,&v),p+=v*9:++p;t=9-t;}}
それ7行のヤツじゃないか?
>>504 #include <stdio.h>
#include <string.h>
int main()
{
char s[256];
int len;
int i;
char tmp;
printf(" input string: ");
scanf("%s",s);
if ((strlen(s))==1){ return 0; }
len = strlen(s);
for (i = 0; i < len/2; ++i) {
tmp = s[i];
s[i] = s[len-1-i];
s[len-1-i] = tmp;
}
printf("output string: %s\n", s);
return 0;
}
これは前の文字入れ替え課題の誰かが作った(どこにあるかわからんw)ソースに
ifを付け足した奴でつ。
たぶん大丈夫
508 :
デフォルトの名無しさん :2006/01/22(日) 20:50:45
[1] 授業単元: ソフトウェア開発 [2] 問題文(含コード&リンク): 1+2*3-4を標準入力から入力し計算順に ((1+(2*3))-4)とカッコをつけて出力 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 無期限 [5] その他の制限: 二分木で表現をお願いします。あと演算子の優先度と 左結合でお願いします。 ずっと出来なくて悩んでいます。どなたか教えてください。
なんでみんなLinux使ってんの〜?
タダだからじゃね
>>504 じゃあ俺も書いたけど結局貼らなかったやつ貼っとく
#include <stdio.h>
#include <string.h>
void strswap(char *s,int n)
{
int i,n1,n2;
char temp[256];
if(n%2==0){
n2=n/2;
}
else{
n2=n/2+1;
temp[n/2]=s[n/2];
}
for(i=0;i<n/2;i++){
temp[i]=s[n2+i];
temp[n2+i]=s[i];
}
temp[n]='\0';
strcpy(s,temp);
}
int main()
{
char s[256];
printf("-->");
scanf("%s",s);
strswap(s,strlen(s));
printf("-->%s\n",s);
return 0;
}
basicで書かれたのをCに書き直してもらいたいんですが、 ここであってますかね(´・ω・`)
微妙なところだな
なんだ? FFTか?
丸藤が負けた…
516 :
515 :2006/01/22(日) 21:00:36
申し訳ない。誤爆しました。
>>503 とりあえずLispスレへ行け。
Lispは方言が多種多様で、「Lisp」だけでは何もわからんという点にも留意しろ。
授業で使うならおそらくまともに規格があるCommonLispかSchemeだろうが…
>>512 おそらくそんなスレないだろうからやるとしたらここじゃね?
とりあえず問題書いてみれ
519 :
512 :2006/01/22(日) 21:04:20
はい、FFTです
往年のN88-BASIC(86)でも見られるのか?
521 :
デフォルトの名無しさん :2006/01/22(日) 21:06:41
マロックでメモリ確保がしたいのだけど エラーの対処がよくわからなくて困ってる 使ってるフリーのコンパイラ(lsic330c)だとエラーを通してしまう上に ウィンドウズエラーに発展するのでVC++にエラーチェックしてもらった エラー箇所 NODE_T *new_node; new_node=malloc(sizeof(NODE_T)); if(new_node == NULL){ fprintf(stderr,"malloc_ERR\n"); exit(1); } 出力 1>.\tester.cpp(34) : error C2440: '=' : 'void *' から 'NODE_T *' に変換できません。 1> 'void*' から非 'void' 型への変換には明示的なキャストが必要です。
522 :
デフォルトの名無しさん :2006/01/22(日) 21:07:35
new_node=(NODE_T *)malloc(sizeof(NODE_T));
言語スレの話題だとは思うが。
C言語ではvoid *型から他のポインタへの変換は自由にやってよい。コンパイラもエラー報告しなくていい。
C++言語ではvoid *型から他のポインタへの変換には明示的なキャストが必要。
具体的には
>>522 のようにする。
525 :
デフォルトの名無しさん :2006/01/22(日) 21:11:39
>>522 ありがとう、こいつが直接の原因じゃなかったみたいだ
もうちょっと悩むとしよう
N88 BASICでFFTって大学のころやったなぁ・・・
527 :
デフォルトの名無しさん :2006/01/22(日) 21:13:15
>>524 いや、してないつもりが親切なメッセージが出るので原因がわからないエラーを対処するのに使ってる
まあ、全ソースUPだな。
>>527 ヒマなヤツが添削してくれるかもしれん。
ただ、ここは添削はスルーされることも多いんで、スルーされても文句言うな。
>>527 C++でエラーになってもCでは正当なこともある。
尤も、CよりC++の方が安全寄りな警告をくれる傾向にあるので、
それを参考にするのは悪くないと思う。
でも、それなら最初からC++で書けばいいんじゃね?
530 :
512 :2006/01/22(日) 21:24:40
531 :
デフォルトの名無しさん :2006/01/22(日) 21:28:41
>>528 全文貼るには少々長すぎる
先生の作ったプログラムに関数を付け足す課題でね
printfで順にチェックすることにするよ
>>529 Cの課題だし、それは怒られそうな気がする
>>521 mallocの戻り値はvoid *なので、明示的なキャストが必要。
>>527 gcc入れるって選択肢は無かったのか?
-Wall -ansi(もしくは-std=c99)付ければちゃんとメッセージ吐いてくれるが
>>530 漏れはBASICわからないのについつい見てしまう、
PRINT程度しかわからんw
536 :
504 :2006/01/22(日) 21:33:51
遅れましたが皆様ありがとうございました
537 :
530 :2006/01/22(日) 21:37:57
上から10.20の順です、失礼しますた。
538 :
デフォルトの名無しさん :2006/01/22(日) 21:38:31
>>533 あれ、gccってwinで使えるのあるの?
なにを言ってるんだね
つ mingw
>>538 お前はCygwinを知らないのかと小一時間ry
それにVMwarePlayerでLinuxって手もあるしな
あ、それ。やりだした。VMwarePlayer・・・でも、ディスクイメージが4Gあるんで、ちっとやっかい。
ぼちぼちやってるんで、てきとーに。
>>536 1行1行をそのまま手作業てトランスレートするんで。今日は2行やったところでおしまい。
期限があるなら、明示しといて。
545 :
デフォルトの名無しさん :2006/01/22(日) 22:07:35
[1] 授業単元: プログラミング言語 [2] 問題文下に書きます [3] 環境 [3.3] 言語: C [4] 期限:2006年1月24日まで [5] その他の制限:特にないです 長文になりますが申し訳ありません。 よろしく御願いします。
長文は直接ここに書くな
547 :
デフォルトの名無しさん :2006/01/22(日) 22:29:31
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
http://mmmooo.web.fc2.com/c.txt [3] 環境
[3.1] OS:winXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006.2.1
[5] その他の制限:特にありません。
よろしくお願いします
>>549 難しいんじゃなくて、問題文が長いだけ。
[1] 授業単元: プログラミング言語 [2] 問題文: ウィルスを作れ [3] 環境 [3.1] OS: Windows [3.3] 言語: C or C++ (部分的にアセンブラも可(x86)) [4] 期限: 無期限 [5] その他の制限: 特にありません。 よろしくお願いします。
>>549 トランザクションファイルを作れば簡単。
>>552 その課題出したやつを晒せ。通報してやる
>>530 #include <stdio.h>
#include <math.h>
void GYAKU();
int P,R,II,BIT;
main(){
int N,IR,I,J2,K,K1,KK,L1,L;
float DEG,ARG,A,B,C,S,tmp;
printf("input N,R");
scanf("%d,%d",&N,&R);
float XR[N],XI[N];
XR[0]=1; XR[1]=1; XR[2]=1; XR[3]=1;
IR=1;
J2=N;
DEG=2*3.14159/N;
K=0; L1=R-1;
for(L=1; L<=R; L++){
J2=J2/2;
for(I=1; I<=J2; I++){
P=K/pow(2,L1);
GYAKU();
ARG=DEG*BIT;
C=cos(ARG); S=IR*sin(ARG);
K1=K+J2;
A=XR[K1]*C+XI[K1]*S;
B=XI[K1]*C-XR[K1]*S;
XR[K1]=XR[K]-A; XI[K1]=XI[K]-B;
XR[K]=XR[K]+A; XI[K]=XI[K]+B;
K=K+1;
}
K=K+J2; if(K<N) continue; K=0; L1=L1-1; } printf("final reordering"); for(KK=0; KK<N-1; KK++){ P=KK; GYAKU(); if(BIT<=KK) continue; tmp=XR[KK];XR[KK]=XR[BIT];XR[BIT]=tmp; tmp=XI[KK];XI[KK]=XI[BIT];XI[BIT]=tmp; } for(I=0; I<N-1; I++) printf("%2f.%3f",XR[I],XI[I]); } void GYAKU(){ int B1,B2; B1=floor(P); BIT=0; for(II=1; II<R; II++){ B2=floor(B1/2); BIT=BIT*2*B1-2*B2; B1=B2; } return ; } 大文字を小文字に変えるとかは知らね
>>552 「ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。」
ローカルルールくらい読め。
558 :
530 :2006/01/22(日) 23:56:40
>>552 printf("making wirus");
for(i=0;i<10;i++)
printf("・");
printf("\nウィルス!!");
今時データベースシステムをCでやらせるのはなんでなのかな。 素直にSQL教えればいいのに・・・
よろしくお願いします。 [1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク):ある画像を3秒後に別の画像に差し替える。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C++ [4] 期限:1/24
>>560 RDBが如何にして動いてるかを教えるためじゃね?
[1] 授業単元: プログラミング言語1 [2] 問題文: 実数(double)xと整数(int)nをキーボードから入力し、xの2乗、3乗、...、 n乗を計算し、画面に表示するプログラムを以下の点を守って作成し、 正しく動作することを確認せよ。 (1) xとnはmain関数内で入力すること。nに負の数が入力された場合にはそ の旨表示して終了すること。 (2) 画面出力はmain関数内で以下のような出力形式で行うこと (多少異なっていても構わないが、1行で表示される内容を同じにする こと) [x=2.5 n=5の例] 2.500000^2=6.250000 2.500000^3=15.625000 2.500000^4=39.062500 2.500000^5=97.656250 (3) べき乗y^iを計算する関数 double power1(double y, int i) を作成し、main関数から必要回数呼び出して使用すること(非効率なプ ログラムになるが、今回はそうすること) (4) C言語にはべき乗を計算するpow関数があるが、今回は使用しないこと。 [3] 環境 [3.1] OS: Windows [3.2] Borland bcc [3.3] 言語: C [4] 期限: 1月25日 [5] その他の制限:pow関数は使用しない。よろしくお願いします
>>561 画像ファイル2つ用意してリネームしるw
>>563 非効率ついでに…
#include <stdio.h>
#include <stdlib.h>
double power1(double x, int n){
return n==0 ? 1 : n==1 ? x : x*power1(x, n-1);
}
main(){
char buf[256]; double x; int n;
printf("根(実数)?"); gets(buf); x=atof(buf);
printf("冪数(正の整数または0)?"); gets(buf); n=atoi(buf);
if(n<0) printf("欲嫁!\n");
else if(n<=1) printf("%f^%d=%f\n", x, n, power1(x,n));
else{
int i;
for(i=2;i<=n;++i){
printf("%f^%d=%f\n",x,i,power1(x,i));
}
}
}
>>560 単に…
・ファイルからの読み込み
・リスト演算
・ファイルへの書き込み
・標準出力
・標準入力
…をひとつの課題で表現しようとしただけのような都市ガス
567 :
デフォルトの名無しさん :2006/01/23(月) 01:53:39
[1] 授業単元:情報処理演習U [2] 問題文(含コード&リンク): int型が16bitで表される場合、引数の4乗を返す関数quadが正しく動作する 引数はいくつまでか検討せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月24日でお願いします。 [5] その他の制限:特にないです。
>>567 int型が16bitと書かれてるだけで引数(及び返値)がintなのか
unsignedなのかshortなのかlongなのかetc.が示されてない
よって問題不備により回答不能
こう言っとけ
まぁsigned intと仮定してやると、最大値は2^15-1で32767
よって、こいつの4乗根を取ると13.*
であるから、引数の最大値は13
569 :
デフォルトの名無しさん :2006/01/23(月) 02:05:31
もっと単純に、unsignedを仮定すると2^16の4乗根が2^4であることは自明なので 最大値は15だと直ちに判るわけなのだが。
572 :
お願いします!! :2006/01/23(月) 07:05:09
学校で、宿題が5つでました。 1つはどうにか終わりましたが、あと1日半で 4つ終わらせなければいけません。 どうか、みなさんのお力をお貸しください!お願いします!! 言語はC++です!! 問題1: Wallet w; cout << "d:" << w.getDollars( ); cout << " c:" << w.getCents( ) << endl; w.visitATMForCash( 50 ); cout << "d:" << w.getDollars( ); cout << " c:" << w.getCents( ) << endl; if (w.canPayFor( 25, 35 )) { // you have enough to pay for it... w.payFor( 25, 35 ); } cout << "d:" << w.getDollars( ); cout << " c:" << w.getCents( ) << endl; // this time you won't have enough money if (w.canPayFor( 25, 35 )) { // you have enough to pay for it... w.payFor( 25, 35 ); } cout << "d:" << w.getDollars( ); cout << " c:" << w.getCents( ) << endl; 問題としては、自分の持っているお財布はお札とコインを収納 することが出来て、銀行へ行くと、更にお金をお財布に現金を ふやすことができるということです。 先生がいうには、上に書いてあるのが、サンプルドライバーコードで そのクラスをもっと、よいものにしなさい。ということなのです。 どうか、よろしくお願いしたします。
残念起きてこのスレを見ている俺はC++が使えない!m9っ`・ω・´)
574 :
お願いします!! :2006/01/23(月) 07:34:34
上の続きで、二個目の問題になります。お願いします。 問題は、こうです。 クラスレコードプレ−ヤーを作成。 レコードプレーヤーは、ビニール・レコードをかけることができるステレオコンポを表わします。 先生によると、サンプル・ドライバー・コードを使ってよりよい ものにするということです。 サンプルドライバー; cout << "--Test 1--" << endl; RecordPlayer r; r.turnOn(); r.affixPlatter( "Barry Manilow I" ); r.plopNeedle( ); r.returnNeedle( ); r.turnOff( ); cout << "--Test 2--" << endl; RecordPlayer badr; badr.plopNeedle( ); cout << "--Test 3--" << endl; RecordPlayer badr1; badr1.turnOn( ); badr1.plopNeedle( ); cout << "--Test 4--" << endl; RecordPlayer badr2; badr2.returnNeedle( ); cout << "--Test 5--" << endl; RecordPlayer badr3; badr3.turnOn( ); badr3.returnNeedle( );
575 :
お願いします!! :2006/01/23(月) 07:35:12
問題2が一回で書き込めなかったのサンプルドライバーアウトプット; --Test 1-- レコードプレーヤー オン... レコードプレーヤーはバリー マニロウのアルバムを持っている I レコードプレーヤーはバリーマニロウのアルバムをプレイする レコードプレーヤーの曲をストップする。 レコードプレーヤー オフ... --Test 2-- もし、電源がついていなければ、針を落とすことはできません。 --Test 3-- レコードプレーヤー オン。そのときに、アルバムがないと、針を落とすことは出来ません。 --Test 4-- 電源がオンの状態じゃないと、針を返せません。 --Test 5-- レコードプレーヤーをオンにする レコードプレーヤー; RecordPlayer( ); void turnOn( ); void turnOff( ); bool isPoweredOn( ); void affixPlatter( string record ); void plopNeedle( ); void returnNeedle( ); bool my_isOn; string my_Record; bool my_NeedleIsOnTheRecord; よろしくお願いいたします!言語はc++です!!で、問題2の続きです!!
テンプレぐらい守れ糞が
577 :
ごめんなさい! :2006/01/23(月) 07:43:20
書き込みしたものですっ!! テンプレってなんですか??ほんとにごめんなさい。 全然分からないことばっかりなのに、C++をとらなきゃいけないことに、なってしまって。。。 テンプレがなにか、教えてもらえますか?? 次から、気をつけます!!すみませんでした。
はいはい、わからないなら回答貰えないと思ってね だから諦めな
579 :
デフォルトの名無しさん :2006/01/23(月) 07:47:49
そんな言い方しなくても。。。 分かりました。。
だいだいそのWaletteとか RecordPlayerとかのクラスは独自ライブラリでしょ? C++標準にそんなクラス定義されてるの?
581 :
デフォルトの名無しさん :2006/01/23(月) 08:29:32
独自のライブラリだと思います! C++に関して、本当に無知なので、標準にそういうクラスの定義が されているかは、分かりません。。。
中身わからんのにどうせいっちゅーんだろうねコイツは
>>581 >>1 を読め
それと、独自ライブラリなら、その説明なり定義なりが必要。
584 :
デフォルトの名無しさん :2006/01/23(月) 08:54:10
ここで、C++の宿題を手伝ってくれる方で、英語理解できる方いますか? アメリカで、C++を勉強していて、問題が英語なので、C++&英語の両方理解 出来る方に是非教えて欲しいです!
みんな言語に出てくる英単語しかわからないバカばかりなんでお帰りくださいね└(゚∀゚)┘
586 :
デフォルトの名無しさん :2006/01/23(月) 08:59:32
そうですか。ただのC++のバカの集まりでしたか。ここは。 C++以外にとりえがないんですね。かわいそうに。 きっと人間関係もうまく築けない残念な人たちなんですね。 さっさと退散します☆☆ 一生C++だけで、食べていくことが出来るといいですね♪♪
てめぇコノヤロウ
588 :
デフォルトの名無しさん :2006/01/23(月) 10:53:57
1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): 書ききれないので次の場所に書きます [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: マイクロソフトビジュアルスタジオ [3.3] 言語: C++ [4] 期限: 1月23日 [5] その他の制限: できれば全文書いてくださると助かります。
589 :
デフォルトの名無しさん :2006/01/23(月) 10:55:43
>>588 の問題
sumlist を拡張し, 二項演算子 + の使える全ての型 T に対して使える
template 関数 template <class T> T sumlist(list<T>&) に拡張して下さい.
#include <iostream>
#include <list>
using namespace std;
int sumlist(list<int>& l);
int main() {
list<int> lst;
for (int i = 0; i < 10; i++)
lst.push_back(i);
cout << "size =" << lst.size() << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); )
if ((*it) % 3 == 0)
it = lst.erase(it);
else
++it;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
return 0; }
int sumlist(list<int>& l) {
int i = 0;
for (list<int>::iterator it = l.begin(); it != l.end(); ++it)
i += *it;
return i; }
590 :
デフォルトの名無しさん :2006/01/23(月) 10:57:37
591 :
デフォルトの名無しさん :2006/01/23(月) 11:11:02
[2] 問題文:関数 y = x*x+5 と y=0 積分範囲 x [1,5]で切り取られる部分の面積をモンテカルロ法を用いて求めよ。 [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: Visual c++ 6.0 [3.3] 言語:C [4] 期限: なるべく早くにお願いします 助けて下さい
[1] 授業単元: ユーザ定義関数 [2] 問題文(含コード&リンク): 次の関数は「戻り値」あり「引数」なしの関数です。 下記の関数を作成し、戻り値を加算した結果を表示させる様に プログラムmain関数を作成しなさい。 int plusA() { return (20); } int plusB() { retrun (40); } [3] 環境 [3.1] OS:Windows [3.2] VIsual C++ 6.0 [3.3] 言語: C++ [4] 期限:今日中 [5] その他の制限: 自分の力で解きたいので、 完璧な答えと言うより答えに繋がるヒントを下さい。 宜しくお願いします。
cout << (plusA() + plusB());
>>591 ハジを忍んで聞くが、式を解くと61.333...だよな。
漏れのモンテカルロだと100万回試行させて、37.4くらいなんだよ・・・。
>>584 確か前に英語の問題が解かれていたこともあったし、ここは結構大学の先生も
見ているみたいだから、多分対応はできるんじゃないかとは思うけど、
基本的には日本語でのコミュニケーションを前提としているからやっぱりスレ違い
だと思う。
英語の勉強が必要だったら、英語のニュースグループとか探して
alt.comp.lang.learn.c-c++ とか comp.lang.c++ とかで教えてもらった方が
いいんじゃないかなぁ。英語の勉強は日本語でするより英語でした方がいいと思うし。
>>595 横レス
(1,0)-(5,0)-(5,30)-(1,30)-(1,0)の範囲に入ってる?
はみ出たり欠けたりしてない?
(試行する範囲が求める図形を全て覆っていれば大きくても問題ないと思うが)
先の長方形の面積*((図形の中に入った回数)/(全試行回数))
で求まると思う
>>593 問題文のヒントじゃ足りなかったので、
もう少し答えに近付けるヒントが欲しかったです。
>>594 有難うございます!
参考にして、もう少し考えてみます。
>>588-589 #include <numeric>
#include <list>
template <class Containor> typename Containor::value_type sumlist(Containor c)
{
return accumulate(c.begin(), c.end(), typename Containor::value_type());
}
int main()
{
list<int> lst;
for (int i = 0; i < 10; i++)
lst.push_back(i);
cout << "size =" << lst.size() << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); )
if ((*it) % 3 == 0)
it = lst.erase(it);
else
++it;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
return 0;
}
あっはっは。オオボケ。(1,6)-(5,6)-(5,30)-(1,30)-(1,6)で試行させてたよ。
>>598
602 :
592 :2006/01/23(月) 14:27:00
603 :
デフォルトの名無しさん :2006/01/23(月) 19:44:21
[1] 授業単元: 情報科学基礎演習 [2] 問題文(含コード&リンク): 1.自分の名前(ローマ字)を表示し、その文字列の長さを求めよ。 2.2数の和を求める関数を定義せよ。(add()を定義) 3.for構文を用いて1から10までの数を表示するが、例外として5は表示しない。 4.*を使ってひし形を描け。 5.回文を作れ。(「abcdcba」のようなもの) [3] 環境 [3.1] OS: WindowsXP [3.2] すみませんが分かりません [3.3] 言語:C [4] 期限: 2006年1月29日 [5] その他の制限: 特にありません 申し訳ありませんがよろしくお願いします。
やる気でね( 'A`)
>>604 1.
#include <stdio.h>
#include <string.h>
int main()
{
char name[]="ここに名前を入力";
printf("%s\n%d文字です。\n",name,strlen(name));
return 0;
}
2.
int add(int x,int y)
{
return x+y;
}
3.
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=10;i++){
if(i==5) continue;
printf("%d",i);
}
putchar('\n');
return 0;
}
puts("寝る絵も萌えるね");
>>604 ひし形と回文はそれぞれの定義が曖昧だから手出ししたくない
609 :
デフォルトの名無しさん :2006/01/23(月) 20:55:00
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 関数f(x,y)を引き渡すと、-1≦x≦1、、-1≦y≦1 の範囲で。この関数値を色表示する関数を持つプログラムを作りなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] lcc [3.3] c言語 [4] 期限:1月24日 [5] その他の制限: 構造体および関数を指すポインタ という単元での課題です。よろしくお願いします。
>>603 設問1および3。脳内コンパイラでの回答。設問2は入力ファイルによってことなる。
#include <string.h>
#include <stdlib.h>
を追加
strdup()
・ライブラリで持っている処理系もあるので、名前がかち合う可能性がある。
・int len;→size_t len; /* まあ、これはいちゃもんだけど */
(設問で除外されてるが、できれば、malloc()の戻り値をチェックしたほうがいい。)
getword()
・char c;→int c; /* 初心者はよくやる */
・*w = c;→*w++ = c; /* まあ・・・忘れることもある・・・かな? */
(設問で除外されてるが、できれば、文字数がオーバーしてないかチェックしたほうがいい。)
wordtree()
・node->c = 2;→node->c++; /* さすがにこれはやらない。ただ書き忘れすることがある */
(設問で除外されてるが、できれば、strdup()とmalloc()の戻り値をチェックしたほうがいい。)
printtree()
・穴埋めを埋める(a) printtree(node->left); (b) printtree(node-right);
main()
・char word[MAXWORD + 1]; /* まあ・・・+1の忘れってのはよくあることで */
・fclose(fp);を書いておくべき。
(設問で除外されてるが、できれば、fopen()の戻り値をチェックしたほうがいい。)
アルゴリズム自体
・ソート済みの文字列を多く読み込ませると、スタックオーバーフローするはず。
611 :
デフォルトの名無しさん :2006/01/23(月) 21:22:51
>>610 ありがとうございました。
おかげで設問2も分かりそうです。本当に助かりました。
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
1. ファイルからデータを読み込み、最大値、最小値、平均値
を標準出力に出力するプログラムを作成せよ。
・入力はfopen関数を用いてファイル名を直接指定すること。
・ファイルは以下の形式で記述されている:
1行目:データ個数(自然数)
2行目以降:各行1個のデータ(実数)
※ 1行目に記述された個数のデータは必ずあると考えてよい
これがそのファイルです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1533.txt [3] 環境
[3.1] OS: WindowsXP
[3.2] Borland bcc
[3.3] C言語
[4] 期限:1月26日
よろしくお願いします
問題文のソースコードはうpローだにあげてくれなきゃやるきせんな。 読み面杉。
>>608 ありがとうございました
感謝です
あとはまだ時間もあるんで自力であがいてみます
ちなみにひし形作れって言うのは
こんなん描けということらしいです(.が入ってる部分は本当は空白です。ずれるんで仕方なく・・・・・・)
............*
......***
*****
......***
............*
>>615 #include <stdio.h>
/* 関数は戻り値を必ず明記すること */
int main(int argc, char *argv[])
{
/* これは整数 */
int x,y,r;
/* 商は整数じゃ無理 */
double s;
x = 3;
y = 8;
/*「x / yはdouble型で計算しますよ、と指示*/
s = (double)x / y;
r = x % y;
printf("%d ÷ %d\n",x,y);
printf("商 = %lf\n",s);
printf("余り = %d\n",r);
return 0;
}
>>612 ファイル名はわからんので、勝手に変えてちょ
#include <stdio.h>
int main()
{
int i,n;
double temp,sum=0,max,min;
FILE *fp;
if((fp=fopen("kadai.txt","r"))==NULL){
printf("Can't open\n");
return 1;
}
fscanf(fp,"%d",&n);
fscanf(fp,"%lf",&temp);
sum=max=min=temp;
for(i=0;i<n-1;i++){
fscanf(fp,"%lf",&temp);
sum+=temp;
if(max<temp) max=temp;
else if(min>temp) min=temp;
}
printf("MAX:%lf MIN:%lf AVE:%lf\n",max,min,sum/n);
fclose(fp);
return 0;
}
>>614 ごめん。こんなのしか思いつかない。
nはひし形の段数だから、適宜変更してちょ。偶数はだめだけど。
#include <stdio.h>
int main()
{
int i,j,k=1,f=0,n;
n=5;
while(k>0){
for(i=n-k;i>=1;i--) printf(" ");
for(j=0;j<k;j++) printf("* ");
putchar('\n');
if(k==n) f=1;
if(f==0) k+=2;
else if(f==1) k-=2;
}
return 0;
}
614のプログラムは激しく機種依存っつーかフォント依存な希ガス
621 :
デフォルトの名無しさん :2006/01/23(月) 22:45:29
623 :
615 :2006/01/24(火) 00:02:40
>>622 makerなんていう和製英語が嫌だから拒否する。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): N個の要素よりなる配列をmain関数に宣言する 配列にデータヲ読み込む関数をmainから呼んで入力を行い データを書き出す関数を呼んで出力するプログラムを ポインタで呼んでポインタで受け取るやりかたで表せ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月24日 [5] その他の制限: 締め切りが今日までなのでおねがいします
626 :
デフォルトの名無しさん :2006/01/24(火) 02:09:18
[1] 授業単元:プログラミングT [2] 問題文(含コード&リンク): 浮動少数型の引数3つを取り、引数の平均を戻り値とする関数。 関数名や引数名は自分できめてよい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月26日でお願いします。 [5] その他の制限:特にないです。
627 :
質問者 :2006/01/24(火) 02:27:59
【質問テンプレ】 [1] 授業 数値C言語プログラム [2] 問題文 微分方程式 y'ーxy=0 をオイラー法ORルンゲクッタ法で計算するプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] すいませんちょっとわかりません [3.3] 言語: C [4] 期限: 明後日まで [5] その他の制限: 特にありません よろしくお願いします
>>626 これでいいかな?
#include<stdio.h>
double heikin(double, double, double);
int main(){
double x,y,z;
printf("3つの数を入力\n");
printf("x = ");
scanf("%lf",&x);
printf("y = ");
scanf("%lf",&y);
printf("z = ");
scanf("%lf",&z);
printf("3つの数の平均は%fです\n",heikin(x,y,z));
}
double heikin(double x, double y, double z){
return (x+y+z)/3;
}
>>625 本当は宿題は自分でやらないとためにならないけど、
期限が迫っているみたいだから特別。
#include <stdio.h>
#define N 50
int SetArray( int* hairetu ){
int i;
for (i=0 ; i< N ;i++) hairetu[i] = i*i;
return 0;
}
int PrintArray( int* hairetu ){
int i;
for (i=0 ; i<N ; i++) printf("H[%d] = %d\n", i, hairetu[i]);
return 0;
}
int main(){
int h[N];
SetArray( h );
PrintArray( h );
return 0;
}
631 :
デフォルトの名無しさん :2006/01/24(火) 04:28:23
>>619 わ、ありがとうございます
助かりました
634 :
デフォルトの名無しさん :2006/01/24(火) 11:33:57
だからテンプレに従えつっただろ
637 :
634 :2006/01/24(火) 11:55:14
今から作ろう
◆プログラムの仕様 ・プレーヤーは双方とも人間とする。 ・プレーヤーは標準入力から石を置く場所を入力する。 ・手の合法性の判断,挟まれた石の処理,ゲーム終了の判断,勝敗の判断,ゲーム盤の再表示,これらのことをプログラムが自動的に行う。 つまらない。
>>637 んじゃ約束どおり表示だけね
初期化やら中身はまぁ頑張って
void print_board(int board[][10]){
int i,k;
char baka[3][3]={" ","●","○"};
char num[8][3]={"1","2","3","4","5","6","7","8"};
puts(" 1 2 3 4 5 6 7 8");
puts(" ┏━┳━┳━┳━┳━┳━┳━┳━┓");
for(i=1;i<9;i++){
printf("%s",num[i-1]);
for(k=1;k<9;k++){
printf("┃%s",baka[board[i][k]]);
}
puts("┃");
if(i==8)break;
puts(" ┣━╋━╋━╋━╋━╋━╋━╋━┫");
}
puts(" ┗━┻━┻━┻━┻━┻━┻━┻━┛");
}
641 :
デフォルトの名無しさん :2006/01/24(火) 13:13:09
俺頭悪いから何がしたいのかわかなんない
643 :
デフォルトの名無しさん :2006/01/24(火) 14:33:17
644 :
デフォルトの名無しさん :2006/01/24(火) 14:35:49
648 :
デフォルトの名無しさん :2006/01/24(火) 15:00:31
649 :
デフォルトの名無しさん :2006/01/24(火) 15:01:12
i forgot to leave a message. i heard this place from Japanese friends that there are people that are good about C/C++. I can only accept english. So if there is anyone who can try these projects and have some comments. Please leave a message in English. Thank you and I appliciate so much!!
教えたその友人はどいつだ 誰が英語でメッセージなんて残すか
Yes! I am a pencil!
いや、意味がわからん
ちんぽがえんぴつサイズなんだとよ。
[1] 授業単元: 情報演習 [2] 問題文(含コード&リンク): コマンドライン引数からファイル名を入力して、そのファイルをテキストファイルと仮定して、 以下の規則に従って整形出力するするプログラムを開発したい。ソースファイルex33_1.cは このために開発したソースコードの一部である。 ex33_1.cをダウンロードし、....の部分に コード(1行とは限らない)を追加してプログラムを完成させよ。 [整形規則] 1行の文字数はdefine文により WIDTH として定義する。 1行の長さが WIDTH 文字以上の場合は、WIDTH 文字で強制的に改行する。 WIDTH 文字に満たない行は整形モード(左詰、右詰、中央寄せ)に従って表示する。 整形モードの初期値は左詰とする。 整形モードは/l(左詰), /r(右詰), /c(中央寄せ)のいずれかの2文字が連続して出現した直後に切り替わる。 /r, /l, /cの2文字は出力には表示されないが、/の後にr,l,c以外の文字が続いたときはそのまま表示され、 整形モードは切り替わらない。 1行中に/r, /l, /cが複数ある場合は末尾にある記号が有効。 /r, /l, /cは「1行の長さ」を数える文字数に含めない。 書式指定文字列中の * 関数 printf() や fprintf() 中の書式指定文字列中に出てくる * 記号は,数値と置き換えられることを意味する. 今回の場合だと,関数 flushline() 中の最後の fprintf() の書式文字列 "%*s" がそれである. * は,直後の引数の値,つまり m*(........)/2 の答えに置き換えられる.これを用いることで, s で示される文字列の表示長を状況に応じて調整して表示することができる.
655 :
654 :2006/01/24(火) 17:02:08
#include <stdio.h> #define WIDTH 80 #define LEFT 0 #define CENTER 1 #define RIGHT 2 void fillchar(char c, int m); void flushline(char *bp, int l, int m); int main(int argc, char *argv[]) { FILE *fpi; int meta = 0; int mode = LEFT; char ch; if(..........) { fprintf(......, "Illegal number of argument.\n"); return(-1); } if((fpi=..........)==NULL) { fprintf(stderr, "Can't open input file <%s>.\n", argv[1]); return(-1); }
656 :
654 :2006/01/24(火) 17:02:42
while((ch=fgetc(...))!=EOF) { if(meta==1) { switch(ch) { case 'c': mode=......; break; case 'r': mode=......; break; case 'l': mode=......; break; default: fillchar('/', mode); fillchar(ch, mode); break; } meta=...; } else if( ch == ... ) { meta=1; } else { fillchar(ch, mode); } } fillchar(..........); fclose(fpi); return (0); } void fillchar(char c, int m) { static int length=0; static char buf[........];
657 :
654 :2006/01/24(火) 17:04:26
if((length==........) && ( c!='\n')) { flushline(buf, length, m); length=0; } if(..........) { flushline(buf, length, m); length=....; } else { buf[.......]=....; } } void flushline(char *bp, int l, int m) { *(......) ='\0'; fprintf(stdout, "%*s%s\n", m*(.......)/2, "", bp); } [3] 環境 [3.1] OS: (Windows/Linux/等々) RedHat Linux [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 1月26日0時0分
658 :
654 :2006/01/24(火) 17:05:13
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ....以外のコードは書き換えないこと。書き加えるのは可。 宣言済みの変数名や型の変更は禁止。 変数の追加も禁止。 <stdio.h>, <ctype.h>に含まれないライブラリ関数の使用や、新たな関数定義は禁止。 すいません氏にそうなんで助けてください・・・ よろしくお願いします。
660 :
659? ◆giEIO/ghnY :2006/01/24(火) 17:22:00
661 :
660 :2006/01/24(火) 17:37:13
660の上に提出期限も1月25日でした。スイマセン。
At first, I should tell you about this place. This place, called "2ch" is not appropriate for serious questions, and not so many people are kind. Then, I'll leave a some comment about your homework. q-1:It is a little ambiguous for us. It said, "Represent each class using the class diagram notation described during lecture". So I can only tell you some hints. Three classes are, for example, movable blocks class, piled blocks class, and judgement class. The methods are maybe "Set valiables" and "Get valiables". q-2:I can't get meaning of this question correctly, but I think , for example, The answer is changing in 28th line of the file "Bookshelf.cpp", "return( myNumberOfBooksOnShelf );" to "if ( myNumberOfBooksOnShelf % 2 == 0){ return( myNumberOfBooksOnShelf * 2) }" and so on. I feel a little tired, so the rest may be done in the mood. :-)
663 :
662 :2006/01/24(火) 18:31:06
>>649 The answer of 4-1 is as follows.(Attention! This code is no checked!)
class Wallet
{
private:
int my_Dollars;
int my_Cents;
public:
Wallet(){ my_Dollars = 0; my_Cents = 0;}
Wallet(int d, int c ){ my_Dollars = d ; my_Cents = c;}
int getDollars(){ return my_Dollars; }
int getCents(){ return my_Cents;}
bool canPayFor( int dollarAmount, int centsAmount );
void payFor( int dollarAmount, int changeAmount );
void visitATMForCash( int dollarAmount ){ my_Dollars += dollarAmount;}
}
bool Wallet::canPayFor( int dollarAmount, int centsAmount )
{
if( dollarAmount < my_Dollars ) return true;
else if( dollarAmount == my_Dollars && centsAmount =< my_Cents )
return ture;
else return false;
}
void Wallet::payFor( int dollarAmount, int changeAmount )
{
if( my_Cent < changeAmount && 0 < my_Dollars )
my_Dollars--; my_Cent += 100;
my_Dollars -= dollarAmount;
my_Cent -= changeAmount;
}
>>659 一番簡単なソート。
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) {
if (seiseki[i] > seiseki[j]) {
temp = seiseki[i];
seiseki[i] = seiseki[j];
seiseki[j] = temp;
}
}
}
665 :
662 :2006/01/24(火) 18:45:34
669 :
659 :2006/01/24(火) 22:41:47
671 :
659 :2006/01/24(火) 22:50:42
>>669 > int ko = 0, sy = 0, su = 0, ri = 0, ei = 0;
初期化する必要はないかと
> a= tokuten[0];
なぜaに代入するのか理解できん
ソートは
>>664 の変数を書き換えるだけでいいかと
> printf("\n 結果 \n");
> for(i=0; i>100, i++){
すごい・・・ありえないな。iが100より大きい間とか
あと、ここは100じゃなくてnでするべき
>>671 日本語が全滅だ。
LinuxかUnixつかった?
>>673 エンコードの設定をShift-JISにしる
676 :
659 :2006/01/24(火) 23:12:36
指導してくださった皆さんありがとうございます。 やっと動くようになりました。提出も何とか間に合いそうです。 本当に感謝です。
678 :
660 :2006/01/25(水) 00:09:37
660ですけど、本文等で何か不手際ありますでしょうか? あれからもいろいろとやってみたんですが、 やればやるほど悪くなるばかりで一向によくなりません…
読んだ。
>>660 遺伝的アルゴリズム(GA)か。
課題全文と、参考資料を書いたほうがいいと思うぞ。
680 :
デフォルトの名無しさん :2006/01/25(水) 00:38:47
[1] 授業 数値計算C言語プログラム [2] 問題文 任意の微分方程式を数値解放で解きなさい ただし解き方としてオイラー法かルンゲクッタ法を用いて計算するプログラムを作成せよ 任意の方程式として y'+xy=0 を挙げてみました もしよければ好きなものでもかまいません [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] 言語: C [4] 期限: 明日まで [5] その他の制限: 特にありません 本当によろしくお願いします
>>660 うむ。遺伝的アルゴリズムのプログラムを組めと言われたと正直に言うべきだな。
malloc()うんぬんの問題もあるが、アルゴリズムの定義が足りない。
>>680 ルンゲクッタ 微分方程式 で ググって一発なんだが…
>>680 オイラー法ってこんなんだっけか。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
double x,y,h,range;
x = atof(argv[1]);
y = atof(argv[2]);
h = atof(argv[3]);
range = atof(argv[4]);
for(;x<range;x+=h,y+=(-1)*h*x*y) printf("%f %f\n",x,y);
return 0;
}
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): [T] n人分について国語,社会,数学,理科,英語の5科目の得点を入力し, 各科目の最高点を出力するプログラムを作成せよ。 ただし,各科目の配列名をjap,soci,math,sci,engとすること。 [U] 5人の学生の4科目の試験の得点(1科目につき満点は100点)を入力する. 1人分入力する毎に「合計得点が240点以上で, かつ各得点が40点以上であるとき合格とする」の条件で,合否を判定せよ. [3] 環境 [3.1] OS: WindowsXP [3.2] 初心者なんでわかりません。 [3.3] 言語: C かな。 [4] 期限: [本日中] C言語難しくて、僕には全くわからないです。 期限も迫ってきてるんでよろしくお願いします!!!
>>660 geneが3以上になったときの交雑の定義は?
ペア作って入れ換え? それとも乱交?
ちなみに評価は「evaluation」(関数なら動詞の「evaluate」)。
srand抜いて、ひとつずつ変更しながら確かめていけばそんなに難しくはないと思う。
>>683 もっとスマートな書き方があるだろうけど、一応動くから書いておく
#include<stdio.h>
int main(){
int n,i;
int jap[128],soci[128],math[128],sci[128],eng[128];
int japh=0,socih=0,mathh=0,scih=0,engh=0;
printf("人数を入力してください:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d人目の得点を入力して下さい\n",i+1);
printf("国語:");
scanf("%d",&jap[i]);
if(jap[i]>japh) japh=jap[i];
printf("社会:");
scanf("%d",&soci[i]);
if(soci[i]>socih) socih=soci[i];
printf("数学:"); scanf("%d",&math[i]); if(math[i]>mathh) mathh=math[i]; printf("理科:"); scanf("%d",&sci[i]); if(sci[i]>scih) scih=sci[i]; printf("英語:"); scanf("%d",&eng[i]); if(eng[i]>engh) engh=eng[i]; printf("\n"); } printf("\n各科目の最高点\n"); printf("国語%d点 社会%d点 数学%d点 理科%d点 英語%d点\n",japh,socih,mathh,scih,engh); }
こっちは更に変な書き方… [U] #include<stdio.h> int main(){ int i,n=5; int jap,soci,math,sci,eng; for(i=0;i<n;i++){ while(1){ printf("%d人目の得点を入力してください\n",i+1); printf("国語:"); scanf("%d",&jap); printf("社会:"); scanf("%d",&soci);
printf("数学:"); scanf("%d",&math); printf("理科:"); scanf("%d",&sci); printf("英語:"); scanf("%d",&eng); if(jap<=100 && soci<=100 && math<=100 && sci<=100 && eng<=100) break; else printf("得点は100点満点で入力してください!!\n"); } if(jap>=40 && soci>=40 && math>=40 && sci>=40 && eng>=40 && jap+soci+math+sci+eng >= 240) printf("合格じゃ!\n"); else printf("不合格じゃ!出直して来い!\n"); } }
691 :
680 :2006/01/25(水) 03:42:43
エロゲですか? ∧_∧ ( ・∀・) ∧ ∧ ( ⊃ ) (゚Д゚;) ` ̄ ̄ ̄ ̄(つ_つ_ ` ̄日∇ ̄\|BIBLO|  ̄ =====
[1] 授業単元: 情報数学 [2] 問題文(含コード&リンク): シンプレックス法プログラミング課題 1 2変数(x,y)のシンプレックス法とする。 2 プログラミングができたら、数値を代入して確認する @条件: 2x+y <=100,3x+6y<=240のときz=2x+3y 答え: x=40,y=20のときz=140 A条件: x=2y<=40,3x+2y<=60のときz=2500x+4000y 答え: x=10,y=15,z=85000 B条件: x+2y<=40,3x+2y<=60のときz=2000x+4800y 答え: x=0,y=20のときz=96000 [3] 環境 [3.1] OS: WindowsXP [3.2] VisualC++.NET [3.3] c言語 [4] 期限:2006/1/30 [5] その他の制限: とくになし
695 :
デフォルトの名無しさん :2006/01/25(水) 11:13:46
[1] 授業単元: 情報演習U
[2] 問題文(含コード&リンク):
以下のヒントを参考にして動的計画法を用いてナップザック問題を解くプログラムを作成せよ。
(組み合わせとその合計重量を順次出力するよう)
(ヒントは以下)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006年1月26日まで
[5] その他の制限:動的計画法を用いる。
ヒントはここにあります。(1535.txt)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi? ナップサック問題です。
容積の決まった袋に、価値が最大になるようになるつめ方を見つけるという問題です。
制約として、「一番目の荷物から組み合わせを順番に検証し、新しい荷物を追加するたびに、『重量が同じで価値の最高が更新されればその時点時一度出力し、されなければそのまま次へいく』というのを繰り返す」というアルゴリズムでお願いします。
k番目の荷物のkを行、物品の合計重量を列にした二次元の表にして途中経過、結果を出力したいと思っています。
あまり時間が無いですがお願いします。
696 :
デフォルトの名無しさん :2006/01/25(水) 11:24:05
>>694 すいません、間違えてました。
本当は、
A条件: x+2y<=40,3x+2y<=60のときz=2500x+4000y
です。
>>696 それはそれで条件Bと全く同じになってしまうんだが
698 :
693 :2006/01/25(水) 11:38:45
>>698 あれ?俺なにか勘違いしてる?
@の条件に当てはまったら結果を表示
当てはまらなかったらAの条件で〜・・・って感じでBまで行くと思ってたんだけど
それだとAとBが全く同じ条件だと永遠にBが実行されないよね
そういう意味じゃなかった・・?
700 :
デフォルトの名無しさん :2006/01/25(水) 11:50:52
2] 品物 個数 単価(ドル) の関係を示しているとする. A 1 1.2 B 3 4.0 C 2 2.4 D 4 3.5 E 1 2.6 F 5 3.3 G 3 5.7 test.datを読み込み,各品物の合計金額を円に換算してファイル(enn.dat)に書き込むプログラムを作成しなさい. ただし,1ドルは114円とする. enn.datの中身の例(一円以下は四捨五入) A 137 B 1368 C 547 D 1596 E 296 F 1881 G 1949 レポートにはenn.datの中身を示しなさい. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月25日まで お願いします・・・orz
あまり小難しい数学分野の問題は解けない ナップザック問題?何それ
>>702 コピペ&改行修正しただけなんです。すいません
[1]授業単元:プログラミング [2]問題文: @abc.txtから英文を読み込み画面に表示する A@の英文の回答をキーボードから入力し、ans.txtとして保存する B@の英文の文字数と単語数を数え画面に表示する(例:See you laterなら文字数は11、単語数は3) C4文字の英単語をキーボードから入力し、文字コードの合計をsum.txtに出力する [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:Visual C++ .NET [3.3]言語:C [4]期限:今週中 [5]その他の制限:なし お願いします
>>700 (゚Д゚)ノ ァィ
#include<stdio.h>
int main(void){
float x;
int k;
char name[3];
FILE *rp,*wp;
rp = fopen("text.dat","r");
wp = fopen("enn.dat","w");
while(fscanf(rp,"%s%d%f",&name,&k,&x)!=EOF)
fprintf(wp,"%s %d\n",name,(int)(x*k*114+0.5));
fclose(rp);
fclose(wp);
return 0;
}
>>706 有難うございます!有難うございます!ありggggggえうydヴぃks
本当にありがとう
708 :
デフォルトの名無しさん :2006/01/25(水) 12:20:04
[1] 授業単元: [2] 問題文(含コード&リンク): 変数x,yにそれぞれ8と5を代入して,x/yを計算し, 整数解と実数解を出力するプログラムを作成せよ。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] コンパイラ名とバージョン: (わかりません) [3.3] 言語: (C) [4] 期限: (06年01月25日14:00まで) 初心者です。 提出期限が近く、大変急いでいます。 どなたよろしくお願いします。
>>705 数えるのは入力した方なのか?
それとも読み込んだ方なのか?
711 :
デフォルトの名無しさん :2006/01/25(水) 12:27:17
>>695 ヒントのほうに書いてあるんですけど
(重量、価値)=(2,4),(3,5),…,(6,11)という6個の荷物を重量制限10の鞄に入れるとき、
重量制限内&価値が最大になる組み合わせを見つける問題です。
自分はヒントのプログラムがわからなくて…。
>>708 #include <stdio.h>
int main(){double x=8,y=5;printf("%d,%g\n",(int)(x/y),x/y);return0;}
>>711 アルゴリズムとしてはオブジェクト(荷物)の合計が10以下の組み合わせを総当りにかけて
その中で価値がもっとも大きい組み合わせを保存するってのでいい?
美しくないけどそれしか思いつかない
>>712 >int main(){double x=8,y=5;printf("%d,%g\n",(int)(x/y),x/y);return0;}
つーか、
>int main(){int x=8,y=5;printf("%d,%g\n",x/y,(double)x/y);return0;}
の方がよかないか。
>>706 >while(fscanf(rp,"%s%d%f",&name,&k,&x)!=EOF)
間違っている。nameに&は要らん。
>>714 (゚Д゚)ノ ァィ とりあえずBまで
何か文字列関数使えば綺麗になるのかもしれないけど俺には思いつかない
#include<stdio.h>
int main(void){
FILE *fp;
char str[256],ans[256];
int cnt1=0,cnt2=0,i=0,flag=0;
fp = fopen("abc.txt","r");
fgets(str,256,fp);
printf(">%s\n",str);
fgets(ans,256,stdin);
fp = fopen("ans.txt","w");
fprintf(fp,"%s",ans);
while(1){
if(str[i]=='\0')break;
if(flag==0&&str[i]!=' '){
++cnt1;
flag = 1;
++cnt2;
}
else if(flag==1&&str[i]==' ')
flag = 0;
else if(str[i]!=' ')++cnt2;
++i;
}
printf("%d %d\n",cnt1,cnt2);
return 0;
}
>>715 おお!しまった!
最初文字列じゃなくて文字で作ってたから消し忘れた!
でも、おもしろいからそのまま出してね♥
>>705 (゚Д゚)ノ ァィ C
認識間違ってても知らん
#include<stdio.h>
int main(void){
FILE *fp;
char str[5];
int sum=0,i;
fp = fopen("sum.txt","w");
fgets(str,5,stdin);
for(i=0;i<4;i++)
sum += str[i];
fprintf(fp,"%d",sum);
return 0;
}
720 :
デフォルトの名無しさん :2006/01/25(水) 13:10:35
Cool, man!!
>>662 i really appliciate that you tell me about this place and did that project!!
i can see you're good with C++.
i hope another people do my projects which i left cause' it's going to come one after another... you know?
anyway, thank you for taking your time!
i'll try to run it though!!
721 :
708 :2006/01/25(水) 13:14:51
>>712 本当に助かりました。
ありがとうございます。
723 :
デフォルトの名無しさん :2006/01/25(水) 13:30:54
>>713 アルゴリズムについて(これが制約なんで)。
「まず一個目を入れるか入れないか」で2通り、
「上の2通りに対し、二個目を入れるか入れないか」で4通り
と言うのを6個目まで繰り返していきます。
新しい荷物で組み合わせができるたびに、以前にできた同じ重さの組み合わせと比べ、
総価値が上まっていれば組み合わせを記録して新しい価値を上書き。
ヒントで大まかな形は示されてるのはわかります。
答えが「3個目と5個目を入れた総価値19」だということもわかってるんですけど、
プログラムでできない…。
r-──-. __ / ̄\|_D_,,|/ `ヽ l r'~ヽ ゝ__.ノヽ/~ ヽ l | | l ´・ ▲ ・`━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ゝ::--ゝ,__∀_ノヽ--::ノ / ) ∩ / ,イ 、 ノ/ ドゴォォォ _ / 【呪いのトンファービームパンダ】 | | / / | (〈 ∧ ∧―= ̄ `ヽ, _ | | | | | } ∵. ・( 〈__ > ゛ 、_ このコピペを見たら明日死にます。 | | | | ヽ ヽ’ (/ , ´ノ \ 他の場所にコピペしても無駄です。 | |ニ(!、) \ \ / / / ∪ / ゝ ) / / ,' / / { | / /| | / _/ | |_ !、_/ / 〉 ヽ、_ヽ {_ ___ゝ |_/
(゚Д゚≡゚Д゚)マジか!
ああ、各商品は1個ずつか。無限個で考えていた。
おい!お前ら死ぬぞ! 対策を立てなければ!(・ω・)ゝ
何で2回お礼書いてんの?
>>549 おねがいします。ほんとに、お願います、切実なんですよ。m(。_。)m
もう過ぎてるじゃん
非常難しいから俺達にも解けないんだってさ
(゚Д゚)ノ試験勉強の気分転換だからんな長いのやりたくないお
[1] 授業単元:ポインタ [2] 問題文(含コード&リンク): 配列要素の合計を表示させるプログラムを ポインタとユーザ定義関数を使用して作っています。 ユーザ定義関数が返ってきた所をどう書けば良いか悩んでいます。 ソースではなく、日本語でヒントが欲しいです。 #include <stdio.h> int s_Total(int *n1); int main() { int no[] = {32, 18, 45, 25, 62, 51, 89,100, 6, 77}; int sum = 0; 【この部分】 return(0); } [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VisualC++6.0 [3.3] 言語:C++ [4] 期限:今日中 [5] その他の制限:変数sumに合計を代入して使用し、合計した値のみ表示 C言語開始1週間の初心者なのですが、宜しくお願いいたします。
半ソースにしてみた。 sum = 合計を取る関数(int* データ配列の先頭ポインタ, int 配列の要素数); 関数の中身は自分で考えな。
感覚の問題 例えば12という定数が返す値は12 同様にno[0]の変数が返す値は32 またs_Total関数が返す値はreturn n;の値だ
授業始まって1週間でポインタかい
738 :
デフォルトの名無しさん :2006/01/25(水) 14:38:01
>>726 そうです。商品はひとつずつです。
お願いします。
std::accumulateで一発解決とかは駄目なのかなぁ......
[1] 授業単元:ホリエモン [2] 問題文(含コード&リンク):ホリモンの目指した企業をシミュレートせよ! [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VC++ [3.3] 言語:C++ [4] 期限:ホリエモンが出所するまで [5] その他の制限:なんでもOK
(2, 4) 2 4 (3, 5) 3 5 (2, 4) (3, 5) 5 9 (2, 4) (4, 8) 6 12 (3, 5) (4, 8) 7 13 (2, 4) (3, 5) (4, 8) 9 17 (2, 4) (3, 5) (5, 9) 10 18 (4, 8) (6, 11) 10 19 ソースは汚いので、パス。
>>740 そのうちRPGツクールで出てくるだろうからそれまで待て。
744 :
734 :2006/01/25(水) 15:18:57
745 :
デフォルトの名無しさん :2006/01/25(水) 16:48:55
[1] ポインタ [2] 問題文(含コード&リンク): 5桁以下の文字(数字を除く)と5桁以下の数字からなる文字列(例えば TARO1970) を入力し(必ず、文字の固まりの次に数字の固まりがあると仮定する)、これを分解して、文字部分を文字配列へ、数字部分を整数型の変数へ格納して、それぞれを標準出力へ出力 するプログラムを書け。但し、文字列の分解にはポインタ変数を使用すること。 /* 数字の抽出に使用すること*/ if ( (0<=(*cp-'0')) && ((*cp-'0')<=9) ){ ・・・・・・ } [3] 環境 [3.1] Linux [3.2] gcc 2.9 [3.3] C言語 [4] 06年2月1日まで [5] 標準ライブラリの使用は無しです。 まだ、基礎の基礎しか習っていないのでとりあえず 「動けば」それでいいという段階です。 できるだけ、簡単な作りが好ましいです。 よろすくおながいしまふ。
746 :
:デフォルトの名無しさん :2006/01/25(水) 16:52:13
セットアップするときプロダクトIDがわからないんですが どうしたらいいですか?
標準ライブラリがないと何もできないわけだが
>>745 #include<stdio.h>
int main(void){
char in[11],str[6],*cp,*c;
int num[5],*p,i,n=0;
fgets(in,11,stdin);
cp = in;
c = str;
p = num;
while(*cp!='\0'){
if((0<=(*cp-'0'))&&((*cp-'0')<=9)){
*p = *cp-'0';
++p;
++n;
}
else{
*c = *cp;
++c;
}
++cp;
}
*c = '\0';
printf("%s\n",str);
for(i=0;i<n;i++)
printf("%d",num[i]);
return 0;
}
749 :
:デフォルトの名無しさん :2006/01/25(水) 17:14:14
>747 さっそく回答ありがとうございます。 次にDISC2をいれてみたのですが「現在CDにあるファイル」 とでてでうすればいかわかりません。
CD=コンパクトディスク 音楽を聞くあれだ! 決してカレントディレクトリではないから騙されるな!
はいはい割れ割れ
752 :
デフォルトの名無しさん :2006/01/25(水) 17:20:50
#include<stdio.h> int main(void) { int c =100; size_t sz; sz = sizeof c; printf("size of int = %d\n",sz); return 0; これでコンパイルするとCに代入した値が使われていないとでるのですが、 理由を教えてくれませんか?
>>549 まだ間に合うの?結構めんどい&長くて疲れるので、
できればやりたくないんだが・・・
755 :
デフォルトの名無しさん :2006/01/25(水) 17:27:54
>>754 えぇ、使ってないってどういうことですか?
>>752 sz = sizeof c;
ここの部分をコンパイラは
sz = sizeof (int);
これと同じと解釈したんじゃね?
>>755 cに初期化時につっこんだ100がまったく放置プレイじゃんってこと
警告なんてどうでもいいけど
出したくないなら
int c
にするか
int c=100消して
sizeof c → sizeof(int) にする
>>758 確かアクセス制御が掛かってる領域に権限無しで入ると
不正アクセス禁止法に引っかかると思ったが、おまいに責任が取れるのか?
すいませんでした。 しりませんでした。 問題文を載せます。
761 :
デフォルトの名無しさん :2006/01/25(水) 18:09:11
>>756-757 え、っていうことはCに何が入っててもこのsizeofってやつは
charが何バイトかしか見れないってことなんですか?
俺はてっきり100っていう数字のサイズが知れるんだと思ってたんですけど
>>761 sizeof演算子は型以外の事は一切関知しない
例えば、\0が入っていようが\x30が入っていようが
sizeof(c)は常にcの型のサイズ
つまりchar型に限って言えば、sizeof(char)=1と保証されてる
sizeof演算子は結構いい加減
764 :
デフォルトの名無しさん :2006/01/25(水) 18:17:45
>>762 そーなんですかー勉強になります。ありがとうございました
>>761 100を入れようが65535やら-32767入れようが器の大きさは同じ(int型)
っていうかその器の大きさの宣言がintとかdoubleとか。
見た目は子供,頭脳は大人ってことだな。 ;y=ー(゚д゚)・∵. ターン
767 :
デフォルトの名無しさん :2006/01/25(水) 18:35:19
[1] 授業単元: プログラミング基礎演習 [2] 問題文(含コード&リンク): 1.整数 P, X (1 < X < P で, P, X は互いに素) を与えて, X × Y を P で割った余りが 1 になるもっとも小さな正整数 Y を求めるプログラムを書いてください。 2.ユークリッドの互除法(正整数 X, Y (X > Y) の最大公約数は X を Y で割った余りと Y の最大公約数に等しい)の手順を使って最大公約数を見つけるプログラムを作れ 3.2を利用して1のプログラムを作り直せ。(P と X は「互いに素」なので,両者の最大公約数は必ず 1 というのを使う) [3] 環境 [3.1] unix [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] C [4] 期限:2006年1月末
768 :
767 :2006/01/25(水) 18:40:22
さらに [1] 授業単元: プログラミング基礎演習 [2] 問題文(含コード&リンク): 1.getchar, putchar を用いて標準入力(stdin) からテキストデータを読み込みそのまま 標準出力(stdout) に書くプログラムを作成せよ。 ファイル末尾に達すると getchar の値が EOF になるのを利用するとよいだろう。 2.1のプログラムを改良して,アルファベット文字に関して大文字は小文字に変換,小文字は大文字に変換して表示するプログラムを作成しなさい。 3.1のプログラムを改良してそのままじゃなくて「行番号」を付けて表示させよ。 4.英文テキストファイルを読込んで,文字数,単語数,行数をカウントして表示するプログラム mywc を作成しなさい。 [3] 環境 [3.1] unix [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] C [4] 期限:2006年1月末
769 :
デフォルトの名無しさん :2006/01/25(水) 18:46:15
もう1つ [1] 授業単元: プログラミング基礎演習 [2] 問題文(含コード&リンク): 1.2つの分数(fraction)を入力し,その四則演算(+,-,*,/)を計算するプログラムを作成してください. ただし,次の構造体を利用すること.ここでは,四則演算を関数化しないこと.また,既約分数にしなくとも良いです. /*fraction_t型の定義*/ typedef struct { int numerator; /*分子*/ int denominator; /*分母*/ } fraction_t; /*fraction_t型の変数の宣言*/ fraction_t frt; 2.和(add),差(subtract),積(multi),商(quotient)を計算する4つの関数を作成せよ. その関数を利用し,1のプログラムと同じ構造体を利用し,同じ動作をするプログラムを作成せよ. 3.2のプログラムで,計算が正しく行われない場合を列挙して,その対応策を考えよ. (例 1/-2 のような計算結果は,美しい表示方法とはいえません) 4.3で列挙した対応策を,2で作成したプログラム上で実現せよ. [3] 環境 [3.1] unix [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] C [4] 期限:2006年1月末
[1] 授業単元:関数 [2] 問題文(含コード&リンク): 半径、高さから円柱の表面積を求める関数を 作りたいのですが、どう作って良いのか判りません。 プログラム自体は自分で考えたいので フローチャート?のようなモノが欲しいです。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VisualC++6.0 [3.3] 言語:C++ [4] 期限:大至急 [5] その他の制限:とくになし 初心者なので、お手柔らかにお願いします。
>>549 どうも間に合わなかったっぽいね。途中まで着手したけど、
やめておくか。
申し訳ないがやるやつ居ないと思うぞ
>>774 ごめんなさい。
ググったんですけど、プログラムそのものばかりしか
みつけられなかったんで、ここに書き込んでみたんです。
ごめんな・・・父さんはCしかしらないんだ・・・
>>775 半径があるだろ?
ってことは円柱の上下の円の部分の面積は計算できるよな?
高さがわかってるな?
円柱を展開した時さっきの円の部分以外のところって高さ×円の円周の長方形になるだろ?
もうわかるよね?
>>771 半径と高さの2つから表面積を算出する方法が分からないってことだろ?
そんなのC/C++以前の問題として算数からやり直せよ
>>771 データを入力させて、それを円柱の表面積を求める関数に渡して、
円柱の表面積=円の半径の自乗×円周率×2 +
円の半径×円周率×2 × 高さ
に代入して、その値を返せばいい。
780 :
779 :2006/01/25(水) 20:02:17
やべっ、書きすぎたか?
誰もフローチャートをかかない件。
ユークリッド先生なら現在待機中です。
何その互除法みたいな先生
>>770 pgmファイルが無い上、
既に作成されているメソッドまで回答者が入力しろというのか?
甘えすぎ。
配布されてるプログラムも必要だなぁ。>pgmの人
(,,゚Д゚)∩先生C言語だとメソッドでなくて関数だと思います
なんども 不手際ですいません。 770ですけども。 関数relevancy() を作ってほしいのです。 課題2に関しては、自分で考えたいと思いますので。 どうか お願いします。
嫌です><
やだ(´σ `) ホジホジ
どうしてでしょうか?
>>740 むしろホリエモンをシミュレート
#include <iostream>
#include <string>
int main() {
std::string names = "ホリエモン ホラエモン ゼンカモン ホラレモン ムイチモン ドザエモン", scale = " ┝━━━━━┿━━━━━┿━━━━━┿━━━━━┿━━━━━┥";
for (int i = 0; i < 6; ++i) {
std::cout << names << '\n' << scale << "\n ";
for (int j = 0; j < i; ++j) std::cout << " ";
std::cout << "↑今この辺\n" << std::endl;
}
return 0;
}
>>770 まあこうなったらやってもらうのは、諦めた方がいいな。
この流れでやってもらった人はほとんどいないだろう。
もう少し書くと、最初大元の問題を挙げた時に、ここからの
アクセスが増えているはずだから、たぶんチェックされるだろうな。
pdf中に書いてあるプログラムを打ち込むことまでさせますか? なんか知らんが、パーミッションエラーになっとる。
>>784 PDFなんだからコピペできるじゃんwww
あれ?770のpdf、削除されてるね。諦めたのか?
おお、そうなんだ。じゃあ、コピーしてzipでまとめてくれ。
>>794
iwatenet氏に嫌がらせのメールを送らないように。
>>795 >>770 のはまだ生きてるだろ
大元の奴はhtaccessにdeny from allでも書かれたっぽいが
あー。まあ19時とかだったら、平気で研究室に残ってる人いるからなぁ。deny from allかぁ。
800 :
795 :2006/01/25(水) 21:28:06
>>798 あ、本当だ。早とちりスマソ。700の方は生きているね。
しかし、合コン出会い系サイトにファイルが置いてあるって・・・
激しくやる気をそぐね。
801 :
794 :2006/01/25(水) 21:28:37
>>796 俺770じゃないのに(´・ω・`)
まぁ、書き終わって自分でPGM作って認識させて遊んでたりするんだがな!
教えてくださいよ
やってもいいんだが、 1)たぶん、先生、ここ見てるぞ。それでもいいか? 2)やるにしても、提示されてるファイル(ソース、サンプル画像類)をどっかに上げてくれ
香ばしいな
ほんとうに ありがとうございます。
807 :
ww :2006/01/25(水) 22:36:20
よかったね
808 :
ん? :2006/01/25(水) 23:06:25
俺もここの学生だけど、805の式って 問題にあってる?
810 :
795 :2006/01/25(水) 23:21:31
当然全て自己責任。しかし、先生も気づいているだろうに、 これを使おうとはなかなかチャレンジャーだな。
相関の算出がまちがってる気もする。
812 :
お願いします :2006/01/25(水) 23:45:12
でも、ほかに やりかた ありますか?
ん・他の方法が出てくるのを待つ<やり方
814 :
お願いします :2006/01/26(木) 00:17:17
やりかた というか 本気で知りたいんです。
815 :
デフォルトの名無しさん :2006/01/26(木) 00:20:41
>>695 >>711 そろそろまじやばい。
ヒントの空欄埋めて出力する部分を作らないといけないんです。
お願いします。
>本気で知りたいんです。 うんうん。知りたいのはわかったから。 本気なら調べるくらいはしたら? 追記: くれぐれもセンセに教えるとかVIPに知らせるとか、 メールアドレス晒すとかしないよーに。
んー。あのソース見づらいからビットのON/OFFで組み合わせを表現(5ビットですな)。 整数型の変数を0〜2^5-1でループさせて・・・って組んだんで、UPはできないなぁ・・・。
818 :
お願いします :2006/01/26(木) 00:34:16
一応 平行して 調べたりしてるのですが、なかなか わからないので。。。
iwatenet氏、私も調べてみた。 >_ [仕事] 認証のやりなおし > >このサーバに設置している講義のサポートページには認証をかけ、特定の人以 >外には見られないようにしている。その認証に必要な ID とパスワードが流出 >した。 > >流出させた人は、課題が書かれた PDF を見せて質問したかったらしい。課題 >そのものが曝されるのはともかく、その他に外部に曝したくない情報までアク >セス可能になってしまうのは好ましくないと判断し、アクセス制限とパスワー >ドの変更で対処した。どういう経緯で知ったか、具体的に何がまずいと考えた >かについてはここでは伏せる。 > >それにしても、課題について訊きたいことがあるなら、メールを筆者宛に出す >なり、直接筆者のところまで質問しに来ればいいのに。ちょっと落ち込むなあ いい先生だなぁ。 先生。講義資料をOPENにしてくださると、独学してる人間は助かります。 それと、学校でマジメに勉強しようとは思わない人間にいくら課題だしても 自分でやらんと思います。
820 :
805 :2006/01/26(木) 00:50:06
同じ画像で1.0、反転した画像で-1.0になることは確認したけど。 正しく数値出るけど、要求してる式とは違うって事?
課題のPDFファイル見る限り、学生に課題投げて後シラネって感じはないな。 課題の関数部分もちゃんと簡単な擬似コーディングしてあるし、 説明も平易でわかりやすく書いてある。
さて、浮動小数点型の「一致」をどう定義するかだが…。
>>819 >先生。講義資料をOPENにしてくださると、独学してる人間は助かります。
俺漏れも。なんだったら月会費払ってもいいよ。1000円ぐらい。
すまん。流出発覚は俺のアクセスかもしんない。 IPに地域名でるんだ‥九州からじゃ丸分りだったな。
>>819 いい先生だ・・・受けるなら、こんな先生の講義を受けたいね。
普通だったらこんな事態になったら、酷い場合は退学処分にすら
なるのに。
827 :
ww :2006/01/26(木) 01:28:02
828 :
ぷろっぷ :2006/01/26(木) 01:33:04
たしかに いい先生だよ!!
ソースは、センセのページのmisc.log。 正直に言うけど、Makefileまで書いてくださってるので、すんごく親切。 あの資料作るのに何時間かけてるんだろ…。
さて、寝よ。明日のゴミだしに起きられなくなる。
もやしうまかった さて○○○して寝るか
832 :
805 :2006/01/26(木) 02:02:25
腹減った
試験勉強するために3時間睡眠でおきて来た さぁお前らの宿題なんてやってらんね勉強しよ 宿題出すやつもちっとは自分で考えてみやがれ
依頼者はせめて回答者をやる気にさせる努力をしないとなw
>>835 確率統計と科学英語
まぁ大学の試験勉強
>>836 そうかー
宿題はなんとかするからガンガレ! 健闘を祈る ノシ
なんとかするってのは 回答者なのか依頼者なのか
839 :
デフォルトの名無しさん :2006/01/26(木) 06:59:21
【質問テンプレ】 [1] 授業単元: ファイルの入出力 [2] 問題文(含コード&リンク): 3個の数を入力し、それぞれを係数a, b, cとみなして 関数f(x) = ax2+bx+cが描くグラフを'*'を用いて表示するプログラムを作成せよ。 X軸、Y軸もつけて [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月26日10時 [5] その他の制限:特になし 誰か助けてください。atoiでも使うんでしょうか・・・
むしろatoiをどこで使うのか教えてください
842 :
デフォルトの名無しさん :2006/01/26(木) 08:26:03
特に指定してないです。画面上に収まればOK
>>839 時間ないから超適当w
$ a.out .2 .4 .1 みたいな感じで。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define RANGE 20
int main(int argc,char *argv[]){
int graph[RANGE*2][RANGE*2],i,j,temp;
float x,y,a,b,c;
memset(graph,0,sizeof(graph));
a = atof(argv[1]);
b = atof(argv[2]);
c = atof(argv[3]);
for(i=0,x=(float)(-1)*RANGE/10;x<(float)RANGE/10;x+=.1,i++){
y = a*x*x + b*x + c;
temp =(int) RANGE + y * 10;
graph[temp][i]=1;
}
for(i=RANGE*2-1;i>=0;i--){
for(j=0;j<RANGE*2;j++){
if(graph[i][j]==1) printf("*");
else if (i==RANGE) printf("-");
else if (j==RANGE) printf("l");
else printf(" ");
}
printf("\n");
}
return 0;
}
あー,配列の範囲考えるの忘れた…。 if((0<=temp)&&(temp<RANGE*2)) graph[temp][i]=1; だな。
845 :
デフォルトの名無しさん :2006/01/26(木) 09:54:10
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): リストA:2,5,9,10 リストB:1,4,7,11 この2つのリストを先頭から順に読んで、以下の様なリストCを作る。 リストC:1,2,4,5,7,9,10 この様な操作はA,Bが整列されている事を前提とした上で、各リストの長さの和に比例する時間でリストマージが終了する。アルゴリズムとして書けば以下の様になる。 リストCを空とする リストAの先頭をtopA、リストBの先頭をtopBとする(以降の動作では現在の位置となる) topAもしくはtopBが空でない間、以下を繰り返す topA->data<topB->dataならばtopA->dataをリストCにつなぎ、topA=topA->nextとする。topA->data>=topB->dataならばtopB->dataをリストCにつなぎ、topB=topB->nextとする。 注1:リスト構造は一方向とし、各要素はdata領域とnext領域を持つものとする。 注2:上記のアルゴリズムのままではtopAもしくはtopBが空になっても存在しないdata領域を使おうとするので、修正の要がある。 注3:リストマージの結果としては生成されたリストCを返す事。 課題:リストマージの関数を実現し、それを利用してリストマージを行え。リストのデータとしては整数を想定せよ。データは上記のデータを想定せよ。各リストに対して標準入力から入力するものとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006/01/27 [5] その他の制限: 留年かかってますなんとかお願いします
いつもは回答者の俺も単位がやばいんだ。すまんな。 土日ならやってやれるんだが…。
高卒の漏れにも分かるな。大学のC言語はヘボいもんだな。
高卒の漏れでも解けるんだからお前ら自分でやれよwwwwwwwww 適当に大学に入ったカスどもがwwwww
>>845 適当に行詰めたから自分で適宜改行してくれ
>>848 口だけだから高卒止まりなんですか?
言うだけなら幼稚園児でも出来ますよ
#include<stdio.h>
#include<stdlib.h>
typedef struct list list;
struct list{list*next;int data;};
list*cons(int data,list*next){
list*p=(list*)malloc(sizeof(list));
p->next = next;p->data = data;return p;}
list*maaaaazi(list*a,list*b){
list*base=NULL;list**c = &base;
while(a && b){
list**p=a->data < b->data ? &a : &b;*c = *p;*p = p[0]->next;c = &c[0]->next;
}
*c = a?a:b;
return base;
}
int main(void){
list*A = cons(2,cons(5,cons(9,cons(10,NULL))));
list*B = cons(1,cons(4,cons(7,cons(11,NULL))));
list*C = maaaaazi(A,B);list*itr;for(itr = C;itr;itr = itr->next)printf("%d,",itr->data);
return 0;
}
おっと、入力データは標準入力からか。 まぁ、それ位は出来ると思うからその辺は自分でやってくれ。 fgets + strtolで簡単に出来るから
と、言いつつ暇なので書いてしまった。 上のソースのmain関数の部分をこれと置き換えて list*inputList(char*p){ char*next=p; int v = strtol(p,&next,0); if(p == next)return NULL; else return cons(v,inputList(next)); } int main(void){ list*A,*B,*C,*itr; char buf[80]; printf("A:");A = inputList(fgets(buf,80,stdin)); printf("B:");B = inputList(fgets(buf,80,stdin)); printf("C:");C = maaaaazi(A,B); for(itr = C;itr;itr = itr->next)printf("%d,",itr->data); return 0; }
852 :
デフォルトの名無しさん :2006/01/26(木) 11:34:14
>>843 ありがとうございます。
でもコンパイルするとmemsetの前がエラーって出るんですが・・・
>>852 エラーメッセージの内容も書かない奴に何を言えと?
854 :
デフォルトの名無しさん :2006/01/26(木) 11:43:59
単に「error before memset」です。
855 :
821 :2006/01/26(木) 12:06:20
だれかお願いします!
>>819 寝てる間にえらいことになってるなw
まぁ先生に通報したのは俺な訳だが。
普段ならスルーしてるが、ID/Passまで晒したのが
仮にもム板に来てる人間にしてはモラル無さ杉だと思ったんでな
ってか、ほんとにいい先生だな
>>855 #include <stdio.h>
#include <math.h>
#define PI 3.141592653589793238462643383279502884197169399375105820974944
double deg2rad(int deg){
return ((2*PI*deg)/360);
}
main(){
int i;
double d;
for(i=0;i<=360;i++){
d=deg2rad(i);
if(
printf("%d deg=%.6f[rad], sin=%.6f, cos=%.6f, tan=%.6f\n", i, d, sin(d), cos(d), tan(d));
}
}
途中まで
858 :
767 :2006/01/26(木) 12:55:31
誰か頼む
>>855 #include <stdio.h>
#include <math.h>
#include <float.h>
#define PI 3.141592653589793238462643383279502884197169399375105820974944
typedef struct {
int c1;
int c2;
}comp;
double deg2rad(int deg){
return ((2*PI*deg)/360);
}
main(){
int i;
double d;
comp c;c.c1=0;c.c2=0;
for(i=0;i<=360;i++){
d=deg2rad(i);
if(i==90||i==270){
printf("計算不可\n");continue;
}
if(fabs(sin(d)/cos(d)-tan(d))<DBL_EPSILON){c.c1++;}else{c.c2++;}
printf("%d deg=%.6f[rad], sin=%.6f, cos=%.6f, tan=%.6f, c1=%d, c2=%d\n", i, d, sin(d), cos(d), tan(d), c.c1, c.c2);
}
}
c1が一致回数、c2が不一致回数ね
高卒で現在27歳年収720万円ですが何か?
いいんじゃないでしょうか
中卒のドカタのほうが儲けてるよな 貯金も無いようだけど
時代は肉体労働だな
>>862 先輩スゲーよ。高卒の漏れは最近まで年収240万だった。・゚・(ノД`)・゚・。
こりゃあまたできる人が限定されそうなの出てきたな 俺無理
Windowsでgccか 入れるのがめんどくさい
もうwinsock2.hに切り替えて全面改装した方が早いんじゃねーの?
>>868 [3.1] OS: Windows
こう書いてある割りにはやけにLinuxなソースだな
#ifdef多用で読みづらいし何て糞ースだよ
てゆーか#ifdef使わんでいいだろ
教師に( ・∀)人(∀・ )通報しますた!
この問題は信州大の奴だな。 大分前のスレで信州大の講義用ウェブサイトが貼られてて、その中で見た記憶がある。 ついでに信州大のそのサイトの講義内容は酷かった。
よし晒せ!
大学の留年かかった問題なら自分で解けよ。 大学のレベルを下げる生徒が卒業したら大問題だ
今度から一見正しいけど出題者の例以外のパターンだと暴走するのでも作ろうか
何かと思ったらIDとパスまでここに載せたのね これって乗せた人間も不正アクセス禁止法にひっかかるんだっけ?
>>879 鬼w
でも今回の件で、苦労して問題出す先生もいるんだから、あんまり
完全回答しない方がいいのかなって気もした。一箇所だけ空欄とかw
IOCCCばりに読みにくいソースとか
[1] 授業単元:c演習
[2] 問題文(含コード&リンク):関数 mlc1 と mlc2 の違いを以下の観点から
500字以内で説明せよ.説明にソースコードの引用を用いる場合には,
その部分は字数制限の対象にはしない.説明に図を利用する場合,
その図と図中の文字は手書きでもよい.
・「値渡し」と「アドレス渡し」
・実行時間
プログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1552.txt [3] 環境
[3.1] OS: mac
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年1月27日17時まで
[5] その他の制限:
>>894 のものですが、
全部で五問あるのでお願いします。これは二問目です。
886 :
ど素人 :2006/01/26(木) 19:27:23
すんません、
>>615 の問題をやってみたのですが、
#include <stdio.h>
int main()
{
float x = 3.0, y = 8.0;
printf("商は%f, 余りは%f",x / y, x % y);
return0;
}
これでコンパイル通らず、%無効なオペランドです と出ます。
なんででしょうか・・・
惜しいな%%
[1] 授業単元:c演習
[2] 問題文(含コード&リンク):標準ライブラリとして提供されている
文字列処理の機能を使用することなく,標準関数strcmp()と同等の処理を行う
関数mystrcmp()を定義せよ.
[3] 環境
[3.1] OS: mac
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年1月27日17時まで
[5] その他の制限:
>>894 のものです、これは三問目です。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 10人の名前、年齢、電話番号の入ったファイルを作り、それを読み出すファイルを作れ。 そのとき、ファイル名は画面上で自由に設定でき、ファイルの拡張子はdatとなるようにせよ。 また、ファイル名が8文字を越えると、入力したファイル名は無効となり、再度ファイル名の入力を要請できるようにせよ。 問題上のファイルに新たに1人のデータを追加するためのプログラムを作れ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: すいませんわかりません [3.3] 言語:C [4] 期限:2006年1月30日まで [5] その他の制限: 初心者なので、あまり難しくないものでお願いします。
>>888 int mystrcmp(const char*a,const char*b){
int diff;
for(;(diff = *a - *b)==0 && *a;++a,++b){}
return diff;
}
>>886 printf("商は%.5f, 余りは%d",x / y, (int)x % (int)y);
>>884 字数は数えてない。ポインタ経由でのアクセスによる影響は無視。どうせ両方スタックにあるんだし。
関数 mlc1 と mlc2の引数機構(parameter mechanism)は共に値渡しである。そもそもCには値渡し以外の引数機構は存在しない。故に「「値渡し」と「XXX」」という観点からこれら2つの関数の「違い」を説明するならば、「違いはない」としか言いようがない。
また、実行時間については
mlc1はstruct data型という巨大な方の引数をとるため、仮引数オブジェクトの生成に時間がかかる可能性がある
mlc2はstruct data*型という比較的小さな方の引数をとるため仮引数オブジェクトの生成にはmlc1程には時間はかからない可能性が高い
895 :
ど素人 :2006/01/26(木) 19:39:33
>>887 ハッ
そっちの問題だったのですね・・・%fを疑ってました。
ありがとうございました!
896 :
デフォルトの名無しさん :2006/01/26(木) 19:43:10
>>695 >>711 数日悩んだけど、わからなくて進まなくなりました。
誰か助けてください。
期限:今日中
897 :
ど素人 :2006/01/26(木) 19:43:31
その「ヒント」プログラムの穴埋めは、嫌なんだが・・・。
>>同意。っていうか、ぱっと見た感じ、ヒント少しおかしい気がする。 最初、i=0のループを回すとき、D[i-1][???]のi-1って負になる気が するんだが、気のせいかな? ついでにいうと、ヒントの1535.txtはロダから流れている。
902 :
901 :2006/01/26(木) 20:57:47
>>901 あ、ごめん、流れてなかった。寝不足で見違えたか・・・スマソ
903 :
デフォルトの名無しさん :2006/01/26(木) 21:00:38
>>695 アルゴリズムが大体同じならヒント通りじゃなくてもいいです。
えーっと。
「全ての組み合わせのうち、最高のものを見つける」
ってアルゴリズムでOK?
>>903
695のアルゴリズムでは重量の最大を超えても制限を受けないので、全てを選択すればよい
906 :
903 :2006/01/26(木) 21:07:00
C言語なのにわざわざ[n+1]で宣言してfor(i=1;i<=n;i++)とループを回してるのが気に入らない。
気に入らないときは、indentでもかますこと。 Cらしく書いたつもり。 #include <stdio.h> /* 問題の定義 */ #define n 5 /* 品物の種類 */ #define WMAX 10 /* 重さの最大 */ static int w[n]={2,3,4,5,6}; /*各物品の重量*/ static int v[n]={4,5,8,9,11}; /*各物品の価値*/ int sum(int *p, unsigned x) { int retval = 0; for (; x; p++, x >>= 1) if (x & 1) retval += *p; return retval; } void print(unsigned x) { int i; int sumw = sum(w, x); int sumv = sum(v, x); for (i = 0; x; i++, x >>= 1) if (x & 1) printf("(%d, %d) ", w[i], v[i]); printf("%d %d\n", sumw, sumv); } int main(void) { unsigned x, best = 0; for (x = 0; x < (1 << n); x++) { if (sum(w, x) <= WMAX && sum(v, x) > sum(v, best)) { best = x; print(x); } } return 0; }
909 :
デフォルトの名無しさん :2006/01/26(木) 22:05:44
すみません。教えて下さい。リナックスでC言語を学び始めていますが、 九九の表を作るプログラミングを教えて下さい。すごく初歩的どとは思いますが、どうかお願いします。 /* kadai3.c */ /* */ #include<stdio> int i,j; ここまでしか出来なくて、どうやったら九九の表が作れるのか教えてください。
C++の問題マダー?
>>909 氏ねマルチ
向こうで答えてもらっただろ
>>909 printf("ここに書けば全て解決");
>>909 ほらよ。これで満足かい?
int main(){
int x;
for(x=81;x--;)
printf("%2d%c",(9-x/9)*(9-x%9),x%9?' ':'\n');
}
>>909 #include <stdio.h>
int main(void) {
int i, j, res[9][9];
for (i = 1; i <= 9; i++)
for (j = 1; j <= 9; j++)
res[i - 1][j - 1] = i * j;
printf(" 1 2 3 4 5 6 7 8 9\n");
for (i = 1; i <= 9; i++){
printf("%d", i);
for (j = 1; j <= 9; j++)
printf("%3d", res[i - 1][j - 1]);
printf("\n");
}
}
916 :
デフォルトの名無しさん :2006/01/26(木) 22:41:27
1] 授業単元:プログラミングT [2] 問題文(含コード&リンク): 1、c言語では関数の戻り値は1変数に限られている。したがって、2変数以上 の情報を呼び出し側(例えばmain内か呼び出された関数ならmainがその 関数の呼び出し側となる)に戻すことはできない。2変数以上の情報を呼び 出し側に返すためには、どのようにすればよいか。 2、3つの浮動少数型変数のポインタを引数にとり、引数のポインタの内容 平均を4番目の引数のポインタの内容に代入する関数(関数名と引数名は 自分で決めてよい)。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月27日でお願いします。 [5] その他の制限:特にないです。
>>916 1、その変数が全て格納できるフラットなメモリを確保して格納し、その先頭アドレスを返す。
呼び出し側はそれをvoid*で受け取り、ドキュメントとにらめっこしながらガンガル。
1a構造体で返す 1b引数に戻り値を格納するアドレスを渡す 1c1変数のビットを分割して、それぞれに意味を持たせる 2 void f(double *a, double *b, double *c, double *d) {*d = (*a + *b + *c) / 3;}
919 :
デフォルトの名無しさん :2006/01/26(木) 22:48:18
920 :
916 :2006/01/26(木) 22:58:54
すいませんが、あと1問だけお願いします。 1] 授業単元:プログラミングT [2] 問題文(含コード&リンク): 符号付き整数型の引数3つをとり引数のうち0以上のものの合計を戻り値(返値) とする関数。ただし、引数全てが負の場合は-1を戻り値(返値)とする関数。 なお、関数名、引数名は自分で決めてよい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月27日でお願いします。 [5] その他の制限:特にないです。
まあ。簡単だからやってみればよろしい。
923 :
デフォルトの名無しさん :2006/01/26(木) 23:03:59
>>908 >>914 ありがとうございます!
最後ちょっとだけお願いなんですけど、出力の仕方で
(重さ、価値)で組み合わせが出るのではなく商品の番号(何個目か)で
表示されるようにはならないでしょうか?
>>920 int positiveSum(int a,int b,int c){
return (a>0?a:0)+(b>0?b:0)+(c>0?c:0)-((a&b&c)<0);
}
908のはprintf("(%d, %d) ", w[i], v[i]); →printf("%d", i + 1)かな。
926 :
914 :2006/01/26(木) 23:43:38
じゃ、
>>914 のもそれで。
うp直前に慌ててゴミ掃除したからワーニング出てるな。笑ってゆるしておくれ。
しかし
>>908 のはすごいな。あんな組み方おれにはできない。
ソース出されればやってることはわかるが、いきなりそういう風には頭が働かない…
printf("(%d,%d) ",w[j],v[j]);
↓
printf("%d ",j);
あるいは
printf("%d(%d,%d) ",j, w[j],v[j]);
あんな詰め込みで書かれても(;_;)
データを配列に記憶する方法と構造体をつかってリストに 記憶する方法の長所、短所を教えてください。
(1)使用メモリ量の多寡 (2)ランダムな位置への読み書きの手間(速度) (3)要素の削除にかかる手間(速度) (4)可変個数のデータの扱いの対応 で、それぞれ書けばよろしい。
930 :
デフォルトの名無しさん :2006/01/27(金) 00:06:12
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 一年三組の11人目があなただったとします。 一郎君から順に点数を入力、最後にあなたの点数を入力し、すべて入力し終わったあと、 一番成績の良い人の順から、点数を出力するプログラムを作成しなさい。 ※ 入力を求める関数、並べ替える関数、出力する関数を作成すること。 また、処理順序として、すべて入力→並び替え処理→出力 とするようにしてください。 一年三組成績 A君 50点 F 90点 B君 75点 G 67点 C君 36点 H 82点 D君 88点 I 45点 E君 68点 J 77点 [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン:初心者なので分かりません [3.3] 言語: C言語 [4] 期限: 1/28 [5] その他の制限
>>927 全角スペースでインデントつけられるより774倍マシなんですが。
コピペしてメモ帳でもテキストエディタでも張り付けて
自分でタブ入れていけば、ほぉら見やすい!
基本はコピペしたものが面倒なくそのままコンパイル通ることだと思ってる。
で、タブのつぶれた縦長のレス・ソースは読みにくいし。
>>931 自分でタブ入れするよりは、全角をタブに一括置換のほうが楽な気が
一郎君はどこへ行ったんだ?
整数 n (>0) をキーボードより読み込み、それを以下の様に 因数分解するプログラムを作れ。 54=2.3.3.3. 306=2.3.3.17. #include <stdio.h> main(){ long d,n; printf("n=?"); scanf("%ld",&n); d=2; /* 以下d でnを順に割って行く*/ while(1){ if (n==1) 【 A 】 if (n%d==0) { printf("%ld.",d); n=【 B 】;} else d=【 C 】; } printf("\n"); } これがわかりません、教えてください
>>930 あなたと一郎君とA君とF(呼び捨て)とニャン丸とルミ子の関係がよくわかりません。
メル友?
937 :
928 :2006/01/27(金) 00:13:19
>>934 問題の出し方として仕方ないのかもしれんが、Cのプログラムとしては気持ち悪いな。
>>934 【A】break
【B】n/d
【C】d+1
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Windows Me [3.2] すいません、わかりません [3.3] 言語: C [4] 期限: [2006年01月30日まで] [5] その他の制限:特にありません。 これでよろしいでしょうか?
>>939 ありがとうございます
もう一問お願いしてもよrしいでしょうか?
1. キーボードから10個の実数を配列 double a[10] に読み込み、合計、平均、
及び最大値、最小値を求めて表示するプログラムを作れ。
ヒント: for(i=0;i<10;i++){ printf("a[%d]=??";i); scanf("%lf",&a[i]);}
でa[0],a[1],...,a[9] を入力!!
(次に) saidai=a[0];
そのあと、計算の為にforループを作るが、
(ループの中で) if (a[i]>saidai) saidai=a[i];
は何を表わすか?きっと最大値を求めるプログラム関連だろう。
しくみがわかれば最小値も同様にわかる。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows Me
[3.2] すいません、わかりません
[3.3] 言語: C
[4] 期限: [2006年01月30日まで]
[5] その他の制限:特にありません。
ヒントもなにも、答えじゃないか。
944 :
デフォルトの名無しさん :2006/01/27(金) 00:41:11
>>925 >>926 多謝!
ところで908っていうのはどうやってるんですか?
ソース見てもイマイチよくわからない…。
>>926 乙
>>908 ネタじゃなかったのか・・・sum(v, x)ってv配列のx個を合計・・?
しかし、xは2^n-1までループさせてるよねぇ・・・?
すまん。よくわからん。
>>945 たぶん、xをどの荷物を加算するかのフラグ(ビット単位)にしているんだよ。
例えば、x=0b00000011だったら最初と次の荷物を加算するとか。
確かにCらしいね。スキルのない自分はなかなか思いつかないけど。
948 :
デフォルトの名無しさん :2006/01/27(金) 01:28:45
>>946 スキルの無い自分もまだわからない。
今までやっていただいて何なんですが、アルゴリズムの制約にのっとって
もらえると非常にありがたいと言うか。
(n-1個目まで加えたときの結果を用いて、n個目加えたときの組み合わせを作る
って言うのを繰り返す。最適解の値を再帰的に定義して値の小さいところから
順に積み上げる。)
>>930 この前シェルソート作ったからそのプログラムを流用した。
シェルソートを使う意味は全く無いが、気にするな!
#include<stdio.h>
struct data{
char name[128];
int score;
};
int i=0;
void Input(struct data *A,int n);
void ShellSort(struct data *A,int n);
void Output(struct data *A,int n);
int main(){
struct data D[128];
Input(D,11);
ShellSort(D,11);
printf("\n一年三組成績\n");
Output(D,11);
}
void Input(struct data *A,int n){ printf("各生徒の名前と成績を入力してください\n"); for(i=0;i<n;i++){ ("%d人目",i+1); printf("名前:"); scanf("%s",A[i].name); printf("得点:"); scanf("%d",&A[i].score); } } void ShellSort(struct data *A,int n){ int j, k; int h=1; struct data damy; do{h=3*h+1;}while(h<=n); do{ h=h/3; for (j=h; j<n; j++){ for (k=j-h; k>=0; k-=h) { if (A[k].score>A[k+h].score) break;
else{ damy=A[k]; A[k]=A[k+h]; A[k+h]=damy; } } } }while(h>1); } void Output(struct data *A,int n){ for(i=0;i<n;i++) printf("%s君 %d点\n",A[i].name,A[i].score); }
n-1個目まで加えたときの結果を用いて、n個目加えたときの組み合わせを作る って言うのを繰り返す。
最適解の値を再帰的に定義して値の小さいところから 順に積み上げる。
・・・うーん。
>>914 のどこがお気に召さないのだろうか?
穴埋めじゃないから?
>>953 あんなヒントなんて、飾りです。偉い人には、それがわからんのです。
955 :
デフォルトの名無しさん :2006/01/27(金) 02:56:37
956 :
デフォルトの名無しさん :2006/01/27(金) 03:22:15
ネットで書き込むのは初めてなので無作法でしたらすいません。 C言語はまったくの初心者です。 無謀ながら3次元入力装置のデータグローブを作ってみようと、 いろいろなサイトの資料を参考に作ってきたのですが、 グローブからコンピュータにデータを送るC言語のプログラムを見つけまして、 C言語の本を読んでなんとか理解しようとしているのですが、 #include "g_lib.c" というのがどうしてもわからなくて悩んでいます。 どうか、この文がなんなのか詳しく教えて頂けないでしょうか。
>>948 #include<stdio.h>
#define N 5
#define WMAX 10
int main() {
int i, j, k, l;
int w[N] = {2,3,4,5,6}, v[N] = {4,5,8,9,11};
int D[N+1][WMAX+1], P[N+1][WMAX+1];
for (k = 0; k <= WMAX; ++k) D[0][k] = 0;
for (i = 0; i < N; ++i) {
for (k = 0; k <= WMAX; ++k) D[i+1][k] = D[i][k], P[i+1][k] = 0;
for (k = 0; k + w[i] <= WMAX; ++k)
if (D[i][k+w[i]] >= D[i][k]+v[i]) D[i+1][k+w[i]] = D[i][k+w[i]];
else D[i+1][k+w[i]] = D[i][k]+v[i], P[i+1][k+w[i]] = 1;
}
for (k = 0; k <= WMAX; ++k) {
if (!D[N][k]) continue;
for (i = N, l = k; i-1 >= 0; --i)
if (P[i][l]) printf("(%d,%d) ", w[i-1], v[i-1]), l -= w[i-1];
printf("%d %d\n", k, D[N][k]);
}
}
960 :
デフォルトの名無しさん :2006/01/27(金) 08:58:23
標準ライブラリを使用せずに, strcmp()と同等の処理を行える関数shukudai()をつくってください。 お願いします。
@テンプレに従いなさい Aあなたはどこまで考えたの?
てかstrcmpって一致かどうかの判定にしか使ったことないから 正確な機能シラネ
964 :
デフォルトの名無しさん :2006/01/27(金) 09:24:17
>963 man 3 strcmp
>>890 スルーされてる・・・
ほんとわからなくて困っています。
誰か助けてください。
>>960 int shukudai(const char *a,const char *b){
while(*a++ == *b++){if(*a=='\0')return 0;}return (*a - *b);}
>>966 入出力例が示されてないとめんどくさい
ファイルを読み出すファイルってのがよく分かんない
>>966 追記はfopen("filename","a")だよ
>>964 ('A`) <僕を殺して・・・・ |彡サッ
>>955 最大の重さ 3 で、重さと価値の組み合わせが(1, 2) (2, 3) (3, 4)のとき
どう動いて欲しいか書いてみてくれ。
1)途中経過でどう出力してほしいのか? プログラムが動いたときの出力と同じに書いてくれ。
2)で、n個のときn-1個の場合の情報を使うっていうのは、1)の場合だとどこをどう使うか書いてみてくれ。
>>968 自分もよくわからないんですが、
ファイルをdatで作っておいて、それをfopenとかで読み出すってカンジじゃないんでしょうか・・・
入出力は名前1年齢1電話番号1とかでかまいません。
人数も多かったら3人でかまいません。
申し訳ないんですが、どなたか教えてください。
>>969 ありがとうございます。参考にさせていただきます。
>>972 てか微妙に問題の意味がわからない
読み込むならその読み込んだデータはどうするんだ?
>>973 すいません。問題を写し間違えていたようです。
正しくは、「10人の名前、年齢、電話番号の入ったファイルを作り、それを読み出す「プログラム」を作れ」
でした。ご指摘の通りでした。申し訳ございません。
ほかのところは確認したところ、写し間違いはしていないようです。
よろしくお願い致します。
>>974 いや・・・そこはまあ脳内補完できるんだけど
読み込んでどうするんだってこと・・・それを画面に表示するのか
もしくは追記モードを使わないでwで上書きしろってことなのか
教官屑だな
後なぁ・・・読み出すって1行文字列として読み込んでそれっきりOKなのか 名前、年齢、電話番号に分解するのか?とかわかんないんだよ
ちょっとその教師呼んで来い俺が説教してやる
#include<stdio.h> int main(void){ puts(" _、_\n( ,_ノ` )y━・~~~先生あんた教師向いてないぜ"); return 0; }
コピーするだけでいいならEOFまでputcしちゃうんだが…w
ファイルの一番最後にAAでも書いちゃえ(・∀・)
プロポーショナルフォントじゃないとAAは正常に出力されない罠
#include<stdio.h> int main(void){ puts("先生あんた教師向いてないぜ :-P"); return 0; }
#include <windows.h> int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ MessageBox(NULL," _、_\n( ,_ノ` )y━・~~~先生あんた教師向いてないぜ","",NULL);return 0;} …必死すぎw
なんでメッセージBOXやねんw
楽だから。
988 :
デフォルトの名無しさん :2006/01/27(金) 13:16:13
[1] 授業単元:構造体 [2] 問題文(含コード&リンク):構造体に初期値を入れた後、表示させ、 テストの点数が高い順に並び替えた後を、表示させるプログラムを作っています。 並び替えの部分が上手く作れなくて、困っています。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC++6.0 [3.3] 言語: C++ [4] 期限: 今日中 [5] その他の制限: 表示させる所を関数化、並び替えの部分を関数化する よろしくお願いします
990 :
デフォルトの名無しさん :2006/01/27(金) 13:43:40
6、4、3、8、1という数字を昇順に並びかえよ。と言う問題が分かりません。 SWAPという並び替えの関数とバブルソートの関数をつかってプログラミングをつくる のが条件です。あとwhile文は使わずにfor文だけをつかいたいです。 どなたかこの問題を解いて下さいませんか?宜しくお願いします。
テンプレ嫁
>>989 まず構造体の中身を教えろ
そして何を並び替えるんだ
993 :
デフォルトの名無しさん :2006/01/27(金) 14:03:24
>>989 ソートの問題は既出なのでお断りしてるんです。
産め〜
1000
1000
埋め〜♪
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。