C/C++の宿題を片付けます 56代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 55代目
http://pc8.2ch.net/test/read.cgi/tech/1134128493/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
2デフォルトの名無しさん:2005/12/21(水) 10:40:24
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を入力することで三角関数に対応できるモードに切り替えるようにしたいのです。
自力だとここが限界です。どなたかよろしくお願いします。
5デフォルトの名無しさん:2005/12/21(水) 12:42:45
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
10個の整数の中から最大のものと最小のものを探す
関数をそれぞれ作成し、メインプログラムで与えた
10個の整数の中の最大値、最小値を求めるプログラム
(合計3個の関数から成る)を作成しなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月31日23:59まで
[5] その他の制限: よろしくお願いします。
6デフォルトの名無しさん:2005/12/21(水) 12:48:07
>>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);}}}
7デフォルトの名無しさん:2005/12/21(水) 12:57:43
>>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;
}
8デフォルトの名無しさん:2005/12/21(水) 12:58:48
前スレで指摘された、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] その他の制限: なし

宜しくお願いします。。。
9デフォルトの名無しさん:2005/12/21(水) 12:59:08
>>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
>>6
ありがとうございます!早速試してみます。
11デフォルトの名無しさん:2005/12/21(水) 13:23:08
>>6

ちなみに>>3>>4です><
12デフォルトの名無しさん:2005/12/21(水) 15:11:42
>>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関数で代入してもよい
14デフォルトの名無しさん:2005/12/21(水) 17:36:40
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):http://making-gold-princessmaki.hp.infoseek.co.jp/510.html
計3問
[3] 環境
 [3.1] OS: WindowsXp
 [3.2] コンパイラ名とバージョン: V.C 6.0
 [3.3] 言語:C++
[4] 期限: 早ければ早いほど助かります。
[5] その他の制限:問題文にいくつか記載されています。
よろしくお願いします。
新スレにつき再掲載。m(__)m
15デフォルトの名無しさん:2005/12/21(水) 18:18:36
http://www.econ.kyoto-u.ac.jp/~nakashim/htdocs-unix2/mgp/lect10/Html/index.html
の今日の課題をお願いします!死にそう…ぐふっ
16デフォルトの名無しさん:2005/12/21(水) 19:12:07
>>15
まぁ、>>1 読めや京大生。
17教えてください!!:2005/12/21(水) 19:25:54
問題
標準入力から入力した文字列の順序をさかさまにして標準出力へ表示するCプログラムを10分で作成せよ。たとえばabcと入力するとcbaと出力する。
18デフォルトの名無しさん:2005/12/21(水) 19:26:21
19デフォルトの名無しさん:2005/12/21(水) 19:27:04
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;
}
20デフォルトの名無しさん:2005/12/21(水) 19:31:16
>>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 素敵です
22デフォルトの名無しさん:2005/12/21(水) 19:36:09
23教えてください!!何度でも:2005/12/21(水) 19:39:08
17です
voidを使わないでできないでしょうか?
自分は未熟でvoidを知りません。ごめんなさい
24デフォルトの名無しさん:2005/12/21(水) 19:40:59
>>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)

お願いします
25デフォルトの名無しさん:2005/12/21(水) 19:47:47
条件後出しテラウザス
26デフォルトの名無しさん:2005/12/21(水) 19:48:50
>>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;
}

まぁ問題のレベルから察してやれなかったのも
27デフォルトの名無しさん:2005/12/21(水) 20:14:30
[1] 授業単元:オブジェクト指向
[2] 問題文(含コード&リンク): キーボードから入力した数値の和を求めるプログラムを作成せよ
               ただし、和を表示する関数
               void print_add(int a, int b)
を必ず利用すること、この問題では関数の中で結果を表示すればよい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C言語
[4] 期限: 12月22日9時まで

この課題だけが解らなくて、何卒よろしくお願いいたします。
28デフォルトの名無しさん:2005/12/21(水) 20:22:40
#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;
}
2928:2005/12/21(水) 20:25:58
>>27 の返答が >>28 です。

思ったんだけどこの時期に出る課題って結構授業の最後のほうのやつだよねぇ。
授業名「オブジェクト指向」でこの時期に >>27 とかいう問題ってどうなんだろう。
今学期中にオブジェクト指向の「オ」にさえたどり着かない予感
30デフォルトの名無しさん:2005/12/21(水) 20:32:00
>>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をみたりしてできたのですが
考察に書くことが無くて困ってます。
ヤコビ法では解けずガウスザイデル法では解ける方程式が出されています。
何か書くことでいいことあれば教えてください
32デフォルトの名無しさん:2005/12/21(水) 22:26:45
>>31
> ヤコビ法では解けずガウスザイデル法では解ける
これが何故か書けば?
33デフォルトの名無しさん:2005/12/21(水) 22:30:41
>>32
ありがとうございます
それも書こうと思っていたのですがなぜなのかわからなくて困ってるんです
34デフォルトの名無しさん:2005/12/21(水) 22:34:56
>>33
途中経過を出力するようにしてどこで解けなくなっているかを見るとか、
三元一次や四元一次ならアルゴリズムどおりにて計算で追ってみる
こともできるだろう。
35デフォルトの名無しさん:2005/12/21(水) 22:38:29
前スレの未解決のまとめある?
どれが解決してるのか
よくわからん
36デフォルトの名無しさん:2005/12/21(水) 22:46:23
ガウス・ザイデル法=反復法でぐぐって味噌。
37デフォルトの名無しさん:2005/12/21(水) 23:42:25
>>35
再依頼こなけりゃ放置でいいんじゃね?
38デフォルトの名無しさん:2005/12/21(水) 23:49:36
>>36
うお
ありがとうございます
これでレポート完成しそうです
39デフォルトの名無しさん:2005/12/22(木) 02:06:09
[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年目で、教科書は簡単なものを半分くらいやっています。
40デフォルトの名無しさん:2005/12/22(木) 04:26:10
>>39
できた。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26554
↑"Download as file" のリンクをクリックしてダウンロードしてください

なんかこのスレの課題を解くことで自分の勉強している人がいるみたいだけど、
この課題はおすすめかも。
41デフォルトの名無しさん:2005/12/22(木) 04:59:24
>>39
一応根と係数の関係を使ったプログラムも置いておきますね。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1325.txt
42デフォルトの名無しさん:2005/12/22(木) 06:06:37
[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
>>8
ここにネタがあるから参考にしてCに書き換えればOK
http://pc8.2ch.net/test/read.cgi/tech/1089719714/781
44デフォルトの名無しさん:2005/12/22(木) 07:58:07
>>42
>ポインタのポインタ(参照渡し)を引数とする 
>引数の型はvoidを用いる。 
どっちなんだよ
45デフォルトの名無しさん:2005/12/22(木) 09:13:08
>>42
関数の型はvoidって意味?
46デフォルトの名無しさん:2005/12/22(木) 09:42:42
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分木・ハッシュのどれかを
使用するよう言われています。
48デフォルトの名無しさん:2005/12/22(木) 11:11:01
>>42-46
その場合「引数の型はvoidを用い」はおかしいな
あくまで「引数の型はvoid*を用い」と書くべき
49デフォルトの名無しさん:2005/12/22(木) 12:00:21
[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です
期限は今年までです
51デフォルトの名無しさん:2005/12/22(木) 12:05:37
>>49
#include "stdio.h"

main(){
int i,ans;
ans=0;
for(i=1;i<101;i++) ans=ans+i;
printf("ans=%d",ans);
}
52デフォルトの名無しさん:2005/12/22(木) 12:09:33
[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] その他の制限:特になし
53デフォルトの名無しさん:2005/12/22(木) 12:10:09
>>51
C++ではint main()と書かないといけない。
54デフォルトの名無しさん:2005/12/22(木) 12:18:12
>>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;は省略できるとは言え書く習慣つけておこうや。
55デフォルトの名無しさん:2005/12/22(木) 12:36:45
ここはスタイルの添削スレじゃないぞ。それから、

>C++なら<cstdio>、Cでも<stdio.h>にするべき。
>return 0;は省略できるとは言え書く習慣つけておこうや。

この二つは蛇足だと思う。
56デフォルトの名無しさん:2005/12/22(木) 12:50:55
突飛するとC++ならprintf関数使わずにstd::cout使えとかになるからやめとけ
57デフォルトの名無しさん:2005/12/22(木) 13:23:26
>>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;
}
58デフォルトの名無しさん:2005/12/22(木) 13:24:10

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
%
5939:2005/12/22(木) 14:16:32
>>40 >>41
サンクスです。これで提出できます。しかし2つも作ってくれるなんて・・・
ホント、感謝です
6040:2005/12/22(木) 14:28:42
>>59
>>40 と >> 41 は別の人です
「根と係数の関係」とか知らなかった…。なんだそれ
忘れてるだけかな
6140:2005/12/22(木) 14:35:40
と思ったら名前知らなかっただけで普通のことじゃん。
>>41 のプログラムだと 54x^2-3x-77 = (6x+7)(9x-11) とか
因数分解できないで「不可能」になるよ。
ちゃんとプログラムみてないけど浮動小数点数の誤差とかのせいかな。
6239:2005/12/22(木) 15:20:32
別の人ですか。失礼しました。

何故なんでしょう?やっぱり細かいところになにかあるのかなぁ・・・
わからないですが(汗)
63デフォルトの名無しさん:2005/12/22(木) 15:29:37
宿題おねがいします。
1から9までの階乗の値を例のように表示せよ。
例)Aの階乗はBです
整数nを与えるとn!を計算して返す関数(適当な名前を決めること)を作成し、
mainから、その関数を呼び出して結果を表示すること。
6440:2005/12/22(木) 15:32:42
テンプレ通り必要な情報を書いてくれ。C か C++ かとか。
65デフォルトの名無しさん:2005/12/22(木) 15:33:22
失礼
>>64>>63 に向けてです
66デフォルトの名無しさん:2005/12/22(木) 15:56:59
%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.
%
67デフォルトの名無しさん:2005/12/22(木) 15:59:22
>>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";
}
68デフォルトの名無しさん:2005/12/22(木) 16:13:15
[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] その他の制限: ガウス・ジョルダンを用いることが条件です。

よろしくお願いします。
69デフォルトの名無しさん:2005/12/22(木) 16:29:50
>>68
数学は不得意なんだけど、行列Cが定義されていなくて解けるのか?
それとも、Cを以下のように定義して良いのか?

C=c11 c12 c13
  c21 c22 c23
  c31 c32 c33
70デフォルトの名無しさん:2005/12/22(木) 17:22:21

C=22 −30   x
   0   7  23
 −14  56 −22

ってことじゃないかな?
71デフォルトの名無しさん:2005/12/22(木) 17:35:28
>>70
たぶん、そうですね。

つうか、>>68よそういう大事な所を間違えるなよ!
72デフォルトの名無しさん:2005/12/22(木) 17:49:29
[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
73デフォルトの名無しさん:2005/12/22(木) 17:56:07
>>72
(1)で使った構造体もしくはclassを晒せ。
アルファベットは大文字小文字混同か?
74classはないだろうよ:2005/12/22(木) 18:34:24
>>73
>(1)で使った構造体もしくはclassを晒せ。
テンプレ書いてくれているんだから読もうね。
7572:2005/12/22(木) 18:44:16
>>73
順次ファイルに書き出すだけで構造体やこれといった関数は使ってないです、すみません・・・
アルファベットは大文字だけで良いようです。
76デフォルトの名無しさん:2005/12/22(木) 19:00:55
>>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;
}
7772: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で返す。
7978: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);
80デフォルトの名無しさん:2005/12/22(木) 21:20:16
>>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);
}
81デフォルトの名無しさん:2005/12/22(木) 21:22:02
あ、関数名は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日
8378: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))
を使ってってできませんかね・・・?
84デフォルトの名無しさん:2005/12/22(木) 22:29:17
>>83
意味は全く同じわけだが。
85デフォルトの名無しさん:2005/12/22(木) 22:29:40
>>83
自分でやりゃいいじゃん
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;}
8778:2005/12/22(木) 22:30:50
えと、それでは・・・
double kannsuu(struct point *a,struct point *b)
を書き換えたいんですけど、どうすればいいですか??
88デフォルトの名無しさん:2005/12/22(木) 22:37:02
>>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]);

これでいける
8988:2005/12/22(木) 22:37:43
うは・・リロードしてなかった・・
次からは自分でも頑張ってクレ
90デフォルトの名無しさん:2005/12/22(木) 22:38:16
>>88
a=kannsuu(data);
意味論的にはこっち。
9178:2005/12/22(木) 22:39:42
88さん、親切にどうもです!
ありがとうございました!!
92デフォルトの名無しさん:2005/12/22(木) 22:41:41
>>90
アッー!そですね。
ただ、自分もかなり初心者なんでいかにも配列の戦闘アドレスを渡してます的な書き方しないと
錯乱しちゃうんですよね・・・_| ̄|○
93デフォルトの名無しさん:2005/12/22(木) 22:44:00
>>86
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1326.txt

lexicographical_compareがまずいなら、for文で回せばよい。
94デフォルトの名無しさん:2005/12/22(木) 22:45:59
あ、localeはまずいな・・・・cctypeに直してください。
95デフォルトの名無しさん:2005/12/22(木) 22:52:45
[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

よろしくお願いします。
96デフォルトの名無しさん:2005/12/22(木) 23:30:06
>>86
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1327.txt
比較的新しいgccとかVC7ではtemplate class内での
オーバーロード関数な特殊化もサポートされた気がする。
97デフォルトの名無しさん:2005/12/23(金) 01:13:52
>>95
下を参考にしてみたら。(もう、参照済みかな?)
ttp://www.akita-nct.jp/~yamamoto/lecture/2004/5E/linear_equations/how_to_make_GJ/html/
98デフォルトの名無しさん:2005/12/23(金) 07:08:50
>>52
IE連動なのか?
それなら、HPのURLうちこんで、IEに入力だな
それでランチャーっていってたのか?
もう少し、詳細ない?
仕様がわかりにくいのは、レスされねえからな
99デフォルトの名無しさん:2005/12/23(金) 09:09:17
もう"開く"なんだから、指定されたHPとやらのソケットを作って開きっぱなしにしてやればいいんじゃね
教官も×は付けまい
100デフォルトの名無しさん:2005/12/23(金) 10:04:47
>>97
ありがとうございます。
これはまだ見ていませんでした。参考にしてみます。
101デフォルトの名無しさん:2005/12/23(金) 10:49:52
>>52
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1329.zip
CIEView::OnInitialUpdate()でURLを指定しろ!
102デフォルトの名無しさん:2005/12/23(金) 13:14:28
問題文
データを読み込み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;
}
103デフォルトの名無しさん:2005/12/23(金) 13:20:35
>>102
そのコードは何?教官が作ったものでそれを利用して作れってことか?
104102:2005/12/23(金) 14:18:50
>>103
getcharの戻り値整数を入力数値に一度変換して進数変換するのかなーと思って
即席で作ったコードなんですが、どの道putchar()で変換しろと指定があるので
どうしようかと路頭に迷って作りかけたコードを一応載せていたのです。

多分もっと別な方法があるとは思うんですが・・・。

とりあえず>>102に書いてるコードは無視しててください
105デフォルトの名無しさん:2005/12/23(金) 14:35:11
>>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;
}
106105:2005/12/23(金) 14:36:04
あ、ループして0のとき終了を忘れてた。そこはよろしく。
107105:2005/12/23(金) 14:42:55
<string.h>もいらないじゃん、なにやってんだ俺orz
108102:2005/12/23(金) 14:43:37
>>105,106
今からコード見ながら解析していきます
109デフォルトの名無しさん:2005/12/23(金) 15:01:49
110デフォルトの名無しさん:2005/12/23(金) 15:24:22
>>109
> getchar()
> putchar()
111デフォルトの名無しさん:2005/12/23(金) 15:27:58
しらん。そんなことで文句言う講師なら。文句言ってやれ。
112>>105 == >>110:2005/12/23(金) 15:38:13
>>111
俺は依頼者ではないぞ。ま、どうでもいい話だが。
113デフォルトの名無しさん:2005/12/23(金) 17:41:05
期限:無期限ってなんだよ
114デフォルトの名無しさん:2005/12/23(金) 17:58:02
>>113
>>1
115デフォルトの名無しさん:2005/12/23(金) 18:08:04
[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,
などと出力する。

意外と難しくて悩んでいます。よろしくお願いします。
116デフォルトの名無しさん:2005/12/23(金) 18:24:45
>>114
113さんの質問(疑問?)は妥当かなと思う。
117デフォルトの名無しさん:2005/12/23(金) 18:28:38
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)

そういえば無期限の問題もちらほら
118デフォルトの名無しさん:2005/12/23(金) 18:31:31
>>115
組み合わせが級数的に大きくなりそうだ
119デフォルトの名無しさん:2005/12/23(金) 19:20:26
>>115
Nが10以上の数値も有り?
120デフォルトの名無しさん:2005/12/23(金) 19:25:46
>>119
Nが10以上の数値も有りです。
とりあえず、
1 2 10
1 2 11
1 2 12
のように間に空白入れて、
一行につき一つの組み合わせを出力して頂いても結構です。
121デフォルトの名無しさん:2005/12/23(金) 19:28:48
122デフォルトの名無しさん:2005/12/23(金) 19:49:18
おお!ありがとうございます!!

でもうちの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.)
123デフォルトの名無しさん:2005/12/23(金) 20:02:08
>>122
私の環境ではコンパイルが通りましたけど。
gcc=gcc version 3.3.3 (cygwin special)

124デフォルトの名無しさん:2005/12/23(金) 20:03:24
>>120
解決しました。
22-24行を書き換えたらコンパイル出来ました。
int i;
if(size == 0 || size == 1)
return 0;
i = size - 1;

