ぼるじょあがC/C++の宿題を片づけますYO! 25代目

このエントリーをはてなブックマークに追加
1ぼるじょあ ◆yBEncckFOU
(・3・)アルェー 実は他の人にまかせっきりのC++房のぼるじょあですYO!
わからない宿題を片づけますYO!

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10
2デフォルトの名無しさん:04/06/23 03:43
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
C/C++の宿題は拙者にお任せあれ
http://pc5.2ch.net/test/read.cgi/tech/1087913517/
4デフォルトの名無しさん:04/06/23 03:53
>>3
そっちはスレ番がないから立て直した。
次スレの報告も無かったしな
アルェー
7デフォルトの名無しさん:04/06/23 10:26
これをやっていただけませんか↓

順序つき集合Aを保存する2分探索木に対して,次の4種類の操作を選択して動作するプログラムbintree.cを作成せよ.ただし木の節点には整数を保存するものとする.

INSERT(x,A)
DELETE(x,A)
MEMBER(x,A)
MIN(A)
登録番号"int no"と名前"char name"と年齢"int age"を含む構造体person型の
配列を定義し初期化せよ。なお最後のデータにはNULLを入れておく。
登録番号は入力順に1,2,3,4,5とする。配列の先頭アドレスを指す構造体
person型のポインタを引数として与え、データを入力順に並び替える関数を作成せよ
(・3・)ヨロシクぬるぽ
9デフォルトの名無しさん:04/06/23 13:12
>>8
10デフォルトの名無しさん:04/06/23 13:17
>>8
問題文が変だな
>>8
解こうと思ったが、問題文がよくわかりません。
・char name ← 名前一文字…?
・初期化って…? どんな感じに初期化…?
・入力したあと入力順に並び替える…? 
 普通データなんて入力順に並んでいるのでは
12涙涙のプログラマ:04/06/23 17:03
#include <stdio.h>
#include <stdlib.h>
#define size 20

void main(){
int i,length,mmm;
char c[size+1];
char rc[size+1];

printf("文字を入力(%d文字以下):",size);
scanf("%s",c);

i=0;
while( *(c+i) != '\0') i++;
length = i;
if(length>size){
printf("%d文字以下で入力してください!\n",size);
exit(-1);
}

printf("\n\n元の文字列: %s \n\n",c);
for(i=0; i<length; i++)
rc[i]=c[length-i-1];
rc[length]='\0';

printf("入れ替えた文字列: %s \n",rc);

printf("\n\n何か入力すると終了します。\n ");
scanf("%d",&mmm);

}
13涙涙のプログラマ:04/06/23 17:04
↑↑↑
rc[size+1] のポインタを引数にとり、文字列を入れ替えて
指定された配列に保存する関数reverseを作り
この関数を使ってプログラムを書き換えるって・・・
分からなくて泣きそうです・・(´ω`涙・・・助けて下さい
なけばいいじゃん
。・゚・(ノ∀`)・゚・。
2次方程式ax^2+bx+c=0の係数a,b,cを入力し
解が存在するかを判定するプログラムを作成せよ

初歩的なことですがCでお願いします。
>>13
問題のためのCだネ.問題解決の為のCになっとらん.てわけで答えだYO

#include <stdio.h>
#include <stdlib.h>
#define size 20

void reverse(int l,char *p,char *q){
int i;
for(i=0; i<l; i++) q[i]=p[l-i-1]; q[l]='\0';
}
void main(){
int i,length,mmm; char c[size+1]; char rc[size+1];

printf("文字を入力(%d文字以下):",size); scanf("%s",c);
i=0; while( *(c+i) != '\0') i++; length = i;
if(length>size){ printf("%d文字以下で入力してください!\n",size); exit(-1); }
printf("\n\n元の文字列: %s \n\n",c);
reverse(length,c,rc);/* 追加された部分*/
printf("入れ替えた文字列: %s \n",rc);
printf("\n\n何か入力すると終了します。\n ");
scanf("%d",&mmm);
}

改行規制うぜ
18涙涙のプログラマ:04/06/23 18:42
ああぁ泣けました・・・

スゲ―――(゚∀゚)―――――!!
すぐ出来ちゃうんですね・・・
有り難うございました(号泣
19デフォルトの名無しさん:04/06/23 18:44
>>18
ていうかこれでいいのかね?
文字列交換のところだけ関数化しただけなんだが・・・・
>>16

ありがとうございます、感謝です

21涙涙のプログラマ:04/06/23 19:06
関数reverse使ってるから良いとは思いますけど・・・
内容分からないので・・・完動してますし
17殿のプログラムを信じて・・・関数プログラミングOKと思ってます。
>>15
判別式つかえばいいじゃん
23デフォルトの名無しさん:04/06/23 19:37
ある会社で出張するための旅費が計算されました。係りの者が銀行でどの紙幣・硬貨が、どれだけ引き出せばよいかを処理するためのプログラムをつくりなさい。ただし、下の金種計算サブプラグラムを使用することとする。

データ:38832 25896 0
――――――――――――――――――――――――――――――――――――
実行結果:
金額を入力してください。0を入力すると合計を出力して終了
38832
10000 5000 1000 500 100 50 10 5 1
  3    1    3    1   3    0   3   0    2
25896
   2    1    0   1    3   1   4   1   1
0
   5    2    3   2    6   1   7   1   3
――――――――――――――――――――――――――――――――――――
/* 金種計算プログラム */
long kazu(long,long,long*);
void kinsyu(long n,long d[]){
long a;
n=kazu(10000,n,&a);
d[0]=a;
n=kazu( 5000,n,&a);
d[1]=a;
n=kazu( 1000,n,&a);
d[2]=a;
n=kazu( 500,n,&a);
d[3]=a;
n=kazu( 100,n,&a);
d[4]=a;
n=kazu( 50,n,&a);
d[5]=a;
n=kazu( 10,n,&a);
d[7]=a;
d[8]=n;
}
long kazu(long k,long nn,long *s){
*s=nn/k;
nn=nn-(*s)*k;
return nn;}
――――――――――――――――――――――――――――
>>23
このままじゃ計算できんのでkinsyu()はちょっと修正してある。
あと貼るときにmain()の最後の}忘れちまったので加えといてくれ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=126
>>25
サンクス
逆関数法を用いて自分で決めた密度関数に従う確率変数(乱数)を生成しなさい。
これをヒストグラムに描いて生成した乱数が目的とする分布に従うことを確かめなさい。
という問題なんですがどうか!よろしく御願いしますm(_ _)m
>>27
分布関数の逆関数を作って、その関数に一様乱数(rand とかで作れる乱数)を渡すだけ。
>>28
>分布関数の逆関数を作って
これを数値的にやれって問題じゃないの?
>>29
正規乱数とか、数値計算っぽい今年なくても、log と sqrt で出来るし。
てか、rand()を自分で作れってことじゃないのか?
3227:04/06/24 00:36
(1)逆関数法を用いて自分で決めた密度関数に従う確率変数(乱数)を作成しなさい。
レポートには目的とする分布の密度関数及びどのようにして生成したかをまとめる事。
また、生成した確率変数の平均と分散を計算しておくこと
(2)↑のヒストグラムを描いて生成した乱数が目的とする分布に従っていることを確かめる
目的とする密度関数とヒストグラムを重ねて描け。縦軸注意。
が全文です。乱数はrandでいいんですが、逆関数法をどうやって表せばいいかわかりません。
どうか御願いします〜
>>32
逆関数法って用語を無視すれば乱数の特殊な場合である

double my_rnd(void){
return 0;
}

で確率密度関数 δ(x) の乱数を表現できるけど、逆関数法って何?
27じゃないけど
逆関数法による乱数の作り方
U を一様分布に従う確率変数とし,F を任意の一次元の累積分布関数とする.
(0, 1) 区間 t に対して逆関数 F^(-1) (t) = inf { x | F(x) ≧ t } を定義すると,X = F^(-1) (U) は
P( X ≦ x ) = P( F^(-1) (U) ≦ x ) = P( U ≦ F(x) ) = F(x)
となることより X は分布関数 F に従う.よって,分布関数の逆関数の引数に一様乱数を入れてやれば,欲しい分布の乱数が得られる.
だとさ
358:04/06/24 01:11
うわぁぁぁ。問題文にミスがありました。ごめんなさい
指摘レスくれた方すみません。下が正確なものです
登録番号"int no"と名前"char *name"と年齢"int age"を含む構造体person型の
配列を定義し初期化せよ。なお最後のデータにはNULLを入れておく。
登録番号は入力順に1,2,3,4,5とする。配列の先頭アドレスを指す構造体
person型のポインタを引数として与え、データを年齢順に並び替える関数を作成せよ
>>34
そうならば>33 でもいいような気がしてきた。
分布関数の逆関数を(プログラムで書ける形で)求めるなんて一般にはできないんだし。

>>35
>下が正確なものです
これ、正確なの?僕は未だに問題の意味がわからない。
3735:04/06/24 01:30
>>36
うーむ。今度は間違いなく正確です
>>35
俺もいまだにわからない。
・初期化せよ←これって例えばperson p[5];でいいの?
・最後のデータにNULLを入れる←?

わかっていること↓
・5つのデータを入力
・最後にデータを年齢順にソート
3935:04/06/24 01:45
ぬーん。明日、先生を問い詰めてみます。
レスくれた方ありがとう。おやすみなさい
>>27
まず,(1)の数学的な部分(レポート作成)を自分でやれ。
そして,求めた分布関数の逆関数を数学的な式で書き込むこと。
そうすりゃ,その分布逆関数組み込んだ(2)を作ってやる。

>>40
激しく同意
数学的な部分は調べるのメンどーだ
42デフォルトの名無しさん:04/06/24 18:17
うるう年は、4で割り切れ、かつ、100で割り切れない年、400で割り切れる年
のどちらかに当てはまる年である。
キーボードから西暦を入力させ、入力された年がうるう年かどうか判定し、
うるう年ならば、「xxxx年はうるう年です。」
そうでなければ、「xxxx年はうるう年ではありません。」
と表示するプログラムを作りなさい。
ただし,うるう年かどうかを判定する部分は,main関数とは別の関数を自分で作成すること。


という問題です。
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);

if


でこのあとがわかりません。教えてください!
n%4 ... 4 で割ったあまりを表す。
はい、頑張ってみようー
>>43
4000年で割り切れる年っていう条件が抜けてるよ
14 名前:デフォルトの名無しさん[sage] 投稿日:04/06/24 18:17
y%4 == 0 && y%100 || y%400 == 0

15 名前:デフォルトの名無しさん[sage] 投稿日:04/06/24 18:19
>>13
ここは重複スレだから、本スレでどうぞ。
http://pc5.2ch.net/test/read.cgi/tech/1087929711/

16 名前:デフォルトの名無しさん[sage] 投稿日:04/06/24 18:36
>>14
ありがとうございます!
重複らしいので本スレに行きます…
int sub(int a)
{
if(a%4==0&&a%100||a%400==0)
return ON;
else
return OFF;
}
int main(void)
{
int n,flag;
printf("n-->");
scanf("%d",&n);
flag=sub(n);
if(flag==ON)
printf("%d年は閏年\n",n);
else
printf("%d年は平年\n",n);
return 0;
}
4943:04/06/24 19:55
レスくれたみなさんありがとうございました。
レスを参考にして自分なりに組んでみたらできました。
5043:04/06/24 20:21
まだ質問があるのですが、
#include<stdio.h>
int main(void)

{
int n;
printf("西暦を入力してください=");
scanf("%d", &n);
if(n%4==0&&n%100||n%400==0){
printf("%d年はうるう年です。\n",n);
}
else{
printf("%d年はうるう年ではありません。\n",n);
}
return 0;

}

で、一応できたのですが、
ただし,うるう年かどうかを判定する部分は,main関数とは別の関数を自分で作成すること。
という条件は満たしてませんよね…?
is_leap_year(n)
{ return n%4==0&&n%100||n%400==0; }
if (is_leap_year(n))
printf(...);
bool isLeap(int year)
{
 return year%4==0&&year%100||year%400==0;
}

