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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 97代目
http://pc11.2ch.net/test/read.cgi/tech/1193150915/
2C:2007/11/05(月) 21:00:26
[1]3
[2]
数値(0:END):2
現在までの合計:2
一つ前の合計:0
a=2, b=0
数値(0:END):5
現在までの合計:7
一つ前の合計:2
a=2, b=7
数値(0:END):7
現在までの合計:14
一つ前の合計:7
a=14, b=7
数値(0:END):9
現在までの合計:23
一つ前の合計:14
a=14, b=23
数値(0:END):3
現在までの合計:26
一つ前の合計:23
a=26, b=23
数値(0:END):0
終了します。

↑を↓の感じでお願いします。
3C:2007/11/05(月) 21:01:18
#include <stdio.h>
#include <stdlib.h>

int main() {
int a=0, b=0;
int *now, *prev;

/* 変数宣言、および処理を書く */

printf("現在までの合計:%d\n一つ前の合計:%d\n", *now, *prev);
printf("a=%d, b=%d\n", a, b);

/* 処理を書く */

}

[6]6日まで
C言語でお願いします
4デフォルトの名無しさん:2007/11/05(月) 21:08:43
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
・CPlayerクラスの定義
・CPlayerのオブジェクトをnew演算子の4個の変数を動的に確保
・4つの変数それぞれのm_nLifeに任意の値を入力させる
・入力された4つの変数それぞれのm_nLifeを表示する。
・確保したオブジェクトを開放

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C++
[4] 期限: 2007年11月6日10:00まで
[5] その他の制限:特になし

よろしくお願いします
5デフォルトの名無しさん:2007/11/05(月) 21:29:35
>>4
問題の意味がわからん
6デフォルトの名無しさん:2007/11/05(月) 22:14:19
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ニュートン法と二分法の両方を用いて、直線y=x+1/2と単位円x*x+y*y=1の交点のの近似解(小数点以下第6位まで)を求めよ。
1つのプログラムに書くこと。
二分法の初期値[a,b]=[-1,1]
ニュートン法で用いる初期値は2つとも0とせよ。
ニュートン法も二分法もともに何回で収束したかがわかるようにすること。
関数へのポインタは必ず使うこと。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2007年11月6日17時
7デフォルトの名無しさん:2007/11/05(月) 22:59:15
[1]授業単元:情報セキュリティ
[2]問題文
これらの変換方式を理解しその法則から数値を導き出すプログラムを書きなさい。

以下内容
http://pc11.2ch.net/test/read.cgi/tech/1187079488/133-134

これをCで吐けるようにしたいのですが

[3]環境
[3.1]OS:Windows
[3.2]コンパイラ:VC or BCC
[3.3]言語:C
[4]期限:2007年11月6日 8時

アセンブラのところにも書いたのですが、こちらのほうが良さそうなので
こちらで質問させていただきます。お願いします
8aho:2007/11/05(月) 23:48:48
>>4
問題文をちゃんと書かんかい!
まあ一応作ったルわ
まずはCPlayerクラスの定義から

class CPlayer{
int* val1;
int* val2;
int* val3;
int* val4;
public:
CPlayer::CPlayer();
CPlayer::~CPlayer();
void CPlayer::inputData();
void CPlayer::showData();
};
9aho:2007/11/05(月) 23:52:01
>>8続き
次にコンストラクタ内で動的にメモリを確保する。
CPlayer::CPlayer(){
int size = 10;
val1 = new int[size];
val2 = new int[size];
val3 = new int[size];
val4 = new int[size];
}
次は順番をちょっと変えてメモリの解放から先に
CPlayer::~CPlayer(){
if(val1){
delete[] val1;
val1 = NULL;
}
if(val2){
delete[] val2;
val2 = NULL;
}
if(val3){
delete[] val3;
val3 = NULL;
}
if(val4){
delete[] val4;
val4 = NULL;
}
}
10aho:2007/11/05(月) 23:54:46
>>4
次はデータの入力の実装。
と思ったけど、面倒になったからやめる。


114:2007/11/06(火) 00:21:38
>>5
授業を理解してないので・・・

>>8
ありがとうございます。

頑張ってみます。
12デフォルトの名無しさん:2007/11/06(火) 02:56:48
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5218.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 11月6日22:00まで
[5] その他の制限: 条件が問題文と一緒にありますので確認お願いします
よろしくお願いしますm(_ _)m
13デフォルトの名無しさん:2007/11/06(火) 08:43:49

前スレ>>955
>正四面体があるとする。底面(ある一つの面)に平行な(n-1)枚の面で高さをn等分することを考える。この作業を他の面に平行な面でも行う(他の方向にもn等分する)場合、正四面体は全部で何個に分けられるか。

正四面体をn等分すると正四面体と正八面体の二種類の立体が出来て、それぞれの数は下記の通りです。
正四面体 n*(n^2+2)/3
正八面体 n*(n+1)*(n-1)/6

数学的な証明は自分でしてください。
14デフォルトの名無しさん:2007/11/06(火) 09:07:49
>>12
似たような課題前見て、そん時upしたソースファイルと開いた英文ファイルupしとく
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5219.lzh
まぁ、好きなように改造してくれ
strtok使ったりとまぁごちゃごちゃしてて読みづらいことこの上ないだろうけどな
15デフォルトの名無しさん:2007/11/06(火) 13:49:04
void heikin_bunsan(int tensu[],int num){

int i;
double f;
double heikin;
double bunsan;
double goukei;
double total;
for(i=0;i<num;i++){
goukei=goukei+tensu[i];
}
heikin=goukei/num;
for(i=0;i<num;i++){
f=(tensu[i]-heikin)*(tensu[i]-heikin);
total=total+f;}
bunsan=total/num;

printf("平均点%3.3d点\n",heikin);
printf("分散%3.3d\n",bunsan);
}

goukeiとheikinの計算部分を間違えているようです、間違いの指摘お願いします。
もっと短縮できるところあったらそこもお願いします><
16デフォルトの名無しさん:2007/11/06(火) 14:05:53
>>14
なに得意げにCの小汚いソースさらしてんだか
17デフォルトの名無しさん:2007/11/06(火) 14:19:49
>>16
そういう前に綺麗なソースとやらを見せてくれ
18デフォルトの名無しさん:2007/11/06(火) 14:33:03
>>15
goukeiとtotalが初期化されてない。
表示は%dじゃなくて%f。

工夫すればループは一回でできる。
void heikin_bunsan(int tensu[], int num) {
int i;
double goukei=0,total=0,heikin,bunsan;

for(i=0; i<num; i++) {
goukei += tensu[i];
total += tensu[i] * tensu[i];
}
heikin = goukei / num;
bunsan = total / num - heikin * heikin;

printf("平均点%3.3f点\n",heikin);
printf("分散%3.3f\n",bunsan);
}
19デフォルトの名無しさん:2007/11/06(火) 14:40:31
>>17
やだよ。

std::stringを使えってことだから、あの小汚いソースにあるmallocやstrtokなどは不要だし、
リスト構造も不要(std::listを使えという意味じゃない)。

なにより、汚いじゃん。あれ読むのに時間を使うとしたら無駄なので、そう言ったまで。
20デフォルトの名無しさん:2007/11/06(火) 16:21:50
>>14

>>12です。C言語があまりわからないです・・・
すいません・・・
21デフォルトの名無しさん:2007/11/06(火) 16:29:53
>>19
小汚いソースや変態的ソースで回答するのがこのスレの醍醐味ですよ^^
22デフォルトの名無しさん:2007/11/06(火) 17:43:25
>>12
もろもろ適当だけど、まぁ宿題の回答位にはなってると思う。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5220.txt

make&実行はしてみたが、テストはしてない。
23デフォルトの名無しさん:2007/11/06(火) 18:23:10
【質問テンプレ】
[1] 授業単元:1次元配列&2次元配列&else if~&switch case文
[2] 問題文(含コード&リンク):
1つ目。生徒10人分の身長データがある。
この身長データを配列に読み込み、平均身長を計算しなさい。
また、画面に番号・身長、最後に平均身長及び最も高い人の番号と身長を表示させなさい。
なおここでいう番号とは配列番号とする。
2つ目。上のデータを、身長をキーワードにして降順にソートしなさい。
3つ目。最初のプログラムに身長の低い順に順位をつける処理を追加しなさい。
[3] 環境
 [3.1] OS: Unix
 [3.2] gcc34
 [3.3] 言語: C言語
[4] 期限: ([2007年11月06日21:00まで)
[5] その他の制限: できるだけ初心者でもわかる文がいいです
24デフォルトの名無しさん:2007/11/06(火) 18:37:04
>>23
身長データはテキストファイルから読み込むのですか?
25デフォルトの名無しさん:2007/11/06(火) 19:00:29
>>23に追加です・・・
入力データ:165、173、169、178、175、159、171、169、170、168
です。最初の問題の追加です。入力もれすいません
26デフォルトの名無しさん:2007/11/06(火) 19:03:58
[1] 授業単元:配列の使い方、関数の使い方
[2] 問題文:
(1)2行3列の行列AとBの和と差を求めよ.
c(i,j)=a(i,j)+b(i,j)
d(i,j)=a(i,j)-b(i,j)

(2)2行3列の行列Aと3行4列の行列Bの積Cを求めよ
c(i,j)=Σ(k=1~3)a(i,k)b(k,j)

(3)eのx乗=1+x/1!+xの2乗/2!+xの3乗/3!+・・・
を計算するプログラムを作れ

(4)これを関数として定義し、
x=0,0.1,0.2,・・・,1.0を計算せよ.
また、power(e,x)と比較せよ.
ただし、e=2,71828として計算せよ.
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C++
[4] 期限:2007念11月07日11:00まで
[5] その他の制限:なし
27デフォルトの名無しさん:2007/11/06(火) 20:04:19
>>26
(3)と(4)、ネーピア数などを求めるプログラムは前スレ>>427にもあるみたいです。

#include <stdio.h>
#include <math.h>
double myexp(double x)
{
double s = 0.0;
double a = 1.0;
int n;

s += 1.0;
for (n = 1; n < 20; n++) {
a = a * x / n;
s = s + a;
}
return s;
}
int main(void)
{
double x;
printf("\t x\t myexp(x)\t exp(x)\n");

for(x=0.1;x<=1.0;x+=0.1)
{
printf("\t%2.1f\t%13.5f\t%13.5f\n", x, myexp(x), exp(x));
}
return 0;
}


28デフォルトの名無しさん:2007/11/06(火) 20:14:17
[1] 授業単元:C
[2] 問題文(含コード&リンク):
nを入力して、次の級数の和[1+(1/2)+(1/3)+(1/4)+...+(1/n)]の値を計算して出力する。
(整数型変数と実数型変数の混合演算の結果は実数型となり、整数が頼みの演算結果は整数になることに注意せよ)
[3] 環境
 [3.1] OS:Unix(MacOSX)
 [3.2] コンパイラ名とバージョン:gcc 4.0.1
 [3.3] 言語: Cにて
[4] 期限: [2007年11月6日まで]
[5] その他の制限:特にはないです。

当方、C言語初心者なのですが、
どうしてもわからないので支援をお願い致します。
軽く書いてみたのですが、結果が0しか返ってきません。
よろしくお願いします。
29デフォルトの名無しさん:2007/11/06(火) 20:22:54
1.0にすればいいんじゃね?
30デフォルトの名無しさん:2007/11/06(火) 20:34:21
#define MAX 1
#define MIN 3

int * ranking(int *n1, int *n2, int *n3, int rank) {
/* rankが1なら最大値、3なら最小値を返す */
/* 関数を作成 */
}

int main() {
int a, b, c, i;
printf("(a,b,c):");
scanf("%d %d %d", &a, &b, &c);
printf("(a,b,c)=(%d,%d,%d)\n", a, b, c);
printf("最大値 : %d\n", *ranking(&a, &b, &c, MAX));
printf("最小値 : %d\n", *ranking(&a, &b, &c, MIN));
}
31デフォルトの名無しさん:2007/11/06(火) 20:43:33
>>28
double KyuuSuu(int n)
{
int i;
double num = 0.0;
for(i = 1; i <= n; i++)
num += (1.0/i);

return num;
}
32shin:2007/11/06(火) 21:04:55
[1] 授業単元: 文字と文字列 ASCIIコード
[2] 問題文(含コード&リンク):
   入力された文字列中に、文字 a がいくつ含まれているか個数を表示し、
   見つけた箇所に「^」を表示するプログラム。
   【動作例】
    文字列を入力 >> aoriunvtyuoertnoainaainAi
     a を4個発見しました。
    文字列・・・aoriunvtyuoertnoainaainAi
         ^        ^ ^^
    (本当は ^ が a 下にきます)
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C++
[4] 期限: 出来れば・・2007年11月7日 22:00までにお願いします
33デフォルトの名無しさん:2007/11/06(火) 21:05:23
[1] 授業単元:C
[2] 問題文(含コード&リンク):
for( i?? ;i?? ;i?? ) { for ( j?? ;j?? ;j?? ) { printf("%d ",j); } printf("\n"); }
for文の中を埋めて一行目 1 2 二行目 2 4 6 三行目3 6 9 12 四行目 4 8 12 16 20
五行目 5 10 15 20 25 30と表示させよ
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:BCC 5.5
 [3.3] 言語: C
[4] 期限: [2007年11月8日まで]
[5] その他の制限:特にはないです。

よろしくお願いします。
34shin:2007/11/06(火) 21:05:50
ここまでは作りました・・(ちなみに「a」のASCIIコードは「0x61」です)

 #include <iostream.h>
main()
{
const int Max_Length = 50 ; // 入力文字列の最大値
char sentence[Max_Length] ; // 入力文字列
int count ; // 文字カウンタ

// 文字列の入力
cout << "英数字のみの文字列を入力して下さい。 >>> " ;
cin.getline( sentence, Max_Length ) ;

// 文字数のカウント
count = 0 ;
while( sentence[count] != '\0'){
count++ ;
}
3523:2007/11/06(火) 21:09:12
>>23ですが、とりあえず最初の問題はできました。
#include<stdio.h>
int main()
{
int a[9],sum=0,i,j,max=0,n;
printf("身長を入力してください\n");
for(i=0;i<10;i++){
printf("%d人目の身長を入力⇒",i+1);
scanf("%d",&a[i]);
sum=a[i]+sum;
if(max<a[i]){
max=a[i];
n=i+1;
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
printf("平均身長は%.2fcm 最高身長は%d番目の%dcmです\n",(float)(sum)/(j),n,max);
}

です。しかし、2番目と3番目がどうしてもわかりませんどなたかご教授ください
36shin:2007/11/06(火) 21:09:52
32と34の書き込みはつながってると思ってください!
おねがいします
37デフォルトの名無しさん:2007/11/06(火) 21:24:34
>>31
ありがとうございましたm(__)m
完成しました。
明日の提出にも間に合いそうです。
38デフォルトの名無しさん:2007/11/06(火) 21:40:03
>>33
for (i=1; i<=5; i+=1) { for (j=i; j<=i*(i+1); j+=i) { printf("%d ",j); } printf("\n"); }
39デフォルトの名無しさん:2007/11/06(火) 21:41:39
// >>32 文中のaの数をカウントするプログラム
// bcc 5.5.1 for win32
#include <iostream.h>

int main(void)
{
const int Max_Length = 50 ; // 入力文字列の最大値
char sentence[Max_Length] , dummy[Max_Length]; // 入力文字列
int count = 0, a = 0; // 文字カウンタ

// 文字列の入力
cout << "英数字のみの文字列を入力して下さい。 >>> " ;
cin.getline( sentence, Max_Length ) ;

// 文字数のカウント
while( sentence[count] != '\0'){
if (sentence[count] == 0x61){
a++ ;
dummy[count] = '^' ;
} else {
dummy[count] = ' ' ;
}
count++ ;
}

dummy[count] = '\0' ;

cout << "aは次の数だけ見つかりました : " << a << "\n" << sentence << "\n" << dummy << endl ;
}
40デフォルトの名無しさん:2007/11/06(火) 22:07:50
規制でパソコンから書けないので携帯から
1)C言語
2)積算日数計算(閏年含む)リンクはつなげません
3)環境
3、1)OS Linux
3、2)不明
3、3)言語 C言語
4)期限・2007年11月7日
5)void?は使わない方向で。if 又は for 文でお願いします。
月ごとに{31,28…}と指定したと思います。閏年は{31、29…}という感じで別に指定していました。
よろしくお願いします。
41デフォルトの名無しさん:2007/11/06(火) 22:11:37
// >>23
#include<stdio.h>
int main(){
int a[10],sum=0,i,j,max=0,n,temp;
printf("身長を入力してください\n");
for(i=0;i<10;i++){
printf("%d人目の身長を入力 : ",i+1);
scanf("%d",&a[i]);
sum=a[i]+sum;
if(max<a[i]){
max=a[i];
n=i+1;
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
printf("\n平均身長は%.2fcm 最高身長は%d番目の%dcmです\n\n",(float)(sum)/(j),n,max);
for (i = 0; i < 10 - 1; i++) {
for (j = 10 - 1; j > i; j--) {
if (a[j - 1] > a[j]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
}
4223:2007/11/06(火) 22:53:08
>>41さん
これは、1番最初のやつのプログラムでしょうか?
43デフォルトの名無しさん:2007/11/06(火) 23:06:21
[1] 授業単元: C
[2] 問題文(含コード&リンク): int型の変数bunbo、bunshiをメンバに持つ、
構造体struct bunsuuを定義する。

2つのstruct bunsuu型の変数を引数として、
足し算、引き算、掛け算、割り算を行った結果を
戻り値とする関数をそれぞれ作成しなさい。

2つのint型を引数とし、その最大公約数を計算して
戻り値とする関数も作成し、必要に応じて利用しなさい。

struct bunsuu型の変数を出力する関数を作成しなさい。
出力は「分子 / 分母」の形で1行とする。
ただし分母が1の場合は、分子のみとする。

以上6種類の関数が作成できたら、
キーボードから2つの分数を入力し、
足し算、引き算、掛け算、割り算の計算結果を順に
分数で画面に出力するmain関数を作成しなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: C
[4] 期限: 11/8まで
[5] その他の制限: 特になし


44デフォルトの名無しさん:2007/11/06(火) 23:07:26
[1] 授業単元: C
[2] 問題文(含コード&リンク):要素数が10のint型の配列に
キーボードから数値を入力する関数を作成し
(main関数の中で)呼び出しなさい。

配列はmain関数の中で宣言し、
入力を行う関数は、配列のアドレスと
配列の要素数を引数として受け取るものとする。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: C
[4] 期限: 11/8まで
[5] その他の制限: 特になし

こちらもお願いします
45shin:2007/11/06(火) 23:27:35
>>39
ありがとうございました(´`)!!!!!!!!!!
46デフォルトの名無しさん:2007/11/06(火) 23:39:17
[1] 授業単元:オペレーティングシステム
[2] 問題文(含コード&リンク):
HTTPリクエストを受け付けると、URLに記載された名前のHTMLファイルをブラウザに返す
簡単なWebブラウザをC言語を用いて作成せよ。
このWebサーバはHTTPリクエストを受け付ける毎にforkシステムコールにより新しいプロセスを生成し、
そのプロセスがURLに指定されたHTMLファイルをファイルシステムから取り出して、ブラウザに返す。
基本的には、リクエストを送りリプライを返すことができればいい。
また、結果をブラウザで表示できる程度の実装で構わない。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C言語
[4] 期限: 11月15日
[5] なし

ブラウザに表示させることができません・・・どなたかお助けください
47デフォルトの名無しさん:2007/11/07(水) 02:19:00
(x1+x2+x3+・・・xn)の2乗/N((x1)の2乗+(x2)の2乗+・・・
(xn)の2乗) を計算するプログラムってどうやって書くんですか?
教えてください!!
48デフォルトの名無しさん:2007/11/07(水) 03:15:43
>>47
あなたにはプログラミングの前にテンプレの使い方を教えます。
[1] には授業名などを書いてください。
[2] には問題文を書いてください。
[3] には環境を書いてください。とくに、CかC++は重要です。
[4] には期日。
[5] にはその他を書いてください。
49デフォルトの名無しさん:2007/11/07(水) 03:29:14
[1] C言語入門
[2] jain fairness index の式をC言語でプログラミングで書きなさい.
   (x1+x2+x3+・・・xn)の2乗/N((x1)の2乗+(x2)の2乗+・・・
(xn)の2乗) という式
[3] C言語
[4] 11月9日 
[5] なし

48さんご指摘ありがとうございました!
よろしくお願いします!
50デフォルトの名無しさん:2007/11/07(水) 03:46:17
>>22
遅れましたがどうもありがとうございました。とっても助かりました
51デフォルトの名無しさん:2007/11/07(水) 03:52:56
>>49
double f(double *x, int n)
{
double s = 0, ss = 0;
int i;

for(i=0; i<n; i++) {
s += x[i];
ss += x[i]*x[i];
}

return s * s / (n * ss);
}
52デフォルトの名無しさん:2007/11/07(水) 06:48:54
>>44
#include <stdio.h>
void input_array(int *a,int *ptr)
{
printf("%d個目の数値入力\n",(*ptr)+1);
scanf("%d",(a+*ptr));
++*ptr;
}
main()
{
int a[10],ptr=0;
printf("数値を10個入力してください。\n");
while(ptr<10){
input_array(&a[0],&ptr);
}
printf("入力結果: ");
for(ptr=0;ptr<10;ptr++)
printf("%d ",a[ptr]);
putchar('\n');
return;
}
53デフォルトの名無しさん:2007/11/07(水) 06:50:37
5433:2007/11/07(水) 07:40:52
>>38
どうもありがとうございました〜。
55デフォルトの名無しさん:2007/11/07(水) 08:51:46
>>52
>入力を行う関数は、配列のアドレスと
>配列の要素数を引数として受け取るものとする。
56名無し募集中。。。:2007/11/07(水) 09:20:23
[1] 自習 明解C++演習5_9
[2] b以上a以下の全整数の和を求める関数sumを作成せよ。
なお、bが省略されて呼び出される場合はbを1とみなして合計を求めること
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:bcc55
 [3.3] 言語:C++
[4] 期限:11/7まで
お願いします。
57デフォルトの名無しさん:2007/11/07(水) 09:27:25
#include <iostream>
using namespace std;

int sum(int a){return a*(a+1)/2;}

int sum(int b, int a){return a*(a+1)/2 - b*(b-1)/2;}


main(){
cout<<sum(2,10);
}
58デフォルトの名無しさん:2007/11/07(水) 09:48:19
[1]情報処理
[2]二分法で y=x*x−5 の根をもとめる
[3]C言語 LInux
[4]10時半まで
[5]おねがいします><
59デフォルトの名無しさん:2007/11/07(水) 10:06:56
#include <stdio.h>
double f(double x){return x*x-5;}

main(){
double a=0,b=10,x;
int i;
for(i=0;i<100;i++){
x=(a+b)/2;
if(f(a)*f(x)>0)a=x; else b=x;
}
printf("%.6f",x);
}

60デフォルトの名無しさん:2007/11/07(水) 10:12:10
>59
めっっちゃありがとうございます!!
何回で収束するかもできますか?><
61デフォルトの名無しさん:2007/11/07(水) 10:14:50
[1]情報処理
[2]第1引数で指定したint型の先頭から、第2引数で指定した数の要素に中に、
第3引数で指定した値と一致するものがあればその要素のアドレスを、一致す
るものが無ければNULLを戻り値とする関数を作りなさい。探索アルゴリズムと
して番兵法を用いなさい。作成した関数のテストは、戻り値として得たアドレス
に格納されている値を表示する main関数を作成して行いなさい。一致するもの
がない場合には何も表示しなくてよい。
[3]c言語
[4]11/7 23:00

お願いします。
62デフォルトの名無しさん:2007/11/07(水) 10:15:50
>>60
できるけど、収束はいくつぐらいだよ たとえば2乗したときに5からのずれが0.00001とか
63デフォルトの名無しさん:2007/11/07(水) 10:19:01
#include <stdio.h>
#define gosa 0.00001
double f(double x){return x*x-5;}

main(){
double a=0,b=10,x,y;
int i;
for(i=1;i<100;i++){
x=(a+b)/2;
y=f(x);
if(y<gosa && y>-gosa){printf("%d回目の試行で収束 x=%.6f",i,x);return 0;}
if(f(a)*f(x)>0)a=x; else b=x;
}
printf("収束しない");
}

64デフォルトの名無しさん:2007/11/07(水) 10:21:52
ありがとうございました!!
条件じぶんでかえてやります><
65教えてください:2007/11/07(水) 11:52:10
double bibun_f(double a, double b,double c, double d)
{
double f;
f = 1 / (1 - mu * pow(cos(d - c), 2)) * (mu * ga * sin(d) * cos(d - c) + mu * pow(a, 2) * sin(d - c) * cos(d - c) - ga * sin(c) + mu / lambda * pow(b, 2) * sin(d - c));
return(f);
}

ここでエラーが error C2018: 文字 '0x81' は認識できません。
と error C2018: 文字 '0x40' は認識できません。がでるのですが・・・どうすればいいのでしょうか??
66名無し募集中。。。:2007/11/07(水) 11:55:15
>>57
ありがとうございました
67デフォルトの名無しさん:2007/11/07(水) 12:05:21
>>65
エラーメッセージを読めばわかるように、全角スペースが混ざっている。

あと、宿題以外は基本的にはスレ違いだから、以後は別のところで聞いてね。
68デフォルトの名無しさん:2007/11/07(水) 12:13:55
>>61
int *search(int *p, int n, int x) { /* destructive */
  for (*(p+n) = x; *p != x; ++p);
  return p;
}
main() {
  int i, array[10+1]; /* +1 is for sentinel */
  for (i = 0; i < 10; ++i) {
    array[i] = i % 7;
    printf("%p : %d\n", &array[i], array[i]);
  }
  printf("%d found at %p\n", 4, search(array, 10, 4));
}
69デフォルトの名無しさん:2007/11/07(水) 12:17:48
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

N×N のチェス盤が与えられる( 左下を (1,1) とする )。
(x1,y1) にビショップを置いたとき、(x2,y2) に移動するまでの
最小手数を表示せよ。ただし移動できない場合は -1 と表示せよ。

[3] 環境
 [3.1] OS: 指定なし
 [3.2] コンパイラ名とバージョン: 指定なし
 [3.3] 言語: どちらでも可
[4] 期限: 今日中
[5] その他の制限: 特になし
70デフォルトの名無しさん:2007/11/07(水) 12:32:43
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。
各ブロックには自分自身の重さ weight[k] と、
自分の上に乗せられる重さ load[k] が設定されている。

縦に積める最大のブロックの個数を求めよ。

例:
N = 5, (weight, load) = (19,15), (7,13), (6,7), (6,8), (1,2) → 4

[3] 環境
 [3.1] OS: 指定なし
 [3.2] コンパイラ名とバージョン: 指定なし
 [3.3] 言語: どちらでも可
[4] 期限: 今日中
[5] その他の制限: 特になし
71デフォルトの名無しさん:2007/11/07(水) 12:37:29
>>70
>同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。
違う形をした正方形があったら怖い。

同じ大きさと言う解釈でいいのかな?
72デフォルトの名無しさん:2007/11/07(水) 12:43:34
>>71
そういうことです。形(大きさ)が問題になって積めない、ということはないとします。
73デフォルトの名無しさん:2007/11/07(水) 12:45:24
>>71
重さ考えるだけでいんだから大きさはどうだっていいだろ

それより
>正方形のブロック
二次元か
74デフォルトの名無しさん:2007/11/07(水) 12:45:46
>>69
#include<stdio.h>
int main(void){
int x,y,x1,y1,x2,y2;
printf("x1 y1 x2 y2 = ");
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
x=x1>x2?x1-x2:x2-x1;
y=y1>y2?y1-y2:y2-y1;
if(x==0&&y==0)printf("0");
else if(x==y)printf("1");
else if(x%2==y%2)printf("2");
else printf("-1");
printf("\n");
return 0;
}
75デフォルトの名無しさん:2007/11/07(水) 13:02:11
>>68
ありがとうございました^^
76デフォルトの名無しさん:2007/11/07(水) 13:45:49
このスレも遂に99代目、次100代目ですね。
[1] 授業単元: C言語演習V
[2] 問題文(含コード&リンク):
前回の講義にてプログラム実行時の引数を表示するプログラムを作成した。
(実行例)
>ensyu1 file1
argv[0]:ensyu1
argv[1]:file1

>ensyu1 file1 file2
argv[0]:ensyu1
argv[1]:file1
argv[2]:file2

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5223.txt
今回はプログラムが実行時にファイルを1つだけ引数として取るような
プログラムを作成したい。
そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、
プログラムを終了するように修正せよ。
(実行例)
>ensyu1 file1
argv[0]:ensyu1
argv[1]:file1

>ensyu1 file1 file2
Usagi: ensyu1 filename
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限: 11月8日(木)PM12時までにお願いします。
[5] その他の制限: ファイルの標準入出力まで習いました。
77デフォルトの名無しさん:2007/11/07(水) 13:49:02
兎じゃなくて、普通はUsageですよ。
78デフォルトの名無しさん:2007/11/07(水) 13:50:40
>>76
×「そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、 」

○「そこで引数が2つ以上の場合には「Usagi: ensyu1 filename」と出力させ、」

でした./で実行はLinuxですね。(汗)
79デフォルトの名無しさん:2007/11/07(水) 14:03:53
>>77
Usageです。兎だと思ってた。orz
80デフォルトの名無しさん:2007/11/07(水) 15:27:01
すみませんが、お願いします。
[1] 授業単元: 音響工学
[2] 問題文(含コード&リンク):
 正弦波に対してガウス窓を掛け、テキストファイルに出力せよ。窓間は任意。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C++
[4] 期限:2007年11月8日まで
[5] その他の制限:特にありません。

よろしくお願いします!
81デフォルトの名無しさん:2007/11/07(水) 16:21:26
>>80
>>1 をきちんと読んだかい?
8280:2007/11/07(水) 16:57:10
一応読みましたけど、至らない点ありましたか?
83デフォルトの名無しさん:2007/11/07(水) 16:59:55
ガウス窓の説明とその描画方法を書くように
84デフォルトの名無しさん:2007/11/07(水) 17:07:45
>>83
知らないんなら無視すればいいんじゃないかなー
やる気あるならググれば一発だしー
描画しろなんてどこにも書いてないしー
85デフォルトの名無しさん:2007/11/07(水) 17:13:22
同意。それは兎も角、テキストファイルへの出力形式については質問させてくれ。
1行1データでずらっとならべればいいのか?
86デフォルトの名無しさん:2007/11/07(水) 19:44:02
>>80
gnuplot使えば簡単にできるってことでいいのか
8780:2007/11/07(水) 19:46:33
はい。
1行1データです。
ガウス窓でぐぐってもよくわからなかったので、お願いしに来た次第なのです。

すみませんが、できればお願いします。
8880:2007/11/07(水) 19:47:48
>>86
gnuplotでできるんですか?
89デフォルトの名無しさん:2007/11/07(水) 20:07:16
// >>80 ガウス窓
// gnuplot でやるには plot sin(x)*exp(-x*x/0.03*0.03)
#include <iostream>
#include <math>
#include <fstream>
#define pi 3.141592

int main (void) // window function - Gauss window
{
double x, sigma=0.03;
std::ofstream window("window.csv");

for (x=-pi; x<pi; x+=0.01){
window << x << ", " << sin(x) * exp(-x*x/sigma*sigma) << std::endl;
}
return 0;
}
9080:2007/11/07(水) 20:15:28
ありがとうございます!
これでなんとかなるかもです!

ご迷惑おかけしました。
91デフォルトの名無しさん:2007/11/07(水) 20:58:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
cat コマンドの作成
fgetc()とfputc() 関数の使用
標準出力とすること。ファイル名を指定しない場合は標準入力
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc 3.4
 [3.3] C
[4] 期限:無期限
[5] その他の:ポインタあたりからあやふやです
よろしくお願いします。
92デフォルトの名無しさん:2007/11/07(水) 21:25:02
>[5] その他の:ポインタあたりからあやふやです
自己紹介はしなくておk
93デフォルトの名無しさん:2007/11/07(水) 21:26:25
[1] プログラミング
[2] y=ax*x+b*x+cをfor文を使って計算しなさい。係数a b cは自分で入力
xの始めの値、終わりの値、増やす値も自分で入力できるようにしなさい。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc3.4
 [3.3] 言語: Cでおねがいします。
[4] 期限: 明日(11月8日まで)
[5] その他
#include<stdio.h>

main()
{
int i, x, y, a, b, c, d, e, f;

printf("y=x*x*a+b*x+cを計算します。\n");
printf("aとbとcを入力して下さい。 --->");
scanf("%f %f %f",&a, &b,&c);
printf("Xの始めの値を入力して下さい。 --->");
scanf("%f",&d);
printf("Xの終わりの値を入力して下さい。--->");
scanf("%f",&e);
printf("Xを増やす値を入力してください。 --->");
scanf("%f",&f);
for(x=d; x<=e; x+f){
y=(x*x*a)+(b*x)+c;
ここまでは自力でやったんですけどその先がまったく分かりません。
よろしくおねがいします。
94デフォルトの名無しさん:2007/11/07(水) 21:58:32
>>93
完成間近じゃねえかよw
95デフォルトの名無しさん:2007/11/07(水) 22:02:18
>>53
コードありがとうございます。

所で・・・
答えとして
入力された分数が 1 / 2 と 2 / 3 のとき
1 / 2 + 2 / 3 = 7 / 6
1 / 2 − 2 / 3 = - 1 / 6
1 / 2 × 2 / 3 = 1 / 3
1 / 2 ÷ 2 / 3 = 3 / 4
こうなるんですが、マイナスの所だけ違うんですがどこを修正すれば
↑のようになりますか?
96デフォルトの名無しさん:2007/11/07(水) 22:14:20
>>95
int gcd(int a,int b)
{
int c,tmp;
if(a<0) a=-a;
if(b<0) b=-b;
if(b>a){
tmp = b;
b = a;
a = tmp;
}
/* ユークリッドの互除法で最大公約数を計算 */
while(a%b!=0){
c = a % b;
a = b;
b = c;
}
return b;
}
符号をチェックしてなかった。gcdをこれに入れ替えてください。
あと、無意味な比較があったのでそれも外してます。
9793:2007/11/07(水) 23:17:20
>>94いくらひねっても分からない・・・orz
98デフォルトの名無しさん:2007/11/07(水) 23:57:15
[1] 授業単元: 応用プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5224.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++ (Cは全くわからないです)
[4] 期限: 11月8日21:00
[5] その他の制限: 条件は問題文と一緒にあります。
どうかよろしくおねがいいたします
99デフォルトの名無しさん:2007/11/08(木) 00:05:27
>>93
基本的にはあと y の値と、必要なら x の値を表示するだけだろう
それに加えて x,y,a〜f の型と、for のカッコの中身を修正するんだ
100デフォルトの名無しさん:2007/11/08(木) 00:11:29
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 画像を上下反転させる
[3] 環境
 [3.1] OS: Mac
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cです
[4] 期限: かなり急いでます、一時ぐらいまで・・・
[5] その他の制限: とりあえず基本的なこと(ポインタ、構造体等)はやりました。
簡単な解説とかあれば嬉しいです。よろしくお願いします。
101デフォルトの名無しさん:2007/11/08(木) 00:18:05
二次元配列の上下の要素を入れ替えるやり方でいいんじゃないの?
102デフォルトの名無しさん:2007/11/08(木) 00:28:09
それがわからないんです・・・。
ネットで探してみましたが、プログラムの内容がさっぱりわかりません。
103デフォルトの名無しさん:2007/11/08(木) 00:36:08
単純な二重ループじゃない?
104デフォルトの名無しさん:2007/11/08(木) 00:51:16
>>76
まだ待ってます。よろしくお願いします。
105デフォルトの名無しさん:2007/11/08(木) 01:01:06
文字列の配列変数とか使いますか?
106デフォルトの名無しさん:2007/11/08(木) 01:04:50
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
行列Aとベクトルxの積y=Axを求めるプログラムを作成したい。
・行列nと列数mを入力させる。
・n×x(nかけるx)の行列Aのメモリを動的に確保する。
・ベクトルx,yのメモリを動的に確保する。
・A[0][0]からA[n-1][m-1]までの数値を1つずつ入力させる。
・ベクトルxの要素x[0]からx[m-1]の数値を入力させる。
・計算結果yの要素y[0]からy[n-1]を出力する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C
[4] 期限:11/11(日)
107デフォルトの名無しさん:2007/11/08(木) 01:06:09
>>
106ーーー実行結果ーーー
./ensyu3
行(n)の数は?2
列(m)の数は?3
------
A[0][0]=1
A[0][1]=2
A[0][2]=3
A[1][0]=4
A[1][1]=5
A[1][2]=6
------
x[0]=1
x[1]=2
x[2]=3
------
y[0]=14
y[1]=32
$
108デフォルトの名無しさん:2007/11/08(木) 01:07:27
>>105
どれ宛の安価?
109デフォルトの名無しさん:2007/11/08(木) 01:10:00
そこまで書いてあるなら順番どおりにやるだけじゃん。
110デフォルトの名無しさん:2007/11/08(木) 01:10:18
すみません、自分は100です。
色々定義しないとダメですよね・・・。
呼び出し関数を使わなくてもforを使えばいいのでしょうか?
111デフォルトの名無しさん:2007/11/08(木) 01:30:02
>[4] 期限: かなり急いでます、一時ぐらいまで・・・

1時くらいまでといってる割には、ノンビリしてるな。
「1時くらいまでには、私は寝たい」から急いでるだけだろ?

こんなやつに、教える必要ないぞ。
112デフォルトの名無しさん:2007/11/08(木) 01:56:26
>>110
#define SWAP(type, a, b) {type c;c=a;a=b;b=c;}

for(y=0;y<height/2;y++)
{
for(x=0;x<width;x++)
{
SWAP(data_t, data[y][x], data[height-1-y][x]);
}
}
113デフォルトの名無しさん:2007/11/08(木) 01:59:36
期限近いヤツの先にやってやれよ。
>>76
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5225.txt
114デフォルトの名無しさん:2007/11/08(木) 02:02:29
>>113
ありがとうございます。
もう出来ないのかと思ってました。ほんとにありがとうございます。
115デフォルトの名無しさん:2007/11/08(木) 02:12:31
>>91
#include<stdio.h>

void file_output(FILE *fp_in, FILE *fp_out){
int moji;

while((moji=fgetc(fp_in))!=EOF) fputc(moji, fp_out);
}

int main(int argc, char *argv[]){
FILE *fp=stdin;
int i;

if(argc==1) file_output(fp, stdout);
for(i=1;i<argc;i++){
fp=fopen(argv[i], "r");
if(fp==NULL) continue;
file_output(fp, stdout);
fclose(fp);
}

return 0;
}
116デフォルトの名無しさん:2007/11/08(木) 11:40:25
【質問テンプレ】
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
入力した文字列(行単位)n個をソートして
昇順に表示するプログラムを作成してください。
ただし同じ文字列は1回だけ表示します。
また、nは1024以下とし、文字列は1024文字までします。
<補足>
>以下を加えてください。
#include<stdio.h>
#include<string.h>


[3] 環境
 [3.1] OS:Linux
 [3.2] わかりません
 [3.3] C言語
[4] 期限: 11月10日
[5] その他の制限:
文字列の関数
strlen(s):sの長さを数える
strcmp(s1,s2):2つの文字列s1,s2を比較し、辞書的に大きい、等しい、小さいに対して
正数、0、負数を返す。
strcpy(s1,s2):文字列s2をs1にコピーし、s1のアドレスを返す。
strcat(s1,s2):文字列s2をs1の後に付け、s1のアドレスを返す。
117デフォルトの名無しさん:2007/11/08(木) 11:52:35
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
整数除算 a/b (a,b は正または負の整数)を計算する関数
int fdivide(int a, int b )を作成せよ。 a と b とを入力、
fdivide(a,b )を計算して出力するmain 関数を作成し、
プログラムと実行結果を提出せよ。

a/b は a がb未満になるまでaから b を繰り返し
引き続け、その回数を記憶することで実現させる。

[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] コンパイラ名とバージョン: (bcc)
 [3.3] 言語: (C++)
[4] 期限: ([11月10日]まで)
[5] その他の制限:C++ の割り算演算子の利用は禁止
よろしくお願いします
118デフォルトの名無しさん:2007/11/08(木) 14:43:16
#include <stdio.h>
#include <stdlib.h>

unsigned fdivide(unsigned a, unsigned b)
{
unsigned sum = 0;
for (unsigned ic = 1; ic < a; ++ic) {
sum += b;
if (sum > a) return ic - 1;
}
return a;
}

int main(int argc, char ** argv)
{
printf("%d\n", fdivide(atoi(argv[1]), atoi(argv[2])));
return 0;
}
119デフォルトの名無しさん:2007/11/08(木) 15:00:38
>>116
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WORD_LEN_MAX 1024

int cmp(char **a, char **b){
return strcmp(*a, *b);
}

int main(int argc, char *argv[]){
char buf[WORD_LEN_MAX+1+1], **word=NULL;
int len, wordnum=0L, i;

while(fgets(buf, sizeof(buf), stdin)!=NULL){
len=strlen(buf);
if(len>0 && buf[len-1]=='\n') buf[len-1]='\0';
word=realloc(word, sizeof(*word)*(wordnum+1));
word[wordnum++]=strdup(buf);
}
qsort(word, wordnum, sizeof(*word), cmp);

for(i=0;i<wordnum;i++) printf("%s\n", word[i]);
for(i=0;i<wordnum;i++) free(word[i]);
free(word);

return 0;
}
120デフォルトの名無しさん:2007/11/08(木) 16:20:55
[1] 授業単元:
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5226.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月9日10:00まで]
[5] その他の制限: 特にありません
どうぞよろしくお願いします
121デフォルトの名無しさん:2007/11/08(木) 16:24:14
122デフォルトの名無しさん:2007/11/08(木) 16:40:29
>>91
学校特定しました。
123デフォルトの名無しさん:2007/11/08(木) 17:18:56
>>117
#include <stdio.h>

int fdivide(const int a, const int b )
{
int numerator = a;
int denominator = b;
int result = 0;
int flg;
if(numerator < 0)
numerator *= -1;
if(denominator < 0)
denominator *= -1;
while(numerator >= denominator){
numerator -= denominator;
result++;
};
if((a > 0 && b > 0) ||(a < 0 && b < 0))
flg = +1;
else
flg = -1;
return result*flg;
}
int main()
{
printf("fdivide(6,2) = %d \nfdivide(1,3) = %d \nfdivide(6,-2) = %d \nfdivide(-6,2) = %d \n"
"fdivide(-7,2) = %d \nfdivide(7,-3) = %d \nfdivide(10,1) = %d \n"
,fdivide(6,2),fdivide(1,3),fdivide(6,-2),fdivide(-6,2),fdivide(-7,2),fdivide(7,-3),fdivide(10,1));
return 0;
}
124デフォルトの名無しさん:2007/11/08(木) 18:21:56
[1] 授業単元: データ構造(アルゴリズム)
[2] 問題文:下記
[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月14日まで]
[5] その他の制限: 特にありません
どうぞよろしくお願いします

125デフォルトの名無しさん:2007/11/08(木) 18:24:49
>>124
問題文書け
126デフォルトの名無しさん:2007/11/08(木) 18:25:10
124続き
#include <stdio.h>
#include <malloc.h>
struct tfield {
int num[20];
struct tfield *pointer;
} ;
struct tfield *talloc(void);
int main(void)
{
struct tfield *head, *p;
head = NULL;
while (p = talloc(), scanf("%d", p -> num)!= EOF){
p -> pointer = head;
head = p; }
p = head;  while(p != NULL){
printf("%d\n", p -> num);
p = p -> pointer; } }
struct tfield *talloc(void)
{return((struct tfield *)malloc(sizeof(struct tfield)));
}
上記を、二つのリストをソートした新たなリストを表示するように改変せよ。です
127デフォルトの名無しさん:2007/11/08(木) 19:31:55
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):待ち行列シミュレーションするプログラムを作成せよ
完成する関数:    
void enqueue(char *x)
void dequeue()
void queue_print()

CPPファイル:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5227.txt
作成するプログラムについて:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5228.txt
実行例:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5229.txt
ヒント:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5230.txt
[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio .NET 2003
 [3.3] 言語:c++
[4] 期限:2007年11月09日9:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで

よろしくおねがいします。
128デフォルトの名無しさん:2007/11/08(木) 19:51:08
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

n変数の連立1次方程式をガウスの消去法で解くプログラムを作成せよ。


[3] 環境
 [3.1] OS: Windows
 [3.2] gcc 3.4
 [3.3] 言語: C)
[4] 期限: 明日
[5] その他の制限:配列まで習いました。
129デフォルトの名無しさん:2007/11/08(木) 20:28:33
[1] 授業単元:プログラミング練習
[2] 問題文(含コード&リンク):
あるテキストファイル「memo.txt」にexampleとかかれているとして
そのファイルを読み込み、その書かれている単語の1文字ずつ見ていき
母音なら1と、子音なら0と表示するプログラムをつくれ。
exampleなら1010001と表示するように
[3] 環境
 [3.1] OS:Linux
 [3.2]GCC
 [3.3] C言語
[4] 期限: 11月10日
130デフォルトの名無しさん:2007/11/08(木) 20:42:05
>>129
#include <stdio.h>
#include <ctype.h>
main()
{
int c;
FILE *fp;

if((fp=fopen("memo.txt","r"))==NULL){
printf("file can't open.\n");
return;
}
while((c=fgetc(fp))!=EOF){
switch(c){
case 'a': case 'A': case 'i': case 'I': case 'u':
case 'U': case 'e': case 'E': case 'o': case 'O':
putchar('1');
break;
default:
/* 何がきても0を出力するのならputchar('0');break;だけでいい */
if(isalpha(c))
putchar('0');
else
putchar(' ');
break;
}
}
putchar('\n');
fclose(fp);
}
131デフォルトの名無しさん:2007/11/08(木) 23:21:29
132131:2007/11/08(木) 23:39:48
配列使って書き直し。こっちのほうが安全。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5232.c
133デフォルトの名無しさん:2007/11/08(木) 23:40:24
[1] 授業単元:
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5233.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月9日10:00まで
[5] その他の制限: 期限まであまり時間がありませんが、どうぞよろしくお願いします
134デフォルトの名無しさん:2007/11/09(金) 00:17:40
どなたか>>127よろしくお願いします。どうもすみません
135デフォルトの名無しさん:2007/11/09(金) 00:27:56
>>133
int binarysearch(int v){
/* ここにプログラムを追加 */
int l = 0, r = N-1,x;
while( l<=r )
{
x = (l + r) / 2;
printf("%d %d %d \n",l,x,r);
if( v == a[x] ) return 0; /* 見つかった */
if( v > a[x] ) l = x + 1;
if( v < a[x] ) r = x - 1;
}
return -1;
}

int interpolationsearch(int v){
/* ここにプログラムを追加 */
int l = 0, r = N-1,x;
while( l<=r )
{
x = l + (v - a[l]) * (r - l) / (a[r]-a[l]);
if(x < 0) return -1;
if(x >= N) return -1;
printf("%d %d %d \n",l,x,r);
if( v == a[x] ) return 0; /* 見つかった */
if( v > a[x] ) l = x + 1;
if( v < a[x] ) r = x - 1;
}
return -1;
}
136デフォルトの名無しさん:2007/11/09(金) 00:32:17
>>135
一応な……

v>a[x]の場合、xの位置のデータは答えよりも小さいから、それよりも右に位置する(x+1)を新しいlにする。
v<a[x]の場合、xの位置のデータは答えよりも大きいから、それよりも左に位置する(x-1)を新しいlにする。
137デフォルトの名無しさん:2007/11/09(金) 00:59:36
int binarysearch(int v){

/* ここにプログラムを追加 */
int mid;
int left = 0;
int right = 9;

while(left < right){
mid = (left + right)/2;
if(a[mid] < v)
left = mid + 1;
else
right = mid;
};
if(a[left] == v)
return left;

return -1;
}
138デフォルトの名無しさん:2007/11/09(金) 01:41:38
>>134
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5234.txt

この問題、やらしいな。

front = 0 , rear = 0; /* 空 */
front = 0 , rear = 1; /* 1つめ追加 */
front = 0 , rear = 2; /* 2つめ追加 */
front = 0 , rear = 3; /* 3つめ追加 */
front = 0 , rear = 4; /* 4つめ追加 */
front = 0 , rear = 0; /* 5つめ追加 */

ってなるので、空の場合と満杯の場合でfrontとrearの関係が同じなる。ということでflagたてて逃げてみた。
139デフォルトの名無しさん:2007/11/09(金) 02:24:06
>>128
行列におけるガウスの消去法(掃き出し法)はサンプルコードが至る場所にあります。

ttp://www.mit.msn.to/matrix/determinant.html
140デフォルトの名無しさん:2007/11/09(金) 02:32:14
>>127
しかしC++でやるんならコンテナがあるんだからqueueの実装なんかやるだけ無駄、
空いた時間で、queueを使った応用をしたほうが宿題として合格だな
queueの応用問題を考えられないのは教師に欠陥があるからだ
141デフォルトの名無しさん:2007/11/09(金) 09:32:28
>>138どうもありがとうございました。
助かりました
142デフォルトの名無しさん:2007/11/09(金) 10:49:56
[1] 授業単元:C言語入門(第7週ファイルの入出力)
[2] 問題文(含コード&リンク):
簡単なファイル暗号化・復号化のプログラムを作成せよ。
今回の暗号化は、改行以外の文字のアスキーコードに1を足し、復号化はその逆を行うこととする。
最初の引数が暗号化(c)と復号化(d)のどちらかを決定し、次が入力ファイル名、最後が出力ファイル名を示す。
引数が間違っている場合は"error"を表示する。
(実行例)
$ cat input.txt(読み込むファイルの中身確認)
Hello!
Good bye...
$ ./q2-3 c input.txt output.txt
$ cat output.txt
Ifmmp"
Hppe!czf///
$ ./q2-3 d output.txt newinput.txt
$ cat newinput.txt
Hello!
Good bye...
ヒント:ファイルからfgetcで1文字づつ読み込み、int型の変数に入れる。
アスキーコードに1足し、fputcでファイルに書き出す。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: GCC
 [3.3] 言語: C
[4] 期限: 11/11(日)
[5] その他の制限: 暗号化(c)、復号化(d)の判別には「!strcmp」を使ってください。
143デフォルトの名無しさん:2007/11/09(金) 11:06:18
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
正規分布に従って、乱数を発生させるプログラムを作成しなさい。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5

 [3.3] 言語: C++
[4] 期限: 11/9 18時
[5] その他の制限:

よろしくお願いします

144デフォルトの名無しさん:2007/11/09(金) 11:08:42
#include <stdio.h>
#include <string.h>
void encodeDecode(int codeOffset, FILE * fpIn, FILE * fpOut)
{
int ch;
while ((ch = fgetc(fpIn)) != EOF) {
fputc(ch == '\n' ? ch : ch + codeOffset, fpOut);
}
}
int main(int argc, char ** argv)
{
int codeOffset;
FILE * fpIn;
FILE * fpOut;
if (argc > 3) goto error;
if (strcmp(argv[1], "c") == 0) {
codeOffset = 1;
} else if (strcmp(argv[1], "d") == 0) {
codeOffset = -1;
} else {
goto error;
}
fpIn = fopen(argv[2], "r");
if (fpIn == NULL) goto error;
fpOut = fopen(argv[3], "w");
if (fpOut == NULL) goto error;
encodeDecode(codeOffset, fpIn, fpOut);
return 0;
error:
fprintf(stderr, "error\n");
return 1;
}
145デフォルトの名無しさん:2007/11/09(金) 11:13:04
>>144
×argc > 3
○argc <= 3
146デフォルトの名無しさん:2007/11/09(金) 12:13:53
>>143
上限と下限は指定しないのか?
あと、出力方法は?
147デフォルトの名無しさん:2007/11/09(金) 12:23:52
>>146
>上限と下限は指定しないのか?
とりあえず、指定されてないので後から変えられるようにしてもらえますか?
あと、マイナスが出ないようにしてもらえると助かります。

>出力方法は?
数字が表示されればいいと思います。


148デフォルトの名無しさん:2007/11/09(金) 12:25:30
やろうと思ったらC++かよ('A`)
149デフォルトの名無しさん:2007/11/09(金) 12:55:18
>>144-145
期限まで待つつもりでしたが、お早い回答ありがとうございます。
変数名なども分かりやすく書いてもらったみたいで感謝しております。
150129:2007/11/09(金) 14:47:59
[1] 授業単元:プログラミング練習
[2] 問題文(含コード&リンク):
129とほとんど同じなんですけど、
main(){
char str1[10]=”four”;

/*char型の配列”four”に母音が含まれれば1、子音が含まれれば0と表示する*/

}

を作れ。
3] 環境
 [3.1] OS:Linux
 [3.2]GCC
 [3.3] C言語
[4] 期限: 11月10日
151イトキン ◆lq89E2SwMI :2007/11/09(金) 15:09:16
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
コマンドufsinfoを実装し、ソースコードとレポートを提出せよ。

ufsinfoの概要
ufsinfoは、ファイルシステムから次の情報を取り出す。
○マジック番号(fs_majic)
○ディレクトリ中のファイル名一覧
  ◆ディレクトリを引数に指定した場合
○データブロックの番号の一覧
  ◆そのファイルの中身を格納するブロック


ufsinfoの書式

○ufsinfo パス名 スペシャルファイル名
  ◆パス名
   ファイルシステム中のファイルへの絶対パス
  ◆スペシャルファイル名
   ファイルシステム全体を表すファイル名
152イトキン ◆lq89E2SwMI :2007/11/09(金) 15:10:24









[3] 環境
 [3.1] OS: mac OS
 [3.2] わかりません
 [3.3] 言語: C言語のみ
[4] 期限: 12月5日
[5] その他の制限: mmapは使用禁止 
         スペシャルファイルでなく、イメージファイル上の動作でok
         二重間接まで動作チェックせよ。

Cのみで350行程度でかけるみたいです。

問題文、が長過ぎて、何をここに書けばいいのかまよってしまいました。
問題について聞きたいことがあれば、レスお願いします。

153デフォルトの名無しさん:2007/11/09(金) 15:40:01
期限過ぎてもいいんで、誰か143お願いします。
154デフォルトの名無しさん:2007/11/09(金) 16:16:37
>>143
//ボックス=ミューラー法で100個の正規乱数を生成するテスト
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<time.h>

int main()
{
    int i;
    double u1,u2,n1,n2;
    srand(time(NULL));
    for(i=0;i<50;i++){
        u1=(double)(rand())/RAND_MAX;
        u2=(double)(rand())/RAND_MAX;
        n1=sqrt(-2*log(u1))*sin(2*M_PI*u2);
        n2=sqrt(-2*log(u1))*cos(2*M_PI*u2);
        std::cout <<n1<<" "<<n2<<std::endl;
    }
    return 0;
}
155 ◆a3LMU3qR26 :2007/11/09(金) 16:36:08
1] 授業単元:アルゴリズム
[2] 問題文:巡回セールスマン問題を解くプログラムを作成しなさい。
今回は、あらゆる場合を全通り調べる方法で解を求めるプログラムでかまいません。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: Cのみ
[4] 期限: できるだけ早く
[5] その他の制限: たいていあり


156 ◆a3LMU3qR26 :2007/11/09(金) 16:38:30
>>155ですけど
for(i = 0; i < n; i++) used[i]=NO;
perm(0);
return(0);
}
void perm(int d)
{
int i,j;
int b[MAXN];
int s = adj[a[0]][a[n-1]];

if(d == n){
for(i = 0; i < n-1; i++){
s+=adj[a[i]][a[i+1]];
}
}

else {
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
このプログラムを利用したいのですが
これだけだとただの列挙になってしまいます
最小値だけをだすにはどうしたらいいでしょうか?
157153:2007/11/09(金) 18:46:49
>>154
ありがとうございます。
できれば、マイナスの値が出ないようにしていただきたいんですけど、無理ですか?
158デフォルトの名無しさん:2007/11/09(金) 18:54:49
でてきた正規分布を正軸に好きなだけ平行移動させりゃいいじゃん
分散は変わらないから形は変わらないだろ
159デフォルトの名無しさん:2007/11/09(金) 18:56:06
形っていうのは乱数の母集団分布な
160デフォルトの名無しさん:2007/11/09(金) 19:25:13
何故マイナスの値を出さないようにしたいのか?その理由気になる。
161デフォルトの名無しさん:2007/11/09(金) 19:30:40
>>106-107
順番がきましたら、こちらもよろしくお願いします。
期限は日曜日までありますので、土曜日が期限の人を優先していただいて構いません。
正確な期限は11/11(日) PM5時までです。
よろしくお願いします。
162デフォルトの名無しさん:2007/11/09(金) 20:50:23
>>106>>161
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5236.c
期限や順番なんて関係無いよ。答える奴は自分がやりたい問題をやるだけ
163デフォルトの名無しさん:2007/11/09(金) 21:33:34
[1] データ構造
[2] 問題文(含コード&リンク):
n個の頂点からなるグラフを、辺の両端の頂点に同じ色を塗らないようにし、すべての頂点を彩色するのに必要な色数を最小化する。
また、頂点iに接続する辺の数を頂点iの次数とよぶ。以下のアルゴリズムで作るように。
(1)
@頂点の次数を降順にソートする。
A頂点1に色1を割り当てる
B頂点i=2、...nについて、隣接する頂点に割り当てられていない最小の色番号を頂点iに割り当てる。

(2)頂点iの隣接頂点に彩色された異なる色数を頂点iの飽和次数とする。
@最大次数の頂点に色1を割り当てる
A飽和次数が最大の頂点を選ぶ。そのような頂点が複数ある場合は、
未彩色の部分グラフにおいて最大次数の頂点を選ぶ。
B選んだ頂点に彩色可能な最小の色番号を割り当てる
C全頂点が彩色済みならば終了。そうでないならAにもどる。
[3] 環境
 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
[4] 期限: 2007年11月10日24:00まで(出来れば21:00
[5] その他の制限:
関数と変数の定義
#include <stdio.h>

#define TRUE 1
#define FALSE 0
#define MAX_N 2000
/*変数*/
int n; /*頂点数*/  int m; /*辺数*/
double x[MAX_N],y[MAX_N]; /*各頂点の座標*/
int a[MAX_N][MAX_N]; /*隣接行列*/
int color[MAX_N]; /*色*/
int max_color; /*最大の色番号*/
164163:2007/11/09(金) 21:34:07
問題例データの読み込み
input_fire = fopen(argv[1],"r");
fscanf(input_fire,"%d %d\n",&n,&m); /*頂点数と辺陬の読み込み*/
for(i = 0;i < n;i++){
fscanf(input_file,"%1f %1f\n"&(x[1]),&(y[i])); /*頂点データの読み込み*/
}
for(i = 0;i < n;i++){ /*隣接行列の初期化*/
for(j = 0;j < n;j++){
a[i][j] = 0;
}
}
for(i = 0;i < m;i++){
fscanf(input_file,"%d %d\n",&k1,&k2); /*辺データの読み込み*/
a[k1][k2] = a[k2][k1] = 1; /*隣接行列の生成*/
}
for(i = 0;i < n;i++){
color[i] = -1; /*解の初期化*/
}

説明文に意味がわからないところがあったらご指摘ください。お願いします。
165デフォルトの名無しさん:2007/11/09(金) 21:52:39
>>164
でーんつーだーい
166デフォルトの名無しさん:2007/11/09(金) 22:25:47
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5237.txt

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11/12
[5] その他の制限:

よろしくお願いします
167デフォルトの名無しさん:2007/11/09(金) 22:35:03
>>163
それだと彩色数は最小化されないが
168デフォルトの名無しさん:2007/11/09(金) 22:44:59
>>167
これ、近似アルゴリズムだから。
169デフォルトの名無しさん:2007/11/09(金) 22:46:25
#include <stdio.h>
#include <math.h>

double f(double x){
return 1/sqrt(1+pow(x,4)); /*求める定積分*/
}


int main(void){
double x,sum=0,h;
printf("h:"); scanf("%lf",&h);

for(x=2*h;x<1;x+=2*h){ /*範囲指定*/
sum+=(f(x) + 4*f(x-h) + f(x-2*h)) * h/3; /*シンプソンの公式*/
printf("%f %f\n",sum,x);

}
}
170デフォルトの名無しさん:2007/11/09(金) 22:47:19
for(x=0;x<1-2*h;x+=2*h){ /*範囲指定*/
sum+=(f(x) + 4*f(x+h) + f(x+2*h)) * h/3; /*シンプソンの公式*/
printf("%f %f\n",sum,x);
171デフォルトの名無しさん:2007/11/09(金) 23:07:34
>>162
>>答える奴は自分がやりたい問題をやるだけ
と言いつつプログラム作ってくれた>>162さんに感謝。自分の課題解いてくれてありがとうございます。
わざわざプログラムコード中に説明文まで入れてもらって本当に感謝しています。
m(_ _)m
172aho:2007/11/10(土) 01:06:59
>>142
これ以外に何かあればいってちょ!
encrypt()内がちょっと汚いから書き直してね。
void encrypt(char** argv){
int tmp; //文字読み込みバッファ
FILE* fp = fopen(argv[2], "rb");
if(!fp){
printf("file open error!\n");
return;
}
FILE* fout = fopen(argv[3], "wb");

if(!strcmp(argv[1], "c")){ //暗号化
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){ //改行コード
fputc(tmp, fout);
continue;
}
tmp += 0x01;
fputc(tmp, fout);
}
}
else if(!strcmp(argv[1], "d")){
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){
fputc(tmp, fout);
continue;
}
tmp -= 0x01;
fputc(tmp, fout);
}
173aho:2007/11/10(土) 01:09:33
>>172
}
fclose(fout);
fclose(fp);
}

int main(int argc, char** argv){
if(!strcmp(argv[1],"c") && !strcmp(argv[1],"d")){
printf("argument error!\n");
return 0;
}
encrypt(argv);

return 0;
}

もっと細かい引数のチェック(argcでも判断, 拡張子判断etc)もした方がいいかもね。
疲れたので寝ます
174デフォルトの名無しさん:2007/11/10(土) 01:14:06
>>172-173

つ「>>144-145
まあ、作りが少し違う参考になるでしょ。
175デフォルトの名無しさん:2007/11/10(土) 01:23:30
[1] 授業単元: 確率論
[2] 問題文:
http://www.uploda.org/uporg1104561.txt
ここに書きました。
図はこんな感じです。
http://www.uploda.org/uporg1104531.jpg

[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月10日
[5] その他の制限: 特にありません
わかりにくいかもしれませんがお願いします。
176デフォルトの名無しさん:2007/11/10(土) 01:31:02
>>168
それはもちろん知っているが、問題の一行目には最小化すると書かれている
177153:2007/11/10(土) 03:10:07
>>176
このアルゴリズムでは最小化できないらしいので、アルゴリズムのほうを優先するみたいです。
よくみたら『この近似解法で作成せよ』と書いてありました。申し訳ございません。
178デフォルトの名無しさん:2007/11/10(土) 06:18:17
誰かいますか?
179デフォルトの名無しさん:2007/11/10(土) 06:25:27
います
180デフォルトの名無しさん:2007/11/10(土) 06:26:41
イター!!!
お願いします俺の宿題やってくださいませ
181デフォルトの名無しさん:2007/11/10(土) 06:28:07
どれどれ。
182デフォルトの名無しさん:2007/11/10(土) 06:32:14
ありがとうございます!!!!

えーと
数独の問題をグラフ彩色問題に変換せよ
ってもんだいなんですけど
どうやらこれをアルゴリズムで説明させる問題らしいんです
183デフォルトの名無しさん:2007/11/10(土) 06:38:08
縦横と正方形に同じ数字が入ってはいけないっていうことだろう
数字をいろと言い換えればいいだけだろう
184デフォルトの名無しさん:2007/11/10(土) 06:40:27
やっぱそれでいいんですよね!
俺もそれ以外に思い浮かばなくて・・・
数独アルゴリズムの数字を色って書き換えるだけでいいですよね?
185デフォルトの名無しさん:2007/11/10(土) 06:58:06
解くアルゴリズムは作らないと行けないのか?
186デフォルトの名無しさん:2007/11/10(土) 07:01:30
16個のヒントの物は作れるか?

最初にヒントとして配置する数字の数は、24〜32個程度が多く、これ以上だと解くのが簡単になる。
逆にそれ以下にするのは作者の技量も必要になってくる。
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、
対称形の問題では18個(初出・パズル通信ニコリ31号 1990年)、
非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
http://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC
187デフォルトの名無しさん:2007/11/10(土) 07:05:40
解くアルゴリズムはググッてわかりました
ただ、彩色問題とからめた記述がなかったのでどうしようかとおもいまして・・
188デフォルトの名無しさん:2007/11/10(土) 07:06:38
方針としては、縦か横か、正方形で可能な形を全て埋めてみるといいとおもう
例えば正方形の可能数は9! 通りある 9カ所埋めてみて縦が平気か調べていく
189デフォルトの名無しさん:2007/11/10(土) 07:14:21
参考になりました!
こんな朝早くにありがとうございました
190デフォルトの名無しさん:2007/11/10(土) 07:24:27
最大でも、9*9! とおりしかないから、全配置を決定しておいてから、初期配置を満たすものをサーチすればいいと思う

9 * (9 !) = 3265920だから解けているからどうかを記録するには3MBくらいだ
191デフォルトの名無しさん:2007/11/10(土) 07:26:18
1行目が 123456789 だとすると、2行目には上の数字はこないから減らせる
192デフォルトの名無しさん:2007/11/10(土) 07:50:49
1から9の順列を昇順に求めるプログラム

#include <iostream>
using namespace std;
main(){
int a,b,c,d,e,f,g,h,i,chk[9]={1,1,1,1,1,1,1,1,1},N=0;
char **jretu=new char* [9];
for(a=0;a<9;a++) jretu[a]=new char [362880];

for(a=0;a<9;a++){ chk[a]=0;
for(b=0;b<9;b++){ if(chk[b]==0)continue; chk[b]=0;
for(c=0;c<9;c++){ if(chk[c]==0)continue; chk[c]=0;
for(d=0;d<9;d++){ if(chk[d]==0)continue; chk[d]=0;
for(e=0;e<9;e++){ if(chk[e]==0)continue; chk[e]=0;
for(f=0;f<9;f++){ if(chk[f]==0)continue; chk[f]=0;
for(g=0;g<9;g++){ if(chk[g]==0)continue; chk[g]=0;
for(h=0;h<9;h++){ if(chk[h]==0)continue; chk[h]=0;
for(i=0;i<9;i++){ if(chk[i]==0)continue;
jretu[0][N]=a;jretu[1][N]=b;jretu[2][N]=c;jretu[3][N]=d;
jretu[4][N]=e;jretu[5][N]=f;jretu[6][N]=g;jretu[7][N]=h;jretu[8][N]=i;
N++;
}chk[h]=1;
}chk[g]=1;
}chk[f]=1;
}chk[e]=1;
}chk[d]=1;
}chk[c]=1;
}chk[b]=1;
}chk[a]=1;
}cout<<N;}
193デフォルトの名無しさん:2007/11/10(土) 08:03:31
32bit変数に、3bitずつデータ入れていけば列に同じ数字があるかどうかはXOR演算で出来るな
194デフォルトの名無しさん:2007/11/10(土) 08:05:36
やっぱり駄目だ 結局9回のループか演算(ifなど)がいるな
195デフォルトの名無しさん:2007/11/10(土) 08:09:10
123456789
251498736
987654321
に縦方向に同一文字があるかどうかはどう判定する?
196デフォルトの名無しさん:2007/11/10(土) 08:58:30
>>182
演習問題1は、
>数独(ナンバープレイス) をグラフ彩色問題に変換せよ
だからアルゴリズムで説明させるってどういう意味?

>(a) あいているマスに1〜9 までのどれかの数字を入れる
>(b) 縦・横の各列および太線で囲まれた3 × 3 のブロックに同じ数字が入ってはいけない

(b)の定義を以下のように読み替える。
(1)3×3の小ブロック内のマスは全て異なる数字であること
(2)あるマスに対して、同じx、yを持つマスは全て異なる数字であること

特定のマス集合に所属するマスが全て異なる数字である事は、
任意のマスを一つ取り出した場合に、そのマス以外の他のマス集合に所属するマスと数字が異なるということと同じである。

これをグラフで表せば、それぞれのマスをグラフの頂点とした完全グラフにおいて、
任意の辺においてその両端の数値が異なることと同義である。
これはグラフ彩色問題の定義である。

というか、お前>>166だろ?演習問題2ぐらい自分でやれよ。
197デフォルトの名無しさん:2007/11/10(土) 09:06:46
ついでに、SEQまではとりあえずやってみて秋田。

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

DSATURは誰か頼む。
198デフォルトの名無しさん:2007/11/10(土) 09:11:44
数独で16個の初期配置で解けるか調べるプログラム
199デフォルトの名無しさん:2007/11/10(土) 09:12:24
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
http://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC
200デフォルトの名無しさん:2007/11/10(土) 09:21:51
>>198
「問題として成立する」と「解けるか」は意味が違うだろ、常識的に考えて。

なんなら初期配置0個でも解けるぞ。
201198:2007/11/10(土) 09:51:13
>>200 解ける = 配置が一意的に求まる 解けている全配置を求めるプログラム書いたが 二つ目が出てこない 時間がかかりすぎる

#include <iostream>
using namespace std;
main(){
int G[9][9],R[9][9],S[9][9];
int x,y[81],m,n,l,d,cnt;

for(n=0;n<81;n++)y[n]=0;
for(m=0;m<9;m++)for(n=0;n<9;n++)G[m][n]=R[m][n]=S[m][n]=1;
d=cnt=0;

for(;;){
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
if( G[m][x]+R[n][x]+S[l][x]==3 ){
if(d<80){G[m][x]=R[n][x]=S[l][x]=0; d++; y[d]=0;continue;}
cnt++;for(int k=0;k<81;k++){if(k%9==0)cout<<endl;cout<<y[k]<<" ";};d--;}

ST:
if(y[d]<8)y[d]++;
else{
if(d==0){cout<<cnt;return 0;}
d--;
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
G[m][x]=R[n][x]=S[l][x]=1;
goto ST;}
}}
202198:2007/11/10(土) 10:08:16
回転や反転の同一視、数字の同一視などを考慮しても全解答を求めるのは困難そうだ
もし全配置が決定できれば、初期配置に対してそれを含む解答がただ一つがどうか調べるだけだ
203デフォルトの名無しさん:2007/11/10(土) 11:03:59
*****
****
***
**
*
204203:2007/11/10(土) 11:04:43
投稿ミスですorz
205203:2007/11/10(土) 11:14:23
下の図形をfor文で作るのですが・・
よくわかりませんorz
*****
****
 ***
  **
  *

他スレでヒント貰ったのですが・・
俺の頭じゃ無理だったみたいです・・
206203:2007/11/10(土) 11:15:26
なんだか一個づれてますが
ピラミッド型です。。本当にすみません
207デフォルトの名無しさん:2007/11/10(土) 11:24:40
>>203
ピラミッドを作るなら各段'*'の数は奇数のような気が
偶数の段があると上手くいかないような
*******
 *****
  ***
   *
208デフォルトの名無しさん:2007/11/10(土) 11:30:24
>>205
#include <stdio.h>
int main()
{
int i,j;
for(i=5;i>0;i--){
for(j=0;j<5-i;j++)
printf(" ");
for(j=0;j<i;j++)
printf("*");
printf("\n");
}
return 0;
}
209203:2007/11/10(土) 11:30:59
宿題見る限りでは偶数も入ってるんですょね・・
多少いびつな形かもしれません
210デフォルトの名無しさん:2007/11/10(土) 11:36:05
>>209
すると、問題が不明瞭だな。「ピラミッド型」が未定義だ。
これまでの回答で満足できないなら問題をきちんと確認してこい。
211203:2007/11/10(土) 11:37:17
>208
ぉぉーー どうもです;;
212デフォルトの名無しさん:2007/11/10(土) 12:00:34
>>175
ですけどこれじゃあちょっとわかりにくいので
50回移動すると考えれば、考えやすいのかなと。

無制限にこの確率で移動してendにたどり着くことなんて無限にあるんじゃないかと
おもってしまった。
213デフォルトの名無しさん:2007/11/10(土) 12:55:04
0は空マス これ何秒で解ける?

000 000 061
000 200 007
000 940 000
087 000 000
006 000 400
000 000 230
000 078 000
200 006 000
490 000 000
214デフォルトの名無しさん:2007/11/10(土) 13:40:53
542 783 961
839 261 547
761 945 823
387 524 619
126 839 475
954 617 238
615 478 392
278 396 154
493 152 786
1秒もかからんわ
215デフォルトの名無しさん:2007/11/10(土) 18:09:05
[1] 授業単元:C言語
[2] 元のファイルslist.c: http://www.uploda.org/uporg1105430.txt.html
自分で途中まで作ったやつ:http://www.uploda.org/uporg1105431.txt.html
[3] 環境
 [3.1] OS:Linux (家ではWindowsでMinGW+MSYS+XEmacs)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月14日
[5] その他の制限:特にないです
[問題文]
課題:slist.c の改良
1.print_person関数を単方向リストを辿るように変更せよ。(自分なりに解決済み)
2.次の機能を実装せよ。
 ・標準入力から一行ずつ名前と年齢を読み込む
 ・名前と年齢はカンマ(,)で区切る
  ・"foo,19"など
 ・単方向リストに格納して出力
3.その他(授業でヒント「単方向リストの反転」が与えられ、自分なりに解決済み)
[問題文終わり]
自分で作った方はperson_input()の中が全然できてません。
次に続きます。
216215:2007/11/10(土) 18:11:48
構造体に名前と年齢を標準入力して、単方向リストで出力をするプログラムを考えています。
標準入力の際に名前と年齢は「tanaka,20」のように一行にするよう指示されています。
ヒントとして以下が与えられました。

char buf[256] ;
char *name;
int age;

while (fgets (buf, sizeof(buf), stdin))
{
char *sep = rindex (buf, '\n');
if (!sep)
continue;
*sep = '\0';
sep = rindex (sep, ',');
if (!sep)
continue;
*sep = '\0';
name = buf;
age = atoi (++sep);
}
また使用している構造体pは
struct person {
char *name;
int age;
struct person *next;
};
です。このヒントを用いて一行の標準入力から適切に構造体に入れ、
単方向リストに格納するにはどうしたらいいでしょうか。
while文の中がややこしくて終了の仕方も分からないのでよろしくお願いします。
217デフォルトの名無しさん:2007/11/10(土) 18:49:41
>>212
無理
218163:2007/11/10(土) 18:53:17
>>197
ありがとうございます。
あと(2)のほうを、どなたかお願いします。
219デフォルトの名無しさん:2007/11/10(土) 19:04:07
誰かいますか?
220デフォルトの名無しさん:2007/11/10(土) 19:14:21
公にはいないことになっている
221デフォルトの名無しさん:2007/11/10(土) 20:25:26
222デフォルトの名無しさん:2007/11/10(土) 20:41:35
>>192
char **jretu=new char* [9];
for(a=0;a<9;a++) jretu[a]=new char [362880];
となっているが
char jretu[9][362880];
とすればいいだけじゃないか?
というかこれは一体何をするプログラムなんだ。
223デフォルトの名無しさん:2007/11/10(土) 21:07:51
>char jretu[9][362880];
>とすればいいだけじゃないか?
やってみろw
224デフォルトの名無しさん:2007/11/10(土) 21:24:19
等比数列の和を求めるソースを教えてください
初項a,公比r、項数nとする
225デフォルトの名無しさん:2007/11/10(土) 21:26:13
>>224
無能でも無能なりにテンプレを埋めてください
226デフォルトの名無しさん:2007/11/10(土) 21:32:28
224です
教えてください(涙)
227デフォルトの名無しさん:2007/11/10(土) 21:32:58
>>225
折角このオレでも答えられそうな問題なのに、そうつれなくするなよ

>>224
>>1 に質問(しつもん)テンプレっていうのが書(か)いてあるから、よく読(よ)むんだよ
読(よ)めない漢字(かんじ)は辞書(じしょ)を引(ひ)くといいよ
228aho:2007/11/10(土) 21:34:14
>>215
struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};

struct person* addList(char* name, int age, struct person* head){
struct person* list;
/* メモリ確保 */
if((list = (struct person*)malloc(sizeof(struct person))) == NULL){
printf("malloc error!\n");
return NULL;
}
strcpy(list->name, name);
list->age = age;
list->next = head;
head = list;

return head;
}
229aho:2007/11/10(土) 21:35:14
>>228
printf("type 'q' to exit\n");
while(fgets(buf, sizeof(buf), stdin)){

/* 改行コードを取り除く */
char* sep = rindex(buf,'\n');
if(!sep)
continue;
*sep = '\0';
if(!strcmp(buf, "q"))
break;
/* カンマまでをbufに格納 */
sep = rindex(buf, ',');
if(!sep)
continue;
*sep = '\0';
name = buf;
age = atoi(++sep);

head = addList(name, age, head);
}
何かあれば言ってちゃぶだい!
230デフォルトの名無しさん:2007/11/10(土) 21:36:29
数独で16個の初期配置で解けるか調べるプログラム

問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
http://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC
231デフォルトの名無しさん:2007/11/10(土) 21:43:01
>>226
#!/usr/local/perl
$a = <STDIN>;$r = <STDIN>;$n = <STDIN>;
print $a*$n if($r == 1);print $a*(1-$r**$n)/(1-$r) if($r != 1);
232デフォルトの名無しさん:2007/11/10(土) 21:46:45
質問テンプレってどこにあるんですか?
直接とべるようにしてくれたらうれしいです
233デフォルトの名無しさん:2007/11/10(土) 21:52:50
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。
ただし、a,rは実数とする
234215:2007/11/10(土) 21:55:25
>>228
struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};
これはプログラム最初の6行目を書き直せということでしょうか?

addList()が何をしててmain内でどうすればいいのか分かりません。
235デフォルトの名無しさん:2007/11/10(土) 22:09:21
宿題を書き込んだ人がこのスレの流れをみてるんだけど
難易度高いやつからくそ低い宿題まで書き込まれるんですね。。。
236デフォルトの名無しさん:2007/11/10(土) 22:14:57
>>232
俺が適当にテンプレを埋めて置く、間違ってる所は指摘しろ
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。
ただし、a,rは実数とする
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 2007年11月11日零時零分零秒
[5] その他の制限: 普通に作ってってね。簡単すぎるからって
ふざけて物凄いコード書かないでね。
237デフォルトの名無しさん:2007/11/10(土) 22:18:05
>>236
#include<stdio.h>

int main(void){
double a, r, an, sum;
int i, n;

printf("等比数列の初項 a (実数) を入力して下さい : ");
scanf("%lf", &a);
printf("等比数列の公比 r (実数) を入力して下さい : ");
scanf("%lf", &r);
printf("等比数列の項数 n (整数) を入力して下さい : ");
scanf("%d", &n);

printf("a=%g r=%g n=%d\n", a, r, n);

an=a;sum=0.0;
for(i=0;i<n;i++){
sum+=an;
an*=r;
}
printf("sum=%g\n", sum);

return 0;
}
238aho:2007/11/10(土) 22:20:42
>>234
addList()については以下のページを参照。わかりやすくかいてある。
http://www9.plala.or.jp/sgwr-t/c/sec15-5.html

--構造体のメンバnameの型変更について--
while()内にif(!strcmp(buf, "q"))
ていう部分があるでしょ?
そこはbufが"q"だったらループを抜けるってこと。
ここまではOKっすよね?

この後の文の
name = buf;
が厄介なのである。
nameの先頭ポインタにbufの先頭ポインタを代入している。
これをaddList()内でstrcpyの代わりにやることが出来ない。
nameはbufのポインタを参照しているから、bufが変わればnameも一緒に変わってしまう。

説明下手でごめんちゃい。
239デフォルトの名無しさん:2007/11/10(土) 22:20:43
巡回セールス問題を解くプログラムを順列を用いて書きたいのですけど
for(i = 0; i < n; i++) used[i]=NO;
perm(0);

return(0);
}

void perm(int d)
{
int i,j;
int b[MAXN];
int s = adj[a[0]][a[n-1]];

if(d == n){
for(i = 0; i < n-1; i++){
s+=adj[a[i]][a[i+1]];
}
}

else {
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
これだけだとただの列挙になってしまいます
最小値だけをだすにはどうしたらいいでしょうか?
240aho:2007/11/10(土) 22:22:15
>>235
その通り。
その中から暇人達がやりたい問題を選んでやるわけなのだよ、明智君。
241デフォルトの名無しさん:2007/11/10(土) 22:26:14
242215:2007/11/10(土) 22:29:06
>>238さん感謝です。
まだよく分かっていませんが考えてみます。
分からなかったらまた質問したいので215のリンクを貼りなおしました。

先生の元データ:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5240.txt
自分の途中データ:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5241.txt

たぶんまた来ますがよろしくお願いします。
243デフォルトの名無しさん:2007/11/10(土) 22:29:53
やりたい問題だけなのか。。。
175なんて理解不能な問題だしたおれってアホだな。。。
上の部分だけならなんとか計算できるレベルなのに
下にもあってしかも上と移動するなんてありえないな。。。

どう書いていけばいいのかわからないんだよね。。。
244aho:2007/11/10(土) 22:32:52
>>175 >>243
もう一度upしてくれ!
ファイルが見つからん!
245デフォルトの名無しさん:2007/11/10(土) 22:33:01
>>175 なんて問題すら見えないんだが…
余程のエスパーでないと解きようも無い
246175:2007/11/10(土) 22:52:39
[1] 授業単元: 確率論
[2] 問題文:
http://toku.xdisc.net/cgi/up/vcc/nm12581.txt
ここに書きました。
移動50回するものとします。
図はこんな感じです。
http://toku.xdisc.net/cgi/up/vcc/nm12580.jpg

[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月11日
[5] その他の制限:
図の上の1,2,3を構造体配列struct gstate upnum[3]
図の下の10,11を構造体配列struct gstate downum[2]として。
構造体メンバnumに1,2,3,10,11をいれるように。

お願いします。





247デフォルトの名無しさん:2007/11/10(土) 23:05:10
>>246
gstateの定義は自由?
248デフォルトの名無しさん:2007/11/10(土) 23:22:28
>>246
なんだ 簡単じゃん
249175:2007/11/10(土) 23:26:17
自由でいいです。

まー図の状態数をもっと多くしたかったんですけど。

http://toku.xdisc.net/cgi/up/vcc/nm12583.jpg
こういう感じが本番なんですけどね。
250デフォルトの名無しさん:2007/11/10(土) 23:27:36
増えただけで考え方は全く同じ
251デフォルトの名無しさん:2007/11/10(土) 23:34:24
何かこれ有効グラフの最大流と最小カット問題みたいだな
252デフォルトの名無しさん:2007/11/10(土) 23:40:15
>>246
行列につっこめれば、ただの積ですむのに……
253175:2007/11/10(土) 23:42:31
上だけなら行列につっこめばいんだけど
下が邪魔なんですよ。
254デフォルトの名無しさん:2007/11/10(土) 23:48:54
>>253
いや、かわんないだろ?
255デフォルトの名無しさん:2007/11/10(土) 23:50:15
>>253
なぜ分けて考える
256 ◆54R0MOHTQo :2007/11/10(土) 23:58:08
[1] 授業単元:データ構造論
[2] 問題文(含コード&リンク):

フリーリストを用いた任意精度整数の実現

かなり長くなるのでアップロードしました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5242.txt

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.3
 [3.3] 言語: C
[4] 期限: 11/11 24:00
[5] その他の制限: 特になし

自分の頭では1日かかっても全く分かりませんでした・・・
よろしくお願いします
257デフォルトの名無しさん:2007/11/11(日) 00:11:22
>>246
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5243.txt

上でも書いたけど、行列で組んだ方がシンプル。ま、いっかってことで。
258デフォルトの名無しさん:2007/11/11(日) 00:13:05
>>246
構造体の名前は変更しておいて

使い方は data.txt をリダイレクトするだけ
ans246 < data.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5244.lzh
259175:2007/11/11(日) 00:21:33
>>257
>>258
ありがとうgございます
260215:2007/11/11(日) 00:33:21
>>215-216で質問した者です。
>>228>>238のahoさんによるヒントで書き直してみましたがうまくいきません。

うちのコンパイラに問題があるのかもしれません。
というのも>>238に紹介されたサイトの長いプログラムをコンパイルしてもうまく
実行されないからです。

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

作ったプログラムがうまくできているか確認お願いします。
でもたぶん間違っているので訂正もお願いします。
(もしahoさんがいれば話が早いかもしれません。)
261215:2007/11/11(日) 00:36:10
ちなみに>>215はリンク切れで>>242にもう一度あげています。
262デフォルトの名無しさん:2007/11/11(日) 00:57:13
246ですけどもうひとつ付け足しでいいですかね?
263デフォルトの名無しさん:2007/11/11(日) 01:00:52
>>262
では断る
264デフォルトの名無しさん:2007/11/11(日) 01:16:00
グラフって楽しいね
265デフォルトの名無しさん:2007/11/11(日) 01:17:11
>>260
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5246.txt

あ、めんどくさくてfreeの方直してなかった。ま、いっか。
266デフォルトの名無しさん:2007/11/11(日) 01:20:31
>>256
でんつーだーい
BigNumberとBigNumberNodeの両方でフリーリスト使うようにするとか書かなきゃ
これじゃどっちかだけフリーリストを使って書くかもよ?
なんにせよ全部の問題やるとかなり長いので明日までにはやってられないと思うけど

つかフリーリストの構造がわからないんじゃあフリーリスト使わないで書いてみればいいのに
267デフォルトの名無しさん:2007/11/11(日) 01:21:24
>>266
ちょwww またでんつーだーいかよwwww
268デフォルトの名無しさん:2007/11/11(日) 01:22:22
[1] 授業単元: 確率論
[2] 問題文:
ここに書きました。
http://toku.xdisc.net/cgi/up/vcc/nm12605.jpg.html

図はこうです。
http://toku.xdisc.net/cgi/up/vcc/nm12604.txt.html

[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月12日
[5] その他の制限:
A,B,C,Dはそれぞれファイルとして扱う
例えばAには 0.6 0.4の2つの数値だけ書かれてあり、その数値を読み取るようにする。
1と1、0と0が一致したらその状態同士、3つ選択肢ができることになるので
右の確率を半分にわけて0.6 0.2 0.2として
とどまる確率0.6 上の次の状態に移動する確率0.2 下のつながった状態に移動
する確率が0.2となります。
下も同様に。

269デフォルトの名無しさん:2007/11/11(日) 01:25:55
>>267
今回は5%3年生のま科だな
ちょっと上は7%4粘性のか科だったはず
正直お前らもうちょっと頑張れと
270デフォルトの名無しさん:2007/11/11(日) 01:25:58
>>268
つーか、もとの問題文でも上と下は別要素で扱えってなってるの?
激しくクソなんだが。
271215:2007/11/11(日) 01:30:41
>>265
ありがとうございます!
うちのコンパイラ(msys)では実行されませんでしたが学校でコンパイルしてみます。
person_free()微妙に変わってましたがさらに手を加えたほうがいいですか?
272デフォルトの名無しさん:2007/11/11(日) 01:32:49
>>271
^Zって書いてるけど、ctrl+Dで代用。

Windows用の豆知識な。
273 ◆wFVK8h9bmM :2007/11/11(日) 01:33:11
[1] 授業単元: 関数、ポインタ変数
[2] 問題文(含コード&リンク):
−− 断熱圧縮過程における温度・圧力の計算 −−
 初期温度 T0、初期体積 V0、初期圧力 P0 の空気を、
シンリダー中で圧縮比 E (= V0/V) にまで断熱圧縮するときの体積 V、温度 T、圧力 P を計算する関数をつくる。
1) 関数では、初期温度、初期体積、初期圧力と圧縮比を与え、この条件における温度、圧力、体積を求める。
体積は戻り値とせよ(したがって、温度と圧力はポインター変数となる)。
2) 上記関数を用いて、初期値 T0 = 273.15 °K、V0 = 1.0 m^3、P0= 9.80×10^4 P に対する、E=1,2,3,4,5 における値を出力せよ。
3) 計算結果を次のように表示する。

 HomeWork5  19.11.24    K3B55  山田太郎
   ----- 計算条件 -----
初期体積 V0 = 1.00 (m^3)
初期温度 T0 = 273.15 (K)
初期圧力 P0 = 9.80×10^4 (P)
   ----- 状態変化(計算結果) -----
圧縮比 E 体積 V 温度 T 圧力 P
1. 1000.00 273.15 98000.
2. 500.00 360.42 258623.
3. 333.33 423.89 456242.
4. 250.00 475.58 682511.
5. 200.00 519.98 932790.
↓続く
274デフォルトの名無しさん:2007/11/11(日) 01:33:25
上と下で区別しないといけないので。
たとえば
上がABBAC と 下がDABCの計算とか
上がBA と 下がADACADBCの計算をできるようにしたいんで。
275 ◆wFVK8h9bmM :2007/11/11(日) 01:33:41
参考: 空気を断熱圧縮するときの体積 V、圧力 P と絶対温度 T の間には、PVκ=一定、PV=RT (R:気体定数) の関係がある。
これより、V=V0/E、T=T0Eκ-1、P=P0Eκ の関係が得られる。ただし、κは比熱比 (= cp/cv) であり、その値は 1.4 である

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C
[4] 期限:H19年11月5日
[5] その他の制限:関数、ポインタ変数を使って作るそうです。

よろしくお願いします。
276デフォルトの名無しさん:2007/11/11(日) 01:35:17
>>274
それって計算するとき関係ねーじゃんw
277デフォルトの名無しさん:2007/11/11(日) 01:39:39
>>276
自分の力量からして区別しないといけないかとおもってました。すみません。
別要素で扱わなくてもいいです。

上がABBAC と 下がDABCの計算とか
上がBA と 下がADACADBCの計算をできるようにできれば。
278デフォルトの名無しさん:2007/11/11(日) 01:54:26
279デフォルトの名無しさん:2007/11/11(日) 10:13:27
>>275
公式をもう一度確かめてもらえませんか?おかしな結果になります。
280デフォルトの名無しさん:2007/11/11(日) 10:22:59
>>279
具体的になんの気体かを書いたほうが良いのでは?
気体→液体のときにかかるエネルギーとか、
なぜか温度が-273度を下回るとか、
そういう計算が出てきちゃうから
281デフォルトの名無しさん:2007/11/11(日) 10:34:31
>>273
公式が違うような気が
T=T0*E^(κ-1)
P=P0*E^κ
計算結果も変な気が
何で圧縮比1つまり体積が変化いてないはずなのに
V0=1.0m^3の空気が1000.00m^3になってるの?
282デフォルトの名無しさん:2007/11/11(日) 11:27:07
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
80〜120の数値を正規乱数で発生させるプログラムを作成しなさい。
平均100・標準偏差0.1とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5

 [3.3] 言語: C++
[4] 期限: 11/12 12時
[5] その他の制限:

よろしくお願いします
283 ◆wFVK8h9bmM :2007/11/11(日) 11:28:34
>>279-281
問題文はそのままコピペなのでこれ以上の情報が無いんです。
284デフォルトの名無しさん:2007/11/11(日) 12:22:40
>>283
講師に間違ってると指摘するとボーナス点が貰えるかもよ。
取り合えず、V0=1.00m^3、E=1の時V=V0/E=1000.00ってどう言う事ですか?と質問してみな。
1.00m^3=1000Lだけど単位変えないよな普通
良いのが見つからないんだけどこの辺見れば式が間違ってる事に気付く筈
ttp://www.photon.t.u-tokyo.ac.jp/~maruyama/talks/thermo/sld028.htm
285デフォルトの名無しさん:2007/11/11(日) 12:45:04
機嫌損ねて減点とかもありえそうだから困る。
286 ◆wFVK8h9bmM :2007/11/11(日) 12:45:40
>>284
はい。まず質問してみます。
返事が返ってきたらまた書き込ませてもらおうと思います。
287デフォルトの名無しさん:2007/11/11(日) 13:45:19
病苦 借金苦 精神疾患 絶望 鬱+借金苦 死にたいだけ 自分が要らないから。
いても仕方が無い。他の人が必要としても、私は必要ではない 消滅したいから
今持っているものを失うのが怖い 生きる希望がなぃ 生きてる意味を見出せないから
生きていて三'::::::............... .....::::::`y,. 皆にキモがられる・将来に対する漠然
とした不安ナ:::::::::::::::::::::::::::::::::::::::::::::ヾ 鬱 僕の存在はみんなに不快感を与えるだけだ
から「死ねV::::::::::::::::_{{ ({∫∬ノノjヾ:::::{ に耐えられない 恋 誰にも必要とされていない 脳の
片隅から ナ::::::::::::::i`__,,,,,,,ァ_  _,,,,,_ t;;:ヌ しするとしたら、支払い苦 過食症 親 配偶者の死
疲れた  イヘ::::::(ヾ~!,ャt、 !'''i ィtン )=f }fが嫌だから。 解離性同一障害で、別の人格に
体を乗っi {t)テ" ヘ' '___,イ ヽ_/ 介' じゃないから ここに載っている物から一つだけは
ムリだけrヘ_,j|!'     /ー--''!     |'不明でごめんなさい) 人間が嫌い。人間はどこ
まででも/| |       /二ク     !から。そんな生き物と上っ面だけとはいえ、
付き合/ { ! 、     ヾニン   ノ。 かゆいから 幸せなときに死にたい 毎日毎日
疑問が|  | ! \       _,,./だしても疑問はなくならない、それならばある日生きる
ことをやめるか丶\  `__>-ー´ると告げられても、そうかと思うだけだから 今の日本
は腐ってるから 辛い かゆい 人生つかれたから 自分が世界一かわいいから 金がな
いから 一度死に際を経験して生きる意味を見出したい 野球部だから 知らない 生き
る事自体が矛盾の繰り返しだから(自分の意思で生まれて来ないのに自分の意思で
生きて行く) 帰りたいから 身内が殺人を犯したから、その罪滅ぼしに 変わりはてた顔
自殺が自分にできる唯一の復讐だから そもそも生きている感覚が無かったし、今も無
いので、不問。 差別に耐えられない 今後受ける肉体的苦痛を回避するため 暇つぶし
(生きるのに退屈しか感じなくなった 別に死にたくない 体の障害のため 鬱&スロット依
存症 生きてても金食いつぶすだけ 死んだらどうなるんかなぁと 離婚 母親の裏切り、
恐怖 家にいるのが苦痛。受験のことを考えたり…将来に希望がない。親が勉強の事
288デフォルトの名無しさん:2007/11/11(日) 14:14:07
[1] 授業単元:C++
[2] 問題文:シーザー暗号(文字をA-Zの順に、一定数シフトすることで暗号化する。例えば、Return to Romeは、3文字シフトでUhwxuq wr Urphとなる。)
       で書かれたファイルを解読し、解読文を表示するプログラムをつくれ。
      
      条件:
         1.ファイルの中で暗号化されているのは、アルファベットのA-Z(大文字)とa-z(小文字)のみである。
         2.空白、ピリオド、コンマ、セミコロン、コロンは、暗号化はされていないが、解読文のアウトプットを表示するとき、正しく表示すること。
         3.ファイルの中で最も頻繁に現れるアルファベットが、“e”であるという事実に頼り、シフト数を計算せよ。
[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン:DevC++
 [3.3] 言語: C++
[4] 期限: 2007年11月16日まで。
[5] その他の制限: 標準ライブラリのみ使用可能。Cのクラスは使用不可。

よろしくお願いします。
289デフォルトの名無しさん:2007/11/11(日) 14:55:32
>>273
#include <stdio.h>
#include <math.h>

int main(void)
{
  double p, v, r, t, kappa;
  double p0, v0, t0;
  int e;

  p0 = 9.80e4, v0 = 1.0, t0 = 273.15;
  r = p0*v0/t0;
  kappa = 1.4;

  printf("----- 状態変化(計算結果) -----\n");
  printf("圧縮比 E 体積 V 温度 T 圧力 P\n");
  for(e = 1; e <= 5; e++){
    v = v0/e;
    p = p0*pow(v0, kappa)/pow(v, kappa);
    t = p*v/r;
    printf("%d %.2f %.2f %f\n", e, v*1000, t, p);
  }

  return 0;
}
290デフォルトの名無しさん:2007/11/11(日) 16:29:22
元気ですかー?
291デフォルトの名無しさん:2007/11/11(日) 16:32:26
ちょとsYレならんしょこれは・・?
292デフォルトの名無しさん:2007/11/11(日) 16:54:11
ここって何人くらいで作業してるの?
293デフォルトの名無しさん:2007/11/11(日) 16:55:29
>>292
確か前集計したとき、20人だったような……
294デフォルトの名無しさん:2007/11/11(日) 17:40:09
>>166
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5237.txt

をお願いしたのですが
>>169 >>170 の方のを実行させてもらった所、0.05では正しいのですが
今度は0.1で1回少ないようです。どなたかお願いします
295 ◆QipEoOUdX2 :2007/11/11(日) 17:41:55
[1] 授業単元:プログラム演習
[2] 問題文:等比数列の初項aと公比rと項数nを入力して、それらの総和を表示する。ただしa、rは実数値とする
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 11月12日 03:00
[5] その他の制限

よろしくお願いします
296 ◆EcwVYA3Joo :2007/11/11(日) 17:43:12
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):
キーボードから1〜20までの任意の整数を10個入力する。
さらにもう一つ入力し、最後に入力した値が、始めに入力した10個の整数の中に存在するか存在しないかを調べて、その結果を表示するプログラムを作成せよ。
※例
1〜20までの整数を10個入力してください。
1 9 11 19 2 3 7 6 15 10
入力した値は 1 9 11 19 2 3 7 6 15 10 です。
探す値(1〜20)を入力してください。:11
11は入力値にあります。
探す値(1〜20)を入力してください。:18
18は入力値にありません。

[3] 環境
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2007年11月11日19:10まで
[5] その他の制限:

よろしくお願いします。
297デフォルトの名無しさん:2007/11/11(日) 17:45:24
[1] 授業 C言語上級
[2]
結果を出力できるようにプログラムを準備してください.
入力ファイルフォーマット:
source-node destination-node packet-loss-rate
a b 0.3
a c 0.1
.
.
z w 0.9
Step1: 二行目からデータを読み込みます.例えば,node a から node bまで
のパケット損失率0.3から最後までに読むこと.ノードペア毎のパケット損失率
を記録する.
※ 下記変数が必要
char *node_pair_name[1000]; //ノードペア名を記録する,行ごとは一記録と
します.何行があるならば,何個の記録がある.後で使う.
double packet_loss_rate[1000];//ノードペア毎に記録する,
Step2: 読み込んだデータpacket_loss_rateをJI関数f(double *x, int n)に
渡して,JIを計算します.
Step3: JI出力
以上のプログラムを組み込んでください.
[3] C言語
[4] 11月13日まで
JI関数はすでにできているので気にしなくて大丈夫です。
よろしくお願いします。
298デフォルトの名無しさん:2007/11/11(日) 17:50:33
>>294 自己解決..?
for(x=0;x<1-h;x+=2*h){
sum+=(f(x) + 4*f(x+h) + f(x+2*h)) * h/3;
printf("%f %f\n",sum,x);
}
299デフォルトの名無しさん:2007/11/11(日) 19:03:18
300デフォルトの名無しさん:2007/11/11(日) 19:12:44
>>296
#include <stdio.h>
#define N 10
int main( int argc, char ** args ){
int a[N]={0}, i, o;
printf( "1〜20までの整数を10個入力してください。\n");
for ( i = 0; i < N; ++i ) scanf( "%d", &a[i]);
printf( "入力した値は " );
for ( i = 0; i < N; ++i ) printf( "%d ", a[i]);
printf( "でし。\n" );
for (;;) {
printf( "探す値(1〜20)を入力してください。:" );
scanf( "%d", &o );
for(i=0;i<N;++i) if ( a[ i ] == o ) break;
if ( i != N ) printf( "%d は入力値にあります。\n", o );
else printf( "%d は入力値にありません。\n", o );
}
return 0;
}
301デフォルトの名無しさん:2007/11/11(日) 19:23:13
たまってるキューはどれくらい?
302 ◆EcwVYA3Joo :2007/11/11(日) 19:40:44
>>300
ありがとうございます。
起動出来ませんでしたが…
303デフォルトの名無しさん:2007/11/11(日) 20:00:25
>>295
#include<stdio.h>

double geoSeries(double init, double ratio, unsigned int nth)
{
size_t ix = 1;
double res = init;
while( ix != nth )
{
res *= ratio, res += init;
++ix;
}
return res;
}

int main(void)
{
printf("%lf\n",geoSeries(1.0,2.0,1));
return 0;
}
304 ◆DGgnWkEBkw :2007/11/11(日) 20:11:20
[1] 授業単元: アドバンスドプログラミング
[2] 問題文(含コード&リンク):
(1) 最大で10 行10 列の要素取り扱える行列A に対して下記機能を満足するプログラムを作成せよ。
@ main 関数内で3行4列の行列A にキーボードから、要素データを入力する。
A @の後、行列の形式としてA を表示する。
B Aの後、行列A の各要素の先頭アドレスを行列形式で表示する。
注意:入力データは、double 型とする。
(2) 最大で10 行10 列の要素取り扱える行列A,B,C,D に対して下記機能を満足するプログラムを作成せよ。
@ 3 行3列の行列A にデータを入力する。
A 行列A の各要素2倍した行列B を生成する。
B 行列A の転置行列を行列Cとして生成する。
C 行列Aと行列Cの積を行列D に生成する(行列Dは、どんな性質を持った行列か?)。
(3) 最大で10 行10 列の要素取り扱える行列A に対して下記機能を満足するプログラムを作成せよ。
@ 3 行3列の行列A にデータを入力する。
A 行列A を表示する。
B 行列A の3行目を行列A の2行目に加え合わせる。(例えば、21 31 a + a を21 a に代入することを意味
する)
C 行列A を表示する。
(4) (1),(2),(3)に対して、各機能の関数を作成して、プログラムのモジュール化を図りなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: マイクロソフトビジュアルスタジオ2005のコマンドプロンプト
 [3.3] 言語: C
[4] 期限: 2007年 11月12日 午前9時
[5] その他の制限: 特にその他の制限は無いですが出来るだけわかりやすくしてもらえるとうれしいです

このスレに書き込むのは初めてなので、何か至らないところがあれば指摘してもらえると助かります
305デフォルトの名無しさん:2007/11/11(日) 20:23:39
>>303
double geoSeries(double init, double ratio, unsigned int nth)
{
double res = init;
while( --nth != 0 ) res = res * ratio + init;
return res;
}
306 ◆EcwVYA3Joo :2007/11/11(日) 21:25:25
>>300
起動出来ました。

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1〜100の範囲の整数の乱数値を持つ要素数100の配列から、
キーボードで入力した1〜100の範囲ま整数地を探索し、入力値と同じ値が配列に含まれるか調べて、
その探索結果を表示するプログラムを作成する。
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限:2007年11月11日22:40まで
[5] その他の制限:

すみませんが宜しくお願いします。
307デフォルトの名無しさん:2007/11/11(日) 21:52:46
しかしプログラミングって授業多いな

308デフォルトの名無しさん:2007/11/11(日) 21:56:46
>>307
そりゃあ、授業内容がプログラミングを習ってるんだから、授業名「プログラミング」が多いのは当然かと。
309デフォルトの名無しさん:2007/11/11(日) 22:11:56
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
=======datalist.txt=========
1st:yamada
2st:okamoto
3st:uchida
4st:kondou
===========================
のファイルを1st:、2st:などを取り除いて
名前だけをchar型配列にいれて表示せよ。

[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] C
[4] 期限:11月12日くらい

よろしくお願いします
310デフォルトの名無しさん:2007/11/11(日) 22:17:03
>>306
#include <stdio.h>
#include <stdlib.h>
#define NOTFOUND (-1)
int find( int ar[], size_t l, int t ){
size_t i;
for (i=0;i<l;i++) if ( ar[ i ] == t ) break;
return (i!=l)?(int)i:NOTFOUND;
}
int main( void ){
int ar[100],i,t;
srand(time(NULL));
for (i=0;i<100;i++) ar[i]=rand()%100 + 1;
/*for (i=0;i<100;i++) printf("%d ",ar[ i ]); puts("");*/
while(1){
do{scanf("%d",&t);}while(!( t>0 && t<101 ));
puts( find ( ar, 100, t )==NOTFOUND ? "Not Found.":"Found");
}
return 0;
}
311309:2007/11/11(日) 22:17:28
:とその左の部分を取り除くって形でいいです
312デフォルトの名無しさん:2007/11/11(日) 22:41:17
宿題なんですが
[1] 授業単元: プログラミング演習
[2] 問題文: 整数型のデータ(サイズは200*200)を読み込み、輝度値を線型に変換(y=ax+b)した上でのプログラム。
ただしa,bはargv,argcを利用する。
さらに、上のプログラムを読み込み、指定の範囲を切り出して出力するプログラムを書け。
暇な人、お願いします。ついでにargcとargvについて教えて頂けるとうれしいです。
[3] 環境
 [3.1] OS:WINDOWS
[3.3]言語:C言語
 [4] 期限:11月13日
313デフォルトの名無しさん:2007/11/11(日) 22:52:36
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5248.txt
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C言語
[4] 期限:11月12日午前0時30分まで
よろしくおねがいします
314デフォルトの名無しさん:2007/11/11(日) 23:09:51
>>309
#include<stdio.h>
main()
{
int i=0,j,k;
char line[1000],name[4][20];
FILE *fp;
if((fp=fopen("datalist.txt","r"))==NULL){
printf("file can't open.\n");
return;
}
while(fgets(line,1000,fp)!=NULL){
for(j=0;line[j]!=':';j++);
for(j++,k=0;line[j]!='\n';j++,k++)
name[i][k]=line[j];
name[i][k]='\0';
i++;
}
for(i=0;i<4;i++)
printf("%s\n",name[i]);
fclose(fp);
return;
}
315デフォルトの名無しさん:2007/11/11(日) 23:17:02
>>313
(3)
#include<stdio.h>
#include<string.h>

void put_rstring(const char str[const])
{
size_t len = strlen( str ) + 1;
while( len != 0 )
putchar(str[--len]);
return;
}
316デフォルトの名無しさん:2007/11/11(日) 23:23:56
>>313
(1)
int str_char(const char str[const], const char c)
{
char *p = strchr( str, c );
return p != NULL ? p - str : -1;
}
317163:2007/11/11(日) 23:27:14
>>163の(2)誰かお願いします
318デフォルトの名無しさん:2007/11/11(日) 23:28:44
>>313
(2)
void put_string(const char str[const])
{
if(str[0] != '\0')
{
printf("%c\n",str[0]);
put_string(&str[1]);
}
return;
}
319デフォルトの名無しさん:2007/11/11(日) 23:34:33
再帰よりループのほうがいいか
void put_string(const char str[const])
{
size_t idx = 0;
while( str[idx] != '\0' ) printf("%c\n",str[idx++]);
return;
}
320デフォルトの名無しさん:2007/11/11(日) 23:37:35
>>312
>[2] 問題文: 整数型のデータ(サイズは200*200)を読み込み、輝度値を線型に変換(y=ax+b)した上でのプログラム。
輝度値ってなに?
というかどういう宿題なのかもう少し詳しく。
321デフォルトの名無しさん:2007/11/11(日) 23:49:27
>>320
たぶん画像処理関係
322デフォルトの名無しさん:2007/11/12(月) 00:01:27
>>309
これじゃだめ?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char *getFileName(char str[])
{
char *p = strstr(str, "st:");
return p != NULL ? p+3 : str;
}

int main(int argc, char *argv[])
{
FILE *fp;
char buffer[BUFSIZ];
if( argc != 2 || (fp = fopen(argv[1], "r")) == NULL ) return EXIT_FAILURE;
while( fgets(buffer, sizeof(buffer)/sizeof(char), fp) != NULL )
printf("%s",getFileName(buffer) );
return EXIT_SUCCESS;
}
323312:2007/11/12(月) 00:04:19
問題はそのまま書いたものです。
プログラミング初心者なので輝度値を線型に変換(y=ax+b)とかの意味もわからない状態です;
一応200*200の画像を出力するプログラムまでできたんですが。。でもこの場合画像がないと出力できないですよね?
200*200の画像をC言語で作ることできますか?


324309:2007/11/12(月) 00:09:17
>>322
OK
325デフォルトの名無しさん:2007/11/12(月) 00:11:05
>>324
なにその上から目線。
326デフォルトの名無しさん:2007/11/12(月) 00:19:17
>>323
そりゃできるだろうけど、作っても意味ないだろ。
327デフォルトの名無しさん:2007/11/12(月) 00:21:20
>プログラミング初心者なので輝度値を線型に変換(y=ax+b)とかの意味もわからない状態です
プログラミング初心者は関係ないし,言い訳にするな
328デフォルトの名無しさん:2007/11/12(月) 00:43:47
2stに噴いた
329デフォルトの名無しさん:2007/11/12(月) 01:09:32
330デフォルトの名無しさん:2007/11/12(月) 01:20:55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5250.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:g++
 [3.3] 言語: C++
[4] 期限: 13日21:00
時間のある方よろしくおねがいします
331デフォルトの名無しさん:2007/11/12(月) 02:08:27
g++?
332デフォルトの名無しさん:2007/11/12(月) 02:29:27
[1] 授業単元: 確率論  
[2] 問題文(含コード&リンク):
ここにかきました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5251.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] C
[4] 期限:12日
お願いします

333デフォルトの名無しさん:2007/11/12(月) 03:04:30
>>332
糞コードじゃなくて問題文を全文あげろよ
334デフォルトの名無しさん:2007/11/12(月) 06:06:50
[1] 授業単元:アルゴリズム
[2] 問題文:巡回セールスマン問題を解くプログラムを作成しなさい。
今回は、あらゆる場合を全通り調べる方法で解を求めるプログラムでかまいません。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: Cのみ
[4] 期限: 15日
[5] その他の制限: たいていあり



まじおねがいします
335デフォルトの名無しさん:2007/11/12(月) 06:09:48
>>334
問題文が不足しています

#include<stdio.h>
int main(void){
printf("調べた\n");
return 0;
}
336デフォルトの名無しさん:2007/11/12(月) 06:19:51
まず、地区分けするんだ
沖縄、東京、北海道、福岡など
その地区から巡回したらいい
337デフォルトの名無しさん:2007/11/12(月) 06:23:36
mとnの距離を、d(m,n)とするとnとの距離が10以内のものなどを都市として分類する
都市どおしの距離にすれば簡単になる
338334:2007/11/12(月) 07:18:53
すでに入力されたn個の整数のうちから選んだk個の整数の和の最小値を求めよ
という問題を全順列を使ってプログラムしたらどんなのになりますか?
これが分かれば>>334ができるんですけど・・・


for(i = 0; i < n; i++) used[i]=NO;
perm(0);
return(0);
}
void perm(int d)
{
int i;

if(d != n){
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
↑全列挙のプログラム
339デフォルトの名無しさん:2007/11/12(月) 07:44:28
半径rの中に入っている町は、最大2r離れている
他の地区への距離が2r以上になるようにrを設定して分割すればよい
340デフォルトの名無しさん:2007/11/12(月) 08:06:10
>>333

>>268の部分的なところですよ。
[1] 授業単元: 確率論
[2] 問題文:
ここに書きました。

http://toku.xdisc.net/cgi/up/vcc/nm12604.txt.html
図はこうです。

http://toku.xdisc.net/cgi/up/vcc/nm12605.jpg.html
[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月12日
[5] その他の制限:
A,B,C,Dはそれぞれファイルとして扱う
例えばAには 0.6 0.4の2つの数値だけ書かれてあり、その数値を読み取るようにする。
1と1、0と0が一致したらその状態同士、3つ選択肢ができることになるので
右の確率を半分にわけて0.6 0.2 0.2として
とどまる確率0.6 上の次の状態に移動する確率0.2 下のつながった状態に移動
する確率が0.2となります。
下も同様に。

341デフォルトの名無しさん:2007/11/12(月) 08:14:06
>>338
338 の問題について全順列を使うのは相当無駄な気がするが、
全順列を求めて先頭の k 個を選んだものと考えればいい。
342デフォルトの名無しさん:2007/11/12(月) 09:15:02
>>329
自分でやってみてもなかなかできずに途方にくれていたところでした
本当にありがとうございます!
343デフォルトの名無しさん:2007/11/12(月) 09:52:27
[1] 授業単元: プログラミング演習
[2] 問題文:画像で指定の範囲を切り出して出力するプログラムを作れ。
[3] 環境
[3.1] OS: Windows
[3.3] 言語: (C/C++/)
[4] 期限: 14日まで
お願いします
344デフォルトの名無しさん:2007/11/12(月) 10:56:20
要素数5のint型配列datを用意し、適当に数値を入力する。
各要素の数値個「*」を表示するプログラムを作成しなさい
数値1入力==>3
数値2入力==>8
数値3入力==>5
数値4入力==>4
数値5入力==>2

3:***
8:********
5:*****
4:****
2:**
345デフォルトの名無しさん:2007/11/12(月) 11:10:04
#include <stdio.h>
static void print(int dat)
{
printf("\n%d:", dat);
for (int i = 0; i < dat; ++i) putchar('*');
}
int main()
{
int dat[5];
printf("数値1入力==>"); scanf("%d", & dat[0]);
printf("数値2入力==>"); scanf("%d", & dat[1]);
printf("数値3入力==>"); scanf("%d", & dat[2]);
printf("数値4入力==>"); scanf("%d", & dat[3]);
printf("数値5入力==>"); scanf("%d", & dat[4]);
print(dat[0]);
print(dat[1]);
print(dat[2]);
print(dat[3]);
print(dat[4]);
return 0;
}
346デフォルトの名無しさん:2007/11/12(月) 11:30:08
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

平面上に多角形が二つ与えられたとき、
これらが共通部分を持つかどうかを判定せよ。
境界でのみ交わる場合は共通部分はないとする。

[3] 環境
 [3.1] OS: 指定なし
 [3.2] コンパイラ名とバージョン: 指定なし
 [3.3] 言語: どちらでも可
[4] 期限: 11月13日中
[5] その他の制限: 特になし
347346:2007/11/12(月) 11:31:48
補足:多角形は半時計回りの頂点のリストで与えられる。

よろしくおねがいします
348デフォルトの名無しさん:2007/11/12(月) 11:50:13
297のプログラムわかるひといらっしゃいませんか?
よろしくお願いします.
349デフォルトの名無しさん:2007/11/12(月) 11:50:48
[2]の問題文がリンクだけだったら何をプログラムしていいか分からない。
だから簡単な説明を入れたほうがいいと思う。
例えば、


[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/0000.txt
巡回セールスマン問題を解く


とか、一行程度の説明が欲しい。
っていうのをテンプレに入れてはどうでしょう。
350デフォルトの名無しさん:2007/11/12(月) 12:05:53
リンクだけだとなかなか見る気にならんからねえ。
351デフォルトの名無しさん:2007/11/12(月) 12:24:42
>>297 >>348
要するに、通信経路の計算とかは全然関係なく、
下のようなテキストファイルの値を読み込め、という言う事なのか?


source-node destination-node packet-loss-rate
a b 0.3
a c 0.1
.
.
z w 0.9
352デフォルトの名無しさん:2007/11/12(月) 14:36:10
[1] 授業単元: プログラミング言語・配列

[2] 問題文(含コード&リンク): 文字の出現回数を数える
標準入力から入力された 'a' から 'z' までの文字の出現回数を数えるプログラムを作成せよ。
各文字の出現回数は、大きさ 26 の配列 kaisuu に格納するものとする。初期化を忘れずに!
また、'a' から 'z' までの小文字の英字以外はカウントせず、無視するものとする。

以下のプログラムを参考にせよ。
char c;
...
while ( (c=getchar()) != '\n' ){ /* リターンが押されるまで読み込む */
/* ここに 'a' から 'z' のどれが出現したかを数えるプログラムを */
/* 書くこと */
}
/* どの文字が何個あったかを出力する */
ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。
例えば、 c に 'a' が入っていれば、 c - 'a' は、0 になる。

日本語が含まれない C 言語のプログラムのソースを読ませてみて、うまく動くか確かめてみること。

[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
[4] 期限: 11月19日
[5] その他の制限: 特になし

参照URL:http://www.wakhok.ac.jp/biblion/1995/CC/subsection3.18.4.html



353デフォルトの名無しさん:2007/11/12(月) 15:22:39
#include <stdio.h> /* おまじない */
#include <stdlib.h> /* おまじない */
#include NMAX 20
/* リストの構成要素となる構造体 node_tag */
struct node_tag {
int num; /* 月を格納する整数 */
char name[NMAX]; /* 名前を格納する配列 */
??????? /* 自己参照:次のデータへのポインタ next */
};
int main(void)
{
/* 12の要素をもつ構造体配列の定義 */
struct node_tag Month[12] = { {1, "January", NULL},
{2, "February", NULL},
{3, "March", NULL} };
struct node_tag *p; /* ポインタ p */
/* 各要素をつなぐ (以下の図を参考に)*/
???????
p=&Month[0];
while (p!=NULL){ /* p を用いてリストの表示 */
printf("%d %s\n", ???????, ???????); /* p の num と p の name を表示する */
p=??????? /* p を p の next とする */
}
return 0;
}
-----------------------------------------------------------------
忙しいところすみませんが、どうかよろしくお願いします。
今回書き込みは、初めてなので、至らない点がありましたら、よろしくお願いします。
354デフォルトの名無しさん:2007/11/12(月) 15:23:56

課題 A:

「 月(整数) と 月名(文字) と 次の要素を指すポインタ 」を要素に持つ自己参照構造体を定義する.
この構造体を利用して線形リストを作成し,月と月名を表示させるプログラムを完成せよ.

* 以下のプログラムの各行にコメントを付加すること.

* 以下のプログラムのコメントを参考にすること.
355デフォルトの名無しさん:2007/11/12(月) 15:26:51
#include <stdio.h> /* おまじない */
#include <stdlib.h> /* おまじない */
#define MAX 20
#define MMAX 100
/* リストの構成要素となるセルの構造体 node_tag */
struct node_tag {
int num; /* 配列の番号を格納する整数 */
char name[NMAX]; /* 名前を格納する配列 */
??????? /* 自己参照:次のデータへのポインタ */
};
int main(void)
{
struct node_tag Meibo[MMAX]; /* 構造体配列の定義 */
int n=0; /* 配列の番号を格納する整数 n,初期値は 0 */
struct node_tag *head, *p; /* リストの先頭を指すポインタ head,新しく追加するノードを指すポインタ p */
head=NULL;
while ( scanf("%s", ???????) != EOF ){
Meibo[n].next=???????; /* 新しく追加するノード(Meibo[n]) の next が指すものは? */
head=???????; /* 先頭データ(head)は どこを指すか? */
???????=n++; /* Meibo[n] の num に配列番号を格納する整数を入れる */
}
p=head;
while (p!=NULL){ /* リストの表示 */
printf("%d %s\n", ???????, ???????); /* p の num と p の name を表示する */
p=???????; /* p を p の next とする */
}
return 0;
}

2門続けてすみません。行き詰まってます。よろしくお願いします。
356デフォルトの名無しさん:2007/11/12(月) 15:27:58

課題 B:

「 標準入力 (キーボード) から入力されたアルファベットの文字列 と 配列の番号 」を要素に持つ自己参照構造体を定義する.
この構造体を利用して線形リストを作成し,アルファベットの文字列と配列の番号を表示させるプログラムを完成せよ.

以下のプログラムのコメントに従ってプログラムを完成させること.適宜コメントを追加すること.

付け加えです。よろしくおねがいします。
357デフォルトの名無しさん:2007/11/12(月) 15:31:58
>>353->>356

>>1にテンプレがあります。
それに沿って書き込むと、回答が多くなります。
358デフォルトの名無しさん:2007/11/12(月) 15:40:25
ありがとうございます。
359デフォルトの名無しさん:2007/11/12(月) 15:45:54
>>353->>356の者です。

[1] 授業単元:プログラミング言語2
[2] 問題文(含コード&リンク):先ほどの二つです
[3] L
 [3.1] OS: (/Linux/)
 [3.2] コンパイラ名とバージョン: (gcc )
 [3.3] 言語: (Cです)
[4] 期限: ([2007年11月15日17:00まで] )
[5] その他の制限: リスト構造ぐらいまで

いろいろ御迷惑かけましてすみませんでした
よろしくお願いします。
360デフォルトの名無しさん:2007/11/12(月) 16:15:02
>>353-356
微妙な問題だなあ……
配列とリスト併用して、それで順不同ならまだしもnextが指すのはすぐ次の要素だし……

リストの演習やるなら、もっとリストの利点が分かる物にしたらよかろうに
こんなんじゃ、ちょっとできるやつから「何でわざわざリストを使うんですか?」なんて質問されるぞ
361デフォルトの名無しさん:2007/11/12(月) 16:21:31
課題の雛型なので、変えることが出来ないので。
申し訳ありません。
362デフォルトの名無しさん:2007/11/12(月) 16:31:17
J科生乙
363デフォルトの名無しさん:2007/11/12(月) 16:32:55
>#include <stdio.h> /* おまじない */
こんなことを書いて恥ずかしくないんかね。
364デフォルトの名無しさん:2007/11/12(月) 16:37:20
>>363
それ書いたの担当の女だよ。
しょうがないんだよ餓えてるから少しでも男連中にアピールしてるんでしょ
かわいさアピール?
365デフォルトの名無しさん:2007/11/12(月) 16:40:34
時にはややこしいことを隠して教えることも大事。うふ。
366デフォルトの名無しさん:2007/11/12(月) 16:48:48
コメントにほぼ答えが書いてある穴埋め問題が解けないって奴はなんなんだろうな。
367デフォルトの名無しさん:2007/11/12(月) 16:49:21
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク):
いま、要素数N(N≧1)のint型の配列a[]があり、適当な値がセットされている。以下の要求を満たすfor文を書け。
要素数NはマクロNとして定義されているものとする。要素数NはマクロNとして定義されているものとする。

●直前・直後の配列要素が存在し、それら2つの値の平均よりも大きな値を持つ要素をすべて印字する。
●配列の銭湯からi番目(i=0,1,2,...,N-1)の要素と、末尾からi番目の要素の値が等しいとき、
それらの要素の添え字のうち小さな方を印字する。ただしおなじ添え字は1度しか出力しないこと。

[3] 環境
 [3.1] OS:VineLinux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 11月13日まで
[5] その他の制限: 特になし
368デフォルトの名無しさん:2007/11/12(月) 17:26:32
>>367
>配列の銭湯からi番目(i=0,1,2,...,N-1)の要素と、末尾からi番目の要素
これは先頭からi番目の要素と、先頭からN-i番目の要素を比較しろということだよな?

あと、このような特殊な計算をどこに使うのか是非とも教えて欲しい
369デフォルトの名無しさん:2007/11/12(月) 17:35:25
>>367
for(i=1; i<N-1; i++) if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n", i);

for(i=0; i<N/2; i++) if(a[i]==a[N-1-i]) printf("%d\n", i);
370デフォルトの名無しさん:2007/11/12(月) 17:54:23
>>367先越された
#include<stdio.h>
void prArry(const int a[const], size_t sz)
{
size_t idx = 1;
while( idx != sz - 2 )
{
if( 2*a[idx] > a[idx-1] + a[idx+1] ) printf("%d\n",a[idx]);
++idx;
}
return;
}
void prHeqT(const int a[const], size_t sz)
{
size_t idx = 0;
while( 2*idx <= sz )
{
if( a[idx] == a[sz-1-idx] ) printf("%d\n",idx);
++idx;
}
return;
}

int main(void)
{
const int a[] = {1,2,4,1,55,32,1,4,7,6};
prArry(&a[0],sizeof(a)/sizeof(int));
prHeqT(&a[0],sizeof(a)/sizeof(int));
return 0;
}

371367:2007/11/12(月) 18:07:48
>>368
そうです、誤字すいません。
トレーニング用だと思われます。。。
まだCを始めたばかりで難しくて・・・
アドバイスいただければ幸いです。

>>369
#include <stdio.h>
#define N 10
int main(void)
{
int a[N];
char buf[80];
int i;

for(i=1;i<N-1;i++)
{
fgets(buf,80,stdin);
sscanf(buf,"%d",&a[i]);
}
if(a[i]*2>a[i-1]+a[i+1])
printf("%d\n",i);
}

とりあえず2をこんな感じにやってみたのですが、うまくいきません。。。
どんな数字を入れても9になってしまいます・・・

>>370
ごめんなさい、基礎プログラミングなので、そこまで高度な技術は分かりません^^;
372デフォルトの名無しさん:2007/11/12(月) 18:09:21
どこら辺が高度?修正するけど。
373367:2007/11/12(月) 18:18:16
わざわざすいません、テンプレに書くべきだったのですが、
自分はまだ制御構造のwhile文までくらいのコマンドくらいしか分からないので・・・

お勧めの入門書などがあれば教えてもらいたいです。
374デフォルトの名無しさん:2007/11/12(月) 18:20:59
独習C
375デフォルトの名無しさん:2007/11/12(月) 18:27:46
>とりあえず2をこんな感じにやってみたのですが、うまくいきません。。。
>どんな数字を入れても9になってしまいます・・・

if(a[i]*2>a[i-1]+a[i+1])
printf("%d\n",i);
だとそりゃ9がでる。

for( i = 0; i != N; ++i )
{
if(a[i]*2>a[i-1]+a[i+1])
printf("%d\n",i);
}
376デフォルトの名無しさん:2007/11/12(月) 18:31:49
>>371
#include<stdio.h>
#include<stdlib.h>
#define N 10
int main(void)
{
int a[N];
int i;
for( i = 0; i != N; ++i) { scanf("%d",&a[i]); }
printf("--------------------------\n");
for( i=0; i != N; ++i )
{
if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i);
}

}
377デフォルトの名無しさん:2007/11/12(月) 18:35:29
何度も同じ質問すみません
[1] 授業単元:アルゴリズム
[2] 問題文:巡回セールスマン問題を解く(厳密解)プログラムを作成しなさい。
     (解=最小値とその最小値を出す通路)
巡回セールスマン問題のデータファイルは次のデータ形式とする。1行目に頂点数、2行目以下に距離行列。例えば、次のようなもの。
5
0 3 2 99 4
3 0 99 12 99
2 99 0 5 6
99 12 5 0 16
4 99 6 16 0

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: Cのみ
[4] 期限: 15日
[5] その他の制限: 全列挙を利用して



本当に列挙だけで最小値だけを出すということができません
378デフォルトの名無しさん:2007/11/12(月) 18:42:41
[1] アルゴリズムとデータ構造
[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5252.txt
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限: 21日まで

問題の解きがいがないかもしれませんが
よろしくお願いします。
379デフォルトの名無しさん:2007/11/12(月) 18:48:00
for (i=0; i<kosu; i++)
printf("%s\n", data[i];

のところで
printf("%s\n", data[i] ) ;
カッコが抜けてる
380デフォルトの名無しさん:2007/11/12(月) 18:54:28
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
・ニュートン法と二分法の両方を用いて、直線 y = x + 1/2 と単位円 x^2 + y^2 = 1 の交点の座標の近似解(小数点以下第6位まで)を求めよ。
・一つのプログラムに書くこと
・二分法を用いる初期値は、 [a,b] = [-1,1] とせよ。
・ニュートン法で用いる初期値は、2つとも0とせよ。その際、1つの関数は収束しない。収束しない場合は、求められないとわかった時点でやめるように工夫せよ。
・ニュートン法も二分法もともに何回で収束したかがわかるようにしておくこと。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc(バージョン不明です)
 [3.3] 言語:C++
[4] 期限: [2007年11月21日まで(22日提出です)]
[5] その他の制限:
・見てわかりやすいように説明文なども各自付加しろ、と指示がありました。
・デスクトップ環境: GNOME 2.4.2

よろしくお願いします。
381367:2007/11/12(月) 18:58:25
>>374,375,376
ありがとうございます!
382 ◆wFVK8h9bmM :2007/11/12(月) 19:09:28
ものすごく遅くなってしまいましたが、>>289ありがとうございました。
考えて下さった、279、280、281、284のみなさんもありがとうございました。
ちなみに>>284の質問の答えが返ってきましてV=V0/E=1.000が正しいらしいです。
383デフォルトの名無しさん:2007/11/12(月) 19:23:58
>>377
巡回セールスマン問題については、
最適解(厳密解)を求めるアルゴリズム自体が、2007年現在、未だに確立されていません。
近似解を用いるのが一般的です。
最適解(厳密解)を求めるアルゴリズムを考え出すのはほとんど無理です。
384378:2007/11/12(月) 19:27:58
>>379
ありがとうございます。
問2に関しても自己解決できました。
385デフォルトの名無しさん:2007/11/12(月) 19:29:25
>>383
・・・へぇ
386 ◆a3LMU3qR26 :2007/11/12(月) 19:29:33
頂点数が5個程度なら全列挙で解が得られるのではないでしょうか?
387377 ◆a3LMU3qR26 :2007/11/12(月) 19:30:27
すいません
377です
388377 ◆a3LMU3qR26 :2007/11/12(月) 19:40:48
ファイルから読み込むプログラムで
#include<stdio.h>
#define MAXN (100)
#define YES (1)
#define NO (0)
int n, a[MAXN], used[MAXN];
int adj[MAXN][MAXN];
void perm(int d);
void minimum(int s);
int main(int argc, char **argv){
int i, j;
FILE *fp;
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
exit(1);
}
fp = fopen(argv[1],"r");
if (fp == NULL) {
printf("File not found.\n");
exit(1);
}
fscanf(fp, "%d", &n);
if ((n > MAXN) || (n < 0)) {
printf("Out of range: n.\n");
exit(1);
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
fscanf(fp, "%d", &adj[i][j]);
}
}
fclose(fp);
389377 ◆a3LMU3qR26 :2007/11/12(月) 19:43:37
printf("%d\n",n);
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
printf("%d ",adj[i][j]);
}
printf("\n");
}
printf("\n");
for(i = 0; i < n; i++) used[i]=NO;
perm(0);
return(0);
}
void perm(int d)
{
int i,j;
int s = 0;
if(d == n){
for(j = 0; j < n-2; j++) s+=adj[a[j]][a[j+1]];
s+=adj[a[0]][a[n-1]];
printf("%d\n",s);
}
else{
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
390377 ◆a3LMU3qR26 :2007/11/12(月) 19:45:39
スレ汚しスマソ
ここまではできてるんですけどこれだけだと和の列挙にしかなりません
ここから最小値を取り出して出力させるには何を付け加えたらいいのか教えてください
391デフォルトの名無しさん:2007/11/12(月) 20:16:37
>>390
TSPのアルゴリズムそのものを付け足せばいい
392334:2007/11/12(月) 20:44:16
>>391
ググってみたけどもわからないんですけど
具体的にどういう風にすればいいのですか?
393377 ◆a3LMU3qR26 :2007/11/12(月) 20:45:08
すみません
>>334=>>337です
394デフォルトの名無しさん:2007/11/12(月) 21:00:16
授業名:アルゴリズム
問題:
次の問題の題意を日本語で説明し問題の解答を与えるプログラムを作成せよ。
For what value of integer N is 10NlgN>2N^2?
環境:C言語でコンパイラはgcc
期限:来週の月曜まで

よろしくおねがいします。
395デフォルトの名無しさん:2007/11/12(月) 21:01:09
>>394
せめて日本語で説明する部分くらいやってもいいのでは?
396デフォルトの名無しさん:2007/11/12(月) 21:13:26
>>395
自分の日本語訳は
整数Nはなんのために10NlgN>2N^2ですか?
みたいな感じなんですけどあってるんでしょうか・・・
初めての英語問題で面食らってます
397デフォルトの名無しさん:2007/11/12(月) 21:25:29
398デフォルトの名無しさん:2007/11/12(月) 21:32:48
>>396
どんな値の範囲で10NlgN>2N^2が成り立ちますか?
じゃないかFor = 範囲
399デフォルトの名無しさん:2007/11/12(月) 21:39:57
10NlogN - 2N*N = 0を満たすNをもとめりゃいい。
400デフォルトの名無しさん:2007/11/12(月) 21:42:41
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆【一番クリックした国が優勝】参加者求ム!☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 イギリス人天才プログラマが運営する前代未聞の無料ブラウザゲーム、http://clickclickclick.com/
 ただひたすらクリックし、国別の総クリック数を世界中で競い合う!
 究極にバカバカしくそして意味がなく、ひたすら時間の無駄でなんの得にもならない、だがそれが(・∀・)イイ!

 ライバルはハンガリー、そして台湾!! GAME2から参戦し、現在GAME27開催中!
 VIPで発祥し現在2ch全土から結集したクリック兵達で日本チームは戦っている!
 意味のない事に全力を傾ける、それが2ちゃんねるクオリティ!!

 独自のクリックツール開発競争も熱く、各国のプログラマが全力で優秀な兵器開発をしている!!
 日本の技術力の高さを世界に見せつけてやろうぜ!
 プログラマ、Flashゲーム製作者、動画職人、AA職人、絵師、DJ、wiki編集blog編集者、データ分析者etcも募集中!
 ツール放置参加もできるので、PCのスペックに自身のある奴、CPUに空きのある奴、時間が余ってる奴もぜひ参加してくれ!

 本スレッド
 【簡単多重】一番クリックした国が優勝【8砲門】
 http://wwwww.2ch.net/test/read.cgi/news4vip/1194741194/l50
 ※落ちているときはここから1発検索
 http://www.clickjapan.jp/find2ch.php

 日本チームの有志によるまとめサイトポータル
 http://www.clickjapan.jp/ 
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
401デフォルトの名無しさん:2007/11/12(月) 22:22:09
>>394
#include<stdio.h>
#include<math.h>

typedef double (*SingleFun)( double );
double newton(SingleFun fun,SingleFun fprime, double x)
{
double fx;
double fp;
double xprev;
do
{
fx = fun(x);
fp = fprime(x);
if(fp == 0) fp = 1;
xprev = x;
x -= fx / fp;
} while( x != xprev );
return x;
}

double fN(double N) { return 10.0 * N * log( N ) - 2*N*N; }
double dfdN(double N) { return 10.0 * log( N ) - 4.0 * N + 10.0; }

int main(void)
{
double res = newton( fN, dfdN, 1.0 );
printf("result = %1lf\n",res );
printf("10Nlog(N) > 2N^2 is true for N > %lf\n",res);
return 0;
}
402デフォルトの名無しさん:2007/11/12(月) 22:25:38
>>398-399
ありがとうございます。やっと理解できました
>>401
ありがとうございます。
403デフォルトの名無しさん:2007/11/12(月) 22:27:58
>>402
結果を実数で返してしまった。整数に直してくれ。
だから答えとしてはN > 1だな。
404デフォルトの名無しさん:2007/11/13(火) 00:36:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ライブラリ関数atofと同じ動作を行う関数
double strtof(const char *nptr) {/*・・・*/}
を作成しなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] gcc3.4
 [3.3] C言語
[4] 11/15まで

お願いします
405デフォルトの名無しさん:2007/11/13(火) 00:43:07
#include<stdio.h>
#include<stdlib.h>

double strtof_ (const char *nptr)
{
return strtod_ (nptr, (char **) NULL);
}
406デフォルトの名無しさん:2007/11/13(火) 00:44:11
間違えた。
ていうか衝突するからstrtofって名前使わないほうがいいと思う。
#include<stdio.h>
#include<stdlib.h>
double strtof_ (const char *nptr)
{
return strtod (nptr, (char **) NULL);
}
407デフォルトの名無しさん:2007/11/13(火) 00:52:40
>>406
すいません、条件を書き忘れました
申し訳ありません
標準ライブラリ関数を使わないでお願いします
408デフォルトの名無しさん:2007/11/13(火) 01:52:52
>>404
double strtof(const char *nptr)
{
double ret = 0, div = 10, f = 1;

if(*nptr=='-') {
f = -1;
nptr++;
}
else if(*nptr=='+') nptr++;

while('0' <= *nptr && *nptr <= '9') ret = ret * 10 + *nptr++ - '0';

if(*nptr++!='.') return f * ret;

while('0' <= *nptr && *nptr <= '9') {
ret += (*nptr++ - '0') / div;
div *= 10;
}

return ret * f;
}
409デフォルトの名無しさん:2007/11/13(火) 03:35:54
double strtof(const char *nptr)
{
const char *p;
int s, n, d;

s = 1;
n = 0;
d = 0;
for (p = nptr; *p != '\0'; p++)
if (*p == '+' || *p == '-') {
if (p != nptr)
break;
if (*p == '-')
s = -1;
} else
if (*p == '.')
d = 1;
else
if (*p >= '0' && *p <= '9') {
n = n * 10 + *p - '0';
d = d * 10;
} else
break;
if (d == 0)
d = 1;
return (double)s * (double)n / (double)d;
}
410デフォルトの名無しさん:2007/11/13(火) 03:44:32
>>408>>409
つ[EBCDIC]
411デフォルトの名無しさん:2007/11/13(火) 03:48:22
EBCDICは0〜9の並びについては保証されてるよ
アルファベットがいけない
412デフォルトの名無しさん:2007/11/13(火) 07:06:07
>>397
これ厳密解じゃないよ
しかもnodeを30とかにすると解くのに時間かかりすぎ
やり直してきたほうがいいのでは?
413デフォルトの名無しさん:2007/11/13(火) 07:54:05
再帰じゃそんなもんざます
414デフォルトの名無しさん:2007/11/13(火) 08:19:37
>>409
いろいろとひどいな
415デフォルトの名無しさん:2007/11/13(火) 16:14:07
[1] 授業単元: プログラム演習
[2] 問題文:
ここに書きました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5255.txt
[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月13日24時まで
[5] その他の制限: 特にありません
お願いします。
416デフォルトの名無しさん:2007/11/13(火) 16:25:41
学校からのカキコミです。
わからないので教えてください。

課題25 1からキーボードで入力した値までの合計を求めるプログラムを作りなさい

>kadai25
いくつまで合計しますか> 10 /*10と入力
合計は55


↑こうしたいのですが、よろしくお願いします。
ちなみにscanfとforを使うみたいです
417デフォルトの名無しさん:2007/11/13(火) 16:29:14
351さん、そうです。 そのやり方がよくわからないのです。
418デフォルトの名無しさん:2007/11/13(火) 16:44:09
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):ある新聞販売店では新聞を1部40円で仕入れ、100円で売っている。売れ残った新聞
は1部15円で新聞社に引き取ってもらう。過去1年間の統計によれば、1日に売れる新
聞の数(客数)は、平均800、標準偏差120 の正規分布に大体従っている。このとき、こ
の店では1 日に何部の新聞を仕入れれば最も利益(粗利)が多くなるか? これをプログラムに記述せよ。
[3] 環境
 [3.1] OS: Windows
 
 [3.3] 言語: C/C++
[4] 期限: 11月18日
[5] その他の制限:なし
よろしくお願いします。
419デフォルトの名無しさん:2007/11/13(火) 16:44:33
>>415
勝手にテンプレ省略すんなハゲ
420こまった:2007/11/13(火) 17:08:34
初歩の初歩の質問で本当にごめんなさい。
まったくわからなくって本当にこまってます。
問題:四則演算する電卓を作りなさい。また、あまりも出しなさい。
例:%a.out 5+8
5+8=13
式を入れれば自動計算するようにしたいのですが///さっぱりわからないのです。
すみません。
421デフォルトの名無しさん:2007/11/13(火) 17:13:54
お前の質問も全くわからん
422こまった:2007/11/13(火) 17:22:26
式を打ち込めば四則演算をしてくれて、かつ、あまりがあれば、それも表示してくれるプログラミング
なんですけど(;△;)
どうしたらよいのでしょう。
423デフォルトの名無しさん:2007/11/13(火) 17:56:16
>>422
とりあえずがんばってみたら?
だめなら、ダメなりに、どこがどういうことで行き詰ったかかかなあかんよ
424デフォルトの名無しさん:2007/11/13(火) 18:02:44
mapのデータ部分にクラスを利用する?ことができるらしいんですがイマイチどうすればいいか
わかりません・・・
425デフォルトの名無しさん:2007/11/13(火) 18:05:28
>>424
普通の型と同じでおk
426デフォルトの名無しさん:2007/11/13(火) 18:09:39
>>425
例えばDATAっていうクラスがあったとしたら
map<key,DATA>でいいってことですか?
427デフォルトの名無しさん:2007/11/13(火) 19:40:02
[1] 基礎プログラミング
[2] キーボードから与えられる試験の得点(100点満点)を次々と読み込み、その中央値を
求めるプログラムを作成せよ。得点は1行にひとつずつ入力され、負の値は入力の終了を表すも
のとする。また、データの個数の上限は適当に決めてよい。ただし、得点が一つも与えられなか
ったときは「なし」と印字せよ。
なお、一般に、数値データの中央値は、それらを昇順に並び換えたものに(n個としたとき)、
奇数なら先頭から{(n+1)÷2}番目、偶数なら[{n÷2+(n+1)÷2}÷2]番目である。
 [3.1]Linux
 [3.3]C言語
[4]できれば今日中
[5] 配列
428デフォルトの名無しさん:2007/11/13(火) 20:45:57
【質問テンプレ】
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5256.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月20日
[5] その他の制限:if文、if-else文、switch文まで習いました
429デフォルトの名無しさん:2007/11/13(火) 21:00:14
>>426
その通り
ついでにスレ違い
430デフォルトの名無しさん:2007/11/13(火) 21:33:40
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 第1項・第2項の値を1とし、
直前の2つの項の和を項の値とする数列を「フィボナッチ数列」と言う。
この数列のi番目の項を計算する関数は、
以下のように再帰的に記述することができる。

f(i) = f(i-1) + f(i-2) (i > 1のとき)
f(i) = 1 (i = 1のとき)
f(i) = 0 (i = 0のとき)

キーボードから数字を入力して変数aに格納し、
フィボナッチ数列・第a項の値を計算するプログラムを作成せよ。

項の計算は上の定義を使い、
再帰的な呼び出しを実行する関数
int F(int n)
を作成して呼び出すこと。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: C
[4] 期限: 11/15まで
[5] その他の制限: #defineはなしで
431デフォルトの名無しさん:2007/11/13(火) 21:35:17
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): キーボードから入力した数値(10進数)を
2進数に変換して画面に出力するコードを作成しなさい。

また,キーボードから入力した2進数の数値を
10進数に変換して画面に出力するコードを作成しなさい。

また、必要に応じて再帰を使っても使わなくてもよい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: C
[4] 期限: 11/15まで
[5] その他の制限: #defineはなしで
432380:2007/11/13(火) 21:35:40
>>380です。単位かかってるレポなんでどなたかお願いします。
433デフォルトの名無しさん:2007/11/13(火) 21:35:40
>>428
if(a==0) {
if(b==0) {
if(c==0) printf("It is trivial!\n");
else printf("Boo-boo!\n");
}
else {
x1 = -c / b;
printf("x=%.2f\n", x1);
}
}
else {
D = b * b - 4 * a * c;
if(D >0) {
x1 = (-b+sqrt(D)) / (2 * a);
x2 = (-b-sqrt(D)) / (2 * a);
printf("x=%.2f,%.2f\n", x1, x2);
}
else if(D==0) {
x1 = -b / (2 * a);
printf("x=%.2f\n", x1);
}
else printf("There exist no real-valued solutions.\n");
}
return 0;
}
434デフォルトの名無しさん:2007/11/13(火) 21:36:01
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): ハノイの塔を解くプログラムを作成する。
キーボードから円盤の枚数を入力し、
円盤を移動する手順を画面に表示すること。


・円盤は小さい物から順に1から番号で示す
・柱はL・C・Rで示し、円盤全体をLからRへ移すとする
・可能ならば手順の回数も表示すること


【実行結果(枚数を3と入力した場合)】
円盤枚数を入力 3

円盤1をL→Rへ移す
円盤2をL→Cへ移す
円盤1をR→Cへ移す
円盤3をL→Rへ移す
円盤1をC→Lへ移す
円盤2をC→Rへ移す
円盤1をL→Rへ移す
(終了)

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: C
[4] 期限: 11/15まで
[5] その他の制限: #defineはなしで
435デフォルトの名無しさん:2007/11/13(火) 21:42:19
>>433
ありがとうございました。
436デフォルトの名無しさん:2007/11/13(火) 21:49:56
>>434
Hanoiだし再帰使っていいよね?
#include<stdio.h>
void hanoi(int L,int C,int R,int n){
    if(n==0)return;
    hanoi(L,R,C,n-1);
    printf("円盤%dを%c→%cへ移す\n",n,L,R);
    hanoi(C,L,R,n-1);
}
main(){
    int n;
    printf("円盤枚数を入力");
    scanf("%d",&n);
    hanoi('L','C','R',n);
    printf("手順の回数 %d\n",~(~0<<n));
}
437shin:2007/11/13(火) 21:54:59
[1]授業単元: 関数入門
[2]問題文:

100点満点の試験を入力して、5段階評価を返す関数 hyouka を作成せよ。
5段階評価は、100〜90までは5、89〜80は4、79〜70は3、69〜60は2、60未満は1とする。
この関数を利用して、学生10人の試験の点数を入力して、
それぞれの5段階評価を求め一覧表を表示するプログラム quality.cpp を作成せよ。

[3]環境
 [3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C++

[4]期限: 2007年11月14日 17:00 まで
[5]その他の制限: 関数の作り方、使い方が分からないので、そこを教えていただけるだけでも結構です(´`;)

よろしくおねがいします!
438デフォルトの名無しさん:2007/11/13(火) 22:03:46
ウィルスつくってください
[email protected]
439デフォルトの名無しさん:2007/11/13(火) 22:18:09
[1] 授業単元:プログラミング、関数基礎
[2] 問題文(含コード&リンク):
メイン関数において、2つの放物線
 y=ax2+bx+c
 y=px2+qx+r
の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。
関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし
てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場
合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が
有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数
から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個
存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限: 2007年11月19日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
C言語の基礎しか習っていません。
どなたかよろしくお願いします。
440デフォルトの名無しさん:2007/11/13(火) 22:23:38
>>430
#include <stdio.h>
int F(int n)
{
if(n==0)
return 0;
else if(n==1)
return 1;
else
return F(n-1) + F(n-2);
}
main()
{
int a,x;
printf("数字を入力:");
scanf("%d",&a);
x = F(a);
printf("フィボナッチ数列第%d項 = %d\n",a,x);
return;
}
441デフォルトの名無しさん:2007/11/13(火) 22:35:55
>>440
それだと末尾最適化されないはず
こっちで
#include<stdio.h>
#include<stdlib.h>

typedef unsigned int uint;

uint iter(uint a, uint b, uint n) { return n == 0 ? 1 : n == 1 ? a : iter(a+b,a,n-1); }
uint fibonacci(uint n) { return iter(1,1,n); }

int main(void)
{
size_t idx = 0;
for( ; idx != 10; ++idx)
printf("%d: %d\n",idx,fibonacci(idx));
return EXIT_SUCCESS;
}
442デフォルトの名無しさん:2007/11/13(火) 22:37:18
すまん。大元の問題読んでなかった。
>>440でいいね。
44346:2007/11/13(火) 22:46:48
どなたか>>46をお願いします
444デフォルトの名無しさん:2007/11/13(火) 22:53:23
>>443
使っているライブラリは何?よくわからないけど興味あるから勉強してみたい。
で、もしできたら答える。
445デフォルトの名無しさん:2007/11/13(火) 22:59:41
>>444
意味わからん。
446デフォルトの名無しさん:2007/11/13(火) 23:10:15
>>444
とりあえずforkをぐぐるところから始めるといいと思うよ
447デフォルトの名無しさん:2007/11/13(火) 23:16:14
448デフォルトの名無しさん:2007/11/13(火) 23:28:57
当方の環境は、WindowsXP / 処理系は gcc 3.4.4 です。
プログラムを起動すると、名前と点数を聞いてきます。
10人分入力すると、名前と評価(level)を表示します。
入力した名前が 1024 文字以上だと、バグります。ごめんなさい。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5257.txt
449デフォルトの名無しさん:2007/11/13(火) 23:30:46
>>448>>437
450デフォルトの名無しさん:2007/11/13(火) 23:32:18
>>448
何も考えずに string を勧める
451shin:2007/11/13(火) 23:47:58
>>448
ありがとうございます!!!
452shin:2007/11/13(火) 23:54:22
>>437です
自力でやったのですが、
エラーを消すためにいろいろとしていたらよくわからなくなりました..
誰かなおしてください…
お願いします!
453shin:2007/11/13(火) 23:59:48
#include <iostream.h>
#include <iomanip.h>
int hyouka( int ) ; // 5段階評価する関数
main()
{
const int x = 10 ; // 入力できる人数
int a[x] ; // テストの点数
int b[x] ; // 1〜5の成績
int i, result ;
      for( i=0 ; i<x ; i++){
cout << i+1 << "人目の成績 >>> " ;
cin >> a[i] ;
result = hyouka( a[x] ) ;
}
return 0 ;
}
454shin:2007/11/14(水) 00:00:28
// 関数hyouka
int x ;
int hyouka(int a[x])
{
int x ;
int b[x] ; //1〜5の成績

if(90<=a[i]){
b = 5 ;
}else if (80<=a[i]){
b = 4 ;
}else if (70<=a[i]){
b = 3 ;
}else if (60<=a[i]){
b = 2 ;
}else{
b = 1 ;
}
}
455デフォルトの名無しさん:2007/11/14(水) 00:21:12
面白い
456デフォルトの名無しさん:2007/11/14(水) 00:21:42
エラー直して欲しいだけならエラーメッセージ見たら大体分かるだろ。
457デフォルトの名無しさん:2007/11/14(水) 00:30:00
>>437 (>>452)
#include <iostream>
#include <iomanip>
int hyouka( int ) ; // 5段階評価する関数
int main(void)
{
const int x = 10 ; // 入力できる人数
int a[x] ; // テストの点数
int b[x] ; // 1〜5の成績
int i ;
for( i=0 ; i<x ; i++){
std::cout << i+1 << "人目の成績 >>> " ;
std::cin >> a[i] ;
b[i] = hyouka( a[i] ) ;
}
std::cout << "番号:点数:評価" << std::endl;
for( i=0 ; i<x ; i++)
std::cout << std::setw(4) << i + 1 << ':'
<< std::setw(4) << a[i] << ':'
<< std::setw(4) << b[i] << std::endl;
return 0 ;
}
458デフォルトの名無しさん:2007/11/14(水) 00:31:25
承前
int hyouka(int a)
{
if(90<=a){
return 5 ;
}else if (80<=a){
return 4 ;
}else if (70<=a){
return 3 ;
}else if (60<=a){
return 2 ;
}
return 1 ;
}
459デフォルトの名無しさん:2007/11/14(水) 00:42:21
>>458
横からスマンがこういうほうが個人的に好き

int hyouka(int a)
{
return 90 <= a ? 5 :
80 <= a ? 4 :
70 <= a ? 3 :
60 <= a ? 2 :
1;
}
460デフォルトの名無しさん:2007/11/14(水) 00:56:02
>>439
当方の環境は、WindowsXP / 処理系は cygwin(gcc 3.4.4) です。
表示は小数点3桁まで、重根の判定は幾分甘くしています。
係数が整数ならば、問題ないと思います。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5258.txt
461デフォルトの名無しさん:2007/11/14(水) 00:59:46

【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
ここに書きました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5255.txt
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限: ([2007年11月14日24:00まで)
[5] その他の制限:

書き直しました
462デフォルトの名無しさん:2007/11/14(水) 01:05:27
>>461
自分のレス流れたから書いてるだけじゃねーかタコが
書き直すんならもっと早くやっとけよ低脳
463aho:2007/11/14(水) 01:06:43
>>461
作るの面倒だから、アルゴリズムを・・・
"s"が並ぶことはないから単純に"b"かどうかを判定すればよい。
従って、
for(省略)
if(!strcmp(sdata[i].word[j], "b"))
sdata[i].num++;
end of for
これじゃあかんのかな?
464458:2007/11/14(水) 01:18:30
>>459
458 のは、ちょっとずぼら過ぎたね
int hyouka(int a)
{
if (90<=a) return 5 ;
if (80<=a) return 4 ;
if (70<=a) return 3 ;
if (60<=a) return 2 ;
return 1 ;
}
に訂正
465デフォルトの名無しさん:2007/11/14(水) 01:27:22
>>461
#include<stdio.h>

struct tfield{
char word[5];
int num;
};

int width_get(int value){
char tmp[16];
return sprintf(tmp, "%d", value);
}

int main(void){
struct tfield sdata[20];
const char *initial_data="bsbsbbsbsbsbsbbsbbsb";
int i, prev='b', count;

for(i=0,count=0;i<20;i++){
if(prev=='b') count++;
sprintf(sdata[i].word, "%*c", width_get(count), initial_data[i]);
sdata[i].num=count;
prev=initial_data[i];
}

for(i=0;i<20;i++) printf("%s", sdata[i].word);
printf("\n");
for(i=0;i<20;i++) printf("%d", sdata[i].num);
printf("\n");

return 0;
}
466461:2007/11/14(水) 01:47:05
>>463
>>465
ありがとうございました。
467デフォルトの名無しさん:2007/11/14(水) 02:09:09
【質問テンプレ】
[1] 授業単元:
[2] 数独を解くプログラムを作れ(なるべく詳しく説明もいれて)
[3] 環境
 [3.1] 特に指定なし
 [3.2] 特に指定なし
 [3.3] 言語:C
[4] 期限: 11月17日
[5] 特に制限はなく 単にCを使って数独をとくプログラムをかけばよいらしいのですが
難易度があがってもなるべく解けるように・・・といわれました。
どうしてもうまくいきません。
よろしくお願いします
468デフォルトの名無しさん:2007/11/14(水) 02:48:15
各ブロックに、ある数字が入る可能性が1マスしかない場合
各ブロックに、ある2個の数字が入る可能性が2マスしかない場合
→それらのマスには他の数字は入らない、他のマスにはその数字は入らない

各行ごとに、ある数字が入る可能性が1つのブロックにしか残っていない場合
→そのブロックの他の行にはその数字は入らない
469デフォルトの名無しさん:2007/11/14(水) 03:45:09
数独程度だと、なまじアルゴリズムを凝るよりも安直に作った方がいい。
何故ならば、どんなに安直に作っても1秒と掛からずに解けてしまうから。
つまり、凝ったアルゴリズムを考える手間やデバッグの暇に何千問も処理できるってこった。
470デフォルトの名無しさん:2007/11/14(水) 05:51:45
[1] 基礎プログラミング
[2] キーボードから与えられる試験の得点(100点満点)を次々と読み込み、その中央値を
求めるプログラムを作成せよ。得点は1行にひとつずつ入力され、負の値は入力の終了を表すも
のとする。また、データの個数の上限は適当に決めてよい。ただし、得点が一つも与えられなか
ったときは「なし」と印字せよ。
なお、一般に、数値データの中央値は、それらを昇順に並び換えたものに(n個としたとき)、
奇数なら先頭から{(n+1)÷2}番目、偶数なら[{n÷2+(n+1)÷2}÷2]番目である。
 [3.1]Linux
 [3.3]C言語
[4]11月14日朝10時
[5] 配列

おねがいします
471デフォルトの名無しさん:2007/11/14(水) 07:12:34
>>467
数独のソースはネットで探せば確実にあります
まずは探しましょう
472cvop:2007/11/14(水) 07:41:40
プログラミング初心者ですが、
画像処理のプログラミングで、PGM画像中にある、
それぞれのオプティカルフローの角度[度]と大きさ[pixel]の
頻度の分布(縦軸:フローの頻度、横軸:フローの角度or大きさ)を
検出し、グラフにしたい(ヒストグラムみたいに)のですが、
どのようなプログラムを作れば良いのでしょうか?
分かる方がいらっしゃれば教えて頂けないでしょうか。
言語はC言語です。
473デフォルトの名無しさん:2007/11/14(水) 07:58:56
スレ違い
474デフォルトの名無しさん:2007/11/14(水) 09:16:19
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):http://edu.net.c.dendai.ac.jp/ad/1/2007/kadai.html
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:mingw-jp.bat
 [3.3] 言語:C++
[4] 期限:2007年12月5日20:00まで
[5] その他の制限:Windows の API は使用しない,基本的な文法はわかります(For文等)

丸投げですがよろしくお願いします。
475デフォルトの名無しさん:2007/11/14(水) 10:06:42
>>474
「なお、写したと思われるほど酷似したレポートが複数提出された場合、
原著がどれかの調査を行わず、抽選で一通のレポートのみを評価の対象とし」

こ れ は お も し ろ い
476デフォルトの名無しさん:2007/11/14(水) 10:28:45
>>474
レポートも書けってこと?Wordでいいのか?
477デフォルトの名無しさん:2007/11/14(水) 10:46:21
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):ある新聞販売店では新聞を1部40円で仕入れ、100円で売っている。売れ残った新聞
は1部15円で新聞社に引き取ってもらう。過去1年間の統計によれば、1日に売れる新
聞の数(客数)は、平均800、標準偏差120 の正規分布に大体従っている。このとき、こ
の店では1 日に何部の新聞を仕入れれば最も利益(粗利)が多くなるか? これをプログラムに記述せよ。
[3] 環境
 [3.1] OS: Windows
 
 [3.3] 言語: C/C++
[4] 期限: 11月18日
[5] その他の制限:なし
よろしくお願いします。

478デフォルトの名無しさん:2007/11/14(水) 11:52:10
>>429
ありがとうございました
スレ違いすみませんでした・・・
479デフォルトの名無しさん:2007/11/14(水) 13:10:41
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

  整数型変数nの値を1から25まで1ずつ変化させて、nの2乗、1/n
  nの平方根、およびnの立方根を求めて、以下のような数表を作成する
  プログラムを完成せよ。

n n*n 1/n sqrt(n) n∧(3/1)
1 1 1.00000 1.00000 1.00000
2 2 0.50000 1.41421 1.25992
== == ======= ======= =======
25 625 0.04000 5.00000 2.92402

 (課題分では===のところはくっついていて、
  2乗、1/nなどのところはくっついてしまっていますが
  それぞれ離れています。やりかたがわかりませんでした。
  大変見にくくてすみません)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C++
[4] 期限: 2007年11月14日(15日提出)
[5] その他の制限: 習い始めたばかりなのでよくわかりませんが
         ないと思います。

宜しくお願いします。
480デフォルトの名無しさん:2007/11/14(水) 13:10:48
>>475
ひねくれた教授なのでw

>>476
プログラムだけで大丈夫です。
なるべく初歩的な文法でお願いしたいのですが…
481デフォルトの名無しさん:2007/11/14(水) 14:06:17
>>480
教授にメールしとくわ
482デフォルトの名無しさん:2007/11/14(水) 14:31:30
>>467 数独はアルゴリズムは簡単で良いけど、ハッシュ表は導入した方が良いよ ちょっとやってみた

#include <iostream>
using namespace std;
main(){
int z,w,l=0,n,i,j,bf[8][81];
int tmp[4][3]={0,1,9, 0,9,1, 8,-1,9, 8,9,-1};
for(n=0;n<4;n++){
for(i=0;i<9;i++)for(j=0;j<9;j++){
z=tmp[n][0]+tmp[n][1]*i+tmp[n][2]*j;
bf[l][z]=bf[l+1][80-z]=i+9*j;}l+=2;}

int x[81],p[81],q[81];for(z=0;z<81;z++)x[z]=rand()%10;
for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<x[z]<<" ";}
cout<<endl<<"のハッシュ値を求める。"<<endl;

int num[10];
for(i=0;i<81;i++)p[i]=9;
for(l=0;l<8;l++){
for(i=0;i<10;i++)num[i]=0;i=1;
for(z=0;z<81;z++){ n=x[ bf[l][z] ];
if(n>0)if(num[n]==0){num[n]=i;i++;}
q[z]=num[n];}
for(i=0;i<81;i++)if(p[i]<q[i])goto end; else if(p[i]>q[i])break;
if(i<81)for(i=0;i<81;i++)p[i]=q[i];end:}

unsigned int rh[81][9],hash=0;
for(z=0;z<81;z++)for(i=0;i<9;i++)rh[z][i]=(rand()<<16)+rand();
for(z=0;z<81;z++)hash^=rh[z][p[z]];
for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<p[z]<<" ";}
cout<<"\nと変形され\nハッシュ値は"<<hash<<endl;}
483デフォルトの名無しさん:2007/11/14(水) 14:35:23
484デフォルトの名無しさん:2007/11/14(水) 14:37:14
ハッシュ表があれば調べる局面が、1/8以下に出来るよ
すぐ解答が出る場面では逆に鈍くなると思うけど、0.5秒以上かかるならハッシュ表使ったら速いと思うよ
485デフォルトの名無しさん:2007/11/14(水) 14:52:57
>>481
教授公認だから問題無しw
486デフォルトの名無しさん:2007/11/14(水) 14:58:32
>>485
「ひねくれた教授」が公認なの?
487デフォルトの名無しさん:2007/11/14(水) 15:09:02
474「宿題を2chに丸投げしておk?」
教授「おk。公認するよん」


こんな感じか
488デフォルトの名無しさん:2007/11/14(水) 15:11:47
底辺大学の教授ってそんなもんなのか
489デフォルトの名無しさん:2007/11/14(水) 15:24:06
[1] 授業単元:情報技術
[2] 問題文:
「キーボードから以下の整数値を入力し,最大値を表示するプログラムを作成せよ

キーボードから入力する値
25 , 6 , 45, 18 , 57, 5

ヒント
for文を用いてキーボードから数値を読み込みながら,
if文を使って読み込んだ数値がそれまでに読み込んだ
数値の最大値maxよりも大きければその値を更新する

・・・・・・
for(i=?;i<=?;??){

scanf(?????);

if( ? > max) ???????;
}

printf(?????);
・・・・・・」
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:すみません、よく分かりません
 [3.3] 言語:C
[4] 期限:2007年11月16日12:00
[5] その他の制限:if文、for文あたりの簡単なレベルでお願いします

大学の授業の課題です。
低レベルかもしれませんが、さっぱり分からないので、よろしくお願いします。
490デフォルトの名無しさん:2007/11/14(水) 15:46:17
>>489
これが大学の授業か……
491デフォルトの名無しさん:2007/11/14(水) 15:49:14
>>486
>>487
いや、教授自身が2ちゃんねらーw
だからここに問題が漏れてる事も知ってる。というより本人が自分で回答とかしてるしw
492 ◆30lFlSJfAI :2007/11/14(水) 15:54:27
[1] 授業単元: 情報基礎
[2] 問題文:下記の問題のプログラミングを作成してください。
関数y=1/xをシンプソン法により、区間[1,2] で積分せよ。
このとき、区切りの数を変えることによって精度が変化することを確認せよ。
ただし、解析的な解はloge2=0.69314718である
[3] 環境
 OS: Windows
 言語: C言語のみ
[4] 期限: ([2007年11月21日まで]
[5] 制限は特にありません。

プログラミング初心者にもかかわらず大学でこのような課題を出されました。
来週までで申し訳ないのですが、よろしくお願いします。
493デフォルトの名無しさん:2007/11/14(水) 15:54:42
            _,,..r'''""~~`''ー-.、
            ,,.r,:-‐'''"""~~`ヽ、:;:;:\
           r"r          ゝ、:;:ヽ
   r‐-、   ,...,, |;;;;|       ,,.-‐-:、 ヾ;:;ゝ
   :i!  i!  |: : i! ヾ| r'"~~` :;: ::;",,-‐‐-  `r'^!
    !  i!.  |  ;| l|  ''"~~   、      i' |
     i! ヽ |  | |    ,.:'"   、ヽ、   !,ノ
    ゝ  `-!  :| i!  .:;: '~~ー~~'" ゙ヾ : : ::|
   r'"~`ヾ、   i! i!   ,,-ェェI二エフフ : : :::ノ~|`T <イエーイ、坂本直志君見てるー?
  ,.ゝ、  r'""`ヽ、i! `:、   ー - '" :: : :/ ,/
  !、  `ヽ、ー、   ヽ‐''"`ヾ、.....,,,,_,,,,.-‐'",..-'"
   | \ i:" )     |   ~`'''ー---―''"~
   ヽ `'"     ノ
494デフォルトの名無しさん:2007/11/14(水) 16:01:02
>>491
学籍番号は何番?
495デフォルトの名無しさん:2007/11/14(水) 16:09:34
教授職って何気に終身雇用なんだよね
同じ空気吸ってても一山いくらで売られていく子羊たちとの間には明らかな次元断層がある
496デフォルトの名無しさん:2007/11/14(水) 16:12:35
日本語でおk
497shin:2007/11/14(水) 16:15:56
>>457 >>458 >>459
ありがとうございました!!!
498デフォルトの名無しさん:2007/11/14(水) 16:18:09
>>474 課題1-1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define STUDENT_NUM_MAX 99999

int get_rand_score(void){
int i, score=0;
for(i=0;i<20;i++) score+=rand()%6;
return score;
}
int main(int argc, char *argv[]){
int i, index, student_num;
if(argc!=2){
fprintf(stderr, "\nUsage : %s <number>\n", argv[0]);
fprintf(stderr, "%5s : number (1-%d)\n", "", STUDENT_NUM_MAX);
return 1;
}
if(sscanf(argv[1], "%d%n", &student_num, &index)<1 || argv[1][index]!='\0'){
fprintf(stderr, "\nERROR : Invalid parameter. %s\n", argv[1]);
return 2;
}
if(student_num<1 || student_num>STUDENT_NUM_MAX){
fprintf(stderr, "\nERROR : Out of range (1-%d). %d\n", STUDENT_NUM_MAX, student_num);
return 3;
}
srand(time(NULL));
for(i=1;i<=student_num;i++) printf("C%05d %d\n", i, get_rand_score());
return 0;
}
499デフォルトの名無しさん:2007/11/14(水) 16:49:44
>>492
シンプソン公式がわかってれば単純なforループの問題でしかないから。
500デフォルトの名無し:2007/11/14(水) 17:13:23
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク): アスキーコードの値を対応する文字を組み合わせた
               一覧表を出力するプログラムを作成せよ。
               アスキーコードの範囲は「32」〜「126」、スペースには△を出力。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 今週中にお願いします。
[5] その他の制限: なし
501デフォルトの名無しさん:2007/11/14(水) 17:24:27
#include<stdio.h>
int main(void){
int i;
printf(" 32 △\n");
for(i=33;i<127;i++)
printf("%3d %c\n",i,i);
return 0;
}

502デフォルトの名無しさん:2007/11/14(水) 17:30:15
503デフォルトの名無しさん:2007/11/14(水) 19:03:55
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):stackプログラムを配列ではなく、連結リストを用いて、作成せよ。
配列で実現する時に比べて、その利点及び欠点をのべよ。    
stackプログラム:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5260.txt

[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio .NET 2005
 [3.3] 言語:c++
[4] 期限:2007年11月16日9:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで

よろしくおねがいします。
504デフォルトの名無しさん:2007/11/14(水) 19:14:44
>>492
#include <stdio.h>
#include <math.h>

double func1(double x)
{
  return 1.0/x;
}

double simpson(double a, double b, int n, double (*func)(double))
{
  double odd = 0, even = 0, h = (b - a)/n;
  int i;
  for(i = 1; i < n; i += 2)
    odd += func(a + i*h);
  for(i = 2; i < n; i += 2)
    even += func(a + i*h);
  return h/3.0*(func(a) + func(b) + 4*odd + 2*even);
}

int main(void)
{
  int n;
  for(n = 2; n <= 1024; n *= 2)
    printf("%4d : %.8f\n", n, simpson(1.0, 2.0, n, (double (*)(double))func1));
  return 0;
}
505デフォルトの名無しさん:2007/11/14(水) 20:17:36
506デフォルトの名無しさん:2007/11/14(水) 20:58:35
>>460
本当にありがとうございます。
助かりました。
507デフォルトの名無しさん:2007/11/14(水) 21:26:19
どなたか>>479を宜しくお願いします。
周りと比べてかなりレベルの低い問題だとは思いますが
まったくわからないのでお願いします。
508デフォルトの名無しさん:2007/11/14(水) 21:45:15
>>507
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cmath>
using namespace std;
struct succ{ int operator()(){ return _n++; } succ():_n(1){};int _n; };
struct print{
double qube( const int & n ) {
double x = 0, xn = 1;
while ( fabs( x-xn ) > 1.0e-8 ) { x = xn; xn = x-(x*x*x-n)/(3.0*x*x ); }
return xn;
}
void operator()( const int & n ){
cout<<setw(4)<<n<<" "<<setw(4)<<n*n<<" "<<setw(9)<<1.0/n<<" "<<setw(9)<<sqrt(n)<<" "<<setw(9)<<qube(n)<<endl; }
};

int main( int argc, char ** args ){
const int N = 25;
int v[N]={};
cout << setw(4) << "n"<<setw(4)<<"n^2"<<setw(9)<<"1/n"<<setw(9)<<"n^1/2"<<setw(9)<<"n^1/3"<<endl;
generate( v, v+N, succ());
for_each( v, v+N, print());
return 0;
}
509デフォルトの名無しさん:2007/11/14(水) 21:59:04
>>474 課題1-5
合格最低点を引数に取り、受験番号順に合格者リストを表示するプログラムを作りなさい。

void pass(int border)
{
char number[7];
int score;

while (scanf("%s %d", number, &score) == 2)
if (score >= border)
printf("%s\n", number);
}
510デフォルトの名無しさん:2007/11/14(水) 21:59:29
[1]プログラミング2
[2]
以下は、下記フォーマットにしたがってデータが収められている配列を表現するためのプログラムです。また、そのフォーマットを持つ配列を引数として、有効なレコード数(つまり配列の0番目の値)を返り値として返す関数
int list_len(const int * list)
を作成し、プログラムを完成させなさい。

フォーマット(score table)
配列の要素 内容(ただしi≧0)
0番目 有効なレコード数(K)
5*(i-1)+1番目 i番目の学生の英語の得点
5*(i-1)+2番目 i番目の学生の国語の得点
5*(i-1)+3番目 i番目の学生の数学の得点
5*(i-1)+4番目 i番目の学生の理科の得点
5*(i-1)+5番目 i番目の学生の社会の得点
511デフォルトの名無しさん:2007/11/14(水) 22:00:20
サンプルコード
#define MAX 101 /* 得点を入れる配列の最大値 */
#define REC 5 /* 1レコードの要素数 */
#define SUB 6 /* 科目名の文字数 */
char sub[REC][SUB]={"英語","国語","数学","理科","社会"};
/* 関数作成 */
int main() {
/* 変数は適切に宣言する */
int score[MAX]={3, /* レコード数 */
45, 60, 36, 72, 53, /* 1レコード目 */
87, 48, 77, 69, 91, /* 2レコード目 */
23, 54, 49, 58, 62}; /* 3レコード目 */
p=score+1;
size=list_len(score);
/* ここに書く */
}


実行例
+----++----++----++----++----+
|英語||国語||数学||理科||社会|
+----++----++----++----++----+
| 45|| 60|| 36|| 72|| 53|
+----++----++----++----++----+
| 87|| 48|| 77|| 69|| 91|
+----++----++----++----++----+
| 23|| 54|| 49|| 58|| 62|
+----++----++----++----++----+
512デフォルトの名無しさん:2007/11/14(水) 22:02:19
[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio 2005
 [3.3] 言語:C言語
[4] 期限:2007年11月17日まで
[5] その他の制限ポインタのあたりまで
513デフォルトの名無しさん:2007/11/14(水) 22:10:43
>>508
ありがとうございます。
本当に助かりました。
514デフォルトの名無しさん:2007/11/14(水) 22:28:24
>>431
どなたかお願いします。
515デフォルトの名無しさん:2007/11/14(水) 22:39:28
>>505
ありがとうございました。
516デフォルトの名無しさん:2007/11/14(水) 22:43:31
>>510
#include <stdio.h>

#define MAX 101 /* 得点を入れる配列の最大値 */
#define REC 5 /* 1レコードの要素数 */
#define SUB 6 /* 科目名の文字数 */

char sub[REC][SUB]={"英語","国語","数学","理科","社会"};

/* 関数作成 */
int list_len(const int * list);

int list_len(const int * list)
{
    return list[0];
}

int main()
{

    /* 変数は適切に宣言する */
    int size, x, y;
    int *p;

    int score[MAX]={3, /* レコード数 */
        45, 60, 36, 72, 53, /* 1レコード目 */
        87, 48, 77, 69, 91, /* 2レコード目 */
        23, 54, 49, 58, 62}; /* 3レコード目 */
517デフォルトの名無しさん:2007/11/14(水) 22:44:10
>>516
    p=score+1;
    size=list_len(score);

    /* ここに書く */

    for (x=0 ; x<REC ; x++)
    {
        printf("+----+");
    }
    printf("\n");
    for (x=0 ; x<REC ; x++)
    {
        printf("|%s|", sub[x]);
    }
    printf("\n");
    for (x=0 ; x<REC ; x++)
    {
        printf("+----+");
    }
    printf("\n");

    for (y=0 ; y<size ; y++)
    {
        for (x=0 ; x<REC ; x++)
        {
            printf("|%4d|", *p);
518デフォルトの名無しさん:2007/11/14(水) 22:44:41
>>517
            p++;
        }
        printf("\n");
        for (x=0 ; x<REC ; x++)
        {
            printf("+----+");
        }
        printf("\n");
    }
}
519デフォルトの名無しさん:2007/11/14(水) 22:52:25
>>431
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

void ten2two(int num)
{
    if (num==0)
        return;
    ten2two(num/2);
    if(num&1)
    {
        printf("1");
    }
    else
    {
        printf("0");
    }
}

int main()
{
    int num;

    scanf("%d", &num);

    ten2two(num);
    printf("\n");

    return 0;
}
520デフォルトの名無しさん:2007/11/14(水) 23:03:19
ただ .exe 立ち上げさせるだけのプログラム作りたいんだけど、何かいい方法ある?
521デフォルトの名無しさん:2007/11/14(水) 23:07:05
>>431
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>

int two2ten(char *buf)
{
    unsigned int num=0, i;

    for (i=0 ; i<strlen(buf) ; i++)
    {
        num*=2;
        if (buf[i]=='1')
        {
            num++;
        }
    }
    return num;
}

int main()
{
    char buf[100];

    scanf("%s", buf);

    printf("%d\n", two2ten(buf));

    return 0;
}
522デフォルトの名無しさん:2007/11/14(水) 23:07:31
>>520
ダブルクリックでおk
523デフォルトの名無しさん:2007/11/14(水) 23:08:50
>>522
いや、ごもっともなんだけどね。。。
どういう命令をすればやってくれるのかなって思って。
524デフォルトの名無しさん:2007/11/14(水) 23:12:27
>>520
#include <stdlib.h>

int main()
{
    system("%systemroot%\\NOTEPAD.EXE");
    return 0;
}
525デフォルトの名無しさん:2007/11/14(水) 23:12:47
>>523
system
526デフォルトの名無しさん:2007/11/14(水) 23:16:57
>>524, 525
ありがとお。こんなの知らなかったお。
527デフォルトの名無しさん:2007/11/14(水) 23:21:59
>>477
当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。

乱数は M系列乱数、ガウス分布化は局座標法を使用しています。
仕入れ部数を600部から1000部まで1ずつ変化させ、それぞれに
大して 6 万回の試行を行い、平均を算出しています。
さらに、ピークをわかりやすくするために隣接3区間の平均をもって
平準化しています。(が、はっきりしませんでした。)
結果だけのべると、800 より少し多いところ(830〜850) に極大があるようです。
実行すると仕入れ部数と利益が対になって出力されます。

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

(参考文献)C言語による最新アルゴリズム事典/奥村晴彦/技術評論社 1991 ISBN4874084141
528デフォルトの名無しさん:2007/11/14(水) 23:32:29
>>474 課題1-4
合格最低人数を引数にして合格最低点を求めるプログラムを作成しなさい。
但し、引数のとりかたは付録を参照すること。

void border(int count)
{
char number[7];
int score;

score = 101;
while (count > 0 && scanf("%s %d", number, &score) == 2)
count--;
printf("%d\n", score);
}
529デフォルトの名無しさん:2007/11/14(水) 23:33:08
>>479
#include <stdio.h>
#include <math.h>

int main()
{
    int n;

    printf(" n n*n 1/n sqrt(n) n∧(3/1)\n");
    for (n=1 ; n<=25 ; n++)
    {
        printf("%2d ",n);
        printf("%3d ",n*n);
        printf("%.5f ",(float)1/n);
        printf("%.5f ",sqrt((float)n));
        printf("%.5f ",powf((float)n, (float)1/3));
        printf("\n");
    }

    return 0;
}
530デフォルトの名無しさん:2007/11/15(木) 00:31:07
>>474 課題1-1
99999 以下の整数の引数をとり、受験番号を C00001 から順に C00002 のように引数の数だけ発生させ、
さらに各受験番号に対して乱数で発生させた点数を組み合わせたテストファイルを作るプログラムを作りなさい。
但し、点数は、 0 点から 5 点までを乱数で 20 回発生させ和を取ることで求めなさい。
引数のとりかた、乱数の発生の仕方は付録を参照のこと。

void list(int count)
{
int number, score, i;

for (number = 1; number <= count; number++) {
score = 0;
for (i = 0; i < 20; i++)
score += myrand();
printf("C%05d %d\n", number, score);
}
}
531デフォルトの名無しさん:2007/11/15(木) 01:24:00
>>479
当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。
C++ の書式設定を駆使しています。3 項演算子をネストさせています。
ので、宿題の答えとしては難ありですが、細かいところまで題意を満たす
ためには致し方なかったのでした。すみません。
詳しめの参考書を見てください。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5263.txt
532デフォルトの名無しさん:2007/11/15(木) 01:36:26
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

unsigned long long 型の x, y に対して
x^2 を y で割った余り計算しなさい。
ただし x^2 がオーバーフローする
可能性があることに注意すること。

[3] 環境
 [3.1] OS: Windows (Cygwin)
 [3.2] コンパイラ名とバージョン: gcc 4.0
 [3.3] 言語: どちらでも可
[4] 期限: 16日まで
[5] その他の制限: 特にありません

おねがいします
533デフォルトの名無しさん:2007/11/15(木) 01:57:19
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5264.txt
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5265.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 4.0
 [3.3] 言語: C
[4] 期限: 11/16 pm5:00
[5] その他の制限: 特にありません。

 よろしくお願いします。
534デフォルトの名無しさん:2007/11/15(木) 02:14:51
メイン関数において、2つの放物線
 y=ax2+bx+c
 y=px2+qx+r
の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。
関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし
てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場
合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が
有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数
から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個
存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。


よろしくお願いします。。
535デフォルトの名無しさん:2007/11/15(木) 03:48:36
移項して判別式で判定すりゃいいんだから、>>433のを適当に変えればいいだけだろ。
536デフォルトの名無しさん:2007/11/15(木) 03:54:15
>>534
あの、>>460 に問題がありましたら何がまずいのか教えてください。
537デフォルトの名無しさん:2007/11/15(木) 03:58:19
>>474 課題1-3
点数表を読み込み、点数の高い順に出力するプログラムを作成しなさい。
プログラムにおいて点数表の容量を制限してはいけない。
コンピュータのメモリが許す限り大きな点数表も表示できること。

int compare(const char *a, const char *b)
{
return atoi(b + 7) - atoi(a + 7);
}

void rank(void)
{
int size, count;
char *buffer;

fseek(stdin, 0L, SEEK_END);
size = 10;
count = ftell(stdin) / (size + 1);
buffer = (char *)calloc(count, size);
fseek(stdin, 0L, SEEK_SET);
fread(buffer, size, count, stdin);
qsort(buffer, count, size, compare);
fwrite(buffer, size, count, stdout);
free(buffer);
}
538デフォルトの名無しさん:2007/11/15(木) 07:02:14
>>532
#include <iostream>
using namespace std;
#define N 4294967295 // 2^32 - 1


unsigned int amari(unsigned int x, unsigned int y){
int k=x-y;
if(k<0)k=-k;
if(x>k)x=k;
k=N/x;
int p=x/k,l=x%k;
return ((x*k)%y)*p+((x*l)%y)%y;}

main(){
int x=97,y=123;
cout<<amari(x,y)<<" "<<(x*x)%y;
}
539538:2007/11/15(木) 07:28:16
バグがあったよ
540デフォルトの名無しさん:2007/11/15(木) 07:44:16
あと型が違うんじゃね?
541デフォルトの名無しさん:2007/11/15(木) 10:01:04
>>494
07KC189
542デフォルトの名無しさん:2007/11/15(木) 11:57:29
画像の指定範囲を決めてそこだけを出力するプログラム教えてください。
543デフォルトの名無しさん:2007/11/15(木) 12:21:54
[1] 授業単元: 確率論
[2] 問題文:
ここに書きました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5266.txt
図はこうです
http://toku.xdisc.net/cgi/up/vcc/nm13048.jpg.html
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月15日24:00
[5] その他の制限:
お願いします。
544538:2007/11/15(木) 13:48:07
#include <iostream>
using namespace std;
typedef unsigned long int Nsu;
Nsu N;

Nsu amari(Nsu x, Nsu y){
int a;
x%=y;
a=x-y;
if(a<0)a=-a; if(x>a)x=a;
a=N/x;
int p=x/a, q=x%a , r=0;
for(int i=0;i<p;i++){r+=(a*x)%y; r%=y;}
r+=(q*x)%y; r%=y;
return r;}

main(){
N=-1;
Nsu x,y;
x=(1<<16)-17;
y=(1<<14)-3;
cout<<amari(x,y)<<" "<<(x*x)%y;
}
545デフォルトの名無しさん:2007/11/15(木) 15:14:41
>>541
存在しない学籍書いてるんじゃねーよ
04kc〜06kcのどれかだろ? 2年〜4年のどれかなんだから
546デフォルトの名無しさん:2007/11/15(木) 16:45:36
>>543
とりあえず「重き」ってなんなんだ?
「重さ」だよな……
それともオレの知らない専門的な言い回しなのか……
547デフォルトの名無しさん:2007/11/15(木) 16:51:37
>>543
>>257 >>258 でダメな理由は?
548デフォルトの名無しさん:2007/11/15(木) 17:04:22
重みじゃないの?
549デフォルトの名無しさん:2007/11/15(木) 17:07:26
>>544
x%y が0の場合にゼロ除算
550デフォルトの名無し:2007/11/15(木) 17:27:31
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

文字列を正数に変換せよ。

入力が空の場合は処理を終了。「入力されていません」と表示。
入力の最大入力桁数は4バイトとし、桁あふれに対して「4文字で入力してください」と表示。
入力が半角数字以外に対しては「半角数字以外入力できません」と表示。
入力がゼロの場合は「0は入力できません」と表示。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4.0
 [3.3] 言語: C言語

[4] 期限: 今週中にお願いします。
[5] その他の制限: 特にありません
551デフォルトの名無しさん:2007/11/15(木) 17:37:23
>>550
突っ込むべき部分があるな
入力の最大入力桁数は四バイト? それとも四文字?
-129のような文字列は129に変換?
129を変換したあとの数字は、1290? それとも0129?
552デフォルトの名無しさん:2007/11/15(木) 18:56:30
>>550
#include<stdio.h>
#include<string.h>
#include<ctype.h>

int get_value(void){
char buf[4+1+1]; // 4文字オーバーチェック + 終端 \0
int i, value=0, buflen;

fgets(buf, sizeof(buf), stdin);
buflen=strlen(buf);

if(buf[buflen-1]=='\n') buf[--buflen]='\0';
if(buflen<=0){ puts("入力されていません"); return -1; }
if(buflen>4){ puts("4文字以内で入力してください"); return -1; }
for(i=0;buf[i];i++){
if(!isdigit(buf[i])){ puts("半角数字以外入力できません"); return -1; }
value=value*10+buf[i]-'0';
}
if(value==0) puts("0は入力できません");

return value;
}

int main(void){
int value;

value=get_value();
if(value>0) printf("\n%d\n", value);

return 0;
}
553デフォルトの名無しさん:2007/11/15(木) 19:41:05
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5263.txt
   サンプルプログラムは、窓口が1個で,行列が窓口の前にできる場合に,時間と共に窓口の前にできる行列の様子を調べるものである.
(1)サンプルプログラム内の乱数処理を   srand関数とrand関数を使用するように書き換えなさい。
(2)参考プログラムを元に,パラメータs, q, aを構造体のメンバ   として扱うプログラムBに変更しなさい.
(3)作成したプログラムを変更し,窓口が2個の場合にも(すなわち1個または2個の場合に)対応できるようにしなさい。
このとき,窓口の個数(1または2)もパラメータLやM,  シミュレーション時間と同様に入力して指定できるようにしなさい.
なお,新しく到着した客は,最も短い行列(待っている人が少ない窓口)に並ぶものとする.  
全ての窓口の行列が同じ長さの場合には,一様な確率  (窓口が2個の場合は1/2の確率)で並ぶ窓口を決定するものとする.
(4)窓口が3個以上にも対応できるようにしなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: C
[4] 期限: 明日までです…
[5] その他の制限: 特に無いと思います
554デフォルトの名無しさん:2007/11/15(木) 20:10:23
>>547

実際はね、重きじゃなくて入力データなんです。
入力データ(配列でいうとdata[50][5])が移動間を動く感じなんですけど
各状態にデータがあって、その入力データを各状態のデータによって
計算して出された値を各移動確率とかけるというわけなんですけど。
で書いてくださったプログラムにおいて、
for(cnt=0;cnt<50;cnt++){それを50回
 for(i=0;i<7;i++)cal_next_gs(list[i]);は7つの状態間で1回の移動につき確率計算
}
ってのはわかるんです。1次元配列として引数として渡せば
できるのかなーと今思いました。
for(cnt=0;cnt<50;cnt++){それを50回
 for(i=0;i<7;i++)cal_next_gs(list[i],data[cnt]);は7つの状態間で1回の移動につき確率計算
}

void cal_next_gs(struct gstate *gs,float data[5])
{
//計算して移動確率を計算
}
でいけそうな感じがします。
555デフォルトの名無しさん:2007/11/15(木) 21:27:17
>>527
ありがとうございました。
556デフォルトの名無しさん:2007/11/15(木) 21:38:48
>>554
何をいいたいのか、いまいち分からないんだが、
どんな入力に対してどんな出力が欲しいの?

電気回路上の電流のシミュレーション?
557デフォルトの名無しさん:2007/11/15(木) 21:58:18
入力に対して隠れマルコフモデル(HMM)を使って確率を出すんですけど、
この例では3状態のHMMと2状態のHMMを使って最終的にendにたどりつくとこの
状態の確率が出力値となるんです。
で1つの移動に対して入力1フレームを正規分布によって評価し確率を出す。
その正規分布をHMMで評価するんです。
そのHMMには平均分散、移動確率とあるんですけど、
平均分散を正規分布で用いて確率をだして、移動確率をかけて
最終的な移動の確率となるんです。

前につくってもらったのが移動確率でのみの計算でした

558デフォルトの名無しさん:2007/11/15(木) 22:01:52
神経衰弱を行うゲームを作成すること。
ただし、カードは52枚全て使用し、絵柄の
区別は無いものとする。

このプログラムをお願いします。(^_^)
559デフォルトの名無しさん:2007/11/15(木) 22:02:55
すみません、どなたか>>489をお願いします。
自分でもあつかましいと承知しているのですが、
どうにも分からないので・・・。
コンパイラ名はVS2005のようです。
よろしくお願いします。
560デフォルトの名無しさん:2007/11/15(木) 22:12:59
557ですけど
頼んだのは移動してくる確率が2つだったらグリッドで計算できたんですけど
3つの場合どうすればいいのかわからなくて。
しかも下のやつも計算しなくてはならなくて。
なので質問させていただきました
561デフォルトの名無しさん:2007/11/15(木) 22:30:13
>>543
>この(startから状態1への移動確率)X(重き)と
>(状態1の状態確率)X(状態1から状態1への移動確率)X(重き)と、(状態11の状態確率)X(状態11
>から状態1への移動確率)X(重き)の和が状態1の状態確率となります。
状態1ってループしてるけど単純にこれでいいの?
(状態1の状態確率)X(状態1から状態1への移動確率)X(状態1から状態1への移動確率)X(重き)
...
とかは考えなくてもよし?
562デフォルトの名無しさん:2007/11/15(木) 22:36:35
>>543
>>246 の問題だと矢印にくっつく数値(状態遷移確率)が固定だったのを
時間(移動回数)によって矢印にくっつく数値(状態遷移確率)を変化させたいと言う事でいい?
563デフォルトの名無しさん:2007/11/15(木) 22:40:42
>>561
考えなくていいです。
>>562
そうです。
実際は入力に対して各HMMの1つの状態の平均分散から
正規分布により出力確率を出してそのHMMから移動確率を出して
確率X移動確率なんですけど
簡単のために、出力確率を重きとしてるわけです。
564デフォルトの名無しさん:2007/11/15(木) 22:43:05
移動確率を出す関数だけ。

enum states { START, FIRST, SECON, THIRD, TENTH, ELEVE, E_N_D };
enum states movProbMap( enum states from, enum states to )
{
return from == START ? (to == FIRST ? 0.5 : to == TENTH ? 0.5 : 0.0) :
from == FIRST ? (to == FIRST ? 0.6 : to == SECON ? 0.3 : to == ELEVE ? 0.1 : 0.0) :
from == SECON ? (to == SECON ? 0.7 : to == THIRD ? 0.3 : 0.0) :
from == THIRD ? (to == THIRD ? 0.8 : to == E_N_D ? 0.2 : 0.0) :
from == TENTH ? (to == TENTH ? 0.6 : to == ELEVE ? 0.4 : 0.0) :
from == ELEVE ? (to == ELEVE ? 0.7 : to == FIRST ? 0.2 : to == E_N_D ? 0.1 : 0.0) :
0.0;
}
565デフォルトの名無しさん:2007/11/15(木) 22:44:10
激しく無意味だな。スマン無視してくれ。
566デフォルトの名無しさん:2007/11/15(木) 22:47:07
>>564
これは一体何でしょう?
実数を返したいんじゃないの???
567デフォルトの名無しさん:2007/11/15(木) 22:55:57
enum states -> double
で。
568デフォルトの名無しさん:2007/11/15(木) 23:10:49
>>543
使い方は data.txt をリダイレクトするだけ
lzh 内のファイル名間違えたけど気にしない
ans478 < data.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5268.lzh
569デフォルトの名無しさん:2007/11/15(木) 23:32:51
>>568
ありがたいんですけど
これちょっと使いかたわからなくて。
gcc ans478.cして実行のときになにか入力しないといけないんですか?
570デフォルトの名無しさん:2007/11/15(木) 23:35:27
本来なら
ans478
と打って実行するところを
ans478 < data.txt
のようにしてdata.txtを標準入力にリダイレクト
571デフォルトの名無しさん:2007/11/15(木) 23:36:42
>>489
#include<stdio.h>

int main(void){
int i, num, max=0;

for(i=20071114;i<=20071114+6-1;i++){
scanf("%d", &num);
if(num>max) max=num;
}
printf("%d\n", max);

return 0;
}
572デフォルトの名無しさん:2007/11/15(木) 23:39:49
>>570
できました。。。
さっきできなかったのに。
ありがとうございます。

自分で作りなおしてから
できなかったらこれも試してみます
573デフォルトの名無しさん:2007/11/16(金) 02:03:12
>>553
当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。
(1), (2), (4) について作成しました。(4) が完成すれば、(3) はそれに含まれるからです。
なお、(4) では、当方の処理系では rand()/srand() の性能が悪く期待した結果がでなかったので、
M系列乱数を使用しました。
rand() のかわりに xrandom(), srand() のかわりに init_xrandom() を使用していますので、
必要ならば、その部分を書き換えてください。

(1) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5269.txt
(2) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5270.txt
(4) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5272.txt
574デフォルトの名無しさん:2007/11/16(金) 03:04:29
[1] 授業単元:統計学
[2] 問題文:
対数の足し算をするプログラムをつくれ。ただし計算
で用いるのはlog(x)=-1.966113,log(y)=-103.23,log(z)=-80.98,log(w)=0を用いよ。
(1)log(X+Y)
(2)log(X+Y+Z)
(3)log(W+X+Y+Z)

x=0.14 x=0.000000000000000000422
y=0.000000000000000023134 w=1ですが、w,x,y,z,を足してlogかけた値が
(4)になります。
しかしこの問題ではlogの値をexpかけずに計算せよ。
対数の足し算は以下を用いよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5273.txt
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月16日24:00
[5] その他の制限:
お願いします。
575デフォルトの名無しさん:2007/11/16(金) 08:10:50
>>573
ありがとうございます
576デフォルトの名無しさん:2007/11/16(金) 08:18:59
>>571
int main(void) は間違い。
577デフォルトの名無しさん:2007/11/16(金) 08:30:00
>>576
何がどう間違いなのか説明してみろカス
逃げるなよ
578デフォルトの名無しさん:2007/11/16(金) 08:37:36
まさか、そんなところに食いつく奴が居るとは思わなかった。
579デフォルトの名無しさん:2007/11/16(金) 09:41:40
どうなんだ?
580デフォルトの名無しさん:2007/11/16(金) 10:04:19
ISO9899:1999でも読めば?
581デフォルトの名無しさん:2007/11/16(金) 10:09:26
他のスレでやれ
582デフォルトの名無しさん:2007/11/16(金) 10:11:39
>576は思い込み。
>577はスレ違い。
583デフォルトの名無しさん:2007/11/16(金) 10:14:53
>>577
古いCではvoid型ってのが無い。
void型が登場するのは比較的新しいCから

とかか?



オレとしては
>for(i=20071114;i<=20071114+6-1;i++){
の部分が非常に素晴らしい実装方法だと思うが
584デフォルトの名無しさん:2007/11/16(金) 11:03:15
[1] 授業単元: C言語演習W〜構造体の理解〜
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5274.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: GCC
 [3.3] 言語: C言語
[4] 期限: 11/19(月) 5:00まで
[5] その他の制限:問題文に細かい仕様があるので準じていれば問題ありません。

飛行機の発券データを作成するプログラムです。よろしくお願いします。
585デフォルトの名無しさん:2007/11/16(金) 12:22:41
>>571
ありがとうございました。
これで単位を落とさずに済みそうです。
586デフォルトの名無しさん:2007/11/16(金) 12:40:47
営業マンのトップと平が同じ給料でやる気するかよw

仕事だからな、完全実力主義の
格差は当たり前
587デフォルトの名無しさん:2007/11/16(金) 15:05:45
>>584
表示例のように、数字を全角で表示してませんがそれ以外は使用に準じてるかな?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5275.c
588デフォルトの名無しさん:2007/11/16(金) 15:24:44
[1] 授業単元: 専門演習
[2] 問題文(含コード&リンク):
数学の点数を読んで、クラスの平均点と最低点を求めるプログラムを書きなさい
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: ?
 [3.3] 言語: C#(C、C++じゃなくて申し訳ないです)
[4] 期限: 11/23まで
[5] その他の制限:できるだけ簡易なプログラムで。

よろしくお願いいたします。
589デフォルトの名無しさん:2007/11/16(金) 17:25:22
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): モンテカルロ法を用いπの近似値を求める。正方形の面積は1、その中の四分円の面積はπ/4。
この正方形内に入る大量の点P(x,y)を生成する。これらの点が、四分円に入るか入らないかで分け、最終的に入ったものと入
らないものの個数の比を求める。
[3] 環境
 [3.1] OS: Windows
 
 [3.3] 言語: C/C++
[4] 期限: 2007年11月24日
[5] その他の制限: なし
590デフォルトの名無しさん:2007/11/16(金) 17:47:54
ぱそこんの使い方がわかりません
2007/11/16まで
591デフォルトの名無しさん:2007/11/16(金) 18:54:48
[1] 授業単元:プログラミング、関数基礎
[2] 問題文(含コード&リンク):
メイン関数において、2つの放物線
 y=ax2+bx+c
 y=px2+qx+r
の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。
関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし
てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場
合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が
有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数
から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個
存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限: 2007年11月18日
[5] その他の制限:C言語の基礎しか習っていません。
どなたかよろしくお願いします。
592デフォルトの名無しさん:2007/11/16(金) 19:21:23
>>587
早い!!
自分もC言語解説サイト見ながら作っていたのですが、最終的にはコンパイラ
通らなくて、どこが間違えているのかも分からなくて困っていました。

>>587とても参考になります。分かりやすく書いていただき感謝しています。

半角・全角表示については提出の際に聞いてみて、必要に応じて自分で修正しますので大丈夫です。
593デフォルトの名無しさん:2007/11/16(金) 19:39:35
>>474
>なお、この問題は早々に 2ch に投稿され、既に解答も寄せられています。
>同じ掲示板に何度も同じ問題を投稿するのはマナー違反ですので、
>もう新たに 2ch にこの問題を投稿しないようにして下さい。

ttp://edu.net.c.dendai.ac.jp/ad/1/2007/kadai.html
594デフォルトの名無しさん:2007/11/16(金) 19:49:20
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
@ 3×10の2次元配列を用意する。
A キーボードから任意の文字列を3つ入力し、配列に入れる。
B その入力データーから文字tがあるかどうかを判定し、見つけた場合、下図のように
   その2次元配列の場所をすべて画面に表示し、見つけた個数も表示する。
  入力データ;Computer、Data、Internet
  
  図 [0]行目の文字列を入力_>Computer
[1]行目の文字列を入力_>Data
[2]行目の文字列を入力_>Internet

[0]行目[5]列目に文字tを発見
    [1]行目[2]列目に文字tを発見
    [2]行目[2]列目に文字tを発見
    [2]行目[7]列目に文字tを発見
    
    文字tを全部で4文字見つけました  
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語: C
[4] 期限: 2007年11月19日
[5] その他の制限: 初心者ですので、簡単なプログラムでお願いします。

595デフォルトの名無しさん:2007/11/16(金) 19:50:19
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
@ 3×10の2次元配列を用意する。
A キーボードから任意の文字列を3つ入力し、配列に入れる。
B その入力データーから文字tがあるかどうかを判定し、見つけた場合、下図のように
   その2次元配列の場所をすべて画面に表示し、見つけた個数も表示する。
  入力データ;Computer、Data、Internet
    図
    [0]行目の文字列を入力_>Computer
[1]行目の文字列を入力_>Data
[2]行目の文字列を入力_>Internet

[0]行目[5]列目に文字tを発見
    [1]行目[2]列目に文字tを発見
    [2]行目[2]列目に文字tを発見
    [2]行目[7]列目に文字tを発見
    
    文字tを全部で4文字見つけました  
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語: C
[4] 期限: 2007年11月19日
[5] その他の制限: 初心者ですので、簡単なプログラムでお願いします。

596デフォルトの名無しさん:2007/11/16(金) 19:52:16
すみません595ですが図のところがずれました
597デフォルトの名無しさん:2007/11/16(金) 20:31:28
きみの頭もか?
598デフォルトの名無しさん:2007/11/16(金) 20:58:12
べ、べつにうまくなんてないんだからね!
599デフォルトの名無しさん:2007/11/16(金) 21:10:07
[1] 授業単元:C入門
[2] 問題文
配列 (の先頭アドレス) a とそのサイズ n を受け取り, 要素を逆順に並び換える (a[0]=1, a[1]=9, a[2]=2, a[3]=6 を a[0]=6, a[1]=2, a[2]=9, a[3]=1 にする) 関数 array_reverse(int *a, int n) を作成せよ
また、次のようにデータ 0 をターミネータとするものに書き換えよ.

例えば, 配列 a に 4 個のデータ 10, 11, 12, 13 を記憶する場合には, a[0]=10, a[1]=11, a[2]=12, a[3]=13, a[4]=0 のように記憶する (0 がデータの終わりを表す). データ数を別途他の変数で記憶することはしない.
void array_input(int *a) … データ数は入力しない. 最初から0番目のデータ, 1番目のデータ, …, を順に入力し, 0 を入力した時点で終了するようにする. 引数は配列 (の先頭アドレス) a だけで, データ数は特にセットしない.
void array_print(int *a), void array_reverse(int *a) … 配列 (の先頭アドレス) a のみ渡し, データ数は渡さない.
main は次のようになる.
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語: C
[4] 期限: 2007年11月19日
[5] その他の制限: ポインタを用いる
600デフォルトの名無しさん:2007/11/16(金) 21:11:18
>>599の問題文続き
int main(void)
{
int a[ARRAY_MAX];

array_input(a);
array_print(a);
array_reverse(a);
array_print(a);

return 0;
}
601デフォルトの名無しさん:2007/11/16(金) 21:11:21
C++初心者なのですが

class Foo {

  void stop(int input[]);
  void walk(int input[]);

  void (*po[2])(int input[]) = {stop,walk};

  〜〜

}

において、関数ポインタのところで "{"の前に予期せぬトークンがあるとエラー吐いてしまいます。
C++、というかクラス内でのこういった関数ポインタの定義はまちがっているのでしょうか?

602デフォルトの名無しさん:2007/11/16(金) 21:29:43
>>599
void array_reverse(int *a, int n)
{
int *p = a + n - 1, temp;
while(a < p) {
temp = *a;
*a++ = *p;
*p-- = temp;
}
}
void array_reverse(int *a)
{
int *p = a, temp;
while(*p) p++;
while(a < --p) {
temp = *a;
*a++ = *p;
*p = temp;
}
}
void array_input(int *a)
{
do {
scanf("%d", a);
}while(*a++);
}
void array_printf(int *a)
{
while(*a) printf("%d ", *a++);
putchar('\n');
}
603デフォルトの名無しさん:2007/11/16(金) 21:41:43
>>592
エラー文をここに書いたらよかったのに。
まぁ、見たら大体どんなエラーか想像もつくし。
604デフォルトの名無しさん:2007/11/16(金) 21:54:45
>>602
ありがとうございます。array_inputのところ、自分が書いたのは
void array_input(int *a)
{
int i;
for (i=0;a[i]!=0;i++) {
printf("%d 番目の要素 = ", i);
scanf("%d", &a[i]);
}
}
なのですが、これでは何故か0で止まらないのです。
ご教授いただければありがたいです
605デフォルトの名無しさん:2007/11/16(金) 21:56:57
0入れてからi++してるから
606デフォルトの名無しさん:2007/11/16(金) 21:57:19
そりゃ数値を入れた直後にインクリメントして、何も入ってないところで終了条件チェックしてるからそうなる。
607デフォルトの名無しさん:2007/11/16(金) 22:02:28
>>605-606
なるほど。ありがとうございます!
608デフォルトの名無しさん:2007/11/16(金) 22:28:27
>>591
>>460 が回答のつもりですが、問題がありましたら何がまずいのか教えてください。



609デフォルトの名無しさん:2007/11/16(金) 22:46:52
>>599です。たびたびすんません
void array_reverse(int *a)
{
int i,temp[ARRAY_MAX],d;
for (d=0,i=;i>=0;d++, i--)
{
temp[d] = a[i];
}
for(i=0;i<;i++)
{
a[i]=temp[i];
}
}
要素数が引き継げないとき、最初のfor文のiの値には何を入れればよいでしょうか。
610デフォルトの名無しさん:2007/11/16(金) 22:48:55
番兵
611デフォルトの名無しさん:2007/11/16(金) 22:58:38
ググってみましたが、0のことでしょうか
612デフォルトの名無しさん:2007/11/16(金) 23:00:32
>>543,>>563について宿題を解いてもらったんですけど
その宿題を今利用してプログラムを作ってるんですけど
正規分布の結果を実際はlogで計算し、移動確率もlogで計算するんです。
>>257のプログラムは現在の状態確率に移動確率をかけ、その移動先のsp2に
代入し、一回ループ終え、sp2をspにいれ現在の状態確率とするだとおもうんですけど
対数で計算する場合、+=でどんどん足していくってことはできないんです。
2つずつ計算していかないといけないんです。
sp*gs->???_pのところはlog(sp)+log(gs->???_P)で計算できるんですが
問題はsp2でたまるところなんです。ここはどうすべきでしょうか?

613デフォルトの名無しさん:2007/11/16(金) 23:34:20
>>588
眠い中、考えずに作ったらこうなった。途中で簡単な方法に気付いたが眠いので後は白根山
例外処理をしないで、0〜100以外の整数が入力されたら終わり見たいにすればもっと簡単になる。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5277.txt
614デフォルトの名無しさん:2007/11/17(土) 00:13:27
π≒4煤o(-1)のn乗/(2n+1)}*{(1/2)の2n+1乗+(1/3)の2n+1}を用いて小数第8位まで正しい値(3.14159265)を出力し、そのπの値を用いて入力された数値εに対して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。|(πの2乗/6)-1/kの2乗|<ε
最初のシグマはn=0から100で2個目はk=1からNまでです。関数は使わないで基本的なfor,if,while,dowhileなどだけでお願いします。見にくくてすいません。。。
615デフォルトの名無しさん:2007/11/17(土) 00:16:17
質問テンプレ無視すなよ。
616614:2007/11/17(土) 00:21:21
分からないなら答えなくて結構ですよw
他の方お願いしますね
617デフォルトの名無しさん:2007/11/17(土) 00:27:46
>>614
>>1 のテンプレ読め
618デフォルトの名無しさん:2007/11/17(土) 00:29:46
分らないじゃなくルールを守らないと答えがきませんよって事っすよw
619デフォルトの名無しさん:2007/11/17(土) 00:42:18
>>616
のせられませんよ
620614:2007/11/17(土) 00:42:52
ここのヤツ答える気ねーのかよ。
テンプレなんてふぉうでもいいやねーかよ。
もういい、自分でやるから。
621デフォルトの名無しさん:2007/11/17(土) 00:45:04
そもそも自分で考えれる
もしくはどこかにのってるような質問を
最初からすなと。
622デフォルトの名無しさん:2007/11/17(土) 00:46:27
>>620
何で喧嘩腰の奴の宿題やらなきゃならんのだ。
623デフォルトの名無しさん:2007/11/17(土) 00:56:57
614の書いたソースは間違いなく誰もが きたねえな と思うだろう
624デフォルトの名無しさん:2007/11/17(土) 00:59:20
はっきり言ってCで数値計算やりたがる奴は変態だと思う。
625380:2007/11/17(土) 01:00:44
>>614のはやってやらなくていいんで、
>>380をお願いします。
626デフォルトの名無しさん:2007/11/17(土) 01:00:53
ruby

python

lisp

あたりでやるのがベストだとおも(ry

ただ、、、この中でベストを決めるのは難しい。
627デフォルトの名無しさん:2007/11/17(土) 01:02:30
>>620
疲れてるだけなんだよな、やさしい俺はプログラム作ってやったぜ?
ほらよ
つ「http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5279.txt
628デフォルトの名無しさん:2007/11/17(土) 01:04:59
>>627
俺はそのプログラムで一瞬に頭が冷却されたw。
すごい、すごすぎるw。
629612:2007/11/17(土) 01:05:38
おれ変体だよ。。。

gs->next_gs->sp2 と(spp + gs->next_p)を比較していって
違うとこにいれて
またgs->next_gs->sp2にその値でもいれようかな。。。

しかしこの計算あってるかどうか
最終的な値をだしてからじゃないとわからないから困る。
630デフォルトの名無しさん:2007/11/17(土) 01:08:19
>>627
おまえ、やさしいな。基本に忠実だしな。
631デフォルトの名無しさん:2007/11/17(土) 01:10:07
>>627
わざわざ実行できる様にしてある優しさに泣けてくる。
632デフォルトの名無しさん:2007/11/17(土) 01:21:45
#include <stdio.h>
void main(){
for(;;){
printf("( ´ω`)<まあ、頭冷やしてこいや)" );
}
}


これくらいしないと足りないかもしれない。
633デフォルトの名無しさん:2007/11/17(土) 01:22:15
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):度数分布の作成
20人分の身長データのリストを入れた下記の配列dataがある(単位はメートル)。これを元に
平均身長と1.3m〜2.0mの範囲で10cm 刻みの度数分布を表示するプログラムを作りなさい。
.....
double data[ ]={
1.73, 1.68, 1.89, 1.65, 1.60, 1.75, 1.80, 1.75, 1.83, 1.90,
1.68, 1.77, 1.62, 1.58, 1.53, 1.49, 1.80, 1.72, 1.70, 1.69
};

int main(void)
{
.....
[期待される実行結果]
平均身長1.71m
1.3m :
1.4m :*
1.5m :**
1.6m :******
1.7m :******
1.8m :****
1.9m :*
2.0m :

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月19日
[5] その他の制限:Cを勉強し始めてまだ1か月なのでできるだけ
         簡単なプログラムでお願いします。
634デフォルトの名無しさん:2007/11/17(土) 01:27:06
>>632
やべー腹痛い。
そんなに回さないと駄目か。
せめてfor(;;)じゃなくてfor(i=0;i<101;i++)にしてあげようよ。
635デフォルトの名無しさん:2007/11/17(土) 01:31:01
>>634
駄目だ笑いすぎて間違えた、なんで101にしてるんだろ俺。
636625:2007/11/17(土) 01:38:51
>>614と同じ人だろ?>380=>614
いちいち「>614のはやってやらなくていいんで」なんて書かなければいいのに。
どうせ、プログラム作ってやっても礼のひとつも無い。
最悪「遅せ〜よ糞」とか返ってきそうだし、>>380やるのやめとこ。
それに>614 >620の日本語おかしいよ?機械言語やるより日本語やった方がよくない?
637デフォルトの名無しさん:2007/11/17(土) 01:43:12
omaemona-
638380:2007/11/17(土) 01:50:10
>>636
いや614は他人
「>614のはやってやらなくていいんで」とか余計なこと書いたのは悪かった。
人に宿題頼んどいて「遅せ〜よ糞」とか言うヤツいないでしょ普通。
お願いします。
639デフォルトの名無しさん:2007/11/17(土) 01:59:19
>>614
2個目ちっとも収束しなくてワロタ
640デフォルトの名無しさん:2007/11/17(土) 02:00:28
ニコニコ動画の時報ウゼー
641デフォルトの名無しさん:2007/11/17(土) 02:48:52
>>636
>>機械言語やるより日本語やった方がよくない?
かなり笑った。
642デフォルトの名無しさん:2007/11/17(土) 02:55:26
このすれはなんぞ
643デフォルトの名無しさん:2007/11/17(土) 03:05:41
初心者が初心者に代わって宿題をやるスレです
644デフォルトの名無しさん:2007/11/17(土) 03:08:09
645デフォルトの名無しさん:2007/11/17(土) 06:46:15
>>633
当方の環境は WindowsXP / 処理系は bcc5.5 です。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5282.txt
646デフォルトの名無しさん:2007/11/17(土) 06:54:10
>>644
nice boat.
647デフォルトの名無しさん:2007/11/17(土) 09:33:53
>>380
当方の環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
当方で参照した参考書はプログラムリストに記しています。
問題では「Newton法では収束しない場合がある」とのことですが、当方の参考書では
その場合の対処法が記してありましたので、それを採用して収束させています。
なお、収束しないというのは、導出した近似解が問題のXの定義域 -1<=X<=1 に含まれない
場合だと思います。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5283.txt
648601:2007/11/17(土) 09:35:36
自己解決しました

宣言時じゃなくて定義時メンバ関数内で

void (Foo::*po[])(int a[]) = {&Foo::hoge,&Foo::hogehoge};

のようにすれば、いけました
まだクラスのルールがよく理解できていないようです
649デフォルトの名無しさん:2007/11/17(土) 10:35:03
スレ違いに気がつけよ
650デフォルトの名無しさん:2007/11/17(土) 12:58:32
まともなC++専用の質問スレが見当たらなかったので・・
651デフォルトの名無しさん:2007/11/17(土) 13:08:38
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
次のような二人で行うゲームを考える:

 縦が n, 横が m の板チョコがある.
 プレイヤーはこれを縦か横かどちらかに割り,
 片方を取り去る.

 プレイヤーは交互にこの操作を繰り返すが,
 割れなくなったほうが負けとする.

例:
 3×2 のとき.プレイヤー1が 1×2 と 2×2 に割って 2×2 を取り去る.
 残った 1×2 をプレイヤー2が 1×1 と 1×1 に割って 1×1 を取り去る.
 残った 1×1 をプレイヤー1は割れないので,プレイヤー2の勝ち.

問1.n, m が与えられたとき,先手勝ちか後手勝ちかを表示せよ.
   ただし n, m は高々2000 とする.

問2.コンピュータと対戦できるようにせよ.
   ただしコンピュータは最善を尽くすものとする.

[3] 環境 : OS コンパイラ問わず,C/C++どちらでも良し
[4] 期限: 11/20 まで.
[5] その他の制限:特になし
652デフォルトの名無しさん:2007/11/17(土) 15:11:38
>>651
> ただしコンピュータは最善を尽くすものとする

最善ったって色々あるんだぜ、
1 早く試合を終了させる
2 試合で相手に勝つ
3 試合で早く相手に勝つ
4 …
5 …

みたいな目標があって、初めて最適化できるんだが、
実際はどんな目標で最適化されたコンピュータなんだ?
653デフォルトの名無しさん:2007/11/17(土) 15:18:00
>>650
【初心者歓迎】C/C++室 Ver.44【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1194016813/l50
654デフォルトの名無しさん:2007/11/17(土) 15:20:00
>>653
650は「まともじゃない」と判断したんじゃね?w
655デフォルトの名無しさん:2007/11/17(土) 15:37:59
[1] 授業単元: プログラミング言語・配列
[2] 問題文(含コード&リンク): 文字の出現回数を数える
標準入力から入力された 'a' から 'z' までの文字の出現回数を数えるプログラムを作成せよ。
各文字の出現回数は、大きさ 26 の配列 kaisuu に格納するものとする。初期化を忘れずに!
また、'a' から 'z' までの小文字の英字以外はカウントせず、無視するものとする。

以下のプログラムを参考にせよ。
char c;
...
while ( (c=getchar()) != '\n' ){ /* リターンが押されるまで読み込む */
/* ここに 'a' から 'z' のどれが出現したかを数えるプログラムを書くこと */
}
/* どの文字が何個あったかを出力する */
ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。
例えば、 c に 'a' が入っていれば、 c - 'a' は、0 になる。

[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
[4] 期限: 11月19日
[5] その他の制限: 特になし

>352と同じ問題です。
解答が出ていないようなので再度質問させていただきました。
すみませんがよろしくお願いします。
656デフォルトの名無しさん:2007/11/17(土) 15:48:57
【質問テンプレ】
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): x[a][b]の内容をy[a][b]に移す
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: c
[4] 期限: 2007年11月19日
[5] その他の制限: 特になし
よろしくお願いします
657651:2007/11/17(土) 15:54:57
>>652
特に指定はありませんが、「勝てるときには絶対勝つ」くらいでよいと思います。
658デフォルトの名無しさん:2007/11/17(土) 15:55:45
>>651
今応えられる環境じゃないのでヒントだけ

問1.
if(n==m){
//後手の勝ち
}else{
//先手の勝ち
}

問2.
常にn=mの状態で相手に渡せば絶対に負けません。

たぶん・・・
659デフォルトの名無しさん:2007/11/17(土) 16:20:25
1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
  以下の4点(x,y)のとり得る近似直線y=ax+bの
  aとbを求めなさい。但しa,bは小数点以下3桁までで、
  4桁目を四捨五入して求めること。
  (16, 0.987)
  (32, 1.879)
  (48, 2.980)
  (64, 3.799)

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: できるだけ早く
[5] その他の制限: 特になし

よろしくお願いいたします。
660デフォルトの名無しさん:2007/11/17(土) 16:29:07
>>651
#include<stdio.h>
int main(void){
int m=2000,n=2000,o,p,i;
printf("1 : プレイヤー  対 コンピュータ\n2 : コンピュータ 対 プレイヤー\n3 : プレイヤー 1 対 プレイヤー 2\n");
scanf("%d",&o);
o&=3;
for(p=1;;p^=3){
printf("\n%d x %d\n\n",m,n);
if(m*n<2)break;
if(p==1)printf("先手の番です\n");
else printf("後手の番です\n");
if(o&p){
do{
printf("縦分割なら正数、横分割なら負数で入力してください ");
scanf("%d",&i);
}while(i>0&&i>=m || i<0&&-i>=n || i==0);
if(i>0)m-=i;
else n+=i;
}else{
if(m>n)m=n;
else if(m<n)n=m;
else m=1;
}
}
if(p==1)printf("先手の負け\n");
else printf("後手の負け\n");
return 0;
}
661デフォルトの名無しさん:2007/11/17(土) 16:37:39
>>651
与えられた初期のチョコの
・m×nが偶なら先攻の負け
・m×nが奇なら先攻の勝ち
となる。

ということで、プレイヤーは自分が取り除いた後のm'×n'が偶になるように保てば負けない

なぜかというと、
・1×1が与えられた時、先攻が負け(自明)
・1×nが与えられた時、先攻が勝つ
という理由から。
662デフォルトの名無しさん:2007/11/17(土) 17:33:16
>>655ホイ
#include <stdio.h>
#include <string.h>

static char alphastr[] = "abcdefghijklmnopqrstuvwxyz";
static int kaisuu[sizeof(alphastr)-1];

int
main(void)
{
char c, *p;
int i;

memset(kaisuu, 0, sizeof(kaisuu));

while ((c = getchar()) != '\n') {
if ((p = strchr(alphastr, c)) != NULL) {
kaisuu[p-alphastr]++;
}
}
for (i = 0; i < sizeof(alphastr)-1; i++) {
if (kaisuu[i] != 0) {
printf("%c文字が%d個見つかりました。\n", alphastr[i], kaisuu[i]);
}
}

return 0;
}
663デフォルトの名無しさん:2007/11/17(土) 17:51:38
>>656
memcpy(y, x, sizeof(y));
664デフォルトの名無しさん:2007/11/17(土) 18:27:44
>>663
ありがとうございます出来ました
665デフォルトの名無しさん:2007/11/17(土) 18:49:10
>>661
>・m×nが偶なら先攻の負け
>・1×nが与えられた時、先攻が勝つ

nが偶数の時矛盾するだろw

666デフォルトの名無しさん:2007/11/17(土) 19:10:41
>>665
よ く ぞ 気 付 い た
667デフォルトの名無しさん:2007/11/17(土) 19:47:08
>>659
当方で確認した環境は WindowsXP, 処理系は gcc 3.4.4 です。
最小自乗法です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5284.txt
668デフォルトの名無しさん:2007/11/17(土) 20:10:14
>>655
当方で確認した環境は Vine Linux 4.1(kernel 2.6.16.36), 処理系は gcc 3.3.6 です。
getchar() の戻り値は int で受けています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5285.txt
669デフォルトの名無しさん:2007/11/17(土) 20:59:03
>>589
当方で確認した環境は WindowsXP, 処理系は gcc 3.4.4 です。
1億回の試行を行っています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5286.txt
670655:2007/11/17(土) 21:10:36
>>662
ありがとうございます。
別解としてmemsetやポインタを使わないとすると、どのような解になるでしょうか。
ポインタが未習であることを書き落としていました。すみません。
671デフォルトの名無しさん:2007/11/17(土) 21:42:22
>>651
チョコレート分割問題
・n, mが与えられた時、n=mなら先攻の負け。
・n, mが与えられた時、n≠mならn=mと成る様に先攻が取り去れば先攻の勝ち。
672デフォルトの名無しさん:2007/11/17(土) 21:50:36
>>651
>>658
1*1のときは明らかに先手の負け。
1*1,2*2,...,(k-1)*(k-1)のとき先手が負けると仮定すると、k*kのときは、
先手が縦方向にj列折ったら、後手は横方向にj列折れば(k-j)*(k-j)になる。
このとき仮定から先手は負ける。もちろん縦横をひっくり返しても同じ。

というわけで658の意見は正しい。
673デフォルトの名無しさん:2007/11/17(土) 22:39:12
>>655, >>670
>>668 はどうですか?
なお、static な変数はプログラムの実行時に最初に一度だけ 0 で初期化されます。
したがって、>>662 の memset は必要ありません。
674651:2007/11/17(土) 22:39:46
皆様ありがとうございます、こんなにすぐに回答が来るとは思っていませんでした。
n = m にするくらいならプログラムを書けるとおもうのでやってみます。
675デフォルトの名無しさん:2007/11/17(土) 22:50:10
>>670
#include<stdio.h>

#define MAX 26

int main()
{
char c;
int kaisu[MAX]={0}; int i;

printf("文字を入力>");
while((c=getchar())!='\n'){
if('a'<=c&&c<='z'){ kaisu[c-'a']++;
}
}
for(i=0;i<MAX;i++;){ if(kaisu[i]!=0){
printf("%c=%d回\n",'a'+i,kaisu[i]);
}
}
return 0;
}
676デフォルトの名無しさん:2007/11/18(日) 00:24:41
>>673
>なお、static な変数はプログラムの実行時に最初に一度だけ 0 で初期化されます。

これは環境依存の話だね。

さらにいえば、出題の
「ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。 」
というのも環境依存。だから、>>662のほうが環境依存じゃない

そもそも出題で環境を限定しているからいいかもしれないけど、
なるだけ環境に依存しない書き方を心がけたほうがいい。
677デフォルトの名無しさん:2007/11/18(日) 00:39:49
>>676
ISO/IEC 9899:1999
 All objects with static storage duration shall be initialized
 (set to their initial values) before program startup.
678デフォルトの名無しさん:2007/11/18(日) 00:49:28
>>676
そんなに環境依存に気を使ってどうするの?
宿題を他へ移植するつもりなの?
679655:2007/11/18(日) 00:49:33
>>668
>>673
ありがとうございます。
レスを見逃してしまっていました。すみません。
>>675
回答ありがとうございます。

出していただいた解答を参考にやってみます。
680デフォルトの名無しさん:2007/11/18(日) 00:51:03
>>677
their initial valuesは定義されてるの? 実装依存?
681デフォルトの名無しさん:2007/11/18(日) 00:59:37
>>676
>>677 に補足
K&R2 section 4.9
C FAQ http://www.kouno.jp/home/c_faq/c1.html#30
昔からそうでした。
682デフォルトの名無しさん:2007/11/18(日) 01:06:16
>>680
ISO/IEC 9899:1999
 if it has pointer type, it is initialized to null pointer;
 if it has arithmetic type, it is initialized to
  (positive or unsigned) zero;
 if it is an aggregate, every member is initialized
  (recursively) according to these rules;
 if it is a union, the first named member is initialized
  (recursively) according to these rules.
683デフォルトの名無しさん:2007/11/18(日) 01:08:27
>>676
>>662のsizeofの使い方はいいの?確かに環境依存ではないけど。
684デフォルトの名無しさん:2007/11/18(日) 01:20:54
>>662は一味違う俺をアピールするために仕様を無視したオナニーコードを書いた挙句、
Cの仕様もわかってなかったと。
685680:2007/11/18(日) 01:22:52
>>682
おおわざわざサンクス
勉強になった
686!=676:2007/11/18(日) 01:23:36
どのsizeofのこと?
687380:2007/11/18(日) 01:25:04
>>647
遅くなってしまいましたが、ありがとうございます。
勉強になります。
688デフォルトの名無しさん:2007/11/18(日) 01:56:46
>>683
このハゲが!
689デフォルトの名無しさん:2007/11/18(日) 02:37:42
>>684
普通だぞ。
移植性が重要な、libcのソースコードとか読んでみろ。
690デフォルトの名無しさん:2007/11/18(日) 03:40:01
>移植性が重要
宿題スレでこれは本当にオナニーじゃなくて普通のことなのか?
691デフォルトの名無しさん:2007/11/18(日) 05:30:16
>>690
普段からそういう書き方になれることが重要だと
言っているだけだよ。普段からそうしていないのに、
いざ移植性の高いコードを書くように要求されても
かけないと思う。
692デフォルトの名無しさん:2007/11/18(日) 05:34:11
1] 授業単元:確率論
[2] 問題文(含コード&リンク):
前に>>257にて作ってもらったプログラムを
参考にある程度作れたんですけど
確率をsp2にどんどん足していくっていう。これを対数で計算できるように
変更していただきたいんですが。

対数で計算する場合には足し算する2つを
比較して計算をしないといけないんですけど、

gs->sp2 += spp * gs->self_p;
gs->next_gs->sp2 += spp * gs->next_p;
gs->side_gs->sp2 += spp * gs->side_p;

でlog(spp)+l右辺はlog(gs->??_p)でいいんですが
問題はたしていくとこなんです。

前のに対数計算もいれたのがこれです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5287.c

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: できるだけ早く
[5] その他の制限: 特になし

よろしくお願いします。
693デフォルトの名無しさん:2007/11/18(日) 05:34:56
#define SHI 5 ぬけてました。
694デフォルトの名無しさん:2007/11/18(日) 05:35:30
>>682
実際問題、メモリをOS起動時にゼロクリアするかなんて、
現場ではけっこう実装者のさじ加減しだいだったりする。
組み込みなんかでは特に。

ソフトリセットの時間短縮のために、メモリゼロクリア
しないなんてことはあるよ。
695デフォルトの名無しさん:2007/11/18(日) 06:26:48
>for (i = 0; i < sizeof(alphastr)-1; i++) {
俺は条件判定部で無駄な演算するヤツの言うことは信用しない
696デフォルトの名無しさん:2007/11/18(日) 06:37:15
>>695
どこに無駄な判定があるのだ?
sizeofはコンパイル時に決定されるのだぞ。
697デフォルトの名無しさん:2007/11/18(日) 06:40:46
(・∀・)ニヤニヤ
698デフォルトの名無しさん:2007/11/18(日) 06:45:01
>>697
そうやって逃げても、進歩はしないぞ。
699デフォルトの名無しさん:2007/11/18(日) 06:45:55
700デフォルトの名無しさん:2007/11/18(日) 06:48:19
>>699
他者とのコミュニケーションの仕方を教えてくれって言ってるのか?
アマッタレンジャナイ
701デフォルトの名無しさん:2007/11/18(日) 06:49:21
予想どおりに発狂したw
702デフォルトの名無しさん:2007/11/18(日) 06:52:28
>>701
こういう人間って、どう接したらいいのだろう?
他人ならムシすればすむけど、自分の子供がそうなったらと
思うとゾットしないな。

君の親御さんに同情するわ。
703デフォルトの名無しさん:2007/11/18(日) 07:00:00
>>698>>700>>702
君(達?)頭おかしいよ。
704デフォルトの名無しさん:2007/11/18(日) 07:55:40
>>694
そんなオレオレ実装の「C言語」の話をされても困る。
特殊環境の話をするならば事前に断るのが筋だよね。
705デフォルトの名無しさん:2007/11/18(日) 08:14:29
宿題の設定を無視したあげく、俺様理論の展開か……
706デフォルトの名無しさん:2007/11/18(日) 10:27:15
とりあえず>>655に関しては、
> ヒント 文字変数 c は、 c - 'a' を計算すれば、要素の番号になる。
ていうやり方を初めて見たけれども
これは良く使うテクニックなのかどうか
こちらの環境(win XP, bcc5.1.1)ではきちんと動くけれどもlinuxのgccでも大丈夫なのか、
そこまで追及するならcのヘッダファイルを全て解析できるくらいのスキルが必要ではなかろうか、
もっというなら、機械語とアセンブリについても相応の知識が必要なんじゃないか、
……とか、比較的低水準な事を想定して作られたc言語はいろいろと難しいと思う。

結論 : 「c - 'a' を計算すれば、要素の番号になる」という実装はとてもいかがわしい。
707デフォルトの名無しさん:2007/11/18(日) 11:08:27
良く使うテクニックだし、疑わしくも無い。
それが通用しない環境でプログラミングする場合は、事前にそうとわかるはずだから問題なし。
708デフォルトの名無しさん:2007/11/18(日) 11:10:44
それを初めて見たような奴が、なにえらそうに語っちゃってるんだよwww
709デフォルトの名無しさん:2007/11/18(日) 11:13:53
konosurehananisuredesuka
710デフォルトの名無しさん:2007/11/18(日) 11:27:11
>>706
Rationale
 The solution is an international agreed-upon repertoire in
 terms of which an international representation of C can be
 defined. ISO has defined such a standard, ISO/IEC 646,
 which describes an invariant subset of ASCII.

Rationale だから仕様ほど強くはないが、事実上
ISO/IEC 646 に従っていることは仮定してよい.

そして ISO/IEC 646 では c-'a' で a から数えた
(普通のアルファベットでの)番号が得られる.
711668:2007/11/18(日) 11:27:25
>>706
当方、Linuxで確認してますが...。
c-'a' の手法は K&R2 section 1.6 にもある、比較的知られた方法ですが...。
文字セットの仕様は普通ヘッダファイルには載っていないものですが...。

#宿題待ってます。691 は元の問題がわからないので、再度掲載を希望します。
712711:2007/11/18(日) 11:46:28
>> 691
失礼、問題は >>257 のソースにありましたね。
713デフォルトの名無しさん:2007/11/18(日) 11:50:10
>>696
sizeof がコンパイルタイムに決定されることは規定されていない.
むしろ次の記述が示すように,実行時に決定されることもある.

ISO/IEC 9899
 EXAMPLE3 In this example, the size of a variable-length array is
 computed and returned from a function:
 #include <stddef.h>
 size_t fsize3(int n)
 {
  char b[n+3];   // variable length array
  return sizeof b; // execution time sizeof
 }
714デフォルトの名無しさん:2007/11/18(日) 12:16:09
>>686
遅レスだけど、charが1バイトであることを前提にsizeofしてるから
wchar_tとか他のサイズの型に変更したときにミスしそう
移植性というより汎用性の問題になってくるのかな?
715デフォルトの名無しさん:2007/11/18(日) 12:17:39
[1] アルゴリズムとデータ構造
[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5290.txt
[3] 環境
 [3.1] Windows
 [3.3] C
[4] 11/20
[5] その他の制限: 特になし
716デフォルトの名無しさん:2007/11/18(日) 12:22:04
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

自然数 n ≦ 8000 と整数 k_2, ..., k_n が与えられる。
このとき、整数 1, ..., n を並べ替えたものの中で、

・ 2 番目の要素よりも小さな要素は 2 番目の前には k_2 個
・ 3 番目の要素よりも小さな要素は 3 番目の前には k_3 個
...
・ n 番目の要素よりも小さな要素は 3 番目の前には k_n 個

という条件を満たすものを求めよ。

例1:n = 5, k_2 = 0, k_3 = 0, k_4 = 0, k_5 = 0 → 5 4 3 2 1
例2:n = 5, k_2 = 1, k_3 = 2, k_4 = 1, k_5 = 0 → 2 4 5 3 1

[3] 環境
 [3.1] OS: Windows (Cygwin)
 [3.2] コンパイラ名とバージョン: gcc 4
 [3.3] 言語: どちらでも可
[4] 期限: 11月20日まで
[5] その他の制限: ありません
717デフォルトの名無しさん:2007/11/18(日) 12:26:41
>>695
ねーよ
718デフォルトの名無しさん:2007/11/18(日) 12:26:46
>>716
× ・ n 番目の要素よりも小さな要素は 3 番目の前には k_n 個
○ ・ n 番目の要素よりも小さな要素は n 番目の前には k_n 個
だよな
719デフォルトの名無しさん:2007/11/18(日) 12:33:44
それよりも二個目の"は"が難解さを醸し出す
720716:2007/11/18(日) 12:37:53
>>718
はい、そうです。貼り付けたときにまちがえました、すみません。

>>719
日本語が下手ですみません。
721デフォルトの名無しさん:2007/11/18(日) 12:39:50
>>716
後ろから決めていけばよい
例えば1からNまでとして、k(n) < nとする
まだ使用されていない数字をsu[n]に記録しておき(使用済みなら0にする)
su[n]の先頭から1を足して k(N-1) + 1 となった番号を一番最後に持ってくる
722デフォルトの名無しさん:2007/11/18(日) 12:40:39
[1]プログラミング2
[2] 各科目の平均値を表示するプログラムを作成します。(score table)のフォーマットに従った配列listとレコードを指定する整数indexを引数とし、index番目のレコードの先頭アドレス(つまり英語の得点の入った要素のアドレス)を返す関数
int * get_rec(int * list, int index)
を作成しなさい。また、これを利用して配列listと科目を指定する整数sub(英語:0, 国語:1, 数学:2, 理科:3, 社会:4)を引数として、subに指定した科目の平均値を返す関数
double sub_average(const int * list, int sub)
を作成し、プログラムを完成させなさい。


723デフォルトの名無しさん:2007/11/18(日) 12:41:39
#include <stdio.h>

#define MAX 101 /* 得点を入れる配列の最大値 */
#define REC 5 /* 1レコードの要素数 */
#define SUB 6 /* 科目名の文字数 */

char sub[REC][SUB]={"英語","国語","数学","理科","社会"};

/* 関数作成 */
int list_len(const int * list);

int list_len(const int * list)
{
return list[0];
}

int main()
{

/* 変数は適切に宣言する */
int size, x, y;
int *p;

int score[MAX]={3, /* レコード数 */
45, 60, 36, 72, 53, /* 1レコード目 */
87, 48, 77, 69, 91, /* 2レコード目 */
23, 54, 49, 58, 62}; /* 3レコード目 */
724デフォルトの名無しさん:2007/11/18(日) 12:42:36
#include <stdio.h>

#define MAX 101 /* 得点を入れる配列の最大値 */
#define REC 5 /* 1レコードの要素数 */
#define SUB 6 /* 科目名の文字数 */

char sub[REC][SUB]={"英語","国語","数学","理科","社会"};

/* 関数作成 */
int list_len(const int * list);

int list_len(const int * list)
{
return list[0];
}

int main()
{

/* 変数は適切に宣言する */
int size, x, y;
int *p;

int score[MAX]={3, /* レコード数 */
45, 60, 36, 72, 53, /* 1レコード目 */
87, 48, 77, 69, 91, /* 2レコード目 */
23, 54, 49, 58, 62}; /* 3レコード目 */
725デフォルトの名無しさん:2007/11/18(日) 12:43:48
p=score+1;
size=list_len(score);

/* ここに書く */

for (x=0 ; x<REC ; x++)
{
printf("+----+");
}
printf("\n");
for (x=0 ; x<REC ; x++)
{
printf("|%s|", sub[x]);
}
printf("\n");
for (x=0 ; x<REC ; x++)
{
printf("+----+");
}
printf("\n");

for (y=0 ; y<size ; y++)
{
for (x=0 ; x<REC ; x++)
{
printf("|%4d|", *p);
726デフォルトの名無しさん:2007/11/18(日) 12:47:23
p++;
}
printf("\n");
for (x=0 ; x<REC ; x++)
{
printf("+----+");
}
printf("\n");
}
}

↑を使ってお願いします。
[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio 2005
 [3.3] 言語:C言語
[4] 期限:2007年11月20日まで
[5] その他の制限:ポインタのあたりまで
727デフォルトの名無しさん:2007/11/18(日) 12:50:21
>>722-726
とりあえずコードをロダに上げたほうが回答率が上がると思う
728デフォルトの名無しさん:2007/11/18(日) 12:54:34
1よまずに書き込むなよ。
729デフォルトの名無しさん:2007/11/18(日) 12:56:59
>>713
配列のサイズに変数を指定できるの?
730デフォルトの名無しさん:2007/11/18(日) 13:02:20
新企画だと変数配列できる
731デフォルトの名無しさん:2007/11/18(日) 13:08:45
>>730
新規格があるんだ?
知らなかった…。
教えてくれてありがとう
732デフォルトの名無しさん:2007/11/18(日) 13:15:24
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):
入力データ数は制限なしとする。
リスト構造を作り、画面からデータを出力。データは末尾から加える。
データを指定し、削除する。
削除後のデータを画面に表示。
これを満たすプログラムを作成
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年11月18日16:30まで
[5] その他の制限: なし
733デフォルトの名無しさん:2007/11/18(日) 13:20:00
[1] 授業単元:C++実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5291.txt
[3] 環境
 [3.1] OS: XP VISTA
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C++
[4] 期限: 11/21 〜10:00
[5] その他の制限: 特になし

よろしくお願いします。
734デフォルトの名無しさん:2007/11/18(日) 13:31:16
>>733
これってuserクラスをつくってもいいんだよな?
そうしないと何かが釈然としない
735デフォルトの名無しさん:2007/11/18(日) 13:37:37
>>733
基本料金だけで使える時間(FLetzADSLは10分, YohooBBは30分, NifdyADSLは20分)
ってのをメンバ変数に出来ないのも釈然としない
736デフォルトの名無しさん:2007/11/18(日) 13:46:16
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
x1 x2 色番号


1.0 1.1 3
1.0 1.2 1
1.0 1.3 2



2.0 2.0 0

のようなテキストデータが与えられているとする。
色番号は0から3まである。
色番号によって任意の色を対応させ、(たとえば0:黒 1:赤 2:黄色 3:赤)
x1とx2をプロットした2次元のグラフを出力せよ。エクセル等でプロットしてみよ。
・・・・・
・・・・・
・・・・・
のようなグラフの点が色わけされたものである。



[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: 特になし
737デフォルトの名無しさん:2007/11/18(日) 13:50:02
なんだこの宿題の数

おれの宿題とやらは流されそうだな。。。
738デフォルトの名無しさん:2007/11/18(日) 13:55:41
>>736
OpengGLとかDirectXとかを使ってもいいのか?
739デフォルトの名無しさん:2007/11/18(日) 14:00:03
>>738
OKです。とりあえずエクセルかなんかのグラフが出せればいいです。VBAとかでもOKです。
点数が10000個とかあるんで、それが一つ一つ認識できるようにしてほしいです。

ぶっちゃけこの課題を直接だされたわけじゃなくて、レポートの中でこういうことが必要で、問題を自分で作ったので・・・
740デフォルトの名無しさん:2007/11/18(日) 14:35:41
>>608
(13) ";"が"型"の前にありません
(16) retc:定義されてない関数です
とエラーがでます。

741デフォルトの名無しさん:2007/11/18(日) 14:55:03
742デフォルトの名無しさん:2007/11/18(日) 15:06:08
743732:2007/11/18(日) 15:13:55
>>741
本当に助かりました!!!ありがとうございました!!
744デフォルトの名無しさん:2007/11/18(日) 15:28:56
>>721
それだと O(N^2) だよね。n = 8000 のときに時間がかかりそうだけど。
745デフォルトの名無しさん:2007/11/18(日) 15:32:18
Nの 1〜5倍くらいだろう
746デフォルトの名無しさん:2007/11/18(日) 16:06:11
>>745 kwsk
747デフォルトの名無しさん:2007/11/18(日) 16:07:09
>>715
問題文はそれで全部なのか?
とりあえず、
問3はfgets使え
問4はif(kosu<=10000)でエラー
748715:2007/11/18(日) 17:14:48
>>747
ありがとうございます。
問2に関して追記があります。
ポインタ値を交換するようにするとのことです。
プログラム全く理解いてないもので問3についても、
もう少し詳しくおねがいします。
749デフォルトの名無しさん:2007/11/18(日) 17:14:58
>>713
そんなコンパイラ実装、実際にミタコトネーヨ
750デフォルトの名無しさん:2007/11/18(日) 17:16:21
>>608
460を実行したところ
(13) ";"が"型"の前にありません
(16) retc:定義されてない関数です
とエラーがでます.
どうしたらいいでしょうか。
751デフォルトの名無しさん:2007/11/18(日) 17:21:58
>>749
gcc
752デフォルトの名無しさん:2007/11/18(日) 17:38:00
C++ の話だけど、Modern C++ Design ではテンプレートで sizeof を使う話が載ってたな。
テンプレートはコンパイル時に全て型計算が終わるから、 >>713 の例はともかく、
コンパイル時に確定している sizeof に関してテンプレートで使えないって強弁するのもなぁ。
要するに sizeof がいつ計算されるかは決まって無いにしろ、コンパイル時に確定している型の
sizeof の計算が必ず実行時に計算されると発想するのは極端なんじゃないかな?
753デフォルトの名無しさん:2007/11/18(日) 17:43:18
>>714
べつだん、
#define NELEMS(a) (sizeof(a)/sizeof(a[0]))

static char alphastr[] = "abcdefghijklmnopqrstuvwxyz";
static int kaisuu[NELEMS(a)];

としてもよかったけどな。やらなかっただけだ。
754デフォルトの名無しさん:2007/11/18(日) 17:59:26
>>752
これは C の話だし,C++ を範疇に含めても
「コンパイル時に確定している sizeof に関してテンプレートで使えない」
「sizeof の計算が必ず実行時に計算される」
なんて考えている人は居ないと思うんだけど.特に template に関しては

ISO/IEC 14882
 In several places, C++ requires expressions that evaluate to an
 integral or enumeration constant: (略) and as integral or
 enumeration non-type template arguments.
 An integral constant-expression can involve only (略),
 and sizeof expressions.

と,「sizeof は template 評価に必要なときは評価する」ことが保証されている.
755デフォルトの名無しさん:2007/11/18(日) 18:00:33
>>750

608ではないが。。。

 int retc;
の宣言を
 double d1, d2, d3, D;
の前か後ろにカッぺすると吉。



756デフォルトの名無しさん:2007/11/18(日) 18:12:31
>>749
713ではないが例えばgccとか。
c99の規格で可変配列が容認されたことでsizeofの仕様が一部変わって
可変配列のサイズを返すときだけは実行時に計算するようになったらしい。
しかしながらコンパイル時にサイズがわかっているものは
コンパイルタイムで計算される。
ソース:Lepton先生のCの強化書
757 ◆Iyutn6izzo :2007/11/18(日) 19:15:33
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
1〜100の範囲の乱数値を持つ要素数100の配列から、キーボードで入力した1〜100の範囲の値を探索し、
探索にかかった時間 と 入力値と同じ値を持つ全ての配列要素の添え字、同じ値を持つ配列要素の数を表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2007年11月18日20:30まで
[5] その他の制限:探索プログラムの基礎を勉強中

よろしくお願いします。
758デフォルトの名無しさん:2007/11/18(日) 19:47:04
>>753
676が環境依存にこだわってるみたいだったから、
そっちはいいのかと気になっただけ
紛らわしいだけで問題ないんだけどね
759デフォルトの名無しさん:2007/11/18(日) 20:08:44
[1] 授業単元:経路選択アルゴリズムの評価
[2] 問題文(含コード&リンク):
(これは前963の問題の続きです)
以下の手順に従い、経路選択アルゴリズムを評価せよ
・通信の発生 ランダムに送受信ノードを決定する
・通信の確立 与えられた送受信ノード間の経路を決定し、その経路上のリンクの空き容量を1Mbpsだけ減少させる。
         ただし、経路上に空き容量のないリンクが存在する場合、この通信は確立しなかったものとして、何も行わない。
・通信の終了 n回前に発生した通信の経路上の空き容量を1Mbpsだけ増加させる。ただし、その通信が確立していなかった場合には何も行わない。
・評価      10000回の通信を発生させ、そのうちで確立できなかった通信の割合(呼損立)を求める
・試行の繰り返し パラメタnを変化させながら、上記の試行を繰り返し行う。

☆経路の決定に際して以下の4つの方法が考えられる(4つありましたが今回は二つだけの宿題です)

1、最小ホップ経路を用いた固定経路

2、最小ホップ経路を用いた要求時経路(経路選択時点で空き容量のないリンクをグラフから取り除く)
■対象とするグラフは図2に示すようなトポロジを用いよ。各リンクに付加された数字はリンク容量「Mbps」を表す
なおいずれの向きも等量であるとする。
http://bbs.2ch2.net/angstrom/?m=img&q=../angstrom/img/1183891422/0005.jpg

※最小ホップとは経由するノード数が一番少なくという意味です
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11月22日朝8時
760デフォルトの名無しさん:2007/11/18(日) 20:10:14
>>692ですけど
すみませんができました
やってくださってた方、すみmせんでした。
761759:2007/11/18(日) 20:13:42
画像張りミスってました><
http://upload.fam.cx/cgi-bin/img-box/xe471118201243.jpg
762デフォルトの名無しさん:2007/11/18(日) 20:30:44
神経衰弱を行うゲームを作成すること。
ただし、カードは52枚全て使用し、絵柄の
区別は無いものとする。
配列を利用してください。
763デフォルトの名無しさん:2007/11/18(日) 20:40:01
言語まちがってんじゃねえのか
764デフォルトの名無しさん:2007/11/18(日) 20:46:30
>>757
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,num[100],n,cnt=0;
clock_t start,end;
srand((unsigned int)time(NULL));
for(i=0;i<100;i++) num[i]=rand()%100+1;
printf("1〜100の整数入力:");
scanf("%d",&n);
printf("入力値と同じ値の配列番号:\n");
start=clock();
for(i=0;i<100;i++){
if(n==num[i]){
printf("%d\n",i);
cnt++;
}
}
end = clock();
if(cnt>0) printf("総数%d個\n",cnt);
else printf("見つかりませんでした。\n");
printf("実行時間:%lfsec\n",(double)(end-start)/CLOCKS_PER_SEC);
}
765デフォルトの名無しさん:2007/11/18(日) 20:46:41
>>753
>static int kaisuu[NELEMS(a)];
突っ込むところはここですか
766 ◆Iyutn6izzo :2007/11/18(日) 20:54:09
>>764
ありがとうございます。
767 ◆Iyutn6izzo :2007/11/18(日) 20:56:29
引き続いてお願いします。

[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
1〜100の範囲の乱数値を持つ要素数100の配列を、バイナリーファイルに書き込む。
キーボードから1〜100の範囲の任意の整数を入力し、その値が作成したバイナリーファイルに含まれている数を、
ファイルに読み込んで数え表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2007年11月18日22:30まで
[5] その他の制限:探索プログラムの基礎を勉強中
768デフォルトの名無しさん:2007/11/18(日) 20:57:52
>>595
#include <stdio.h>
main()
{
int i,j,cnt=0;
char str[3][10];
for(i=0;i<3;i++){
printf("[%d]行目の文字列を入力 >",i);
scanf(" %s",str[i]);
}
putchar('\n');
for(i=0;i<3;i++){
for(j=0;str[i][j]!='\0';j++){
if(str[i][j]=='t'){
printf("[%d]行目[%d]列目に文字tを発見\n",i,j);
cnt++;
}
}
}
printf("文字tを全部で%d文字見つけました\n",cnt);
}
769デフォルトの名無しさん:2007/11/18(日) 20:59:33
762ですけど、カードは54枚です。
770デフォルトの名無しさん:2007/11/18(日) 21:05:18
○日 25-22 チ●
●日 21-25 チ○
○日 25-18 チ●
●日 22-25 チ○
●日 14-16 チ○
771デフォルトの名無しさん:2007/11/18(日) 21:24:20
[1] 授業単元:基礎情報
[2] 問題文
三次方程式を解くプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2007年11月21日
[5] その他の制限
  このプログラムはぐぐればあるのですが、
  他の人と同じプログラミングは減点すると言っていたので、
  出来ればオリジナルのを作っていただけると助かります。
772デフォルトの名無しさん:2007/11/18(日) 21:49:15
>>771
何法でとけばいいの?
773デフォルトの名無しさん:2007/11/18(日) 21:49:18
ここに書かれたプログラムとか減点どころか下手すりゃ単位出なくなりそうだが
774デフォルトの名無しさん:2007/11/18(日) 21:49:22
>>767
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,num[100],n,m,cnt=0;
clock_t start,end;
FILE *fp;
if((fp=fopen("c:/rnd.bin","wb"))==NULL){ printf("file can't open\n"); return; }
srand((unsigned int)time(NULL));
for(i=0;i<100;i++) num[i]=rand()%100+1;
fwrite(num,sizeof(int),100,fp);
fclose(fp);
if((fp=fopen("c:/rnd.bin","rb"))==NULL){ printf("file can't open\n"); return; }
printf("1〜100の整数入力:"); scanf("%d",&n);
printf("入力値と同じ値の配列番号:\n");
start=clock();
for(i=0;i<100;i++){ fread(&m,sizeof(int),1,fp);
if(n==m){ printf("%d\n",i); cnt++; }}
end = clock();
if(cnt>0) printf("総数%d個\n",cnt);
else printf("見つかりませんでした。\n");
printf("実行時間:%lfsec\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
}
775774:2007/11/18(日) 21:52:59
消し忘れてた。
printf("入力値と同じ値の配列番号:\n");
printf("%d\n",i);
この2つはいらないので消してください。
776 ◆Iyutn6izzo :2007/11/18(日) 22:01:57
>>774
ありがとうございます。
777633:2007/11/18(日) 22:10:22
>>645
ありがとうございます!
778デフォルトの名無しさん:2007/11/18(日) 22:17:17
>>732
当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
先に 5 データ分連続して入力し、その後、一覧が表示されて、削除するデータを選択します。
>>741 ですでに解答済みでしたか...。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5293.txt
779デフォルトの名無しさん:2007/11/18(日) 22:23:05
>>711
係数は実数のみでよいでしょうか?
また、実根解だけでいいでしょうか?
虚数解も必要であると、ちょっと大変です。
780527:2007/11/18(日) 22:31:58
>>418 は、>>477 と同じですよね。
これは、>>527 で回答しています。問題があれば教えてください。
781デフォルトの名無しさん:2007/11/18(日) 22:38:45
>>715
(6)の部分になにをつくればいいのでしょうか?内容を表示するコードですか?
782 ◆Iyutn6izzo :2007/11/18(日) 22:43:49
すみません。
最後です。

[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
アルファベットと数字、記号(半角)からなるテキストファイルの中に、
キーボードから入力した(半角)文字〔アルファベット、数字、記号〕が何文字含まれているか表示するプログラムを作成せよ。
※半角…日本語入力をOFFの時に入力できる文字
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2007年11月19日00:30まで
[5] その他の制限:探索プログラムの基礎を勉強中
783715:2007/11/18(日) 22:54:52
>>781
dataは文字列配列ではないので、文字列を直接交換できない。
ポインタ値を交換するようにしないといけない。
とのことです。
よろしくお願いします。
プログラム理解していないので見当はずれのこと
言ってたらごめんなさい。
784デフォルトの名無しさん:2007/11/18(日) 22:59:59
#include <stdio.h>
#include <stdlib.h>

int main(void){
FILE *fp;
char chk_alph,buf[256];
int i,cnt=0;

if((fp=fopen("test,txt","r"))==NULL)exit(1);
chk_alph=getchar();
while(getchar()!='\n');
while(fgets(buf,sizeof(buf),fp)!=NULL)for(i=0;buf[i]!='\n';i++)if(buf[i]==chk_alph)cnt++;

printf("%d回出現\n")
fclose();
return 0;
}

動作確認・コンパイルもしてなくて専ブラ上で書いた糞ース
785デフォルトの名無しさん:2007/11/18(日) 23:00:43
>>782宛てね。
786デフォルトの名無しさん:2007/11/18(日) 23:03:19
>>782

#include <stdio.h>

main()
{
FILE *fp;
char c;
char cc;
unsigned long l = 0;

fp = fopen("test.txt", "r");

scanf("%c", &c);

printf("検索文字:%c\n",c);
while ((cc=fgetc(fp)) != EOF) {
if(cc == c)
l++;
}

printf("検索結果:%ld文字", l);

}
787786:2007/11/18(日) 23:06:28
>>782

ごめん、ミス。
しかも784にも遅れをとった。。。

#include <stdio.h>

main()
{
FILE *fp;
char c;
char cc;
unsigned long l = 0;

fp = fopen("test.txt", "r");

scanf("%c", &c);

printf("検索文字:%c\n",c);
while ((cc=fgetc(fp)) != EOF) {
if(cc == c)
l++;
}

printf("検索結果:%ld文字\n", l);

fclose(fp);
}

788784:2007/11/18(日) 23:08:35
fcloseの中にfp入れといて。
789デフォルトの名無しさん:2007/11/18(日) 23:10:48
>>783
問題のプログラムは次のようなフローだと思います。

1) 1万行のデータ(一行は1000バイトまで)を読み込んで、メモリに格納します。
2) (6) の部分です。何かしら作業するのでしょうか?
3) メモリに格納されたデータをすべて解放(棄却)します。
4) 終了します。

で,(2) のステップで何をしてやればよいのでしょうか?
ポインタの値を交換、というのであれば、「辞書順に並べなおして表示する」ですか?
それを友達か誰かにきいてみてはいかがでしょうか?
790デフォルトの名無しさん:2007/11/18(日) 23:11:56
[1] 授業単元: プログラミング序論
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5296.txt
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C言語
[4] 期限: 11月19日午前1時まで
791790:2007/11/18(日) 23:13:34
[5] その他の制限:まだ習い始めて3ヶ月ぐらいです。
         よろしくお願いします
792デフォルトの名無しさん:2007/11/18(日) 23:22:18
>>789
それです!!「辞書順に並べなおして表示する」です。
友がソーティングのアルゴリズムって言ってました。
793771:2007/11/18(日) 23:44:20
>>772
三次方程式を解くプログラムを依頼したものですが、
初心者なので何法で解くかはわかりません…。
しかし、先生が参考にしてほしいといっていたものがあったので乗せておきます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5297.lzh
きちんとみれるかわかりませんが、よろしくお願いします。
794デフォルトの名無しさん:2007/11/18(日) 23:52:24
どうでもいいがここのは減点されんのかね?
795デフォルトの名無しさん:2007/11/18(日) 23:54:13
>>794
0点か減点だったら減点を取るだろ?
796デフォルトの名無しさん:2007/11/19(月) 00:06:51
バレなきゃだいじょうぶ
797デフォルトの名無しさん:2007/11/19(月) 00:09:26
規格厨ってほんとうざいな
798デフォルトの名無しさん:2007/11/19(月) 00:15:48
規格厨もウザいが独自厨もウザい

といってどちらにも偏らずに流動的にプログラミングされると、
今度はコンパイラ以外誰も読み取れなくなる

それならと、読みやすく書きやすい物を作りたいのなら、
多くの人が学習している既存のコードフォーマットを用いることになる

で、大抵そういうのは世界中に大量にあって派閥問題がある

結局、不毛なんだよな

最後は、「規格は勉強すればだれでも覚えられるし、動きがおかしければ規格書みれば一目瞭然」だから
嫌でも規格書に収束するんだが、ISOなんて数百ページありそうなのを一つ一つみるわけにもいかない

言語使用にとどまらず、関数仕様までなると膨大すぎる


>>793のリンクは動見てもBASICです
799デフォルトの名無しさん:2007/11/19(月) 00:16:50
BASICかと思いきやCOBOL・・・?
800デフォルトの名無しさん:2007/11/19(月) 00:29:34
今日仕様書の内容を張ってくれてた人は、
俺は勉強になったからありがたかったよ。
801デフォルトの名無しさん:2007/11/19(月) 00:47:13
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
  3つのエディットボックスに入力された文字列を、CSVファイルから一行ずつAND条件で検索し、
  マッチした行をリストビューへ表示せよ。
  尚、入力されなかった場合は、検索条件に含めないものとする。
[3] 環境:
 [3.1] OS:Windows
 [3.2] 言語: C/C++言語
 [3.3] コンパイラ: BCB Pro 6.0
[4] 期限: 11月19日午前9時まで
[5] その他:
  実際に文字列を検索する処理方法が分からず苦戦しています。
  リストビューに吐き出す処理や、CSVファイル読込みは多分できています。

  例えば、↓のようなCSVファイルから
  あ,い,う,え,お
  か,き,く,け,こ
  さ,し,す,せ,そ

  AND条件として『か』と『く』を指定して検索をし、
  マッチする2行目抜き出すようなことをしたいのです。
  『す』のみ入力した場合は3行目を検索する。
  大変申し訳ありませんが、ご教授よろしくお願いします。
802デフォルトの名無しさん:2007/11/19(月) 01:49:20
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク)
  キーボードで入力した任意の実行例のように、反転させるプログラムを作成せよ。次の4つの関数を作成すること。
  int main(void)
void moji_retsu_hanten( char *t )
int str_length( char str[] )
void str_copy( char dst[],char src[] )

実行例
 文字を入力してください> Tokyo PC
CP cykoT
 
 
[3] 環境:
 [3.1] OS:Windows
 [3.2] 言語: C/C++言語
 [3.3] コンパイラ: BCB Pro 6.0
[4] 期限: 11月19日12時まで
[5] その他:
803789:2007/11/19(月) 02:04:18
>>715
当方で確認した環境は、WindowsXP, 処理系はcygwin(gcc 3.4.4)、および、
Vine Linux 4.1 (kernel 2.6)/gcc 3.3.6 です。
fgetc() でつまづいてしまいました。完全に問題が要求しているとおりでは
ないかもしれません。が、疲れてしまいました。ごめんなさいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5298.txt
804デフォルトの名無しさん:2007/11/19(月) 02:26:42
昨日、今日出てきた規格がらみのこと、
1) static なオブジェクトの初期化の話
2) c - 'a' の話
3) sizeof の話
のうち、3) は新しい話があったりして、まあ、難しいかったんだけれども、
1)、2) は、それこそ K&R の昔から言われていたことだから...。
うざい、と思う人は、勉強不足でしょうね。
2) は K&R の第一章に書かれているのにね。
805デフォルトの名無しさん:2007/11/19(月) 02:34:11
c-'a'で文字の登場頻度を調べるのはこのスレの宿題でも頻出の部類だよな。
806デフォルトの名無しさん:2007/11/19(月) 02:44:09
>>802
#include <stdio.h>
int str_length(char str[]) {
char *p = str;
while(*p) p++;
return p - str; }
void moji_retsu_hanten(char *t) {
char *p = t + str_length(t) - 1, temp;
while(p > t) {
temp = *p;
*p-- = *t;
*t++ = temp;
}}
void str_copy(char dst[], char src[]) { while(*dst++ = *src++); }
int main(void)
{
char str[256], rev_str[256];
printf("文字を入力してください> ");
scanf("%s", str);
str_copy(rev_str, str);
moji_retsu_hanten(rev_str);
puts(rev_str);
return 0;
}

str_copyの意味がわからないから無理矢理コピーしてみた。
807802:2007/11/19(月) 02:54:20
>>806
無事動作確認致しました。
ありがとうございました!
808デフォルトの名無しさん:2007/11/19(月) 08:41:34
>>498
>>502
>>509
>>528
>>530
>>537
ありがとうございました。色々と試して見ます。

>>545
そんな事が言える喪前、内部関係者だろ。
本当は06KC136だよ。
809デフォルトの名無しさん:2007/11/19(月) 09:45:35
>>734
はい、userクラス作っても問題ないです。、
810デフォルトの名無しさん:2007/11/19(月) 10:16:54
>>790
課題2
#include<stdio.h>
#include<string.h>
#include<ctype.h>

void del_digit(char str[])
{
size_t ix;
for( ix = 0; str[ix] != '\0'; ++ix )
{
if( isdigit(str[ix]) )
{
str[ix] = '\0';
if( str[ix+1] != '\0' ) strcat(str,&str[ix+1]);
}
}
}
課題4
#include<stdio.h>

int main(void)
{
int i;
int *ptr_i; /* ポインタ変数の宣言 */

ptr_i = &i; /* 変数iのアドレスをポインタ関数ptr_iに格納 */
printf("ptr_i=%p, &i=%p\n",ptr_i, &i);
}
811デフォルトの名無しさん:2007/11/19(月) 10:17:47
課題5
#include<stdio.h>

/* --- n1とn2の和・差をsumとdiffに格納(修正) ---*/
void sum_diff(int n1, int n2, int *sum, int *diff)
{
*sum = n1 + n2;
*diff = (n1 > n2) ? n1 -n2 : n2 - n1;
}

int main(void)
{
int na, nb;
int wa = 0, sa = 0;

puts("二つの整数を入力してください。");
printf("整数A : "); scanf("%d", &na);
printf("整数B : "); scanf("%d", &nb);

sum_diff(na, nb, &wa, &sa);

printf("和は%dです。 \n差は%dです。 \n", wa, sa);

return 0;
}
812デフォルトの名無しさん:2007/11/19(月) 10:39:24
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文:
1)再帰関数を使い、N! (階乗)を計算する関数double factorial(int n);
を作成せよ。
Nの階乗の帰納的定義
・ N=0 のとき N!=1
・ N>0 のとき N! = N*( (N-1)!)
Nを入力してN!を出力するmain 関数を含むプログラムと実行結果
を提出せよ。
2) 参照引数を使い、関数 int divmod( int a, int b, int& rem);
 return で a/b を 引数 rem に あまりを計算する関数 を作成せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: C++
[4] 期限: (11月21日09:00まで)
[5] その他の制限:
割り算演算子/ も 剰余演算子%も使用してはならない。
fdivide関数のアルゴリズムを使う。

期限短いですがよろしくお願いします。
813デフォルトの名無しさん:2007/11/19(月) 11:22:53
>>812
階乗を行う関数は1スレで3〜4回ほど出されることがある。
814デフォルトの名無しさん:2007/11/19(月) 13:45:52
>>812>>117か??
double factorial(int n){ return (n > 0) ? n * factorial(n-1) : 1; }
int divmod( int a, int b, int& rem);は>>123
rem = numerator;
いれりゃいんじゃね
815デフォルトの名無しさん:2007/11/19(月) 13:47:33
[1] 授業単元:経路選択アルゴリズムの評価
[2] 問題文(含コード&リンク):
(これは前スレ963の問題の続きです)
以下の手順に従い、経路選択アルゴリズムを評価せよ
・通信の発生 ランダムに送受信ノードを決定する
・通信の確立 与えられた送受信ノード間の経路を決定し、その経路上のリンクの空き容量を1Mbpsだけ減少させる。
         ただし、経路上に空き容量のないリンクが存在する場合、この通信は確立しなかったものとして、何も行わない。
・通信の終了 n回前に発生した通信の経路上の空き容量を1Mbpsだけ増加させる。ただし、その通信が確立していなかった場合には何も行わない。
・評価      10000回の通信を発生させ、そのうちで確立できなかった通信の割合(呼損立)を求める
・試行の繰り返し パラメタnを変化させながら、上記の試行を繰り返し行う。

☆経路の決定に際して以下の4つの方法が考えられる(4つありましたが今回は二つだけの宿題です)

1、最小ホップ経路を用いた固定経路

2、最小ホップ経路を用いた要求時経路(経路選択時点で空き容量のないリンクをグラフから取り除く)
■対象とするグラフは図2に示すようなトポロジを用いよ。各リンクに付加された数字はリンク容量「Mbps」を表す
なおいずれの向きも等量であるとする。

図2 http://upload.fam.cx/cgi-bin/img-box/xe471118201243.jpg

※最小ホップとは経由するノード数が一番少なくという意味です
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11月22日朝8時

816デフォルトの名無し:2007/11/19(月) 16:56:27
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

関数atoiを利用し、文字列を正数に変換するプログラムを作成せよ。
引数:data[]
戻り値:整数
   エラー値 −1:未入力 −2:桁あふれ −3:数値以外 −4:ゼロ入力

エラーは
未入力:「入力されていません」
桁あふれ:「4文字以下で入力してください」
数値以外:「半角数字以外入力できません」
ゼロ入力:「0は入力できません」

となる。キーボードからの最大入力数は4バイトとする。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限:2007.11.21まで
[5] その他の制限:なし


817デフォルトの名無しさん:2007/11/19(月) 16:57:08
すごい初歩的な質問ですいません
学校の課題ができなくてOTL

・正の数を2つにゅうりょくさせ、小さいほうから大きいほうまでの
 数をすべて掛けるプログラムを関数用いろってやつなんですけど、
できる人お願いします;;
818433:2007/11/19(月) 17:09:30
教えて頂いた通り打ち込んだのですが、a,b,cに同じ数字を何回入力してもバラバラの答えが出てしまうのですがどうすればよいのでしょうか
(例えば0,0,0と入力してもx=-1.16,3.61と出たりx=-1.52,4.37と出たりしてしまいます)
819デフォルトの名無しさん:2007/11/19(月) 17:20:10
>>817
>>1の質問テンプレに従って書き直せ
820715:2007/11/19(月) 18:29:12
>>803
ありがとうございます。
ですがE以外の部分の変更はNGなんですよ…
どなたかおねがいします。
[1] アルゴリズムとデータ構造
[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5300.txt
[3] 環境
 [3.1] Windows
 [3.2] Visual Studio 2005
 [3.3] C
[4] 期限: 11月20日
821803:2007/11/19(月) 19:11:24
>>820
お役に立てず残念です。
しかし、gets() を使いながら、バッファーあふれを検知できる方法は、ちょっと思いつきません。
で、かわりに fgets() を使ったのですが。
どなたかお願いいたします。
822名無し募集中。。。:2007/11/19(月) 20:00:28
[1] 自習
[2]
[3] 環境[3.1] OS:WindowsXP[3.2] コンパイラ名とバージョン:bcc55[3.3] 言語:C++
[4] なし
下から4行return後ろの(char*)の意味が分かりません
お願いします。
#include<stdio.h>
char* str_chr(char*,int);
int main(void)
{
char str[10],*p;
char uletter[]="abcdefghijklm";
printf("英大文字を入力してください:");
scanf("%s",,str);
p=str_chr(uletter,str[0]);
if(p!=NULL)puts(p);
return 0;
}
char* str_chr(char* str,int c)
{
for(;*str;str++){
if(*str==c){
return((char*)str);
}
return (NULL);
}
823デフォルトの名無しさん:2007/11/19(月) 20:28:02
>>822
取っちゃえば?
824デフォルトの名無しさん:2007/11/19(月) 20:29:32
>>822
キャ〜ス〜ト〜
825名無し募集中。。。:2007/11/19(月) 20:40:30
>>824
なんでここでキャスト使ってるんですか
826デフォルトの名無しさん:2007/11/19(月) 20:43:18
そういう気分だったんじゃね。俺なら絶対につけない。
827名無し募集中。。。:2007/11/19(月) 20:45:09
ありがとうございました
828デフォルトの名無しさん:2007/11/19(月) 23:30:46
>>816
#include <stdio.h>
#include <stdlib.h>
int asciitointeger(char data[])
{
int i,n;
if(data[0]=='\0')
return -1;
for(i=0;data[i]!='\0';i++)
if(data[i]<'0'||'9'<data[i])
return -3;
if(i>4)
return -2;
if((n=atoi(data))==0)
return -4;
return n;
}
main()
{
int i=0,n,c;
char data[7];
while((c=getchar())!='\n')
data[i++]=c;
data[i]='\0';
n=asciitointeger(data);
printf("%d\n",n);
}
桁あふれと数値以外の優先度が書いてなかったので数値以外を優先しました。
(要するに-1234と入力されたときの戻り値を-2にするのか-3にするのかということ)
エラーチェックの部分は書いてないので自分で付け足してください。
829デフォルトの名無しさん:2007/11/19(月) 23:43:01
エラー値がマイナスなんだから、-は数値以外じゃね?
830デフォルトの名無しさん:2007/11/20(火) 00:29:48
大学の課題の質問です。
[1] 授業単元:C
[2] 問題文(含コード&リンク):文字列をクイックソートで並び替える
[3] 環境 visual C++ 2005 Express Edition
[4] 期限: 2007年11月20日20:00まで
[5] その他の制限: 特になし

↓に貼るクイックソート関数のおかしいところをご指摘ください。
#define NS 3000000 /* 入力の最大数 */
#define WC 64 /* 入力の1行の文字数 */
void your_sort(char *s[NS][WC]) {
int pivot;
int l_hold,r_hold;
int x=0;
int left = 0;
int right = WC-1;
l_hold = left;
r_hold = right;
pivot = (left+right)/2;
while(x<WC){
while(left < right)
{
while(strcmp(&s[x][right],&s[x][pivot])>0)
right--;
if(left =right)
{
s[x][left] = s[x][right];
left++;
}
831デフォルトの名無しさん:2007/11/20(火) 00:31:01
while((strcmp( &s[x][pivot],&s[x][left])<0) &&(left <right))
right--;
if(left != right)
{
s[x][left] = s[x][right];
left++;
}
while((strcmp( &s[x][pivot], &s[x][left])>0)&&(left < right))
left++;
if(left != right)
{
s[x][right] = s[x][left];
right--;

}
left = l_hold;
right = r_hold;
if(left < pivot)
your_sort(s[x][pivot-1]);
if(right > pivot)
your_sort(s[x]pivot+1,right);
}
x++;
}
エラーはerror C2664: 'strcmp' : 1 番目の引数を 'char **__w64 ' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というものが出ました。strcmpの使い方がおかしいのかもしれません。ご指摘お願いします
832デフォルトの名無しさん:2007/11/20(火) 01:04:37
>>805
>c-'a'で文字の登場頻度を調べるのはこのスレの宿題でも頻出の部類だよな。

でもさ、c-'a'ってしょせんASCIIでしか通用しないわけだし、
wchar_tになったら、プログラム大幅修正になるよ?
833デフォルトの名無しさん:2007/11/20(火) 01:05:17
いいたいことは、ロジックとデータはなるだけ分離したほうがいい、ってこと。
834デフォルトの名無しさん:2007/11/20(火) 01:25:28
もういいから
835デフォルトの名無しさん:2007/11/20(火) 01:26:47
>>831さんへ

strcmpについて

&を外せば終了?

文字列構造です。簡単なこれをやってみると分かるかもしれないです
int main(void)
{
char moji[1][4];
char *pointa_moji[1][1];

moji[0][0]='a';
moji[0][1]='i';
moji[0][2]='u';
moji[0][3]='\0';

pointa_moji[0][0]=moji[0];

printf("%d",strcmp(pointa_moji[0][0],"aiu")); //&を付けると同じエラー出ます。

return 0;
}

その他
your_sort関数の呼び出しが引数1つだったり時には2つだったり・・・・

です。

間違ってたらごめんなさい
836デフォルトの名無しさん:2007/11/20(火) 01:31:30
>>832
こうやって2ch初心者から荒らしになっていくんだな。
837デフォルトの名無しさん:2007/11/20(火) 05:36:25
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
一つの整数を入力したとき、その整数が0〜4ならばA、5〜9ならばB、10〜14ならばC、15〜19ならばA、20〜24ならばB、25〜29ならばC、、、
これが59まで続く物とし、それ以外の数字ならばErrorを返すプログラムを書け。
[3] 環境
 [3.1] OS: Windows  XP
 [3.2] コンパイラ名とバージョン: VC++2005ExpressEdition
 [3.3] 言語: C
[4] 期限: 2007年11月21日まで
[5] 特になし。配列を習ってるときにでました。0〜4と5個、周期的にABCABCと切り替わる評価の仕方をどうするか。

よろしくお願いします。
838デフォルトの名無しさん:2007/11/20(火) 06:02:09
>>837
#include<stdio.h>
int main(void){
int n;
printf("n=");
scanf("%d",&n);
if(n<0||n>59)printf("Error\n");
else printf("%c\n",n/5%3+'A');
return 0;
}
839デフォルトの名無しさん:2007/11/20(火) 06:12:44
>>838
朝早くからありがとうございました
840デフォルトの名無しさん:2007/11/20(火) 10:00:37
[1] 授業単元:プログラミング基礎演習
[2] 問題文(含コード&リンク):
  次の虫喰い算の□に入る数字を決定するプログラムを作成。

        □□□□
×     □□□□□□
------------------------
        □□□□
       □□□□
     □□□□□
    □□□□□
   □□□□□
   □□□□ 
------------------------  
   987654321
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限:2007年11月26日
[5] その他の制限:
  特にありません。

虫食い算が見にくいかもしれませんがよろしくお願いします。
841840:2007/11/20(火) 10:09:01
すみません。書き込んだらずれまくってました。
ワードをアップしておきましたのでそちらを参考にしてください。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5301.zip
842デフォルトの名無しさん:2007/11/20(火) 12:00:18
843デフォルトの名無しさん:2007/11/20(火) 16:49:57
問1
次のメンバーを持つ構造体_recを定義し、Record型にtypedefせよ。
・int idx;
・char sname[50];
・char fname[50];



Record型へポインタ配列
*p_rec[2](要素数2)を宣言せよ。
次に、*p_rec[0]、*p_rec[1]用にメモリを確保して、以下のデータを代入せよ。
(*p_rec[0])の各メンバーの内容:
・idx:1
・sname:"Hanamaruki"
・fname:"Miko"
(*p_rec[1])の各メンバーの内容:
・idx:2
・sname:"A"
・fname:"B"



(*p_rec[0]),(*p_rec[1])の各メンバーの内容を、標準出力に書き出すプログラムを作れ
ただし、次の仕様を満たすこと。
・idx,sname,fnameの順に、タブで区切って書き出す。
・まず(*p_rec[0])の各メンバーを出力、改行して(*p_rec[1])の各メンバーを出力、改行して終了。
844843:2007/11/20(火) 16:51:48
C言語でお願いします。
845デフォルトの名無しさん:2007/11/20(火) 16:57:37
>>840
#include <stdio.h>
int main(void){
int a = 1001, b = 100001, ans;
ans = a * b;
while(ans != 987654321){
a += 2;
if(a > 9999 || ans > 987654321){
a = 1001;
b += 2;
if(b > 999999)break;
}
ans = a * b;
}
printf("a:%d b:%d ans:%d\n",a,b,a*b);
printf("%12d\n",a);
printf("x%11d\n",b);
printf("------------\n");
printf("%12d\n",a*(b%10));
printf("%11d-\n",a*((b/10)%10));
printf("%10d--\n",a*((b/100)%10));
printf("%9d---\n",a*((b/1000)%10));
printf("%8d----\n",a*((b/10000)%10));
printf("%7d-----\n",a*((b/100000)%10));
printf("------------\n");
printf("%12d\n",a*b);
return 0;
}
なんという力技コード・・・
846デフォルトの名無しさん:2007/11/20(火) 17:05:36
>>843
#include <stdio.h>
#include <stdlib.h>
struct _rec {
int idx;
char sname[50];
char fname[50];
};
typedef struct _rec Record;
Record* p_rec[2];

int main(void)
{
p_rec[0] = malloc(sizeof(Record));
p_rec[1] = malloc(sizeof(Record));
p_rec[0]->idx = 1;
p_rec[0]->sname = "Hanamaruki";
p_rec[0]->fname = "Miso";
p_rec[1]->idx = 2;
p_rec[1]->sname = "A";
p_rec[1]->fname = "B";
{
int i;
for(i=0; i!=2; i++)
{
printf("%d\t%s\t%s\n", p_rec[i]->idx, p_rec[i]->sname, p_rec[i]->fname);
}
return 0;
}
847843:2007/11/20(火) 17:39:05
>>846
ありがとうございました。助かりましたー。
848デフォルトの名無しさん:2007/11/20(火) 17:46:26
>>846
> p_rec[0]->sname = "Hanamaruki";
> p_rec[0]->fname = "Miso";

> p_rec[1]->sname = "A";
> p_rec[1]->fname = "B";

……いいのか、これ?
849デフォルトの名無しさん:2007/11/20(火) 18:05:03
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
リングバッファを持った待ち行列を配列を使って作成せよ
その際キューにデータを追加、削除、キューをクリアする関数を作る

ソース:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5302.txt

コンパイルしたら
que07.obj(que07.c): Undefined symbol: enterqueue_
とエラーが出てきちんと実行ができません。
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: LSI C-86
 [3.3] 言語:C言語
[4] 期限: [2007年11月26日まで
[5] その他の制限: 特になし

よろしくお願いします。
850デフォルトの名無しさん:2007/11/20(火) 18:29:19
>>849
typo
851デフォルトの名無しさん:2007/11/20(火) 18:40:46
> p_rec[0]->sname = "Hanamaruki";
> p_rec[0]->fname = "Miso";

> p_rec[1]->sname = "A";
> p_rec[1]->fname = "B";

ここはstrcpyだな
852デフォルトの名無しさん:2007/11/20(火) 19:55:40
>>850
すいませんでした。
この場合で表示させるとリングバッファにならないのですが
どうしらいいんでしょうか
853デフォルトの名無しさん:2007/11/20(火) 20:10:19
[1]プログラミング2
[2]
フォーマットを持つ配列を引数として、有効なレコード数(つまり配列の0番目の値)を返り値として返す関数
int list_len(const int * list)
を作成し(score table)のフォーマットに従った配列listとレコードを指定する整数indexを引数とし、index番目のレコードの先頭アドレス(つまり英語の得点の入った要素のアドレス)を返す関数
int * get_rec(int * list, int index)
を作成し(score table)のフォーマットに従った配列listとレコードを指定する整数indexを引数とし、index番目のレコードを表にして表示する関数
void print_list(const int * list, int index)
を作成しなさい。ただしindexの値が有効なレコード数の範囲を超える場合はエラーメッセージ(「対象のレコードがありません。」)を出力します。プログラムは0が入力されるまで繰り返されるものとし、実行例に従ってプログラムを完成させなさい。
854デフォルトの名無しさん:2007/11/20(火) 20:12:06
サンプルコード
#define MAX 101 /* 得点を入れる配列の最大値 */
#define REC 5 /* 1レコードの要素数 */
#define SUB 6 /* 科目名の文字数 */
char sub[REC][SUB]={"英語","国語","数学","理科","社会"};

/* 関数作成 */
int main() {
/* 変数は適切に宣言する */
int score[MAX]={3, /* レコード数 */
45, 60, 36, 72, 53, /* 1レコード目 */
87, 48, 77, 69, 91, /* 2レコード目 */
23, 54, 49, 58, 62}; /* 3レコード目 */
/* ここに書く */
}
855デフォルトの名無しさん:2007/11/20(火) 20:15:05
何番目のレコード?(0:END, 1-3) 3
+----++----++----++----++----+
|英語||国語||数学||理科||社会|
+----++----++----++----++----+
| 23|| 54|| 49|| 58|| 62|
+----++----++----++----++----+
何番目のレコード?(0:END, 1-3) 4
対象のレコードがありません。
何番目のレコード?(0:END, 1-3) -1
対象のレコードがありません。
何番目のレコード?(0:END, 1-3) 0
終了します。


[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio 2005
 [3.3] 言語:C言語
[4] 期限:2007年11月20日まで
[5]特になし
856デフォルトの名無しさん:2007/11/20(火) 20:15:29
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  各教科名と点数を入力し、点数の大きい順に教科名と点数をソートして表示させなさい。
#include<stdio.h>
void main(){
  char kyouka[20][10];
  int tensu[20],aa,m,k;
printf("教科の数:");
scanf("%d",&n);
for(k=0;k<n;k++){
printf("科目名:");
scanf("%s",&kyouka[k]);
printf("点数:");
scanf("%d",&tensu[k]);
}
for(k=0;k<n;k++){
tensu[k]=0;
}
for(m=n;m>1;m--){
for(k=0;k<m;k++){
if(tensu[k]<tensu[k+1]){
gg=g[k];
g[k]=g[k+1];
g[k+1]=gg;
}
}
}
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C++
[4] 期限: 2007年11月23日
  文字配列のソートがわかりません。初心者ですがよろしくおねがいします
857デフォルトの名無しさん:2007/11/20(火) 20:41:37
>>856
gやggって何だ?
あとaaも使ってないようだが
858デフォルトの名無しさん:2007/11/20(火) 21:00:09
[1] 授業単元: 情報活用実習
[2] 問題文 たとえば4と入力すると
1
11
111
1111
111
11
1
となるようなプログラムを書きなさい。
[3] 環境
 [3.1] OS: Windows
 
[4] 期限: 11/20 23:00まで
[5] その他の制限: forをつかって作成せよとのことです。

どこで質問すればいいのかわからずここにたどり着きました。
スレ違いだったらすみません

859デフォルトの名無しさん:2007/11/20(火) 21:15:43
>>858
#include <stdio.h>
int main(void){
int i, k, cnt;
scanf("%d", &cnt);
for(i=0; i<cnt; i++){
for(k=0; k<i+1; k++)putchar('1');
putchar('\n');
}
for(i=cnt; i>1; i--){
for(k=i; k>1; k--)putchar('1');
putchar('\n');
}
return 0;
}
860デフォルトの名無しさん:2007/11/20(火) 21:27:59
>>859
さっそく有難うございます、助かりました!
861デフォルトの名無しさん:2007/11/20(火) 21:55:43
>>851
strcpyだと文字列リテラル使えなくね?
sprintf使ったほうよくね?
862デフォルトの名無しさん:2007/11/20(火) 21:58:00
>>861
???
863デフォルトの名無しさん:2007/11/20(火) 22:06:31
>>861
使えるぞぉ
char *strcpy(char *s1, const char *s2);
sprintfでも大丈夫だけど。
864 ◆A4nZCKYQwM :2007/11/20(火) 22:18:19
[1] 授業単元:プログラミング@
[2] 問題文(含コード&リンク):
2から始まる順番に整列された偶数を20000まで持つ要素数10000の配列から、
キーボードで入力した1〜20000の値を探索し、同じ値を持つ配列要素の添え字を表示するプログラムを二分探索を用いて作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.3] 言語:C
[4] 期限:2007年11月21日00:30まで
[5] その他の制限:
865デフォルトの名無しさん:2007/11/20(火) 22:34:14
866デフォルトの名無しさん:2007/11/20(火) 22:45:39
867デフォルトの名無しさん:2007/11/20(火) 22:47:37
>>856
今頃気づいたけれどC++!?思いっきりCだと思ってmalloc使ってしまった。
868デフォルトの名無しさん:2007/11/20(火) 22:49:38
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1. 以下のような、2つの整数の和を求める関数と差を求める関数のプログラムを、□の中に文字を入れて完成させなさい。
#include <stdio.h>
int sum( )
{
return ( );
}
int diff( );
{
if(x>y)
return ( );
else
return( );
}

int main(void)
{
int na, nb;
puts(“2つの整数を入力してください。”);
printf(“整数A:”);
scanf(“%d,&na);
printf(“整数B:”);
scanf(“%d,&nb);
printf(“2の整数の和は%dです。\n”,sum( ) );
printf(“2の整数の差は%dです。\n”,diff( ) );
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C言語
[4] 期限: ([2007年12月22日1:00まで]
869デフォルトの名無しさん:2007/11/20(火) 22:53:33
>>845
助かりました!
ほんとにありがとうございます!

870デフォルトの名無しさん:2007/11/20(火) 22:58:58
出来ればどなたか>>772>>793 お願いしますm(__)m
871デフォルトの名無しさん:2007/11/20(火) 22:59:58
すみません。アンカーミスです。
>>771>>793でした。
872デフォルトの名無しさん:2007/11/20(火) 23:07:00
減点くらい我慢しろよ
873デフォルトの名無しさん:2007/11/20(火) 23:13:05
明日C言語のテストがあるのですが。ポインタのとこ
エラーが出たら即終了

合格しないと単位がでません、これからどうしたらいいのか・・・なき
874デフォルトの名無しさん:2007/11/20(火) 23:23:02
>>868
int x, int y
x + y
int x, int y
x - y
y - x
na, nb
na, nb
875デフォルトの名無しさん:2007/11/20(火) 23:24:39
ポインタのとこエラーがでたら即終了ってどういう意味だ?
876デフォルトの名無しさん:2007/11/20(火) 23:28:33
エラーが出たらその時点で単位がでないってことじゃない?
877デフォルトの名無しさん:2007/11/20(火) 23:28:59
>>872
それを言ったらこのスレの存在意義がなくなるなw
878sage:2007/11/20(火) 23:29:27
>>874
ありがとうございます
879デフォルトの名無しさん:2007/11/20(火) 23:31:19
[1] 授業単元:プログラミング4
[2] 問題文(含コード&リンク):
(1)リストの先頭からidx番目のnodeのアドレスを返す関数
 MyList *idxMyList(MyList *ptr, int idx);を使う

(2)malloc()を用いて元のリストの構造をコピーしたリストを返す関数
MyList *cpMyList(MyList *ptr);を使う

(3)malloc()を用いて元のリストの先頭からn個のnodeをコピーした
   リストを返す関数。
MyList *cpcMyList(MyList *ptr, int n);を使う。
書き始めは

#include <stdio.h>
#include <stdlib.h>
typedef struct node
int data;
struct node *next;
} MyList;

[3] 環境
 [3.1] OS:Linux
 [3.3] 言語:C
[4] 期限:2007年11月21日10:30まで



880デフォルトの名無しさん:2007/11/20(火) 23:35:52
>>877
このスレ使うなら、せめて他人のコピペを提出できる度胸くらいはないと
881 ◆A4nZCKYQwM :2007/11/20(火) 23:36:04
>>864 感謝です。

[1] 授業単元:プログラミング@
[2] 問題文(含コード&リンク):
キーボードから10個の整数値を入力し、基本選択法を用いて小さい順に並び替え、ディスプレイに表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.3] 言語:C
[4] 期限:2007年11月21日00:50まで
[5] その他の制限:
882デフォルトの名無しさん:2007/11/20(火) 23:40:47
すいません>>856です。
コードの部分の修正を。
#include<stdio.h>
void main(){
  char kyouka[20][10];
  int tensu[20],aa,m,k;
printf("教科の数:");
scanf("%d",&n);
for(k=0;k<n;k++){
printf("科目名:");
scanf("%s",&kyouka[k]);
printf("点数:");
scanf("%d",&tensu[k]);
}
for(k=0;k<n;k++){
tensu[k]=0;
}
for(m=n;m>1;m--){
for(k=0;k<m;k++){
if(tensu[k]<tensu[k+1]){
aa=tensu[k];
tensu[k]=tensu[k+1];
tensu[k+1]=aa;
}
}
}
}
すいませんでした。どなかたよろしくおねがいします。
883デフォルトの名無しさん:2007/11/20(火) 23:41:57
>>882
C++でいいのか?
884804:2007/11/20(火) 23:42:13
>>832
確かに Windows だと事情は異なりますね。
ちょっと言い過ぎましたか。すみません。
885デフォルトの名無しさん:2007/11/20(火) 23:43:44
>>867
すいませんCはまったくわかりません。
丁寧にやって頂いたのにもうしわけないです。
886デフォルトの名無しさん:2007/11/20(火) 23:52:56
>>879
MyList *idxMyList(MyList *ptr, int idx)
{
while(idx--) ptr = ptr->next;
return ptr;
}

MyList *cpMyList(MyList *ptr)
{
MyList *p;
if(ptr==NULL) return NULL;
if((p=malloc(sizeof(MyList))==NULL) exit(1);
p->data = ptr->data;
p->next = cpMyList(ptr->next);
return p;
}

MyList *cpcMyList(MyList *ptr, int n)
{
MyList *p;
if(ptr==NULL || n == 0) return NULL;
if((p=malloc(sizeof(MyList))==NULL) exit(1);
p->data = ptr->data;
p->next = cpcMyList(ptr->next, n-1);
return p;
}
887デフォルトの名無しさん:2007/11/20(火) 23:55:47
やっぱりさき越されていた。cpMyList,cpcMyListがほぼ同じ。
悔しいので少し違うidxMyListをあげ
MyList *idxMyList(MyList *ptr, int idx)
{
return idx == 0 ? ptr :
ptr->next == NULL ? NULL :
idxMyList(ptr->next, idx-1);
}
888デフォルトの名無しさん:2007/11/20(火) 23:57:24
>>887
なんかよく読んだらおかしい。無視でよろしこ。
889デフォルトの名無しさん:2007/11/21(水) 00:07:40
>>886>>887
本当にありがとうございます!
>>888考えてくれたという事だけでも十分ありがたかったです;;
890デフォルトの名無しさん:2007/11/21(水) 00:09:31
891デフォルトの名無しさん:2007/11/21(水) 00:12:27
>>881 2つに分けときます

#include <stdio.h>
#include <stdlib.h>

#define youso 10

void henkanoyousu(int *data)
{
int i;

for(i=0;i<youso;i++){ printf("%d ",*(data+i)); }
printf("   ");
}

void datachange(int *dataA , int *dataB)
{
int tmp;

tmp=*dataA;
*dataA=*dataB;
*dataB=tmp;
}
892デフォルトの名無しさん:2007/11/21(水) 00:14:09
>>881 さんへパート2
int main(void)
{
char input[10];
int i , j;
int target;
int data[10];

for(i=0;i<10;i++){
printf("%dつ目の数値入力>",i+1);
scanf("%s",input);
data[i]=atoi(input);
}
printf("\n");
henkanoyousu(data);
printf("初期状態\n\n");

for(i=youso-1;i>0;i--){
target=i;
for(j=0;j<i;j++){
if(data[j] > data[target]){ target=j; }
}
datachange(&data[j],&data[target]);
henkanoyousu(data);
printf("\n");
}
printf("\nPless any key + Enter\n");
scanf("%s",input);

return 0;
}
893デフォルトの名無しさん:2007/11/21(水) 00:21:04
>>891
ボトムアップでかくとな
894デフォルトの名無しさん:2007/11/21(水) 00:39:52
すいません>>879の者なんですが、
>>886で作っていただいた関数の機能をチェックできるmain()を
作って合わせて・・・のようで、でも、どうやったら機能をチェックできるのか
わかりません;;少しばかりレクチャーお願いします。。
895デフォルトの名無しさん:2007/11/21(水) 00:42:28
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):前回のリターン入力から今回のリターン入力までの経過時間(ミリ秒) を測定し表示する
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:今日まで
[5] その他の制限:「明解 C言語」の構造体まで習いました
            #include <sys/timeb.h>を用いてください、標準ライブラリ関数は使わないでください

よろしくお願いします
896 ◆A4nZCKYQwM :2007/11/21(水) 00:43:56
ありがとうございます。
897デフォルトの名無しさん:2007/11/21(水) 01:18:05
898デフォルトの名無しさん:2007/11/21(水) 01:23:37
>>832
しかし、UTF-16/32なwchar_tなら、c - L'a'も使えるよ。
899デフォルトの名無しさん:2007/11/21(水) 01:33:12
>>894
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5306.txt
いろいろ関数を追加してしまった。
よくわからんかったらカキコしてくれ。わかる範囲で答える。
900デフォルトの名無しさん:2007/11/21(水) 02:53:42
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):

2つの2変数関数
f(x,y)=(π-x)^2+(π-y)^2
g(x,y)=x+y
が与えられてるとき、これら2つの関数値を比較して大きい方の値を配列V(i,j)に代入せよ。
ただし、変数範囲は0≦x≦5, 0≦y≦6
分割数はXが20、yが30とする。最後に配列を代入した値を表示せよ。
                    
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C++
[4] 期限: 11月21日12:00まで
[5] その他の制限:
901デフォルトの名無しさん:2007/11/21(水) 05:04:26
>>900
#include <iostream>
#include <vector>
#include <algorithm>
#define _USE_MATH_DEFINES // to M_PI
#include <cmath>
using namespace std;
double f( double x_, double y_ ) { return ( M_PI - x_ ) * ( M_PI - x_ ) + ( M_PI - y_ ) * ( M_PI - y_ ); }
double g( double x_, double y_ ) { return x_ + y_; }
int main( int argc, char ** args ) {
vector< vector< double > > v;
for ( int i = 0; i <= 20; ++i ) {
double x = ( double ) i * 5.0 / 20.0;
vector< double > _tmp;
for ( int j = 0; j <= 30; ++j ) {
double y = ( double ) j * 6.0 / 30.0;
_tmp.push_back( max< double >( f( x, y ), g( x, y ) ) );
}
v.push_back( _tmp );
}
for ( size_t i = 0; i < v.size(); ++i ) {
cout << ( i * 5.0 / 20.0 ) << " ";
for ( size_t j = 0; j < v[ i ].size(); ++j )
cout << ", " << v[ i ][ j ] << " ";
cout << endl;
}
return 0;
}
なんかいまいちだけどまあいいや.
902デフォルトの名無しさん:2007/11/21(水) 06:42:13
[1] 授業単元:C言語
[2] expr.c : http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5308.txt
myexpr.c : http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5309.txt
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11/22
[5] その他の制限:設問2.をお願いします。設問1.と設問2.は別のプログラムとして提出します。
  設問2.は丸投げになりますが完成した状態のものをリンク張って頂けると嬉しいです。

問題文////////

1.算術式の逆ポーランド記法から中置記法への変換 (配点:70点)(設問1.は上記のmyexpr.c で解決済みです)

逆ポーランド記法で入力された算術式を、中置記法に変換して出力するプログラムを完成させよ。
(expr.c の print_tree を書き換える)
演算子の優先順序は全て同等とみなして良いが、その場合はカッコを使って出力すると良い。

2.算術式の中置記法から逆ポーランド記法への変換 (配点:30点)

設問1の逆を行なうプログラムを作成せよ。
cf.参考図書(C言語によるプログラミング応用編) p.205

問題文終わり////////

ちなみに授業中に先生が
 1 2 * 3 4 5 - / +   が  ((((5)-(4))/(3))+((2)*(1)))
とかになってもいいが括弧は少ない方が良い。
って言ってましたが自分のは括弧だらけでした。(でも減点は少ないそうです)
今から大学に行くので返事が遅れますがよろしくお願いします。
903デフォルトの名無しさん:2007/11/21(水) 09:13:01
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
今a.txt,b.txt,c.txt,d.txt,e.txtというファイルがある。(これらのファイルを<1>)
それぞれのファイルには「a」「b」「c」「d」「e」とかかれている。
また,A.txt,B.txt,C.txt,D.txt,E.txtというファイルがある(これらのファイルを<2>)
それぞれのファイルには「A」「B」「C」「D」「E」とかかれている。
<1>のファイルと<2>のファイルを読み込んでその中身を
aA
aB
aC
aD
aE
bA

という風に表示せよ。つまり5*5行になります。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:2007/11/21 24:00まで
[5] その他の制限:fscanfで読み込んでほしい。
904 ◆6mHr6w5qjU :2007/11/21(水) 09:16:56
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):ある文字列aの中にmarikoという綴りが含まれているかを調べ、あったら”あった” なかったら”なかった”と出力するプログラム(入力は6文字以上)
[3] 環境
 [3.1] OS:Windows/Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:11/22 17:00
[5] その他の制限:関数つかうなといわれた
おねがいします><
905デフォルトの名無しさん:2007/11/21(水) 09:22:08
教科書にかいてるだろ
906デフォルトの名無しさん:2007/11/21(水) 10:08:55
>>899さんありがとうでした!
もはや多少わからずとも仕方ありませんので、後日勉強という形に・・・w

by879
907デフォルトの名無しさん:2007/11/21(水) 10:08:58
ここのスレ
課題に対して、自分が作ったプログラムをはって
間違ってるところを直して書き直してくれることもしてるのですか?
908デフォルトの名無しさん:2007/11/21(水) 10:12:11
宿題レベルならたいしたことはないけど、間違ったコードの解析やらされるのは勘弁して欲しいところ。
一から作る方がよっぽど楽だから。
909デフォルトの名無しさん:2007/11/21(水) 10:15:42
>>907
とりあえずうpしてみたら?
見てから判断するから
910デフォルトの名無しさん:2007/11/21(水) 10:21:30
1000行以下であれば許容範囲だな
1ソース10000行とか見てるだけでやる気が失せる
911 ◆6mHr6w5qjU :2007/11/21(水) 10:21:37
>>905
かいてない
912デフォルトの名無しさん:2007/11/21(水) 10:25:30
>>904
無理だよ
913デフォルトの名無しさん:2007/11/21(水) 10:35:43
僕は53万行まで見てやるぜ
914 ◆XDczhj/YAM :2007/11/21(水) 10:40:39
[1] 授業単元: 配列と並べ替え
[2] 問題文(含コード&リンク):

次の一連の計算を実行し、指示通りに出力せよ。
1, 10名の学生の番号を 0 から9 とし、数学得点が、番号順に、75,65,68,80,67,79,89,98,66,70 であったとする。
学生番号は配列 no、得点は配列 math に代入し、これらをともに番号順に出力せよ。
2, 全学生の平均値と標準偏差を求め、出力せよ。
3, 高得点順に学生番号を並び替えて、その番号を出力せよ。
4, 高得点順に並んだ学生番号順にその得点を出力せよ。

・・・配列と並べ替え・・・
 HomeWork5  19.11.6    K3A01  山田太郎
--- 数学得点表 ---
0 1 2 3 4 5 6 7 8 9
75 65 68 80 67 79 89 98 66 70
平均値 = 75.699997   標準偏差 = 13.535139
--- 得点順 ---
7 6 3 5 0 9 2 4 8 1
98 89 80 ・・・・・

注1: 整数の表示で、書式を例えば %6d とすると、6桁の表示域が確保され、そこに整数値を出力する(p. 31)ので、表示の桁を揃えることができる。
注2: n 個のデータ xi の標準偏差は {(1/n)(xi-ave)^2}^(1/2) で求められる。平方根を求める標準関数 sqrt( double ) を用いる場合、ヘッダーファイル math.h のインクルードが必要(p. 240)。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語: C言語
[4] 期限: 11月21日 
[5] その他の制限: 関数使用 よろしくお願いします。
915デフォルトの名無しさん:2007/11/21(水) 10:57:57
[1] 授業単元:確率論
[2] 問題文(含コード&リンク):
前に>>246で宿題をださせていただきました。
これを対数で計算できるように変更していただきたいんですが。
正しい値がでるプログラム(前につくってもらった)
と今つくってるプログラムと2つのせました。

この前5回くらいの移動までの数値があってるからそのあとはいいかとおもって
できたとおもってたんですけど、7回目くらいから同じ値でとまってしまって。
図はこれです
http://www.borujoa.org/upload/source/upload15106.jpg

以前つくってもらったプログラムの値をlogでだしてみたプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5311.c
移動確率を対数でだして計算していったプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5312.c

logの計算途中で-infとかnanとかでてくるので
それを調べるためにprintf文大量に使ってますけど
みにくかったら消してください。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 21日おわるくらいまでには
[5] その他の制限: 特になし

よろしくお願いします。
916デフォルトの名無しさん:2007/11/21(水) 11:50:16
1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://users.kyoto-kcg.ac.jp/~k-konishi/Program/CProgram/section1-10.htm
[3] 環境
 [3.1] OS: (Windows)
 [3.3] 言語: (C++)
ここのサイトの演習1−24がわからずに困ってます。わかる方がいましたら教えてください。
[4] 期限:今日中


917デフォルトの名無しさん:2007/11/21(水) 14:36:16
最近C書いてないから文法とかは自信ないが下の関数の戻り値が1以上なら不整合ってことでおkだと思う。
行数制限あるからブレースは極力省いてある。
char[] braces = "\"\"''()[]{}";
int CheckBraces(char* target)
{
int len = strlen(target);
int i, j, stackcnt=0;
char[256] buf;
for(i=0; i<len; i++)
{
for(j=0; j<10; j+=2)
if(target[i] == braces[j])
buf[stackcnt++] = braces[i+1];

for(j=1; j<10; j+=2)
if(target[i] == buf[j])
{
//異なる引用符の中なら無効
if(target[i] == '\'' && buf[stackcnt] == '"' || target[i] == '"' && buf[stackcnt] == '\'') continue;

//エスケープ確認
if(target[i] == '\'' || target[i] == '"')
if(target[i-1] == '\\')
if(target[i-2] == '\\')
buf[stackcnt--] = 0;
else continue;
buf[stackcnt--] = 0;
}
}

return stackcnt;
}
918デフォルトの名無しさん:2007/11/21(水) 14:46:15
>>916-917
米の処理忘れたからそこら辺は自分でやってくれ。
\n//が出現したらその次の\nまで無視、/*がでたら次の*/まで無視で良い。
当然行コメントのほうが優先順位高いから注意な。
919デフォルトの名無しさん:2007/11/21(水) 15:03:45
>>916-918
米判別機能つきの修正版。
全角SP*2→タブに変換して使ってくれ。
//括弧や引用符のリスト。
//偶数に始まり、奇数に終わりの文字を記入する。
char[] braces = "\"\"''()[]{}";

//括弧や引用符の整合性を簡易的に確認する関数。
int checkBraces(const char* target)
{
  int len = strlen(target);  //targetの文字長を取得。
  int i, j, stackcnt=0;    //ループ変数とスタックカウンタ。
  int flg_cmnt;        //コメントフラグ。
  char[256] buf;        //スタックにする配列。
  for(i=0; i<len; i++)
  {
    //行コメント確認
    if((i==0 || target[i] == '\n') && target[i+1] == '/' && target[i+2] == '/')
    {
      while(target[i+1] != '\n') i++;
      continue;
    }
    
    //複数行コメント終了確認
    if(flg_cmnt && target[i] == '*' && target[++i] == '/')
    {
      flg_cmnt = 0;
      continue;
    }
    
    //複数行コメント開始確認
    if(target[i] == '/' && target[++i] == '*')
920特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 15:04:51
>>919の続き
    {
      flg_cmnt = 1;
      continue;
    }
    
    //開始文字列一致確認
    for(j=0; j<10; j+=2)
    {
      if(target[i] == braces[j])
      {
        //一致したら終了文字列をスタックに追加。
        buf[stackcnt++] = braces[i+1];
      }
    }
    
    //終了文字列一致確認
    for(j=1; j<10; j+=2)
    {
      if(target[i] == buf[j])
      {
        //異なる引用符の中なら無効
        if(target[i] == '\'' && buf[stackcnt] == '"' || target[i] == '"' && buf[stackcnt] == '\'')
        {
          continue;
        }
        
        //引用符エスケープ確認
        if(target[i] == '\'' || target[i] == '"')
        {
          if(target[i-1] == '\\')
          {
921特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 15:05:46
>>920の続き
            if(target[i-2] == '\\')
            {
              buf[stackcnt--] = 0;
            }
            else continue;
          }
        }
        
        //一致かつ諸般の問題がない場合はスタックから削除。
        buf[stackcnt--] = 0;
      }
    }
  }
  
  return stackcnt;
}
922デフォルトの名無しさん:2007/11/21(水) 16:21:28
>>901
ありがとうございます。
923デフォルトの名無しさん:2007/11/21(水) 16:31:44
>>904
mainもprintf等入出力も関数なんだけども
924特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 17:23:37
>>923
関数に分離するなって意味じゃないの?
925デフォルトの名無しさん:2007/11/21(水) 17:36:46
>>733 期限過ぎておりますが、再度お願いします。
926デフォルトの名無しさん:2007/11/21(水) 17:59:53
>>924
んなこといったら
if(strstr(s,"mariko"))printf("あった\n");//sは文字列
else printf("なかった\n");
でいいってことになるぞ
つか>>912>>923もわかってて言ってるんだと思う
927特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 18:08:02
>>926
そういうことかww
要するに文字列=文字の配列ってことを理解させるための問題なわけね。
928デフォルトの名無しさん:2007/11/21(水) 19:33:01
915ですけどやってくださってるかたいますか?
929デフォルトの名無しさん:2007/11/21(水) 20:05:49
C言語の授業でてますが全くうんこ
どうしよう
930デフォルトの名無しさん:2007/11/21(水) 20:08:41
>>929
水に流そう
931デフォルトの名無しさん:2007/11/21(水) 20:09:19
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):以下に示す関数をfunc( 3 )と呼び出した時の実行結果を書きなさい。
void func(int no)
{
if( no > 0){
func( no-1 );
printf(“%d “, no);
func( no-2 );
}
}

[3] 環境  [3.1] OS: Windows/Linux/等々)
 
 [3.3] 言語: C言語
[4] 期限: ([2007年12月13日
932デフォルトの名無しさん:2007/11/21(水) 20:15:44
[1] 授業単元: c
[2] 問題文(含コード&リンク): 名前と点数を格納するデータ部を持つ自己参照型構造体を定義し、
線形リストを実装しなさい。

・構造体の名前は struct grade とし、新たに glist 型として定義する。
・構造体のメンバは、char name[40]、int score、及びポインタnext。
・ノードは3つ作成し、それぞれキーボードからデータを入力する。
・ポインタに値を代入し、ヘッダhdと3つのノードの間を繋ぐ。
・読み出し用のポインタpを使って、リストのデータを順に画面に出力する。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: c
[4] 期限: 11/22まで
[5] その他の制限: #defineはなしで
933デフォルトの名無しさん:2007/11/21(水) 20:26:11
>>930
流しきれないほどうんこでした。
どうしましょう?
934デフォルトの名無しさん:2007/11/21(水) 20:32:15
>>933
手で揉み解して少しずつ流せ。
935902:2007/11/21(水) 20:51:21
どなたか>>902お願いできませんか?
明日の9:00締切りなんで実質今日までです。

自分で書いた設問1.のmyexpr.cの方はp->left_childとp->right_childが逆だったみたいです。
936デフォルトの名無しさん:2007/11/21(水) 20:54:55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): eの近似値を求める

eの値は、次の近似式で求めることができる。

e=1+1/1!+1/2!+1/3!+1/4!+……+1/(n-1)!+1/n!

nの値を12として、eの近似値を求めるプログラムを作成せよ。
但し、eの値に近づいて行く様子を以下のように出力させるものとする。

n      n! 1/n! e   誤差
1      1  1.0000000000 2.0000000000 0.7182818285
2      2  0.5000000000 2.5000000000 0.2182818285
== == ============ ============ ============
12  XXXXXXXXX X.XXXXXXXXXX X.XXXXXXXXXX X.XXXXXXXXXX

(小数点は10桁まで表示)

 尚、誤差は、eの真値と近似値との差 exp(1.0)-e である。
 nまでの余白は5文字文、nからは全て15ずつ空けます。
 出力形式が詰まってしまい見にくくて申し訳有りません。


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: C++
[4] 期限: 2007年11月22日午前10時まで
[5] その他の制限:難しいやり方はほとんど習っていないので途中までと
         同じようなやり方でやっていただけると幸いです。

途中まではやったので次に載せます。
937デフォルトの名無しさん:2007/11/21(水) 20:55:55
>>934
それでも流れないのでたべてしまいました
938936:2007/11/21(水) 20:58:00
#include <iostream>
#include <iomanip>
using namespace std ;
int main()
{
int n, ni(1) ; ←←←←←←←←←
cout << setiosflags(ios::fixed) ;

cout << setw(5) << "n" << setw(15) << "n!" << setw(15) << "1/n!"
<< setw(15) << "e" << setw(15) << "誤差" << endl ;

for ( n=1 ; n<=12 ; ++n )
{
ni*=n ;

cout << setw(5) << n << setw(15) << ni << endl ;
}
return 0 ;
}

矢印のところと1/n!、eの出し方がよくわかりませんでした。
あとは合っていると思いますが間違っていたらすいません。
宜しくお願いします。
939特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 21:05:05
>>931
1231
940デフォルトの名無しさん:2007/11/21(水) 21:15:00
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):以下のような、関数形式マクロで値が負、零、正で、-1、0、1を返すsign()を定義するように、□の中に文字を入れなさい。
#     sign(x) ( )
[3] 環境  
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限:2007年11月24日

941デフォルトの名無しさん:2007/11/21(水) 21:31:17
今日ファイル入出力について学んだ。
無限にファイル生成も覚えた。
NULLとEOFを間違えて書いた。
気がついたら10GBのテキストファイルになってた。
942特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 21:41:12
>>937-938
#include <stdio.h>
#include <math.h>

int kaijou(int number)
{
int result = 1;
for(; number>0; number--)
{
result *= number;
}
return result;
}

int main()
{
int i;
double neip=0;
double prev_neip=0;
double kaijyo=1;

printf(" n|n! |1/n! |e |誤差\n");
for (i=0; i < 12; i++)
{
neip = neip + 1/kaijyo;
kaijyo = kaijyo * (i+1);
printf("%2d|%10d|%11.10f|%11.10f|%11.10f\n", i+1, kaijou(i+1), 1.0/kaijou(i+1), neip, exp(1.0)-neip);
prev_neip = neip;
}
}

943特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 21:44:11
>>942修正版
#include <stdio.h>
#include <math.h>

int kaijou(int number)
{
    int result = 1;
    for(; number>0; number--)
    {
        result *= number;
    }
    return result;
}

int main()
{
    int i;
    double neip=0;
    double prev_neip=0;
    double kaijyo=1;

    printf(" n|n!        |1/n!        |e           |誤差\n");
    for (i=0; i < 12; i++)
    {
        neip = neip + 1/kaijyo;
        kaijyo = kaijyo * (i+1);
        printf("%2d|%10d|%11.10f|%11.10f|%11.10f\n", i+1, kaijou(i+1), 1.0/kaijou(i+1), neip, exp(1.0)-neip);
        prev_neip = neip;
    }
}
944特急きりしま16号 ◆EXPRSXEAm6 :2007/11/21(水) 21:46:26
>>940
#sign(x) ((x == 0) ? 0 : (x > 0) ? 1 : -1)
945デフォルトの名無しさん:2007/11/21(水) 21:53:16
>>938
変数追加しちゃだめなの?
double e(1);

e += 1/ni;
あと矢印って何がわからないんだろうコンストラクタで初期化してる部分?
n(1)はn=1
946945:2007/11/21(水) 21:54:48
先にちゃんとしたのでてるし
ぜんぜん更新してなかった・・・
947デフォルトの名無しさん:2007/11/21(水) 21:55:42
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

整数aが入力されたとき、
k
a=蚤i2^iと展開する。 そのときのa0〜akを出力せよ。
i=0

aiは0か1である。

たとえば
a=5のときは

5=1×2^0+0×2^1+1×2^2で、a0=1 a1=0 a2=1である。


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 明後日
[5] その他の制限: 特には無いです
948デフォルトの名無しさん:2007/11/21(水) 22:01:40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):記憶領域に確保された定数8を4乗した解をGR2に求めなさい。
計算時間が40秒を越すと無限ループとみなされるため、計算速度の速いアルゴリズムが望ましい。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:CASLU
[4] 期限:11月22日
949デフォルトの名無しさん:2007/11/21(水) 22:16:33
>>947
#include <stdio.h>
int main()
{
int a,b,i;
printf("a=");
scanf("%d",&a);
b=a<0?-1:1;
a=a<0?-a:a;
for(i=0;a!=0;i++,a>>=1)
printf("a%d=%d\n",i,(a&1)*b);
return 0;
}
950デフォルトの名無しさん:2007/11/21(水) 22:20:39
どうやったらC言語できるようになったん?
951デフォルトの名無しさん:2007/11/21(水) 22:23:53
>>950
とりあえず簡単なcのルールを一日で覚える。

bsdあたりのソースを一年くらいかけて読む。

わからないことがあったら調べて自分なりにコメントを書く。


そうしたら俺はこうなった。
952デフォルトの名無しさん:2007/11/21(水) 22:27:58
ルールはわかってきたんだけど
いざ書こうとすると全然だめ・・・。
コツおしえて
953デフォルトの名無しさん:2007/11/21(水) 22:29:29
わかったつもりにならず、暗唱できるまで勉強しろ
そうすれば書ける
954デフォルトの名無しさん:2007/11/21(水) 22:30:47
>>952
それはお前がひとつのことに集中できないからだ。


そんなお前には不可能














ただやりたいなら、一つのことを死ぬまで研究するつもりで作れ。
C言語のためのお前なのか、お前のためのC言語なのかよく考えろ。
955デフォルトの名無しさん:2007/11/21(水) 22:35:42
ぶっちゃけた話コピペするのがいいと思うよ
考えて書いてもコピペしてもどっちもコンピュータ上のデータにはかわりないんだから
956デフォルトの名無しさん:2007/11/21(水) 22:36:34
そういう世界なんですね。。甘くみていました。。。
で、どうすんだwwww
957デフォルトの名無しさん:2007/11/21(水) 22:39:59
>>956
クズプログラマーなら腐るほどいる

けど、

その中のトップを狙いたいなら
958デフォルトの名無しさん:2007/11/21(水) 22:43:52
寝れ
959デフォルトの名無しさん:2007/11/21(水) 22:44:16
だとさ。
960デフォルトの名無しさん:2007/11/21(水) 22:53:30
あんがい関数型言語から入ってしまったほうが良いという人はいるから
Cはいったん諦めて関数型言語から入ってみたら?
961デフォルトの名無しさん:2007/11/21(水) 23:14:05
ちょっとみんなスルーしてるけど
>>948
CASL2!!!
962デフォルトの名無しさん:2007/11/21(水) 23:29:19
[1]授業単元:Cプログラミング
[2]問題文:|π^2/6-(k=1からN)1/k^2|<ε
      π=3.14159265の値を用いて入力された数値εに対して、上の不等式を満たす最小の自然数Nを求めるプログラムを作れ
      ただし、ε=0.000001
[3]環境:1 OS:Linux
2 コンパイラ名とバージョン:gcc
3 言語:c
[4]期限:明日
[5]その他:特になし

for,breakなどを使うんですけど、どうしてもわかりません。
宜しくお願いします。
963デフォルトの名無しさん:2007/11/21(水) 23:30:49
>>936
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std ;
int main() {
cout << setiosflags(ios::fixed) ;
cout << setw(5) << "n" << setw(15) << "n!" << setw(15) << "1/n!" << setw(15) << "e" << setw(15) << "誤差" << endl ;
int ni(1);
double e(1);
for ( int n = 1 ; n <= 12 ; ++n ) {
ni *= n ;
e += 1.0 / ni;
cout << setw(5) << n << setw(15) << ni << setw(15) << 1.0/ni << setw(15) << e << setw(15) << exp(1.0) - e << endl ;
}
return 0 ;
}
964デフォルトの名無しさん:2007/11/21(水) 23:37:33
lisperのおとおりだ。
965デフォルトの名無しさん:2007/11/21(水) 23:39:33
>>949
ありがとうございます。
(a&1)ってなんですか?
966デフォルトの名無しさん:2007/11/21(水) 23:41:13
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):最大20桁の整数を5つ入力させ、int型配列にそれぞれ格納。入力終了後
5つの数値の和を求め出力する。なお、20桁までを有効とし21桁以降は無視。負の数、整数以外
改行のみの場合はそれぞれエラー表示をし、終了する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 11月27日09:00まで
よろしくお願いします
967デフォルトの名無しさん:2007/11/21(水) 23:44:23
>>965
aと1の論理積
aが偶数なら0、奇数なら1になる。
968デフォルトの名無しさん:2007/11/21(水) 23:44:29
高さ情報が入った配列[m][n]があります。
この高さ情報から画像を生成すると時に、傾いているとうまくできません。
うまいこと高さを補正する方法ないですか?
969デフォルトの名無しさん:2007/11/21(水) 23:46:40
>>967
わかりました。 あとfor文で
for(i=0;a!=0;i++,a>>=1)みたいな書き方はじめてみたんですが、なんですか?i++の右にあるやつです
970デフォルトの名無しさん:2007/11/21(水) 23:50:53
自分で調べろそれくらい
971デフォルトの名無しさん:2007/11/21(水) 23:52:33
>>962
#include <stdio.h>
#define EPS 0.000001
#define PI 3.14159265
main( ){
int k;
double diff, tmp = 0, p2 = ( PI ) * ( PI ) / 6.0;
for ( k = 1;; k++ ) {
tmp += 1.0 / ( ( ( double ) k ) * k );
diff = p2 < tmp ? tmp - p2 : p2 - tmp;
if ( diff < EPS ) break;
}
printf( "N=%d ; pi^2/6=%.15lf; 1/1+...+1/N^2 = %.15lf; diff=%.15lf \n", k, p2\
, tmp, diff );
}
972デフォルトの名無しさん:2007/11/21(水) 23:58:36
>>971
ありがとうございます。助かりました。
973デフォルトの名無しさん:2007/11/22(木) 00:02:04
>>969
パーソナライズ i++ に一致する日本語のページ 約 717,000 件中 1 - 10 件目 (0.29 秒)
http://www.google.co.jp/search?hl=ja&q=i%2B%2B&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
974デフォルトの名無しさん:2007/11/22(木) 00:04:36
>>973
i++はわかるんですが、for文の構文がわからないんです。
975デフォルトの名無しさん:2007/11/22(木) 00:05:17
入門書読めカス
976デフォルトの名無しさん:2007/11/22(木) 00:06:28
>>974

パーソナライズ for i++ に一致する日本語のページ 約 677,000 件中 1 - 10 件目 (0.17 秒)
http://www.google.co.jp/search?hl=ja&q=for+i%2B%2B&lr=lang_ja


すぐみつかったけど?
977デフォルトの名無しさん:2007/11/22(木) 00:10:18
>>976
;i++,a>>=1みたいに2つになってるのはなんなんですか?1回回るたびにi++とa>>=1を行うんですか?
978デフォルトの名無しさん:2007/11/22(木) 00:16:35
>>977
そういうこと
って宿題丸投げスレと質問スレは別なのでよろしく
979デフォルトの名無しさん:2007/11/22(木) 00:17:27
>>977
なんで自分で調べようとしないの?




そんな奴はプログラマにはなれない。
980デフォルトの名無しさん:2007/11/22(木) 00:18:13
>>977

for(初期化の式;繰り返しの条件;変化式)


お前最高のあほ。
981デフォルトの名無しさん:2007/11/22(木) 00:21:11
教科書にのってそうなプログラムを大量に宿題にされて
自分の出したやつ流れちゃた
982デフォルトの名無しさん:2007/11/22(木) 00:22:09
>>981
初期設定を日本語にして
983デフォルトの名無しさん:2007/11/22(木) 00:22:10
>>968
難しい日本語だが、きっとこういうことだろう。
http://dsl4.eee.u-ryukyu.ac.jp/DOCS/gnuplot/node123.html
984983:2007/11/22(木) 00:34:01
アドレス張った後で読んでみたら、希望してそうなのと違うっぽいw
985936:2007/11/22(木) 00:43:15
皆さんありがとうございました。
ほんとに基本プログラミングなんで943さんの
やり方なんかはよくわからないのですが
963さんに同じようなやりかたをしていただき
なんとなくですがやり方がわかりました。

ちなみに←のところはどれを整数、変数にすればいいのかが
よくわかりませんでした。

お手数をおかけしましたがありがとうございました。
986デフォルトの名無しさん:2007/11/22(木) 00:47:03
Cの超ビギナーなんですが、宿題で
あなたの名前を入力しなさい
と表示させて、名前を入力して、入力したものを最後にもう一度表示させなさい
というのがあります。
みんなは
一分でできんじゃんばかじゃね〜
と言ってきますが無理です、3日たちました。
charを使っての入力の段階で何故か漢字で入力できません。
アルファベットになります。なぜでしょうか?
987デフォルトの名無しさん:2007/11/22(木) 00:47:35
>>986
Alt+半角 つかスレ違い
988デフォルトの名無しさん:2007/11/22(木) 00:54:08
すいませんでした
989デフォルトの名無しさん:2007/11/22(木) 01:14:24
>>948 スレ違いにも程がある.
POW4 START
LAD GR7, 2 ;
LD GR2, DAT
LL LD GR5, GR2
LD GR4, GR2
XOR GR2, GR2;
L0 SRL GR4, 1
JOV L1
JZE L3
JUMP L2
L1 ADDA GR2, GR5;
L2 SLA GR5, 1
JUMP L0
L3 SRL GR7, 1
JNZ LL
RET
DAT DC 8
END
たぶんあってると思うがつぎからは ttp://www.chiba-fjb.ac.jp/fjb_labo/casl/casl2.cgi
アセンブラ… Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1187079488/ にでも行け
990デフォルトの名無しさん:2007/11/22(木) 01:18:40
>>986

#include <stdio.h>
int main(a){
scanf("%d",&a);
printf("%d",a);
retrun}
991デフォルトの名無しさん:2007/11/22(木) 01:25:31
演習 1-20 入力されたタブを,次のタブ・ストップまでのスペースをうめる適当な数のブランク(空白)で置き換えるプログラム detab を書け。タブ・ストップの位置は,例えば n文字ごとというように固定して考えよ。n は変数にすべきか,記号パラメータにすべきか?

演習 1-21 ブランクの列を同じスペーシングを行なう最小のタブおよびブランクで置き換えるプログラム entab を書け。detab と同じタブ・ストップを使え。タブ・ストップに達するのに,タブあるいは単一のブランクのいずれかで十分なときに,どちらを使うべきか?

演習 1-22 長い入力行を,入力の n文字目までにある最後の非ブランク文字の後で,“折りたたむ”プログラムを書け。プログラムは,行が非常に長くても,また指定桁までにブランクもタブもない場合についても,ちゃんと動作するようにせよ。

演習 1-23 Cプログラムからすべてのコメントを除去するプログラムを書け。引用符で囲まれた文字列や文字定数を正しく扱うことを忘れないこと。Cのコメントは入れ子になっていない。

演習 1-24 カッコ,中カッコ,大カッコのつりあいがとれていないといったプログラムの基本的な構文エラーのチェックを行なうプログラムを書け。引用符・二重引用符・コメントなどの処理も忘れないこと。(このプログラムを完全に汎用的にすると,これを書くのは難しくなる)
992デフォルトの名無しさん:2007/11/22(木) 01:29:29
線は細いがパンチ力があり、長打が期待される選手。もとも
とは内野手としての入団で、01年後半から外野に転向した。
1,2年目はほとんど実績なしだったが、01年4ホーマーを
放ち存在をアピール。翌年も5ホーマーを放ち、どちらかといえば
非力なタイプが多いチームの中でパンチ力が目立った。しかしこの年は
定位置確保が期待されながら打率低迷で足踏み。03年も終盤まで故障で
二軍暮らしと、期待は大きいのだがもう一つ感がなかなか抜けない。
細身で一見非力に映るが、リストの強さで長打力が高い。ただ一軍半の
状態が長く、出てきたかと思えば後退と隔年傾向。なかなか印象に残る
活躍を見せられない。04年100打席を越えながら、翌年はまたほとんど
二軍暮らし。
内野に再挑戦した昨年は久々に勢いを見せ、6月以降一軍定着。
軸に期待された清原・中村紀が誤算に終わった中、自己最多の11ホーマーを
放ち遅まきながらも開花の兆しを見せた。しかしこれが続かない。
今季はまたほとんど二軍暮らしに終わり、01年以降では最少の出場機会。
しかも打率1割台と散々に終わってしまった。
どうもスタミナが不足なのか、好調シーズンでも活躍が長続きしない。足踏みを続けているうちにもう30歳を越え、いい加減「期待の戦力」とは言っていられなくなってきた。完全に上に食い込むようでないと、そろそろ立場も危うい。正念場。
993デフォルトの名無しさん:2007/11/22(木) 01:30:35
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):ある文字列aの中にmarikoという綴りが含まれているかを調べ、あったら”あった” なかったら”なかった”と出力するプログラム(入力は6文字以上)
[3] 環境
 [3.1] OS:Windows/Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:11/22 17:00
[5] その他の制限:関数つかうなといわれた
おねがいします><
994デフォルトの名無しさん:2007/11/22(木) 01:31:30
時効警察」などに出演していたタレントの星野奈津子(20)の所属事務所は21日、星野が自身の公式ブログ「なっちゃん家」で不適切な発言をしたとして
1年間の活動停止処分としたと発表した。事務所名で、星野のブログに処分
内容を記した謝罪文を掲載した。
 星野は11月19日付のエントリーで、「今我が家で1番話題なのが、
祖母と3才5才の姉妹が行方不明になった事件」として、香川県で発生した
家族3人が不明となっている事件の犯人を特定するかのような表現をしていた。

 星野は事務所の謝罪文に続いて、自らブログに「今回の私のブログでの
記事に関して、大変不適切な発言をしてしまいました事を深く反省して
おります」と書き込み。「この事を真摯に受け止め芸能活動を自粛致します」
と本当にご迷惑をお掛けしまして申し訳ございませんでした」と謝罪した。
995デフォルトの名無しさん:2007/11/22(木) 01:32:00
100get
996デフォルトの名無しさん:2007/11/22(木) 01:32:50
我が家では今、変な写真が流行ってるんです。


仲良し家族。


家族皆でニュースを観ながらあぁだこぅだ言うのが大好きで、

今我が家で1番話題なのが、祖母と3才5才の姉妹が行方不明になった事件。


『あれは絶対父親の仕業だよ!』
『父親がいい!あんだけテレビで証言してるけど、実は犯人でしたって捕まるのが見たい!』

とかそんな話で持ち切り!!


あとはマレーグマのツヨシの苦悩ポーズ!カワユス(^O^)
997デフォルトの名無しさん:2007/11/22(木) 01:36:03
998デフォルトの名無しさん:2007/11/22(木) 01:37:23
999デフォルトの名無しさん:2007/11/22(木) 01:38:29
1000デフォルトの名無しさん:2007/11/22(木) 01:38:29
1
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。