重ね重ねありがとうございます。
これで安心して彼女とセックスできます。
125デフォルトの名無しさん:2005/12/23(金) 20:06:25
あー、番号間違えてました。
>>121 >>123 さんありがとうございます。
126121:2005/12/23(金) 20:07:01
>>124
ああ、悪かった。
単なる消し忘れだから、そのi = size - 1;も要らない。
127デフォルトの名無しさん:2005/12/23(金) 20:07:38
>>124
オマイ、>>121さんが怒るぞ。
彼女とのセックスは、せめて明日に延ばせ。
128121:2005/12/23(金) 20:15:41
>>127
いや、俺は気にしないよ('A`)
勉強にもなったし('A`)
129デフォルトの名無しさん:2005/12/23(金) 21:57:55
[1] 授業単元: 情報処理 構造体とポインタ
[2] 問題文(含コード&リンク):
(1)下のプログラムで、配列を宣言しないで、calloc関数を使って確保するものに書き換えよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1335.txt
(2)strcpy関数などの文字列操作関数を自分で定義して実行せよ。
[3] 環境
 [3.1] OS:Linux 
[3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: c
[4] 期限:12月31日

よろしくお願いします。
130デフォルトの名無しさん:2005/12/23(金) 22:03:11
ヒントを書くから後は適当に補完してくれ。
(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;
}
131102:2005/12/24(土) 01:51:49
>>114,116
期限が無期限なのは単位等関係なく、自主的に問題集を解いているからです。
故に授業単元などは記載していませんし、テンプレートの無期限が一番該当していると
判断したので無期限を選びました。
宿題じゃねーよ!と言われればそれまでですが、他にこういうスレがないのでここに投稿しました。

>>105-107
返事がかなり遅れましたが回答ありがとうございました。
再帰については今まで使った事がなかったので解析するのにかなり苦労しましたが
何とか処理の流れが繋がった様な気がします。
132102:2005/12/24(土) 01:52:28
アンカーミス
>>114,116×
>>113,116○
133デフォルトの名無しさん:2005/12/24(土) 01:53:58
>>131
自主的にやってるならここで聞かずに自力でやればいいじゃまいか
分からなきゃ他の所を先にやればいいじゃまいか
134102:2005/12/24(土) 02:00:01
>>133
いや、恥ずかしい話だけどこの問題4日ぐらい悩んだ末にここに投稿した

それに人にやってもらったのをできたからとそのままにしてるんじゃなく
自分で納得いくまでコードを解析してるから勉強になる

まあ、甘えるなボケといわれればそれまでだけど('A`)
だからわからないから速攻ここに投稿したわけじゃない
135デフォルトの名無しさん:2005/12/24(土) 02:05:17
>>134
そういうことならスマンカッタ
%o変換指定子つかえばいいじゃまいかと思ったがputcharのみか
普通に手計算で10進→X進の変換するときのを実装すりゃいいんじゃね?
136デフォルトの名無しさん:2005/12/24(土) 02:14:57
>102
俺も以前に3日程悩んでできなかった問題をココで出題したから気持ちわかるよ。
俺も自主的だが、一応課題という事で偽装してたんだけどね。

あと、個人的な事だけど天プレの[1]とか[2]とか付けて欲しいな。
ココの課題も自主勉強のためにやってたりするから、検索し易い。
137135:2005/12/24(土) 02:48:07
>>134
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1337.txt
ついでだから書いてみたが、手抜きしまくってるせいで
びっくりするほどバグありまくるので直してみてくれ
138デフォルトの名無しさん:2005/12/24(土) 05:38:52
>>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行をデフォルトにする
 方法がわかりません。ポインタをまだ理解できていないので、ファイルポインタの
 使いかたもわかってない状況です・・・
 大変申し訳ないのですが、どなたか教えていただけますでしょうか・・
140デフォルトの名無しさん:2005/12/24(土) 06:32:26
パラメータの取得方法は特に指示なし?
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;
}
143デフォルトの名無しさん:2005/12/24(土) 07:55:23
[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行表示後出力を続行する。
144デフォルトの名無しさん:2005/12/24(土) 12:20:54
OS3種類で動作差異がない様につくれと?
145デフォルトの名無しさん:2005/12/24(土) 12:39:50
http://pc8.2ch.net/test/read.cgi/tech/1134128493/930
そういう疑問を持つ人間か見たいんだろ。
146デフォルトの名無しさん:2005/12/24(土) 12:50:02
意味不明な課題多いな
>>143
-f指定された場合どうやってプログラム終了するんだよ
EOFに到達したら終了するのか?
filename
なに、stderrじゃなくてstdinに出力しろと?
147デフォルトの名無しさん:2005/12/24(土) 12:54:04
tail -fコマンドって普通に [Ctrl]+c とかしないと終わらないけどな。
148デフォルトの名無しさん:2005/12/24(土) 14:25:22
普通に>146が読解力なくて知識がないだけだと思われ。

tail -f については>147だし、stdinについても
>143にちゃんと引き数としてファイルが指定されていないときは標準入力からと書いてあるわけだが。
149デフォルトの名無しさん:2005/12/24(土) 14:53:46
>>148
解答出せ
150デフォルトの名無しさん:2005/12/24(土) 14:57:54
151148:2005/12/24(土) 15:24:45
>>149
なんで? 結構めんどくさいからパスしたいんだけど。
もしあんたが>146ならふぁびょるなよ、と。
152デフォルトの名無しさん:2005/12/24(土) 15:32:23
>>151
146ではない。めんどうならいいや。
153デフォルトの名無しさん:2005/12/24(土) 17:37:27
>>143
-fの仕様が意味不明
入力が全部終わらんと、何も表示できんだろ
154デフォルトの名無しさん:2005/12/24(土) 17:42:32
>>153
それはUnix系OSのtailコマンドと同じ動作だと思われ。
Windowsにもあったような気もするがWindowsはよーわからん。
155デフォルトの名無しさん:2005/12/24(土) 18:05:56
いい機会だからsygwin入れるか、どっかにtelnet接続してtailの動作確認してみれ
UNIXコナンドが便利すぎて離れられなくなるかもよ
156デフォルトの名無しさん:2005/12/24(土) 18:09:04
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の重複しない乱数が必要なのですがどのようにすればいいでしょうか?
配列に保存して処理を行おうと思ったのですが、うまくいきません(´・ω・`)
159デフォルトの名無しさん:2005/12/24(土) 18:51:43
>>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++;
  }
}
160158:2005/12/24(土) 18:56:09
C++ではどのようになりますか?
161デフォルトの名無しさん:2005/12/24(土) 18:58:48
>>157
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1340.txt

「階乗と累乗の計算は各々関数で」ってのが非効率ですが…
教育的配慮なんでしょーかねぇ。
162159 じゃないけど:2005/12/24(土) 19:05:42
>>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;
}
163デフォルトの名無しさん:2005/12/24(土) 19:10:08
>>161
再帰が好きならmy_sinも再帰にすればいいのに......
164デフォルトの名無しさん:2005/12/24(土) 19:17:00
独学の僕にはこのスレは高度で刺激があり助かります。
165161:2005/12/24(土) 19:17:59
>>163
スマソ。そこまで関数型な人間じゃないんだ。
166163: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デフォルトの名無しさん:2005/12/24(土) 23:36:47
168デフォルトの名無しさん:2005/12/25(日) 00:28:16
>>167
先生凄いですね。このソース参考にもらってもいいですよね?
てか張ってあるソース全部コピってるけど平気ですよね。間違いない。
169デフォルトの名無しさん:2005/12/25(日) 00:31:12
コピペすると行番号とか消すのめんどいだろ。
"Download as file" っていうリンクをクリック
170デフォルトの名無しさん:2005/12/25(日) 00:33:45
>>169
うはっwww先生なんですかこの画期的なシステムはwwww
保存できたんですか?もう興奮しちゃってどうしよう(^ω^;)
171デフォルトの名無しさん:2005/12/25(日) 02:14:17
10万行とか100万行とかあるファイルなら使い物にならなさそうですね
172デフォルトの名無しさん:2005/12/25(日) 02:30:27
>>171
そんな宿題ってw
173デフォルトの名無しさん:2005/12/25(日) 02:54:06
可変長配列使っているからC99じゃないと動かない悪寒。
174デフォルトの名無しさん:2005/12/25(日) 03:05:23
確かに。
175デフォルトの名無しさん:2005/12/25(日) 03:43:47
>>143
組んでみたからうpするお。1行が1023文字超えるようなファイルは知ったこっちゃねーお。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1341.txt
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
>>176
permutation再帰関数とは?
178デフォルトの名無しさん:2005/12/25(日) 05:58:33
>>121 あたりの使えばいいんじゃないかな?
179デフォルトの名無しさん:2005/12/25(日) 07:45:20
permutationという再帰関数を自分で作るということか
180デフォルトの名無しさん:2005/12/25(日) 08:35:20
>>176
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1342.txt

関数 try() を 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の課題です
182デフォルトの名無しさん:2005/12/25(日) 11:47:09
> [1] 授業単元: C言語
>  [3.3] 言語: C++

…??? ( ゚д゚)
183デフォルトの名無しさん:2005/12/25(日) 11:50:18
>>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;
}
184183: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]; }
};
185183:2005/12/25(日) 11:53:05
うわ、ミスってる。

× data = new Type[number == 0 ? 1 : number];
○ data = new Type[number == 0 ? 10 : number];
186デフォルトの名無しさん:2005/12/25(日) 11:57:21
>>183
クラス宣言の部分をこう書き換えるだけで良いじゃん。
なんでわざわざ動的確保?

template<class Type, unsigned int number_> 
class MyArray { 
enum{number = number_ ? number_ : 10};
187デフォルトの名無しさん:2005/12/25(日) 12:01:44
動的確保するにしても
MyArray() : data(new Type[number == 0 ? 10 : number])
でしょ
188初心者です。:2005/12/25(日) 12:39:49
>>180
ありがとうございます。とても助かりました。
189デフォルトの名無しさん:2005/12/25(日) 12:40:19
宿題ではないけど今後の参考のために質問させてくだしあ

住所入れる変数ってどれくらい領域確保しとけばOKかな?
190デフォルトの名無しさん:2005/12/25(日) 12:43:14
>>189
動的に確保。以上
191 :2005/12/25(日) 13:05:06
ここでwikiの問題でのエラーとか聞いてもいいですか?
192デフォルトの名無しさん:2005/12/25(日) 13:06:33
スレ違いでした。別スレがあるようなので、そちらに行きます。
193デフォルトの名無しさん:2005/12/25(日) 14:26:16
>>189
std::stringやstd::wstringを使っておく。
194デフォルトの名無しさん :2005/12/25(日) 14:32:01
[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] その他の制限:特になし。
195デフォルトの名無しさん:2005/12/25(日) 14:34:17
******
*8000*
****0*
**000*
*90*0*
******
196デフォルトの名無しさん:2005/12/25(日) 17:58:33
>>194
> 構造体・リストを用いた、迷路空間
これについて詳しく。
197デフォルトの名無しさん:2005/12/25(日) 20:09:36
それを考える問題じゃなくて?
198デフォルトの名無しさん:2005/12/26(月) 07:51:34
構造体・リストを用いて、再帰を用いた迷路空間の探索プログラムを作成せよ。
最短経路と後戻りした記録付き経路のどちらを表示しても構わないが両方表示した方がポイント高し。
という意味です。わかりづらくて申し訳ない。。
199デフォルトの名無しさん:2005/12/26(月) 14:31:41
>「構造体・リストを用いた、迷路空間」を作成せよ。

という問題だから

>構造体・リストを用いて、再帰を用いた迷路空間の探索プログラムを作成せよ。

と勝手に解釈を変えるのはまずいでしょ。
200デフォルトの名無しさん:2005/12/26(月) 15:17:27
とりあえず、初心者の俺が適当につくるから、皆が改造してね。
201デフォルトの名無しさん:2005/12/26(月) 15:28:24
>>199
いあ、迷路空間を実現するプログラムと
探索プログラムの二つ作れってことでしょう?
>>194を読む限りではそう読み取れる
202デフォルトの名無しさん:2005/12/26(月) 16:10:05
おまいら!!!!コンパイルできねーぞ(´;ω;`)
203デフォルトの名無しさん:2005/12/26(月) 16:12:08
>>202
相談に乗ってやらないでもないから詳しく。
204デフォルトの名無しさん:2005/12/26(月) 16:16:10
絶対怒るお・・・。あと20分考えて分からないなら妥協汁して
相談しちゃう(´;ω;`)
205デフォルトの名無しさん:2005/12/26(月) 16:20:02
>>204
漏れは怒りはしない。
多分しないと思う。
しないんじゃないかな。
まちょと覚悟はしておけ。
206デフォルトの名無しさん:2005/12/26(月) 16:24:01
>>205
神様!!覚悟しておきます!!出来るだけの荒を減らして
提出します。
207デフォルトの名無しさん:2005/12/26(月) 16:38:32
エラーが3つ以上でたら切れる(-∀ー#)
208デフォルトの名無しさん:2005/12/26(月) 16:56:38
>>207
どんなコンパイラ使ってるねん
209デフォルトの名無しさん:2005/12/26(月) 17:01:22
先生!!もう限界です!!エラー一個なんですけど
どうしても見つかりません!!
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;
}
210デフォルトの名無しさん:2005/12/26(月) 17:09:17
>>209
>OS winMX

なめとんのか。まあいいけど。
FILE fp; → FILE *fp;
211デフォルトの名無しさん:2005/12/26(月) 17:12:50
>>209
釣れますか?

int getf,filename;  → int getf;char filename[80];
212デフォルトの名無しさん:2005/12/26(月) 17:14:15
>>209
 工エエェェ(´д`)ェェエエ工工
×if((fp=fopen("filename","r")==NULL){ 
○if((fp=fopen(filename,"r")==NULL){ 
213デフォルトの名無しさん:2005/12/26(月) 17:15:16
>>209
いい感じにワラタ
scanf("%s",&filename); → scanf("%s",filename);
214212:2005/12/26(月) 17:17:33
あ、括弧が不整合だった。
まぁ良いや。突っ込みどころ多すぎるし
215デフォルトの名無しさん:2005/12/26(月) 17:18:23
こいつは、動くプログラムをわざと動かないように壊して
うpしたな。
216デフォルトの名無しさん:2005/12/26(月) 17:19:04
>>210-213
すいません・・・1個どころではありませんでした。
OS→MXは焦ってつい。すいません
int型ではなくchar型でしたか!変数名に惑わされましたorz
&演算子も配列ですから必要ないですよね。
ファイルポインタもつけてないし。すいませんでした(´;ω;`)
217デフォルトの名無しさん:2005/12/26(月) 17:19:51
>include <stdio.h>
>include <stdlib.h>
この辺が思いっきりネタくさい。
218デフォルトの名無しさん:2005/12/26(月) 17:20:47
くそ、目を放している隙に釣られ損ねた。不覚だ。
219デフォルトの名無しさん:2005/12/26(月) 18:04:59
>>209
いっぱい釣れて良かったな
220デフォルトの名無しさん:2005/12/26(月) 18:06:30
>>216
別にどっちでもいいんでね?
出力の時に気をつければ

>>217
バロスwwww
エラー1個なわけねぇwwww
221デフォルトの名無しさん:2005/12/26(月) 18:19:06
みんなしてヒドイ・・・(´;ω;`)
コンパイルエラーで構文エラーってのが一つだったから一個かと。
実際皆さんの指摘でもコンパイルできず、さっきやっと気づき#を
含んでなかったorz
しかも完璧だと思ってたif(!feof(fp))printf("%c",getf); も
無限ループで無理で焦った。でもやっとでけた!!!
ご指摘本当にありがとうございました。
222デフォルトの名無しさん:2005/12/26(月) 18:30:07
>>221
表示されたエラーが1個だけでも、実はたくさんある場合もある。
コンパイラはエラーから何とか復帰して続きを見ようとするん
だけど、それでも不可能な場合があるから。
223デフォルトの名無しさん:2005/12/26(月) 19:12:02
エラーメッセージが
ふざけんなゴルァ
だけだったりして……
224デフォルトの名無しさん:2005/12/26(月) 20:28:53
#include <stdio.h>

int main()
{
printf("Hello World!\n");
return 0;
}
225デフォルトの名無しさん:2005/12/26(月) 21:50:20
include <stdio.h>

int main()
{
printf("Hello World!\n");
return 0;
}
226 ◆EFAoij/eso :2005/12/26(月) 21:58:38
明日から休みやー
久々に来ると決まってエサがないねん
227デフォルトの名無しさん:2005/12/26(月) 22:14:02
エロAA自動生成プログラム作ってください
228デフォルトの名無しさん:2005/12/26(月) 22:16:26
>>227
質問テンプレに従え
229デフォルトの名無しさん:2005/12/26(月) 22:17:07
>>228
従ったら作ってくれるんかいwwww
230デフォルトの名無しさん:2005/12/26(月) 22:19:34
>>229
宿題じゃないのか?
231デフォルトの名無しさん:2005/12/26(月) 22:20:41
迷路のプログラム作ってたら何百行になりそうな勢い
だからからヤメタwwwwwww奥フカス。
232デフォルトの名無しさん:2005/12/26(月) 22:25:25
>>230
どこの学校の宿題だw
233デフォルトの名無しさん:2005/12/26(月) 23:22:37
>>227
#include <stdio.h>
int main()
{
puts("(・・)\n) x (\n( Y )\n");
return 0;
}
234デフォルトの名無しさん:2005/12/26(月) 23:52:48
>>231
100行以内で書けると教授は言ってました。
235デフォルトの名無しさん:2005/12/27(火) 00:03:03
>>233
半勃起した
236デフォルトの名無しさん:2005/12/27(火) 00:03:37
printf("##### ##### \n""  #  #  # \n""  #  #  # \n""##### ##### \n");
237デフォルトの名無しさん:2005/12/27(火) 00:11:01
迷路って七行プログラミングスレのどっかに無かったっけ?
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でやってはいけないと言われました。よろしくお願いします
239デフォルトの名無しさん:2005/12/27(火) 02:07:08
>>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));
}
240デフォルトの名無しさん:2005/12/27(火) 02:11:58
>>238
int begins(const char* string1, const char* string2)
{
    for (; *string1 && *string2; ++string1, ++string2) {
        if (*string1 != *string2) {
            return false;
        }
    }

    return *string2 == '\0';
}
241デフォルトの名無しさん:2005/12/27(火) 02:15:01
>>194
すまんが、未だに問題の意図が読み取れん。とりあえず配列に迷路を
読み込んで(最短とは限らないが)ゴールまでの道順を表示するC++の
プログラムを書いてみた(65行)から、参考にしてみてくれ。力になれず
残念だが。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1347.cpp
242デフォルトの名無しさん:2005/12/27(火) 02:32:01
>>239
>>240
ありがとうございました。
写して出せば終わりですがまだ期日まであるので
お手本にして自分なりに考えてみます
243デフォルトの名無しさん:2005/12/27(火) 02:53:18
strncmpがダメならこれもダメなのかもしれないけど。
int begins(const char *string1, const char *string2)
{
return strstr(string1, string2) == string1 ;
}
244デフォルトの名無しさん:2005/12/27(火) 09:35:02
strncmpがダメってことは、多分strstrも使ってはいけないだろう
245デフォルトの名無しさん:2005/12/27(火) 09:43:40
あ、眠りこけてる間に>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で終了
247デフォルトの名無しさん:2005/12/27(火) 10:11:48
char buf[] = "20051227";
unsigned sum = 0;
for (unsigned ic = 0; ic < sizeof(buf) -1; ++ic) {
sum += buf[ic] - '0';
}
248デフォルトの名無しさん:2005/12/27(火) 10:13:45
if (sum >= 10) {
sum = sum / 10 + sum % 10;
}
249デフォルトの名無しさん:2005/12/27(火) 10:50:01
>>246
マルチ死ね。
そんなクソな問題少し頭ひねっても出来ねえんだったらやめちまえ。
250デフォルトの名無しさん:2005/12/27(火) 11:07:21
>>246
あなたの脳みそビチグソ
251238:2005/12/27(火) 12:25:59
すみません勘違いをしていました
strncmpを使うのは構わないので2つの文字列を比較するbegins関数とそれをテストするプログラムを作ればよい事でした
もう一度ご教授してくれないでしょうか?
おねがいします
252デフォルトの名無しさん:2005/12/27(火) 13:11:58
氏ね
二度と来るな
253デフォルトの名無しさん:2005/12/27(火) 13:18:51
strcmp使えるなら音速で終わるじゃん。
254デフォルトの名無しさん:2005/12/27(火) 13:19:19
冬休み
255デフォルトの名無しさん:2005/12/27(火) 13:27:25
音速ですか?本当ですか?
本当のことを言ってください
256デフォルトの名無しさん:2005/12/27(火) 13:32:53
先程、番組内で「音速」との表現がありましたが、
正しくは「アイルトン・セナ」の間違いでした
訂正してお詫び申し上げます。
257デフォルトの名無しさん:2005/12/27(火) 14:18:21
>>241
ありがとう!
自分ではどうすることもできずに半ば挫折していたけれど、助かりました。
残りの提出期限までに読解してアレンジして行きたいと思います。
258デフォルトの名無しさん:2005/12/27(火) 15:42:28
>>257

               アレ ジ
今日はF1ネタですか?
259デフォルトの名無しさん:2005/12/27(火) 17:33:44
[1] 授業単元:プログラミング応用
[2] 問題文:n次の連立方程式の解を求めるプログラムを作成する。
      LU分解法とガウスザイデル法それぞれ用いる。
[3] 環境
 [3.1] OS:ソラリス8
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2005年1月11日まで]
[5] その他の制限:方程式は外部ファイルから取り込む。

という課題で、一応作ったんですが…http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1355.txt
ファイルオープンでセグメント例外が起きます…ポインタ関連だと思うのですが、どこが問題なのか判りません。
ご教授お願いします。
260デフォルトの名無しさん:2005/12/27(火) 17:38:35
>>259
fpが未初期化。
fpをscanfするのに%cを使っているけどたぶん%s
そこより下はやる気が出ないので読んでいない
261デフォルトの名無しさん:2005/12/27(火) 17:41:35
char *fp ; // ...(1)

fprintf(stdout,"input filename\n");
scanf("%c",fp);/*ココまでは動く ...(2) */
dataFile=fopen(fp,"r");

(1) ではポインタを宣言しているけれども、ポインタの保持している値は未知だよね。
(1) は char fp[20] ; として (2) は gets(fp) ; とすればいいんじゃないかな。
262259:2005/12/27(火) 18:31:22
どうやらscanfで例外が起きているようです…

>>260
fpの初期化はchar *fp=0でいいんですよね?

>>261
配列を文字列に直す関数ってありますか?
このままだと開けない方に分岐してしまって・・・
263デフォルトの名無しさん:2005/12/27(火) 18:43:05
>>262
だいぶ、配列と文字列をごっちゃにしてしまっているようだね。
fprintf (stdout, "input filename\n");
でコンソールに input filename を出力しているのだけれども、
次の scanf が問題で、これからも文字列を読み込むことができるけれどもスペースが来たときにそこで読み込みが終わってしまうから、
gets(fp) としてポインタを渡してファイル名を入力させたほうがいいね、このポインタがもんだいで、ただのポインタじゃあいけない。
配列として char fp[20] ; と確保したものと一緒に生成されたポインタ fp を渡さなくてはならない。
どちらにしろ、ポインタとしての fp は文字列配列 fp の先頭を指さなければならない。
264デフォルトの名無しさん:2005/12/27(火) 18:51:46
265デフォルトの名無しさん:2005/12/27(火) 18:51:58
Line:7
誤解を招く表現があります。

Line:8
間違いがあります。

Line:3
一文が長すぎます。
266デフォルトの名無しさん:2005/12/27(火) 18:52:25
>>263
getsよりもfgetsだろ。
267デフォルトの名無しさん:2005/12/27(火) 18:52:36
>>263
getsよりもscanf("%19s",fp)のほうが安全じゃね?

# 自分も手を抜くときはgets使うんですけどね
268デフォルトの名無しさん:2005/12/27(火) 18:54:18
>>266
fgetsだと改行を除去するのが面倒じゃん。
と言ってもgetsをお勧めできんのは同感。
269デフォルトの名無しさん:2005/12/27(火) 18:56:27
>>265
指摘するのは簡単だわな
270デフォルトの名無しさん:2005/12/27(火) 19:12:53
もうおまいら俺のまんこに思いをぶち込め
271デフォルトの名無しさん:2005/12/27(火) 19:13:48
>>269
指摘される側の問題。
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
チン子
276デフォルトの名無しさん:2005/12/27(火) 21:22:08
途中で読む気がなくなりました
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] その他の制限: 特にありません

宜しくお願いします。
279デフォルトの名無しさん:2005/12/27(火) 23:04:08
>>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
ワロタ
281デフォルトの名無しさん:2005/12/27(火) 23:17:58
>>279
工エエェェ(´д`)ェェエエ工工
282デフォルトの名無しさん:2005/12/27(火) 23:20:32
おれはすげえと思ってしまった
283デフォルトの名無しさん:2005/12/27(火) 23:22:46
てか四捨五入してないし
284デフォルトの名無しさん:2005/12/27(火) 23:23:39
これ何かyからn導く式あるのか?
285デフォルトの名無しさん:2005/12/27(火) 23:30:11
ないだろ。
ただの度数分布表と思われ。
286279:2005/12/27(火) 23:50:50
>>283
一応、四捨五入はしてるつもり(0.5を足してintにキャスト)なんだけど何か問題あるっけ?

あと、範囲外アクセスも考えたかったけど、
if文なしじゃ関数ポインタの配列を使って
fn[expr]()とやる方法しか思いつかないので諦めた。
287デフォルトの名無しさん:2005/12/27(火) 23:55:21
>>286
小数部を四捨五入してそこだけ見るのかと思ってた・・・
勘違いですた(´・ω・`)
288デフォルトの名無しさん:2005/12/28(水) 01:23:43
>>279
俺も同じこと考えてた。
289デフォルトの名無しさん:2005/12/28(水) 01:50:18
>>286
そこで assert() ですよ
290デフォルトの名無しさん:2005/12/28(水) 02:58:40
んー。短絡演算子を使った式文?
if (value < 0) error("...");

value < 0 || error("...");
課題を見る限りテーブル使うようだけど・・・制限があほらし。

291r ◆qBT.f4tFkU :2005/12/28(水) 05:04:02
1] 授業単元:研究室のゼミ
[2] 問題文:bmp画像を取り込んで、1ピクセルあたりの輝度分布を求めよ
[3] 環境
 [3.1] OS: WindowsXp
 [3.2] コンパイラ名とバージョン: V.C 6.0
 [3.3] 言語:C++
[4] 期限: 可能な限り早くしろとのこと
[5] その他の制限:取り込む画像は白黒の画像

急に言われて必死に勉強していますが、手がかりさえも掴めず、マジで悩んでいます。
馬鹿丸出しな質問ですいませんが、どなたか助けてください。
292デフォルトの名無しさん:2005/12/28(水) 05:09:51
>>291
ttp://www.kk.iij4u.or.jp/~kondo/bmp/
これみながらやってみてはどうか
293デフォルトの名無しさん:2005/12/28(水) 16:42:51
[1] 授業単元:Cプログラミング基礎
[2] 問題文:各個人の名前、住所、郵便番号を格納するためのファイル形式を設計し、そのファイルを読み
       郵送用のラベルを作成するプログラムを作成せよ
[3] 環境
 [3.1] OS: WindowsXp
 [3.2] コンパイラ名とバージョン: LSI C-86
 [3.3] 言語:C言語
[4] 期限: 今年中
[5] その他の制限:特になし
294デフォルトの名無しさん:2005/12/28(水) 16:55:58
LSICなんてそんなアナクロコンパイラを使うような授業なんて止めとけ。
つーか、今時intが2バイトなんてやってらんねぇって。
295デフォルトの名無しさん:2005/12/28(水) 17:04:44
>>294
ごちゃごちゃ言わないで答え書いて下さい。LSI-Cは私が好きで
使っているわけではありません。
296デフォルトの名無しさん:2005/12/28(水) 17:19:03
297デフォルトの名無しさん:2005/12/28(水) 17:23:34
>>293
このキャベツ頭が!!!!
で、画面上に出力するだけじゃあかんのか。
298デフォルトの名無しさん:2005/12/28(水) 17:27:53
>>297
画面上に出力させるだけで良いらしいです
299デフォルトの名無しさん:2005/12/28(水) 17:35:22
すいません。297じゃないんですけど、住所の場合はXXXX−XXXXって
なるじゃないですか?
その場合scanfだと「−」を入力した時点で終了してしまいますよね?
これを入力しても終了させない方法はありますか?
300デフォルトの名無しさん:2005/12/28(水) 17:36:40
すいません>>293へのアンカー間違いでしたorz
301デフォルトの名無しさん:2005/12/28(水) 17:43:16
すいません。激しくスルーでお願いします
302デフォルトの名無しさん:2005/12/28(水) 17:57:11
#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を使えばいいじゃない。
304デフォルトの名無しさん:2005/12/28(水) 18:14:17
#define int long
これでOKw
305デフォルトの名無しさん:2005/12/28(水) 18:22:21
そしてprintf()/scanf()系ではまると。
#つーか、LSI-Cはsscanf()にバグあるしな。
306デフォルトの名無しさん:2005/12/28(水) 18:25:08
>>305
scanf() 関係は強力ではあるがやはり邪道な香りがぷんぷんするので
やっぱあまりおすすめな関数じゃないな。
307デフォルトの名無しさん:2005/12/28(水) 19:21:05
>>302
ありがとうございます。
年が越せそうです
308712: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

この記法の意味するところを教えて欲しいのですが、詳しく説明したサイトは
ないでしょうか?
よろしくお願いします。
309デフォルトの名無しさん:2005/12/28(水) 20:50:28
scanf()系は動作があやしいときがあるからな・・・
それはともかく、住所録&印刷かー・・・
#include <stdlib.h>
int main(void) { system("start excel"); return 0; }
たしか、ハガキに直接印刷とかもできるぞ。
310デフォルトの名無しさん:2005/12/28(水) 20:56:18
>>308
おそらく、BNF記法の一種
BNF記法でググって適当に理解してくれ。
311712:2005/12/28(水) 20:57:25
分かりました。返事ありがとうございました。
消えます。(笑)
312259: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に分岐してしまいます。
…どうしてでしょう?ファイルを開くのを失敗する要因ってファイルが存在しない以外に思い当たらないのですが…
313デフォルトの名無しさん:2005/12/28(水) 22:20:06
なんでファイル名に、fpなんて変数名つけてんだよ!
314デフォルトの名無しさん:2005/12/28(水) 23:03:01
>>312
突っ込みどころが多すぎるな…
315デフォルトの名無しさん:2005/12/28(水) 23:11:40
とりあえずポインタと文字列を勉強しなおしたら?
char *fp[20]
はchar*の要素を持つ配列を宣言してる
>>261にあるように
char fp[20]
でいい
316デフォルトの名無しさん:2005/12/28(水) 23:15:19
>>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;
317デフォルトの名無しさん:2005/12/28(水) 23:15:53
しまったchar *のままだった_| ̄|○
318デフォルトの名無しさん:2005/12/28(水) 23:24:00
>>316
fgetsだと改行を省かないと
それかscanf("%19s",dataFile)
319259: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
何が起きてるんでしょうか?
320デフォルトの名無しさん:2005/12/29(木) 00:32:36
>dataFile[strlen(dataFile)-1]="\0";
'\0'
321259:2005/12/29(木) 00:57:27
ありがとうございます。ようやく正常に動きました。
その後に
fgets(line,sizeof(line),fp);
sscanf(line,"%d",N);
とつながるのですが、このsscafでもエラーが発生し、停止します。
ビジュアルスタジオのコンパイラは詳細を表示しないのでよくわかりませんが、おそらくセグメント例外なのだと思います。
そんなに変なことをしているつもりはないのですが…
322デフォルトの名無しさん:2005/12/29(木) 01:05:07
>>321
工エエェェ(´д`)ェェエエ工工
なぜこんな初歩のミスを
323デフォルトの名無しさん:2005/12/29(木) 01:10:04
&
324デフォルトの名無しさん:2005/12/29(木) 01:10:38
>>321
sscanfの引数Nに&がないでしょ。

あー、しかしこのソース、変数名と型が不一致、変数の型が適当だし。
しかも、本人は自分でエラーの原因をろくに考えもせず、すぐ人に聞くし

なんというか、入門書を読んで自分で最低限の勉強をしてください。
ここは貴方のプログラミング相談所じゃなくて宿題スレ。
貴方のソースのバグなんぞ聞きたくないです。
325デフォルトの名無しさん:2005/12/29(木) 01:12:24
[1] 授業単元:プログラミングII
[2] 問題文:マトリクス乗算関数を記述し、テストプログラムを作成せよ。関数をテストするだけでなく、実行時間も計測
出来るようにし、さらにポインタを使ってプログラムを最適化し、短縮時間を割り出しなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C
[4] 期限:
[5] その他の制限:なし
どう作ればいいのか分からずお手上げ状態です・・・
326デフォルトの名無しさん:2005/12/29(木) 01:21:36
>>325
・正方行列だけでいいのか他のもなのか
・そもそも行列のサイズは?
・ってか短縮時間なんてサイズ次第で変わるだろうが

∴課題が曖昧杉
327デフォルトの名無しさん:2005/12/29(木) 01:22:32
>>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);
}

329325:2005/12/29(木) 02:35:52
>>326
>>327
指摘されて初めて細かな仕様について聞かされてないことに気付きました
出直してきますorz
330デフォルトの名無しさん:2005/12/29(木) 04:09:04
再帰処理の迷路問題なんですが、穴埋め部分が分かりません。
どうか皆さんよろしくお願いします。
ほんと、どうしたら良いのか分かりません。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1358.txt
331デフォルトの名無しさん:2005/12/29(木) 04:51:47
>>325
http://www5.airnet.ne.jp/tomy/cpro/sslib7.htm
ここに行列計算のソースあるから見てみるといいんだお。
332デフォルトの名無しさん:2005/12/29(木) 07:15:32
333a: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ヘ行く経路を処理する等)

最近の授業ではニュートン法やガウスの消去法、ハノイの塔、逆行列の計算をやりました。
どうか動作確認をお願いします


335デフォルトの名無しさん:2005/12/29(木) 11:04:52
[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)           出力ファイルをクローズする
336デフォルトの名無しさん:2005/12/29(木) 11:56:19
>>334
>どうか動作確認をお願いします
なんの?

>>335
フォーマットは?
337デフォルトの名無しさん:2005/12/29(木) 11:58:38
ページって何だよ。
338デフォルトの名無しさん:2005/12/29(木) 12:24:21
339デフォルトの名無しさん:2005/12/29(木) 12:32:26
ヘッダファイルミスったけど、許してね。
340デフォルトの名無しさん:2005/12/29(木) 12:57:40
>>332

そうそう、その問題と同じやつ!
意味が伝わってなかったようなので、
問題をあげてみたんです。
341デフォルトの名無しさん:2005/12/29(木) 13:04:03
342デフォルトの名無しさん:2005/12/29(木) 13:13:27
ttp://www.mm.ics.saitama-u.ac.jp/~kawasaki/ensyu2005/ex12/ex12.html
これの3番がわかりません・・・
空欄にソースを入れるらしいのですが・・・
343デフォルトの名無しさん:2005/12/29(木) 13:14:57
URL・・・・
344デフォルトの名無しさん:2005/12/29(木) 13:21:50
>>342
>>1に則って書け。
→いきなり書かれても回答する方も困る。

・大学名や担当教官(?)名を晒すな。
→大学などに迷惑が掛かる恐れがあると同時に、このスレを通報される可能性が高い。
345デフォルトの名無しさん:2005/12/29(木) 15:03:23
>341

こういう迷路ファイルを
読み込めるようにしなくちゃいけないんですが、
どうしても実行エラーになってしまいますよ。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1361.txt
346デフォルトの名無しさん:2005/12/29(木) 15:37:21
347デフォルトの名無しさん:2005/12/29(木) 15:42:19
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1363.zip
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual studio.NET 2003
 [3.3] 言語: C
[4] 期限: 2006年1月10日23:59まで
[5] その他の制限: 一応、総合問題なので、何を使ってもかまわないと思います。
問題の丸投げになってしまいますが、全然分からないので、よろしくお願いします。

348340:2005/12/29(木) 15:45:17
>>345>>346
どちらとも期待通りの動作をしたが、おまえさんの言う実行エラーってどういうものよ?
349デフォルトの名無しさん:2005/12/29(木) 15:48:31
>>347
無料でやる気が起きない
1000円よこせ
350デフォルトの名無しさん:2005/12/29(木) 16:34:21
351デフォルトの名無しさん:2005/12/29(木) 16:37:20
352デフォルトの名無しさん:2005/12/29(木) 16:52:34
>>348

実行したときに同じファイルにmeirodata.txtを入れても
file read error になっちゃうんですよ
353341: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
そりゃすまんかった。うちのコンパイラじゃ警告もエラーも出なかったもんで。
355デフォルトの名無しさん:2005/12/29(木) 17:10:15
>>350
なんでJavaやねん
356352:2005/12/29(木) 17:23:35
ファイルを置く場所は大丈夫なんですが、
ファイルを読み込むと「問題が発生したため..」って出ますね。

357デフォルトの名無しさん:2005/12/29(木) 17:24:42
358デフォルトの名無しさん:2005/12/29(木) 18:41:25
迷路ファイルの周囲の壁は要らんな
359デフォルトの名無しさん:2005/12/29(木) 18:43:01
あとこの方法で探索すると最短経路は検出出来ないな
360352:2005/12/29(木) 18:46:46
すいません。やっと分かりました。
今まで上手くいかなかったのは、
「迷路データに改行がない」ためでした。
迷惑かけてすいません。
361デフォルトの名無しさん:2005/12/29(木) 18:56:50
自分で歩いた経路のせいでゴールへの道が閉ざされるケースがある
というバグもあるな
362デフォルトの名無しさん:2005/12/29(木) 18:58:22
つまり
>>346
それだな
363345:2005/12/29(木) 19:05:39
>>346 は僕じゃないんですが、
なぜ僕が晒す前に1362.txtがあるって分かったんですか?
364デフォルトの名無しさん:2005/12/29(木) 19:06:44
そりゃお前が自演だからだろ
365c++初級者:2005/12/29(木) 19:08:53
C++の初級者を抜け出して、中級者以上になりたいです。
そのための問題を出してください。
366デフォルトの名無しさん:2005/12/29(木) 19:10:32
なんちゃってC++使いしかいないこんなスレじゃ無理
367デフォルトの名無しさん:2005/12/29(木) 19:11:10
中級者は問題なんてやらんだろ。
368c++初級者:2005/12/29(木) 19:14:11
ちなみに初級者です。
すれ違いのようなので、去ります。
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メソッド:計算結果を画面表示する

お願いします。
370デフォルトの名無しさん:2005/12/29(木) 19:18:07
>>369
数値は実数?整数?
371デフォルトの名無しさん:2005/12/29(木) 19:20:53
整数です
$ ./hoge 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
55
$
こんな風になればよいとおもいます
よろしくおながいします
372デフォルトの名無しさん:2005/12/29(木) 19:22:29
[1] 授業単元: IT入門
[2] 問題文(含コード&リンク): 下記の通りです
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C++
[4] 期限: 2005年1月10日まで
[5] その他の制限:特になし

スタックを使った経路検索の問題です。
ttp://pl.eek.jp/up/uploader/src/up1627.zipで拡張子はpdfに変えてください
お願いします
373デフォルトの名無しさん:2005/12/29(木) 19:22:29
374372:2005/12/29(木) 19:24:14
[4] 期限: 2006年1月10日まで
の間違いでした。
本気で分からないんで、よろしくお願いします。
375デフォルトの名無しさん:2005/12/29(木) 19:29:45
>>371
1. コマンドライン引数がスペース区切りかどうかでかなり変わってくる。
2. どのようなクラスを作るか明確でない。
3. どのようなメンバを持つか明確でない。
376デフォルトの名無しさん:2005/12/29(木) 19:35:10
>>372,374

>>373
377デフォルトの名無しさん:2005/12/29(木) 19:38:04
>>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);}
378デフォルトの名無しさん:2005/12/29(木) 19:38:15
学校名はいってるぞw
379347:2005/12/30(金) 03:06:18
すいません。言い忘れていました。Win形式ではなく、コマンドライン形式でお願いします。
かなり面倒な問題だと思いますが、どうかよろしくお願いします。
380デフォルトの名無しさん:2005/12/30(金) 03:11:38
>>347
お前様は他人の置いた怪しげなアーカイブに入った怪しげなワードファイルを開けと申されるのか。
381デフォルトの名無しさん:2005/12/30(金) 03:13:26
>>379
マインスイーパなら7行(だっけ?)プログラムスレにあった気がするから
それを改造でもしたらいいんじゃね?
ライフゲームは面白そうだからちょっとやってみるが

それと>>380の言う通り
テキストとかLaTeXとかでうp汁
382デフォルトの名無しさん:2005/12/30(金) 11:38:31
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):下記の通りです
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C言語
[4] 期限: 2006年1月2日まで
[5] その他の制限: 特になし

乱数を利用したコンピュータとのジャンケンゲームを作成せよ。
また5回連続ジャンケンを行って、最終的な勝敗を表示せよ。

ご助力お願いします。
383382:2005/12/30(金) 11:46:42
書きミスがありました。
問題文中の「また5回連続ジャンケンを行って、最終的な勝敗を表示せよ。 」を
「また5回連続ジャンケンを行い、最終的な勝敗を表示するプログラムを作成せよ」に変えてください。
スレ汚し申し訳ありません。
384デフォルトの名無しさん:2005/12/30(金) 11:47:43
なんかもうわからないんじゃなくて
めんどうくせーなぁ程度でこのスレ利用されてる希ガス
385デフォルトの名無しさん:2005/12/30(金) 12:01:24
>>384
食指の動かない問題はスルーで良いだろ。
別に義務じゃないし。
386デフォルトの名無しさん:2005/12/30(金) 12:40:20
>>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]);
}
387デフォルトの名無しさん:2005/12/30(金) 13:50:58
>>384
え?そういう用途でここ利用するんでしょ?
俺も学生のときはここに宿題丸投げしてから、女の子と遊んでたよ。ww
帰ってくると大体できてるんで大助かりwww

おかげで充実した学生生活をおくれました。
童貞君たちご苦労様といいたい。
388デフォルトの名無しさん:2005/12/30(金) 13:56:21
>>387
こういう投稿を見ると、わざと間違えた解答を書いて、困らせて
やりたくならないか?
389デフォルトの名無しさん:2005/12/30(金) 14:10:15
>>388
正確わるー
390デフォルトの名無しさん:2005/12/30(金) 14:11:53
>>387
正直、お前は一体何様?と言いたい。
それならこっちにも考えがあ(ry
391デフォルトの名無しさん:2005/12/30(金) 14:25:02
これからは、ソースではなくて、EXEで提供しよう。
え?LinuxだからEXEは困る?そんなのこちらの知ったこっちゃない。
392デフォルトの名無しさん:2005/12/30(金) 14:32:08
みんな、釣り耐性低すぎw
ま、>>387は歪んだ性格してるとは思うけど、放置で良いじゃん。
393デフォルトの名無しさん:2005/12/30(金) 14:33:48
釣られた方が楽しいんだもん。
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
->ファイルの中身は「あほ」になります。
395デフォルトの名無しさん:2005/12/30(金) 21:04:30
>>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;
}
396デフォルトの名無しさん:2005/12/30(金) 22:43:55
0010001101101001011011100110001101101100011101010110010001100101
0010000000111100011100110111010001100100011010010110111100101110
0110100000111110000010100000101001101001011011100111010000100000
0110110101100001011010010110111000101000011101100110111101101001
0110010000101001000010100111101100001010000010010110100101101110
0111010000100000011011100010000000111101001000000011000000101100
0010000001110100001000000011110100100000001100000010110000100000
0110001100111011000010100000100101110111011010000110100101101100
0110010100101000001010000110001100100000001111010010000001100111
0110010101110100011000110110100001100001011100100010100000101001
0010100100100000001000010011110100100000010001010100111101000110
0010100100001010000010010000100101101001011001100010100001100011
0010000000101101001000000010011100110000001001110010000000111100
0011110100100000001100010111010100101001001000000111010000100000
0011110100100000011101000010000000101011001000000111010000100000
0010101100100000011000110010000000101101001000000010011100110000
0010011100101100001000000010101100101011011011100010000000100110
0010000000110111001000000111110001111100001000000111000001110101
0111010001100011011010000110000101110010001010000111010000101001
0011101100001010000010010111001001100101011101000111010101110010
01101110001000000011000000111011000010100111110100001010
397347:2005/12/31(土) 02:07:22
>>380
すいません。ワードにしたのは、説明文に図が入っていたからで、アーカイブに入れたのは、そのままではうp出来なかったためです。
問題はこんな感じです。
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1370.txt
398デフォルトの名無しさん:2005/12/31(土) 03:25:09
399デフォルトの名無しさん:2005/12/31(土) 03:50:48
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):アラインメント
http://briefcase.yahoo.co.jp/bc/c_gengo_gyo/lst?&.dir=/&.src=bc&.view=l
[3] 環境
 [3.1] OS: (Windowsxp)
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語:どちらでも可
[4] 期限:2006年1月1日
[5] その他の制限: なし。

急ですいません。ソースファイルはレベル別で1・2・3とあります。
可能なものでお願いします。
400デフォルトの名無しさん:2005/12/31(土) 07:17:01
[1] 授業単元:情報科学
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1371.txt
[3] 環境
 [3.1] OS:Windowsxp
 [3.2] Borland C++
 [3.3] 言語: どちらでも(できればC)
[4] 期限: ([2006年1月5日まで]
[5] その他の制限: 多分ないですが、基礎しか習ってないです

401デフォルトの名無しさん:2005/12/31(土) 08:08:39
>>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;
}
402デフォルトの名無しさん:2005/12/31(土) 10:08:49
      ∧_∧      ∧_∧
     _( ・ω・)    (・ω・ )
  三(⌒),    ノ⊃    (>>401)   はいはいわろすわろす
     ̄/ /)  )      | |  |
    . 〈_)\_)      (__(___)

         ∧_∧  .∧_∧
         ( ・ω・) (・ω・ )
       ≡≡三 三ニ⌒)>>401)    はいはいわろすわろす
        /  /)  )  ̄.| |  |
        〈__)__)  (__(___)

           ∧_∧  ,__ ∧_∧
          (    ・)ノ ):;:;)ω・)
          /    ̄,ノ'' >>401 )   はいはいわろすわろす
         C   /~ / /   /
         /   / 〉 (__(__./
         \__)\)
                      ヽ l //
            ∧_∧(⌒) ―― ★ ―――
            (    ) /|l  // | ヽ  はいはいわろすわろす
           (/     ノl|ll / / |  ヽ
            (O  ノ 彡''   /  .|
            /  ./ 〉
            \__)_)


403デフォルトの名無しさん:2005/12/31(土) 10:55:24
>>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;
}
404デフォルトの名無しさん:2005/12/31(土) 12:54:10
elseの前後に
}と
{
をお忘れなく
405デフォルトの名無しさん:2005/12/31(土) 13:50:52
>>404
エラーになります。
406デフォルトの名無しさん:2005/12/31(土) 14:02:38
>>400
2 と 4 の問題は今年中には書き込むからまってろ
407デフォルトの名無しさん:2005/12/31(土) 14:11:46
出し惜しみはイクナイ!
さらっとレスしたらいいのに…
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))
412デフォルトの名無しさん:2005/12/31(土) 15:11:43
激しく概出
413デフォルトの名無しさん:2005/12/31(土) 15:12:22
>>411
for分のi++削れ。
414デフォルトの名無しさん:2005/12/31(土) 15:13:46
>>410
for文でfor(...;...;i++)にしているよ。
癖でi++を書く気持ちは分からなくはないけど、そこでのインクリメントは不要
415デフォルトの名無しさん:2005/12/31(土) 15:23:01
>>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);
    }
}
416デフォルトの名無しさん:2005/12/31(土) 16:31:19
>>409-410
>>142を態々、劣化させたようなソースだな。
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はド素人で何をどうすればよいのか分かりません、どうかよろしくお願いします
418デフォルトの名無しさん:2005/12/31(土) 17:14:16
>>417
リンクリストの構造体の定義は?
定義が無いなら勝手に定義して書くがそれで良いのか?
419デフォルトの名無しさん:2005/12/31(土) 17:22:18
>>399
これやっておる人いるか?
420デフォルトの名無しさん:2005/12/31(土) 17:45:06
>>418
真面目に話を聞いていたつもりですが他に条件のような物は言われていなかったので
自由にしてもらって構わないと思います。
421デフォルトの名無しさん:2005/12/31(土) 18:09:48
>>420
一応、単方向リストと仮定して書いた。
もし、要求しているのが双方向なら書き直すわ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1372.c
422デフォルトの名無しさん:2005/12/31(土) 19:03:38
>>421
単方向で大丈夫のようです。ありがとうございました
423C初心者:2005/12/31(土) 19:48:15
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1255

このプログラムがコンパイルうまくとおりません
特に課題とかではなく教科書のプログラム例を
そのまま入力して走らせております。
エラー内容 不明です(エラー内容がなぜか文字化けしてしまい)
使用ツールcygwin
OS winXPです。
424C初心者:2005/12/31(土) 19:50:46
質問取り消します
すみません

425C初心者:2005/12/31(土) 20:42:20
やっぱ回答下さい。
よろしくお願いします。
426デフォルトの名無しさん:2005/12/31(土) 21:13:12
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]);
427347:2006/01/01(日) 01:05:12
>>398
350はJavaですし、351はwindows.hを用いているので、コンソールでは出来ません。
すみませんが、本当によろしくお願いします。
マインスイーパーに関しては、コンソール画面に”窓”を表示させる方法が分かれば、どうにかなると思うのですが・・・
428デフォルトの名無しさん:2006/01/01(日) 04:28:01
>>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!"
  とメッセージを出す。   
435デフォルトの名無しさん:2006/01/01(日) 08:35:16
>>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;
}
436デフォルトの名無しさん:2006/01/01(日) 09:13:10
>>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
437デフォルトの名無しさん:2006/01/01(日) 10:05:54
>>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;
}
438デフォルトの名無しさん:2006/01/01(日) 12:34:30
439デフォルトの名無しさん:2006/01/01(日) 12:43:56
>>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デフォルトの名無しさん:2006/01/01(日) 17:47:25
[1]授業単元:授業じゃなくてただの趣味
[2]問題文(含コード&リンク):

ソースはだらだらと長いですが,要はテンプレートの特殊化についてです.

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1380.txt
内のテンプレートクラスExpで,
1. LのみがVectのとき
2. RのみがVectのとき
3. ともにVectのとき
の3つの場合で,メンバ関数evalの動作を変たいと思っていますが,書き方が分からんのです.
ちなみに,出展はhttp://homepage1.nifty.com/herumi/index.html

誰かおせーてください.よろしこ.

[3]環境
 [3.1]OS:Windows XP Pro SP2
 [3.2]コンパイラ名とバージョン: VC++ 7.1
 [3.3]言語:C++
[4] 期限:とくになし.早ければ嬉しいです.
[5] その他の制限:特になし
442デフォルトの名無しさん:2006/01/01(日) 19:12:55
>>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> で実際の特殊化を行う
}
443442:2006/01/01(日) 19:38:00
あ、ヘルパ関数にthisを渡し忘れてたわ。
まぁ、その辺は適当に書いてなー 
単に俺が言いたいのは数値で特殊化するという案だからー
444デフォルトの名無しさん:2006/01/01(日) 20:02:41
趣味だったら自分で試行錯誤して書いた方がいいよ
445デフォルトの名無しさん:2006/01/01(日) 20:19:44
メタ関数ですか,そうですか.
そんなに込み入った話ではないですよ.

107行目以降の3つのケースなんだが,単なる文法間違いかなんかだと思うんだよね.
このやり方でごく普通に(?)特殊化する方法無いかな,と思ってさ.

これ以上聞いたら叩かれそうなので,さんくす.

テンプレートメタプログラミングはまだよく分からんので,>>442も今後勉強の参考にすると思う.
ありがd.
446デフォルトの名無しさん:2006/01/01(日) 20:24:16
.だの,だの
日本人なら句読点ぐらいちゃんと打ってくれ
447デフォルトの名無しさん:2006/01/01(日) 20:30:29
>>446
横からだが、レポートとかだと、/。の代わりに,/.を使うことが多々ある
とゆうか、/。じゃ見栄えが悪いんだよな

まぁ完全な蛇足だが
448441,445:2006/01/01(日) 21:01:03
>>447
そうそう、そういうこと。

>>446
見づらくてごめんな。
449デフォルトの名無しさん:2006/01/01(日) 21:20:46
>>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;
}
450!kuji 【1800円】 :2006/01/01(日) 21:27:09
皆さん元日から精が出ますなぁ
451 【中吉】 【592円】 :2006/01/01(日) 21:27:59
間違った。
452デフォルトの名無しさん:2006/01/01(日) 21:32:56
日本語もちゃんと記述できないようじゃさっさと死ねばいいと思うよ
453 【中吉】 【266円】 :2006/01/01(日) 22:04:00
年の初めの運試し。
454347:2006/01/01(日) 23:06:36
>>440
ありがとうございます!
なんか、かなりハイレベルな出来になっていますが、参考にさせていただきます。
455441:2006/01/01(日) 23:08:48
Modern C++ Designの7ページに以下のような記述があった。

パラメータを1つ指定しただけのクラス・テンプレートにおけるメンバ関数は特殊化できますが、
テンプレート・パラメータを複数指定したテンプレートにおけるメンバ関数群を特殊化することはできません。

> このやり方でごく普通に(?)特殊化する方法無いかな,と思ってさ.
その方法が無いみたいですね。
だから>>442はメタ関数使ってやってたのかなぁ。

ということで解決です。
ども、すんません。
456デフォルトの名無しさん:2006/01/01(日) 23:45:49
[1] 授業単元: 応用プログラミング
[2] 問題文:

実行例を含めて結構長いのでろだ使わせてもらいます
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1381.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:cygwin
 [3.3] 言語: C++
[4] 期限: ([2006年1月4日18:00まで] )
[5] その他の制限: リンク先参照です

新年早々ですがどなたかお願いします。
457 ◆fb2uSRBZiI :2006/01/02(月) 02:44:37
test
458 ◆0A6B/eno2s :2006/01/02(月) 02:45:52
test2
459デフォルトの名無しさん:2006/01/02(月) 07:14:19
460デフォルトの名無しさん:2006/01/02(月) 08:41:07
461デフォルトの名無しさん:2006/01/02(月) 13:41:43
言語自体は何とか組み終わったのですが、この状態から応用を利かせろという宿題が出ました。
数字並べゲームで、初期配置に戻してクリアしたときにメッセージが出るようにしたいのですが…
配列で数値を並べたときの初期状態を、ゲームクリアしたときに判定させる方法がわかりません。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1384.txt

どなたかヒントお願いします…
462461:2006/01/02(月) 13:46:07
テンプレ忘れてどーする…

[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1384.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: C
[4] 期限:2006年01月04日18:00まで
[5] その他の制限: コンパイルして下さると、現在どんな状態か良くわかると思います…
463デフォルトの名無しさん:2006/01/02(月) 14:01:31
これなに?
/* PROGRAM 9  1月18日 S50048TE.c */
464デフォルトの名無しさん:2006/01/02(月) 14:03:18
int move(int n, char S)内の
table(n);
のあとに並んでいるかのチェック用の関数入れたら?
その中で並んでいた場合にメッセージをだす。
465デフォルトの名無しさん:2006/01/02(月) 14:04:17
>のあとに並んでいるかのチェック用の関数入れたら?
のあとに、並んでいるかのチェック用の関数入れたら?
466デフォルトの名無しさん:2006/01/02(月) 14:12:22
返答早っ…

なるほど、そこに関数放り込むのが一番適切ですか…
有難う御座います。早速組んでみますね。
指定期限までは覗きに来るので他にもヒントあったら宜しくお願いします〜。

>>463
只のプログラムの課題番号と宿題の提出期限ですので気にしないで下さい…orz
467デフォルトの名無しさん:2006/01/02(月) 14:15:24
S50048TE.c
これは課題番号というより学籍番号っぽくね?
468デフォルトの名無しさん:2006/01/02(月) 14:17:51
5年の48個目の課題だろ週一で出てればそんなもの。一年中課題かよっ!!!
469デフォルトの名無しさん:2006/01/02(月) 14:28:55
ふつう2005年入学の48番だろ?
470デフォルトの名無しさん:2006/01/02(月) 15:03:51
TEは情報工学系のアレだしな
471456:2006/01/02(月) 16:15:02
>>459
スイマセン…それ違います。
参考にという意味かもしれませんが
Cだからよく意味が分からない…。
472デフォルトの名無しさん:2006/01/02(月) 16:38:20
だれか432わかるかたいますか?
473デフォルトの名無しさん:2006/01/02(月) 16:39:24
なんでCがわからないのにC++やってるんだよ
474デフォルトの名無しさん:2006/01/02(月) 17:05:53
>>472
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1386.zip
数字重複チェック関数なんかは自分で作って
475デフォルトの名無しさん:2006/01/02(月) 17:49:43
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 で、関数のプロトタイプ宣言を行う。


477魚チョコ:2006/01/02(月) 20:40:40
>>476
char table2[26][26][3]; だあ? いくつあると思ってんだよっ
そんなまんどくせえ課題を出しやがる教員を毒殺するという相談なら乗ってやらんでもない。青酸塩なら何種類か持ってるし ▲_ミ゚∇ ゚ "ミ

――ああそうだ。「日本語文字コードが指定されてないので解けません」と書いて出せ。
478デフォルトの名無しさん:2006/01/02(月) 21:07:20
>>476
初期化の時点ですでにバカ
終了
479デフォルトの名無しさん:2006/01/02(月) 21:14:02
>>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}
です。めんどうですが、お願いします。
481デフォルトの名無しさん:2006/01/02(月) 21:16:22
>>476
そいつのアドレスに悪質プログラム送れ
482デフォルトの名無しさん:2006/01/02(月) 21:46:38
>>480
んな面倒なの誰もしねーよ
483デフォルトの名無しさん:2006/01/02(月) 22:08:00
[1] 授業単元:情報処理
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
[3] 環境
 [3.1] OS:linux (unix)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2006年1月15日10時まで
迷路巡回プログラムの作成


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] その他の制限:なし
486デフォルトの名無しさん:2006/01/02(月) 22:41:40
487デフォルトの名無しさん:2006/01/02(月) 23:03:16
>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
[1] 授業単元:情報処理
[2] 問題文:迷路巡回ソフト 下図参照
[3] 環境
 [3.1] OS:Knoppix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2006/1/9
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1395.txt
やり方はある程度分かったので、この方法にあうプログラムを作ってほしい。

490デフォルトの名無しさん:2006/01/02(月) 23:50:56
態度がでかいな
気に入らん
491デフォルトの名無しさん:2006/01/02(月) 23:55:03
OSをリナ糞と書かないあたりが厨くさくてうざい
最近迷路問題が多すぎる
同じヤツが口調変えてやってるんじゃないか
492489:2006/01/02(月) 23:59:32
口ばかりで回答能力のない雑魚は引っ込んでろ。
493デフォルトの名無しさん:2006/01/03(火) 00:10:09
その雑魚の群れに教えを請うとは可愛いやつめ。
494489: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'
495デフォルトの名無しさん:2006/01/03(火) 00:59:31
>>492
回答できるかもしれないがお前の態度が気に入らない
496デフォルトの名無しさん:2006/01/03(火) 02:30:37
    ,.、,、,..,、、.,、,、、..,_       /i
   ;'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i
   '、;: ...: ,:. :.、.∩.. .:: _;.;;.∩‐'゙  ̄  ̄
    `"゙' ''`゙ //゙`´´   | |
        //Λ_Λ  | |
        | |( ´Д`)// <うるせぇ、エビフライぶつけんぞ
        \      |
          |   /
         /   /
     __  |   |  __
     \   ̄ ̄ ̄ ̄ ̄   \
     ||\            \
     ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
497デフォルトの名無しさん:2006/01/03(火) 03:24:18
>>489
push/popを使うんなら、キューじゃなくてスタックじゃないのか?
498デフォルトの名無しさん:2006/01/03(火) 05:25:36
[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)に
ならないと思うのです。時間がかかりすぎな気がします。
どうかよろしくお願いします。
499489:2006/01/03(火) 08:16:36
書き方が悪かったせいで、不愉快にしてすみません。ごめんなさい。

>>497 
この問題はキューでもスタックでもどちらでもいいと聞いています。
キューのほうが分かりやすいといわれたので、お願いしました。
私にはこの問題と解くだけの力はありません。
お願いします。教えてください。
500デフォルトの名無しさん:2006/01/03(火) 08:31:38
なんというか、アルゴリズムがそのまま書かれているので
そのとおりに実装するだけの話しでは
再帰で瞬殺かと
501デフォルトの名無しさん:2006/01/03(火) 08:36:42
配列を使ったマージソートは、コピーの時間が余計に掛かるからねえ・・・・
リストなら素直な結果が出るんだが。
502デフォルトの名無しさん:2006/01/03(火) 09:58:43
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):乱数を使ったおみくじプログラムを作成せよ。
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C言語
[4] 期限:2006年1月4日18時
[5] その他の制限:なし
503489:2006/01/03(火) 10:33:59
>>500
 アルゴリズムがあっても、ここからプログラムにすることが
どうしてもできないんです。再帰は苦手で・・・。
 非常に申し訳ないんですが、誰か教えてください。
504489:2006/01/03(火) 11:03:09
なんだよここの奴らは。
大口叩いておいて結局できねーのかよ。
もういいよ。知り合いの博士に頼んでみるから。
505デフォルトの名無しさん:2006/01/03(火) 11:11:45
> アルファベット2文字でローマ字に対応するために、 char table2[26][26][3];
> アルファベット3文字でローマ字に対応するために、 char table3[26][26][5];

table3 は [26][26][26][5] ではないのか?
506デフォルトの名無しさん:2006/01/03(火) 11:22:33
>>503
よくわからんけど、こんなのでいいのん?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1397.txt
507489:2006/01/03(火) 11:31:06
>>506
ありがとうございます。これで、進級ができそうです。後は自分でやってみます。
本当にありがとうございます。
508476:2006/01/03(火) 11:34:41
>>505
table3は[26][26][26][5]のまちがいでした。
面倒な問題ですが、よろしくお願いします
509489:2006/01/03(火) 12:25:00
>>506
壁は "*" で、通路は " " で、道は "+"で表示するように修正お願いします。
迷惑をおかけしますがお願いします。
510デフォルトの名無しさん:2006/01/03(火) 12:33:50
511489: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

よろしくおねがいします。
512デフォルトの名無しさん:2006/01/03(火) 13:29:51
>>511
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1399.txt

袋小路に迷い込んだ時に歩いた道も表示されるが、設問通りにプログラム
したので、問題ないと思う。
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] その他の制限: ない
515デフォルトの名無しさん:2006/01/03(火) 13:53:51
> 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}

なんか間違ってね?
,が足りないのかとおもたら要素が配列の宣言より多いし...
516デフォルトの名無しさん:2006/01/03(火) 13:57:36
> 文字が子音かどうか判別する関数を int isShiin(char c);

戻り値は
・子音
・母音
・不明
なのかしら?
517デフォルトの名無しさん:2006/01/03(火) 14:00:51
518デフォルトの名無しさん:2006/01/03(火) 14:44:59
>517 なかなか良い罠だ。
519デフォルトの名無しさん:2006/01/03(火) 14:51:04
[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;
520デフォルトの名無しさん:2006/01/03(火) 14:56:01
>519 続き部分だけ。
printf( "%d", 300/18*18 );
}
521デフォルトの名無しさん:2006/01/03(火) 15:17: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" );
}
523デフォルトの名無しさん:2006/01/03(火) 15:20:46
なんかfor(i=300; i>0; i--)って総当りっぽくて美しくないよ
524デフォルトの名無しさん:2006/01/03(火) 15:23:22
>522
ちょっとまて。最大の*整数*をもとめろ、だから勝手に負数を除外してはまずいのではないか?
525デフォルトの名無しさん:2006/01/03(火) 15:27:45
素人っぽいほうがセンセには好印象だろ

本職になろうってんなら自分で考えればいい
526デフォルトの名無しさん:2006/01/03(火) 15:28:17
#include <stdio.h>
main( void )
{
int i;

i=300-300%18;
printf( "%d", i );
return 0;
}
527デフォルトの名無しさん:2006/01/03(火) 15:30:42
御機嫌取る為にコードを書いてるならやめてしまえ
528デフォルトの名無しさん:2006/01/03(火) 15:50:57
>>527
センセー!俺が間違ってましたー!!


ってふうに、相手が望んでる答えを書いとけばいい。
グラマーなんてどうせ負け組みだから…  orz
529502:2006/01/03(火) 16:44:27
>>ALL
皆様ご協力よろしくお願いします
自分の力の無さが不甲斐ないです orz
530デフォルトの名無しさん:2006/01/03(火) 16:54:18
>>526
ワロス
531デフォルトの名無しさん:2006/01/03(火) 17:15:33
>>529
2通り
int main()
{
int user;
printf("数値を入力してください--");
scanf("%d",&user);
if(rand()==user)
printf("大吉です\n");
else
printf("大凶です\n");

getch();
return 0;
}

>>530
はいはい、VIPに帰りましょうね
532デフォルトの名無しさん:2006/01/03(火) 17:53:08
#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年生でこんな問題解ける人がどのくらいいるんでしょうか?
私が馬鹿なだけかもしれませんが・・・。
534デフォルトの名無しさん:2006/01/03(火) 18:22:55
C++の練習問題をください
プリーズ
535デフォルトの名無しさん:2006/01/03(火) 18:25:46
>>534
boostを使わずに、正規表現を解析できるライブラリを作れ。
536デフォルトの名無しさん:2006/01/03(火) 18:31:42
>>535

ありがとうございます。
さっぱり分かりません。
出なおしてきます。
537デフォルトの名無しさん:2006/01/03(火) 18:33:14
>>533
それ、
私利私欲で掲示板の画像ファイルを掻き集めたいんじゃないの?
538デフォルトの名無しさん:2006/01/03(火) 18:34:38
>>533
俺の会社の入社前研修よりムズいやんけ
539デフォルトの名無しさん:2006/01/03(火) 18:40:56
>>533 方針だけ。
1→URLを正規化する。
./はスキップ。../はディレクトリを一つ削る。ディレクトリを削り過ぎないように注意。

2,3→字句解析。下向き再帰型構文解析ならそんなにむづかしくなかろう。再帰ないし。

>>537 そんなん、ツール使えばいいでないの。
540デフォルトの名無しさん:2006/01/03(火) 21:23:11
[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

自分の力ではまったくもって無理なのでよろしくお願いします。
541533:2006/01/03(火) 21:34:25
>>539
 私の力では、アルゴリズムや方針が分かってもそこからプログラムを完成させることはできません。
非常に自分勝手ですが、誰か作ってください。
>>537
あと、進級のためにというのは私欲といえますが、それ以外に使うつもりまありません。
542デフォルトの名無しさん:2006/01/03(火) 21:46:48
>>540
おもしろそう。
だけど今は頭が揺れるぐらい酔ってるしムリポ
543デフォルトの名無しさん:2006/01/03(火) 21:55:11
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;
}
こんな感じか。前半だけだが。
544デフォルトの名無しさん:2006/01/03(火) 21:55:18
>541 ・・・いや・・・まあ・・・出来ないことはないと思うが・・・。
期日まで時間があるし、だれかが作ってくれるまで待つべし。

>540 概要だけど。
while (注目している文字が0か1の間つづける) {
for (count = 1; 注目している文字から右にcount個目の文字が注目している文字と同一の間ループ; count++)
;
while (count > 0) {
if (count < 10)
対応する文字を出力;
else {
9個の時の文字を出力;
count -= 9;
}
}
注目している文字を進める
}
出力の末尾の処理
}

いや、プログラム作るのメンドイので。
545デフォルトの名無しさん:2006/01/03(火) 21:55:17
>>542
期限内ならいつでもいいのでよろしくお願いします!
546デフォルトの名無しさん:2006/01/03(火) 21:56:41
547デフォルトの名無しさん:2006/01/03(火) 21:59:09
*++*pとかって・・・ビックリ
548デフォルトの名無しさん:2006/01/03(火) 22:11:16
あーそっかそっか。fgets()、\nは切り捨てるのか。>>546
549デフォルトの名無しさん:2006/01/03(火) 22:20:18
>>546
すみません。コンパイルしてもエラーが出たのですが・・・
550デフォルトの名無しさん:2006/01/03(火) 22:23:24
>>549
C++としてコンパイル(g++ 546.cpp)してる?
もしそうなら、エラーメッセージを書いてくれ。
551デフォルトの名無しさん:2006/01/03(火) 22:31:03
>>550
すみません。Cでコンパイルしていました。
きちんとできました!どうもありがとうございます!
552347: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;
}
よろしくお願いします。
553デフォルトの名無しさん:2006/01/03(火) 23:48:25
[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時
よろしくお願いします
554デフォルトの名無しさん:2006/01/04(水) 00:06:29
519です!ありがとうございました!
555デフォルトの名無しさん:2006/01/04(水) 00:30:48
>>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");
    }
}
556デフォルトの名無しさん:2006/01/04(水) 00:57:58
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);
}
再帰使ってみた...あってるかはわからん
557347:2006/01/04(水) 01:00:38
>>555
ありがとうございます。
ちゃんと出来ました。
558デフォルトの名無しさん:2006/01/04(水) 01:09:38
int i=rand()%(n*n);
*(arr+i)?input(n,k,arr):input(n,--k,arr);

whileの中身これに交換して
559デフォルトの名無しさん:2006/01/04(水) 01:39:46
>>553
Please Japanese
560デフォルトの名無しさん:2006/01/04(水) 01:41:21
正直、再帰をポンポン使える人尊敬する

俺は木構造やマージソート、クイックソートみたいな
型が決まってる様な奴じゃないと使えない
561デフォルトの名無しさん:2006/01/04(水) 04:05:00
しかしマインスイーパーの爆弾配置の初期化においては
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))

563デフォルトの名無しさん:2006/01/04(水) 09:27:01
>>559 そういわれましても問題文をそのまま書いたのですが
おそらくfork()を使って4つのプロセスを作り、1から4の数字を割り振れということだと思います
564デフォルトの名無しさん:2006/01/04(水) 09:55:50
>>553
@ !fork
A i
565デフォルトの名無しさん:2006/01/04(水) 11:33:18
>>561
MT車がどうしたって?
566デフォルトの名無しさん:2006/01/04(水) 11:39:42
>>565
まあまあ、そうボケないで。
567デフォルトの名無しさん:2006/01/04(水) 11:58:53
>>564 ありがとうございました
568デフォルトの名無しさん:2006/01/04(水) 12:02:14
↓AT限定
569デフォルトの名無しさん:2006/01/04(水) 12:23:40
↑限定解除に落ちたヘタレ
570デフォルトの名無しさん:2006/01/04(水) 12:45:28
→免許持ってるが教習所以来なので恐くてMT乗れないヘタレ
571デフォルトの名無しさん:2006/01/04(水) 12:46:42
→免許取得後の初運転で坂道発進10連コンボかまして母と運転交代した俺
572571:2006/01/04(水) 12:47:54
坂道発進と10連コンボの間に「エンスト」を脳内補完しといてくれ
573570:2006/01/04(水) 13:13:22
俺も友人の車で同じようなことやった。
それ以来かなり苦手意識。


スレ違いここまで。
以下なにごともなかったかのように再開
574デフォルトの名無しさん:2006/01/04(水) 13:14:13
友人に見られるのが悲しいな
俺も同じ経験が
記憶から抹消してー
575 ◆rp8BbJeZ0I :2006/01/04(水) 13:36:45
冬休み中の宿題をお願いします。
[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
576デフォルトの名無しさん:2006/01/04(水) 13:49:50
csv・・・・正規表現が使えないと面倒だなぁ
577 ◆rp8BbJeZ0I :2006/01/04(水) 13:52:13
正規表現って何ですか?何か説明が足りませんでしたか?
578デフォルトの名無しさん:2006/01/04(水) 13:52:44
C++か
Cだったら暇だからアンケート集計&統計ソフトでも作っちゃるんだけど
579 ◆rp8BbJeZ0I :2006/01/04(水) 13:55:02
>>578
実は授業用に間違ってCの本買っちゃったんですけど、
ちょっと違いますよね。授業はC++です。C++ですいません。
580デフォルトの名無しさん:2006/01/04(水) 14:08:07
んー・・・散々既出な気もするが、CSVは「プログラミング書法」に載ってる。
ttp://cm.bell-labs.com/cm/cs/tpop/csvgetlinec++.c
使い方は本みてくれ。
581デフォルトの名無しさん:2006/01/04(水) 14:11:13
何らかの処理ってどの程度の処理すればいいん?

0,2,3,1,5,2,6,4,1,2,3,1,5,3,5,2,……みたいな数字の羅列読み込んで
平均出すだけとか(ry
582デフォルトの名無しさん:2006/01/04(水) 14:14:01
あーすまん、「プログラミング作法」だった。

CSVも、入力を限定してしまえば楽だなぁ・・・。
んー・・・1フィールドしかないCSVで、出現数をカウントとか。
583デフォルトの名無しさん:2006/01/04(水) 14:18:36
しかし、いきなりCから勉強するのか
んな事やってもクラスのありがたみがさっぱり分からん気がする
584 ◆rp8BbJeZ0I :2006/01/04(水) 14:22:21
>>580,582 書き込み後URL見てみます。
>>581 どの学部の学生も参加できる授業なので、
    そこまで高等な処理は必要ないと思います。
>>583 すいません。Cの本は間違って買ったんです。
    最初++の部分は飾りかなんかだと思ってたんです。
     確かにクラスのありがたみとか全然分かりません。
585583:2006/01/04(水) 14:24:58
>>584
すまん、CじゃなくてC++だった
トイレの落書きだからスルーでおk

ちなみに、>>581>>582が言ってるのは
課題から思いつく物中では簡単な部類だから、
これで駄目ならもっと難しいのしかないよ
586 ◆rp8BbJeZ0I :2006/01/04(水) 14:29:25
>>580 コピペして実行してみました。まだ意味は分かっていませんorz
>>583 本当簡単なので良いとおもいます。難しいの出すと却って変かも知れません。
    csv.とエクセルの違いも分からないので…
587 ◆rp8BbJeZ0I :2006/01/04(水) 14:32:24
>>582
フィールドが多数になると、フィールド間の処理が面倒なので、
1つのフィールドにデータを入力して、そこから、
決まった数字とかを出してくる。という解釈で良いのでしょうか?
フィールドって意味も分からないので…
588デフォルトの名無しさん:2006/01/04(水) 14:36:40
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にしてクリックすれば
どんなもんか分かると思う
589 ◆rp8BbJeZ0I :2006/01/04(水) 14:40:40
>>588
即やりました。
","が消えて、区切られていた部分が
各々のセルに収まりました。
590デフォルトの名無しさん:2006/01/04(水) 14:54:54
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をそれぞれ別のプログラムとして作成する。
591デフォルトの名無しさん:2006/01/04(水) 16:08:53
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;
}
592デフォルトの名無しさん:2006/01/04(水) 16:11:31
>>◆rp8BbJeZ0I
どのレベルの物が欲しいのか分からんので、最近の課題とか例題をup。
593 ◆rp8BbJeZ0I :2006/01/04(水) 16:31:31
>>592
分かりました。上手く説明できないので
ttp://www.aoni.waseda.jp/ouchi/2005/cpp/index.html
これでどうでしょう?多分、自分が言うより分かりやすいと思いますが…
594 ◆rp8BbJeZ0I :2006/01/04(水) 16:32:23
ただ、貼って良かったのか悪かったのか…
595デフォルトの名無しさん:2006/01/04(水) 16:50:36
>>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;
}
596デフォルトの名無しさん:2006/01/04(水) 16:56:13
>>594
そのサイトを見る限り、もう偏差値計算までやってるんでしょ?
そのプログラムを利用して、成績順にソートするとかでどう?
#つーか、それくらい自分で考えつかなきゃダメだがや。
597デフォルトの名無しさん:2006/01/04(水) 17:04:52
なんで中途半端な学校はcygwin+gccばかりなのだろうか
598 ◆rp8BbJeZ0I :2006/01/04(水) 17:09:58
>>596 
すいません○| ̄|_
あんまり身になってなかったみたいです。
599デフォルトの名無しさん:2006/01/04(水) 17:15:22
まず丁度いいcsvファイルを見つけることからだ
600デフォルトの名無しさん:2006/01/04(水) 17:17:14
>>562
tail は >>175 にあるよ
601 ◆rp8BbJeZ0I :2006/01/04(水) 17:17:17
csvファイル使ったことないんでテンパったんです。
あと、正月だって事もあってか全然進まないのと。
602デフォルトの名無しさん:2006/01/04(水) 17:17:57
csvは作ればいいじゃん

まずは作りたいプログラムの概要決めて、次にそれに応じたフィールドとかを決めてcsv作成
そしてプログラム作成
603デフォルトの名無しさん:2006/01/04(水) 17:19:59
>>598
うーん、「どんなプログラムを作るか」は知識や知能の問題だけじゃ解決しないよなぁ。
想像力と創造力が必要なんでないかい?

・csvファイルを使った簡単な成績表を授業で作った
→成績表なら、点数順に並べ替えてみよう ・ グラフにしよう ・ その他
→→「並べ替え」でこのスレやWebを検索してみよう ・ 「グラフ」で(以下ry ・ その他
→→→例があるな、使えるかな? ・ 実際のグラフは難しそうだから文字でできないかな? ・ その他
604 ◆rp8BbJeZ0I :2006/01/04(水) 17:27:34
>>603
分かりました。やりたい事決めて、検索してみます。
矢っ張り"成績順に並べる"が良さそうですね。
"csvファイルを使った簡単な成績表を授業で作った"
→csvファイル使った覚えがないです。
 txtファイルの入出力はしたんですけど
>>602
まずは作りたいプログラムの概要決めて、
次にそれに応じたフィールドとかを決めてcsv作成 そしてプログラム作成

先ほど教えて頂いて1つcsvファイルは作れたんですが、
フィールドとは何なのかよく分からないです。
605デフォルトの名無しさん:2006/01/04(水) 17:32:12
>>604
サイトを見ると、成績表作ってるじゃん。授業でやってないの?
あー、csvファイルって拡張子こそ換えているけど中は只のテキストファイルだから
拡張子がtxtのファイルと取り扱いは同じって認識できてなかったりする?

それと、「フィールド」はこの場合、Excelで言う"Column"のことね。
606デフォルトの名無しさん:2006/01/04(水) 17:37:48
>>604
フィールド=列項目名
607デフォルトの名無しさん:2006/01/04(水) 17:39:39
もうだめぽ
608 ◆rp8BbJeZ0I :2006/01/04(水) 17:40:59
>>605
最後の方、授業計画が遅れてグダグダになっていたので、あまり分かりません。
成績表っていうのはURLの表をtxtにコピペした物です。

っていうか扱いtxtファイルと同じなんですか!?
txtファイルと同じやり方でifstreamしても毎回失敗するんですけど何故でしょうか?

引数として指定した範囲の列番号を返します。
609デフォルトの名無しさん:2006/01/04(水) 17:44:58
頭痛がしてきた……
一番いいのは諦めて放置することか…
610 ◆rp8BbJeZ0I :2006/01/04(水) 17:47:23
すいませんでした。そうして下さい(笑)
自分でも何でこんな分からないのか分からない。
分からないところが分からないような状況なので。
611デフォルトの名無しさん:2006/01/04(水) 17:51:16
>>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;
}
612デフォルトの名無しさん:2006/01/04(水) 18:07:39
>>◆rp8BbJeZ0I
成績表を作ったんだったらこんなのどう?

1. csvファイルを双方向リスト(メモリを動的に確保していくアレ)に一行ずつ格納
2. 双方向リストを、点数をキーにソート(マージソートを利用)
3. ソートしたデータをcsvファイルに出力
613デフォルトの名無しさん:2006/01/04(水) 18:10:19
>>612
◆rp8BbJeZ0Iのレベルを考えてものを言え
614デフォルトの名無しさん:2006/01/04(水) 18:40:02
面白みが無いが、特定の人物の科目別点数と合計点を表示するプログラムなんてのはいかがか?






615魚チョコ:2006/01/04(水) 18:41:45
ここすごいね。いくら学生向けの課題だって、次のようなものくらいはありえるわけで……

1. にゅる力された数を3桁ごとにコンマで区切って出力する。
2. こしゃくなことに小数点以下がありうる。小数点以下は5桁ごとに空白1つ空ける。
3. 小数点から始まったら1の位に0を補う。
4. 小数点で終わったら小数点を取る。
5. エラーがあったら "E" と出力する。
6. 小数点だけの入力はエラーとする。

これ実現しようとすると難しくはないがちょいと面倒ではないか?
ここにコード書いてやってる人びとみなさんどんくらい時間を費やして組んでるんでしょか。
616デフォルトの名無しさん:2006/01/04(水) 18:51:14
脳みそに該当パターンが入っていれば、1行1分。入ってないときは、難易度による。
617デフォルトの名無しさん:2006/01/04(水) 18:51:42
ポインタをしっかり理解してれば文字列の加工は面白いんだがな
618デフォルトの名無しさん:2006/01/04(水) 19:08:26
文字列として格納してって言う姑息な手段は駄目かいな?
619デフォルトの名無しさん:2006/01/04(水) 19:50:20
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1403.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 1月7日まで
[5] その他の制限: なし
私には無理なので、誰か手伝ってください。
本当に皆さんの力が全てなんです。お願いします
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でもいいのでヒントをください。答えを書いてもらったら
うれしいのですが、お願いします。
621デフォルトの名無しさん:2006/01/04(水) 20:03:43
>>620
>>1読め。しかもPascalはスレ違い。
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;
623619:2006/01/04(水) 21:10:00
追加  結果を1000桁まで表示してみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1404.txt

よろしくおねがいします。
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
何か色々と考えてみたんですけどわけがわからなくなったのでお願いします。
[1] 授業単元: it入門
[2] 問題文(含コード&リンク):
http://sousou7jp.hp.infoseek.co.jp/html/kadai-02.pdf
http://sousou7jp.hp.infoseek.co.jp/html/kadai-03.pdf
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン:gcc バージョンは知りません
 [3.3] 言語:c
[4] 期限: 2006年1月10日17時まで
[5] その他の制限: 特になし
 
626デフォルトの名無しさん:2006/01/04(水) 21:30:30
627590:2006/01/04(水) 21:44:57
問題(1)(2)共にコンパイル時にエラーが出てしまいコンパイル出来ません。
628デフォルトの名無しさん:2006/01/04(水) 21:58:44
コンパイルできないからなんだよ
住人はお前の代わりにやってやってるんだ
コードが間違っててもな
嫌なら自分でやりな
629デフォルトの名無しさん:2006/01/04(水) 22:10:49
#includeすらしてないってんなら殴り飛ばす
630デフォルトの名無しさん:2006/01/04(水) 22:28:14
>>624
#include <stdio.h>
int main(void) { printf("6 28 496 8128\n"); return 0; }
631347:2006/01/04(水) 22:41:13
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1406.txt
マインスイーパーの問題を自力で解いているのですが、詰まってしまいました。
openの処理のところが出来ません。
間違いを指摘or修正していただきたいのですが、よろしくお願いします。
コメントなどはつけていないので見づらいと思いますが、よろしくお願いします。
632347: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の値を変えて再起処理
こんな感じにしたのですが、きちんと動作しません。
どこが悪いのか、ご指摘お願いします。
633デフォルトの名無しさん:2006/01/04(水) 23:21:01
頼むから宿題じゃない趣味の範囲ならば自分で解決してくれよな?
もし解決できないならそれはやる価値のないソリューションだ
634347:2006/01/04(水) 23:25:46
>>633
いや、宿題です。
ここで、一応、回答はもらったのですが、かなりハイレベルな回答(Dos上でグラフィカルな処理をしている)で、
授業でやった内容では明らかに不可能な内容だったので、自分で考えながら解いています。
635デフォルトの名無しさん:2006/01/04(水) 23:32:44
自分で調べたとか勉強したとか言うとけばよろし。
636デフォルトの名無しさん:2006/01/04(水) 23:35:31
>>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] 期限: 明日の朝
638デフォルトの名無しさん:2006/01/05(木) 00:29:10
>>630
(・∀・)ソレダ!!
639デフォルトの名無しさん:2006/01/05(木) 00:42:25
>>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;
}
640デフォルトの名無しさん:2006/01/05(木) 00:43:05
オイラの関数は
ペアノの公理だから
自分で解いてくれっぺ☆
641デフォルトの名無しさん:2006/01/05(木) 00:50:27
>>631
浅学ながら読んでみたけど
このメインディッシュとなるwhilleのcommand場合訳の内容はなんなんだろうか
bombを指定していきなりx,yの入力を求めてるが何をしてるんだろうか?
x,yは実際目はどこなのだろうか?

とりあえず変数は1次元配列で扱わずに
二次元配列にしてみてはどうだろうか
まぁ頑張ってみるけど
642デフォルトの名無しさん:2006/01/05(木) 00:59:36
>>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;
}
643347:2006/01/05(木) 01:02:06
>>641
すいません。問題文が前のほうにあるので、それを呼んでいただければ分かると思うのですが、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1370.txt
commandの場合わけはcommandが0のときopen処理、commandが1のときbomb処理、それ以外はexit
x,yは配列の座標です。行がx、列がyでそれぞれ0〜n-1までになっています。
2次元配列のほうが分かりやすいのですが、mallocで領域を確保した場合、
arr[n]とは出来るのですが、arr[n][n]などというように、多次元配列には出来なかったので、このような形になりました。
644347:2006/01/05(木) 01:03:50
間違えました。
列がxで行がyです。
645デフォルトの名無しさん:2006/01/05(木) 01:07:40
>>643
ふんふん
この周りの爆弾をカウントってのがopen関数なのかな?
そして周りの爆弾の数はarr_data[j]に格納すると
646347:2006/01/05(木) 01:09:45
>>645
そうです。
arr_dataは、char型なので、そこに格納されている文字の判定をshow_window関数で行っています。
647デフォルトの名無しさん:2006/01/05(木) 01:12:43
おっけー
関数の中身の計算とかなんで再帰使ったかはわからんけど
どうやらこの複雑さが原因の予感がしてきた
とりあえず

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日(土)まで

プログラム次のレスにのせます。
よろしくお願いします。
649347: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;
}
651デフォルトの名無しさん:2006/01/05(木) 01:44:49
>>649
とりあえずいけそうだけどちょっといいかな
arr_dataには各種情報(周りの爆弾の個数etc)
arr_bombには爆弾があれば1 無ければ0だよね?
652デフォルトの名無しさん:2006/01/05(木) 01:48:57
>>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;
    }
653347: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]動画像処理を習っております。問題文がわかりにくかったらスイマセン。
本当に考えたのですがわからなかったのでご教授お願いします。
655648:2006/01/05(木) 08:02:08
>>652
どうもありがとうございます。
これで何とかなりそうです。
656デフォルトの名無しさん:2006/01/05(木) 09:51:35
>>654 お手上げ。
1)グラフィックを扱う場合はそのライブラリやプログラムの構成を明示してほしい。
→授業で提示されたプログラムをどこかに上げてくれ。
2)数式はその分野を知らないとわけがわからない。
→解説が載ってるWebページや授業の資料を見せてくれ。

んじゃ、俺は生活のために出かけてくる。
657デフォルトの名無しさん:2006/01/05(木) 09:57:24
>>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ページ部分です。
659デフォルトの名無しさん:2006/01/05(木) 11:34:56
[1]C言語演習
[2]文字列と配列を使用したおみくじプログラムを作成せよ。
  (実行するたびに結果がランダムになるようにせよ)
[3]
  3.1 Windows XP
  3.2 VC
  3.3 C言語
[4]2005年1月5日午後6時まで
[5]期間が短いのできついかもしれませんが、よろしくお願いします。
660デフォルトの名無しさん:2006/01/05(木) 11:44:50
>>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;
}
661デフォルトの名無しさん:2006/01/05(木) 11:52:27
天国と地獄だな
662659: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点

よく分からないのでぜひ教えてください。
宜しくお願いします。
664デフォルトの名無しさん:2006/01/05(木) 13:19:19
>>663
>>1読め
665デフォルトの名無しさん:2006/01/05(木) 13:19:49
663です。
C言語でお願いします。
提出期限は今日の五時までです。
初心者で何も分からないのですがどうぞ宜しくお願いします。
666デフォルトの名無しさん:2006/01/05(木) 13:20:37
>>663
つ&&
667デフォルトの名無しさん:2006/01/05(木) 13:21:40
>>665
テンプレも読めないカスだったのか・・・('A`)
668デフォルトの名無しさん:2006/01/05(木) 13:21:58
>>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;
}
669663: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
671デフォルトの名無しさん:2006/01/05(木) 15:15:06
こういうときの判定を考えればいいのかな?
999999
91112
9112
912
92
672 ◆d.aQepUCmo :2006/01/05(木) 15:26:10
[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] その他の制限:特に制限はありません

よろしくお願いいたします
673デフォルトの名無しさん:2006/01/05(木) 15:34:04
>>672
4桁の16進数を16桁の2進数にするの?
674デフォルトの名無しさん:2006/01/05(木) 15:39:22
>>671さん
そうです。。全然構想沸きませんorz
675デフォルトの名無しさん:2006/01/05(木) 16:19:32
>>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);
}
676デフォルトの名無しさん:2006/01/05(木) 16:24:55
>>673
説明不足で申し訳ありません
入力は0000からFFFFまで4桁の16進数です
その16進数を表現する2進数に変換をしてそこに含まれる1の数をカウントするというプログラムです
どうにも説明下手で申し訳ありません・・・
677デフォルトの名無しさん:2006/01/05(木) 16:27:32
>>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;
}
678デフォルトの名無しさん:2006/01/05(木) 16:42:23
>>658 pgmなら
・pgmを扱うプログラム(授業で提示されているはずだ)
・処理したい画像(ファイル形式の細かいとこや、画像ファイルの特徴を知りたい)
をup。
資料を読む限り、複数の画像が必要そうだ。
679デフォルトの名無しさん:2006/01/05(木) 17:26:17
なんつーか、このスレに来る課題を片っ端からやってたら
初心者にはいい勉強になりそうだ
680デフォルトの名無しさん:2006/01/05(木) 18:15:17
>>675
ありがとうございます
現在はすぐ試せる環境にありませんのでソースを解析する段階までやり,
明日すぐにでも試してみようと思います

