1 :
デフォルトの名無しさん :
2005/12/21(水) 09:35:28 BE:463888477-
2get?
3 :
素人 ◆g5knElKWAw :2005/12/21(水) 12:10:38
[1] 授業単元:情報処理 [2] 問題文:正式な課題文はありません。簡易電卓(三角関数を含めた四則演算が可能)を作成せよ。 簡単に言うと、「1+5-sin30+7-tan15」などの計算ができる電卓です。 繰り返し演算が可能で、終了もできることが条件です。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)?? [3.3] 言語: C [4] 期限: 12月22日の15:00まで [5] その他の制限: 九月に始めたばかりです。入門用教科書が半分くらい進みました。 授業中にもらったヒントを元に途中まで できています。 できたらこれを改良、修正するかたちで作成していただけると助かります。 次のレスに、作成したプログラムを示します。
4 :
& ◆Jx3uuDAUoo :2005/12/21(水) 12:18:21
#include<stdio.h> #include<math.h> #define pi (3.14) main(){ float x,y,z; char mode,function,d; int fg=0; scanf("%f%c",&x,&d); while(1){ printf("計算記号(+,-,*,/)を決定した後、数値を入力して下さい。 また、記号(A)を入力するとモードが切り替わり、三角関数に対応します。 sinは記号s、cosはc、tanは記号tで表し、記号のあとに角度(単位は'度')を入力して下さい。 計算モードを元に戻したい場合は記号(B)を入力して下さい。なお、qで終了します。"); scanf("%c%c",&mode,&d); scanf("%c%c",&function,&d); if(fg==0){ switch(mode){ case '+': scanf("%f%c",&y,&d);x = x+y;break; case '-': scanf("%f%c",&y,&d);x = x-y;break; case '*': scanf("%f%c",&y,&d);x = x*y;break; case '/': scanf("%f%c",&y,&d);x = x/y;break; case 'A': fg=1;break; default: printf("エラーが発生しました。正しく入力し直して下さい。"); case 'q': exit(1);} } else { switch(function){ case 's': scanf("%f",&y);z = y/180.*pi;x = sin(z);break; case 'c': scanf("%f",&y);z = y/180.*pi;x = cos(z);break; case 't': scanf("%f",&y);z = y/180.*pi;x = tan(z);break; case 'B': fg=0;break; default: printf("エラーが発生しました。正しく入力し直して下さい。"); case 'q': exit(1); }} } printf("%f\n",x);} A、Bを入力することで三角関数に対応できるモードに切り替えるようにしたいのです。 自力だとここが限界です。どなたかよろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 10個の整数の中から最大のものと最小のものを探す 関数をそれぞれ作成し、メインプログラムで与えた 10個の整数の中の最大値、最小値を求めるプログラム (合計3個の関数から成る)を作成しなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年12月31日23:59まで [5] その他の制限: よろしくお願いします。
>>4 適当に推測しながら直した。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define pi 3.14
int main(){
float x,y;char ope;int mode=0;
printf("計算記号(+,-,*,/)を決定した後、数値を入力して下さい。\n\
また、記号(A)を入力するとモードが切り替わり、三角関数に対応します。\n\
sinは記号s、cosはc、tanは記号tで表し、記号のあとに角度(単位は'度')を入力して下さい。\n\
計算モードを元に戻したい場合は記号(B)を入力して下さい。なお、qで終了します。\n");
scanf("%f",&x);
for(;;){printf("%f\n",x);scanf(" %c",&ope);
#define ope2(ch,code) case ch:scanf("%f",&y);code;break
if(mode==0)switch(ope){
ope2('+',x+=y);ope2('-',x-=y);ope2('*',x*=y);ope2('/',x/=y);
case 'A': mode = 1;break;
default: printf("エラーが発生しました。正しく入力し直して下さい。\n");
case 'q': exit(1);
}else switch(ope){
ope2('s',x=sin(y/180.*pi));ope2('c',x=cos(y/180.*pi));ope2('t',x=tan(y/180.*pi));
case 'B': mode = 0;break;
default: printf("エラーが発生しました。正しく入力し直して下さい。\n");
case 'q': exit(1);}}}
>>5 int min_value(int array[],int size){
if(size==0)return 0;/*Error*/
int min = array[0];
while(--size != 0)if(min > array[size])min = array[size];
return min;
}
int max_value(int array[],int size){
if(size==0)return 0;/*Error*/
int max = array[0];
while(--size != 0)if(max < array[size])max = array[size];
return max;
}
int main(){
int i=10,data[10];
while(i != 0)scanf("%d",&data[--i]);
printf("min=%d\nmax=%d\n",min_value(data,10),max_value(data,10));
return 0;
}
前スレで指摘された、A=B*(C-(D)) はA=B*(C-(D)の誤りでした。 (1)は何とか作成できそうなので、(2)をどなたか助けてください 985 名前:デフォルトの名無しさん 本日のレス 投稿日:2005/12/21(水) 08:55:34 [1] 授業単元: ソフトウェア [2] 問題文(含コード&リンク): (C、FORTRAN)の代入文が入力データとして与えられたとき、 (1) ポーランド記法に変換して出力する構文解析プログラムを作成する。 (2) 木構造表現に変換して出力する構文解析プログラムを作成する。 ただし、(C、FORTRAN)の代入文は、「単純変数=算術式」であり、算術式は、 単純変数(英字1文字)の演算数と、「+、−、*、/」の4種類の演算子および 「(」,[)]によって表現される任意の数式とする。 「+」、「-」は単純演算子としても使用されるとする。 演算子間の優先順位は{*,/}>{+,-}>{=}とする。 入力された代入文の文法的な誤りはできるだけ検出すること。 例えば、A=B+*C、A=B*(C-(D)) などをエラーとする。 [3] 環境 [3.1] OS: windouws [3.2] コンパイラ名とバージョン:VC [3.3] 言語:どちらでも可 [4] 期限: 明日の夜まで [5] その他の制限: なし 宜しくお願いします。。。
>>5 #include <stdio.h>
int max(int a[]) { int mx=a[0], i; for(i=1;i<10;i++) if(mx<a[i]) mx=a[i]; return mx;}
int min(int a[]) { int mn=a[0], i; for(i=1;i<10;i++) if(mn>a[i]) mn=a[i]; return mn;}
int main(void)
{
int num[] = {3,1,4,1,5,9,2,6,5,3}; //数値データは適当
int i;
printf("Data=[");
for(i=0;i<10;i++) printf("%d ", num[i]);
printf("]\n");
printf("Max = %d\n", max(num));
printf("Min = %d\n", min(num));
return 0;
}
10 :
デフォルトの名無しさん :2005/12/21(水) 13:15:59
11 :
デフォルトの名無しさん :2005/12/21(水) 13:23:08
>>8 「木構造表現」とは具体的にどういう表現を表しているのか
例示してくれ。
13 :
デフォルトの名無しさん :2005/12/21(水) 16:12:22
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 適当な整数が入った二次元配列とヒット数を引数とし そのヒット数に応じて行番号と数字列を返す関数を作成せよ 引数と実行例 @func(array[12][3], 3) ←第2引数が3 2,3,4 3,5,9 2,3,4 11,13,6 6,4,9 2,4,3 9,6,4 11,6,13 9,11,4 18,19,20 4,6,9 4,11,9 [結果] 1,3,6 -> 2,3,4 5,7,11 -> 4,6,9 Afunc(array[12][3], 2) ←第2引数が2 [結果] 4,8 -> 11,13,6 9,12 -> 4,11,9 行番号1,行番号2,... -> 一致した数字列 [3] 環境 [3.1] OS: WindowsXP [3.2] BorlandC++Compiler [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: 2005/12/22 13:30 [5] その他の制限:入力配列はファイルからでもmain関数で代入してもよい
15 :
デフォルトの名無しさん :2005/12/21(水) 18:18:36
17 :
教えてください!! :2005/12/21(水) 19:25:54
問題 標準入力から入力した文字列の順序をさかさまにして標準出力へ表示するCプログラムを10分で作成せよ。たとえばabcと入力するとcbaと出力する。
char *reverse( char *str ) { char *head=str, *tail; char tmp; for ( tail=str; *tail && *tail != '\n'; ++tail ); --tail; while ( head < tail ) { tmp = *head; *head = *tail; *tail = tmp; ++head; --tail; } return str; } int main( void ) { char buf[1024]; while ( fgets( buf, sizeof(buf), stdin ) ) { printf( "%s", reverse(buf) ); } return 0; }
>>17 #include <stdio.h>
void p() {
int c = getchar();
if (c != '\n') {
p();
putchar(c);
}
}
int main(void) {
p();
return 0;
}
21 :
教えてください!!もう一度 :2005/12/21(水) 19:35:21
17です できればstrlenを使ってできないでしょうか? >>20 素敵です
23 :
教えてください!!何度でも :2005/12/21(水) 19:39:08
17です voidを使わないでできないでしょうか? 自分は未熟でvoidを知りません。ごめんなさい
>>12 さん
こんな感じに結果がなれば、いいそうです。
=====実行結果=====
式を入力してください。
A=-B*C+(-D+E)/(E-F)
木構造に変換します。
T1=(#-B)
T2=(T1*C)
T3=(#-D)
T4=(T3+E)
T5=(E-F)
T6=(T4/T5)
T7=(T2+T6)
T8=(A=T7)
お願いします
条件後出しテラウザス
>>23 #include <stdio.h>
#include <string.h>
int main(void)
{
char str[100];
int len;
int i;
printf("文字列を入力してください:");
scanf("%s",str);
len=strlen(str);
for(i=len;i>0;i--){
putchar(str[i-1]);
}
return 0;
}
まぁ問題のレベルから察してやれなかったのも
[1] 授業単元:オブジェクト指向 [2] 問題文(含コード&リンク): キーボードから入力した数値の和を求めるプログラムを作成せよ ただし、和を表示する関数 void print_add(int a, int b) を必ず利用すること、この問題では関数の中で結果を表示すればよい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C言語 [4] 期限: 12月22日9時まで この課題だけが解らなくて、何卒よろしくお願いいたします。
#include <stdio.h> void print_add( int a, int b ) { printf( "%d + %d = %d\n", a, b, (a+b) ); } int main( void ) { int a, b; printf( "Input a> " ); scanf( "%d", &a ); printf( "Input b> " ); scanf( "%d", &b ); print_add( a, b ); return 0; }
29 :
28 :2005/12/21(水) 20:25:58
>>27 の返答が
>>28 です。
思ったんだけどこの時期に出る課題って結構授業の最後のほうのやつだよねぇ。
授業名「オブジェクト指向」でこの時期に
>>27 とかいう問題ってどうなんだろう。
今学期中にオブジェクト指向の「オ」にさえたどり着かない予感
>>27 仕様がようわからん
#include <stdio.h>
void print_add(int a, int b)
{
printf("%d\n", a + b);
}
int main(void)
{
int sum = 0, val;
while (printf("input>"), scanf("%d", &val) == 1) {
print_add(sum, val);
sum += val;
}
return 0;
}
31 :
デフォルトの名無しさん :2005/12/21(水) 22:22:47
[1] 授業単元:連立方程式の求解 [2] 問題文(含コード&リンク):ヤコビ法、ガウスザイデル法、消去法により三元一次方程式及び四元一次方程式を解く [3] 環境 [3.1] OS: たぶんUNIX [3.2] コンパイラ名とバージョン: GCC [3.3] 言語: C [4] 期限: 明日 プログラムの方はHPをみたりしてできたのですが 考察に書くことが無くて困ってます。 ヤコビ法では解けずガウスザイデル法では解ける方程式が出されています。 何か書くことでいいことあれば教えてください
>>31 > ヤコビ法では解けずガウスザイデル法では解ける
これが何故か書けば?
>>32 ありがとうございます
それも書こうと思っていたのですがなぜなのかわからなくて困ってるんです
>>33 途中経過を出力するようにしてどこで解けなくなっているかを見るとか、
三元一次や四元一次ならアルゴリズムどおりにて計算で追ってみる
こともできるだろう。
前スレの未解決のまとめある? どれが解決してるのか よくわからん
ガウス・ザイデル法=反復法でぐぐって味噌。
>>36 うお
ありがとうございます
これでレポート完成しそうです
[1] 授業単元: プログラミングU [2] 問題文:整数係数の2次方程式ax^2+bx+c=0(a≠0)を因数分解するプログラムを作れ。ただし、因数が全て整数値になるものだけとする。整数値にならないものは『不可能』というメッセージを出力すること。 例 a b c 1 2 1 (1x+1)(1x+1) 1 1 1 不可能 3 13 -10 (3x+-2)(1x+5) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限: 12月24日 [5] その他の制限:定数a,b,cは、scanf()での入力です。 プログラミングの授業は2年目で、教科書は簡単なものを半分くらいやっています。
[1] 授業単元:なんちゃってPG [2] 問題文(含コード&リンク): ポインタのポインタ(参照渡し)を引数とする 汎用ロジック関数をC/C++言語でコンパイルできる一つの関数(呼び出し含む)で作れ。 但し、汎用ロジックのため引数の型はvoidを用いる。 [3] 環境 [3.1] OS:Windows [3.2] VC6 [3.3] 言語: C及びC++ [4] 期限: [無期限] [5] その他の制限: C/C++でのコンパイルが可能なこと。
43 :
デフォルトの名無しさん :2005/12/22(木) 06:53:41
>>42 >ポインタのポインタ(参照渡し)を引数とする
>引数の型はvoidを用いる。
どっちなんだよ
void* の事じゃない?汎用ポインタという意味で。
47 :
デフォルトの名無しさん :2005/12/22(木) 11:07:43
[1] 授業単元:プログラミング演習1 [2] 問題文:C++を使い英和辞書を作成せよ。 構造体を用い、要素の検索・追加・削除ができるようにすること。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C++ [4] 期限: 1月中旬まで [5] その他の制限: 作れと言って放置する授業なので関数などに特に制限はないです。今のところ線形リスト・2分木・ハッシュのどれかを 使用するよう言われています。
>>42-46 その場合「引数の型はvoidを用い」はおかしいな
あくまで「引数の型はvoid*を用い」と書くべき
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):for文を使って1+2+3...+100を計算するプログラムを作成 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: ボーランドC++ Compiler [3.3] 言語:C++ お願いします。
50 :
デフォルトの名無しさん :2005/12/22(木) 12:01:33
49です 期限は今年までです
>>49 #include "stdio.h"
main(){
int i,ans;
ans=0;
for(i=1;i<101;i++) ans=ans+i;
printf("ans=%d",ans);
}
[1] 授業単元:基礎プログラミングU [2] 問題文(含コード&リンク):あらかじめ指定したHPを開くソフト(先生はランチャーだといっていた [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C++ [4] 期限: ([2005年12月26日15:00まで]) [5] その他の制限:特になし
>>51 C++ではint main()と書かないといけない。
>>51 >#include "stdio.h"
C++なら<cstdio>、Cでも<stdio.h>にするべき。
>main(){
>53
>int i,ans;
>ans=0;
int ans = 0;
どちらかと言えばこうだろう(iは後述)。
>for(i=1;i<101;i++) ans=ans+i;
問題が1から100までなんだから、
for (int i = 1; i <= 100; ++i) and += i;
とすべきだろう。101なんてのをわざわざ捻出するのはナンセンス。
>printf("ans=%d",ans);
C++ならストリームを使うべきだがそれはそれとして、
std::printf("ans=%d\n", ans);
だろうな。
>}
return 0;は省略できるとは言え書く習慣つけておこうや。
ここはスタイルの添削スレじゃないぞ。それから、 >C++なら<cstdio>、Cでも<stdio.h>にするべき。 >return 0;は省略できるとは言え書く習慣つけておこうや。 この二つは蛇足だと思う。
突飛するとC++ならprintf関数使わずにstd::cout使えとかになるからやめとけ
>>42 %cat ahe.c
#include <stdio.h>
typedef enum _ty {
ty_char,
ty_short,
ty_long
} ty;
int logic(void **v, ty t)
{
switch(t){
case ty_char: fprintf(stdout, "c:%d\n", *((char *)*v)); break;
case ty_short: fprintf(stdout, "d:%d\n", *((short *)*v)); break;
case ty_long: fprintf(stdout, "ld:%ld\n", *((long *)*v)); break;
default:
fprintf(stderr, "Illegal type.\n");
}
return 0;
}
int main(void) { char a = '@'; short b = 32767; long c = 2147483647; char *pa = &a; short *pb = &b; long *pc = &c; logic((void **)&pa, ty_char); logic((void **)&pb, ty_short); logic((void **)&pc, ty_long); return 0; } %gcc -o ahe ahe.c ; ./ahe c:64 d:32767 ld:2147483647 %
59 :
39 :2005/12/22(木) 14:16:32
>>40 >>41 サンクスです。これで提出できます。しかし2つも作ってくれるなんて・・・
ホント、感謝です
60 :
40 :2005/12/22(木) 14:28:42
>>59 >>40 と >> 41 は別の人です
「根と係数の関係」とか知らなかった…。なんだそれ
忘れてるだけかな
61 :
40 :2005/12/22(木) 14:35:40
と思ったら名前知らなかっただけで普通のことじゃん。
>>41 のプログラムだと 54x^2-3x-77 = (6x+7)(9x-11) とか
因数分解できないで「不可能」になるよ。
ちゃんとプログラムみてないけど浮動小数点数の誤差とかのせいかな。
62 :
39 :2005/12/22(木) 15:20:32
別の人ですか。失礼しました。 何故なんでしょう?やっぱり細かいところになにかあるのかなぁ・・・ わからないですが(汗)
宿題おねがいします。 1から9までの階乗の値を例のように表示せよ。 例)Aの階乗はBです 整数nを与えるとn!を計算して返す関数(適当な名前を決めること)を作成し、 mainから、その関数を呼び出して結果を表示すること。
64 :
40 :2005/12/22(木) 15:32:42
テンプレ通り必要な情報を書いてくれ。C か C++ かとか。
%cat boke.c #include <stdio.h> int fact(int n) { if(!n) return 1; return n * fact(n - 1); } int main(void) { int i; for(i = 1; i < 10; i++) fprintf(stdout, "%d no kaijou ha %d desu.\n", i, fact(i)); return 0; } %gcc -o boke boke.c ; ./boke 1 no kaijou ha 1 desu. 2 no kaijou ha 2 desu. 3 no kaijou ha 6 desu. 4 no kaijou ha 24 desu. 5 no kaijou ha 120 desu. 6 no kaijou ha 720 desu. 7 no kaijou ha 5040 desu. 8 no kaijou ha 40320 desu. 9 no kaijou ha 362880 desu. %
>>63 #include <iostream>
struct intp {
int i;intp(int i):i(i){}
intp operator!(){return i?i*!intp(i-1):1;}
operator int&(){return i;}
};
int main()
{
for (intp i(1); i <= 9; ++i)
std::cout << i << "の階乗は" << !i << "です\n";
}
[1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク) A=−2 −1 8 −1 5 4 4 8 −2 B=22 −30 x 0 7 23 −14 56 −22 ガウス・ジョルダン法を用いてAの逆行列およびAB=Cを満たす 行列Bを求めてファイルに出力する。Xは任意の数字 [3] 環境 [3.1] OS: (Windows/Linux/等々) Windows 2k [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: 2005年12月23日 [5] その他の制限: ガウス・ジョルダンを用いることが条件です。 よろしくお願いします。
>>68 数学は不得意なんだけど、行列Cが定義されていなくて解けるのか?
それとも、Cを以下のように定義して良いのか?
C=c11 c12 c13
c21 c22 c23
c31 c32 c33
C=22 −30 x 0 7 23 −14 56 −22 ってことじゃないかな?
>>70 たぶん、そうですね。
つうか、
>>68 よそういう大事な所を間違えるなよ!
[1] 授業単元:情報実習 [2] 問題文(含コード&リンク) (1) 第一項がランダムなアルファベット二文字の文字列 第二項がランダムな三桁の自然数 第三項がランダムな十桁のアルファベットと自然数の混合文字列 な配列を7万行分持つcsvファイルを作成せよ。 (2) 適当な二桁のアルファベット文字列を標準入力で入力した時、(1)で作成したファイルから第一項と入力が一致する行を検索し、 一致する行数とその行の二列目の自然数を列挙して出力せよ (3) 同様に、適当な三桁の自然数を入力し、一致する行の行数と一列目の文字列を列挙せよ [3] 環境 [3.1] OS: (Windows/Linux/等々) Unix/Windows xp [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) c [4] 期限: 2005年12月26日 [5] その他の制限: 授業で習った検索法は禁止とする。(BM法とKMP法を習いました) (1)はできたので(2)と(3)をお願いします どうすればいいのかさっぱりで・・・orz
>>72 (1)で使った構造体もしくはclassを晒せ。
アルファベットは大文字小文字混同か?
>>73 >(1)で使った構造体もしくはclassを晒せ。
テンプレ書いてくれているんだから読もうね。
75 :
72 :2005/12/22(木) 18:44:16
>>73 順次ファイルに書き出すだけで構造体やこれといった関数は使ってないです、すみません・・・
アルファベットは大文字だけで良いようです。
>>72 とりあえず(2)だけ
(3)はこれを僅かに書き換えるだけなので自分でやってくれ。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{char a[3];int b;char c[11];}csv_dat;
int main(){
int nsize=0,i;
csv_dat*p=NULL;
char buf[80];
FILE*fp=fopen("a.csv","r");
while(p=realloc(p,(nsize+1)*sizeof(csv_dat)),
fscanf(fp," %[^ ,] , %d , %s",p[nsize].a,&p[nsize].b,p[nsize].c)==3
) ++nsize;
scanf("%s",buf);
for(i=0;i<nsize;++i)
if(strcmp(p[i].a,buf) == 0)printf("%d %d\n",i,p[i].b);
return 0;
}
77 :
72 :2005/12/22(木) 19:04:36
>>76 ありがとうございます!
(3)は頑張ってみます
78 :
デフォルトの名無しさん :2005/12/22(木) 21:05:40
こんばんは。ちょっとわからなかったのでよろしくお願いします! [1] 授業単元:プログラミング [2] 問題文:2点間の距離計算を関数としてプログラムせよ.ただし構造体を引数とし,戻り値は実数であるとする. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:あした [5] その他の制限:kannsuuを関数としてreturnで返す。
79 :
78 :2005/12/22(木) 21:06:30
↓コレ利用してよろしくお願いします。 #include <stdio.h> #include <math.h> #include <string.h> int main() { struct point { double x; double y; }; struct point data[2]; int i; double a; for(i=0;i<2;i++) { scanf("%lf",&data[i].x); scanf("%lf",&data[i].y); } for(i=0;i<2;i++) { printf("%lf\n",data[i].x); printf("%lf\n",data[i].y); } a=sqrt((data[0].x-data[1].x)*(data[0].x-data[1].x)+(data[0].y-data[1].y)*(data[0].y-data[1].y)); printf("%lf\n",a);
>>78 #include <stdio.h>
#include <math.h>
#include <string.h>
struct point
{
double x;
double y;
};
double kyori(struct point *a,struct point *b){
return sqrt((a->x-b->x)*(a->x-b->x)+(a->y-b->y)*(a->y-b->y));
}
int main()
{
struct point data[2];
int i;
double a;
for(i=0;i<2;i++)
{
scanf("%lf",&data[i].x);
scanf("%lf",&data[i].y);
}
for(i=0;i<2;i++)
{
printf("%lf\n",data[i].x);
printf("%lf\n",data[i].y);
}
a=kyori(&data[0],&data[1]);
printf("%lf\n",a);
}
あ、関数名はkyoriじゃなくてkannsuuか 修正ヨロ
82 :
デフォルトの名無しさん :2005/12/22(木) 22:22:22
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 入りきらないので次の場所に書きます。大変申し訳ありません [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: マイクロソフトビジュアルスタジオ [3.3] 言語:C++ [4] 期限: 12月26日
83 :
78 :2005/12/22(木) 22:23:08
((a->x-b->x)*(a->x-b->x)+(a->y-b->y)*(a->y-b->y))じゃなくって・・・ ((data[0].x-data[1].x)*(data[0].x-data[1].x)+(data[0].y-data[1].y)*(data[0].y-data[1].y)) を使ってってできませんかね・・・?
86 :
デフォルトの名無しさん :2005/12/22(木) 22:30:20
>>82の問題:以下のプログラムは値のペアを表すtemplateクラスと, その使用例です. このクラスには値二つが等しいかどうかを返す関数same()があります. templateの特殊化を用いて, Pair::same()が Tがcharもしくはstringのときに大文字小文字を区別しない等しさを返すように書き換えて下さい. 以下の例では, a, d, f, gのsame()がtrueを返すはずです. #include <iostream> #include <string> using namespace std; template <class T> class Pair { T fst; T snd; public: Pair(const T& f, const T& s) { fst = f; snd = s;} virtual ~Pair(){} bool same() { return fst == snd; }}; int main(){ Pair<int> a(1,1); Pair<int> b(1,2); Pair<char> c('a','b'); Pair<char> d('a','A'); Pair<string> e("abc","bcd"); Pair<string> f("abc","abc"); Pair<string> g("abc","AbC"); cout << a.same() << endl; cout << b.same() << endl; cout << c.same() << endl; cout << d.same() << endl; cout << e.same() << endl; cout << f.same() << endl; cout << g.same() << endl; return 0;}
87 :
78 :2005/12/22(木) 22:30:50
えと、それでは・・・ double kannsuu(struct point *a,struct point *b) を書き換えたいんですけど、どうすればいいですか??
>>83 じゃぁ
kannsuu関数を
double kannsuu(struct point data[]){
return sqrt((data[0].x-data[1].x)*(data[0].x-data[1].x)+(data[0].y-data[1].y)*(data[0].y-data[1].y));
}
にして
main関数の最後から三行目を
a=kannsuu(&data[0]);
これでいける
89 :
88 :2005/12/22(木) 22:37:43
うは・・リロードしてなかった・・ 次からは自分でも頑張ってクレ
>>88 a=kannsuu(data);
意味論的にはこっち。
91 :
78 :2005/12/22(木) 22:39:42
88さん、親切にどうもです! ありがとうございました!!
>>90 アッー!そですね。
ただ、自分もかなり初心者なんでいかにも配列の戦闘アドレスを渡してます的な書き方しないと
錯乱しちゃうんですよね・・・_| ̄|○
あ、localeはまずいな・・・・cctypeに直してください。
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク)
A=−2 −1 8
−1 5 4
4 8 −2
C=22 −30 x
0 7 23
−14 56 −22
ガウス・ジョルダン法を用いてAの逆行列およびAB=Cを満たす
行列Bを求めてファイルに出力する。Xは任意の数字
[3] 環境
[3.1] OS: (Windows/Linux/等々) Windows 2k
[3.2] コンパイラ名とバージョン: Borland C++ 5.5.1
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: 2005年12月23日
[5] その他の制限: ガウス・ジョルダンを用いることが条件です。
>>68 でCのところをBとしてしまいました。すみません
>>69-71 その通りです。間違えていましたorz
よろしくお願いします。
>>52 IE連動なのか?
それなら、HPのURLうちこんで、IEに入力だな
それでランチャーっていってたのか?
もう少し、詳細ない?
仕様がわかりにくいのは、レスされねえからな
もう"開く"なんだから、指定されたHPとやらのソケットを作って開きっぱなしにしてやればいいんじゃね 教官も×は付けまい
>>97 ありがとうございます。
これはまだ見ていませんでした。参考にしてみます。
問題文 データを読み込み2進、8進、10進、16進で表示せよ。 ただし、読み込みはgetchar()で4桁入力。表示はputchar()で必要桁数表示する。 データが0の時処理を終了、データ入力はXXXXとする。 環境 OS: XP コンパイラ名とバージョン: VC 6.0 言語: C 期限: 無期限 その他の制限: 正直どのように進数変換していけばいいのかわかりません。 int main(void) { int dt; while(1) { dt = getchar(); if(!(dt - '0'))break; putchar(dt); printf("整数 = %d", dt - '0'); } return 0; }
>>102 そのコードは何?教官が作ったものでそれを利用して作れってことか?
104 :
102 :2005/12/23(金) 14:18:50
>>103 getcharの戻り値整数を入力数値に一度変換して進数変換するのかなーと思って
即席で作ったコードなんですが、どの道putchar()で変換しろと指定があるので
どうしようかと路頭に迷って作りかけたコードを一応載せていたのです。
多分もっと別な方法があるとは思うんですが・・・。
とりあえず
>>102 に書いてるコードは無視しててください
>>104 これは満たしてない?
#include <stdio.h>
#include <string.h>
void to_radix_n(unsigned int x, int n) {
int digit;
if (x / n != 0) {
to_radix_n(x / n, n);
}
digit = x % n;
putchar(digit > 9 ? digit - 10 + 'A' : digit + '0');
}
unsigned int from_input(void) {
unsigned int x = 0, i;
for (i = 0; i < 4; i++) {
x *= 10;
x += getchar() - '0';
}
return x;
}
int main(void) {
unsigned int x;
printf("Enter Number:"); x = from_input(); getchar();
to_radix_n(x, 2); putchar('\n');
to_radix_n(x, 8); putchar('\n');
to_radix_n(x, 10); putchar('\n');
to_radix_n(x, 16); putchar('\n');
return 0;
}
106 :
105 :2005/12/23(金) 14:36:04
あ、ループして0のとき終了を忘れてた。そこはよろしく。
107 :
105 :2005/12/23(金) 14:42:55
<string.h>もいらないじゃん、なにやってんだ俺orz
108 :
102 :2005/12/23(金) 14:43:37
>>105 ,106
今からコード見ながら解析していきます
>>109 > getchar()
> putchar()
しらん。そんなことで文句言う講師なら。文句言ってやれ。
>>111 俺は依頼者ではないぞ。ま、どうでもいい話だが。
113 :
デフォルトの名無しさん :2005/12/23(金) 17:41:05
期限:無期限ってなんだよ
[1] 授業単元:計算機演習 [2] 問題文:自然数N、Mが与えられたとき、1からNまでの異なる数字をM個並べる順列組み合わせを全て列挙せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:26日午前11時 [5] その他の制限:N、Mは32bit符号付整数の範囲でよい 例: N=4、M=3のとき、 123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432, などと出力する。 意外と難しくて悩んでいます。よろしくお願いします。
>>114 113さんの質問(疑問?)は妥当かなと思う。
117 :
デフォルトの名無しさん :2005/12/23(金) 18:28:38
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) そういえば無期限の問題もちらほら
>>119 Nが10以上の数値も有りです。
とりあえず、
1 2 10
1 2 11
1 2 12
のように間に空白入れて、
一行につき一つの組み合わせを出力して頂いても結構です。
おお!ありがとうございます!! でもうちのPCでコンパイルするとエラーになります。すみません。 1334.c: In function `next_permutation': 1334.c:22: syntax error before `int' 1334.c:25: `i' undeclared (first use in this function) 1334.c:25: (Each undeclared identifier is reported only once 1334.c:25: for each function it appears in.)
>>122 私の環境ではコンパイルが通りましたけど。
gcc=gcc version 3.3.3 (cygwin special)
>>120 解決しました。
22-24行を書き換えたらコンパイル出来ました。
int i;
if(size == 0 || size == 1)
return 0;
i = size - 1;
重ね重ねありがとうございます。
これで安心して彼女とセックスできます。
126 :
121 :2005/12/23(金) 20:07:01
>>124 ああ、悪かった。
単なる消し忘れだから、そのi = size - 1;も要らない。
128 :
121 :2005/12/23(金) 20:15:41
>>127 いや、俺は気にしないよ('A`)
勉強にもなったし('A`)
129 :
デフォルトの名無しさん :2005/12/23(金) 21:57:55
ヒントを書くから後は適当に補完してくれ。 (1) int n; -double data[100]; +double * data = calloc(sizeof(double), 100); double total; --- } +free(data); } (2) char * myStrcpy(char * foo, const char * bar) { for (int ic = 0; bar[ic] != '\0'; ++ic) { foo[ic] = bar[ic]; } return foo; }
131 :
102 :2005/12/24(土) 01:51:49
>>114 ,116
期限が無期限なのは単位等関係なく、自主的に問題集を解いているからです。
故に授業単元などは記載していませんし、テンプレートの無期限が一番該当していると
判断したので無期限を選びました。
宿題じゃねーよ!と言われればそれまでですが、他にこういうスレがないのでここに投稿しました。
>>105-107 返事がかなり遅れましたが回答ありがとうございました。
再帰については今まで使った事がなかったので解析するのにかなり苦労しましたが
何とか処理の流れが繋がった様な気がします。
132 :
102 :2005/12/24(土) 01:52:28
>>131 自主的にやってるならここで聞かずに自力でやればいいじゃまいか
分からなきゃ他の所を先にやればいいじゃまいか
134 :
102 :2005/12/24(土) 02:00:01
>>133 いや、恥ずかしい話だけどこの問題4日ぐらい悩んだ末にここに投稿した
それに人にやってもらったのをできたからとそのままにしてるんじゃなく
自分で納得いくまでコードを解析してるから勉強になる
まあ、甘えるなボケといわれればそれまでだけど('A`)
だからわからないから速攻ここに投稿したわけじゃない
>>134 そういうことならスマンカッタ
%o変換指定子つかえばいいじゃまいかと思ったがputcharのみか
普通に手計算で10進→X進の変換するときのを実装すりゃいいんじゃね?
>102 俺も以前に3日程悩んでできなかった問題をココで出題したから気持ちわかるよ。 俺も自主的だが、一応課題という事で偽装してたんだけどね。 あと、個人的な事だけど天プレの[1]とか[2]とか付けて欲しいな。 ココの課題も自主勉強のためにやってたりするから、検索し易い。
137 :
135 :2005/12/24(土) 02:48:07
>>121 N == M のとき
next_permutation内の
if(data[i-1] < data[i]){
とか
swap(&data[i-1], &data[j]);
とかのところで領域外にアクセスor壊してますよ。
139 :
デフォルトの名無しさん :2005/12/24(土) 06:07:42
[1] 授業単元:プログラミング [2] HEADコマンドを実装せよ 構文head[-Ln][filename] 実現する機能:ファイルの先頭の複数行を画面に出力する。 引数:Ln:出力する行数nを指定する(デフォルトは10行) [3] 環境 [3.1] OS:WinXP [3.2] BCC [3.3] 言語:C [4] 期限:12/28 基本的なファイル操作のソースならかけるのですが・・・10行をデフォルトにする 方法がわかりません。ポインタをまだ理解できていないので、ファイルポインタの 使いかたもわかってない状況です・・・ 大変申し訳ないのですが、どなたか教えていただけますでしょうか・・
パラメータの取得方法は特に指示なし?
141 :
デフォルトの名無しさん :2005/12/24(土) 06:51:16
>140様 そうですね、特にその辺に関しては指示はありませんでした。
142 :
デフォルトの名無しさん :2005/12/24(土) 07:43:48
>>139 ほとんど動確とってない。不具合あれば適当に直して。
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *fp = stdin;
int i, c, line = 10;
for(i = 1; i < argc; i++) {
if(!strncmp(argv[i], "-L", 2)) {
if(sscanf(argv[i] + 2, "%d", &line) != 1) {
fprintf(stderr, "usage: head [-Ln][filrname]\n");
return -1;
}
} else if(!(fp = fopen(argv[i], "r"))) {
fprintf(stderr, "no such file, %s\n", argv[i]);
return -1;
}
}
for(i = 0; i < line && (c = fgetc(fp)) != EOF;) {
if(c == '\n') {i++;}
putchar(c);
}
fclose(fp);
return 0;
}
[1] 授業単元:計算機演習 [2] 以下の規則に従い tail コマンドを実装すること。 実現する機能:ファイルの末尾の複数行を画面に出力する。 構文 tail [-n|-f] [filename] 引数:-n 出力する行数 n を指定する。省略時は 10行とする。 引数:-f ファイルをクローズせず、入力が継続される限りプログラムを続行し、出力を続ける。 引数:filename 入力ファイル。省略時は標準入力 stdin とする。 [3] 環境 [3.1] OS:Windows (XP/2000/NT) [3.2] BCC / gcc / VC 等 [3.3] 言語:C [4] 期限:12/28 [5] 引数 -n と -f が同時に指定された場合、n行表示後出力を続行する。
OS3種類で動作差異がない様につくれと?
意味不明な課題多いな
>>143 -f指定された場合どうやってプログラム終了するんだよ
EOFに到達したら終了するのか?
filename
なに、stderrじゃなくてstdinに出力しろと?
tail -fコマンドって普通に [Ctrl]+c とかしないと終わらないけどな。
普通に>146が読解力なくて知識がないだけだと思われ。 tail -f については>147だし、stdinについても >143にちゃんと引き数としてファイルが指定されていないときは標準入力からと書いてあるわけだが。
151 :
148 :2005/12/24(土) 15:24:45
>>149 なんで? 結構めんどくさいからパスしたいんだけど。
もしあんたが>146ならふぁびょるなよ、と。
>>143 -fの仕様が意味不明
入力が全部終わらんと、何も表示できんだろ
>>153 それはUnix系OSのtailコマンドと同じ動作だと思われ。
Windowsにもあったような気もするがWindowsはよーわからん。
いい機会だからsygwin入れるか、どっかにtelnet接続してtailの動作確認してみれ UNIXコナンドが便利すぎて離れられなくなるかもよ
GNU の tail のソースもってくればいいんじゃないか。 でも課題として提出するのはライセンス的にダメかな。
157 :
デフォルトの名無しさん :2005/12/24(土) 18:32:24
1 コンピュータ基礎 2 sin(x)のマクローリン展開からの近似値を計算するプログラムを作成せよ。 sin(π/4)の値を2倍して求めること。 階乗と累乗の計算は各々関数で行うこと。 πの値(例えば3.141592)はプログラムに与える。 3.1 Windows 3.2 3.3 C 4 2005/1/5 5 入出力・変数・演算子・条件判断・計算処理・繰返し処理・配列・文字列・関数呼び出し よろよしくお願いします
158 :
デフォルトの名無しさん :2005/12/24(土) 18:35:34
C言語で0〜9の重複しない乱数が必要なのですがどのようにすればいいでしょうか? 配列に保存して処理を行おうと思ったのですが、うまくいきません(´・ω・`)
>>158 int random_select(int range)
{
int r = range * (rand() / ((double)RAND_MAX + 1));
return r == range ? range - 1: r;
}
void swap(int *p, int *q)
{
int t = *p;
*p = *q;
*q = t;
}
void random_shuffle(int *array, int size)
{
while(size > 1)
{
swap(&array[0], &array[random_select(size)]);
size--;
array++;
}
}
160 :
158 :2005/12/24(土) 18:56:09
C++ではどのようになりますか?
>>160 C++ なら STL で一行ですよ…
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
const int N = 10;
vector<int> a(N);
for (int i = 0; i < N; i++)
a[i] = i;
random_shuffle(a.begin(), a.end());
for (int i = 0; i < N; i++)
cout << a[i] << endl;
return 0;
}
>>161 再帰が好きならmy_sinも再帰にすればいいのに......
独学の僕にはこのスレは高度で刺激があり助かります。
165 :
161 :2005/12/24(土) 19:17:59
>>163 スマソ。そこまで関数型な人間じゃないんだ。
166 :
163 :2005/12/24(土) 19:42:31
>>165 俺も関数型の人じゃないから、
ヘルパ関数を用意する方法しか思いつかないけどなw
double my_sin_helper(double x,double sum,int i)
{
double next = sum + (i % 2 == 0 ? 1 : -1) * my_pow(x, i * 2 + 1) / factorial(i * 2 + 1);
if(sum==next)return sum;
else return my_sin_helper(x,next,i+1);
}
double my_sin(double x)
{
return my_sin_helper(x,0,0);
}
>>167 先生凄いですね。このソース参考にもらってもいいですよね?
てか張ってあるソース全部コピってるけど平気ですよね。間違いない。
コピペすると行番号とか消すのめんどいだろ。 "Download as file" っていうリンクをクリック
>>169 うはっwww先生なんですかこの画期的なシステムはwwww
保存できたんですか?もう興奮しちゃってどうしよう(^ω^;)
10万行とか100万行とかあるファイルなら使い物にならなさそうですね
可変長配列使っているからC99じゃないと動かない悪寒。
確かに。
176 :
初心者です。 :2005/12/25(日) 05:02:21
[1] 授業単元: 計算機実習 [2] 問題文(含コード&リンク):順列を生成するプログラムを作成せよ。ただし、実行時に大文字半角英字を1文字入力することとする。例 えば、「C」と入力したらA,B,Cの順列を表示し、「E」と入力したら、A,B,C,D,Eの順列を表示する。 (なお、グローバル変数の利用は認めない。) [3] 環境 [3.1] OS: WindowsXp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:12/27 [5] その他の制限:permutation再帰関数を用いる。 よろしくお願いします。
177 :
デフォルトの名無しさん :2005/12/25(日) 05:30:39
179 :
デフォルトの名無しさん :2005/12/25(日) 07:45:20
permutationという再帰関数を自分で作るということか
181 :
デフォルトの名無しさん :2005/12/25(日) 11:36:20
1] 授業単元: C言語 [2] 問題文(含コード&リンク): 下記templateクラスMyArrayのnumberが0のときは 長さ10の配列を意味するクラスが生成されるようにして下さい #include <iostream> using namespace std; template<class Type, unsigned int number> class MyArray { Type data[number]; void check_valid(int ind) { if (ind < 0 || ind >= (int)number){ cout << "領域外アクセス" << endl; exit(1); } } public: MyArray() { for(int i=0 ; i < (int)number ; i++) data[i] = Type() } Type& operator [] (int ind) { check_valid(ind); return data[ind]; } }; int main(){ int i; MyArray<int, 10> a; for (i=0 ; i < 10 ; i++) a[i] = i*2; for (i=0 ; i < 10 ; i++) cout << a[i] << endl; return 0; } [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: ビジュアルスタジオ [3.3] 言語: C++ [4] 期限: 12月26日 [5] その他の制限: これは型抽象でないtemplateの課題です
> [1] 授業単元: C言語 > [3.3] 言語: C++ …??? ( ゚д゚)
>>181 #include <iostream>
using namespace std;
template<class Type, unsigned int number>
class MyArray {
Type *data;
void check_valid(int ind){
if (ind < 0 || ind >= (int)number){
cout << "領域外アクセス" << endl;
exit(1);
}
}
public:
MyArray(){
data = new Type[number];
for(int i=0 ; i < (int)number ; i++) data[i] = Type();
}
~MyArray(){ delete[] data;}
Type& operator [] (int ind){ check_valid(ind); return data[ind]; }
};
int main(){
int i;
MyArray<int, 10> a;
for (i=0 ; i < 10 ; i++) a[i] = i*2;
for (i=0 ; i < 10 ; i++) cout << a[i] << endl;
return 0;
}
184 :
183 :2005/12/25(日) 11:52:01
肝心の 0のときの処理を忘れてた。 訂正。 #include <iostream> using namespace std; template<class Type, unsigned int number> class MyArray { Type *data; void check_valid(int ind){ if (ind < 0 || ind >= (int)number){ cout << "領域外アクセス" << endl; exit(1); } } public: MyArray(){ data = new Type[number == 0 ? 1 : number]; for(int i=0 ; i < (int)number ; i++) data[i] = Type(); } ~MyArray(){ delete[] data;} Type& operator [] (int ind){ check_valid(ind); return data[ind]; } };
185 :
183 :2005/12/25(日) 11:53:05
うわ、ミスってる。 × data = new Type[number == 0 ? 1 : number]; ○ data = new Type[number == 0 ? 10 : number];
>>183 クラス宣言の部分をこう書き換えるだけで良いじゃん。
なんでわざわざ動的確保?
template<class Type, unsigned int number_>
class MyArray {
enum{number = number_ ? number_ : 10};
動的確保するにしても MyArray() : data(new Type[number == 0 ? 10 : number]) でしょ
188 :
初心者です。 :2005/12/25(日) 12:39:49
>>180 ありがとうございます。とても助かりました。
宿題ではないけど今後の参考のために質問させてくだしあ 住所入れる変数ってどれくらい領域確保しとけばOKかな?
191 :
:2005/12/25(日) 13:05:06
ここでwikiの問題でのエラーとか聞いてもいいですか?
スレ違いでした。別スレがあるようなので、そちらに行きます。
>>189 std::stringやstd::wstringを使っておく。
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):ファイルからデータ(迷路空間)を読み込む処理と構造体・リストを用いた、 迷路空間を作成せよ。 読み込むデータは右図のような形式であり、 ****** 各記号は次の意味を持つものとする。 *8000* * : 壁 ****0* 0 : 通路 **000* 8 : 通路 & スタート *90*0* 9 : 通路 & ゴール ****** 迷路空間は、必ず長方形であることを前提とする。 そして、再帰を用いた迷路空間の探索プログラムも作成せよ。 最短経路と後戻りした記録付き経路のどちらを表示しても構わないが両方表示した方がポイント高し。 [3] 環境 [3.1] OS: (Windowsxp [3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0 [3.3] 言語: どちらでも可 [4] 期限: 12/28 [5] その他の制限:特になし。
****** *8000* ****0* **000* *90*0* ******
>>194 > 構造体・リストを用いた、迷路空間
これについて詳しく。
それを考える問題じゃなくて?
構造体・リストを用いて、再帰を用いた迷路空間の探索プログラムを作成せよ。 最短経路と後戻りした記録付き経路のどちらを表示しても構わないが両方表示した方がポイント高し。 という意味です。わかりづらくて申し訳ない。。
>「構造体・リストを用いた、迷路空間」を作成せよ。 という問題だから >構造体・リストを用いて、再帰を用いた迷路空間の探索プログラムを作成せよ。 と勝手に解釈を変えるのはまずいでしょ。
とりあえず、初心者の俺が適当につくるから、皆が改造してね。
>>199 いあ、迷路空間を実現するプログラムと
探索プログラムの二つ作れってことでしょう?
>>194 を読む限りではそう読み取れる
おまいら!!!!コンパイルできねーぞ(´;ω;`)
>>202 相談に乗ってやらないでもないから詳しく。
絶対怒るお・・・。あと20分考えて分からないなら妥協汁して 相談しちゃう(´;ω;`)
>>204 漏れは怒りはしない。
多分しないと思う。
しないんじゃないかな。
まちょと覚悟はしておけ。
>>205 神様!!覚悟しておきます!!出来るだけの荒を減らして
提出します。
エラーが3つ以上でたら切れる(-∀ー#)
先生!!もう限界です!!エラー一個なんですけど どうしても見つかりません!! 1個に抑えましたから平気ですよね・・・・・・( -_-) 問題→ファイル標準入力から読み込み内容を標準出力せよ。 言語→C言語 期日→ありません。 OS winMX コンパイラ→bcc32 制限→一切ありません。 include <stdio.h> include <stdlib.h> int main(void) { FILE fp; int getf,filename; printf("ファイル名の入力"); scanf("%s",&filename); if((fp=fopen("filename","r")==NULL){ printf("ファイルオープン失敗"); exit(1); } getf = fgetc(fp); if(!feof(fp))printf("%c",getf); fclose(fp); return 0; }
>>209 >OS winMX
なめとんのか。まあいいけど。
FILE fp; → FILE *fp;
>>209 釣れますか?
int getf,filename; → int getf;char filename[80];
>>209 工エエェェ(´д`)ェェエエ工工
×if((fp=fopen("filename","r")==NULL){
○if((fp=fopen(filename,"r")==NULL){
>>209 いい感じにワラタ
scanf("%s",&filename); → scanf("%s",filename);
214 :
212 :2005/12/26(月) 17:17:33
あ、括弧が不整合だった。 まぁ良いや。突っ込みどころ多すぎるし
こいつは、動くプログラムをわざと動かないように壊して うpしたな。
>>210-213 すいません・・・1個どころではありませんでした。
OS→MXは焦ってつい。すいません
int型ではなくchar型でしたか!変数名に惑わされましたorz
&演算子も配列ですから必要ないですよね。
ファイルポインタもつけてないし。すいませんでした(´;ω;`)
>include <stdio.h> >include <stdlib.h> この辺が思いっきりネタくさい。
くそ、目を放している隙に釣られ損ねた。不覚だ。
>>216 別にどっちでもいいんでね?
出力の時に気をつければ
>>217 バロスwwww
エラー1個なわけねぇwwww
みんなしてヒドイ・・・(´;ω;`) コンパイルエラーで構文エラーってのが一つだったから一個かと。 実際皆さんの指摘でもコンパイルできず、さっきやっと気づき#を 含んでなかったorz しかも完璧だと思ってたif(!feof(fp))printf("%c",getf); も 無限ループで無理で焦った。でもやっとでけた!!! ご指摘本当にありがとうございました。
>>221 表示されたエラーが1個だけでも、実はたくさんある場合もある。
コンパイラはエラーから何とか復帰して続きを見ようとするん
だけど、それでも不可能な場合があるから。
エラーメッセージが ふざけんなゴルァ だけだったりして……
224 :
デフォルトの名無しさん :2005/12/26(月) 20:28:53
#include <stdio.h> int main() { printf("Hello World!\n"); return 0; }
include <stdio.h> int main() { printf("Hello World!\n"); return 0; }
226 :
◆EFAoij/eso :2005/12/26(月) 21:58:38
明日から休みやー 久々に来ると決まってエサがないねん
エロAA自動生成プログラム作ってください
迷路のプログラム作ってたら何百行になりそうな勢い だからからヤメタwwwwwww奥フカス。
233 :
デフォルトの名無しさん :2005/12/26(月) 23:22:37
>>227 #include <stdio.h>
int main()
{
puts("(・・)\n) x (\n( Y )\n");
return 0;
}
>>231 100行以内で書けると教授は言ってました。
printf("##### ##### \n"" # # # \n"" # # # \n""##### ##### \n");
迷路って七行プログラミングスレのどっかに無かったっけ?
238 :
デフォルトの名無しさん :2005/12/27(火) 01:35:43
1] 授業単元:情報基礎 [2] 問題文:文字列string1の先頭が文字列string2なら真を返す関数begins(string1,string2)を作成しなさい。 また、この関数をテストするプログラムを作成してください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年12月31日まで] [5] その他の制限:strncmpでやってはいけないと言われました。よろしくお願いします
>>238 #include <stdio.h>
#include <string.h>
int begins(const char *string1, const char *string2) {
unsigned char uc1, uc2;
size_t n = strlen(string2);
if (n == 0) return 0;
while (n-- > 0 && *string1 == *string2) {
if (n == 0 || *string1 == '\0') return 0;
string1++; string2++;
}
uc1 = *(unsigned char *)string1;
uc2 = *(unsigned char *)string2;
return uc1 < uc2 ? -1 : uc1 > uc2;
}
int main(void) {
char s1[] = "Hello, world!", s2[] = "Hell", s3[] = "Heaven";
printf("%d\n", begins(s1, s2));
printf("%d\n", begins(s1, s3));
}
>>238 int begins(const char* string1, const char* string2)
{
for (; *string1 && *string2; ++string1, ++string2) {
if (*string1 != *string2) {
return false;
}
}
return *string2 == '\0';
}
>>239 >>240 ありがとうございました。
写して出せば終わりですがまだ期日まであるので
お手本にして自分なりに考えてみます
strncmpがダメならこれもダメなのかもしれないけど。 int begins(const char *string1, const char *string2) { return strstr(string1, string2) == string1 ; }
strncmpがダメってことは、多分strstrも使ってはいけないだろう
あ、眠りこけてる間に>243に先越された。 あと、memcmp()でもできるとかってのもあったけど流石にやめておこう。
246 :
ハル :2005/12/27(火) 10:06:33
で入力された8桁数字が1桁になるまで足すプログラムを作りたいのですがどうすればいいですか? 例)20051227→2+0+0+5+1+2+2+7=19 1+9=10→1+0=1で終了
char buf[] = "20051227"; unsigned sum = 0; for (unsigned ic = 0; ic < sizeof(buf) -1; ++ic) { sum += buf[ic] - '0'; }
if (sum >= 10) { sum = sum / 10 + sum % 10; }
>>246 マルチ死ね。
そんなクソな問題少し頭ひねっても出来ねえんだったらやめちまえ。
251 :
238 :2005/12/27(火) 12:25:59
すみません勘違いをしていました strncmpを使うのは構わないので2つの文字列を比較するbegins関数とそれをテストするプログラムを作ればよい事でした もう一度ご教授してくれないでしょうか? おねがいします
氏ね 二度と来るな
strcmp使えるなら音速で終わるじゃん。
冬休み
音速ですか?本当ですか? 本当のことを言ってください
先程、番組内で「音速」との表現がありましたが、 正しくは「アイルトン・セナ」の間違いでした 訂正してお詫び申し上げます。
>>241 ありがとう!
自分ではどうすることもできずに半ば挫折していたけれど、助かりました。
残りの提出期限までに読解してアレンジして行きたいと思います。
259 :
デフォルトの名無しさん :2005/12/27(火) 17:33:44
>>259 fpが未初期化。
fpをscanfするのに%cを使っているけどたぶん%s
そこより下はやる気が出ないので読んでいない
char *fp ; // ...(1) fprintf(stdout,"input filename\n"); scanf("%c",fp);/*ココまでは動く ...(2) */ dataFile=fopen(fp,"r"); (1) ではポインタを宣言しているけれども、ポインタの保持している値は未知だよね。 (1) は char fp[20] ; として (2) は gets(fp) ; とすればいいんじゃないかな。
262 :
259 :2005/12/27(火) 18:31:22
どうやらscanfで例外が起きているようです…
>>260 fpの初期化はchar *fp=0でいいんですよね?
>>261 配列を文字列に直す関数ってありますか?
このままだと開けない方に分岐してしまって・・・
>>262 だいぶ、配列と文字列をごっちゃにしてしまっているようだね。
fprintf (stdout, "input filename\n");
でコンソールに input filename を出力しているのだけれども、
次の scanf が問題で、これからも文字列を読み込むことができるけれどもスペースが来たときにそこで読み込みが終わってしまうから、
gets(fp) としてポインタを渡してファイル名を入力させたほうがいいね、このポインタがもんだいで、ただのポインタじゃあいけない。
配列として char fp[20] ; と確保したものと一緒に生成されたポインタ fp を渡さなくてはならない。
どちらにしろ、ポインタとしての fp は文字列配列 fp の先頭を指さなければならない。
Line:7 誤解を招く表現があります。 Line:8 間違いがあります。 Line:3 一文が長すぎます。
>>263 getsよりもscanf("%19s",fp)のほうが安全じゃね?
# 自分も手を抜くときはgets使うんですけどね
>>266 fgetsだと改行を除去するのが面倒じゃん。
と言ってもgetsをお勧めできんのは同感。
もうおまいら俺のまんこに思いをぶち込め
272 :
デフォルトの名無しさん :2005/12/27(火) 19:18:08
273 :
デフォルトの名無しさん :2005/12/27(火) 19:19:01
test
274 :
デフォルトの名無しさん :2005/12/27(火) 19:21:47
265 名前:デフォルトの名無しさん[sage] 投稿日:2005/12/27(火) 18:51:58 Line:7 誤解を招く表現があります。 Line:8 間違いがあります。 Line:3 一文が長すぎます。
275 :
デフォルトの名無しさん :2005/12/27(火) 19:51:28
チン子
途中で読む気がなくなりました
277 :
デフォルトの名無しさん ◆eJHWmx2R0g :2005/12/27(火) 22:19:36
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 実数値を入力した変数xの値を下記の表に照らして、nを求める。 ただし、xの値の小数点以下第3桁を四捨五入した値がyの値 また、xからnを求める計算をするときに、if、for、while、switch および !、?演算子を使わない。 yの値 nの値 0.00 〜 0.07 5 0.08 〜 0.11 7 0.12 〜 0.13 6 0.14 〜 0.19 0 0.20 2 0.21 〜 0.29 3 0.30 〜 0.33 1 0.34 〜 0.36 4 0.37 〜 0.41 6 0.42 8 0.43 〜 0.55 3 0.56 9 0.57 〜 0.60 8 0.61 〜 0.64 5 0.65 〜 0.72 7 0.73 〜 0.79 2 0.80 〜 0.83 0 0.84 9 0.85 〜 0.96 1 0.97 〜 1.00 9
278 :
デフォルトの名無しさん ◆eJHWmx2R0g :2005/12/27(火) 22:20:24
[3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限: 特にありません 宜しくお願いします。
>>277 えーと、テーブルを使って欲しそうな問題だったので
#include<stdio.h>
int main(){
double d;
scanf("%lf",&d);
putchar("55555555777766000000233333333311114446666683333333333333988885555777777772222222000091111111111119999"[(int)(d*100+0.5)]);
putchar('\n');
}
280 :
デフォルトの名無しさん :2005/12/27(火) 23:14:23
ワロタ
282 :
デフォルトの名無しさん :2005/12/27(火) 23:20:32
おれはすげえと思ってしまった
てか四捨五入してないし
これ何かyからn導く式あるのか?
ないだろ。 ただの度数分布表と思われ。
286 :
279 :2005/12/27(火) 23:50:50
>>283 一応、四捨五入はしてるつもり(0.5を足してintにキャスト)なんだけど何か問題あるっけ?
あと、範囲外アクセスも考えたかったけど、
if文なしじゃ関数ポインタの配列を使って
fn[expr]()とやる方法しか思いつかないので諦めた。
>>286 小数部を四捨五入してそこだけ見るのかと思ってた・・・
勘違いですた(´・ω・`)
んー。短絡演算子を使った式文? if (value < 0) error("..."); ↓ value < 0 || error("..."); 課題を見る限りテーブル使うようだけど・・・制限があほらし。
1] 授業単元:研究室のゼミ [2] 問題文:bmp画像を取り込んで、1ピクセルあたりの輝度分布を求めよ [3] 環境 [3.1] OS: WindowsXp [3.2] コンパイラ名とバージョン: V.C 6.0 [3.3] 言語:C++ [4] 期限: 可能な限り早くしろとのこと [5] その他の制限:取り込む画像は白黒の画像 急に言われて必死に勉強していますが、手がかりさえも掴めず、マジで悩んでいます。 馬鹿丸出しな質問ですいませんが、どなたか助けてください。
[1] 授業単元:Cプログラミング基礎 [2] 問題文:各個人の名前、住所、郵便番号を格納するためのファイル形式を設計し、そのファイルを読み 郵送用のラベルを作成するプログラムを作成せよ [3] 環境 [3.1] OS: WindowsXp [3.2] コンパイラ名とバージョン: LSI C-86 [3.3] 言語:C言語 [4] 期限: 今年中 [5] その他の制限:特になし
LSICなんてそんなアナクロコンパイラを使うような授業なんて止めとけ。 つーか、今時intが2バイトなんてやってらんねぇって。
>>294 ごちゃごちゃ言わないで答え書いて下さい。LSI-Cは私が好きで
使っているわけではありません。
>>293 このキャベツ頭が!!!!
で、画面上に出力するだけじゃあかんのか。
>>297 画面上に出力させるだけで良いらしいです
すいません。297じゃないんですけど、住所の場合はXXXX−XXXXって なるじゃないですか? その場合scanfだと「−」を入力した時点で終了してしまいますよね? これを入力しても終了させない方法はありますか?
すいません
>>293 へのアンカー間違いでしたorz
すいません。激しくスルーでお願いします
#include <stdio.h> #include <stdlib.h> #define NM_MAX 30 #define AD_MAX 200 #define POSTAL 7 #define ELM 100 #define FILE_NAME "" /* ファイル名をここに入力 */ struct { char Name [NM_MAX] ; char Address [AD_MAX] ; char PostCode [POSTAL] ; } DataBase [ELM] ; int main (void) { short Select ; char szBuffer [10] ; FILE *DataFile ; if ((DataFile = fopen (FILE_NAME, "rb")) == NULL) { puts ("File Open Error.") ; exit (1) ; } fread (DataBase, sizeof DataBase, 1, DataFile) ; puts ("何番目のデータを表示するか.") ; Select = atoi (gets (szBuffer)) ; printf ("[%d] 名前: %s\n" " 住所: %s\n" " 番号: %s\n", Select, DataBase[Select].Name, DataBase[Select].Address, DataBase[Select].PostCode) ; fclose (DataFile) ; return 0 ; }
303 :
デフォルトの名無しさん :2005/12/28(水) 18:03:24
>>294 intがいやならlongを使えばいいじゃない。
#define int long これでOKw
そしてprintf()/scanf()系ではまると。 #つーか、LSI-Cはsscanf()にバグあるしな。
306 :
デフォルトの名無しさん :2005/12/28(水) 18:25:08
>>305 scanf() 関係は強力ではあるがやはり邪道な香りがぷんぷんするので
やっぱあまりおすすめな関数じゃないな。
>>302 ありがとうございます。
年が越せそうです
308 :
712 :2005/12/28(水) 20:49:04
program: END expr_list END expr_list: expression PRINT expression PRINT expr_list expression: expression + term expression - term term この記法の意味するところを教えて欲しいのですが、詳しく説明したサイトは ないでしょうか? よろしくお願いします。
scanf()系は動作があやしいときがあるからな・・・ それはともかく、住所録&印刷かー・・・ #include <stdlib.h> int main(void) { system("start excel"); return 0; } たしか、ハガキに直接印刷とかもできるぞ。
>>308 おそらく、BNF記法の一種
BNF記法でググって適当に理解してくれ。
311 :
712 :2005/12/28(水) 20:57:25
分かりました。返事ありがとうございました。 消えます。(笑)
312 :
259 :2005/12/28(水) 22:17:41
>>263 文字列が内部で配列として扱われているって事であってますかね?
今のところ以下のようにしたのですが…
int main(int argc, int *argv[]){
int i,j,k,N;
int s=0;
FILE *dataFile;
char *fp[20];
double **array1,**array2,**array3,*array4;
char line[256];
fprintf(stdout,"input filename\n");
gets(fp);/*ココまでは動く*/
printf("%c",fp);
&dataFile=fopen(fp,"r");
if(dataFile==NULL){
printf("File read error\n");
return 1;/*ココまでで例外発生*/
セグメント例外は起きませんが、ファイルがあるのにdataFile==NULLに分岐してしまいます。
…どうしてでしょう?ファイルを開くのを失敗する要因ってファイルが存在しない以外に思い当たらないのですが…
なんでファイル名に、fpなんて変数名つけてんだよ!
とりあえずポインタと文字列を勉強しなおしたら?
char *fp[20]
はchar*の要素を持つ配列を宣言してる
>>261 にあるように
char fp[20]
でいい
>>312 そこに書いてある部分だけ直してみた。
int main(int argc, int *argv[]) {
int i, j, k, N;
int s = 0;
FILE *fp;
char *dataFile[20];
double **array[4];
char line[256];
puts("input filename");
fgets(dataFile, sizeof dataFile, stdin);
printf("%s", dataFile);
fp = fopen(dataFile, "r");
if (fp == NULL) {
fputs("File read error\n", stderr);
return 1;
しまったchar *のままだった_| ̄|○
>>316 fgetsだと改行を省かないと
それかscanf("%19s",dataFile)
319 :
259 :2005/12/29(木) 00:26:49
ありがとうございます。 こうしてみたんですが… int main(int argc, int *argv[]){ int i,j,k,N; int s=0; FILE *fp; char dataFile[20]; double **array1,**array2,**array3,*array4; char line[256]; puts("input filename"); fgets(dataFile, sizeof dataFile, stdin); dataFile[strlen(dataFile)-1]="\0"; printf("%s", dataFile); fp = fopen(dataFile, "r"); if (fp == NULL) { fputs("File read error\n", stderr); return 1; 実行すると以下のように出力されます input filename data.dat data.datFile read error 何が起きてるんでしょうか?
>dataFile[strlen(dataFile)-1]="\0"; '\0'
321 :
259 :2005/12/29(木) 00:57:27
ありがとうございます。ようやく正常に動きました。 その後に fgets(line,sizeof(line),fp); sscanf(line,"%d",N); とつながるのですが、このsscafでもエラーが発生し、停止します。 ビジュアルスタジオのコンパイラは詳細を表示しないのでよくわかりませんが、おそらくセグメント例外なのだと思います。 そんなに変なことをしているつもりはないのですが…
>>321 工エエェェ(´д`)ェェエエ工工
なぜこんな初歩のミスを
323 :
デフォルトの名無しさん :2005/12/29(木) 01:10:04
&
>>321 sscanfの引数Nに&がないでしょ。
あー、しかしこのソース、変数名と型が不一致、変数の型が適当だし。
しかも、本人は自分でエラーの原因をろくに考えもせず、すぐ人に聞くし
なんというか、入門書を読んで自分で最低限の勉強をしてください。
ここは貴方のプログラミング相談所じゃなくて宿題スレ。
貴方のソースのバグなんぞ聞きたくないです。
[1] 授業単元:プログラミングII [2] 問題文:マトリクス乗算関数を記述し、テストプログラムを作成せよ。関数をテストするだけでなく、実行時間も計測 出来るようにし、さらにポインタを使ってプログラムを最適化し、短縮時間を割り出しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C [4] 期限: [5] その他の制限:なし どう作ればいいのか分からずお手上げ状態です・・・
>>325 ・正方行列だけでいいのか他のもなのか
・そもそも行列のサイズは?
・ってか短縮時間なんてサイズ次第で変わるだろうが
∴課題が曖昧杉
>>325 “マトリクス”は普通の行列?成分は整数or実数or複素数orその他?
マトリクスのデータ形式は?配列?だとしたら大きさ固定?それとも
汎用的なマトリクスのデータ形式を自分で作るの?
328 :
デフォルトの名無しさん :2005/12/29(木) 01:41:00
>>321 ↓の動きが分かってから、scanf使うとよろしい。
void set1(int d)
{
d = 10;
}
void set2(int* d)
{
*d = 10;
}
void test(void)
{
int x = 5;
printf("%d",x);
set1(x);
printf("%d",x);
set2(&x);
printf("%d",x);
}
329 :
325 :2005/12/29(木) 02:35:52
>>326 >>327 指摘されて初めて細かな仕様について聞かされてないことに気付きました
出直してきますorz
330 :
デフォルトの名無しさん :2005/12/29(木) 04:09:04
333 :
a :2005/12/29(木) 10:30:26
a
334 :
デフォルトの名無しさん :2005/12/29(木) 10:38:58
内容: [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): スタックを使ってグラフの経路を全て出力するプログラムを作りなさい グラフのつながりは A->B A->C B->D B->E C->F C->G C->H D->I E->J E->K G->L H->M H->N K->O M->O となっています [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc ? [3.3] 言語: C [4] 期限:2006年12月31日まで [5] その他の制限: 出力は A-B-D-I の形にする 経路が出力される順番は問わない XからYへ辿れるという情報からYからZへ辿れるという情報を検索できれば良い スタックを使って先に来たデータを後回しで処理(AからはBへもCへも行けるが、 Cを後回しにしてBヘ行く経路を処理する等) 最近の授業ではニュートン法やガウスの消去法、ハノイの塔、逆行列の計算をやりました。 どうか動作確認をお願いします
[1] 授業単元:C言語実習 [2] 問題文:ページをフォーマットにしたがって出力するモジュールを記述してください [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:今年中 [5] その他の制限:モジュールには以下の関数が含まれるようにしろとのことです open_file(char *name) 出力ファイルをオープンする define_header(char *heading) 見出しテキストを定義する print_line(char *line) 1行をファイルに送る page(void) 改ページを行う close_file(void) 出力ファイルをクローズする
ページって何だよ。
ヘッダファイルミスったけど、許してね。
340 :
デフォルトの名無しさん :2005/12/29(木) 12:57:40
>>332 そうそう、その問題と同じやつ!
意味が伝わってなかったようなので、
問題をあげてみたんです。
341 :
デフォルトの名無しさん :2005/12/29(木) 13:04:03
342 :
デフォルトの名無しさん :2005/12/29(木) 13:13:27
URL・・・・
>>342 ・
>>1 に則って書け。
→いきなり書かれても回答する方も困る。
・大学名や担当教官(?)名を晒すな。
→大学などに迷惑が掛かる恐れがあると同時に、このスレを通報される可能性が高い。
345 :
デフォルトの名無しさん :2005/12/29(木) 15:03:23
347 :
デフォルトの名無しさん :2005/12/29(木) 15:42:19
348 :
340 :2005/12/29(木) 15:45:17
>>345 >>346 どちらとも期待通りの動作をしたが、おまえさんの言う実行エラーってどういうものよ?
>>347 無料でやる気が起きない
1000円よこせ
352 :
デフォルトの名無しさん :2005/12/29(木) 16:52:34
>>348 実行したときに同じファイルにmeirodata.txtを入れても
file read error になっちゃうんですよ
353 :
341 :2005/12/29(木) 17:04:31
error C2440: '=' : 'void *' から 'struct box *' に変換することはできません 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 って出ます。 if(!(*w = malloc(sizeof(struct box)))) { ←この部分です if(!(*w = (box *)malloc(sizeof(struct box)))) ってして実行すると上手くいきますが、 ファイルを読み込むと「問題が発生したため..」って出てしまいます。
354 :
デフォルトの名無しさん :2005/12/29(木) 17:08:43
>>352 fopenでこけてるだけじゃないか。meirodata.txtの置き場所を間違ってるだけじゃないの?
>>353 そりゃすまんかった。うちのコンパイラじゃ警告もエラーも出なかったもんで。
356 :
352 :2005/12/29(木) 17:23:35
ファイルを置く場所は大丈夫なんですが、 ファイルを読み込むと「問題が発生したため..」って出ますね。
357 :
デフォルトの名無しさん :2005/12/29(木) 17:24:42
迷路ファイルの周囲の壁は要らんな
あとこの方法で探索すると最短経路は検出出来ないな
360 :
352 :2005/12/29(木) 18:46:46
すいません。やっと分かりました。 今まで上手くいかなかったのは、 「迷路データに改行がない」ためでした。 迷惑かけてすいません。
自分で歩いた経路のせいでゴールへの道が閉ざされるケースがある というバグもあるな
363 :
345 :2005/12/29(木) 19:05:39
>>346 は僕じゃないんですが、
なぜ僕が晒す前に1362.txtがあるって分かったんですか?
364 :
デフォルトの名無しさん :2005/12/29(木) 19:06:44
そりゃお前が自演だからだろ
C++の初級者を抜け出して、中級者以上になりたいです。 そのための問題を出してください。
なんちゃってC++使いしかいないこんなスレじゃ無理
中級者は問題なんてやらんだろ。
ちなみに初級者です。 すれ違いのようなので、去ります。
369 :
デフォルトの名無しさん :2005/12/29(木) 19:15:49
[1] 授業単元: C++実習 [2] 問題文(含コード&リンク): 下記の通りです [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc/VC等 [3.3] 言語: C++ [4] 期限: 2005年12月29日20:00まで [5] その他の制限:特になし カンマ区切りでコマンドライン引数から与えられた数列を利用して 合計値を求めるプログラムを以下の仕様に基づき作成せよ。 1、起動関数 main:合計計算クラスを使い、引数の数列を合算する 2、合計計算クラス execメソッド:calcメソッドを使い数列を合計し、OutputAnswerクラスを使って結果を出力する calcメソッド:数列の合計を計算する 3、計算結果出力クラス answerメンバ:計算結果、setAnswerメソッド:計算結果をanswerにセットする displayメソッド:計算結果を画面表示する お願いします。
整数です $ ./hoge 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 55 $ こんな風になればよいとおもいます よろしくおながいします
374 :
372 :2005/12/29(木) 19:24:14
[4] 期限: 2006年1月10日まで の間違いでした。 本気で分からないんで、よろしくお願いします。
>>371 1. コマンドライン引数がスペース区切りかどうかでかなり変わってくる。
2. どのようなクラスを作るか明確でない。
3. どのようなメンバを持つか明確でない。
>>371 適当に書いてみた。1レスに詰めるために少し圧縮気味
#include<iostream>
#include<sstream>
#include<numeric>
#include<string>
class OutputAnswer{int answer;public:
void setAnswer(int answer){this->answer = answer;}
int getAnswer(){return this->answer;}
void display(){std::cout << answer << std::endl;}};
class Calc{public:
int calc(int argc,char**argv){
std::istringstream in(std::accumulate(argv+1,argv+argc,std::string()));
int sum=0,val;for(char ch;in >> val;in >> ch)sum += val;
return sum;}
void exec(int argc,char**argv){
OutputAnswer o;
o.setAnswer(calc(argc,argv));
o.display();
}};
int main(int argc,char**argv){Calc c;c.exec(argc,argv);}
学校名はいってるぞw
379 :
347 :2005/12/30(金) 03:06:18
すいません。言い忘れていました。Win形式ではなく、コマンドライン形式でお願いします。 かなり面倒な問題だと思いますが、どうかよろしくお願いします。
>>347 お前様は他人の置いた怪しげなアーカイブに入った怪しげなワードファイルを開けと申されるのか。
>>379 マインスイーパなら7行(だっけ?)プログラムスレにあった気がするから
それを改造でもしたらいいんじゃね?
ライフゲームは面白そうだからちょっとやってみるが
それと
>>380 の言う通り
テキストとかLaTeXとかでうp汁
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク):下記の通りです [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C言語 [4] 期限: 2006年1月2日まで [5] その他の制限: 特になし 乱数を利用したコンピュータとのジャンケンゲームを作成せよ。 また5回連続ジャンケンを行って、最終的な勝敗を表示せよ。 ご助力お願いします。
383 :
382 :2005/12/30(金) 11:46:42
書きミスがありました。 問題文中の「また5回連続ジャンケンを行って、最終的な勝敗を表示せよ。 」を 「また5回連続ジャンケンを行い、最終的な勝敗を表示するプログラムを作成せよ」に変えてください。 スレ汚し申し訳ありません。
なんかもうわからないんじゃなくて めんどうくせーなぁ程度でこのスレ利用されてる希ガス
>>384 食指の動かない問題はスルーで良いだろ。
別に義務じゃないし。
>>382 少し不真面目なじゃんけん
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(){
int i,t,k;
char* a[]={"グー","チョキ","パー"};
char* b[]={"あなたの負けです","引き分けです","あなたの勝ちです"};
int count[3]={0};
srand(time(NULL));
for(i=0;i<5;++i){
puts("あなたの出す手を入力してください。");
for(t=0;t<3;++t)printf("%-6s -> %d (mod 3)\n",a[t],t);
scanf("%d",&t);
++count[k = rand()%3];
printf("あいての出した手は%sです\n%s\n",a[(k+t+2)%3],b[k]);
}
printf("勝ち %d回\n負け %d回\n引き分け %d回\n",count[2],count[0],count[1]);
}
>>384 え?そういう用途でここ利用するんでしょ?
俺も学生のときはここに宿題丸投げしてから、女の子と遊んでたよ。ww
帰ってくると大体できてるんで大助かりwww
おかげで充実した学生生活をおくれました。
童貞君たちご苦労様といいたい。
>>387 こういう投稿を見ると、わざと間違えた解答を書いて、困らせて
やりたくならないか?
>>387 正直、お前は一体何様?と言いたい。
それならこっちにも考えがあ(ry
これからは、ソースではなくて、EXEで提供しよう。 え?LinuxだからEXEは困る?そんなのこちらの知ったこっちゃない。
みんな、釣り耐性低すぎw
ま、
>>387 は歪んだ性格してるとは思うけど、放置で良いじゃん。
釣られた方が楽しいんだもん。
394 :
デフォルトの名無しさん :2005/12/30(金) 20:10:15
[1] 授業単元:基礎C言語 [2] 問題文(含コード&リンク):下記参照 [3] 環境 [3.1] OS:とくになし [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 2005年12月31日まで [5] その他の制限: 特になし 1と0とその他の文字(スペース等)が繰り返し現れる文字列において、 1と0の部分のみ抽出後、先頭から8bit毎に1オクテットとしてまとめ、 ファイルに出力するプログラムを作ってください。 例: 適10当000に01010ならんで1000いても001000001必要な部分だけ0110集めます11001 -> 82 A0 82 D9 ->ファイルの中身は「あほ」になります。
>>394 ファイルへの出力は適当にリダイレクトしてくれ
#include<stdio.h>
int main(){
int n=0,c,t=0;
while((c=getchar())!=EOF)
if(c-'0'<=1u) t = t+t+c-'0',++n&7 || putchar(t);
return 0;
}
0010001101101001011011100110001101101100011101010110010001100101 0010000000111100011100110111010001100100011010010110111100101110 0110100000111110000010100000101001101001011011100111010000100000 0110110101100001011010010110111000101000011101100110111101101001 0110010000101001000010100111101100001010000010010110100101101110 0111010000100000011011100010000000111101001000000011000000101100 0010000001110100001000000011110100100000001100000010110000100000 0110001100111011000010100000100101110111011010000110100101101100 0110010100101000001010000110001100100000001111010010000001100111 0110010101110100011000110110100001100001011100100010100000101001 0010100100100000001000010011110100100000010001010100111101000110 0010100100001010000010010000100101101001011001100010100001100011 0010000000101101001000000010011100110000001001110010000000111100 0011110100100000001100010111010100101001001000000111010000100000 0011110100100000011101000010000000101011001000000111010000100000 0010101100100000011000110010000000101101001000000010011100110000 0010011100101100001000000010101100101011011011100010000000100110 0010000000110111001000000111110001111100001000000111000001110101 0111010001100011011010000110000101110010001010000111010000101001 0011101100001010000010010111001001100101011101000111010101110010 01101110001000000011000000111011000010100111110100001010
397 :
347 :2005/12/31(土) 02:07:22
>>382 #include <stdio.h>
#include <stdlib.h>
int main(){
int i;
for(i=0;i<5;i++){
printf("%sを出して下さい\n",rand()>RAND_MAX/2?"ぐー":"ぱー");
}
printf("ごめんなさい。5回すべて私の負けでした。\n");
return 0;
}
∧_∧ ∧_∧
_( ・ω・) (・ω・ )
三(⌒), ノ⊃ (
>>401 ) はいはいわろすわろす
 ̄/ /) ) | | |
. 〈_)\_) (__(___)
∧_∧ .∧_∧
( ・ω・) (・ω・ )
≡≡三 三ニ⌒)
>>401 ) はいはいわろすわろす
/ /) )  ̄.| | |
〈__)__) (__(___)
∧_∧ ,__ ∧_∧
( ・)ノ ):;:;)ω・)
/  ̄,ノ''
>>401 ) はいはいわろすわろす
C /~ / / /
/ / 〉 (__(__./
\__)\)
ヽ l //
∧_∧(⌒) ―― ★ ―――
( ) /|l // | ヽ はいはいわろすわろす
(/ ノl|ll / / | ヽ
(O ノ 彡'' / .|
/ ./ 〉
\__)_)
>>400 /* 1 */
#include <stdio.h>
int main(){
int r,h;
float S,V;
printf("input r : ");scanf("%d",&r);
printf("input h : ");scanf("%d",&h);
S=3.1416*2*r*h + 2*r*r*3.1416;
V=r*r*3.1416*h;
printf("S=%f.\n",S);
printf("V=%f.\n",V);
return 0;
}
/* 3 */
#include <stdio.h>
int main(){
int n1,n2;
printf("input n1 : ");
scanf("%d",&n1);
printf("input n2 : ");
scanf("%d",&n2);
if(n1*n2%12==0)
printf("%d*%dは12の倍数です。\n",n1,n2);
else
printf("%d*%dは12の倍数じゃないよ。\n",n1,n2);
return 0;
}
elseの前後に }と { をお忘れなく
>>400 2 と 4 の問題は今年中には書き込むからまってろ
出し惜しみはイクナイ! さらっとレスしたらいいのに…
408 :
デフォルトの名無しさん :2005/12/31(土) 15:01:37
[1] 授業単元:プログラミング [2] 問題文:HEADコマンドを実装せよ。実現する機能は、ファイルの先頭の複数行を画面に出力する。 HEADコマンド構文head[-Ln][filenname] 引数は、Ln。出力する行数を指定する [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン:BCC [3.3] 言語: C [4] 期限: 2006/1/5
409 :
デフォルトの名無しさん :2005/12/31(土) 15:03:32
長いので分割します。 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[])/*パラメーターを一個ずつ渡すようにする*/ { FILE *fopen(char *name ,char *mode); FILE *fp = stdin; int i,c,line = 10; for(i = 1;i < argc;i++) { if(!strncmp(argv[i],"-L",2)) { if(sscanf(argv[i] + 2,"%d",&line)!= 1) { fprintf(stderr,"入力フォーマット:head[-Ln][filename]\n");/*入力ミス時の表示*/ exit (1); } }else if(NULL == (fp = fopen(argv[i],"r"))) { fprintf(stderr,"ファイルが見つからなかった>%s\n",argv[i]);/*該当ファイルが見つからなかった場合の処理*/ exit (1); } }
410 :
デフォルトの名無しさん :2005/12/31(土) 15:04:28
>409のソースの続きです。 for(i = 0;i < line && (c = fgetc(fp)) != EOF;i++) { if(c == '\n') { i++; } putchar(c); } fclose(fp); fflush(stdin); getchar(); return 0; } とここまでコーディングができたんですが、実行してみるとどうも指定した分だけの文字数しか出力 されてこないんです。行数を指定した分だけ表示させるにはどうしたらよいのでしょうか?
411 :
デフォルトの名無しさん :2005/12/31(土) 15:05:43
読みにくいかと思いますがよろしく御願いします。ペコリ(o_ _)o))
激しく概出
>>410 for文でfor(...;...;i++)にしているよ。
癖でi++を書く気持ちは分からなくはないけど、そこでのインクリメントは不要
>>400 #include<stdio.h>/* 2 */
int main(void){
int total=1000,r,pb=210,pc=105,b=0,c=0;
while(pb*b<total){
while(pb*b+pc*c<total){
r=total-(pb*b+pc*c);
if(b) printf("ハンバーグ %dつ ",b);
if(c) printf("コーヒー %d杯 ",c);
if(b|c) printf("で釣り %d円\n",r);
c++;
}
c=0,b++;
}
return 0;
}
if(n1*n2%12==0) /* 3 修正*/
↓
if(((n1%12)*(n2%12))%12==0)
※n1=1000005 n2=1000004にして確かめてみよう
4 while以降を下のようにして {} の対応があっているか確認しる
for(i=0;i<5;i++){
scanf("%d",&n);
sum=sum+n;
printf("%d個のデータの合計=%d\n",i+1,sum);
}
}
417 :
デフォルトの名無しさん :2005/12/31(土) 17:10:38
[1] 授業単元:研究室 [2] 問題文:リンクリストの要素を削除する関数を記述せよ [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:BCC [3.3] 言語: C [4] 期限: 2006/1/6 ただ一言[2]だけを言い渡されました、Cはド素人で何をどうすればよいのか分かりません、どうかよろしくお願いします
>>417 リンクリストの構造体の定義は?
定義が無いなら勝手に定義して書くがそれで良いのか?
>>418 真面目に話を聞いていたつもりですが他に条件のような物は言われていなかったので
自由にしてもらって構わないと思います。
>>421 単方向で大丈夫のようです。ありがとうございました
423 :
C初心者 :2005/12/31(土) 19:48:15
424 :
C初心者 :2005/12/31(土) 19:50:46
質問取り消します すみません
やっぱ回答下さい。 よろしくお願いします。
C以前の問題のような気がしてならない void sort(int date[],char name[][20],int n) void sort(int data[],char name[][20],int n) swap(&date[i],&date[j]); swap(&data[i],&data[j]); printf("%2d:%-8s%4d\n",i,name[i],heigt[i]); printf("%2d:%-8s%4d\n",i,name[i],height[i]);
427 :
347 :2006/01/01(日) 01:05:12
>>398 350はJavaですし、351はwindows.hを用いているので、コンソールでは出来ません。
すみませんが、本当によろしくお願いします。
マインスイーパーに関しては、コンソール画面に”窓”を表示させる方法が分かれば、どうにかなると思うのですが・・・
>>427 □□□
□□□
□□□
こんなんでいいじゃん
429 :
デフォルトの名無しさん :2006/01/01(日) 04:54:51
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++ [3.3] 言語:C言語 [4] 期限:2006年1月11日15時まで [5] その他の制限: 特になし While文を用いて次のように表示するプログラムを作りなさい。 (1) ○○○○○○○○○ ○○○○○○○ ○○○○○ ○○○ ○ (2) * *** ***** ******* ********* (3) * ○○ *** ○○○○ ***** … ○○○○○○○○○○
430 :
デフォルトの名無しさん :2006/01/01(日) 05:31:19
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++ [3.3] 言語:C言語 [4] 期限:2006年1月11日15時まで [5] その他の制限: 特になし キーボードから0〜9の数字をでたらめに打つとき、 各文字の出現頻度を答えなさい。ただし、文字数は 10〜20文字に制限して良い。 例) Input 10 Numberrs(from 0〜9!) 【ユーザー入力部】(1個毎にEnter Keyを押す形で入力) 1234543210 ↓ 【プログラム表示部】 0は1個です 1は2個です 2は2個です 3は2個です 4は2個です 5は1個です 6は0個です 7は0個です 8は0個です 9は0個です
431 :
デフォルトの名無しさん :2006/01/01(日) 05:38:19
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++ [3.3] 言語:C言語 [4] 期限:2006年1月11日15時まで [5] その他の制限: 特になし (1)「2進数」⇔「10進数」変換するプログラムを作りなさい。 (2)また、「16進数」に変換できるようにプログラムを拡張しなさい。 (3)さらに、「x進数」に変換できるようにプログラムを拡張しなさい。
432 :
デフォルトの名無しさん :2006/01/01(日) 06:10:39
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++ [3.3] 言語:C言語 [4] 期限:2006年1月11日15時まで [5] その他の制限: 特になし ゲーム「1H1B」を作りなさい。 (1)システム:あらかじめ4桁の数を決める(乱数でも可) (2)ユーザー:キーボードから4桁の数を入力 (3)システム:入力された数と(1)で決めた数が場所・数ともに一致 していれば「H」、数のみ一致していれば「B」と判定する。 【例】(決めた数)1234、(入力)1546なら「1H1B」 (決めた数)1234、(入力)1844なら「2H0B] (Hit優先、3桁目の4は"B”扱い) (4)(2)・(3)の作業を当たるまで繰り返し、何回目で当てるか(4Hで終了)判定する。 ※余分な入力(%や改行など)を受け付けないように改良せよ。
433 :
デフォルトの名無しさん :2006/01/01(日) 06:16:20
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++ [3.3] 言語:C言語 [4] 期限:2006年1月11日15時まで [5] その他の制限: 特になし キーボードから入力した数(入力後Enterを押すものとする) を順次昇順に表示するプログラムを作成せよ。
434 :
デフォルトの名無しさん :2006/01/01(日) 06:27:38
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++ [3.3] 言語:C言語 [4] 期限:2006年1月11日15時まで [5] その他の制限: 特になし 電卓を作りなさい。 (1)基本入出力部分の作成:「数値」、「演算子(+,-,*,/,%)」 を分けて読込む。 (2)計算部分の作成(メインルーチン) (3)演算子の優先度を考慮する。また、カッコを使えるように 改良する。 (4)エラー処理を行う。数式以外の文字や、間違った数式に"Wrong Number!" とメッセージを出す。
>>430 #include<stdio.h>
int main(void){
int a[10]={0},i=0;
char b,c[21];
printf("Input 10 Numberrs(from 0〜9!) ");
scanf("%s",c);
while(c[i]){
b=c[i++]-'0';
if(b>=0 || b<=9) a[(int)b]++;
}
for(i=0;i<10;i++)
printf("%dは%d個です\n",i,a[i]);
return 0;
}
>>400 /* 2 */
#include <stdio.h>
int main(){
int var_h, var_c, var_m;
printf("1個210円のハンバーグを何個買うだ\n");
scanf("%d",&var_h);
printf("1杯105円のコーヒーを何杯買うだ\n");
scanf("%d",&var_c);
var_m=1000-((210*var_h)+(105*var_c));
printf("おつりは %d だ\n",var_m);
}
/* 4 */
#include <stdio.h>
int main(){
int i,n,sum=0;
printf("5個のデータを入力してください。\n");
for(i=0;i<5;i++){
scanf("%d",&n);
sum=sum+n;
printf("%d個のデータの合計=%d\n",i,sum);
}
}
1、3は
>>403 ,404
>>431 2進数の「1000」を5進数に変えたい場合
2(enter)1000(enter)5(enter)と入力する
#include<stdio.h>
#define BUF 1024
int main(void){
int a[BUF]={0},b1,b2,i,j,k=0,c;
char b[BUF],t[37]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/* 入力 */
printf("入力したい数は何進数?(2-36) ");
scanf("%d",&b1);
printf("数は?");
scanf("%s",b);
printf("何進数に変換しやすか?(2-36) ");
scanf("%d",&b2);
if(b2<2 || b2>36 || b1<2 || b1>36) return printf("ダメじゃん");
/* ヘシン */
while(b[k]){
for(i=0;b[k]!=t[i] && i<36;i++);
if(i==36 || i>b1-1) return printf("ありえねぇ");
for(j=0;j<BUF;j++)a[j]*=b1;
a[0]+=i,c=0,k++;
for(j=0;j<BUF;j++){
a[j]+=c;c=a[j]/b2;a[j]%=b2;
}
}
for(j=BUF-1;!a[j];j--);
while(~j)printf("%c",t[a[j--]]);
return 0;
}
>>433 #include<stdlib.h>
#include<stdio.h>
int compare(const void*a,const void*b){
return *(const int*)a-*(const int*)b;
}
int main(){
int array[200];
int*i=array,*j;
while(scanf("%d",i++)>0){
qsort(array,i-array,sizeof(int),compare);
for(j=array;j != i;++j)
printf("%d ",*j);
printf("\n");
}
return 0;
}
440 :
デフォルトの名無しさん :2006/01/01(日) 14:04:39
>>441 ぱっと考えて思いつくのは
template<typename T>
struct isV{enum{r = 0};};
struct isV<Vect>{enum{r = 1};};
みたいなコンパイル時関数を作って
isV<L>::r| isV<R>::r<<1
を計算する。そうすると
0 両方Vectでないとき
1 LのみがVectのとき
2 RのみがVectのとき
3 両方Vectのとき。
というふうになるから
それをヘルパ関数に渡してその値で特殊化するとか。例えば
void eval(Vect& dest) const{
helper<Exp<L,R>,isV<L>::r| isV<R>::r<<1>::eval(dest);
// helper<Exp,n> で実際の特殊化を行う
}
443 :
442 :2006/01/01(日) 19:38:00
あ、ヘルパ関数にthisを渡し忘れてたわ。 まぁ、その辺は適当に書いてなー 単に俺が言いたいのは数値で特殊化するという案だからー
趣味だったら自分で試行錯誤して書いた方がいいよ
メタ関数ですか,そうですか.
そんなに込み入った話ではないですよ.
107行目以降の3つのケースなんだが,単なる文法間違いかなんかだと思うんだよね.
このやり方でごく普通に(?)特殊化する方法無いかな,と思ってさ.
これ以上聞いたら叩かれそうなので,さんくす.
テンプレートメタプログラミングはまだよく分からんので,
>>442 も今後勉強の参考にすると思う.
ありがd.
.だの,だの 日本人なら句読点ぐらいちゃんと打ってくれ
>>446 横からだが、レポートとかだと、/。の代わりに,/.を使うことが多々ある
とゆうか、/。じゃ見栄えが悪いんだよな
まぁ完全な蛇足だが
>>429 #include <stdio.h>は全て共通。行数の問題があるからレイアウトは自分で修正せよ。
/* (1) */ int main(void) {
int i = 9, j;
while (i > 0) {
for (j = 0; j < i; j++) printf("○");
printf("\n");
i -= 2;
}
return 0;
}
/* (2) */ int main(void) {
int n = 5, i = 0, j;
while (i < n) {
j = n - i - 1; while (j--) printf(" ");
j = 2 * i++ + 1; while (j--) printf("*");
printf("\n");
}
return 0;
}
/* (3) */ int main(void) {
int n = 10 / 2, i = 0, j;
while (i < n) {
j = 2 * i + 1; while (j--) printf("*");
printf("\n");
j = 2 * ++i; while (j--) printf("○");
printf("\n");
}
return 0;
}
皆さん元日から精が出ますなぁ
間違った。
452 :
デフォルトの名無しさん :2006/01/01(日) 21:32:56
日本語もちゃんと記述できないようじゃさっさと死ねばいいと思うよ
年の初めの運試し。
454 :
347 :2006/01/01(日) 23:06:36
>>440 ありがとうございます!
なんか、かなりハイレベルな出来になっていますが、参考にさせていただきます。
455 :
441 :2006/01/01(日) 23:08:48
Modern C++ Designの7ページに以下のような記述があった。
パラメータを1つ指定しただけのクラス・テンプレートにおけるメンバ関数は特殊化できますが、
テンプレート・パラメータを複数指定したテンプレートにおけるメンバ関数群を特殊化することはできません。
> このやり方でごく普通に(?)特殊化する方法無いかな,と思ってさ.
その方法が無いみたいですね。
だから
>>442 はメタ関数使ってやってたのかなぁ。
ということで解決です。
ども、すんません。
test
test2
462 :
461 :2006/01/02(月) 13:46:07
これなに? /* PROGRAM 9 1月18日 S50048TE.c */
int move(int n, char S)内の table(n); のあとに並んでいるかのチェック用の関数入れたら? その中で並んでいた場合にメッセージをだす。
>のあとに並んでいるかのチェック用の関数入れたら? のあとに、並んでいるかのチェック用の関数入れたら?
返答早っ…
なるほど、そこに関数放り込むのが一番適切ですか…
有難う御座います。早速組んでみますね。
指定期限までは覗きに来るので他にもヒントあったら宜しくお願いします〜。
>>463 只のプログラムの課題番号と宿題の提出期限ですので気にしないで下さい…orz
S50048TE.c これは課題番号というより学籍番号っぽくね?
5年の48個目の課題だろ週一で出てればそんなもの。一年中課題かよっ!!!
ふつう2005年入学の48番だろ?
TEは情報工学系のアレだしな
471 :
456 :2006/01/02(月) 16:15:02
>>459 スイマセン…それ違います。
参考にという意味かもしれませんが
Cだからよく意味が分からない…。
472 :
デフォルトの名無しさん :2006/01/02(月) 16:38:20
だれか432わかるかたいますか?
なんでCがわからないのにC++やってるんだよ
476 :
デフォルトの名無しさん :2006/01/02(月) 20:25:14
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:Knoppix [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月10日12時まで ローマ字かな変換ソフトを作りなさい。 (1)”a,i,u,e,o”を"あ,い,う,え,お","ka,ki,ku,ke,ko"を"かきくけこ","kya,kyu,kyo"を"きゃ,きゅ,きょ"にする。 ただし、"sakur"と入力したときは、"sakurはかなに変換できません。"と表示する。 (2)母音と子音の区別のために int bo_si[26]; とし、アルファベット1文字のローマ字のために、char table1[26][3]; を、 アルファベット2文字でローマ字に対応するために、 char table2[26][26][3]; を、1番目の添数には(k,s,t,n,h,m,y,r,w,g,d,b,p)に2番目の添数には(a,i,u,e,o)に対応する。 アルファベット3文字でローマ字に対応するために、 char table3[26][26][5]; を用意する。 (3)文字が子音かどうか判別する関数を int isShiin(char c); とし、テーブルを初期化する関数を void initialize(); とし、 アルファベットを母音に変換する関数を char *get_kana1(char b); とし、2文字のアルファベットを子音に変換する関数をchar *get_kana2(char s,char b); とし、 3文字のアルファベットを子音に変換する関数を char *get_kana3(char s1,char s2,char b); とする。 メイン関数は状態推移を実現して、ローマ字をかなに変換する処理を行う。 (4) tramslate.c をメイン関数を持つファイルに、kana.c をグローバル変数の宣言とすべての関数を、kana.h で、関数のプロトタイプ宣言を行う。
>>476 char table2[26][26][3]; だあ? いくつあると思ってんだよっ
そんなまんどくせえ課題を出しやがる教員を毒殺するという相談なら乗ってやらんでもない。青酸塩なら何種類か持ってるし ▲_ミ゚∇ ゚ "ミ
――ああそうだ。「日本語文字コードが指定されてないので解けません」と書いて出せ。
>>476 そんな糞課題出したやつなんて殺してしまえ
480 :
デフォルトの名無しさん :2006/01/02(月) 21:15:14
日本語コードは、アルファベットが1文字と2文字のときが int hyo1_code[26]={ a,b, c, d, e,f, g, h,i,j, k,l,m,n,o,p, q, r,s,t,u,v, w,x, y,z 0,14,-1,13,3,17,11,5,1,16,1,8,6,4,4,15,-1,8,2,3,2,-1,9,-1,7,12} で、アルファベットが3文字の時が、 int hyo2_code[26]={ a,b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z -1,32,33,30,-1,-1,28,25,-1,-1,18,-1,26,24,-1,33,-1,27,19,21,-1,-1,-1,-1,-1,29} です。めんどうですが、お願いします。
483 :
デフォルトの名無しさん :2006/01/02(月) 22:08:00
484 :
デフォルトの名無しさん :2006/01/02(月) 22:20:32
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):1から100万までの間に双子素数(pが素数のとき、p+2も素数となるもの)は何組あるか。求めよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月5日18時 [5] その他の制限:なし
485 :
デフォルトの名無しさん :2006/01/02(月) 22:28:27
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):角谷(かくたに)予想を1から1000まで確認せよ。すなわち2以上の整数nについて、 (a)偶数ならば2で割る。 (b)奇数ならば3倍して1を加える。 を実行すると、いつか1になるというものである。その中で最大のステップ数を必要とするnとステップ数も出力せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月5日18時 [5] その他の制限:なし
>485
#include<stdio.h>
#define MAXN 1000
int kakmap[MAXN+1];
int kak( int n ) {
if( n <= 1 ) return 0;
if( n <= MAXN && kakmap[n] > 0 ) return kakmap[n];
if( n&1 ) return 1+kak( n*3+1);
return 1+kak(n
>>1 );
}
int main( void ) {
int i;
int maxsteps = 0, maxindex = 0;
for( i = 0; i <= MAXN; ++i ) kakmap[i] = 0;
for( i = 1; i <= MAXN; ++i ) kakmap[i] = kak( i );
for( i = 1; i <= MAXN; ++i ){
if( kakmap[i] > maxsteps ) {
maxsteps = kakmap[i];
maxindex = i;
}
}
printf( "Max steps between 1 and %i is %i at %i", MAXN, maxsteps, maxindex );
}
488 :
デフォルトの名無しさん :2006/01/02(月) 23:18:26
>>485 #include <stdio.h>
int main(void){
int step, n, i;
int maxstep = 0, maxn = 0;
for(i = 1; i <= 1000; i++){
step = 0;
n = i;
for(;;){
if(n == 1){
break;
}else if((n % 2) == 0){
n = n / 2;
}else{
n = (n * 3) + 1;
}
step++;
}
if(maxstep < step){
maxstep = step;
maxn = i;
}
}
printf("最大ステップ数:%d, その場合のn:%d\n", maxstep, maxn);
return 0;
}
489 :
デフォルトの名無しさん :2006/01/02(月) 23:46:13
態度がでかいな 気に入らん
OSをリナ糞と書かないあたりが厨くさくてうざい 最近迷路問題が多すぎる 同じヤツが口調変えてやってるんじゃないか
492 :
489 :2006/01/02(月) 23:59:32
口ばかりで回答能力のない雑魚は引っ込んでろ。
その雑魚の群れに教えを請うとは可愛いやつめ。
494 :
489 :2006/01/03(火) 00:18:31
||
||
!|_
〃ヽ:::ヽ
レ`゙ヽ:;;ノ 絶望した!
/井i #i^
>>493 の発言に絶望した!
/ i | キ!
/ |ニ!井 |
ノ ノ´! ___!
ヽlii::ii└! r'"!
lii::ii::ィ'rノ、_|
!ii::ii::`´ii::|
,!ii::ii:::ii:::ii::l
!:ii::ii:::ii:::ii::i|
.l::ii::ii::::ii:::ii:::l
l_;;;ii;;--r、;;;ii|
`ーFl-‐|_,l-'"
(ヽ! (-、゙!
ヽiノ `、y'
>>492 回答できるかもしれないがお前の態度が気に入らない
,.、,、,..,、、.,、,、、..,_ /i ;'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i '、;: ...: ,:. :.、.∩.. .:: _;.;;.∩‐'゙  ̄  ̄ `"゙' ''`゙ //゙`´´ | | //Λ_Λ | | | |( ´Д`)// <うるせぇ、エビフライぶつけんぞ \ | | / / / __ | | __ \  ̄ ̄ ̄ ̄ ̄ \ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
497 :
デフォルトの名無しさん :2006/01/03(火) 03:24:18
>>489 push/popを使うんなら、キューじゃなくてスタックじゃないのか?
[1] 授業単元:情報処理
[2] 問題文:a[first〜last]をマージソートで整列させる。
[3] 環境
[3.1] OS:WindousXp
[3.2] コンパイラ名とバージョン:MVS2003
[3.3] 言語: C
[4] 期限: 2006/1/9
http://syobon.com/mini/src/mini13396.zip.html このマージソートはあっているのでしょうか。 計算量がO(n*log n)に
ならないと思うのです。時間がかかりすぎな気がします。
どうかよろしくお願いします。
499 :
489 :2006/01/03(火) 08:16:36
書き方が悪かったせいで、不愉快にしてすみません。ごめんなさい。
>>497 この問題はキューでもスタックでもどちらでもいいと聞いています。
キューのほうが分かりやすいといわれたので、お願いしました。
私にはこの問題と解くだけの力はありません。
お願いします。教えてください。
500 :
デフォルトの名無しさん :2006/01/03(火) 08:31:38
なんというか、アルゴリズムがそのまま書かれているので そのとおりに実装するだけの話しでは 再帰で瞬殺かと
配列を使ったマージソートは、コピーの時間が余計に掛かるからねえ・・・・ リストなら素直な結果が出るんだが。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):乱数を使ったおみくじプログラムを作成せよ。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C言語 [4] 期限:2006年1月4日18時 [5] その他の制限:なし
503 :
489 :2006/01/03(火) 10:33:59
>>500 アルゴリズムがあっても、ここからプログラムにすることが
どうしてもできないんです。再帰は苦手で・・・。
非常に申し訳ないんですが、誰か教えてください。
504 :
489 :2006/01/03(火) 11:03:09
なんだよここの奴らは。 大口叩いておいて結局できねーのかよ。 もういいよ。知り合いの博士に頼んでみるから。
> アルファベット2文字でローマ字に対応するために、 char table2[26][26][3]; > アルファベット3文字でローマ字に対応するために、 char table3[26][26][5]; table3 は [26][26][26][5] ではないのか?
507 :
489 :2006/01/03(火) 11:31:06
>>506 ありがとうございます。これで、進級ができそうです。後は自分でやってみます。
本当にありがとうございます。
508 :
476 :2006/01/03(火) 11:34:41
>>505 table3は[26][26][26][5]のまちがいでした。
面倒な問題ですが、よろしくお願いします
509 :
489 :2006/01/03(火) 12:25:00
>>506 壁は "*" で、通路は " " で、道は "+"で表示するように修正お願いします。
迷惑をおかけしますがお願いします。
511 :
489 :2006/01/03(火) 13:05:22
>>510 書き方が悪く誤解させてしまいました。ごめんなさい。
1は "*" で、0は " " で表示させてから、スタート(2)からゴール(3)までの
道を探し、結果を"+"で表示する。
111111111111
130010000001
101010101001 1が壁で、0が通路
100010001011
101111101001
100010001001
101010101001
100010001101
110110111001
100010001001
101000101021
111111111111
よろしくおねがいします。
513 :
モンモン :2006/01/03(火) 13:32:24
[1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等
514 :
モンモン :2006/01/03(火) 13:37:16
まりがえますた須磨祖↑ [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): ax^2+bx+c=0をとくプログラミングを作れ a=0とa=0でない場合に分ける a=b=0ならば解なしと表示 a=0でない場合は判別式を用いて実数解 虚数解 二重解にわけて解の公式を用いて解を表示する [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (不明) [3.3] 言語: (C) [4] 期限: ([2006年m1月9日 [5] その他の制限: ない
> int hyo1_code[26]={ > a,b, c, d, e,f, g, h,i,j, k,l,m,n,o,p, q, r,s,t,u,v, w,x, y,z > 0,14,-1,13,3,17,11,5,1,16,1,8,6,4,4,15,-1,8,2,3,2,-1,9,-1,7,12} > int hyo2_code[26]={ > a,b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z > -1,32,33,30,-1,-1,28,25,-1,-1,18,-1,26,24,-1,33,-1,27,19,21,-1,-1,-1,-1,-1,29} なんか間違ってね? ,が足りないのかとおもたら要素が配列の宣言より多いし...
> 文字が子音かどうか判別する関数を int isShiin(char c); 戻り値は ・子音 ・母音 ・不明 なのかしら?
>517 なかなか良い罠だ。
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 18の倍数で300以下の最大の整数を求めるプログラムを作成せよ [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン:ボーランドC++ Compiler [3.3] 言語:C++ [4] 期限:あさってまで [5] その他の制限:最初は問題文に書いてありました。この先お願いします #include <stdio.h> void main(void) { int i;
>519 続き部分だけ。 printf( "%d", 300/18*18 ); }
寧ろ300-300%18
522 :
デフォルトの名無しさん :2006/01/03(火) 15:19:28
>>519 iを使わないとセンセがへそ曲げそうだから。
#include <stdio.h>
main( void )
{
int i;
for( i=300;i>0;i--)
if( i%18 ==0 ){
printf( "%d\n", i );
return;
}
printf( "Not exist such number!\n" );
}
なんかfor(i=300; i>0; i--)って総当りっぽくて美しくないよ
>522 ちょっとまて。最大の*整数*をもとめろ、だから勝手に負数を除外してはまずいのではないか?
525 :
デフォルトの名無しさん :2006/01/03(火) 15:27:45
素人っぽいほうがセンセには好印象だろ 本職になろうってんなら自分で考えればいい
#include <stdio.h> main( void ) { int i; i=300-300%18; printf( "%d", i ); return 0; }
御機嫌取る為にコードを書いてるならやめてしまえ
528 :
デフォルトの名無しさん :2006/01/03(火) 15:50:57
>>527 センセー!俺が間違ってましたー!!
ってふうに、相手が望んでる答えを書いとけばいい。
グラマーなんてどうせ負け組みだから… orz
529 :
502 :2006/01/03(火) 16:44:27
>>ALL 皆様ご協力よろしくお願いします 自分の力の無さが不甲斐ないです orz
>>529 2通り
int main()
{
int user;
printf("数値を入力してください--");
scanf("%d",&user);
if(rand()==user)
printf("大吉です\n");
else
printf("大凶です\n");
getch();
return 0;
}
>>530 はいはい、VIPに帰りましょうね
#include<stdio.h> int main() { while(!puts("何でプログラマーになろうなんて思ったんだろう……")){} return 0; }
533 :
デフォルトの名無しさん :2006/01/03(火) 18:01:50
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
Web ページの探索アルゴリズム
1.文字列操作を使ったURLの比較アルゴリズムの作成
2.HTML文書からハイパーリンクを抽出するアルゴリズムの作成
3.Webページの構成を解析するアルゴリズムの作成
という問題です。
詳しくは
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1401.txt [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C言語
[4] 期限: 1月10日まででお願いします。
大学での課題なのですが、自力では無理なので誰か教えてください。
というより、大学2年生でこんな問題解ける人がどのくらいいるんでしょうか?
私が馬鹿なだけかもしれませんが・・・。
C++の練習問題をください プリーズ
>>534 boostを使わずに、正規表現を解析できるライブラリを作れ。
>>535 ありがとうございます。
さっぱり分かりません。
出なおしてきます。
>>533 それ、
私利私欲で掲示板の画像ファイルを掻き集めたいんじゃないの?
>>533 方針だけ。
1→URLを正規化する。
./はスキップ。../はディレクトリを一つ削る。ディレクトリを削り過ぎないように注意。
2,3→字句解析。下向き再帰型構文解析ならそんなにむづかしくなかろう。再帰ないし。
>>537 そんなん、ツール使えばいいでないの。
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):下記参照 [3] 環境 [3.1] OS:(Windowsxp) [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C/C++ [4] 期限: 2006年1月9日まで [5] その他の制限: 特になし 0と1を使用した32桁の文字列を入力 0が1つの場合1と置く 0が2つ連続すると2と置く 0が3つ連続すると3と置く 0が4連続=4 0が5連続=5 0が6連続=6 0が7連続=7 0が8連続=8 0が9連続=9 1が1連続=a 1が2連続=b 1が3連続=c 1が4連続=d 1が5連続=e 1が6連続=f 1が7連続=g 1が8連続=h 1が9連続=i 上のように変換した文字列を表示する (0や1が10個以上連続した場合下の例のように置き換える {例}1が12個連続→1が9連続のiと1が3連続のcに置き換える ) 最後に最初に入力した0と1を使用した32桁の文字列を表示 全体的の例 11111001100000000000000111111110 e2b95h1 11111001100000000000000111111110 自分の力ではまったくもって無理なのでよろしくお願いします。
541 :
533 :2006/01/03(火) 21:34:25
>>539 私の力では、アルゴリズムや方針が分かってもそこからプログラムを完成させることはできません。
非常に自分勝手ですが、誰か作ってください。
>>537 あと、進級のためにというのは私欲といえますが、それ以外に使うつもりまありません。
>>540 おもしろそう。
だけど今は頭が揺れるぐらい酔ってるしムリポ
alp="abcdefghi"; i=0;j=0; gets(str); first=ONE; if(str[0]=="0") first=ZERO; while(1){ while(str[i]=="1") cnt[j]++; j++; while(str[i]=="0") cnt[j]++; j++; if(str[i]!="0" && str[i]!="1") break; } こんな感じか。前半だけだが。
>541 ・・・いや・・・まあ・・・出来ないことはないと思うが・・・。 期日まで時間があるし、だれかが作ってくれるまで待つべし。 >540 概要だけど。 while (注目している文字が0か1の間つづける) { for (count = 1; 注目している文字から右にcount個目の文字が注目している文字と同一の間ループ; count++) ; while (count > 0) { if (count < 10) 対応する文字を出力; else { 9個の時の文字を出力; count -= 9; } } 注目している文字を進める } 出力の末尾の処理 } いや、プログラム作るのメンドイので。
>>542 期限内ならいつでもいいのでよろしくお願いします!
*++*pとかって・・・ビックリ
あーそっかそっか。fgets()、\nは切り捨てるのか。
>>546
>>546 すみません。コンパイルしてもエラーが出たのですが・・・
>>549 C++としてコンパイル(g++ 546.cpp)してる?
もしそうなら、エラーメッセージを書いてくれ。
>>550 すみません。Cでコンパイルしていました。
きちんとできました!どうもありがとうございます!
552 :
347 :2006/01/03(火) 23:48:18
マインスイーパーを自分で考えながらやっているのですが、 爆弾の配置を以下の方法でやろうと思っているのですが、どうやれば良いのかわかりません。 ・int型のポインタ*arrを宣言 ・nを入力し、mallocでn*n分のメモリを確保 ・配列の要素をすべて0で初期化 ・ランダムな場所にn個だけ1を代入する たとえば、n=5だったら、 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 と初期化し、ランダムに 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 こんな感じにしたいのですが、ランダムな場所に1を代入するところが出来ません。 その前のコードはこんな感じです。 int i,n; int *arr; n=5; arr=(int *)malloc(sizeof(int)*n*n); for(i=0;i<n*n;i++){ *(arr+i)=0; } よろしくお願いします。
[1]授業単元 : プログラミング演習 [2]問題文 以下の解答欄@Aをを埋めて実行中のプロセスから3個のプロセスを新たに生成し4つそれぞれのプロセスが1から4の数字の中から一文字だけかつ重複なく選んだものを出力するプログラムを作成せよ。 #include<stdio.h> int main() { int i; for(i=1;i<4;i++) if(@) break; } printf("%d",A); return 0; } [3.1]OS : Linux [3.2]コンパイラ名とバージョン : gcc [3.3]言語 : C [4]期限 : 1月4日10時 よろしくお願いします
519です!ありがとうございました!
>>552 1案
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i, n = 5, pos;
int *arr = (int *)malloc(sizeof(int) * n * n);
for(i = 0; i < n * n; i++) arr[i] = 0;
srand((unsigned int)time(NULL));
for(i = 0; i < n; )
if (arr[pos = (int)((n * n + 1) * rand() / (RAND_MAX + 1.0))] == 0) {
arr[pos] = 1;
i++;
}
for (i = 0; i < n * n; i++) {
printf("%1d", arr[i]);
if (i % n == n - 1) printf("\n");
}
}
input(int n, int k, int* arr){ while(k){ if(!*(arr+rand()%(n*n)){ *arr=1; input(n,--k,arr); } else input(n,k,arr); } } int main{ input(n,n,arr); } 再帰使ってみた...あってるかはわからん
557 :
347 :2006/01/04(水) 01:00:38
>>555 ありがとうございます。
ちゃんと出来ました。
int i=rand()%(n*n); *(arr+i)?input(n,k,arr):input(n,--k,arr); whileの中身これに交換して
正直、再帰をポンポン使える人尊敬する 俺は木構造やマージソート、クイックソートみたいな 型が決まってる様な奴じゃないと使えない
しかしマインスイーパーの爆弾配置の初期化においては MTがいいと思うが
562 :
デフォルトの名無しさん :2006/01/04(水) 09:06:08
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):tailコマンドを実装せよ 【機能】ファイルの最後の複数行を画面に出力する 【引数】Ln:出力する行数nを指定する(デフォルト値は10行) 【コマンドの構文】tail [-Ln][filename] [3] 環境 [3.1] OS:winXP [3.2] BCC [3.3] 言語: C言語 [4] 期限: 2006/01/05 [5] その他の制限:特になし どうかよろしく御願いしますペコリ(o_ _)o))
>>559 そういわれましても問題文をそのまま書いたのですが
おそらくfork()を使って4つのプロセスを作り、1から4の数字を割り振れということだと思います
↓AT限定
↑限定解除に落ちたヘタレ
→免許持ってるが教習所以来なので恐くてMT乗れないヘタレ
→免許取得後の初運転で坂道発進10連コンボかまして母と運転交代した俺
572 :
571 :2006/01/04(水) 12:47:54
坂道発進と10連コンボの間に「エンスト」を脳内補完しといてくれ
573 :
570 :2006/01/04(水) 13:13:22
俺も友人の車で同じようなことやった。 それ以来かなり苦手意識。 スレ違いここまで。 以下なにごともなかったかのように再開
友人に見られるのが悲しいな 俺も同じ経験が 記憶から抹消してー
冬休み中の宿題をお願いします。
[1] プログラミング中級
[2] csvファイルを読み込んで何らかの処理をするアプリケーションを作成する。
プロジェクトのフォルダおよびcsvファイルを提出のこと。(コンパイル及び)実行を講師がおこない、評価する。
提出日:1月17日もしくは1月24日の授業時。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名:授業では"visual studio"を使っていますが
自宅では以下のURLを参考にしてBorland C++ Compiler 5.5を使っています。
http://ja2yka.homeip.net/aki/freedev.htm [3.3] 言語: C++
[4] 期限 1月17日もしくは1月24日の授業時。
[5] その他の制限: 授業では教科書に沿ってif文,for文,ポインタ,配列,クラスなどを習いました。
宿題では授業で習った物をできるだけ使った方が良いようです。
教科書は"優しいC++(高橋麻奈,soft bank publishing"を使用しています。
色々頑張ってみましたが、経験が浅いのと論理的に考えられないので全然ダメでした。
依頼文も意味間違って書いているかも知れませんが、どうぞよろしくお願いしますorz
csv・・・・正規表現が使えないと面倒だなぁ
正規表現って何ですか?何か説明が足りませんでしたか?
C++か Cだったら暇だからアンケート集計&統計ソフトでも作っちゃるんだけど
>>578 実は授業用に間違ってCの本買っちゃったんですけど、
ちょっと違いますよね。授業はC++です。C++ですいません。
何らかの処理ってどの程度の処理すればいいん? 0,2,3,1,5,2,6,4,1,2,3,1,5,3,5,2,……みたいな数字の羅列読み込んで 平均出すだけとか(ry
あーすまん、「プログラミング作法」だった。 CSVも、入力を限定してしまえば楽だなぁ・・・。 んー・・・1フィールドしかないCSVで、出現数をカウントとか。
しかし、いきなりCから勉強するのか んな事やってもクラスのありがたみがさっぱり分からん気がする
>>580 ,582 書き込み後URL見てみます。
>>581 どの学部の学生も参加できる授業なので、
そこまで高等な処理は必要ないと思います。
>>583 すいません。Cの本は間違って買ったんです。
最初++の部分は飾りかなんかだと思ってたんです。
確かにクラスのありがたみとか全然分かりません。
585 :
583 :2006/01/04(水) 14:24:58
>>584 すまん、CじゃなくてC++だった
トイレの落書きだからスルーでおk
ちなみに、
>>581 や
>>582 が言ってるのは
課題から思いつく物中では簡単な部類だから、
これで駄目ならもっと難しいのしかないよ
>>580 コピペして実行してみました。まだ意味は分かっていませんorz
>>583 本当簡単なので良いとおもいます。難しいの出すと却って変かも知れません。
csv.とエクセルの違いも分からないので…
>>582 フィールドが多数になると、フィールド間の処理が面倒なので、
1つのフィールドにデータを入力して、そこから、
決まった数字とかを出してくる。という解釈で良いのでしょうか?
フィールドって意味も分からないので…
csvはコンマ区切りのファイルの事 2521,612,345,12463,23451,1234325 2944,342,3215,135213,12341,63326 8091,12636,134364,12341,6463,1234 134143,36346,123412,45674,789879, ↑これをテキストファイルにコピペして拡張子.csvにしてクリックすれば どんなもんか分かると思う
>>588 即やりました。
","が消えて、区切られていた部分が
各々のセルに収まりました。
1] 授業単元:コンピュータ基礎 [2] 問題文:問題1 文字列の結合 文字列str1,str2それぞれに文字列を入力し、str1←str1&' '&str2の 操作をして、str1の内容を表示させる。 実行例 str1? 2 str2? chan 2 chan 問題2 文字列内の指定文字カウント 文字列strの中に、文字cが含まれている個数(含まれていなければ0とする) を返す関数 int str_chnum(const char str[], int c) を作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 5日の12時まで [5] その他の制限: 動作確認のためのmain関数を作成する。 問題1、問題2をそれぞれ別のプログラムとして作成する。
char *my_join(char *buf, char *str1, char *str2) { /* sprintf()は宿題っぽくないので使わない */ char *p = buf; while (*p++ = *str1++) ; p[-1] = ' '; while (*p++ = *str2++) ; return buf; } int str_chnum(const char str[], int c) { int count = 0; for (; *str; str++) if (*str == c) count++; return count; }
>>◆rp8BbJeZ0I どのレベルの物が欲しいのか分からんので、最近の課題とか例題をup。
ただ、貼って良かったのか悪かったのか…
>>590 (1)
int main()
{
static const int STRING_LENGTH = 200;
printf("str1?");
char str1[STRING_LENGTH];
fgets(str1, sizeof(str1), stdin);
printf("str2?");
char str2[STRING_LENGTH];
fgets(str2, sizeof(str2), stdin);
sprintf(str1, "%s %s", str1, str2);
printf("%s\n", str1);
return 0;
}
>>594 そのサイトを見る限り、もう偏差値計算までやってるんでしょ?
そのプログラムを利用して、成績順にソートするとかでどう?
#つーか、それくらい自分で考えつかなきゃダメだがや。
なんで中途半端な学校はcygwin+gccばかりなのだろうか
>>596 すいません○| ̄|_
あんまり身になってなかったみたいです。
まず丁度いいcsvファイルを見つけることからだ
csvファイル使ったことないんでテンパったんです。 あと、正月だって事もあってか全然進まないのと。
csvは作ればいいじゃん まずは作りたいプログラムの概要決めて、次にそれに応じたフィールドとかを決めてcsv作成 そしてプログラム作成
>>598 うーん、「どんなプログラムを作るか」は知識や知能の問題だけじゃ解決しないよなぁ。
想像力と創造力が必要なんでないかい?
・csvファイルを使った簡単な成績表を授業で作った
→成績表なら、点数順に並べ替えてみよう ・ グラフにしよう ・ その他
→→「並べ替え」でこのスレやWebを検索してみよう ・ 「グラフ」で(以下ry ・ その他
→→→例があるな、使えるかな? ・ 実際のグラフは難しそうだから文字でできないかな? ・ その他
>>603 分かりました。やりたい事決めて、検索してみます。
矢っ張り"成績順に並べる"が良さそうですね。
"csvファイルを使った簡単な成績表を授業で作った"
→csvファイル使った覚えがないです。
txtファイルの入出力はしたんですけど
>>602 まずは作りたいプログラムの概要決めて、
次にそれに応じたフィールドとかを決めてcsv作成 そしてプログラム作成
先ほど教えて頂いて1つcsvファイルは作れたんですが、
フィールドとは何なのかよく分からないです。
>>604 サイトを見ると、成績表作ってるじゃん。授業でやってないの?
あー、csvファイルって拡張子こそ換えているけど中は只のテキストファイルだから
拡張子がtxtのファイルと取り扱いは同じって認識できてなかったりする?
それと、「フィールド」はこの場合、Excelで言う"Column"のことね。
もうだめぽ
>>605 最後の方、授業計画が遅れてグダグダになっていたので、あまり分かりません。
成績表っていうのはURLの表をtxtにコピペした物です。
っていうか扱いtxtファイルと同じなんですか!?
txtファイルと同じやり方でifstreamしても毎回失敗するんですけど何故でしょうか?
引数として指定した範囲の列番号を返します。
頭痛がしてきた…… 一番いいのは諦めて放置することか…
すいませんでした。そうして下さい(笑) 自分でも何でこんな分からないのか分からない。 分からないところが分からないような状況なので。
>>590 (2)
int str_chnum(const char str[], int c)
{
int rtn = 0;
if (str == NULL) return rtn;
for (; *str; ++str) {
if (*str == c) ++rtn;
}
return rtn;
}
int main(int argc, char **argv)
{
if (argc < 3) {
return 0;
}
printf("str_chnum(%s, %c)'s return value is %d\n", str_chnum(argv[1], argv[2][0]));
return 0;
}
>>◆rp8BbJeZ0I 成績表を作ったんだったらこんなのどう? 1. csvファイルを双方向リスト(メモリを動的に確保していくアレ)に一行ずつ格納 2. 双方向リストを、点数をキーにソート(マージソートを利用) 3. ソートしたデータをcsvファイルに出力
>>612 ◆rp8BbJeZ0Iのレベルを考えてものを言え
面白みが無いが、特定の人物の科目別点数と合計点を表示するプログラムなんてのはいかがか?
ここすごいね。いくら学生向けの課題だって、次のようなものくらいはありえるわけで…… 1. にゅる力された数を3桁ごとにコンマで区切って出力する。 2. こしゃくなことに小数点以下がありうる。小数点以下は5桁ごとに空白1つ空ける。 3. 小数点から始まったら1の位に0を補う。 4. 小数点で終わったら小数点を取る。 5. エラーがあったら "E" と出力する。 6. 小数点だけの入力はエラーとする。 これ実現しようとすると難しくはないがちょいと面倒ではないか? ここにコード書いてやってる人びとみなさんどんくらい時間を費やして組んでるんでしょか。
脳みそに該当パターンが入っていれば、1行1分。入ってないときは、難易度による。
ポインタをしっかり理解してれば文字列の加工は面白いんだがな
618 :
デフォルトの名無しさん :2006/01/04(水) 19:08:26
文字列として格納してって言う姑息な手段は駄目かいな?
619 :
デフォルトの名無しさん :2006/01/04(水) 19:50:20
620 :
デフォルトの名無しさん :2006/01/04(水) 19:58:31
学生の成績を表すデータの型を、学籍番号を表す文字列型の欄no、 氏名(ローマ字)を表す文字列型の欄name、3つの整数型の要素 を持つ配列型の欄scoreと、実数型の欄aveをもつ次のレコード型 で定義する。 type student = record no : array [1..7]of char; name : array [1..25]of char; score : array [1..3]of char; ave : real; end; 実数型の欄aveには配列型の欄scoreの3つの要素の平均点を入れる。 5人分のデータを標準入力から入力し(aveはscoreからプログラム内で算出) 最も平均点の高い学生の学籍番号・氏名・平均点を出力しまた、5人全員を 平均点の低い順に並べて、学籍番号・氏名・平均点を出力する問題。 pascalでもCでもいいのでヒントをください。答えを書いてもらったら うれしいのですが、お願いします。
622 :
デフォルトの名無しさん :2006/01/04(水) 20:22:37
>>620 ここを読め、検索の修行が足りない
tp://lmj.nagaokaut.ac.jp/~lu/edu/computer/info.html#little_prog
以下のプログラムは入力した成績を平均点の高い順に並べ替えて
出力する .これをソートと呼ぶ
#include <iostream.h> // 課題3.3
#include <iomanip.h>
#include <vector.h> // vectorのheaderファイル
typedef struct student { // 学生の成績
char name[64]; // 名前
char yomi[64]; // 名前のよみ
char id[12]; // 学籍番号
int heikin; // 成績の平均
int math; // 数学の成績
int phys; // 物理の成績
int eng; // 英語の成績
} student;
623 :
619 :2006/01/04(水) 21:10:00
624 :
デフォルトの名無しさん :2006/01/04(水) 21:17:09
【質問テンプレ】 [1] 授業単元:情報処理演習 [2] 問題文(含コード&リンク):自然数で約数の和がその数の二倍に等しいものを完全数という、たとえば1+2+3+6=2×6なる6は完全数である 10000以下の完全数を全部見つけよ、ただし約数の和の計算は関数ににすること [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限: 明日の朝 [5] その他の制限:C言語はじめて二ヶ月の人がつかってて違和感のないプログラムでお願いします!
625 :
デフォルトの名無しさん :2006/01/04(水) 21:22:18
627 :
590 :2006/01/04(水) 21:44:57
問題(1)(2)共にコンパイル時にエラーが出てしまいコンパイル出来ません。
コンパイルできないからなんだよ 住人はお前の代わりにやってやってるんだ コードが間違っててもな 嫌なら自分でやりな
#includeすらしてないってんなら殴り飛ばす
>>624 #include <stdio.h>
int main(void) { printf("6 28 496 8128\n"); return 0; }
631 :
347 :2006/01/04(水) 22:41:13
632 :
347 :2006/01/04(水) 22:54:39
処理の方法としては、 ・座標x,yを入力したとき、char 型配列 arr_data[]の要素数 j は j=x+n*yで、 ・arr_data[ j ]に文字’0’を代入 ・int 型配列 arr_bombを二次元配列としてみたときの、j 番目の周囲の要素を見て、周囲に爆弾があればその数だけarr_data[ j ]の値をインクリメント(arr_data[ j ]の文字が’0’なので、インクリメントすれば’1’になるはず) ・arr_data[ j ]の文字が’0’の場合、open_window()関数のx,yの値を変えて再起処理 こんな感じにしたのですが、きちんと動作しません。 どこが悪いのか、ご指摘お願いします。
頼むから宿題じゃない趣味の範囲ならば自分で解決してくれよな? もし解決できないならそれはやる価値のないソリューションだ
634 :
347 :2006/01/04(水) 23:25:46
>>633 いや、宿題です。
ここで、一応、回答はもらったのですが、かなりハイレベルな回答(Dos上でグラフィカルな処理をしている)で、
授業でやった内容では明らかに不可能な内容だったので、自分で考えながら解いています。
自分で調べたとか勉強したとか言うとけばよろし。
>>624 面倒だからヒント。
a%b==0になるのがbはaの約数。
637 :
デフォルトの名無しさん :2006/01/05(木) 00:16:39
【質問テンプレ】 [1] 授業単元:情報処理演習 [2] 問題文 オイラー関数をプログラムにせよ♪ [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限: 明日の朝
>>637 #include <stdio.h>
int euler_phi(int n) {
int m = n, a, b, t, c = 0;
if (n < 1) return 0;
do {
a = m;
b = n;
while (b != 0) {
t = b;
b = a % b;
a = t;
}
if (a == 1) ++c;
} while (--m);
return c;
}
int main(void) {
int i;
for (i = 1; i < 10; ++i) printf("Phi(%d)=%d\n", i, euler_phi(i));
return 0;
}
オイラの関数は ペアノの公理だから 自分で解いてくれっぺ☆
>>631 浅学ながら読んでみたけど
このメインディッシュとなるwhilleのcommand場合訳の内容はなんなんだろうか
bombを指定していきなりx,yの入力を求めてるが何をしてるんだろうか?
x,yは実際目はどこなのだろうか?
とりあえず変数は1次元配列で扱わずに
二次元配列にしてみてはどうだろうか
まぁ頑張ってみるけど
>>624 こんなんでよろし?
#include <stdio.h>
int measure(int n){
int i,sum;
for(i=1,sum=0;i<n;i++){
if(n%i==0) sum+=i;
}
return sum;
}
int main(){
int n;
for(n=1;n<=10000;n++){
if(measure(n)==n) printf("%d\n",n);
}
return 0;
}
643 :
347 :2006/01/05(木) 01:02:06
644 :
347 :2006/01/05(木) 01:03:50
間違えました。 列がxで行がyです。
>>643 ふんふん
この周りの爆弾をカウントってのがopen関数なのかな?
そして周りの爆弾の数はarr_data[j]に格納すると
646 :
347 :2006/01/05(木) 01:09:45
>>645 そうです。
arr_dataは、char型なので、そこに格納されている文字の判定をshow_window関数で行っています。
おっけー 関数の中身の計算とかなんで再帰使ったかはわからんけど どうやらこの複雑さが原因の予感がしてきた とりあえず x,yにおいて周りの爆弾の個数ってのは 左上 上 右上 左 右 左下 下 右下の8個の状態を調べて爆弾の個数をカウントすればいいのだから 上手く座標計算すればいけるかもね
648 :
デフォルトの名無しさん :2006/01/05(木) 01:20:15
【質問テンプレ】 [1]授業単元:データ構造 [2]問題文: 以下のプログラムは Saito:73 Sato:100 Sato:85 Sato:86 Takahashi:62 Takahashi:85 を出力するがこれを Saito:73 Sato:100 85 86 Takahashi:62 85 と出力されるようにかえろ。 [3.3]言語:C++ [4]期限:1月7日(土)まで プログラム次のレスにのせます。 よろしくお願いします。
649 :
347 :2006/01/05(木) 01:20:37
>>647 ええ、自分もそれをやろうとしたのですが、うまくいきませんでした。
再帰を使うのは、問題文にもありますが、周りの爆弾の個数が0だった場合、再帰的に処理を繰り返して、周囲の爆弾の数が1以上あるところまでをopenするためです。
650 :
デフォルトの名無しさん :2006/01/05(木) 01:21:35
#include <iostream> #include <string> #include <map> using namespace std; typedef multimap<string ,int , less<string> > MMAP; typedef MMAP::value_type Mvalue; ostream& operator<<(ostream& os, const Mvalue& p){ os << p.first << ":" << p.second; return os;} main(){ MMAP seisekiMap; seisekiMap.insert(Mvalue("Sato",100)); seisekiMap.insert(Mvalue("Takahashi",62)); seisekiMap.insert(Mvalue("Sato",85)); seisekiMap.insert(Mvalue("Saito",73)); seisekiMap.insert(Mvalue("Takahashi",85)); seisekiMap.insert(Mvalue("Sato",86)); for(MMAP::iterator i=seisekiMap.begin(),end=seisekiMap.end(); i!=end; i++){ cout << *i << endl; } return 0; }
>>649 とりあえずいけそうだけどちょっといいかな
arr_dataには各種情報(周りの爆弾の個数etc)
arr_bombには爆弾があれば1 無ければ0だよね?
>>648 // includeを追加(std::pair<>の使用のため)
#include <utility>
// ostream& operator<<(ostream&, const Mvalue&)を削除
// main()のfor文を次のように変更
for (MMAP::iterator i = seisekiMap.begin(), end = seisekiMap.end(); i != end; ) {
pair<MMAP::iterator, MMAP::iterator> p = seisekiMap.equal_range(i->first);
cout << i->first << ":";
for (MMAP::iterator first = p.first, last = p.second; first != last; ++first)
cout << first->second << ' ';
cout << endl;
i = p.second;
}
653 :
347 :2006/01/05(木) 01:51:56
>>651 そうです。
arr_dataに入る情報としては、
最初’O(アルファベットのオー)’
openで開いた座標が爆弾だった場合’B’
bombで開いた座標が爆弾だった場合’b’
openで開いたときには、周りの爆弾の数の文字が入るようにしてあります。
654 :
デフォルトの名無しさん :2006/01/05(木) 02:28:25
[1]画像処理工学 [2]画像上のオプティカルフロー(u,v)をとくことができるオイラー方程式は以下で 与えられる。 ρx^2*u(i,j)+ρx*ρy*v(i,j)=α^2*∇^2*uーρx*ρt ρx*ρy*u(i,j)+ρy^2*v(i,j)=α^2*∇^2*v-ρy*ρt この連立方程式を解くガウスザイデル法のプログラムを作成せよ。 ここでρx,ρy,ρtは画像上の差分を用いることより既知とし、αは 右辺が急激な変化をしないようにするための重みである。また ∇^2*u、∇^2*vは4近傍における速度の平均値である。 ∇^2*u=(u(i-1,j)+u(i+1,j)+u(i,j+1)+u(i,j-1))/4 -u(i,j) ∇^2*v=(v(i-1,j)+v(i+1,j)+v(i,j+1)+v(i,j-1))/4 -v(i,j) [3] 3.1 Windows XP 3.2 borland c++5.5.1 3.3 Cのみでお願いします [4]二〇〇六年一月六日 [5]動画像処理を習っております。問題文がわかりにくかったらスイマセン。 本当に考えたのですがわからなかったのでご教授お願いします。
655 :
648 :2006/01/05(木) 08:02:08
>>652 どうもありがとうございます。
これで何とかなりそうです。
>>654 お手上げ。
1)グラフィックを扱う場合はそのライブラリやプログラムの構成を明示してほしい。
→授業で提示されたプログラムをどこかに上げてくれ。
2)数式はその分野を知らないとわけがわからない。
→解説が載ってるWebページや授業の資料を見せてくれ。
んじゃ、俺は生活のために出かけてくる。
>>654 Gaussなんとか法自体は何度もスレで出てるからそれを改造してみたらどうよ?
作ろうにもその数式がなんなのか理解できん
658 :
デフォルトの名無しさん :2006/01/05(木) 11:27:58
>>654 やはり説明不足でしたね...すみませんm(__)m。
画像の形式は、pgm形式です。
現在できているプログラム(構成)については、
1.画像入力部(pgm形式なのでRGBが数値データで得られる。それをモノクロへ変換し
画像へ変換(二次元配列へ値を入れる))
2.画像出力部(最終的な(必要な処理を施した)データを出力する)
3.ρx,ρy、ρt計算部(定数を計算する)
あとu,vをガウスザイデル法より導出したいのですがその部分のルーチンが
わからないのです。参考になるページを見つけたのでこちらを参考にして
いただけるとより問題を理解していただけると思います。
http://planner.t.u-tokyo.ac.jp/member/fuse/optical_flow.pdf#search= '蜍セ驟肴ウ・%20繝ゥ繝励Λ繧キ繧「繝ウ'
このページの2,3,4ページ部分です。
[1]C言語演習 [2]文字列と配列を使用したおみくじプログラムを作成せよ。 (実行するたびに結果がランダムになるようにせよ) [3] 3.1 Windows XP 3.2 VC 3.3 C言語 [4]2005年1月5日午後6時まで [5]期間が短いのできついかもしれませんが、よろしくお願いします。
>>659 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char rst[2][5]={"大吉","大凶"};
srand((unsigned int)time(NULL));
printf("結果:%s\n",rst[rand()%2]);
return 0;
}
天国と地獄だな
662 :
659 :2006/01/05(木) 12:27:23
>>660 早いレスありがとうございます。
本当に助かりました。
663 :
デフォルトの名無しさん :2006/01/05(木) 13:08:55
次の10人の成績で、50点以上75点未満が何人いるかを出力するプログラムを作成しなさい。 50点 75点 36点 88点 68点 90点 67点 82点 45点 77点 よく分からないのでぜひ教えてください。 宜しくお願いします。
665 :
デフォルトの名無しさん :2006/01/05(木) 13:19:49
663です。 C言語でお願いします。 提出期限は今日の五時までです。 初心者で何も分からないのですがどうぞ宜しくお願いします。
>>665 テンプレも読めないカスだったのか・・・('A`)
>>663 入力方法が書いてないからとりあえず標準入力で。
#include <stdio.h>
int main(){
int n,count=0;
while(scanf("%d",&n)!=EOF){
if((50<=n)&&(n<75)) count++;
}
printf("%d\n",count);
return 0;
}
669 :
663 :2006/01/05(木) 13:29:44
668さん早速レス有難うございます。 ほんと、助かりました。
670 :
デフォルトの名無しさん :2006/01/05(木) 14:40:23
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 挟み将棋の挟み判定で、相手の駒の動きを 端で封じた場合の挟み判定を行い、いくつ駒を とったかを数える関数を作成せよ。 碁盤はboard[11][11]で表されるものとし、 盤の周り(board[0][y],board[x][0],board[10][y] board[x][10])には99、相手の駒の座標には1、自分の 駒の座標には2、何もない座標には0が格納されているも のとする。相手を囲めたとき、輪の中にある相手の駒は 全て0になり、0になった駒数をcountとして返す。 int encircled( ... ){ ... return count; } [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語: C [4] 期限: 06年1月7日 [5] その他の制限: 構造体まで、 標準ライブラリに含まれる関数は使用可能 宜しくお願いしますm(__)m
こういうときの判定を考えればいいのかな? 999999 91112 9112 912 92
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 口頭で出された問題ですので正式な問題文はありませんが問題はこのようなものです 与えられた16進数の入力を2進数に変換し,2進数に含まれる1の数を出力せよ 例えばFFFFという入力の場合には1111 1111 1111 1111に変換し,16を出力 0001の場合には0000 0000 0000 0001に変換し,1を出力といった具合です [3] 環境 [3.1] OS:Unix [3.2] コンパイラ名とバージョン:ちょっとわかりません・・ [3.3] 言語:C [4] 期限: 1月7日 [5] その他の制限:特に制限はありません よろしくお願いいたします
>>672 4桁の16進数を16桁の2進数にするの?
>>671 さん
そうです。。全然構想沸きませんorz
>>672 #include <stdio.h>
int to_radix_2(unsigned int x, char* s) {
int index = 0, left = 0, digit, n = 0;
char temp;
do {
digit = x & 1;
if (digit) ++n;
s[index++] = digit + '0';
x >>= 1;
if ((index + 1) % 5 == 0) s[index++] = ' ';
} while (index < 20);
s[--index] = '\0';
while (left < --index) {
temp = s[left];
s[left++] = s[index];
s[index] = temp;
}
return n;
}
int main(void) {
char s[32];
int x, n;
printf("Enter Number:"); scanf("%4x", &x);
n = to_radix_2(x, s);
printf("%s\n%d\n", s, n);
}
>>673 説明不足で申し訳ありません
入力は0000からFFFFまで4桁の16進数です
その16進数を表現する2進数に変換をしてそこに含まれる1の数をカウントするというプログラムです
どうにも説明下手で申し訳ありません・・・
>>671 //起動後、標準入力から16進数値を一回入力すると結果を出力する。
int main()
{
printf("Input hexadecimal value(use 0-9a-f):");
char buf[100];
fgets(buf, sizeof(buf), stdin);
unsigned bits = 0;
for (char * p = buf; !(*p == '\0' || *p == '\n'); ++p) {
int digit;
if (*p >= '0' && *p <= '9') {
digit = *p - '0';
} else if (*p >= 'a' && *p <= 'f') {
digit = *p - 'a' + 10;
} else {
fprintf(stderr, "Can't convert: illegal character?\n");
return EXIT_FAILURE;
}
printf("%.5s", digit * 5 + "0000 0001 0010 0011 0100 0101 0110 0111 "
"1000 1001 1010 1011 1100 1101 1110 1111 ");
bits = bits << 4 + digit;
}
bits -= bits >> 1 & 0x55555555;
unsigned tmp = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
tmp += tmp >> 4;
tmp &= 0x0f0f0f0f;
tmp += tmp >> 8;
tmp += tmp >> 16;
printf("\n%d\n", (unsigned char) tmp);
return EXIT_SUCCESS;
}
>>658 pgmなら
・pgmを扱うプログラム(授業で提示されているはずだ)
・処理したい画像(ファイル形式の細かいとこや、画像ファイルの特徴を知りたい)
をup。
資料を読む限り、複数の画像が必要そうだ。
なんつーか、このスレに来る課題を片っ端からやってたら 初心者にはいい勉強になりそうだ
>>675 ありがとうございます
現在はすぐ試せる環境にありませんのでソースを解析する段階までやり,
明日すぐにでも試してみようと思います
681 :
デフォルトの名無しさん :2006/01/05(木) 18:32:58
682 :
347 :2006/01/05(木) 18:46:31
>>679 俺もそう思った。
でも、よく考えたら先生が初心者育てるための課題なんだから、
いい勉強にならなきゃダメ先生じゃん。
>>347 この前マインスイーパー作ったからソースから該当箇所探してみるよ。
>>681 まあ・・・手軽にupできるところを探してくれ。
>>682 とりあえず俺もカウントなら余裕に出来たが
もし爆弾個数が0の場合周りのマスに再帰を掛けたら本来開くべき場所でないところも開いてしまう罠に陥ってしまった罠
どうやらグーグル先生に聞いてみたほうが速そうだ
687 :
660 :2006/01/05(木) 20:07:04
ネタで書いたのに喜んでもらえるとは思ってなかった・・・
>>682 素直にopen_window()の中でチェックした爆弾の個数が0だったら、
上下左右のセルに対してopen_window()を呼べばいいんじゃないの?
>>688 右のセルが左のセルに対してopen_window()を呼ばないようにしないとね。
だから先に開けておいてまだ開いてないセルに対して呼べばいいのか。
初心者の独学で片っ端からメモ帳にコピーしてるけど、 解説無いからテラムズス(´A`) ここの問題全部を書式化して解説付で僕に1万円で売って下さい。
691 :
347 :2006/01/05(木) 20:41:21
>>688-689 すみませんが、実際にコードを書いてみていただけませんか?
自分で考え付く限りのコードは書いてみたんですが、出来ませんでした。
忘れてた。ボードのデータはこんな感じで。 99 99 99 99 99 99 99 99 99 99 99 99 0 0 2 0 0 0 2 0 0 99 99 2 2 1 2 0 0 0 0 1 99 99 1 1 1 2 0 2 0 1 0 99 99 1 1 2 0 0 0 0 0 0 99 99 1 1 1 2 0 0 1 0 0 99 99 2 2 2 0 0 0 0 2 0 99 99 1 1 1 2 2 2 0 0 0 99 99 1 0 2 1 1 1 2 0 0 99 99 1 1 2 1 1 1 1 2 0 99 99 99 99 99 99 99 99 99 99 99 99
695 :
347 :2006/01/05(木) 20:58:44
696 :
688 :2006/01/05(木) 21:21:06
>>689 そうだね。
あと再帰的に実行するとセル範囲外に出る可能性が高いからそれも気をつけないと。
こんな感じで動くんじゃない? ちゃんと読んでない上に動かしてもないから知らないけど。 void open_window(int n,int x,int y) { if (x < 0){ return; } if (y < 0){ return; } if (x >= n){ return; } if (y >= n){ return; } if(arr_data[i] != 'O'){ return; } 既存部分 open_window(n, x - 1, y); open_window(n, x + 1, y); open_window(n, x, y - 1); open_window(n, x, y + 1); }
>>682 横レス失礼。最大限
>>682 のコードを生かすとしたら
(1)
>>682 のopen_window関数の先頭に以下を追加
if (x < 0 || y < 0 || x > n || y > n) {
return;
}
if (arr_data[n*x+y] != 'O') {
return;
}
if (arr_bomb[n*x+y] == 1) {
return;
}
(2)
>>682 のarr_data[j]=48+cnt[j];の下のコードを削除
(3)
>>682 のarr_data[j]=48+cnt[j];の下に以下のコードを追加
if (cnt[j] == 0) {
for(int xx=x-1; xx<=x+1; ++xx) {
for (int yy=y-1; yy<=y+1;++yy) {
open_window(n, xx, yy); /* 再帰呼び出し */
}
}
}
説明は次レスで
>>697 あ、ごめん。
if文抜けてた。
open_window()の再帰するところ、爆弾数が0個のときだけにしてね
700 :
698 :2006/01/05(木) 21:36:45
(1)走査する必要ないときそのまま戻る (2)デバッグ用だと思うけど、再帰のときも表示されてしまい邪魔なので削除 (3)周りのセルに対して再帰呼び出し カレントセルにも呼んでるけど(1)に引っかかってすぐ戻ってくるはず #ありゃ、697とかぶってしまった…ごめんね
>>700 こちらこそ。ごめん。
でも(3)はちょっとまずくない?
xx=x-1でyy=y-1のときもopen_window()呼んじゃうから…
>>693 様
ありがとうございましたm(__)m
main内のputだけ知らない構文なのでちょっと調べてきます。
703 :
347 :2006/01/05(木) 21:46:00
>>697-698 おお!回答ありがとうございます!!
一度確認してみたところきちんと動きました。
まだ、他のところに細かいバグなどがあるんですが、とりあえずこれで提出できます。
本当にありがとうございました。
704 :
347 :2006/01/05(木) 22:05:43
すいません。きちんと出来ていたと思ったのですが、何回か試してみたところ、不具合が発生してしまいました。
>>697 さんのは、爆弾以外の場所すべてが開かれてしまいます。
>>698 さんのは、たいてい上手くいくのですが、
初期状態が
□□○□□
□○□□□
○□□□○
□□○□□
のとき、openで(x,y)=(4,4)と入力したら、
□□□□□
□□□□□
□□□□□
□□□2 1
□□1 0
という風に、4行4列目が空白になってしまいました。
おそらく、ここには、違う文字か何かが入っているためだと思うのですが。。。
705 :
347 :2006/01/05(木) 22:07:38
×4行4列目 ○5行5列目 です。
706 :
698 :2006/01/05(木) 22:10:36
>>701 「周囲」の意味を8方向で考えてそうしてみたけど4方向なのかな?
確認してみたらウィンドウズ付属のマインスイーパーは8方向っぽい。
>>704-705 ちょっと待ってて、確認してみる。
707 :
347 :2006/01/05(木) 22:15:01
>>697 さんのは
open_window()の再帰を
if(cnt[j]==0)
{
}
の中に入れれば、全部は表示されなくなりますが、706さんの言うように4方向しか表示されません。
708 :
697 :2006/01/05(木) 22:15:47
>>706 そうなんだ。じゃあ、僕の勘違いでした。ごめん。
>>704 697に699の変更は入れてくれた?
709 :
347 :2006/01/05(木) 22:21:20
>>697 さんのを8方向で判定するようにしてみました。
結果としては、きちんと8方向に動作しましたが、
>>704-705 と同じ症状が発生してしまいました。
710 :
698 :2006/01/05(木) 22:32:26
>>704 (1)の条件式が間違ってた
if (x < 0 || y < 0 || x > n || y > n) {
となってるのを
if (x < 0 || y < 0 || x >= n || y >= n) {
にしてみて。
711 :
347 :2006/01/05(木) 22:37:57
>>710 おお!出来ました!!
ありがとうございました!!
>>707 ごめん。4方向しか表示されないってどういう意味で言ってるの?
再帰的に空白セルが開いていかないって言ってるの?
713 :
670 :2006/01/05(木) 22:41:31
>>693 様
putの意味は大体わかったのですが
check :(1:8) 0
check :(2:9) 0
...
で無限ループしてしまいます・・・。
714 :
712 :2006/01/05(木) 22:41:44
>>711 あ、もう解決したんならいいや。
回答いらないよ。
しっかりテストしてね。
しかし再帰は苦手だからとマインスイーパーのopen関数さえも適切な手順がぱっと思いつかないとは へこむ(´・ω・`)
んー。再帰なくても、push/pop/is_emptyでできるぞ。
>>715
717 :
693 :2006/01/05(木) 23:25:16
>>713 ありゃ、
>>694 のデータでなるの?
違ったらループしちゃうときのデータください。
putsはprintf打つのがめんどくさかっただけだからw
718 :
デフォルトの名無しさん :2006/01/05(木) 23:39:09
720 :
670 :2006/01/05(木) 23:56:58
>>717 様
こんな感じです。putsは状況変化を
示すのもだというのはわかりました。
99 99 99 99 99 99 99 99 99 99 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 0 0 0 0 0 0 0 2 1 99
99 99 99 99 99 99 99 99 99 99 99
こんな感じです。
>>720 普通に動くんだけどなぁ…
配列への入力はちゃんとできてる?
722 :
670 :2006/01/06(金) 00:18:50
で、できますた!!!!!!!!!!!!1111111111
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 1クラス40人分の座席を乱数を用いて割り当てるプログラムを作れ。 座席は右上から1,2,3・・・40となるようにすること 32…9 1 ・ ・ 2 ・ ・ 3 ・ ・ ・ ・ ・ ・ 40 16 8 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:borland c 5.5 [3.3] 言語:C [4] 期限: 1月10日 [5] その他の制限:特に制限はありません
724 :
723 :2006/01/06(金) 00:31:50
↑は座席の割り方が少しずれてしまいました。 右上から下に向かって1,2,3・・・8で8の倍数になったら隣の列の一番上に行きます。
>1クラス40人分の座席を乱数を用いて割り当てるプログラム for(i=1; i<=40; ++i) 配列[i]=i; for(i=1; i<=40; ++i){1〜40の値を2つ適当に選んで、そのポジションの配列の値を入れ替える}
726 :
デフォルトの名無しさん :2006/01/06(金) 01:08:44
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):キーボードから入力した整数nについて、ニュートン法を用いて n^frac{1}{2}、n^frac{1}{3}、・・・、n^frac{1}{10} を順に出力するプログラムを作成せよ。但し、許容誤差は10^-10。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月5日18時 [5] その他の制限:なし
struct student{int id; int num;}; id:1〜40を順に付ける num:乱数を与える numでソートして、順に席を割り当てるとか。
728 :
デフォルトの名無しさん :2006/01/06(金) 01:18:06
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):int_{-1}^{1}f(x)dxをモンテカルロ法で計算するプログラムを作れ。 試行回数n:=2^MとしてM=2からM=20までのMの値と積分値を出力せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月6日18時 [5] その他の制限:なし
729 :
デフォルトの名無しさん :2006/01/06(金) 01:25:53
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):パスカルの3角形のアルゴリズムn_C_r=n-1_C_r-1+n-1_C_rについて、計算量O(2^n)未満で実行することができるか [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年1月6日18時 [5] その他の制限:なし
たまに出てくる ^ はどうゆう意味ですか?
beki
>>730 2^3 なら「2の3乗 (=8)」って意味
>>726 #include <stdio.h>
#include <math.h>
int a, n;
double f(double x) {
return pow(x, a) - n;
}
double df(double x) {
return a * pow(x, a - 1);
}
int main(void) {
double x, ox, d = pow(10., -10);
scanf("%d", &n);
for (a = 2; a <= 10; a++) {
x = (double)n;
do {
ox = x;
x = ox - f(ox) / df(ox);
} while (fabs(ox - x) > d);
printf("%d^frac{1}{%d}=%.10f\n", n, a, x);
}
return 0;
}
>>729 計算で確認をしてないが、次のように計算すればオーダーが
2^nからやや下がると思う。
(n,r)=(n-2,r-2)+2*(n-2,r-1)+(n-2,r)
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク):Σ1/(i + k) の計算 正の整数 n を入力し,次の式の値を計算し,出力するプログラムを書け. 1/(1+4) + 1/(2+4) + 1/(3+4) + ・・・ + 1/(n+4) [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0 [3.3] 言語:C++ [4] 期限: 1月中旬 [5] その他の制限:特にありませんが基礎をちょっと覚えた程度の初心者です。 よろしくお願いします。
>>718 ようやくこれで「計算」できるようになったんだが、もうひとつ足りない。
出力はどういうふうにするの?
738 :
デフォルトの名無しさん :2006/01/06(金) 08:51:14
>>736 初心者っぽく書いたのでどうぞ。
それにしても収束する級数を計算させろよな。
#include <iostream>
using namespace std;
main()
{
double s, x;
int n;
while(1){
cout << "N=";
cin >> n;
if (n <= 0) {
cout << "Data out of range." << endl;
}
else break;
}
s=0.0;
x=1.0+4.0;
while(n){
s=s+1.0/x;
x=x+1.0;
n--;
}
cout << "Ans:" << s << endl;
}
740 :
デフォルトの名無しさん :2006/01/06(金) 10:51:11
741 :
デフォルトの名無しさん :2006/01/06(金) 10:51:50
742 :
740 :2006/01/06(金) 10:55:58
740と741は同じ内容です。間違って書き込みを2度してしまいました。 すいません。
>>740-741 つまり簡単な自動羊肉を実装しろという事か
つーか、これは前に面倒杉ということでスルーされたはずだがシツコイ
貰えない方が面白いよwwww
745 :
デフォルトの名無しさん :2006/01/06(金) 11:32:45
[1] 授業単元:プログラミング演習 [2] 問題文:リスト構造の成績処理プログラムに、引数として指定されたデータを指すポインタを返すSEARCH関数を追加せよ、ただし該当データがない場合はNULLを返すようにせよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 2.9 [3.3] 言語:C [4] 期限:[ 2006年01月08日まで] [5] その他の制限:なし 関数部分だけお願いします。
[1] 授業単元:プログラミングU [2] 問題文(含コード&リンク):英単語管理プログラムを作成. 配列の要素数を変更可能にするなどプリプロセッサ制御文を用いて拡張性の高いプログラムになるように工夫せよ. また,分割コンパイルしやすいように各機能別に関数化すること [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0 [3.3] 言語:C++ [4] 期限: 来週の水曜 [5] その他の制限:初期状態を除いてプログラム実行時に既存の英単語リストのファイル(list.txt)を読み込み,2次元配列に格納する. (例:words[単語数][単語文字数]) 単語登録,リスト表示,終了の各機能が選択可能なメニュー画面を表示する.ただし,登録可能な単語数を表示し,リスト内と同一単語の登録は受付けない. また,リスト表示は登録した英単語を含めるものとする. プログラム終了時に新しくできた英単語リストを読み出したファイルに更新する. なお,英単語リストのファイルは,1行1単語として出力するものとする ヒントとして文字列の比較は「strcmp関数」,文字列の複写は「strcpy関数」をそれぞれ使用となっていますがどうすればいいのかさっぱりです。 どなたかご指導お願いしますm( _ _ )m
メニュー画面を表示ってことはGUI?。
たぶん、標準出力に1.処理 2.処理 ・・・ 9.終了 とか出しといて、 scanf()でうんぬん。
749 :
740 :2006/01/06(金) 13:08:18
>>743 非常に面倒なのは分かってます。私も進級に関わらないのなら絶対にしません。
でも、しないといけないんです。ほかに頼れる人はいないんです。お願いします。
ここの課題はやる気になるのに,自分のプログラムはさっぱりやる気にならなアヒャヒャハヒャyr
>>749 状態数 100 も越えないって。プログラム 200 行位でできるんじゃないかな?
単位に関わらないなら絶対にしないって思うんだったら、多分ここ見ている人
みんな単位に関係ないんだから誰もやらないと思うね。
手際良くオートマトン書いて、整理しながら大きなプログラムを書く練習に
なるはずだけどな。
1状態2行か。
まぁ、俺なら一行で書けるけどな。
オートマトンの処理なんて出力と次の状態の計算程度なんじゃないの?
>>749 マジレス恐縮だが、そんなことをしてまで進級したとして、
毎年同じことを繰り返すつもりか?
或いは就職してからも?
進級に関わるのなら尚のこと、自力でやるべきではないのか?
ホントに必死なら誰かに金払って頼めよ
757 :
デフォルトの名無しさん :2006/01/06(金) 14:02:07
>>737 えっと出力は、最大ベクトル、最小ベクトル(u,vの)と画像全体での平均
ベクトルを出力するようにしたいです...。
あと一つ足りないっていうのは、結果を出力する部分のことですか?
正直な話、
>>749 は甘えすぎ
俺は単位を落としそうになったら友人ネットワークと自身の気力を極限まで駆使して
意地でも取ってたぞ
結果大学4年間で単位を落とした事は一度も無い
進級がかかってるなら、大学の教授に質問するなり
プログラムの得意な友人に頼るなり
図書館でプログラムの本を読み漁るなり
ネットで調べまくるなりして
意 地 で も 単 位 を 取 れ
単位なんぞ努力しだいでなんとでもなる
>>758 だから、あらゆる手段を駆使して単位取ろうとしてるんじゃないの?
>>759 に核心を突かれた
けど、ここでだめぽそうなら別の手を考えるしかないだろ
何か誰もやりそうにない雰囲気だし
ここに頼る→誰もしなかった→留年
になったら寒いぞ
>ユーザが入力したローマ字をひらがなに変換して表示する > >以下に実行例を示す。 >tyu-rippu >チューリップ 問題が矛盾起こしてるから作れねーよってレポートに書いて出(ry
762 :
デフォルトの名無しさん :2006/01/06(金) 15:11:43
[1] 授業単元: 情報科学 [2] 問題文(含コード&リンク): 変数x y wa sa seki shouを実数型で宣言し。xに18.2 yに5.1を代入 その和 差 積 商を計算し画面に表示する [3] 環境 [3.1] OS:windowsXP [3.2] BCC developer [3.3] c [4] 期限: ([2006年1月9日まで [5] 基本しか学習してません
そもそも
>>740 がスルーされたのは、あんなばかでかい配列作ってられるかypってのが大きいわけで
処理自体は簡単なはず
自力で出来ないなら進級諦めろ
>>740 てか、ちっとは自助努力のあとを見せてくれ
>>762 #include<stdio.h>
int main()
{
double x=18.2,y=5.1;
double wa=0,sa=0,seki=0,shou=0;
wa=x+y;
sa=x-y;
seki=x*y;
shou=x/y;
printf("和=%f\n差=%f\n積=%f\n商=%f\n",wa,sa,seki,shou);
return 0;
}
>>740 "データファイルはe-Learning システムからダウンロードして使用すること。"
ってあるからそのファイルが無いと作れないんで内科医?
昨日
>>672 を答えていただき,
>>675 に回答をいただいたのですが
私の問題の覚え間違いが発覚いたしましたのでもう一度お願いいたします
内容自体は
>>672 とほとんど同じなのですが
入力が0000からFFFFではなく0x0000から0xFFFFまでという入力でした
申し訳ありませんがよろしくお願いいたします
770 :
デフォルトの名無しさん :2006/01/06(金) 15:50:49
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 数値を入力し、その回数だけ自分の氏名を画面に表示する。 [3] 環境 [3.1] windows XP [3.2] gcc [3.3] 言語:C言語 [4] 期限:2006年1月8日 [5] その他の制限:なし
>>769 その変更なら最初に2文字読み飛ばせばいいだけ
>>770 #include<stdio.h>
#define NAME "ここに自分の名前入れてちょ"
int main()
{
int a=0,b=0;
scanf("%d",&a);
for(b=0;b<a;b++){
puts(NAME);
}
return 0;
}
>>771 2文字読み飛ばすという処理のやり方を教えていただけませんでしょうか?
入力を左にシフトさせるだけではまずいですよね・・・
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク):Σxi/(i + k) の計算 [問題]正の整数 n と x(実数)の値を入力し,次の式の値を計算し,出力するプログラムを書け. x/(1+4.0) + x2/(2+4.0) + x3/(3+4.0) + ・・・ + xn/(n+4.0) (分子はx、xの2乗、xの3乗、・・・、xのn乗です) [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0 [3.3] 言語:C++ [4] 期限: 一月中旬 [5] その他の制限:自分である程度作ってみましたがxのn乗の書き方がわかりませんでした。
776 :
675 :2006/01/06(金) 16:18:53
>>774 #include <stdio.h>
int to_radix_2(unsigned int x, char* s) {
int index = 0, left = 0, digit, n = 0;
char temp;
do {
digit = x & 1;
if (digit) ++n;
s[index++] = digit + '0';
x >>= 1;
if ((index + 1) % 5 == 0) s[index++] = ' ';
} while (index < 20);
s[--index] = '\0';
while (left < --index) {
temp = s[left];
s[left++] = s[index];
s[index] = temp;
}
return n;
}
int main(void) {
char s[32];
int x, n;
printf("Enter Number:"); getchar(); getchar(); scanf("%4x", &x);
n = to_radix_2(x, s);
printf("%s\n%d\n", s, n);
}
>>775 #include <stdio.h>
int main(void) {
int n, i;
double x, xn, result = 0.;
scanf("%d", &n); scanf("%lf", &x); xn = x;
for (i = 1; i <= n; i++, xn *= x)
result += xn / (i + 4.);
printf("%f", result);
return 0;
}
>>775 int hoge=x;
for(int i=1;i<n;i++)
hoge*=x;
>>776 何度もありがとうございました
本当に助かりましたです
[1] 授業単元:情報処理C [2] 問題文(含コード&リンク):円柱、円錐、球の体積を求める計算プログラムを作成せよ。 高さ=6、半径=3小数点は8桁までとする。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual.net studio 2003 [3.3] 言語:C++ [4] 期限: 1月23日 [5]授業も言われるがまま打ち込んでいたので基本すら理解していない状況です。 どうか助けてください。
[1] 授業単元:情報処理C [2] 問題文(含コード&リンク):円柱、円錐、球の体積を求める計算プログラムを作成せよ。 高さ=6、半径=3小数点は8桁までとする。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual studio.net2003 [3.3] 言語:C++ [4] 期限: 1月23日 [5]授業も言われるがまま打ち込んでいたので基本すら理解していない状況です。 どうか助けてください。
基本すら出来てないんだったらこの先もついていけんのでは・・
>>746 とりあえず単語を追加する関数だけ作ってみたので参考に。
他のファイル入出力とかはできるよね?
/*リストの配列:list[MAX_WORD][WORD_LEN]*/
/* n:現在の単語数 */
int add(){
char word[WORD_LEN];
int i;
/*リストがいっぱいのとき*/
if(n == MAX_WORD){
printf("cannot add.\n");
return 1;
}
/*単語入力*/
printf("input word:");
scanf("%s",word);
/*すでにあるか確認*/
for(i=0;i<n;i++){
if(strcmp(word,list[i])==0){ /*既存の単語と一致しますた*/
printf("already added.\n");
return 1;
}
}
strcpy(list[n],word); /*単語追加*/
n++; /*単語数更新*/
return 0;
}
785 :
782 :2006/01/06(金) 22:49:00
今回落とさない限り、この先情報処理を取る予定が無いのです。 履修失敗したな〜(涙)
[1] 授業単元:数理計画法演習 [2] 問題文(含コード&リンク):以下の式をランダム探索法(MatyasとSolis&Wetsの二つ)、アルミジョーの定理を使って解け。 f(x) = 4*x1*x1 - 2.1*x1*x1*x1*x1 + x1*x1*x1*x1*x1*x1/3 + x1*x2 - 4*x2*x2 + 4*x2*x2*x2*x2 -2.5≦x1≦2.5、-1.5≦x2≦1.5 ランダムのほうは初期値x=(0,0)←列が打てないので。一次元正規分布は平均0、分散は0.1と0.01の二種類、と書いてあります アルミジョーの初期値はx1=0.15、x2=0.1、制約条件なしとしてやる、と書いてあります。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン: LSI C-86 試食版 [3.3] 言語:Cかと。 [4] 期限: 今年の1月13日まで [5] その他の制限:元がプログラムの授業ではないので、何でも言いといいながらCが一番いいとも言いました。 完全にちんぷんかんぷんなのでよろしくお願いします。
>>782 えー、これわからないのはいくらなんでもチョット。
円柱、円錐、球の体積を求めるメソッドを作れ、
っていうのじゃなければこれでいいんじゃない?
#include <cmath>
#include <iostream>
int main()
{
using namespace std;
double pi = 4 * atan(static_cast<double>(1));
const double h = 6;
const double r = 3;
//底面(πr^2)
double circle_bottom = pi * r * r;
//円柱(底面×高さ)
double column = circle_bottom * h;
//円錐(底面×高さ÷3)
double cone = circle_bottom * h / 3;
//球の体積((4πr^3)/3)
double ball = (4 * pi * r * r * r) / 3;
return 0;
}
計算しても表示はしないんだね。
というか、バカは答えなくていいよ
atan使うの?本当に?
792 :
デフォルトの名無しさん :2006/01/07(土) 00:49:19
>>788 って、u,v求める問題のことですかね??
acos(-1.0)でいいじゃん。キャスト使ってまで4*atan(1)しなくても。
794 :
782 :2006/01/07(土) 01:05:46
本当に感謝しています! 校舎の方に行かないと確認できないのが悔しいですが… 本当にありがとうございました!
[1] 授業単元: プログラミング [2] 問題:下記 標準入力で英文を入力して、英文内の動詞が辞書に対応していたら 過去形で、対応していなければそのままの形で英文を出力できるようにせよ。 なお、入力は一行単位で入力できるようにしなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: BorlandC++ [4] 期限: 1月10日 scanfで書いてみたんですが、fgetsを使う?一行入力がわかりません。 なにとぞお願いします。 #include <stdio.h> #include <string.h> main() { int i; char buf[100]; static char *dic[10][2] = { /*辞書*/ {"eat","ate"},{"move","moved"},{"copy","copied"}, {"is","was"},{"walk","walked"},{"look","looked"}, {"hit","hit"},{"smile","smiled"},{"sea","saw"},{"play","played"}}; while (scanf("%s",buf) != EOF){ for(i=0; i<10; i++){ if(strcmp(buf,dic[i][0]) == 0) break; } if(i==10) printf("%s\n", buf); else printf("%s\n", dic[i][1]); } }
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク):3n+1 [問題]正の整数値nを読み込み,偶数の時はその値を2で割り, また,奇数の時はその値を3倍したものに1を加えるという処理をnの値が1になるまで繰り返すプログラムを書け. その際,入力された値,及び,各演算を行った結果得られたnの値を, 得られた順番に1つ以上のスペースを空けて出力すること。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0 [3.3] 言語:C++ [4] 期限: 一月中旬 [5] その他の制限:特にありません。 よろしくお願いします。
>>796 #include <stdio.h>
#include <conio.h>
int main()
{
int n;
printf("何かの正の整数を入力してください:");
scanf("%d",&n);
while(n!=1){
if(!(n%2)) //もし偶数なら
printf("%d ",n/=2);
else{ //奇数なら
n*=3;
n++;
printf("%d ",n);
}
getch();
}
getch();
return 0;
}
798 :
796 :2006/01/07(土) 03:27:40
>>797 自分で確認したときは問題なかったのですが、大学の教授のホームページに送信したら
「conio.h: No such file or directory
***error*** コンパイルできませんでした 」
と返ってきました。
大学の講義では<iostream>から始まるものしか習っていません。
ここで前に作ってもらった<stdio.h>で始まるものは大丈夫でした。
iostreamとかの意味を解説書で読んでもイマイチよく分からないので
よろしければ一緒に教えてもらえませんか?
よろしくお願いします。
んじゃiostreamだけのに書き換えるわ #include <iostream> using namespace std; int main() { int n; cout<<"何かの正の整数を入力してください :"; cin>>n; while(n!=1){ if(!(n%2)){ //もし偶数なら n/=2; cout<<n<<" "; } else{ //奇数なら n*=3; n++; cout<<n<<" "; } } return 0; }
>>798 iostreamはバリバリのジェネリックプログラミングだから、
C++初心者には結構きついよ。
引数付きマニピュレータとか追いかけるのでけでも大変だから。
使い方だけわかっていればいいと思う。
>>795 文字列をばらす関数があったので使ってみた。
参考:
http://www9.plala.or.jp/sgwr-t/lib/strtok.html -----------------------------------------
char buf[100];
char *wp;
(中略)
gets(buf); /*1行入力*/
/*1回目*/
wp = strtok(buf," ");
for(i=0; i<10; i++){
if(strcmp(wp,dic[i][0]) == 0) break;
}
if(i==10)
printf("%s ", wp);
else printf("%s ", dic[i][1]);
/*2回目以降*/
while ((wp = strtok(NULL," ")) != NULL){
for(i=0; i<10; i++){
if(strcmp(wp,dic[i][0]) == 0) break;
}
if(i==10)
printf("%s ", wp);
else printf("%s ", dic[i][1]);
}
printf("\n");
}
>>796 もう解答出てるけどたぶん教授が求めてるのは再帰だと思うので再帰で
#include <iostream>
using namespace std;
void solve( int n )
{
cout << n << ' ';
if ( n == 1 ) return;
if ( n % 2 ) // odd
n = n*3+1;
else // even
n /= 2;
solve( n );
}
int main()
{
int n;
cout << "Input an integer > ";
cin >> n;
if ( n <= 0 ) return 1;
solve( n > 0 ? n : -1*n );
cout << '\n';
return 0;
}
803 :
796 :2006/01/07(土) 04:38:51
>>799 ,802
ありがとうございます。
>>799 のはnに1を入力すると答えが何も出ませんでした。
>>802 のは無事正解することが出来ました。
それで
>>799 のを自分で考えて色々試してみましたが自分では無理だったので
参考までにnに1を入力した場合に答えが出るように直してもらえないでしょうか?
>>799 が何とか読める程度の知識と大学の進度なので。
>>803 やっつけの仕事でごめんよ
まず数を入力させて
while(n!=1)
nが1では無い限り以下の処理を行う
もし偶数ならば
nを2で割ってそれをnに代入
もし奇数なら
nを3倍にして1を加算しその値をnに代入
だから最初に1を入力してしまうとwhileループに進入できなくなる
正しく本来ならばdo-whileを使用するべき
あともし負の整数が入力されてしまった場合の例外処理も付け加えるべき
負の整数だけじゃなくて0もね。
まぁ上の事も踏まえて書いてもぜんぜん美しいプログラムではないし あとは頭ひねって考えて 寝る
807 :
746 :2006/01/07(土) 08:31:18
>>784 ありがとうございます。
これを元に頑張ってみます。
808 :
デフォルトの名無しさん :2006/01/07(土) 11:03:48
[1] 授業単元: 並列数値シュミレーション [2] 問題文(含コード&リンク): 地球の公転運動のシュミレーション。 ●時間刻を1日として1000年分の計算を行い、また公転運動の軌道を表示する。 ●計算精度チェックのために、半径の時間変化を表示する。時間刻を変化して計算を繰り返し、最大半径と最小半径の差と時間刻の関係を図示する。 ●さらに時間刻を大きくしたときに、計算が破綻する時の時間刻を求める。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] 言語: C [4] 期限: 1月20日 [5] その他の制限: gnuplotで動かして表示する。 ・・・お手上げ状態です。
809 :
808 :2006/01/07(土) 11:05:56
定数は 太陽質量 1.989e30 kg 地球と太陽との距離 1.496e11 地球の質量 5.974e24 kg 万有引力定数 6.672e-11
シュミレーション シュミレーション シュミレーション シュミレーション シュミレーション
811 :
デフォルトの名無しさん :2006/01/07(土) 12:06:20
※<無効な文字>の場合はエラー表示して終了とする 状態[入力文字数0] ↓<母音> ・出力して状態[入力文字数0]へ 状態[入力文字数0] ↓<子音> 状態[入力文字数1] ↓<母音> ・有効な組み合わせなら出力して状態[入力文字数0]へ ・無効な場合エラー表示して終了 状態[入力文字数1] ↓<子音> 状態[入力文字数2] ↓<子音> ・無効なのでエラー表示して終了 状態[入力文字数2] ↓<母音> ・有効な組み合わせなら出力して状態[入力文字数0]へ ・無効な場合エラー表示して終了 もまえら馬鹿ばっかりだな 状態なんて入力文字数0,1,2の3つしかねーじゃねーかw
>>808 半径が変化するということは太陽の位置変化も考えるのか。
物理苦手だ…。
>>813 惑星の公転は楕円軌道を取るってことだと思うが太陽の位置変化なんてあったけ?
…同じく物理は苦手な人
ああそういうことかw 万有引力で太陽も多少円運動させるのかと思った…。
819 :
796 :2006/01/07(土) 15:35:09
820 :
818 :2006/01/07(土) 15:36:52
あああ間違えたぁぁ orz 座標更新の処理が違うわ…。
821 :
817 :2006/01/07(土) 15:47:01
あら、main直下にゴミコメントが・・・ 消し忘れてた。
822 :
818 :2006/01/07(土) 15:55:19
宇宙船地球号w
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 単純選択法で使う配列は1つで、 しかもデータの最大値についての情報を使わないプログラムを完成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月11日 [5] その他の制限: なし よろしくおねがいします
826 :
デフォルトの名無しさん :2006/01/07(土) 16:43:10
>>825 あれ、このソース *( ptr + k ) とか書いてんな。ptr を変えるわけでもないのに…… ミ゚仝 ゚ ミ
828 :
霊魂 :2006/01/07(土) 16:46:55
>>826 お前も死ね!
――なんて書いても誰もわからねえだろうなあ。 ミ゚〜 ゚ ミ
>>830 調べてる暇があったらコーディングしろよクズ
>>831 スレ荒らしてる暇があったら自分で作れよクズ
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク):倍数の和と個数 [問題]複数個の正の整数データを読み込み( 0 を入力すると終了), 7 の倍数の和及びその個数を出力するプログラムを書け. なお,最後に読み込んだ 0 は,データの個数としてカウントしないものとし, 結果は,和と個数を1つ以上のスペースで区切って出力するものとする. [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0 [3.3] 言語:C++ [4] 期限: 一月中旬 [5] その他の制限:iostreamで始まるものでお願いします。
3 6 7 21 44 0 という入力なら 和 28 個数 2 でいいの?
27
26
837 :
デフォルトの名無しさん :2006/01/07(土) 19:21:47
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): f(x,y)={((2x-y)^2*(x+3y)^2+x+y)/((4x^2+y^2)*(x^2+9y^2)+1)}+arctan(x^2+y^2-1)^2 の最小(極小)点およびその値(最小値)を次の方法で求める: 適当な初期値(x0,y0)から始めてn=0,1,2,3,・・・に対して 1.ynを固定して1変数関数g(x)=f(x,yn)を考え, 黄金分割法により、この最小点をx=xn+1として求める 2.上のxn+1を固定して,1変数関数h(y)=f(xn+1,y)を考え, やはり黄金分割法により,最小点をy=yn+1として求める。 これらを繰り返して,(x1,y1),(x2,y2),・・・を生成し,(xn,yn)がほとんど変化 しなくなったら,これを近似解として返す。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc バージョン? [3.3] 言語: C [4] 期限: 1月9日12:00まで [5] その他の制限: xnとかxn+1→x*nではなくて、xの配列です。みづらくてすみません。 よろしくお願いいたします。
838 :
837 :2006/01/07(土) 19:24:28
すみません arctan(x^2+y^2-1)^2→arctan((x^2+y^2-1)^2) でした。どなたかお願いします
839 :
795 :2006/01/07(土) 20:06:51
>>801 strtokなる物があるとは知りませんでした。ありがとうございました。
840 :
デフォルトの名無しさん :2006/01/07(土) 20:52:41
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): void tohex(long k[]); このようなプロトタイプ宣言に従い、long型の配列を16進数に変換する関数を作成せよ。 また16進数から10進数に変換する関数も作成せよ。 [3] 環境 [3.1] OS:windows XP home [3.2] コンパイラ名とバージョン: gcc 2.9 [3.3] 言語: C [4] 期限: 2006/01/10 [5] その他の制限: 関数は除算を用いずにビット処理を使う。 どうぞよろしくお願いします。
10進数を16進数へって・・ 頭悪いから思いつかないけど ABCDEFの文字はどうするの
833の問題のプログラムをc言語で 中途半端に書いてみた int n[];//読み込んだ正数の入れ子(素数はしらん) int sum,mem,i; sum = mem = 0; for( i=0; i<読み込んだ正数の数; i++){ if((n[i]%7) == 0){ sum += n[i]; mem++; } } printf("和%d 個数%d",sum,mem);
>>840 の問題って渡される配列k[]の個数も未知なの?
846 :
デフォルトの名無しさん :2006/01/08(日) 00:22:12
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
課題2
ファイルを読み込み、英字のみか、先頭が英字で二文字目以降が英字または数字である文字列を抽出し、
辞書順に並べ、その文字列が何行目に現れるか列挙するプログラムを作成したい。
以下の設問にしたがって回答しなさい。
http://edu.net.c.dendai.ac.jp/ad/1/2005/kadai.html なお辞書順とは、文字列の比較法の一つで、文字列の先頭から順に比較していき、
最初に異なった文字の大小関係とします。但し、途中で文字が無くなった場合は無い方が小さいとします。
例
0<9<A<Z<a<z
aaa<aaaa
aaa0<aaa1
[3] 環境
[3.3] 言語: C/C++/Javaのいずれか、WindowsのAPI使用不可
[4] 期限: [2006年1月11日まで]
847 :
833 :2006/01/08(日) 00:45:42
>>834 問題はそのままコピペしただけで答えを聞いたわけじゃないですが
たぶんそういう意味だと思います。
>>846 以下、読み込むファイルの名前を"data.txt"とする。また、#includeは自分で行を分ける事。
1. 3. 6. 7. 自分でどうぞ。
2.
#include <cctype> #include <fstream> #include <iostream> #include <locale> #include <string>
bool extract_word(std::string& line, std::string& word) {
size_t first = 0, last;
while (first != line.size() && !std::isalpha(line[first])) ++first;
if (first == line.size()) return false;
last = first + 1;
while (last < line.size() && std::isalnum(line[last])) ++last;
word.assign(line.begin() + first, line.begin() + last);
line = std::string(line.begin() + last, line.end());
if (word.size()) return true; else return false;
}
int main() {
std::locale::global(std::locale());
std::ifstream ifs("data.txt");
std::string line, word;
int line_number = 0;
while (std::getline(ifs, line)) {
++line_number;
while (extract_word(line, word)) std::cout << word << ':' << line_number << std::endl;
}
return 0;
}
5.は次に続く。
849 :
848 :2006/01/08(日) 01:32:43
5. #include <cctype> #include <fstream> #include <iostream> #include <locale> #include <map> #include <set> #include <string> #include <vector> bool extract_word(std::string& line, std::string& word) { size_t first = 0, last; while (first != line.size() && !std::isalpha(line[first])) ++first; if (first == line.size()) return false; last = first + 1; while (last < line.size() && std::isalnum(line[last])) ++last; word.assign(line.begin() + first, line.begin() + last); line = std::string(line.begin() + last, line.end()); if (word.size()) return true; else return false; } int main() { std::locale::global(std::locale()); std::map<std::string, std::set<int> > m; std::ifstream ifs("data.txt"); std::string line, word; int line_number = 0; while (std::getline(ifs, line)) { ++line_number; while (extract_word(line, word)) m[word].insert(line_number); } for (std::map<std::string, std::set<int> >::const_iterator first = m.begin(), last = m.end(); first != last; ++first) { std::cout << first->first << ':'; for (std::set<int>::const_iterator line_first = first->second.begin(), line_last = first->second.end(); line_first != line_last; ++line_first) std::cout << *line_first << ' '; std::cout << std::endl; } return 0; } 変更点は次に。
850 :
848 :2006/01/08(日) 01:33:41
【変更点】 1. std::map<std::string, std::set<int> >に結果を一度格納するようにした。 理由:そうすれば、辞書順の並べ替えはstd::string<>のoperator<()に従って自動的に行われる。 2. 行番号の格納はstd::set<int>によって行った。 理由:そうすれば、std::set<>::insert()によって自動的に重複の回避が行われる。 3. std::map<std::string, std::set<int> >を辿ることによって出力を行うようにした。 理由:そうすれば、自動的に辞書順に出力される。 以上。
>>843 本気で言ってるのか? 寝惚けてただけなら
>>840 をよく読め。
何も分かってないタコが自分で問題考えてわけも分からず聞いてるって分かるから
>>840 質問が山程。
> long型の配列を16進数に変換する関数を作成せよ。
配列を変換ってどういうこと?それぞれの要素を次々に変換?
ターゲットの型は?文字列?
引数の配列の要素数はどうやって取得するの?
変換したものはどうするの?格納?だとしたらどこへ?それとも出力?にしてもどこへ?
> また16進数から10進数に変換する関数も作成せよ。
同上。
853 :
848 :2006/01/08(日) 02:00:15
間違えた。 - std::locale::global(std::locale()); + std::locale::global(std::locale(""));
>>840 こんな感じか?
#include<stdio.h>
//10進数 9桁位までにしとくのが無難
long a[]={111111111,222222222,333333333,0};
void tohex(long k[])
{
int i=0,j=0;
long tmp;
char hex[8];
while(1){
tmp= k[i];
if(!tmp)break;
printf("\n%d ",tmp);
for(j=0;j<8;j++)hex[j]= 0x20;//空白で初期化
j=0;
while(1){
if((tmp & 0xf)<10){
hex[7-j++]= '0'+(tmp & 0xf);
}else{
hex[7-j++]= 'a'+(tmp & 0xf)-10;
}
tmp>>=4;
if(!tmp){
printf("%8s",hex);
break;
}
}
i++;
}
}
つづき int main(void) { tohex(a); return 0; }
>>840 >16進数から10進数に変換する
こーゆー事だと思ったのだが、違うのか?
void toBCD(long iHex,char* pResult,int len){
while(len--){
char d = iHex % 10;
iHex /= 10;
d += iHex % 10;
iHex /= 10;
*pResult++ = d;
}
}
857 :
553 :2006/01/08(日) 09:20:19
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
Web ページの探索アルゴリズム
1.文字列操作を使ったURLの比較アルゴリズムの作成
2.HTML文書からハイパーリンクを抽出するアルゴリズムの作成
3.Webページの構成を解析するアルゴリズムの作成
という問題です。
詳しくは
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1401.txt [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C言語
[4] 期限: 1月10日まででお願いします。
以前、553としてお願いしたんですが、まだできていません。
誰か教えてくだっさい。よろしくおねがいします。
>>856 longとかに納められている整数を「16進数」というだろうか?
あとwhileのなかで剰余算と除算を2回ずつやってるのはなんで?
まあそれは置いといて、
これを、除算を用いないでビット処理でやるようにすればいいのかな。
逆数を取って、かけ算するのかな。
そういえば割り算しないで逆数を取る方法ってのを、
どっかでみたことがあるなあ。
>>840 は「long 型は本質的に10進数なのだ」と信じ込んでいるだけだと思う
で、16進数表現で表示する必要があって、自分でそういう問題を作ったのだろう。
たぶん、printf のフォーマットで 16 進法の出力ができることも知らないのだろう。
>>840 >このようなプロトタイプ宣言に従い、long型の配列を16進数に変換する関数を作成せよ。
>また16進数から10進数に変換する関数も作成せよ。
はなちょうちん吹いたw
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク):複数個の整数データを読み込むものとする。 その和が88を超えるか,または,読み込んだデータの個数が12個になった時点でデータの読み込みを中止し, 読み込んだデータの和と個数を出力するプログラムを書け。 結果は,和と個数を1つ以上のスペースで区切って出力すること。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC6.0 [3.3] 言語:C++ [4] 期限: 一月下旬 [5] その他の制限:特になし よろしくお願いします。
863 :
デフォルトの名無しさん :2006/01/08(日) 15:05:32
>>863 void record(double x[N],double y[N]){
Nいらないんじゃねぇの?
>>862 for(i=0;i<12;i++){
scanf("%d",&num);
sum+=num;
if(sum>88)
break;
}
読み込み元は標準入力ストリーム #include <stdio.h> #include <conio.h> int main() { int count,sum=0,temp; for(count=0;count<12;count++){ if(sum>88) break; printf("整数値 :"); scanf("%d",&temp); sum+=temp; } printf("入力された値の個数は%d\t総和は%dでした\n",count,sum); getch(); return 0; } これでいいだろうか
>>864 それだと最初に89以上が入力された時
forのi++が実行されずにbreakされちまうからだめだべ
iを個数として使わなかったら余計な指定だけど
>>866 そこまで分かってなんで表示するときに1足すことを思いつかなかったのか。
>>867 最後に1足したらもし12個いっぱいいっぱい入力された場合13になるぞ?
言い訳は美しくない
ならんだろう i < 12 だから 0 から 11 までで終わり。
あと俺
>>964 じゃない
870 :
863 :2006/01/08(日) 16:07:56
ん、 うちの環境では iは12になっちまうがな・・ 俺が間違ってたらごめんよ
>>871 ああ、個数も表示するという問題だったのか。
完全に僕の間違いです。ごめん。
873 :
デフォルトの名無しさん :2006/01/08(日) 16:25:31
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):headコマンドを実装せよ [3] 環境 [3.1] OS:WinXP [3.2] BCC [3.3] 言語:C言語 [4] 期限: 2006/01/10 という事で↓のソースで、headコマンドらしいものはできました。その後、教授からの課題で、 1:指定できる行数に上限を設ける(255行) 2:入力された文字列数のチェック(一つか二つのみ許可するようにして、エラーの場合はメッセージを表示
874 :
デフォルトの名無しさん :2006/01/08(日) 16:27:26
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 255 int main(int argc,char *argv[]) { FILE *fp = stdin; int i; int c; int line = 10; /*例外処理*/ for(i = 1;i < argc;i++) { if(!strncmp(argv[i],"-",1)) { if(sscanf(argv[i] + 1,"%d",&line)!= 1) { fprintf(stderr,"入力フォーマット:head[表示させたい行数][ファイル名]\n"); exit (1); } }else if(NULL == (fp = fopen(argv[i],"r"))) { fprintf(stderr,"ファイルが見つからなかった>,%s\n",argv[i]); exit (1); } }
875 :
デフォルトの名無しさん :2006/01/08(日) 16:28:21
>874の続きの部分です /*正規処理*/ for(i = 0;i < line && (c = fgetc(fp)) != EOF;) { if(c == '\n') { i++; } putchar(c); } fclose(fp); fflush(stdin); getchar(); return 0; }
876 :
デフォルトの名無しさん :2006/01/08(日) 16:30:15
>874でカキコした者です。わからないところを書いてみました。 何度もすみません。 1に関しては、#defineで、255を指定してやればいいって事までは、わかったのですが、そのソースをどういった感じで書いて、 例外処理のどこにかけばいいのかわかりません・・・もしくは、1のところだけ別関数にしてしまってmainに呼ぶって事も考えたんですが 情け無いことに、関数の呼び出しがいまいちわかってないです_| ̄|○ できれば、255行を超えているかどうかをチェックする機能を持つ、関数をつくりそれをmainに呼びだす方法を教えていただければ と思います・・・ 2に関しては、どうしたらいいのかわかりません 本当に申し訳ないのですが、よろしく御願いします。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 8 3 9 5 4 2 1 6 これをクイックソート法のプログラムで完成せよ [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 2006年1月13日 [5] その他の制限:前スレで聞いたんですけど、質問に答えてなかったのでもう一回 (1) qsortの使用可否→否 (2) 「完成せよ」とはどういう意味か。整列せよという意味か?→整列せよっていう意味です (2-1) 整列するとすれば昇順(小さい順)か降順(大きい順)か?→昇順です
【質問テンプレ】 [1] 授業単元:情報処理U [2] 問題文(含コード&リンク): オセロを自動実行させるプログラムを作れ。 一手ごとに表示を止め、石を置いた場所の情報を表示するようにせよ。 なお、手は相手の石を最もひっくり返せるような手を選ばせるようにすること。 複数の手がある場合には任意の手でよい。 [3] 環境 [3.1] OS:Windows [3.2] VC 6.0 [3.3] 言語: C [4] 期限:今年中 お願いします。 盤面を一手ごと表示して、駒は●○をつかうらしいです。
>>876 (2)の”入力された文字列”というのはコマンドライン引数のこと?
881 :
SOS :2006/01/08(日) 17:54:05
浮動少数型の引数3つをとり、引数の平均を戻り値とする関数を 書きなさい(関数名や引数名は各自で決定せよ)という問題が宿題 がでたのですが、どう解けばいいか教えてください!
>>879 サンクスです、今度からはまずググってみることにします
>>881 コードを書いてコンパイルしてデバッグすればいいんだ!
>>881 double get_average( double a, double b, double c )
{
return (a+b+c) * 3;
}
885 :
SOS :2006/01/08(日) 18:01:17
>>883 すいません、C言語の授業まったく出てなくてわからないんで
答え書き込んでもらえませんか?あさってテストで同じ問題が
でるらしいのでお願いします!
886 :
SOS :2006/01/08(日) 18:03:21
なんでテンプレも守らない奴の質問に答えてやるんだよ
1] 授業単元:情報処理 [2] 問題文: ある決まった長さの配列stack[ ]を用意し、それに文字データを一つずつ取り込む関数push、 そこから一つずつデータを取り出す関数popを書くことで最も基本的なスタックを実現せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月10日まで] [5] その他の制限: 文字の取り込みにはgetchar( ) 1文字の出力にはputchar( ) というコマンドを使ってよい 宜しくおねがいします
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク):データの数n( n≦100 ),及び,n個の整数データを読み込み, 読み込んだデータを,読み込んだ順番と逆の順番で, 12の倍数だけを出力( n の値は対象としない)するプログラムを書け。 なお,データの最後に出力したデータ数を出力すると共に,各データは1つ以上のスペースを空けて出力すること. [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC6.0 [3.3] 言語:C++ [4] 期限: 一月下旬 [5] その他の制限:特になし。配列の問題です。 よろしくおねがいします。
894 :
デフォルトの名無しさん :2006/01/08(日) 18:28:20
880>>はい、コマンドライン引数です。
>>893 こんな感じでいいだろうか
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int num=101,count=0;
int *arr;
while(num>100){
printf("データの数(100以下):");
scanf("%d",&num);
}
arr=(int*)malloc(sizeof(int)*num);
for(int i=0;i<num;i++){
printf("%d番目に追加する値:",i+1);
scanf("%d",&arr[i]);
}
...続く
... for(int i=0;i<num;i++) if(arr[i]==0){} else if(!(arr[i]%12)){ count++; printf("%d ",arr[i]); } printf("出力した個数=%d",count); free(arr); getch(); return 0; }
>>893 先越されたけどせっかく書いたし貼っておきます。
#include <iostream>
using namespace std;
int main( void )
{
int n;
int data[100];
cout << "Input number of data > ";
cin >> n;
if ( n > 100 )
n = 100;
for ( int i = 0; i < n; ++i )
cin >> data[i];
for ( int i = 0; i < n; ++i )
if ( data[i]%12 == 0 )
cout << data[i] << ' ';
cout << endl;
cout << n << endl;
return 0;
}
しかし 手元の辞書には 倍数←→約数とあって 約数の定義が1以上の自然数なんだがどうだろうか・・・
899 :
856 :2006/01/08(日) 19:35:33
今見るとバグってるな。 そのままにしておくと 気持ち悪いから修正しておく。 void toBCD(long iHex,char* pResult,int len){ while(len--){ char d = iHex % 10; iHex /= 10; d += (iHex % 10)*16; iHex /= 10; *pResult++ = d; } } スレ汚しスマソ。
>>878 #include <stdio.h>
int*i,p,t,a,d,v,m[91]={-10,-9,-8,-1,1,8,9,10},s,n,x,w;int k(){if(m[p]==0)for(i=
m;*i;i++){for(v=p+*i;m[v]==9-t;v+=*i);if(v-p-*i&&m[v]==t){s=a=v=p;do d?m[v]=t:n
++,v+=*i;while(m[v]-t);--n;}}return 0;}void c(){for(w=p=8,x=d=0;++p<82;)n=0,k()
,x<n?w=p,x=n:0;d=9;p=w;printf("%d:%d,%d",t-6?1:2,p%9,p/9);}int main(){for(m[40]
=m[50]=s=t=3,m[41]=m[49]=6;s-1;a=d=0){for(p=8;++p<82;printf("・\0○\0●\0\n"+m[
p]))p%9?k():(m[p]=9);getchar();for(a?d=a=p=9:s?s=0:s++;a==9;k())c();t=9-t;}}
>>892 #include <stdio.h>
#define STACKSIZE 512
static int iStackIndex = 0;
static char stack[STACKSIZE];
int push(char iData){
if(iStackIndex < STACKSIZE){
stack[iStackIndex++] = iData;
return iData;
}
return EOF;
}
int pop(){
if(iStackIndex){
return stack[--iStackIndex];
}
return EOF;
}
続き int main(){ int c; print("文字を入力\n"); while((c=getchar()) != EOF){ if(push(c) == EOF){ print("スタックが満杯です\n"); break; } } print("文字を出力\n"); while((c=pop()) != EOF){ putchar(c); } return 0; }
903 :
デフォルトの名無しさん :2006/01/08(日) 21:15:24
1] 授業単元:情報処理 [2] 問題文:main(){ int i,price[3]; price[0]=400; price[1]=500; price[2]=300; for(i=0;i<3;i++){ printf("%d\n",price[i]); } } 上記の合計金額を算出するように修正せよ(forループを用いる事) という問題です。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月10日まで] [5] その他の制限:特にありません 。 よろしくお願いします。
>>903 #include <stdio.h>
int main(void) {
int i, price[3], sum = 0;
price[0] = 400;
price[1] = 500;
price[2] = 300;
for (i = 0; i < 3; i++) {
sum += price[i];
}
printf("%d\n", sum);
return 0;
}
ここ見てニヤニヤしてる先生も多いんだろうな
先生様ってのはプライド高いから専門の板なんて来ないよ
ま、実際の面倒見てる助手どもはここみてるの多いがな。
908 :
デフォルトの名無しさん :2006/01/08(日) 21:38:46
学校で院生の人にプログラミングについて質問したら、 教授に聞いてくるからちょっと待っててっていわれました!
私では
>>895 のは読めないので
>>897 を解答用に少し手直しして送信したのですが
「5 12 24 36 40 50」と入力した場合
>>897 で出てくる答えは「12 24 36 5」ですが、正しい答えは「12 24 36 3」でした。
cout << n << endl; のnを直せばいいと思うのですが何に変えればいいかがわかりません。
手直しお願いします。
大学で渡された資料見ても似たようなものが一つも無くて何の役にも立たないorz
911 :
デフォルトの名無しさん :2006/01/08(日) 22:11:35
[1] 授業単元:情報処理演習U [2] 問題文: 3つの浮動少数型変数のポインタを引数にとり、引数のポインタの 内容の平均を4番目の引数のポインタの内容に代入する関数を 書きなさい(関数名や引数名は各自で決めてよい)という問題です。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年1月11日まで] [5] その他の制限:特にないです 。 お願いします。
>>909 そういう意味か。
プログラミングの前に正しく人にものを伝えられる文章の書き方を勉強するべきだ。
#include <iostream>
using namespace std;
int main( void )
{
int n;
int n_output = 0;
int data[100];
cout << "Input number of data > ";
cin >> n;
if ( n > 100 )
n = 100;
for ( int i = 0; i < n; ++i )
cin >> data[i];
for ( int i = 0; i < n; ++i )
if ( data[i]%12 == 0 ) {
cout << data[i] << ' ';
++n_output;
}
cout << endl;
cout << n_output << endl;
return 0;
}
void install_sum( double *a, double *b, double *c, double *result ) { *result = (*a+*b+*c)/3; }
穴埋め式の問題を出す教授は、我々解答者は穴埋め問題にやる気が出ない という心理を見透かしているのであろうな。
917 :
893 :2006/01/08(日) 23:06:14
>>912 ありがとうございます。
問題は出されたものをそっくりそのまま書いているので私には何とも・・・。
手直ししたのは12の倍数が11の倍数になっていることもあるのでそれを変えただけです。
>>909 で正しい答えは「12 24 36 3」と書きましたが正しくは「36 24 12 3」でした。
逆に並べる書き方は過去にも似たようなものがあったのでそれくらいは自分で考えてみます。
無理だったときはまたよろしくお願いします。
918 :
デフォルトの名無しさん :2006/01/08(日) 23:10:13
>>844 質問:
1. int QueueAlloc(Queue *q)は何を返すのか?
2. int QueueEnque(Queue *q, Node *x)は何を返すのか?
920 :
919 :2006/01/08(日) 23:17:30
追加: 3. QueueInit()はQueueAlloc()とで、コメントでは行う仕事が被っているが、 どう処理すべきか?
>919 1,2 整数。 3センセに確認する。 横からチャチャ入れてるだけなので、マジにとらないでね。
>>919 いまいち説明してくれないんでよくわからないんですが
1と2に関してはエラー時(メモリ確保に失敗したなど)に-1を返し
正常時には0を返すみたいです。
3については僕も一緒に感じるんですが
QueueAllocはq->frontなどにNodeの大きさ分メモリ確保するものだろうと考えて進めてます。。
923 :
919 :2006/01/08(日) 23:56:01
>>922 穴の部分だけ。整形はそっちで。QueueAlloc()はその方向で一応作ったけど、使われてないみたいだね。
int QueueAlloc(Queue *q) {
Node *n = AllocNode();
if (n == NULL) return -1;
n->next = q->front; q->front = n;
if (q->rear == NULL) q->rear = n;
q->num++;
return 0;
}
int QueueEnque(Queue *q, Node *x) {
if (x == NULL) return -1;
x->next = q->front; q->front = x;
if (q->rear == NULL) q->rear = x;
q->num++;
return 0;
}
Node *QueueDeque(Queue *q) {
Node *n, *r;
if (q->num == 0) return NULL;
n = q->front; r = q->rear;
if (n == r) q->front = q->rear = NULL;
else {
while (n->next != r) n = n->next;
q->rear = n;
n->next = NULL;
}
q->num--;
return r;
}
int QueueNo(const Queue *q) {return q->num;}
int QueueIsEmpty(const Queue *q) {return q->num == 0;}
>>923 おぉー、ありがとうございます!
あ、でもrearから入れてfrontから出すっていう風みたいにするらしいです。
詳細言ってなくて申し訳ありません。。
これを参考に逆にしてみます。ホントありがとう
925 :
919 :2006/01/09(月) 00:30:43
>>924 だろうね。でないとdequeueが面倒くさい(面倒くさかった)。しかし、君が
QueueAlloc()で"frontに確保"と言っていたから、このようにした。と、文句を
垂れるだけなのも格好悪いので、コードを。
int QueueEnque(Queue *q, Node *x) {
if (x == NULL) return -1;
if (q->rear == NULL) q->front = q->rear = x;
else q->rear = q->rear->next = x;
q->num++;
return 0;
}
int QueueAlloc(Queue *q) {
return QueueEnque(q, AllocNode());
}
Node *QueueDeque(Queue *q) {
Node *r;
if (q->num == 0) return NULL;
r = q->front;
q->front = q->front->next;
if (q->front == NULL) q->rear = NULL;
q->num--;
return r;
}
926 :
デフォルトの名無しさん :2006/01/09(月) 01:30:05
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): @[A君はスーパーに買い物をし、3489円の支払いに対し、5000円払いました。つり銭の枚数をなるべく少なく戻すにはどうすればよいか] A[現在の時刻を24時間表記でキー入力し、午後0時からの経過時間を秒単位で表せ] B[適当な数(秒単位)をキー入力し、○○:△△:□□の形で表示せよ。] ↑時 ↑分 ↑秒 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 明日まで 宿題が終わりません誰か助けてください( ;∀;)
明日っていつだよ
929 :
デフォルトの名無しさん :2006/01/09(月) 01:42:40
私のソフトにはエディタがあります。エディタで編集した内容をあるタイミングで履歴として ファイルに保存してきます。「前へ」「次へ」ボタンで履歴を前後に移動できます。 で、SDIなら簡単なのですが、MDIでエディタが複数あるんですけど、 どんな風にデータを持てばよろしいでしょうか?ちなみに、履歴のリポジトリはエディタ毎に もつんじゃなく、一つにしたいんです。 かれこれ2年悩んでいます。 プログラムが一番シンプルになるデータ構造を教えてくれたら幸いです。
>>926 1番
#include <stdio.h>
int main(void) {
int p, count, change = 5000 - 3489, cur[] = {10000,5000,2000,1000,500,100,50,10,5,1};
for (p = 0; p < sizeof(cur) / sizeof(cur[0]); ++p) {
count = 0;
while (change - cur[p] * count >= 0) ++count;
--count;
printf("%d円:%d枚\n", cur[p], count);
change -= cur[p] * count;
}
return 0;
}
前日の正午からの経過時間とも解釈できるな。ちゃんと説明して。
>>926 とりあえず3番も
#include <stdio.h>
int main(void) {
int t, c = 0;
scanf("%d", &t);
while ((t -= 3600) >= 0) c++;
t += 3600;
printf("%2d:", c);
c = 0;
while ((t -= 60) >= 0) c++;
t += 60;
printf("%2d:%2d", c, t);
return 0;
}
>>929 リポジトリ構造体を作る
リポジトリ構造体内にファイルを所属させる
ファイルごとに履歴構造体を持つ
>>931 別ウィンドウで履歴一覧がでるのですが、エディタ毎にもつと都合が悪いので、
なるべく一つにして、共有させたいと思っているのです。
>>935 ありがとうございます。ちょっと私の頭では理解できないので、
しばらく考えてみます。
>>926 2番
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[9];
int time;
printf("現在の時刻を24時間表記(○○:△△:□□の形)でキー入力せよ\n");
scanf("%s", buf);
buf[2]=0;
buf[5]=0;
buf[8]=0;
time=atoi(&buf[0])*3600;
time+=atoi(&buf[3])*60;
time+=atoi(&buf[6]);
printf("%d",time);
}
>>938 そこまで大げさなことしなくても。
#include <stdio.h>
int main(void) {
int h, m, s;
scanf("%d:%d:%d", &h, &m, &s);
printf("%d", 3600 * h + 60 * m + s);
return 0;
}
[1] 授業単元: プログラミングT [2] 問題文(含コード&リンク): マージソートについて [3] 環境 [3.1] OS: XP [3.2] BCC 5.5.1 [3.3] C [4] 期限: 2006 1 17 [5] その他の制限: 2bit環境 intの大きさは4byteです 課題がマージソートを実装せよと言うものでして 頭を捻って記述した関数が以下になります。 void marge2(int *arr,int num) 機能 arrの値をソートします int *arr ランダムな値が格納された配列へのアドレスを指定します。 int num arrの要素の個数を指定します。
こちらが関数のソースになります。 void marge2(int *arr,int num) { if(num==1) return; marge2(arr,num/2); marge2(&arr[num/2],num-num/2); printf("%d,",num); int *copy=(int*)malloc(sizeof(int)*num),*half=©[num/2]; int left=num/2,right=num-left; for(int i=0;i<num;i++) copy[i]=arr[i]; for(int i=0;i<num;i++) if((copy[num/2-left]<=half[num-num/2-right])&&(left>0)){ arr[i]=copy[num/2-left]; left--; }else if((half[num-num/2-right]<=copy[num/2-left])&&(right>0)){ arr[i]=half[num-num/2-right]; right--; } free(copy); return; } 配列に格納されている数値が30000以下の場合正常にソートされているようなのですが、 試しに100000以下のランダムな値が格納された配列を指定してソートしますと、なぜか上手くソートされていません。 (因みにこの関数を実行した場合arrにはソートされて数値が格納されています。) 原因がわかる方はいますでしょうか・・
942 :
940 :2006/01/09(月) 03:46:11
[5] その他の制限: 2bit環境 intの大きさは4byteです →32bitでしたorz あと参考にならないかもしれませんが、乱数発生器にMTを使用し以下の方法でarrを初期化しました for(int i=0;i<100;i++) //arrの配列の個数が100個の場合 arr[i]=(genrand_int31()+1)%30000; ←ここを100000にしてソートするとなぜか期待された動作がしない!
943 :
デフォルトの名無しさん :2006/01/09(月) 03:51:34
[1] 授業単元: [2] 問題文 Triple-DES-CBCの実装 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: lsic86 [3.3] 言語: C [4] 期限: 2006年1月10日 [5] その他の制限: 特になし すみません。よろしくおねがいします。
944 :
940 :2006/01/09(月) 03:55:25
945 :
デフォルトの名無しさん :2006/01/09(月) 04:05:43
[1] 授業単元: [2] 問題文 headコマンド実装 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限: 2006年1月10日 「引数」コマンドラインで-Lnで行数とfilenameを渡します。
946 :
デフォルトの名無しさん :2006/01/09(月) 04:07:42
int main(int argc,char *argv[]) { FILE *fp = stdin;/*ファイルポインタの宣言及び、*/ int i;/*配列の添え字*/ int c; int line = 10;/*デフォルトの行数*/ int max = MAX_LINE;/*指定行数の上限*/ /*例外処理*/ for(i = 1;i < argc;i++) { if(!strncmp(argv[i],"-",1)) /*i番目に格納された文字列の比較*/ { if(argv[i] > max) { printf("指定できる行数の上限は255行までです\n"); } if(sscanf(argv[i] + 1,"%d",&line)!= 1) /*i番目の次に格納された文字列が1と等しくない場合は・・・*/ { fprintf(stderr,"入力フォーマット:head[表示させたい行数][ファイル名]\n");/*メッセージ表示*/ exit (1);/*処理の強制終了*/ } }else if(NULL == (fp = fopen(argv[i],"r"))) /*ファイルを開き、ファイルポインタに読み込み、空かどうかを評価*/ { fprintf(stderr,"ファイルが見つからなかった>,%s\n",argv[i]);/*該当ファイルが見つからなかった場合は*/ exit (1); /*処理を強制終了させる*/ } }
947 :
デフォルトの名無しさん :2006/01/09(月) 04:11:15
この例外処理の部分で、指定できる行数を255行までにしろという事で、 if(argv[i] > max) { printf("指定できる上限は255行までです"); } というところで、移植性のないポインタ変換というエラーメッセージが表示されるのですが どうすればいいのでしょうか・・・
int型にキャストしてみればどうだろうか
駄目だな atoi(argv[i])だ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):複利計算により、元金が10年で2倍になる年利率をニュートン法を使って求めよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:[2006年01月11日] [5] その他の制限:特になし
951 :
デフォルトの名無しさん :2006/01/09(月) 04:29:23
>948様 >949様 アドバイスありがとうございます if ((atoi(argv[i])) > max) { printf("指定できる行数の上限は255行までです\n"); exit(1); } で、コンパイルは通るようになったんですが、255行以上の指定をしても、エラーの表示がでません _| ̄|○ ロジック自体が間違っているのでしょうか・・・
int max = MAX_LINE; はこの場合 int max=255; if(!strncmp(argv[i],"-",1)) /*i番目に格納された文字列の比較*/ { if(argv[i] > max) { のロジックを atoi(&argv[i][1])>max にするべき 多分
>>953 そもそもVKKってなんだよ?
このスレにエスパーいねーぞ
%e→%fにでも あとファイルIOは必ずファイルが開けなかった時の動作を記述するべき そんな事より940わかる方はお願いしますorz
956 :
デフォルトの名無しさん :2006/01/09(月) 04:47:47
>952様 int max = MAX_LINEのMAX_LINEは既に#defineで255と定義済みなので、問題ないかと思うのですが 使い方が間違ってるのでしょうか・・・ また、952様のアドバイスどおりに変えてみたのですが、やはり同じでした
>>956 正直読む気なくてあれだったけど
if(!strncmp(argv[i],"-",1)) /*i番目に格納された文字列の比較*/
{
if(atoi(&argv[i][1]) > max)
printf("指定できる行数の上限は255行までです\n");
として
hoge -275 nurupo.txt
とすると
指定できる行数は〜って飛んでくれるみたいよ
ちゃんと引数に-をいれてるかね
958 :
デフォルトの名無しさん :2006/01/09(月) 05:02:48
>>958 ちゃんと自分の環境では
hoge -267 nurupo.txtとするとエラー吐いてくれる様だね
あとコマンドラインの引数の個数だけど
int main(int argc,char *argv[])
argcに引数の個数
実際特殊で引数をしてなくても自分の位置を引数として1個とっている。
であるから、hoge -1 nurupo のように起動した場合
自分の位置(パス)
-1
nurupo
と引数が3個と認められargcには3が入るはずである。
この場合headが受けられる引数の限界は
head -n filename
自分のパス
-n
filename
の3個のみであるので、
もし引数が不正であった場合if(n!=3) exit(-1);
としてしまえばいいだろうか
やべ眠くて思考まわんなす^ω^; 支離滅裂な説明風味でごめんよorz
962 :
デフォルトの名無しさん :2006/01/09(月) 05:27:36
>959様 何から何までご丁寧に本当にありがとうございます。 行数のほうはきちんと動くようになりました。 こんな遅い時間にまでお付き合いいただき本当にありがとうございます
[1] 授業単元:人工知能 [2] 問題文(含コード&リンク): 13台分の車両の長さの線路とその中心に3台分の転車台(くるっと回して向きを反転させる)があり、その上 に、1台の機関車と1〜7の番号が付けられた7台の客車の8両編成の列車が最初は右向きに配置されているとする。 この状態から転車台を使って、左向きに配置された状態(左から順に、機関車、客席1、2、‥)にする問題を 考える。ただし次のようなルールがある。 ・機関車と客車は自由に切り離し可能であり、1回の転車で可能な台数は1〜3台である(ただし、線路の長さの関係 で、どんな状況でも1〜3台可能というわけではないことに注意。) ・転車台で向きを反転させる部分の中に、必ず機関車が含まれていなければならない。 ・機関車には前後の向きはあるが、客席にはない。 目標状態に至るまでの手順を縦型探索、横型探索、A*アルゴリズムにより探索するプログラムを作成せよ。 ヒューリスティック値は各自でいろいろ設定してみて、最適なものを探してみること。また、状態を保持する リストは配列のように保持可能な要素数が固定されているものでなく、ポインタなどを利用して保持可能要素数を 動的に変更可能なものを使用すること。 [3] 環境 [3.1] OS:WindowsXP [3.2] borland bcc55 [3.3] 言語: C言語 [4] 期限: 1/19 初期状態 +++++++++++++++++++++++++++++++ |7|6|5|4|3|2|1|機関車| +++++++++++++++++++++++++++++++ |←5台分→|←3台分 →|←5台分→| 初期状態から転車させた状態 +++++++++++++++++++++++++++++++ |7|6|5|4|3|機関車|1|2| +++++++++++++++++++++++++++++++ 目標状態 ++++++++++++++++++++++++++++++++ |機関車|1|2|3|4|5|6|7| ++++++++++++++++++++++++++++++++
964 :
デフォルトの名無しさん :2006/01/09(月) 07:02:34
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 下記参照 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++ [3.3] 言語:C言語 [4] 期限:2006年1月11日15時まで [5] その他の制限: 特になし (1)「2進数」⇔「10進数」変換するプログラムを作りなさい。 (2)(1)から「16進数」に変換できるようにプログラムを拡張しなさい。
またお前か
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク):CPUの動作速度を表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows(NT/2000/XP/2003) [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:[2006年1月10日午前11時] [5] その他の制限:特になし(コンソールアプリで充分だそうです)
問題写し間違えました 「CPUの動作クロック」です すみません よろしくおねがいします
>>966 #include <Windows.h>
#include <stdio.h>
int main(void)
{
unsigned long l, h;
_asm{
cpuid
rdtsc
mov l, eax
mov h, edx
}
Sleep(1000);
_asm{
cpuid
rdtsc
sub eax, l
sbb edx, h
mov l, eax
mov h, edx
}
printf("%I64d\n", (__int64)h << 32 | (__int64)l);
return 0;
}
マテ。なぜ news7?
974 :
837 :2006/01/09(月) 10:47:50
○○法で求めよって問題は、その方法がわかっていても説明がない場合は答えない あっても答えないことの方が多いが
ワロタ
return 関数の呼び出しと 3というポインタの参照か。
>>884
979 :
デフォルトの名無しさん :2006/01/09(月) 14:55:36
>>978 平均だから (a + b + c) / 3
#include <stdio.h>
#include <math.h>
double get_av(double a, double b, double c); //プロトタイプ宣言
double get_av(double a, double b, double c{
return( (a + b + c) / 3);
}
main(){
double a, b, c;
double ans;
printf("浮動少数型の引数入力\n")
scanf("%d%d%d", &a, &b, &c);
ans = get_av(a, b, c);
printf("%lf", &ans);
}
980 :
デフォルトの名無しさん :2006/01/09(月) 14:56:39
scanf("%d%d%d", &a, &b, &c); ↓ scanf("%lf%lf%lf", &a, &b, &c);
>>979 × printf("%lf", &ans);
○ printf("%lf", ans);
>>979 メイン関数より上に書くならプロトタイプ宣言いらないんじゃね?
あとmath.h不要じゃね?
プロジェクト '2ch - Win32 Debug' 用の中間ファイルおよび出力ファイルを削除しています。
--------------------構成: 2ch - Win32 Debug--------------------
コンパイル中...
770.cpp
d:\program\win32\2ch\770.cpp(6) : error C2143: 構文エラー : ')' が '{' の前に必要です。
d:\program\win32\2ch\770.cpp(16) : error C2146: 構文エラー : ';' が、識別子 'scanf' の前に必要です。
d:\program\win32\2ch\770.cpp(22) : warning C4508: 'main' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
cl.exe の実行エラー
2ch.exe - エラー 2、警告 1
なんか今になって話題になってるな。 テンプレに従わない質問者に小さなはったりをかましただけだったのだが。
しかもちゃんと笑いどころがわかってるヤツと寝ぼけてるヤツがいるな…
ネタにマジレス返してる979
987 :
デフォルトの名無しさん :2006/01/09(月) 15:47:12
985 == 986
低脳ほど教えたがりな罠
ここですか?884をフォローするスレというのは?
987 == 979
992 :
デフォルトの名無しさん :2006/01/09(月) 15:53:20
俺的には
>>978 がかなりファンキーだと思うんだけど
みなさんはスルーですか。
ベタだな。
スタイルの議論でreturn(...)は関数呼び出しに見える。ってのがあるのでそれを使った。 ポインタの参照は2項演算をわざとスルーしたので、反省している。 こっちのネタもスタイルの議論でよくある a**bって書くな、 a * *bと書け。ってのから発想した。 ベタなのはしょうがないんだ(^^;;
あと2埋め
ネタ回答集とかだれかまとめてくれんかねぇ・・・。
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。