1 :
デフォルトの名無しさん :
2007/07/15(日) 22:31:51
2 :
デフォルトの名無しさん :2007/07/15(日) 23:25:54
3 :
デフォルトの名無しさん :2007/07/16(月) 00:05:11
[1] 授業単元:コンピュータ基礎 [2] 問題文: ニュートン法により、√2の近似値を求めよ。 [3] 環境 [3.1] OS: (Windows Vista business) [3.2] コンパイラ名とバージョン: (gcc 2.95.2) [3.3] 言語: (C言語) [4] 期限: (7月19日まで][5] その他の制限:プログラミングについて全く無知です。 授業であまり文法の説明とかもなくいきなり課題を提示されたのですが、全くわかりません。 後学の為にも、どなたか作った後教えて下さい。お願い致します。
初心者で悪いんだが
>>2 のマージソートは再帰するからいいんじゃないの?
5 :
デフォルトの名無しさん :2007/07/16(月) 00:23:23
再帰を使わずに、でお願いします
>>3 #include <stdio.h>
double sqr(double c);
int main(){
double c;
c = sqr(2);
printf("√2は%fです。\n", c);
return 0;
}
double sqr(double c){
double xn;
int i,n;
n = 10;
xn = 0;
do {
xn += 1;
} while (xn * xn < c);
for (i = 0;i < n;i++) {
xn = (xn + c / xn)/2;
}
return xn;
}
これでいいよ
8 :
デフォルトの名無しさん :2007/07/16(月) 01:06:00
>>6 ありがとうございます。
とても初歩的な質問なんですが、
2行目のdouble sqr(double c);にはどんな意味があるんですか?
doubleが倍精度って…言葉だけは知ってるのですが。
何を言っているんだ
このスレで聞くより、まず参考書読んだほうが良い。 それでわからないことがあったらスレで聞く。
11 :
6 :2007/07/16(月) 01:10:23
>>7 えっそうなの?
ずっとこれがニュートン法だと・・・・
12 :
デフォルトの名無しさん :2007/07/16(月) 01:12:36
>>7 そうなんですか?
ニュートン法で√2を求める場合、
f(x)=x^2-2=0として解けばいいんですよね。
どうプログラムすればいいんですかね?
7じゃないが、最後のforループはどういう意味?
14 :
6 :2007/07/16(月) 01:29:38
交点の座標を詳しく求めてる 俺工房だから間違えてるのかもしれない
[1] 授業単元: プログラミング [2] 問題文: ①標準入力から入力される文字列(英小文字のみ)をchar型の配列に格納し、各アルファベットの数を表示するプログラムを作れ。 ただし、0個のアルファベットについては表示させないものとする。 例:this is very nice book(入力後EOF) b=1 c=1 e=2 h=1 (後略) ヒント:要素が26個の配列を用意し、それぞれのアルファベットをカウントする。 文字コードを利用すれば、"a"-"a"=0であり、"b"-"a"=1である。 ②数字によって構成される文字列をchar型配列へ読み込み、それをint型のデータに変換する関数toatoi()を作れ。 ただし、文字列中に数字以外の文字がある場合は戻り値を-1として返すように設定せよ。 さらに、toatoi()を利用して標準入力から与える文字列を数値とし、printfの%dを用いて表示するプログラムを作成せよ。 ③最大10文字50行の文字列を読み込み、縦に変換して出力するプログラムを作成せよ。 例: 0001(改行)1100(改行)2222 と入力 102(改行)009(改行)012(改行)012 と出力 配列の項目なので、配列を使用した解法を伝授お願いします [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:どちらでも可 [4] 期限:7/19 [5] その他の制限:無し 前スレ589の課題だったのですが、締め切りが延びたので再度質問しました どうかお願いしますorz
>>2 とりあえず関数だけ
#include <stdlib.h>
#include <string.h>
void arraycopy (int n, int *dst, int *src) {
memcpy (dst, src, sizeof(int)*n);
}
void mergesort (int n, int *a) {
int *b = calloc (n, sizeof(int)); /* temporal space */
int s = 1; /* segment size */
arraycopy (n, b, a);
while (s < n) {
int f; /* start of segments pair */
for (f = 0; f < n; f += 2*s) {
/* merge two segments b[f : f+s], b[f+s : f+2s] into a[f : f+2s] */
int i, i1, i2;
i = i1 = i2 = 0;
while (i1 != s || i2 != s) {
if (i2 == s || i1 != s && b[f+i1] <= b[f+s+i2]) {
a[f+i++] = b[f+i1++];
} else {
a[f+i++] = b[f+s+i2++];
}
}
}
arraycopy (n, b, a); /* copy a to b */
s *= 2;
}
free (b);
}
>>15 ①
これでいいかな?
#include<stdio.h>
int main(void)
{
char alpha[26] = {0};
char c;
int i;
printf(" Input: ");
do{
c = getchar();
if( 'a'<=c && c<='z' ){
alpha[c-'a']++;
}
}while( c!=EOF && c!='\n' );
for(i=0;i<26;i++){
if( alpha[i] ){
printf("%c = %d\n",i+'a',alpha[i]);
}
}
return 0;
}
>>15 ①
間違えていた
#include<stdio.h>
int main(void)
{
int alpha[26] = {0};
char c;
int i;
printf(" Input: ");
do{
c = getchar();
if( 'a'<=c && c<='z' ){
alpha[c-'a']++;
}
}while( c!=EOF && c!='\n' );
for(i=0;i<26;i++){
if( alpha[i] ){
printf("%c = %d\n",i+'a',alpha[i]);
}
}
return 0;
}
>>15 ②
#include<stdio.h>
int toatoi(char *str)
{
int num = 0, sign = 1;
if( *str=='+' ){
str++;
}else if( *str=='-' ){
str++;
sign = -1;
}
do{
if( *str<'0' || '9'<*str )
return -1;
num *= 10; num += *str++ - '0';
}while( *str!='\0' && *str!='\n' );
return sign * num;
}
int main(void)
{
char line[100];
printf(" Input: ");
fgets( line, sizeof(line), stdin);
printf(" 数値: %d\n", toatoi(line));
return 0;
}
>>6 x*x-c=0 限定なのは良いとしても,収束判定がまずい.
xn の初期値をそうとるなら sqr(100)とかは無駄に計算するし,sqr(1e-6)とかは精度が足りない.
double sqr(double c){
double x,xn=0,e = 1e-10;/* */
do {
xn += 1.0;
} while (xn * xn < c);
x = xn + 1.0;
while( fabs(xn - x) > e ) {
x = xn;
xn = (x + c / x ) / 2.0;
}
return xn;
}
[1] 授業単元:OS
[2] 問題文(含コード&リンク):
セマフォを使い親子プロセス間でのメッセージ通信を実現させよ。
親プロセスでメッセージを入力すると子プロセスで表示され、
子プロセスでメッセージを入力すると親プロセスで表示されるものとする。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 今日
[5] その他:前スレで助けてもらい、それにいろいろ付け加えたらコンパイルエラーはなくなり、
以下のようなプログラムになりました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4629.c しかし、これだと親プロセス内だけでの通信となってしまいます。
どなたかお力を貸してください!
よろしくお願いします
23 :
◆uaa3kJNAQA :2007/07/16(月) 10:01:22
[1] 授業単元: C言語 [2] 問題文 入力として英数文字(アルファベット、句読点等)の 文字列を受け取り、(入力終了はEOF) その文字列の中の英大文字を英小文字に変換した文字列を出力 する。文字セットはASCII方式を用いるものとし、 <ctype.h>の関数は使用しない。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 18日の23:00まで よろしくおねがいます。
24 :
デフォルトの名無しさん :2007/07/16(月) 10:55:39
#include <stdio.h> int main(void){ int i; char str[31]; printf("文字列入力\n"); fgets(str, 30, stdin); printf("入力文字列は %s です\n", str); for(i=0; i<31; i++){ if(str[i]>'A' && str[i]<'Z'){ str[i] += 32; } } printf("変換文字列は %s です\n", str); return 0; }
>>24 勝手に訂正
for(i=0; i<31; i++){
if(str[i]>='A' && str[i]<='Z'){
str[i] += 'a'-'A';
}
}
27 :
デフォルトの名無しさん :2007/07/16(月) 15:34:01
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt )
次の手順で動作するプログラムmergesort.cを作成し,その動作を確認せよ.
まずファイルから保存されているデータ数nを読み込み,次にその数だけデータを読み込み格納する.
次に,保存されたデータについてマージソートを実行する関数mergesort()を呼び出し,データを整列する.
最後に,整列されたデータをディスプレイ上に表示しプログラムを終了する.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語: C
[4] 期限: 7月22日
[5] その他の制限:結果がソートされていることをそれぞれのデータについて毎回確認すること. プログラム中で保存するデータは「ポインタを用いた線形リスト」で実現せよ.
解いてください。お願いします。
28 :
デフォルトの名無しさん :2007/07/16(月) 15:39:45
[1] 授業単元: プログラミング技術Ⅱ [2] 問題文(含コード&リンク): プログラム中でm×nの2次元の動的メモリ確保を行い、 その確保された変数の[i][j]の要素に、数値(i×n+j)を代入し、 結果を表示するプログラムを作成せよ。 (実行例) mの値を入力せよ:2 nの値を入力せよ:3 a[0][0]=0 a[0][1]=1 a[0][2]=2 a[1][0]=3 a[1][1]=4 a[1][2]=5 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C言語 [4] 期限: 7/19(木) [5] その他の制限: なし
29 :
デフォルトの名無しさん :2007/07/16(月) 15:48:38
[1] 授業単元: C言語基礎演習 [2] 問題文(含コード&リンク): n個の文字列を読み込み、読み込んだ文字列を縦に読む プログラムを作成せよ。 (空白、スペースを含む場合は空白、スペースを飛ばして表示) 但し、”ポインタのポインタ”をどこかに用いてプログラムすること。 「プログラムの動作」 何個の文字列を読み込みますか?:3 1番目の文字列:World 2番目の文字列:Cup 3番目の文字列:Soccer 1列目:WCS 2列目:ouo 3列目:rpc 4列目:lc 5列目:de 6列目:r [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C言語 [4] 期限: 7/17までにお願いします。 期限ぎりぎりですがよろしくお願いします。
C言語苦手だああああ
35 :
デフォルトの名無しさん :2007/07/16(月) 16:26:54
>>30 すいません、2次元配列さっぱり分からないもので、参考のページで
論議されている内容もさっぱり分かりません。
遅れましたが、前スレの748です 前スレ750さん、ありがとうございました ただ、使い方が良くわからないのでできればご指導願います
>>34 queue.h の中の
static int qfirst = 0, qlast = 0, qcount = 0;
の行は queue.c に移動したほうがいいんじゃね?
>>37 そういやそうだね。あとmakefileも微妙だったりゴミが混じってたりするけど気にしないでくれ。
というか、このくらいの問題に手も足もでない、自力でできないくらいじゃ 単位やらなくてもいいんじゃない?と俺は思うよ。
それには同意だが、そんなこと知ったことじゃないし、暇つぶしになるから問題なし。 #include <stdio.h> #include <stdlib.h> int main(void){ int m,n,i,j,**a; char buf[256]; printf("mの値を入力せよ:"); fgets(buf,sizeof(buf),stdin); sscanf(buf,"%d",&m); printf("nの値を入力せよ:"); fgets(buf,sizeof(buf),stdin); sscanf(buf,"%d",&n); a=(int**)calloc(m,sizeof(int*)); if(a==NULL){printf("メモリ確保失敗。\n");exit(1);} for(i=0;i<m;i++){ a[i]=(int*)calloc(n,sizeof(int)); if(a[i]==NULL){printf("メモリ確保失敗。\n");exit(1);} } for(i=0;i<m;i++)for(j=0;j<n;j++){ a[i][j]=i*n+j; printf("a[%d][%d]=%d\n",i,j,a[i][j]); } for(i=0;i<m;i++)free(a[i]); free(a); return 0; }
このスレは宿題を淡々を片付けるスレだから レベルが低かろうが高かろうがどうでもいいと思うぜ
42 :
デフォルトの名無しさん :2007/07/16(月) 17:14:32
[1] 授業単元:IT入門
[2] 問題文(含コード&リンク):
繰り返し複素数(実部,虚部はそれぞれ整数型とする)を入力し,ユーザが最後に1
(1+i*0)を入れたら今まで入力した複素数の実部と虚部のペアをすべて出力し,さらに
入力した複素数すべての積を出力するプログラムを作成せよ.
なお,ユーザが入力する回数に制限はないものとする.
stdio.hの他にstdlib.hをインクルードしておく必要がある.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 最新版
[3.3] 言語: C
[4] 期限:2007年7月21日
[5] その他:参考プログラム(
http://www-it.sci.waseda.ac.jp/ITB1/class1/list.c )を使ってください
43 :
デフォルトの名無しさん :2007/07/16(月) 17:15:08
>>40 ありがとうございます。
提出期限と同じ木曜日に出題されて今日まで連休中考えていたけど
配列はどうしても苦手で参考サイトを回ってみたけど、さっぱりでした。
>>39 それでも単位は欲しいのが大学生です。
44 :
42 :2007/07/16(月) 17:15:52
どうでもいいけど直リンだと2chでお願いしてるのがバレバレだよ。
どうせ誰がコピッたかなんて分かるわけが… ソース見りゃ分かるか。
>>29 ソース自体は書いたんだが、ポインタのポインタを有効に使う方法が思いつかないなぁ・・・。
48 :
47 :2007/07/16(月) 17:50:22
gets使うなよ。
そういう事は言ってやるなよ。 宿題丸投げする奴への餞別のつもりだろ。
申し訳ありません。宜しくお願いします 【質問テンプレ】 [1] アプリ開発 [2] OS内にあるサウンド出力プログラム作成 [3.1] Windows [3.2]eclipse バージョンは分かりません [3.3] どちらでもイイらしいです [4] 7/18(水) [5] スタイルシートを自ら作りSQLで模擬エクセル作成、バックトラック法、動的計算法はやりました
>>51 接続部位のデバイス設定をやりたいのか
WAVとかmp3とかの出力ファイルを作りたいのか
メディアプレイヤーとかのアプリを作りたいのかはっきりしろw
意味が中途半端で分からんw
ecliってCコンパイラあったのか? ちょっとしか触った事ないけどJava用IDEってイメージだった
>>51 eclipseならbccだろ?ちゃんと書いたほうがいいよ
55 :
36 :2007/07/16(月) 18:18:48
すいませんがどなたか使い方教えてください・・・
750 :デフォルトの名無しさん [sage] :2007/07/12(木) 13:00:15
>>748 ショボイですが
暗号
#include <stdio.h>
#include <ctype.h>
static char alpha[53] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static char table[53] = "zNFeYMljvJXKicfrGyDEOwQpHkCLbxhqRAPsnouVTaWIZdUmBStg";
int getindex(char *str, int ch){
int i;
for(i = 0; i < 52 && str[i] != ch; i++) ;
return i;
}
int main(int argc, char *argv[]){
FILE *fpin, *fpout;
int ch, op;
if(argc < 3 || (fpin = fopen(argv[1], "r")) == NULL || (fpout = fopen(argv[2], "w")) == NULL) exit(1);
while((ch = fgetc(fpin)) != EOF)
if(isalpha(ch)) fputc(table[getindex(alpha, ch)], fpout);
else fputc(ch, fpout);
fclose(fpin), fclose(fpout);
return 0;
}
57 :
56 :2007/07/16(月) 18:19:44
>>55 「main」関数に「引数」があるわけだな
ぐぐってみろ
ぐぐってまったく意味不明だったら答えてやる
>>51 ちょwwwそれ宿題ってレベルじゃねーぞw どこの学校だよw
60 :
56 :2007/07/16(月) 18:25:29
訂正、下の方の putchar(str[j][i]); の行を if(str[j][i]!='\0')putchar(str[j][i]); にしといて。
>>55 問題文もくれなきゃ何がしたいのかわからん。
ソース見る限り単一換字暗号?
>>51 多分これじゃダメなんだろうな
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
char cmd[10+FILENAME_MAX];
if(argc==2){
sprintf(cmd, "start %s", argv[1]);
system(cmd);
}
return 0;
}
>>61 任意の英文について、換字暗号表を用いて暗号化するプログラムと、
暗号化した文を同様の表を用いて解読するプログラムを作成せよ。
入力する文章と換字暗号表の形式は自由にしてよいものとする。(別に用意したテキストファイルから読み込む形のほうが好ましい)
例
abcd… という英文があったとき、換字暗号表がa→t b→y c→e d→k…だったなら、
tyek…と出力されるプログラム、またその逆操作するプログラム
という意味です。
という文章でお願いしたところ、
>>55 のような回答をいただきましたが、使い方がわかりませんでした
よろしくお願いします
65 :
51 :2007/07/16(月) 18:37:46
すいません 組み込み系です。
>>52 さんの言われている中では「接続部位のデバイス設定」になると思います
>>63 すいません OS無しで作る方法を・・・・・
OS無しとは、一気に難易度が上がったな。
>>51 UNIX板行った方がいいと思うよ あっちは組み込み系だから・・・・・・
その誘導のしかたもどうかと思う。
69 :
デフォルトの名無しさん :2007/07/16(月) 18:41:54
>>51 ちょwwどこの学校だ・・・・・今後の参考に教えてくれないか?
>>51 マジレス:卒業したら年収700万で雇うから来てくれ
housurejiak2245589761045@hotmell~
>>51 の学校で他人のソースコピペ無しで卒業なら、めちゃめちゃ優秀なマだな
>>51 君の学校は新しいOSを開発しているのか?
申し訳無いが、俺らはソフト屋だ。そっち側はまったく分からん
助けにならなくて申し訳ない
CPUの演算がどのように行われているのかをまず覚えよ 底辺マは出力結果にしか興味を持たない だからバグがでる
>>51 サウンドデバイスの IO の定義が無いとどうにもならない
最低限でも
1.音量設定の方法
2.周波数設定の方法
3.サウンドバッファへの書き込み&失敗検出の方法
くらいは必要だと思うよ
76 :
55 :2007/07/16(月) 19:05:29
>>58 ぐぐってみましたが意味不明でした…
すいません、教えていただけますか?
>>63 が駄目ならこれも駄目ってことか
OS無しって難しすぎだろ
PlaySound("c:\\windows\\media\\chimes.wav", NULL, SND_SYNC | SND_FILENAME);
>>76 ./a.out 変換元ファイル 変換後ファイル名
>>64 出てきたバイナリのコマンドラインに対象テキストファイル名と出力先ファイル名を追記。
例えばコンパイルして出てきたプログラムがa.exe、暗号化するテキストがbefore.txt、
出力先をafter.txtとするなら
a.exe before.txt after.txt
でafter.txtに暗号化済みのファイルが出力される。
逆操作は不可。そういう意味では
>>55 は要件を満たしていないね。
こんなとこに丸投げする人にいう事じゃないと思うけど
こんくらいのソース読めないでこれからやっていけると思ってる?
80 :
51 :2007/07/16(月) 19:12:04
すいません
やっぱり 自分でやってみます
自分で考えて解決しなきゃ成長しませんもんね・・・・・
色々ありがとうございました。
>>71 さん、心使いは嬉しいのですが学校で研究を続けるつもりなので・・・・
それと学校名は出せません。ごめんなさい
擁護するわけじゃないけど、コマンドライン引数の実際の使い方は教本によっちゃ物凄い投げやりだからな。 こんなんで分かればエスパーだろってぐらい。 で、分からんから後まわしにして課題出てくると四苦八苦するんだよな。
83 :
デフォルトの名無しさん :2007/07/16(月) 19:16:53
>>80 ここの方達が手上げてるのを完成させるの難しくない?
>>67 の行ってるUNIX板行った方がよくない?
>>81 前スレに同じのがあったから見てくるといいと思うよ。
LL構文解析懐かしすぎる
86 :
デフォルトの名無しさん :2007/07/16(月) 19:27:12
>>29 だれかお願いします。
>>47 ,48ががんばってくれたけど「ポインタのポインタ」使用版でないと
駄目な課題なので分かる方お願いします。
>>47 ,48
ありがとうございます。
orz
88 :
51 :2007/07/16(月) 19:32:53
自分も投げ出してたから人のこと言えないけど 時間かかってでも自分で考えて解決した方がいいと思う
>>78 その通りやっても出来ない・・・なぜでしょうか
>>90 次の一連のコマンドを打ち込んだ結果を晒してみて
echo hello>a.txt
./a.out a.txt b.txt
echo $?
cat b.txt
92 :
91 :2007/07/16(月) 19:59:42
最後に追加 ls -l a.out a.txt b.txt
C:\Documents and Settings\******>echo hello>a.txt C:\Documents and Settings\******>./a.out a.txt b.txt '.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:\Documents and Settings\******>echo $? $? C:\Documents and Settings\******>cat b.txt cat: b.txt: No such file or directory こうなりました
C:\Documents and Settings\******>ls -l a.out a.txt b.txt ls: a.out: No such file or directory ls: b.txt: No such file or directory -rw-rw-rw- 1 user group 7 Jul 16 19:59 a.txt 追加の分はこうなりました コマンドプロンプトで実行しました
95 :
91 :2007/07/16(月) 20:05:31
>>93 linux じゃなかったのかよ!
echo hello>a.txt
.\a.exe a.txt b.txt
type b.txt
dir
96 :
デフォルトの名無しさん :2007/07/16(月) 20:08:41
笑った。 どうみてもコマンドプロンプトかcygwinとかだね。
よく見てないけど。 if(buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = 0; ↑ifで判定する必要ない。
99 :
デフォルトの名無しさん :2007/07/16(月) 20:41:55
100 :
99 :2007/07/16(月) 20:52:38
>>42 コンパイルしていない
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _{ int r, i; } img;
static img *ary=NULL;
static int arysize;
static int arylen;
void putimg(img img){
if(arysize<=arylen){
arysize+=10;
ary=realloc(ary, sizeof(img)*arysize);
}
ary[arylen++]=img;
}
int main(void){
img m;
int i;
for(;;){
scanf("%d,%d", &m.r, &m.i);
if(m.r==1&&m.i==0) break;
putimg(m);
}
for(m.r=1, m.i=i=0;i<arylen;i++){
printf("%d+%d*i\n", ary[i].r, ary[i],i);
m.r=m.r*ary[i].r-m.i*ary[i].i;
m.i=m.r*ary[i].i+m.i*ary[i].r;
}
printf("%d+%di\n", m.r, m.i);
}
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):
• 区間[ a, b ]において連続なる関数f ( x) について,定積分の計算を行う
• 適用する公式は,シンプソンの公式
S=h/3{y(0)+y(2n)+4{y(1)+y(2)+....+y(2n-1)}+y(2)+y(4)+.....+y(2n-2)}
• f ( x)=1/(1+x2)
• a=0, b=10, e=0.0000001の場合の積分値とnの値を表示する
• 各変数(nを除く)の型はdoubleとする
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語:C++
[4] 期限:次の木曜まで
[5] その他の制限: これといって無し
リンク先に手順の例とかがあります
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4644.txt とりあえず自分でやってみたけど無理でした。この雑魚にどなたかご教授をorz
あと最後らへんのprintf文の、&nの&は無かったことに(´;ω;`)
103 :
デフォルトの名無しさん :2007/07/16(月) 21:05:06
>>97 ぜんぜん良いと思います。
ありがとうございます。
ポインタのポインタを使っていてちゃんと動作するものなら問題ないので。
104 :
デフォルトの名無しさん :2007/07/16(月) 21:09:42
>>102 #include <stdio.h>
double f(double x){
return 1.0/(1.0+x*x);
}
int main(void){
double a=0.0, b=10.0, h, sum;
long n=10000000, i;
h=(b-a)/n;
sum=f(a)+f(b);
for(i=1;i<n;i+=2) sum+=2*f(a+h*i);
for(i=2;i<n;i+=2) sum+=4*f(a+h*i);
sum*=h/3;
printf("Answer: %f\n", sum);
return 0;
}
>>106 さん、ありがとうございます。工夫すればかなり短くなるんですね・・・
それと、問題文に抜けてしまったんですが
• s2は最新の計算結果,s1は一つ前の計算結果
• |s2-s1|<eとなるまで,nを1増やしながら,以下の
処理を繰り返す
- s1←s2
- s2を新しいnで計算する
というのはどうすれば出来るでしょうか?よろしければご教授お願いします
>>104 #include <stdio.h>
int main(void){
int masu[9], a, i, j, turn = 0;
char *koma[3] = {" 0 ", " X ", " * "};
for(i = 0; i < 9; i++) masu[i] = 2;
while(1){
do{
printf("?"), scanf("%d", &a);
if(a >= 9) continue;
}while(masu[a] != 2);
masu[a] = turn%2;
turn++;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++) printf("%s", koma[masu[i*3 + j]]);
printf("\n");
}
if((masu[(a + 3)%9] == masu[a] && masu[(a + 6)%9] == masu[a]) ||
(masu[3*a/3 + (a + 1)%3] == masu[a] && masu[3*a/3 + (a + 2)%3] == masu[a]) ||
(a%4 == 0 && masu[0] == masu[a] && masu[4] == masu[a]&& masu[8] == masu[a]) ||
(a%2 == 0 && a%8 != 0 && masu[(a + 2)%8 + 2] == masu[a] && masu[(a + 4)%8 + 2] == masu[a])){
printf("%s\n", koma[masu[a]]);
break;
}else if(turn >= 9){
printf("draw\n");
break;
}
}
return 0;
}
一つでまとめますかw あんたすごいよ。
110 :
21 :2007/07/16(月) 22:30:37
>>107 #include <stdio.h>
#include <math.h>
double f(double x){
return 1.0/(1.0+x*x);
}
int main(void){
double a=0.0, b=10.0, e=0.0000001, h, s1=0.0, s2;
long n, i;
int is_first=1;
for(n=2;;n+=2){ // アルゴリズムの関係で n は偶数
h=(b-a)/n;
s2=f(a)+f(b);
for(i=1;i<n;i+=2) s2+=2*f(a+h*i);
for(i=2;i<n;i+=2) s2+=4*f(a+h*i);
s2*=h/3;
if(!is_first && fabs(s2-s1)<e) break;
s1=s2;
is_first=0;
}
printf("n=%ld integral=%f\n", n, s2);
return 0;
}
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): CSVファイルからデータを読み込み、構造体に入れる。 CSVファイルの中身は、名前・住所・電話番号で、10件以内である。 構造体には、登録番号・名前・住所・電話番号を入れる。 登録番号は自分でつける。 最初に、登録番号と名前を表示し、入力された登録番号に応じて 名前住所電話番号を表示する。 [3] 環境 [3.1] OS:windows cygwin [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 今日中 [5] その他の制限:特になし 色々かんがえたのですがわかりませんでした。。 よろしくおねがいします。
>>111 さん
素早い回答ありがとうございました。おかげで次の宿題は出せそうです。ありがとうございました。
>>107 ごめん間違った
for(i=1;i<n;i+=2) s2+=2*f(a+h*i);
for(i=2;i<n;i+=2) s2+=4*f(a+h*i);
↓
for(i=1;i<n;i+=2) s2+=4*f(a+h*i);
for(i=2;i<n;i+=2) s2+=2*f(a+h*i);
あちゃー手遅れだったか
116 :
スモーク :2007/07/16(月) 22:50:23
多分岐型 整数型の変数a・b と、文字型の変数e を用意し、 キーボードから2つの数値と1つの演算子を入力し 、その計算結果cを出力するプログラムを作成しなさい。 実行される計算は和・差・積・商・剰余の5種類とし、 演算子はそれぞれ’+’、’-’、’*’、’/’、’%’で 表現されるものとする。 演算子にそれ以外の記号が入力された場合は エラーメッセージを表示する。 また0による除算の回避も含めること。 まだcaseになれていないのだろうか・・・。 教えてください。
117 :
スモーク :2007/07/16(月) 22:51:41
他にも。 多分岐型(2) 次の説明は冬季オリンピックの開催年についての説明である。 キーボードから変数year に入力された年号について、 開催された年に第何回大会が開催されたか 画面に表示するプログラムを作成しなさい。 また開催年でない場合は、画面にその旨メッセージを出力すること。
119 :
107 :2007/07/16(月) 22:56:05
>>114 さん、わざわざ丁寧にありがとうございます!(´;ω;`)ブワッ
【質問テンプレ】 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 文字列を置換するプログラムをつくれ。 どのような形でもいいので、置き換える文字列と置き換えられる文字列を受け取り 置換した文章を出力する。なるべくポインタを使うこと。試しにちゃんと動くか確認すること。 (例)”僕" を ”私” に置換する 僕は20才だ。僕の好きなたべものはお酒だ。 -> 私は20才だ。私の好きなたべものはお酒だ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:(gcc 2.95.3) [3.3] 言語: C [4] 期限: (2007年07月31日23:59まで ) [5] その他の制限: 無し
まぁ、感謝されたって力つかなきゃ意味無いし、暇つぶしの種にされてるだけだから考え物だけどな。
>>110 あれでできてるんじゃねえのか?
scanfの前に"c2p Message:","p2c Message:"とか
printfをいれて挙動をチェックしろ
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): メンバx[]の値が定まっているPoint5Dのインスタンスを引数とし, その2ノルムを計算して返す関数 Norm を書け. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:明日まで [5] その他の制限:無し 問題の意味がいまいち分かりません…orz よろしくお願いします。
>>120 #include <stdio.h>
#include <string.h>
void replace(char *sentence, char *src, char *dest){
char *ptr;
int src_len;
src_len=strlen(src);
for(;;){
ptr=strstr(sentence, src);
if(ptr==NULL) break;
printf("%.*s%s", ptr-sentence, sentence, dest);
sentence=ptr+src_len;
}
printf("%s", sentence);
}
int main(void){
char *sentence="僕は20才だ。僕の好きなたべものはお酒だ。";
char *src="僕", *dest="私";
replace(sentence, src, dest);
return 0;
}
>>120 #include <stdio.h>
int main(int argc, char **argv)
{
char *queue;
int c, qhead = 0, qtail = 0, qsize;
if (argc < 3)
return fprintf(stderr, "usage: %s from to\n", argv[0]), 1;
qsize = strlen(argv[1]);
queue = malloc(qsize);
while ((c = getchar()) != EOF) {
queue[qtail] = c;
qtail = (qtail + 1) % qsize;
if (qhead != qtail) continue;
if (memcmp(&queue[qhead], argv[1], qsize - qhead) == 0
&& memcmp(queue, argv[1] + qsize - qhead, qtail) == 0) {
fputs(argv[2], stdout);
qhead = qtail = 0;
} else {
putchar(queue[qhead]);
qhead = (qhead + 1) % qsize;
}
}
while (qhead != qtail) {
putchar(queue[qhead]);
qhead = (qhead + 1) % qsize;
}
free(queue);
return 0;
}
127 :
126 :2007/07/16(月) 23:21:41
あ。 #include <stdlib.h> #include <string.h> もしといて。スマソ。
>>125 ありがとうございます。かなりきれいにできていますね。
自分もstrstr ()を使ったのですが、途中でつまってしまいました。
>>120 便乗
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024], rep[2048], word1[32], word2[32], *p = buf, *q = rep;
scanf("%[^\n]%s%s", buf, word1, word2);
while(*p){
if(!strncmp(p, word1, strlen(word1))) strcpy(q, word2), p += strlen(word1), q += strlen(word2);
else *q++ = *p++;
}
*q = '\0';
puts(rep);
return 0;
}
>>126 すごいですね。こんなやりかたもあったのですか。
>>129 検索単語がみつかったら単語の文字の数だけ前に進めてstrcpy()をつかうのですね。
それも考えていたのですが、できそうでできませんでした。
みなさん、ありがとうございました。
[1] 授業単元:情報基礎 [2] 問題文: ・1から9までの数字を一回ずつ使った9桁の数字を小町数という。 自乗した数が小町数となるような自然数をすべて求めるプログラムを作成し その数と小町数の両方を出力せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: (明日まで ) [5] その他の制限: 無し C言語習いたてで、期限ぎりぎりまでがんばったんですけどダメでした どなたかよろしくお願いします。
昔のスレに同じ質問あった気がするな
134 :
22 :2007/07/16(月) 23:54:32
>>25 ありがとうございます。
なんですが、元々のソースを追記修正して今まできたので
一応そのような形でって事になってます。
制限なしと書いていましたが、現在のソースを
やっと作れるか作れないかぐらいのレベルなので
>>25 さんのだとまだちょっとわからないことがいろいろとあります。
勉強してみます。ありがとうございました。
>>132 #include <stdio.h>
#include <string.h>
int check(unsigned long n)
{
char f[10] = { '0' };
for (n = n * n; n > 0; n /= 10)
f[n % 10] = '1';
return memcmp(f, "0111111111", 10) == 0;
}
int main(void)
{
unsigned long n;
/*
* 最小小町数 123456789, sqrt(123456789) = 11111.11...
* 最大小町数 987654321, sqrt(987654321) = 31246.96...
*/
for (n = 11111; n < 31428; ++n)
if (check(n))
printf("%lu * %lu = %lu\n", n, n, n * n);
return 0;
}
136 :
135 :2007/07/17(火) 00:11:09
あ、コメント間違ってら sqrt(987654321) = 31426.96... ね、正しくは。
>>136 わざわざありがとうございます!
今できる環境にないので明日大学で試してみます
139 :
デフォルトの名無しさん :2007/07/17(火) 01:50:51
>>108 ありがとうございます。
終了条件の部分大変参考になりました。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):迷路の作成(探索) 2次元配列を用いて迷路をつくりSTARTからGOALまでの経路を視覚的にわかるように出力せよ。 (例)壁1 通路0 START8 GOAL9 データ 1 1 1 1 1 1 1 1 1 1 1 9 0 0 0 1 0 1 0 1 1 1 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 1 0 1 1 0 1 0 1 1 0 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 0 0 1 1 0 0 0 1 0 1 0 1 1 1 0 1 0 0 0 0 0 8 1 1 1 1 1 1 1 1 1 1 1
続きです 出力結果 ********** *G+++* * * ****+* * * *++*** * * *+** * * ++* *** **+** * * * ++* * ** * *+++++S* ********** [3] 環境 [3.1] OS:Mac [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:本日(17日)まで [5] その他の制限:無し 現在奮闘中ですがなかなかできませんorz よろしくお願いします。
>>142 #include <stdio.h>
#define X 10
#define Y 10
int map[X][Y]={ {1,1,1,1,1,1,1,1,1,1}, {1,9,0,0,0,1,0,1,0,1},
{1,1,1,1,0,1,0,0,0,1},{1,0,1,0,0,1,1,1,0,1},
{1,0,1,0,1,1,0,0,0,1},{1,0,0,0,1,0,0,1,1,1},
{1,1,0,1,1,0,1,0,0,1},{1,0,0,0,1,0,1,0,1,1},
{1,0,1,0,0,0,0,0,8,1},{1,1,1,1,1,1,1,1,1,1}};
char expr[]=" *+34567SG";
int next(int x, int y) {
if (map[x][y] == 0) map[x][y] = 2;
if (map[x-1][y] == 9 || map[x-1][y] == 0 && next(x-1, y)) return 1;
if (map[x][y-1] == 9 || map[x][y-1] == 0 && next(x, y-1)) return 1;
if (map[x+1][y] == 9 || map[x+1][y] == 0 && next(x+1, y)) return 1;
if (map[x][y+1] == 9 || map[x][y+1] == 0 && next(x, y+1)) return 1;
if (map[x][y] == 2) map[x][y] = 0;
return 0; }
int main() {
int x, y, r=0;
for (x=0; x<X; x++) for (y=0; y<Y; y++) if (map[x][y] == 8) next(x, y);
for (x=0; x<X; x++) {
for (y=0; y<Y; y++) putchar(expr[map[x][y]]);
putchar('\n');
}
return 0; }
143 :
142 :2007/07/17(火) 04:30:54
安価ミスた.orz
144 :
デフォルトの名無しさん :2007/07/17(火) 04:46:27
>>112 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char num[128], name[128], adr[128], tel[128];
}Data;
int main(int argc, char *argv[])
{
Data x[10];
FILE *fp;
int i = 0, j;
char buf[1024], *p, search[128];
if(argc < 2) fprintf(stderr, "usage : %s string\n", argv[0]), exit(1);
if((fp = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
while(fgets(buf, sizeof(buf), fp) != NULL){
printf("num : "), scanf("%s", x[i].num);
if((p = strtok(buf, ",")) != NULL) sscanf(p, "%s", x[i].name);
if((p = strtok(NULL, ",")) != NULL) sscanf(p, "%s", x[i].adr);
if((p = strtok(NULL, ",")) != NULL) sscanf(p, "%s", x[i].tel);
i++;
}
for(j = 0; j < i; j++)
printf("%s %s\n", x[j].num, x[j].name);
printf("search : "), scanf("%s", search);
for(j = 0; j < i; j++)
if(!strcmp(search, x[j].num))
printf("%s %s %s\n", x[j].name, x[j].adr, x[j].tel);
return 0;
}
147 :
デフォルトの名無しさん :2007/07/17(火) 11:28:50
[1] 授業単元:IT入門B1
[2] 問題文:繰り返し複素数(実部,虚部はそれぞれ整数型とする)を入力し,ユーザが最後に1 (1+i*0)を入れたら今まで入力した複素数の実部と虚部のペアをすべて出力し,さらに入力した複素数すべての積を出力するプログラムを作成せよ.
なお,ユーザが入力する回数に制限はないものとする.
stdio.hの他にstdlib.hをインクルードしておく必要がある.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:c
[4] 期限:2007年7月30日
[5] その他の制限: 特になし
参考プログラムです→
http://www-it.sci.waseda.ac.jp/ITB1/class1/list.c よろしくお願いします。
149 :
デフォルトの名無しさん :2007/07/17(火) 11:39:39
[1] データ構造論 [2]treeprintのプログラムを参考にして木をカッコ表記で表示するプログラムを作り、コマンド X で動作するようにせよ。 /* treeprint() : 2分探索木を根から順にすべて表示する(1行10個毎) */ int num; /* 1行のデータ個数を制御するための変数。*/ void treeprint(void) { num= 0; /* 木の根ノードからサブ関数trprintを用いてプリント開始。*/ trprint(start->right); } int trprint(TNODE *p) /* trprint(p) : p の2分木を再帰的にプリント。*/ { if(p != end){ /* p が終端ノードでないならば */ trprint(p->left); /* pの左部分木を再帰的にプリント。 */ printf("%5d%c",p->key, (++num % 10) ? ' ':'\n'); /* pのkey値を表示。 */ trprint(p->right); /* pの右部分木を再帰的にプリント。 */ } } [3.1] Linux [3.2] gcc 3.4 VC 6.0等 [3.3] C言語 [4] 2007年07月18日12:00まで] [5] プログラムの中のtreeprintだけ問題文の載せています よろしくお願いします
あ、あ、ぼるじょあのほうにカキコしてしまった…… こっちのほうがいいのかな?マルチは怒られますよね?よければ誰かぼるじょあスレ見てください~~
>>142 遅い時間にも関わらず回答ありがとうございます。
確かに動作できました。
しかしながら関数を3つ作ってとけとのことでしたorz
すみませんがお時間がありましたら回答おねがいします。
問題は
>>140-141 です
よろしくお願いします<(__)>
158 :
c言語初心者 :2007/07/17(火) 20:00:23
授業名:プログラミング1 プリントを渡されてやってこいとのことでした。 問題1 サイコロを10000回投げたとき、1から6までのそれぞれの目が 何回ずつ出たか調べるプログラムを作成せよ #include<stdio.h> #include<stdlib.h> #define uniformrand()((double)rand() / ((double)RAND_MAX + 1.0)) int main(void) { int i, j,spot, f[ ?(1) ]; srand(0); for (j = 1;j <= 6;j++){ f[j] = 0; } for( i = 1;i <= 10000; i++){ spot = (int)(6 * uniformrand()) + 1; [ ?(2) ] } return 0; } です。どうかよろしくお願いします。
159 :
デフォルトの名無しさん :2007/07/17(火) 20:01:52
C++です 距離の単位にyかmが入力されるともう片方の単位に変換するプログラムです。 ただし、距離を変換する部分は、関数transを定義し、main関数で呼び出すこと。 距離の数値を入れた後に動かなくなるんですが、何が違うのか教えてほしいです。。 よろしくお願いします #include <iostream> using namespace std; double trans(char a,double b) { double c; cin>>a; cin>>b; if(a='y') { c=b*0.914; return c; } else if(a='m') { c=b/0.914; return c; } }
160 :
デフォルトの名無しさん :2007/07/17(火) 20:02:55
続き int main() { char a; double b; cout<<"meter or yard -->"; cin>>a; while(a!='E') { cout<<"input data -->"; cin>>b; { if(a='y') { cout<<b<<" yard --> "<<trans(a,b)<<" meter"; } else if(a='m') { cout<<b<<" meter --> "<<trans(a,b)<<" yard"; } cout<<"meter or yard -->"; cin>>a; } } return 0;
161 :
デフォルトの名無しさん :2007/07/17(火) 20:04:35
a=='y' にしろ
>>158 #include<stdio.h>
#include<stdlib.h>
#define uniformrand()((double)rand() / ((double)RAND_MAX + 1.0))
int main(void)
{
int i, j,spot, f[7];
srand(0);
for (j = 1;j <= 6;j++){
f[j] = 0;
}
for( i = 1;i <= 10000; i++){
spot = (int)(6 * uniformrand()) + 1;
f[spot]++;
}
for(i=1; i<=6; i++) {
printf("%d %d \n",i,f[i]);
}
return 0;
}
>158 (1)7 (2)f[spot]++;
165 :
c言語初心者 :2007/07/17(火) 20:07:34
たぶん(1),(2)にあてはまるものをいれてこいってことだと思います。 よろしくおねがいします。。
166 :
デフォルトの名無しさん :2007/07/17(火) 20:10:40
>161 改善されませんでした・・・
>>159 >>161 に加えて
trans(a,b)で余計に a, b を入力させようとしてるから.
引数で渡してんだから,そこで入力させてどうする.
168 :
c言語初心者 :2007/07/17(火) 20:27:54
ありがとうございました 講義名:プログラミング1 プリントを渡されてやってこいとのことでした。よろしくおねがいします 1,2,・・・13の中から5個の数をランダムに選び出すプログラムを作成せよ #include<stdio.h> #include<stdlib.h> #define uniformrand()((double)rand() / ((double)RAND_MAX + 1.0)) int a[13]; void RandomPermutation(int n) { 例題2と同じ } int main(void) { int i; RandomPermutation(13); for (i = 0;i < (1)? ; i++){ printf("%4d \n", (2)? ); } return 0; } です。(1)(2)の部分をお願いします。『例題2と同じ』という場所は 問題の横に横に例題2というのが乗っていました。だけど、自分はどこからどこまでが例題2 と同じ部分なのかがわからないです。例題2の部分がいるならそれも打ちます。よろしくお願いします。
(1)13 (2)a[i]
170 :
デフォルトの名無しさん :2007/07/17(火) 20:41:31
[1] 授業単元:C言語演習 [2] 問題文: テキストファイルを読み込みたとえばテキストファイルに 3+4= 5*6= ...etc(これは他のその他の数式、etcと直接出力しない) と書かれていたら画面に 3+4=7 5*6=30 ...etc と出力せよ。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C言語) [4] 期限: 7月19日
171 :
c言語初心者 :2007/07/17(火) 20:46:29
講義名:プログラミング1 プリントを渡されてやってこいとのことでした。よろしくおねがいします よく切られたトランプから、5枚のカードを選び出すプログラムを作成せよ、 ただし、トランプにはジョーカーは含まれないものとする。 #include<stdio.h> #include<stdlib.h> #define uniformrand()((double)rand() / ((double)RAND_MAX + 1.0)) int a[ (1)? ]; void RandomPermutation(int n) { 例題2と同じ } int main(void) { int i; RandomPermutation( (1)? ); for(i = 0; i < 5; i++){ if( (2)? ){ printf("ハート% 4d \n", n (3)? ); }else if ( (4)? ){ printf("ダイア% 4d \n", n (5)? ); }else if ( (6)? ){ printf("クラブ% 4d \n", n (7)? ); }else{ printf("ハート% 4d \n", n (8)? ); } return 0; } 問2もありがとうございました。(1)から(8)までをよろしくお願いします
173 :
デフォルトの名無しさん :2007/07/17(火) 21:06:43
>>172 足し算、引き算、割り算、掛け算です。説明不足ですいません。
174 :
スモーク :2007/07/17(火) 21:23:34
こんばんわ。すみません、今度は説明を書いたのでよろしくお願いします。 「1」課題:C言語でコードを記述して実行する。 「2」内容:多分岐型のコードを使って整数型の変数a・b と、文字型の変数e を用意し、 キーボードから2つの数値と1つの演算子を入力して、その計算結果cを出力するプログラムを作る。 というもの。さらに、実行される計算は和・差・積・商・剰余の5種類とし、 演算子はそれぞれ’+’、’-’、’*’、’/’、’%’で、 表現されるものとする。 演算子にそれ以外の記号が入力された場合は、 エラーメッセージを表示する。 また0による除算の回避も含めるものです。 「3」OS:WINDOWS XP SP2。 「4」バージョン:Visual Studio 2005。 「5」期限:今週の金曜まで。 「6」 コンパイラのバージョン: gcc。 これでおねがいします。
175 :
デフォルトの名無しさん :2007/07/17(火) 21:23:47
[1] 授業単元: CG入門 [2] 問題文 縦横400ピクセルのスクリーン上に3次元空間の3角形が複数個、投影される。 この3角形についてそれぞれ ①スクリーン上の頂点:(x1,y1)(x2,y2)(x3,y3) ②頂点のZ値(視点から3次元空間までの距離):Z1,Z2,Z3 ③三角形の色:(r,g,b)-均一色 が標準入力から与えられるとき、Z-バッファ法に基づいてスクリーン上に三角形を描き 最終結果をppm画像として出力するプログラムを作成せよ。 *必要なデータは標準入力から入力するものとし、かつ複数の③角形に対応させる事 (③角形個数は予め与えてもよい) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual studio. [3.3] 言語: C [4] 期限: 2007年7月19日 11:00まで この手のプログラムはスレ違いかもしれないと思いつつも、C言語で書いて来いとのことなので 書き込ませて頂きました。何卒、よろしくお願いします。
177 :
デフォルトの名無しさん :2007/07/17(火) 21:28:47
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 線形探索 次の表は、平成19年のお年玉付き年賀葉書の当選番号である。 1等 157788、457190 2等 5161、7093、7485、9614 3等 64、79 手元に届いた年賀状の抽選番号をキーボードから入力し、 当選したかどうかチェックして結果を表示するプログラムを作成する。 当選番号(の下2桁)は、キーの配列に初期値として格納する キーボードから2桁の数字を入力してターゲットに格納し、線形探索を行う。 探索結果を画面に出力する。当選した場合は何等が当たったか、も出力すること。 【発展】 余力のある人は、下2桁に限らず、全桁を初期値として格納し、当選のチェックを実行するプログラムを作成してみること。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VB [3.3] 言語: C [4] 期限: 明日まで [5] その他の制限: 習ったのは 配列 if-else文 繰り返し ポインタ 線形探索と基礎知識 です。[発展]の方でお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 自分の名前をローマ字でキーボードで入力し、文字数を表示させる関数、名前を逆順にする関数を 各自それぞれ定義しプログラムを組みなさい。結果の表示はmainで行い、姓と名の間は1文字 空白を入れること。ただし、変数が文字型、ポインタ型のみの場合の2つに分けてプログラムを組みなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C++ [4] 期限: 2007年07月18日10:00まで] [5] その他の制限:できれば、do-while文及びfor文を使用してお願いします。
180 :
デフォルトの名無しさん :2007/07/17(火) 21:41:12
>>176 さん、ありがとうございます。
けどまた説明不足でした…。小数の場合も含みます…。
>>170 追加例
ファイル内
1.5+1.5=
3*5=
1.5+2=
出力
1.5+1.5=3
3*5=15
1.5+2=3
何度も説明不足ですいません…。この小数と整数を区別して出力するのが
むずかしいです。よかったらお願いします。
>>180 説明し忘れが無いか一度確認したほうがいいと思うよ
小数点以下は切り捨てるとかそういう細かい部分も説明すべきだと思う
>>180 aとbの型をdoubleにして、
fscanfの%dを%lfに、
printfの%dを%gにすればおk
183 :
デフォルトの名無しさん :2007/07/17(火) 21:50:56
170です。
>>182 さんありがとうございます!!これで完成しました!!
みなさんありがとうございました。%gとは便利な…。
184 :
デフォルトの名無しさん :2007/07/17(火) 21:52:10
そんな事より、今日うちに犬が死んだ。老衰だった
>>186 マイコンかWindowsかどっちなんだ。つかマイコンだろうな。
どんな石だか知らんが、これコンパイルして動かせる環境持ってる奴
いないんじゃないか。
>>175 よくわからんが、おもむろにCreateWindow()で窓を開く
コンソールアプリをつくれということだろうか。
>>187 Windows上で開発してるってことだろ、多分
せめてどんなマイコンを使ってるかわからないと難しいな・・・
190 :
デフォルトの名無しさん :2007/07/17(火) 22:17:30
○×ゲーム Linuxのプロンプト上でplay com/man対戦、先攻/後攻を選べる
最近三目並べはやってんのかyo
192 :
175 :2007/07/17(火) 22:37:33
>>188 アプリと言いますか、コマンドプロンプトで必要な入力を入れていくと
それを適当なソフトで忠実に再現したppm画像に出してくれるものです。
同じ事言ってたらすいませんorz
できれば骨組みだけでも(流れ的な)考えていただけると幸いですm(__)m
V850基板なら手元にあるぜ でもまだソフトインスコしてない・・・
>>192 いや、スクリーンに描画しろとか書いてあるからさ。
それを見なかったことにして、PPM画像ファイルを出力するだけなら、
標準Cの範囲のプログラムで出来る話だが、400*400の画面に
描画しろってんなら、窓開いてGUIスレッド起動してって話になるだろう。
196 :
190 ◆Oa0JSQvro2 :2007/07/17(火) 23:14:27
追記です。 期限は木曜夜でお願いします。 よろしくおねがいしますm(__)m
197 :
175 :2007/07/17(火) 23:14:34
>>195 なるほどそういう事でしたか…
特に制限などは言われていないので(Cのみとは言われてません)
このスレの趣旨に沿っていないかもと思ったのです。
できれば400X400は後に考えますので、ファイル出力の部分をお願いします。
198 :
デフォルトの名無しさん :2007/07/17(火) 23:36:49
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
練習13-2(気象情報)
インターネットを利用して出身地の観測開始から現在までの
気象情報を入手し,各年の月別平均気温データを作成する.
作成したファイルから気象データを読み込んで,
(1)平均気温が最も低い年月と最も高い年月を探索して
両者の年月と気温をディスプレイに出力する
(2)年間平均気温を計算し,高い年から順に
年と年間平均気温をファイルに出力する
プログラムを作成しなさい.
気象庁HP(
http://www.jma.go.jp/jma/index.html )参照
[3] 環境
[3.1] OS: Windows
[3.2]
[3.3] 言語:C言語
[4] 期限: 2007年 7月18日の朝
[5] その他の制限: 出身地は神戸でお願いします
× 資料なし(欠測) 統計値を求める期間内の観測結果が全て求められなかった場合。 は、どうあつかうんだ?
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): longが定義されている数の最大値LONGMAXをもとめろ。 例えば、i=1 を2倍していき、LONGMAXの最大値を求める。 別にこの方法でなくてもいい。各自にまかせる。 ちなみに LONGMAXはおよそ2147483647である。 余裕があるものはdouble などもやることが望ましい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc2.95-3) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: (2007年07月25日23:59まで) [5] その他の制限:無制限 さぐりで下のようなところまでは書きました。 #include <stdio.h> #define LONGMAX 2147483647 int main(void) { long int i,i2; /*これは0 ... の無限ループ for(i=1;i<LONGMAX;i*=2) printf("%d ",i); */ for(i=1;;i2=i,i*=2){ printf("%d ",i); if(i<i2){ printf("%d is LONGMAX\n",i); break; }}} までできましたが、値が少し違い微妙です。 それと、コメントカットしたらなぜ無限ループになるのでしょうか? これにかなり悩みました。
>>201 無限ループの最初の方で止めれば分かるけど 1,2,4,8…1073741828 の次から0になってるはず。
で、その理由は出力される数を2進表現してみれば分かるはず。キーは32ビット。
後半での出力は…少しの違いなのか?
---
#include <stdio.h>
int main(void)
{
unsigned long max = -1;
printf("Unsigned MAX:%ud\n", max);
printf("Signed MAX:%d\n", max >> 1);
return 0;
}
----
>>201 2倍していき・・・verで書いてみた
#include <stdio.h>
#include <math.h>
int main(void)
{
int i=0;
long n, tmp;
while( (tmp = pow(2, i)-1) >= 0 ){
n = tmp;
i++;
}
printf("LONG MAX : %d\n", n);
return(0);
}
205 :
デフォルトの名無しさん :2007/07/18(水) 07:36:23
授業単元:プログラミング 問題文(含コード&リンク): 環境 OS:Windows xp コンパイラ名とバージョン:ボーランド 言語:C 期限: その他の制限: テーマ:標準関数の利用 問題1:文字列を入力、英文字とそれ以外を収納する配列に振り分けしなさい 使用する標準関数:isalpha()など 実行画面 文字列入力==>A12H&jfTy8uZ3# 英字:AHjfTyuZ その他:12&83# 問題2:文字列と削除文字列を入力し、文字列中から削除文字列を排除しなさい 使用する標準関数:strncmp(),strcpy(),strlen()など 実行画面 文字列入力(m1)==>ABCDEFAADABC 削除文字列(m2)==>ABC 結果文字列(m1):DEFAD 注意:配列の使用はm1,m2のみとする
>>204 よく見てないけど
①
=< じゃなくて <=
isdigit() -> isdigit(moji)
printf("hogehoge %d"); -> printf("hogehoge %d",); (カンマ)
②
× while(buff = getchar()!="0 0 0"){
whileのなかのsscanfのbufferなんてない
× printf("%4s%4f%4s,stu[j].name,stu[j]height,stu.[j]blood");}
207 :
206 :2007/07/18(水) 07:57:21
あー printf("hogehoge %d"fuga); -> printf("hogehoge %d",fuga); (カンマ) に訂正です
209 :
デフォルトの名無しさん :2007/07/18(水) 08:34:24
>>177 奮闘中ですが、できませんorz
お願いします!
210 :
190 ◆Oa0JSQvro2 :2007/07/18(水) 09:12:44
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク):○×ゲーム(3目並べ) をプロンプト上で動かす。com/man対戦、先攻後攻は選択可能 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限: 今週金曜夜 [5] その他の制限: 特になし
211 :
デフォルトの名無しさん :2007/07/18(水) 10:09:46
どうせその学籍番号は他人のものだろ?
213 :
デフォルトの名無しさん :2007/07/18(水) 10:41:19
214 :
c言語初心者 :2007/07/18(水) 10:56:39
講義名:プログラミング1 … プリントを渡されてやってこいとのことでした。よろしくおねがいします 問3、よく切られたトランプから、5枚のカードを選び出すプログラムを作成せよ、ただし、トランプにはジョーカーは含まれないものとする。 #include<stdio.h> #include<stdlib.h> #define uniformrand()((double)rand() / ((double)RAND_MAX + 1.0)) int a[ (1)? ]; void RandomPermutation(int n)
215 :
c言語初心者 :2007/07/18(水) 10:57:29
『続き』 { 例題2と同じ } int main(void) { int i; RandomPermutation( (1)? ); for(i = 0; i < 5; i++){ if( (2)? ){ printf("ハート% 4d \n", n (3)? ); }else if ( (4)? ){ printf("ダイア% 4d \n", n (5)? ); }else if ( (6)? ){ printf("クラブ% 4d \n", n (7)? ); }else{ printf("ハート% 4d \n", n (8)? ); } return 0; } 例題2と同じというところは、プリントの横に例題2というのがあったんですが、どこかどこまでが例題2と同じなのかがわかりませんでした。そこが必要であれば例題2を打つんでよろしくお願いします。(1)から(8)までを回答としてよろしくねがいします。
218 :
デフォルトの名無しさん :2007/07/18(水) 11:21:57
>>175 ですがどうにもうまく三角形が描けませんorz
ファイル出力までで結構ですので、どなたかなにとぞお願いしますm(__)m
219 :
c言語初心者 :2007/07/18(水) 11:39:59
>>215 0,1,2, … 、99をランダムに並べる
#include<stdio.h>
#include<stdlib.h>
#define uniformrand()((double)rand() / ((double)RAND_MAX + 1))
int a[100]
220 :
c言語初心者 :2007/07/18(水) 11:40:29
続き void RandomPermutaion(int n) { int i, j, z; for (i = 0; i < n; i++) { a[i] = i; } for(j = n - 1; j > 0; j--) { i = (int)(j * uniformrend()); z = a[i]; a[i] = a[j]; a[j] =z; } } int main() { int n, i; n = 100; RandmPermutation(n); for (i = 0; i < n; i++){ printf("%4d", a[i]); } printf("/n"); return 0; } が例題2です。よろしくお願いします
>>220 できたぞ
つか
printf("ハート% 4d \n", n (3)? );
とか
printf("ダイア% 4d \n", n (5)? );
って、問題間違ってないか?
222 :
c言語初心者 :2007/07/18(水) 12:00:14
間違ってました。申し訳ありません。 printf("ハート% 4d \n", (3)? ); printf("ダイア% 4d \n", (5)? ); です。 よろしくお願いします。
223 :
デフォルトの名無しさん :2007/07/18(水) 12:07:51
[1] 授業単元: C [2] 問題文(含コード&リンク):単純選択法 大きさ20の配列keyを用意し、キーボードから値を入力する。 この配列keyの要素を、単純選択法でソートするプログラムを作成せよ。 ただし、ソートの途中経過を画面に出力すること。 また、最後に比較回数を画面に出力すること。 【ヒント】 配列の大きさの指定 #define SIZE 20 単純選択法‥最小の要素を選び、未ソートの部分の先頭の要素と交換する 途中経過‥未ソートの部分が1つ減るたびに(外ループ)出力。 比較回数‥初期値0の変数を用意し、比較のたびに(内ループ)インクリメント。 発展 以下の機能を持つ関数を作成し、利用する形にコードを修正しなさい。 配列要素の入力を行う input_array 配列要素の出力を行う output_array 単純選択法によるソート select_sort [3] 環境 [3.1] OS: WindowXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: いつでも [5] その他の制限:なし
224 :
デフォルトの名無しさん :2007/07/18(水) 12:09:04
>>223 発展までは書いてみました
#include<stdio.h>
#define SIZE 20
void kadai28()
{ int key[SIZE];
int i, j, p, cnt = 0, w;
for(i = 0; i < SIZE; i++)
scanf("%d", &key[i]);
for(j = 0; j < SIZE; j++)
printf("%3d", key[j]);
printf("\n");
for(i = 0; i < SIZE; i++){
p = i;
for(j = i+1;j < SIZE;j++){
if(key[j] < key[p])
p = j;
cnt++;
}
w = key[p];
key[p] = key[i];
key[i] = w;
for(j = 0; j < SIZE; j++)
printf("%3d", key[j]);
printf("\n");
}
printf("cnt = %d\n", cnt);
return;
}
発展の方お願いしますー
[1] プログラム基礎復習 [2] charのみを使用し小数点以下100桁まで計算できる計算機を作る(中学程度) [3] 環境 [3.1] Windows2000プロ [3.2] gcc [3.3] C [4]7/20 [5]main以外の関数を作ってはいけない お願いします。さっぱりなので・・・
>>225 「+」「-」「*」「/」「√」位かな?
>>222 じゃ、パーツだけ教えるよ
n
a[i]/13==0
a[i]/13==1
a[i]/13==2
a[i]%13
a[i]%13
a[i]%13
a[i]%13
または
n
a[i]&3==0
a[i]&3==1
a[i]&3==2
a[i]/4
a[i]/4
a[i]/4
a[i]/4
好きなほうを使ってくれ
>>226 お願いできますか?
charだと256までしか出来ないので積や商がさっぱりで・・・
229 :
c言語初心者 :2007/07/18(水) 12:20:22
>>225 小数点以下でcharってprintf出力で表示される答えが100桁でいいんだよね?
>>214 さん
問題文の意味がよく分からないんですけど
ジョーカーは1枚ですよね?
それでランダムで5枚引くと・・・・
>>233 指定されていないので 多分無限だと思います
235 :
c言語初心者 :2007/07/18(水) 12:33:46
>>231 さん
不服なんてとんでもないです。ただ、ヒントもらっても自分が解けないだけです。申し訳ないです。
>>232 さん
たぶんジョーカー2枚を抜いた52枚でのことだとおもいます。よろしくお願いします。
足し引きはifで100で固めれば簡単に出来ることはわかったんですけど
多倍長の実数計算を実装させて >[5]main以外の関数を作ってはいけない か 冗談きつすぎ
>>225 100^256 までしかできなくね? 無限じゃネージャン
再帰下降も不可、と
>>238 勿論char[]で多倍長を実装するんでしょ
そうじゃなきゃそもそも実数すら扱えん
ごめんなさい頼る所はココしかないので・・・・orz
未来からの使者か?
243 :
149 :2007/07/18(水) 12:58:59
>>153 さんのテキストをコンパイルしてみたのですが、
/tmp/ccY67IGB.o(.text+0x163): In function `angle':
: undefined reference to `sqrt'
/tmp/ccY67IGB.o(.text+0x177): In function `angle':
: undefined reference to `sqrt'
/tmp/ccY67IGB.o(.text+0x197): In function `angle':
: undefined reference to `acos'
collect2: ld はステータス 1 で終了しました
と表示されて、./a/out のファイルが作成されなかったのですが
これは何でしょうか・・
244 :
デフォルトの名無しさん :2007/07/18(水) 13:00:17
何方か205お願いします
エラーメッセージじゃないかな??
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
特定の単語にgoogle 検索のリンクをはるプログラムをつくれ。
例えば、下は「テスト」という単語をgoogle検索したリンク である。
q= 以降は「テスト」という単語がURLエンコード(unicode)された文字列となっている。
http://www.google.co.jp/search?hl=ja&q=%E3%83%86%E3%82%B9%E3%83%88 1. htmlファイルを受け取る
2. 検索リンクにしたいいくつかの指定した単語を受け取る
3. すでにリンク済みの単語に注意しながら、指定した単語をgoogle 検索のリンクにする。
(例)「宿題」をgoogle 検索されたリンクにする。
この宿題ができなかったら単位はあげません。
->
この<a href="
http://www.google.co.jp/search?hl=ja&q=%E5%AE%BF%E9%A1%8C ">
宿題</a>ができなかったら単位はあげません。
なお、目的を果たせるプログラムだったらこの形式でなくてもかまわない。
余裕がないものは
・検索ワードはURLエンコードの必要のない半角英数等だけでいい。
・受け取った検索ワードはすでにリンクされていないと仮定してもいい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc2.95-3
[3.3] 言語: C
[4] 期限: (2007年07月31日17:00まで)
[5] その他の制限: 何を使っても構わない
>>225 組むのめんどいからヒントだけあげるよ
現在のCPU能力では「+」と「-」しか演算が出来ない。
「*」「/」はただの演算方法でしかない
例 a*bの場合 int i; for(i=0;i=b;i){a++}
>>205 何が分からないか分からないんだが・・・・・・・
まんまじゃん
>>250 それを言うなwそれ言っちゃこのスレの存在価値がw
252 :
149 :2007/07/18(水) 13:37:55
>>247 さん
幸せになれましたが、どういう原理なのでしょう?
質問ばっかですいません
書き忘れましたが、153さん・247さんありがとうです
>>252 mという数学ライブラリをリンクしたのです。
>>248 兄さんそれ掛け算になってません。
forの条件式もアレです。意図は伝わるけど。
a*bの場合 int i,n; for(i=0;i<b;i++){n+=a;} 暇ですね。
a*bの場合 int i,n=0; for(i=0;i<b;i++){n+=a;}
>>252 243のエラーメッセージはソースの中に存在しない関数(sqrtとacos)があって
プログラムを作れないというリンカのエラー。
>>253 の言うとおり数学ライブラリをリンク指定すれば
その中に関数sqrtとacosという関数があるからリンクが通る。
馬鹿は彫っとけ
やらないか
>>175 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4662.c 入力は各行に(別に各行でなくてもいいけど)
x1 y1 Z1 x2 y2 Z2 x3 y3 Z3 r g b
の順で数値を並べたファイル.
(例)
0 10 10 100 30 10 50 50 100 255 0 0
0 100 20 100 100 20 50 0 20 0 255 0
0 200 30 100 200 30 80 20 15 0 0 255
出力先もコンソールにしてるが,変更したければmain冒頭の
FILE *out = stdout;
を書き換えればいい.
画像はLinuxのxvで確認した.ppm形式はいくつか種類があるようなので問題あるかも.
(注:CGは昔かじった程度なのでzバッファについて根本的な勘違いをしてるかもしれない)
>>262 strccat(a, b) ≡ strcpy(a + strlen(a), b) ≡ strcpy(strchr(a, '\0'), b)
264 :
262 :2007/07/18(水) 14:37:06
>>262 最後のナル文字にさえ気をつければ便利だし安全だよ。
サイズの方が重要かも。
268 :
265 :2007/07/18(水) 15:24:25
あ、コメントの処理入れるの忘れた まあいいや どうせもともと穴だらけだ
269 :
ヒープ :2007/07/18(水) 15:36:58
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): ヒープソートを用いて、配列に格納された10個の数値データを 大きい順に並び替える。変化がわかるようにソート前と後を出力させる。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 早いとありがたいです [5] その他の制限: 特にありません よろしくおねがいします。
>>177 #include <stdio.h>
int main(void) {
int i,j,k,sn,flg[3]={0},suka;
int n[3][5]={
{157788,457190,-1},
{5161,7093,7485,9614,-1},
{64,79,-1}
};
printf("Input number > ");
scanf("%d",&sn);
for(i=0,k=1000000; i<3; i++,k/=100) {
for(j=0; n[i][j]>0; j++) {
if(n[i][j]==sn%k) {
flg[i]++;
break;
}
}
}
for(i=0,suka=1; i<3; i++) {
if(flg[i]) {
printf("%d等 \n",i+1);
suka=0;
}
}
if(suka) printf("はずれ\n");
return 0;
}
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 2次元配列の中にデータの入ったファイルを読み込んで代入する方法を main関数ともう1つ関数をつくって作成せよ。 例. box[5][5];の2次元配列にファイルのデータ(ここではdata.txt)を代入 data.txt 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日中です [5] その他の制限: 特にありません よろしくおねがいします。
272 :
175 :2007/07/18(水) 19:53:23
>>261 ありがとうございました!m(__)m
自分でも色々いじってみましたが、思っていた通りの完璧な出来でした。
本当に助かりました!
273 :
デフォルトの名無しさん :2007/07/18(水) 20:09:44
[1] 授業単元:情報活用 [2] 問題文:キーボードから順次入力された正の整数を0が入力されるまで、 配列に順番に格納し、入力された(0を除く)値の平均値(実数として扱うこと) にもっとも近い値(平均との差が最小となる値)が何番目に入力された どういう値であるかを表示するプログラムを作成せよ。 例) 数字(1)を入力してください。 2 数字(2)を入力してください。 5 数字(3)を入力してください。 3 数字(4)を入力してください。 1 数字(5)を入力してください。 0 入力された数字の平均は2.75です。 これは、3番目に入力された3に最も近いです。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: [7月19日20:00] [5] その他の制限:特になし ギリギリまで頑張ったのですができませんでした。わかる方お願いします
274 :
デフォルトの名無しさん :2007/07/18(水) 20:12:21
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク):○×ゲーム(3目並べ) をプロンプト上で動かす。com/man対戦、先攻後攻は選択可能 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限: 今週金曜 [5] その他の制限: 特になし
>>273 なんか前々スレくらいで全く同じ問題に回答した気がする。
276 :
スモーク :2007/07/18(水) 20:17:27
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 問題009 多分岐型 整数型の変数a・b と、文字型の変数e を用意し、 キーボードから2つの数値と1つの演算子を入力し 、その計算結果cを出力するプログラムを作成しなさい。 実行される計算は和・差・積・商・剰余の5種類とし、 演算子はそれぞれ’+’、’-’、’*’、’/’、’%’で 表現されるものとする。 演算子にそれ以外の記号が入力された場合は エラーメッセージを表示する。 また0による除算の回避も含めること。 [3] 環境 3.1] OS: (Windows XP) [3.2] コンパイラ名とバージョン: (VS 2005) [3.3] 言語:C [4] 期限: ([2007年07月20日hh:金曜まで] [5] その他の制限: 課題の数は残り20くらいありますが、半分は片付けました。 しかし、追加されてくるものを回答する時間がもうありません。 どうかよろしくおねがいします。 あなたの能力が便りです。
釣りか?
除算の結果の小数点以下は?
280 :
デフォルトの名無しさん :2007/07/18(水) 20:27:06
[1] 授業単元:情報 [2] 問題文:2次方程式a*x*x + b*x + c = 0の解を求めるプログラムを作成せよ。 係数a,b,cはdouble型で、キーボードから入力するものとする。 虚数解の出力も行うこと。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: あしたまで [5] その他の制限:ありません よろしくおねがいします
281 :
22 :2007/07/18(水) 20:37:28
282 :
スモーク :2007/07/18(水) 20:41:23
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 問題009 多分岐型 整数型の変数a・b と、文字型の変数e を用意し、 キーボードから2つの数値と1つの演算子を入力し 、その計算結果cを出力するプログラムを作成しなさい。 実行される計算は和・差・積・商・剰余の5種類とし、 演算子はそれぞれ’+’、’-’、’*’、’/’、’%’で 表現されるものとする。 演算子にそれ以外の記号が入力された場合は エラーメッセージを表示する。 また0による除算の回避も含めること。 [3] 環境 3.1] OS: (Windows XP) [3.2] コンパイラ名とバージョン: (VS 2005) [3.3] 言語:C [4] 期限: ([2007年07月20日hh:金曜まで] [5] その他の制限: 課題の数は残り20くらいありますが、半分は片付けました。 しかし、追加されてくるものを回答する時間がもうありません。 どうかよろしくおねがいします。 あなたの能力が便りです。 小数点以下は切り捨てでいいですよ。 とにかく0による除算の回避とあるだけなのでそのとおりで済むはずです。 多少のミスはかまいません。それ以外がうまく機能すればよいです。 また、ほかの問題も載せますのでよろしくお願いします。
ここまでくると、嫌がらせとしか思えないな
なんか追記の書き方がムカツクのは俺の心が狭いからかな
286 :
285 :2007/07/18(水) 21:11:36
あー、a=0の時の処理書いてないわ 適当に追加してね
>>282 #include <stdio.h>
#include <stdlib.h>
int main(void){int a,b,c;char e;if(scanf("%d %d %c",&a,&b,&e)!= 3){
fprintf(stderr, "input error\n");return EXIT_FAILURE;}switch (e) {
case '+': c = a + b; break;case '-': c = a - b; break;
case '*': c = a * b; break;case '/':
case '%':if (b == 0) {fprintf(stderr, "zero divide\n");
return EXIT_FAILURE;}if (e == '/') {c = a / b;} else {c = a % b;}
break;default:fprintf(stderr, "illegal operator\n");return EXIT_FAILURE;}
printf("result = %d", c);
return EXIT_SUCCESS;}
289 :
alsk :2007/07/18(水) 21:56:33
健康についての英語のエッセイを500~600字程度でお願いしたいのですが… 可能でしょうか? タバコとか、肥満についてならなんでもいいんで!
(´-`).。oO(英語で500~600"字"ってかなり少なくないか?)
(´-`).。oO("語"の間違いだろ・・・常考)
293 :
デフォルトの名無しさん :2007/07/18(水) 22:04:01
釣りか単なるマルチだろ…
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 次のようにプログラムを作成せよ。前回のプログラムのmainとnumber大域変数は変更しない。 intのスタックを2つ作る(大域変数)。1つのスタックは数値をいれる。もう1つには演算子を表す数をいれる 例 +→0 弱低 -→1 ↓ *→2 ↓ /→3 強高 #include<stdio.h> #include<ctype.h> char *p;char c[100]; int expression(void); int term(void); int number(void); main(){ int ans; while(1){ printf("Enter expression : "); fgets(c,90,stdin); p=&c; if(*p == '\n') {break;} ans=expression(); printf("Answer:%d\n" , ans); } }
int expression(){ int ans; ans = term(); while(1){ if(*p == '+'){ *p++; ans = ans + term(); } else if(*p == '-'){ *p++; ans = ans - term(); } else break; [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2007年07月19日 [5] その他の制限:特になし
296 :
デフォルトの名無しさん :2007/07/18(水) 23:13:01
>>279 回答ありがとうございます。
とてもみやすかったです^^
>>297 readfile関数内の int j はいらないから消しといて><
>>273 #include <stdio.h>
#include <math.h>
#define N 128
int main(void)
{
int i=0, j, n=0, x[N];
float avg=0.0, tmp;
while(1){
printf("数字(%d)を入力してください。: ", i+1);
scanf("%d", &x[i]);
if(x[i] == 0) break;
avg += x[i];
i++;
if(i == N) break;
}
avg = avg / i;
printf("\n入力された数字の平均は%fです。\n", avg);
tmp = fabs(avg - x[0]);
for(j=1 ; j<i ; j++){
if(tmp > fabs(avg - x[j])){
tmp = fabs(avg - x[j]);
n = j;
}
}
printf("これは、%d番目に入力された%dに最も近いです。\n", n+1, x[n]);
return(0);
}
301 :
273 :2007/07/19(木) 00:47:41
>>299 ありがとうございますmm
明日やってみます。
本当にありがとうございます。
>>300 よく分からないのだが、
対話的に1文字ずつ文字入力を行い、1文字ずつ取り出したいのか?
それとも、
文字列を入力し、結果の反転文字列を一気に出力したいのか?
>300 char x; scanf("%s", &x); ってなんだ?
>>303 入力は1文字ずつで、出力は1文字ずつ出したり全部出したり出きる様にしたいんです。
[1] 授業単元:Cぷろぐらみんぐ [2] 問題文:複素数a+bi(iは複素数)のn乗を求めて出力するプログラムを作れ。 a,bはdouble型とし、nはint型で、キーボードから入力するものとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: はやめでおねがいします [5] その他の制限:特にないです
「はやめ」っていつまでだよ 明日の朝とかもうちょっと具体的に書け
なんでいちいち外部に上げるかね
>>308 問題文じゃねええええええええええええええええええええええええええええええええええええええええええ
>>308 double 型の値を返すんだから、
FXかFX1じゃねえの?
問題文がないしわけがわからんよ
312 :
308 :2007/07/19(木) 01:28:11
>>310 問題文がついてないんです・・・
一次正弦関数の補完値を求めたいみたいなんですけど
グーグル先生に聞いてもよく分かりませんでした。
は? 問題文がないなら宿題じゃねえじゃん
>>306 int main(){
double a,b,t; int n;
scanf("%lf,%lf,%d",&a,&b,&n);
while(--n>0)
t=b,b=2*a*b,a=a*a-t*t;
printf("%g+%gi\n",a,b);
}
[1] 授業単元: c言語 [2] 問題文(含コード&リンク): 整数nを入力し、1~nまでの整数を使い、n桁の組み合わせを出力する。 同じ整数は2回以上使ってはいけない。 例えば3を入力した場合 012 021 102 120 201 210 を出力したい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 7/23 [5] その他の制限: 特に無し もうさっぱりです。お願いします。
316 :
308 :2007/07/19(木) 01:32:04
>>316 俺たちはその「ここ埋めてきて」とか一時正弦関数の補完とか言われてな・・・
もしかして文章で伝えられずに口頭だったから何も書かなかったのか・・・
もうだめぽ
>>315 > 整数nを入力し、1~nまでの整数を使い、n桁の組み合わせを出力する。
...
>例えば3を入力した場合
>012 021 102 120 201 210
この例だったら、1 ~ n じゃなくて 0 ~ n-1 じゃないのか?
319 :
300 :2007/07/19(木) 01:46:55
とりあえず1文字ずつ入力して1文字ずつ出力しようとしてみたけど どうしても最後の文字(1番最初に入力した物)が出力されません。。 配列には入ってるみたいなんだが・・・
1違いは良く見直せというのはプログラミングをやる人間にとっての常套句
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 線形リストを用いて過去に素数とわかった数を保存し、指定された数(N)以下の素数を求めるプログラムを作成する。 Nはプログラム実行中に外部から入力できるようにする。 ・素数かどうかを判定する際には線形リストに保存されている素数のみ利用する。 ・引数として与えた数が、引数として与えられた素数を保存する線形リスト中の素数で割り切れるかどうかを判定する関数を作る。 ・順番に小さい数から線形リストに保存してある素数で割り切れるかどうかを判断し、割り切れない場合(素数)は線形リストに加えていく。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C/C++の違いがわからない [4] 期限: はやめ [5] その他の制限: 特になし わ か り ま せ ん
>>318 うっかりしてました。
123 132 213 231 312 321
の間違いです。
>>320 基本的に上限はありませんが、あんまり数が大きいと
馬鹿になりませんので…。
大体5か6くらいまでを想定してます。
>>300 変な所は色々あるんだが、とりあえず、
case 3:
while(sp>0){
sp--;
printf("%c", Stack[sp]);
}
printf("\n");
break;
>>322 最初は線形リストになにも保存されていないと思われるが、どうする?
何? さくらアップローダーが流行ってるの?
328 :
300 :2007/07/19(木) 02:10:22
きったないプログラムだけどなんとか動くようになりました。。。 あとは修正頑張ってみます。 ありがとうございました。
>>323 #include <stdio.h>
#define N 6
int nextperm(int p[], int n){
int i, j, t;
i = n - 1;
p[0] = 0;
while (p[i] >= p[i + 1]) i--;
if (i == 0) return 0;
j = n;
while (p[i] >= p[j]) j--;
t = p[i]; p[i] = p[j]; p[j] = t;
i++; j = n;
while (i < j){ t = p[i]; p[i] = p[j]; p[j] = t; i++; j--; }
return 1;
}
int main(){
int i, n, p[N + 1];
do{ scanf("%d", &n); }while(n < 1 || N < n);
for (i = 1; i <= n; i++) p[i] = i;
do{ for (i = 1; i <= n; i++) printf("%d", p[i]); putchar(' '); }while(nextperm(p,n));
return 0;
}
ぐぐって出てきたのほぼそのまんまだから動作原理はシラネ
自分で書いたソースを晒して質問するのって、それなりに大変だよな。 宿題丸投げして、回答があっても放置される事が多いけど。
333 :
306 :2007/07/19(木) 07:44:56
今日、19日のうちにおねがいします
>>329 まさにそのまんまがあったんですね…。
ありがとうがざいます。
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): a,b,c,d,eに1~5の整数を一つずつ入れて a + b - c * d / e の結果の最大になる値、最小となる値、そのときのa,b,c,d,eを求めよ。 (算数的に計算するのではなく全パターンをためすこと。) また、結果は何通りあるかも求めよ。 [3] 環境 [3.1] OS: (/Linux/) [3.2] コンパイラ名とバージョン: (gcc 2.95-2) [3.3] 言語: C [4] 期限: 2007年07月20日17:40 [5] その他の制限: 無し
[1] プログラミング [2] 問題 配列 int a[12]を用意し、a[i] = I ( i=0,1,2,…,10),a[11] = a[0]+a[1]+a[2]+…[10]とせよ [3.1] OS:windows [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C ++ [4]本日まで 問題の意味がよく分からないかもしれませんがよろしくお願いします。
338 :
デフォルトの名無しさん :2007/07/19(木) 11:56:02
>>338 ありがとうございます。
ところで、count が120になったのですが、
a + b - c * d / e
のaとbまたはcとdを入れ替えると同じになると思うので
値は5*4*3*2*1通り未満になりませんか?
よくわからないので、もうすこしがんばってみます。
>>339 同値になる入れ換えは考慮してない。
必要かな?
>>340 どちらかといえばあったほうがいいです。
342 :
デフォルトの名無しさん :2007/07/19(木) 12:25:21
授業単元:プログラミング 問題文(含コード&リンク): 環境 OS:Windows xp コンパイラ名とバージョン:ボーランド 言語:C 期限: その他の制限: テーマ:ポインタの利用 英文字の単語の出題をカウントしなさい 英文字に含まれる単語数は10以下とする ポインタ配列を使用する char english[] = "My name is Taro.Your name is Hanako."; 実行画面 My:1 name:2 is:2 Taro:1 Your:1 Hanako:1
343 :
デフォルトの名無しさん :2007/07/19(木) 12:28:13
授業単元:プログラミング 問題文(含コード&リンク): 環境 OS:Windows xp コンパイラ名とバージョン:ボーランド 言語:C 期限: その他の制限: テーマ:ユーザ関数の作成 問題1:2値の最大を求めるユーザ関数を作成しなさい プロトタイプ宣言:int Max(int dt1,int dt2); 実行画面 数値1を入力==>10 数値2を入力==>15 大きい値:15
>>343 #include <stdio.h>
int Max(int dt1,int dt2);
int main(void) {
int a,b,c;
printf("数値1を入力==>");
scanf("%d",&a);
printf("数値2を入力==>");
scanf("%d",&b);
printf("大きい値:%d",Max(a,b));
return 0;
}
int Max(int dt1,int dt2) {
return dt1>dt2 ? dt1 : dt2;
}
>>345 たとえば
1 +2 -3 *4/ 5
1と2の入れ換えで結果が重複して120の半分の60通りになり
3と4の入れ換えで結果が重複して60の半分の30通りになりそうなので
あっていると思います。
ありがとうございました。
ちなみにこれは算数オリンピックの第一問です。
>>346 aとb、cとdの値に順序性を持たせた。
宿題ではないのか?
>>337 です。
聞いてみたところどうもfor文を使うらしいのですがどこに使えばいいのか分かりません
よろしくお願いします。
>>337 >>349 int a[12];
int i;
for(i = 0; i < 11; i++) a[i] = i;
a[11] = 0;
for(i = 0; i < 11; i++) a[11] += a[i];
>>337 です。
たびたびすみません。
先ほどの問題でデバックの結果がa[11] = a[0]+a[1]+a[2]+…+a[10]と表示できればいいそうです。
よろしくお願いします
printf("a[11] = %d\n", a[11]);
353 :
デフォルトの名無しさん :2007/07/19(木) 13:54:06
何方か342お願いします
356 :
デフォルトの名無しさん :2007/07/19(木) 14:06:55
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク) 演算子のオーバーロードにより、複素数a,bの絶対値の大小を与える 演算子 < を作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: CC [3.3] 言語:C++ [4] 期限: 7月20日 どなたかよろしくお願いします。
>>356 #include <complex>
template <typename T>
bool operator<(const std::complex<T>& left, const std::complex<T>& right) {
return std::abs(left) < std::abs(right);
}
358 :
デフォルトの名無しさん :2007/07/19(木) 14:32:44
予言者か!
362 :
デフォルトの名無しさん :2007/07/19(木) 15:39:45
363 :
デフォルトの名無しさん :2007/07/19(木) 15:43:07
授業単元:プログラミング 問題文(含コード&リンク): 環境 OS:Windows xp コンパイラ名とバージョン:ボーランド 言語:C 期限: その他の制限: テーマ:標準関数の利用 問題1:文字列を入力、英文字とそれ以外を収納する配列に振り分けしなさい 使用する標準関数:isalpha()など 実行画面 文字列入力==>A12H&jfTy8uZ3# 英字:AHjfTyuZ その他:12&83# 問題2:文字列と削除文字列を入力し、文字列中から削除文字列を排除しなさい 使用する標準関数:strncmp(),strcpy(),strlen()など 実行画面 文字列入力(m1)==>ABCDEFAADABC
364 :
デフォルトの名無しさん :2007/07/19(木) 15:55:56
syntax errorってなんですか? cygwin上でemacsを使ってCのソースの入力してコンパイルしたのですが、 syntax errorとでまして、コンパイルできません^^; ↓ syntax error before '{' token とでます^^; 基本中の基本かもしれませんが^^; 誰かわかりますか?
365 :
364 :2007/07/19(木) 15:59:12
失礼・・・カテ違いでした^^;
>>306 #include <stdio.h>
int main(void){
double a, b, prev_a, prev_b, const_a, const_b;
int i, n;
printf("a b n : "); scanf("%lf%lf%d", &a, &b, &n);
const_a = a, const_b = b;
for(i = 1, prev_a = a, prev_b = b; i < n; i++, prev_a = a, prev_b = b){
a = prev_a*const_a - prev_b*const_b;
b = prev_a*const_b + const_a*prev_b;
}
printf("%g + %gi\n", a, b);
return 0;
}
369 :
368 :2007/07/19(木) 17:23:40
後、ボーランドで確認してない。よろ
370 :
デフォルトの名無しさん :2007/07/19(木) 17:58:40
[1] 授業単元:プロA [2] 問題文 構造体 struct coord{ float x; float y; } を用い、また、coord.data(内容は以下のようなもの)を作成して、 1.2 3.4 2.1 4.5 3.2 2.1 2.0 4.9 5.3 2.8 1.5 3.2 これらの値をメンバx,yに読み込み、(例えばa.x,a.y,b.x,b.y 又はa[0].x,a[0].yなど好きな変数名を作成すればよい。 構造体はa[0],a[1]のように配列でもよい。 この場合、メンバとはa[0].xなどとして結びつく) xとyの平均をoutput2.dataに出力するプログラムを作れ。 [3] 環境 Windows ,CC ,C++ [4] 期限: 7/19 21:00 よろしくお願いします。
>>373 下の二つの関数を追加して
int gcd(int a, int b){ // 最大公約数を求める関数
int c;
while((c=a%b)!=0){a=b;b=c;}
return b;
}
int gcd3(int a, int b, int c){
return gcd(gcd(a, b), c);
}
if(gcd3(a, b, c)!=1) // これが成り立つ時はなにかの倍数
>>373 問1は、ループをxyz共に1000回ずつ回すのは無駄だから
for(x=1; x<=MAX-2; x++) {
for (y=x+1; y<=MAX-1; y++) {
for (z=y+1; z<=MAX; z++) {
みたいにすれば速くなるよ
問2はできてるんじゃないの?
378 :
デフォルトの名無しさん :2007/07/19(木) 20:48:32
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):実行結果と同じ内容を表示するプログラムの作成 実行結果 + ++ +++ ++++ +++++ [3] 環境 [3.1] OS:Windows Vista Business [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005 [3.3] 言語:C言語 [4] 期限:2007年9月3日 [5] その他の制限:①文字の出力にはprintfを使用し、プログラム中に2回のみ使用できるものとする ②アルゴリズムはwhile文の2重ループで行うこと
379 :
デフォルトの名無しさん :2007/07/19(木) 20:49:04
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):月(1~12)と日(1~31)をキーボードから入力し、入力された日付を表示する プログラムの作成 実行結果 (「」内の部分はキーボードからの入力) 月を入力:「15」 月の入力は1以上12以下にしてください 月を入力:「8」 日を入力:「46」 日の入力は1以上31以下にしてください 日を入力:「25」 入力された日付は8月25日です [3] 環境 [3.1] OS:Windows Vista Business [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005 [3.3] 言語:C言語 [4] 期限:2007年9月3日 [5] その他の制限:①月の入力については1~12で範囲チェックを行い、範囲外の入力だった 場合は、エラーメッセージを表示して再入力させること ②日の入力については1~31で範囲チェックを行い、範囲外の入力だった 場合は、エラーメッセージを表示して再入力させること
>>378 #include <stdio.h>
int main(void)
{
int i=0, j;
while(i < 5){
j = 0;
while(j <= i){
printf("+");
j++;
}
printf("\n");
i++;
}
return(0);
}
>>377 問2はいきなり7309から始まるんですよ…
>>382 いや、それはそれ以前に処理されたものが画面に表示しきれていないだけでは・・・
実際には処理されているよ。
>>382 っ a.exe > result.txt
プロンプトのバッファを超えただけと思う
294です。おねがいします
386 :
デフォルトの名無しさん :2007/07/19(木) 21:23:49
ああ、1周でいいのか
>>379 #include <stdio.h>
int main(void){
int m, d, tmp;
while(1){
printf("月を入力:");
scanf("%d", &m);
if(m<1 || m>12) fprintf(stderr, "月の入力は1以上12以下にしてください\n");
else break;
}
switch(m){
case 2:
tmp = 2;
break;
case 4:
case 6:
case 9:
case 11:
tmp = 1;
default:
tmp = 0;
}
while(1){
printf("日を入力:");
scanf("%d", &d);
if(d < 1 || d > 31-tmp) fprintf(stderr, "日の入力は1以上%d以下にしてください\n", 31-tmp);
else break;
}
printf("入力された日付は%d月%d日です\n\n", m, d);
return(0);
}
うわあ、switch文でbreak;書き忘れた><
>>379 #include <stdio.h>
int main(void) {
int month = 0, day = 0;
while (month<1 || 12<month) {
printf("月を入力:");
scanf("%d", &month);
if (month<1 || 12<month) printf("月の入力は1以上12以下にしてください\n");
}
while (day<1 || 31<day) {
printf("日を入力:");
scanf("%d", &day);
if (day<1 || 31<day) printf("日の入力は1以上31以下にしてください\n");
}
printf("入力された日付は%d月%d日です", month, day);
return 0;
}
株式会社リアルクソエイト
http://www.realcreate.net/ WILLTY(ウィルティ)はネットワーク上や
外部媒体からウィルスやハッカーが侵入する際の
異常な電子の動きをキャッチし、コンピュータの入り口で
確実にブロックしてしまうという世界初の画期的な方法が
とられています。
たとえ、ウィルス感染したCD,FD,USBなどをインストールしても、
コンピューターがウィルス感染することはありません。
正常なデーターのみがコンピューター内に取り込まれます。
■ 電源コンセントからの情報漏洩をブロック
WILLTYは電源LANシステムを応用したデーター漏洩やハッキングをブロックします。
コンピュータ電源をコンセントに差し込んだ瞬間から機密情報は丸裸になっています。
LAN上のセキュリティーをどれだけ強固にしても、電源コンセントから
あなたの情報は筒抜けになっています
>>393 if ( dvsr >= trg ){
このtrgって、sqrtを取得して比較すれば
素数判定が早くできないかな。
dvsr++;
これも奇数を見るだけで良いのじゃないかな。
チェック対象件数が半減すると覆うよ。
↑のソフト使った人感想ちょうだいw
ウィルスに感染した電子ってスピンか何かが違うのか?
398 :
デフォルトの名無しさん :2007/07/19(木) 23:24:02
こんなソフト通用すると思ってんのかw
>>394 あぶねえ。
俺、“そういう試みをチャレンジしている会社がある”と信じるところだった。
そういうウィルスを作れたら、 量子コンピュータどころじゃない、 21世紀最大の発明となる鴨。 遺伝情報の媒体って超ひもあたりでやるのか? エンコードやデコードどうするのかなw
>>294 とりあえずは問題の意味が分からないんだけど、それは置いておいて
>>294 >>295 に出ているソースをベースにして作らないといけないの?
コンパイルさえできないんだけど。
>>294 >>295 です
書いてあるプログラムのmainとnumber大域変数は変更しないで
intのスタックを2つ作る(大域変数)。
1つのスタックは数値をいれる。もう1つには演算子を表す数をいれます。
コンパイルは出来なくてもいいんです。確か1つ引っかかりますよね。
406 :
デフォルトの名無しさん :2007/07/20(金) 06:45:10
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 問題010 多分岐型(2) 次の説明は冬季オリンピックの開催年についての説明である。 キーボードから変数year に入力された年号について、 開催された年に第何回大会が開催されたか 画面に表示するプログラムを作成しなさい。 また開催年でない場合は、画面にその旨メッセージを出力すること。 【説明】 1924 年の第1 回大会以来、4 年に1 度開催されている。 1992 年の第16 回大会までは夏季大会と同じ年に開催されたが、 1994 年の第17 回大会からは、夏季大会の2 年後に開催されるようになった。 1940 年、1944 年は第二次世界大戦の影響で中止。 次回は2010 年、第21 回大会、カナダのバンクーバーで開催予定。 [3] 環境 [3.1] OS: Windows; [3.2] コンパイラ名とバージョン: (VS) [3.3] 言語: C [4] 期限: ([2007年07月21日まで] [5] その他の制限: よろしく。
>>406 ほらよ、とっときな
#include <stdio.h>
int main(void){
int year;
while(1){
printf("年号は?");scanf("%d",&year);
switch(year){
case 1924:puts("第①回");break;
case 1928:puts("第②回");break;
case 1932:puts("第③回");break;
case 1936:puts("第④回");break;
case 1948:puts("第⑤回");break;
case 1952:puts("第⑥回");break;
case 1956:puts("第⑦回");break;
case 1960:puts("第⑧回");break;
case 1964:puts("第⑨回");break;
case 1968:puts("第⑩回");break;
case 1972:puts("第⑪回");break;
case 1976:puts("第⑫回");break;
case 1980:puts("第⑬回");break;
case 1984:puts("第⑭回");break;
case 1988:puts("第⑮回");break;
case 1992:puts("第⑯回");break;
case 1994:puts("第⑰回");break;
case 1998:puts("第⑱回");break;
case 2002:puts("第⑲回");break;
case 2006:puts("第⑳回");break;
default:puts("開催されなかった、あるいはどうなるか分かりません。");break;
}}return 0;
}
>>405 コンパイル出来ないのは、
「大域変数を変更する」以前の
「書いてあるプログラム」の問題。
410 :
デフォルトの名無しさん :2007/07/20(金) 11:06:04
411 :
タウリン2000mg配合 :2007/07/20(金) 11:13:28
412 :
デフォルトの名無しさん :2007/07/20(金) 11:42:11
アマリニモカワイソスギル
>>411 nagoya-u.ac.jpって書いてあるけど、ブラクラ?
416 :
デフォルトの名無しさん :2007/07/20(金) 13:15:02
>>363 #include <stdio.h> #include <string.h> #include <ctype.h>
#define SIZE 500
int main()
{ char English[SIZE] = {'\0'}; char Other[SIZE] = {'\0'};
char buff[SIZE]= {'\0'}; char *temp; int i,j=0,k=0; int len;
fgets(buff,sizeof(buff),stdin); if(temp = strchr(buff, '\n'))
*temp = '\0';
for(i = 0; buff[i] != '\0'; i++){
if(isalpha(buff[i]))
English[j++] = buff[i];
else
Other[k++] = buff[i];
}
printf("English %s Other %s \n",English,Other);
printf("英文字入力\n");
fgets(buff,sizeof(buff),stdin);
if(temp = strchr(buff, '\n'))
*temp = '\0';
printf("削除文字入力\n");
fgets(Other,sizeof(Other),stdin);
if(temp = strchr(Other, '\n'))
*temp = '\0';
len = strlen(Other);
while(temp = strstr(buff,Other)){
memcpy(temp,temp+len,sizeof(buff));
}
printf("削除後 %s \n", buff);
return 0;
}
[1] 授業単元:演習 [2] 問題文:自然数nを入力すると、任意のディレクトリに任意の名前でn個のフォルダを作成するプログラムを作りなさい。 なお、危険防止のためnの上限は5とする事。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (vs) [3.3] 言語: (C言語) [4] 期限:今日中
419 :
デフォルトの名無しさん :2007/07/20(金) 13:38:38
C++の認定試験てあるの?
[1] 授業単元: 演習 [2] 問題文(含コード&リンク): 探索パターンと置換パターン、入力ファイル名を引数にとり、 入力ファイルの探索パターンに合致する部分をすべて置換パターンに置き換えるプログラムを作成せよ パターンにはsedで扱える正規表現のうち、下の部分が使えるように実装せよ . 改行をのぞく任意の1文字にマッチ [abc…] aまたはbまたはc…のうちいずれか1文字にマッチ d* 0個以上のd(dは文字または正規表現)にマッチ \(str\) 文字列str(strは正規表現を含んでよい)二マッチ \n n番目に表れた\(...\)の中の文字列にマッチ (nは1から9の整数) \c cに^,$,.,*,[,\をおくことによりそれ自身にマッチ .* 0個以上の改行を除く任意の文字にマッチ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 07年7月22日 [5] その他の制限: system()等使わずに正規表現を実装すること
「2個のサイコロ振りをシミュレートするCプログラムを書け。1個目のサイコロ振りにも2個目サイコロ振りにも関数randを使い、2つの出目の和を計算する。」 この問題です!よろしくぅお願いします!
>>421 #include <stdlib.h>
#include <stdio.h>
int main() {
int a,b;
a = rand() % 6 + 1;
b = rand() % 6 + 1;
printf("%d", a + b);
return 0;
}
>>422 ありがとうございますぅ!ただ、何と何が出たか分からないから個別に表示もおながいもうしあげます
printf("%d + %d = %d\n", a, b, a + b);
>>423 ほれ
#include <stdlib.h>
#include <stdio.h>
int main() {
int a,b;
a = rand() % 6 + 1
printf("a = %d\n", a);
b = rand() % 6 + 1;
printf("b = %d\n", b);
printf("%d", a + b);
return 0;
}
おー!すばらしい!!!あと、半か丁か表示できますか??
if(a % 2 == 0) printf("aは丁"); else printf("aは半"); if(b % 2 == 0) printf("bは丁"); else printf("bは半");
ちがうよ、2個の合計で丁か半か判断するんだってばwww
if((a + b) % 2 == 0) printf("丁"); else printf("半");
あと、掛け金もおながいします その辺はきでんのセンスで
>>431 なんでいっぺにいわないんだい?
自分でやりなさい。
>>431 指定の口座に3本ほど振り込んでくれないか
お金はないので他のお礼で。。。
釣りだろ
436 :
デフォルトの名無しさん :2007/07/20(金) 14:25:25
6カ月分のガス料金を求めましょう 使用料金=基本料金+(1㎥当たりの単価×使用量) 使用量 基本料金 1㎥当たりの単価 25㎥以下 690円 127円 25㎥から500㎥以下 1170円 108円 500㎥より多い 6980円 96円 月の使用量を順番にキーボードから入力する。 使用料金は基本料金+(1㎥当たりの単価×使用量)で計算する。 各月の使用料金を算出して以下のように表示させる。 例) 1gatu 2gatu 3gatu 4gatu 5gatu 6gatu Goukei heikin Charge 12500 25600 35410 19860 13250 2980s0 1278540 21906
㎥が文字化けしているぞ?
int ryokin(int siyou) { int kihon, tanka; if(siyou <= 25) { kihon = 690; tanka = 127; } else if(siyou <= 500) { kihon = 1170; tanka = 108; } else { kihon = 6980; tanka = 96; } return kihon + siyou * tanka; }
int i, siyou[6], charge[6]; int gokei,heikin; gokei = 0; for(i = 0; i < 6; i++) { printf("%d月の使用量:", i); scanf("%d", &siyou[i]); charge[i] = ryokin(siyou[i]); gokei += charge[i]; } heikin = gokei / 6; printf("1gatu 2gatu 3gatu 4gatu 5gatu 6gatu Goukei heikin \n"); printf("Charge"); for(i = 0; i < 6; i++) printf("%6d", charge[i]); printf("%6d", gokei); printf("%6d\n", heikin);
>>443 えええええええええええええええええええええええええええええええ
ええええええええええええええええええええええええええええええ
えええええええええええええええええええええええええええええ
ええええええええええええええええええええええええええええ
えええええええええええええええええええええええええええ
ええええええええええええええええええええええええええ
えええええええええええええええええええええええええ
ええええええええええええええええええええええええ
えええええええええええええええええええええええ
ええええええええええええええええええええええ
えええええええええええええええええええええ
ええええええええええええええええええええ
えええええええええええええええええええ
ええええええええええええええええええ
えええええええええええええええええ
ええええええええええええええええ
えええええええええええええええ
ええええええええええええええ
えええええええええええええ
ええええええええええええ
えええええええええええ
ええええええええええ
えええええええええ
ええええええええ
えええええええ
ええええええ
えええええ
ええええ
えええ
ええ
え
>>444 for(int i = 0; i < 31; i++) {
for(int j = 0; j < 31 - i; j++) printf("え");
puts("");
}
なにこの流れ
あと、
>>418 も私です
お礼はできませんが、ほんとお願いします
449 :
デフォルトの名無しさん :2007/07/20(金) 15:16:18
名前は指定なしで勝手にきめていいの?
指定しないほうがありがたいです☆
451 :
◆DpMW3bRjps :2007/07/20(金) 15:26:22
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク):任意の文字列を入力し、その文字列の中に任意の文字が何個入っているかを出力する プログラムのソースコードを提出しなさい。 実行例) 文字列を入力してください yamamotoyama さがす文字を入力してください y 入力された文字列の中に指定された文字は2個あります [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2007年07月23日17時まで [5] その他の制限:今回初めて文字配列というものを習いました!春から初めた初心者です よろしくお願いします!!
>>451 #include <stdio.h>
#define N 128
int main(void)
{
char target, str[N];
int i, count=0;
printf("文字列を入力してください\n> ");
gets(str);
printf("さがす文字を入力してください\n> ");
gets(&target);
for(i=0 ; i<N ; i++){
if( str[i] == target ) count++;
}
printf("\n入力された文字列の中に指定された文字は%d個あります\n", count);
return(0);
}
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4686.txt [3] 環境
[3.1] OS: (Windows/Linux/等々) 自宅はWindows、学内はLinux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) 自宅:Microsoft Framework SDK 学内:gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 7月21日まで(おそらく日付変わるまでなら大丈夫)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
基本的に情報系の高校生でも組めるようなプログラムにしていただけると助かります。
多少複雑になってもいいので、できるだけ基本的な命令(ifとかfor)でお願いします
454 :
◆DpMW3bRjps :2007/07/20(金) 16:25:21
455 :
◆UoNQqijD4I :2007/07/20(金) 17:08:04
>452ですが。今コンパイルしたら下のようにエラーがでました(><) /tmp/cc2eSWqP.o(.text+0x38): In function `main': : warning: the `gets' function is dangerous and should not be used.
内容: [1] 授業単元:C++ [2] 問題文 文字列の長さを計算する関数を作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C++ [4] 期限: (20日18:00まで] [5] その他の制限: 以下の内容に手を加えて欲しいのですが・・・ #include <stdio.h> #define MAX 100 string_length(char str[MAX]); int main(void){ int i,string_len; char string[MAX]; printf("入力:"); scanf("%s",string); printf("文字列の大きさは%dです。",string_length(string)); return(0); } int string_legth(char str[MAX]){ int i; int str_len; for(i=0;str[i]!='\0';i++);{ } str_len=i; return(str_len); } Error: 外部シンボル '_string_length' が未解決 と、出て四苦八苦してるのでよろしくお願いします
> char target, str[N]; > gets(&target); コレは幾らなんでもマズい
>>456 - string_length(char str[MAX]);
+ int string_length(char str[MAX]);
- int string_legth(char str[MAX]){
+ int string_length(char str[MAX]){
460 :
456 :2007/07/20(金) 17:22:01
>>459 さん
ありがとうございます。俺が間抜けでした!!
レポート出してきます!!
461 :
デフォルトの名無しさん :2007/07/20(金) 18:32:36
試験勉強中です…付き合ってくださる師匠様募集中… [1] 授業単元:関数を自作する [2] 問題文:n!を計算するプログラムを作る [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:??? [3.3] 言語:C++ …なんですけど、先生はいつもC言語と混ざっている気がする。 #include <stdio.h> int kaijo(int n) { int ans,i; ans=i; for(i=1;i<=n;i++) ans*=i; return ans; } int main(void) { int n,k; printf("n="); scanf("&d",&n); k=kaijo(n); printf("%d!=%d\n",n,k); return 1; } とやってみたら、 n=5 10494432!=0 となってしまって…。
scanf("&d",&n);をscanf("%d",&n);に変えると幸せになれる
kaijo()もおかしいから、それだけじゃ幸せにはなれない
順を追って考えろ int ans, i; このときのansの値とiの値は特に決められていない だからans = i; としたところで何も意味がない ans = 定数にしてやれ
>>463 それだけで幸せになれました。ありがとうございます。
またわからないとこが出てきたら来ます。
これで電通かよ・・・ 大阪電気通信大学の間違いじゃないのか・・・
いや、私は電気通信大学じゃないですよw 電気通信大学意以外でも電通って訳すところ、以外とたくさんあるようで。
[1] 授業単元: 情報演習基礎 [2] 問題文(含コード&リンク): ・ 区間[ a, b ]において連続なる関数f ( x) について,定積分の計算を行う。 ・適用する式は,シンプソンの公式f ( x)=1/(1+x2)とする。 ・a=0, b=100, e=0.0000001の場合の積分値とnの値を表示する ・各変数(nを除く)の型はdoubleとする [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: visualstudio2005 [3.3] 言語:C++ [4] 期限: 2007 7/22 [5] その他の制限:標準ライブラリは禁止 よろしくおねがいします。
#include <stdio.h> int add(int a,int b) { int c=a+b; a=100;b=200; return c; } int main(void) { int a,b,c; a=1;b=2;c=add(a,b); printf("%d+%d=%d\n",a,b,c); return 1; } これの実行結果が1+2=3になるんですけど、最初の方の100も200も消えちゃってるってことですか?
>>472 関数の中で宣言した変数は関数を抜けると消えてなくなるよ?
ここは宿題スレであって質問スレではないから 質問をしたいなら質問スレに行け。
おっと、すみません。 初心者歓迎スレに移行しまする。
477 :
◆UoNQqijD4I :2007/07/20(金) 20:27:13
>>457 さん、fgetsに変えたのにまだエラーがでます泣
478 :
◆UoNQqijD4I :2007/07/20(金) 20:30:25
>477ですが、ちなみに今度はこんなエラーです tin.c: 関数 `main' 内: tin.c:12: error: too few arguments to function `fgets' tin.c:14: error: too few arguments to function `fgets' tin.c:16: error: `gcc' undeclared (first use in this function) tin.c:16: error: (Each undeclared identifier is reported only once tin.c:16: error: for each function it appears in.) tin.c:16: error: 文法エラー before "for" tin.c:16: error: 文法エラー before ')' token tin.c: トップレベル: tin.c:20: error: 文法エラー before string constant tin.c:20: 警告: conflicting types for built-in function `printf' tin.c:20: 警告: data definition has no type or storage class
>>478 いやゴメン、使い方はオンラインマニュアルなりで確認しようね
とりあえず
fgets(buf, sizeof(buf), stdin);
にすればおk
あと
>>458
481 :
480 :2007/07/20(金) 20:35:50
bufじゃなかった、strだった
finを思い出した。
スイマセンこれは宿題なんでこっちで教えてください。 1+2+3+…+nをつくるんですが、 #include <stdio.h> int sum(int n) { int ans,i; ans=i; for(i=0;i<=n;i++) ans+=i; return ans; } int main(void) { int n,s; printf("n="); scanf("%d",&n); s=sum(n); printf("1から%dまでの和は%dです。\n",n,s); return 1; } こうしたら実行結果が n=5 1から5までの和は16です。 となってしまったんですが、どこで1増えてしまってるんでしょうか?
>>483 よく見てないけど、sum()の中の
ans=i;
ans=i;をans=0;に変えると幸せになれる
ああ! ans=0; ですね!ありがとうございました!
上に書いてあったのに読んでないんだな
宿題を人に投げる人間なんてそんなもん。
ans=iはans=1の写し間違いだとesp
おお、なるほど。
コピペに移し間違いなんt
>>479 C言語にprintf関数やputs関数など、多数の関数群(標準ライブラリ関数)があるように
よく読んだか?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 次のようにプログラムを作成せよ。以下のプログラムのmainとnumber大域変数は変更しないで、 intのスタックを2つ作る(大域変数)。1つのスタックは数値をいれる。もう1つには演算子を表す数をいれる #include<stdio.h> #include<ctype.h> char *p;char c[100]; int expression(void); int term(void); int number(void); main(){ int ans; while(1){ printf("Enter expression : "); fgets(c,90,stdin); p=&c; if(*p == '\n') {break;} ans=expression(); printf("Answer:%d\n" , ans); } }
int expression(){ int ans; ans = term(); while(1){ if(*p == '+'){ *p++; ans = ans + term(); } else if(*p == '-'){ *p++; ans = ans - term(); } else break; [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2007年07月21日 [5] その他の制限:特になし
>>494 翻訳ソフトにかけた日本語みたいだな。さっぱりわからん。
>>494 こんな問題出す糞教官は死んだ方がいいな
>>493 読み飛ばして勘違いしていました
すみません
>>470 は標準ライブラリではなく
C++標準ライブラリです
>>498 std::coutとかも標準ライブラリじゃねぇの?
必要なものはアセンブラで組めと
>>494 です
書いたプログラムのmainとnumber大域変数は変更しないで、
intが2つのに変えます。1つにはスタックは数値をいれて、もう1つには演算子を表す数をいれます。
それで、+-*/を出来るようにします。
例えば
+の時は0
-の時は1
*の時は2
/の時は3 を入れるそうです。
日本語でおk
>>1 に
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ってあるから標準ライブラリ使うなって言うトチ狂った事が多発するんじゃね?
ここで
[5] その他の制限: (どこまで習っているか、ある特定の標準ライブラリ関数は使ってはいけない等々)
って書いとけばちょっとはマシになるのでは?
別にどうでも良い。 スルーするなり、非標準の関数を用いるなり、好きにすれば良いじゃん。
[5] その他の制限:(#include<stdio.h>は使ってはいけない等々) [6] どこまで習っているか (for文を習いました等々) もっと具体的に、そして分けたほうがいいんじゃないか?
>>508 括弧はどこの括弧ですか?大域変数なら、その大域変数を用いて
プログラムを作成するみたいです
>>506 再帰
int fib(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else return fib(n-1) + fib(n-2);
}
非再帰
int fib(int n) {
int a = 0;
int b = 1;
while (n > 0) {
int t = a+b;
a = b;
b = t;
n = n-1;
}
return a;
}
512 :
508 :2007/07/20(金) 23:48:54
>>494 , 510
入力する式で括弧を使うかってこと
513 :
デフォルトの名無しさん :2007/07/20(金) 23:52:35
>>506 そのフィボナッチ数列あってる?
初項と第2項は共に1じゃなかったっけ?
>>513 fib(1)とfib(2)を1にしたいんじゃないかな
そうすっと、fib(0)を0にしてfib(1)を1にするとちょうどよくなる
>>512 括弧は使っても使わなくても大丈夫です。
とにかく、問題文の内容を使い動けばいいみたいです
>>506 #include <stdio.h>
int fib1(int n) { //再帰
if (n == 0) return 0;
else if (n == 1) return 1;
else return fib1(n-1) + fib1(n-2);
}
int fib2(int n) { //非再帰
int a = 0;
int b = 1;
while (n > 0) {
int t = a+b;
a = b;
b = t;
n = n-1;
}
return a;
}
int main(void) {
int n[] = {10, 20, 30, 40, 45};
int i;
for (i=0;i<5;i++) printf("%d ", fib1(n[i]));
putchar('\n');
for (i=0;i<5;i++) printf("%d ", fib2(n[i]));
putchar('\n');
return 0;
}
>>515 >以下のプログラムのmainとnumber大域変数
mainとnumberは大域変数なのか?
>とにかく、問題文の内容を使い動けばいいみたいです
前スレで回答があったんだがな。気がつかなかった?
519 :
デフォルトの名無しさん :2007/07/21(土) 02:36:41
>>517 以下のプログラムのmainとnumber大域変数は変更しないで、
1つのスタックは数値ともう1つには演算子を表す数を大域変数にすればいいと
思います
>>519 酔っぱらっているので、ロジックはチェックできないがw
まず、変数と関数に同じcheckを割り当てることを止めろ。
配列={0}とできるのは、配列変数の宣言をする時。
それ以外の箇所で初期化したいなら、
ループで各要素に0を代入するか、
>memset(area,sizeof(area),0);
とかするといいぞ。
>>520 宿題の回答を依頼したいなら、
使う用語は理解してからにしてくれ。
大域をpublicと言う意味で使うにしても、
mainやnumberは変数ではないよ。
スタックと言う言葉の意味は分かっているのか?
依頼したい内容が、そもそも通じてないから、
回答が無いのじゃないかな?
>>521 >>523 あやふやな言い方ですいません。mainとnumber大域変数は変更しないで、
intのスタックを2つ作りたいです。
1つのスタックは数値をいれる。
もう1つには演算子を表す数をいれる。です。
よろしくお願いします
>>519 battle→put→battleって流れがあるからずっと対戦続けてるとばぐるよ。
int check[8]がグローバルである必要が無い。check関数内のみでOK。
もちろん名前は>522の言うように別でw
あと、do-whileですっきりしそうなところがいっぱいある。
別に直さなくても動くから無視してくれていいけど。
だから、そもそもmainは変数じゃないって。 変数じゃない物を、変更できる訳はないよ。 あなたが言う「スタック」とは何なのか 説明してくれないと、意味が分からない。
527 :
526 :2007/07/21(土) 03:39:36
>>524 あやふやな言い方を直したつもりなのか同じことを繰り返しているぞw
元のプログラムに「number大域変数」というものが存在しない。
よって変更するしないとかいう意味がわからない。
提示したプログラムだが途中までしかコピペしていないんじゃないか?
break;なんかで終わってるしterm関数が見当たらない。
>>526 スタックはおそらくそのままスタックでいいかと。
2つってのが引っかかるが演算子と数値で2つ作るんだろう。
「1+2-3」って入力ならスタックA「1 2 3」スタックB「+ -」になって
popA popB popAの演算をスタックがなくなるまで行う。
って感じでエスパーしてみた。
乗除に対応しようとした時点で破綻する設計だなw
530 :
526 :2007/07/21(土) 03:54:08
531 :
519 :2007/07/21(土) 03:55:30
すいませんでした。 プログラムが途中でした。 } return(ans); } int number(void){ //数値データ int i=0; while (isdigit(*p)){ i = i*10+(*p++)-48; } return(i); }
とりあいずmainとnumberは変更しないで、 intのスタックを2つ作る。 1つのスタックは数値をいれる。 もう1つには演算子を表す数をいれる。です。
>>530 さん
書き込みが食い違いになってしまいすいません。
535 :
526 :2007/07/21(土) 04:02:18
だから、スタックって何?
whileをintだけで書けってことをいいたいのか?
537 :
526 :2007/07/21(土) 04:07:07
あれか?それともint使ってとにかく数値をいれるのと 演算子を表す数のを作ればいいのか?
539 :
526 :2007/07/21(土) 04:13:19
要件定義ができないなら、それでも良いが、 どういう物を作って欲しいのか、理解可能な表現にして下さい。 少なくとも宿題をそのまんま書いてくれないと、espの領域になる。
演算子を表す数ですか? 一応黒板に書いてあったのを書き込みました
確か+が一番弱く/が一番強くなるように作ると言っていました
>>531 print関数がおかしい。
ループ部分を以下みたいにしてみ。
for(i=0;i<9;i++){
if(area[i] == 0)
printf(" ");
else if(area[i] == 1)
printf("○");
else if(area[i] == 4)
printf("×");
else
printf("as");
printf("|");
if ( i % 3 == 2 )
printf("\n");
}
とりあえずは動くよ。
543 :
526 :2007/07/21(土) 04:21:36
>>531 で示した回答にどういう不満があるのか、
せめてそれだけども答えてくれ。
>演算子を表す数ですか?
>一応黒板に書いてあったのを書き込みました
見落としたかも知れないから、
演算子と定数の対応表を再掲してくれ。
544 :
526 :2007/07/21(土) 04:23:51
スタックの定義も提示してくれ。
545 :
519 :2007/07/21(土) 04:31:10
546 :
519 :2007/07/21(土) 04:33:00
初期化できてなかったですね・・・^^; すいません、みすってました
547 :
526 :2007/07/21(土) 04:35:27
>>541 宿題の意味が分からないなら、
>>531 で宿題の回答にしたらいい。
この回答に不満があるなら、
この回答のどこが設問と違うか、提示すればいいだけだと思うが。
548 :
519 :2007/07/21(土) 04:41:21
526さんは何を言ってるんでしょうか? 私ともう一人質問をされてる方がいるんだとおもんですが・・・? 私は3目並べの話をしてるんですが?
549 :
526 :2007/07/21(土) 04:46:50
550 :
519 :2007/07/21(土) 05:08:59
552 :
519 :2007/07/21(土) 05:18:33
553 :
519 :2007/07/21(土) 05:22:51
とても丁寧な読みやすいコーディングだね。 ソース流し読みしただけだけど敢えて問題があるとするなら ループでscanfを使ってるくらい?
556 :
519 :2007/07/21(土) 10:06:42
ありがとうございました。
557 :
◆yb5ufjhaCo :2007/07/21(土) 11:21:02
すいません、あんまりわからないので、教えてください。 ほんとに初歩の質問ですいません 1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): <次のプログラムの断片は誤りを含んでいるところがある。 その誤りの理由を述べ、正しい動作をするようにその箇所を修正した プログラム断片全てを書け。ただし無関係のところまで変えないこと。 [3] 環境 [3.1] OS: Linuxです [3.2] コンパイラ名とバージョン: gcc です [3.3] 言語: Cでお願いします。 [4] 期限: 25日いっぱいまでです。
558 :
◆yb5ufjhaCo :2007/07/21(土) 11:22:35
すいません。問題忘れてました… (1) if(c = '\0') n++; (2) while(c = getchar() !=EOF) putchar(c); (3) for(i = 0; i < 10; j++){ total += i; } (4) switch(c){ case 'y': state = 1; case 'n': state = 0; default: state = -1; } お願いします…
559 :
◆yb5ufjhaCo :2007/07/21(土) 11:23:13
(5) if(k = 0) 1++; else 1--; (6) for (i = 0; i < 8; j++){ b[i] -= a[i+j]; } (7) switch(c){ case 'y': count--; case 'n': count++; default: break; }
1:= 2:(c=getchar()) 3:無限るーっぷって怖くね? 4:break; 5:=, 1++, 1-- 6:3に同じ 7:break; 違うかも
561 :
519 :2007/07/21(土) 13:07:12
comが1Pのリーチを阻止できるようにしたいのですが、 どういうコードを書けばいいでしょうか?
562 :
◆M2clACoxQA :2007/07/21(土) 13:28:04
[1] 授業単元: プログラミング 基礎 [2] 問題文(含コード&リンク): #include <stdio.h> int main(void) { int i = 1; int j = 0; do{ j = j + i; i += 2; }while(i<=99); printf("1から99までの奇数の総数は%dです。\n", j); return 0; } 以上の「奇数の総和」を求めるプログラムを関数化して作成しなさい。 開始値と終了値を引数として使用し、main関数で確認する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual studio2005 [3.3] 言語: C言語 [4] 期限: 2007年7月21日15:00まで [5] その他の制限: 習ったのは、if-else文 do-while文 for文。 sum関数を使うと言っていました。 まだ習いたてなので、あまり難しいのはわかりません。 よろしくお願いします・・・
>>562 お前さんのところで作ったsum関数とやらは知らんがそれ見ながらdo{}whileの処理を
sum関数の要領でmain文の外に追い出せばいいだけ。
>>563 なるほど・・・そういうことだったんですね。
変に難しいことを考えてしまいました^^;
親切に教えてくださり、ありがとう御座いました!!
>>547 エラーで書けなくなった為遅くなりました。
checkはまだ習っていません。何通りかやり方があると
言っていたので他にも実行するプログラムはありますか?
何度もあやふやな言い方だと迷惑だと思うので、友達に確認してから
もう一度書き込みします。
よろしくお願いします
習ってないも糞もおまいさんの作った関数だろうから習ってないとか意味不明。
授業中に提示された関数をただ使ってるだけだならちゃんと話聞いとけ馬鹿で終了だし。
他に実行できるプログラムはあると言えるけど、
>>519 の要件満たせばいいだけならプログラマの数だけやり方はあると言えるから、
質問自体の意味がない。
何がしたいのかはっきりすればどうすればいいのか言えるけど、
何がしたいのかを言わないようじゃエスパーに頼るしかないし。
567 :
519 :2007/07/21(土) 14:37:48
569 :
568 :2007/07/21(土) 14:43:13
なんかここんとこgdgd説教したりそんなんじゃ相手に伝わらないよ俺はわからんよって だったらgdgdレスしてないで答えなきゃ良いじょのいこっ(えなり君風に)
>>568 >>530 は読みました。
>>530 自体が問題のプログラムで。
問題は、/*-+の順に計算できるようにする。そのためにint2つ作る。
1つは数字、1つは記号(/*-+)
572 :
デフォルトの名無しさん :2007/07/21(土) 15:11:11
573 :
519 :2007/07/21(土) 15:17:54
私が質問している3目並べは
>>561 をおねがいします!
>>573 check関数内で、check変数の値が2になっているラインに置けばいい。
ってか、checkの名前がかぶってるのをやめたほうがいいって言われてなかった?
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 整数n、rを入力し全組み合わせを配列に配置するプログラムを作成しなさい。 例えばn=4,r=2の場合 {{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}} となる。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 7/25 [5] その他の制限: 特に無し 画面に出力するだけなら何とかなりそうなんですが配列に入れるとなると もう何がなんだか…
>>575 配列なんて出てくるか?
2重ループで一発だと思うんだが?違う?
お前は何を言ってるんだ
適当に大きめの2次配列に入れるなり、 動的確保するなりして入れればいいだけじゃないか。 表示できるなら配置もできるだろ。
579 :
デフォルトの名無しさん :2007/07/21(土) 16:20:31
>>494 最小限の実装.変な式を入れたときにどうなるかは知らない.
<変更点>
・以下のグローバル変数を追加
int ops[100], vals[100], optop, valtop;
・term()は使わないので消していい
・expression() の内容を以下に変更
int expression() {
valtop = optop = -1;
vals[++valtop] = number();
while (1) {
int opcode;
if (*p == '+') opcode = 1;
else if (*p == '-') opcode = 2;
else if (*p == '*') opcode = 3;
else if (*p == '/') opcode = 4;
else opcode = 0;
while (optop >= 0 && ops[optop] >= opcode) {
if (ops[optop] == 1) vals[valtop-1] += vals[valtop];
if (ops[optop] == 2) vals[valtop-1] -= vals[valtop];
if (ops[optop] == 3) vals[valtop-1] *= vals[valtop];
if (ops[optop] == 4) vals[valtop-1] /= vals[valtop];
valtop--; optop--;}
if (opcode == 0) break;
ops[++optop] = opcode;
*p++;
vals[++valtop] = number();}
if (valtop != 0) printf("some error\n");
return vals[0];}
>>578 なんで2次配列なのか小一時間問い詰めたい
>>576 なんで2重ループなのか小一時間問い詰めたい
>>578 表示できるといっても再帰で表示させてるんで
うまいこと添字があわなくて…
配列に配置させるのに利用できないんです
585 :
519 :2007/07/21(土) 17:31:19
>>585 関数と変数が同じ名前ってこと。
問題ないけどソース読みづらい。
[1] 授業単元: C言語入門 [2] 問題文(含コード&リンク): ゼータ関数は次式で定義される。 ζ(s) = ∑(1/n^s) s=6のとき、π^6/945に収束する。これを確認するプログラムを作製せよ。 ただし、級数の和を無限個とるのではなく、有限の範囲内で(n=100)で計算せよ。 条件1:倍精度型で計算し、6パターン以上は比較できるようにすること。 条件2:二重ループを使うこと。そのため、外側ループでは初期値をmとして, nまでm刻みで値を変更し、内側ループでは該当する値に応じたゼータ関数値を算定できるようにコーティングせよ。(例えば、n=1000と、m=100に設定した場合、nの値を10パターン変化させることができる。) [3] 環境 [3.1] OS:MAC OS X [3.2] コンパイラ名 gcc [3.3] 言語:C [4] 期限:来週の月曜日まで [5] その他の制限: とくに無し 条件が多いですが、よろしくお願いします。
それ7/18までじゃなかったっけ?
>>587 同じ名前で変数と関数があったら、
普通、再定義エラーにならないか?
グローバルとローカルの違いってCの基礎じゃないの?
グローバル変数と関数が同じ名前だったんだが。
ローカルでも普通にエラーでるんじゃね?
595 :
593 :2007/07/21(土) 19:25:33
さっき
>>553 で名前被りエラー出なかったからあのレス忘れてくれ。
最新にしてはエラーや警告出まくるんだけどw で、comに考える力を与えてみた。 int com_put(){ int input; do{ input = rand()%9; }while(area[input] != 0); if (area[0] + area[1] + area[2] == 8) input = (area[0] == 0)*0 + (area[1] == 0)*1 + (area[2] == 0)*2; else if(area[3] + area[4] + area[5] == 8) input = (area[3] == 0)*3 + (area[4] == 0)*4 + (area[5] == 0)*5; else if(area[6] + area[7] + area[8] == 8) input = (area[6] == 0)*6 + (area[7] == 0)*7 + (area[8] == 0)*8; else if(area[0] + area[3] + area[6] == 8) input = (area[0] == 0)*0 + (area[3] == 0)*3 + (area[6] == 0)*6; else if(area[1] + area[4] + area[7] == 8) input = (area[1] == 0)*1 + (area[4] == 0)*4 + (area[7] == 0)*7; else if(area[2] + area[5] + area[8] == 8) input = (area[2] == 0)*2 + (area[5] == 0)*5 + (area[8] == 0)*8; else if(area[0] + area[4] + area[8] == 8) input = (area[0] == 0)*0 + (area[4] == 0)*4 + (area[8] == 0)*8; else if(area[2] + area[4] + area[6] == 8) input = (area[2] == 0)*2 + (area[4] == 0)*4 + (area[6] == 0)*6; else if(area[0] + area[1] + area[2] == 2) input = (area[0] == 0)*0 + (area[1] == 0)*1 + (area[2] == 0)*2; else if(area[3] + area[4] + area[5] == 2) input = (area[3] == 0)*3 + (area[4] == 0)*4 + (area[5] == 0)*5; else if(area[6] + area[7] + area[8] == 2) input = (area[6] == 0)*6 + (area[7] == 0)*7 + (area[8] == 0)*8; else if(area[0] + area[3] + area[6] == 2) input = (area[0] == 0)*0 + (area[3] == 0)*3 + (area[6] == 0)*6; else if(area[1] + area[4] + area[7] == 2) input = (area[1] == 0)*1 + (area[4] == 0)*4 + (area[7] == 0)*7; else if(area[2] + area[5] + area[8] == 2) input = (area[2] == 0)*2 + (area[5] == 0)*5 + (area[8] == 0)*8; else if(area[0] + area[4] + area[8] == 2) input = (area[0] == 0)*0 + (area[4] == 0)*4 + (area[8] == 0)*8; else if(area[2] + area[4] + area[6] == 2) input = (area[2] == 0)*2 + (area[4] == 0)*4 + (area[6] == 0)*6; area[input] = 4; }
>>586 どうもありがとうございます。
なんか今更情報科にきたことを後悔…
複雑になると頭がこんがらがる
>>588 MinGWで。Macで動くか知りません
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
int i, j, s = 6, n = 100, m = 10;
double d = 0;
for(i = m; i <= n; i += m) {
for(j = i-m+1; j < i; j++) d += 1/pow(j,s);
printf("n = %i\t:\t%.15f\n", i, d);
}
printf("π^6/945:\t%.15f\n", pow(M_PI,s)/945);
return 0;
}
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):以下のプログラムのmainとnumberは変更しないで、 intのスタックを2つ作る。1つは数値をいれる。もう1つには演算子を表す数をいれる #include <stdio.h> #include <stdlib.h> #include <ctype.h> char *p; char c[100]; int expression(void);int term(void); int number(void);main(){ int ans;while(1){ printf("Enter expression : ");fgets(c,90,stdin); p=c;if(*p == '\n') break;ans = expression(); printf("Answer:%d\n", ans);}}int expression(){ int ans;ans = term();while(1){if(*p == '+'){ p++;ans = ans + term();}else if(*p == '-'){ p++;ans = ans - term();}else break;} return(ans);}int term(){int ans,x;ans = number(); while(1){if(*p == '*'){p++;ans = ans * number();} else if(*p == '/'){p++;x = number(); if(x == 0){printf("Division by 0\n"); exit(1);}ans = ans / x;} else break;}return(ans);} int number(){int i=0;while (isdigit(*p)){i=i*10+(*p++)-48;} return(i);} [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 年07月23日 [5] その他の制限: 特になし
いい加減にしろよカス
>>600 インクルードくらいは改行しなよ、ナス!
>>602 600です。すいません。改行が多いと言われてしまったので。
確かに読みずらいですよね。でも、お願いします。
605 :
デフォルトの名無しさん :2007/07/21(土) 23:33:42
606 :
519 :2007/07/21(土) 23:34:53
>>553 で、私の環境では特にエラー出ませんでした^^;
>>596 さんのやつはどういう挙動になるんですか?
>>606 エラーはカンマとピリオドを打ち間違ってるところ、
警告は戻り地が無い関数なのにintで宣言してるところ。
>>607 ここ> animal=(animal+direction+road_size)%road_size;
と、ここ> fp=fileopen("data");
仕様と違うと思う
>>598 道の右端と左端はつながってないの?
>>612 ファイル名の data1.txt data2.txt data3.txt ... になるんだけどどの辺が違う?
>>607 は他にも間違いがある…orz
関数 fileopen 中の
fclose(fp);
↓
else fclose(fp);
UPする前に質問します C言語の筆記問題はスレ違いになるのでしょうか?
スレ違いではないとおもうけど、食指が動かない
別にいいんでね?質問する前にUPして欲しい。 すれ違いなら優しいおじさんが誘導してくれるかもしれない。
620 :
617 :2007/07/22(日) 00:58:38
レスありがとうございます 食指は動かないかもしれませんが、後でUPしてみます
後でって、さっさとうpしろよw みんな寝ちゃうぞ
2 4 6 30 32 34 36 40 42 44 46 50 52 54 56 60 62 64 66 この数列の、20項以降を表示させる関数を作れといわれたのですが 分かりませんでした
>>622 0は入らないのか?10台、20台は入らないのか?
数列の並びがよくわからん。
624 :
617 :2007/07/22(日) 01:30:15
筆記問題なので、注意してくださいませ
[1] 授業単元: C言語 基礎&応用
[2] 問題文(含コード&リンク):
http://www-2ch.net:8080/up/download/1185034647068718.NcCDgq ※jpegファイルが6つ入ってます(No1~No6)
No3~No6までが、今回やってもらいたいファイルです
No1とNo2は自分でも問題無かったので入れる必要は無かったのですが
テスト形式なので(100点満点)、中途半端に抜かすのもどうかと思い入れました
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語:C言語
[4] 期限:23日のAM1時くらいまでが好ましいですが、25日くらいまで大丈夫です
[5] その他の制限:
>>622 それ英語のなぞなぞ (答えTwo thousands)
1時なんかもう過ぎてるだろボケ ・・・ボケは私です。 4-1 for(i=0;i<N;i++)b[i]=a[i]; 4-2 1 5-1 t1.a+t1.b; 5-2 5 6-1 4 6-2 7 7-1 return y; 7-2 (a)5 (b)20 8-1 (a) i=0; (b) (i<10) (c) += 8-2 84 8-3 6.800000 + 11.200000 i 8-4 (a) NULL (b)cellp->next 8-5 (a) b==0 (b) gcd( b, a%b ) 9-1 変数 9-2 型 9-3 typedef 9-4 定義 9-5 桁オチ 9-6 情報欠落 かなりテキトー。特に用語のあたりとか。
>>624 No.3
[4]
(1) : (a) 0 (b) N (c) b[i] = a[i]
(2) : (a) 1
[5]
(a) t1.a + t1.b (b) 5
[6]
(a) 4 (b) 7
[7]
・・・・・・・もうめんどくせ
>>622 #include <stdio.h>
int main(){int *a,*b,*c,*d,i=0,val;
int n[]={0,2,4,6,-1};int m[]={0,3,4,5,6,-1};
for(a=m;*a>=0;a++)for(b=n;*b>=0;b++)
for(c=m;*c>=0;c++)for(d=n;*d>=0;d++){
val=((*a*10+*b)*100+*c)*10+*d;i++;
if((i>20)&&(i<=320)) printf("%d\n", val);}return 0;}
設問者がなぞなぞ好きならそれはそれで良いのかもしれないが。 それで単位を取れるかどうかとなると、学生がちょと河合祖。
631 :
519 :2007/07/22(日) 11:12:25
戻り値が無い関数はvoidがいいんですか?
そうだよ☆ でもmainだけは戻り値がいらなくてもintにするのが習慣みたいね
>なぞなぞ また1つ賢くなった、ありがとう
>>632 お前は要らないかもしれないけど、システムにとって必要だよ。
635 :
519 :2007/07/22(日) 11:35:30
あと . と , は直してアップしたつもりでした
>>622 #include <stdio.h>
int main(void)
{
int i;
for(i = 1; i < 100; i++)
printf("%ld\t", i%4*2 + i/4*10 + (i < 4 ? 0 : 20));
return 0;
}
英語のなぞなぞって何?
637 :
617 :2007/07/22(日) 13:34:20
解答ありがとうございました 参考にさせていただきます!
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 行列のサイズ n, m, l と,それに応じた n×m, m×l の行列が記録されたファイルを食べて,結果を別のファイルに書き出そう. %cat testfile 3 2 3 3.2 4.8 8.2 6.5 4.3 -2.2 -5.0 6.2 8.9 3.5 -0.2 -5.8 であるとする.3×2, 2×3の行列の積をとり,3×3の行列を得る事になる.そこでプログラムを開発して、 % ./prog0 testfile ANSWER とすれば,積が ANSWER というファイルに書き込まれるようにせよ.argv[], argc, fscanf(), fprintf() を総動員する. [3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 7/25まで よろしくおねがいしますm(_ _)m
argv[], argc, fscanf(), fprintf() を総動員する. ワロタ
入力テキストは n m l 行列1 行列2 って形式なんだろう
>結果を別のファイルに書き出そう. >そこでプログラムを開発して、 出題者はどういうノリなんだ。
>>639 #include <stdio.h>
#define N 128
int main(int argc, char *argv[])
{
FILE *fpin, *fpout;
int n, m, l, i, j, k;
double mat1[N][N], mat2[N][N], mat3[N][N];
if(argc < 3 || (fpin = fopen(argv[1], "r")) == NULL || (fpout = fopen(argv[2], "w")) == NULL) return 1;
fscanf(fpin, "%d%d%d", &n, &m, &l);
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
fscanf(fpin, "%lf", &mat1[i][j]);
for(i = 0; i < m; i++)
for(j = 0; j < l; j++)
fscanf(fpin, "%lf", &mat2[i][j]);
for(i = 0; i < n; i++){
for(j = 0; j < l; j++){
mat3[i][j] = 0;
for(k = 0, mat3[i][j] = 0; k < m; k++)
mat3[i][j] += mat1[i][k]*mat2[k][j];
fprintf(fpout, "%f ", mat3[i][j]);
}
fprintf(fpout, "\n");
}
fclose(fpin), fclose(fpout);
return 0;
}
学校行けよ
今時期は夏休み返上で赤点補習かな
>>644 出来ました。ありがとうございますm(_ _)m
はしかのせいで補習のやつが多そうだな
なるほど、失速しないのはその影響か。
650 :
デフォルトの名無しさん :2007/07/22(日) 18:52:14
行列matの転置行列を求めて次のように出力するプログラムを完成させよ。 | 1 6 11 16 21 | | 2 7 12 17 22 | | 3 8 13 18 23 | | 4 9 14 19 24 | | 5 10 15 20 25 |
651 :
デフォルトの名無しさん :2007/07/22(日) 18:52:45
#include <stdio.h> #define MSIZE 5 void swap(int *a, int *b) { int c; (a) = *a; *a = *b; *b = (a) ; } void main(void) { int i, j, mat[MSIZE][MSIZE] = { { 1, 2, 3, 4, 5}, { 6, 7, 8, 9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25} }; for(i = 0; i < MSIZE - 1; i++) { for(j = (b) ; j < (c) ; j ++) { swap( (d) , (e) ); } } for(i = 0; i < MSIZE; i ++) { printf("|");/25小計 for(j = 0; j < MSIZE; j ++) { printf("%3d ", mat[i][j]); } printf(" |\n"); } } さっぱりわかりません よろしくお願いします
652 :
デフォルトの名無しさん :2007/07/22(日) 18:53:43
あるカップラーメンの値段を店ごとに調べた.それを配列に 入れて,下の出力のように10円刻みに分布をとることを考える. そのためのプログラムを下に示す.空白を補え. 80- 89円: 2 90- 99円: 2 100-109円: 1 110-119円: 2 120-129円: 1 130-139円: 2
653 :
デフォルトの名無しさん :2007/07/22(日) 18:55:33
#include <stdio.h> #define C_NUM 6 void makedist(int a[10], int b[C_NUM]) { int i; for(i = 0; i < 10; i ++) { b[ (a) ] += 1; } } void main(void) { int price[10] = {80, 120, 111, 130, 139, 95, 98, 89, 105, 119}; int dist[C_NUM], i; for(i = 0; i < C_NUM; i++) { dist[i] = (b) ; } makedist( (c) , dist); for(i = 0; i < C_NUM; i++) { printf("%3d-%3d円: %3d\n", (d) , (e) , dist[i]); } } これもさっぱりです・・・ 教えてください
>653 (a)a[i]/10-8 (b)0 (c)price (d)80 + i * 10 (e)89 + i * 10
>>650-651 a:c
b:0
c:i
d:mat[i][j]
e:mat[j][i]
656 :
655 :2007/07/22(日) 19:10:03
訂正 d:mat[i][j]→&mat[i][j] e:mat[j][i]→&mat[j][i]
657 :
655 :2007/07/22(日) 19:20:36
何度も済まん…
>>650-651 a:c
b:0
c:i+1
d:&mat[i+1][j]
d:&mat[j][i+1]
658 :
デフォルトの名無しさん :2007/07/22(日) 19:23:54
ありがとうございます!!
659 :
デフォルトの名無しさん :2007/07/22(日) 19:29:39
与えられた正数aの逆数1/aを,除算を用いずに求めるアルゴリズムを ニュートン法によって作りたい. ただし,初期値x0は十分に解に近いところから出発するものとする. 次の[1]から[4]の空欄(a)から(f)を埋めよ. [1] ニュートン法でaの逆数1/aを求めるためには f(x)=(a)のゼロ点を求めればよい. [2] [1]の式に対して,ニュートン法による第n+1回目の反復による値Xn+1は, 第n回目の反復による値Xnを用いて Xn+1=(b)と表される.
660 :
デフォルトの名無しさん :2007/07/22(日) 19:30:11
[3] [2]で示した反復によるアルゴリズムを実現すると次のようになる. #include <stdio.h> void main(void) { double u, v; int i; printf("正数を入力して下さい.\n"); scanf( (c) ); printf("逆数に十分近い初期値を入力して下さい.\n"); scanf( (d) ); for(i = 0; i < 3; i ++) { u = (e) ; printf("%5.3f\n", u); } } [4] [3]で作ったプログラムを実行し,「3」,「0.5」の順に入力した際に for文の中のprintf関数による出力結果をすべて示すと次のようになる. (f)
>>659 (a) 1/x - a {x = 1/a → 0 = 1/x - a だから}
(b) Xn*(2-a*Xn) {Xn-f(Xn)/f'(Xn) →Xn-(1/Xn-a)/(1/(-Xn*Xn))だから}
(c) "%lf",&v (d) "%lf",&u (e) u*(2-v*u)
(f)
0.5
0.250
0.332
662 :
デフォルトの名無しさん :2007/07/22(日) 20:37:52
関数myreplaceを使って実際に文字列を変換させるプログラムを作成したところ, 出力結果(1)は「tuat」となった. 空欄(a)~(f)を埋めて次のプログラムを完成させ, 出力結果(2)を空欄(g)に記入せよ.
663 :
デフォルトの名無しさん :2007/07/22(日) 20:39:44
#include <stdio.h> (a) ; void main(void) { char code[16] = "GHIGFACDFDBA"; char ret[16] = ""; myreplace(" (b) ", ret); printf("%s\n", ret); ・・・出力結果(1) myreplace(code, ret); printf("%s\n", &ret[5]); ・・・出力結果(2) } void myreplace(char org[ ], char ret[ ]) { char string1[16] = (c) ; char string2[16] = "v)(^e_tua"; int i, j; for(i = 0; org[i] != (d) ; i ++) { for(j = 0; string1[j] != (d) ; j ++) { if(org[i] == string1[j]) { (e) } } } (f) /* 終端記号 */ } 出力結果 (g)
>>659 訂正
(f)
0.250
0.313
0.332
665 :
デフォルトの名無しさん :2007/07/22(日) 21:04:07
[1] 授業単元: [2] 問題文(含コード&リンク): 2 つのchar 型配列x[],y[] に格納された文字列を入れ替えるプログラムを作成せよ. ただし入替え処理には,関数swap array(char *,char *) を作成して用いること. % ./test 入替前のx: "abcdefgh" 入替前のy: "ABC" 関数swap_array() を呼び出しました 入替前のx: "ABC" 入替前のy: "abcdefgh" % [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: (C) [4] 期限: (07月23日00:00まで) [5] その他の制限:ポインタまで習ってます よろしくおねがします
>>662 なんかヤな問題だな。回答は複数あるけどたぶん↓
(a) void myreplace(char org[], char ret[]); (b) GHIG (c) "ABCDEFGHI"
(d) '\0' (e) ret[i] = string2[j]; (f) ret[i] = '\0'; (g) v(^_^)v
668 :
デフォルトの名無しさん :2007/07/22(日) 22:05:25
[1] 授業単元: [2] 問題文(含コード&リンク): 1start で示されるアドレスからlength バイト分だけの領域に関して, 値val で埋める関数cmemset(char*start, int value, int length) を作成せよ. さらに,malloc() 関数を用いてchar 型配列のメモリ領域を確保し, cmemset() が正確に動作することを確認 (メモリ領域の内容を整数値として表示)するプログラムを作成せよ. %./kadai 4 -89 0 1 5 43 ... 112 ← cmemset 使用前 0 0 0 0 0 0... 0 ← 0 で埋めたとき 88 88 88 88 88 88 ... 88 ← 88 で埋めたとき % 2src で示されるアドレスからlength バイト分だけの領域を,dest で示される領域へコピーする関数 cmemmove(char *dest, char *src, size t length) を作れ.なお,送り元の領域と送り先の領 域がオーバーラップしていても,正しくコピーできる仕様にせよ.さらに,malloc() 関数を用いて char 型配列のメモリ領域を確保し,cmemmove() が正確に動作することを確認(メモリ領域の内容を 整数値として表示)するプログラムを作成せよ. % ./kadai 1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 ← cmemmove 実行前 1 2 3 4 5 0 0 0 0 0 1 2 3 4 5 0 0 0 ← 0 番目から5 個を10 番目へ 1 2 3 1 2 3 4 5 0 0 1 2 3 4 5 0 0 0 ← 0 番目から5 個を3 番目へ %��� [3] 環境 [3.1] OS: (Linux3.2) [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: (C) [4] 期限: (07月23日まで) [5] その他の制限:おねがいします
char配列埋めるのにvalueはintかよ
標準のmemset()もそうでしょ
671 :
デフォルトの名無しさん :2007/07/22(日) 22:41:46
わかる方でいいのでおねがいします
何を?
どれを?
674 :
671 :2007/07/22(日) 22:45:03
すみません全部忘れてました 村上ファンド事件についてインサイダー取引という単語を用いて100字以内にまとめよ です
he is very very bad
676 :
デフォルトの名無しさん :2007/07/22(日) 22:51:21
665と668です
677 :
671 :2007/07/22(日) 23:03:48
本当に誰か答えてください><
Linux3.2 うひょ
char *cmemset(char *start, int value, int length) { const unsigned char ch = value; while(num--) *ptr++ = ch; return start; } char *cmemmove(char *dest, char *src, size t length) { while(length--) *(dest+length) = *src; return dest; }
メモリコピーはアドレスの大小関係で 昇順、降順を切り替えないとおかしなことになるよ
>>681 その汚いソースをなんとか動くようにしてくださいっていうなら絶望的だな
どっかしらでsegmentation faultが起きてるから頑張って探しな
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):整数集合 { 1, 2, 3, 4, 5 } と { 2, 4, 6 } の 共通集合を求め、表示するプログラム
集合をリストを用いて実現し、emptySet, inSet, addElem, intersection, printSet, freeSet を リストを用いた集合操作に変更しなさい。
コード:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4713.c [3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2007/7/25 15:00
プログラムのコード自体はやってる最中なのでめちゃくちゃですが気にしないでください。
コンパイルは特にエラーもなく通ります。
実行したあと
%./a.out
と出るだけでそこから何も起きません。
無限ループに陥ってる可能性を考えてmain関数内にprintfを設置しました。
コードを見てもらえばわかるのですが、main関数内の2行目に配置したprintfすら実行されません(1行目はint型の変数宣言)。
これはmain関数が実行されていないということでしょうか?
原因解明お願いします。
>>681 enter と enter2 で xtopx->child1 や xtopx->child2 が使われているけど
xtopx 自体が初期化されていない気がする
687 :
デフォルトの名無しさん :2007/07/23(月) 00:17:31
688 :
685 :2007/07/23(月) 00:19:53
すいません。捕捉です。 このプログラムは、元は配列を用いて集合を実現してました。これをリスト構造に改編しろ。 という問題です。
689 :
686 :2007/07/23(月) 00:27:52
>>681 あとグローバルでstruct member **result; が宣言されているのに
search および search2 で ローカルで struct member **result; が宣言されている
ローカル側のresult;に代入しているから
result=(struct member **)malloc(sizeof(struct member *)*(MEMBER_MAX+1));
で確保した領域が保存されていない.returnで戻しているけどmain でその戻り値保存していないし
というかこのresultのポインタリストはどこで使われているのだろうか?
690 :
デフォルトの名無しさん :2007/07/23(月) 00:32:12
最近のCって型定義に変数宣言しても通るの?
691 :
デフォルトの名無しさん :2007/07/23(月) 00:34:02
間違えた ×型定義に ○型定義前に 普通は構造体定義してから変数宣言だよね?
692 :
686 :2007/07/23(月) 00:35:39
>>681 がすでにいない気もするけど
>>681 Top1 と Top2 は 0 か NULL で初期化されていないので
enter と enter2 の if(!Top1){ } が実行されずに
top=Top1; while(top){ } で失敗する可能性がある
(HDDから怪しい音が・・・こわい)
>>685 int inSet(ElementP s,int v){/*変更可*/
while(s->next!=NULL){
if(s->data==v){
return 1;
}
}
return 0;
}
ここで無限ループしてる
694 :
デフォルトの名無しさん :2007/07/23(月) 00:46:51
695 :
685 :2007/07/23(月) 00:46:57
>693 指摘ありがとうございます。 しかし、修正してみたものの症状変わらず・・・。
696 :
681 :2007/07/23(月) 00:47:46
>>692 すいません、プログラムと睨めっこしてました
ちょっといじってみます、また何かあったらご教授いただけると幸いです
while(p->next!=NULL) { if(p->data < val->data) val=p; p=p->next; } ここでも無限ループしてる
>>685 流し読みだけど、ElementP emptySet(){ return NULL; }で。
やり方は他にもあるけど、少なくとも次がない=空じゃないです。そうすると
mallocは、s==NULLのとき、addElemでして、return sってことになるかと。
void addElem(ElementP s,int v) → ElementP addElem(ElementP s,int v)
ですね。あと、freeSetが最初しか開放してないから再帰でnextたどってく感じで。
>>680 int main()内が分かりません
助けてください><
700 :
685 :2007/07/23(月) 01:31:09
>697 すいません、どこで無限ループなのかわからないです。 >698 その方法もやってみます。 freeSetの件も修正してみます。
701 :
685 :2007/07/23(月) 02:00:10
どうやら環境の差のようです。Windowsで実行したところ正常に動きました。 いろいろとありがとうございました。
702 :
681 :2007/07/23(月) 02:01:28
>>681 ですが、アドバイスをいただいて直してみましたがうまくいきません
アップしたソースの不都合な所はばっさり変更しても良いので、
なんとか動くように訂正お願いします
環境の差なわけねえwww
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): [プログラム説明] 2桁の16進数('41'~'49'、 '50'~'59')を入力すると対応する文字を表示する。 ただし、%xは使用しないこと。なお、入力に間違いはないものとする。(ヒン ト:入力は一つの数値か、二つの文字か?) 実行結果 2桁の16進数('41'~'49'、 '50'~'59')を入力してください:53 文字コード「53」文字は「S」です。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C++ [4] 期限: ([明日の朝まで] または [無期限] のいずれか) [5] その他の制限: printf() scanf()を最近習いました
>>704 #include <stdio.h>
int scan_ascii(){
int c1,c2;
printf("2桁の16進数('41'~'49'、 '50'~'59')を入力してください:");
scanf("%c%c", &c1, &c2);
return (c1<<4 + c2);
}
int print_ascii(int c){
printf("文字コード「%d」文字は「%c」です。\n", c, c);
}
int main(){
print_ascii(scan_ascii());
return 0;
}
すいません、returnとasciiは習ってないです・・・ でもありがとうございます!1原型ができました
708 :
707 :2007/07/23(月) 02:42:00
\n n番目に表れた\(...\)の中の文字列にマッチ (nは1から9の整数) が意味わからね 方針として入力文字列を"トークン"列に変換してから置換処理がクレバーじゃね? struct toknの設計がつぼおおおぉおおおおぉおぉおぉおおおおおおおおおおおあおあさだおssd
>>530 返事が遅くなってすいません。
>>530 に書いてあるものを使ってpop,pushを使い
たいです。+-*/は数字の大きさで表したいです
713 :
デフォルトの名無しさん :2007/07/23(月) 11:05:05
>>712 は、自分が書いた文を自分で理解できるのか?
\(\(c\)b\)d\) の場合"2"番目は何を意味する? \([ab]\)\1の場合 aa と bb にはマッチするが ab にはマッチしないと理解して良いのか? (否なら単に[ab][ab]と記述すればいいしなクソ) それとこれ本当に宿題か? \nさえなけりゃ理論的な意味の正規表現についての良問だと思うが \nの性で劇的に難しくなってね? お前何科の何年生? あるいは問題間違ってねえ?
\(\)って入れ子にはしないんじゃないか
719 :
デフォルトの名無しさん :2007/07/23(月) 13:06:20
>>715 問題文には正規表現の各表現の説明があった後に
. * [abc…]、\が使えるようなプログラムを実装せよとかかれてました
ちなみに2回のC初心者向けの演習です
期末レポートなんですが、人によって問題が違って明らかにはずれくじをひいたっぽいですorz
720 :
デフォルトの名無しさん :2007/07/23(月) 13:08:52
あと、正規表現では括弧の入れ子は外から順に数えていくはずです
二回で正規表現の実装かよ Perlとかでならまだしも・・・
722 :
デフォルトの名無しさん :2007/07/23(月) 14:02:30
ほかの人の課題は1時間とかで終わるのもあるんで、\n入れると難易度極端に変わるなら、実はそれ無しかもしれないです
723 :
デフォルトの名無しさん :2007/07/23(月) 14:06:51
出題者は、正規表現の複雑な仕様を完全に実装しろと言っている訳ではないよね。 単純なパターンチェックと置換を実装すればいいんじゃないの?
724 :
デフォルトの名無しさん :2007/07/23(月) 14:09:17
[1] 授業単元:C++ [2] 問題文(含コード&リンク): クラスcomplexのメンバ関数で、複素数の絶対値を与える関数を新たに作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: CC [3.3] 言語: C++ [4] 期限: [無期限] [5] その他の制限: 特になし よろしくおねがいします。
(含コード&リンク): のくせになんにも貼られてないってどうよ
727 :
デフォルトの名無しさん :2007/07/23(月) 14:26:47
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):正の整数を入力し1からその数までの間に素数がいくつあるのか数えるプログラムを作れ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:7月中 [5] その他の制限:特にないです。 よろしくお願いします。
728 :
デフォルトの名無しさん :2007/07/23(月) 14:30:37
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): nを入力してs=1/1-1/3 + 1/5-1/7 + 1/9....+(-1)^n-1/(2n-1) の和を求めるプログラムを作れ。nが大きくなるにつれてs*4がどうなるか [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:7月中 [5] その他の制限:特にないです。 問題が難しくて困っています。 お願いいたします。
double s; int i,n,j; printf("n: "); scanf("%d", &n); j = 1; for(i = 0; i < n; i++) { s += j/(2n-1); j = -j; } printf("s = %lg\n", s);
これはひどい
#include<stdio.h> int main(){ double s=0; int i,n,j=1; printf("n: "); scanf("%d", &n); for(i = 1; i <= n; i++) { s += (double)j/(2*i-1); j = -j; } printf("s = %lg\n", s*4); return 0; }
設問的にはcout/cinじゃまいか
>>727 おまいのレベルに合わせてコーディングした
#include<stdio.h>
int main(){
while(1){
int i,j,n,c=0;
printf("正数 = ");
scanf("%d",&n);
for(i=2;i<=n;c++,i++)
for(j=2;j<=i/2;j++)
if(i%j==0){
c--;
break;
}
printf("素数 = %d 個\n",c);
}
return 0;
}
正規表現のアルゴリズムとか考えたこともなかったな 一度単純な実装見てみたい
>>728 #include <iostream>
#include <iomanip>
#include <cmath>
int main()
{
double s = 0;
int i, n;
std::cin >> n;
for(i = 1; i <= n; i++){
s += pow(-1, i - 1)*1/(2*i - 1);
std::cout << std::setw(10) << i << " : " << s*4 << std::endl;
}
return 0;
}
>>714 出来ます。+-*/の順に1234とつけて行き大きい数字から(/から)優先
で計算するようにしたいんです。
>>736 スタックを2つ作り、数字と演算子を別々に積み上げておいて、演算子はどの数字を計算対象にしたら良いか、分かるのか?
>>736 もうちょいで自分でできるぞ
なんかね、道間違えている気がする
>>725 Test operator = (const Test& t) とかを
Test& operator = (const Test& t) にしないと
return *this が Test(const Test& t) を呼んじまうぜよ
741 :
ゆみ :2007/07/23(月) 19:24:32
超初心者です。制限時間45分で出題されましたが、解答できなかった為持ち帰りになりました(>_<) どうか御教授お願いします。 ・char 型の配列aに"HellowWorld"の文字列を格納すること。 ・配列aからchar 型の配列bにデータをコピーすること。 ※標準関数(memcpy,strcpy等)を使用しないこと。 ・配列bからchar 型の配列cにデータをコピーすること。 ※但し、"w"、"W"は"*"にデータをすりかえてデータをコピーすること。 →配列cには文字列"Hello**orld"を格納すること。 ・printf()で表示する際は、配列cのデータを一文字づつ表示すること。 ※"o"を表示する際は、"o"を表示する代わりに"O"を5つ表示すること。 ・VCのプロジェクト名は"ckadai3"とすること。
>>741 ESPの俺が応える
お前男なのにキモイ
ESPなら、カキコを阻止してくれよ
747 :
デフォルトの名無しさん :2007/07/23(月) 20:06:13
749 :
741 :2007/07/23(月) 20:57:04
741です。どなたかお願いします。For文もif文もままならないレベルなので、自力で解くのは厳しいです。また30分後にきます(´~`;)
うざ
質問テンプレを利用しましょう。
向こうで回答されてなかったっけ
#include <stdio.h> int main(void) { char a[11]="HellowWorld", b[11], c[11]; int i; for(i=0 ; i<11 ; i++){ b[i] = a[i]; if(b[i]=='W' || b[i]=='w') c[i] = '*'; else c[i] = b[i]; if(c[i] == 'o') printf("OOOOO"); else printf("%c", c[i]); } printf("\n"); return(0); }
755 :
ゆみ :2007/07/23(月) 21:30:16
>754 ありがとうございます。 助かりました。
別に文字列コピーした後に表示とか書いてないからおkじゃね? 出題者の意図とは違うと思うけど
printf("\n"); return(0); これはないだろ
760 :
デフォルトの名無しさん :2007/07/23(月) 22:33:47
下記の仕様と条件を満たすプログラムを作成しなさい。 ●仕様 ・"Hello"、"World"、"kadai"を指定された順番で表示すること。 ※初期の順番は、"Hello"、"World"、"kadai"とする。 ※順番はテーブル固定とし、変更毎にビルドを行うこととする。 ●条件 ・char 型index(1Byte)とchar型の配列hako[6](6Byte)をメンバとする構造体STRINDEX_TBLを作成すること。 ・STRINDEX_TBL型の配列tableに、"Hello"、"World"、"kadai"の3つの文字列と表示順番indexを格納すること。 ・文字列を表示の際は、printf()を使用し1文字("%c")づつではなく、文字列指定("%s")で指定すること。 ・VCのプロジェクト名は"ckadai6"とすること。 ●制限時間 ・30分
これほどまで見下してる出題者は初めてだな
今年の4月から、去年質問した初心者が回答者側に回ったのか知らんが gdgd質問者に注文つけたりうるせーよ、答える気がないなら黙ってスルーしろ。 っつかお前みたいな奴はこのスレには必要ないから、とっとと就職して 安月給プログラマーでもやってろ。
スルーできないお前もだろ まあ俺もだが
>>761 =
>>763 さすがに痛いわ、こいつ。自覚ありか。うぜぇ。失せろ。
お前みたいな奴に回答なんて求めてねーんだよ、他の回答者も。
#include <stdio.h> typedef struct { char index; char hako[6]; } STRINDEX_TBL; int main(void) { STRINDEX_TBL st[] = {{0, "Hello"}, {1, "World"}, {2, "kadai"}}; int i, j; const int num = sizeof(st)/sizeof(st[0]); for(i=0; i<num; i++) for(j=0; j<num; j++) if(st[j].index == (char)i){printf("%s\n", st[j].hako);break;} return 0; } やっつけ
>>737 >>738 スタックを2つ作り、数字と演算子を別々に積み上げておいて、演算子はどの数字を計算対象にしたら良いか、分かるのか? は、
数字が1234で演算子は+-*/です。これを1は激弱、2は弱、3は強、4は激強
にして指定した数が大きいほど優先順位が高い。
/→*→-→+の順で計算する。
>>767 > これを1は激弱、2は弱、3は強、4は激強
4は激強
4は激強
4は激強
4は激強
4は激強
げきつよ?
げききょう
>>769 逆によくそんな前からレス探してくるなと感心。
まぁ質問者も丸投げするのは構わないんだけど
催促レスしまくってくるのと問題に最低限の必要事項が
無いのは止めて欲しいかなぁ。
>>770 = 去年は質問者だったが、質問の仕方が悪くて散々叩かれた挙句に
答えてもらえなかった腹いせにこのスレで今年の質問者をねちねち詰り弄ることが
今の趣味になってしまった可愛そうな就職浪人。
>>770 問題に最低限の事と言われても言われたのはこれくらいです。
使うプログラムも乗せてありますし。
>>771 まぁ落ち着け、そう噛み付くな。
自分は基本的にこのスレに住みついてなくて
暇な時に見て解いてるだけで普段はレスもしてないから。
やべぇ、ネチネチ質問者を弄っている奴らが簡単に釣れちゃったぜ。 これだから釣りは面白くて止められないぜ。
ほんとにバカばっかりだな
ほんとだね
釣れたってww勝手に一人でファビョってただけじゃねぇかwww
俺「釣り」とか「釣り師」っていうのは、 釣り師 ↓ . /| ←竿 ○ / | . (Vヽ/ | <> | ゙'゙":"''"''':'';;':,':;.:.,.,__|_________ | 餌(疑似餌)→.§ >゚++< ~ の組み合わせだと思ってたんだけど、 最近自称釣り師がダイレクトで自分の本音を攻撃されて「釣れた!」とか 言ってるの多いよね。 これは、どっちかというと、 ,~~~~~~ 、 |\ ( 釣れたよ~・・・) | \ `~~~v~~~´ し \ ゙'゙":"''"''':'';;':,':;.:.,., ヽ○ノ ~~~~~|~~~~~~~ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ト>゚++< ノ) かと思うんだけど、どうよ?
やべぇ、今度は自分がファビョってますって公言する必死な奴も釣れちゃったYO! あのなぁ、こっちは質問者を弄っている奴をピンポイントで指して指摘しているんじゃなくて そういう奴がうぜぇと言っているだけで、それに 反応 しちゃっている奴がわざわざ エサに食いついちゃっていることに気づかないから笑えるんだよw
バカって自分で書いたことと他人が書いたことを見間違えちゃうって本当だったんだ・・・ かわいそう
こんなスレあったのか 楽しいwwwwwwwww
演算子に割り当てた数字と、計算対象としての数字がゴッチャになっている。 優先順位の高さが、何を指しているのか分かっているのか? 何でも良いから加減乗除を使っている計算式を書いて、 それぞれのスタックとやらに計算対象の数字と演算子に割り当てた数字が どのように積まれていくのか書いてみろ。
>>785 わかりません。わからないから来ています
即答せず、少しは考えろよ。 式を書いてみろ。 小学生でも理解できる事だ。
>>753 おまいのソース見て、俺も書きたくなってきた。
でも、正規表現アルゴリズムって何? というレベル。
鳥でもコテ半でもいいからつけてくれんとはぁ~さっぱりさっぱりだわw
1+1=2
>>753 授業2回でこんな問題解けるような生徒がいるなら職業プログラマいらないよなw
みんなバイトでいいやってなっちまうわ。
俺もやってみたいけど1時間やそこらじゃ絶対終わらないな・・・
ってか、講師はちゃんとテスト、レビューするのかな?
なんかしつこいからさっさと教えたら?
>>788 俺も同じ問題がわからない。
教えてくれないか?
mainの中の p=&c; 間違いだって誰か言ってる?
>>797 だって洗剤はP&Gだろ?
配列なんだから&はいらんよ。
p=cでpにアドレスがコピーされる。
間違えという言葉が間違っていると揚げ足取り。
p=cでもp=&c; でもいいと言われました
確かに言ってた
何だ、回答が出ているんだ。これだけ聞いていれば答えてくれているよね。 悪いが、作業は中止する。 提示された回答をチェックしてみて下さい。要求通りだと思うよ。 気になったのがあるんだが。 number()で数値と演算子に空白がある時と無い時で動きは違わないか?
×数値と演算子に空白 ○数値と演算子の間に空白
807 :
803 :2007/07/24(火) 00:41:03
スタック回りに微妙なバグがありそうだけど,いい加減に書いたから適当な修正方法が見当たらない. とりあえずの応急処置ってことで,expression()内の最後のreturn ans;の直前に op_stack = val_stack = NULL; の一行を追加しといて.
expressionの初っ端の処理がヤバイっぽい
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): 二分探索木の拡張
詳細はうpしました。元になるプログラムも入っています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4731.zip [3] 環境
[3.1] OS: (Windows/Linux/等々) windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) VC6.0
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 7/27まで
[5] その他の制限:
どなたかご教授よろしくお願いします。
811 :
◆DpMW3bRjps :2007/07/24(火) 07:34:56
1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):任意の文字列を入力し、その文字列の中に任意の文字が何個入っているかを出力する
プログラムのソースコードを提出しなさい。
実行例)
文字列を入力してください
yamamotoyama
さがす文字を入力してください
y
入力された文字列の中に指定された文字は2個あります
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2007年07月25日まで
[5] その他の制限:
>>452 で教えてもらい、その後少し訂正したんですがダメでした。
しつこいですがもう1回お願いします。。
>>811 #include<stdio.h>
int main( void ){
char c, string[100], *pstr;
int count;
printf( "文字列を入力してください\n" );
scanf( "%s%*c", string );
printf( "さがす文字を入力してください\n" );
scanf( "%c%*c", &c );
pstr = string;
count = 0;
while ( *pstr != '\0' ) {
if ( *pstr == c ) {
count++;
}
pstr++;
}
printf( "入力された文字列の中に指定された文字は%d個あります\n", count );
return 0;
}
814 :
813 :2007/07/24(火) 08:01:47
その他制限に全く目を通していなかったorz 朝っぱらかやろうとするとすぐこれだ・・・
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク):括弧が使用可能な四則演算の電卓プログラムを作成せよ。文字入力で、入力時の関数はgetsを使用する事。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限:自作関数は不可、スキルは初心者用の参考書一冊を一通り読んだくらいです。 よろしくお願いします。
自作関数は不可って?
ごめんなさい、そこは無視して大丈夫ですorz
818 :
◆MmITqPYxy6 :2007/07/24(火) 13:42:22
[1] 授業単元: IT入門B1 C言語
[2] 問題文(含コード&リンク): 1辺10の立方体内部に含まれる四面体をN個発生し、
体積の分布(区間数は20程度)を表示するプログラムを
以下の要求に従って作成し、実行しなさい。
1,四面体を表す構造体(4つの3次元位置ベクトルをメンバーとする) を Tetra という名前で定義する.
typedef struct {. . .} Tetra;
2,構造体 Tetra を返却する,すなわち四面体を生成する以下の名前の関数を作成する.
Tetra mk_tetra(void)
3,四面体の体積を返す次の名前の関数を定義する.
double vol_tetra(Tetra t)
4,Nの値は実行時にキー入力するように設計しなさい.
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc 3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 7月25日迄
[5] その他の制限:
ヒントとして 1、講義で用いた"vector.h" を必ずincludeして使いなさい。
2、四面体の1つの頂点を原点にして、他の3つの位置を表すベクトルを r1,r2,r3とすると、四面体の体積Vは以下のように与えられる
V=1/6|(r1×r2)・r3|
がありました。
vector.h はこれです
http://www-it.sci.waseda.ac.jp/teachers/w405201/ITB1/Sources/vector.h
819 :
◆MmITqPYxy6 :2007/07/24(火) 13:46:23
よろしくお願い致します。
>>811 >[5] その他の制限:
>>452 で教えてもらい、その後少し訂正したんですがダメでした。
もしかして、gets()をfgets()に修正したと言うことですか?
それ以外にも変更していますか?
fgets()だけなら、引数を変更するだけで良いんじゃないでしょうか。
>452はgets()の使い方が阿呆過ぎる。 それはさておき、>811はなんで自分がどう修正してダメだったかも書かないんだ?
>>821 gets()の使い方なんか可愛いもんだ。突っ込みどころ満載で目も当てられない。
取り敢えず書いてみた。 #include <stdio.h> int main() { puts("文字列を入力してください"); char buf[200]; if (fgets(buf, sizeof(buf), stdin) == NULL) return 1; puts("さがす文字を入力してください"); char key; if (scanf("%c", & key) != 1) return 1; unsigned count = 0; for (unsigned ic = 0; buf[ic] != '\0'; ++ic) if (buf[ic] == key) ++count; printf("入力された文字列の中に指定された文字は%d個あります\n", count); return 0; }
824 :
デフォルトの名無しさん :2007/07/24(火) 16:33:28
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt )
このデータをファイルから読み込み
挿入ソート
基数ソート
ヒープソート
クイックソート
マージソート
によってソートできるよう各プログラムを作成せよ
データ数が100,000個のときでも対応できるようメモリを確保しておいてください。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 7月28日
[5] その他の制限:出来る限り単純なアルゴリズムで作ってください。合計5つのプログラムを作成してください。
大変な問題で申し訳ありませんがどなたか詳しい方よろしくお願いいたします
>>824 なんで露骨にマルチするわけ?
専用ブラウザ使ってる連中の多くが両方とも見ているから、逆効果にしかならないのだが。
#それともネタか? ネタにマジレスしちゃったか?w
だから答える気がない奴はいちいちうぜーレスするなよ、邪魔。お前みたいな奴いらねーって 行頭 # 野郎w
>>826 こいつ、他のスレにも潜んでるよな
IDが出ないのをいいことに好き勝手やってやがる
>>828 あ~はいはい、去年質問したけど質問の仕方が悪くて
今年は自分が質問者を弄るようになった基地外えせ回答者さん乙でありますw
うぜぇから他の回答者の迷惑になるから、文句を言うだけのレスはするなや、答える気も
答える能力もないくせに、うざすぎ
[1] 授業単元:プログラミングⅠ [2] 問題文(含コード&リンク): 二つの任意の正の整数の乗算(*)を、シフト演算の組合わせと除算(/)と 加算(+)のみで解くプログラムを作成しなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 7月25日まで [5] その他の制限: ビット演算まで習っています。 お願いします。
>>828 まぁ、アレだからスルーしてあげてくれ。
答える気も能力もないクズらが質問者を叩くだけで自己満足か、必死だな
何だ、本当に答える気がなくて質問者をスレのルールに則って詰るだけの低レベルか。 相手にするだけ無駄だ、お前ら俺がいる限り、もうこのスレには来なくて良いから。 邪魔だから失せろ。
>>827 質問者に対して、回答ではなく叩きでレスしているって意味だと思うんだが。
頭大丈夫か?
ここは馬鹿がアホをたたくスレですか?
>>834 >いちいちうぜーレスするなよ、邪魔。お前みたいな奴いらねーって
これに対してオマエモナーだろ。
なんか話が通じてないぞ。
841 :
にゃ~ :2007/07/24(火) 18:31:53
f(x)=sin(x)をテイラー展開すると ∞ f(x)=∑(-1)^(k-1)*{x^(2k-1)/(2k-1)!} k=1 となる.これを利用してsin(x)の値を多項式近似する関数double mysin(double x)を定義し,この関数を利用して,読み込んだ実数xのsin(x)を計算して出力するプログラム(sin.c)を書け. また,数学関数sin(x)と自分で作ったsin(x)を比較せよ. という問題なのですがどうしてもわからないんです。 今日中にできる方いらっしゃいますか?? 理解したいので、コメント付きでどうかお願いします。
ループで適当なとこまで足してきゃいいだけだろ。
>>841 どの辺が分からない?式の意味は分かるよね?
>>841 #include <stdio.h>
#include <math.h>
double mysin(double x) {
double sub = 1.0;
int last = 1001; /* 奇数 */
while (last > 1) {
sub = 1 - (x*x / ((last-1)*last)) * sub;
last -= 2;
}
return x * sub;
}
int main(int argc, char *argv[]) {
while (1) {
double x;
scanf("%lf", &x);
printf("mysin(x) = %lf\t(sin(x) = %lf)\n", mysin(x), sin(x));
}
}
/* コメント:原点から遠ざかると近似が効かなくなるのはマクローリンの宿命だな */
マクローリン云々よりも漸化式の形で解くのに疑問を持つ 1001もマジックでエロい人だなぁ
>>753 ありがとうございますー
最長一致するようにして使わせてもらいます
>\(\)は無理,ってか
>>719 の言い方じゃイラネエじゃんクソ
勘違いしてたみたいですね
すいません
>つーかなに?ほんとはライブラリとか使えんじゃねーのか???
>
>>420 が問題の趣旨を理解していない気が激しくするぞコラ
授業ではプリプロセッサにまったく触れてないんでそれはないです
848 :
デフォルトの名無しさん :2007/07/24(火) 22:22:39
さんざん考えたけど難しかったです。 よろしくお願いします。 [1] 授業単元: アルゴリズム [2] 問題文(含コード&リンク): 2つの複素数z=a+bi、w=c+di(ただしiは虚数単位)を読み込み、足し算とかけ算を計算して表示するプログラムを作成せよ。 但し、以下の仕様を満足するように作成すること。 ・複素数の実部と虚部を示す実数型変数をメンバとする構造体COMPLEXを構造体で定義する。 ・足し算の関数:COMP_ADD(z、w)とかけ算の関数:COMP_MULT(z、w)を作成し、main関数ではこれらの関数を呼び出す。 (実行例) 1つ目の複素数(実部):2 1つ目の複素数(虚部):3 2つ目の複素数(実部):4 2つ目の複素数(虚部):-2 足し算:(6)+(1)i かけ算:(14)+(8)i (ヒント) 複素数を扱う構造体(メンバで実数部、虚数部を2つの数値で格納)を宣言し、各変数を格納、演算を行う。 複素数同士の足し算、かけ算は普通に行う。 (a+bi)+(c+di) (a+bi)×(c+di) を展開して虚数の2乗は-1という知識があれば解ける。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C言語 [4] 期限:7/26(木)12:00まで
849 :
にゃ~ :2007/07/24(火) 22:46:34
いろいろやってみたところ自己解決しました 載せてくれた人もいるみたいですが いちおう礼をいっておきます
>構造体COMPLEXを構造体で定義する。 構造体を構造体以外でどうやって定義するんだよw
>>848 ほい。名前が適当だから、そこだけ自分で修正して。
#include <stdio.h>
typedef struct{
double r;
double i;
} comp;
comp add_comp(comp c1,comp c2){
comp tmp;
tmp.r=c1.r+c2.r;
tmp.i=c1.i+c2.i;
return tmp;
}
comp mul_comp(comp c1,comp c2){
comp tmp;
tmp.r=c1.r*c2.r-c1.i*c2.i;
tmp.i=c1.r*c2.i+c1.i*c2.r;
return tmp;
}
>>851 の続き
int main(){
comp c1={2.0,3.0};
comp c2={4.0,-2.0};
comp result;
printf("1つ目の複素数(実部):%lf\n",c1.r);
printf("1つ目の複素数(虚部):%lf\n",c1.i);
printf("2つ目の複素数(実部):%lf\n",c2.r);
printf("2つ目の複素数(虚部):%lf\n",c2.i);
result=add_comp(c1,c2);
printf("足し算:(%lf)+(%lf)i\n",result.r,result.i);
result=mul_comp(c1,c2);
printf("かけ算:(%lf)+(%lf)i\n",result.r,result.i);
return 0;
}
>>853 例をみると、改行も区切りと見なしてるが、それでいいのか?
856 :
にゃ~ :2007/07/25(水) 00:37:12
>>844 わかりやすいっす!!
ありがとうございます。勉強しなおします
860 :
853 :2007/07/25(水) 00:57:53
すいません。 補足で 入力ファイルを読込モードでオープン 出力ファイルを書出モードでオープン while ( 1 ) { 入力ファイルから書式付で字句を読込 ファイル終端なら脱出 出力ファイルに書式付で番号を付けて書込 } 入力ファイルをクローズ 出力ファイルをクローズ と言う形で作れと書いていました。
>>862 の#include <ctype.h>は不要だから消しておいて
864 :
853 :2007/07/25(水) 01:15:02
ありがとうございました。
865 :
デフォルトの名無しさん :2007/07/25(水) 10:02:24
>>851 >>852 ありがとうございます。
ソースも分かりやすく書いてくれたみたいで、参考になります。
866 :
デフォルトの名無しさん :2007/07/25(水) 10:02:24
パワプロ14でオールAを作るプログラムを作れ
すごい宿題だな
868 :
デフォルトの名無しさん :2007/07/25(水) 11:20:58
>>866 攻略本が必要だ。
でも宿題の内容熱いな。
探索とその評価の方法をパワプロを通して学ぶわけだな
870 :
◆6MtsdamhF6 :2007/07/25(水) 11:45:35
すいません、まだ初心者であんまりわかりません。 締切が近いのでどうかお願いします 【質問テンプレ】 [1] 授業単元:プログラミングC言語 [2] 問題文(含コード&リンク): 次の違いに注意しながら、forの変わりにwhileを使うものにそれぞれ 書き換えなさい。ただし書き換えは最低限にすること (1) #include<stdio.h> main(){ int nc, c; for(nc = 0; (c= getchar()) != EOF; nc++) printf("%c", c); printf("\nTatal=%d\n", nc); } ②#include<stdio.h> main(){ int nc, c; for(nc = 0; (c= getchar()) != EOF; nc++) putchar(c); printf("\n%d\n", nc); } [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:今日の14時までなんです。 どうかおねがいします。
#include<stdio.h> main(){ int nc=0, c; while((c= getchar()) != EOF) { printf("%c", c); nc++; } printf("\nTatal=%d\n", nc); } #include<stdio.h> main(){ int nc=0, c; while((c= getchar()) != EOF) { putchar(c); n++; } printf("\n%d\n", nc); } 期限切れだが
②のn++はnc++の間違い
今、
>>841 をやってみた。最初は簡単かと思ったけど、
そのまま階乗つかうとオーバーフローするから面倒なのね。
>>844 ほど華麗ではないけど、x/n * ...x/3 * x/2 * x/1の和で計算した。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 以下のように、2桁以下の正整数が1行に3つずつ書かれたファイルを input.txt とする。 ただし、ファイルの末尾には、終了を表す番兵0がある。 1 45 90 2 7 41 13 67 60 0 入力リダイレクトで input.txt を読み込み、出力リダイレクトで、以下のような形式で output.txt に保存するプログラムを作れ。 番号 数学 英語 合計 01 45 90 135 02 7 41 48 13 67 60 127 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語: C [4] 期限:7/27 反復構文を使うっぽいです。
[1] 授業単元:情報基礎 [2] 問題文:次の仕様を満たすプログラムを作成せよ (1)入力は2以上の整数n 出力はnのすべての正の約数 (2)入力は2以上の整数n 出力はnの正の約数の個数 (3)入力は2以上の整数n 出力はnが素数ならば"n is prime", 合成数ならば"n is not prime" (nの部分には、入力した整数が表示されるようにすること) 3つのプログラムは1つにまとめてもよい。その場合には、ど れが約数でどれが約数の個数を表しているかが分かるようにす ること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c [4] 期限:7月27日(金)提出は20:45までです
876 :
デフォルトの名無しさん :2007/07/25(水) 16:43:30
>>874 #include <stdio.h>
void main(){
int buf = 0;
int count = 0;
int total = 0;
printf("番号 数学 英語 合計\n");
while(scanf("%d",&buf)) {
if(buf == 0)
break;
count++;
printf("%d ", buf);
total += buf;
if(!(count%3)){
printf("%d\n", total);
total = 0;
}
}
}
なんにもエラー処理してないけどこんなんでいいかな・・・
>>875 #include<stdio.h>
int main(){
int n,c=0,i;
printf("n=");
scanf("%d",&n);
for(i=2;i<=n;i++)
if(n%i==0)
c++,printf("%d ",i);
printf("\n%d\nn is ",c);
if(c!=1)
printf("not ");
printf("prime.\n");
return 0;
}
間違えた・・ #include<stdio.h> int main(){ int n,c=0,i; printf("n="); scanf("%d",&n); for(i=2;i<=n;i++) if(n%i==0) c++,printf("%d ",i); printf("\n%d\n%d is ",c,n); //修正 if(c!=1) printf("not "); printf("prime.\n"); return 0; }
学校の先生はこのスレにかかれているままのコードで 宿題をだしている生徒がいたら、減点すればいいわけだなwwww
教官、見てるなら指摘された問題の間違い位直せよ。
そこまで良心的な教師いないよ
882 :
デフォルトの名無しさん :2007/07/25(水) 17:55:14
[1] 授業単元: IT入門B1 C言語
[2] 問題文(含コード&リンク): 1辺10の立方体内部に含まれる四面体をN個発生し、
体積の分布(区間数は20程度)を表示するプログラムを
以下の要求に従って作成し、実行しなさい。
1,四面体を表す構造体(4つの3次元位置ベクトルをメンバーとする) を Tetra という名前で定義する.
typedef struct {. . .} Tetra;
2,構造体 Tetra を返却する,すなわち四面体を生成する以下の名前の関数を作成する.
Tetra mk_tetra(void)
3,四面体の体積を返す次の名前の関数を定義する.
double vol_tetra(Tetra t)
4,Nの値は実行時にキー入力するように設計しなさい.
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc 3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 7月25日20時迄
[5] その他の制限:
ヒントとして 1、講義で用いた"vector.h" を必ずincludeして使いなさい。
2、四面体の1つの頂点を原点にして、他の3つの位置を表すベクトルを r1,r2,r3とすると、四面体の体積Vは以下のように与えられる
V=1/6|(r1×r2)・r3|
vector.h はこれです
http://www-it.sci.waseda.ac.jp/teachers/w405201/ITB1/Sources/vector.h 今日が期限なんですが、全然わからないんです。
よろしくお願い致します
>>882 結果表示のイメージが分からない。グラフにするのかな?合計数値?
884 :
◆TDJK/P.926 :2007/07/25(水) 18:16:42
【質問テンプレ】 [1] 授業単元:プログラミング言語 [2] 問題文(含コード&リンク) 講義中の題材として扱っていた電卓を、以下の点について改良せよ。 (1)変数に文字列を代入できるようにする。たとえば s1="Programing" word="apple" のような代入が可能になる。 (2)文字を扱う関数を取り扱えるようにする。たとえば s1="Programing" s2="Language" s3=concatenate(s1,s2) 上で代入されたs1とs2を連結したものをs3に代入する。 s3 =ProgramingLanguage (5)次のようなif文を使えるようにする。→if(条件式) 実行文 例: if(a+b>10) a=a-1 条件式には、>または<が使用できるものとする。条件式が成立していたときには、実行文(複文も可)を実行する。 (6)その他、この電卓に追加するとよいと思う昨日を考え、実現してみよ。 [3] 環境 [3.1] OS:WindowsXP 上でのUNIX [3.2] コンパイラ名とバージョン: gcc (※yaccとlexのプログラミングです。 [3.3] 言語:C言語 [4] 期限: (2007年07月27日20:00まで] [5] その他の制限:講義中の題材のソースはすぐアップします。
885 :
◆TDJK/P.926 :2007/07/25(水) 18:19:36
>>884 のソースです。
※ヘッダファイル:ch3-05.h
#define NSYMS 20 /* maximum number of symbols */
struct symtab {
char *name;
double (*funcptr)();
double value;
} symtab[NSYMS];
struct symtab *symlook();
886 :
◆TDJK/P.926 :2007/07/25(水) 18:20:42
>>885 続き
※lexファイル:ch3-05.l
%{
#include "y.tab.h"
#include "ch3-05.h"
#include <math.h>
%}
%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) {
yylval.dval = atof(yytext);
return NUMBER; }
[ \t] ; /* ignore white space */
[A-Za-z][A-Za-z0-9]* { /* return symbol pointer */
struct symtab *sp = symlook(yytext);
yylval.symp = sp;
return NAME;
}
"$" { return 0; /* end of input */ }
\n |
. return yytext[0];
%%
yyerror(char *errmsg)
{
fprintf(stderr,"ERROR: %s at %s\n", errmsg, yytext);
}
yywrap(){}
887 :
デフォルトの名無しさん :2007/07/25(水) 18:20:50
説明不足でした。申し訳ありません N = 10000000 0.0 - 16.7: 0.699031 16.7 - 33.3: 0.206966 33.3 - 50.0: 0.065772 50.0 - 66.7: 0.020377 66.7 - 83.3: 0.005860 83.3 - 100.0: 0.001542 100.0 - 116.7: 0.000351 …中略… 316.7 - 333.3: 0.000000 が実行例としてありました。それぞれ体積の範囲ごとに どれくらい分布しているかを箇条書きみたいに出すみたいです。
888 :
◆TDJK/P.926 :2007/07/25(水) 18:23:05
>>886 続き
※yaccファイル:ch3-05.y
%{
#include "ch3-05.h"
#include <string.h>
#include <math.h>
%}
%union {
double dval;
struct symtab *symp;
}
%token <symp> NAME
%token <dval> NUMBER
%left '+' '-'
%left '*' '/'
%nonassoc UMINUS
%type <dval> expression
%%
statement_list: statement '\n'
| statement_list statement '\n'
;
statement: NAME '=' expression { $1->value = $3; }
| expression { printf("= %g\n", $1); }
;
889 :
◆TDJK/P.926 :2007/07/25(水) 18:25:09
>>888 yaccの続き。次で最後です。
expression: expression '+' expression { $$ = $1 + $3; }
| expression '-' expression { $$ = $1 - $3; }
| expression '*' expression { $$ = $1 * $3; }
| expression '/' expression { if($3==0.0) yyerror("Divide by Zero");
else $$ = $1 / $3; }
| '-' expression %prec UMINUS { $$ = -$2; }
| '(' expression ')' { $$ = $2; }
| NUMBER { $$ = $1; }
| NAME { $$ = $1->value; }
| NAME '(' expression ')' { if( $1->funcptr ) $$ = ($1->funcptr)($3);
else {printf("%s not a function.\n", $1->name);
}
}
;
%%
/* look up a symbol table entry, add if not present */
struct symtab *symlook(char *s)
{
char *p;
struct symtab *sp;
for(sp=symtab; sp<&symtab[NSYMS]; sp++) {
/* is it already here? */
if( sp->name && !strcmp(sp->name, s) ) return sp;
/* is it free */
if( !sp->name ) { sp->name = strdup(s);
return sp;}
/* otherwise continue to next */
}
yyerror("Too many symbols");
exit(1); /* cannot continue */
} /* end of symlook */
890 :
◆TDJK/P.926 :2007/07/25(水) 18:35:56
>>889 これで最後です。
void addfunc(char *name, double (*func)())
{
struct symtab *sp = symlook(name);
sp->funcptr = func;
}
int main()
{
extern double sqrt(), exp(), log(), sin(), cos();
addfunc("sqrt", sqrt);
addfunc("exp", exp);
addfunc("log", log);
addfunc("sin", sin);
addfunc("cos", cos);
yyparse();
return 0;
}
>>1 にもある様に長文はロダ使おうぜ
その方が回答者にとってはやりやすい
って書くといつもの基地外に噛み付かれるのかなぁ?
◆TDJK テンプレ嫁
894 :
◆TDJK/P.926 :2007/07/25(水) 18:47:51
>>891 うpロダには学校からアクセスしてるので規制されててアクセスできないんですよ(汗)申し訳ないです。
2chはおkなのに?おかしな話だ
>>895 2ch自体にはアクセスできますがPink板など18禁系には規制かかります。
うpロダもそれで規制かかったので。
いくらでもあるのに規制って(´,_ゝ`)プッ 宿題まるなげするやつのいいそうなことだ。(´,_ゝ`)プッ
899 :
デフォルトの名無しさん :2007/07/25(水) 19:11:16
説明不足でした。申し訳ありません。 N = 10000000 0.0 - 16.7: 0.699031 16.7 - 33.3: 0.206966 33.3 - 50.0: 0.065772 50.0 - 66.7: 0.020377 66.7 - 83.3: 0.005860 83.3 - 100.0: 0.001542 100.0 - 116.7: 0.000351 …中略… 316.7 - 333.3: 0.000000 が実行例としてありました。それぞれ体積の範囲ごとに どれくらい分布しているかを箇条書きみたいに出すようです。 よろしくお願いします。
903 :
デフォルトの名無しさん :2007/07/25(水) 19:58:54
age
904 :
デフォルトの名無しさん :2007/07/25(水) 20:01:53
スマン影響ないけど if(j > 30) j = 30; → if(j > 29) j = 29;
[1] プログラミング [2] キーボードから入力された1行を読み込み,そのアルファベットを全て大文字に 変換して表示するプログラムを作成しなさい。なお,以下に与えられるメイン関数を必ず使用し, 文字列を大文字の文字列に変換する関数str_capを作成することで完成させなさい。 ヒント:小文字とは「'a'以上 かつ 'z'以下」の文字であるので,条件式が成立した場合に 小文字→大文字変換を行う。それ以外の文字はそのままにする。 Program: pt3-3.c の一部 #include <stdio.h> #define MAXLINE 1024 void str_cap(char src[], char dst[]); int main(void) { char line[MAXLINE], conv[MAXLINE]; printf("Input a line ->"); gets(line); str_cap(line, conv); printf("Original : %s\n", line); printf("Converted: %s\n", conv); return 0; } 実行結果 $ ./pt3-3 Input a line -> hiroshima city Original : hiroshima city Converted: HIROSHIMA CITY $
[3] 環境 [3.1] Linux [3.2] gcc 3.4 [3.3] C [4] [無期限] [5] 関数部分をifを使って組む、toupperは使ってはいけない お願いします
どなたか
>>810 分かりませんか?
offspringを使って左右に潜っていくんだろうけど
最終的にどうなれば求める値なのかさっぱりわからん・・・・
>>905 mainより上にコピーして
void str_cap(char str1[], char str2[]) {
int i;
for(i = 0; str1[i] != '\0'; i++) {
if(('a'<=str1[i]) && (str1[i]<='z')) str2[i]=str1[i]-'a'+'A';
else str2[i]=str1[i];
}
str2[i]='\0';
}
>>908 ごめん、str1 -> src、str2 -> dst、ってことで。
>>905 ヒントは無視してるがやってみた
#include<stdio.h>
int main(void){
char lower[]="abcdefghijklmnopqrstuvwxyz";
char upper[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i;
printf("void str_cap(const char *src, char *dest){\n");
printf("\tdo{\n");
printf("\t\t*dest=*src;\n");
for(i=0;i<26;i++) printf("\t\tif(*src=='%c') *dest='%c';\n", lower[i], upper[i]);
printf("\t\tsrc++;\n");
printf("\t\tdest++;\n");
printf("\t}while(*src);\n");
printf("}\n");
return 0;
}
>>905 それvipでみたな
ヒントもらえたのに解決しなかったのか?
4文字の文字列を入力してF,R,E,Eの4文字で構成されていたらOK それ以外なら入力しなおす。 ERFEやEERFもOK。この4文字で構成(F,RとEが2回で
DEAD BEEF BAD FACE
>>910 は '\0' 入れ忘れてる orz
printf("}\n");
↓
printf("\t*dest='\0';\n}\n");
915 :
デフォルトの名無しさん :2007/07/25(水) 20:56:53
>>902 ありがとうございます。ギリギリ間に合いました。
お手数かけてすみませんでした。
>>919 コンパイルはできたのですが、その部分が出力されないのです。
>>909 の通りに置換されきれてない上に置換された文字が間違ってる
置換すらまともにできないのかYO
922 :
デフォルトの名無しさん :2007/07/25(水) 21:36:52
>>902 度々すみません。コンパイルがうまくできてないようなんですが
どこが間違っているのかわからないのですが。
お教え願いないでしょうか?
int main(int argc, char *argv[]) → int main(void) にするといいかもNE!
だからね・・・ 置換された文字が間違ってるからダメなんだ
>>925 落ち着いて見てみると修正した部分以外にも違っていた
すみません、本当に自分が馬鹿でした・・・
>>924 折角変換処理を通した後で '\0' で上書きするということは
memset(dest, '\0', strlen(str));
と等しい。
>>927 >>908 のstc[i]='\0';の部分を修正したところ、正常に動作しました
ありがとうございました、お世話かけました。
929 :
デフォルトの名無しさん :2007/07/25(水) 22:08:37
[1] 授業単元:OS概論 [2] 問題文(含コード&リンク): Linuxでは、mmap()システムコールを使うと、 複数のプロセス間で仮想アドレス空間の一部を共有することができる。 このようなプログラムを作成し、 実際に仮想アドレス空間の一部が共有されていることを確認しなさい。 [3] 環境 [3.1] OS: LINUX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月26日まで さっぱり見えてきません。 何卒宜しくお願い致します。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 正の整数nを入力して、1からnまでの積(階乗)を求めるプログラムを 作成さいなさい [3] 環境 [3.1] OS: Windows [3.2] 言語: C言語 [4] 期限: 2時間以内 よろしくお願いします
#include <stdio.h> int main(void) { unsigned int n, val = 1; scanf("%d", &n); while (n > 0) { val *= n--; } printf("%d\n", val); return 0; } こんなんでいいの? unsigned intを超える値を表示させろというなら面倒だな。
>>930 #include <stdio.h>
int main(void) {
int n,i,r;
printf("n = ");
scanf("%d",&n);
for(i=1,r=1; i<=n; i++)
printf("%d! = %d\n",i,r*=i);
return 0;
}
>>930 ちょっと変わったところで、こんなのはどう?
>>931 の言うように、任意のnには無理だけど。
#include <stdio.h>
int fact(int n){
return n>1?n*fact(n-1):1;
}
int main(){
int n;
printf("n = ");
scanf("%d",&n);
printf("%d\n",fact(n));
return 0;
}
934 :
プログラミング初心者 :2007/07/25(水) 23:23:39
[1]授業単元:c言語 [2]問題文(含コード&リンク): 2つの符号なし整数a,b(ただし、a>bとする)を キーボードから読み込み ①a,bを2進表示し、配列の中にビットを格納しなさい ②a,bの四則演算 c=a+b d=a-b e=a*b f=a/b(商f1と余りf2)を計算しその結果を出力しなさい [3]環境 [3.1] OS: Windows [3.2] 言語: C言語 [4]期限:2007年7月28日まで 全然見えてきません。 よろしくお願いします。
[1] 授業単元: C言語演習 [2] 問題文: 自分で作成したデータファイルを読み込みんで以下のような出力が出るようにする。 abc efg abc hijkl efg xxxxxxxxx これを abc, 3 efg, 3 hijkl, 5 xxxxxxxxx, 9 のようにする。 同じ文字は二度も表示させない。それぞれの文字数をカウントする。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C++ [4] 期限:7月30日まで よろしくお願いします。
>>934 こんなんでいいかい?
#include <stdio.h>
void dtob(unsigned int n, char *s) {
unsigned int i = 32;
s[i] = '\0';
for (i = 31; i >= 0; i--) {
s[i] = (((n >> (31 - i)) & 1) + '0');
}
}
int main(void) {
unsigned int a, b;
char buf[33]; /* for 32bit */
scanf("%d %d", &a, &b);
dtob(a, buf);
printf("%s\n", buf);
dtob(b, buf);
printf("%s\n", buf);
printf("%d + %d = %d\n", a, b, a+b);
printf("%d - %d = %d\n", a, b, a-b);
printf("%d * %d = %d\n", a, b, a*b);
b && printf("%d / %d = %d(%d)\n", a, b, a/b, a%b);
return 0;
}
939 :
938 :2007/07/26(木) 00:20:49
リロードし忘れorz
>>937 のを試してみます
ありがとうございました
940 :
686 :2007/07/26(木) 00:26:12
>>702 http://sa-wiki.com/upload/src/up0151.txt >期限: ([2007年7月23日9:00まで] )
もうとっくに切れているし、必要ないかもしれませんが、一応作ったので
極力ソースの変更はしないようにしたつもりです
コメントは入れてませんし、メモリの開放が失敗しているかもしれません
問題の「その後、木のノードからつながる住所データを表示する。」の意味が分からなかったので手を付けていません
素人(自分)がやったのできれいではありません
>>935 「同じ文字は二度も表示させない」ってのは何のこと?
「同じ単語は…」のことか?
942 :
デフォルトの名無しさん :2007/07/26(木) 00:41:47
>>810 dataType* f(nodeType *p,int k) {
int n=k;
if(k<1)return NULL;
if(p->left!=sentry)n-=(p->left->offspring+1);
if(n==1)return &(p->data);
if(n<1)return f(p->left,k);
if(p->right!=sentry)return f(p->right,n-1);
return NULL;
}
dataType* RBSTfindKth(int k){
return f(head,k);
} 該当箇所にコピー,ヘッダにf()の宣言追加,
メニュー文字列に5:find追加でおk
944 :
デフォルトの名無しさん :2007/07/26(木) 01:45:29
[1] 授業単元: プログラミング言語論 [2] 問題文: 読み込んだ分数を連分数として出力せよ。全ての分子が1になったときに連分数にする計算はとめればよい。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C++ [4] 期限:明日(正確には今日)まで・・・ お願いします。
>>944 まず
> 読み込んだ分数
っていう前提条件をよこせ
946 :
944 :2007/07/26(木) 02:21:10
問題があやふやですいません。 float a, b, c; std::cin >> a; std::cin >> b; c = a/b; 上記でいうcが読み込んだ分数です。 よろしくお願いします。
>>943 なんとなく lexico だけ
#define lwstr(x) (isupper(x)?tolower(x):(x))
int lexico(char *a,char *b){
int i=0;
while(*a && *b)
i=lwstr(*a)-lwstr(*b),a++,b++;
return i;
}
>>944 よりによってfloatか.微妙な誤差が出るかも
記法はwikiにならった
#include <iostream>
using namespace std;
int main() {
float A, B;
cout << "input numerator (A in A/B)" << endl;
cin >> A;
cout << "input denominator (B in A/B)" << endl;
cin >> B;
if (A == 0) {
cout << 0 << endl;
} else if (B == 0) {
cout << "error" << endl;
} else {
cout << "[" << (int)(A/B) << "; ";
A = A-(int)(A/B)*B;
while (A != 1) {
if (B-(int)(B/A)*A == 0) { B /= A; break; }
cout << (int)(B/A) << ", ";
float w = A; A = B-(int)(B/A)*A; B = w; }
cout << (int)B << "]" << endl; } }
950 :
944 :2007/07/26(木) 02:46:42
>>949 ありがとうございます!このアルゴリズムを理解して寝ますwww
本当に助かりました☆
951 :
948 :2007/07/26(木) 02:53:49
lexico関数の中の int k はいらないから消しといて><
クソースってのは俺が最初に使った言葉だ、一回使うたびに¢10徴収するニダ
どう考えてもブルドックソースのほうが先
んじゃブルドックソースに一部を納めるから、クソースを使うたびに¢50徴収する二ダ
955 :
デフォルトの名無しさん :2007/07/26(木) 09:10:02
だれかクイックソートのフローチャートを図付きで詳しく説明してください 俺の頭じゃわかりません><
958 :
デフォルトの名無しさん :2007/07/26(木) 09:21:14
ググってもわかりやすいフローチャートが出ないんだ(´・ω・`)
あれで理解できないなら諦めろ。所詮、才能の無い奴、理解力の無い奴は 一応学校の規定で単位はもらえるが、適切に行動が起こせないから困る。 今はなんだかんだ言ってもバカでも金で学歴が買える時代だしな。
>>955 要は再帰呼び出しが理解できないでハマってるんだろうけど
フローチャートで書いてもそこんところは分かりやすくならんのよ
寧ろ、フローチャートなんか使うから余計に理解しにくくなると思うんだが。
962 :
デフォルトの名無しさん :2007/07/26(木) 13:56:20
トランプかなんかで、試してみれ
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
ttp://s-io.mydns.jp/up/1/_/jump/1185417223.c/attatch PASS:c
四則演算のプログラムとして提出したのですがgets関数を使って書き換えろといわれ返されてしまいました
上のプログラムを元にして文字入力(取得)にgets関数を使った物を作ってください。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C言語
[4] 期限: 7月27日
[5] その他の制限: gets関数をつかっていればそれ以外には特に指定なし
よろしくお願いします。
教育目的とはいえ今時gets使えとかどこのアホ教授だ
>>963 void readch(void) /* 1文字を読む、空白は読み飛ばす */
{
#if 0
do {
if ((ch = getchar()) == EOF) return;
} while (ch == ' ' || ch == '\t');
#else
static char buf[1000];
static int index;
if (index == 0) gets(buf);
do {
if ((ch = buf[index++]) == '\0') {
ch = '\n';
return;
}
} while (ch == ' ' || ch == '\t');
#endif
}
>>965 改悪にしかなってないのがwarosu
教官どんだけアホなのかと
>>965 ありがとうございます。
やっぱり無理に書き換えても無駄が増えるだけですよね・・・
最初から新しく書き直したほうがいいんでしょうか?
板谷だろ
>>967 どう書き直そうがgets()を使う限り改悪にしかならんから諦めろ
(というかこのコードなら、例えfgets()であろうと同じことが言える)
投稿時すでに期限切れなのか
ほんとだwこれは新しいww
ごめんなさい、ごめんなさい。
>>970 の期限は
[4] 期限: 2007/07/30 13:00まで です。
先生方、お願いしまつ。
[1] 授業単元:C言語 [2] 問題文 文字列が回文かどうか判定をするプログラムを作成せよ 実行例 文字列を入力してください。 abcdcba(Return) abcdcbaは回文です。 文字列を入力してください。 unko6yy6oknu(Return) unko6yy6oknuは回文です。 文字列を入力してください。 abcdefg(Return) abcdefgは回文ではありません。 [3] 環境 [3.1] Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 7/30まで [5] その他の制限:特になし ポインタを使わなければいけないみたいですがさっぱり分かりません。 先生方、もしよろしければお助けください。お願いします。
ワザとやってんのかな
//
>>974 #include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool isPalindrome(const char * word)
{
unsigned len = strlen(word);
if (len == 0) return false;
for (unsigned ic = 0; ic < len / 2; ++ic) {
if (word[ic] != word[len - 1 - ic]) return false;
}
return true;
}
int main()
{
char buf[200];
scanf("%199[^\n]", buf);
printf("%s is%s palindrome.\n", buf, isPalindrome(buf) ? "" : " not");
return 0;
}
979 :
974 :2007/07/26(木) 19:52:31
980 :
943 :2007/07/26(木) 20:05:11
983 :
プログラミング初心者 :2007/07/26(木) 22:18:40
>>936 ありがとうございます。
一度やってみましたがデバッグ後に何すればいいのかわかりません
とりあえず、分かるところまででいいから解読しようとしようよ。
987 :
デフォルトの名無しさん :2007/07/27(金) 00:33:50
[1] 授業単元: プログラム言語 [2] 問題文: 再帰関数を用いて以下のような三角形を印字せよ。 入力:3 * ** *** *の個数も印字せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2007年7月23日22:00まで [5] その他の制限: forで以下のように作ったのですが、再帰の場合の書き方がわかりません。以下を再帰に書き換えるような形で作っていただけると、大変有り難いです。 よろしくお願い致します。 #include<stdio.h> int kazu(int n); main() { int a,b; scanf("%d",&a); b=kazu(a); } int kazu(int n) { int i,j; for(i=1;i<=n;i=i+1) { for(j=0;j<i;j=j+1) { printf("*"); } printf("\n"); } }
>>987 #include<stdio.h>
int kazu(int n);
main()
{ int a,b;
scanf("%d",&a);
b=kazu(a);
printf("%d\n",b);}
int kazu(int n)
{ int i,j;
if(n<1)return 0;
j=kazu(n-1);
for(i=0;i<n;i=i+1)
{ printf("*"); }
printf("\n");
return j+n;}
990 :
デフォルトの名無しさん :2007/07/27(金) 00:58:54
>989さん どうもありがとうございます。 本当に助かりました。
おねがいします [1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): 空白または改行で区切られている単語だけからなる文章があるとする。 これを列は15文字以内(全角を1文字、半角は0.5文字とする) にして、最小の行に納めるようにせよ。 注意:単語の途中で改行をはさむことはできない。 (例) 123456789012345<-15文字分はここまで --------ここから----------------- 日本 中国 アメリカ インド フランス イタリア スペイン メキシコ ドイツ カナダ イギリス スイス サウジアラビア 南アフリカ共和国 ブラジル --------ここまで---------------- (実行結果) 日本 中国 アメリカ インド フランス イタリア スペイン メキシコ ドイツ カナダ イギリス スイス サウジアラビア 南アフリカ共和国 ブラジル [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc2.95-3 [3.3] 言語: C [4] 期限: 8月1日 [5] その他の制限: 無制限(授業でならっていないものでも、自分で勉強して理解したのなら何をつかってもいい)
丸投げってことは何も使っちゃ駄目ってことか・・・
>>991 面白そうな問題だ。ちょっと時間がないんで解けないが・・・
これってナップサック問題っていうんだっけ?
あれみたいな感じで、入力内容によっては全パターン検索
しようとしたら膨大な時間になりそうな風に感じるんだが。
そういうの詳しい人いない?
ナップサックというより組み合わせ計画問題。 グリーディ法でいけそうな問題だね。めんどくさそうだけど
>>935 #include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(void){
vector<string> v;
string word;
int i;
while(1){
cin >> word;
if(cin.eof() || cin.fail()) break;
for(i=0;i<v.size();i++){
if(v[i]==word) break;
}
if(i>=v.size()) v.push_back(word);
}
for(i=0;i<v.size();i++){
cout << v[i] << "," << v[i].size() << " ";
}
cout << endl;
return 0;
}
#include <iostream> #include <set> #include <string> int main( int argc, char ** argv ) { typedef std::set< std::string > dict_t; dict_t wc; while ( 1 ) { std::string word; std::cin >> word; if ( std::cin.eof() || std::cin.fail() ) break; wc.insert( word ); } for ( dict_t::iterator it = wc.begin(); it != wc.end(); it++ ) std::cout << *it << ", " << it->length() << " "; std::cout << std::endl; return 0; } set<> なり,map<> なりじゃなきゃ遅くてどうしようもないだろうに
>>988 指定にgets使わないといけないとか言ってクレームした出題者がいるから
それもgets使わないといけないと思われ。
999 :
998 :2007/07/27(金) 08:54:04
>if(feof(stdin) || ferror(stdin)) > break; これは消し忘れ。
1000 :
◆mM9WALL8Ws :2007/07/27(金) 08:54:13
1000GET
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。