681デフォルトの名無しさん:2006/01/05(木) 18:32:58
>>678
プログラムは、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
の310におきました。(スイマセン、どこにアップしたらいいかわからなかったので)

画像ってどうやってupしたら良いですか?どう圧縮しても50k以上に
なってしまうのですが...。pgmなんでサイズ大きいんですよね。
682347:2006/01/05(木) 18:46:31
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1408.txt
とりあえず、1マスずつなら、周囲の爆弾をカウントすることは出来るようになりました。
後は、開いたマスの値が0だったとき、再帰的に周りのますを開いてマスの値が0のところをすべて開く処理だけなのですが、
これがさっぱり分かりません。
どなたか、ご支援をよろしくお願いします。
683デフォルトの名無しさん:2006/01/05(木) 18:49:19
>>679
俺もそう思った。
でも、よく考えたら先生が初心者育てるための課題なんだから、
いい勉強にならなきゃダメ先生じゃん。
684デフォルトの名無しさん:2006/01/05(木) 19:02:48
>>347
この前マインスイーパー作ったからソースから該当箇所探してみるよ。
685デフォルトの名無しさん:2006/01/05(木) 19:23:51
>>681 まあ・・・手軽にupできるところを探してくれ。
686デフォルトの名無しさん:2006/01/05(木) 19:28:01
>>682
とりあえず俺もカウントなら余裕に出来たが
もし爆弾個数が0の場合周りのマスに再帰を掛けたら本来開くべき場所でないところも開いてしまう罠に陥ってしまった罠