if(isLeap(n)){
printf("%d年はうるう年です。\n",n);
}
else{
printf("%d年はうるう年ではありません。\n",n);
}
bool 使うんだったら cout 使えよヽ(`Д´)ノ
54デフォルトの名無しさん:04/06/24 20:34
ある測定器からパソコンに測定データが下記のようなフォーマットで送られてくる.各
時間での測定値は100 倍して指定されたオフセットを加えた値の16bit の正整数で表され,
上位8bit と下位8bit が分かれて送られる.例えば,下の例のように,オフセットが5000 の
とき,40.91 という測定値は,40.91×100+5000=9091(2進数で 0010 0011 1000 0011 )
35 131となり,35 と131 という整数が続けて送られることになる.今,測定データがdata.txt と
いうファイル名で保存されているとき,それを読み込み、実際の測定値を計算し,データの
個数,最小値,最大値を求め,それらを下記のように日付を名前とするテキストファイル
(”.txt” をつける)に書き出すプログラムを作れ.ただし,書き出すファイルはExcel で読
み込むことを考えて,タブ区切りとする(図のなかの<tab>はタブを表す;タブをprintf で
出力する場合には7-3 ページにあるエスケープ文字を使う).なお,測定データの個数は最大
100 を想定する.(ソースプログラムを提出せよ)
55デフォルトの名無しさん:04/06/24 20:34
data.txt の内容 04-06-24.txt の内容
04-06-24
5000
0 19 136
7 35 131
14 44 13
21 45 17
28 40 45
38 27 254
48 16 74
60 9 71
72 10 197
86 17 182
100 23 1
114 23 127
データの個数: <tab>12
最小値: <tab>-26.25
最大値: <tab>65.37
時間<tab>測定値
0<tab>0.00
7<tab>40.91
14<tab>62.77
21<tab>65.37
28<tab>52.85
38<tab>21.66
48<tab>-8.30
60<tab>-26.25
72<tab>-22.43
86<tab>-4.66
100<tab>8.89
114<tab>10.15
どこからどこまでがdata.txt の内容でどこからどこまでが04-06-24.txt の内容
か分からない
> ただし,書き出すファイルはExcel で読み込むことを考えて,タブ区切りとする
普通は csv だろ。終わってるな、課題出したセンセは
tsvの方が使い勝手が良い事が多い
#include <iostream>
#include <string>
#include <fstream>
#include <map>
#include <algorithm>
#include <limits>
main()
{
 using namespace std;
 map<int, double> resultMap;
 string line;
 ifstream ifs("data.txt");
 string date;
 ifs >> date;
 date += ".txt";
 int offset;
 ifs >> offset;
 double resultMax = numeric_limits<double>::max(), resultMin = numeric_limits<double>::min();
 while(ifs.good())
 {
  int time, hi, low;
  ifs >> time >> hi >> low;
  double result = ((hi << 8) + low - offset) / 100.0;
  resultMax = max(result, resultMax);
  resultMin = min(result, resultMax);
  resultMap[time] = result;
 }
 ofstream ofs(date.c_str());
 ofs << "データの個数:\t" << resultMap.size() << endl;
 ofs << "最小値:\t" << resultMin << endl;
 ofs << "最大値:\t" << resultMax << endl;
 ofs << "時間\t測定値" << endl;
 for(map<int, double>::iterator it=resultMap.begin(); it!=resultMap.end(); ++it)
  ofs << (*it).first << "\t" << (*it).second << endl;
}
6243:04/06/24 21:09
>>51
>>52
これをどこにつなげればいいのですか?(;´・ω・)
#include<stdio.h>
int l(int n)
{
return n%4==0&&n%100||n%400==0;
}
int main(void)
{
int n;
printf("西暦を入力してください=");
scanf("%d", &n);
if(l(n)){
printf("%d年はうるう年です。\n",n);
}
else{
printf("%d年はうるう年ではありません。\n",n);
}
return 0;
}

関数名とかは好きなのにしろ
64デフォルトの名無しさん:04/06/24 21:25
課題が出たのですが途中までしか分かりません。。教えてください。
課題:
■ポインタ引数を持つ関数を定義する課題
 n秒をhh時間mm分ss秒の形に変形する関数convert_time()を定義し、
 また、実際に引数を与えて呼び出しを行う。
文字配列nameにキー入力で"Good Moring"の文字を代入し、
その後、1文字ずつ取り出して表示せよ。
表示にはputcharを用いて文字列の長さは事前に分からないものとし、
プログラムの中で調べること。
(表示には必ず先頭1文字ずつ表示し、null文字が見つかったら表示を中止する)
6664:04/06/24 21:27
#include<stdio.h>
void convert_time(int*h,int*m,int*s,int n)
{
???
}

void main()
{
int h,m,s,n;
scanf("%d",&n);
convert_time(???);
printf("%dh%2dm%2ds\n",h,m,s);
}

???のところがわかりません・・(T T)
void convert_time(int n, char* p, size_t c)
{
 snprintf(p, c, "%02d時間%02d分%02d秒", n/3600, n/60%60, n%60);
}
>>64
void convert_time(int*h,int*m,int*s,int n)
{
 *s = n % 60;
 n /= 60;
 *m = n % 60;
 *h = n / 60;
}


convert_time(&h, &m, &s, n);
>66
前スレのどっかにあった。自分で探されよ。
>>66
*h=n/3600;
*m=n/60%60;
*s=n%60;
藻前ら、ケコーンし過ぎですよ。。。
7264:04/06/24 21:34
>>67-68
即レス有難う御座います。試してみます!
7364:04/06/24 21:42
#include<stdio.h>
void convert_time(int*h,int*m,int*s,int n)
{
*s=n%60;
n/=60;
*m=n%60;
*h=n/60;
}

void main()
{
int h,m,s,n;
scanf("%d",&n);
convert_time(&h,&m,&s,n);
printf("%dh%2dm%2ds\n",h,m,s);
}

4000
1h 6m40s

Console>> 何かキーを押すと終了します。

出来ました(T T)有難う御座いました!
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=89

printfでchar型の中の数字を出すにはどうしたらよいでしょうか・・・
知恵をお貸しください。
char c = 'a';
printf("%d", c);
>>65
#include <stdio.h>

int main(){
char str[20];
int i=0;
fgets(str,20,stdin);
for(i=0;str[i]!='\0'&&str[i]!='\n';i++){
putchar(str[i]);
putchar('\n');
}
printf("end\n");

return 0;
}

/*素直にNULL判別だけなら!='\n'は不要。*/
7774:04/06/24 22:29
すいません自己解決いたしますた
78デフォルトの名無しさん:04/06/24 22:35
何回もすいません。前スレで解いてもらったのですが、エラーばっかし出て…
もう1度お願いします。期限明日までなんで…

#include<stdio.h>
int factorial(int n){
int i,f=1;
for(i=1;<=n;i++)
f=f*i;
}
return f;
}

int main(){
int i;
for(i=0;i<=5;i++)
printf("%d\n",factorial(i));
return 0;
}

の関数factorialを利用して
キーボードから入力した2つの正または0の整数nとmの
組み合わせnCmを計算する関数combinationを作り、それを用いてnCmを計算するプログラム。

ヒント)

nCm = n!/(n−m)!m!

出力例
Input n: 8
Input m: 6
8C6 = 28
エラーの詳細は?
80デフォルトの名無しさん:04/06/24 22:50
int factorial(int n){
int i,f=1;
for(i=1;i<=n;i++)
f=f*i;

return f;
}

double comb(int n, int m){
return (double)factorial(n) / factorial(n - m) / factorial(m);
}
for文と配列変数を使って、入力した5つの数字の平均
を求めるプログラムを作れという問題がわからないので
どうかお願いします。
8243:04/06/24 23:03
>>63
ほんとうにありがとうございます!
C言語です。お願いします。
一般的な問題かもしれませんが、
年と月を入力するとカレンダーを表示するプログラムを作る問題です。
おねがいします
84デフォルトの名無しさん:04/06/24 23:06
78の追加

どうやら3つ(n、m、n−m)の関数を宣言して
最後にcombinationの関数を作るみたいです。

>>79
なんか、nCmの式を立てるとこが…
詳しくは分かりません。

87デフォルトの名無しさん:04/06/24 23:17
>>86
マルチとは?
初心者過ぎてすいません。
>>84
分からないならコピペしろ
>>87
マルチとはTo Hear(ry
>>84
順列・組み合わせでググレ
>>81
#include <stdio.h>
#define N 5
int main(void)
{
double s[N], sum = 0.0;
int i;
for (i = 0; i< N;i++){
printf("s[%d]:", i); scanf("%lf",&s[i]);
sum += s[i];
}
printf("average is %f\n", sum / N);
return 0;
}
92デフォルトの名無しさん:04/06/24 23:31
>>90
分かりません><
教科書みてもサッパリです・・・・m(_ _;)m

int combi(int n, int r)
{
if (r == 0 || n == r) {
return 1;
}
return combi(n-1, r-1) * combi(n-1,r);
}
94訂正:04/06/24 23:53
int combi(int n, int r)
{
if (r == 0 || n == r) {
return 1;
}
return (combi(n-1, r-1) + combi(n-1,r));
}
>>91
ありがとうございます、助かりました。
名簿を管理するやつをつくりたいのですが、わからないから
どうかよろしくおねがいします。

>>96
int main(void)
{
char buf[16];
printf("名簿を管理しますか?\n");
fgets(buf,sizeof buf,stdin);
if (buf[0] == 'y') puts("がんがれ");
else puts("うんこ");
return 0;
}

>>96
system("Access.exe");
99デフォルトの名無しさん:04/06/25 02:06
C言語でお願いします。配列ポインタの使い方がよくわからず、解けません。
お願いします。

n個の文字列 c0,c1,…,cn−1 を読み込んだ後、
読み込んだ文字列を表示するプログラムを作成せよ。

・文字列を読み込む。
・表示する。
上記2つを関数として作成し、main関数から呼び出すこと。
また、読み込む文字列長は固定である。(#define で宣言すること)
>>99
#include <stdio.h>
#include <string.h>
#define N 5
#define BUFSIZE 256
char buf[N][BUFSIZE];
void read(){
  char *p;
  int i;
  for(i = 0; i < N; i++){
    printf(" > ");
    fgets(buf[i], BUFSIZE, stdin);
    if(NULL != (p = strchr(buf[i], '\n'))) *p = '\0';
  }
}
void display(){
  int i;
  for(i = 0; i < N; i++) puts(buf[i]);
}
int main(){
  read();
  display();
  return 0;
}
10199:04/06/25 03:16
>>100
レスありがとうございます。

しかし「n個の文字列の n は動的に確保する」という問題でした。
説明不足でした。すみません。
>>76
ありがとうございました
103
5人分の試験の点数を整数型配列にキーボードから入力し、その後ファ

イルtensuuに出力せよ。
#include <stdio.h>
int main (void){
int x[5];
int i;
FILE *fp;
for(i=0;i<5;i++){
printf("input data of No%d ",i+1);
scanf("%d",&x[i]);
}
fp=fopen("tensuu","w");
for(i=0;i<5;i++){
fprintf(fp,"%d \n",x[i]);
}
fclose (fp);
return 0;
}
104103:04/06/25 09:09
まず上の問題を実行してtensuuを作成すること。
作成したファイルtensuuから5人分の点数データを入力し、それから合計と平均を計算して画面出力せよ。提出するプログラムは
@ファイルtensuu
Aデータを読み込んで合計と平均を計算して画面出力するプログラム。また、メモ帳によってファイルtensuuを2つめのプログラムを実行する前に、ファイルtensuuを2つめのプログラムのソースファイルと同じフォルダにコピーしておくこと。
105103:04/06/25 09:11
またB?上では5人分のデータ入力したがデータの個数が分かってないものとして作成せよ。但しfscanfにおいて、読み込むデータが終了して読み込めなかった場合の返却値はEOF(int型の負の値)である。
合計、平均値、および読み込んだデータの個数を画面出力せよ

長文でスイマセン
>>103-105
2,3を同時に書いたので、どちらかコメントアウトしてください。
#include <stdio.h>
int main (void){
int x[10],i,sum=0;
double ave=0.0;
FILE *fp;
fp=fopen("tensuu","r");
/*課題2用*/
for(i=0;i<5;i++){
fscanf(fp,"%d",&x[i]);
sum+=x[i];
}
/*課題3用*/
/*for(i=0;;i++){
if(fscanf(fp,"%d",&x[i])==EOF)break;
sum+=x[i];
} */
for(i=0;i<5;i++){printf("%d \n",x[i]);}
ave=(double)sum/i;
printf("num=%d sum=%d ave=%f\n",i,sum,ave);
fclose (fp);
return 0;
}
a * a = b(b + 1)/2 を満たす自然数 (a, b) を11組求めよ。

お願いします。
108デフォルトの名無しさん:04/06/25 11:42
「C言語の問題」
ユーザに順次文字列の入力を求め、入力された文字列を変数に格納せよ。
ただし、終了は"end"の文字列のみが入力された場合とし、文字列長は256
の固定長でよいが、入力される文字列の数は不定でありユーザの気分で変
わるものとする。
>>107
まず数式の簡単な解きかたから教えてくれ…。
式そのままに総当りでやったら
(a ,b)=(1, 1)
(a ,b)=(6, 8)
(a ,b)=(35, 49)
(a ,b)=(204, 288)
(a ,b)=(1189, 1681)
(a ,b)=(6930, 9800)
↑この6つの解以降は無理。
>>109
b(b+1)/2っていうのは、Σ(1→b) (つまり1〜bまでの自然数の和)なんだから、
和を求めてからルート取って自然数になるかどうか調べればいいんじゃないかな?

それでやると、7個目はa=40391 b=57121
ただこれ以上は多倍長演算が必要になりそうなので断念
111デフォルトの名無しさん:04/06/25 12:18
>>7
↑これを誰かやってくれませんか?
INSERTとDELETEはともかく、
MEMBERとMINはなんだ?
>>107
ああ、わかった。
aとbが逆でもいいのか。
求まった…

#include<stdio.h>
int main()
{
 int resCount=0;//解の数
 for(int a = 1;;a++)
 {
  for(int b = a;;b++)
  {
   if(2 * a * a < b * ( b + 1 ) )break;
   if(2 * a * a != b * ( b + 1 ) )continue;
   //解が得られた
   printf("(a ,b)=(%d, %d)\n",a,b);
   resCount++;//解の数に1加える
   if(a != b && resCount < 11)
   {//aとbが異なるなら、逆の場合も出力
    printf("(a ,b)=(%d, %d)\n",b,a);
    resCount++;//解の数に1加える
   }
   break;
  }
  if(resCount == 11)break;//解の数に11個で終了
 }
 return 0;
}
114109==113:04/06/25 12:28
>>110
うわー、リロードして書き込めばよかった…。
そうか。等差数列の和か…。
そちらの方がスマートなので、真の解答は任せた。
教えてください。
「ファイルの中から特定の文字列(例えば「abcde」)を抜き出してプリントさせる」
というプログラムをなるべく初歩的で簡単に作れと言われました。
よろしくお願いします<(_ _)>

abcdeを抜き出して、抜き出した文字列をプリントさせるのか?
そんなことしなくても、printf("abcde")でいいじゃないか。
>>115
宿題を丸々コピペしろ
あと先生が言った言葉もな
>>117=>>115の講師
>>116
それだと、含まれていない場合にも表示されるっぽ
なんにしろ「抜き出す」ちう言葉にはなんの意味もないな
含まれてる行を、とかそういう問題じゃないのか
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=91&fi=no
>>108さんの問題をやってみたんですが
動きません...
on_
厳しく間違いを指摘してください。
>>121
BUFSIZの定義がされてませんぜ、旦那。
ついでに文字列の比較はstrcmp()で。
>>121
BUFSIZって幾つだと思ってるんだよ。BUFSIZ*256バイトもスタックに取るには大き過ぎだろうが。
それから、不定である以上BUFSIZより多い数入れたいかもしれないだろ? 動的に確保しろよ。
124デフォルトの名無しさん:04/06/25 15:05
初期状態を除いてプログラム実行時に既存の英単語リストのファイル(list.txt)を読み込み,2次元配列に格納する.
(例:words[単語数][単語文字数])
単語登録,リスト表示,終了の各機能が選択可能なメニュー画面を表示する.ただし,登録可能な単語数を表示し,リスト内と同一単語の登録は受付けない.また,リスト表示は登録した英単語を含めるものとする.
プログラム終了時に新しくできた英単語リストを読み出したファイルに更新する.なお,英単語リストのファイルは,1行1単語として出力するものとする.

ヒント:文字列の比較は「strcmp関数」,文字列の複写は「strcpy関数」をそれぞれ使用し,引数の指定は各自で調査せよ.ヘッダーファイルは「<string.h>」を指定すればよい.

お願いします。
125121:04/06/25 15:30
>>122-123 様
ご指摘どうもです
122様のご指摘はすらっとできたのですが、
123様のご指摘された点が僕の手には負えそうにないです。
いろいろ調べてみたんですが、情けないことに動的に確保する方法がわかりません。
ということで >>108 さんの回答を誰かUPしてください。
それみて勉強することにします...
on_
126デフォルトの名無しさん:04/06/25 16:00
多角形の内外判定の関数がつくれません。たすけてください。
VC6つかってます。;;
if(多角形の内){
return 内;
}else{
return 外;
}
>>125
(適当

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

#define BUF_SIZE 256
#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)

int main()
{
  char* buffer = NULL;
  int count=-1, i;

  do {
     count++;
     buffer = (char*)realloc(buffer, BUF_SIZE*(count+1));
     fgets(buffer+BUF_SIZE*count, BUF_SIZE, stdin);
  } while(!STREQ(buffer+BUF_SIZE*count, "end\n"));

  for(i=0; i<count; i++) {
     printf("%s", buffer+BUF_SIZE*i);
  }

  free(buffer);
  return 0;
}
>>126
質問の仕方がこの上なく最悪かつスレ違い
>>126
ベクトルの内積を使え。
131デフォルトの名無しさん:04/06/25 16:39
http://www-isl.ele.kindai.ac.jp/class/program1/nob.html#top
の、課題11-2 11-3をお願いします
>>131
そこ、たぶん学内からしかアクセスできない。
さすが近畿大学
近畿大学は本当にバカだなー
135131:04/06/25 16:49
10人の数学の点数データを、配列要素を初期化する方法で配列に値を記憶させ、これらの最大値、最小値、合計値を求めよ。
以下それぞれの人の点数を表します
60 80 40 90 100 80 70 30 50 20
>>131
アドレス貼るだけとは・・・頭おかしいぞ
課題をここに書くということすら面倒ってか?
>>128
2次元配列へのポインタはchar (*buffer)[BUF_SIZE];で作れる

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

#define BUF_SIZE 256
int main()
{
  char (*buffer)[BUF_SIZE] = NULL;
  int count = 0, i;

  do {
    buffer = realloc(buffer, BUF_SIZE * count);
    fgets(buffer[count], BUF_SIZE, stdin);
  } while (strcmp(buffer[count++], "end\n"));

  for(i=0; i<count; i++) {
     printf("%s", buffer[i]);
  }

  free(buffer);
  return 0;
}
>>135
#include <stdio.h>
#include <algorithm>
#include <numeric>
main()
{
int score[] = {60,80,40,90,100,80,70,30,50,20};
printf("最大値=%d,最小値=%d,合計値=%d",
*std::max_element(score, score + 10),
*std::min_element(score, score + 10),
std::accumulate(score, score + 10, 0)
);
}
>>131
#include <stdio.h>
int main() {
int score[] = { 60, 80, 40, 90, 100, 80, 70, 30, 50, 20 };
int i,max,min,sum = 0;
max = score[0]; min = score[0];
for(i=0;i<10;i++) {
if(score[i] > max) max = score[i];
if(scoer[i] < min) min = score[i];
sum += score[i];
}
printf("max = %d, min = %d, sum = %d\n",max,min,sum);
return 0;
}
>>138
危ねー。似たような方法を書き込みそうになったw
リロードしてよかったよ…。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=92

第一引数で指定されたファイルから読み込んだ単語の中で第三引数で指定されたファイルに含まれている単語が存在するならば、
その単語を削除し、含まれていない単語のみ第二引数で指定されたファイルに書き込むプログラムを
作ろうとしているのですが、この上のプログラムではうまくいきません。
完全版を作ってくれませんか?
スタックにデカい配列を作ろうとするな。
>>141
ifで閉じカッコが余計なのが大杉
(誤)if ((fp0 = fopen(argv[3], "r")) != NULL) {
(正)if ((fp0 = fopen(argv[3], "r") != NULL) {
>>143
\      ∩___∩
. \     | ノ      ヽ  ちょっ! ちょっと待つクマ!
   \  /  ●   ● |
     \|    ( _●_)  ミ   釣り方間違ってるクマ!!
      彡、   |∪| ,/..
       ヽ   ヽ丿/  /⌒|          この吊り方は、やばすぎるクマー!!!
       / \__ノ゙_/  /  =====
      〈          _ノ  ====
       \ \_    \
        \___)     \   ======   (´⌒
           \   ___ \__  (´⌒;;(´⌒;;
             \___)___)(´;;⌒  (´⌒;;  ズザザ

ファイル(data.txt)を読み込みファイル内の単語数、最大語長を返す関数を作成し適切なmain()関数を作成せよ
なお、ピリオドも1語と数える。
/* data.txt
The Carlos Beltran
sweepstakes are over,
*/

実行結果
Wordcount:7
Maxlength:11

よろしくお願いします。
146145:04/06/25 18:01
あ、スペース・改行は数えなくていいです。
追記すみません
K&R嫁
>>145

#include <stdio.h>
#include <ctype.h>
#define IN 1
#define OUT 2
void hoge(int *c, int *m) {
int ch, len = 0, max = 0, wcount = 0, state = OUT;
FILE *fp;
fp = fopen("data.txt", "r");
while ((ch = getc(fp)) != EOF) {
switch (state) {
case IN:
if ((ch == '.') || isalnum(ch)) len++;
else { if (len > max) max = len; state = OUT; }
break;
case OUT:
if ((ch == '.') || isalnum(ch)) { wcount++; state = IN; len=1; }
break;
}
}
if (state == IN && len > max) max = len;
*c = wcount; *m = max;
}

int main() {
int c, m;
hoge(&c, &m);
printf("Wordcount: %d\n", c);
printf("Maxlength: %d\n", m);
return 0;
}
150145:04/06/25 19:16
>>147-149
ありがとうございました。
K&Rは持っていないので助かりました。
買えよ
152145:04/06/25 19:30
そうだよ。学生なら生協とかで割り引きで買えよ。それか古本屋で買えよ。
大学図書館に腐る程あるだろ >K&R
一冊ぐらいk
15559.60:04/06/25 20:56
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 100

void main(void)
{
char filename[20];
int time[MAX];
int i, n, offset, a, b,sum;
double value[MAX], min, max,avr;
FILE *fp;

if((fp=fopen("data.txt","r")) == NULL) {
printf("data.txt を開くことができません\n");
exit(1);
}

15659.60:04/06/25 20:57
/*data.txt の内容を読み込み、個数、最小値、最大値、実際の測定値を求める
部分*/
fscanf(fp, "%s", filename);
fscanf(fp, "%d", &sum);
min=max=sum; i=1;
while(fscanf(fp, "%d", &a) !=EOF){
sum +=a;
if(min>a)min=a;
if(max<a)min=a;
i++;
}
avr=(double)sum/i;
fclose(fp);

if((fp=fopen(filename,"w")) == NULL) {
printf("%s を開くことができません\n", filename);
exit(1);
}

/*filename というファイルにデータの個数、最小値、最大値、平均値を出力す
る部分*/
fprintf(fp, "データの個数: %d\n",i);
fprintf(fp, "   最小値: %d\n",i);
fprintf(fp, "   最大値: %d\n",i);
fprintf(fp, "   平均値: %d\n",i);
fclose(fp);
}
15759.60:04/06/25 20:58
コンパイルは通ったのですがファイルが開けません
どこがおかしいか指摘してください
158141:04/06/25 21:09
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=92

これを使って>>141を解いてください、お願いします。
159デフォルトの名無しさん:04/06/25 22:12
>141
どううまく動かないのか具体的に書いてください。
入力これこれに対して、出力はこうなるのが正解だが、このような出力になるetc
gmpライブラリを使い1兆を超す二数の和を求める関数をつくれ
関数名はbignumaddとする

変数名とかは特に指定はありません
どなたかおねがいします
#include <stdio.h>
int main(){char a[99],b[99],*e="+-*/",*f;int s=0,c;float m=0,n;while(1){printf(
"%f :",m);fgets(a,99,stdin)?0:exit(0);if(sscanf(a,"%s",b)>0){if(sscanf(b,"%f",
&n)>0){m=s?c?c-1?c-2?m/n:m*n:m-n:m+n:n;s=0;continue;}else{if(!b[1] && (f=strchr
(e,*b))){s=1;c=f-e;continue;}}}*a-'q'?0:exit(0);puts("Input errror (type 'q' t"
"o exit)");}}
このプログラム以前作ってもらったやつだが、コンパイルできん。
コピペじゃいかんのか?
初心者で全然わからん
C言語の質問スレでもきいたが、ここでもきいてすいません
>>160
一桁一配列要素で兆でも京でもやれよ
>>154さんの
略以下は
かっぱらっちまえ でよろしいでしょうか?
>>161
なんすか。その7行スレに出てきそうなソースは…。
とりあえず見やすいように展開して欲しい( ゚Д゚)
せめて改行してほしいな・・。
>>164
>>165
全然C言語わかんないんす
どこで改行していいかもわかんない
電卓のシュミレーターなんですが。
>>166
Cなら ; (セミコロン) { } (括弧)の位置で改行する
改行したらコンパイル自体はいけたぞ。
>167
#include <stdio.h>
int main()
{char a[99],b[99],*e="+-*/",*f
;int s=0,c
;float m=0,n;while(1)
{printf(
"%f :",m)
;fgets(a,99,stdin)?0:exit(0)
;if(sscanf(a,"%s",b)>0)
{if(sscanf(b,"%f",
&n)>0){m=s?c?c-1?c-2?m/n:m*n:m-n:m+n:n
;s=0
;continue
;
}else
{if(!b[1] && (f=strchr
(e,*b))){s=1
;c=f-e
;continue
;}
}
}*a-'q'?0:exit(0)
;puts("Input errror (type 'q' t"
"o exit)")
;
}
}
こうですか?
クワタ
コンパイルは知ってるのにCは書いたことないのかYo!
>>167
#include <stdio.h>
int main(){
char a[99],b[99],*e="+-*/",*f;
int s=0,c;
float m=0,n;
while(1){
printf("%f :",m);
fgets(a,99,stdin)?0:exit(0);
if(sscanf(a,"%s",b)>0){
if(sscanf(b,"%f",&n)>0){
m=s?c?c-1?c-2?m/n:m*n:m-n:m+n:n;
s=0;
continue;
}
else{
if(!b[1] && (f=strchr(e,*b))){
s=1;
c=f-e;
continue;
}
}
}
*a-'q'?0:exit(0);
puts("Input errror (type 'q' t""o exit)");
}
}

これでいいかな?
>>160
mpz_add()呼んで終わりだぞ?
もちょっと説明あったでしょ。
マルチになってしまうのですが前回のだとエラーが多発していたのでもう一度お願いできま
せんでしょうか。
2次方程式の係数a,b,cを与え、方程式の解を求めて出力せよ。(関数は使わなくてよい)
ヒント:係数の値によって、3つの場合分けが必要となる。
ここで、zの平方根yの計算は、y=sqrt(z);で計算すること。
また、#include<math.h>を#include <stdio.h>の次の行にくわえること
>>160
GMPライブラリを使わず・・・作成せよって問題なら分かるが使ったら意味なくない?
>>174
> エラーが多発していた

 だ か ら そ の エ ラ ー メ ッ セ ー ジ を 晒 せ や 池 沼
177デフォルトの名無しさん:04/06/25 23:13
n個の整数の最大公約数を求めるプログラムを教えてください。
>>169
";"は日本語で言う"。"つまり文の終わり。
"}"を日本語に当てはめると"」"が近い。
つまり
hoge;
foo;
って具合にしろ
>>177
そのn個ってのは任意なのか?
>>178
よくわからないんだが、そうすれば
きちんとしたプログラムとして動くの?
172のプログラムのことです
181デフォルトの名無しさん:04/06/25 23:19
任意です。
182160:04/06/25 23:20
戻り値の問題の応用として出されました

mpz_add(mpz_t c, mpz_t a, mpz_t b)
とすれば c=a+b;になるのは分かっているのですが、

mpz_t bignumadd(mpz_t e, mpz_t f)
mpz_add(d, e, f)
return d;

こんな風にしてもコンパイルできません・・・
別に一行で記述してあっても動くものは動くが何か?
>>180
C言語では改行も空白の一種の扱いだから、改行が全くなくても正しいソースコードなら問題はない。
改行を入れるのは見易さのため。
>>183
んなこと言ってるとまたいつかみたいにバカが
「動けばいいというものではない。減点」
とか言い出すぞ。
コンパイルできないのは、コードに誤りがあるからだ。
どうせくだらんミスだろう。
一行に書いたほうがコンパイル早い?
ぐちゃぐちゃソースの中の ? って何を表してるの?
条件演算子?
どういう風になるのかよくわからん・・。
>>177
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <malloc.h>
int gcd(int x, int y){if(y == 0) return x; else return gcd(y, x % y);}
int main(){
  int n, *a, i, d;
  char buf[256];
  printf(" n > ");
  n = atoi(fgets(buf, sizeof(buf), stdin));
  if(n == 0) return 1;
  assert(NULL != (a = malloc(sizeof(int) * n)));
  for(i = 0; i < n; i++){
    printf(" > ");
    *(a + i) = atoi(fgets(buf, sizeof(buf), stdin));
  }
  d = *a;
  for(i = 1; i < n && d != 1; i++)
    d = gcd(*(a + i), d);
  printf(" ans = %d\n", d);
  return 0;
}
191190:04/06/25 23:41
あ、メモリ開放忘れてた。まいいか。
電卓のシュミレーターをC言語
・扱う数値は整数値でよい(実数ならもっといい)
・数値と演算子の区切りは改行(リターンキー)でよい
・対話的に使えるものとするー終了は数値の代わりに一文字
 の入力をすればよい
・演算は加減乗除のみ(ほかのがあってもよい)
・演算子の優先順位は考慮しなくてもよい
・括弧は扱えなくてもよい
・メモリ機能は扱えなくてよい
前スレでこう聞いたら161のようなプログラムを作ってくれた。
うーん他のプログラムつくれないすか?
困ってるんです
>>192
数値を連続で入力したら、どうなるの?
194デフォルトの名無しさん:04/06/25 23:53
>>190
ありがとうございます。
プログラムソースが結構複雑ですね。。。
まだ、初心者なんで全ては理解できません。
ようは、
1組の最大公約数を求めて、
求めた最大公約数と次の整数の最大公約数を求めていくということですか?

(例)
a, b, c, dの整数があったら、
まず始めにaとbの最大公約数xを求めて、
次に、xとcの最大公約数yを求めて、
最後に、yとdの最大公約数zを求める。
結果的にzがa, b, c, dの最大公約数になる。

という感じでしょうか?
>>194
そういうこと。
あともう一つ「最大公約数が1になっちゃったら、そこで終了」という終了条件もつけてる。
>>192
つーか161そのままでコンパイル通るよ
一応足し算とかできるし
197デフォルトの名無しさん:04/06/25 23:56
>>195
とても参考になりました。
ありがとうございましたm(_ _)m
>>193
連続で入力できる分は問題ないと思います
>>198
そうじゃなくて、200の後に300入れられたら、どういう計算すればいいんだよ?
>>196Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample3.cpp:
エラー E2268 sample3.cpp 3: 未定義の関数 'exit' を呼び出した(関数 main() )
エラー E2268 sample3.cpp 5: 未定義の関数 'strchr' を呼び出した(関数 main() )
エラー E2034 sample3.cpp 4: 'int' 型は 'char *' 型に変換できない(関数 main() )
警告 W8060 sample3.cpp 4: おそらく不正な代入(関数 main() )
*** 3 errors in Compile ***
コンパイルするとこうなる
なぜ(:_;)
>>200
#include<stdlib.h>
#include<string.h>

の2行入れてみ。
202160:04/06/26 00:02
以下のようなエラーメッセージが出て困っています

c:4 error: `bignumadd' declared as function returning an array
c: In function `main':
c:13: error: incompatible types in assignment
c: At top level:
c:24: error: `bignumadd' declared as function returning an array
c: In function `bignumadd':
c:28: error: syntax error before "return"

プログラムは次のレスにコピペします
てか、なんで.cppなんだよ。
>>190
malloc()ってstdlib.hに入ってるんじゃなかったっけ?
#include <stdio.h>
#include <gmp.h>

mpz_t bignumadd(mpz_t a, mpz_t b);

int main(void)
{
mpz_t d, e, f;
mpz_init_set_ui(d, 100UL);
mpz_init_set_ui(e, 200UL);
mpz_init(f);

f = bignumadd(d,e);
mpz_out_str(stdout, 10, f);
printf("\n");

mpz_clear(d);
mpz_clear(e);
mpz_clear(f);
return 0;
}

mpz_t bignumadd(mpz_t a, mpz_t b)
{
mpz_t c;
mpz_init(c);
mpz_add(c, a, b)
return c;
}
>>199
よくわかんないですが、計算できればいいです
>>207
拡張子を".cpp"から".c"にしたら?
>>192 and
>>ttp://pc5.2ch.net/test/read.cgi/tech/1088151291/57

おれもやってみた。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define F fgets(buf, sizeof(buf), stdin)
int main(void){char buf[256];while(1){int x,y,op;x=atoi(F);if(isalpha(*buf))
break;op=*F;y=atoi(F);if(isalpha(*buf))break;printf("%d %c %d = %d\n",x,op,y,
op=='+'?x+y:op=='-'?x-y:op=='*'?x*y:op=='/'?x/y:0);}return 0;}

>>201
161のどこにいれるんすか?
全くわからないのに、こんな宿題だされてこまってます
>>207
計算できないんだってば。バカか? 
>>202
あー、なにげmpz_tってポインタかと思ったら要素一個の配列として定義されてんのな。
こりゃそのままじゃ返せねーわ。
ポインタにしちまうか、引数のどっちかに答え入れるようにしたら?
210が行ってる学校はスゴいな
C習い始め初日でもincludeする場所くらいは分かるだろうに・・・

もうすぐ7月だぞ?
学校が凄いんじゃなく、>>210が興味無いけど単位は取りたいみたいな
感じで、そもそもCをやろうという気は無いんだろう。

まぁそういう人のためのスレでもある気はするんだが、
話がある程度通じないとプログラムの実行方法とかも伝えられないから辛いな。
>>212さん
すいませんがプログラムを書いていただけませんか?
ずっと困ってんです
興味ないんならなんで授業とるんだよ。
>>207
>>213
馬鹿ですいません
209のプログラムでできたんで大丈夫です
209の方本当にありがとうございました
>>216
授業とる?????
219209:04/06/26 00:20
>>217
どういたしまして。
この解答をお友達に写させない方がいいと思うよ。
あなたのためにも採点する人のためにも。
>>217
あんな玄人丸出しのプログラムソースを見れば
教授だってプログラムについて質問したくなるぞ?大丈夫か
221209:04/06/26 00:22
玄人って言われた。
ちょっとうれしい。
大学とかならプログラム演習の単位ウマーで取るやついっぱいいるかもね、つーかうちにもいっぱい。
中学、高校だと興味なくてもとにかくやらされる場合が多いから・・・それか?
初心者の中の玄人
プログラム全く分からんヤツが209のを書いてきたら
教授「お前、2chの宿題スレで答えてもらっただろ!!」

こういうオチが待ってる
下の上
226教授:04/06/26 00:27
ちゃんと見てますよ
大金先生の例もあるしな。
161改行したらできたよ
ホントダ
>>228
Cに改行の概念は無い
#include <stdio.h>
#include <gmp.h>

void bignumadd(mpz_t result, mpz_t a, mpz_t b)
{
mpz_add(result, a, b);
}

int main(void)
{
mpz_t d, e, f;
mpz_init_set_str(d, "1000000000000", 10);
mpz_init_set_str(e, "2000000000000", 10);
mpz_init(f);

bignumadd(f, d, e);
mpz_out_str(stdout, 10, f);
printf("\n");

mpz_clear(d);
mpz_clear(e);
mpz_clear(f);
return 0;
}
232某教授:04/06/26 03:01
全くけしからん…

君らには単位を認めない
>>232
全くけしからん…

君にはテニュアを認めない
せいぜい助教授だろ
レベル低すぎで笑えるw
>>159
削除されるべき単語が削除されずにそのまま出力されるんですよ。
だからその削除する部分の記述が間違っているのかなと思ってここにきました
>>230さん>>231さんありがとうございます
がんばって理解したいと思います
>>234
うちのプログラム演習の担当は教授だよ、パソコン苦手な電磁気学の教授
239デフォルトの名無しさん:04/06/26 14:41
引数で与えられた数だけ画面に*を表示する関数を作成する。
それを用いて20以下の乱数で求まった長さの*線を10本引いて終了する。

これが今日の授業の演習だったのですが全部できませんでした。

#include <stdio.h>
#include <stdlib.h>
int f(int a);
void main ()
{
int a,b,c;
for(c=0;c<10;c++)
a=rand()%21;
b=f(a);
if (b==1) printf("\n");
}
int f(int a)
{
int d;
for(d=0;d<a;d++)
printf("*");
return 1;
}

これが自分の限界ですた。ちなみに*は一行しか表示されません・・・
最初ビルドした時戻り値どうこうと出てきたのでワケも解らずreturnで1を戻しています。
タスケテー
240デフォルトの名無しさん:04/06/26 14:46
>>239
for(c=0;c<10;c++)
a=rand()%21;

forループはこれしかやらないよ
戻りの型は void 、return は不要。c の for よく見れ。{} がない。
>>239
初心者のうちはif, forなどの後は必ずブロックにしておくことを激しくお勧めしておく。
省略していいのは、自分が絶対ミスをしないと確信が持てる香具師だけだ。

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

void f(int a);

int main()
{
int a;
int ic;
for(ic = 0; ic < 10; ic++) {
a = rand() % 21;
f(a);
putchar('\n');
return EXIT_SUCCESS;
}

void f(int a)
{
int ic;
for (ic = 0; ic < a; ic++) {
putchar('*');
}
}
void f(int a)
{
while(a--) putchar('*');
}

でいいじゃん
void f(int a){while(a-- && putchar('*'));}
でいいじゃん
245239:04/06/26 15:54
どうもありがとうございました。
とりあえず要求通りに動くようになりました。

ただ、まだvoidとかを良く解ってなかったみたいなのでもう一度勉強し直します。
if,for後は注意するようにしますです。
246デフォルトの名無しさん:04/06/26 16:02
>236
具体的な入力ファイル2つの中身と、その出力を示してください。
なるたけ小さくしたやつでね。
ここで解答してくれるような人はある意味めんどくさがりなので、
再現可能な入力を見つけるなんて面倒なだけでつまらんことはしてくれないでしょう。

>削除されるべき単語が削除されずにそのまま出力されるんですよ。
なんていうレベルのバグ報告をするやつはいますが、使えないやつと判断されます。
ここ本スレ?
もうみんな宿題終わったかなー?
249 ◆YU.vf3DFSo :04/06/26 21:01
文字列入力し、圧縮しながら圧縮文字列に入力する
sprintf()を使用する事

入力文字列 AAAAAAABBBCddEEEE#####
圧縮文字列 @7A@3BC@4E@5#

わかりましぇん・・・
圧縮文字列を作るときにsprintfをすれば良いのですか?
>249
dが消えるのは仕様ですか。
251 ◆YU.vf3DFSo :04/06/26 21:06
間違えです(w
@7A@3BC@2d@4E@5#
です。
>圧縮文字列を作るときにsprintfをすれば良い

例えば、"@7A"ならsprintf(buf,"@%d%c",7,'A')だろ?
>>249
入力:aab
出力:@2a@1b
みたいな感じで、膨らんでしまう場合もそのまま処理していいの?
あとsprintf()は本当に使わなきゃならんのか。
>>252
それを、連続した文字列が1の時はsprintfを行わないとすれば良いのでしょうかね・・・。

>>253
一応使えという事になっています・・・。
aabの時は、@2abと表示する様です。
もちろん2文字の連続の場合は逆に大きくなってしまいますが、取りあえずはそのままで良いのかと思います。
255デフォルトの名無しさん:04/06/26 21:54
#include <stdio.h>
#include <string.h>
int main(void){
char buf[1024], s[1024];
char *p = buf, ch, *s_cur = s;
int len;
puts("文字列:");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
while (*p){
len = 0;
for (ch = *p; *p == ch; p++, len++);
if (len >= 2){
sprintf(s_cur,"@%d%c", len, ch);
s_cur += 3;
} else {
*s_cur = ch;
s_cur++;
}
}
*s_cur = '\0';
puts(s);
return 0;
}
256デフォルトの名無しさん:04/06/26 21:55
>>249 こんなかんじかな(未テスト)
#include <stdio.h>
#include <string.h>
/*
 * buf: 圧縮文字列が入る
 * str: 入力文字列
 */
char *compress(char *buf, const char *str)
{
 char *p = str;
 while (p != NULL) {
  int c = 1;
  while (*p == *(p + 1)) { ++c; ++p; }
  if (c == 1) sprintf(buf, "%s%c", buf, *p);
  else sprintf(buf, "%s@%d%c", buf, c, *p);
  ++p;
 }
 return buf;
}
int main(void)
{
 const char *input_string = "AAAAAAABBBCddEEEE#####";
 char *compressed_string = malloc(strlen(input_string) * 3 + 1);

 compress(compressed_string, input_string);
 printf("入力文字列:%s\n圧縮文字列:%s\n", input_string, compressed_string);

 free(compressed_string);
 return 0;
}
257256:04/06/26 22:01
>>256はグズグズだったからやり直し。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *compress(char *buf, const char *str)
{
  const char *p = str;
  *buf = '\0';
  while (*p != '\0') {
    int c = 1;
    while (*p == *(p + 1)) { ++c; ++p; }
    if (c == 1) sprintf(buf, "%s%c", buf, *p);
    else sprintf(buf, "%s@%d%c", buf, c, *p);
    ++p;
  }
  return buf;
}
int main(void)
{
  const char *input_string = "AAAAAAABBBCddEEEE#####";
  char *compressed_string = malloc(strlen(input_string) * 3 + 1);

  compress(compressed_string, input_string);
  printf("入力文字列:%s\n圧縮文字列:%s\n", input_string, compressed_string);

  free(compressed_string);
  return 0;
}
258デフォルトの名無しさん:04/06/26 22:08
乱数を使って1桁の数当てを作ってみたんですけど、答えが常に一定でランダムになりません。
どうやったらいいでしょうか?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int a,b,i=1;

srand(time(NULL));

a = rand()/32768.0*10.0;

for(;;){
scanf("%d",&b);
if(a == b) break;
else i++;
}

printf("%d回で当たりました。",i);


printf("%d",i);
}
>>258
多分時間たてばかわってると思うよ。
>>246
ごめんなさい。うpしました。

入力ファイル(第一引数)
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=97

入力ファイル(第三引数)
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=96

出力ファイル(第二引数)
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=95

これだと第三引数のファイルの中の「at」しか削除されていません。
261258:04/06/26 22:19
>>259
そうですか。ありがとうございました。
>256

sprintf(buf, "%s@%d%c", buf, c, *p)

って大丈夫?
263 ◆YU.vf3DFSo :04/06/26 22:28
>>255さん
>>256さん
有難う。
今から、しゃぶってみますw
264デフォルトの名無しさん:04/06/26 22:30
大学の課題なんですが、さっぱりですわ・・・

1辺100mの正方形の四隅に電柱があり
4つの電柱が全て繋がる用に電線で結んだ場合の
最短距離を出力せよ


○    ○



○    ○
>>264
2*100*2^{1/2}
>>264
100*3^{1/2}+50
267デフォルトの名無しさん:04/06/26 22:44
>264
約282
268264:04/06/26 22:45
すみません・・・
一応、答えだけじゃなくC言語のプログラムの方を提出したいので・・・
>>265
>>266
>>267
どのようにして解いたのですか!?
269266:04/06/26 22:50
 A
 ○――――○ ∠ABC=120゚
  |`、     / |
  | `、__/ |
  | /B  `、 |
  | /     `、|
 ○――――○
 C

最短はこうだと思うんだが。
プログラムでこれを見つける方法っていうなら、俺にはわからん。
逆に教えてほしい。
270264:04/06/26 22:52
>>269
多分そんな感じでOKです!
なんか角度を振っていって絞り込むとか言ってた様な・・・
∠ABCを振れって言う意味かも知れません
なんかあれだ、ニュートン法だ。きっと。
新豚といえば均が氏んでその特集で皆の記事の結語に「合掌」と書いてあって
2chのノリだなぁと感じたっけな
>>272
ああ、そうだな。
#include<stdio.h>
int main(void)
{
int i;
float k;
k=11/12;
  for(i=0;i<=4;i++){
    if(i<=2){
k=k+2*(i+1);
}    
    else{
k=k-i;
}
  }
printf(" kの値は、%d",k);
return(0);
}
をコンパイルしようとおもってもイレギュラーキャラクターと返ってきます。
どうしれば正しくコンパイルできますか?
#include<stdio.h>
int main(void)
{
int i;
float k;
k=11/12;
for(i=0;i<=4;i++){
if(i<=2){
k=k+2*(i+1);
}    
else{
k=k-i;
}
}
printf(" kの値は、%d",k);
return(0);
}
276266:04/06/26 23:48
>>270
269の形状を前提にしていいのなら簡単だが。
ニュートン法は他の人に任せます。
#include <stdio.h>
#include <math.h>

double length( double CAB ) { return 50 / cos( CAB ) * 4 + ( 100 - 50 * tan( CAB ) * 2 ); }

// 角CABをCAB_min[rad]〜CAB_max[rad]の範囲をdiv等分して、最短になる角CABを探す
double find_min( double CAB_min, double CAB_max, int div ) {
double CAB_at_min = CAB_max, densen_min = length( CAB_at_min );
for( int i = 0 ; i < div ; ++ i )
{
double CAB = ( CAB_max * i + CAB_min * ( div - i ) ) / div, densen = length( CAB );
if ( densen < densen_min )
CAB_at_min = CAB, densen_min = densen;
}
return CAB_at_min;
}

int main() {
const double PI = 4 * atan( 1 );
double CAB_min = 0, CAB_range = PI / 4; // CABの範囲は0〜90度
while( CAB_range > 0.000001 * PI / 180 ) { // 百万分の1度の精度になるまで繰り返す
double CAB_at_min = find_min( CAB_min, CAB_min + CAB_range, 10 ); // 範囲を10等分して探す
printf( "CAB=%f[deg]\tlength=%f[m]\n", CAB_at_min * 180 / PI, length( CAB_at_min ) );
CAB_range /= 5; CAB_min = CAB_at_min - CAB_range / 2; // 探した分解能まで範囲を狭める

}
return 0;
}
>>274
ifの閉じ括弧の後ろに全角スペースが入ってる。消せばおけ。
>>260
if((fp0 = fopen(argv[3],"r")) != NULL){
  int m;
  char *p_key;
  for(m=0; m<571; m++){
    if((fgets(k[m],571,fp0))==NULL) break;
    if(p_key = strchr(k[m], '\n')) *p_key = '\0';
    printf("[%s]\n", k[m]);
  }
}
279278:04/06/27 00:03
この行はいらなかった。削除してくれ。
> printf("[%s]\n", k[m]);
280264:04/06/27 00:07
>>276
すばらしい!
ありがたく参考させていただきます。
多謝
>>272
合掌を2chのノリ??
合掌や南無は,インターネットが流行る以前,つーか紙媒体でも,
ありふれた結語だったぞ???
>>281
そうだな。>>272は面白いことを言う御仁。
数学の点数のデータが入った1次元配列のアドレスと人数を受け取り、それらの最大点、最小点、平均点を求めて
返す関数を作成せよ。 ただしmain関数では、最初に点数データを初期値代入し、関数を呼び出した後は最大点,最小点
平均点の値を出力せよ。
>>283
またそれか!
285デフォルトの名無しさん:04/06/27 00:30
 引数渡しした数を足し込み、それまでの合計値を返す関数sum_up()を作成し、
プログラムを完成せよ。このときの関数のプロトタイプは、

         int sum_up(int n);

とする。引数として-999999999という値を渡すと、それまでの合計値を0にクリアするようにせよ。
この値は記号定数、

#define CLEAR -999999999

として、CLEARという名前で使用できるようにせよ。main()関数は以下のものを使用せよ。

int main(void)
{
int i;

sum_up(CLEAR);
for(i=0;i<=100;i++)
sum_up(i);
printf("total=%d\n", sum_up(0));

return (0);
}
>>285
int sum_up(int n){
static int sum;
if(n==CLEAR) sum=0;
else sum+=n;
return sum;
}
int sum_up(int n)
{ static int sum;
if(n==CLEAR) sum=0; else sum+=n;
return sum;
}
かぶった
ああ、変数までかぶった・・・
290デフォルトの名無しさん:04/06/27 00:36
せっかくだから漏れも
int sum_up(int n)
{
static int sum;
if (n == CLEAR) sum = 0;
else sum += n;
return sum;
}
リロードしてよかった…三重婚は不健全だよね。
292デフォルトの名無しさん:04/06/27 00:38
何がせっかくなんだよ(w

int sum_up(int n)
{
static int sum;
if (n == CLEAR) sum = 0; else sum += n;
return sum;
}
293デフォルトの名無しさん:04/06/27 00:44
>>286〜292
こ、こんなに短いんですか!?
>>293
そうだよ。
>>293
そんなことはない。
>>293
そうかもしれない。
ゴメン 長すぎたか・・・

int sum_up(int n){
static int sum;
return sum=(n==CLEAR)?0:SUM+n;
}
>>293
それはひみつ。
299297:04/06/27 00:52
SUMは小文字
>>297
長くてもいいから動くのを書いてください!
>297
int sum_up(int n){
static int sum;
return sum+=(n==CLEAR)?-sum:n;
}
文句ある?
っちゅーかも前は
何行くらいの関数になると思ってたのさ?
303デフォルトの名無しさん:04/06/27 00:58
これで頭に
#include <stdio.h>
って付ければ終わりですね?
>>303
そうだよ。
>>303
そんなことはない。
>>303
動くだろ?
307デフォルトの名無しさん:04/06/27 01:02
int sum_up(int n)
{
static int sum;
static int check = 0;

if (check == 1){
sum = 0;
check = 0;
}

if (n == CLEAR)
{
check = 1;
return 0;
}
else
{
sum = sum + n;
return sum;
}
}
>307 なぜcheckが必要なんだ?
>285 には
>main()関数は以下のものを使用せよ。
とあるが?
>>308
ネタにマジレス・・・
>>308
きっと285のご期待に応えて長いの作ったのだと思われ
>>308
つっこむ所はそこぢゃない。checkを使おうが使うまいが、
どのみち初回にCLEARで呼び出さなければゴミを返す所だ(w
おまえら、こんな深夜まで起きてるなんて・・・
ひまなんだな
>>311
ゴミかえさないよ。
ちゃんと初期化されるもんsun
>>313
太陽どうかしましたか?
>>311
staticな変数はゼロで初期化されるの知らないの?
316307:04/06/27 01:30
訂正しますね。
int sum_up(int n)
{
static int sum;
static int check;;

if (check == 1)
{
sum = 0;
}

if (n == CLEAR)
{
check = 1;
return 0;
}
else
{
sum = sum + n;
check = 0;
return sum;
}
}
>>316
ますますcheck要らないじゃん
318デフォルトの名無しさん:04/06/27 01:40
>260
えー文句言うばかりではあれなので、がんばってみました。

で、削除する文字列リストに改行とかが入っているからでは?

for(m=0; m<571; m++){
char buf[571] ;
if((fgets(buf,571,fp0))==NULL) break;
strcpy(k[m],strtok(buf,DELIMITER));
}

>313
>315 ネタにマジレス
(316 で自己解決してしまったが...)
専用ブラウザ使ってたから気が付かなかったけど、
「あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。」
って書いてあるのね・・・

>>281
> 合掌や南無は,インターネットが流行る以前,つーか紙媒体でも,
> ありふれた結語だったぞ???
ソースは?
πを求めるプログラムで

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include"sgl.h"
main()
{
int l,m,col1,col2,col3,col4;
double x,y,i,a,iseed;
sgl_winsize(400,400);
sgl_init();
col1=sgl_colordef("black");
col2=sgl_colordef("gold");
col3=sgl_colordef("brown");
col4=sgl_colordef("red");
sgl_pos_win(300,300);
sgl_color_background(col2);
sgl_color(col3);
sgl_disc(0,0,1.0);
printf("乱数を入力\n");
scanf("%d",&m);
printf("実行回数を入力\n");
scanf("%d",&l);
srand(m);
323332の続き:04/06/27 02:09
for(i=1;i<=l;++i)
{
x=(double)rand()/RAND_MAX;
y=sqrt(1-x*x);
a+=y;
sgl_color(col1);
sgl_circle(x,y,0.005);
}
sgl_color(col4);
sgl_line(0,a/l,1,a/l);
a=(a/l)*4;
printf("円周率の近似値は%f \nです.",a);
sgl_display();
return 0;
}

ここまで出来たのですが、さらにこれの棒グラフもあらわせと言われました。
これにどのようなプログラムを付け足したらよいでしょうか?
↑ 名前322の間違い
325デフォルトの名無しさん:04/06/27 04:08
>322
棒グラフをあらわすプログラムを足せばいいじゃねーか?

これ以上のことを答えるのはむずかしーわな。
きっと、独自の描画関数が用意されているんだろう。
sgl.hの中とかに…
sprintfで、配列[5]からiの値を入れたい場合

sprintf(&配列[5],"%d",i)

で良いんですか?
>>326
かなり違う。
sprintf(書き込み対象の文字列,"%うんちゃらとか",変換対象の変数);
みたいな感じ。てういかman見れ。
>>327
配列ってcharの配列じゃないのか
[0]〜[4]には既に何か入っていて[5]から入れたいとか
それだったら>>326の方法であっているはずだけど
329327:04/06/27 13:01
あ、そういうことか。かなり読み違えてた。>>326スマソ。
330デフォルトの名無しさん:04/06/27 13:08
eのx乗 = x/1
この方程式を二分法で解くプログラムを作成しなさい。

いろいろ立て込んでるようですがお願いします。
x/1 って何 xを1で割ってんの
二分法って何(調べりゃ分かるけど調べない)
x=1のとき
e=1/1?
>330
みようみまねで作ってみた。ちゃんと望みの関数入れてね。あと変なとこあったら指摘ヨロ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=132
334330:04/06/27 14:53
すいません1/x(x分の1)でした・・
>>333さんありがとうございます、明日ガッコいって調べてみます
>>278
有難うございます。
Innerという関数名で、2つの2次元ベクトルu,vの内積(u・v)
を計算する関数プログラムを作りなさい。(u,vを引数とする)

宿題ではなく過去問です。よろしくお願いします。
2次元ベクトル
2次元ベクトル
二次元ベクタ
>>327 >>328
説明が不足していてすみません。
またご回答有難う御座います。
> ご回答有難う御座います。
ウザい。

おまえら役に立たねぇんだよヽ(`Д´)ノ

