1 :
デフォルトの名無しさん :
2006/01/09(月) 10:02:47
4 :
デフォルトの名無しさん :2006/01/09(月) 10:38:38
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):int_{-1}^{1}f(x)dxをモンテカルロ法で計算するプログラムを作れ。 試行回数n:=2^MとしてM=2からM=20までのMの値と積分値を出力せよ。 fは自分で適当に与える。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月6日18時 [5] その他の制限:なし
5 :
デフォルトの名無しさん :2006/01/09(月) 10:47:09
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):n:=2^MでMを1から27まで順に変えながら、n以下の素数の個数p(n)と{p(n)*log{n}}/nの値を出力するプログラムを作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月6日18時 [5] その他の制限:なし
6 :
デフォルトの名無しさん :2006/01/09(月) 10:49:13
>>4 >>5 間違えました。[4] 期限:2006年1月10日16時です。
コピペ乙
p = プッチ神父(2^M);
9 :
デフォルトの名無しさん :2006/01/09(月) 14:45:02
>>4 数字、英字の前後には半角スペースを入れるように。
11 :
デフォルトの名無しさん :2006/01/09(月) 15:03:51
>>10 世間共通基準じゃないの?
教科書、論文もそうなってるし。
>>5 実行にかなり時間がかかること、メモリを結構(300MB弱)必要とすること
の2点に注意せよ。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char *sieve_of_eratosthenes(int upper) {
int i, notprime;
char *integers = (char *)malloc(upper + 1);
for (i = 2; i <= upper; i++) integers[i] = 1;
integers[0] = integers[1] = 0;
for (i = 2; i <= upper / 2; i++) {
notprime = i;
while ((notprime += i) <= upper) integers[notprime] = 0;
}
return integers;
}
#define MAX_M (27)
int main(void) {
int MAX = 2 << MAX_M, n, M, i, count = 0;
char *sieve = sieve_of_eratosthenes(MAX);
for (n = 2, M = 1; M <= MAX_M; n <<= 1, M++) {
for (i = (n >> 1) + 1; i <= n; i++) if (sieve[i]) count++;
printf("M=%2d:p(n)=%10d:{p(n)*log{n}}/n=%f\n", M, count, (count * log((double)n)) / n);
}
free(sieve);
return 0;
}
フェルマーとかその他色々とか
14 :
デフォルトの名無しさん :2006/01/09(月) 18:08:15
めるせんぬ数
[1] 授業単元:人工知能 [2] 問題文(含コード&リンク): 13台分の車両の長さの線路とその中心に3台分の転車台(くるっと回して向きを反転させる)があり、その上 に、1台の機関車と1〜7の番号が付けられた7台の客車の8両編成の列車が最初は右向きに配置されているとする。 この状態から転車台を使って、左向きに配置された状態(左から順に、機関車、客席1、2、‥)にする問題を 考える。ただし次のようなルールがある。 ・機関車と客車は自由に切り離し可能であり、1回の転車で可能な台数は1〜3台である(ただし、線路の長さの関係 で、どんな状況でも1〜3台可能というわけではないことに注意。) ・転車台で向きを反転させる部分の中に、必ず機関車が含まれていなければならない。 ・機関車には前後の向きはあるが、客席にはない。 目標状態に至るまでの手順を縦型探索、横型探索、A*アルゴリズムにより探索するプログラムを作成せよ。 ヒューリスティック値は各自でいろいろ設定してみて、最適なものを探してみること。また、状態を保持する リストは配列のように保持可能な要素数が固定されているものでなく、ポインタなどを利用して保持可能要素数を 動的に変更可能なものを使用すること。 [3] 環境 [3.1] OS:WindowsXP [3.2] borland bcc55 [3.3] 言語: C言語 [4] 期限: 1/19 初期状態 +++++++++++++++++++++++++++++++ |7|6|5|4|3|2|1|機関車| +++++++++++++++++++++++++++++++ |←5台分→|←3台分 →|←5台分→| 初期状態から転車させた状態 +++++++++++++++++++++++++++++++ |7|6|5|4|3|機関車|1|2| +++++++++++++++++++++++++++++++ 目標状態 ++++++++++++++++++++++++++++++++ |機関車|1|2|3|4|5|6|7| ++++++++++++++++++++++++++++++++
16 :
15 :2006/01/09(月) 19:06:47
すいません、前スレでも質問したのですが 切羽詰まっているのでこちらでも質問させてください。 卒業かかってるのでわかる方お願いします。。・;+゜・(ノД`):・゜+:・。
[1] 授業単元:コンピュータ基礎 [2] 問題文:問題1 3つの整数の並べかえ 三つのint型整数を昇順に並べかえる関数 void sort3(int *n1, int *n2, int *n3) を作成せよ。 たとえば、a、b、cがそれぞれ5、3、7のときに sort(&a&b&c) と呼び出した後には aには3、bには5、cには7が格納されていなければならない [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10日の16時まで [5] その他の制限: 動作確認のためのmain関数を作成する。
>>19 #include <stdio.h>
void sort3( int *n1, int *n2, int *n3 )
{
int tmp;
if ( *n1 > *n2 ) { tmp = *n1; *n1 = *n2; *n2 = tmp; }
if ( *n2 > *n3 ) { tmp = *n2; *n2 = *n3; *n3 = tmp; }
if ( *n1 > *n2 ) { tmp = *n1; *n1 = *n2; *n2 = tmp; }
}
int main( void )
{
int a = 5, b = 3, c = 7;
printf( "a: %d, b: %d, c: %d\n", a, b, c );
puts( "sorting..." );
sort3( &a, &b, &c );
printf( "a: %d, b: %d, c: %d\n", a, b, c );
return 0;
}
>>19 3つの数はmain(int argc, char *argv[])じゃないの??
前スレ落ちた唐揚げ
sagesage
24 :
デフォルトの名無しさん :2006/01/10(火) 05:48:09
[1] 授業単元: 情報基礎論演習 [2] 問題文:8×8の盤面上で白と黒の石を使い、相手の色の石を自分の色の石で挟むことで反転させ合う、皆さんよくご存知のオセロと同じルールの白黒ゲームを自動的に実行して盤面を表示するプログラムを作りなさい。 その際、実行する手は、その局面で最も多く相手の石を反転させるものを選ぶこと。ただし同数の手が複数あるときはその中の任意の1つを選べば良い。また、実行する手が存在しない場合はPass!と表示すること。 白が先手として実行を開始すること。また各回とも次に示す情報を画面に表示すること。 ・○あるいは●の石を置く座標 ・それによって相手の何個の石が反転するか ・手を実行直後の盤面 なお、盤面の表示は一手ごとに画面を静止させてキー入力を促すこと。 最後には○、●それぞれの数を示し、どちらがかったかも示すこと。 [3] 環境 [3.1] OS:Windows XP [3.2] CPad for Borland C++ Compiler [3.3] 言語: C [4] 期限: 2006年1月10日まで
>>24 今日が期限じゃん
こんなにギリギリで貼られても困る
俺は学校だし
27 :
24 :2006/01/10(火) 08:23:23
なんとかつくってもらえないですか? 期限ギリギリに課題にきずいて焦ってマルチになってしまったのですが・・・。
日本語も満足に打てない様じゃ 一生PCの電源点けないほうがいいんじゃない
29 :
デフォルトの名無しさん :2006/01/10(火) 10:24:55
[1] 授業単元:計算機数学 [2] 問題文(含コード&リンク):0,1,1,2,2,2,3,4 から 3個選んだときの順列をすべて出力せよ(重複を許す順列) ただし、同じ順列を表示しないこと [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2006年01月11日17:00まで [5] その他の制限: 配列、ポインタ、再帰関数を使用 動的メモリ、構造体は習っていないので使用不可 出来ることならコメントもつけて頂けるとありがたいです。 ポインタと再帰関数を使ったプログラムが、 読めるかどうかも危うい未熟者ですので何卒、よろしくお願いします。
焦って「はわわー」と(ry
31 :
デフォルトの名無しさん :2006/01/10(火) 12:08:19
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): f(x,y)={((2x-y)^2*(x+3y)^2+x+y)/((4x^2+y^2)*(x^2+9y^2)+1)}+arctan(x^2+y^2-1)^2 の最小(極小)点およびその値(最小値)を次の方法で求める: 適当な初期値(x0,y0)から始めてn=0,1,2,3,・・・に対して 1.ynを固定して1変数関数g(x)=f(x,yn)を考え, 黄金分割法により、この最小点をx=xn+1として求める 2.上のxn+1を固定して,1変数関数h(y)=f(xn+1,y)を考え, やはり黄金分割法により,最小点をy=yn+1として求める。 これらを繰り返して,(x1,y1),(x2,y2),・・・を生成し,(xn,yn)がほとんど変化 しなくなったら,これを近似解として返す。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc バージョン? [3.3] 言語: C [4] 期限: 1月11日12:00まで [5] その他の制限: xnとかxn+1→x*nではなくて、xの配列です。みづらくてすみません。 前スレでも聞いたのですが・・・。 この問題はもう駄目でしょうか・・・? どなたかお願いいたします。
>24 風邪で熱っぽい漏れが作ったぞ。 で、24はまだいるのか? マルチしてるようだし、どっかで答えてもらったか?
>>31 ダメってことないけど、ぱっと見でめんどくさそうなのは敬遠されがちだね。
せめて黄金分割法の説明してくれない限り、誰も手を出さないんでないかな。
34 :
デフォルトの名無しさん :2006/01/10(火) 12:19:07
[1] 授業単元:プログラム基礎 [2] 問題文(含コード&リンク):毎日の株価を連続して入力し、 前日より上昇している場合プラス記号'+’を、下降の場合は マイナス記号'-'を出力する(最初は'+’を出力してよい)。 ストッパは-999とする。 <入力例> 23 24 19 17 20 24 27 23 18 16 -999 <出力例> + + - - + + + - - - [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月27日まで どうかよろしくお願いします…m(__)m
//
>>34 //取り敢えず同じだったら'='を出力してみる。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int value;
int oldValue = 0;
for (;;) {
if (fscanf(stdin, "%d", & value) < 1) {
fprintf(stderr, "Illegal input.\n");
return EXIT_FAILURE;
}
if (value == -999) {
return EXIT_SUCCESS;
}
if (value > oldValue) {
putchar('+');
} else if (value < oldValue) {
putchar('-');
} else {
putchar('=');
}
oldValue = value;
putchar(' ');
}
}
37 :
34 :2006/01/10(火) 12:56:38
>>36 どうも有難うございますm(__)m
株価が同じ場合であったときのことは記載されていなかったので、
教授に聞いてこようかと思います。
39 :
24 :2006/01/10(火) 14:34:15
まだ答えてもらってないです。 教えてほしいです。お願いします。
40 :
32 :2006/01/10(火) 15:09:24
41 :
24 :2006/01/10(火) 15:26:38
ありがとうございます。 ひとつ質問なんですが、このプログラムだと2手目の白がうったときに余計なところまでひっくり返りませんか?
42 :
デフォルトの名無しさん :2006/01/10(火) 15:42:24
角が白くなったり黒くなったりします。
__ へ
i. ツ ゝ_!
. !_l _r' ⌒ヽ ノ ,/
. l ゝ、 ゙T ̄了:), ri' " ,/
゙ゝ、 `)"ー、._,r:'"` l、,/
ヾ、 l : i ,/
Y l : l'"
! l : ,l←なぜか英雄
l、 l : l
/~ ニ口ニ{
! ヽ ゙!
ゝ ヾ. ゙! ,D.←質問した
>>24 \ ヽ.゙!ー七ヽ, __
\ )゙! く ゝ、 /゙ンニヾヽ,
 ̄ ̄ ̄ ̄ ̄ ̄ ̄/ / ゙!" ̄ ゙ ̄ト;'(_)゙lー! ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ゝ,/ l ! l.l l_/ヽ.ヽ,H、←風邪を押して一所懸命
/ ,/ ゝニl `¨¨ ~~~ PG組んだ
>>32 >>40 (ゞヘ、 | |
43 :
32 :2006/01/10(火) 15:49:13
>角が白くなったり黒くなったりします。 あ? あーまだバグってんな。
45 :
32 :2006/01/10(火) 16:23:03
46 :
31 :2006/01/10(火) 16:24:06
>>38 さんありがとうございます。
コンパイルしたところ、下のようなエラーが出てしまうのですが、どこか間違っているのでしょうか?
ougon.c: In function `main':
ougon.c:76: warning: control reaches end of non-void function
/tmp/cczqUJoV.o: In function `f':
/tmp/cczqUJoV.o(.text+0x53): undefined reference to `atan'
collect2: ld returned 1 exit status
47 :
32 :2006/01/10(火) 16:36:39
漏れの事かと思ってコンパイルしてエラー確認しちまったよ。>46
>>46 gcc ougon.c -lm
~~~~多分この辺
49 :
24 :2006/01/10(火) 17:15:16
32さんありがとうございます。おかげで課題を終えることができそうです。 ほんとにありがとうございました。
50 :
デフォルトの名無しさん :2006/01/10(火) 17:19:38
[1] 授業単元:基礎プログラミング演習 [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録し、 新しく入力された点数以上の氏名を出力するプログラムを書け。 (必ず、print_studen(struct student s)と言う学生一人分の情報を 1行に表示する関数を作成し、それを利用して出力を行うこと。) <構造体の例> struct student{ char name[50], id[20]; int score; }; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月23日まで
51 :
31 :2006/01/10(火) 17:29:10
>>47 申し訳ありませぬ
>>48 ありがとうございます。ご指摘の通りでした。
>>31 をコンパイルして実行できたのですが、ループが3,4回くらいで終わるのは
仕様でしょうか?
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 10個の整数の中から最大のものと最小のものを探す 関数をそれぞれ作成し、メインプログラムで与えた 10個の整数の中の最大値、最小値を求めるプログラム (合計3個の関数から成る)を作成しなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年1月12日12:00まで [5] その他の制限: どうかお願いします。
>>52 #include <stdio.h>
#define SELECT2(op,x,y) ((y)op(x)?(y):(x))
#define SELECT3(op,x,y,z) SELECT2(op,(x),SELECT2(op,(y),(z)))
#define SELECT5(op,x,y,z,v,w) \
SELECT2(op,SELECT2(op,(x),(y)),SELECT3(op,(z),(w),(v)))
#define SELECT10(op,q,r,s,t,u,v,w,x,y,z) \
SELECT2(op,SELECT5(op,(q),(r),(s),(t),(u)),SELECT5(op,(v),(w),(x),(y),(z)))
#define SELECT10_F(f,q,r,s,t,u,v,w,x,y,z) \
int f##_10(q,r,s,t,u,v,w,x,y,z)int q,r,s,t,u,v,w,x,y,z; \
{ return SELECT10(f,q,r,s,t,u,v,w,x,y,z); }
#define max >
#define min <
SELECT10_F(max,q,r,s,t,u,v,w,x,y,z) SELECT10_F(min,q,r,s,t,u,v,w,x,y,z)
int main()
{
printf("max..%d\nmin..%d\n",
max_10(0,8,4,12,2,10,6,14,1,9),
min_10(0,8,4,12,2,10,6,14,1,9));
}
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): [問題]正の整数を入力し,それを各桁毎に分解し, それらの数字を正順及び逆順に,間に1つ以上の空白をあけて出力するプログラムを書け。 例えば,12345 と入力したら,5 4 3 2 1 と 出力することになる。 ただし,整数の桁数は最大9桁であるとする. [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C++ [4] 期限: 一月下旬 [5] その他の制限: 繰り返しの問題です。よろしくお願いします。
>>51 仕様。その回数が悪ければアルゴリズムとして多分紹介されない。
意図的にループ回数が長くなりそうな関数を用意したんで同様に突っ込んでみたら?
double f(double x, double y){double a = x - 57.0, b = y - 31.0; return 100*(a+b)*(a+b)+(b-a)*(b-a); }
あとはEPSを小さくして精度を上げるとか。
>>55 仕様通り「分解」が面倒なので、ズルをした
#include <stdio.h>
#include <string.h>
#define swap(x,y) do{char temp; temp=x; x=y; y=temp;}while(0)
int main()
{
int i,j,n;
char s[10];
printf("9桁以内の整数を入力\n-->");
scanf("%s",s);
if(strlen(s)>9){
printf("9桁までと言ったはずだ\n");
return 1;
}
n=strlen(s);
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(s[i]<s[j]) swap(s[i],s[j]);
}
}
for(i=0;i<n;i++){
printf("%c ",s[i]);
}
putchar('\n');
return 0;
}
59 :
553 :2006/01/10(火) 20:54:41
前スレしたのと同じなんですが・・・
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
Web ページの探索アルゴリズム
1.文字列操作を使ったURLの比較アルゴリズムの作成
2.HTML文書からハイパーリンクを抽出するアルゴリズムの作成
3.Webページの構成を解析するアルゴリズムの作成
という問題です。
詳しくは
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1401.txt [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C言語
[4] 期限: 1月11日8時まででお願いします。
以前、553としてお願いしたんですが、まだ完成していません。
明日、レポートとして提出しなければならないんです。コメントも書かないといけないんです。
誰かお願いします。
>>57 scanf("%*d",s,/*桁数指定する変数、等*/);
っていうのはprintf限定か?
>>60 調べてみよう。
すぐに判ることだが、scanf()系では変換結果を無視してしまう。
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
2つのグラフが同型であるかどうかを判定するプログラムを作成しなさい。ただし、入力データは講義で配布した形式(mat4,mat5,...)のものとする。また、次の条件を守ること。
* プログラムはC言語で作成して下さい。
* 同型の場合はその対応(全単射)も出力すること。
* 可能な限り速いプログラムを作成しなさい。例えば、各頂点の次数に着目したり、木を探索する際途中で探索しても無意味だと判明した時点でそれ以下の探索を中止するなど枝刈りを行うことで高速化できます。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:どちらでも可
[4] 期限: 2006年01月11日16:00
入力データ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1426.zip
64 :
デフォルトの名無しさん :2006/01/10(火) 22:43:00
・sin(x)のマクローリン展開から√2の近似値を計算する プログラムを作成せよ。 ・sin(π/4)の値を二倍して求めること。 ・階乗と累乗の計算は各々関数で行うこと。 ・πの値(3.141592)はプログラムに与える。 ・重要な処理のところを、コメント文で簡単に説明する。 (お願い) 12日の朝8時50分ぐらいまでにお願いします。
やらない理由 @テンプレに従っていない A個人的に卒研が忙しい BJavaしか使えない
いやいや、AはともかくBならなんでこのスレをみてるんだよ ww
67 :
◆1oKmZSIAF. :2006/01/10(火) 22:48:53
[1] 授業単元:暗号理論 [2] 問題文(含コード&リンク): RSA暗号のプログラム作成。 まず鍵ペアの作成。 (1)Nを求める N=p*q(p,qは素数) 素数は自分で入力することにする。 (2)Lを求める L=lcm(p-1,q-1) 最小公倍数 (3)Eを求める 1<E<L gcd(E,L)=1 EとLの最大公約数は1(EとLは互いに素) (4)Dを求める 1<D<L E*D mod L =1 (暗号化) 平文^E mod N (復号化) 暗号文^D mod N p,q、平文を自分で入力して(1)〜(4)、暗号化、復号化を出力。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 2006年1月11日朝まで。 鍵ペアの作成まででも良いので、よろしくお願いします。
>>62 拡張子 zip なのに zip じゃないとはこれいかに
拡張子をexeにすると開けるお
70 :
55 :2006/01/10(火) 22:57:21
すいません問題が少し間違っていました。 正しい出力する数字は以下の通りです。 [2] 問題文(含コード&リンク): [問題]正の整数を入力し,それを各桁毎に分解し, それらの数字を正順及び逆順に,間に1つ以上の空白をあけて出力するプログラムを書け。 例えば,12345 と入力したら, 1 2 3 4 5 (正順) 5 4 3 2 1 (逆順) と 出力(数字だけ)することになる。 ただし,整数の桁数は最大9桁であるとする。 すでに教えてくれた方には申し訳ありませんが、もう一度よろしくおねがいします。
ごめん、Windows じゃない。でも .tar.gz だったから開けた。 でも文系だしわけわかんないからパス。
>>70 ばか。答え↓
#include <stdio.h>
int main( void )
{
int n_digits[10] = { 0,0,0,0,0,0,0,0,0,0 };
int c, i;
while (( c = getchar() ) != EOF )
++n_digits[ c - '0' ];
for ( c = 0; c < 10; ++c ) {
for ( i = 0; i < n_digits[c]; ++i )
printf( "%d ", c );
}
putchar( '\n' );
for ( c = 10; c >= 0; --c ) {
for ( i = 0; i < n_digits[c]; ++i )
printf( "%d ", c );
}
putchar( '\n' );
return 0;
}
>>72 ナイスぼけだったと思う
>>70 意地悪してみた。VC6では無理かもしれない。
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
#include <altorithm>
int main()
{
using namespace std;
int n;
cin >> n;
ostringstream oss;
oss << n;
string str = oss.str();
ostream_iterator<char> osit(cout, " ");
copy(str.begin(), str.end(), osit);
cout << '\n';
copy(str.rbegin(), str.rend(), osit);
cout << endl;
}
75 :
58 :2006/01/10(火) 23:12:17
>>70 見逃した俺も悪いが、それぐらいの修正は自分でやってくれよ
#include <stdio.h>
#include <string.h>
#define swap(x,y) do{char temp; temp=x; x=y; y=temp;}while(0)
int main()
{
int i,j,n;
char s1[10],s2[10];
printf("9桁以内の整数を入力\n-->");
scanf("%s",s1);
if(strlen(s1)>9){
printf("9桁までと言ったはずだ\n");
return 1;
}
n=strlen(s1);
strcpy(s2,s1);
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(s1[i]>s1[j]) swap(s1[i],s1[j]);
if(s2[i]<s2[j]) swap(s2[i],s2[j]);
}
}
for(i=0;i<n;i++) printf("%c ",s1[i]);
putchar('\n');
for(i=0;i<n;i++) printf("%c ",s2[i]);
putchar('\n');
return 0;
}
77 :
59 :2006/01/11(水) 00:25:13
>>63 データを見ましたが、難しすぎてまったくわかりません。
これを出したら、さすがにやばいので、誰かお願いします。
私を助けてください。進級したいんです。これが甘えだということもわかってます。
よろしくお願いします。
進級ってことは卒業するときにまた頼ってくるのかな・・・
>>77 問題の中に書いてあるwww.edu.fe.takushoku-u.ac.jpにアクセス出来ないんだが。
www.takushoku-u.ac.jpならアクセス出来るんだけど違うよねぇ
だってHTMLからハイパーリンク抽出するのめんどいんだもん 俺HTMLよく知らないし
1字1字読んで 過去5文字が"href="だったらダウト
82 :
55 :2006/01/11(水) 00:55:57
>>73-75 ありがとうございます。
>>74 を
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
int main()
{
using namespace std;
int n;
cin >> n;
ostringstream oss;
oss << n;
string str = oss.str();
ostream_iterator<char> osit(cout, " ");
copy(str.begin(), str.end(), osit);
cout << '\n';
copy(str.rbegin(), str.rend(), osit);
cout << endl;
return 0;
}
という風にしてみたら自分のパソコンでは無事に実行できましたが大学に送ると以下のエラーが出ました。
work.cpp: In function `int main()':
work.cpp:15: implicit declaration of function `int copy(...)'
work.cpp:17: warning: cannot pass objects of type `reverse_iterator' through `...'
work.cpp:17: warning: cannot pass objects of type `reverse_iterator' through `...'
***error*** コンパイルできませんでした
何度もすみませんがまたよろしくお願いします。
83 :
デフォルトの名無しさん :2006/01/11(水) 01:37:02
それくらいは自分でやれよ
85 :
デフォルトの名無しさん :2006/01/11(水) 01:53:00
すみません・・・
>>84 アホか。それを言ったらこのスレの意義がなくなるだろが。
#include <iostream> #include <algorithm> #include <string> #include <functional> struct print : public std::unary_function< const char&, std::ostream& > { std::ostream& operator()(const char& t) const { return std::cout << t << ((t == '\n') ? "" : " "); } }; int main(int argc, char* argv[]) { if (argc < 2) { std::cout << "9" << std::endl; return 1; } std::string str(argv[1]); if (str.length() > 9) { std::cout << "9" << std::endl; return 1; } std::for_each(str.begin(), str.end(), print())('\n'); std::for_each(str.rbegin(), str.rend(), print())('\n'); return 0; }
"9" -> "9桁以上の正整数を引数うんぬん"
89 :
デフォルトの名無しさん :2006/01/11(水) 02:15:12
cではなくてPascalなんですが、お願いできないでしょうか? まったく手がつかずに困っています。
91 :
デフォルトの名無しさん :2006/01/11(水) 02:19:55
>>83 if(argc>3)
return 0;
>>77 今まで何を習ってきたのか
ここで甘えても何の進歩にもならない
また同じ事を繰り返すだけ
94 :
デフォルトの名無しさん :2006/01/11(水) 07:32:21
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): nを入力すると、n!を計算して出力するプログラムを再帰を用いて作りなさい。 (nを読み込む時に、fgets(), sscanf() を用いること。) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006/01/13 単純だとは思いますが、どうかよろしくお願いします。
既出
>>94 #include <stdio.h>
int kai(int n)
{
if(n==1) return n;
else return n * kai(n-1);
}
int main()
{
int a;
char s[10];
printf("数字入れなはれ(´・ω・) ");
fgets(s,sizeof(s),stdin);
sscanf(s,"%d",&a);
if(a<=0) printf("\nまたまたご冗談を(´・д・`)");
else printf( "\n%d の階乗は %d ですよ.\n", a, kai(a));
return 0;
}
>>94 #include <stdio.h>
unsigned get_factorial( unsigned n )
{
if ( n == 1 || n == 0 ) return 1;
return n * get_factorial( n-1 );
}
int main( void )
{
char buf[ 1024 ];
unsigned n;
printf( "Input n > " );
fgets( buf, sizeof(buf), stdin );
sscanf( buf, "%u", &n );
printf( "%u! = %u\n", n, get_factorial(n) );
return 0;
}
課題の内容からしてかなり基礎的な事しかやってなさそうだけど いきなりsizeofとか使ってきたら期待されそうだな。
fgets(s,sizeof(s)-1,stdin); こう書かなくても平気?
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): N個の要素よりなる配列をmain関数に宣言する。 配列にデータを読み込む関数inputをmainから呼んで入力を行い データを書き出す関数outputを呼んで出力するプログラムを 配列で呼んで配列で受け取るやりかたで作成せよ [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年1月13日 [5] その他の制限:昔ここで教えて貰ったんですけど、ソースプログラムが 違うって言われたのでおねがいします。
101 :
デフォルトの名無しさん :2006/01/11(水) 12:31:10
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 二次元渦の運動方程式をつかって二対の渦の運動を数値的に求める。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年1月20日 [5] その他の制限:gnuplot
104 :
101 :2006/01/11(水) 13:18:18
106 :
101 :2006/01/11(水) 14:05:34
いいえ、紛らわしくてすみません。C言語でお願いします。
Eular法でとりあえずやったが あってんだかあってないんだかわからん #include <stdio.h> #include <stdlib.h> #include <math.h> #define TIME_SLICE 0.001 /* h = t_{k+1} - t_k */ int usage() { printf("Usage: prog x1 y1 x2 y2 gamma1 gamma2 "); return 1; }
続き typedef struct _point { double x; double y; } point; double distance(point p1, point p2) { return pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2); } double fx(int n, point* p, double* g) { double res = -g[1-n]*(p[n].y - p[1-n].y); res /= 2*M_PI*distance(p[1],p[2]); return res; }
続き double fy(int n, point* p, double* g) { double res = g[1-n]*(p[n].x - p[1-n].x); res /= 2*M_PI*distance(p[1],p[2]); return res; } void f(point* p, double* g, point* res) { res[0].x = fx(0,p,g); res[0].y = fy(0,p,g); res[1].x = fx(1,p,g); res[1].y = fy(1,p,g); }
続き void euler(point* p, double* g) { point res[2]; f(p,g,res); p[0].x += TIME_SLICE*res[0].x; p[0].y += TIME_SLICE*res[0].y; p[1].x += TIME_SLICE*res[1].x; p[1].y += TIME_SLICE*res[1].y; } void show(point* p) { printf("(%lf,%lf),\t(%lf,%lf)\n",p[0].x,p[0].y,p[1].x,p[1].y); }
続き int main(int argc, char* argv[]) { point p[2]; double gamma[2]; if (argc < 7) return usage(); p[0].x = atof(argv[1]); p[0].y = atof(argv[2]); p[1].x = atof(argv[3]); p[1].y = atof(argv[4]); gamma[0] = atof(argv[5]); gamma[1] = atof(argv[6]); show(p); while (1) { euler(p,gamma); show(p); } return 0; }
112 :
101 :2006/01/11(水) 15:18:02
訂正 distance(p[1],p[2]); は distance(p[0],p[1]);
114 :
デフォルトの名無しさん :2006/01/11(水) 15:32:13
115 :
101 :2006/01/11(水) 15:41:51
ありがとうございます。 実行についてですが、任意の条件をUsageに入れて実行するということでしょうか。
116 :
デフォルトの名無しさん :2006/01/11(水) 15:42:24
[1] 授業単元:関数呼び出し [2] 問題文(含コード&リンク): ・sin(x)のマクローリン展開から√2の近似値を計算する プログラムを作成せよ。 ・sin(π/4)の値を二倍して求めること。 ・階乗と累乗の計算は各々関数で行うこと。 ・πの値(3.141592)はプログラムに与える。 ・重要な処理のところを、コメント文で簡単に説明する。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月13日8:50まで
117 :
デフォルトの名無しさん :2006/01/11(水) 16:39:47
119 :
初心者ですみません :2006/01/11(水) 18:06:02
素数を求めるプログラムです。(A)〜(D)を教えてください。 #include <stdio.h> int sosu (int n) { int i; for ( _(A)_;_(B)_ ;i++){ if( _(C)_) {/*nがiで割り切れた場合には*/ return 0; /*0を返す*/ } } /*繰り返し処理の終了*/ return 1; /*最後まで割り切れなかった場合には1を返す*/ } int main() { int n, m; printf ("自然数mを入力してください\n"); scanf ("%d", &m); printf ("素数リストは次の通り\n"); for (n=1; n<=m; n++) { /* 2〜mまでの自然数を調べる */ if ( _(D)_) { /* nが自然数だった場合には */ printf ("%d", n); /* 画面に表示する */ } } printf ("\n"); return 0; }
>>119 (A) iの初期値は2
(B) iがnになったら終了
(C) nをiで割った余りが0なら
(D) 関数sosu()にnを引数として与えた結果が1なら
>>119 いや、ハマったハマった。
(A) i=2
(B) i<n
(C) !(n%i) または n%i==0
(D) n!=1 && sosu(n)
蛇足ながら、最後画面に表示するところ、%d の後ろにスペース入れたほうが見やすい
[1] 授業単元:NEC ソフト部新人教育 [2] 問題文:指摘したプログラムの誤りを直しなさい。 [3] 環境 [3.1] OS:UNIX [3.2] : (gcc 2.9 VC 6.0等) [3.3] 言語:C [4] 期限:1/16(月) [5] その他の制限:特になし 指摘事項 下記プログラムは点数にaaaなんて入力しても入ってしまうのは問題。 そこで次のように0〜100までの整数値しか入らないようにプログラムを直しなさい。 点数を入力=> aaa 点数に誤りがあります。0〜100までの整数値を入力=> 91 氏名を入力=> となるようにしなさい。
123 :
122 :2006/01/11(水) 19:20:18
私が作成したプログラム。(途中省略) #include <stdio.h> #include <string.h> int score; char sca[4],name[150],buf[256]; FILE *fp; int main(int argc,char* argv{}){ void fp1(){ fp = fopen( "seiseki2.txt" , a+ ); if( fp == NULL ){ printf("seiseki2.txt使用不可\n"); } while(1){ printf( "氏名を入力=>" ); scanf( "%s" ,name ); if( strcmp( name , "end" ) ) == 0 ) break; printf( "点数を入力=>" ) scanf( "%s" , buf ); if( strcmp(buf , "end" ) == 0 ) break; sscanf( buf, "%d" , &score ); fprintf( fp, "%s " , name ); fprintf( fp, "%d\n" , score ); } fclose(fp); }
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 2004年の通算日が何月何日の何曜日かを表示するプログラムを作りなさい。 1月から12月までの各月の日数の累計を配列に初期設定して使用する。 例えば、通算日の32日は「2月1日 (日)」である。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限: 特になし
#include <stdio.h>
#define PI 3.1415926535897932384
double factorial(long n)
{
doublefn;
fn=n;
while(--n) fn*=n;
return fn;
}
>>116 double powern(double x, long n)
{
doublepx;
px=x;
while(--n) px*=x;
return px;
}
int main(void)
{
doublex, s, p;
intn;
x=PI/4.0;
s=0.0;
n=1;
do {
p = powern(x,n) / factorial(n);
if (n & 2) s-=p; else s+=p;
n+=2;
} while (p > 1E-15);
printf("%.15lf\n",s+s);
return 0;
}
128 :
127 :2006/01/11(水) 21:08:30
129 :
127 :2006/01/11(水) 21:13:17
>>125 駅弁
そのLZH落してみたらJPEG1枚しか入ってなかったぞ? これでどうやって解けと?
132 :
デフォルトの名無しさん :2006/01/11(水) 21:27:59
133 :
デフォルトの名無しさん :2006/01/11(水) 21:30:37
1] 授業単元: プログラミング [2] 問題文(含コード&リンク): int i; floatm[3]={1.0,2.0,3.0}; float *mp; mp=&m[0]-1; for(i=1;i<=3;i++){ printf("mp[%d]=%f\n",i,mp[i]); } を1オリジンにする(上は0オリジンらしいのです…) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] C言語 [4] 期限: 今日まで もしよろしければよろしくお願いします。
ばかだな俺・・・lagrange_interpolationって関数名じゃん。 吊ってくるorz
>>133 よくわからんがこういうこと?
float m[4]={0.0,1.0,2.0,3.0};
for(i=1;i<=3;i++){
printf("m[%d]=%f\n",i,m[i]);
}
>>133 ようするに配列が1から始まるか0から始まるかってことか?
そのコードは1オリジンじゃないのか?
0に直すなら
int i;
float m[3]={1.0,2.0,3.0};
float *mp;
mp=&m[0];
for(i=0;i<3;i++){
printf("mp[%d]=%f\n",i+1,mp[i]);
}
オリジンって言葉初めて聞いた
138 :
136 :2006/01/11(水) 22:06:01
>>137 >>133 はポインタで出力時にだけ1オリジンになるように辻褄合わせてるだけじゃないの?
「オリジン」っていうぐらいだから配列の初期化部分が重要だと思う
>>125 >>130 みたらi=0Σ2じゃなくてi=0Σ7じゃん。式間違ってるやん(#゚Д゚)ゴルァ!!
調べてる間に答え書かれちまいましたよ(ノ∀`)
142 :
デフォルトの名無しさん :2006/01/11(水) 22:24:21
すいません;; こっちが問題でした…;(133はもう1オリジンらしぃです…) m[0][0]数値1.1アドレス5044 m[0][1]数値1.2アドレス5048 m[0][2]数値1.3アドレス5052 m[1][0]数値2.1アドレス5056 m[1][1]数値2.2アドレス5060 m[1][2]数値2.3アドレス5064 上記の3行3列を宣言した場合のアドレスの並びと、要素数9の1次元の配列 を宣言した場合のアドレスの並びが等価で有ることを確認するプログラムを 作成する。 たびたびすいません;
オリジンの意味がわからん俺がいる オリジンってそもそも原点って意味だよな それとも専門的な使い方があって俺が無知なだけか・・・
144 :
デフォルトの名無しさん :2006/01/11(水) 22:33:08
オリジンってウチの先生が古くてそう使ってるみたいなんです。 ホント良くわかんないんですよね…
エスパーで察すると float hoge[3][3]={ ... }; for(int i=0;i<9;i++) printf("%f ",*(hoge+i)); って事?
配列のインデックス等が1から始まるなら1オリジン
3行3列の場合を勝手に考えて書いたけど、こんなのでいいの? #include <stdio.h> int main() { int i; double m[3][3]={{1.1,1.2,1.3},{2.1,2.2,2.3},{3.1,3.2,3.3}}; double *mp; mp=m; for(i=0;i<9;i++){ printf("%lf\n",mp[i]); } return 0; }
>>132 Runge-Kutta法ならなんでもいいの?
・使用するRunge-Kuttaの次数とか
・その次数での計算に必要になるまで値を蓄積するために使うのはどの数値解法なのかとか
150 :
デフォルトの名無しさん :2006/01/11(水) 22:49:08
あ…; m[0][0]数値1.1アドレス5044 m[0][1]数値1.2アドレス5048 m[0][2]数値1.3アドレス5052 m[1][0]数値2.1アドレス5056 m[1][1]数値2.2アドレス5060 m[1][2]数値2.3アドレス5064 はいらないっぽいです; 正式には… 3行3列を宣言した場合のアドレスの並びと、要素数9の1次元の配列 を宣言した場合のアドレスの並びが等価で有ることを確認するプログラムを 作成する。 だけでした…;
メモリ空間は1次元配列なんで2次元配列で宣言しようが1次元配列で宣言しようが同じなのですよ
私の知識(記憶?)が確かなら 0 1 2 3 4 5… が 0オリジン 1 2 3 4 5 6… が 1オリジン だったはず。 …それでも問題の意図するところが理解できないorz
秒、分、時間、西暦、Cの配列の添え字、が0オリジン 月、年、COBOLの配列の添え字、が1オリジン
>>150 m1[3][3]とm2[9]の各要素のアドレスを表示
155 :
デフォルトの名無しさん :2006/01/11(水) 23:41:00
[1] 授業単元: プログラミング [2] 問題文:3行3列を宣言した場合のアドレスの並びと、要素数9の1次元の配列 を宣言した場合のアドレスの並びが等価で有ることを確認するプログラムを 作成する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] C言語 [4] 期限: 今日まで
>>155 int main()
{
int array[9];
int matrix[3][3];
int i;
for (i = 0; i < 9; i++) {
printf("%p\t%p\n",&array[i], &matrix[i/3][i%3]);
}
}
157 :
デフォルトの名無しさん :2006/01/11(水) 23:59:48
[1] 授業単元:基礎プログラミング演習 [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録し、 新しく入力された点数以上の氏名を出力するプログラムを書け。 (必ず、print_studen(struct student s)と言う学生一人分の情報を 1行に表示する関数を作成し、それを利用して出力を行うこと。) <構造体の例> struct student{ char name[50], id[20]; int score; }; [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月14日まで
158 :
55 :2006/01/12(木) 00:11:27
>>73 のを試しましたが私のパソコンでは答えの出力と終了が出てこず
大学に送信すると
{「7」を入力した場合正しくは[7(改行)7」ですが
あなたの答えは 「7(改行)10 10 10 10 10 7」 でした}
と返ってきました。
>>87 のを試してみると入力を求められず、「9」を出力して終了してしまいました。
この問題の時点で習っているのがif文とfor、whileだけなので
他のものと見比べたりして色々試してみましたが自力では直すことが出来ませんでした。
また手助けよろしくおねがいします。
>学生一人分の情報 全部?
なんで左シフトした空きビットに0を入れると成り立つのか? この質問はどこにもって行けばいい?
墓場までもっていけ
頼みますよ・・・助けてください
>>158 "9"の文字列は"9桁の正整数を引数に"とでもしておいてください
入力はプログラム実行時引数として渡して下さい
例えば作ったプログラムがreverse.exeなら、
reverse 12345
で実行すれば結果は
1 2 3 4 5
5 4 3 2 1
となると思います。
てか、これで出来るじゃん… int main() { int a; scanf("%d", &a); while(a) { printf("%d ", a % 10); a /= 10; } putchar('\n'); }
>>102 すみません、遅くなりました↓これです
void input(int *a){int i;for(i=0;i<N;i++){scanf("%d",&(a[i]));}}
void output(int *a){int i;for(i=0;i<N;i++){printf("%d\n",a[i]);}}
int main(){int a[N];input(a);output(a);return 0;}
C言語のリスト構造がまったく理解できないのですが、 猿並の頭でも理解できるくらい詳しく解説しているサイトを教えていただけないでしょうか…。 サンプルプログラムみたいなのが載ってると理解しやすいかと思うのですが…。
>>163 #include <stdio.h>
main(){
int i;
char str[10];
gets(str);
for(i=0;i<strlen(str);i++)
printf("%c ",str[i]);
printf("\n");
for(i=strlen(str)-1;i>=0;i--)
printf("%c ",str[i]);
return 0;
}
あっ、引数としてとってないや・・・(汗)
170 :
132 :2006/01/12(木) 01:12:02
>>149 レスが遅れてすみませんm(_ _)m
・使用するRunge-Kutta法は4段4次でお願いします。
・値の蓄積にはどのような方法でもいいです。
171 :
デフォルトの名無しさん :2006/01/12(木) 02:47:17
[1] 授業単元: [2] 問題文(含コード&リンク): 自分で任意のプログラムを作ります。 オセロのプログラムを作ろうと思っています。めちゃくちゃ簡単なのを作ろうと思っています。 使うのはprintf、scanf、if、forなどの超基本的なものだけでいきたいす。 コンピュータに手は打たせないで自分が二役分の手を打っていく形でコンピュータに手は考えさせないでいいです。 つまりはまずフィールドのようなものを表示するプログラム。そこに白、黒の人がが交互にマス目を埋めていくプログラム。 白、黒、黒、白などとフィールド中に縦横か斜めで並んだときに真ん中の黒を白に変えるプログラム。最後にどちらが勝ちか判定するプログラム。 黒や白、フィールドに何も置かれていない状態の表示は簡単のために0,1,2などで表示したほうがいいかもと思うんですが他の方法でもかまいません。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:c [4] 期限: できれば今日中 [5] その他の制限: 200行以内くらいのプログラム。 アドバイス、協力してくれる方いましたらよろしくお願いします。一応メアドも載せときます。
172 :
171 :2006/01/12(木) 02:48:31
連投失礼します。メアドです。
>秒、分、時間、西暦、Cの配列の添え字、が0オリジン >月、年、COBOLの配列の添え字、が1オリジン どうでもいいけど思いっきり間違ってるな。
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
プログラム2は指定したファイルを読み込み、英数字(AからZとaからzと0から9)の塊を表示するプログラムです。
ここで isalnum 関数は文字を読み、文字が英字が数字だった時は 0 以外、英字でも数字でもなかった場合は 0 を返すものです。
このプログラムと strcmp 関数を利用して、この塊が出て来る頻度を大文字小文字を区別した辞書順(strcmp が定める文字列の順序) に
並べるプログラムを作りたい。題意を満たすプログラムを作成しなさい。
プログラム2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1434.c [3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:できればCでお願いします。
[4] 期限:2006年01月12日13:00まで
[5] その他の制限:特に制限はありません。よろしくお願いします。
西暦は1オリジンだね。 COBOL はしらん。
177 :
73 :2006/01/12(木) 03:35:45
>>158 意味がわからん。
ソースに「でした」なんて書いてもいないのにそんな表示出るわけない。
↓ちょっと変えた。たぶん、Windows でも動く。
#include <stdio.h>
int main( void )
{
int n_digits[10] = { 0,0,0,0,0,0,0,0,0,0 };
int c, i;
while (( c = getchar() ) != EOF ) {
if ( c < '0' || '9' < c ) /* that's not a numeral */
continue;
++n_digits[ c - '0' ];
}
for ( c = 0; c < 10; ++c )
for ( i = 0; i < n_digits[c]; ++i )
printf( "%d ", c );
putchar( '\n' );
for ( c = 10; c >= 0; --c )
for ( i = 0; i < n_digits[c]; ++i )
printf( "%d ", c );
putchar( '\n' );
return 0;
}
なんか 12345 54321 のやつだけ手厚くサポートされすぎだな これだけ何種類も答えを提示されて一つも動かないとなると、 何をどう教えても無理じゃないかという気がしてきた
>>175 "strcmpを利用して"って題意としてクリティカル?
>>175 ぶっちゃけ問題の後半の意味がわからない
さて、自分の宿題やるか( 'A`)
>>179 必須だと思います。
>>180 このような形にしたいのです。
入力
def abc
abc def ghi
出力
abc: 2
def: 2
ghi: 1
>>179 入力の出現文字列塊は最大何文字以内とかの制約は?
>>181 教師側から提示されたものなので何とも…^^;
>>183 制約としては明記されていないので、一行の上限である80までだと思います。
>>186 申し訳ありません、少しうとうとしてしまいました。
動作確認いたしました。ありがとうございます。
もう一つの問いに、先に作成したプログラムを書き換える問題で
「文字列の先頭から順に比較していき、最初に異なった文字の大小関係とし、
途中で文字が無くなった場合は無い方が小さいとする」
というものがあるのですが、これは簡単にできるものなのでしょうか?
例:
入力
abcd ab
defg ghi def
出力
ab
abcd
def
defg
ghi
>>171 俺も昔課題で先読み指向型オセロ作らされたからその時に考えたアイデアの一部
・マスは縦*横の2次元配列
・コマは白=0, 黒=1などどして数値で判別。
・コマをおく時はX=? Y=?それぞれをscanf等で入力
入力した後の処理
1.指定した座標にコマがないか、存在する座標か判別。 ある↓ 無い→座標再入力要求
2.隣接するマスで最低1個以上の相手のコマがあるかどうか調べる。 ある↓ 無い→座標再入力要求
3.相手のコマがある方向へ、マスがなくなるまでfor分でサーチ
サーチして自分のコマがあったら、その部分まで全てのコマを自分のコマに置き換え 自分のコマが無い→座標再入力要求
相手のコマがある方向全てに対して処理する
4.コマの切り替え
あとはパスの判定とかマスが全て埋まったらコマの数を数えて結果を出力する処理が必要。
他に効率のいいやり方があるだろうが俺の場合はこんな感じ。
printf、scanf、if、for、whileくらいでいけるはず。200行以内でいけるかは分からん。
マジレスすると盤面2次元配列にすると面倒だから1次元のがいい
>>187 頻度出力してる部分削ればいい
"%s: %d\n" を "%s\n"とかって
面倒でも分かりやすいほうがいいよ。 まあどっちでもいいんだけど。 2次元なら↓みたいになるのかな //0=空 1=● 2=○ int panel[8][8]= { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 2, 1, 0, 0, 0}, {0, 0, 0, 1, 2, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, }:
2次元配列にすると変数そのものが扱いにくくなるんだよなぁ 特にポインタ関係
8×8だと周りを壁で囲めないから判定面倒になるぞ
195 :
171 :2006/01/12(木) 07:25:40
みなさん、ありがとうございます。私もとりあえず2次元配列はわかると思うのでそっちで進めていこうと思います。
>>188 ソースが半分以上意味わかめなので要所要所理解してみます。
>>189 細かくありがとうございます。パスの概念とか見逃していました。
二次元使ってると途中でマジで蹴り飛ばしたくなるからやめとけ
>>191 あ、すみません。
そういう事ではなくて、文字数が少ないものが上にくるようにしたいのですが。。。
どうにかできませんでしょうか?
申し訳ない、私の勘違いでした^^; 長い時間お付き合い頂きありがとうございました。 これで安心して学校へ行けそうです。
安心して学校へって言っても実際力ついてないんだよな そこんとこ錯覚しないでくれよ
201 :
171 :2006/01/12(木) 08:04:51
>>199 ほんとありがとうございます。ちょっと私から見ると難しそうですが、めちゃくちゃ参考にします。
>>196 わかりました。一次元でも考えてみます。
甘えるやつを甘やかしてどんどん堕落させるのが俺らの役目ヽ( ゚∀゚)メ(゚∀゚ )ノ アヒャヒャヒャ
203 :
199 :2006/01/12(木) 08:57:58
そして日本は腐ってく 俺みたいに
205 :
デフォルトの名無しさん :2006/01/12(木) 10:10:12
time() 関数を使うと UNIX 時間を秒単位で得られますが、 もう少し細かく時間を知る方法は無いでしょうか? 外部のプロファイラなどに頼らず、 ある関数の開始と終了時点で計時し、 かかった時間を調べたいと思っています。 IA32 アーキテクチャの RDTSC レジスタを読み取って、 クロック数を得る事で粒度の細かい計時が可能なのですが、 もう少しポータブルな方法を探しています。 Cygwin, Linux および Solaris で共通に利用できるような 方法を探しています。
clock()とかgettimeofday()とかgetusage()とか?
207 :
初心者ですみません :2006/01/12(木) 10:49:34
出力した素数の数を数えるプログラムはどうやったら作れますか? 例えば、 1〜100までの素数の数は 25 です このように表したいです
wcに喰わせる。
210 :
121 :2006/01/12(木) 11:02:27
>>207 >>119 流用
#include <stdio.h>
int sosu(int n){int i;for(i=2;i<n;i++){if(n%i==0){return 0;}}return 1;}
int main(){
int n,m,cnt;cnt=0;
printf ("自然数mを入力してください\n");
scanf ("%d", &m);
for (n=1; n<=m; n++){if (n!=1 && sosu(n)){
//printf ("%d ", n);
cnt++;}}printf ("\n素数は%d個\n",cnt);return 0;}
コメント外せば素数表示できる。
100入れたら25出たからたぶん大丈夫。
211 :
121 :2006/01/12(木) 11:07:16
訂正。とは言え自己満足のレベルだけど。 #include <stdio.h> int sosu(int n){int i;for(i=2;i<n;i++){if(!(n%i)){return 0;}}return 1;} int main(){int n,m,cnt;cnt=0;printf ("自然数mを入力してください\n"); scanf ("%d", &m);for (n=1; n<=m; n++){if (n!=1 && sosu(n)){ /*printf ("%d ", n);*/cnt++; }}printf ("\n1〜%dまでの素数は%d個\n",m,cnt);return 0;}
符号付2進展開のプログラムについてです。 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。 またrを符号付2進展開にした場合のプログラムも作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C言語 [4] 期限:2006年1月15日 [5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。 問題文分かりにくいですが以下のようなことです。 (符号付じゃない場合) 3 = 0 1 1・・・・・・5の指数部 6 = 1 1 0・・・・・・2の指数部 ーーーーーーーーーー 上のように指数部を2進展開して上位ビットから見ていきます。 1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。 このような仕様です。よろしくお願いします。
#include <stdio.h> int main( void ) { int num, *pnt; for( num = 10; num >= 6; num-- ){ printf( "value:%2d address:%p\n", num, &num ); } while( num != 0 ){ pnt = # printf( "value:%2d address:%p\n", *pnt, pnt ); num -= 1; } return 0; } 関数とポインタ関数を用いて10〜1の値と、そのアドレスを表示せよというプログラムを書いたつもりなんですが、 これでいいんでしょうか 実行してみると、アドレスが全部同じなんですが・・・・・
214 :
デフォルトの名無しさん :2006/01/12(木) 13:10:34
num という関数の確保した領域しか存在しないから、アドレスは一定だよ。 コードは汚いが合ってる。
215 :
デフォルトの名無しさん :2006/01/12(木) 13:39:35
課題が出ました。お願いします 1,変数x,yにそれぞれ8と5を代入して,x/yを計算し, 整数解と実数解を出力するプログラムを作成せよ 2,sを入力し,sから200までの整数のうち16の倍数となる整数を 出力するプログラムをfor文またはwhile文を用いて作成せよ 3,nを入力したとき,その数を3で割ったとき,割り切れるならばaを ,1余るならばbを,2余るならばcを出力するプログラムを作成せよ。 4,n人分について国語,社会,数学,理科,英語の5科目の得点を入力し, それぞれの合計点を計算した後,n人を合計点の小さい順に並び替え, 出力するプログラムを作成せよ。ただし,各科目の変数名を ko,sy,su,ri,eiとし,配列名はtokutenとすること 5,すべて大文字の英字を10字以内で入力し, そのうちの子音(a,i,u,e,o以外の文字)の部分を小文字に 変換して出力するプログラムを作成せよ。 (例:MOMOTAROU → mOmOtArOU) 6,15文字以内の文字列(英字)と3文字のキーワード(英字)を入力する. このとき,先に入力した文字列にキーワードが含まれていたら 「あります」 ,含まれていなければ 「ありません」 と, メッセージを返すプログラムを作成せよ. たとえば,入力文字が「takoikatai」のとき, キーワードが「ika」の場合は「あります」,キーワードが「aji」の場合は「ありません」と表示されるようにする.
216 :
すいません 215です :2006/01/12(木) 13:44:01
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 215です [3] 環境 [3.1] OS: (Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C [4] 期限: 2006年1月14日24h [5] その他の制限:、標準ライブラリは使ってはいけない 授業は215の範囲ぐらいしかいってません
217 :
すいません 215です :2006/01/12(木) 13:48:28
一番はとけたのですが,後のものがとけません。 一番以外お願いします。
>>214 関数とポインタ関数を用いて
とあるので違うと思う
219 :
デフォルトの名無しさん :2006/01/12(木) 14:10:10
変数だと勝手に解釈したが…
220 :
デフォルトの名無しさん :2006/01/12(木) 14:14:15
>>215 2.
scanf("%d".&s);
for(s;s<201;s++)
{
if(s%16==0)
{ printf("%d\t",s);
}
}
3.
scanf("%d",&n);
if(n%3==0)
{ printf("a\n");}
else if(n%3==1)
{ printf("b\n");}
else
{ printf("c\n");}
>>215 何故1.が出来て2.3.が出来ないか!!
とりあえず2.
#include <stdio.h>
int main(){int i,s;
printf ("input s:");scanf ("%d", &s);printf("\n");
for( i=s; i<200; i++)if(!(i%16))printf("%d ",i);}
222 :
デフォルトの名無しさん :2006/01/12(木) 14:24:23
[1] 授業単元:情報処理 [2] 問題文人工無能を作れ。 やる気がなければオウム返しでもよい。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年2月上旬 [5] その他の制限:なし
>222 #include <stdio.h> #include <string.h> int main(){ char buf[BUFSIZ]; while(fgets(buf, sizeof(buf), stdin)){ if(!strcmp(buf, "quit\n")) break; printf("> %s", buf); } return 0; }
224 :
デフォルトの名無しさん :2006/01/12(木) 14:45:07
>>215 の2
int s;
scanf("%d", &s);
s+=(16-(s%16))%16;
while(s<200)printf("%d\n", s), s+=16;
もう解決してるし・・・
せっかくだからおいとく
>>215 5.(4はめんどいんで後回し)
#include <stdio.h>
int main(){char s[10+1],*p;
fgets(s,10+1,stdin);p=s;
while(1){if(*p=='\0') break;
if(*p>='A' && *p<='Z')if(*p!='A'&&*p!='I'&&*p!='U'&&*p!='E'&&*p!='O')*p+=0x20;
putchar(*p++);}}
3.やっと動いた。 いちど別の変数に入れてポインタ指定しないとダメなんかな? このへんの処理が(見た目)重い… #include <stdio.h> int main(){int n;char s[]={'a'},*p;p=s;scanf("%d",&n);putchar(*p+=n%3);}
227 :
215 :2006/01/12(木) 15:10:00
ありがとうございます。 自分でもいまやってるんですが,やはり皆さんはやいです。 すげー
229 :
215 :2006/01/12(木) 15:19:01
すいません・・・ c++でした・・。
230 :
デフォルトの名無しさん :2006/01/12(木) 15:20:02
うはwwwwwwwwww 最初に言えよwwwwwwwwwwwwww
231 :
デフォルトの名無しさん :2006/01/12(木) 15:20:48
232 :
デフォルトの名無しさん :2006/01/12(木) 15:21:45
テキストファイルを読み込み、最長の行を出力するプログラムを作成しなさい。 これ、教えて。
233 :
デフォルトの名無しさん :2006/01/12(木) 15:22:01
>>226 putchar('a'+n%3);
これでいいね。
234 :
215 :2006/01/12(木) 15:28:40
すいません。 そこんとこもよくわからん初心者でして・・・
235 :
226 :2006/01/12(木) 15:31:57
>>233 動きましたw
改めて貼っとく。
#include <stdio.h>
int main(){int n;scanf("%d",&n);putchar('a'+n%3);}
236 :
デフォルトの名無しさん :2006/01/12(木) 15:32:15
[1] 授業単元:情報工学 [2] 問題文(含コード&リンク):円周率をマチンの公式を使い1万桁表示するプログラムを作る. 多倍長演算を使い,5桁ごとに1つ空白を入れる. [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日中 1月12日24時まで [5] その他の制限: なし よろしくおねがいします
237 :
デフォルトの名無しさん :2006/01/12(木) 15:35:34
[1] 授業単元:応用プログラミング [2] 問題文(含コード&リンク):期末試験を手伝え。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 01/23 12:50〜14:20限定 [5] その他の制限: 留年かかってます。当日ここに高速で書き込むので即答をお願いします。
>>237 お手伝いロボット置いときますね。ぐぐっただけなんで詳細不明
-―-
. ´ ` 、
' , i l ! ヽ ヽ
〈\ .〃/‐リノ ノリ)ヘヽ.\`
,' ヽ \ /,ィ'"|` f'!ヽト、!` / ̄ ̄ ̄ ̄ ̄
l//, ゙{0))! ヒ1! ,l.!,. l、ヽ .|
' /l/` リl、"´ lフ イゝ < 健康びーむ?
'´ l/_i_リ,! r._´ リ |
'「 , ‐ゝ>r'l〉く.、 \_____
く,`l ,.`Kト〉ヾヽ
ゝL ヾ.l、〉 r'
,-| 「 {} !_ |
! l、 `)}´}
`>/`,-´、 ァ'
く./ {_`」./ l}
// 「i. k
,.' / >! l}
j / r'j i1
^!,' k1 k'
天才ハゲワロス
マルチなんかに手伝わせたら 確実に留年する
>>216 やばいな、見落としてた。
[5] その他の制限:、標準ライブラリは使ってはいけない
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^このへん
どうしようか・・・_| ̄|○ ゼンブヤリナオシカヨ
標準ライブラリ駄目って<stdio.h>も駄目か?
C++ でしょ? cout もだめとか
>>215 WindowsAPI叩けってことだよね?
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): d2y(x) / dx2 + dy(x) + y(x) = sin(πx) 0≦x≦1で定義された微分方程式 を境界条件 y(0)=0, y(1)=0のもとで解け [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 1月13日17時まで お願いします
248 :
デフォルトの名無しさん :2006/01/12(木) 16:39:17
[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年1月13日12:00まで 成績に関わるんでよろしくお願いします。
249 :
デフォルトの名無しさん :2006/01/12(木) 18:14:04
[1] 授業単元: アルゴリズム演習B [2] 問題文(含コード&リンク): int t(int x, int y, int z) { if (x > y) return t(t((x-1),y,z),t((y-1),z,x),t((z-1),x,y)); return y; } という関数tがある。tと等価な関数で高速なものを実装せよ。 目安としてはt(2006,1003,0)がtimeコマンドで10s以内 [3] 環境 [3.1] OS: 問わない [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1/15(日)の23:59まで
250 :
デフォルトの名無しさん :2006/01/12(木) 20:15:23
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): セット時刻になったらグラフィックを表示し音楽を鳴らすプログラムを作る [3] 環境 [3.1] OS:Windows [3.2] lcc [4] 期限:17日 [5] その他の制限: グラフィックはchinouglなどをつかう プログラミングが完成したらグラフィック処理、音楽処理、時間判定の処理を関数として書き、 main()から呼び出す形にしなきゃいけません。 ・・・ int main(){ ・・・ timecomp(); graphic(); music(); ・・・ } 後、絵はなんでもいいです! 面倒だとは思いますがよろしくお願いします。
chinougl おもしろすぎ
252 :
デフォルトの名無しさん :2006/01/12(木) 20:26:56
[1] 授業単元: プログラミング
[2] 問題文:
1.下のファイルに画像があります。その中の赤枠の中お願いします。その文章中の演習問題4-8の
プログラムが1.cppです。
2.ファイルの中にある、2.cppは2つの画像を重ねて画素の差の有無で0か255に出力するプログラムです。
そして、もとの画像は、見た目が同じものを使うのですが出てきた画像は他の画像になっています、
それは何故でしょうか?
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: VC 5.0か6.0
[3.3] 言語: どちらでも可
[4] 期限: 1月13日14:00まで
[5] ファイルは(
http://cgi.2chan.net/up2/up.htm )のf111554.zipです。
出来ないと単位を取れないので、時間が無いですが、お願いします。
ハッピー☆マテリアルですか?
それはともかく
>>250 グラフィック処理、音楽処理は機種依存の処理になるので
そのあたりは下で問い合わせた方がいいかもしれません
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1135828083/l50 そのchinouglというライブラリの仕様がこちらからではわからないためです。
ここで回答できるのは
ソースにセット時刻を書き込むか(コンパイルしたら設定変更できない)
外部テキストファイルから読み込んでその時刻になったら
graphic();
music();
を呼び出すということくらいですがよろしいですか。
>>252 #include "params.h"
#include "ImageMDisp.cpp"
#include "ResultMDisp.cpp"
がどんなファイルかわかりませんので答えようがありません。
今なぜあなたが単位がとれるかどうかの瀬戸際に立たされているか
ということをよく考えればなんとか解決できるのかもしれません。
google 検索によると chinougl は熊本大学限定ライブラリのようだ。
256 :
デフォルトの名無しさん :2006/01/12(木) 20:50:42
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):整数iの自乗が1000以上で、一番1000に近い値となるiとiの自乗を出力するプログラムを作成 #include <stdio.h> void main(void) { int i; [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: ボーランドC++ Compiler [3.3] 言語:C++ お願いします
>>254 そうですか、その辺は習っていなくて学校のサーバーから移してvoid Processing(unsigne〜〜[X_SIZE])以下を
打つように習っていました。
馬鹿すぎて取れなくて当然ということですか?
>>256 切り番おめ。
#include <iostream>
int main( void )
{
int i = 0;
while( true ) {
++i;
if ( i*i >= 1000)
break;
}
std::cout << "i: " << i << " i*i: " << i*i << std::endl;
return 0;
}
259 :
デフォルトの名無しさん :2006/01/12(木) 20:59:25
>>256 int i = (int)sqrt(1000)+0.5;
printf("%d %d", i, i*i);
260 :
259 :2006/01/12(木) 21:01:48
先越された上に間違えた上にageした。。。
261 :
デフォルトの名無しさん :2006/01/12(木) 21:02:01
>258 #include <stdio.h> ってあるから std::cout << "i: " << i << " i*i: " << i*i << std::endl; でなくて、 printf("i:%d i*i:%d\n",i,i*i); でないか。
>>261 迷ったけど C++ て書いてるしと思って。
>>257 Processing がどうのこうのとか何言ってるかぜんぜん通じないよ?
君の大学でしか通用しないことをここで当たり前のように言われても困る。
>>263 すみません、はっきし言って、私、全然この授業わかってないので、もう諦めます。
熊本がどうしたって?
266 :
デフォルトの名無しさん :2006/01/12(木) 21:23:10
[1]C言語 [2] 数人分の学生成績データ・レコードを格納したファイル(名前をstu-seiseki)がある。 各レコードの長さは次のとおりである。 学生番号 7byte 氏名 20byte 英語・数学・国語 3byte 学生番号は0番からの通し番号であり、 各レコードは学生番号の順に並んでいるものとする。 このデータを使って学生の成績に関する問い合わせを行うプログラムretrieve.cを作りたい。 このプログラムは、キーボードから学生の番号を入力し該当する学生のレコードを検索、 学生番号等の各項目のほかに、合計点と平均点を並べて表示するものとする。 プログラム終了には、^bを押すものとする。 【データの例】 0000000 山田 太郎 030050060 0000001 鈴木 花子 080075030 【実行例】 学生番号入力→1 学番 氏名 英語 数学 国語 総点 平均点 1 鈴木花子 80 75 30 185 61.7 [3]Windows C言語 [4]2006年1月13日 12:00まで [5]バイナリモードでお願いします。 本当に困り果てています。よろしくお願いします。
>262 言われるとそうかもって気になってきた。 256は確認して、いいほうを提出しる。 >263 まあ、257はライブラリってのがよく理解できてないだけだと思われ。 >257 Processingうんぬんは熊本大学?だけでしか使われてないから、部外者はわからない。 でも逆に「コピーされるように言われた」内容をこちらに伝えれば、部外者でもそれを使ってソースは書ける。 とりあえず、情報を出してみれば作ってくれる人もいると思うよ。
268 :
267 :2006/01/12(木) 21:26:32
文章打ってる間に>257が諦めた。orz やっぱ打つのおそいのかな。
熊本大学はグラフィックライブラリ chinougl のことね Processing なんとかはしらない
270 :
236 :2006/01/12(木) 21:30:20
再スレです。 [1] 授業単元:情報工学 [2] 問題文(含コード&リンク):円周率をマチンの公式を使い1万桁表示するプログラムを作る. 多倍長演算を使い,5桁ごとに1つ空白を入れる. [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日中 1月12日24時まで [5] その他の制限: なし 提出が明日なので、誰か助けてください!!
>>270 マチンの公式 多倍長
でぐぐれば見つかるよ
今から多倍長作ってたら期限に間に合わない罠
273 :
257 :2006/01/12(木) 22:03:51
>>267 ライブラリってのは、他のとこに作ったプログラムを引っ張ってきて使うってことですよね?
あと、
"ImageMDisp.cpp"
"ResultMDisp.cpp"
が見つかりましたのでうpします。
mip.cppはコピーされるように言われたものです。
http://vista.x0.com/index.php の vi18927.zip です。
274 :
257 :2006/01/12(木) 22:06:07
すみません間違えました vi18931.zip です。
276 :
215/// :2006/01/12(木) 23:11:05
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 216に [3] 環境 [3.1] OS: (Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C [4] 期限: 2006年1月14日24h [5] その他の制限:標準らいぶらりいいそうです。すいません
277 :
215/// :2006/01/12(木) 23:12:11
3,nを入力したとき,その数を3で割ったとき,割り切れるならばaを ,1余るならばbを,2余るならばcを出力するプログラムを作成せよ。 4,n人分について国語,社会,数学,理科,英語の5科目の得点を入力し, それぞれの合計点を計算した後,n人を合計点の小さい順に並び替え, 出力するプログラムを作成せよ。ただし,各科目の変数名を ko,sy,su,ri,eiとし,配列名はtokutenとすること 5,すべて大文字の英字を10字以内で入力し, そのうちの子音(a,i,u,e,o以外の文字)の部分を小文字に 変換して出力するプログラムを作成せよ。 (例:MOMOTAROU → mOmOtArOU) 6,15文字以内の文字列(英字)と3文字のキーワード(英字)を入力する. このとき,先に入力した文字列にキーワードが含まれていたら 「あります」 ,含まれていなければ 「ありません」 と, メッセージを返すプログラムを作成せよ. たとえば,入力文字が「takoikatai」のとき, キーワードが「ika」の場合は「あります」, キーワードが「aji」の場合は「ありません」と表示されるようにする. むずいです
278 :
215/// :2006/01/12(木) 23:15:24
すいません問題文は276に
279 :
デフォルトの名無しさん :2006/01/12(木) 23:26:27
>>215 3。
int num;
scanf("%d", num);
switch(num % 3){
case 0: printf("a\n");
case 1: printf("b\n");
case 2: printf("c\n");
}
280 :
デフォルトの名無しさん :2006/01/12(木) 23:27:34
[1] 授業単元:プログラミングW [2] 問題文: 抽象クラス:Shape(抽象的に図形クラス) 以下で考える図形 @円(Circle) :中心座標と半径 A正方形(square) :一点の座標と一辺の長さ B楕円(ellipse) :楕円の方程式 C矩形(rectangle) :一点の座標と対角線の長さ 派生クラス @円(Circle) A正方形(square) B楕円(ellipse) C矩形(rectangle) 操作クラス(関数) @〜C:面積を求める、周の長さを求める、各図形を特徴付ける値を返す。 @〜A:図形の大きさを拡大する、図形の大きさを縮小する。 B〜C:離心率を変化させる。 C:一辺の長さを変える。 この各図形およびその操作を実現できるプログラムを作成する。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限: 1月15日 23時59分まで [5] その他の制限: 難しくてさっぱりです、お願いします><
281 :
215/// :2006/01/12(木) 23:32:36
279さん ありがと
>>215 5
#include<stdio.h>
int main(void){
char n[11],t[6]="AIUEO";
int i,j;
scanf("%s",n);/*10文字超えたらシラネ*/
for(i=0;n[i];i++)
if(n[i]>='A' && n[i]<='Z')/* 念のため */
switch(n[i]){
case 'A':case 'I':case 'U':case 'E':case 'O':
break;
default:
n[i]+='a'-'A';
break;
}
printf("%s\n",n);
return 0;
}
283 :
デフォルトの名無しさん :2006/01/12(木) 23:34:45
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): オーナーウィンドウからメニューを持ったウィンドウを 生成しなさい。また、このことを利用して何かプログラムを作り提出しなさい。 [3] 環境 [3.1] OS: WindowsXP SP2 [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: どちらでも可 [4] 期限: 明日の朝(やばいw [5] その他の制限: 知識的には猫でもわかるシリーズのC/Win/ネットを読破したくらいです。 時間がないですがよろしくお願いします。
ナイス誘導。だぜ。
>215 #5 #include<stdio.h> int main(){ const char *conv="AbcdEfghIjklmnOpqrstUvwxyz"; char buff[11]; int i; scanf( "%10s", buff ); for( i=0; i<10&&buff[i];++i ) buff[i]=conv[buff[i]-'A']; printf( "%s", buff ); return 0; }
>252 ImageMDispは画像ファイルから配列に取り込む関数、ResultMDispは配列から画像ファイルに書き出す関数って事でOK? ふたばのファイル流れてて見れなかったけど、vi18927って同じ物? img10.cppの10行目では、image_in_1、image_in_2、image_outで36行目では、image_in_1、image_out、image_in_2だけどどっちが正しいの? ソースのタイムスタンプが2005/12/20になってるけど、そこからいじってないの? >2.ファイルの中にある、2.cppは2つの画像を重ねて画素の差の有無で0か255に出力するプログラムです。 >そして、もとの画像は、見た目が同じものを使うのですが出てきた画像は他の画像になっています、 >それは何故でしょうか? 差分があれば255にするんだよね。同じ画像を2つ重ねたら全部0で、もとの画像とは違う画像になると思うけど?
というかスレ違い CreateWindowの引数にメニューを指定するかカスタムウィンドウクラスのメンバ引数にメニューをしてやるか もうこないでね
>>215 6
#include <stdio.h>
#include <string.h>
int main(void){
char str[16], word[4], *result;
int i, len, chk;
printf("15文字以内の文字列でもいれたら?\n");
scanf("%s", str);
printf("3文字のキーワードでもいれたら?\n");
scanf("%s", word);
len = strlen(word);
if(len != 3){
printf("3文字って言うたやん\n");
return 0;
}
result = strstr(str, word);
if(result != NULL) printf("あります\n");
else printf("ありません\n");
return 0;
}
292 :
252 :2006/01/13(金) 00:47:03
>>289 ありがとうございます。
ImageMDispやResultMDispはもとからあって、特に説明は受けなかったので何なのか分かっていません。
そうです、vi18927は同じものです。
すみません多分、image_in_1、image_in_2、image_outがあってると思います。
はい、授業でやった時からいじっていません。
はい、あくまでも、「見た目は」同じ画像なんです、が実行すると学校のマークが出てきました。
たぶん元の画像に何かしらの細工がしてあったわけですよね?
>292
>たぶん元の画像に何かしらの細工がしてあったわけですよね?
そうなるな。
正解した生徒にはわかる仕掛けを仕込んだんだろう。先生共もヒマだな。
ソースはあれでいいと思う。
image_in_1、image_in_2、image_outの順になるよう書き直せば終わりだ。
>236
技術評論社のC言語による最新アルゴリズム事典って本に、多倍長演算でMachinの公式使って円周率求める内容が載ってた。
著者のサイトからソースがダウンロードできる。
ttp://oku.edu.mie-u.ac.jp/~okumura/algo/ multprec.cがそれだ。
294 :
117 :2006/01/13(金) 02:09:08
295 :
215/// :2006/01/13(金) 02:09:39
うほっ皆ありがとうございます 今までやってたけど正直きびしいです 後の4をがんばって後1時間はやってみます・・。
296 :
デフォルトの名無しさん :2006/01/13(金) 02:33:48
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 3つの線分(整数)をキーボードから入力させ、その3つの線分で三角形を 描くことができるなら“THEY CAN MAKE A TRIANGLE” 描けないなら“THEY CAN`T MAKE A TRIANGLE”と表示する。 (ヒント:三角形形成条件 3辺をa,b,cとした場合 a<b+c且つb<c+a且つc<a+bであること [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:・・・本気でわかんない;ごめんなさい [3.3] 言語:C言語 [4] 期限:1月13日金曜日の午後6時 [5] その他の制限:入社前課題。C言語は独学で明解C言語(ソフトバンク)入門編を 一度だけ読み通したのみ。 情報系に就職が決まったけど周りに情報系の人間が1人もいないから ほぼ独学、質問できる人がいないから助けてくださいorz ついでにフリーの良い開発環境を教えていただけたら幸せです。
>>296 その程度ができないようなら入社するな!!
独学で調べられないならやめてしまえ!!
ガキの遊びじゃねえんだよ!!
299 :
296 :2006/01/13(金) 02:41:53
>>298 そうですか・・・、なら解けるまでまた頑張ってみます。
ちょっと目がさめた気分です。
スレ汚しすみません。
>>296 #include <stdio.h>
int main(void) {
int a, b, c;
printf("a?:"); scanf("%d", &a);
printf("b?:"); scanf("%d", &b);
printf("c?:"); scanf("%d", &c);
if (a < b + c && b < c + a && c < a + b)
printf("THEY CAN MAKE A TRIANGLE\n");
else
printf("THEY CAN`T MAKE A TRIANGLE\n");
return 0;
}
勉強向けのフリーの開発環境は今ならこれがいい。ただし、Windows固有の
機能に依存した物を作ろうと思ったらそれなりにファイルの入手&設定が必要。
こんなものがフリーで使える事をありがたく思いなさい。
Visual C++ 2005 Express Edition 日本語版
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
MS信者乙
302 :
296 :2006/01/13(金) 02:55:50
>>300 深夜なのにすみませんでした。そしてありがとうございます。
まだまだ本当に勉強が足らなくて本当に社会にでれるか心配ですが
できるだけ入社しても周りの脚を引っ張らないように頑張って勉強します。
色々お世話になりました。
そして298さん。他人任せにしてはいけないんだと思いなおせました。
叱咤ほんとにありがとう、もう一回本とか読み直します。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): x, y, z がそれぞれ1から120までの数であるとき、 三平方の定理(x2+y2=z2)を満足する(x,y,z)のうち、 x,y,z の3つすべてが偶数であるものを出力するプログラムを作成せよ。 [3] 環境 [3.1] OS:Widows XP [3.2] コンパイラ名とバージョン:すみません分かりません。 [3.3] 言語:C言語 [4] 期限:2006年1月20日 全くの初心者で困っています。 どなたか宜しくお願いします。
ある長さxのバイト列αがあります。 xの範囲は1から1524バイトです。 αの中から特定のバイト3Eが含まれているからどうか 高速に見つける方法を考えなさいって問題が出されました どうやって解いたらいいのでしょうか。 先頭からfor文で一個一個見ていくやり方を書いたら 怒られましたなぜ怒られたのかも解りません。 それ以外方法ないと思うのですが間違っていたら教えてください。
>>296 教科書の一番最初のプログラムはコンパイルして、動かせましたか?
>>303 #include <stdio.h>
#define F(a) for (a = 2; a <= 120; a += 2)
int main(void) { int x, y, z; F(x) F(y) F(z) if (x * x + y * y == z * z)
printf("x = %d, y = %d, z = %d\n", x, y, z); return 0; }
>>304 スレ違い
>>305 うーん。与えられてる情報だと、バイト列としか言われてないので、線形サーチしか思い浮かばない。
307 :
252 :2006/01/13(金) 03:23:27
>>293 ありがとうございます。
課題は、どうしてあるかなので、適当な推測を書いておきます。
お世話になりました。
>>306 303です。
ありがとうございます!
本当に助かりました!心より感謝致します。
309 :
305 :2006/01/13(金) 05:08:24
>>304 ふと思い出した。含まれているかどうか調べるだけならXNORでいいんだわ。
(A XNOR B) はCで書くと(A&B)|(!A&!B)
0x3E3E3E3EでXNORすれば4バイト単位で調べられる・・と
【おわびと訂正】
>>309 に下記のように誤りがありました。おわびして訂正致します。
(誤) (A&B)|(!A&!B) (正) (A&B)|(~A&~B)
(誤) 0x3E3E3E3EでXNORすれば4バイト単位で調べられる
(正) まず 0x3E3E3E3E との XNOR をとる。
その結果と 0xFF000000、0x00FF0000、0x0000FF00、0x000000FF
との AND を順次マスク値と比較する。
等しいものがあればそのバイトが 3Eh(00111110) だが、
ここまでやって得があるのかははなはだ疑問だ。
というか EX-NOR とらないでも、 EX-OR とってマスクして 0 なら当たりじゃないか。
というかバイトデータ列を 4 バイトまとめて読みこんだら CPU のエンヂアンに依存するじゃないか。
何が駄目かっていうと総当り戦法が美しくないって教官は言ってるんじゃない? しかし与えられてるのがバイト列のみであるから俺は総当り戦法しか思いつかん これでもし教官の期待してるものが2分木やら線形リストやらだったら学校やめるな
総当りは個人的には美しいから気にならない まぁ美しいってより安心できるってだけかもしれんが
バブルソート>クイックソート||マージソート の構図が美しいと申したか
バブルソート美しいじゃないか・・・・ソースが
おまいらアフォか 探すのが1回(あるいは探すバイト値が一種類)だけとは限らないだろ 今後のことも考えて一旦バイト列αを二分木に構成しておくと2回目から効果が出るんだよ あと、二分木と二分探索は違うものだから
319 :
デフォルトの名無しさん :2006/01/13(金) 08:45:21
10×10の2次元配列に、平面のビットパターンが入っているとする。 左右反転、上下反転して出力。
320 :
デフォルトの名無しさん :2006/01/13(金) 08:47:28
整数配列data[0]〜[9]に、0以上の整数が格納されている。 それぞれの配列要素ごとに、一行に*を印刷し、グラフをつくりたい。 最も大きな数字を*が50個となるように、スケーリングして表示。
321 :
デフォルトの名無しさん :2006/01/13(金) 08:48:57
選択法の並べ替えアルゴリズムで大きい順に整数を並べ替えるプログラム。
322 :
デフォルトの名無しさん :2006/01/13(金) 08:50:24
ライブラリ関数char toupper(char c)と同じ処理をする関数を記述せよ。(cが小文字であれば大文字を返し、それ以外はそのまま返す)
323 :
デフォルトの名無しさん :2006/01/13(金) 08:53:01
2つの文字列str1[]とstr2[]のうち、文字列が長いほうを前にして、お互いを結合する関数void strcatlong(char str1[ ], char str2[ ])を記述せよ。(strlen,strcat関数は使用可)
325 :
ひお :2006/01/13(金) 09:02:12
@文字列にstr[]に整数表記(負の場合もある)が入っているとする。 それを整数に変換して返す関数int atoi(char str[ ])を記述せよ。 Aライブラリ関数int strcmp(char str1[ ], char str2[ ])と同じ処理をする関数を記述せよ。
326 :
デフォルトの名無しさん :2006/01/13(金) 09:31:47
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ・sin(x)のマクローリン展開から√2の近似値を計算する プログラムを作成せよ。 ・sin(π/4)の値を二倍して求めること。 ・階乗と累乗の計算は各々関数で行うこと。 ・πの値(3.141592)はプログラムに与える。 ・重要な処理のところを、コメント文で簡単に説明する。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月13日8:50まで
327 :
デフォルトの名無しさん :2006/01/13(金) 09:32:57
[1] 授業単元:関数呼び出し [2] 問題文(含コード&リンク): ・sin(x)のマクローリン展開から√2の近似値を計算する プログラムを作成せよ。 ・sin(π/4)の値を二倍して求めること。 ・階乗と累乗の計算は各々関数で行うこと。 ・πの値(3.141592)はプログラムに与える。 ・重要な処理のところを、コメント文で簡単に説明する。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月16日8:50まで
328 :
デフォルトの名無しさん :2006/01/13(金) 10:35:28
[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年1月13日16:00まで 心底困り果てています、ホントによろしくお願いします
>>328 #include <stdio.h>
#include <stdlib.h>
int main(int ac, char **av)
{
char buf[1024];
if(ac != 2){
fprintf(stderr, "Usage: hoge filename\n");
}else{
sprintf(buf, "dump %s", av[1]);
system(buf);
}
return 0;
}
ああ、間違えた #include <stdio.h> #include <stdlib.h> int main(int ac, char **av) { char buf[1024]; if(ac != 2){ fprintf(stderr, "Usage: hoge filename\n"); }else{ sprintf(buf, "debug.exe %s", av[1]); system(buf); } return 0; }
331 :
デフォルトの名無しさん :2006/01/13(金) 11:24:22
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):三角関数(sin、cos、tan)を計算するプログラムを書きなさい [3] 環境 [3.1] OS: WindousXP [3.2] コンパイラ名とバージョン:Tera Term Pro ver.2.3 [3.3] 言語:C [4] 期限:2006年1月17日 [5] その他の制限: stdio.hだけを使用して作ること (テーラー展開を用いて)
引数の個数確認しかしていないw。酷いなぁ
>コンパイラ名とバージョン:Tera Term Pro ver.2.3 これは酷い
335 :
加賀 :2006/01/13(金) 13:30:11
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):入力された文字列とキーの押し時間と離し時間をファイルへ書き出せ。 シフトキーを押した場合と押してない場合の区別をつけろ。 例:I have a pen の場合以下のように出力しなさい 0.135443 0.578212 I 0.159088 0.230911 0.127591 0.344145 0.099871 0.517189 0.148901 0.309172 have 0.200912 0.389001 a 0.187678 0.489176 0.112567 0.201985 0.158481 0.491371 pen [3] 環境 [3.1] Windows XP [3.2] Microsoft VC++ 6.0 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:2006年1月16日 [5] 次にプログラムまで自作してみましたが、これ以上はわからないです。よろしくお願いします。
336 :
加賀 :2006/01/13(金) 13:31:50
作ってみたプログラムpart1です。 #include <stdio.h> #include <windows.h> #include <conio.h> #include <time.h> #include <stdlib.h> __int64 tsc2sec; inline __int64 __fastcall RDTSC( ) { _asm{ rdtsc // _emit 0xf ← rdtsc でエラーが出る古いバージョン // _emit 0x31 ← の環境のとき } }
337 :
加賀 :2006/01/13(金) 13:32:29
作ってみたプログラムpart2です。 int GetKeyTime(double *interval, int *code) { int i,j,k; __int64 st,ed; double a; static __int64 last=0; static char ks[256]={0}; for(;;) { for(i=0;i<0xfe;i++) { k=GetAsyncKeyState(i); if(((k&0x8000) >0)&&(ks[i]==0)) { st=RDTSC(); *interval=(double)(st-last)/tsc2sec; *code=i; ks[i]=1; last=st; return(1); } if(((k&0x8000)==0)&&(ks[i]==1)) { st=RDTSC(); *interval=(double)(st-last)/tsc2sec; *code=i; ks[i]=0; last=st; return(0); } } } return(0); }
338 :
加賀 :2006/01/13(金) 13:33:51
作ってみたプログラムpart3です。 int main() { __int64 st; clock_t t1; int i,j,k; double a,b; char str[256]; FILE *fp1= fopen("test1.txt", "w"); st=RDTSC(); t1=clock(); while(clock()-t1<CLOCKS_PER_SEC); tsc2sec=RDTSC()-st; j=0; while(GetAsyncKeyState(VK_RETURN)==0) { i=GetKeyTime(&b,&k); if(i==1){ printf("Keycode:%x pressed : interval:%f\n",k,b); if(j!=0) fprintf(fp1,"%f ",b); j++; }
339 :
加賀 :2006/01/13(金) 13:34:39
作ってみたプログラムpart4です。 if(GetAsyncKeyState(VK_SPACE)<0)//スペースが押されていたときの処理 { printf("SPACE KYE\n"); FILE *fp3 = fopen("test2.txt", "r"); while (fgets(str, 256, fp3) != NULL) { fprintf(fp1,"%s\n", str); } fclose(fp3); if( remove( "test2.txt" ) == -1 ) perror( "'test2.txt' ファイルが削除できません" ); else printf( "'test2.txt' ファイルが削除されました\n" ); } if(i!=1) { FILE *fp2 = fopen("test2.txt", "a+"); printf("Keycode:%x released : interval:%f\n",k,b); fprintf(fp1,"%f ",b); fprintf(fp2,"%c",k); fclose(fp2); } } fclose(fp1); return 0; } 長々とすみません。
340 :
加賀 :2006/01/13(金) 14:03:27
すいません自己解決しました
[1] 授業単元:プログラムC言語 [2] 問題文(含コード&リンク): ポインタ配列の変数を下記の文字列(”JANUARY”〜”DECEMBER”)で初期化。各文字列、文字列の文字数 文字列の最終文字(一文字)を表示させる。 初期化文字列 January February March April May June July August September October November December 実行結果 : JANUARYは7文字で最終文字はYです。 −−−−−−−−−−−−−−−− DECEMBERは8文字で最終文字はRです。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: (1月15日まで) [5] その他の制限: strlen() ポインタ配列の初期化(static) ポインタのポインタ をつかう 最終文字を表示させるところで詰まっています。よろしくお願いします。
342 :
305 :2006/01/13(金) 14:43:16
∧||∧ ( ⌒ ヽ 寝ぼけてた ∪ ノ 吊って来る ∪∪
len= strlen(str[i]); printf("%c",str[i][len-1]);
>343 なるほど、助かりました。
346 :
デフォルトの名無しさん :2006/01/13(金) 15:18:32
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):構造体を用いて、名前(ローマ字で30文字)、年齢(int)、身長(double)、体重(double) を、別に用意したファイルから取り込み、年齢で昇順にソートする関数と 名前で昇順にソートする関数を作り、その動作を確認するmain関数をつくる。 昇順にソートする方法がわからないので、特にそこを教えていただければありがたいです。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月23日 [5] その他の制限:なし
347 :
デフォルトの名無しさん :2006/01/13(金) 15:36:18
関数に命名するとき 「補間」って単語が辞書に引っかからないんだけど みんななら何使う?
348 :
デフォルトの名無しさん :2006/01/13(金) 15:38:47
[1] 授業単元: 物理プログラミング演習
[2] 問題文(含コード&リンク):
http://www.math.meiji.ac.jp/~mk/labo/java/uzu.html ここにあるプログラムを使って、Nの値を変化させることにより、さまざまなNの値に対して数値的にもとめて
その結果について考察する。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
[3.3] 言語: C
[4] 期限: 1月16日
[5] その他の制限:
351 :
初心者ですみません :2006/01/13(金) 15:53:14
[1] 授業単元:情報処理 [2] 問題文: #include <stdio.h> #define LOW 3 /* 行数 */ #define COLUMN LOW /* 列数 */ int main(){ int i,j,k; double pivot,d; double A[LOW][COLUMN + 1] /* 行列を作成 */ ={{3,2,1,10},{2,5,2,18},{1,4,1,12}} /* A[行][列] */ for (i = 0; i < LOW; i++){ pivot =____A____ ; /* ピボットとして行列Aの対角成分を選ぶ */ for (j = 0; j <= COLUMN; j++){ ____B____; } /* これよりピボット要素の係数は1となる */ for (j = 0; j <= LOW; j++){ /* 第j行について第i列の要素を0とする */ /* j=iのときはピボット対象行なので操作しない */ if(j == i) continue; /* 第j行の第i列要素をdとして保存しておく */ d = ____C____; /* 第j行の各列(k)から、d倍したピボット行の各列要素を引く */ for (k = 0; k <= COLUMN; k++){ ____D____;}}} for (i = 0; i < LOW; i++){ printf ("X%d: %lf\n", i, A[i][3]);} return 0;} 1) 解答がx1=1,X2=2,X3=3となるように適切に書き換えよ。(A)(B)(C)(D)を答えよ 2) 今回のプログラムでは解けない問題が存在する。どのような問題か2つ答えよ。
352 :
デフォルトの名無しさん :2006/01/13(金) 15:56:37
再スレ [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年1月13日まで 心底困り果てています、ホントによろしくお願いします
>>352 それは・・・機能的には不充分だが立派なバイナリエディタじゃないか。
そんな手間のかかるものをしかも一日で書いてクレとは・・・無理がある。
スーパーなPGがこのスレを見ればやってくれる可能性は零ではないけど。
諦めなさい
354 :
デフォルトの名無しさん :2006/01/13(金) 16:22:04
5個の整数データ a[5]={4,2,6,5,1}を 入力し、最大値 MA を求めるプログラムをポインタを用いて 作成してください。
>>351 1)
適切に描き換えるとA,B,C,Dの修正だけでは済まなくなります。が、あえて入れるとしたら、
(A) A[i][i]
(B) A[i][j] /= pivot
(C) A[j][i]
(D) A[j][k] -= d*A[i][k]
ただし他のところも直さねば動きません
2)
Ax = bの連立方程式を解いているので、rank(A) < dim(A)ならば解けません。
桁落ちが発生する計算を含む場合等も正しい解を得られないでしょう。
356 :
348 :2006/01/13(金) 16:25:33
>>350 はい。できれば移植してほしいのですが・・・m(_ _)m言語は指定されてないのでjavaのままでもかまいません。
ただどちらかといえばC言語の方が分かりやすいのでここに投稿しました。
課題内容としては、渦運動を視覚的に表示する機能はいらないのでこのソースを利用して渦運動の様子を数値的に出すようにしたいです。
渦群(N個)の数値を入力してそのときの運動を数値的に出力する課題です。
18時までに提出の課題を5つ出されたのですが2つさっぱり解らなくて 単位がかかっているので、すいませんどなたか助けて下さい。 [1] 授業単元: オブジェクト指向言語 [2] 問題文(含コード&リンク): 問題(1) キーボードから入力したスペースを含む文字列に対して、以下の6つの情報を出力するプログラムを作成せよ。 (a) 全文字数 (b) 小文字の文字数 (c) 大文字の文字数 (d) アルファベット前半(AからM、および、aからm)の文字数 (e) アルファベット後半(NからZ、および、nからz)の文字数 (f) アルファベット以外の文字数 ただし、実行結果は以下と同じになるようにすること Input a string: Hiroshima Institute of Technology The input string is "Hiroshima Institute of Technology". # of letters = 33 # of small letters = 27 # of large letters = 3 # of A-M and a-m = 15 # of N-Z and n-z = 15 # of other letters = 3 [3] 環境 [3.1] OS : Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C言語 [4] 期限:1月13日18時まで
358 :
357 :2006/01/13(金) 16:46:26
[1] 授業単元: オブジェクト指向言語 [2] 問題文(含コード&リンク):問題(2) キーボードから、文字列と一つの文字を入力する。 このとき、 与えた文字が文字列中の左から何番目に位置しているかを表示する。 ただし、文字列中に、指定した文字が二つ以上ある場合は一番左端の 文字の位置を、 また、指定した文字が全くない場合は nothing と表示する。 プログラムの関数の定義部分以外は、以下にあげるものを変更せず そのまま利用すること。 #include <stdio.h> int find_letter( char *str, char ch ); int main(void) { int num; char in[80], ch; printf("Input a string: "); gets( in ); printf("Input a letter: "); scanf("%c", &ch); num = find_letter( in, ch ); if ( num==0 ) { printf(" The letter '%c' of \"%s\" : nothing\n", ch, in); } else { printf(" The letter '%c' of \"%s\" : %d\n", ch, in, num); } return 0; } [3] 環境 [3.1] OS : Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C言語 [4] 期限:1月13日18時まで
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): n人分について国語,社会,数学,理科,英語の5科目の得点を入力し, n人の平均点の平均を計算した後,その平均より低い平均点を出力する プログラムを作成せよ。ただし,各科目の変数名をkok,sya,suu,rik,eigとし, 配列名はtokutenとすること。 [3] 環境 [3.1] OS:(Windows) [3.2] コンパイラ名とバージョン:(C++ ?) [3.3] 言語: (C/C++/どちらでも可) [4] 期限: (2006年1月15日) 上記のような課題が出ました。 素人同然で全く分からないのでよろしくお願いします。
360 :
デフォルトの名無しさん :2006/01/13(金) 17:08:56
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): ファイル名をコマンドラインで指定し、その内容を256バイトずつ1ブロックとして、16進と文字列形式でダンプ出力した上で、その内容を16進コードで更新するプログラムを作る。 ただし表示ブロック位置(先頭を0とする)はキーボードから入力するものとして、負値またはエンターキーのみが入力させるまで続ける。 :実行例: 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); BLNo.->-1 [3] 環境 Windows C言語 [4] 期限:2006年1月13日まで 心底困り果てています、ホントによろしくお願いします 後は自力で考えますんでここまででも教えてください
361 :
デフォルトの名無しさん :2006/01/13(金) 17:16:02
今読みにきた者ですが。C言語のことで質問があります。 囲碁のプログラムを自分で作成しているのですが、 「人間対人間」が対極していたとします。その時、黒石の方が白石より強かったとします。 そこで、白石の方が弱いので、負けの方向にいっています。 そこで、今打っている白石を黒石の方に、黒石を白石の方に 今打っている変換するプログラムを打ちたいのですが、自分でも試してみたのですが なかなか上手いようにはいきません。 C言語での回答、宜しくお願い致します。
>>357 #include <stdio.h>
#include <string.h>
#define LEN 256
int main(){
char c, str[LEN];
int i, small, large, atom, ntoz, other;
small = large = atom = ntoz, other = 0;
printf("Input a string: ");
gets(str);
printf("The input string is \"");
for (i = 0; str[i] != '\0'; i++) {
if (islower(str[i]) != 0) small++;
else if (isupper(str[i]) != 0) large++;
c = tolower(str[i]);
if (('a' <= c) && (c <= 'm')) atom++;
else if (('n' <= c) && (c <= 'z')) ntoz++;
else other++;
printf("%c", str[i]);
}
puts("\".");
printf("# of letters = %d\n", i);
printf("# of small letters = %d\n", small);
printf("# of large letters = %d\n", large);
printf("# of A-M and a-m = %d\n", atom);
printf("# of N-Z and n-z = %d\n", ntoz);
printf("# of other letters = %d\n", other);
return 0;
}
訂正 small = large = atom = ntoz = other = 0;
>>357 (a) strlen()
(b) int count_lower(const char *s) {int count = 0; for (; *s; s++) if (islower(*s)) count++; return count;}
(c) int count_upper(const char *s) {int count = 0; for (; *s; s++) if (isuppler(*s)) count++; return count;}
(d), (e)
int count_sub(const char *s, int a, int b) {int count = 0; for (; *s; s++) if (*s >= a && *s <= b) count++; return count;}
int count_a_m(const char *s) {return count_sub(s, 'a', 'm') + count_sub(s, 'A', 'M'); }
int count_n_z(const char *s) {return count_sub(s, 'n', 'z') + count_sub(s, 'N', 'Z'); }
int count_a_m(const char *s) {return strlen(s) - count_lower(s) - count_upper(s); }
>>360 その内容を16進コードで更新するプログラムを作る。
というところの詳細がわからんので、パス。 表示だけなら、簡単。
>360は、何日か経ったらまた来る気じゃないか? 「自力で考えましたができませんでした」とかいって。
>>361 次に、スレ違いであることを理解し、二度と来ないようにして下さい
368 :
357 :2006/01/13(金) 17:38:55
370 :
デフォルトの名無しさん :2006/01/13(金) 17:45:27
>>355 Ax = bの連立方程式を解いているので、rank(A) < dim(A)ならば解けません。
桁落ちが発生する計算を含む場合等も正しい解を得られないでしょう。
詳しくお願いします
rankはよくわからんが、 x + y + z = 1 かつ x + y + z = 0なんてのは解けん気がするぞ。
372 :
デフォルトの名無しさん :2006/01/13(金) 18:40:46
[1] 授業単元:基礎プログラミング演習 [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録し、 新しく入力された点数以上の氏名を出力するプログラムを書け。 (必ず、print_student(struct student s)と言う学生一人分の情報を 1行に表示する関数を作成し、それを利用して出力を行うこと。) <構造体の例> struct student{ char name[50], id[20]; int score; }; [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月23日まで ヒントでもいいので,何とぞお手柔らかにお願いします
#include <stdio.h> int input(FILE *s, struct student *s, int n) { int i; for (i = 0; i < n && fscanf("%s %s %d", &s->name, &s->id, &s->score) == 3; i++, s++) ; return i; } void print_student(struct student s) { printf("%s %s %d\n", s.name,, s.id, s.score); } int main(void) { struct student s[5]; input(stdin, s, sizeof(s)/sizeof(s[0])); あーメンドウになった。あとよろしく。
>>370 俺もよく分かってないが、解の存在定理じゃねーのか?
連立一次方程式が解を持つ必要十分条件は
rank[A] = rank[A b]
つーかこれ以上は板違いだろ
線形代数なんだし、数学板池
375 :
117 :2006/01/13(金) 19:24:22
>>344 ありがとうございます!とても助かります。
オブジェクト指向言語という単元で、Cを使うのか・・・ 結構意味不明だな。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):石置き対戦ゲームを作りなさい。 このゲームとは、マス目の上に、交互に石(○か×)を置いていき、 縦横斜めのいずれかに自分の石が並んだほうが勝つというゲームである。 ただし、すでに石が置いてある所には石は置けない。 (1)3×3マス([1]〜[3],[A]〜[C])で、先手、後手が選択でき、 既に石の置いてあるところを選択すると、(指定位置には石は置けません) と表示しなさい。 (順番が回ってくるごとに[位置を指定してください。(先手) 1A のように表示する。入力方法は[1A]や、[3C]といった方法にする。) 勝ち負けの表示は自由とする。 (2)以下の追加機能を追加しなさい。 [1] : マス目を指定できるようにする(n×n)。(n個並べたら勝ち。) [2] : コンピュータ対戦ができるようにする。(空き目をランダム検索する) [3] : コンピュータ対戦ができるようにする。(勝てるアルゴリズム作成) [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 2006年1月24日12:00まで [5] その他の制限: 条件:特にありません。よろしくお願いします。
378 :
デフォルトの名無しさん :2006/01/13(金) 21:29:25
>>377 そんな簡単なの授業の内容理解してれば分かるだろ。
だいたい「勝てるアルゴリズム作成」が無理
勝てるアルゴ作成は無理じゃないぞ 人間側を邪魔しなけりゃいいだけだし
3x3の場合はある
先手勝ちの可能性・後手負けない手しかないが。 パターン総当りになるんで面白くないかも。
382 :
381 :2006/01/13(金) 22:01:03
>>381 3×3限定な。
先手角に置く。後手中心以外で必敗
何故この人は自己レスしてるんだろう・・・
変な人警報
>>372 #include <stdio.h>
#define STUDENT_NUM 5
struct student {
char name[50], id[20];
int score;
};
void print_student(struct student s);
void print_passedStudent(struct student s[], int student_num, int pass_score);
int main() {
int pass_score;
struct student student[STUDENT_NUM] = {{"Tanaka", "A01", 70 },{"Kato", "A02", 40 },{"Sato", "A03", 90 },{"Ito", "A04", 100 },{"Yamada", "A05", 80 },};
printf("点数を入力してください: ");
scanf("%d", &pass_score);
print_passedStudent(student, STUDENT_NUM, pass_score);
return 0;
}
void print_student(struct student s) {
printf("氏名:%s\t学籍番号:%s\t点数:%d\n", s.name, s.id, s.score);
}
void print_passedStudent(struct student s[], int student_num, int pass_score) {
int i;
for (i = 0; i < student_num; ++i) {
if (s[i].score >= pass_score) {
print_student(s[i]);
}
}
}
コンピュータの思考ルーチン作れって話ではないのかな? 漏れも興味ある。 スーパーハカーさんお願いします
1.先攻なら必ず真ん中におく 2.自分がリーチになったら揃えにいく 3.相手が 〃 邪魔をする 4.斜めを優先的に埋めていく これぐらいで結構強くなるんじゃない? 判定順は番号の通りで
>248=>360 一部適当だが作ったぞ。 ろだが規制中で投稿できないからどこかいいとこ教えれ。
>>378-385 ,387-389
「勝てるアルゴリズム」ってのは多分「勝てるように考えたアルゴリズム」
ってことだとおもわれる。
つまりユーザに勝たせるアルゴってこと?
んー。n x nかー・・・。 ちと暇つぶしでつくってみるか。工夫しないやつを。
n×nって、リーチやビンゴの判定ややこしそう・・・
じゃ俺も参戦♪ 12時までにできなかったら宿題始めるからやめる
396 :
359 :2006/01/13(金) 23:43:50
自分でも考えてるんですがサッパリ分かりません。 どなたかお願いしますm(__)m
>>396 C++で答えて「Cでした」とかだと腹が立つから一応聞いておく。
出力に使うのはcoutと習った?それともprintfと習った?
398 :
395 :2006/01/13(金) 23:48:14
画面の消去でバグってムカついたからやめたヘ(゚∀゚ヘ)アヒャ 後はまかせた
>>397 System.out.println()と習いました><
402 :
デフォルトの名無しさん :2006/01/14(土) 00:02:49
[1] 基礎プログラミング [2] 二つのファイルを比べ、違っている最初の行を表示する。 [5] ファイル入出力を用いる お願いしますm(_ _)m
テンプレに従う気があるのかないのか、はっきりして欲しいものである。
>>396 #include<stdio.h>
#include<stdlib.h>
int main(void){
int kok,sya,suu,rik,eig,n,i;
float *tokuten,heikin=0.0;
printf("何人分のデータ?:");
scanf("%d",&n);
tokuten = calloc(n,sizeof(float));
for(i=0;i<n;i++){
printf("%d人目のデータ入力\n",i+1);
printf("国語の点数:");scanf("%d",&kok);
printf("社会の点数:");scanf("%d",&sya);
printf("数学の点数:");scanf("%d",&suu);
printf("理科の点数:");scanf("%d",&rik);
printf("英語の点数:");scanf("%d",&eig);
tokuten[i] = (kok+sya+suu+rik+eig)/5.0;
}
for(i=0;i<n;i++)
heikin += tokuten[i];
heikin /= n;
printf("全体の平均点は%f\n以下平均未満の点数\n",heikin);
for(i=0;i<n;i++){
if(tokuten[i]<heikin)
printf("%d人目%f\n",i+1,tokuten[i]);
}
return 0;
}
問題の意味取り違えてたとしても知らない
406 :
359 :2006/01/14(土) 00:34:04
>>397 printfと習いました。
よく理解してなくて申し訳ありません。
>>404 ありがとうございます!
本当に助かります。
407 :
215/// :2006/01/14(土) 00:40:10
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): n人分について国語,社会,数学,理科,英語 の5科目の得点を入力し, それぞれの合計点を計算した後,n人を合計点の小さい順に並び替え, 出力するプログラムを作成せよ。ただし,各科目の変数名を ko,sy,su,ri,eiとし,配列名はtokutenとすること [3] 環境 [3.1] OS: (Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C++ [4] 期限: 2006年1月14日24h [5] その他の制限:、 できません
409 :
390 :2006/01/14(土) 00:46:01
>402 foo.txt、bar.txt決めうちにした。 #include<iostream> #include<fstream> #include<string> #include<iterator> #include<algorithm> #define FILE1 "foo.txt" #define FILE2 "bar.txt" using namespace std; template<typename T1, typename T2> void print( const pair<T1,T2> &t ) { cout << *(t.first) << "," << *(t.second); } int main() { ifstream is1(FILE1), is2(FILE2); print( mismatch( istream_iterator<string>(is1), istream_iterator<string>(), istream_iterator<string>(is2))); }
[1] 授業単元: アルゴリズム演習B [2] 問題文(含コード&リンク): int t(int x, int y, int z) { if (x > y) return t(t((x-1),y,z),t((y-1),z,x),t((z-1),x,y)); return y; } という関数tがある。tと等価な関数で高速なものを実装せよ。 目安としてはt(2006,1003,0)がtimeコマンドで10s以内 [3] 環境 [3.1] OS: 問わない [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1/15(日)の23:59まで おねがいします。
>>412 数学の問題得意じゃないけど
int t( int x, int y, int z )
{
if ( x <= y ) return y;
if ( y <= z ) return z;
return x;
}
でいいんじゃないか?
元の関数と違う結果を返す x, y, z の組み合わせ例を見つけたら
教えて。
>>411 ノシ
とりあえず枠だけ作るのに2時間かかりました
やりかけ。<○× ・・・まあ、なんだ・・・あとは明日以降。
417 :
413 :2006/01/14(土) 01:47:51
てゆか元のアルゴリズムで t(2006,1003,0) はいくつになるの? 再帰複雑すぎて脳内実行できないし、元のアルゴリズム遅すぎて結果でるまで待てないし、 検証の仕様がないんだけど。
じゃあ俺も○×作ってみるか
419 :
405 :2006/01/14(土) 01:52:05
420 :
405 :2006/01/14(土) 02:13:57
そろそろ宿題スレのレベルじゃなくなってくるなぁ。 とりあえず今の考えでは 1.自分が置いて「勝ち」なら、その手を選ぶ リーチ目の行・列があれば、ってこと 2.相手にリーチ目があれば全力で阻止 3.ライン(1列)上に相手の石が無く、なおかつ 自分の石が一番多いラインをカウント ライン上に相手の石があれば、そのラインを 揃えて勝つことはできない 4.3.のラインの自石が置ける場所にクロスするラインで 3.の判定を行い、最善を選ぶ 5.3.を満たす列がまったく無い場合、勝つことができない。 逆に相手に揃えさせない手を選ぶ。 6.5.を満たす列が無くなった場合、すなわちどこの 空きマスを見ても縦横に○×両方入っている場合は 実質引き分けとなる。空いてるマスにランダムで。 これからの方針はこんな感じ。では寝ます ノシ ちなみに4.の判定をすると、ダブルリーチの目を 自ら潰すように動くと思われ。
[1]授業単元というか、項目: プロセス間通信 [2]問題文: 既定のディレクトリにあるファイルをオープンし、ファイルの中身を読む。 ファイルは一日単位で自動的に生成され、名前は 2005_12_31.txtのようなフォーマットになっていて、開く対象のファイルはコマンドラインの オプションで指定する。(./exefilename prm1 prm2) 例えば、prm1が2005_12_20,prm2が2006_01_10であれば、2005年12月20日から 2006年1月10日までのファイルを順番にオープンする。 ファイルの中身は一行が最大200Byteのテキストで、全て5行で構成されるログのようなもので、 1つのレコードの最後、つまり5行目の終端に、DBGPRT=ONかDBGPRT=OFFという文字列が 付加されている。 ファイルリードは1つの関数として実行し、開くファイルの数だけその関数を実行する事とする。 ファイルリード関数の先頭で子プロセスを生成しておく。 関数内で1つのレコード(MAX200Byte*5)を読み込み、5行目の最後がDBGPRT=ONだった場合、 標準出力に吐き出させる。ただし、吐き出しは子プロセスで行う事。 子プロセスとのプロセス間通信には共有メモリを用い、また、ダブルフォークは禁止とする。 子プロセスの埋葬は必ず行う事。 尚、ソースコードはC言語で記述し、文字列はchar型の配列で扱う事。 上記以外の制約は無し。 [3]環境 OS:Linux コムパイラ:GCC 言語:C [4]期限 お勉強なので特になし。 どう取り組んだら良いのかさっぱりです。 取り合えず方針だけでも教えて頂ければ幸いです。それ以前に、プロセス間通信は分かりますが共有メモリを使っての プロセス間通信はどうやってやるとですか??
423 :
デフォルトの名無しさん :2006/01/14(土) 02:22:42
相変わらず人気だねこのスレ
424 :
デフォルトの名無しさん :2006/01/14(土) 02:23:18
[1] 授業単元:プログラミング論 [2] 問題文(含コード&リンク): 【1】1+2+3+...+100を計算するプログラムを作成してくださいfor文を使用してください。 #include<stdio.h> void main(void) { int gokei,i; 【2】【1】のプログラムをwhile文を用いて書き直してください。 【3】整数iの自乗が1000以上で、もっとも100に近い値となるiとiの自乗を算出するプログラムを作成してください。 #include<stdio.h> void main(void) { int i; 【4】18の倍数で、300以下の最大の整数を求めるプログラムを作成してください。 #include<stdio.h> void main(void) { int i; [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc32 Ver.5.5.1.2 [3.3] 言語:C [4] 期限:2006/1/15 [5] その他の制限:あまり詳しいことは分からないのですが、 出来るだけ初歩的なコードで書いてください。 すいません。 結構、量があるとは思いますが、どうぞよろしくお願い致します。
【3】の意味を理解できるやついるのか?
【1】 gokei = 0; for(i =1;i<=100;++i){ gokei += i; } 【2】 gokei = 0; i = 1; while(i <= 100){ gokei += i; ++i; } 【4】 i = 300 - (300 % 18); >427 10000の間違いなんじゃない?
#include<stdio> main(void){ int n1 = 1; for(;n1 * n1 > 1000;n1++) ん?? LOOPしねぇぞオイ
いや待て、こうだ。 int n1 = 200; int n2 = 0; while(1) { n2 = n1 * n1; if(n2 < 1000) break; n1--; }
1. #include<stdio.h> void main(void){int gokei,i;gokei=0;for(i=1;i<=100;i++)gokei+=i;printf("%d\n",gokei);} 2. #include<stdio.h> void main(void){int i=0,gokei=0;while(i<100)gokei+=++i;printf("%d\n",gokei);} 3. #include<stdio.h> void main(void){int i=0;while(i*i<1000)i++;i--;printf("i=%d, i^2=%d\n",i,i*i);} 4. #include<stdio.h> void main(void){int i;i=300-(300%18);printf("%d\n",i);}
432 :
431 :2006/01/14(土) 02:52:27
3.間違い。忘れてくれ。 問題読めば読むほどワカラン
>>421 おマイの頭にSIGKILL
SIGSEGVしてるぞ
434 :
デフォルトの名無しさん :2006/01/14(土) 03:00:55
二乗1000以上で最も100に近いんだがら答え100じゃねーの? #include<stdio.h> void main(void){puts("100");return 0;}
437 :
434 :2006/01/14(土) 03:03:41
メインループの if(search_reach(&x, &y, current)) printf("<%c%c>\n",x+'1', y+'A'); はテストコードなんで無視してちょ。
438 :
デフォルトの名無しさん :2006/01/14(土) 03:05:30
あえて誰もつっこまなかった事を。 やるな>435 i=0; while(1){ if(1000 <= (100-i)^2){ i = 100-i; break; } if(1000 <= (100+i)^2){ i = 100+i; break; } ++i; } printf("%d %d\n",i,i^2);
^ 演算子の使い方が斬新だと思いました。
442 :
426 :2006/01/14(土) 03:58:11
皆さん、本当に申し訳ありません。 【3】の問題は 整数iの自乗が1000以上で、もっとも「1000」 です。 こんな下らないミスで混乱させてしまい、申し訳ありません。 それでも、真剣に考えてくださって本当にありがとうございます。 これで、単位どうにかなりそうです。
てゆか、その問題前に答えたんだけど。 別の人?
実は俺ヘッダーで^のオーバーライドをしてたんだよ!
オーバーロードだった ハズカシス
446 :
438 :2006/01/14(土) 04:07:29
あい、いのちのあい。ちのいろはだいちにすてて。 >441 あー、何考えてんだ、漏れ。 >444-445 もう寝れ。漏れも寝る。
>>443 私が質問するのは今回が初めてなので、
同じ授業を取っていた人が質問したと思います。
基礎中の基礎であって聞くレベルのものでないと思うんだがなあ。
でも、このスレの人って基礎的なものしか答えてくれないよなぁ めんどくさいってのもあるけど
>>442 (゚Д゚)ノ ァィ
#include<stdio.h>
void main(void){
int i;
for(i=1;i*i<1000;i++);
printf("%d %d\n",i,i*i);
}
>>442 >整数iの自乗が1000以上で、もっとも「1000」
日本語勉強し直せよ
整数iの自乗が1000以上で、もっとも「1000」に近い「i」なら1000だろ
i == 32 を期待してるなら、
整数iの自乗が1000以上で、もっとも小さい「i」
何故死なねばならん とりあえず通報しといた
ところで、総当り方式のマルバツプログラムは組んだんだが、3x3までは動く。 4x4はダメダ... 3x3の組合せ(9!)362880 4x4の組合せ(16!)20922789888000 ...いや、6x6のオセロが解けるってきいてたもんで、4x4ならラクに行けるんじゃないかと... 先に計算量を予想しとかんといかんですな...
そんな真面目にやらんでも・・・逆に提出できなくなるかもw
プログラムの課題を提出するときって大抵、プログラムの説明を書き添える必要があるけど ここでソースコード書いてもらっても理解出来なきゃ自分が困るだけだな。
mallocやらcallocやら使ってる人いるけど 実際問題そんなの出して問題ないのかな?
そんなん出してって C99以前では int num; scanf("%d",&num); int hoge[num]; というのは駄目ですからー 遅かれ早かれ動的メモリ確保は履修するべき、しないならうんこ
>プログラムの説明を書き添える必要があるけど それは教官が馬鹿な場合だけだ
>>459 馬鹿じゃなくて理解できているかどうか確認するために書かせる
>>459 自分で理解して組み上げたものか、ここで丸投げしたものかの判断で
ソース内か別pdfなどで説明を要求してくる先生もいる。
そんな恐ろしい教師いるのか 俺はそんなことなかったな
そういう意味では独自のライブラリをかませて 余所(このスレの回答者とか)で動作確認できなくすることで 丸投げ対策してるのではないかとも思いたくなる。
まぁそれが本人の為だし それが恐ろしいとか、うざいとか言うなら 大学なんて辞めてアルバイトでもした方がいいよ 生半可な知識で現場に出てこられても使えないだけだし
何怒ってるんだコイツ? たかが大学の授業なのに
どこが怒ってるの?
「大学で何やってきたんだ?」って恥はかきたくないがな
>>463 えっ、それが普通じゃないの?
てか、そうじゃないと本当の意味で理解してるのか分からない。
友達のソースを改変して、できましたって持ってくこともできるし。
大学の教授はどうしてもわからないなら友達の写してもネットにあるのを真似してもいい だけど、コピーペーストだけはするな まんまでいいから自分で打ち込めとか言ってた
>>449 プログラムは組みたいけど、数学の勉強はいまさらしたくない。
漸化式とか、ぐぐってもサパーリ理解不能。
本末転倒だとは思うんだけど、ね。
めんどうな計算はコンピーターにやらせよう。
「3桁×3桁は電卓で。」の、ゆとり教育。
>>417 あたかも自分で書いたように見せかけて提出すると犯罪だけど
覚えるだけならそれでもいいかもね。
474 :
377 :2006/01/14(土) 09:05:38
>>391-392 コンピュータ側を強くするという意味だそうです。
>>405 さん 有難うございます。俺も頑張ってみますが、まだプログラムを
考えてくださってる方もいるようなので、よろしくお願いします。
てゆーかこれなんか授業の宿題レベルじゃないような・・・・
>>472 おまえ漸化式も知らないでプログラマやってんの?w
>>474-475 ここで書かれたコンピュータ側プログラムでどれが一番強いか競わせたいね。
だれかネットワーク対戦用に共通の土俵を作ってくれ。
リバーシの最強アルゴリズムとか一人でやってくださいって感じなんだが
479 :
472 :2006/01/14(土) 09:46:19
>>476 正直、行列とかわからん。3D興味ないし。
ベクトル内積ぐらいならなんとか。
作りたいものが10年前のレベルだからいいじゃん。
日曜プログラマだし。(元プロ)
元プロって、コボラーかなにかですか?
481 :
デフォルトの名無しさん :2006/01/14(土) 10:01:12
[1] 授業単元:基礎プログラミング演習 [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録し、 新しく入力された点数以上の氏名を出力するプログラムを書け。 (必ず、print_student(struct student s)と言う学生一人分の情報を 1行に表示する関数を作成し、それを利用して出力を行うこと。) < 構造体の例 > struct student{ char name[50], id[20]; int score; }; < 実行例 > Name? Tanaka (fgets と sscanf によって5人分のデータを入力する) ID? 103 Score? 80 (途中省略) Passing score? 70 102 Suzuki 90 103 Tanaka 80 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月17日まで 何とぞお手柔らかにお願いします
482 :
479 :2006/01/14(土) 10:03:12
>>480 Cだけど、表示まわりは社内ライブラリが充実してたし
(支店の人間がさわることは許されなかった)、
ほとんどSQLだけ。
業務アプリなんて、VB+データベースの知識だけで十分。
こんなんで全国1,000店舗の販売管理できるんだもんな。
483 :
デフォルトの名無しさん :2006/01/14(土) 10:07:08
484 :
デフォルトの名無しさん :2006/01/14(土) 12:29:07
>>482 × データベースの知識
○ データベースの使い方
[1] 授業単元:プログラミングU [2] 問題文: 二分探索木における挿入、削除、検索のアルゴリズムを簡潔に説明し、そのプログラムを作成せよ。 ただし、挿入、削除、検索はそれぞれ再帰を用いた関数でプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:1/26まで [5] その他の制限:特に無し よろしくお願いします。
よく見たら再帰かよ BinarySearchで再帰なんて使うメリット無いだろ
業務アプリ(しか出来ない)プログラマって差別されがち
ソートや2分木なんかはループ書くより再帰で書いたほうが解り易いんだが
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):数字パズル。パズル完成時にクリアメッセージ「おめでとう!」等が表示されるようにせよ。(配列の初期配置と現在値の合同判定をする関数を組んで下さい)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1462.txt [3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C
[4] 期限: [2006年01月16日24:00まで]
[5] その他の制限: 特にありませんが、お願いする関数はint moveのswitch(S)下、caseのbreak;直前毎に組み込んでくださると見易くて助かります。
それと私自身の力不足の為、グローバル変数が混じっていますが多めに見て下さい…それでは宜しくお願い致します。
何の説明もなしにそんな長いソース読む気失せる
ぱっと見ただけだけど いわゆる15パズルっぽいな
493 :
490 :2006/01/14(土) 15:01:06
うああ、確かに長いソースですね… プログラムとして動くようにはなっているので、bcc32でコンパイルすればどんな状態なのか一発でわかるのですが… 実際参考にする必要性のある箇所は少ないはずです…多分グローバル関数のnumと配列担当のint table位だと思います。 他の関数は数字混ぜたり書いたりしてるだけなので…
>>490 masu 定義直後に int masu0[11][11];int started = 0;
tableinit() 呼出直後に copy();
start() 呼出直後に started = 1;
指定位置に judge();
void copy(){int x, y;for(x=1;x<=num;++x) for(y=1;y<=num;++y) masu0[x][y]=masu[x][y];}
void judge(){int x, y;if(!started) return;for(x=1;x<=num;++x) for(y=1;y<=num;++y) if(masu0[x][y]!=masu[x][y]) return;printf("おめでとう!\n");}
>>460 最近はできる
昔はできなかった
VC++6.0なんかだとできない
496 :
212 :2006/01/14(土) 16:34:33
何度もすみません、212です。 ややこしい問題ですがどうかよろしくお願いします。 符号付2進展開のプログラムについてです。 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。 またrを符号付2進展開にした場合のプログラムも作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C言語 [4] 期限:2006年1月15日 [5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。 問題文分かりにくいですが以下のようなことです。 (符号付じゃない場合) 3 = 0 1 1・・・・・・5の指数部 6 = 1 1 0・・・・・・2の指数部 ーーーーーーーーーー 上のように指数部を2進展開して上位ビットから見ていきます。 1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。 このような仕様です。よろしくお願いします。
499 :
デフォルトの名無しさん :2006/01/14(土) 17:33:42
[1] 授業単元:プログラム [2] 問題文 台形の面積を計算する関数を作成せよ.ただし上底,下底,高さは main関数内で取り込み,これら3変数を関数の引数として与えるものとする. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:明日まで [5] その他の制限:初心者でもわかりやすい感じ…; よろしくお願いします。
>>499 ・関数内で表示するのか、値を返すのか
・引数および面積の値は実数か整数か
計算する関数を作成せよ 値は実数
502 :
デフォルトの名無しさん :2006/01/14(土) 17:55:23
ええと… 「値を返す」「実数」でお願いします!
とりあえず台形の面積の計算方法を教えれ
505 :
デフォルトの名無しさん :2006/01/14(土) 17:57:24
(上底+下底)×高さ÷2だと思います。
>>505 マジレスワロスw
>>499 double (double top,double bot,double h)
{
return (top+bot)*h/2.0;
}
507 :
デフォルトの名無しさん :2006/01/14(土) 18:04:11
ワロスってなんですか?? 506番さんのを詳しく教えてほしいのですが…
(top+bot)*h このタイミングで桁あふれしないか? (h/2.0)*(top+bot) とするとか...
(top+bot)/2.0*h
510 :
506 :2006/01/14(土) 18:11:20
>>508 ごめん
計算順序考えなかった上に関数名つけてなかった・・・吊ってくるノシ
>>508 >(h/2.0)*(top+bot)
このタイミングで桁落ちしないか?
ややこしい問題ですがどうかよろしくお願いします。 符号付2進展開のプログラムについてです。 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。 またrを符号付2進展開にした場合のプログラムも作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C言語 [4] 期限:2006年1月15日 [5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。 問題文分かりにくいですが以下のようなことです。 (符号付じゃない場合) 3 = 0 1 1・・・・・・5の指数部 6 = 1 1 0・・・・・・2の指数部 ーーーーーーーーーー 上のように指数部を2進展開して上位ビットから見ていきます。 1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。 このような仕様です。よろしくお願いします。
ややこしい問題ですがどうかよろしくお願いします。 符号付2進展開のプログラムについてです。 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。 またrを符号付2進展開にした場合のプログラムも作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C言語 [4] 期限:2006年1月15日 [5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。 問題文分かりにくいですが以下のようなことです。 (符号付じゃない場合) 3 = 0 1 1・・・・・・5の指数部 6 = 1 1 0・・・・・・2の指数部 ーーーーーーーーーー 上のように指数部を2進展開して上位ビットから見ていきます。 1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。 このような仕様です。よろしくお願いします。
514 :
デフォルトの名無しさん :2006/01/14(土) 18:13:53
C#の質問もOKですか???
ややこしい問題ですがどうかよろしくお願いします。 符号付2進展開のプログラムについてです。 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。 またrを符号付2進展開にした場合のプログラムも作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C言語 [4] 期限:2006年1月15日 [5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。 問題文分かりにくいですが以下のようなことです。 (符号付じゃない場合) 3 = 0 1 1・・・・・・5の指数部 6 = 1 1 0・・・・・・2の指数部 ーーーーーーーーーー 上のように指数部を2進展開して上位ビットから見ていきます。 1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。 このような仕様です。よろしくお願いします。
ややこしい問題ですがどうかよろしくお願いします。 符号付2進展開のプログラムについてです。 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。 またrを符号付2進展開にした場合のプログラムも作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C言語 [4] 期限:2006年1月15日 [5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。 問題文分かりにくいですが以下のようなことです。 (符号付じゃない場合) 3 = 0 1 1・・・・・・5の指数部 6 = 1 1 0・・・・・・2の指数部 ーーーーーーーーーー 上のように指数部を2進展開して上位ビットから見ていきます。 1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。 このような仕様です。よろしくお願いします。
ある意味マルチ
ややこしい問題ですがどうかよろしくお願いします。 符号付2進展開のプログラムについてです。 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。 またrを符号付2進展開にした場合のプログラムも作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C言語 [4] 期限:2006年1月15日 [5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。 問題文分かりにくいですが以下のようなことです。 (符号付じゃない場合) 3 = 0 1 1・・・・・・5の指数部 6 = 1 1 0・・・・・・2の指数部 ーーーーーーーーーー 上のように指数部を2進展開して上位ビットから見ていきます。 1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。 このような仕様です。よろしくお願いします。
はやく教えろやカス
521 :
520 :2006/01/14(土) 19:02:16
/* 負け目=-900 */ ←このコメントは嘘
>>496 ,512,513,515,516,518
一応聞いておくけど
(1)5^3=5*5*5ですか?
ふつうCだと「^」は排他的論理和で使わているので(5^3=6)。
(2)(5^3)*(2^6)の「*」の部分はどう計算するのですか?
ふつうに「*」を使って計算するのか、2つを2進化して
和とビットシフトで計算するのですか?また、5と3を
連動して累乗?を計算するのか、独立して累乗を計算するのか?
(3)途中で「rを符号付2進展開にした場合」とありますが
a,rはどの型で定義しますか?(int ,unsigned int,double)
それによって、計算結果が無意味になる場合もあります。
523 :
490 :2006/01/14(土) 19:37:15
わわ、もう答え返って来てる…
素晴らしいスレッドですね。出来る限り自力で解けるように精進しようと思います。
>>494 さん有難う御座いましたー。
525 :
212 :2006/01/14(土) 19:52:26
>>522 さん
返答ありがとうございます。
(1)5^3は5×5×5です。
(2)ビットシフトのほうでお願いします。
(3)a,rとも巨大な数にも対応できるように一応多倍長で定義しています。
色々説明が抜けていてすみません。
ちなみに212と496以外は自分ではありません。
今度はトリップのつけ方覚えてきます。
> (3)a,rとも巨大な数にも対応できるように一応多倍長で定義しています。 定義がよくわからん。自前の浮動小数点数だとは思うが、それだったら、定義が必要。 とりあえず、講義で足し算とか掛け算くらはいは出てるだろうから、それをUP。 > OX作ってる人。 いや・・・がんばってるな。乙。 この手のゲームの場合、思考ルーチンは手だけを返すというのもアリ。 ゲーム状態を保持するなら、手番も構造体に入れるといいかも?
528 :
212 ◆mL2ZRk1cK. :2006/01/14(土) 21:29:43
>>526 さん
すみません、多倍長のヘッダファイルは先生が作ってくれた物を
そのまま使っているので定義のところがわかりません。
わかり次第UPします!
>>527 さん
ありがとうございます!
さっそく試してみます。
多倍長に関しては上に書いたようにまだよく
分かってない部分があるので
わかり次第書き込みます。
協力していただいて本当にありがとうございます!
[1] 授業単元:プログラミング基礎 [2] 問題文:以下の通りです [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年1月23日まで 丸投げで申し訳ありません><問題文の意味さえ理解出来ていない ド素人ですが、どなたかお願い出来ませんでしょうかm(_._)m ------------------------------------------------------------- 問1 次の関数を作成しなさい。 a. 数値の入った配列を引数として受け取り、その整数部(小数点以下切り捨て) の合計を計して返す関数。データの終わりは 0.0になっている。 その最初の行は,int intsum(list)とする。 例:intsum([-19.5,30.8,-60.93,25.21,0.0]) → -24 b. 文字列を引数として受け取って、その中の数字の個数を数えて返す関数。そ の最初の行は,int digitnumber(list)とする。 例:digitnumber("EXPO 2005 will begin on March 25.") → 6
532 :
531 :2006/01/14(土) 22:22:24
問2 次のプログラムを実行したときの結果を記しなさい。 #include <stdio.h> int main(void) { int natural[10]; int i=1,j,k; int sum=0; for (j=0;j<=9;j++) { natural[j]=i; i++; } for (k=0; k<=9; k++) { sum+=natural[k]; } printf("%d\n",sum); }
>>532 結果だけなら55
やってることは、配列natural[10]に1〜10まで数を入れて
配列naturalに収められている数を順番にsumに足していってる
>>531 int intsum(list)
double list[];
{
int sum = 0;
while(*list!=0.0){
sum+=(int)*list;
++list;
}
return sum;
}
int digitnumber(list)
char* list;
{
int count = 0;
while(*list!='\0'){
if('0'<=*list&&*list<='9') ++count;
++list;
}
return count;
}
535 :
デフォルトの名無しさん :2006/01/14(土) 22:39:04
[1] 授業単元: アルゴリズム演習B [2] 問題文(含コード&リンク): 1G(=ゴールド), 5G, 15G, 32Gの4種類のみの硬貨が存在する国を考える。 ある金額n(0 <= n <= 100000000)Gを払うのに必要な硬貨の最小枚数を求めるプログラムpayを作成しなさい 実行例 $ ./pay 33 2 $ ./pay 9 4 $ ./pay 100000000 3125000 [3] 環境 [3.1] OS: 問わず [3.2] コンパイラ: gcc [3.3] 言語: C/C++ [4] 期限: 2006 1/16 17:00まで よろしくおねがいします。
536 :
デフォルトの名無しさん :2006/01/14(土) 22:40:43
>>524 さん
有難うございます。
ここで聞いてみます!
>>535 pay 9 って 5 じゃね?
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]){
int coins[] = {32,15,5,1,0};
int money = atoi(argv[1]);
int count = 0, *coin=coins;
while(money&&*coin){
if(money<*coin) ++coin;
else {money-=*coin; ++count;}
}
if(money) printf("Unpayable.\n");
else printf("%d", count);
}
540 :
537 :2006/01/14(土) 22:54:36
逝ってきま
やっと
>>539 がわかった俺ガイル
誤(PG):45=32+5+5+1+1+1
正 :45=15+15+15
で、どうやって実装するの?
スーパーハカー期待wktk
543 :
531 :2006/01/14(土) 23:29:14
解答いただけた方々ありがとうございましたm(_._)m
糞ロジックできたよー #include <stdlib.h> #include <stdio.h> int main(int argc, char* argv[]) { int money[]={32,15,5,1,1},pay1=atoi(argv[1]),pay2=pay1; int num1=0,num2=0,i; for(i=0;i<4;i++){ num1+=pay1/money[i]; pay1%=money[i]; } for(i=1;i<4;i++){ num2+=pay2/money[i]; pay2%=money[i]; } if(num1<num2) printf("%d\n",num1); else printf("%d\n",num2); return 0; }
77=32+15+15+15 で4枚 泥沼です
関係ないけど「解答いただけた方々」というのは敬語としては間違ってます。 正しくは「(御)解答くださった方々」。
[1]授業単元:プログラミング [2]問題文(含コード&リンク):任意の文字列の左右を逆転させる(EX:Program⇒margorP)プログラムをスタック(LIFO)のデータ構造を用いて作成せよ。 [3]環境 [3.1]OS:windows [3.2]コンパイラ名とバージョン:VC [3.3]言語:C [4]期限:1月16日 [5]その他の制限:なし よろしくお願いします
>>535 -
浅学なもんですまないが
1,5,15,32の4つの整数を考えた場合
15は5の3倍だし、5は1の5倍
これから15は (1の5倍 && 5の3倍) だから15は1*15と確かめられる
1*(n*5) → 5*n && 5*(n*3) → 15*n = 1*(n*15) → 15*n
しかし32は5の倍数ではないのでここで不都合が起きる
もしある金額が5の倍数である場合32のコイン計算は除いたほうがいいだろう。(※1)
しかし32と15の公倍数の場合(例えば480 = 最小公倍数)、※1により32のコイン計算を除外した場合
480の最小コインの枚数は32Gの15枚であるはずが、15Gの32枚と返されてしまう。
であるから、32と15の公倍数である場合は※1の例外処理はまずいだろう。
(証明は出来ないですがorz)
長くなりましたプログラムにすると次になりました
>>547 #include<stdio.h>
#include<stdlib.h>
typedef struct stack_impl_tag {struct stack_impl_tag *prev; char data;} StackImpl;
typedef struct stack_tag {StackImpl* ptr;} Stack;
int StackPush(Stack *s, char x) {
StackImpl *temp;
if (s->ptr) {
if (!(temp = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
temp->prev = s->ptr; s->ptr = temp;
} else {
if (!(s->ptr = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
s->ptr->prev = NULL;
}
s->ptr->data = x;
return 1;
}
int StackPop(Stack *s, char *x) {
StackImpl *temp;
if (!s->ptr) return 0;
*x = s->ptr->data; temp = s->ptr->prev; free(s->ptr);
if (temp) s->ptr = temp; else s->ptr = NULL;
return 1;
}
void StackInit(Stack *s) {s->ptr = NULL;}
void StackFree(Stack *s) {char temp; while (StackPop(s, &temp)) {}}
int main(void) {
Stack s; int i; char c; StackInit(&s);
while ((i = getchar()) != EOF && i != '\n') StackPush(&s, (char)i);
while (StackPop(&s, &c)) putchar(c);
StackFree(&s); return 0;
}
int main() { int c1=0,c5=0,c15=0,c32=0; int money = 480; if( money%5 || !(money%480) ){ c32 = money / 32; money -= c32*32; } c15 = money / 15; money -= c15*15; c5 = money / 5; money -= c5*5; c1 = money; printf("各々コイン 32G=%d 15G=%d 5G=%d 1G=%d\n",c32,c15,c5,c1); printf("合計枚数 %d\n",c32 + c15 + c5 + c1); getch(); return 0; } というかもう結論出てたりするのかしら
552 :
デフォルトの名無しさん :2006/01/15(日) 00:22:53
[1] 授業単元:プログラミング演習 [2] 問題文@n個のデータを入力して、その最大、 最小、中央値を求めよ。ただしnは100までの数とする。 A次のフィボナッチ数列Fnを計算し、Fn≧50となるときの第n項を 出力せよ。 Fn=Fn-2+Fn-1 ただし、F0=0、F1=1 B10文字までの英字を入力して、「入力された英字のそれぞれを 1文字前の英字で表す。」という規則で変換した暗号を出力せよ。 C任意の文字列を入力して、文字を右に数文字ずらした文字列を作成したい 。例えば、「delicate」を右に3文字ずらすと「atedelic」となる。 任意の10文字の文字列と右へずらす数を入力して、新しい文字列の結果 を出力せよ。 [3] 環境 [3.1] OS: (Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C++ [4] 期限: 2006年1月16日24h [5] その他の制限: 僕の手ではあまるんでよかったらお願いします・
553 :
548 :2006/01/15(日) 00:28:15
100000000で試した所 5の倍数 && 480の倍数ではないから32Gのコイン計算がされてませんねorz うむむ出直してきます
555 :
547 :2006/01/15(日) 00:40:19
>>535 この擦れに長く居たせいで自明に見えるw
# include <stdio.h>
# include <stdlib.h>
int min(int x, int y)
{
return x < y ? x: y;
}
int mincoins(int amount, const int *coins, int n_coins)
{
int x, y;
if(n_coins == 0 || amount < 0)
return -1;
if(amount == 0)
return 0;
x = mincoins(amount-coins[0], coins, n_coins);
y = mincoins(amount, coins+1, n_coins-1);
if(x == -1)
return y;
if(y == -1)
return x+1;
return min(x+1, y);
}
int main(int ac, char **av)
{
const int coins[] = {32, 15, 5, 1};
if(!av[1])
return 1;
printf("%d\n", mincoins(atoi(av[1]), coins, 4));
return 0;
}
557 :
544 :2006/01/15(日) 00:43:05
リベンジ 思いつきで書いてテストしてないけど #include <stdlib.h> #include <stdio.h> int main(int argc, char* argv[]) { int money[]={32,15,5,1,1},pay=atoi(argv[1]); int num=0,i; if(pay%5!=0){ while(pay>=money[0]){ pay=pay-money[0]; num++; if(pay%5==0) break; } } for(i=1;i<4;i++){ num+=pay/money[i]; pay%=money[i]; } printf("%d\n",num); return 0; }
>>535 これでどうだ?
int main(int argc, char* argv[]){
int money = atoi(argv[1]);
int hasuu[15] = {0,1,2,3,4,1,2,3,4,5,2,3,4,5,6};
int i, c32, c15;
int count = (money/480)*15;
int min;
money%=480;
min=count+money;
for(i=0;i<15;++i){
int nokori = money-i;
for(c32=0;c32<=nokori/32;++c32){
for(c15=0;c15<=(nokori-c32*32)/15;++c15){
if(c32*32+c15*15==nokori){
int temp = c32+c15+hasuu[i];
if(temp<min) min = temp;
}
}
}
}
printf("%d\n", count+min);
}
559 :
556 :2006/01/15(日) 00:45:32
100000000についてstack overflowするな。 うんこ。
>>552 なぜかBだけやってみた。
フィボナッチ数列を再帰で実装しろとかいいだしたら、
コードコンプリートの上巻で指導教官を殴れ。
#include <string>
void convertString(std::string &str) {
for(unsigned i = 0; i < str.size(); ++i)
str[i] = str[i] - 1;
}
int main(int argc, char *argv[])
{
using namespace std;
std::string inputText;
cout << "Input Alphabet(MAX10) >";
cin >> inputText;
if(inputText.size() > 10){
cout << "Input String Size Err!" << endl;
return 0;
}
convertString(inputText);
cout << inputText << endl;
return 0;
}
解法はリングバッファを使った漸化式だろ。
>>562 自分でそのリンクの文書を読み直してみろ。それで伝わると思うか?
>>552 Cもやった。
第1引数がシフトする文字列で、第2引数が右シフト数。
void shiftString(std::string &str, unsigned shift_num) {
shift_num = shift_num % str.size();
std::string tempStr;
tempStr.assign(str.begin() + shift_num, str.end());
tempStr.append(str.begin(), str.begin() + shift_num);
std::cout << tempStr << std::endl;
}
565 :
デフォルトの名無しさん :2006/01/15(日) 01:32:52
[1] 授業単元:基礎プログラミング演習 [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録し、 新しく入力された点数以上の氏名を出力するプログラムを書け。 (必ず、print_student(struct student s)と言う学生一人分の情報を 1行に表示する関数を作成し、それを利用して出力を行うこと。) < 構造体の例 > struct student{ char name[50], id[20]; int score; }; < 実行例 > Name? Tanaka (fgets と sscanf によって5人分のデータを入力する) ID? 103 Score? 80 (途中省略) Passing score? 70 102 Suzuki 90 103 Tanaka 80 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月17日まで 何とぞお手柔らかにお願いします
>>565 print_student(struct student s)
こんな構造体の値渡しの関数作らせる学校ってどこ?
f(n)>=50って意味だと思うぞ。
>>568 あ、ホントだ・・・orz
疲れているな。
>>552 ということで
int main(int argc, char *argv[])
{
int fib_n_2 = 0;
int fib_n_1 = 1;
int fibNum = 0;
int n = 2;
while(1) {
fibNum = fib_n_2 + fib_n_1;
printf("%d ", fibNum);
if(fibNum > 50) break;
fib_n_2 = fib_n_1;
fib_n_1 = fibNum;
++n;
}
printf("\nFn>50となる最初のnは%dです\n", n);
}
571 :
デフォルトの名無しさん :2006/01/15(日) 01:58:25
572 :
565 :2006/01/15(日) 02:00:36
まあ・・K&R 2ndだって値渡しあるからさ。
国立大学生様なのにここに頼るとは 相当な落ちこぼれ
大学は入ったモン勝ち
#include <stdio.h> /* コインの問題 int で計算できると仮定している。引数のチェックはしてない */ #define NELEMS(a) (sizeof(a)/sizeof(a[0])) int f(int n) { int buf[32]; /* 最大の貨幣と同じサイズ */ int table[] = {1, 5, 15, 32}; /* 貨幣の種類 */ int i, j, min; buf[0] = 0; for (i = 1; i < NELEMS(buf); i++) buf[i] = NELEMS(buf); for (i = 1; i <= n; i++) { min = buf[(NELEMS(buf) + i - table[0]) % NELEMS(buf)]; for (j = 1; j < NELEMS(table); j++) { if (min > buf[(NELEMS(buf) + i - table[j]) % NELEMS(buf)]) min = buf[(NELEMS(buf) + i - table[j]) % NELEMS(buf)]; } buf[i % NELEMS(buf)] = min + 1; } return min + 1; } int main(int argc, char *argv[]) { printf("%d\n", f(atoi(argv[1]))); return 0; }
[1] 授業単元: アルゴリズム演習C [2] 問題文(含コード&リンク): 1G(=ゴールド), 5G, 10G, 50G, 100G, 500Gの6種類のみの硬貨が存在する国を考える。 ある金額n(0 <= n <= 5000)Gを払うのに、受け取る釣銭も含めて財布の中の硬貨の 枚数が最小になる支払い方法を求めるプログラムpayを作成しなさい。 なお、財布の中身の初期値は6種類の硬貨の枚数をコマンドラインパラメータで与え、 支払い金額の入力に応じて支払い方法を提示後、さらに次の支払い金額の入力させる。 毎回釣銭を表示し、支払い後の6種類の硬貨の残り枚数も表示する。 改行のみ入力で終了。 釣銭として渡される硬貨は常に最小枚数になる組み合わせで支払われるものとする。
実行例 $ ./pay 4 1 4 1 4 1 input ? 237 支払 1G * 2 5G * 1 10G * 3 100G * 2 釣銭 0 (2 0 1 0 2 1) input ? 507 支払 1G * 2 50G * 1 500G * 1 釣銭 5G * 1 10G * 4 (1 4 0 0 2 0) input ? 終了 [3] 環境 [3.1] OS: 問わず [3.2] コンパイラ: gcc [3.3] 言語: C/C++ [4] 期限: 2006 1/16 17:00までです。よろしくおねがいします。
正誤表 動作要件 誤 支払い金額の入力に応じて支払い方法を提示後、さらに次の支払い金額の入力させる 正 支払い金額の入力に応じて支払い方法を提示後、さらに次の支払い金額を入力させる。 釣銭の条件 誤 釣銭として渡される硬貨は常に最小枚数になる組み合わせで支払われるものとする。 正 釣銭として渡される硬貨は常に最小枚数になる組み合わせで受け取るものとする。 実行例の初期値 誤 $ ./pay 4 1 4 1 4 1 正 $ ./pay 4 1 4 0 4 1
581 :
デフォルトの名無しさん :2006/01/15(日) 04:48:55
>>574 国立大学に入れないほどバカなんですか?w
パソコンとテレビで勉強ほとんどしなかったけど・・・
国立っていってもピンからきりまであるからな
2流私立に入るくらいなら国立の方がいいけどな。 私立に比べれば授業料安いし。
>>582 YOUみたいに国立大学をひがんでるやつってホント頭悪いよね
ム板って学歴コンプ多そうだね
見苦しいから、学校のネタはそろそろやめておくれ。
ところで、
>>578 1,5,15,32Gのヤツはお気に召したのか?
抜け道というかなんというか。
サイフの中のコインの枚数を最小にするには、
1)サイフの中のコインを全部支払う
2)受け取るつり銭は
>>537 のアルゴリズム
セルフのガソリンスタンドでよく私がやる手法だ。
>>587 ジュースの自販機にはそれが通用しないやつが多くないか?
>>576 のが一番応用が利くと思うけどO(n)なのが気になるね
まあ32Gしかない国で100000000の支払が発生することはないだろうが
そーだねー。>589 f(n) = f(n-定数1) + 定数2ってなってればいいんだけどね。
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): 2つの文字列を入力し、1つの文字列に結合した後、結合した文字列を出力するプログラムを作りなさい。 但し、2つの文字型ポインタs,tを引数として、tの指す文字列(ヌル文字までの文字データ)を sの指す文字列の最後(ヌル文字の位置)以後に複写する関数(mycat)を作り、main関数では その関数を呼び出すようにしなさい。 [3] 環境 [3.1] OS:LINUX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2006.01.16 [5] その他の制限:なるべく平易なコードでお願いします・・。 よろしくおねがいします
char *mycat(char *s, const char *t) {char *r = s; while(*s) s++; while(*s++ = *t++); return r;}
593 :
デフォルトの名無しさん :2006/01/15(日) 08:19:17
mainがありません
594 :
535 :2006/01/15(日) 08:25:27
>>586 578は私ではないです。
>>589 確認はしていませんがリングバッファを利用したDPになっているので正しいでしょう、
最大が100000000GなのでO(n)で十分というかこれより良いオーダーは無いと思います。
>>593 mainくらい自分で書けるだろ。
関数呼ぶだけなんだから。
両替機を持って歩けばいいじゃないか
最初に480で割って、その余りだけで計算していいんじゃね?
#include <stdio.h> void mycat(char* s,char* t) { for(;*s;s++); for(;*t;t++){ *s=*t; s++; } return; } int main(void) { char a[80]="abc"; char b[]="def"; mycat(a,b); printf("%s",a); return 0; }
599 :
535 :2006/01/15(日) 09:10:44
>>597 その方法では
483=32*15+1*3で18枚になりますが、
483=32*14+15*2+5*1の17枚での支払いが存在するので間違いです
600 :
デフォルトの名無しさん :2006/01/15(日) 09:25:27
[1] 授業単元、プログラミングT [2] 問題文、 文字色を変換する方法を用いて、 フランス国旗を「文字の色」で画面に表示するプログラムを作成せよ。 ヒント: 文字の表示色を変えるには以下の関数を用いる。 プロトタイプ宣言を忘れないこと void color(int n) { if(n<0 || 7<n) return; printf(“\33[3%dm”,n); } ☆main() で1行分文字を出力し、適当な回数ループさせる。 [3] 環境 [3.1] OS、Windows98 [3.2] borland C++ [3.3] 言語:C++ [4] 期限:明日まで。 わかる方がいましたらよろしくお願いします。
>>600 borland C++ のバージョンは?
コンソールAPIとかC/C++なのか
>>535 あのさぁ、どういうプログラムを作るのかぐらいは自分で考えるか他で聞いてからにしろよ
数学とか理科はここでやるんじゃないんだから
604 :
529 :2006/01/15(日) 11:02:21
お願いします。
605 :
デフォルトの名無しさん :2006/01/15(日) 11:09:34
[1] 授業単元:プログラミングB [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録せよ。 (まだ続くのですが、ここまでをお願いします・・・) < 構造体の例 > struct student{ char name[50], id[20]; int score; }; < 実行例 > Name? Tanaka (fgets と sscanf によって5人分のデータを入力する) ID? 103 Score? 80 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月18日まで どうかお手柔らかにお願いします
>>600 XPとかのDOS窓ではエスケープシーケンス使えないよ
すみません、やはり多倍長の定義というのがよく分からなかったのですが 足し算はfanction_add(fb_int, fb_int);で定義されて fnction_add(a,b);でa+bの多倍長型の値が返ってきます。 ビットシフトはfanction_sift(fb_int*, int);で定義されて fanction_sift(a,b);でaをbビットシフトできます。 bの値が正なら右シフト、負なら左シフトです。 527さんのプログラムについてですが、if(r&1)というのがよくわかりません。 rと1のビット毎の論理積で、1が立っていればif内の処理をやるのだと思うのですが 内部でやってることが理解できてません。 例えばrが1101の場合、1=(0001)との論理積をとると、rの最下位ビットから 見ていく、という考えで合っているでしょうか?。 言葉足らず、稚拙な説明で申し訳ありません。
608 :
535 :2006/01/15(日) 11:56:34
>>603 このスレは"書きかた"は教えられるけど
"解きかた"は教えられないということですか?
>>607 あとは
・定数の設定関数(a=1みたいなことができるやつ)
・論理積を取る関数(a&1)
・乗算(a=b*c)
かな。指数に負の数があることも考えると除算も必要かも。
多倍長整数なのかなぁ?
fb_intって型だから整数だと思う。
>>607 面倒だから
多倍長型についての演算子のオーバーロードでもしろよ
+ / * - = のオーバーロードさえ出来きれば何でも出来るだろ
a = fanction_set(A);でint型のAがfb_int型のaに入ります。 乗算はfanction_mul(fb_int, fb_int);で定義されて fanction_mul(a, b);でa×bの値がfb_int型で返ってきます。 論理積を取る関数はよくわからないのですがビット計算に fanction_bitand(a, b)というのがありました。 多分これだと思います。定義はfanction_bitor(fb_int , fb_int)です。 除算はfanction_div(a, b);です。
整数の範囲の範囲で考えるなら、あれだな。 指数は負では分数になってしまうから、非負だな。 function_iszero()ってのは、こっちの想像で書いている。 値がゼロだったら、真を返す関数があると思うので、それに置き換えてくれ。 (ひょっとしたら、比較するだけのcompare()かもしれんが・・・その辺はてきとーに) fb_int function_exp(fb_int a, fb_int r) { fb_int b = function_set(1); fb_int mask = function_set(1); while (function_iszero(r)) { if (!function_iszero(function_bitand(r, mask))) { b = function_mul(b, a); } a = function_mul(a, a); } return b; }
615 :
デフォルトの名無しさん :2006/01/15(日) 13:29:15
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 次のように、一行に日付とその日の最高気温、最低気温が記録されたファイル(ファイル名:temp.dat)があるとする。 1 10.0 30.0 2 12.1 28.8 3 11.3 25.2 4 10.5 27.4 5 13.1 28.0 このファイルを読み込んでファイルの中での最高気温が最も高い日の日付と最高気温、 同様に最も低い最低気温をその日付を表示するプログラムを表示せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月17日 [5] その他の制限:なし よろしくお願いします。
既視感がする。ファイルの読み込みはリダイレクト(リダイレクション) #include <stdio.h> int main(void) { int day, mind, maxd; double min, max, minm, maxm; if (scanf("%d %lf %lf", &mind, &minm, &maxm) != 3) exit(1); maxd = mind; while (scanf("%d %lf %lf", &day, &min, &max) == 3) { if (minm > min) { minm = min; mind = day; } if (maxm < max) { maxm = max; maxd = day; } } printf("min %d %f, max %d %f\n", mind, minm, maxd, maxm); return 0; }
多倍長の2進展開(符号なし)プログラムできました! みなさんありがとうございます! これから614さんのプログラムを組み込んで符号付の方を 完成させたいと思います。 また後ほど報告いたします。
618 :
615 :2006/01/15(日) 14:06:46
>>616 ありがとうございました
ただ、temp.datを使って表せないでしょうか
テンプレ不備すいません
619 :
600 :2006/01/15(日) 14:13:51
こいつもうだめだ 文字を色付きで出力する手段 エスケープシーケンス 各種方言の関数 コンソールAPI
>>618 次のよーに実行する。
$ a.out <temp.dat
プログラム内でファイルをオープンさせろってんだったら、自分で直してちょ。
fopen(), fclose(), fscanf(), fprintf()っての使えばなんとかなるから。
622 :
600 :2006/01/15(日) 14:40:00
XPではこの課題はできないということなのでしょうか?
XP エスケープシーケンス でぐぐってみるとだな・・・
624 :
600 :2006/01/15(日) 14:50:38
>>623 さん
アドバイスありがとうございます、全部は理解できないもののある程度
わかりました、今は自宅のPCですが明日の授業の際にソースファイルを学校に
持って行き学校のPCで実行したいと思います。
肝心の課題自体がわからないので、どなたかわかる方いましたらよろしくお願いします。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): ポインタを使って、 配列の中に保存されている整数の最大のものとその要素番号とを 出力するプログラムを作りなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月16日18:00まで [5] その他の制限: よろしくおねがいします。
>>621 >自分で直してちょ。
そこをなんとか。。。
long __stdcall GetStdHandle(long); long __stdcall SetConsoleTextAttribute(long, long); long __stdcall SetConsoleCursorPosition(long, long); typedef enum { black, dblue, dgreen, dcyan, dred, dmagenta, dyellow, gray, dgray, blue, green, cyan, red, magenta, yellow, white, } color; void cursor(long h, int y, int x) { SetConsoleCursorPosition(h, (y << 16) | (x & 0x0000FFFF)); } void conattr(long h, char bg, char fg) { SetConsoleTextAttribute(h, (bg << 4) | (fg & 0x0F)); } void cls(long h, int t, int b, int l, int r, char c) { int i, j; for(j = t; j < b; j++) for(i = l; i < r; i++) cursor(h, j, i), putch(c); } void beep(void) { putch('\a'); }
>>627 >if (scanf("%d %lf %lf", &mind, &minm, &maxm) != 3)
FILE *fp;
fp=fopen("temp.dat", "r");
if (fscanf(fp, "%d %lf %lf", &mind, &minm, &maxm) != 3)
>while (scanf("%d %lf %lf", &day, &min, &max) == 3) {
while (fscanf(fp, "%d %lf %lf", &day, &min, &max) == 3) {
この程度変えればできるはず。
>>626 #include <stdio.h>
int main(void)
{
int array[] = {1134,14146,2435,123,61,1234,12513,2462};
int n, i, max, maxi;
n = sizeof(array) / sizeof(array[0]); // 要素数。sizeof知らなければn=9みたいに自分で設定しなさい。
max = array[0];
maxi = 0;
for( i = 1 ; i < n ; i++ ) {
if( array[i] > max ) {
max = array[i];
maxi = i;
}
}
printf("array[%d] が最高値 %d を取るナリ\n", maxi, max);
return 0;
}
>>600 適当だけどこんなのでいいのかね。
#include <stdio.h>
void color(int);
int main(){
int i;
for (i = 0; i < 3; i++){
color(4); printf("FR");
color(7); printf("AN");
color(3); printf("CE\n");
}
color(7);
return 0;
}
void color(int n)
{
if(n<0 || 7<n) return;
printf("\33[3%dm",n);
}
>>630 >[2] 問題文(含コード&リンク):
>ポインタを使って、
maxiが分かってるんだからmaxは記憶しなくて良いような
[1] 授業単元:プログラミングB [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録せよ。 (まだ続くのですが、ここまでをお願いします・・・) < 構造体の例 > struct student{ char name[50], id[20]; int score; }; < 実行例 > Name? Tanaka (fgets と sscanf によって5人分のデータを入力する) ID? 103 Score? 80 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月18日まで どうかお手柔らかにお願いします
636 :
529 :2006/01/15(日) 16:22:44
529ですが、期限が明後日まででした。自分で考えてみたのですがわかりません。 表の横の駅名の表示すらうまくいきません
637 :
デフォルトの名無しさん :2006/01/15(日) 17:20:50
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): #include<stdio.h> #include<string.h> int nagasa(char*); void main() { int n1; static char moji1[20]; gets(moji1); n1=nagasa(moji1); printf("文字列1の文字数=%d\n",n1); return; } int x=0; while(*retu!='\0') {printf("文字数列1の文字=%c\n",*retu); x++; retu++;} return x; で、while(*retu!='\0')の部分が間違っているみたいです。。 3] 環境 [ [3.1] OS:XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2006.01.14 よろしくお願いします。
639 :
デフォルトの名無しさん :2006/01/15(日) 17:24:39
>>637 whileじゃなくて関数が間違ってる
#include<stdio.h>
#include<string.h>
int nagasa(char*);
void main()
{
int n1;
static char moji1[20];
gets(moji1);
n1=nagasa(moji1);
printf("文字列1の文字数=%d\n",n1);
return;
}
int nagasa(char* retu)
{
int x=0;
while(*retu!='\0') {
printf("文字数列1の文字=%c\n",*retu);
x++;
retu++;
}
return x;
}
640 :
637 :2006/01/15(日) 17:41:59
ありがとぽっぽです!!
641 :
117 :2006/01/15(日) 17:44:22
>>117 の(2)ですが改めて自分で考えてみましたがうまくできませんでした。
どなたか宜しくお願いします。
642 :
デフォルトの名無しさん :2006/01/15(日) 18:19:37
[1] 授業単元:プログラミングI [2] 問題文:下記の行列の積を求めるプログラムを作れ。 (123)(123) (456)(456) (789) [3.1] OS: Windows [3.2] コンパイラ名とバージョン: 分らない [3.3] 言語: C [4] 期限: 2006年1月16日まで [5] その他の制限: 超初心者です。。。
>>642 (゚Д゚)ノ ァィ
#include<stdio.h>
int main(void){
int mat1[2][3]={{1,2,3},{4,5,6}},mat2[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int i,j,k,s;
for(i=0;i<2;i++){
for(j=0;j<3;j++){
s = 0;
for(k=0;k<3;k++)
s += mat1[i][k]*mat2[k][j];
printf("%d ",s);
}
puts("");
}
return 0;
}
>>641 ミスってるかもしれんが、質問は受け付けない。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double avg(const void *p) { double a, b, c; sscanf((char *)
p, "%*s%lf%lf%lf", &a, &b, &c);return (a + b + c) / 3; }
int cmp(const void *a, const void *b) {if (avg(a) < avg(b))
return -1; if (avg(a) == avg(b)) return 0;return 1; }
char data[100][100]; int n; void load(FILE * fp) {for (n = 0;
n < 100 && fgets(data[n], 100, fp); n++) ; } char *chomp(char
s) {size_t len = strlen(s); if (len > 0 && s[len-1] == '\n')
s[len-1] = 0; return s;} void print(void) { int i; printf(
"%s", data[0]);for (i = 1; i < n; i++) printf("%s %f\n"
, chomp(data[i]), avg(data[i])); }int main(void) {load(stdin)
;
qsort(data[1], n - 1, 100, cmp); print(); return 0;}
647 :
デフォルトの名無しさん :2006/01/15(日) 18:56:02
[1] 授業単元:プログラミング演習 [2] 問題文 ・日本のある都市の東経を入力し、明石市(東経135度) の標準時間とのずれを計算するプログラムを、関数を用いて作れ [3] 環境 [3.1] OS: (Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C++ [4] 期限: 2006年1月16日24h [5] その他の制限: できないんでお願いします
俺はC++ができませんヽ(´ー`)ノ
同じく。<C++
拡張子だけcppにしとけばばれなくね?
関数()を作った後で class ほにゃらら{ } でくくる main() で ぺけぺけ = new ほにゃらら(); ぺけぺけ.関数(); ってする でいいんじゃねの?
あれ?なんかJavaと似てるな
>>651 そんなことをしなくてもstd::cinとstd::coutとstd::stringを使えば十分だと思う。
"::"はよくわからん
んー。scanf()/printf()でバレバレ・・・。 C++はやりづらいんだわ・・・。 #include <iostream> std::cin >> hogehoge; #include <iostream> using namespace std; cin >> hogehoge; #iinclude <iostream.h> cin >> hogehoge; 教科書や授業でどの流儀を使ってるかわからんからなぁ・・・。 STL使っていいものかどうかも悩む。 std::stringなんてつかわんで、自作文字列クラスとか・・
STLはさすがに範囲内じゃないの。標準ライブラリだし。
>>647 日本国内の時刻はどこも同じでは
というツッコミはなしですか
660 :
zoo :2006/01/15(日) 19:30:02
う〜ん。お金関係のことについては全く分からないな・・・。 既存組織とプロジェクトマネジメントの違いを比較して論じよ。 比較してか。ど素人だから意味不明・・・
662 :
600 :2006/01/15(日) 19:34:09
>>632 さん
ありがとうございます、すごく助かりました^^
XPでエスケープシーケンスを設定?してみようと思うのですが、ググった
サイト等ではいまいちわかりませんでした、環境変数のところでやるのでしょうか?
663 :
デフォルトの名無しさん :2006/01/15(日) 19:37:36
#include <stdio.h> int main(void) { float ne; scanf("%f", &ne); printf("%f 秒\n", 24 * 3600 * (ne - 135.0) / 360); return 0; }
665 :
600 :2006/01/15(日) 19:42:54
>>628 さんのは私に対してのレスなのですか??
難しすぎてちょっとわからないのですが^^;
>>656 VC6とか書かれてると、一番下の書き方がいいのかも? と思ってしまう。
667 :
デフォルトの名無しさん :2006/01/15(日) 19:57:12
[1] 授業単元:プログラミング入門 [2] 問題文:ポーランド電卓プログラムで、数値の先頭に「0x」が あるときだけ16進数として読み取るようにしなさい。 (例: 11 0x11 + = 28) [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:2006年01月16日AM7:00まで [5] その他の制限: ポーランド電卓のプログラムはできたのですが、数値の先頭に「0x」が あるときだけ16進数として読み取る。というのができません。 よろしくお願いします。
[1] 授業単元:プログラミング基礎 [2] 問題文:下の3問です [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年1月20日まで 何も解らず、丸投げでスミマセン...どうかよろしくお願いします。 (1) 標準入力から50個の実数を読み込み,降順に整列させた結果を印刷する プログラムを作成しなさい。 (2) 標準入力から英語の文を読んで,大文字はすべて小文字に直し, それ以外の文字はそのまま出力するプログラムを作成しなさい。 例:入力=[A Happy New Year!] 出力=[a happy new year!] (3) 試験の得点(int型)を引数として受け取り,それが「80〜100なら4」を, 「60〜79なら3」を,「40〜59なら2」を,「0〜39なら1」を, 「101以上または0未満なら0を関数の値として返す関数を作成しなさい。 例:shiken(65)->3
>>668 (2)
#include <stdio.h>
#include <ctype.h>
int main(void){
char str[255], *p = str;
gets(str);
while(*p){
printf("%c", tolower(*p++));
}
return 0;
}
>>667 ポーランド電卓のプログラムはできたのですが、
→出来た分だけup
672 :
ごめんなさい :2006/01/15(日) 20:17:24
[1] 授業単元:プログラミング演習 [2] 問題文@n個のデータを入力して、その最大、 最小、中央値を求めよ。ただしnは100までの数とする。 A次のフィボナッチ数列Fnを計算し、Fn≧50となるときの第n項を 出力せよ。 Fn=Fn-2+Fn-1 ただし、F0=0、F1=1 B10文字までの英字を入力して、「入力された英字のそれぞれを 1文字前の英字で表す。」という規則で変換した暗号を出力せよ。 C任意の文字列を入力して、文字を右に数文字ずらした文字列を作成したい 。例えば、「delicate」を右に3文字ずらすと「atedelic」となる。 任意の10文字の文字列と右へずらす数を入力して、新しい文字列の結果 を出力せよ。 [3] 環境 [3.1] OS: (Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C [4] 期限: 2006年1月16日24h [5] その他の制限: Cでもお願いします
673 :
デフォルトの名無しさん :2006/01/15(日) 20:18:27
[1] 授業単元:プログラミング演習 [2] 問題文 ・日本のある都市の東経を入力し、明石市(東経135度) の標準時間とのずれを計算するプログラムを、関数を用いて作れ [3] 環境 [3.1] OS: (Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C [4] 期限: 2006年1月16日24h [5] その他の制限: すんません
>>669 ありがとうございます。
Tokyo とTokyoを入れたときに距離が0にならないです。
また例えばTokyo Shizuokaと入力したとき
Shizuoka とShizuokaの距離が0にならないんですが・・・
>>668 (1)
#include<stdio.h>
int main(void){
int num[50],i,j,a;
for(i=0;i<50;i++)
scanf("%d",&num[i]);
for(i=0;i<50;i++)
for(j=0;j<49-i;j++)
if(num[j]<num[j+1]){
a = num[j];
num[j] = num[j+1];
num[j+1] = a;
}
for(i=0;i<50;i++)
printf("%d ",num[i]);
puts("");
return 0;
}
そーだよなぁ・・・C言語を学ぶのにC++コンパイラ使うんだもんなぁ。 言語のネーミングの話とか、興味ないと混同してしまうかもな。 拡張子(といってもワカランかもしれんが)、を「.c」にしても動くものなら、 それはC言語でかかれているので、心配しないように。
double func(double x) {return 0;} /* 日本国内のある経度の自国と明石との時差を返す関数 */
>>668 (3)
int shiken(int ten){
if(ten<=100&&ten>=80)return 4;
else if(ten<=79&&ten>=60)return 3;
else if(ten<=59&&ten>=40)return 2;
else if(ten<=39&&ten>=0)return 1;
else return 0;
}
なんか、ネタが多い気もするが・・・。
681 :
デフォルトの名無しさん :2006/01/15(日) 20:39:26
>>672 @
#include<stdio.h>
#define n 100
int main(void){
double num[n],a;
int i,j;
for(i=0;i<n;i++)
scanf("%lf",&num[i]);
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(num[j]>num[j+1]){
a = num[j];
num[j] = num[j+1];
num[j+1] = a;
}
if(n%2==0)
a = (num[n/2]+num[(n/2)-1])/2;
else
a = num[(n-1)/2];
printf("最大値:%f\n最小値:%f\n中央値:%f\n",num[0],num[n-1],a);
return 0;
}
>>679 あ、ごめん無理
>>672 A
#include<stdio.h>
int F(int);
int F(int n){
if(n==0)return 0;
if(n==1)return 1;
return F(n-1)+F(n-2);
}
int main(void){
int i;
for(i=0;F(i)<=50;i++);
printf("第%d項\n",i);
return 0;
}
>>672 B
#include<stdio.h>
int main(void){
int c,i=0;
while((c=getchar())!='\n'){
if(i>=10)break;
if(c=='a'||c=='A')
c += 'z'-'a';
else
c -= 1;
printf("%c",c);
i++;
}
return 0;
}
>>684 たびたびすいません。2つともTokyo入れるとバグリます
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録せよ。 (まだ続くのですが、ここまでをお願いします・・・) < 構造体の例 > struct student{ char name[50], id[20]; int score; }; < 実行例 > Name? Tanaka (fgets と sscanf によって5人分のデータを入力する) ID? 103 Score? 80 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年1月18日まで 何とぞお手柔らかにお願いします
>>672 A
#include <stdio.h>
int fib(int n) {
int a=1, b=1;
while(--n) b=b+a, a=b-a;
return b;
}
int main(void){
int n;
printf("第何項?\n");
scanf("%d", &n);
printf("Fn=%d", fib);
return 0;
}
〔課題〕windowsに常駐し、ctrl+oが押されたら使用しているアプリケーション(テキスト編集系ソフトウェアに限る) にかかわらず「あ」と入力するプログラムを作成せよ です。 学部で習っていたのはC++ですが、去年の院試験の問題ですのでもしかしたら違う言語を 使うのかも。でも俺自身C++が一番理解できるので皆様よろしくおねがいです。
>>672 C#include<stdio.h>
#include<string.h>
int main(void){
char str[11],str2[11];
int n,i;
while(1){
printf("文字列入力(10文字):");
scanf("%s",str);
if(strlen(str)==10)break;
}
printf("何文字ずらす?:");
scanf("%d",&n);
for(i=0;i<10;i++){
if(i+n<10)str2[i+n] = str[i];
else str2[(i+n)%10] = str[i];
}
for(i=0;i<10;i++)
printf("%c",str2[i]);
return 0;
}
>>686 修正前のなら確かにおかしくなるけど修正後は動くと思うのだが(´・ω・`)
>>687 fgetsってことはファイルあるのか?
それともfgetsを使って標準入力か?
>>691 2つとも同じ駅名にすると距離が7.5534534534534e+276みたいになります
694 :
668 :2006/01/15(日) 21:24:09
レスが速くてビックリしています、ありがとうございました!!
696 :
641 :2006/01/15(日) 21:25:12
なんか久々にスレ住人が親切だな
[1]授業単元:プログラミング演習 [2]問題文(含コード&リンク):1から10000までの素数をすべて求め、表示するプログラムを作れ。 [3]環境 [3.1]OS:windows [3.2]コンパイラ名とバージョン:BCC [3.3]言語:C [4]期限:1月17日 [5]その他の制限:なし お願いします。
>>698 だから、そういうのはとりあえず素数の求め方は自分で調べるか数学板で聞くかしない?
>>673 東経が何度だろうが、日本国内であれば時差は0な訳だが。
とか言っていなくなるのもなんだから、
#include <stdio.h>
int main(void) {
double east_longitude, diff;
printf("東経?:"); scanf("%lf", &east_longitude);
diff = (east_longitude - 135) / 15;
printf("%d時間%d分", (int)diff, (int)((diff - (int)diff) * 60));
return 0;
}
>>693 プログラムの下のほうにある
//同じ駅の場合
printf("\n駅名:%s 距離%f",station2,0);
の所にブレークポイントをして、同じ名前の時来るか調べて。
まさか printf("\n駅名:%s 距離%f",station2,0.);じゃないよなぁ・・
>>695 そうか
じゃ記録ってどこにするの?
ファイル出力?
だとしたらどんな感じで?
>>701 printf("\n駅名:%s 距離%f",station2,0.);にしたらできました
臨界点
>>704 ぐはっ、Borlandは自動的に型変換してくれないのか。まぁ動いてよかったです
>>706 いろいろありがとうございました。あとは表の表示とか工夫してみます
>>702 う〜ん、普通の感じで考えていただければいいと思うんですが・・・
入力は、fgets(),sscanf()
出力は、printf()
って感じで。今は、出力はいいので構造体の入力をどういう風にすればいいのかを教えて欲しいです
>>708 入力ですか・・fgetsとsscanf使えだからこんなんでいいのかなぁ?
#include<stdio.h>
typedef struct{
char name[50],id[20];
int score;
}student;
int main(void){
student stu[5];
char test[10];
int i;
for(i=0;i<5;i++){
printf("Name? ");
fgets(stu[i].name,50,stdin);
printf("ID? ");
fgets(stu[i].id,20,stdin);
printf("Score?" );
fgets(test,10,stdin);
sscanf(test,"%d",&stu[i].score);
}
return 0;
}
>>698 >>119 から引用。総当り。
#include <stdio.h>
int sosu(int n){int i;for(i=2;i<n;i++){if(!(n%i)){return 0;}}return 1;}
int main(){int n,m,cnt;cnt=0;m=10000;for (n=1; n<=m; n++){if (n!=1 && sosu(n)){printf ("%d ", n);cnt++;}};return 0;}
711 :
710 :2006/01/15(日) 21:53:49
すまんこ。なんかいろいろムダが。 再うp #include <stdio.h> int sosu(int n){int i;for(i=2;i<n;i++){if(!(n%i)){return 0;}}return 1;} int main(){int n;for(n=2; n<=10000; n++){if(sosu(n)){printf("%d ", n);}}return 0;}
>>709 どうもありがとうございます。
fgets() のところにそういう風に入れるんですか!
授業のプリントにそこまで書いてなかったんで・・・
>>698 #include<stdio.h>
int main(void){
int table[10000],i,j,k;
for(i=2;i<=10000;i++)
table[i] = 1;
for(i=2;i<=10000;i++){
if(table[i]!=0)
for(j=i*2;j<=10000;j+=i)
table[j] = 0;
}
for(k=0,i=2;i<=10000;i++){
if(table[i]!=0){
if(k>0&&k%10==0)puts("");
printf("%5d ",i);
k++;
}
}
printf("\n素数の数 %d個\n",k);
return 0;
}
>>698 #include <stdio.h>
#define N (10000)
void sieve_of_eratosthenes(int *integers) {
int i, notprime;
for (i = 2; i <= N; i++) integers[i] = 1;
integers[0] = integers[1] = 0;
for (i = 2; i <= N / 2; i++) {
notprime = i;
while ((notprime += i) <= N) integers[notprime] = 0;
}
}
int main(void) {
int i, sieve[N + 1];
sieve_of_eratosthenes(sieve);
for (i = 2; i <= N; i++) if (sieve[i]) printf("%5d", i);
return 0;
}
>>712 書いてなかったってことはもしかして違うんじゃないかw
>>681 きちんと分かれていたのでちょっとびっくり(失礼)
main()内:atof(s)→strtod(s, NULL)
getop()内:構文チェックが甘くなるけれども、下記を2箇所とも変更
while(isdigit(s[++i] = c = getch()))→while(isalnum(s[++i] = c = getch()))
>>716 一応問題文はこんな感じなんですが・・・
構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録し、
新しく入力された点数以上の氏名を出力するプログラムを書け。
(必ず、print_student(struct student s)と言う学生一人分の情報を
1行に表示する関数を作成し、それを利用して出力を行うこと。)
[1] 授業単元:プログラミング1 [2] 問題文:問題1〜3まで [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:わかりません>< [3.3] 言語:C [4] 期限:2006年1月23日まで [5] 期限:チンプンカンプンな為、親切な方何卒お願い致します・・・ 問題1 以下のプログラムのprintf文(1)〜(4)の出力結果を答えなさい。 #include <stdio.h> int main(void) { int f(int); int i,j; i=10; printf("%d\n",i); (1) j=f(i); printf("%d\n",j); (2) printf("%d\n",i); (3) } int f(int j) { int i,s; s=0; for(i=1;i<=j;i=i+2)s+=i; printf("%d\n",i); (4) return(s); }
720 :
719 :2006/01/15(日) 22:17:32
問題2 以下のプログラムを実行すると5行の出力が得られる。それらの出力 結果を答えなさい。 #include int main() { int n=0; int taro=5,hana=6; int sum=taro+hana printf("%4.1f\n", 3.14159); printf("%d\n", n++); printf("%d\n", ++n); printf("%d\n", sum); printf("%d\n", sum/n);
721 :
719 :2006/01/15(日) 22:18:30
問題3 以下のリストのように定義されたint型の関数leap(int)がある。 この関数に以下の(1)〜(5)の引数を与えたときに返される値を答えなさい。 (1) leap(794); (2) leap(1192); (3) leap(1600); (4) leap(2000); (5) leap(2003); (6) leap(2004); -----リスト ----------------------------------------------- int leap(int y) { if (y%4 != 0 || y%100 == 0 && y%400 != 0) return 0; else return 1; if (y > 2000) return 3; else if (y > 1000) return 4; else return 5; } ------------------------------------------------------------ 以上です、よろしくお願いします。
722 :
681 :2006/01/15(日) 22:18:50
>>717 ありがとうございます!
逆ポーランドのプログラムは実は丸写しなんできちんとしてましたw
>>719 問題1
(1)10
(2)25
(3)10
(4)11
問題2
そのプログラムじゃコンパイルは通らない
問題3
(1) 0
(2) 1
(3) 1
(4) 1
(5) 0
(6) 1
>>718 ああ・・・つまり関数は自分で調べろってことだったのでは
ところで構造体の宣言がその教授に習ってないやw
typedef struct{}studentを
struct studentに変えておいて
宣言はstudentからstruct studentに変えておいて
>>723 最後に"}"くらい追加してあげてください・・・
727 :
719 :2006/01/15(日) 23:09:20
>>723 さん
ありがとうございます、記入漏れすみませんでした><
問題2
以下のプログラムを実行すると5行の出力が得られる。それらの出力
結果を答えなさい。
#include
int main()
{
int n=0;
int taro=5,hana=6;
int sum=taro+hana
printf("%4.1f\n", 3.14159);
printf("%d\n", n++);
printf("%d\n", ++n);
printf("%d\n", sum);
printf("%d\n", sum/n);
}
>>727 動くようになるまで、間違いはあと2つだ。ガンガレ!
5行?・・・俺は4行しか出ないんだが・・・。 a.c:1:10: #include expects "FILENAME" or <FILENAME> a.c: In function `main': a.c:7: error: syntax error before "printf" a.c:8: warning: implicit declaration of function `printf' まあ・・・なんだ・・・自分でコンパイル&実行するだけの課題なのだから、自分でやろうや。
>#include <stdio.h> >int sum=taro+hana ; >return 0; ?
731 :
698 :2006/01/15(日) 23:36:16
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 速度が64kbpsであるインターネットがある。 この回線を使って、サイズが n MB(n を入力する)のファイルを ダウンロードするのにかかる時間を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Widows XP [3.2] コンパイラ名とバージョン:すみません。わからないです [3.3] 言語:C言語 [4] 期限:2006年2月1日 初心者です。どうか宜しくお願いします。
>>732 (゚Д゚)ノ ァィ
#include<stdio.h>
int main(void){
double n;
printf("何MのDLをお望みで?:");
scanf("%lf",&n);
printf("%f秒ほどかかるかと\n",n*1024/8.0);
return 0;
}
735 :
デフォルトの名無しさん :2006/01/16(月) 00:05:03
すみません、符号付2進展開のプログラムやっていたのですが 最も基本の符号付2進展開すらできません。 符号付2進展開とは-1,0,1で表される展開のことで 7=-1+(2*2*2)→2進表記で(1 0 0 -1)のようにすることです。 符号付2進展開の定義としてN=N(0)+N(1)*2+N(2)*2^2+・・・・+2^rの展開で N(i)が0でなければN(i+1)=0を満たすものです。 -1がたったビットでは仮数部の逆数をかけるようにしたいです。 int型でもいいのでよろしくお願いします。 問題文: (a^5)×(b^7)×(c^3)の指数部を符号付2進展開して計算。 a,b,cは任意の数を代入。 その他の制限:今回は指数部だけ展開していただければ結構です。 a^5=a×a×a×a×aです。 できれば以下のような仕様ですと助かります。 先にa×b、a×c、b×c、a×b×cを計算しておいて 指数部を読み込み、 0 1 0 1 1 0 0−1 0 1 0−1 ------------ 上位ビットから見ていき、縦に(0 0 1)なら×a(0 1 0)なら×b、(1 0 0)なら×c、(1 1 0)なら×abの ようにして(a^5)×(b^7)×(c^3)を一気に計算できるようにしたいです。何度もすみませんがよろしくお願いします。
名前入れ忘れました、753は私です。
753なんてまだ存在しません
>732 通信の遅延、サーバでかかる時間、クライアントで受け取った後の時間、輻輳といったものは含まれてない。 必要に応じて修正せよ。 #include<stdio.h> #include<math.h> /* assuming tcp/ip on ether */ #define PACKET_HEADER_SIZE (22+20+20) #define PACKET_CONTENT_SIZE 1460 #define K * 1000 #define Mi * 1024*1024 #define BPS / 8 #define BYTE * 1 #define LINESPEED (64 K BPS) int main( int narg, const char *args[] ){ int megbytes; long datasize, packets, totalsize; double time; if( args[1] == 0 ) return; megbytes = atoi( args[1] ); if( megbytes < 0 ) return; datasize = megbytes Mi BYTE; packets = ceil( datasize / ( double )PACKET_CONTENT_SIZE ); totalsize = datasize + packets * PACKET_HEADER_SIZE; time = (double)totalsize / LINESPEED; printf( "%f seconds.\n", time ); }
すみません、735でした。
環境です。
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
>>735 [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語:C言語
[4] 期限:2006年1月16日
741 :
739 :2006/01/16(月) 00:12:09
補足: nはコマンドライン引数で呉れてやってる。
>>735 宿題ならテンプレにしたがうこと。
また、1の補数やら、2の補数やらの話ではなさそうなので、
符号付2進展開の解説資料をupするなり、webページを教えるなり。
まあ、そういうことで。
==、,-、 、ヽ、 \> ,, '''\ _ メ゙ヽ、\ ̄""" ̄--‐ 、 \ /ゝ、\ =─‐\\‐ /─'''''ニ二\''' |レレゝゝ、\  ̄く<<く >, ゙、/<三三二\ ̄\ゝゝゝゝゝゞ''ヽ、 / ̄ ̄ ̄ ̄ ̄ <<<<〈__入 ゙、く彡三三三二ヽくゝ\メメメゝ、_ゝ、\ | さあ質問を言え くく<<<<<< ゙、 ゙、ミ三三二ニ─ゝゝゝゝゝ,,,,,,,、 '( ゙''ヽ、ヽ、 < どんな質問も何度でも くくくくくく彡‐ヽ ゙、ミ三三二ニ'''くくゝゝ_ゝゝ、\\_,>」ノ, | スルーしてやろう・・・ く く く く く 彡゙、゙、三三二ニ‐くゝ、/ ,,,,,,,,メメゝヽ''''"ゝゞ丶、 \_____ 二─二二彡彡、゙、三三二==くメゝ/ ゙'ヽ、メゝゝゝゝゝゝゞ''ヽ-、,,,,,,_ ‐'''" ̄ \彡彡ミ、゙、三二=''"く<メ/:: \''-、メメゝゝゝ_ゝ 、 ,,、ヽヽ 、 ,,,,- ゙彡//ヾ、三二= くゝ/:::.... \>∠レ-,-‐ニ二メヽ''ヽ ノ ゙ヽ、,,,-‐//_///,,、゙、三二= ゙、 ""''' ヽ>//レレヽ,,___ / -,,,,,,-‐'''"""/////,,ヽ ゙、三二─ ゙ヽ. //-ヘヘ,、 レレレレノ ''" ,l|"////ノ,、\彡'''''‐-ニ,、 ::::::::::,,,,,,,,// ゙ヽフ/|/| レ' /ゝ、/ヽ|ヽレ,,゙ヽ、゙''ヽ、,,,,,,_ヽ''ニ='',,-'"、─-,,,,,_  ̄"'ノ /メ / レ/,''"へへべ''─---- ̄-メヽ"ゝゞゝヽ、 >---''" /ヘヘ、|//ヘヘヘヘヘヘヘヘ,,-イ ̄ | ̄"'''-ニニニ二-''" /ヘヘ∧/./フヘヘヘヘヘヘヘ,/イ / / / ゙ノ\、\ /ゝゝ| / /メヘヘヘヘヘヘ/'" | / / / / \\ /ゝ /|‐/ /フヘへヘヘヘ/∧ /-'"-'''"__,,-''" / /、\ //|_| /./へへへヘヘ、// |/ \_,,,,-‐'" / ゙、.゙、 '"/ヽ"/'"へへヘヘヘヘ// ノ \ ,,,,-‐'" ゙、゙、 .ノ //へへヘヘヘヘ//ヽ ./ ゙、''"" ,,/、゙、 /-"へへヘヘヘヘヘ// |‐" \_,,,,,,,,-‐'''" | | へへへへヘヘヘヘ//ヽ ノ ゙, | |
>743 チチは感度抜群って本当ですか?
==、,-、 、ヽ、 \> ,, '''\ _ メ゙ヽ、\ ̄""" ̄--‐ 、 \ /ゝ、\ =─‐\\‐ /─'''''ニ二\''' |レレゝゝ、\  ̄く<<く >, ゙、/<三三二\ ̄\ゝゝゝゝゝゞ''ヽ、 / ̄ ̄ ̄ ̄ ̄ <<<<〈__入 ゙、く彡三三三二ヽくゝ\メメメゝ、_ゝ、\ | くく<<<<<< ゙、 ゙、ミ三三二ニ─ゝゝゝゝゝ,,,,,,,、 '( ゙''ヽ、ヽ、 < スルー くくくくくく彡‐ヽ ゙、ミ三三二ニ'''くくゝゝ_ゝゝ、\\_,>」ノ, | く く く く く 彡゙、゙、三三二ニ‐くゝ、/ ,,,,,,,,メメゝヽ''''"ゝゞ丶、 \_____ 二─二二彡彡、゙、三三二==くメゝ/ ゙'ヽ、メゝゝゝゝゝゝゞ''ヽ-、,,,,,,_ ‐'''" ̄ \彡彡ミ、゙、三二=''"く<メ/:: \''-、メメゝゝゝ_ゝ 、 ,,、ヽヽ 、 ,,,,- ゙彡//ヾ、三二= くゝ/:::.... \>∠レ-,-‐ニ二メヽ''ヽ ノ ゙ヽ、,,,-‐//_///,,、゙、三二= ゙、 ""''' ヽ>//レレヽ,,___ / -,,,,,,-‐'''"""/////,,ヽ ゙、三二─ ゙ヽ. //-ヘヘ,、 レレレレノ ''" ,l|"////ノ,、\彡'''''‐-ニ,、 ::::::::::,,,,,,,,// ゙ヽフ/|/| レ' /ゝ、/ヽ|ヽレ,,゙ヽ、゙''ヽ、,,,,,,_ヽ''ニ='',,-'"、─-,,,,,_  ̄"'ノ /メ / レ/,''"へへべ''─---- ̄-メヽ"ゝゞゝヽ、 >---''" /ヘヘ、|//ヘヘヘヘヘヘヘヘ,,-イ ̄ | ̄"'''-ニニニ二-''" /ヘヘ∧/./フヘヘヘヘヘヘヘ,/イ / / / ゙ノ\、\ /ゝゝ| / /メヘヘヘヘヘヘ/'" | / / / / \\ /ゝ /|‐/ /フヘへヘヘヘ/∧ /-'"-'''"__,,-''" / /、\ //|_| /./へへへヘヘ、// |/ \_,,,,-‐'" / ゙、.゙、 '"/ヽ"/'"へへヘヘヘヘ// ノ \ ,,,,-‐'" ゙、゙、 .ノ //へへヘヘヘヘ//ヽ ./ ゙、''"" ,,/、゙、 /-"へへヘヘヘヘヘ// |‐" \_,,,,,,,,-‐'''" | | へへへへヘヘヘヘ//ヽ ノ ゙, | |
>>746 どうしてプリンセス・メグはNECを止めたんですか?
==、,-、 、ヽ、 \> ,, '''\ _ メ゙ヽ、\ ̄""" ̄--‐ 、 \ /ゝ、\ =─‐\\‐ /─'''''ニ二\''' |レレゝゝ、\  ̄く<<く >, ゙、/<三三二\ ̄\ゝゝゝゝゝゞ''ヽ、 / ̄ ̄ ̄ ̄ ̄ <<<<〈__入 ゙、く彡三三三二ヽくゝ\メメメゝ、_ゝ、\ | くく<<<<<< ゙、 ゙、ミ三三二ニ─ゝゝゝゝゝ,,,,,,,、 '( ゙''ヽ、ヽ、 < スルー くくくくくく彡‐ヽ ゙、ミ三三二ニ'''くくゝゝ_ゝゝ、\\_,>」ノ, | く く く く く 彡゙、゙、三三二ニ‐くゝ、/ ,,,,,,,,メメゝヽ''''"ゝゞ丶、 \_____ 二─二二彡彡、゙、三三二==くメゝ/ ゙'ヽ、メゝゝゝゝゝゝゞ''ヽ-、,,,,,,_ ‐'''" ̄ \彡彡ミ、゙、三二=''"く<メ/:: \''-、メメゝゝゝ_ゝ 、 ,,、ヽヽ 、 ,,,,- ゙彡//ヾ、三二= くゝ/:::.... \>∠レ-,-‐ニ二メヽ''ヽ ノ ゙ヽ、,,,-‐//_///,,、゙、三二= ゙、 ""''' ヽ>//レレヽ,,___ / -,,,,,,-‐'''"""/////,,ヽ ゙、三二─ ゙ヽ. //-ヘヘ,、 レレレレノ ''" ,l|"////ノ,、\彡'''''‐-ニ,、 ::::::::::,,,,,,,,// ゙ヽフ/|/| レ' /ゝ、/ヽ|ヽレ,,゙ヽ、゙''ヽ、,,,,,,_ヽ''ニ='',,-'"、─-,,,,,_  ̄"'ノ /メ / レ/,''"へへべ''─---- ̄-メヽ"ゝゞゝヽ、 >---''" /ヘヘ、|//ヘヘヘヘヘヘヘヘ,,-イ ̄ | ̄"'''-ニニニ二-''" /ヘヘ∧/./フヘヘヘヘヘヘヘ,/イ / / / ゙ノ\、\ /ゝゝ| / /メヘヘヘヘヘヘ/'" | / / / / \\ /ゝ /|‐/ /フヘへヘヘヘ/∧ /-'"-'''"__,,-''" / /、\ //|_| /./へへへヘヘ、// |/ \_,,,,-‐'" / ゙、.゙、 '"/ヽ"/'"へへヘヘヘヘ// ノ \ ,,,,-‐'" ゙、゙、 .ノ //へへヘヘヘヘ//ヽ ./ ゙、''"" ,,/、゙、 /-"へへヘヘヘヘヘ// |‐" \_,,,,,,,,-‐'''" | | へへへへヘヘヘヘ//ヽ ノ ゙, | |
==、,-、 、ヽ、 \> ,, '''\ _ メ゙ヽ、\ ̄""" ̄--‐ 、 \ /ゝ、\ =─‐\\‐ /─'''''ニ二\''' |レレゝゝ、\  ̄く<<く >, ゙、/<三三二\ ̄\ゝゝゝゝゝゞ''ヽ、 / ̄ ̄ ̄ ̄ ̄ <<<<〈__入 ゙、く彡三三三二ヽくゝ\メメメゝ、_ゝ、\ | くく<<<<<< ゙、 ゙、ミ三三二ニ─ゝゝゝゝゝ,,,,,,,、 '( ゙''ヽ、ヽ、 < シースルー くくくくくく彡‐ヽ ゙、ミ三三二ニ'''くくゝゝ_ゝゝ、\\_,>」ノ, | く く く く く 彡゙、゙、三三二ニ‐くゝ、/ ,,,,,,,,メメゝヽ''''"ゝゞ丶、 \_____ 二─二二彡彡、゙、三三二==くメゝ/ ゙'ヽ、メゝゝゝゝゝゝゞ''ヽ-、,,,,,,_ ‐'''" ̄ \彡彡ミ、゙、三二=''"く<メ/:: \''-、メメゝゝゝ_ゝ 、 ,,、ヽヽ 、 ,,,,- ゙彡//ヾ、三二= くゝ/:::.... \>∠レ-,-‐ニ二メヽ''ヽ ノ ゙ヽ、,,,-‐//_///,,、゙、三二= ゙、 ""''' ヽ>//レレヽ,,___ / -,,,,,,-‐'''"""/////,,ヽ ゙、三二─ ゙ヽ. //-ヘヘ,、 レレレレノ ''" ,l|"////ノ,、\彡'''''‐-ニ,、 ::::::::::,,,,,,,,// ゙ヽフ/|/| レ' /ゝ、/ヽ|ヽレ,,゙ヽ、゙''ヽ、,,,,,,_ヽ''ニ='',,-'"、─-,,,,,_  ̄"'ノ /メ / レ/,''"へへべ''─---- ̄-メヽ"ゝゞゝヽ、 >---''" /ヘヘ、|//ヘヘヘヘヘヘヘヘ,,-イ ̄ | ̄"'''-ニニニ二-''" /ヘヘ∧/./フヘヘヘヘヘヘヘ,/イ / / / ゙ノ\、\ /ゝゝ| / /メヘヘヘヘヘヘ/'" | / / / / \\ /ゝ /|‐/ /フヘへヘヘヘ/∧ /-'"-'''"__,,-''" / /、\ //|_| /./へへへヘヘ、// |/ \_,,,,-‐'" / ゙、.゙、 '"/ヽ"/'"へへヘヘヘヘ// ノ \ ,,,,-‐'" ゙、゙、 .ノ //へへヘヘヘヘ//ヽ ./ ゙、''"" ,,/、゙、 /-"へへヘヘヘヘヘ// |‐" \_,,,,,,,,-‐'''" | | へへへへヘヘヘヘ//ヽ ノ ゙, | |
宿題無くなったとたんにやる事なくなるなぁ・・・
>すみません、符号付2進展開のプログラムやっていたのですが 符号付2進展開ってコトバははじめて聞きました。 >最も基本の符号付2進展開すらできません。 >符号付2進展開とは-1,0,1で表される展開のことで >7=-1+(2*2*2)→2進表記で(1 0 0 -1)のようにすることです。 そんな表記は初めてみました。 10進数の7を2進数で表記する場合、普通は111となります。 符号付の数を表記する場合、10進数の-7でしたら、2進数ですと-111となります。 >-1がたったビットでは仮数部の逆数をかけるようにしたいです。 >int型でもいいのでよろしくお願いします。 仮数部というのは、不動小数点数の一部を表すときに使う言葉です。ここで使われている意味がわかりません。 それから、過去ログを読むと、そもそも、多倍長整数を扱っていたのですから、逆数は表現できません。 整数の逆数は分数になります(特別に0の逆数はありません)。 int 型でもいいとのことですが、やはり、int型は整数ですので、逆数は表現できません。 と、ここまで、書けばおわかりのように、説明がまったく意味不明です。
必死だな
> >すみません、符号付2進展開のプログラムやっていたのですが > 符号付2進展開ってコトバははじめて聞きました。 > > >最も基本の符号付2進展開すらできません。 > >符号付2進展開とは-1,0,1で表される展開のことで > >7=-1+(2*2*2)→2進表記で(1 0 0 -1)のようにすることです。 > そんな表記は初めてみました。 > 10進数の7を2進数で表記する場合、普通は111となります。 > 符号付の数を表記する場合、10進数の-7でしたら、2進数ですと-111となります。 質問者が言ってる表記はあまり知られてないだろうが、有る。 この点に関しては質問者の説明不足が悪いんだが。 > >-1がたったビットでは仮数部の逆数をかけるようにしたいです。 > >int型でもいいのでよろしくお願いします。 > 仮数部というのは、不動小数点数の一部を表すときに使う言葉です。ここで使われている意味がわかりません。 > それから、過去ログを読むと、そもそも、多倍長整数を扱っていたのですから、逆数は表現できません。 > 整数の逆数は分数になります(特別に0の逆数はありません)。 > int 型でもいいとのことですが、やはり、int型は整数ですので、逆数は表現できません。 仮数部→底 って訂正が正しいんだろう。ついでに「浮」動小数。 関数内で計算中の数を割ればいいじゃん。 > と、ここまで、書けばおわかりのように、説明がまったく意味不明です。 そんなことはない。
ここは議論スレではありません お帰りくださいませ
ませ〜
今日はもうないな さて自分の宿題やるか( 'A`)
[1] 授業単元:プログラミング演習(c) [2] 問題文(含コード&リンク): 時間(0以上23以下)を入力し、以下に示す時間に従った挨拶を出力をするプログラムを作成しなさい。 プログラムは0以上24未満の時間が入力されるまで繰り返しなさい。 0-3:Good night 4-11:Good morning 12-16:Good afternoon 17-20:Good evening 21-23:Good night 但し、メッセージを出力する関数内で、以下の文字型ポインタ配列を宣言して使用しなさい。 char *greeting[4] = { "Good morning", "Good aftenoon", "Good evening", "Good night", }; main関数内では、その関数を呼び出すようにしなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2006.01.17です・・・。 [5] その他の制限: お手柔らかにお願いします。 恥ずかしながら丸投げです・・・。
int main() static const struct { int begin; int end; char * const str; } greetings[] = { {0, 3, "Good night"}, {4, 11, "Good morning"}, {12, 16, "Good afternoon"}, {17, 20, "Good evening"}, {21, 23, "Good night"}, }; int hour; for (;;) { if (scanf("%d", & hour) != 1) { return EXIT_FAILURE; } for (int ic = 0; ic < sizeof(greetings); ++ic) { if (hour >= greetings[ic].begin && hour <= greetings[ic].end) { printf("%s\n", greetings[ic].str); return EXIT_SUCCESS; } } }
760 :
デフォルトの名無しさん :2006/01/16(月) 10:24:40
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] その他の制限:
>>760 int sumlist(std::list<int> &anSrc)
{
std::list<int>::iterator iEnd = anSrc.end();
int nResult = 0;
for (std::list<int>::iterator iProc = anSrc.begin();
iProc != iEnd;
++iProc)
{
nResult += *iProc;
}
return nResult;
}
久しぶりにC++書いたから間違ってても白根
コンパイル環境は脳内g++
>>735 >-1,0,1で表される展開のことで
ひょっとしてこれのこと?
http://www.google.co.jp/search?complete=1&hl=ja&c2coff=1&q=%E5%B9%B3%E8%A1%A1%E4%B8%89%E9%80%B2%E6%95%B0 まぁ、アレだ「13枚のコインのうち重さが違うのが1枚(ry」に応用されるやつだ。
#include<stdio.h>
int p3n(int,char []);
int main(int argc ,char **argv)
{
int i;char s[40];
for(i=-20;i<20;i++){
p3n(i,s);printf("%s\n",s);
}
return 0;
}
int p3n(int a,char s[])
{
char t,c[]="zpn";/* z-ero p-positive n-egative */
int b,j,i=0;
do{
b=a%3;
s[i++]=c[b+(b<0)*3];
a=a/3+(b==2)-(b==-2);
}while(a);
s[i]=0;b=i--/2;
for(j=0;j<b;j++){
t=s[j];s[j]=s[i-j];s[i-j]=t;
}
return 0;
}
>>みなさん 色々不備があって申し訳ありませんでした。 符号付2進展開についてはこちらも資料が少なくて手間取っています。 手元にある資料によると定義としてN=N(0)+N(1)*2+N(2)*2^2+・・・・+N(r-1)*2^(r-1)+2^rの展開で N(i)が0でなければN(i+1)=0を満たすものです。 これしか載っていませんでした。 多分係数をー1、0、1にとった三進展開だと思うのですが・・・ 仮数部→底、これは恥ずかしい間違いでした。
[1] 授業単元: C演習 [2] 問題文(含コード&リンク): 文字列を入力し、入力した文字数を出力するプログラムを作りなさい。 ただし、文字列の先頭アドレスを因数として、文字列の長さを返す関数(mylen)をつくり、 main関数ではその関数を呼び出すようにしなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:今日中に提出 [5] その他の制限: この時期にこんなんできないようじゃオhルといわれましたorz おねがいします・・・・。
>>764 馬鹿な俺にもできたから終わってんな
まぁ、プロが見たらボロ糞言うだろうが、気にするなw
char *mylen(char *str){
int count=0;
while(*str++)count++;
return count;
}
int main(){
〜〜〜〜〜〜〜〜〜
return 0;
}
>>764 size_t mylen(char String[]) // char *Stringと書いてもいい
{
return strlen(String);// 便利な標準関数だぜ
}
※注
教授にヌッ殺されても責任は取れません
むしろ正解じゃまいか
>>765 char型のポインタを返すのかint型の値を返すのかはっきりしろYO
って言うのは置いとくとしてだ
どこまでポインタ進める気だw
?
>>770 今気づいたし・・・i|l||l|i orz
みんな、明治大学の坂野先生に通報したりしたらだめだよ
名城大学の坂野先生にも通報しないでね
777 :
774 :2006/01/16(月) 16:36:14
あ、ホントだ。名城だった。
ガビーン!今更消しても遅いか…
ガビーンとか久しぶりに聞いたので許してやってくれ。
素で送った→時すでに遅し
メールの内容は??
音速ならまだ届いてない まだ間に合う!
俺が音回線から光回線に変更しといた
もう手遅れだよ。今先生からリンクを張ってくれるように リターン来ちゃった。 でも可愛そうだからそこは無視しておいたよ
まぁ、送った所で誰が頼んだのかは調べても分からんから ここに貼られたソース使わなけりゃ大丈夫じゃね
というか
>>773 は行数多くなるからここに貼りきれないとおむうんだが…… ミ゚д ゚ ミ
最近、魚チヨコ→魚チョコ だった事に気付いた
>>787 メアド晒せば誰かがソース送ってくれるかも知れないね。
もしかしたら先生から罠が送られてくるかもしれないが…
リンクにソースを載せて教えてくれた人に以前教えてもらったけど それは面倒をかけるので無理ですかね??
>>787 報告&先生へのメールはしていないので安心して下さい。
僕のかわいい嘘ですので・・・。本当に申し訳ない(;´Д`)
793 :
デフォルトの名無しさん :2006/01/16(月) 18:20:22
すいません、下のをCに直してください。 int main4( void ) { int n; // number of students int ko, sy, su, ri, ei; std::cout << "input number of students > "; std::cin >> n; int tokuten[n]; for ( int i = 0; i < n; ++i ) { std::cout << "--- student (" << i << ") ---" << std::endl; 00050: std::cout << "input kokugo
だが断る
795 :
デフォルトの名無しさん :2006/01/16(月) 18:21:59
お願いします;;
あ、それ書いたの俺だ。
798 :
797 :2006/01/16(月) 18:33:32
てゆか C++ って依頼に書いてあったから C++ で書いたんだけど。 次スレから「C++ と C の違いが分からない人は C って書きましょう」 みたいなことテンプレに入れようよ。
799 :
デフォルトの名無しさん :2006/01/16(月) 18:34:37
[1] 授業単元: 数値解析 [2] 問題文: d^2*f/d*x^2 + d^2*f/d*y^2 = 0 境界条件 f(0,y)=10 f(10,y)=5 上記の偏微分方程式を有限要素法により求めるプログラムの作成。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc borland 言語: C [4] 期限: 明後日まで [5] その他の制限:特になし 僕にはむずかしいです、よろしくお願いします!!
802 :
794 :2006/01/16(月) 18:49:52
ごめんなさい
>>773 よくみたら「プログラムを作る」プログラムかよ。メンドクセ(゚听)
>>792 ヲイヲイびつくりしたわよ。
めんどくさいのはわかっていますが、改めてお願い申し上げまする
>>803 ん、コンパイラもどきを作れってことか。
字句解析、構文解析、意味解析・・・無理だろw
なんか依頼者の癖に「めんどくさいのはわかったいますが」とか たいそうな口の聞き方だな と思ったかも
コンパイラもどき? 入力された内容に従って構造体の定義を出力 するだけだと思う。いや、それでも十分面倒いけどね。
808 :
デフォルトの名無しさん :2006/01/16(月) 19:20:45
[1] 授業単元:プログラミング [2] 問題文:@nを入力し,100からnまでの整数のうち15の倍数となる 整数を出力するプログラムをfor文またはwhile文を用いて作成せよ A n円を入力した後,画面に「1・ドル 2・ユーロ 3・ウォン」 と表示され,1,2,3のいずれかの番号を入力すると, その指定した通貨の額にn円を換算するプログラムを作成せよ。 なお,為替レートは,ネットなどで調べること。 B n人分について国語,社会,数学,理科,英語の5科目の得点を入力し, n人の平均点の平均を計算した後,その平均より低い平均点を 出力するプログラムを作成せよ。ただし,各科目の変数名を kok,sya,suu,rik,eigとし,配列名はtokutenとすること。 C 10文字以内の文字列(英字)を入力し, 子音(a,i,u,e,o以外の文字) を取り除いた文字列を出力するプログラムを作成せよ。 (例:momotarou → ooaou) D 速度が64kbpsであるインターネットがある.この回線を使って, サイズが n MB(n を入力する)のファイルをダウンロード するのにかかる時間を表示するプログラムを作成せよ. [3] 環境 [3.1] OS:xp [3.2] コンパイラ名とバージョン:わかりません [3.3] 言語:C [4] 期限:2006年1月18 [5 お願いします
>>793 単純に、書き換えるだけでいいんじゃないのか?
std::coutってのはprintf使えってこと
std::cinってのはscanf使えってこと
他に何か難しいことってある?
[1] 授業単元:プログラミング入門 [2] 問題文(含コード&リンク): 配列{1,3,5,7,9,0,2,4,6,8}があるとき、4番目の要素を削除し、7番めに10を挿入せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC.NET 2003 [3.3] 言語: C [4] 期限: 明後日まで [5] その他の制限: Cの基本的なことのみ習っている。 要素の削除、挿入は関数を作って、その関数で行う。 お願いします。
#include <stdio.h> void del(int a[], int x, int result_tmp[]){ int i,y; for(i=0; i<10 ;i++){ if(i<x){ y=a[i]; result_tmp[i]=y; } y=a[i+1]; result_tmp[i]=y; } } //int insert(){ void main() { int i, result[10], hairetu[10]; hairetu[1,3,5,7,9,0,2,4,6,8]; del(hairetu, 4, result);//削除する数字 //insert(hairetu, 7, 10);//挿入する数字 for(i=0; i<10; i++){ printf("%d\n", result[i]); } } 途中までですが、このように書いたのですが、うまくいきません。助言をお願いします。
>>810 int main()
{
int a[]={1,3,5,9,0,10,4,6,8};
return 0;
}
>>811 工エエェェ(´д`)ェェエエ工工 ツッコミいっぱい
>>808 A以外はこのスレで解答済みだから探して。
Cは微妙に違うけど大体いっしょのがある。
>>811 流し読みしたがオーバーフローは起きてるし、y経由させる意味ないし
どうみてもelse抜けてるし、それ以上に無駄だし
書き込み用イテレータと読み込み用イテレータを共有せずに
別々に確保してみれ
>>815 ありがとうございます、やってみます。
main関数の方は問題ないですか?
・・・・・・もう何も言うまい
イテレーターって関数のdel関数の方のことですよね? mainも問題ありそうだってのもわかってはいたのですが、それよりもdelの方が気になっていて・・・
>>816 int *del(int a[], int x, int result_tmp[]){
int i,*y = resulut_tmp;
for(i=0; i<10 ;i++){
*result_tmp = a[i];
if(a[i]++ == 3){;}
*result_tmp = a[i];
}
return *y;
}
delの関数はこれでおkだろ(^ω^;)
あとはここのプロの方々の改良が加われば鬼に金棒。
822 :
デフォルトの名無しさん :2006/01/16(月) 20:28:20
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):末尾に記します [3] 環境 [3.1] OS: TurboLinux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [2006年01月17日22:00まで] [5] その他の制限: 違うグラフでも動くようにせよ。 ヒント:通った辺と通っていない辺を区別する配列、再帰関数を使う 問題文 次のグラフを一筆書きするプログラムを書け。 { { 0, 1, 1, 0, 1}, { 1, 0, 1, 1, 1}, { 1, 1, 0, 1, 1}, { 0, 1, 1, 0, 0}, { 1, 1, 1, 0, 0}, } 出力は以下の様に表示せよ 4 -> 3 -> 2 ->・・・ 単位が危ういので、どうか助けて欲しいです。
>>822 ヒントはあくまでヒントだから無視するとして
全てのノードが繋がってると仮定しても
高々5!通りしか無いんだから、それを一つずつ
そのグラフに適合するか見ていけばいいんじゃね?
コミットサイズとは何ですか? どなたか教えてください。
826 :
824 :2006/01/16(月) 20:38:41
すいません。自己解決しました。
827 :
ZEX# :2006/01/16(月) 20:39:38
[1] 授業単元:情報基礎C [2] 問題文:半径8cm、高さ15cm、円周率3.1415926 上記を用いて円柱、円錐、球の体積を求めよ [3] 環境 [3.1] OS: winXP [3.2] ちょっと分りません [3.3] c/c++コンソールアプリケーション [4] 期限: 2006年01月30日 [5] その他の制限:特に無し お願いします。。。
sage忘れスマソ
( ・∀・)つ[紙とペン]
>>827 こんなんでいいのか? ミ ゚ 仝゚ミ
#include <stdio.h>
int main(){
double r=8.0;
double h=15.0;
double pi=3.1415926;
printf("円柱の体積(cc)=%lf\n",pi*r*r*h);
printf("円錐の体積(cc)=%lf\n",(1.0/3.0)*pi*r*r*h);
printf("球の体積(cc)=%lf\n",(4.0/3.0)*pi*r*r*r);
return 0;
}
>>828 言おうと思ったこと先に
>>829 に言われたからプログラムの方書く
#include <stdio.h>
#define PI 3.1415926
double get_cylinder_volume( double height, double radius )
{
return radius * radius * PI * height;
}
double get_cone_volume( double height, double radius )
{
return get_cylinder_volume( height, radius ) / 3;
}
double get_sphere_volume( double radius )
{
return radius * radius * radius * PI * 3 / 4;
}
int main( void )
{
double height = 15;
double radius = 8;
printf( "円柱\t%lf cm3\n", get_cylinder_volume( height, radius ) );
printf( "円錐\t%lf cm3\n", get_cone_volume( height, radius ) );
printf( "球\t%lf cm3\n", get_sphere_volume( radius ) );
return 0;
}
>>810 空要素の定義がないから適当だお。
#include <stdio.h>
int del(int a[], int size, int idx)
{
int i;
if(idx < 0 || idx >= num) return -1;
for(i = idx+1; i < num; i++) a[i-1] = a[i];
return 0;
}
int ins(int a[], int size, int idx, int data)
{
int i;
if(idx < 0 || idx >= num) return -1;
for(i = idx+1; i < num; i++) a[i] = a[i-1];
a[idx] = data;
return 0;
}
int main(int argc, char **argv)
{
int a[] = {1,3,5,7,9,0,2,4,6,8};
del(a, sizeof(a)/sizeof(a[0]), 3); /* 配列aの4番目の要素を削除 */
ins(a, sizeof(a)/sizeof(a[0]), 6, 10); /* 配列aの7番目に10を挿入 */
return 0;
}
感謝します!お世話になりました。
834 :
832 :2006/01/16(月) 20:59:55
× size ○ num これだから脳内コンパイラは…
835 :
732 :2006/01/16(月) 21:10:06
>>734 >>739 ありがとうございます!かなり助かります。
また何かあったら宜しくお願いします
迷路といえば再帰と相場は決まっている。 安心しろ。
[1] 授業単元: 数値解析 [2] 問題文: d^2*f/d*x^2 + d^2*f/d*y^2 = 0 境界条件 f(0,y)=10 f(10,y)=5 上記の偏微分方程式を有限要素法により求めるプログラムの作成。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc borland 言語: C [4] 期限: 明後日まで [5] その他の制限:特になし
>>838 有限要素法とやらの参考ページを付けろ
それがない限りおそらくスルーされる
>>836 賞味期限1年前か。
それはさておき、おもしろそうなんじゃが、今日は○×時代(
>>377 出題)のように熱くなれる時間が無い…
今回はおとなしくROMっておきます。
★ ┌ ┐
└ ─ ┐ │ │
└ ┘ ☆
蛇足だけど、今はものすごく、この部分の表示を作りたい。
843 :
808 :2006/01/16(月) 22:34:17
Aお願いします・・
845 :
840 :2006/01/16(月) 22:53:19
>>808 /2
#include<stdio.h>
int main(void){
double y,d,e,w,p;
int c;
char *s[]={"円","ダラ","ユロ","ヲン"};
d=360.0;
e=130.0;
w=0.001;
scanf("%lf",&y);
printf("「1・ドル 2・ユーロ 3・ウォン」");
scanf("%d",&c);
switch(c){
case 1:p=d;break;
case 2:p=e;break;
case 3:p=w;break;
default:p=1.0;c=0;
}
if(c)printf("%.0f円は%.2f%sです。",y,y/p,s[c]);
return 0;
}
http://quote.yahoo.co.jp/q?d=t&s=USDJPY=X http://quote.yahoo.co.jp/q?d=t&s=EURJPY=X http://quote.yahoo.co.jp/q?d=t&s=KRWJPY=X 使わない部分があるが気にしないでくれ
847 :
841 :2006/01/16(月) 23:23:51
>>845 お、お願いしたわけじゃ…ないんだからね!
誤解しないでよ!
848 :
デフォルトの名無しさん :2006/01/16(月) 23:53:01
ウォンって通貨単位が不愉快
>>848 またお前か
その課題作った奴の名前とお前の学校教えろ
>>850 またってことは前に出てたのでしょうか?
とりあえずこのスレだけで過去スレ読んでなかったので読んでみます
>>848 例にならった形なら16進こんな感じかな?(8進は自明)
一応エラーメッセージは同じだし、2個所直すと11桁目(intが32bitの場合)からバグるのも同じ。
バグり方は違うけど、そこは勘弁して。
#include<stdio.h>
main()
{
int dec, bit, coef=0;
char hex[11]={0}, endchar;
do{
scanf("%d%c",&dec,&endchar);
printf("%3d\t",dec);
while(dec ! = 0) {
bit = dec % 16;
dec \ = 16;
hex[coef] = "0123456789ABCDEF"[bit];
++coef;
}
printf("%10s\n", hex);
} while(endchar != '*');
}
2進、8進、16進まとめて表示 #include <stdio.h> char *get_binary_expression( int n ) { static char buf[ 1024 ]; char *end = buf + sizeof(buf) - 1; *end-- = '\0'; while ( buf != end ) { *end = '0' + n%2; if ( n < 2 ) break; n /= 2; --end; } return end; } static void print_result( int n ) { printf( " %d\t%s\t%o\t%X\n", n, get_binary_expression( n ), n, n ); } int main( void ) { char buf[32]; int a; while (1) { fgets( buf, sizeof(buf), stdin ); if ( buf[0] == 'q' ) break; sscanf( buf, "%d", &a ); print_result( a ); } }
856 :
N :2006/01/17(火) 00:45:29
すいませんが質問です. c:\a.txt の場所にtextファイルがあります. このtextファイルを読み込んで配列に格納したいのですがうまくいきません. a.txtファイルには 1 1 1 12 15 1 1 2 13 14 1 1 3 24 36 のように一行に五つの数字があります. これを a[1],b[1],c[1],d[1],e[1] a[2],b[2],c[2],d[2],e[2] a[3],b[3],c[3],d[3],e[3] の配列に格納していきたいのですがどのようなアルゴリズムを組めばいいのか教えてください. c++で,MFCを使うのですが… CFile file("c:\\a.txt", CFile::modeRead ); CArchive ar(&file, CArchive ::load); … … このやり方を誰か教えてください.
全角なのか、そうなのか。
858 :
お助けを :2006/01/17(火) 01:28:04
>>848 なんだこの分かりにくい例は
ビット演算の方が遥かに分かりやすいわ
テンプレの守らん奴への戻り値は0でいいと思うよ
[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; }
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日まで 何とぞお手柔らかにお願いします!
864 :
お助けを :2006/01/17(火) 06:10:21
>>864 今日までじゃん。
せめて夜に頼めばよかったのに。
866 :
デフォルトの名無しさん :2006/01/17(火) 09:38:17
867 :
デフォルトの名無しさん :2006/01/17(火) 10:45:10
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] コンパイラ名とバージョン:Microsoft Visuaal Studio
[3.3] 言語: C++
[4] 期限: 1月23日
[5] その他の制限:
>>761 ではだめだったのでもう一度お願いします
>>852 ありがとうございます。いろいろありましたが、今後ともよろしくお願いします。
870 :
RE:856 :2006/01/17(火) 11:20:42
[1] 授業単元: プログラム [2] 問題文:下に書いてある通りです。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: VC++ 6.0 [3.3] 言語:C++ [4] 期限:1月19日 [5] その他の制限: なし、できればよいので。 c:\a.txt の場所にtextファイルがあります. このtextファイルを読み込んで配列に格納したいのですがうまくいきません. a.txtファイルには 1 1 1 12 15 1 1 2 13 14 1 1 3 24 36 のように一行に五つの数字があります. これを a[1],b[1],c[1],d[1],e[1] a[2],b[2],c[2],d[2],e[2] a[3],b[3],c[3],d[3],e[3] の配列に格納していきたいのですがどのようなアルゴリズムを組めばいいのか教えてください. c++で,MFCを使うのですが… CFile file("c:\\a.txt", CFile::modeRead ); CArchive ar(&file, CArchive ::load); … … このやり方を誰か教えてください.
cout << accumulate(lst.begin(),lst.end(),0) << endl;
872 :
822 :2006/01/17(火) 11:51:39
>>823 返答ありがとうございます
ただ、どのようなプログラムになるのか
全く想像がつかないのです
そんなわけで、
プログラムの雛形を提示していただけると助かるのですが
どうか助けてください。
>>870 そのa.txtとやらの仕様を詳しく記述せよ
874 :
お助けを :2006/01/17(火) 12:22:27
皆さんありがとうございます。 なんとかできそうです。お世話になりました。
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):下記参照
[3] 環境
[3.1] OS:(Windowsxp)
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C/C++
[4] 期限: 2006年1月18日(明日)まで
[5] その他の制限: 特になし
0と1を使用した32桁の文字列を入力
0が1つの場合1と置く 0が2つ連続すると2と置く 0が3つ連続すると3と置く
0が4連続=4 0が5連続=5 0が6連続=6 0が7連続=7 0が8連続=8 0が9連続=9
1が1連続=a 1が2連続=b 1が3連続=c 1が4連続=d 1が5連続=e
1が6連続=f 1が7連続=g 1が8連続=h 1が9連続=i
上のように変換した文字列を表示する
(0や1が10個以上連続した場合下の例のように置き換える
{例}1が12個連続→1が9連続のiと1が3連続のcに置き換える
)
最後に最初に入力した0と1を使用した32桁の文字列を表示
全体的の例
11111001100000000000000111111110 ・・・(1)
e2b95h1 ・・・(2)
11111001100000000000000111111110 ・・・(3)
条件の付けたし{(2)で出力した文字列を用いて(1)と同じ文字列を(3)に出力してください}
前スレの
>>540 ですが、上の条件を満たしてつくらなければいけないことを言われたのでよろしくお願いします。
なんどもなんどもすみません。
ちなみに
>>876 の全体的の例の
・・・(1)
・・・(2)
・・・(3)
は出力に必要ないです。
878 :
N :2006/01/17(火) 13:04:59
a.txtの中身はこのようになっています. これを列ごとにそれぞれの配列に上から番号順(0〜)に入れていくのですが,どのようにしたらいいのか教えてください. 1 1 1 416 228 1 1 2 403 229 1 1 3 388 229 1 1 4 374 229 1 1 5 360 229 1 2 1 417 214 1 2 2 403 213 1 2 3 390 214 1 2 4 375 214 1 2 5 361 214 1 2 6 346 215
そもそもMFCなぞスレ違いな訳だが C標準、C++標準なら回答できたものを
>>876 前スレの回答のどこが不満なのかわからない。
>条件の付けたし{(2)で出力した文字列を用いて(1)と同じ文字列を(3)に出力してください}
このへんは満たしてるし。
ttp://pc8.2ch.net/test/read.cgi/tech/1133778112/695 #include <stdio.h>
#include <string.h>
int main(){
int i,l;
char ins[256],outs[256];
scanf("%s",ins);
l = strlen(ins);
for(i=0; i < l;++i){
outs[l-i-1] = ins[i];
}
outs[l] = 0;
printf("%s",outs);
return 0;
}
>>880 そうなんですか?わかりました。
どうも迷惑かけました。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 配列の中に保存されている整数の最大のものとその要素番号とを 出力するプログラムを作りなさい。 ただし、ポインタを使うこと。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月18日18:00まで [5] その他の制限: すいませんがよろしくおねがいします。
>>883 全部ポインターで書くとわかりづれえな ミ゚仝 ゚ ミ
#include <stdio.h>
#include <limits.h>
int SearchMax(int *p, int num)
{
int i, max, loc;
max=INT_MIN;
for ( loc=i=0; i<num; i++, p++ ) {
if ( *p > max ) {
max=*p;
loc=i;
}
}
return loc;
}
int main()
{
int p[5]={-666,666,-666,666,-666};
int max;
max=SearchMax(p,5);
printf("max: p[%d] = %d\n",max,*(p+max));
return 0;
}
885 :
デフォルトの名無しさん :2006/01/17(火) 17:06:13
( ゚Д゚)文字化けしてるー(´゚c_,゚`)
887 :
デフォルトの名無しさん :2006/01/17(火) 17:43:22
学校の恥晒しになるから校名を特定できるアドレス使うな
それ言わなければ気づかないやつもいるのに なんで言っちゃうかなぁ(;´Д`)
とりあえず、学校宛てにメール送っておいたほうがいいかな。
そんなにやりたくないのかお前ら
892 :
デフォルトの名無しさん :2006/01/17(火) 18:18:33
>>891 やりたくなるような宿題を持ってこい。退屈するだろう。
依頼者が美人女子大生だったら今すぐにでもC++を勉強して回答するッ!
依頼者が美人女子大生だろうが今すぐにC++勉強する気はない
>>887 一カ所にまとめて全部書きなおせ
・Studentクラスが保持しなければならないデータメンバとインターフェース
・入力データ
・何処まで使っていいのか(STL/boost/etc...)
最近流れが速くてこたえる気になれないな・・・ まあ,俺のでる幕がないということか
897 :
デフォルトの名無しさん :2006/01/17(火) 18:48:38
>>892 いやいや、見てる感じ答えてるほうも口だけが多いじゃん。
簡単なのにしか教えてねーし。
有限要素法ぐらいしっとけ。
有限要素法なんざ授業でやったっきり忘れましたが何か? つーか,ここに常駐してる人間はふつー有限要素法なんか習わんと思うぞ
900 :
デフォルトの名無しさん :2006/01/17(火) 18:53:41
おれは情けなくなってきた
数値計算とか自分の宿題じゃないとググりたくねーし
計算法は載せるのが普通では? いきなり何とかの定理で計算とか言われても分からん。
バカばっかり。 俺がやってやろうか?
>>898 >有限要素法は、計算機により構造物の変形や応力を解析するための近似解析手法
材物板住人でなければ物理板の住人でも無いんだから知るかよ
前振りするやつはやらない
906 :
yu- ◆gR613BN6BY :2006/01/17(火) 19:50:28
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):ポーカーゲームを作れ(仕様書も [3] 環境 [3.1] OS: windows2000 [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: ([2006年1月20日23:59 [5] その他の制限:「相手との勝負」があればきわめて単純でかまわない。ワンペア、ツーペア、スリーカード程度までの単純な役があればよい よろしくお願いします
さっさと答えろやクズ共
typedef enum{onepea,twopea,threecard}Yaku a; if(a==0)puts("ワンペア");
printf("花京院の魂も賭けますか?\(y,n\):");
[1] 授業単元:コンピュータ基礎 [2] 問題文:文字列s[]から変数cに入力した文字を全て取り除く関数DelCh(s,c)を作りなさい。 c = 'a'としたとき <実行例> Input String:C-language Output string:C=lnguge [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 17日の23:59分まで [5] その他の制限:表示させるのはmain関数でお願いします。ポインタを使用してでお願いします。
実行例がずれてしまって申し訳ありません。
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): 正方形の一辺の長さn(n>0)を入力して,その大きさを持つ正方形を文字AとCを使用して出力するプログラムを書け。 例えばnの値が5であるときは,次のように出力されるはずである。 AAAAA ACCCA ACCCA ACCCA AAAAA [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC6.0 [3.3] 言語:C++ [4] 期限: 一月下旬 [5] その他の制限:特になし。よろしくお願いします。
913 :
デフォルトの名無しさん :2006/01/17(火) 21:44:35
>>912 #include <stdio.h>
void draw_rectangle(int n)
{
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i == 0 || i == n-1 || j == 0 || j == n-1)
putchar('A');
else
putchar('C');
}
putchar('\n');
}
}
int main()
{
int n;
printf("正数を入力してください: ");
scanf("%d", &n);
draw_rectangle(n);
return 0;
}
915 :
915 :2006/01/17(火) 21:56:34
[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; }
916 :
915 :2006/01/17(火) 21:57:25
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日まで 何とぞお手柔らかにお願いします!
>>910 #include <stdio.h>
void DelCh(char *s, char c){
char *p, *q;
p = q = s;
while(*p != '\0'){
if(*p != c){
*q = *p;
q++;
}
p++;
}
*q = '\0';
}
int main(void){
char s[32], c, *r;
printf("Input String:");
gets(s);
printf("Input Char:");
scanf("%c", &c);
DelCh(s, c);
printf("Output String:%s", s);
return 0;
}
>>915 一回以下のプログラムで実行してみる。
#include <stdio.h>
int ch;
void getch0(void) {
ch = getchar();
}
int expression(void);
int factor(void) {
int val;
printf("factor\n");
if(ch >= '0' && ch <= '9') {
val = ch-'0';
getch0();
}
else if(ch == '(') {
getch0();
val = expression();
getch0();
}
return val;
}
int term(void) {
int val;
printf("term\n");
val = factor();
while(ch == '*') {
getch0();
val = val * factor();
}
return val;
}
int expression(void) { int val; printf("expression"); val = term(); while(ch == '+') { getch0(); val = val + term(); } return val; } int main(void) { printf("expression? "); getch0(); printf("value=%d\n", expression()); } わからなければ、実際に計算している前後でも出力してみる(valなど)。
[1] 授業単元:情報処理 [2] 問題文 タブ区切りで10個の数字が並んでいるtxtファイル 21 34 4 145 … こんな感じで一行です。桁はまちまち が5つありそこから、10行 5列にひとまとめにして、csvで出力しなさいというのです [3] 環境 [3.1] OS:Windows XP [3.2] VC++ 6.0 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:1月20日 [5] その他の制限:特になし おながいします…
>>920 いや、言語わかんないし
10個の数字を10*5のcsvにしろってのもよく分らないし
<printf("expression"); >printf("expression\n");
923 :
920 :2006/01/17(火) 22:32:43
>>921 言語はCでおながいします
10個の数字が書いてあるファイルが5つあって
それをひとまとめにして一つのファイルにしてくださいという感じです
[1] 授業単元:情報処理
[2] 問題文 タブ区切りで10個の数字が並んでいるtxtファイル
21 34 4 145 … こんな感じで一行です。桁はまちまち
が5つありそこから、10行 5列にひとまとめにして、csvで出力しなさいというのです
[3] 環境
[3.1] OS:Windows XP
[3.2] VC++ 6.0
[3.3] 言語: C
[4] 期限:1月20日
[5] その他の制限:特になし
>>923 ゴメン2つ目のは俺がちゃんと読んでないだけだった
926 :
920 :2006/01/17(火) 22:37:22
>>924 入力ファイルはdata1.txt data2〜data5という感じで連番になっています
出力のファイル名は多分なんでも大丈夫です
>>925 いえいえとんでもないです、文が分かりにくくて申し訳ないです
927 :
デフォルトの名無しさん :2006/01/17(火) 22:39:29
【質問テンプレ】 [1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): 任意の文字列を読み込んで、中央の文字を堺に、その前後を入れ替えるプログラムを作成せよ。 文字列の最大長さは255文字とせよ。もし、文字列の長さが奇数の場合は、中央の文字は、移動させずにそのままとすること。 入力した文字の長さが、最初に偶数か奇数か判断すると良い。 [3] 環境 [3.1] os:Windows xp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: 2007年1月23日10時まで [5] その他の制限: 本当に基本でpritfやscanfやfor文とかやりました。 あと、文字と文字列、配列、剰余演算子、strlen関数、for文を理解すること と書いてあります。 途中まであります。 #include 〈stdio.h ) main() { int i,j,k,1; char ins[256],outs[256]; printf(“input string:“) ; scanf(“%s”,ins) ; 1=strlen(ins) ; おねがいします!
>>920 int a[5], n;
FILE *fp;
while ((n = fscanf(fp, "%d%d%d%d%d", &a[0], &a[1], &a[2], &a[3], &a[4])) == 5) {
printf("%d,%d,%d,%d,%d\n", a[0], a[1], a[2], a[3], a[4]);
}
929 :
ひよこ :2006/01/17(火) 22:52:29
visualC と C は別物なんですか?
930 :
ひよこ :2006/01/17(火) 22:55:05
別で聞きます。酢間祖
>>927 しばらくは手をつけなくても良さそうだね
>>931 てか1年間もあるとそのまま忘れられそう
>>927 やってみたけど駄目だぁ
入れ替えはできるけど位置が間違ってるw
>>927 #include <stdio.h>
#include <string.h>
int main()
{
char s[256];
int len;
int i;
char tmp;
printf(" input string: ");
scanf("%s",s);
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;
}
別に奇偶判定の必要なかったが
>>934 そうゆう意味だったのかぁ、
漏れはてっきり前後一文字だけかと思ったwwww(⊃Д`)恥ずかしぃ
>>917 さんありがとうございます。
これ見ながらもう一度考え直しますノシ
937 :
920 :2006/01/17(火) 23:18:46
>>928 ありがとうございます(TдT) アリガトウ
これはfpにはどうやって値を入れればよいのでしょうか…
C++解答者って少ないのか。 言語 C++と書いてあったので、 喜び勇んでSTLだらけなコードを書いたら拒絶された。
>>927 >>934 修正
for (i = 0; i < len/2; ++i) {
tmp = s[i];
s[i]=s[(len-1)/2+(len-1)%2+i];
s[(len-1)/2+(len-1)%2+i] = tmp;
}
>>935 あ、前後1文字ってことか?よくわからん。
それならこっち
#include <stdio.h>
#include <string.h>
int main()
{
char s[256];
int len;
int i;
char tmp;
printf(" input string: ");
scanf("%s",s);
len = strlen(s);
if (len%2 == 0) {
tmp = s[len/2];
s[len/2] = s[len/2-1];
s[len/2-1] = tmp;
}
printf("output string: %s\n", s);
return 0;
}
941 :
915 :2006/01/17(火) 23:29:45
>>937 (920) そこまで分かっているなら、手持ちのfopen()つかってるプログラムを参考にしてくれ。
>>938 勉強になるから問題に気づいたら考えては見るが
そもそも問題自体がそんなになくね?
>>938 このスレでの話なら、その通り。私も何度も書き直した回答者の1人。
C++をbetter Cとしてしか使わない質問者や出題者があまりにも多い。
945 :
920 :2006/01/17(火) 23:38:26
>>942 なるほど、ではガンガッテやってみます。ありがとうございました。
徹夜すれば今日中に何とか終わらせられそうです。
30分切ってるぞ
>>939 そういう意味だったのか。
でも、それだと真ん中も変わっちゃう
for (i = 0; i < len/2; ++i) {
tmp = s[i];
s[i]=s[(len+1)/2+i];
s[(len+1)/2+i] = tmp;
}
>>944 そこらへんのC++の入門書らしきものはみんな
まずテンプレートが後回しで、それに引きずられてSTLも後のほうに回される。
iostreamがクラステンプレートだという話も滅多に出てこない。
まして学校の授業でそこまで到達するわけがないというところだろう。
#全然関係はないけれどC++のiostreamは仮想継承の説明にもってこいだと思うんだけどな。
>>945 これじゃだめ?
#include <stdio.h>
int main(void) {
int i, c;
char filename[16];
FILE* srcfp, *destfp = fopen("data.csv", "w");
for (i = 0; i < 5; i++) {
sprintf(filename, "data%d.txt", i + 1);
srcfp = fopen(filename, "r");
for (; ; ) {
if ((c = fgetc(srcfp)) == EOF) break;
if (c == '\t') fputc(',', destfp);
fputc(c, destfp);
}
fclose(srcfp);
}
fclose(destfp);
return 0;
}
まあ、大学で1年プログラム勉強するとして週1コマ講義1コマ演習の30週くらいだから。 はじめて言語ふれる人が90時間くらいじゃそんなもんでしょ。classまで行かん気もするが。
>>948 もう教科書はAccelerated C++にすりゃいいんじゃね
憂鬱本→独習C++だとただ何となく面白そうという印象しかなかったが
その後にAccelerated読んで世界が変わったな
>>948 まず配列としてstd::vector<>を使う、みたいなことしてもいいと
思うんだが。たしかAccelerated C++とかそうじゃなかったっけ?
あれ初心者が読むのは無理ではあるが。
>>945 完成形の形になってる!!!!!111
ほんとありがとうございます、すぐに試してみます有り難うございます!
955 :
デフォルトの名無しさん :2006/01/18(水) 00:44:17
[1] 授業単元: プログラミング1 [2] 問題文含: スロットマシーンを作成せよ [3] 環境 [3.1] OS:windows [3.2] VC 6.0 [3.3] 言語:C [4] 期限: [5] 習い始めたばかりです。この問題を3日前に提出しろといわれて、 今日が期限になってしまいました。藁にもすがる思いです。どうかお願いします。
956 :
デフォルトの名無しさん :2006/01/18(水) 00:57:24
[1] 情報処理 [2] ヒープソートによって昇順にソートするプログラムを作る [3] 環境 [3.1] OS:windowsXP [3.2] VC++ 6.0 [3.3] C [4] 期限: とくに無しです [5] 関数呼び出し、while文、if文、for文などのできるだけ簡単なのを使って欲しい。 ソートするのは、配列data[]の中身{7,5,9,1,2,8,3,6,4}で。
>>938 「習った範囲」もしくは「習っていなくても本人が理解している」という前提がつくからかと。
習っていないSTLを理解できる人間は、こんなところで質問しませんわね。
>>955 それなに?GUIで作れってことか?
てか始めたはかりにしてはその課題うざいな
ランダムで数字3つ表示させればいいんじゃね? 知らんけど
ヒープソートシラネ┐(´∀`)┌
961 :
955 :2006/01/18(水) 01:03:28
ごめんなさい環境は
[3.2] VC++
でした。
>>958 GUIという言葉ググって初めて知りました(笑)
はい。グラフィックを使って作成しなくちゃならないんです・・・
これ誰もやらない予感
exeファイルのソースを見ることができる方法はありませんか?
>>956 #include <stdio.h>
void heapsort(int arr[], unsigned int N) {
unsigned int n = N, i = n / 2, parent, child;
int t;
for (; ; ) {
if (i > 0)
t = arr[--i];
else {
if (--n == 0) return;
t = arr[n]; arr[n] = arr[0];
}
parent = i; child = i * 2 + 1;
while (child < n) {
if (child + 1 < n && arr[child + 1] > arr[child]) child++;
if (arr[child] > t) {
arr[parent] = arr[child];
parent = child; child = parent * 2 + 1;
} else break;
}
arr[parent] = t;
}
}
int main(void) {
int a[] = {5, 1, 4, 2, 3}, i;
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d ", a[i]);
printf("\n");
heapsort(a, sizeof(a) / sizeof(a[0]));
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d ", a[i]);
return 0;
}
>963 ソースを持っている人に頼む
966 :
964 :2006/01/18(水) 01:20:29
>>956 すまん、aをdataに、配列の中身をそれに書き換えてくれ。
>>963 『CやC++のソースファイルとして』という意味ならば、
>>965 以外にない。
アセンブリを読んで自分でCに書き下すのも一手。ただし、非常に手間と
時間がかかる。
>スロット ダイアログボックスベースのプログラムで、 スロットの数字表示にボタンコントロール3つ。 タイマーでボタンのテキストを変更。 ボタンを押されたらボタンを無効化 とか、そんなもんだろ。
[1] 授業単元:プログラミングII演習 [2] 問題文(含コード&リンク): 自分の好きな野球チームの選手名、背番号、ポインタの入る構造体を 9つ作り打順通りのリニアリストを作れ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 2006/1/24/ [5] その他の制限: リニアリストがよくわからないのでお願いします
struct LinerList { char namae[100], sebangou[10]; struct LinerList *pointer } linerlist[] = { /* 好きなチームがないのでリストを作れません */ "itiban san", "12", &linerlist[1]; "niban san", "34", &linerlist[2]; /* 略 */ "ku san", "1001", NULL]; };
/*キャラエディットの選手名って悩むよな*/
寝ぼけてるな。配列内の;は,だ。
>>972 ついでに、Linearだし、{}が足りないし、]になってる。
スロットマシンは無理ですか・・・
自分の好きな野球チームのポインタって何?
スロットマシンとか無理だろ。 金払ってもらわないとやる気しないよ。普通に。
基本的にめんどくさがり多いのでGUIはまず回答返ってこない
bmpとかの画像キャラクターをウィンドウ上で左右に動かすのも難しいですか?
実際ウィンドウ出すのが面倒い。てゆか Windows 起動するのが面倒い。
てゆーかwindow出す部分のみですら書きたくないw
可哀想だから2日後卒研のプログラム提出なければやってあげたいんだけどな・・・ なんでこんなギリギリに来たんだ
>>981 そうですよね・・。自分なりに2日間は調べて頑張ってみたんですけど
全然お手上げ状態で(悲)
本当に GUI を要求されているのか? ランダムに数字三つ出して、そろったらおめでとう!って表示する みたいなんでいいんじゃないのか? あるいは、Java アプレットの宿題じゃないのか? 勉強始めたばかりのやつにそんな課題出すヤツいないだろ。
VC++とか前のレスで書いてたからCだとは思うけど それにしても入門じゃないな てかCで習いはじめでGUIとかありえん
>>983 「スロットマシーンを作成せよ」だけだったので
多分それでいいのだと思います。window上にそれを出すのは
できますか?
>>985 なんでお前はウィンドウ上に出したがるんだ。
普通初心者に課題を出すときそんなこと要求しないから。
コンソール (コマンドプロンプト) に表示するだけでいいんだろ、たぶん。
>>985 今まで授業で何を習ったかおおまかに言ってみ?
window上に絵を書いたり その後動くボールだとかアニメーションをやってました。
完全にGUIだなもうダメポ
まー、この時間から寝ると死ぬのでやれるだけやってみようか・・・。
>>989 次のことをして欲しい
・習った、作った、資料として渡されたプログラムのソースをup
・次スレを立てる
余談だが、コンソールならconio.h読んで、_kbhit()、_getch()を使う。
コンソールでキーイベント検知する方法を今始めて知った
C++とか以前に何includeしてるんだか俺にはわからん
うpもうちょいまってください
独自ライブラリか。厄介だな。いや、無理だな。
C言語グラフィックス教材専用を見て大笑いした。 WinMainとか、WinProcとか無いのはいいんだけど、 Windowsにべったりやんけ。 んで、当たり前だけど、そのC言語グラフィックス教材専用のライブラリが無いと、組めませんぜ?
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。