どうやらグーグル先生に聞いてみたほうが速そうだ
687660:2006/01/05(木) 20:07:04
ネタで書いたのに喜んでもらえるとは思ってなかった・・・
688デフォルトの名無しさん:2006/01/05(木) 20:30:48
>>682
素直にopen_window()の中でチェックした爆弾の個数が0だったら、
上下左右のセルに対してopen_window()を呼べばいいんじゃないの?
689デフォルトの名無しさん:2006/01/05(木) 20:36:05
>>688
右のセルが左のセルに対してopen_window()を呼ばないようにしないとね。
だから先に開けておいてまだ開いてないセルに対して呼べばいいのか。
690デフォルトの名無しさん:2006/01/05(木) 20:40:21
初心者の独学で片っ端からメモ帳にコピーしてるけど、
解説無いからテラムズス(´A`)
ここの問題全部を書式化して解説付で僕に1万円で売って下さい。
691347:2006/01/05(木) 20:41:21
>>688-689
すみませんが、実際にコードを書いてみていただけませんか?
自分で考え付く限りのコードは書いてみたんですが、出来ませんでした。
692デフォルトの名無しさん:2006/01/05(木) 20:44:47
>>691
諦めたらそこで試合終了だよ
693デフォルトの名無しさん:2006/01/05(木) 20:46:08
>>670
急いで解いたから変数とか適当。
デバッグ用の出力が残ってるから消しといて。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1409.txt

端にある1から辿って2と99に囲まれた領域を調べる。
その領域内に0があればまだ動けるので敵駒は取れない。
領域がすべて1ならカウントしながら駒を消去。
694デフォルトの名無しさん:2006/01/05(木) 20:49:23
忘れてた。ボードのデータはこんな感じで。
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
695347:2006/01/05(木) 20:58:44
>>692
そこを何とかお願いします。
696688:2006/01/05(木) 21:21:06
>>689
そうだね。
あと再帰的に実行するとセル範囲外に出る可能性が高いからそれも気をつけないと。
697デフォルトの名無しさん:2006/01/05(木) 21:28:57
こんな感じで動くんじゃない?
ちゃんと読んでない上に動かしてもないから知らないけど。

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);
}
698デフォルトの名無しさん:2006/01/05(木) 21:30:57
>>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); /* 再帰呼び出し */
}
}
}
説明は次レスで
699デフォルトの名無しさん:2006/01/05(木) 21:32:00
>>697
あ、ごめん。
if文抜けてた。
open_window()の再帰するところ、爆弾数が0個のときだけにしてね
700698:2006/01/05(木) 21:36:45
(1)走査する必要ないときそのまま戻る
(2)デバッグ用だと思うけど、再帰のときも表示されてしまい邪魔なので削除
(3)周りのセルに対して再帰呼び出し
  カレントセルにも呼んでるけど(1)に引っかかってすぐ戻ってくるはず

#ありゃ、697とかぶってしまった…ごめんね
701デフォルトの名無しさん:2006/01/05(木) 21:37:58
>>700
こちらこそ。ごめん。

でも(3)はちょっとまずくない?
xx=x-1でyy=y-1のときもopen_window()呼んじゃうから…
702デフォルトの名無しさん:2006/01/05(木) 21:40:15
>>693
ありがとうございましたm(__)m
main内のputだけ知らない構文なのでちょっと調べてきます。
703347:2006/01/05(木) 21:46:00
>>697-698
おお!回答ありがとうございます!!
一度確認してみたところきちんと動きました。
まだ、他のところに細かいバグなどがあるんですが、とりあえずこれで提出できます。
本当にありがとうございました。
704347:2006/01/05(木) 22:05:43
すいません。きちんと出来ていたと思ったのですが、何回か試してみたところ、不具合が発生してしまいました。
>>697さんのは、爆弾以外の場所すべてが開かれてしまいます。
>>698さんのは、たいてい上手くいくのですが、
初期状態が
□□○□□
□○□□□
○□□□○
□□○□□
のとき、openで(x,y)=(4,4)と入力したら、
□□□□□
□□□□□
□□□□□
□□□2 1
□□1 0 
という風に、4行4列目が空白になってしまいました。
おそらく、ここには、違う文字か何かが入っているためだと思うのですが。。。
705347:2006/01/05(木) 22:07:38
×4行4列目
○5行5列目
です。
706698:2006/01/05(木) 22:10:36
>>701
「周囲」の意味を8方向で考えてそうしてみたけど4方向なのかな?
確認してみたらウィンドウズ付属のマインスイーパーは8方向っぽい。

>>704-705
ちょっと待ってて、確認してみる。
707347:2006/01/05(木) 22:15:01
>>697さんのは
open_window()の再帰を
if(cnt[j]==0)
{
}
の中に入れれば、全部は表示されなくなりますが、706さんの言うように4方向しか表示されません。
708697:2006/01/05(木) 22:15:47
>>706
そうなんだ。じゃあ、僕の勘違いでした。ごめん。

>>704

697に699の変更は入れてくれた?
709347:2006/01/05(木) 22:21:20
>>697さんのを8方向で判定するようにしてみました。
結果としては、きちんと8方向に動作しましたが、
>>704-705
と同じ症状が発生してしまいました。
710698: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) {
にしてみて。
711347:2006/01/05(木) 22:37:57
>>710
おお!出来ました!!
ありがとうございました!!
712デフォルトの名無しさん:2006/01/05(木) 22:40:21
>>707
ごめん。4方向しか表示されないってどういう意味で言ってるの?
再帰的に空白セルが開いていかないって言ってるの?
713670:2006/01/05(木) 22:41:31
>>693
putの意味は大体わかったのですが
check :(1:8) 0
check :(2:9) 0
...
で無限ループしてしまいます・・・。

714712:2006/01/05(木) 22:41:44
>>711
あ、もう解決したんならいいや。
回答いらないよ。
しっかりテストしてね。
715デフォルトの名無しさん:2006/01/05(木) 23:05:18
しかし再帰は苦手だからとマインスイーパーのopen関数さえも適切な手順がぱっと思いつかないとは

へこむ(´・ω・`)
716デフォルトの名無しさん:2006/01/05(木) 23:16:06
んー。再帰なくても、push/pop/is_emptyでできるぞ。>>715
717693:2006/01/05(木) 23:25:16
>>713
ありゃ、>>694のデータでなるの?
違ったらループしちゃうときのデータください。
putsはprintf打つのがめんどくさかっただけだからw
718デフォルトの名無しさん:2006/01/05(木) 23:39:09
>>685
画像upしときました。はじめてやったのでうまくできたかわかりませんが...
http://www4.axfc.net/uploader/7/so/N7_5655.png.html
http://www4.axfc.net/uploader/7/so/N7_5654.png.html