ぐらいが丁度良い
342デフォルトの名無しさん:04/06/27 18:17
2つの複素数の積を計算する構造体の関数を作成されよ。すなわち複素数の実数部と虚数部
をメンバーで表現する構造体を宣言され、その構造体の型を持つ変数を引数で受け取り、それらの
積(複素数)を返却値で戻されよ。ただしmain関数では最初に2つの複素数に適当な値を与え
2つの複素数と積の値を出力せよ
>336

#include<iostream>
#include<vector>
#include<numeric>
#include<algorithm>
#include<iterator>

using namespace std;

// 336によるとu,vは要素数2限定、らしい
template <typename T>
T Inner( const vector<T> &u, const vector<T> &v ) {
 return inner_product( u.begin( ), u.end( ), v.begin( ), 0 );
}

// テスト。
int main() {
 int U[]={1,2}, V[]={3,4};
 vector<int> u, v;
 copy( U, U+2, back_inserter( u ));
 copy( V, V+2, back_inserter( v ));

 cout << Inner( u, v ) << endl;
}
344デフォルトの名無しさん:04/06/27 19:41
1から100までの素数を出力しなさい。
また、それらの和も出力しなさい。
お願いします。
>344
// 意図的にバグを入れているので注意。
#include<iostream>
using namespace std;

int main(){
int primes[] = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,91,97 };
int sum, i;
for( i=0,sum=0; i<sizeof(primes)/sizeof(primes[0]); ++i ) {
cout << primes[i] << endl;
sum += primes[i];
}
cout << "SUM = " << sum << endl;
}
>>342
#include<stdio.h>
#include<math.h>
struct complex{double re;double im;};

complex mul(complex lhs,complex rhs)
{
  complex ans;
  ans.re = lhs.re*rhs.re - lhs.im*rhs.im;
  ans.im = lhs.re*rhs.im + lhs.im*rhs.re;
  return ans;
}
complex input(void)
{
  char buf[256];
  complex ret;
  printf("Input Real:");
  ret.re = atof(fgets(buf,sizeof(buf),stdin));
  printf("Input Imaginary:");
  ret.im = atof(fgets(buf,sizeof(buf),stdin));
  return ret;
}
int main()
{
  complex a,b,c;
  a = input();
  b = input();
  c = mul(a,b);
  printf("%f%+fi * %f%+fi = %f%+fi\n",a.re,a.im,b.re,b.im,c.re,c.im);
  return  0;
}
Cで書いて欲しいのかC++で書いて欲しいのかどっちか判別つかん。
>>345
素数は求めなくていいのかよっ
二分木の高さを計る関数を作ってほしいんですが
>>349
課題全文掛けよ
>>347
指定が無ければどっちで書いてもいいんじゃない?
>>349
logN
353345:04/06/27 20:20
>348
出力しろ、とはあるけれど、求めよ、ではないし。
354デフォルトの名無しさん:04/06/27 20:29
@キーボードからデータを入力し、初めてマイナスの数が入力されるまでのデータのうち、
最大値と最小値を計算し、
またその最大値、最小値が入力された順番を表示するプログラム


A2つの正数m、nの最大公約数を計算する関数
int gcd (int n, int m)
を書きなさい




よろkしくおねがいします。
355デフォルトの名無しさん:04/06/27 20:30
悪い書き方
#include <stdio.h>
int main(void)
{
int i,j;
for (i=2;i<=100;i++) for(j=2; j<i,i%j!=0; j++)if (j==i-1) printf("%d\n", i);
return 0;
}
>>354
2、どっちか。

int gcd(int m,int n){
if (n==0) return m;
else return gcd(n, m % n);
}

int gcd(int m, int n){
int t;
while (n != 0){
t = m; m = n; n = t % n;
}
return m;
}

357356:04/06/27 20:35
mとn逆だったね。
>>354
頼んでる身分でさぁ誤字あったら訂正しろや
359デフォルトの名無しさん:04/06/27 20:49
1、
#include <stdio.h>

int main(void)
{
int x, max = -1, max_i = -1, min = -1, min_i = -1, i;

for (i=1;;i++){
printf("x >> "); scanf("%d", &x);
if (x < 0) break;
if (i==1){
max = x; min = x; max_i = 1; min_i = 1;
}
if (x > max){
max = x; max_i = i;
}
if (x < min){
min = x; min_i = i;
}
}
printf("max = %d(%d番目) min = %d(%d番目)\n", max, max_i, min, min_i);

return 0;
}
>>352
それは完全二分木の場合
361349:04/06/27 21:04
>>350
二分木のrootからleafまでの最長距離を求める関数を作成せよ
>>361
二分探査でたどるごとにカウントしていけばよかろう

終了
>>349
typedef struct _node{
struct _node *left;
struct _node *right;
void *data;
}node;

typedef {
node *root;
int max_height;
} binary_tree;