です。DLキーは、5959です。ちなみに画像を落とせたら、名前のpngをpgmに
変えてgimpなどのビューアーでごらんください。プログラムもぜひ教えて
ください。
719デフォルトの名無しさん:2006/01/05(木) 23:39:27
720670: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

こんな感じです。
721デフォルトの名無しさん:2006/01/06(金) 00:08:09
>>720
普通に動くんだけどなぁ…
配列への入力はちゃんとできてる?
722670:2006/01/06(金) 00:18:50
で、できますた!!!!!!!!!!!!1111111111
723デフォルトの名無しさん:2006/01/06(金) 00:29:36
[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] その他の制限:特に制限はありません

724723:2006/01/06(金) 00:31:50
↑は座席の割り方が少しずれてしまいました。
右上から下に向かって1,2,3・・・8で8の倍数になったら隣の列の一番上に行きます。
725デフォルトの名無しさん:2006/01/06(金) 00:41:10
>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] その他の制限:なし
727デフォルトの名無しさん:2006/01/06(金) 01:09:17
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] その他の制限:なし
730デフォルトの名無しさん:2006/01/06(金) 01:31:51
たまに出てくる ^ はどうゆう意味ですか?
731デフォルトの名無しさん:2006/01/06(金) 01:33:55
beki
732デフォルトの名無しさん:2006/01/06(金) 01:34:50
>>730
2^3 なら「2の3乗 (=8)」って意味
733デフォルトの名無しさん:2006/01/06(金) 01:36:19
>>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;
}
734デフォルトの名無しさん:2006/01/06(金) 01:51:55
>>728
fは与えられてないの?
735デフォルトの名無しさん:2006/01/06(金) 02:27:47
>>729
計算で確認をしてないが、次のように計算すればオーダーが
2^nからやや下がると思う。
(n,r)=(n-2,r-2)+2*(n-2,r-1)+(n-2,r)
736デフォルトの名無しさん:2006/01/06(金) 04:42:59
[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] その他の制限:特にありませんが基礎をちょっと覚えた程度の初心者です。

よろしくお願いします。
737デフォルトの名無しさん:2006/01/06(金) 08:27:14
>>718
ようやくこれで「計算」できるようになったんだが、もうひとつ足りない。
出力はどういうふうにするの?
738デフォルトの名無しさん:2006/01/06(金) 08:51:14
>>734
特に与えられていません。
739魚チョコ:2006/01/06(金) 09:09:24
>>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
[1] 授業単元:プログラミング演習
[2] 問題文 : ローマ字かな変換  
詳しくは、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1410.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 1月8日
[5] その他の制限:特にありません。
授業でもらったデータです。これ以外まったく指定はありませんでした。
どうやっても自分ではうまくいきません。この課題を提出しないと単位はもらえないんです。
誰かお願いします。非常に面倒な問題ですので、関数やその他のことは
各自の好みにお任せいます。(このままが理想ですが・・・)
741デフォルトの名無しさん:2006/01/06(金) 10:51:50
[1] 授業単元:プログラミング演習
[2] 問題文 : ローマ字かな変換  
詳しくは、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1410.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 1月8日
[5] その他の制限:特にありません。
授業でもらったデータです。これ以外まったく指定はありませんでした。
どうやっても自分ではうまくいきません。この課題を提出しないと単位はもらえないんです。
誰かお願いします。非常に面倒な問題ですので、関数やその他のことは
各自の好みにお任せいます。(このままが理想ですが・・・)
742740:2006/01/06(金) 10:55:58
740と741は同じ内容です。間違って書き込みを2度してしまいました。
すいません。
743デフォルトの名無しさん:2006/01/06(金) 10:58:30
>>740-741
つまり簡単な自動羊肉を実装しろという事か