int getMaxHeight(binary_tree *bt){
return bt->max_height;
}
364デフォルトの名無しさん:04/06/27 21:07
×typedef {
○typedef struct {
int length(Node *root) {
 int r = (root->right == NULL ? 0 : length(root->right));
 int l = (root->left == NULL ? 0 : length(root->left));
return max(r, l) + 1;
}
ニュアンス的にはこんな感じ。
366デフォルトの名無しさん:04/06/27 21:16
宿題でこんなんでました。

文字列のファイル入出力プログラムをつくりなさい。
(fprint,fscanf版 と fread,fwrite版)

よろしくお願いします。
fprintf と fscanf と
fread と fwrite が
ファイル入出力プログラムそのものですよ?
368教えてください:04/06/27 22:48
提出期限まで書くなよ
>>368
前に見た課題だな。
お友達が>>54で質問済み
回答は>>59-60
ちったぁ過去ログ参照セい
372デフォルトの名無しさん:04/06/27 23:17
sin(90)の結果を1.0000…にしたいのですが、0.8939966…(正確な値?)となってしまいます。
どうすれば1.0000…になるのでしょうか?
同様にsin(180)は0、sin(270)は-1という結果を出したいのですが・・・。
どうせ理科大だろ
>>372
ラジアンですよ
sin(PI / 180 * 90)
376372:04/06/27 23:31
>>374-375
ありがとうございます
できました〜(*´Д`)
377デフォルトの名無しさん:04/06/27 23:35
2個の整数の最大値を返す関数max2(int a,int b)を作りなさい。
関数max2を使って、3個の整数を読み込んで、最大値、最小値を
表示するプログラミングを作りなさい。

お願いします
最小値を求めるのにも
max2を使わなきゃならんのか
int max2(int a,int b){
return (a > b) ? a: b;
}

maxim = max2(max2(a, b), c);
あとは任せた↓
プログラミングを作るんだぞ。わかってんのか?
382教えてください:04/06/27 23:50
>369〜371

54は私です。59,60のプログラムは難しくて分かりませんでした。

int max3( int a, int b, int c ) { return max2( max2( a, b ), c ); }
int min3( int a, int b, int c ) { return -max3( -a, -b, -c ); }
こうかな?
なるほど、最小値は符号逆にすりゃいいのか。
#include <stdio.h>

int max2(int a, int b)
{
return (a > b) ? a : b;
}

int main(void)
{
int x, y, z, min;
printf("x y z:"); scanf("%d%d%d",&x,&y,&z);
printf("最大値:%d", max2(max2(x,y), z));
printf("最小値:%d", -max2(max2(-x,-y), -z));

return 0;
}
385382:04/06/27 23:56
再提出をくらった自分の回答
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1088343818

どこがおかしいのか教えてください
>>383
なるほど、マイナスか・・・
勉強になった
なにげにお前ら頭いいな
388 ◆bQZM4X8eHc :04/06/28 00:18
すいませんがどなたか21代目の過去ログをウプしてもらえませんか?
>>385
なんつーか……、課題よく読みなおした方がいいぞ。
おまいさんのプログラムだと、読み出した値そのままで最大最小平均取ってる。
読み出した値から測定値に戻す作業せんと。
390382:04/06/28 00:47
>389

/*data.txt の内容を読み込み、個数、最小値、最大値、実際の測定値を求める
部分*/
に、読み出した値から測定値に戻す作業
追加すればいいんですか?
でも具体的にどうすればいいかわかりません…
2進数直して上位8ビットに256を掛けてやつと下位8ビットの和
からoffsetを引いて100で割ると測定値になるんですが、
???です???
二つの整数a, b を引数としてaをbで割った際の余りを返す関数を、演算
子 % を使わずに作成し、その動作を確かめなさい。ただし、この関数では
再帰呼び出しを用いること。

という宿題が出たのですが、%無しで余りを出すやり方がわからず再帰呼び出しというのもあまりわかってないです・・・。
解答のほうよろしくお願いします。

深い再帰の悪寒
#include <stdio.h>

int amari(int a, int b)
{
if(a>b){
a-=b;
amari(a,b);
}else if(a==b){
return 0;
}else{
return a;
}
}

int main(void)
{
int a,b;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);

printf("a/bの余りは%d\n",amari(a,b));
return 0;
}
へ?これだけじゃないの?

int minus(int a,int b){
if(a < b)return a;
return minus(a - b ,b);
}
プログラムの最後で
演算結果をテキストファイル(data.txt)で
出力するにはどうしたらいいんですか?
実行プログラム > data.txt[enter]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>396
それはわかってるんです・・・
プログラム自体でdata.txtのファイルを作る方法を。
>>391
(・3・)アルェー 
b=0と負値の入力はぼるじょあ的処理系依存ですYO!

>>393 >>394
(・3・)アルェー 
せめて,これぐらい頭をヒネってくださいYO!
負値入力されると,困っちゃいますYO!

#include <stdlib.h>
int amari(int a, int b){
if(!b) a/=b;
b=abs(b); a=abs(a);
if( a>b ) a=amari(a,2*b);
return a>=b?(a-b):a;
}
>397 入門書とかないの?
Cなら
int val=0;
FILE *fp=fopen("data.txt","w");
fprintf(fp,"演算結果%d",val);
fcolse(fp);
400397:04/06/28 02:57
解決しました
ありがとうございます
401391:04/06/28 09:13
回答していただいた方々ありがとうございます。%無しだとそうやるのですね。
ありがとうございましたーm(._.)m
>>401
一応念のために言っておくが、剰余演算子(%)がなくても
普通はもっと簡単に求められる。
例えば負の値を扱わないでよければこれだけ。
int amari(int a, int b) {return a - (a / b) * b;}
403デフォルトの名無しさん:04/06/28 10:14
>>402
divを使えばもっと簡単。
404403:04/06/28 10:14
391を読まずにレスしてしまった。
質問です。
f(x)=xの三乗の定積分を台形則により求めるプログラムを作れという課題が出ました。
言語はCです。よろしくお願いします。
406へぼプログラマー:04/06/28 12:00
>>405
宿題は少し自分で考えろ。全部丸投げはおのれのためにならんぞ!

こういう風に考えたけどどうか?とか少しは自分の考えを述べる!
>>406
スレ違い
>>406
いいこと言っていると思う。
宿題回答するだけじゃ一方通行だし。
ソースを評価しあうみたいなこともできるじゃん。
まぁここは、単位のための答だけを求めてるやつと、
そういうやつらをさらにスポイルすることを目的としたやつらが集うスレ
台形則が分からないなら分からないって素直に言えよ
分からない
>>388
これでいいのかな。
http://up.nm78.com/data/up034761.lzh
全部丸なげするような奴のスキルを上げさせないためのスレだと思ってるw
台形則って積分を数式として求めるんじゃなくて微小区間に分割して近似値を求める方法じゃね?
aからbまでの区間を求めたいんだったら
h=(b−a)/mとすると

∫aからb f(x)dx= h { 1/2 (f(a)+f(b)) + f(a+h)+f(a+2h)+・・・+ f( a + (n-1)h ) }

って感じで…
ここは、プログラム書く事くらいしか能の無い香具師が、
その辺の香具師にスキル付けられて食いはぐれないように、
宿題丸投げしてくる普通の香具師に、いかにスキルを付けさせないか企むスレッドです。
なんかさあ、今更丸投げイクナイみたいなレスうざいんだけど。
>416
じゃあ、おまえが答えてやれよ。
俺わかんねーもん。
418405:04/06/28 13:35
すみません、色々と説明不足でした。

a,b,分割点数nを入力して、f(x)=xの三乗の定積分∫aからb f(x)dxを台形則により求めるプログラムを作れ

414さんの言うように、a,b区間をn個の台形に分割して、各台形の面積を合計する、という方法でやります。
∫aからb f(x)dx= h { 1/2 (f(a)+f(b)) + f(a+h)+f(a+2h)+・・・+ f( a + (n-1)h ) }
今自分も友達とやっているのですが、この式が使えそうです。
どなたか解ける方がいましたらよろしくお願いします。
421385:04/06/28 14:11
やっぱわかりません(;;)
どなたか訂正したソースお願いしますm(__)m
>>59-60のoffsetと上位と下位から計算してる部分参考にしろよ。
>>405
>>420ちゃんがいいソースもってきたからさぁ

double snx(double x)
{
return sin(x);
}

のぶぶんをさ

double snx(double x)
{
return x*x*x;
}

とするとイイイヨ
菅沼(・∀・)イイ!
425デフォルトの名無しさん:04/06/28 14:53
どなたかC言語でお願いします。

10個の荷物があります。大きさはそれぞれ以下の通りです。
荷物番号 大きさ
0      3111
1      121
2      1651
3      3748
4      1520
5      4552
6      2883
7      825
8      4839
9      2151
この荷物を容量が10000のナップザックに出来るだけ隙間なく詰めます。
定量的には、荷物の大きさの和が10000以下になる組み合わせのうち 最大になる荷物の組み合わせを求めます。
1)10個の荷物の中で、大きさが3000以下かつその中で最大の荷物を見つけ出し、 その番号と大きさを表示するプログラムを書け。

2)10個の荷物のうち、いくつかの番号を入力し、 入力された番号の荷物のそれぞれの大きさと合計を表示するプログラムを書け。

3)荷物の組み合わせを全て表示するプログラムを書け。 (表示方法は荷物番号だけでよい。) また、表示は膨大な量になるので、提出する場合は一部だけでよい。

4)以上に基づいて(別に基づかなくても良いが) ナップザック問題を解き、正解の組み合わせと大きさの合計を表示する プログラムを書け。

よろしくお願いします。



線形リスト全てを削除する関数を作れ。
(ノードに割り当てられたメモリを解放することを忘れないように)
この問題をC言語で解いてくださいお願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=98
>>425
まずはアルゴリズムの本を繙こうね♪
short nimotsu[10]={3111,121,1651,3748,1520,4552,2883,825,4839,2151} ,box=0,j

for(i=0;i<10;i++){
if(nimotsu[i]<=3000 && nimotsu > box){
box = nimotsu
j = i
}
}
printf("番号%d大きさ%d\n", j, nimotsu[j])

これでがんばれ
このままじゃコンパイルできないからね
>>428>>425の1)
きちんと理解しないとバグがわからないようにプログラム作ってさ
わざとバグのあるプログラムをうぷしてやればいいんだよ
431デフォルトの名無しさん:04/06/28 16:10
mallocを使う問題
short型データn体を扱うメモリ領域を確保する。
 nはプログラム開始時キーボードから入力する。
 また、確保した領域は全て0で初期化すること。
432425:04/06/28 16:14
>>429
ありがとうございます。助かります。
>>431
#include <stdlib.h>
#include <stdio.h>

main()
{
 void *mem;
 int size;
 scanf("%d", &n);
 mem = calloc(n, sizeof(short));
}
>>431
#include <stdlib.h>
#include <stdio.h>

main()
{
 void *mem;
 int size;
 scanf("%d", &size);
 mem = calloc(size, sizeof(short));
}
435デフォルトの名無しさん:04/06/28 16:21
>>431
お早い解答ありがとうございます。
436385:04/06/28 16:37
>422

わかりません(++)
助けて下さいm(__)m
437デフォルトの名無しさん:04/06/28 16:56
>>431
の発展系

次の構造体データをn体扱うプログラム。
 nはプログラム開始後入力するものとする。
 構造体 enemy_dat
 メンバ short型 id;
char型  level;
int型  hp;
char型  pow;
なお、領域確保後idには0〜hまでの
通し番号をその他は全て0で初期化すること。

今学校でやってます。
お暇ならでしたらやってみてください。
先輩方の解答もぜひとも参考にしたいのです。
#include <iostream>
#include <vector>

typedef struct enemy_dat{
shortid;
charlevel;
inthp;
charpow;
}EnemyDat;
using namespace std;
vector<EnemyDat> Enemy;
int main(void){
 EnemyDat init_dat;
 int vol;
 memset(&init_dat, 0, sizeof(EnemyDat));
 cout <<"確保する数を入力\n"<<endl;
 cin >> vol;
 Enemy.assign(vol, init_dat);
 vector<EnemyDat>::iterator it;
 int i=0;
 for(it = Enemy.begin(); it != Enemy.end(); it++, i++)it->id=i;
 return 0;
}
>>437
#include <stdlib.h>
#include <stdio.h>

typedef struct _enemy_dat2
{
short id;
char level;
char pow;
int hp;
} enemy_dat;

int main(void)
{
enemy_dat* ed;
int size;
scanf("%d", &size);
ed = (enemy_dat*)calloc(size, sizeof(enemy_dat));
for (int i=0; i<size; ++ed, ++i) ed->id = i;
return 0;
}
enemy_data はアライメント考慮してメンバの位置を変えた。
>>425
問題3)、4)の解答。
再帰があまりスマートにかけなかったよ。
最大容量組み合わせ:9994(1, 6, 8, 9 )
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=133
441デフォルトの名無しさん:04/06/28 18:37
どなたかC++でお願いします。
テキスト・モードにおけるブロック崩しゲームを作成する。
・ボール:2バイトコードの「●」を使用する。色は自由。
・壁  :2バイトコードの「■」を使用する。色は自由。
・ラケット :2バイトコードで各自自由とする
下記のプリプロセッサ処理をする。
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#define CLS()
#define COLOR(n)
#define LOCATE()
#define CURSOLE(f)
#define FUNCTION(f)
#define SCREEN(f)
#define RIGHT
#define LEFT
その他

よろしくお願いします。
>>441
よっしゃあやってみるか
Win2k以降はエスケープシーケンスつかえないだろ
>>441
GP!
>>441
残念ながらdos.hとかconio.hというヘッダファイルはオレの環境には存在しない。
>>441
>#inlcude <stdio.h>
>...
C++ だろ?
エスケープシーケンスかと思ったけど、
毎回全画面書き換えればできるか
C++にもstdio.hあるよ。
cstdioもあるけど
>>447
コンソールの行数はどうやって取得するの?
自分で壁書くんだから80とか固定でいいだろ
MS-DOS の頃は INT21 で返してくれたように思う。
今はしらん。
この辺使っていいの?
void gotoxy(int x, int y);
int movetext(int left, int top, int right, int bottom, int destleft, int desttop);
453425:04/06/28 19:51
>>440
ほんとにありがとうございます。
454437:04/06/28 20:44
>>438 さん
C++でしょうか?
自分にはその知識がありません。
とても勉強になります。

>>439 さん
>enemy_data はアライメント考慮してメンバの位置を変えた。
学校側としてもこれが言いたいがために出した問題だったようです。
大正解、さすがです。

お二方とも、どうもありがとうございました。
455デフォルトの名無しさん:04/06/28 21:47
>>452
できれば使わないでほしいです。
456441:04/06/28 21:50
>>442
ありがとうございます。
457デフォルトの名無しさん:04/06/28 22:06
考えても分かりませんでした..。よろしくおねがいします!

配列をポインタにより処理する課題 
次のような配列xの宣言がある。
   int x[8]={10,2,-3,4,55,6,-71,8};
int型へのポインタpt1,pt2を用意し、
 pt1=x; pt2=x+8;
とおけば、*pt1はx[0]、*pt2はx[8]を参照する。配列xの要素を逆順に並べ替える
処理をポインタpt1,pt2を使って書け。(配列記法x[i]は使ってはならない。処理が
完了している事をprintf()により配列をプリントし提出せよ。)
458もす:04/06/28 22:17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Number 30
void DisplayStudent(struct Student*);
struct Student{ // 学生を表す構造体
char name[20];// 氏名
char sex[4];// 性別
char address[100]; // 住所
char number[10];// 出席番号
int math;// 数学の点数
int eng;// 英語の点数
int prog;// プログラミングの点数};
void main(){
int i;
struct Student *p;
struct Student student[Number]={
"セガタ サンシロウ","♂","東京都渋谷区","0000123",50,60,90,};
p = student;
for(i=0;i<Number;i++){
DisplayStudent(p+i);}
printf("構造体の大きさ:%d \n", sizeof(struct Student));
}
void DisplayStudent(struct Student* student){
printf("%s %s : 数学=%d, 英語=%d, プログラミング=%d \n", student->name, student->number,
student->math, student->eng, student->prog);}
>>457 問題文がちと変だな。
例示するんなら pt2 = x+7 にするか、配列が int x[9] じゃないと。

 int x[8]={10,2,-3,4,55,6,-71,8};
 int *pt1 = x, *pt2 = x+7;

 for (int i=0; i<4; i++) {
  int tmp = *pt1;
  *pt1 = *pt2;
  *pt2 = tmp;
  pt1++; pt2--;
 }

 pt1 = x;
 for (int i=0; i<8; i++) {
  printf("%d ", *pt1);
  pt1++;
 }
 printf("\n");

こんな感じで。
460もす:04/06/28 22:20
改行制度ため、見にくいです。スンマセン

↑を元にしたような感じで、
例えば数学の点数を?点以上の生徒の氏名から出席番号、点数を
表示させるプログラムをお願いしたいのですが・・・
?点はキー入力でお願いいたします。どうか。
461457:04/06/28 22:21
有難う御座います!試してみます。

課題のプリントはミスプリントであると授業で言ってたかも
しれません。pt2=x+7と訂正していたと思います。すみません!
>>457 指定が無いのでC++とした。

#include<cstdio>
#include<algorithm>
using namespace std;

void printnum( int i ) {
 printf( "%i\n", i );
}

int main( ) {
 int x[8]={10,2,-3,4,55,6,-71,8}; // 良い子のみんなはx[]={...}だ!
 int *pt1=x, *pt2=x+8; //良い子はx+sizeof(x)/sizeof(x[0])だ!
 reverse( pt1, pt2 );
 for_each( pt1, pt2, printnum );
}
463457:04/06/28 22:28
>>462
多分Cだと思います。459様のを試して頑張ってつくってみます。
何かさらに教えてくれる事があったらおねがいします。
%i
465457:04/06/28 22:52
すみません>>457をもう少し詳しく教えてください。
>>465
はぁ?
467457:04/06/28 22:56
>>466
>>459を試したのですがうまくいかなくて・。
>>466
問題を把握しきれてないんだろうよ、本人が(w
何を教えればいいのか分からんぞ。
470457:04/06/28 23:07
出来ました。迷惑掛けました。 ありがとうございます!
>>468そうかもしれません、すみません!
ところで>>464は何が言いたかったのだろう???
>>467
ほらよ。

#include <stdio.h>
int main(){
  int x[8]={10,2,-3,4,55,6,-71,8}, *pt1, *pt2;
  pt1 = x; pt2 = x + 8;
  while(pt1 < --pt2){
    *pt1^=*pt2^=*pt1^=*pt2;
    pt1++;
  }
  for(pt1 = pt2 = x; pt2 - pt1 < 8; pt2++)
    printf("%d ", *pt2);
  return 0;
}
473457:04/06/28 23:22
>>472
ありがとうございます。
多レス申し訳ございません。
"^="なんてゆう演算子ってあったっけ?
>>474
えー。

あぁXORか
*pt1^=*pt2^=*pt1^=*pt2;


こんなの提出したら挑発だと思われるだろうなw
そうか?
ちょっと分からなかった。ワロタ。なーるほどね。
俺、まだまだ青いなぁ。
アクロバット
アクロバットリーダーたけし
>>8
確率統計^^
アンカーミスッターー
>>27
484デフォルトの名無しさん:04/06/29 00:30
*pt1^=*pt2^=*pt1^=*pt2;
これいいな〜
もらっていい?
ループの途中でRocketクラスのnenryoがマイナスになったらループを中断するプログラムを組もうとしているのですが思うようにできません。
for(int i=0; i<kurikaesi || x.nenryo<0; i++)とやるとiが10超えてもいつまでも繰り返してとまらなくなって困ってます。。。
問題のコードはこちら http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_17/rocket.txt
最近cをはじめたのですが、こんな課題が出ました。
 
3次元ベクトルを要素が実数の1次元配列で表すものとする。
2つの3次元ベクトルの配列を第1、第2引数として受け取り、
それぞれのベクトルの大きさを第3、第4引数に、内積を関数値として返す関数を作成する。この関数を用い2つのベクトルを入力して、それらの大きさと内積を表示せよ。

配列使って内積を出すくらいはわかるのですが、関数使うとなるとわからなくなってしまいます。出来れば解答をよろしくお願いします。
487もす:04/06/29 00:38
458お願いしますよ・・・(´ω`)
>>485
ソースなんか要らなかったな。for の中よく見れ。よーーく見れ。
>>488
もしかしてfor文の繰り返し判断式は二つ以上書いてはだめってやつですか?
damepo...
>>486
>配列使って内積を出すくらいはわかるのですが、
じゃぁまずそこまで書いてみれ。

>>490
ちゃうわ コンパイル通ってたらだめもへったくれもないだろ
>>492
もう少しがんばってみます。
リストのノードの順番を、逆順にする関数を作れという問題が出たんですが、
データを入れ替えるのではなく、
next の値を変更することにより逆順にする。
と言うんです。
すいませんがCでお願いします
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=228
495デフォルトの名無しさん:04/06/29 01:25
>>486
書いてみます。慣れた人からみれば無駄に長いのでしょうが勘弁してやってください(;´Д`
#include <stdio.h>
int main(void){
int i;
double j[3],k[3],sum=0.0;
printf("2つの3次元ベクトルjとkの数値を入力しなさい\n");
for(i=0;i<3;i++){
scanf("%lf",&j[i]);
}
for(i=0;i<3;i++){
scanf("%lf",&k[i]);
}
printf("j=(%f,%f,%f)\n",j[0],j[1],j[2]);
printf("k=(%f,%f,%f)\n",k[0],k[1],k[2]);
for(i=0;i<3;i++){
sum+=j[i]*k[i];
}
printf("j×k=%f\n",sum);
return 0;
}
sage忘れた上に、レス番号違ってる・・・。>>492さんへでした<(_ _)>
i<kurikaesi || x.nenryo<0

i が kurikaesi より小さければtrue
i が kurikaesi 以上で x.nenryo が 0より小さければtrue
i が kurikaesi 以上で x.nenryo が 0以上ならfalse

498デフォルトの名無しさん:04/06/29 01:31
別にageても誰も文句は言わないよ・・・
>>494
ぱっと見、こういう感じかなぁ。
この関数の引数はどんな感じになるのか...

prev = NULL;
thisnode = head_of_list;
while(thisnode != NULL)
{
 next_of_thisnode = thisnode->next;

 thisnode->next = prev;

 prev = thisnode;
 thisnode = next_of_thisnode;
}
>>492
if(x.nenryo<0)をforの中に入れてbreakで途中で抜け出すぐらいか思いつきませんでした。
for(int i=0; i<kurikaesi; i++)の中にどのようにx.nenryo<0を入れていいか思いつきませぬ。

>>495
double s(double[], double[]);

main(略

double s(double j[], double k[]) {
int i;
double sum=0.0;
for(i=0;i<3;i++){
sum+=j[i]*k[i];
}
return sum;
}
こうするだけだよ。double[] もらって double 返す。
>>497 をよく読め。
x.nenryo<0 を入れるという発想がおかしいんだぞ(できないこともないが)
if () break; なら抜ける条件、for の中なら抜けない条件だ。分かるか?
503デフォルトの名無しさん:04/06/29 01:41
>>502
497見る前にレスしてしまいました。
もうすこし自力で考えます。
>>499
node_t *insert_node(node_t **nd_ptrptr, int n, data_t dt)
{
node_t * nd_ptr;
node_t ** ptrptr;
ptrptr = nd_ptrptr;
while (n != 0 && *ptrptr != NULL) {
nd_ptrptr = &((*ptrptr)->next);
n--;
}
nd_ptr = new_node(dt, *ptrptr);
if (nd_ptr == NULL) return NULL;
*ptrptr = nd_ptr;
return nd_ptr;
}
これをいじってはできませんかね?
>>500
オイオイ,
if(条件) break; と while(条件) じゃ,条件判定論理が正反対だぞ?
判ってるのか?

if( a==0 ) break;→while(a!=0)
if( a&&b ) break;→while( !a||!b )
>>504
すまぬがそのソースは頭のやわらかい人に読んでもらってくらはい。
>>506
はいー

>>494の問題誰がお願いします。
>>505
while(i<kurikaesi && x.nenryo>0){
x.Accel(nyuryoku_hunsya);
x.Report(i+1);
i++;
}
今までのアドバイスを受けてできたのがこれですがいかがなものでしょうか。。。
>>508
それだと x.nenryo == 0 でもtrueだね。
つーかforでやるんじゃなかったの?別に好き好きだけど。
>>494 >>504
コラコラ,逆順にするだけで新しいノード作るなよ。
node_t *reverse(node_t *node){
node_t *old_next;
node_t *new_next=NULL;
while(TRUE){
old_next=node->next;
node->next=new_next;
if( old_next==NULL ) break;
new_next=node;
node=old_next;
}
return node;
}
51183:04/06/29 02:10
すごい亀レスですが、質問させてください。
>>85をみました。
途中にある、

switch(mm){
case 12:youbi+=30;
case 11:youbi+=31;
case 10:youbi+=30;
case 9:youbi+=31;
case 8:youbi+=31;
case 7:youbi+=30;
case 6:youbi+=31;
case 5:youbi+=30;
case 4:youbi+=31;
case 3:youbi+=feb;
case 2:youbi+=31;
}
youbi=youbi%7;

なぜこんなことをするのかがわかりません。
おえしえてください。
>>510
すいませんーありがとうございます。
>>510
君も番兵様なNULLノード作ってるやん(w
錨みたいにそこへ繋げるのね・・・

>>511
例外処理
>>509
for(int i=0; i<kurikaesi; i++){
if(x.nenryo<=0){
cout << "燃料が0以下になりました\n";
break;
}
x.Accel(nyuryoku_hunsya);
x.Report(i+1);
}
for文でもう一度考え直しました。
ちょうど0ならそこで終われますがnenryoが10から-20とかになると-20と表示されてしまうのがなんとも。。
>>85 は読んじゃいないが,
前月までの日数の総和を算出しているように見える。
516デフォルトの名無しさん:04/06/29 02:19
>>512
逆順って、たとえば3 4 5 6 7と並んでいたら、7 6 5 4 3にするということだよな?
>>510じゃならないぞ。
517510:04/06/29 02:20
>>513

>>504
>node_t *insert_node(node_t **nd_ptrptr, int n, data_t dt)
>これをいじってはできませんかね?
『これを使って』と勘違い…_| ̄|●
518516:04/06/29 02:21
あ、勘違いしていた。スマソ。
漏れはソースを反射的に読まなかったんだが、おまえらなんだかんだ言って優しいですね。
(´ω`)ちょっとハカーに変身しるわ
for(int i=0; i<kurikaesi; i++){
if(x.nenryo>0){
x.Accel(nyuryoku_hunsya);
}
if(x.nenryo<=0){
cout << "燃料が0以下になりました\n";
break;
}
x.Report(i+1);
}
>>521
ありがとうございますm(_ _)m
頭悪くて申し訳ないです。
なななんか、盛り上がってんな(〃▽〃)
>>494
再帰にしてみた。

static node_t *reverseMain(node_t *node1, node_t *node2) {
if (node1) {
node_t *nnode = node1->next;
node1->next = node2;
reverseMain(nnode, node1);
} else {
return node2;
}
}

void reverse_list(node_t **node) {
*node = reverseMain(*node, NULL);
}
5行めのreverseMainの前、return忘れた、、、。
>>522
あのさ、&&は思いつかなかったんか?
for (int i = 0; i < kurikaesi && x.nenryo > 0; ++i) { ... }
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=99

このプログラムを改造して整数を2進数で表示したいんですが、うまくいきません。
これを完成させてくれませんか?(num:表示する数字、dnum:表示する桁数、pos:表示位置)
※numの桁数がdnumより大きい場合は、左詰で表示する。
※posの内容により左詰('L')、中央揃え('C')、右詰('R')にせよ。
 確認のため、空白の代わりに"_"を表示せよ。
ふふ
529デフォルトの名無しさん:04/06/29 13:00
692 :デフォルトの名無しさん :04/06/29 12:50

ファイルから実数型のデータを入力し、分散を求め、ファイルに出力するプログラムを作成せよ。



提出期限は、次週の授業開始時までとする。

ただし、プログラム仕様は下記のとおり。

(1) 入力するデータの数は100個とする。

(2) 分散を求めるために、ファイルを2回読み込む方式を取れ。 (本当は配列で取っておき、計算する方が効率が良いが、  前章のファイル入出力の復習の意味
を含め、2回読み込
む方式を採用することにする)

(3) ファイルへの出力フォーマットは、下記のとおり。
平均 = 平均の計算結果
分散 = 分散の計算結果


ただし、最大値、最小値が複数存在する場合には、データ中での先頭からの番号は、 若い方にせよ。

(4) 入力ファイル名は、input.dat、出力ファイル名は、output.dat。
お願いします。
猿スレにまでマルチですか。必死ですね。
531デフォルトの名無しさん:04/06/29 13:46
FFTについてのプログラムなんですけど、ソースコードを
解読してもらいませんか?
さっぱり、何が書いてあるのかわからなくて、困っています。
ソース↓
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=101

どなたか、お願いします。
マルチうざい
ググれよ池沼
>>531
コンパイルできないコードが書かれています。
test2.c 25: 'M_PI' undefined
test2.c 37: syntax error near 'void'
test2.c 38: syntax error near '{'
test2.c 46: 'xRe' undefined
test2.c 46: 'xIm' undefined
test2.c 47: 'xRe' undefined
test2.c 47: 'xRe' undefined
test2.c 47: 'xIm' undefined
test2.c 47: 'xIm' undefined
test2.c 48: 'xRe' undefined
test2.c 48: 'xIm' undefined
test2.c 61: 'M_PI' undefined
test2.c 61: 'M_PI' undefined
test2.c 65: 'xRe' undefined
test2.c 65: 'xIm' undefined
test2.c 66: 'xRe' undefined
test2.c 66: 'xIm' undefined
test2.c 66: 'xRe' undefined
test2.c 66: 'xRe' undefined
test2.c 66: 'xIm' undefined
>>524
コンパイルしたらできました。
ありがとうございます。

すいませんが
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=228
複写する関数も作ってくださいお願いします。
>>535
これでどうですか?

copy_list(node_t *nd_ptr)
{
node_t * p;
data_t dt;
p = nd_ptr;>while(p != NULL){
dt = p->data;
p = p->next;
}
}
>>535
複写ってリストの複製を作るってこと?

node_t *duplicate_list(node_t *node) {
if (node == NULL) return NULL;
return new_node(node->data, duplicate_list(node->next));
}
#include<stdio.h>
int main(void)
{
int i=0;
int n;
int sum=1;
double totalsum=0;
printf("n=:");
scanf("%d",&n);
do{
i++;
sum*=i;
totalsum+=1.0/sum;
}while(i<n);
printf("%f,%d",totalsum,sum);
return(0);
}

n=100を代入しても計算できるようにするにはどうすればいいのですか?
539441:04/06/29 16:30
すいません条件が増えたのでもう1度書き込みます。
どなたかC++でお願いします。
テキスト・モードにおけるブロック崩しゲームを作成する。
・ボール:2バイトコードの「●」を使用する。色は自由。
・壁  :2バイトコードの「■」を使用する。色は自由。
・ラケット :2バイトコードで各自自由とする
・ブロック :「■■■■」で1つのブロックとする
ライフ・スコアをつけ、ゲームスタート・ゲームオーバーを表示する。
下記のプリプロセッサ処理をする。
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#define CLS()
#define COLOR(n)
#define LOCATE()
#define CURSOLE(f)
#define FUNCTION(f)
#define SCREEN(f)
#define RIGHT
#define LEFT
その他
よろしくお願いします。
540537:04/06/29 16:31
mallocは失敗しないと仮定するw
>>539
オレの環境にはconio.hもdos.hもない。
>>539
>#inlcude <stdio.h>
>...
C++ だろ?
C++にもstdio.hあるよ。
cstdioもあるけど
Cのライブラリとしてついてるんじゃないのか。
C++の標準ライブラリに.hはつかなかったはず・・・

ごめん、記憶違いかも
546デフォルトの名無しさん:04/06/29 17:44
C++にも.hはつきます
>>542-543
禿げしくデジャヴ(・∀・)帰れ!
>>539
>>441でも気になってたんだが

>(略)
>#define RIGHT
>#define LEFT
>その他

その他ってなんだ?
むしろ.hpp
>>526
ありがとうございます。
前に間違えてfor (int i = 0; i < kurikaesi || x.nenryo < 0; ++i){ とやったことがあるのですがこれだとなぜいつまでも終了しないんでしょうか。
iは繰り返しの数を超えていてx.nenryoがマイナスになっても続くのですが。。。
>>550
>x.nenryo < 0
燃料が0以下(マイナス)の間、ループするってことになっている
forやwhileの条件式は成立すればループするって扱い
>>539
それっていつまでの宿題?
日数かかりそうだから別のスレに移動した方がよくないか?
553デフォルトの名無しさん:04/06/29 18:59
>>551
あ、ほんとだ。。。
ものすごく恥ずかしいですがありがとうございました。
もう少し頭鍛えてきます。
>>539
Cならできるけどそれではダメ?
555デフォルトの名無しさん:04/06/29 19:55
>>548
他に必要だったらつけたすという事です。
>>552
7月までです。
>>554
ご好意は嬉しいのですがC++でなければいけません。
556デフォルトの名無しさん:04/06/29 19:58
>>552
すいません間違えました。7月7日までです。
壁の弾性計算とかラケットの摩擦係数とかブロックからの反射角とかボールの
加速度とかを良く考えないといけないから('A`)マンドクソ
558デフォルトの名無しさん:04/06/29 20:12
整数を大きいものから順に並びかえるプログラムなんですけど、?の所に何が
入るかわかりません。どなたか教えていただけませんか?
#include <stdio.h>
#include <math.h>
void printArray(int array[],int num);
main()
{
FILE *fp,*wp;
int data[100],num,i,j;
int max,maxPos;
fp=fopen("num.txt","r");
if (fp==NULL){/*エラ処理*/
printf(" not exist\n ");
return 1;
}
i=0;
while(fscanf(fp,"%d",&data[i]) != EOF){
i=i+1;
}
num=i-1;
fclose(fp);
printArray(data,num);
559デフォルトの名無しさん:04/06/29 20:14
for(j=0;j<num;j=j+1){
max=data[j];maxPos=j;
for(i=j;i<? ;i=i+1){
if (max < data[i]) {
max=data[? ];
maxPos=i;
}
}
data[? ]=data[j];data[j]=max;
}
printArray(data,num);
/* ファイルに保存する */
wp=fopen("numr.txt","w");
if (wp==NULL){
printf("make file error \n ");
return 1;
}
for(i=0;i<num;i++){
fprintf(wp,"%d\n",data[i]);
}
fclose(wp);
return 0;
}
void printArray(int array[],int num){
int i;
for(i=0;i<num;i=i+1)
printf("%4d",? );
printf("\n");
}
560デフォルトの名無しさん:04/06/29 20:31
num=i-1;
これおかしくないか? num = iな気がするんだが。

max=data[i];
data[maxPos]=data[j];data[j]=max;
printf("%4d",array[i]);
561556:04/06/29 20:57
>>557
壁の弾性計算とかラケットの摩擦係数とかそこまで細かく考えずに
ただ打ち返すだけのもので結構です。
562デフォルトの名無しさん:04/06/29 21:06
>>558
< `∀'></*エラ処理*/

563556:04/06/29 21:15
やはり('A`)マンドクソ 過ぎでしょうか?
>>561
テトリスあるよね?
アレはブロックが落ちてくるけど逆に言うとボールが止まっている訳ね。
これで君へのレスはお姉妹。
565デフォルトの名無しさん:04/06/29 21:57
>>560
ありがとうございます。さっそく明日、大学でやってみます。申し訳ないんですが、for(i=j;i<? ;i=i+1) の?も教えていただけませんか?
566デフォルトの名無しさん:04/06/29 22:07
2分木に行きがけ順(pre-order)で
キーボードから文字を読み込み格納したいのですが
どのように考えればよいでしょうか?
文字以外が入ったらその先はNULLになるようにしたいのですが。
567デフォルトの名無しさん:04/06/29 22:10
クラメールの公式を用いて連立方程式を解くプログラムをCで作ったのですが
実行して数値を入力し、解を求めようとするところでプログラムが落ちてしまいます
コンパイル時にエラーは出なかったのですが何か悪いところがあるのでしょうか?
ソースがちょっと長い(約60行)なので別のところに書いてアドレスを貼ります
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=103

ちなみにクラメールの公式について
ttp://eagle.ee.fit.ac.jp/class2003/1mathA/01/01-2.html
sage
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=104

(1)上のプログラムを改造して、上のプログラムで切り出した単語の頻度をカウントするプログラムを作成せよ。
  結果は、別のファイルへ出力すること。
・出力ファイル例:
focusing 1
intuitive 2
reasoning 1

(2)(1)でカウントした単語を頻度の多い順にソートし、ファイルへ出力するプログラムを作成せよ。
結果は、別のファイルへ出力すること。

(3)(2)を改造し、各索引語の索引語頻度([各索引語の頻度]/[文書中の索引語の最大頻度])を計算し、値の大きい順に
ファイルへ出力するプログラムを作成せよ。結果は、別のファイルへ出力すること。
>>563
マンドクサイというよりも、いまどきDOSプログラミングなんて環境ないし、アホラシイ。
GUIなら、それなりにやりがいもあるし、誰かやるだろうけど。
>>567
#define MAXN 10
for (int i=; i<=m; ++i) scanf("%d",&a[i][j])
1オリジンなんだから a[10]は範囲エラー。 a[i-1][j-1] にする。

つーかプロトタイプが main にあったり int det() の定義がおかしかったりするのによく通ったな。
×for (int i=; i<=m; ++i) scanf("%d",&a[i][j])
○for (int i=1; i<=m; ++i) scanf("%d",&a[i][j])
>>563
ブロック崩しなら七行スレにいくつかあるから
プログラムかけるんなら参考にしてみれば?
オセロ作って来いとか言われたんですけど、相手はコンピューターの・・・

それってC言語ならって半年そこらでつくれるようになるんですか、普通?
対CPUオセロも七行スレにあったな。
Partいくつかは忘れたけど過去スレ全部html化されてるっぽい。
>>574
パクれよ。ただしUIは自前で用意して胡麻枷
>>575
参考に見てみましたが、どこで改行してるのか分からないし
マクロ処理はまだならってないんです

>>576
そ、そんな
578567:04/06/29 23:10
>>571
とりあえず
a[10][10]を
a[i-1][j-1]に変えてみたのですがコンパイルエラーが出てしまいました

int b[10],w[10];
int m;
main()
{
int i,j,jj[10];
int a[i-1][j-1];
int aij,bi,d,da;

このようにしたのですが
もしかして私はすごい勘違いをしていますか?
>>571
プロトタイプ宣言がmain()の中にあるのは別におかしくないよ。

>>578
>もしかして私はすごい勘違いをしていますか?
してます。
581579:04/06/29 23:14
そういえばディ〜プ ブル〜のアルゴリズムって公開されてたっけ?
583567:04/06/29 23:23
2元までの連立方程式は解けて
3元以上になるとプログラムが落ちるというわけの分からない状態なんですが
ソースミスならまったく解けないはずだし...
>>578 for 文での話し。
for(i=1;i<=m;++i){
for(j=1;j<=m;++j){
printf("a(%d,%d)=",i,j);
scanf("%d",&a[i][j]);
}
ここで a[i][j] とあるが、i == 10、 j == 10 の時を考えて見れ。

>>580
main() の中だったらプロトタイプの意味ないじゃない?
>>583
クラメルは2次元までだったような…
3次元以上ならガウスのやつだな
>>584
いや、main()の中から呼ぶ関数をmain()で宣言するのは古いスタイルでCommonCではよくあった。
プロトタイプ宣言になってからは、引き数も宣言するようになったので関数外で宣言するのが当たり前になった。
>>585
クラメルは何次まででも使えるぞ
>>586
そうなんだ。解説サンクス。
589デフォルトの名無しさん:04/06/30 00:41
>>539
スルーされてやんのプッ
590デフォルトの名無しさん:04/06/30 02:37
あの学校のプログラミングの授業で微分方程式を必ず用いてプログラム作れっていう
課題が出たんですけどどんなのやればいいですかね?
ちなみにバネ2本つないで振動させるっていうのは駄目らしいです。


>>590
マルチ野郎は氏ねや
592590:04/06/30 03:01
何が?
普通に何をやればいいのかわからず・・・
>>592
バネ3本つないで振動させる
>>593
それいい。
>>566
どうやって文字以外をキーボードから入力するんだ?
懇切丁寧,いたせりつくせりな詳細仕様キボンヌ。
596デフォルトの名無しさん:04/06/30 10:47
引数の個数を固定せず、コマンドラインで指定された全ての実数の
合計を求めるプログラムを教えてください。
Cでお願いしますm(__)m
>>596

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

int main(int argc,char *arg[])
{
int sum=0,i=1;

while(arg[i]!=NULL){
sum=sum+atoi(arg[i]);
i++;
}

printf("合計値%d\n",sum);

return 0;
}
598597:04/06/30 10:59
あー実数だった...
よきにはからえ
3並べ(○×ゲーム)のプログラムを作成せよ
ただし2人のプレイヤーが交互に座標を入力し、そのたびに
3×3の升目とこま(○×)を表示するようにする。

ヒント:3×3の整数配列を用意し、はじめは全て0で初期化
する。あとは○なら1,×なら2のように表現すればよい。

だそうです。期限が迫ってます、、どうかお力添えをお願いしたいです。Cでお願いしいます
 
600596:04/06/30 11:09
>>597>>598
ほんとに早いですね!感謝します
>>599
その昔 X かじってたんで GUI ありで提出したイヤミな俺
602599:04/06/30 12:08
だ、誰かわかる方いないでしょうか、、?
603センス無し男:04/06/30 12:17
#include <stdio.h>

int main() {
int x, y, i, k, xx, yy;
char *names[2] = { "A", "B" };
int matrix[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
int muls[8];
int over;

int player = 0;
for (i=0; i<8; i++) {
do {
printf("%s : x 0-2, y 0-2\n", names[player]);
scanf("%d,%d", &xx, &yy);
} while ((xx < 0) || (xx > 2) || (yy < 0) || (yy > 2) || (matrix[xx][yy] != 0));

matrix[xx][yy] = player + 1;

//表示
for (y=0; y<3; y++) {
for (x=0; x<3; x++) {
printf("%d ", matrix[x][y]);
}
printf("\n");
}

//判定
for (k=0; k<8; k++) {
muls[k] = 1;
}
for (y=0; y<3; y++) {
for (x=0; x<3; x++) {
muls[y] *= matrix[x][y];
muls[3 + x] *= matrix[x][y];
if (x == y) muls[6] *= matrix[x][y];
if (x == 2 - y) muls[7] *= matrix[x][y];
}
}
over = 0;
for (k=0; k<8; k++) {
if (muls[k] == 1) {
over = 1;
break;
} else if (muls[k] == 8) {
over = 1;
break;
}
}
if (over) {
printf("%s is\n", names[player]);
break;
}
player = 1 - player;
}
}
標準で boolean てなかったっけ? for の中に変数宣言できなかったっけ?
ブロックの途中に変数宣言できなかったっけ?
などと java 漬け+無印コンパイラで右往左往する僕。
センスに欠けてるから怪しまれなくてちょうどいいんじゃないか。
605603:04/06/30 12:21
誰か添削して美麗に凝縮したの作ってくれるとうれしい
>>597
argv[argc+1]==NULL ということはないんじゃないか?
607デフォルトの名無しさん:04/06/30 12:59
16進数を入力し、シフト演算子を用いて2進数に変換するプログラムを作成せよ
おねがいします
「2進数として表示」って意味でいいんだろうなこの場合。
609ぼるじょあ ◆yBEncckFOU :04/06/30 13:19
>>607
先頭に無駄な0が表示されるけど、気にしない気にしない(・3・)

#include <stdio.h>
#include <limits.h>
int main()
{
unsigned a,b;
int i;
scanf("%x",&a);
for(b=1U<<sizeof(unsigned)*CHAR_BIT-1;b;b>>=1U)
putchar(a&b?'1':'0');
putchar('\n');
return 0;
}
610ぼるじょあ ◆yBEncckFOU :04/06/30 13:24
必要のないint i;を消し忘れた。
611599:04/06/30 15:04
>>603>>604
これは599の解答なんでしょうか?
>>611=>>599
yes
613599:04/06/30 15:13
>>612
ありがとうございます。
恩にきります!!
ソースコードを読めるようになるのが先か書けるようになるのが先か…
勝利メッセージの部分をなおし間違えて "A is" なんてした僕がすまんかった
未経験のオヤジの目算じゃ当てにならないな
5分で終わるかもしれないし3ヶ月の案件かも知れん
コソボ イラク ごめん
618デフォルトの名無しさん:04/06/30 16:14
>>616
誤爆(プ
619デフォルトの名無しさん:04/06/30 17:09
回転の(行列を含む)計算に、何の値を入れたら何の値が返って来るのでしょうか(´・ω・`)
例えばベクトルx=0,y=0,z=10と回転xziku=90,yziku=0,zziku=0を入れると、x=0,y=10,z=10が返ってくるという考えでいいのでしょうか?
620619:04/06/30 17:10
最後のはz=0ですorz
>>605
>>604の置換 つーか >>604のアルゴリズム理解するのマンドクサー
#define comp(a,b,c) if((a)&&(a)&(b)&(c)) goto end
for(k=0;k<3;++k){
comp(matrix[k][0],matrix[k][1],matrix[k][2]);
comp(matrix[0][k],matrix[1][k],matrix[2][k]);
}
comp(matrix[0][0],matrix[1][1],matrix[2][2]);
comp(matrix[2][0],matrix[1][1],matrix[0][2]);
}
end:
printf("%s is\n", names[player]);
}
622621:04/06/30 17:26
>>605
>>603もちょっぴり置き換えてみるテスト
#include <stdio.h>
int main(){
int x, y, i, k, xx, yy, player;
char *names[] = { ".", "O", "X" };
int matrix[3][3]={0};
for(i=0,player=1; i<9; ++i, player^=3){
do {
printf("%s : x 0-2, y 0-2\n", names[player]);
scanf("%d,%d", &xx, &yy);
} while ((xx < 0) || (xx > 2) || (yy < 0) || (yy > 2) || (matrix[xx][yy] != 0));
matrix[xx][yy] = player;
//表示
for (y=0; y<3; y++) {
for (x=0; x<3; x++) printf("%s", names[matrix[x][y]]);
printf("\n");
}
623デフォルトの名無しさん:04/06/30 17:39
CRandumクラスのメンバ関数に
 a〜bの一様乱数を生成する関数の実装部分を書く。
 但し、関数名はdouble GetVal(double a,double b)
の問題なんですが、
double VRandum::GetVal(double a,double b)
{

}
この中のプログラムを教えてください、お願いします。

double VRandum::GetVal(double a,double b)
{
(*゚∀゚)=3
}
625もす:04/06/30 18:05
やっぱり 458、460お願いします・・・

どこに・どのようにscanfしたら良いのか分からなくなってきました。
for()の中身もなんか・・・変な風に考えて作ったら動かない・・・
(´ω`)ツマラナイ内容ですけど今一度お願いします
>>619

教科書読め。
627607:04/06/30 18:46
>>609
解答ありがとうございます
>>625=>458=>460
以下の関数を付け加えれば、それなりのものができると思うが。
俺にはこれ以上何望んでるかわからんから、他にしたいことあったらもっと詳しく。
あと、作って動かないなら、晒してどうやったら動く?、と聞いた方がよいと思われるが。

void showmath(struct Student *p){
int i,point;
printf("数学の点で表示する最低を入力 =");
scanf("%d",&point);

for(i=0;i<Number;i++){
if((p+i)->math>=point){
DisplayStudent(p+i);
}
}
}
629623:04/06/30 19:54
VRandumじゃなくてCRandumですね・・・記述間違い、すいません〜。
むしろRandumが気になる。記述者の間違い?
double VRandum::GetVal(double a,double b)
{
 return rand()%2 ? a : b;
}
632もす:04/06/30 21:29
>628
有り難うございます。
ですがなぜかエラーがでたり・・。

"山田太郎","男","神奈川県横浜市","0123456",56,47,65,};

void showmath(struct Student *p){
int i,point;
printf("数学の点で表示する最低を入力 =");
scanf("%d",&point);

for(i=0;i<Number;i++){
if((p+i)->math>=point){
DisplayStudent(p+i);
}
}
}
458の続きで、↑のようにしたのですが、
プログラムの内容が理解できません。ので文字列の出力方法が分かりません。
468様のプログラムにはscanf();が見あたらないのですが、出力はされるのでしょうか?
出力=printf();しか知らないので分かりませんでした。
>>632
628じゃないけど下のようにすればいい。

for(i=0;i<Number;i++){
/*DisplayStudent(p+i);*/
showmath(p+i);
printf("構造体の大きさ:%d \n", sizeof(struct Student));
}
間違えた。>>633のfor文を削って
showmath(p);
入力した文字数を出力するプログラムを作ってください。
ただし、文字列の先頭アドレスを引数として、文字列の長さを返す関数mylenを作り、main関数でその関数を呼び出すようにしてください。
636628:04/06/30 21:58
>>632
>>634の通りです。
やっぱmain内も書いた方が良かったな…
あと、main以下に書くなら、プロトタイプ宣言忘れずに。

で、一応解説しとくわ
void show(struct Student *p){
int i,point;
printf("数学の点で表示する最低を入力 =");
scanf("%d",&point);//表示させる最低点の入力

for(i=0;i<Number;i++){ //最初から最後まで構造体をすべて調べる。
if((p+i)->math>=point){//もし、入力した点(point)より今の構造体(p+i)の数学の点((p+i)->math)が高ければ、
DisplayStudent(p+i);//DisplayStudent関数に今の構造体(p+i)のアドレスを送って、DisplayStudent関数で表示。
}
}
}
>>635

#include <stdio.h>
#define MAXLENGTH 30
int mylen(char *str){
int num=0;
while(*str++)num++;
return num;
}

int main(){
char str[MAXLENGTH];
printf("input string=");
scanf("%s",str);

printf("%s (length=%d)",str,mylen(str));
return 0;
}
>>635
#include <stdio.h>
int mylen(char *str){
  int i;
  for(i = 0; *(str + i); i++);
  return i;
}

int main(){
  char *buf[1024];
  fgets(buf, sizeof(buf), stdin);
  printf("%d\n", mylen(buf) - 1);
  return 0;
}
639635:04/06/30 22:06
ミスった。 char buf[1024] です・・
640569:04/06/30 22:57
誰かお願いします・・
641デフォルトの名無しさん:04/06/30 23:34
2×2の行列A及びBをキーボードから読み込み、その積(C=AB)を求めるプログラム

出力例
Input a :3
Input b :5
Input c :2
Input d :3
Input e :4
Input f :2
Input g :5
Input h :3

37 21
23 13

(注意)配列を使うこと。

お願いします。
642デフォルトの名無しさん:04/06/30 23:40
ギャップ(ー)を含む名前を入力したら、ギャップを取り除いた配列を
出力するプログラム

(ギャップは苗字と名前の間に入れ、また母音も変える。)

ex)
名前を入力してください。:T-n-k--t-r- ←Tanaka Taroを上記のギャップ変換の規則に当てはめた。
出力結果
Tnktr
>>642
#include <stdio.h>

int main(void)
{
char buf[256];
int i;
printf("名前を入力してください。:");
fgets(buf, 256, stdin);
for (i = 0; buf[i] != '\n' && buf[i] != '\0'; ++i)
if (buf[i] != '-') putchar(buf[i]);
return 0;
}
>>641
#include <stdio.h>

int main(void)
{
int A[2][2], B[2][2], C[2][2] = { {0, 0}, {0, 0} };
int i, j, k;
for (i = 0; "abcd"[i]; ++i) {
printf("Input %c :", "abcd"[i]);
scanf("%d", &A[i & 2][i & 1]);
}
for (i = 0; "efgh"[i], ++i) {
printf("Input %c :", "efgh"[i]);
scanf("%d", &B[i & 2][i & 1]);
}
for (i = 0; i < 2; ++i)
for (j = 0; j < 2; ++j)
for (k = 0; k < 2; ++k) C[i][j] += A[i][k] * B[k][j];

for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) printf(" %d", C[i][j]);
puts("");
}
return 0;
}
645デフォルトの名無しさん:04/07/01 00:18
級数の和S=1+1/2+1/3+・・・+1/Nを計算するプログラムを

#include <iostream.h>
int main(void)
{
   int n ;
   cout << "N="
   cin >> n ;
   int i;
   double s = 0 ;
   for( i=1 ; i =<n ; i++){
     s = s + 1/i ;
   }
   cout << "S(N)=" << s << endl ;
   return 0 ;
}

↑こんな感じで作った場合、入力するnが大きな数になったときに
予想される制度上の問題点について述べなさいという問題なんですが
さっぱりわかりません。よろしくお願いします。
>>645
iがintegerなら限界があるだろ。
nが22億強の値なら無限ループするよ。
それが問題なんでは…?
>>645
i =<nはやめれ。
>>646
ありがとうございます。
このプログラムのnが大きくなったときの精度はどうなるのでしょうか?
nを22億より大きくするまでは正しく出力されるということでしょうか?
649645:04/07/01 00:29
>>647
ではどうすればいよいでしょうか?
1/i って...
1/i はintだね
i<=n と=は後に書くんだが。これは俺の環境だけか?
あと、s=s+1/iで、1/iは(double)1/iとキャストしてないと浮動小数点にならない(@VC++.net)
ついでに、<iostream>でusing namespace std;使った方がいいと思われ。

文法についてばっかでスマン。
653646:04/07/01 00:32
>>645
すまん。酔ってるんで適当にかいてしまった。
コンパイラによるがまあ32bitで
単なるint型なら0x7FFFFFFFが最大値。
これを越えた値を入力してみればすぐ問題がわかるよ…。
よってネタ
>>645
浮動小数点同士の足し算がどうなってるのかを考えないと駄目なんだけど、
例として、浮動小数点の精度を5桁とした場合で説明する。

2つの値 1.234e2 と 1.1111e-3 を足すことを考えた場合、
2つの値の桁をあわせてから足すことになる。
1.234e2 + 0.000011111e2
このとき、精度5桁だから、
1.234e2 + 0.0000e2
になっちゃって、 1.1111e-3 が足されなくなってしまう。

要するに、大きな数と小さな数を足す(引く)と、
小さい方の数字が意味を成さなくなっちゃう。

級数の和を計算するプログラムでは、
s = s + 1/i;
で 1/i の値が小さくなってくるとこの問題の関係で s の値が更新されなくなる。
愛があれば、セミコロンはいらんのか?
>>645
nの値以前に文法がなってない…。
これってコンパイルしてないだろ。
>>640
(3)が意味不明。
659645:04/07/01 00:40
>>653>>655
ありがとうございます。
浮動小数点について調べてみます。
>>657
すいません。本当は虫食いプログラムを完成させる問題+精度の問題です。
プログラムを実行する環境が今整っていなくて
単に紙に書くだけだったので間違えがあったんだと思います。
>>637-638
ありがとうございます!
iostream.h
     ~~
無しでもいいですか?
>>661
iostreah
663デフォルトの名無しさん:04/07/01 01:23
>>ぼるじょあ さん
あの昨日も書き込んだんですけど、マルチ野郎とかじゃないんで本気で教えてください。
微分方程式を必ず使ったC言語のプログラミングをするという課題です。
あまりに簡単なのは駄目らしいです。
ばね2本や3本の単振動とかは駄目っぽいです。
100本くらいならいいらしいんですけど。

簡単なのでいいので教えてください。お願いします。
664デフォルトの名無しさん:04/07/01 01:29
普通の計算式を逆ポーランド記法に直すプログラムを教えてry
>>664
1.普通の計算式の構文を解析する。
2.並び替えて文字列化して出力。
>>664
ぐぐったら出てくるって。
6671/2:04/07/01 02:52
#include <stdio.h>

const char* e(const char* p);

void put(const char* p, int len)
{ printf(" %.*s", len, p); }

void err()
{printf("error");
exit(-1);
}

const char* f(const char*p)
{if ( isdigit(*p) ) {
int l = 0;
while ( isdigit(p[++l]) ) ;
put(p, l);
p += l;
} else if (*p=='(') {
p = e(p+1);
if (*p!=')')
err();
++p;
}
else
err();
return p;
}
6682/2:04/07/01 02:53
const char* t(const char* p)
{char op;
p = f(p);
while (op=*p, op=='*'||op=='/') {
p = f(++p);
put(&op, 1);
}
return p;
}

const char* e(const char* p)
{char op;
p = t(p);
while (op=*p, op=='+'||op=='-') {
p = t(++p);
put(&op, 1);
}
return p;
}

main()
{char s[256];
fgets(s, 256, stdin);
e(s);
}
> const char* t(const char* p)
> {char op;
> p = f(p);
> while (op=*p, op=='*'||op=='/') {
> p = f(++p);
> put(&op, 1);
> }
> return p;
> }
>
> const char* e(const char* p)
> {char op;
> p = t(p);
> while (op=*p, op=='+'||op=='-') {
> p = t(++p);
> put(&op, 1);
> }
> return p;
> }
>
> main()
> {char s[256];
> fgets(s, 256, stdin);
> e(s);
> }
ん?もう埋めるの?
>>664
かなり適当。間違った入力はしないように(w
#include <stdio.h>
#include <string.h>
int nextop() {
int c;
while (c = getchar()) {
if (isdigit(c)) { putchar(c);
} else if (strchr("+-*/()", c)) { putchar(' '); return c;
} else if (strchr(" \t", c)){
} else { return 0; }
}
}
int main() {
int n, opl=1, op;
char ops[256] = {'\0'}, s[128] = {'\0'};
s['-'] = 2; s['+'] = 2; s['*'] = 3; s['/'] = 3; s['('] = 4; s[')'] = 1;
while (op = nextop()) {
while (s[ops[opl-1]] >= s[op]) {
if (ops[opl-1] == '(') {
if (op == ')') opl--;
break;
}
printf(" %c ", ops[--opl]);
}
if (op != ')') ops[opl++] = op;
}
while (ops[--opl] != '\0') printf(" %c ", ops[opl]);
putchar('\n');
return 0;
}
while (c = getchar()) {
じゃなくて
for (;;) { c=getchar();
だたよ。
while文とprintf関数,scanf関数を用いて,ひとつの整数をキーボードから入力させ,
入力した数値は xx です.これでよろしいですか?(y/n)
と尋ね,n が選択された場合には,再び整数の入力を促すというプログラム
をどなたかつくってください(´・ω・`)
>>673
ゴメン
単純過ぎてボケが思いつかなかったよ…
>>673
ちょっとは自分で考えた?
#include <stdio.h>
int main(){
int n;
char c='n';
while(c!='y'){
printf("整数を入力してください >");
scanf(" %d",&n);
printf("入力した数値は %d です.これでよろしいですか?(y/n)",n);
scanf(" %c",&c);
}
return 0;
}
>>676
兄さん
scanf(" %c",&c);

scanf("%c%c",&ans,&ans);
にしたほうがいいかも。
久々にscanfを使った。。。
678677:04/07/01 11:37
ごめん兄さん
ansはcに修正。
自分で作ってみたやつの変数名を書いちゃった
(/ω\)ハズカシーィ
「0〜7FFF の範囲の整数乱数100個を生成してファイルdata.txtへ格納する」
プログラムEmailアドレス+70.cppをディレクトリイd:\tmp\の中へ作る.
なお,ファイルdata.txtの格納場所はソースプログラムと同じ場所とする.

この課題が分かりませんorz
先生曰く簡単らしいんですが先週の講義出てなかった俺にはマジさっぱり。
単位がヤバイマジヤバイ。誰か助けてくださいorz
>>679
講義出てなくて単位取れないのなら自分のせいだろ。あきらめろ。
681673:04/07/01 12:30
できました!ありがとうございました
682デフォルトの名無しさん:04/07/01 12:49
1+2−5‥‥ という演算を行うために、
>+1改行

>答え+2改行

>答え-5改行

>答え‥‥
のように、符号付きで数値を入力すると,答が逐次表示される
プログラムを無限ループを使って作って下さい(電卓風のプログラム)。
という問題なのですが、さっぱり分かりません。whileやdo whileを使うみたい
なんですが、、、。
あと、main関数の型はvoid型でお願いします。

#include <stdio.h>
int main(){
int a,b=0;
while(1){
scanf(" %d",&a);
b=b+a;
printf("%d",b);
}
return 0;
}
>>682
#include <stdio.h>
#include <stdlib.h>

void main() {
int i;
char buf[256];
int z = 0;
while (true) {

scanf("%s", buf);
i = atoi(buf+1);
switch (buf[0]) {
case '+' : z += i; break;
case '-' : z -= i; break;
case '*' : z *= i; break;
case '/' : z /= i; break;
}

printf("%d", z);
}
}
685デフォルトの名無しさん:04/07/01 13:30
乱数を生成して1次元配列に保存したのち、配列内の値をすべて表示するC++プログラム。
ただし、arrayname[]の記法、*(pointer+i)の記法、*(arrayname+i)の記法を使ってみること。
(できる限り関数を用い、引数の書き方を理解すること。表示の仕方は自由)

乱数は作れるんですが、ただし書きのところがうまくいきません。
あまり理解ができていないのが現状ですが・・・
よろしくお願いします。
void print(int* arrayname,int size)
{
for(int i=0;i<size;i++)printf("%d\n",*(arrayname+i));
}
687デフォルトの名無しさん:04/07/01 14:52
http://phys.cool.ne.jp/physjpn/c7/Image361.gif
上のRC回路でスイッチを入れた後のコンデンサCの電圧変化をRunge−Kutta法を用いて解くこと。但し、C=1μH、R=1kΩ、E=1Vとする。また、スイッチを入れた後の経過時間(t)をms(=10−3秒)で計るとする。コンデンサCの電圧はx=f(t)とする。

という問題なんですが、誰かやり方教えてください。
688デフォルトの名無しさん:04/07/01 14:54
c言語なんですが課題で出て、まじ分かんなくて助けてほしいです!
このままじゃ赤点になってまう!!
二問あるけど、神な人教えて〜

1.各月の日数を格納した整数型の配列を定義してください。これを利用して、年、月、日を読み込んで、それが年の最初から何日目であるかを表示するプログラムを作成しましょう。
ただし、閏年の規則は、以下の規則で規定されるものとします。

@西暦の年号が4で割り切れる年は閏年。
A@には当てはまるが、西暦が100で割り切れる年は閏年ではない。
B@にもAにも当てはまるが、西暦が400で割り切れる年は閏年。

2.1に以下の機能を追加してください。
1のデータを表示したあとに、その年のその月のカレンダーを表示する機能。カレンダーはfor文の入れ子を使用してみましょう。(使わなくてもできますが。)

その月の1日の曜日が分かれば、カレンダーを作成できます。曜日を調べるのには、以下の文をどこかに挿入してください。曜日を調べる部分は、関数にしてもかまいません。
曜日は、変数retに代入された値で分かります。次の通りです。

日曜日月曜日火曜日水曜日木曜日金曜日土曜日
0123456

  int ret;

if (m == 1 || m == 2) {
y--;
m += 12;
}
ret = (y + y/4 - y/100 + y/400 + (13*m+8)/5 + d) % 7;
yは入力された年、mは入力された月,dは曜日を調べたい日です。1日の曜日を調べたいわけですから、このdには…
>>688
曜日は emu型で
690デフォルトの名無しさん:04/07/01 15:10
助けてください!! マジわからないです。
#include <iostream.h>
#include <string.h>
int main(){
char **pName;
char *Name;
int n;
cout << "生徒は何人ですか?\n"; cin >> n;
for(int a = 0; a < n; a++){
for(int i = 0; i < n; i++){
pName = new char*[n];
cout << "生徒の名前を入力して下さい。 "; cin >> Name;
pName[i] = new char[strlen(Name) + 1];
strcpy(pName[i], Name);
if(pName == NULL)
return 0;
}
}
for(int i = 0; i < n; i++){
for( a = 0; a < n; a++){
cout << pName[i][a] << ', ';
}}
for(i = 0; i < n; i++)
delete[] pName[n];
delete[] pName;
return 0;
}
のプログラムなんですが、エラーで”(13) : warning C4700: 値が割り当てられていないローカルな変数 'Name' に対して参照が行われました。”
と出ました。なぜ出るのか、ネットなどで自分で調べてみたのですが、わかりませんでした。名前をいくつか入力していって、それを後でいっぺんに表示させるプログラムを
作ろうとしました。他にも色々間違ってるかも知れないので、先生方のご指導お願いします。
>>688
いまコンパイラないから動くか分からないけど

#include <stdio.h>

int date(int y,int m,int d){ /* 問題文にあるやつね */ }

int main()
{
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d;
int day;
int i,ct;

scanf("%d %d %d",&y,&m,&d);
day=d;
if((y%4)&&!(y%100)&&(y%400))days[1]++;
for(i=0;i<m;i++)day+=days[i];
printf("%d日目",day);

ct=date(y,m,d);
for(i=0;i<ct;i++)puts(" ");
for(i=0;i<days[m-1];i++){
printf(" %d",i+1);
if(++ct%7)puts("");
}
puts("");

return 0;
}
>>690
ポインタを理解していないから。
>>690
char *Name:を
char Name[256];に変える
とんでもないくらい間違ってる、というか、変。あまりにも変。
std::string使えば良さそうなのに、なぜかcharの配列を使用してたり、
不気味な二重ループとか、無意味に何回も配列を確保したり解放したりして、
奇妙なことこの上ないんだが、そもそも何を作りたいのか、が分からんのだよ。
>>690
x pName = new char*[n];
o Name = new char*[n];
すまん >>688
if((y%4==0)&&(y%100!=0)&&(y%400==0))days[1]++;
697デフォルトの名無しさん:04/07/01 15:19
>>697
文字列の最後に'\0'を入れる
>>697
がんばれ!
>>690
#include <iostream.h>
この辺でもういいやと思った
701デフォルトの名無しさん:04/07/01 15:29
誠にありがとうございます。自分でもポインタは理解していない事はわかっていましたが、
かなり理解していないですね。
>>694さんの”std::string使えば良さそうなのに”というのはどういったものなんでしょうか?
すみません。教えていただけないでしょうか?
>>701
>>693だけやれば多分動くよ
>>701
まずは調べろ。話はそれからだ。
704679:04/07/01 15:30
>>680
そこをなんとかお願いしますorz

教科書読んでもよく分からない・゜・(ノД`)・゜・。
>>704
>Emailアドレス+70.cpp

とりあえず私はエスパーでは無いので、
あなたのEMailアドレスが分からないとできません
706682:04/07/01 15:37
>>684
エラーなんですが、、、。c言語の宿題なんですけども、
char buf[256];とか分からない初心者なんで、もう少し分かり
易くならないでしょうか。
707688:04/07/01 15:38
>>696
神!ありがとうございます!!
助かりそうです!!!
708デフォルトの名無しさん:04/07/01 15:38
台形公式のCプログラムを作りたいのですがさっぱりわかりません。
お願いします。いろいろなサイトを見たのですがコンパイルできません。
 1
∫ e^-x^2dx
 0
お願いします!!
>>706
エラーの内容もかかれてないから釣り
>>708
ソレはコンパイルできないだろうな
711690:04/07/01 15:47
char Name[256]; に変えて、2重ループは意味がないみたいなのでやめて、下の様にしてみました。

for(int i = 0; i < n; i++){
pName = new char*[n];
cout << "生徒の名前を入力して下さい。 "; cin >> Name;
pName[i] = new char[strlen(Name) + 1];
strcpy(pName[i], Name);
if(pName == NULL)
return 0;
してみたら、コンパイルはできたのでが、途中でエラーが出て終了になりました。
まったくさっぱりです。もう一度訓えて頂けないでしょうか?
iostream.h で通るの?
iostream じゃないと怒られるのだが
713682:04/07/01 15:49
NONAME.c: In function `main':
NONAME.c:8: `true' undeclared (first use this function)
NONAME.c:8: (Each undeclared identifier is reported only once
NONAME.c:8: for each function it appears in.)
ってでます
>>713
ごめん。1 に変えて。
while の代わりに for (;;) { でもいいよ。
>>713
while (true) {

for(;;){
に変えるだけじゃん?
>>711
よくわからんがこれじゃだめなのか?

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main(void)
{
 vector<string> enroll;
 string buf;
 for(;;){
  cout <<"生徒の名前を入力してください。(exitで終了)"<<endl;
  cin >>buf;
  if(buf == "exit")break;
  enroll.push_back(buf);
 }
 vector<string>::iterator ite;
 for (ite = enroll.begin(); ite != enroll.end(); ite++) cout << *ite << endl;
}
717デフォルトの名無しさん:04/07/01 15:56
698様
入力する得に
  scanf("%s",&str[i]);
こうなりますが、'\0'はどこに入れればよいでしょうか。
  scanf("%s\0",&str[i]);
は、ありえないと思うので。

699様
応援有難うございます。がんばります。
718690:04/07/01 16:02
716さん、すみませんが自分はまだまだ初心者でして、
全然まったく知らないものがたくさん出てきてて、自分には理解できません
719デフォルトの名無しさん:04/07/01 16:03
Cの宿題ですが、
入力した文字列を別の文字型配列にコピーした後、入力した文字列と、コピーした文字列を出力する文字列を作ってください。
ただし、二つの文字型配列s,tを引数として、tを指す文字列をsの指す領域にコピーする関数mycpyを作り、main関数ではその関数を呼び出すようにしてください。
pName = new char*[n];
for(int i = 0; i < n; i++){
cout << "生徒の名前を入力して下さい。 "; cin >> Name;
pName[i] = new char[strlen(Name) + 1];
strcpy(pName[i], Name);
if(pName == NULL)
return 0;

とりあえずさっきの所はこう変えろ(pName = new char*[n];をループの外に出す)
>>719

mycpy(char*s, const char*t)
{
 while(*s++ = *t++);
}


main()
{
 char a[256], b[256];
 mycpy(a, "アヒャヒャヒャヒャ");
 mycpy(b, a);
 printf("%s%s", a, b);
}
722690:04/07/01 16:07
変えてみましたが、また同じく止まりました(涙)
>>722
つーか今コードどうなってるのよ?
for(int i = 0; i < n; i++){
for( a = 0; a < n; a++){
cout << pName[i][a] << ', ';
}}

for(int i = 0; i < n; i++){
cout << pName[i] << ', ';
}
に変えれ
725690:04/07/01 16:11
#include <iostream.h>
#include <string.h>

int main(){
char **pName;
char Name[256];
int n;
cout << "生徒は何人ですか?\n"; cin >> n;

pName = new char*[n];
for(int i = 0; i < n; i++){
cout << "生徒の名前を入力して下さい。 "; cin >> Name;
pName[i] = new char[strlen(Name) + 1];
strcpy(pName[i], Name);
if(pName == NULL)
return 0;
}
for(i = 0; i < n; i++){
for(int a = 0; a < n; a++){
cout << pName[i][a] << ', ';
}
}

for(i = 0; i < n; i++)
delete[] pName[n];
delete[] pName;

return 0;
}
726690:04/07/01 16:12
↑になってます。
727679:04/07/01 16:21
>>705
いぢめないで・゜・(ノД`)・゜・。
>>725 これでどうYO
#include <iostream>
int main(){
using namespace std;
char **pName;
char Name[256];
int n;
cout << "生徒は何人ですか?\n"; cin >> n;

pName = new char*[n];
for(int i = 0; i < n; i++){
cout << "生徒の名前を入力して下さい。 "; cin >> Name;
pName[i] = new char[strlen(Name) + 1];
strcpy(pName[i], Name);
if(pName == NULL)
return 0;
}
for(i = 0; i < n; i++){
cout << pName[i] << ", ";
}
for(i = 0; i < n; i++) delete[] pName[i];
delete[] pName;
return 0;
}
729デフォルトの名無しさん:04/07/01 16:35
先ほど台形公式について質問したものですが、
#include <stdio.h>
#include <math.h>
double f(double x)
{ double y;
y = 4.0/(1.0+x*x);
return(y); }
main()
{
int i,n;
double x,xstart,xend,xintv;
double h,sum,pi,result;
xstart=0.0;
xend=1.0;
xintv= xend - xstart;
printf("Enter N :");
scanf("%d",&n);
h = xintv/n;
sum = 0.5*f(xstart);
for(i=1;i<n;i++)
{
x = xstart + h*i;
sum += f(x);
}
sum += 0.5*f(xend);
result = sum*h;
printf("\n Result of the integral = %16.14f",result);
pi = 4.0*atan(1.0);
printf("\n Pi = %16.14f Difference = %16.14f \n", pi, result-pi);
}
というプログラムをみようみまねで書いたのですが未定義のシンボルatanというものが出てきます。
どうしてなのでしょうか。
730690:04/07/01 16:39
728さん、すげー!!
ありがとうございます☆
謎は解けました!!
感謝です!!!
>>729
私の環境
Microsoft Visual C++ Toolkit 2003 (タダ)
ではコンパイルできますよ。
732690:04/07/01 16:44
あっ でも728さん
なぜに、
for(i = 0; i < n; i++){
cout << pName[i] << ", ";
}
for(i = 0; i < n; i++) delete[] pName[i];
delete[] pName;
にする事で、エラーが出なかったのでしょうか?
733デフォルトの名無しさん:04/07/01 16:45
私は学校のemacsでやっているのですができません・・・。
atanを定義するのはどうしたらよいのでしょうか?
-lmathじゃねーの?
おかしいのはここですYO
for(i = 0; i < n; i++){
 for(int a = 0; a < n; a++){
  cout << pName[i][a] << ", ";
 }
}
生徒数n人を指定して名前をn文字以下にすると配列外にアクセスいきますYO
上の書式なら
for(i = 0; i < n; i++){
 for(int a = 0; a < strlen(pName[i]); a++){
  cout << pName[i][a] ;
 }
cout <<", ";
}
じゃないとおかしいYO
coutはC++ですから引数型で振る舞い変えますYO
736690:04/07/01 17:10
なるほど。理解できました☆
本当にありがとうございました!!
これで、2次元配列は完璧・・・ではないでしょうが、
今回の事は完全に理解できたと思います。
本当に感謝です!!
737682 cの課題:04/07/01 17:58
へたれですみません。>>684
#include <stdlib.h>
char buf[256];
scanf("%s", buf);
i = atoi(buf+1);
とかよく分からないので
どなたかもう少し分かり易い方法をご教授下さい。
ちなみにエラーはtrueを1にしたらなおりました。
738539:04/07/01 17:59
>>554
やはりつくって貰えないでしょうか?
お願いします。
>>737
それ以上簡単な方法はないぞ。
741682 cの課題:04/07/01 18:08
>>739
でも全く習ってないのでどーにも分りません。
どなたかお助け下さい。
>>738
Windowsのコンソールでもいいの?
>>741
>>737の意味はわかるんですけどどう教えたらいいのかは
教え方を全く習ってないのでどーにも分かりません。
744682 cの課題:04/07/01 18:15
>>740
目ウロコです!!
見事に見落としてました!
ありがとうございます
>>743
すみません自粛します
745デフォルトの名無しさん:04/07/01 18:25
二次関数y=X^2について、xの値を-5から5まで変化させて、
printf文を用いてグラフを表示させるというもので、

*
*
*
*
*
*
--------
以下対称

と表示させるプログラムを作成したいんですが、
printf文を用いて空白を表示させるにはどうすれば良いのでしょうか?
printf(" ");
すいません、間違えました。
.は空白を表します。

........................*
...............*
........*
...*
.*
*
>>539
今から適当につくるよ…
ちょいまて。
>>747

void printBar(int length)
{
for(int i=0;i<length;++i)
 printf(" ");
puts("*");
}
750デフォルトの名無しさん:04/07/01 18:39
>>749
返答ありがとうございます。
それを参考にして学校で習ったように書いてみたのですが、

int main(void)
{
int y,x;
for(x=-5; x<6; x++){
y=x*x;
printf(" ");
puts("*");
}
printf("\n");

return 0;
}

これだと、空白が表示されず、
*
*
*
*
となってしまいます。どこがおかしいのでしょうか?
for(int i=0;i<y++i)
printf(" ");
>>750
参考にしてねえじゃねえか!!!
ワロタ
こんな方法もある。

#include <stdio.h>

int f(int x){
return x*x;
}

int main(void)
{
int i;
for (i = -5; i <= 5;i++)
printf("%*c\n",f(i) + 1, '*');
return 0;
}
755539:04/07/01 18:52
>>748
本当にありがとうございます!!
756750:04/07/01 18:59
ご迷惑をお掛けして申し訳ありません。
740,754さんの書き方は、学校で習っていないので、
出来れば自分が750で書いた方法を直し、表示したいと思っています。
参考にしてのは、puts("*"); です。

yの値が空白の数になるので、そこが表示されないのは、

y=x*x;
printf(" ");

の部分が不味いと思うんですが、どうなのでしょうか
なら自分で書けよ。
漏れには藻前が何習ってるのかなんて分からないんだから
758デフォルトの名無しさん:04/07/01 19:07
int main(void)
{
int y,x,i;
for(x=-5; x<6; x++){
y=x*x;
for(i=0;i<y;++i)
printf(" ");
puts("*");
}
printf("\n");

return 0;
}
759750:04/07/01 19:18
>>757
そうなるよう精進したいと思います。

>>758
うわーありがとうございます。
すごく助かりましたm(__)m
「習ってないから」っての見ると萎えるな。
>>760
あと
初心者です
ってのも
あっスレ違いすまそ
気持ちはわかるが、宿題スレだしなあ
習ってないからを使っちゃだめっていう宿題があるなら、それも萎える。
丸写しできる答えがほしいだけじゃなくて、
それを理解したいと考える人間もいるから、
意欲があるうちは付き合ってもいいと思うけどな。

習っていないと判断できるということは、
一応提示されたソースを読んでいるわけだし。
なんつーか、標準ライブラリにある関数すら(習ってなければ)使えないという宿題自体に萎える。
そういう問題出す教師にも萎える。教科書に書いてあったからとかごねればええやん。
C++ 標準ライブラリって全部で幾つ?
ひとつ
納得いかないなら答えなきゃいいだけの話では?
769539:04/07/01 20:58
>>742
返事遅れてすみません。
OKです。参考になればいいと思ってますから。
771デフォルトの名無しさん:04/07/01 22:15
>>770
別に丸投げしているつもりはありません。
丸投げしない人はまず自分でやってみたソースさらすよな。
もちろん
  コンパイルできない場合はエラーメッセージをちゃんと貼る。
  実行結果がおかしい場合には何がどうなったら正しいのかを明記する。
そして
  ヒントなり答えなり貰ったら自分で調べる。
普通はね。
773デフォルトの名無しさん:04/07/01 22:30
はじめまして
ただいま独学でC++を勉強しております。
iniファイルの読み込みプログラムを作成していたところ
疑問点がでてきたので質問させていただきます。

↓↓↓ソース↓↓↓
www1.ocn.ne.jp/~nasitaka/sample.zip

上記に乗せたプログラムを実行してみると
TestKey を指定しているはずなのにその上に
定義してあるabcというキー部分を読み込んで
表示してしまいます。

これはどういう理由でこのような仕様になっている
のでしょうか?
printf("TestKey = %s\n",strData);
775デフォルトの名無しさん:04/07/01 22:44
>>772
まず自分で最後まで作ることができず、
コンパイル以前の問題です。自分でも色々と調べたのですが
やはりわからずこのスレに書き込みました。
無知と言われればそれまでですが、ちゃんと自分で理解できる
ようになりたいと思っています。
すいません何を言っても言い訳ですね。
776773:04/07/01 22:47
>>774
そちらのほうが、見やすかったですね・・・・
すみません。
しかし、なぜ一つ上の値が読み込まれるようになっているのですか??
本来ならTestKeyの内容である
0068EBDC
という値が返ってきてほしいと思うのですが・・・
>>771
>>770だけどさ、別に>>771のことを言ったわけではないよ。

どーせ頑張っても頑張らなくても、後々全部自分に返ってくるんだし。
ttp://www.nuce.nagoya-u.ac.jp/curriculum/Lecture/ComputerR1/Kadai/

ここにある問題どっかで見たことあるような・・・
名古屋大だったわけね
779デフォルトの名無しさん:04/07/01 23:09
>>54とか>>55とか kdai10なわけで・・・
あげちゃえ〜
780748:04/07/01 23:10
>>539
ブロック崩しかいたよ…
DOS窓でつくると激しく面倒ですね。
とりあえず動くってだけで、当たり判定とか適当なので
ゲーム性を求めてはだめです。

C++で書けと指定してあったのでクラスを使っていますが
読みづらいと思います。
一番下にmain関数があるので、そこからソースをおっていってください。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=134
次はこんな質問がくるんだろうな

課題11 行列の積
提出期限 7/6(火)17:00 再提出期限7/7(水)17:00
次のプログラムの関数product, output_matrix を完成させて,行列A とB がそれぞれ
MatrixA.txt, MatrixB.txt(ファイルの先頭の2つの整数は順に,行数,列数を表す)とい
うファイルで与えられたとき, ABを計算してMatrixAB.txt に書き出すプログラムを作れ.
ただし,関数product は, Aの列数とBの行数が一致しない場合,画面に警告を表示し実行
を終了するように作成するものとする.
MatrixA.txt の例 MatrixB.txt の例 作成されるMatrixAB.txt
4 3
0.0 -1.2 2.8
2.1 -3.0 5.7
4.5 1.1 3.9
2.8 4.4 6.6
3 4
2.2 4.0 -1.4 5.5
3.0 0.0 1.6 2.2
7.7 -9.7 2.9 1.0
17.96 -27.16 6.20 0.16
39.51 -46.89 8.79 10.65
43.23 -19.83 6.77 31.07
70.18 -52.82 22.26 31.68
名古屋大ってアフォなんだな
名大から何の技術が発信されたっけな?ある?無名に近いかもな
締め切りすぎたからか
>>773
つかstrData初期化されてないよ?
一回目のprintf()でなんかよーわからんのが表示
二回目でTestKeyの値(なければ空文字列)
になると思われ。
二回目も意図してないのが表示されるのならiniファイルの指定が間違ってる。
iniファイルの指定はフルパスでないと、Windowsフォルダ探しに行くので注意。
そろそろ閏年の時期でつか?
カレンダーでつか?
単語帳でつか?
>>781
よーし、ぱぱ作っちゃうぞー

俺も名大生だった…orz...
名古屋大学
化学・生物工学科 分子化学工学コース
>>782
先生、「大学」でくくって考える方がアフォだと思います・・
そうか、いつかは見つかるとは思ったが名大だったか。
化学系だから、しょうがないかな。
>>778==解答がここのコピペばかりで困り果てた名古屋大教授
ttp://www.nuce.nagoya-u.ac.jp/curriculum/Lecture/ComputerR1/04Computer1.html
>Down Loadするためには
      ~~
ちょっとワロタ


ttp://www.nuce.nagoya-u.ac.jp/curriculum/Lecture/ComputerR1/Reidai/Reidai01.txt
>void main(void)

なんかもういいや
>>791
しぃっー。
>>782 は大学になんて、うわ、なにをsry
796デフォルトの名無しさん:04/07/01 23:26
>>787
参考にして作ったURLです。
ttp://homepage1.nifty.com/meru/prog/rag_c1.html

1回目のprintfではなにが表示されてもよかったので、初期化も
なにもしていないんです。2回目でのprintfではTestKeyの内容
を表示させたかったのですが、うまくいきません。

iniファイルへの書き込みをコメントでくくってありますが、これを
実行すると同一フォルダ内のiniファイル(Test.ini)にしっかり
書き込みをしているのを確認できるので、指定間違いはないようです。
797773:04/07/01 23:28
796=773です
798539:04/07/01 23:29
>>780
本当にありがとうございました。
>>793
松岡さんと橋爪さんって教授なのかな
800771:04/07/01 23:31
>>777
その通りですね。
だから、私は頑張りたいと思います。
まあ、極秘で↓のようなメールも内藤教授には送ってたんだけどな


個人的に自分の一生がかかるというのに
他人に頼ろうという考えが嫌いなので報告させていただきました。

各種の資料を調べるのはかまわないが, 必ず自分自身で書くこと. 他人のレポート
を写したり,
だれかに答を聞いてそれをそのまま書いたりしてはならない.

上に書いてあることに違反していると思われます
下に書いてあるURLに接続してみてください。

http://pc5.2ch.net/test/read.cgi/tech/1086612317/275

275 名前:デフォルトの名無しさん[] 投稿日:04/06/13 08:41
http://www.math.nagoya-u.ac.jp/~naito/lecture/2004_SS/PDF/07/report.pdf

↑ここのprob-3について教えていただけますか?

我々はコレを完璧に解かないと 卒業できずと教員免許もでない と いう事態にな
りますので皆様の力を貸してください。

なお、適当にURLをいじればコレまでの経過に関するページへ飛びます。

質問に対する回答
http://pc5.2ch.net/test/read.cgi/tech/1086612317/283
http://www.math.nagoya-u.ac.jp/
もっと使おうよ、アタマ
という標語を実践した結果がこれか。
ここで質問してた名大の二馬鹿は今後どうすんだろな
いままでは教授の評価高かっただろうし

おい、○○君近頃どうしたんだね
アルゴリズムがやたら平易になってるようだよ
PGとして即戦力になりえるくらいのプログラミング力だったのに・・・
まさか、カンニングでもしていたんじゃないだろうね?

二馬鹿「・・・」
>>778==自分で真面目にやったのにコピペした香具師に負けた真面目クン
名大の学歴に嫉妬した連中が猛々しくなっております。
Aaa:東京、京都
Aa :一橋、東京工業、大阪
A :東北、筑波、名古屋、神戸、九州、早稲田、慶應
ここにのってない大学はゴミ
>>773
これでも表示されんか?
test.iniはプログラムと同じディレクトリね。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=135
環境依存スレってあったような
809773:04/07/02 00:03
>>807
感動です!!
みごと表示されてました!!
これから解析してみようと思います。
また分からないことがあったらここで質問させていただきます。
ありがとうございました!!!!
ここまでにしてくれ。
Aaa:東京、京都
Aa :一橋、東京工業、大阪
A :東北、筑波、名古屋、神戸、九州、早稲田、慶應
Baa:北海道、お茶の水、東京外語、横浜国立、広島、上智、ICU
Ba :千葉、東京都立、電気通信、金沢、京都工芸繊維、奈良女子、大阪外語、大阪市立、大阪府立、岡山、東京理科、同志社
B :埼玉、東京学芸、東京農工、横浜市立、信州、新潟、静岡、名古屋工業、九州工業、熊本、立教、明治、津田塾、学習院、関西学院
>>810 駄目
Aaa:京都、東京
Aa :大阪、東京工業
A :慶應、東北
S :会津
会津ワロタ
>>810
やった俺の大学はいったw
God:MIT, UCB
Aaa:京都、東京
Aa :大阪、東京工業
A :慶應、東北
S :会津
2つの文字列 a,bを入力し、別の文字型配列にaをコピーした後、もう一つの文字列bをその後ろに追加するプログラムを作ってください。
ただし、3つの文字型配列s,t,uを引数として、tを指す文字列をsの指す領域にコピーした後、sにuを追加する関数mycatを作りmain関数ではその関数を呼び出すようにしてください。
#include <stdio.h>
static int mylen(char *s){ //strlen(a); を自前で作る。
int i;
for(i = 0; *(s + i) != '\0'; i++);
return i;
}
static void mycat(char *s, char *t, char *u){
int i;
for(i = 0; *(t+i) != '\0'; i++) //strcpy(s, t);を自前で作る。
*(s + i) = *(t + i);
for(i = 0; *(u+i) != '\0'; i++) //strcat(s, u); を自前で作る。
*(s + mylen(t) + i) = *(u + i);
*(s + mylen(t) + i) = '\0';
}
int main(int argc, char *argv[]){
char*a, *b, *c;
if(argc != 3){ //入力処理は適当にどうぞ。引き数でやります。
printf("argument value is no good.\n");
return 1;
}
a = argv[1];
b = argv[2];
c = (char*)malloc(mylen(a) + mylen(b) + 1);
if ( c == NULL ){
printf("memory allocation is error.\n");
return 1;
}
mycat(c, a, b);
printf("a, b, c: %s, %s, %s\n", a, b, c);
free(c);
return 0;
}
818817:04/07/02 02:51
for(i = 0; *(u+i) != '\0'; i++) //strcat(s, u); を自前で作る。
*(s + mylen(t) + i) = *(u + i);
*(s + mylen(t) + i) = '\0';



for(i = 0; *(u+i) != '\0'; i++) //strcat(s, u); を自前で作る。
*(s + mylen(s) + i) = *(u + i);
*(s + mylen(s) + 1) = '\0';

の方がいいかな。結果は同じでも意味は違うし。
//strcat(s, u); を自前で作る。と書いているからには、ね。
*(s + mylen(t) + i) = '\0'; も可読性が悪いし。
(´-`)。oO(おまいらがじゃれあっている間にmitの連中は着実にハカーへの途を歩んでいる…
(´-`)。oO(ひとりの研究をすすめるより多くの人間にcをわからせて世に出した方が世間のためになる・・・
(´-`)。oO(啓蒙目的ならば名著をしるしてコンセサスを高める方が効果的である…
*(s + mylen(s) + i) = *(u + i);



int len; を作って、s に t をコピーした後で
len = mylen(s); を受けておいてから
*(s + len + i) = *(u + i); だぁね。
次の行も *(s + mylen(s)) = '\0'; でなきゃまずくないかい?
823デフォルトの名無しさん:04/07/02 10:17
すみませんが次のプログラムを教えてくれませんか?
5人の学生の名前と成績を入力し、名前は2次元配列、成績は1次元配列に格納し、表示
するプログラムを作成せよ。

Please input 5 student's name and test score.
student1-name:tarou
-score:60
student2-name:hanako
-score:90
student3-name:jiro
-score:40
student4-name:daisuke
-score:80
student5-name:kaoru
-score:70

taro 60
hanako 90
jiro 40
daisuke 80
kairu 70
824691:04/07/02 10:35
>>688
まだみてるかー ちゃんと動く版

#include <stdio.h>
int date(int y,int m,int d){
if (m == 1 || m == 2) {y--;m += 12;}
return (y + y/4 - y/100 + y/400 + (13*m+8)/5 + d) % 7;
}
int main()
{
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d;
int day;
int i,ct;

puts("年 月 日");
scanf("%d %d %d",&y,&m,&d);
day=d;
if((y%4==0)&&(y%100!=0)&&(y%400==0))days[1]++;
for(i=0;i<m-1;i++)day+=days[i];
printf("%d日目\n",day);

ct=date(y,m,1);
for(i=0;i<ct;i++)printf("\s\s\s");
for(i=0;i<days[m-1];i++){
printf("\s%2d",i+1);
if((++ct)%7==0)puts("");
}
puts("");

return 0;
}
>>823
#include<stdio.h>
main()
{
char name[5][255];
int score[5];
int n;
printf("Please input 5 student's name and test score.\n");
for(n=0; n<5; n++){
printf("student%d-name:",n+1);
scanf("%s",&name[n]);
printf("-score:");
scanf("%d",&score[n]);
}
printf("\n");
for(n=0; n<5; n++)
printf("%s %d\n",name[n],score[n]);
}
>>825
kaoruをkairuにするのをお忘れですよ。
>>826
825じゃないけどパッチ
if(0==strmcmp(name[i],"kaoru"))strcpy(name[i],"kairu");
828デフォルトの名無しさん:04/07/02 11:18
825さんありがとうございます!
829デフォルトの名無しさん:04/07/02 11:35
ほんとに申し訳ないのですが
さっきの5人の学生を入力したあとに成績順に並べ替えるプログラムも
教えていただけないでしょうか?
さっきのやつでいくと
Please input 5 student's name and test score.
student1-name:tarou
-score:60
student2-name:hanako
-score:90
student3-name:jiro
-score:40
student4-name:daisuke
-score:80
student5-name:kaoru
-score:70

jiro 40
taro 60
kaおru 70
daisuke 80
hanako 90
となればいいらしいです。

#include <string.h>
// ソート
void sort(char name[5][64],int score[5])
{
char name_t[64];
int score_t;
int i,j;

for(i=0;i<5-1;i++){
for(j=i+1;j<5;j++){
if(score[i]>score[j]){
strcpy(name_t,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],name_t);

score_t=score[i];
score[i]=score[j];
score[j]=score_t;
}
}
}
}


ソートさせたいとこにこれを書く
sort(name,score);
831デフォルトの名無しさん:04/07/02 12:04
//ソートって何ですか?
ソーッとしといてやれ。
相当おもしろい
総統閣下は(ry
835デフォルトの名無しさん:04/07/02 12:19
呼び出される毎に1バイトデータの各ビットを1つずつ左にローテートする関数
例えば,10100000を左に1つローテートすると01000001となる
void rotate(unsigned char *)を作って任意の整数を3回ローテート
したものを表示する
 例
 整数:1
1-th shift: 2 00000010
2-th shift: 4 00000100
3-th shift: 8 00001000

というのと
ユーザが指定したキー文字(unsigned char型)とXOR演算子を組み合わせて,
ファイルを暗号化するプログラムをつくりなさい。但し,
ファイル名とキー文字はキーボードから入力します。

入力ファイル名:test.c
出力ファイル名:test2.c
暗号化キーは:%

というのを教えてください、お願いします
836816:04/07/02 12:22
>>817-818
ありがとうございます!

自分も考えて途中までやってみました。最後に足す部分がよく分かりませんでした。

#include<stdio.h>
char mycat(char *s,const char *t,const char *u);
int main()
{
char s[256],t[256],u[256];
char string1;
printf("文字列aを入力してください:");
scanf("%s",t);
printf("文字列bを入力してください:");
scanf("%s",u);
mycat(s,t,u);
printf("文字列は:%s\n",s);
}

char mycat(char *s,const char *t,const char *u)
{
while(*s++ = *t++);
}





ソートーなばかどもだな
>>835
コンパイルしてないから間違ってたら適当に直して

void rotate(unsigned char* c){*c<<1;}

int xor(const char* outname,const char* inname,unsigned char key)
{
FILE* in;
FILE* out;
int state=1;
int c;

if(NULL!=(in=fopen(inname,"r"))){
if(NULL!=(out=fopn(outname,"w"))){
while(feof(in)){
fputc(fgetc(in)^key,out);
}
fclose(out);
}else state=0;
fclose(in);
}else state=0;

return state;
}
間違えた
while(!feof(in)){

>>838
ありがとうございます!
あと
*c<<=1;

何度もすまん…
乱数50個をファイルに出力するさいに横に10個ずつ出力するようにしたいのですが
どうしたらいいか分かりません。縦に50個全部出力されてしまいます・・・・
誰かご教授お願いします。
ローテートやろ
>>842
int ct=0;

for(int i=0;i<50;i++){
fprintf(fp,"%d",rand());
if(++ct%10==0)fprintf(fp,"\n");
}
>>842

for (int i = 0; i < 50; ++i)
fprintf(fp, "%d%c", rand(), (i + 1) % 10? ' ': '\n');
847842:04/07/02 12:47
できました。お早いお答えありがとうございました。
848デフォルトの名無しさん:04/07/02 12:56
Cで

while( printf("hoge"), (c=getchar()) != EOF ){
....
}

という文があったのですが、この場合のようなコンマ(,)を用いた条件式はどう評価されるのでしょうか?
上の例の場合では、文脈的に後者(getcharを含む方)の方で判断される感じはわかるのですが、一般的にはどういう仕組みなのでしょう?
(でも実際、上の例では前者(printfの方)も後者も値を返すはずなのでよくわかりませんが。。。)
スレ違いなきもするけど
コンマで区切られた式の一番右側の値が式全体の値になる
たとえば
x=(a,b,c);
ならxにはcが代入される

つまりこの例は
printf("hoge")
while((c=getchar()) != EOF){
 ...
 printf("hoge")
}
と等価
>>848
左から右に評価されて、右の式の値が全体としての値になる。
左の式の値は捨てられるだけ。
オセロの問題なんですが分かりません。
すいませんがお願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=233
#include <stdio.h>

main()
{
int a, b,c,d;

printf("二つの整数値を入れてください--->");
scanf("%d %d",&a,&b);
c = a / b;
d = a % b;
printf("%d 割る %d は %d 余り %d\n\n",a,b,c,d);
return(0);
}
このプログラムを複数回繰り返すようなプログラムに変更したいんですがどうしたらいいでしょうか?
お願いします。
>>853
ありがとうございました。
855デフォルトの名無しさん:04/07/02 14:39
教えていただきたいのですが、
memsetっていうのはどういう働きをするのでしょうか?
できれば、サルでもわかるような説明をお願いします。
スレ違い。



857748:04/07/02 15:01
ああ、名前欄748から戻すの忘れてた…。
(;゚Д゚)
こいつマルチだよ
>>855
さる以下はわからなくていいのぉ〜?
会津って凄いね・・・
>>851
コンパイラ通してないけど

void get_move(int board[B][B], int player, int *p, int *q)
{
char buf[100];
int i, j;
printf("Player %d ", player);
while (1) {
printf("> ");
scanf("%s", buf);
if(isalpha(buf[0])){
*q = buf[0]-'a'+1;
*p = buf[1]-'1'+1;
}else{
*q = buf[0]-'1'+1;
*p = buf[1]-'a'+1;
}
if (is_legal_move(board, player, *p, *q)) return;
else{
for(i=1;i<=8;i++){
for(i=j;j<=8;j++){
puts("置ける場所");
if(is_legal_move(board, player, j,i)){
printf("%c%d\n",j+'a',i+1);
}
puts("");
}}}}
}
>>851
>>862氏のは候補がずれるかと。
void get_move(int board[B][B], int player, int *p, int *q)
{
    char buf[100];  
    int i, j;
    
    printf("Player %d ", player);
    while (1) {
        printf("> ");
        scanf("%s", buf);
if ('1' <= buf[0] && buf[0] <= '8' && 'a' <= buf[1] && buf[1] <= 'h') {
    *p = buf[0]-'1'+1;
    *q = buf[1]-'a'+1;
}
else {
            *q = buf[0]-'a'+1;
            *p = buf[1]-'1'+1;
}
        if (is_legal_move(board, player, *p, *q)) return;
printf("select a legal move: ");
for(i = 1; i <= 8; i++) {
    for(j = 1; j <= 8; j++) {
        if(is_legal_move(board, player, i, j)) {
            printf("%c%c ", 'a'+i-1, '1'+j-1);
                }
            }
        }    
    }
}
ブラックジャックの作成でコインを賭けられるようにする。
どなたかお願いします。

>>864
恐らく、授業の流れでブラックジャックを作成するというようなものがあると思うのだが。
それだけでは誰もやらないよ。
>>864

int main(int argc,char** argv)
{
   int COIN_WO_KAKERU = 1;
   BURAKKUJAKKU_NO_SAKUSEI(COIN_WO_KAKERU);

   return 0;
}
>835
1-th、2-th、3-thってなんだよ、オイ。
>>864
その課題が載ってるサイトのURLを教えてくれればやるよ。
>>868
また大学ネタかい?
870デフォルトの名無しさん:04/07/02 21:06
onth twith thrith
C言語でお願いします。
複素数z を読み込んで,絶対値と偏角を計算して印字す
るプログラムを作成せよ.但し,
• 複素数の実部と虚部を示す実数型変数をメンバとする
構造体COMPLEX
• 複素数の絶対値と偏角を示す実数型変数をメンバとす
る構造体POLAR
をtypedef 文を用いて定義し,以下の手続きをそれぞれ関
数として作成し,main 関数内では,手続き(1),(2) と(3)
を呼び出すだけにせよ.
1. 構造体COMPLEX を読み込む.
2. 構造体COMPLEX からPOLAR を計算する.
3. 構造体POLAR を印字する.
>>872
C99 で complex.h ができたからそれを使えば?
>>872 complex.hを使わずにやっといた。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct { double re; double im; } COMPLEX;
typedef struct { double abs; double arg; } POLAR;

COMPLEX read(void) {
char buf[256]; COMPLEX ret;
printf("実部: "); ret.re = atof(fgets(buf, sizeof(buf), stdin));
printf("虚部: "); ret.im = atof(fgets(buf, sizeof(buf), stdin));
return ret;
}

POLAR topolar(const COMPLEX* arg) {
POLAR ret;
ret.abs = sqrt(pow(arg->re, 2) + pow(arg->im, 2)); ret.arg = atan2(arg->im, arg->re);
return ret;
}

void print(const POLAR* arg) { printf("絶対値: %f 偏角: %f\n", arg->abs, arg->arg); }

int main(void) {
COMPLEX c = read(); POLAR p = topolar(&c); print(&p);
return 0;
}
>>874
ありがとうございます。助かりました。
876デフォルトの名無しさん:04/07/02 23:00
はじめまして、メモリリークに関して質問させてください。
くだ質は、ちょっとレベルが高そうだったので...

VisualC++6.0Standardを使用しています。
WTLを利用しています。
最適化コンパイラはいれていません。

VCでのメモリリーク検出について、Win32 Debugとしてビルトすると有効になる
という記述を見て、試してみたのですが、うまく検出してくれません。
というより、どこに出力されるのか、とかも曖昧です。
VC++6.0でのメモリリークの検出について、教えてくださいorz
よろしくお願いします。

メモリリークしているはずだけど、検出されないコード
//helloproj.cpp
int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
int *p2;
p2 = new int[5];
//略(deleteは行わず)
}
>>876
・それは宿題か?
・ここはレベル低いと言うのか?
正直低いです。
>>876
auto_ptrでも使っとけ。
ここは、初心者本を読み終わってコードを書いてみたいけど手頃なサンプルが無い人が、
やる気のない超初心者にコードを書いてあげてみるスレです。
>>876

void* operator new(size_t t)
{
//この辺で好きなだけ情報を書き込むw
//return (void*)malloc(t);
}

void operator delete(void *p)
{
//この辺で好きなだけ情報を書き込む
free(p);
}
883デフォルトの名無しさん:04/07/02 23:38
次のプログラムお願いします。 
ファイルのオープン、クローズ fopen,fclose
商品ファイルをキーボードから受け取り、指定したファイル内容を変数
に格納し、表示するプログラムを作成せよ。商品ファイルは、複数のレコード
(行)(最大100レコード)で構成されており、各レコードには、「商品コー
ド(10文字未満の文字列)」「商品名(40文字未満の文字列)」「値段(0以上)
50000以下の整数値」が空白文字で区切られて並べられている。商品ファイルは
/lesson/junichif/giftsに用意してあるので、各自のディレクトリに
コピーして用いること。

% cat gift
JZK-30 Jizake_tsumeawase 4500
BSP-15 Body_soap_set 3000
Bt-200 Bath_towel_set 2500
TEA-20 Koutya_tsumeawase 5000
THY-55 Koutya_hachimitu_tsumeawase 3000
SPO-22 Tyoumiryo_variety_set 4000
%./kadai6-1
Input filename:gifts(ここをキーボードから入力)
JZK-30 Jizake_tsumeawase 4500
BSP-15 Body_soap_set 3000
Bt-200 Bath_towel_set 2500
TEA-20 Koutya_tsumeawase 5000
THY-55 Koutya_hachimitu_tsumeawase 3000
SPO-22 Tyoumiryo_variety_set 4000

長々すみませんがお願いします。
884デフォルトの名無しさん:04/07/02 23:52
もうひとつお願いします。
商品ファイル名をキーボードから受け取り、指定したファイル内容を
CSV(Comma Separated Value)形式に変換し、指定したファイルに出力
するプログラムを作成せよ。商品ファイルの形式は上のやつと一緒です。
CSV方式とは、1つのレコード内のデータをカンマで区切り、1行に並べた
ものである。ここでは文字列を""で囲むこととする。

%cat gift
JZK-30 Jizake_tsumeawase 4500
BSP-15 Body_soap_set 3000
Bt-200 Bath_towel_set 2500
TEA-20 Koutya_tsumeawase 5000
THY-55 Koutya_hachimitu_tsumeawase 3000
SPO-22 Tyoumiryo_variety_set 4000
%./kadai6-2
Input filename:gifts(これをキーボードから入力)
Output filename:gifts.csv(これをキーボードから入力)
%cat gifts.csv
"JZK-30", "Jizake_tsumeawase", 4500
"BSP-15", "Body_soap_set", 3000
"Bt-200", "Bath_towel_set", 2500
"TEA-20", "Koutya_tsumeawase", 5000
"THY-55", "Koutya_hachimitu_tsumeawase", 3000
"SPO-22", "Tyoumiryo_variety_set 4000",

よろしくお願いします。
885デフォルトの名無しさん:04/07/02 23:53
昨日ココで質問した者なんですけども、
教えて頂いた事を活用してクラスに挑戦してみましたところ、
またエラーが出て自分ではまったくわからないじょうたいです。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1088779194&res=1

どこがおかしいのか、また教えて下さい。
お願いします。
どんなエラーが出たか暗い賭けよな・・・
>>885
色々と変。まぁとりあえず基底クラスに仮想デストラクタは持たせとこうよ。
888デフォルトの名無しさん:04/07/03 00:22
誰かム板にACM/ICPCのスレたてておくれ・・・。
マ板にあるけど人が来ない・・・。
以下テンプレ

ACM国際対抗プログラミングコンテスト(ACM/ICPC)

ACMが主催する大学生を対象にした世界的規模のプログラミングコンテストです。
国内予選参加申込み締め切りは6月25日午後5時です。
登録はここから→http://www.ehime-u.ac.jp/ICPC/

本家サイト:http://www.acm.inf.ethz.ch/
過去問:http://www.acm.inf.ethz.ch/ProblemSetArchive.html
マ板:http://pc5.2ch.net/test/read.cgi/prog/1087653366/
889デフォルトの名無しさん:04/07/03 00:22
宿題が出ました。よろしくお願いいたします。


連立非線形方程式に対するニュートン法のプログラムを作成し、以下の問題を解きなさい。

(1)

{ x_1^2 + x_2^2 - 2*x_1 - 3 = 0
{ x_1*x_2 + 1 = 0

(2)

{ -x_1^2 + x_5 + 3 = 0
{ x_1 + x_2 - 2 = 0
{ -x_1 + exp(x_3 + 2) + 0.1 = 0
{ x_3 + x_4 - 0.3 = 0
{ x_1*x_3 - x_2*x_4*x_5 = 0

・終了条件は|| f(x^(k+1)) || <10^-8 を使用すること。
・反復係数k、近似解x^(k)、誤差|| f(x^(k)) || を出力し、2次収束をしているか確認すること。
・反復係数kが30回を超えたら強制終了させること。


連立1次方程式ならぐぐって見つかったのですが、さすがにn次やexpが入るとお手上げです(>_<)
>>885
Derive_Cintarray::Indeication() で p_Japanese[i] p_English[i] p_Mathematics[i] にアクセスしてるけど
領域が確保されてない。Cintarray::Selection() で割り当てるようだけど何処にも使われてないし。
>>883
#include <stdio.h>
#include <string.h>

int main(void)
{

FILE *fp;
{
char buf[256];
printf("Input filename:");
if ((fp = fopen(strtok(fgets(buf, sizeof(buf), stdin), "\n"), "r")) == NULL) {
fprintf(stderr, "cannot open file `%s'.\n", buf);
exit(1);
}
}
{
char ch;
while (fread(&ch, sizeof(char), 1, fp)) putchar(ch);
}
fclose(fp);

return 0;
}

>>884
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=138
892デフォルトの名無しさん:04/07/03 00:43
886さん、すみませんでした。
エラーですが、コンパイルはできるんです。でも、
数値を入力して、表示しようとしたら途中で止まってしまうんです。

887さん、仮想デストラクタをつけました。次はどのようにしたら良いのでしょうか?
>>892
自分の中でまとまってないんでわからなくなる。
クラス図書いたほうがいいよ。
オブジェクト指向を理解せずにC++(クラス)に突入するとこうなる  みたいなソースだな。
一折C++も理解できて。腕試しにチャットプログラムとか作ってみました。
それでさらに高度な技?見たいな物を学びたいのですが、C++の応用本みたいなものは
ありませんか?
896876:04/07/03 01:00
>>877 低めだと思います >>878 腰も低くしてみました
>>879 なるほど >>880 WTLがわかりません。何が分からないかもわかりません。ATLですか?
897876:04/07/03 01:02
>>881 オーバーライド・・・なんですか? >>882 やってみます。

多数のレス、ありがとうございました。
いただいた情報で、ちょっとやってみます。
成否にかかわらず、また結果報告しにきます
898883 884:04/07/03 01:05
891さんありがとうございます!
void get_move(int board[B][B], int player, int *p, int *q)
{
char buf[100];
int i, j;

printf("Player %d ", player);
while (1) {
printf("> ");
scanf("%s", buf);
if(isalpha(buf[0]) && isdigit(buf[1])){
*q = buf[0]-'a'+1;
*p = buf[1]-'1'+1;
if (is_legal_move(board, player, *p, *q)) return;
}else if(isalpha(buf[1]) && isdigit(buf[0])){
*q = buf[1]-'1'+1;
*p = buf[0]-'a'+1;
if (is_legal_move(board, player, *p, *q)) return;
}
}
}
900899:04/07/03 01:11
あ、間違えた
:
else if(isalpha(buf[1]) && isdigit(buf[0])){
*q = buf[1]-'a'+1;
*p = buf[0]-'1'+1;
if (is_legal_move(board, player, *p, *q)) return;
}
>>892
main()を下のに差し替え。
int main(){
Derive_Cintarray derive_cintarray;
derive_cintarray.Name_input();
derive_cintarray.Selection();
derive_cintarray.Repeat();
derive_cintarray.Indeication();
return 0;
}
902892:04/07/03 01:22
みなさんのおかげで、なんとか、自分の思った通りの結果を出すことができました!
それで、質問というより、知りたい事なのですが、
自分がやったような内容の結果を出そうと思ったら、みなさんなら、
どのようなソースになるのでしょうか?
かなりしりたいです。
多分、全然わからないような内容だとは思いますが、
今後のために参考として教えて頂けないでしょうか?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1088785071&res=1
>>902
書いておいた。
こんな宿題が出されました。
@実数x 整数nを受け取りxのn乗を計算する関数を作成せよ
(データをキー入力し関数を呼んだあとはxのn乗の値を出力すること)

A実数x 整数nを受け取りxのn乗を計算する関数を作成せよ
(データをキー入力し関数を呼んだあとはxのn乗の値を出力すること)
ここではnが負である場合も考慮すること。
>>904

double mypow(double x,int n)
{
   return pow(x,n);
}
906892:04/07/03 01:45
903さん、ありがとうございます!
ハッキリ言って、全然って事はないですけど、
わからない所がちらほら・・・。
ですが、これを見て、理解できるようなります。
本当にありがとうございました!
インプット、アウトプットもクラス化したいな。
StudentControllerクラスを作って、そいつを実装すればいいと思う。
909ミナミヌマエビ:04/07/03 02:07
こんばんは。
最近、C++とWINAPIというものをやり始めたばかりのものですが、早速つまっています。

やりたいことは、ダイアログにListBoxなどのコントロールを表示することなのですが

WM_INITDIALOG 時に CreateWindow( "listbox"...) を使うのではなく
ひとつクラスをつくって、そのクラスからCreateWindowを呼ばせるようにしたいのです。


下のソースは概略ですが、コンパイルはうまくいっているようですが

外部シンボル TestClass::setParam(HINSTANCE__ *, int , int ,...) が未解決
外部シンボル TestClass:: myCreateWindow(HWND__ *.) が未解決

というメッセージがでます。

もともと一つだったファイルを、以下のように3つに分けてから、エラーが出るようになりました。
正直、どこが悪いのか分かりません。

どなたか教えていただけませんか?
よろしくお願いします。

910ミナミヌマエビ:04/07/03 02:08
ソースです。

------<testclass.h>-----------
内容は省略
-------end of <testclass.h>----------


------<testclass.cpp>----------------------

class TestClass{

public:
メンバ変数いろいろ

  void setParam( 略) {
    メンバ変数に引数を設定
  }

  void myCreateWindow( HWND){

CreateWindow("LISTBOX", ・・・) を呼ぶ

  }

-------end of <testclass.cpp>----------------

911ミナミヌマエビ:04/07/03 02:09
連続でスマソ

--------<test.cpp>------------

#include "testclass.h"

TestClass tc;

WinMain( 略){

tc. setParam ( 略)
CreateDialog( 略)



DlgProc( HWND hwnd)

  switch( 略)
    case: WM_INITDIALOG

myCreateWindow ( hwnd )

}

-------end of<test.cpp>-----------
cppでclass宣言するって一体…
こ こ は 宿 題 を 片 づ け る ス レ で す 。
一般的な質問はよそでやれ。
>>904
いちおうpowつかわずやっときました(^^;
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=139
答え表示のところは綺麗になるように改造したほうが吉かもです。
915デフォルトの名無しさん:04/07/03 02:14
#include <stdio.h>

int main(void)
{
int num = 123456789;
int *np;

******; /*ポインタ変数npにnumのアドレスを代入*/

printf("The value %d is stored at address %d", ******);
/*ここでは変数numだけを使って書くこと*/
printf("The value %d is stored at address %d", ******);
/*ここではポインタ変数npだけを使って書くこと*/

  return 0;
}

これの******
のところを補って完成させよ。

出力例(決まった値にはならないが。)

The value %d is stored at address -1073745404
The value %d is stored at address -1073745404
>>915
np = #
>>915
問題が間違ってるよ
"The value %d is stored at address %d"
じゃあThe value %d is…って出力するのは無理
>>915
******を、どの様に補っても、それぞれの出力、
>printf("The value %d is stored at address %d", ******);
The value %d is stored at address -1073745404
>printf("The value %d is stored at address %d", ******);
The value %d is stored at address -1073745404
には、対応しません。
>>909-912
testclass.cppをコンパイルしていないんだろ、どうせ。
testclass.hの中身が激しく気になる。
何が書いてあるんだろう?
testclass.h

#ifndef TESTCLASS
#define TESTCLASS
#include"testclass.cpp"
#endif

だったら笑える。
>>921
このレベルなら
#include "testclass.cpp"
の一行のみでしょう
923915:04/07/03 03:12
すいません、訂正が。

#include <stdio.h>

int main(void)
{
int num = 123456789;
int *np;

******; /*ポインタ変数npにnumのアドレスを代入*/

printf("The value %d is stored at address %d\n", ******);
/*ここでは変数numだけを使って書くこと*/
printf("The value %d is stored at address %d\n", ******);
/*ここではポインタ変数npだけを使って書くこと*/

  return 0;
}

これの******
のところを補って完成させよ。

出力例(決まった値にはならないが。)

The value %d is stored at address -1073745404
The value %d is stored at address -1073745404
>>923
何をどうやっても、
>printf("The value %d is stored at address %d\n", ******);
このコードでは、コンパイラのバグでも利用しない限り
>The value %d is stored at address -1073745404
の出力にはならない。
n人の学生のテスト結果d(0≦d≦100)を学生番号順に標準入力装置から入力する。
負の数が入力されたとき、入力終了とする。データは配列D[i](0≦i≦n-1)に入れる。
平均値、標準偏差、最高点、最低点を求めてこれを出力する。
最高点、最低点については該当する学生の学生番号も全て出力する。


C言語でお願いします。
926デフォルトの名無しさん:04/07/03 03:30
>>924
あまい。

#if 0 /* 最初の ****** */
; /*ポインタ変数npにnumのアドレスを代入*/

printf("The value %d is stored at address %d\n", /* ここから */ What a Fxxxin' Program! /* ここまでが2つ目の****** */);
/*ここでは変数numだけを使って書くこと*/
printf("The value %d is stored at address %d\n",
/* ここから */
#endif
np = #
printf("The value %%d is stored at address %d\n", &num
);
printf("The value %%d is stored at address %d\n", np /* ここまでが3つ目の****** */);
/*ここではポインタ変数npだけを使って書くこと*/

>>926
脱帽
>>925

一応問題の要請でデータは配列に格納すると書いてあるから、
配列に格納してみたけど、一回サーチするだけで全ての処理終わるのよね。

だから、
d[i] -> d
にしてわざと問題で求めている要件を破って、
「一回のサーチで処理が完了するように工夫しました」
とか主張するとおいしいかもね。

教官の想定している実装だと、
1. まず配列に格納
2. 最大値、最小値、平均値を計算
3. 最大値と等しい学生番号を順に出力
4. 最小値と等しい学生番号を順に出力
5. (値-平均)の二乗和から分散を出力
こういう感じになるだろうと予想して配列に格納とか言ったのかな?

あと var は標準偏差じゃなくて、分散だろうという突っ込みは無しでw
3 文字でそろえたかったの

改行が多すぎますと Error が出たので怒涛の圧縮かけましたw
929928:04/07/03 04:33
そろそろ次スレ?
まだだ。まだ終わらんよ。
>>931
fortune用のデータを作ってくれ。
933デフォルトの名無しさん:04/07/03 14:05
終らない歌を歌おう
くそったれのお前らのため。
>>926
#if 0 ... #endifの間も字句解析されるから、'を単独で使うのはまずい。

…と、ネタにマジレスしてみるテスト。
935926:04/07/03 14:40
>>934
そっか。じゃあ
>/* ここから */
の後ろと
> /* ここまでが2つ目の****** */
の前に " を追加すべし>>923
例えば
struct CELL{
char moji[10];
int num
struct CELL *right;
struct CELL *left;
};
って構造体でmojiのアルファベット順(辞書順)に二分木をつくったとしたとき
その二分木の中からnumの大きい順に要素を5こ取り出す関数を作って欲しいんですが
c言語で
>>928
ありがとうございます。
>>905
>>914
ありがとうございます。
なんとなく>>1をはっときますね。

1 名前: ぼるじょあ ◆yBEncckFOU 投稿日: 04/06/23 03:41
(・3・)アルェー 実は他の人にまかせっきりのC++房のぼるじょあですYO!
わからない宿題を片づけますYO!

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10
ア〜ポインタ難しいな〜。イラツク。アツイ、レイプシタイ。
次スレ立てるなら、ぼるじょあ以外で頼む。
(・3・)エー そう言われるとぼるじょあで立てたくなりますYO!
なら次スレ立てるなら、ぼるじょあで頼む。
というかね、ぼるじょあだけで3つ以上も立ってるから、そろそろ新しいのがいいなあと。
じゃ、ようかんマンで
こんなかんじ?

    .__   実は集団行動が嫌いなようかんマンです
    |・∀・| <調子に乗ってC/C++の宿題片付けます
    ト旦ノ.|
 調子`ゝゝ´調子
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10

>>946
ぼるじょあよりはいいな
948ようかんマン ◆nup627Y0Gs :04/07/03 15:43

 .__
ヽ|・∀・|ノ ようかんマン#羊羹饅々で 誰でも 
 |__|  ようかんマン ◆nup627Y0Gs になれるよ
  | |
ライフゲームで100×100のセルの中で自分と相手を比較して表示する
二次元配列を使ったプログラムを作る。
表示するセルはランダムでポインタは使用しない。
<ルール>
●:自分 ○:相手

●○ や ○ のような縦・横・ななめで相手が2つか3つあればそのまま表示
○ ●○


相手が1つか4つ以上あったら自分は消える。
相手が2つか3つあった場合、自分が表示される(増える)

セルの現在状態 | 8近傍でのonのセルの数 | セルの次の状態
on | 2、3 | on
on | 2、3以外 | off
off | 3 | on
off | 3以外 | off

ただし、表示するセルが端になった場合、反対側のセルと繋ぎ合わせて判断する。

よろしくお願いします。
>>949
見辛い。

●○



●○

です
ようかんマンで立てようとしたが立てれなかった・・・
スレタイは

ようかんマンがC/C++の宿題を片付けて見せます 26棹

でよろしく
953デフォルトの名無しさん:04/07/03 16:27
1回目の実行でnmlになるけど
2回目の実行でabcに戻ればいいんだけど1回目と同じでnmlに戻ってしまいます。
関数strxorにどこかおかしいところがあるのでしょうが、わかりません。
ちなみに問題は
「文字列を引数として受け取り、各文字の下位4ビットを排他的論理和を用いて反転させた文字列を出力させる関数を作成しなさい。同じ文字列に対して2回関数を実行し、2度目の実行後に元の文字列に戻ることを確認しなさい」
です。
---------------
#include <stdio.h>
#include <string.h>
void strxor(char str[]){
unsigned char ext1_bit[100],ext2_bit[100];
unsigned char xor_bit[100],ans_bit[100];
int i,len;
len = strlen(str);
for(i=0; i<len; i++){
ext1_bit[i] = str[i] & 15; /* 下位4ビットを抜き出す */
xor_bit[i] = ext1_bit[i] ^ 255; /* 排他的論理和を求める */
ext2_bit[i] = xor_bit[i] & 15;/* 排他的論理和の2進数の4ビットを抜き出す */
ans_bit[i] = ext2_bit[i] + (str[i] - ext1_bit[i]); /* 下位4ビットの計算後の2進数表示 */
}
printf("%s\n",ans_bit);
}
int main()
{
char str[100];
printf("文字列を入力してください.\n");
scanf("%s",str);
printf("1回目の実行\n");  strxor(str); /* 1回目の実行 */
printf("2回目の実行\n");  strxor(str); /* 2回目の実行(元に戻る) */
return 0;
}
--------
>>953
同じ変換を2回行っているだけだから。
つまり、「変換した結果」を変換しなければならないので、
xorしたものでstrを置き換えましょう。
955デフォルトの名無しさん:04/07/03 17:03
>>954
ありがとうございます。
str[i] = ext2_bit[i] + (str[i] - ext1_bit[i]);
でよかったんですね・・・Orz
>>953
bit演算を行う時は

& 0xf; /* 下位4ビットを抜き出す */
^ 0xff; /* 排他的論理和を求める */
& 0xf;/* 排他的論理和の2進数の4ビットを抜き出す */

としたほうがよい
void strxor(char str[]){
int i,len;
len = strlen(str);
for(i=0; i<len; i++){
str[i] = str[i] ^ 0x0f;
}
printf("%s\n",str);
}
次スレのテンプレには

穴埋め問題は全ソースここに晒せ
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548

みたいなのを追加してみてはどうだろう
>>949
表示するセルはランダムという意味がよくわからない。
どれか一つのセルに注目するってこと?
>>959
ランダムは100×100のセルに適当に表示ってことです。
表示されたセルの中で1つ1つ判定していくってことです。
ライフゲームなんてうんざりするほどサンプルあふれてるから、
ここで聞くよりググルなりしたほうが早いよたぶん。
タッチタイプのことではないんです。
いちにちに自分が打鍵する数を各キーごとに集計してその結果を
翌朝に自分の携帯にメールで通知するソフトをCで作れというのが課題です。
今からようかんマンで次スレ立ててみます
964ようかんマン ◆nup627Y0Gs :04/07/03 22:24
次スレ立ちますた

ようかんマンがC/C++の宿題を片付けて見せます 26棹

http://pc5.2ch.net/test/read.cgi/tech/1088860889/
965946:04/07/03 22:25
>>964
>>946がそのまま採用されてる...
966デフォルトの名無しさん:04/07/04 05:43
おいらの宿題をお願いしまつ

1.datファイルを読み込み、ファイル一覧を取得
2.ファイルの存在を確認する
3.全てのファイルがあれば、ファイルをtempフォルダへコピーする
4.各ファイルを移動する

datの形式は、

START
AAA:c:/a/temp.zip
BBB:c:/b/temp.mpg
CCC:c:/c/temp.jpg
END


例)
c:\a\temp.zip
c:\b\temp.mpg
c:\c\temp.jpg
にあるファイルがあるか確認。あればc:\temp内に全てのファイルをコピー

c:\a\temp.zip→c:\AAA
c:\b\temp.mpg→c:\BBB
c:\c\temp.jpg→c:\CCC
へ移動する。
移動が終わったら、datファイルは削除する。
コピーと移動を行う環境非依存の汎用的な方法がないんで、環境を明記せよ
968デフォルトの名無しさん:04/07/04 06:08
>>967
Windows2000です。
宜しくお願い致します。
969>>967じゃないけど:04/07/04 12:10
>>969
レス遅くなりました。
ありがとうございます。
さっそく、やってみます。
初めまして。色々と試しているのですが、プログラムが作れません。
よろしければ、教えてください。
「チーム研究発表会の評価を集計するプログラムを作る。3人以内の学生メンバーで構成される4
チームが発表会に参加する。評価は調査内容、提案内容、発表資料、発表方法の4つのポイントで
行われ、各々のチームに対して合計点数が付けられる。」
1.評価に必要なデータを全て含むようなチームを表す構造体を作成し、typedefで名前を付けよ。
  変数名はできる限り理解しやすいものを考え、各チームのメンバーのフルネームと学籍番号も
  分かるようにすること。また、各チームにはチーム番号をつけよ。

という物なのですが、ここまで指定されていたら作れるのが当たりまえなのかもしれませんが、初心者
なものでほぼ手につきませんので、教えてください。
>>971
もう7月です。今の時点でこんなことをしてたら2年後なり4年後なりに自分がどうなるか考えなさい。
973デフォルトの名無しさん:04/07/04 22:03
969 でも 967 でも 966 でも無いけど、VC なんか持ってねぇよヽ(`Д´)ノウワァァン
ということで、>966 のWin(DOS)系用 (-DPOSIX で POSIX 系用) 作成。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=141
げ、あげちまったスマソ
975デフォルトの名無しさん:04/07/04 22:42
>>973
error C2440: '=' : 'void *' から 'filelist *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
と出て、コンパイルできません。
これなんでしょうか?
エラーの発生した場所が分からないと確かなことはいえないけど、
多分 malloc の返り値の型(void *) と代入先の型 (filelist *) が違うからかな。
↓はてさて、これで直るか?

if (curr == 0) { /* 新しい構造体を確保 */
- file = malloc(sizeof(filelist));
+ file = (filelist *)malloc(sizeof(filelist));
curr = file;
} else {
- curr->next = malloc(sizeof(filelist));
+ curr->next = (filelist *)malloc(sizeof(filelist));
curr = curr->next;
}
C++でコンパイルしてんじゃねぇの?
>>977
どういいう意味?
VCじゃ、コンパイルできないの??
>>976
通りました。どもありがとう。
>>973
どうせだったらWin32API使ってバリバリに書けよw
>>978
>973はC。C++としてコンパイルするからエラーになる。ちゃんとCとしてコンパイルすれば通るよ。
>>980
ただでさえ低い可搬性をさらに下げろと………
983デフォルトの名無しさん:04/07/05 16:02
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=237
問題は「2頂点の最短距離と経路を表示させるプログラムに修正せよ」
です。助けてくれ〜



typedef unsigned int Pages; /* ページ数 */
typedef char *Title; /* 文献のタイトル */
typedef char *Nname; /* 作者の名前 */
typedef char *Description; /* 説明 */


これを使って定義したデータ型を使用して、標準入力から論文データを
読み込み、論文リストを保持し、標準出力への表示を行うプログラムを
malloc関数とsizeof演算子を用いて作成せよ。

という問題です。教えてください。
985デフォルトの名無しさん:04/07/05 17:55
この問題をお願いします。

適当な長さの10個の文字列を配列に読み込み、それらを短い順に並べて
表示するプログラムを作成しなさい。並べ替えは関数を使って行うこと。
文字列はchar型2重配列を使うこと。


"重配列" の検索結果のうち 日本語のページ 約 54 件中 1 - 36 件目 (0.16 秒)

意外と多いのね
>>985

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

#define TEKITOU 256

int compare(const void *a, const void *b)
{
int x = strlen((const char *)a);
int y = strlen((const char *)b);
return (x < y)? -1: (x > y)? 1: 0;
}

int main(void)
{
char strings[10][TEKITOU];
int i:
for (i = 0; i < 10; ++i) { printf("string %d: ", i); fgets(strings[i], TEKITOU, stdin); }
qsort(strings, 10, TEKITOU, compare);
for (i = 0; i < 10; ++i) { printf("%s\n", strings[i]); }
return 0;
}
988おしえてください:04/07/05 19:26
#include<stdio.h>
void mul(const int ma[2][3],const int mb[3][2],const int mc[2][2]);
main()
{
int i,j;
int ma[2][3]={{1,2,3},{4,5,6}};
int mb[3][2]={{1,5},{5,3},{8,1}};
int mc[2][2];
mul(ma,mb,mc);
for(i=0;i<=1;i++){
for(j=0;j<=1;j++){
printf("%4d",mc[i][j]);
}
putchar('\n');
}
return(0);
}
void mul(const int ma[2][3],const int mb[3][2],const int mc[2][2])   ←24行目
{
int i,j,k;
for(i=0;i<=1;i++){
for(j=0;j<=1;j++){
for(k=0;k<=2;k++){
mc[i][j]+=ma[i][k]*mb[k][j];
}
}
}
return;
}
行列の積を求めるのですが、これをコンパイルすると、”c 24: can't change value of const object (+=)”と出ます。
>>988
俺には、24行目は
> mc[i][j]+=ma[i][k]*mb[k][j];
に見えるのだが。

だとすると、const int mc[2][2] に代入できるわけがない。
990おしえてください:04/07/05 19:38
24行目はmc[i][j]+=ma[i][k]*mb[k][j];でした。ごめんなさい
自分で ma,mb,mc は変更不可(const)と宣言してるのに、その変更不可なmc に
代入しようとしてるのがまずい。
ma と mb から mc を求めるんなら、const は ma と mb にしか付けてはいけない。
>>991
ありがとうございました。勉強になりました
993デフォルトの名無しさん:04/07/06 02:37
7
994デフォルトの名無しさん:04/07/06 02:37
6
5
996デフォルトの名無しさん:04/07/06 02:38
5
997デフォルトの名無しさん:04/07/06 02:39
5?
998デフォルトの名無しさん:04/07/06 02:40
5
999デフォルトの名無しさん:04/07/06 02:41
5
5
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。