つーか、これは前に面倒杉ということでスルーされたはずだがシツコイ
744デフォルトの名無しさん:2006/01/06(金) 11:06:36
貰えない方が面白いよ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] その他の制限:なし
関数部分だけお願いします。
746デフォルトの名無しさん:2006/01/06(金) 11:45:50
[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
747デフォルトの名無しさん:2006/01/06(金) 12:30:14
メニュー画面を表示ってことはGUI?。
748デフォルトの名無しさん:2006/01/06(金) 12:41:43
たぶん、標準出力に1.処理 2.処理 ・・・ 9.終了 とか出しといて、
scanf()でうんぬん。
749740:2006/01/06(金) 13:08:18
>>743
非常に面倒なのは分かってます。私も進級に関わらないのなら絶対にしません。
でも、しないといけないんです。ほかに頼れる人はいないんです。お願いします。

750デフォルトの名無しさん:2006/01/06(金) 13:14:22
ここの課題はやる気になるのに,自分のプログラムはさっぱりやる気にならなアヒャヒャハヒャyr
751デフォルトの名無しさん:2006/01/06(金) 13:28:21
>>749
状態数 100 も越えないって。プログラム 200 行位でできるんじゃないかな?
単位に関わらないなら絶対にしないって思うんだったら、多分ここ見ている人
みんな単位に関係ないんだから誰もやらないと思うね。

手際良くオートマトン書いて、整理しながら大きなプログラムを書く練習に
なるはずだけどな。
752デフォルトの名無しさん:2006/01/06(金) 13:31:08
1状態2行か。
753デフォルトの名無しさん:2006/01/06(金) 13:33:59
まぁ、俺なら一行で書けるけどな。
754デフォルトの名無しさん:2006/01/06(金) 13:40:53
オートマトンの処理なんて出力と次の状態の計算程度なんじゃないの?
755デフォルトの名無しさん:2006/01/06(金) 13:46:24
>>749
マジレス恐縮だが、そんなことをしてまで進級したとして、
毎年同じことを繰り返すつもりか?
或いは就職してからも?
進級に関わるのなら尚のこと、自力でやるべきではないのか?
756デフォルトの名無しさん:2006/01/06(金) 13:57:49
ホントに必死なら誰かに金払って頼めよ
757デフォルトの名無しさん:2006/01/06(金) 14:02:07
>>737
えっと出力は、最大ベクトル、最小ベクトル(u,vの)と画像全体での平均
ベクトルを出力するようにしたいです...。
あと一つ足りないっていうのは、結果を出力する部分のことですか?
758デフォルトの名無しさん:2006/01/06(金) 14:58:58
正直な話、>>749は甘えすぎ

俺は単位を落としそうになったら友人ネットワークと自身の気力を極限まで駆使して
意地でも取ってたぞ
結果大学4年間で単位を落とした事は一度も無い

進級がかかってるなら、大学の教授に質問するなり
プログラムの得意な友人に頼るなり
図書館でプログラムの本を読み漁るなり
ネットで調べまくるなりして

 意 地 で も 単 位 を 取 れ

単位なんぞ努力しだいでなんとでもなる
759デフォルトの名無しさん:2006/01/06(金) 15:01:26
>>758
だから、あらゆる手段を駆使して単位取ろうとしてるんじゃないの?
760デフォルトの名無しさん:2006/01/06(金) 15:04:18
>>759に核心を突かれた
けど、ここでだめぽそうなら別の手を考えるしかないだろ
何か誰もやりそうにない雰囲気だし

ここに頼る→誰もしなかった→留年
になったら寒いぞ
761デフォルトの名無しさん:2006/01/06(金) 15:07:22
>ユーザが入力したローマ字をひらがなに変換して表示する

>以下に実行例を示す。
>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] 基本しか学習してません
763デフォルトの名無しさん:2006/01/06(金) 15:15:21
>>762
基本を学習してるんならできるだろ
764デフォルトの名無しさん:2006/01/06(金) 15:19:53
そもそも>>740がスルーされたのは、あんなばかでかい配列作ってられるかypってのが大きいわけで
処理自体は簡単なはず

自力で出来ないなら進級諦めろ
765デフォルトの名無しさん:2006/01/06(金) 15:23:17
>>740
てか、ちっとは自助努力のあとを見せてくれ
766デフォルトの名無しさん:2006/01/06(金) 15:23:30
>>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;
}
767デフォルトの名無しさん:2006/01/06(金) 15:46:21
>>740
"データファイルはe-Learning システムからダウンロードして使用すること。"
ってあるからそのファイルが無いと作れないんで内科医?
768デフォルトの名無しさん:2006/01/06(金) 15:50:44
とりあえず>>767のURL出せ
769672 ◆d.aQepUCmo :2006/01/06(金) 15:50:44
昨日>>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] その他の制限:なし


771デフォルトの名無しさん:2006/01/06(金) 15:51:51
>>769
その変更なら最初に2文字読み飛ばせばいいだけ
772デフォルトの名無しさん:2006/01/06(金) 16:04:36
>>770
作るから名前晒してくれ
773デフォルトの名無しさん:2006/01/06(金) 16:05:06
>>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;
}
774デフォルトの名無しさん:2006/01/06(金) 16:07:43
>>771
2文字読み飛ばすという処理のやり方を教えていただけませんでしょうか?
入力を左にシフトさせるだけではまずいですよね・・・
775デフォルトの名無しさん:2006/01/06(金) 16:15:19
[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乗の書き方がわかりませんでした。
776675: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);
}
777デフォルトの名無しさん:2006/01/06(金) 16:24:31
>>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;
}
778デフォルトの名無しさん:2006/01/06(金) 16:25:26
>>775

int hoge=x;

for(int i=1;i<n;i++)
    hoge*=x;
779デフォルトの名無しさん:2006/01/06(金) 16:27:28
>>776
何度もありがとうございました
本当に助かりましたです
780デフォルトの名無しさん:2006/01/06(金) 17:14:49
>>746のは単語をソートしなくていいのかな?
781 ◆7Wwuzu3bWo :2006/01/06(金) 17:34:55
[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]授業も言われるがまま打ち込んでいたので基本すら理解していない状況です。
どうか助けてください。
782すみません、間違えました:2006/01/06(金) 17:37:10
[1] 授業単元:情報処理C
[2] 問題文(含コード&リンク):円柱、円錐、球の体積を求める計算プログラムを作成せよ。
高さ=6、半径=3小数点は8桁までとする。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual studio.net2003
[3.3] 言語:C++
[4] 期限: 1月23日
[5]授業も言われるがまま打ち込んでいたので基本すら理解していない状況です。
どうか助けてください。
783デフォルトの名無しさん:2006/01/06(金) 17:52:14
基本すら出来てないんだったらこの先もついていけんのでは・・
784デフォルトの名無しさん:2006/01/06(金) 18:23:57
>>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;
}
785782:2006/01/06(金) 22:49:00
今回落とさない限り、この先情報処理を取る予定が無いのです。
履修失敗したな〜(涙)
786 ◆JOft0idvzI :2006/01/06(金) 23:09:04
[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が一番いいとも言いました。
完全にちんぷんかんぷんなのでよろしくお願いします。
787デフォルトの名無しさん:2006/01/06(金) 23:10:17
>>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;
}
788デフォルトの名無しさん:2006/01/06(金) 23:17:10
計算しても表示はしないんだね。
789デフォルトの名無しさん:2006/01/06(金) 23:19:37
というか、バカは答えなくていいよ
790デフォルトの名無しさん:2006/01/06(金) 23:25:28
>>788
行数オーバーしたから削った。
791デフォルトの名無しさん:2006/01/06(金) 23:41:14
atan使うの?本当に?
792デフォルトの名無しさん:2006/01/07(土) 00:49:19
>>788って、u,v求める問題のことですかね??
793デフォルトの名無しさん:2006/01/07(土) 01:02:13
acos(-1.0)でいいじゃん。キャスト使ってまで4*atan(1)しなくても。
794782:2006/01/07(土) 01:05:46
本当に感謝しています!
校舎の方に行かないと確認できないのが悔しいですが…
本当にありがとうございました!
795デフォルトの名無しさん:2006/01/07(土) 01:20:47
[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]);
}
}
796デフォルトの名無しさん:2006/01/07(土) 02:22:45
[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] その他の制限:特にありません。

よろしくお願いします。
797デフォルトの名無しさん:2006/01/07(土) 03:00:41
>>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;
}
798796:2006/01/07(土) 03:27:40
>>797
自分で確認したときは問題なかったのですが、大学の教授のホームページに送信したら

「conio.h: No such file or directory
***error*** コンパイルできませんでした 」

と返ってきました。
大学の講義では<iostream>から始まるものしか習っていません。
ここで前に作ってもらった<stdio.h>で始まるものは大丈夫でした。
iostreamとかの意味を解説書で読んでもイマイチよく分からないので
よろしければ一緒に教えてもらえませんか?
よろしくお願いします。
799デフォルトの名無しさん:2006/01/07(土) 03:35:19
んじゃ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;
}
800デフォルトの名無しさん:2006/01/07(土) 03:45:18
>>798
iostreamはバリバリのジェネリックプログラミングだから、
C++初心者には結構きついよ。
引数付きマニピュレータとか追いかけるのでけでも大変だから。
使い方だけわかっていればいいと思う。
801デフォルトの名無しさん:2006/01/07(土) 04:16:31
>>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");
}
802デフォルトの名無しさん:2006/01/07(土) 04:21:51
>>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;
}
803796:2006/01/07(土) 04:38:51
>>799,802
ありがとうございます。
>>799のはnに1を入力すると答えが何も出ませんでした。
>>802のは無事正解することが出来ました。

それで>>799のを自分で考えて色々試してみましたが自分では無理だったので
参考までにnに1を入力した場合に答えが出るように直してもらえないでしょうか?
>>799が何とか読める程度の知識と大学の進度なので。
804デフォルトの名無しさん:2006/01/07(土) 04:47:24
>>803
やっつけの仕事でごめんよ

まず数を入力させて

while(n!=1)
nが1では無い限り以下の処理を行う

もし偶数ならば
nを2で割ってそれをnに代入
もし奇数なら
nを3倍にして1を加算しその値をnに代入

だから最初に1を入力してしまうとwhileループに進入できなくなる
正しく本来ならばdo-whileを使用するべき
あともし負の整数が入力されてしまった場合の例外処理も付け加えるべき
805デフォルトの名無しさん:2006/01/07(土) 04:56:35
負の整数だけじゃなくて0もね。
806デフォルトの名無しさん:2006/01/07(土) 04:59:19
まぁ上の事も踏まえて書いてもぜんぜん美しいプログラムではないし
あとは頭ひねって考えて

寝る 
807746: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で動かして表示する。
・・・お手上げ状態です。
809808:2006/01/07(土) 11:05:56
定数は
太陽質量 1.989e30 kg
地球と太陽との距離 1.496e11
地球の質量 5.974e24 kg
万有引力定数 6.672e-11
810デフォルトの名無しさん:2006/01/07(土) 12:03:25
シュミレーション
シュミレーション
シュミレーション
シュミレーション
シュミレーション
811デフォルトの名無しさん:2006/01/07(土) 12:06:20
[1] 授業単元: it入門
[2] 問題文:
http://sousou7jp.hp.infoseek.co.jp/html/kadai-02.pdf
http://sousou7jp.hp.infoseek.co.jp/html/kadai-03.pdf
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ:gcc
 [3.3] 言語:c
[4] 期限: 2006年1月10日17時まで
[5] その他:625にも載せてあるんですが、
期限が近く自分でやってもさっぱりわからないのでもう一度載せました。
どなたかできるかた本当によろしくお願いします。
812デフォルトの名無しさん:2006/01/07(土) 12:10:09
※<無効な文字>の場合はエラー表示して終了とする

状態[入力文字数0]
↓<母音>
・出力して状態[入力文字数0]へ


状態[入力文字数0]
↓<子音>
状態[入力文字数1]
↓<母音>
・有効な組み合わせなら出力して状態[入力文字数0]へ
・無効な場合エラー表示して終了


状態[入力文字数1]
↓<子音>
状態[入力文字数2]
↓<子音>
・無効なのでエラー表示して終了


状態[入力文字数2]
↓<母音>
・有効な組み合わせなら出力して状態[入力文字数0]へ
・無効な場合エラー表示して終了


もまえら馬鹿ばっかりだな
状態なんて入力文字数0,1,2の3つしかねーじゃねーかw
813デフォルトの名無しさん:2006/01/07(土) 12:31:32
>>808
半径が変化するということは太陽の位置変化も考えるのか。
物理苦手だ…。
814デフォルトの名無しさん:2006/01/07(土) 13:03:22
>>813
惑星の公転は楕円軌道を取るってことだと思うが太陽の位置変化なんてあったけ?
…同じく物理は苦手な人

815デフォルトの名無しさん:2006/01/07(土) 13:11:30
>>812
クスクス
816デフォルトの名無しさん:2006/01/07(土) 13:13:12
ああそういうことかw
万有引力で太陽も多少円運動させるのかと思った…。
817デフォルトの名無しさん:2006/01/07(土) 14:23:27
>>811
http://homepage3.nifty.com/catfood/up/src/up0555.txt

VC++で動作確認しちゃったので、Cで通らなかったら書き直してね。
C++のありがたみがわかった。特にSTL。
818デフォルトの名無しさん:2006/01/07(土) 15:17:47
>>808
とりあえずできた。時間刻みはコマンドライン引数で入力。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1411.c
819796:2006/01/07(土) 15:35:09
>>804
ありがとうございます。
820818:2006/01/07(土) 15:36:52
あああ間違えたぁぁ orz
座標更新の処理が違うわ…。
821817:2006/01/07(土) 15:47:01
あら、main直下にゴミコメントが・・・
消し忘れてた。
822818:2006/01/07(土) 15:55:19
>>808修正しますた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1412.c
40日刻みくらいまでは軌道が出る。
さらに大きくすると地球が太陽系から脱出w
823デフォルトの名無しさん:2006/01/07(土) 16:09:41
宇宙船地球号w
824デフォルトの名無しさん:2006/01/07(土) 16:38:49
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
単純選択法で使う配列は1つで、
しかもデータの最大値についての情報を使わないプログラムを完成せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年1月11日
[5] その他の制限: なし
よろしくおねがいします
825魚チョコ:2006/01/07(土) 16:42:30
>>824
ぐぐれば出るだろうに……。
http://homepage1.nifty.com/daccho/program/algo/sort2.htm
826デフォルトの名無しさん:2006/01/07(土) 16:43:10
>>824
死ね
827魚チョコ:2006/01/07(土) 16:44:54
>>825
あれ、このソース *( ptr + k ) とか書いてんな。ptr を変えるわけでもないのに…… ミ゚仝 ゚ ミ
828霊魂:2006/01/07(土) 16:46:55
>>826
お前も死ね!

――なんて書いても誰もわからねえだろうなあ。 ミ゚〜 ゚ ミ
829デフォルトの名無しさん:2006/01/07(土) 16:48:02
>>827
死ね
830魚チョコ:2006/01/07(土) 16:50:31
>>824
こっちの方がいいかな
http://www.techscore.com/tech/C/8.html
831デフォルトの名無しさん:2006/01/07(土) 16:53:37
>>830
調べてる暇があったらコーディングしろよクズ
832デフォルトの名無しさん:2006/01/07(土) 17:15:20
>>831
スレ荒らしてる暇があったら自分で作れよクズ
833デフォルトの名無しさん:2006/01/07(土) 17:54:15
[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で始まるものでお願いします。
834デフォルトの名無しさん:2006/01/07(土) 18:13:27
3 6 7 21 44 0
という入力なら
和 28
個数 2
でいいの?
835デフォルトの名無しさん:2006/01/07(土) 19:18:00
27
836デフォルトの名無しさん:2006/01/07(土) 19:20:10
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の配列です。みづらくてすみません。

よろしくお願いいたします。
838837:2006/01/07(土) 19:24:28
すみません
arctan(x^2+y^2-1)^2→arctan((x^2+y^2-1)^2)
でした。どなたかお願いします
839795: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] その他の制限: 関数は除算を用いずにビット処理を使う。

どうぞよろしくお願いします。
841デフォルトの名無しさん:2006/01/07(土) 21:26:09
10進数を16進数へって・・
頭悪いから思いつかないけど

ABCDEFの文字はどうするの
842デフォルトの名無しさん :2006/01/07(土) 21:33:55
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);
843デフォルトの名無しさん:2006/01/07(土) 21:55:11
>>840
ここの応用すればできそう
http://www1.cts.ne.jp/~clab/hsample/Func/Func12.html
844デフォルトの名無しさん:2006/01/07(土) 23:47:52
[1] 授業単元:プログラミングII
[2] 問題文(含コード&リンク):

線形リストのプログラム
線形リストのプログラミング技術をもちいてキューのデータ構造と操作関数を実装する.線形リストを用いればキューのサイズを変数max 等で限定する必要がなくなる.
このURLの(* ここに解答を書き加える *)というところに書き加えて完成させるものです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1414.txt
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 1月13日
[5] その他の制限: 特になし

どうかお願いします。
845デフォルトの名無しさん:2006/01/07(土) 23:56:21
>>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日まで]
847833:2006/01/08(日) 00:45:42
>>834
問題はそのままコピペしただけで答えを聞いたわけじゃないですが
たぶんそういう意味だと思います。
848デフォルトの名無しさん:2006/01/08(日) 01:32:10
>>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.は次に続く。
849848: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;
}
変更点は次に。
850848: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> >を辿ることによって出力を行うようにした。
理由:そうすれば、自動的に辞書順に出力される。
以上。
851デフォルトの名無しさん:2006/01/08(日) 01:37:46
>>843
本気で言ってるのか? 寝惚けてただけなら >>840 をよく読め。
何も分かってないタコが自分で問題考えてわけも分からず聞いてるって分かるから
852デフォルトの名無しさん:2006/01/08(日) 01:48:49
>>840
質問が山程。

> long型の配列を16進数に変換する関数を作成せよ。
配列を変換ってどういうこと?それぞれの要素を次々に変換?
ターゲットの型は?文字列?
引数の配列の要素数はどうやって取得するの?
変換したものはどうするの?格納?だとしたらどこへ?それとも出力?にしてもどこへ?

> また16進数から10進数に変換する関数も作成せよ。
同上。
853848:2006/01/08(日) 02:00:15
間違えた。
- std::locale::global(std::locale());
+ std::locale::global(std::locale(""));
854デフォルトの名無しさん:2006/01/08(日) 05:31:35
>>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++;
}
}
855デフォルトの名無しさん:2006/01/08(日) 05:32:22
つづき
int main(void)
{
tohex(a);
return 0;
}
856デフォルトの名無しさん:2006/01/08(日) 06:19:36
>>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;
  }
}
857553: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としてお願いしたんですが、まだできていません。
誰か教えてくだっさい。よろしくおねがいします。

858笹井奈琴:2006/01/08(日) 09:37:19
>>856
longとかに納められている整数を「16進数」というだろうか?

あとwhileのなかで剰余算と除算を2回ずつやってるのはなんで?

まあそれは置いといて、
これを、除算を用いないでビット処理でやるようにすればいいのかな。
逆数を取って、かけ算するのかな。
そういえば割り算しないで逆数を取る方法ってのを、
どっかでみたことがあるなあ。
859デフォルトの名無しさん:2006/01/08(日) 12:17:06
>>840 は「long 型は本質的に10進数なのだ」と信じ込んでいるだけだと思う
で、16進数表現で表示する必要があって、自分でそういう問題を作ったのだろう。
たぶん、printf のフォーマットで 16 進法の出力ができることも知らないのだろう。

860デフォルトの名無しさん:2006/01/08(日) 13:54:00
>>858
逆数?阿呆か?
861デフォルトの名無しさん:2006/01/08(日) 14:09:51
>>840
>このようなプロトタイプ宣言に従い、long型の配列を16進数に変換する関数を作成せよ。
>また16進数から10進数に変換する関数も作成せよ。
はなちょうちん吹いたw
862デフォルトの名無しさん:2006/01/08(日) 15:04:40
[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
[1] 授業単元: 情報工学実験
[2] 問題文(含コード&リンク):地球の公転運動のシュミレーションを行う。
時間刻を1日として1000年分の計算を行う。

[3] 環境
 [3.1] OS:Linux
[3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C言語
[4] 期限: 今月一杯
[5] その他の制限:
とりあえず下のリンクのように出来たんですが、
Nの値が365*478だと実行出来ますが
365*479になるとセグメントエラーとなってしまいます。
この原因だけ知りたいです。お願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1415.txt
864デフォルトの名無しさん:2006/01/08(日) 15:21:38
>>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;
}
865デフォルトの名無しさん:2006/01/08(日) 15:53:41
読み込み元は標準入力ストリーム
#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;
}
これでいいだろうか
866デフォルトの名無しさん:2006/01/08(日) 15:57:09
>>864
それだと最初に89以上が入力された時
forのi++が実行されずにbreakされちまうからだめだべ
iを個数として使わなかったら余計な指定だけど
867デフォルトの名無しさん:2006/01/08(日) 16:00:26
>>866
そこまで分かってなんで表示するときに1足すことを思いつかなかったのか。
868デフォルトの名無しさん:2006/01/08(日) 16:03:19
>>867
最後に1足したらもし12個いっぱいいっぱい入力された場合13になるぞ?
言い訳は美しくない
869デフォルトの名無しさん:2006/01/08(日) 16:05:07
ならんだろう i < 12 だから 0 から 11 までで終わり。
あと俺 >>964 じゃない
870863:2006/01/08(日) 16:07:56
>>864
自己解決しますた。サンクスコ。
871デフォルトの名無しさん:2006/01/08(日) 16:09:28
ん、
うちの環境では
iは12になっちまうがな・・

俺が間違ってたらごめんよ
872デフォルトの名無しさん:2006/01/08(日) 16:15: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に関しては、どうしたらいいのかわかりません

本当に申し訳ないのですが、よろしく御願いします。
877デフォルトの名無しさん:2006/01/08(日) 16:56:25
[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) 整列するとすれば昇順(小さい順)か降順(大きい順)か?→昇順です
878デフォルトの名無しさん:2006/01/08(日) 17:24:05
【質問テンプレ】
[1] 授業単元:情報処理U
[2] 問題文(含コード&リンク): オセロを自動実行させるプログラムを作れ。
一手ごとに表示を止め、石を置いた場所の情報を表示するようにせよ。
なお、手は相手の石を最もひっくり返せるような手を選ばせるようにすること。
複数の手がある場合には任意の手でよい。
[3] 環境
 [3.1] OS:Windows
 [3.2] VC 6.0
 [3.3] 言語: C
[4] 期限:今年中

お願いします。

盤面を一手ごと表示して、駒は●○をつかうらしいです。
879デフォルトの名無しさん:2006/01/08(日) 17:38:18
880デフォルトの名無しさん:2006/01/08(日) 17:39:09
>>876
(2)の”入力された文字列”というのはコマンドライン引数のこと?
881SOS:2006/01/08(日) 17:54:05
浮動少数型の引数3つをとり、引数の平均を戻り値とする関数を
書きなさい(関数名や引数名は各自で決定せよ)という問題が宿題
がでたのですが、どう解けばいいか教えてください!
882デフォルトの名無しさん:2006/01/08(日) 17:55:01
>>879
サンクスです、今度からはまずググってみることにします
883デフォルトの名無しさん:2006/01/08(日) 17:58:21
>>881
コードを書いてコンパイルしてデバッグすればいいんだ!
884デフォルトの名無しさん:2006/01/08(日) 18:00:56
>>881
double get_average( double a, double b, double c )
{
return (a+b+c) * 3;
}
885SOS:2006/01/08(日) 18:01:17
>>883
すいません、C言語の授業まったく出てなくてわからないんで
答え書き込んでもらえませんか?あさってテストで同じ問題が
でるらしいのでお願いします!
886SOS:2006/01/08(日) 18:03:21
>>884
ありがとうございました!
887デフォルトの名無しさん:2006/01/08(日) 18:04:44
なんでテンプレも守らない奴の質問に答えてやるんだよ
888デフォルトの名無しさん:2006/01/08(日) 18:05:23
>>884
ちょw
889デフォルトの名無しさん:2006/01/08(日) 18:06:03
>>887
ごめん。暇だったから。
890デフォルトの名無しさん:2006/01/08(日) 18:08:07
>>888
わろす!
891デフォルトの名無しさん:2006/01/08(日) 18:22:12
892デフォルトの名無しさん:2006/01/08(日) 18:23:56
1] 授業単元:情報処理
[2] 問題文:
ある決まった長さの配列stack[ ]を用意し、それに文字データを一つずつ取り込む関数push、
そこから一つずつデータを取り出す関数popを書くことで最も基本的なスタックを実現せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年1月10日まで]
[5] その他の制限:
文字の取り込みにはgetchar( )
1文字の出力にはputchar( )
というコマンドを使ってよい

宜しくおねがいします
893デフォルトの名無しさん:2006/01/08(日) 18:26:54
[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>>はい、コマンドライン引数です。
895デフォルトの名無しさん:2006/01/08(日) 18:47:00
>>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]);
}

...続く
896デフォルトの名無しさん:2006/01/08(日) 18:47:37
...
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;
}
897デフォルトの名無しさん:2006/01/08(日) 18:51:38
>>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;
}
898デフォルトの名無しさん:2006/01/08(日) 19:12:38
しかし
手元の辞書には
倍数←→約数とあって
約数の定義が1以上の自然数なんだがどうだろうか・・・
899856: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;
  }
}

スレ汚しスマソ。
900デフォルトの名無しさん:2006/01/08(日) 20:05:17
>>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;}}
901デフォルトの名無しさん:2006/01/08(日) 20:21:24
>>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;
}
902デフォルトの名無しさん:2006/01/08(日) 20:21:54
続き

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] その他の制限:特にありません 。
よろしくお願いします。
904デフォルトの名無しさん:2006/01/08(日) 21:23:23
>>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;
}
905デフォルトの名無しさん:2006/01/08(日) 21:24:34
ここ見てニヤニヤしてる先生も多いんだろうな
906デフォルトの名無しさん:2006/01/08(日) 21:27:24
先生様ってのはプライド高いから専門の板なんて来ないよ
907デフォルトの名無しさん:2006/01/08(日) 21:33:13
ま、実際の面倒見てる助手どもはここみてるの多いがな。
908デフォルトの名無しさん:2006/01/08(日) 21:38:46
学校で院生の人にプログラミングについて質問したら、
教授に聞いてくるからちょっと待っててっていわれました!
909デフォルトの名無しさん:2006/01/08(日) 21:50:39
私では>>895のは読めないので>>897を解答用に少し手直しして送信したのですが
「5  12 24 36 40 50」と入力した場合
>>897で出てくる答えは「12 24 36  5」ですが、正しい答えは「12 24 36  3」でした。

cout << n << endl; のnを直せばいいと思うのですが何に変えればいいかがわかりません。
手直しお願いします。

大学で渡された資料見ても似たようなものが一つも無くて何の役にも立たないorz
910デフォルトの名無しさん:2006/01/08(日) 21:57:38
>>909
何様?
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] その他の制限:特にないです 。
お願いします。
912デフォルトの名無しさん:2006/01/08(日) 22:24:54
>>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;
}
913デフォルトの名無しさん:2006/01/08(日) 22:28:01
void install_sum( double *a, double *b, double *c, double *result )
{
*result = (*a+*b+*c)/3;
}
914デフォルトの名無しさん:2006/01/08(日) 22:31:48
>>913>>912 へのレスで書いたんだけど、
関数名が意味不明すぎだな。
915デフォルトの名無しさん:2006/01/08(日) 22:57:44
誰か>>844に愛の手を…
916デフォルトの名無しさん:2006/01/08(日) 22:59:58
穴埋め式の問題を出す教授は、我々解答者は穴埋め問題にやる気が出ない
という心理を見透かしているのであろうな。
917893: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
>>904
ありがとうございます。
919デフォルトの名無しさん:2006/01/08(日) 23:14:51
>>844
質問:
1. int QueueAlloc(Queue *q)は何を返すのか?
2. int QueueEnque(Queue *q, Node *x)は何を返すのか?
920919:2006/01/08(日) 23:17:30
追加:
3. QueueInit()はQueueAlloc()とで、コメントでは行う仕事が被っているが、
  どう処理すべきか?
921デフォルトの名無しさん:2006/01/08(日) 23:30:08
>919 1,2 整数。 3センセに確認する。

横からチャチャ入れてるだけなので、マジにとらないでね。
922デフォルトの名無しさん:2006/01/08(日) 23:34:21
>>919
いまいち説明してくれないんでよくわからないんですが
1と2に関してはエラー時(メモリ確保に失敗したなど)に-1を返し
正常時には0を返すみたいです。
3については僕も一緒に感じるんですが
QueueAllocはq->frontなどにNodeの大きさ分メモリ確保するものだろうと考えて進めてます。。
923919: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;}
924デフォルトの名無しさん:2006/01/09(月) 00:12:35
>>923
おぉー、ありがとうございます!
あ、でもrearから入れてfrontから出すっていう風みたいにするらしいです。
詳細言ってなくて申し訳ありません。。
これを参考に逆にしてみます。ホントありがとう
925919: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] 期限: 明日まで

宿題が終わりません誰か助けてください( ;∀;)
927デフォルトの名無しさん:2006/01/09(月) 01:34:17
明日っていつだよ
928デフォルトの名無しさん:2006/01/09(月) 01:36:34
>>901-902
ありがとうございます。助かりました。
929デフォルトの名無しさん:2006/01/09(月) 01:42:40
私のソフトにはエディタがあります。エディタで編集した内容をあるタイミングで履歴として
ファイルに保存してきます。「前へ」「次へ」ボタンで履歴を前後に移動できます。
で、SDIなら簡単なのですが、MDIでエディタが複数あるんですけど、
どんな風にデータを持てばよろしいでしょうか?ちなみに、履歴のリポジトリはエディタ毎に
もつんじゃなく、一つにしたいんです。

かれこれ2年悩んでいます。
プログラムが一番シンプルになるデータ構造を教えてくれたら幸いです。


930デフォルトの名無しさん:2006/01/09(月) 01:45:26
>>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;
}
931デフォルトの名無しさん:2006/01/09(月) 01:50:40
>>929
一つにしなきゃいいじゃん
932デフォルトの名無しさん:2006/01/09(月) 01:50:47
>>926
ttp://jjy.nict.go.jp/QandA/FAQ/12am-or-0pm-J.html
によれば午後0時とは昼の12時であって、ということはマイナス表示も
ありうるが、そのようにしろということか?
933デフォルトの名無しさん:2006/01/09(月) 01:53:31
前日の正午からの経過時間とも解釈できるな。ちゃんと説明して。
934デフォルトの名無しさん:2006/01/09(月) 01:59:03
>>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;
}
935デフォルトの名無しさん:2006/01/09(月) 02:03:27
>>929
リポジトリ構造体を作る
リポジトリ構造体内にファイルを所属させる
ファイルごとに履歴構造体を持つ
936デフォルトの名無しさん:2006/01/09(月) 02:10:49
>>931
別ウィンドウで履歴一覧がでるのですが、エディタ毎にもつと都合が悪いので、
なるべく一つにして、共有させたいと思っているのです。
>>935
ありがとうございます。ちょっと私の頭では理解できないので、
しばらく考えてみます。
937デフォルトの名無しさん:2006/01/09(月) 02:59:05
>>929
どうしたいの?
938デフォルトの名無しさん:2006/01/09(月) 03:12:10
>>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);
}
939デフォルトの名無しさん:2006/01/09(月) 03:14:37
>>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;
}
940デフォルトの名無しさん:2006/01/09(月) 03:38:52
[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の要素の個数を指定します。
941デフォルトの名無しさん:2006/01/09(月) 03:41:55
こちらが関数のソースになります。
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にはソートされて数値が格納されています。)
原因がわかる方はいますでしょうか・・
942940: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] その他の制限: 特になし

すみません。よろしくおねがいします。
944940:2006/01/09(月) 03:55:25
特殊記号扱いになってソースが変にorz
こちらがソースになります
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1418.zip
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行までです");

というところで、移植性のないポインタ変換というエラーメッセージが表示されるのですが
どうすればいいのでしょうか・・・
948デフォルトの名無しさん:2006/01/09(月) 04:12:40
int型にキャストしてみればどうだろうか
949デフォルトの名無しさん:2006/01/09(月) 04:16:03
駄目だな

atoi(argv[i])だ
950デフォルトの名無しさん:2006/01/09(月) 04:25:46
[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行以上の指定をしても、エラーの表示がでません
_| ̄|○
ロジック自体が間違っているのでしょうか・・・
952デフォルトの名無しさん:2006/01/09(月) 04:38:32
int max = MAX_LINE;
はこの場合
int max=255;

if(!strncmp(argv[i],"-",1)) /*i番目に格納された文字列の比較*/
{
if(argv[i] > max)
{
のロジックを
atoi(&argv[i][1])>max
にするべき
多分
953デフォルトの名無しさん:2006/01/09(月) 04:40:20
[1] 授業単元:
[2] 問題文 あるプログラムを途中なのですがVKKの計算という部分が上手くいきません。
動くのですが出力されたデータを見ると明らかに数値が違うものが出ます。
書き方がおかしいのだと思いますがどう書き直したらいいか教えてもらえないでしょうか。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 1月10日
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1419.txt

よろしくお願いします
954デフォルトの名無しさん:2006/01/09(月) 04:42:36
>>953
そもそもVKKってなんだよ?
このスレにエスパーいねーぞ
955デフォルトの名無しさん:2006/01/09(月) 04:44:13
%e→%fにでも
あとファイルIOは必ずファイルが開けなかった時の動作を記述するべき

そんな事より940わかる方はお願いしますorz
956デフォルトの名無しさん:2006/01/09(月) 04:47:47
>952様
int max = MAX_LINEのMAX_LINEは既に#defineで255と定義済みなので、問題ないかと思うのですが
使い方が間違ってるのでしょうか・・・
また、952様のアドバイスどおりに変えてみたのですが、やはり同じでした
957デフォルトの名無しさん:2006/01/09(月) 04:57:47
>>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
>957様
何度も申し訳ないです。
引数には、-もいれてあります。
http://proxy.f2.ymdb.yahoofs.jp/users/ccb552f0/bc/%a5%de%a5%a4%a5%c9%a5%ad%a5%e5%a5%e1%a5%f3%a5%c8/head.txt/head.txt.c?bc5lBOEBKCOAJ.5c
こちらにソースを全てアップさせていただきました。
こちらを一度みていただいて、255の上限を超えた場合はエラーを表示して、exit(1)で終了。
その次に、コマンドライン引数の数は一つか二つのみ許可するような方法を教えていただければと思います。
こんな時間にすみません・・・
959デフォルトの名無しさん:2006/01/09(月) 05:08:59
>>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);
としてしまえばいいだろうか
960デフォルトの名無しさん:2006/01/09(月) 05:11:10
ttp://wisdom.sakura.ne.jp/programming/c/c32.html
コマンドラインの引数についてはここを参照するとグッド
961デフォルトの名無しさん:2006/01/09(月) 05:12:51
やべ眠くて思考まわんなす^ω^;
支離滅裂な説明風味でごめんよorz
962デフォルトの名無しさん:2006/01/09(月) 05:27:36
>959様
何から何までご丁寧に本当にありがとうございます。
行数のほうはきちんと動くようになりました。
こんな遅い時間にまでお付き合いいただき本当にありがとうございます
963デフォルトの名無しさん:2006/01/09(月) 06:31:32
[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進数」に変換できるようにプログラムを拡張しなさい。
965デフォルトの名無しさん:2006/01/09(月) 07:04:09
またお前か
966デフォルトの名無しさん:2006/01/09(月) 08:44:48
[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] その他の制限:特になし(コンソールアプリで充分だそうです)
967デフォルトの名無しさん:2006/01/09(月) 08:47:54
問題写し間違えました
「CPUの動作クロック」です

すみません
よろしくおねがいします
968デフォルトの名無しさん:2006/01/09(月) 09:36:40
>>970取った方次スレ立てて下さい
969デフォルトの名無しさん:2006/01/09(月) 09:52:09
>>966-967
ここを参考に作るといいよ
ttp://yosirin9.hp.infoseek.co.jp/tips/no2/tips_no2.htm
ちなみにサンプルプログラムにバグがあって、

sub eax, cycle.LowPart
sub edx, cycle.HighPart

sub eax, cycle.LowPart
sbb edx, cycle.HighPart
だから注意
(ミクロな時間計測なら問題出ないんだけどね)
970デフォルトの名無しさん:2006/01/09(月) 09:59:45
>>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;
}
971デフォルトの名無しさん:2006/01/09(月) 10:05:10
972デフォルトの名無しさん:2006/01/09(月) 10:10:07
マテ。なぜ news7?
973デフォルトの名無しさん:2006/01/09(月) 10:15:07
974837:2006/01/09(月) 10:47:50
どなたか>>837をお願いいたします・・・
975デフォルトの名無しさん:2006/01/09(月) 11:20:14
○○法で求めよって問題は、その方法がわかっていても説明がない場合は答えない
あっても答えないことの方が多いが
976デフォルトの名無しさん:2006/01/09(月) 11:46:19
>>884
ΩΩΩ<な、なんだってー!?
977デフォルトの名無しさん:2006/01/09(月) 13:10:13
ワロタ
978デフォルトの名無しさん:2006/01/09(月) 13:11: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);
981デフォルトの名無しさん:2006/01/09(月) 14:58:21
>>979
× printf("%lf", &ans);
○ printf("%lf", ans);
982デフォルトの名無しさん:2006/01/09(月) 15:10:04
>>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
983884 (=883):2006/01/09(月) 15:22:17
なんか今になって話題になってるな。
テンプレに従わない質問者に小さなはったりをかましただけだったのだが。
984884 (=883):2006/01/09(月) 15:27:21
しかもちゃんと笑いどころがわかってるヤツと寝ぼけてるヤツがいるな…
985デフォルトの名無しさん:2006/01/09(月) 15:28:41
ネタにマジレス返してる979
986デフォルトの名無しさん:2006/01/09(月) 15:40:56
しかもまともにプログラムが書けてない>>979
987デフォルトの名無しさん:2006/01/09(月) 15:47:12
985 == 986
988デフォルトの名無しさん:2006/01/09(月) 15:47:55
低脳ほど教えたがりな罠
989デフォルトの名無しさん:2006/01/09(月) 15:49:11
ここですか?884をフォローするスレというのは?
990デフォルトの名無しさん:2006/01/09(月) 15:50:09
987 == 979
991デフォルトの名無しさん:2006/01/09(月) 15:51:54
同じようにいじられた過去を持つ>>985 >>986
992デフォルトの名無しさん:2006/01/09(月) 15:53:20
>>990
sage使ってない時点で
993884 (=883):2006/01/09(月) 16:25:33
俺的には >>978 がかなりファンキーだと思うんだけど
みなさんはスルーですか。
994デフォルトの名無しさん:2006/01/09(月) 16:30:54
ベタだな。
995デフォルトの名無しさん:2006/01/09(月) 16:46:29
スタイルの議論でreturn(...)は関数呼び出しに見える。ってのがあるのでそれを使った。
ポインタの参照は2項演算をわざとスルーしたので、反省している。
こっちのネタもスタイルの議論でよくある a**bって書くな、 a * *bと書け。ってのから発想した。

ベタなのはしょうがないんだ(^^;;
996デフォルトの名無しさん:2006/01/09(月) 16:49:59
埋めついでに書くと、>>884 に対する反応でもっともおもしろいのは
>>886 だな
997デフォルトの名無しさん:2006/01/09(月) 17:01:13
次スレのご案内
C/C++の宿題を片付けます 57代目
http://pc8.2ch.net/test/read.cgi/tech/1136768567/
998デフォルトの名無しさん:2006/01/09(月) 17:41:35
あと2埋め
999デフォルトの名無しさん:2006/01/09(月) 17:41:43
ネタ回答集とかだれかまとめてくれんかねぇ・・・。
1000デフォルトの名無しさん:2006/01/09(月) 17:46:26
ume
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。