ぼるじょあがC/C++の宿題を片付けますYO! 35代目
2 :
デフォルトの名無しさん:04/11/28 00:22:16
3 :
デフォルトの名無しさん:04/11/28 00:22:17
ちんちん
は?
(・3・)エェー ぼるじょあかYO!
**************** 糸冬 了 ****************
ぼるじょあキター
性懲りも無く・・・
8 :
デフォルトの名無しさん:04/11/28 01:54:08
ボルジョア・ワイン
ぷれたぽるて
集約とprivateな継承はどのように使い分けたらよいか、実際のコードを用いて説明せよ。
使用する言語はC++とする。
という宿題がでたんですけど、だれか教えてくれませんか?
12 :
デフォルトの名無しさん:04/11/28 11:40:54
ボルジャレー ターヴォ3
だれもこないね。。
前のスレ終わったの?
僕はスルーですか?・・・
そんな答えてもらいたいなら
あげれば(・∀・)イイ!!
それでも答えてもらえないなら
しかたな(・∀・)イイ!!
17 :
デフォルトの名無しさん:04/11/28 15:43:58
あげ
宿題スレ自体はあるの?
19 :
sage:04/11/28 17:46:32
専門学校1年のアルゴリズムで、本当に出た宿題(問題そのまま)です。
具体例は理解できるのですが、考え方がまったくわからないので
お願いします。
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
C言語を用いて次のプログラムを作成しなさい。
材料が、鉄:5000kg 3000kgの二種類あり、
製品が、鉄鋼:3100kg 1800kg 1400kg 1100,800kgの4種類ある。
ユーザは、ほしい製品の数量をコンソールからそれぞれ入力し、
どの材料からどのような組み合わせで作ればいいか
最適な組み合わせ(材料に無駄が少ないようにする)を出力する。
具体例:
3100kg*1がほしい→5000kgから3100*1の組み合わせで作ればよい。
1500kg*2がほしい→3000kgから1500*2の組み合わせで作ればよい。
3100*2,1800*2,1000*2がほしい
↓
4000kg*1から3100*1+1800+1
4000kg*1から3100*1+1800+1
3000kg*1から1000*2
の組み合わせで作ればよい。
[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ(バージョン):Microsoft VisualC++6.0
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:2004年12月14日
[5] その他の制限:ある程度最適ならよい
sageみすりました_Π○
4000kg?
"abcbccab"という文字列のsuffix arrayを作成するC++のプログラムを作成せよ。
要するにabcbccab、bcbccab、cbccab、bccab、ccab、cab、ab、bという文字列を
クイックソートを用いて辞書順にソートしたいんですがどうもやり方がわかりません
24 :
デフォルトの名無しさん:04/11/28 19:14:00
作成せよとか書かれるとどっちが主題出されてる側なのかと思ってしまう。
出された問題は文章変えずにそのまま投稿しろということになってるから
しかたな(・∀・)イイ!!
>23
クイックソートしなくてもセットに入れていけばいいんだよね?
また、(・∀・)イイ!!か。
(・∀・)イイ!!の言うことは確かに正論だ。
だがな?正論ばっかじゃ生きていけないぜ?
(・∀・)イイ!!のような自治厨をこのスレは欲していない。
(・∀・)イイ!!がいたところで、このスレが荒れることには
変わりないんだからな、わかったな?
29 :
デフォルトの名無しさん:04/11/28 22:03:48
そんなことより、なんか書き込みすくねーな。
[2] 問題文: マクローリン展開によって正弦を計算する簡単なプログラムを作れ
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ(バージョン):よく分からないんですが、Cygwin(?
[3.3] 言語:C
sin(x)=x-x^3/3!+x^5/5!-x^7/7!・・・がサインの展開したものです。
角度をthetaとしてください。何項まで計算するか自分で指定しなくちゃいけないんですかね^^;
かなりの素人ですが、 お願いしますm(__)m
31 :
デフォルトの名無しさん:04/11/28 22:43:56
ん?何項までの計算は自分でするの?
それとも俺等が聞かれてるの?
オマエは素人ってか馬鹿だから、俺は答えない。
すみません; それすらもよく分かりません。
四項まで指定するとどうなりますか?
34 :
デフォルトの名無しさん:04/11/28 23:33:27
>>32 4項までとかそんなのは関係無い。
要は、何項までか指定されているか、そうでないか?で、プログラムが変わる。
指定があったら
> 何項まで計算するか自分で指定しなくちゃいけないんですかね^^;
なんて言葉が出てくるだろうか
36 :
デフォルトの名無しさん:04/11/28 23:54:03
>>35 いけないんですかね?だとしたら、
指定されているけど、そんなんする必要あるの?っ解釈も出来るでしょ?
その上での
>>31。
そんなもんユーザーに決めさせるようにするにきまってんだろ。
>23
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <map>
using namespace std;
class Suffix{
map<string, int> Dictionary;
public:
Suffix(string str);
void MakeSuffix(string str);
vector<int> GetSuffixArray();};
Suffix::Suffix(string str){MakeSuffix(str);}
void Suffix::MakeSuffix(string str){
for(string::iterator itr=str.begin();itr!=str.end();itr++){
string temp;
copy(itr, str.end(),back_inserter(temp));
Dictionary.insert(make_pair(temp, itr-str.begin()));}}
vector<int> Suffix::GetSuffixArray(){
vector<int> ret;
for(map<string, int>::iterator itr=Dictionary.begin();itr!=Dictionary.end();itr++){
ret.push_back(itr->second);}return ret;}
void show(int i){cout << i <<endl;}
int main(void){
string str="imfinethankyou";
Suffix sfx(str);
vector<int> v=sfx.GetSuffixArray();
for_each(v.begin(), v.end(), show);
return 0;}
39 :
300:04/11/29 00:59:15
>製品が、鉄鋼:3100kg 1800kg 1400kg 1100,800kgの4種類ある。
5種類に見える
csvファイルを作成する時、1行目のA1を a、B1を b と表示するには
どうすればいいのですか?
a b
0.001 1
0.002 2
0.003 3
以下続く。
for(i=1; i<10; i++){
moge(double a, double b;):
cout<< a << ", " << b << endl;
}
駄目だ… どうコメントしたらいいか…
42 :
デフォルトの名無しさん:04/11/29 01:18:34
>>40 何がしたいのかよく分からん。もっと分かりやすく説明してくれ。
43 :
デフォルトの名無しさん:04/11/29 02:14:37
ぼるじょあさん今日はもう寝ちゃったの?
そもそも宿題じゃないだろ?
45 :
デフォルトの名無しさん:04/11/29 07:23:28
どのセルも文字列として扱え
[1] 授業単元:プログラミング言語基礎
[2] 問題文:
課題2 1〜20までの整数を入力し、その個数分だけの正の整数を入力し、入力した順と逆順に出力する。
課題3 20個までの適当な正の整数を入力し、入力した順と逆順に出力する。課題2とは違って、あらかじめ何個入力するかは指定しない。
課題4 課題3で入力された整数に加えて、別に1個の数値を入力し、その数値が先に入力した数値の中に含まれるかどうかを判定し、あればyes、無ければnoを出力する。
課題5 課題4に加えて、数値がある場合、何番目の数値か出力する。
課題6 課題4,5に加えて、後から入力した数値が含まれる場合、その数値を除いた残りの数値を出力する。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): MinGW 2.0.0
[3.3] 言語:C
[4] 期限:2004年12月22日
素人なのでよく分かりません。どうか宜しくお願いします。
#include <stdio.h>
#include <string.h>
int main()
{
int array[20];
int i,in,key;
int yesno = 0;
memset(array, -1, sizeof(array));
printf("個数?:");
scanf("%d",&in);
if(in < 0 || in > 20) return 0;
/* in = 20; */
printf("-1で強制終了:");
for(i=0; i<in; i++) {
scanf("%d",&array[i]);
if(array[i] == -1) break;
}
printf("キー?:");
scanf("%d",&key);
for(i=19; i>=0; i--) {
if(array[i] == key) { yesno = 1; printf("yes\t"); printf("%d番目\n", i+1); }
else if(array[i] != -1) { printf("%d\n",array[i]); }
}
if(yesno == 0) { printf("no"); }
}
>>30 #include <stdio.h>
#include <math.h>
/* 階乗 */
double factorial(unsigned int a)
{
int ans = 1;
while(a) {
ans *= a;
a--;
}
return (double)ans;
}
int main()
{
int n;
double x,ans = 0.0;
printf("n?:");
scanf("%d", &n);
printf("theta(rad)?:");
scanf("%lf", &x);
while(n>0) {
ans += ( pow(-1,(n-1)) / factorial(2*n-1) * pow(x,(2*n-1)) );
n--;
}
printf("左辺:%lf", sin(x));
printf("右辺:%lf",ans);
return 0;
}
ある範囲超えると大幅に狂う… 制限区間があったかも
入力した文字列が何文字であっても正確に逆順に出来るプログラムを作りなさい。
だそうです。
誰か作って下さい。
C++でお願いします。
>>49 std::string str = "hoge";
str.assign(str.rbegin(), str.rend()); // 逆順にする
>>49 君はまずCとC++の区別をつけられるようになりなさい
>>48 階乗はあっさりINT_MAXを越えると思うのだが。
>>51 ありがとうございます。
>>52 今まで実行は Visual C++ .NET でやっていたのでてっきり
自分はC++習ってると思ってたんですが、ちょっと調べたところ、C言語だったみたいです。
忠告ありがとうございました。
まことに身勝手ながら、
>>49の問題を誰かC言語でお願いします。
>>47 ありがとうございました。
また、課題が出たので、よろしくお願いします。
[1] 授業単元:プログラミング言語基礎
[2] 問題文:
20個の正の整数を入力し、その中から3番目に大きな数値とそれが何番目に入力されたかを出力するプログラム。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): MinGW 2.0.0
[3.3] 言語:C
[4] 期限:2004年12月24日
自力で出来ました。
お騒がせしました。
もしやって下さっていた方が居ましたら、
ご苦労様でした & すいませんでした。
[2]問題文:離散データ点列 (0.0,1.0),(1.0,3.0),(2.0,5.0)
(3.0,5.0),(4.0,2.0),(5.0,0.0)
の最小2乗近似による一次多項式f1(x),二次多項式f2(x)を求めなさい
与えられた関数系はf(x)=x^jとして,近似関数F(x)を係数a(j)と関数系f(x)を乗じて
0からj(j=0,1,・・・,m)まで級数をとったものとする。その近似が最もよくなるように
係数a(j)を決める
[3]環境:
[3.1]OS:Windows XP
[3.2]コンパイラ(バージョン):詳細はわかりませんが,Cygwinを使ってます
[3.3]言語:C
最小2乗近似をつかって近似多項式を求める問題でm=1,2の場合について
求めなければならないのですが、求めるのは係数のa(j)で、m=1の場合はa(0),a(1)
m=2の場合はa(0),a(1),a(2)という風に分けて求めたいです
どうかよろしくお願いします
c言語初心者で程度の低い質問で申し訳ないんですが
キーボードから10個の値(正の整数)入力し、その合計を求め表示するプログラム
入力した値が
奇数なら5を足した値を足す
偶数は3倍した値を足す
10個の値を入力するためには、for関数を使用する
という課題を出されたのですが、for関数を用いて10個の値を入力するってのがよく分かりません。
お教え頂けないでしょうか?
int func_for()
{
int i,num,total=0;
for(i=0;i<10;i++) {
scanf("%d",num);
if(num%2 == 1) total+=num+5;
else total+=(num*3);
}
}
60 :
デフォルトの名無しさん:04/11/29 22:25:41
>>58 int main(void){
unsigned int i,n,sum=0;
for(i=0;i<10;i++){
scanf("%u",&n);
if(n%2 == 1) sum+=n+5;
else sum+=(n*3);
}
return(0);
[問題文]
円周率πを以下の式を用いて計算するプログラムを作成しなさい。
π/4 = arctan 1/2 + arctan 1/5 + arctan 1/8
ただし、arctanは以下の級数展開の式を用いて計算すること。
arctan t = t - t^3/3 + t^5/5 -t^7/7 + … + (-1)^n * t^(2n+1) / 2n+1 + …
[言語]C言語です
式が見づらくてすみません。
このような課題が出たのですが、解き方が全くわかりません。
どなたか解いていただけないでしょうか?
>>55 かなりやっつけ。もっとスマートな方法はあるはず。
void sort(int *list,int *input){
int cnt1,cnt2,temp;
for(cnt1=19;cnt1>0;cnt1--){
for(cnt2=0;cnt2<cnt1;cnt2++){
if(*(list+cnt2)<*(list+cnt2+1)){
temp=*(list+cnt2+1);
*(list+cnt2+1)=*(list+cnt2);
*(list+cnt2)=temp;
temp=*(input+cnt2+1);
*(input+cnt2+1)=*(input+cnt2);
*(input+cnt2)=temp;
}
}
}
}
void showList(int *list,int *input){
for(int cnt=0;cnt<20;cnt++)printf("%d番目に大きいのは%d(入力は%d番目)\n",cnt+1,*(list+cnt),*(input+cnt)+1);
}
int main()
{
int list[20],input[20];
for(int cnt=0;cnt<20;cnt++){printf("No. %d =",cnt);scanf("%d",&list[cnt]);input[cnt]=cnt;}
sort(list,input);
printf("3番目に大きいのは%d(入力は%d番目)\n",list[2],input[2]+1);
showList(list,input);
}
あー、int mainがreturnしてねぇ…
64 :
デフォルトの名無しさん:04/11/29 22:34:48
>>61 long double Arctan(long double t,unsigned int n){
unsigned int i;
long double p,q,x=0;
for(i=0;i<n;i++){
p=pow(-1,n);
q=pow(t,2*i+1);
x=p*q/(2*i+1);
}
return(x);
}
int main(void){
unsigned int n;
scanf("%u",&n);
printf("%lf\n",Arctan(0.5,n)+Arctan(0.2,n)+Arctan(0.25,n));
65 :
デフォルトの名無しさん:04/11/29 22:38:54
答えたのにお礼も無い人ってどうかと思うよー。
67 :
デフォルトの名無しさん:04/11/29 22:45:45
>>66 ほぉーそう来たかw
分かった。そうする。
>>64 間違ってねぇか?
p=pow(-1,n); はp=pow(-1,i);
最後のArctan(0,25)は(0.125)だと思われ。
あと最後の返し中括弧がないね。これはどーでもいいが。
69 :
デフォルトの名無しさん:04/11/29 22:53:44
>>68 あーそうだね。間違ってる。
でも君が気付くんだから、質問者も気付くんじゃないかな?
最後の括弧とretunは面倒だから省いた。ヘッダのインクルードもね。
71 :
デフォルトの名無しさん:04/11/29 22:58:22
>retun
言い訳がましいなぁ。まぁ、Typoする香具師だということはよく判ったが。
彼は会社にいてほしくない人だね
74 :
デフォルトの名無しさん:04/11/29 23:01:00
>>72 んな小さいミスでゴタゴタ言うなや・・・すぐ見つかるミスだからいいでしょ。
このスレに書くプログラムで動作テストまでやってる人いるの?
>>74 動作確認して書くのは当たり前だろ。
恥を知れ。
76 :
デフォルトの名無しさん:04/11/29 23:02:34
>>73 何?社会人でこのスレにプログラム提供してる人いるの?
だとしたら、随分レベルの低い人だね。
俺は大学学部4年。暇な時ここに書いてる。
77 :
デフォルトの名無しさん:04/11/29 23:03:01
79 :
(・∀・)イイ!! ◆LC7P44pfbg :04/11/29 23:06:11
回答者どうしでケンカするの(・∀・)イイ!!
せめぎ合う中で良質のプログラマーは育まれ
世に良質なコードが多数生み出されていく
そんな明るい未来(・∀・)イイ!!
80 :
デフォルトの名無しさん:04/11/29 23:07:30
>>78 うーん。大体が糞コードなんだし、糞コードが一つ増えても何も変わらないのでは?
ま、もうここにソースは書き込まないよ。
ってか書き込む人はちゃんと動作テストするんだぞ!!
>>80 ソースといわず、ここといわず、何も書き込むな。
暗い人達ですが、何か?
C++
( )の中に当てはまる語句を選択肢から選ぶ問題です。
・switch文は( )[1]によって、( )[2]の実行文の中のどれかを( )[3]処理する( )[4]制御文です。
選択肢
a単数 b複数 c式の値 d選んで e単一方向 f多方向分岐
・(式)の値は( )[1]でなければいけません。
・case 定数式:と default:文は実行文を示す( )[2]です。
・case 文は、何段でも続けて書くことが( )[3]。
・case 定数式と default の後には( )(;)[4]ではなく( )(:)[5]を書きます。
・実行文の範囲は、カッコ{ }で( )[6]。
・( )[7]文は、必要でなければ省略することもできます。
・switch 文はif 文のように、式の大小や、文字列同士を比較して分岐方向を決めることが( )[8]。
選択肢
aできます bできません c示します d示しません eラベル f整数 gコロン hセミコロン i case j default
よろしくお願いします m(_ _)m
動くかどうかや不正確な情報を書く人の気が知れないなぁ
85 :
デフォルトの名無しさん:04/11/29 23:13:00
>>81 いやーそれはしない。
ソースを書き込まないってのはここの流儀が俺には気に食わないからって理由。
ここに書き込まない理由は一切無い。
そういう指図する権利があるのが是なら、俺も君にこのスレに書き込むな要求をしよう。
86 :
デフォルトの名無しさん:04/11/29 23:13:50
>>84 宿題丸投げしておいて礼も言わない人にそこまでの労力を注ぐ人の気が知れないなぁ
誰だその問題作った香具師。曖昧な回答があるじゃないか。
[8]は引っかけか?
>>86 気が向きゃコード書くし、暇ならテストもする。労力? そんなものが要るほど高度な宿題なんかあったかね。
>>88 7,8は引っかけと言うより設問者が阿呆だと思われ。
92 :
デフォルトの名無しさん:04/11/29 23:18:09
>>89 馬鹿。テストは義務らしいぞ。暇なら〜は通用せんらしい。
94 :
デフォルトの名無しさん:04/11/29 23:20:43
ってかね、
>>89のスタンスでいいじゃん。
何でテストまで義務化するよ?
簡単な問題でもミスる時あるでしょ?
テストの段階ですぐミスに気付けば、それでいいじゃん。
俺のさっきのミスはあれは勘違いとかのハマリにはならない。すぐ気付くミス。
そんなんいちいち指摘するなよ。
95 :
デフォルトの名無しさん:04/11/29 23:21:36
VisualStudioやBorlandのせいで
ソフト使ってるだけでC++を勉強してるんだと勘違いしてる椰子多すぎ
98 :
デフォルトの名無しさん:04/11/29 23:24:15
文字列の中に文字aが何文字あるか表示するプログラムってどう書けばいいですか?
Cの基礎を勉強中です。
>>94 横槍だが、自分の書いたことに責任もてない奴が何を言っても無駄
100 :
61:04/11/29 23:27:37
>>64 >>68 さっそく解いていただきまして、ありがとうございます。
ご指摘の箇所を訂正して、コンパイルしようとしたら
error C2018: 文字 '0x81' は認識できません。
error C2018: 文字 '0x40' は認識できません。
このようなエラーが出てしまったのですが・・・
>>100 見えないかもしれないが、全角スペースが入ってる。
>>100 2バイト空白を1バイト空白に置換汁。
それから、2バイト空白が見えるエディタを使っとけ。
103 :
デフォルトの名無しさん:04/11/29 23:29:38
>>99 そこまでの事をする必要性に疑問を感じる。
君はここにプログラムを書くときにわざわざコンパイルまでしてるの?
書き込み欄に書いて確認しないで終了って人が殆どだと思ってた。
>>100 スペースは全角で入れてる。
コピペしても動かんぞ。
>>103 じゃあ答えるなよばーーーーーーーーーーーーーーーーか
105 :
99:04/11/29 23:32:43
>>103 少なくとも君に意見している椰子はそれが常識という認識だろう
106 :
デフォルトの名無しさん:04/11/29 23:34:15
>>105 自分の意見に責任持つのは大事だけどさぁ、
別にここに書き込む”プログラムの方”に責任持つのは理解できんな。
というのが俺の認識だな。
ま、この話題はもう止めようや。平行線だろ。
>>98 #include <stdio.h>
int main(void)
{
char *s = "aaabcdeeaa", *p, cnt = 0;
for (p = s; *p;p++)
if (*p == 'a') cnt++;
printf("aは%d個\n", cnt);
return 0;
}
間違っていない自信があるならテストもコンパイルさえも不要だろ。
なーに、間違ったところでどうせ誰かの突っ込みが入るさ。
110 :
デフォルトの名無しさん:04/11/29 23:35:39
>>109 俺は君が消えたらこの話題を続ける必要は無くなる。
なので、君が消えれば終わるんだよ。
>>108 上の香具師はそういうスタンスとは明らかに違うがな
ガミガミ言い合ってるだけのつまらん自演だな。
>>107 意図的にそう書いているなら未だいいが、普段からそんな書き方しているなら仕事では通用しないな。
すげえ。久々にイカれた奴をみたwwww
大原2号?
いや本人か!?
>>113 いえ、意図的ではなく、まじめに書いたつもりです。
プログラムで飯を食うつもりはありませんが、後学のために
どこがいけないのか教えてもらいたいです。
>>113 君が仕事で通用していないということが良く分かった
>>116 横槍だが、何文字数えられますか?とか、関数化したほうが、とか。
119 :
デフォルトの名無しさん:04/11/29 23:45:38
追記で、数えられる数以内になかったら・・・
>>121 君が仕事で通用していないということが良く分かった
何文字数えられますか?とはなんでしょう。
あと、例を示すのにこのくらいのものなら関数化は必要ないと思いました。
ばかなやつが、自演やら適当なレスを繰り返してるんだろ・・・
cntがcharってのがまずおかしい。
>>125 ああ本当ですね(汗)素でミスりました。
128 :
デフォルトの名無しさん:04/11/29 23:54:23
ポインタを使わないで、配列だけで書く方法はないですか?
>文字列の中に文字aが何文字あるか表示するプログラムってどう書けばいいですか?
――【注意点】――――――――――――――――――――――
・使用する言語(C/C++)や環境(CUI/GUIなど)は必ず書きましょう。
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その行とエラーの詳細を書きましょう。
エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
130 :
デフォルトの名無しさん:04/11/29 23:56:37
すいません、失礼しましたm()m
#include <stdio.h>
int main(void)
{
char *s = "aaabcdeeaa";
int cnt = 0, i;
for (i = 0; s[i]; i++)
if (s[i] == 'a') cnt++;
printf("aは%d個\n", cnt);
return 0;
}
>>107 一応マジレス。
・cntをchar型にする積極的理由がない。
・変数は1行に一つ(或いは意味的関連性がある数個)程度にしたほうが保守性が上がる。
・1行に書かない制御構造は修正時のミスを避けるためにブロック化するべき。
・1行に纏めたい積極的理由がないなら制御構造ではブロック化したほうが無難。
・明らかな使い捨て処理であっても関数化しておく癖をつけるとコードの再利用がしやすくなる。
・文字終端の検出は、できればナルキャラのと比較という形にしたほうが意図が伝わりやすい。
要は、ダメプログラマーが読めるように、という按配。
>>130 せめて「すいません」ではなく、「すみません」と書くように。
>>132 なるほど参考になります。しかしこのスレの性質上多少の手抜きは
容認してもらいたい気もします。
135 :
デフォルトの名無しさん:04/11/30 00:05:10
小さい処理をいちいち関数化して示す必要は別にないだろ。
関数やってないんで、使わないでくれって初心者多いし。
あとスタイルの問題についてとやかく言うのはどうかと。
ダメコードで教わり育った人はダメコードを書く。
なんかさっきから無駄に煽ってるやつがいるな。
すみません 【済みません】
相手に謝るとき、礼を言うとき、依頼をするときなどに言う語。しばしば感動詞的に用いられる。
すいません。
三省堂提供「大辞林 第二版」より
141 :
61:04/11/30 00:10:57
たびたびすみません。
おかげさまでようやくコンパイルできたんですが
プログラム実行してみても、動かないというか・・・
私自身使い方よくわかってないのだと思います・・・
よろしければ教えていただけないでしょうか?
char s[] = "aaabcdeeaa";
int i,cnt[256]={0};
for(i=0; i<sizeof(s)/sizeof(s[0]); ++i) ++cnt[s[i]];
printf("aは%d個\n", cnt['a']);
関数に、というのは時と場合だろうけど、>137は頷ける
144 :
デフォルトの名無しさん:04/11/30 00:15:08
>>141 あぁ、アークタンジェントの関数に、t-ってのを忘れてたわ。
すまん。l
>>140 仕事で2ch語でメールなんぞ書いたらとんでもないことは判るよね?
仲間内なら2ch語でメール書いてもそれは一向に構わないのだけれど
不特定多数へのメールなら一応2ch語は避けようと思わない?
私はプログラミングも同じだと思う。つまり、普段から崩れた書き方してると
それが染み付いてしまいきちんとした書き方ができなくなりますよ、と。
>>134 容認も何も、私が書いたことには一切拘束力はない。
判断し、行動するのはあなた。char cntの件がなければ>132も書かなかっただろうしね。
145 名前: 132=113 [sage] 投稿日: 04/11/30 00:18:19
>>140 仕事で2ch語でメールなんぞ書いたらとんでもないことは判るよね?
仲間内なら2ch語でメール書いてもそれは一向に構わないのだけれど
不特定多数へのメールなら一応2ch語は避けようと思わない?
私はプログラミングも同じだと思う。つまり、普段から崩れた書き方してると
それが染み付いてしまいきちんとした書き方ができなくなりますよ、と。
( ;´Д`)
ウザ
会社にて、後輩or同僚、時には先輩で苦労した人じゃないと共感はされまいて。
>>145 飯食っていく気ないんなら自分が読めればそれでいいじゃん
<⌒/ヽ-、___ たまたま機会があったから書いただけじゃないか。
/<_/____/ いいよもう、寝るから。
758 :仕様書無しさん :04/11/29 18:35:48
この上司の台詞に俺はキレた・・・
「ドラクエ8のラスボスは主人公の兄イリアス」
759 :仕様書無しさん :04/11/29 18:54:19
>>758 うそだと言ってくれ・・・orz
761 :仕様書無しさん :04/11/29 19:14:45
>>758 おれはおまえにキレそうだ。
なんでお説教が始まってんだ?
ドキュソのプログラム作ってやるのに
ブロック化だの、関数化だの
会社だの仕事だの・・・・
駄目コードを作る人間に育つ人が増える事が辛いんだろう
154 :
デフォルトの名無しさん:04/11/30 00:45:15
助けてもらいたいのですが、
VC++6.0でダイアログベースで作成してます。
Monthcalendarの週番号は取得できないのですか?
MSDNを見たんだけど、ShowWeekNumberっていうのを
どのように使ったらいいかわかんないんです。
詳しく、お願いします。
誰か親切な方お願いします。
>>154 まずは仕様書を書いてください。
そんなことではじっさいの開発では通用しませんよ。
>>155 はっはっはっはっはっは
じっさいの開発にかかわった事ないな?仕様書が最初にあるわけないだろう
わっはっはっはっはっは
159 :
デフォルトの名無しさん:04/11/30 01:02:26
仕様書ですか?
月間予定表のプロパティで週番号の表示はできますよね。
ある日付を選択したら、その週番号をエディットボックスに
表示したいんですけど・・・
それでもわかりにくいですか・・・
誰かお願いします。
カーニハンは典型的な駄目プログラマだったってことでOK?
161 :
デフォルトの名無しさん:04/11/30 01:13:50
だめプログラマでもいいので教えてください
たしかあのへんにあったんだが
163 :
デフォルトの名無しさん:04/11/30 01:23:47
どの変ですか?
本当にお願いします。
LRESULT CALLBACK FooDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:{
HWND hwndMonthCalender;
RECT rcMonthCal;
// 新しいコントロールを使用するための宣言
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);
// カレンダーコントロールを使用する
icex.dwICC = ICC_DATE_CLASSES;
InitCommonControlsEx(&icex);
// カレンダーコントロールの作成
// ここで指定したウィンドウサイズは意味がない
hwndMonthCalender = CreateWindowEx( WS_EX_CLIENTEDGE, MONTHCAL_CLASS, "",
WS_VISIBLE | WS_CHILD | WS_BORDER | MCS_DAYSTATE ,
5, 5, 150, 150, hDlg, NULL, g_hInstance, NULL);
// カレンダーコントロールの大きさを取得
MonthCal_GetMinReqRect( hwndMonthCalender, &rcMonthCal);
// 大きさを設定
SetWindowPos( hwndMonthCalender, NULL, 0, 0,
10+rcMonthCal.right-rcMonthCal.left,
10+rcMonthCal.bottom-rcMonthCal.top, SWP_NOMOVE );
return TRUE;
}break;
}
return FALSE;
}
BOOL CFooDialog::OnInitDialog()
{
CDialog::OnInitDialog();
:
:
// 新しいコントロールを使用するための宣言
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);
// カレンダーコントロールを使用する
icex.dwICC = ICC_DATE_CLASSES;
InitCommonControlsEx(&icex);
// m_wndMonthCalenderはCWnd型のオブジェクト
// カレンダーコントロールの作成
// ここで指定したウィンドウサイズは意味がない
m_wndMonthCalender.CreateEx( WS_EX_CLIENTEDGE, MONTHCAL_CLASS, "",
WS_VISIBLE | WS_CHILD | WS_BORDER | MCS_DAYSTATE ,
5, 5, 150, 150, m_hWnd, NULL);
// カレンダーコントロールの大きさを取得
CRect rcMonthCal;
MonthCal_GetMinReqRect(m_wndMonthCalender.m_hWnd, &rcMonthCal);
// 大きさを設定
m_wndMonthCalender.SetWindowPos( NULL, 0, 0,
10+rcMonthCal.Width(), 10+rcMonthCal.Height(), SWP_NOMOVE );
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
166 :
デフォルトの名無しさん:04/11/30 01:56:56
これはカレンダーを表示ですよね?
週番号の取得は・・・
計算したら?
もう人の宿題やるのは辞めよう…
169 :
デフォルトの名無しさん:04/11/30 02:12:59
それを聞きたいのですよ。
週番号って、何週目ってやつ?
ツェラーの公式でその年の1/1の曜日がわかるんだから、
うるう年の計算忘れずに知りたい日の1/1からの日数調べて割れば?
171 :
デフォルトの名無しさん:04/11/30 02:23:33
その何週目ってやつです。
月間予定表コントロールで週番号を表示できるので
その週番号を取得できないですかって聞いてるんです。
strftimeはVCに無いの?
173 :
デフォルトの名無しさん:04/11/30 04:15:56
ありますけど、うるう年ときがおかしくなってしまう。
ifstream fin("txt")
意味同じか…
ファイルないんじゃないの
C++かと思えばC++もどきか…
openだけすればファイル読み込み完了してるんだと勘違いしてる悪寒
>>174 ファイルの内容が、リンク先の
>>2でいいのなら・・・
char Item_id[date];
int Sale_Date[date];
int Customer_id[date];
char Payment_Type[date];
↓
string Item_id[date];
string Sale_Date[date];
int Customer_id[date];
string Payment_Type[date];
あと、ソースの一番上に「#include<string>」を書く。
・charは1文字しか入らないので、stringにする。
char Item_id[date]・・・では、「一文字」の配列になってしまうので望んだとおりにならない。
・日付はいきなりintにならんので、stringに読み込んでおく。
で、どうだろう。
あと、voidなのにreturnはまずくないか?
DevC++ではOKなのか?
180 :
デフォルトの名無しさん:04/11/30 10:43:58
>>179 OK death
File wo hiraku koto ha dekimashita
(full path ga hituyou datta)
181 :
提出まで後7日:04/11/30 12:00:19
>175-179の方々
色々ご指摘ありがとうございます。
試行錯誤の結果txtファイルのフルパスを入れてみたら読み込めました。
こんな感じです。
これ見つけるまでにとても時間がかかった(一日つぶしちゃいました
//Open file
ifstream data("C:\\Documents and Settings\\My Documents\\PROJECT\\Sales.txt");
前にVC++で作ったプログラムは動いたので行けるかなと思ってたらダメでした。
そして今度こそファイルを表示できるべとおもってたら・・・
なぜじゃー
という具合です。
連続で質問、大変もうしわけありませんがお許しください。
txtファイルのほうはこうなっているのですが
Sale_ID Item_id, Sale_Date, Customer_id, Payment_Type
2004090001, p1, 09/01/2004, 0000, Credit
2004102002, p2, 10/01/2004, 0001, Cash
2004100003, p1, 10/01/2004, 0001, Cash
2004090004, p3, 09/01/2004, 0000, Credit
・
・
2004110020, p1, 11/20/2004, 0012, Credit
まず日付を認識し、同じ日に購入したお客さんの支払い方法(cash or credit)
で分けるようにしたいのです。
スクリーンOUTPUTの例です。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1101761829&res=2&fi=no Sales.txtは他のファンクションでも使うのでstructをつかってみようと思います。
(classにするかもです)。
そしてinheritanceも他のファンクションに使ってみようと思ってます
(そんなことじぶんにできるのか疑問ですが)。
今日はこれから出かけなければいけないのでこれ以上書き込みできませんが、
これから一週間このスレに粘着させていただきます。
(大変ご迷惑だと思います、本当にすみません。相談できる友達いないんです)。
なにとぞよろしくご指導のほどをお願い致したい次第でございます。
>>182 ・>179の補足。
戻り値なし(void)の関数から値を戻しては(値つきのreturn)いけない。
・各処理関数からReportMenu()を呼び出しているが、それだといずれスタックオーバフローで落ちる。
ReportMenu()内でループするようにし、各処理関数は単純に戻るだけにしたほうがいい。
・エラー時に関数から抜けてないので正常処理に突入してしまっている。
つーか、課題に見合うだけの基礎知識がない気がするが。
184 :
デフォルトの名無しさん:04/11/30 15:55:42
文字列"hoge00123.txt"があって、ここから拡張子の前の数値の部分(123)だけ
取り出すにはどうしたらいいですか?
Cでおながいします。
>>184 取り敢えず、こんなもんでどうだろう。
int getFileValue(const char * buf)
{
int value;
if (sscanf(buf, "%*[^0-9]%d", &value) < 1) {
return 0; /* or -1 &c. */
}
return value;
}
先を越された……。しかもそっちの方がスマートだ。OTL
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int Hoge(const char *pText) {
const char *p;
if (pText == NULL || *pText == '\0')
return 0;
p = strrchr(p, '.');
if (!p)
p = pText + strlen(pText);
while (pText != p--) {
if (!isdigit(*p)) {
p++;
break;
}
}
return atoi(p);
}
[1] 授業単元: プログラミング言語 基礎
[2] 問題文:
20個までの適当な個数の正の整数を入力し、その中から3番目に大きな数値とそれが何番目に入力されたかを出力するプログラム。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ(バージョン):MinGW 2.0.0
[3.3] 言語:C/
[4] 期限:2004年12月27日
よろしくお願いします。
>>182 添付テキストデータ
途中コンマ抜けたりしてるんだけど、これって自分で作ったの?
191 :
デフォルトの名無しさん:04/11/30 19:58:24
192 :
デフォルトの名無しさん:04/11/30 20:01:25
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
キーボードから入力をチェックする。
入力が0〜100であれば「OK」と表示し、
それ以外であれば「NG」と表示する。
OKの例…0,16,100
NGの例…-3, 2d, # , スペースを含む入力,Enterのみの入力
[3] 環境
[3.1] OS:Windows me
[3.2] コンパイラ(バージョン):Visual C++(R)6.0
[3.3] 言語:C言語
[4] 期限:早急に!
[5] その他の制限:特になし
>>192 君が悪いわけじゃないけれど、そのテンプレートは見にくいなぁ。
>>192 #include <stdio.h>
int main()
{
scanfとかで入力を受け取る
if(0から100)
OKと出力
else
NGと出力
return 0;
}
196 :
61:04/11/30 22:21:11
>>144 遅くなってすみません。
t-は、具体的にどこの部分に入れたらいいのでしょうか?
何ヶ所かにt-を入れてみたのですが、うまくいかないもので。。。
197 :
デフォルトの名無しさん:04/11/30 22:25:45
>>196 宿題の期限いつまでなの?
とりあえず今日俺もう酔っ払ってるから、コード書きたくないのね。
明日か明後日辺りにちゃんと動く奴作っておくよ。
198 :
61:04/11/30 22:33:11
>>197 金曜の朝までです。
作っていただけるなら本当にありがたいです。
お忙しいと思いますが、どうぞよろしくお願いします。
199 :
デフォルトの名無しさん:04/11/30 22:34:52
200 :
61:04/11/30 22:40:09
>>199 すみません、どうもありがとうございます!
scanf使うなボケ
>>61 #include <stdio.h>
#include <math.h>
double arctan(double t, double n)
{
double p = 0.0, x = t, i;
for(i = 0.0; i < n; i += 1.0) {
p += (x / (2.0 * i + 1.0));
x = - x * t * t;
}
return p;
}
int main(void)
{
double n = 15.0; /* 求める桁数 */
double p;
p = arctan(0.5, (unsigned int)(n * 1.661));
p += arctan(0.2, (unsigned int)(n * 0.71534));
p += arctan(0.125, (unsigned int )(n * 0.5537));
printf("pi = %.*1f\n", (unsigned int)n, p * 4.0);
return 0;
}
色々端折った。
どうかお願いしますm(_ _)m
遅れましたm(_ _)m
実行はしたのですが、「正の整数を5つ入れてください」
しか表示されません
実行例通りにはならないんです
どうしてか分かります??
>>209 判ります。("分"ではなくて"判"だよ。)
貴方が書いたコードに誤りがあるからです。
>>210質問者側なのに偉そうな事を言いますが
答えてくれる気がないなら書かないでくれますか??
口先だけの貴方には何も期待してませんから
他の方どうかよろしくお願いしますm(_ _)m
>>211 答えていますが、何か答えに問題がありましたか?
>>210詳しくお願いしますm(_ _)m
>>211情けないですよ(x_x) 人の文章使わないで下さい
>>212さん
211は私じゃないですm(_ _)m
多分、どっかのアホです
さっきからちょっかい出して来るんですよ(x_x)
>>216 僕のような将来日本をしょって立つ東大生に親切にしておくと損はないですよ。
いずれじゅうぶんな見返りを社会に対して返せますからね。
>>215 感謝しますm(_ _)m
>>216 マルチ行為はすいませんでしたm(_ _)m 期間のせいで余裕が無いんです
それで納得してください
バカは死ななきゃ直らないんです。
相談できる友達もいないんですから。
>>219 > 期間のせいで余裕が無いんです
> それで納得してください
その理由は一般社会には通りませんよ。
223 :
デフォルトの名無しさん:04/12/01 00:36:47
キーボードから数個のstringを読み込んで、
fwrite()を使用することによってファイルにstringを書くプログラムを作れ。
次にfread()を使ってファイルを開き、列変数からファイルからのストリングを読み取れ。
そして画面にstringを表示せよ
全く意味がわかんないんです・・・
お願いします。
>>220口だけなら何でも言えますよ
友達に相談する手も考えましたが
2chの方達の方が詳しく教えて頂けるかと思いここに書きましたm(_ _)m
しかしドコにでも貴方のように中傷するしか脳が無い方はいるんですね
>某
正の整数を5ついれてみろ。
33_44_11_55_2 (リターン)
みたいな感じで
>>219 遅れましたm(_ _)m
まだ学生の身分なので「一般社会」を語ることなんて到底無理ですが
私はネットと一般社会が同じようなモノだとは思ってません
>>227 一般社会とは一般的な社会のことです。
ネット社会が一般的であれば一般社会と言えるでしょう。
Cの標準関数のみを使ってg[x][y]のint型の配列をグラフ化しなさい。
7|
6|
5|
4|
3|
2|
1|_____________________________________
0 1 2 3 4 5 6 7 8 9 10 11 12
このような形式のグラフを作りたいのです。
宜しくお願いします。
>>229 問題の意味がよく分からない。
g[x][y] の値はどこにどのように表示されるの?
231 :
ぼるじょあ ◆yBEncckFOU :04/12/01 06:39:00
>>229 (・3・)エェー よく分からないYO!
232 :
デフォルトの名無しさん:04/12/01 08:00:37
キーボードから数個のstringを読み込んで、
fwrite()を使用することによってファイルにstringを書くプログラムを作れ。
次にfread()を使ってファイルを開き、列変数からファイルからのstringを読み取れ。
そして画面にstringを表示するプログラムを作製せよ。
提出明日でむっちゃ困ってます・・・
お願いしますm(__)m
無意味にstringなんて単語使ってるから混乱するんだよな
この場合は string = 文字列 に置き換えて読めば問題の意図はわかるだろ
おっと、
>キーボードから数個の string を読み込んで
とあるから string = 文字 か?
でも、以降の string は文字列と解釈して欲しいんだろうけど…
列変数って何だ?
作成じゃなくて作製か?
stringもそうだが、課題を出される方もDQNなら出す方もDQNだな。
>>192 #include <stdio.h>
int main(void)
{
char str[BUFSIZ];
int num;
if(fgets(str, sizeof(str), stdin) != NULL &&
sscanf(str, "%d", &num) == 1 &&
num >= 0 && num <= 100)
puts("OK");
else
puts("NG");
return 0;
}
煽るつもりじゃなかったんだが…
>>232まぁとりあえず書いた。環境は知らんから cc で確認
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 256
int main( int argc, char *argv[] ){
FILE *fp = NULL;
char buf[ BUFFER_SIZE ] = { '\0' };
if( ( fp = tmpfile() ) == NULL ){
printf( "file was not created.\n" );
return EXIT_FAILURE;
}
printf( "input strings[EOF:stop]\n" );
while( scanf( "%s", buf ) != EOF )
fwrite( buf, sizeof( char ), BUFFER_SIZE, fp );
fseek( fp, 0, SEEK_SET );
printf( "\ninputed string are...\n" );
for( ;; ){
fread( buf, sizeof( char ), BUFFER_SIZE, fp );
if( feof( fp ) )
break;
printf( "%s\n", buf );
}
fclose( fp );
return EXIT_SUCCESS;
}
>>237 煽る積もりも何も、そんなコードじゃ話にならない。
突っ込みどころが多すぎるので突っ込みは割愛。
fflush( fp );
が必要ってこと?
でも多すぎる、なんて言ってるからもっとあるんだろうけど、
割愛されちゃ、ハタから見たらガキが文句言ってるだけにしか見えないよ?
それとも固定サイズの配列でscanf使ってることに文句言いたいとか?
とりあえず突っ込みキボン
>>239 それじゃさわりだけ。
・括弧の内側空けるな。
・必要のない初期化をするな。
・エラーは標準出力ではなくエラー出力に出力しろ。
・scanf()を使うなら最低限バッファサイズで制限しろ。
・sizeof(char)は常に1だ。無意味だから1にしておけ。
・fwrite()で不定値が入った情報はできれば書くな。
・fread()で全て読めることを期待するな。
・読めた情報がナルターミネートされていることを当てにするな。
・課題なのだから出力されたファイルを見られるようにしておけ。
・そもそも課題に書かれていることを無視するな。
・括弧の内側空けるな。
好みでは? それとも環境依存?
・sizeof(char)は常に1だ。無意味だから1にしておけ。
課題だからこそ、1が何を意味しているのか知るべき
・必要のない初期化をするな。
VCで変数初期化しないと挙動が変になった経験上
・エラーは標準出力ではなくエラー出力に出力しろ。
ferror( "tmpfile" ); は反応なかった(有無は知らない)
・課題なのだから出力されたファイルを見られるようにしておけ。
問題からはそのような文意は読み取れませんが?
・そもそも課題に書かれていることを無視するな。
どのことでしょう?
文字列を fwrite で書き込み, それを fread で読み取るが問題のメインじゃ?
・fwrite()で不定値が入った情報はできれば書くな。
できればって…
・scanf()を使うなら最低限バッファサイズで制限しろ。
・fread()で全て読めることを期待するな。
・読めた情報がナルターミネートされていることを当てにするな。
これこそ課題に求められてるものなの?
つーか
>>241は
http://pc5.2ch.net/test/read.cgi/tech/1101615970/413- の
>>417じゃない?
どっちもキチガイなことに気付け
あはは、おもしろいねここ
釣られちゃってごめんなちゃい(´・ω・`)
課題を読む限りプログラムは2本作らないといけないような。
西暦、月、日を入力してその日から1週間分の西暦、月、日を出力せよ。
その月が何日まであるか、閏年等も考慮すること。
よろしくお願いします
閏年等って何?
ユリウス歴とか?
>>242 ferrorじゃなくてfprintf(stderrとかfputs("hoge", stderr);とかだよ。
251 :
デフォルトの名無しさん:04/12/01 15:19:48
双方向リストに対して、次の3つのソート方法を用いた辞書順ソートプログラムを作れ。
1.バブルソート
2.クイックソート
3.マージソート
よろしくお願いします。
DQNな問題だな
254 :
デフォルトの名無しさん:04/12/01 15:58:20
誰か居ませんでしょうか?
>>253 ありがとうございました。
中身を理解できるように頑張ります
リストにか...
一般社会にでて無理難題を押し付けられても
口答えせずにちゃんと解決する訓練なんだよ。
インデクサはさめばいいんじゃないか
C言語で、キーボードから入力した文字列を字句解析して、結果を表示してくれるプログラムを
作りたいのですが判りません。初心者ですが、教えてください。お願いします。
例えばa+1と入力すると
IDENT:a
OP :+
NUM :1.0
3a*5と入力すると
ERR :3a
OP :*
NUM :5.0
ab 1.2 *と入力すると空白を無視して
IDENT:ab
NUM :1.2
OP :*
のように表示してくれるものを作りたいのです。よろしくお願いします。
パーサは一文字呼んで状態変化の繰り返しで簡単なものはどうにでもなる。
もう少し頑張ってみろや
parserじゃなくてlexerじゃないの?
262 :
デフォルトの名無しさん:04/12/01 23:15:12
キーボードから数個のstringを読み込んで、
fwrite()を使用することによってファイルにstringを書くプログラムを作れ。
次にfread()を使ってファイルを開き、列変数からファイルからのstringを読み取れ。
そして画面にstringを表示するプログラムを作製せよ。
sizeofとかfopenとか使うみたいです。
文字列を入力してファイルを読んで文字列を表示するんだそうです。
お願いします・・・
263 :
デフォルトの名無しさん:04/12/02 00:35:12
高速フーリエ変換について調べないと行けないんですけど
解説ページみてたら分からなくなりました。
以下解説文から抜粋----------------
まず,長さ N の DFT
N-1 jk -2πi / N
A = Σ a W , W = e
k j=0 j N N
を素直に計算する場合を考えます.この場合 A_0 から
A_N-1 までの各項の 計算に N 回の乗算が必要なため,全体で
N^2 回の乗算が必要になります. しかし,少し考えてみてください.
もし,N が 2 で割り切れるならば, 添字 k を偶数と奇数とに分ける
ことで,長さ N の DFT は,次の二つの, 長さ N/2 の DFT
N/2-1 jk
A = Σ (a + a ) W
2k j=0 j N/2+j N/2
N/2-1 j jk
A = Σ ((a − a ) W ) W
2k+1 j=0 j N/2+j N N/2
>>262 >列変数からファイルからのstringを読み取れ
???
265 :
デフォルトの名無しさん:04/12/02 00:35:36
に分解できることがわかると思います.さらに,この分解を
2 回, 3 回,... と繰り返せば, 計算量は約 1/4, 1/8,... と激減します.
以上抜粋----------------
この解説ページみたいにやっていくと
最期はW_N/Nになって乗数のところは2πijkになってWの項はつねに
1になる状態になってkごとの変化がなくなるきがするんですが、どこか
勘違いしてるんでしょうか?教えて下さい。。。
266 :
デフォルトの名無しさん:04/12/02 00:36:36
に分解できることがわかると思います.さらに,この分解を
2 回, 3 回,... と繰り返せば, 計算量は約 1/4, 1/8,... と激減します.
以上抜粋----------------
この解説ページみたいにやっていくと
最期はW_N/Nになって乗数のところは2πijkになってWの項はつねに
1になる状態になってkごとの変化がなくなるきがするんですが、どこか
勘違いしてるんでしょうか?教えて下さい。。。
268 :
デフォルトの名無しさん:04/12/02 00:37:46
すいません。二重に書き込んでしまいました。263と265で続いてます。
宜しくお願いします。。。
269 :
デフォルトの名無しさん:04/12/02 00:38:14
@二つのN*M行列X、Yを与え、行列の和WA=X+Yを求めるプログラムを作成しなさい。
A@のプログラムの行列の和を求める部分を関数mplus()にしなさい。
N、M、行列の要素はキーボード入力させる事
という課題です、よろしくお願いします
271 :
デフォルトの名無しさん:04/12/02 00:42:23
>>270 ?わかんないです。何か関係あるんですか?
すいません。ご迷惑おかけしますが教えてください。
学校でこのような宿題が出てわからず困っています。
使用するアプリケーションはvisual stdio.net。
C言語を用いて作成する。
問題文↓
2つの自然数を入力してその間にある素数を表示する.
入力は整数2つ.
2つの整数が正であること(エラー処理).
大小関係が逆でも対応できるようにする.
処理:prime関数を用いる.
引数:整数
戻り値:素数の場合が1、それ以外0.
出力:素数の値 下4桁と下4桁+100.
#include <stdio.h>←学校ではこれしか習っていない.
void prime(int)
main()
{
int a,b;
printf("input number:" );
scanf(%d%d,&a,&b);
if(a<=0||b<=0){ printf("error.");}
}
この先からどうすればいいのか全くわかりません。
おいおい、クリスマスも近いってのにstdio.hしか習ってないってどういう事だ?
275 :
デフォルトの名無しさん:04/12/02 00:50:58
初心者なんですがお願いします。MATLABで画像のラベリングをやってるんですがプログラムの仕方が全くわかりません。C/C++でいいんでプログラム例を教えてください。
>処理:prime関数を用いる.
prime関数はもうあるのかえ?
>>274 すいません・・・
>>276 まだないです・・・。
全て1から作れとのことです。
下のCは僕が自分なりに考えて作ってみたものです・・・
って言いますか、全然できてないけど。
>272
ありがとうございます、助かりました
>>273 「出力:〜」の意味がよく分からなかったから適当に素数を出力するだけ。
参考にしてちょうだい。
#include <stdio.h>
#include <stdlib.h>
int prime(int n){
int i, notprime, ret, *is_prime = (int*)malloc(sizeof(int) * (n + 1));
for (i = 2; i <= n; i++) is_prime[i] = 1;
for (i = 2; i <= n; i++) {
notprime = i;
while ((notprime += i) <= n) is_prime[notprime] = 0;
}
ret = is_prime[n];
free(is_prime);
return ret;
}
int main(){
int a, b, lower_bound, upper_bound, i;
printf("input number:");
scanf("%d %d", &a, &b);
if (a <= 0 || b <= 0)
printf("error.");
else {
lower_bound = a < b ? a : b;
upper_bound = a < b ? b : a;
for (i = lower_bound; i <= upper_bound; i++)
if (prime(i)) printf("%4d ", i);
}
}
>出力:素数の値 下4桁と下4桁+100.
なんか深い意味があるような無いような
>>279 ありがとうございます。
このCを土台にがんばってみます。
僕の学校じゃ#include <stdlib>とか習っていない
のでそこらへんはどうにかしてみます。
ありがとうございました。ご迷惑おかけしました。
>>280 すいません、それは僕のミスです。
出力は素数の値だけでいいそうです。
混乱させてすいません。
ちょっと気になった。差し替え。
#include <stdlib.h>
int prime(int n){
int i, notprime, ret, *is_prime = (int*)malloc(sizeof(int) * (n + 1));
for (i = 2; i <= n; i++) is_prime[i] = 1;
is_prime[0] = is_prime[1] = 0;
for (i = 2; i <= n; i++) {
notprime = i;
while ((notprime += i) <= n) is_prime[notprime] = 0;
}
ret = is_prime[n];
free(is_prime);
return ret;
}
#include "resource.h"
これがついたときどう実行するんですか
visual6.0
285 :
デフォルトの名無しさん:04/12/02 13:09:34
アップローダーが逝ってる・・・
質問です。
これがテキストファイルです。
Sale_ID, Item_id, Sale_Date, Customer_id, Payment_Type
2004090001, p1, 09/01/2004, 0000, Credit,
2004092002, p2, 09/01/2004, 0000, Credit,
2004090003, p1, 09/01/2004, 0001, Cash,
2004090004, p3, 09/01/2004, 0000, Credit,
2004100005, p2, 10/01/2004, 0000, Credit,
2004100006, s1, 10/01/2004, 0001, Cash,
このファイルを読みこんで、日付(例えば09/01/2004)で区切って、
さらにcreditかcashで分けてスクリーンに表示させたいんですけどどうすればいいですか?
こんな感じで。
//Sale_ID, Item_id, Sale_Date, Customer_id, Payment_Type//ここの部分はいりません。
2004090001, p1, 09/01/2004, 0000, Credit,
2004092002, p2, 09/01/2004, 0000, Credit,
2004090004, p3, 09/01/2004, 0000, Credit,
2004090003, p1, 09/01/2004, 0001, Cash,
286 :
285:04/12/02 13:14:37
struct Sales_text
{
char Order_id;
char Item_id;
char Sale_date;
char Customer_id;
char Payment_type;
};
int main()
{ Sales_text[ここもどれでコントロールしたらいいかわからないっす] }
これをベースにしようと思ってます。
実際のテキストにはもっとデータが入ってます。
「,」で区切られてるんだけど、それをどうやったらとれるのかわからないっす。
287 :
285:04/12/02 13:20:10
表示するときはカンマを無くさないといけないです。
実際の表示画面はこんな感じになります。
テキストの名前はSales.txtです。
OrderID ItemID SaleDate CustomerID PaymentType
2004090001 p1 09/01/2004 0000 Credit
2004092002 p2 09/01/2004 0000 Credit
2004090004 p3 09/01/2004 0000 Credit
2004090003 p1 09/01/2004 0001 Cash
288 :
デフォルトの名無しさん:04/12/02 13:51:29
>>287 お前>174か? そうでないなら同級生か?
カンマを取り除いて入力するには、ファイルから1行fgets()で読み込んでから、
sscanf()かstrtok()で切り出す。
#sscanf()なら"%s"ではなく"%[^,],"を使う。
290 :
285:04/12/02 13:57:20
>>289 そうです。
174です。
fgets()、教科書に載ってないのですがどうやって書けばいいんですか?
sscanf()とstrtok()もないです。
厨ですみません。
292 :
デフォルトの名無しさん:04/12/02 14:08:32
おっと説明足らずだな
man on WWW で対象の関数とか検索
書式が一定なら fscanf を使う
ってのはダメなの?
295 :
285:04/12/02 14:18:13
>293
行ってみましたがまるで理解の範疇をこえています。
どうやって調べていいかすらわかりません。
対象の関数でしらべてみましたがよくわかりませんでした。
>>285-287をそれで書いていだだけますか?
見れば理解できるかもしれません
man を理解できなきゃ今後同じ様な質問を際限なく繰り返す
まずは man などの内容を理解できるようになってからプログラミングやれ
297 :
285:04/12/02 14:24:39
>>294 書式が一定とはどういう意味でしょうか?
このテキストファイルはアップデートされるので
あまり応用が利かないと困るんです。
298 :
285:04/12/02 14:26:16
>>296 勉強はしますが、ここは宿題スレということで書き込んでます。
そういうことでご理解ねがえますか?
299 :
285:04/12/02 14:30:32
fstream.data("Sales.txt", ios::in)
data.read((char*) &sales, sizeof(Sales_text));
これでファイルを読み込んでます。
このあとの
while(!data.eof())
の中がよくわかりません。
(;´Д`)…(絶句)
>>285 MSDNライブラリの方がわかりやすいかも
サンプルコードあるから
重いけど…
/* そのデータを読み込んで表示するだけのサンプル。 */
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct Sales_text {
char Order_id[12];
char Item_id[4];
char Sale_date[12];
char Customer_id[6];
char Payment_type[10];
};
static void readAndPrint(const char * fileName);
static bool readStruct(const char * buf, struct Sales_text * data);
static void printStruct(const struct Sales_text * data, bool withHeader);
int main(int argc, char ** argv)
{
if (argc < 2) {
fprintf(stderr, "Usage:%s <file name>.\n", argv[0]);
exit(EXIT_FAILURE);
}
readAndPrint(argv[1]);
return EXIT_SUCCESS;
}
/* cont'd */
void readAndPrint(const char * fileName)
{
char buf[200];
bool withHeader = true;
FILE * fp = fopen(fileName, "r");
if (fp == NULL) {
return;
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
struct Sales_text tmp;
if (!readStruct(buf, & tmp)) {
fprintf(stderr, "Illegal data:%s\n", buf);
} else {
printStruct(& tmp, withHeader);
withHeader = false;
}
}
fclose(fp);
}
bool readStruct(const char * buf, struct Sales_text * data)
{
if (sscanf(buf, "%11[^,], %3[^,], %11[^,], %5[^,], %9[^,]",
data->Order_id, data->Item_id, data->Sale_date,
data->Customer_id, data->Payment_type) < 5) {
return false;
}
return true;
}
/* cont'd */
void printStruct(const struct Sales_text * data, bool withHeader)
{
if (withHeader) {
printf(" OrderID ItemID SaleDate CustomerID PaymentType\n");
}
printf("%10.10s %2.2s %10.10s %4.4s %s\n",
data->Order_id, data->Item_id, data->Sale_date,
data->Customer_id, data->Payment_type);
}
/* cで書いちまったよ。 */
305 :
263:04/12/02 18:55:59
>>263 の高速フーリエ変換についてきいてた者です。
すげー勘違いしてました。自己解決したので後はスルーお願いします。
最初からスルーされてたような気がするがw
なんか、もっと斬新な話はないのか…どこかで見たような話ばかりだ。
宿題なんてだいたい似たようなもんばっかだからな(´Д`)
リストをクイックソートは問題としては斬新だったな。
310 :
ゆかこ:04/12/02 19:43:29
今度C言語の課題が出たのですがどうも自分の力ではできません。
よろしければ助言をいただきたいと思います。よろしくお願いします。
レポート課題
以下のようなゲームを作りなさい。
コンピュータが 0から 9までの数を 4つ, 順序付きで重複なく選ぶとする. プレイヤ(人間)は, この数列を当てるのだが, はずれた場合に提示されるヒントは次の通り.
正解の n番目の数を n番目に解答していれば, Hit と呼ぶ. Hit の個数がヒントとして提示される.
正解の n番目の数を m番目(n≠m)に解答していれば, Blow と呼ぶ. Blow の個数がヒントとして提示される.
実行例
5 6 7 8
Hit: 0, Blow: 3
7 8 9 0
Hit: 1, Blow: 1
1 2 3 6
Hit: 1, Blow: 0
9 8 5 6
Hit: 3, Blow: 0
0 8 5 6
Congratulations!
↑無理があるな… いったん配列に落としてまたリストに戻すのかな。
中身を見ずに目新しいからといって、それだけで否定している奴っているよな
>>310 いわゆるマスターベーションってゲーム?
>>310 そのゲームで、コンピュータ側が解答者で人間側が出題者のやつをやったことあるけど、
何度か適当なヒント出してるうちに、「矛盾してる!嘘を言うな!」とか言い出した。w
>>310 begin-base64 664 HitAndBlow.c.gz
H4sICC7zrkEAAEhpdEFuZEJsb3cuYwCNVt9PW1Ucfy4J/8MBQnr7Q2jnXraORZhsmgAzOuIibLW0
t3CgvSX33jKnI5HvNQ42GAXKapYsmcag1C2LMRvJzExcGIIZ+uKDby4xjkF8aOKDD+7B7/me0/a2
srhAes/53u/vH5/vbeFGPJVN6OyIZSd4pm3kaGNDi5uW4kN1RJundSI1NrS3tyT0JDd01vdqd1f/
CaL5WS5/5Ro8mn2QyzN/O4qWefp7u7rfjB472d93ih2s4Z17uPDHYqqGu7fzdFRKsEOC17JjNo8z
btgsZljndHPAre9MRPAIjf7GBqbUfge3YdV51znuDDl9RP4kWri+mIKHy7/AWmOD3y8MuhRzK8GH
uW1p8Yxh2Sw+EjOZ3/KxDxobPDzJtCa84NFj6nbWNFgIjXrwP5kxmRZBzgizAgHiENya32JHmDfk
9bELF5i4HWXeQ14fMdToUOcwnifdUSxdgxUozf2Zu0lXZ8ZZcqLOh7BVfQF3pjplPpZ/zuVha+H3
pWewBrtTXXXxTWR4gqVjY3pUsmsqLBF2kI1G1BldMc+Li2XGjISmZQ2LDxt6wsdE3bW+/p4en4+S
LcPmrANjYBwjddcDKZgJsuBJZOTTQ7qJn66qjPwMksiYj7UyzVX3AAv7JCs2Sg83su+xN8zMsBlL
p3XTa7HemJGNpWALnsAe/DS9OXMPHi3/c/UVKOY+mv8CvkHqOnwmc1FnT8NYfUwLh9pCfmm73WU5
EG4L+ZRpkUJ8ULCjMthRDJbjoxKhrLfSP4r6O1jFWIWlEn44oghDph4bU5dJetDvJDs3wlM600iA
3KCuaOFJA4ejMmuecROjSGrNnWTrMGsm3v8vizBSlm1NsOagy9uIS++gQRpbdCPBk8KDmuZ0Pp4a
cPphFXaWnhW2oXTlL7g91emMI/U03IH7s5dnfoSSqVvZlF3tSylKTPOZwjRsYoE24QcUPOHMTA1A
MX8rd1eIz+/NXYTty/1QwmG9A+vz04XrULr6G6yJcqISJD/FWS7mzqKCndzN2b/3m2hjPGtHjWx6
SDctUXTmlx7JstCED2WTA+HQgYMCQzw1k49JFA0fKXP6x10UUi8RANtTIYQVjxmUVfmHqZXmBkJn
Ksdw9XigenwZO6Wpo6Za9VgjYhMFHtYRotDrILP4+3omKc4+vCCCG1RA9Gfm2ZwFpfyt2VWRTNiB
b+FrKM6/vjhAKCsBSoRj2WZ8xJTqvIMmwhOh1X9fGfiKPKIseAdDXgV/Ik2ChHwv1n9yItBJ57Rz
ntplG089iNIT0jmPGgBRATTFvBIyEVxpWpT05Se5X+EplBZPwZqSI5B2+24FSdxXnkLBwOvzzF5C
oJFjWMk2QwOFiYUkFBe+QiPYprIhZZsqczSuesrSJVKMBwKuzJTdFKtoevPSScSmu7iUijgH3xMu
idZfvZTOH3c7X1lB1j57wiMbgvqFYCxmZzhyus2JkYAvQZRduvy4xmWqe1XFERaS9a6SjrpW7/N8
oJIrYHru9iqcxSW1gyB8X/hEK2sDbqjgd2F1fmPuooSDKSz9O9gIb2OOBq+swGPs3c/3HfOFt2B9
em9xYp9Rj4/o8TG1uWnQafb333Ij3GblRSTuQ6nMufL9RfvXBfmcIJ/sCQylnKEJ1a6iQVT71W+R
Wt3PWShu7aOufSKcViYqy0S07dJtuIufAsXlT/H3BuzKxp3em30AG0hZgV3VC7VbR1VTGBbp6ajD
Imm2vBqOZQzcw3Y2henHjDepVeFxNwOpqwZfFn2N24dZayLIutB/cULZoKhIkMpQoyak1EzKrztR
qnSMG+5vF0pL/aegp+ZDR+GUApWwq35N9ftBdEw5w2WHu00zY1YjFCvCxo8RPVKBAKFKtp/SQHyV
9S54ELPFCpHOuKLDd/8CxofV2IQLAAA=
====
ゆかこちゃんにいぢわるするのはよせ
GyRCJEwkayRdGyhC
どうせならQRコードで解答すっかw
>>322 マジレスすると隣り合った文字列リテラルは結合されてしまう。しかし
問題はそこにあるのではなく、',' (カンマ)が入っている事です。これじゃ
ホワイトスペース文字とマッチしないよん。
だ、誰か!助けて!
【仕様】
2つのファイルを読み込んで新しい2つのファイルを作成する。
読み込むファイルには1行に1名分のデータが書かれており、
「B 氏名 打率」または「P 氏名 防御率」である。以下は例である。
--bluewave.txt--
B tani 0.317
B hidaka 0.274
P kawagoe 4.16
P motoyanagi 5.61
--kintetsu.txt--
B kitagawa 0.303
B isobe 0.308
P iwakuma 3.00
P kawajiri 4.25
このような2つのファイルを読み込み打率が0.300以上または防御率が4.20以下のデータのみを集めた
orixbuf.txtと、それ以外のデータを集めたrakuten.txtという2つのファイルを出力するプログラムを作成せよ。
分からない宿題やってもらう分、
Base64の知識でも詰め込んで置けと言うつもりでやったんですけどね
>>320 GyRCJSwlQxsoQg==
ぐわ、書き忘れだ… orz
言語はC言語です。
C++の問題で
文字列と1文字を入力して、文字列中の1文字の個数を処理して出力する問題なんですけど
たとえばnellyでlなら2と出力するプログラムなんですけど、よかったら教えてください
>>328 #include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string str = "Hello, World!";
char c = 'l';
std::cout << std::count(str.begin(), str.end(), c) << std::endl;
return 0;
}
330 :
285:04/12/02 22:17:16
>>304 どうもです。
うごかないです。
C++で書くとどうなりますか?
表示するのはできますが、読み込んだ後日付とPayment_typeで読み込んだ後の
ファイルの並び替えをしなければなりません(すでに書いたと思いますが)。
それをどうやったらいいかわかりません。
名前データの先頭文字が'E'のものだけ表示するプログラミングを作りなさい。
static char *name[]={"Eluza","Candy","Emy","Ann"};
int i;
for (i=0;i<4;i++)
if (name[i][0]=='E')
printf("%s\n",name[i]);
これを先頭文字をscanfで打ち込み、その先頭文字の名前を表示し、
打ち込んだ先頭文字の名前がなければその旨を表示するプログラムに
変えたいんですが、どうしたらいいでしょうか?
言語はCです
332 :
デフォルトの名無しさん:04/12/02 23:05:59
頭文字(・∀・)イイ!!
#include <stdio.h>
>>331 int main(void)
{
static char* name[] = {"Eluza", "Candy", "Emy", "Ann"};
int i, count;
char cap;
printf("頭文字をどうぞ:");
scanf("%s", &cap);
for (i = 0, count = 0; i < 4; i++)
if (name[i][0] == cap)
{
printf("%s\n",name[i]);
count++;
}
if (!count) printf("ありませんですた");
return 0;
}
>>333 ありがとうございます!
助かりました。
335 :
デフォルトの名無しさん:04/12/03 00:16:35
C言語で質問なのですが、少しわからない事があります。
背番号,打数,安打数を多数入力し、打率の最高の選手のみ
背番号,打数,安打数とともに打率を出力する(同一打率の選手はない)
プログラムです。ストッパは背番号=−999,打数=安打数=0
ここまでは出来ました。しかしコンパイルがうまくいきません・・・。
指摘下さいますと助かります。
#include <stdio.h>
int main(void)
{
int num,num1,dasuu,dasuu1,anda,anda1;
double daritu,daritu1;
daritu=0;
daritu1=0;
do{
printf("背番号を入力せよ\n");
scanf("%d",&num);
printf("打数を入力せよ\n");
scanf("%d",&dasuu);
printf("安打数を入力せよ\n");
scanf("%d",&anda);
daritu=anda/dasuu;
if (daritu1<daritu)
{
num1=num;
dasuu1=dasuu;
anda1=anda;
daritu1=daritu;
}
}while(num!=-999 && dasuu!=0 && anda!=0);
printf("%d %d %d %.3f",num1,dasuu1,anda1,daritu1);
return(0);
}
>>335 daritu1=daritu;
↑ここに全角スペースがあるからちゃうのん?
>>273 >>279 >>282 のC言語なんですが、訂正をお願いしてもいいでしょうか?
僕の学校ではstdlibをならってないのでできるだけstdioだけで
Cを作りたいのです・・・.
prime関数の方ではmallocは習っていないのでこれを学校に
提出したらちょっと危ないと思いますので、使わないでどうにか
できませんか?
Cを書いてもらった279さんには不愉快な思いをさせて申し訳
ありませんが、どなたかお願いします。
339 :
デフォルトの名無しさん:04/12/03 00:29:46
>>336 コンパイルはできたんですけど実行がうまくいかないんですよ。
だからプログラム自体が間違えてると思うんですよねぇ〜。
>>330 >302-304はCでも動くぞ。stdbool.hをインクルードする必要もないし。
充分ヒントになるように関数を作ってあるようだから、頑張って勉強しろや。
>>333 何故頭文字だけなのに%s? ほぼ確実に領域破壊しているんだが。
>>334 つーことで、そのまま提出しないように。
>>335 実行モジュールは何かダイイング・メッセージを残しませんでしたか?
342 :
デフォルトの名無しさん:04/12/03 00:38:03
>>341 ストッパを入力すると『Division by 0』というのがでて終了してしまいます。
>>342 ( ゚Д゚)ポカーン
そのまんまだろう
344 :
デフォルトの名無しさん:04/12/03 00:41:46
>>343 すいません(^∀^;初心者なもので・・・。
どういう意味なんでしょうか?
自分で書いたことぐらい把握しろ
それとも何か?人生初心者を主張してるのか?
346 :
はるか:04/12/03 00:46:36
すいません質問です。0から9までの数を重複なく四つ選ぶ方法を教えてください
>>344 お前、ストッパは-999, 0, 0なんだろ? 0 / 0 を計算しているだろ?
あやまれ!それを告げて死んだプログラムにあやまれ!
349 :
デフォルトの名無しさん:04/12/03 00:48:26
>>346 「0〜9までの数字をランダムで2個選んでswap」を
任意回行った後、先頭の4つを取り出す。
/* 取り敢えずこんなもんかな */
int prime(int n)
{
int i;
if (n == 2) {
return 1;
}
if (n < 2 || n % 2 == 0) {
return 0;
}
for (i = 3; i * i <= n; i += 2) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
for (int i0 = 0; i0 <= 9; ++i0) {
for (int i1 = 0; i1 <= 9; ++i1) {
if (i1 == i0) {
continue;
}
for (int i2 = 0; i2 <= 9; ++i2) {
if (i2 == i1 || i2 == i0) {
continue;
}
for (int i3 = 0; i3 <= 9; ++i3) {
if (i3 == i2 || i3 == i1 || i3 == i0) {
continue;
}
printf("%d, %d, %d, %d\n", i0, i1, i2, i3);
}
}
}
}
353 :
デフォルトの名無しさん:04/12/03 00:52:33
>>348 っつー事は0/0を計算しなければ(・∀・)イイ!ってことか!
>>337 俺が書いたのはエラトステネスのふるいと超有名な方法の最も
初歩的な書き方。どっちにしても見ておくといいだろう。
で、
>>351氏のを提出したら大丈夫じゃねぇか?
>>279 ごめんなさい。そしてありがとうございます。
最後の最後まで迷惑おかけしました。
ずうずうしい自分の態度に反省しています。
>>351 ありがとうございます・・・。
(・3・)エェー ここはぼるじょあスレなのに
なんでみんな普通の言葉でしゃべってるんだYO!
>>357 (・3・)エェー なんでトリップがついてないんだYO!
いつまでそんな、とっくに飽きられた事をやってるんだ?
360 :
デフォルトの名無しさん:04/12/03 06:56:07
>>359は新スレが立つたびに荒らす奴か。
今回はおとなしかったみたいだが。
361 :
ほんたま:04/12/03 07:07:26
プログラマーのみなさん、教えてください。
ひとつのオブジェクトを2つに分裂させるコードを書きたいのですが、どう書けばいいのですか?
擬似的に2つに分裂したように見えるのではなくて、実際に2つに分裂するコードを書きたいのです。
つまり1つから2つのオブジェクトが同時に発生し、2つのオブジェクトの発生にはほんの少しの時間差もないという、事実上の分裂を書きたいのですが…
精神分裂病になれば同時に二人分の人生を生きられるよ。
つーか、何マルチしてんだよ。
ギャー誰も
>>325の問題にレスつけてくれてNeeeeeeeeeee!!!
死んできます、切腹。orz
>>365 起きたら電子レンジのように解答が出来上がってるって虫のいい事を
考えないで、答えが出るまで起きてて催促しろ。
>>366 うぉ、心に響く… 確かに、そうですな。
もう少し自分で足掻くだけ足掻いてダメだったら吊って来る。
まず,ファイルにデータの個数nと,その個数分のデータ(整数のデータ)を保存する.
プログラムbinsearch.cは,まずファイルからnを読み込み,その数だけデータを読み込む.次に整数を一つキーボードから入力し,それが読み込んだデータ内に存在する場合にはyes,存在しない場合にはnoを答える.
プログラムbinsearch.cを作成し,その動作を確認せよ.ただし,プログラムの動作がわかるように,探索範囲のインデックス(iL, iM, iR)を表示するようにせよ
以下参照
#include <stdio.h>
#define N 100
enum yn {yes,no};
enum yn bsearch(int x, int *A, int n);
main(){
int A[N],n,x;
enum yn ans;
ans = bsearch(x,A,n);}
enum yn bsearch(int x, int *A, int n){
int iL,iR,iM;
iL=0;iR=n-1;
if(A[iL]==x||A[iR]==x)return(yes);
if(x<A[iL]||x>A[iR])return(no);
while(iR-iL>1){
iM=(iL+iR)/2;
if(A[iM]==x)return(yes);
if(A[iM]<x)iL=iM;
else iR=iM;}return(no);}
cでお願いします。
>>367 暇だから作ってみたけど、
>>1のリンク先切れてるな。
確か前に行った時、どこか他のURIに変わるって書いてあった希ガス。
今どこにうpすればいい?
アップローダーの移転先わからんからここに連貼りするよ。
#include <stdio.h>
#include <stdlib.h>
#define INPUT1 "bluewave.txt"
#define INPUT2 "kintetsu.txt"
#define OUTPUT1 "orixbuf.txt"
#define OUTPUT2 "rakuten.txt"
struct Member {
char position;
char name[20];
double rate;
};
int main(void)
{
FILE *fi1, *fi2, *fo1, *fo2;
struct Member mb[20];
int i, count = 0;
char buf[128];
if ((fi1 = fopen(INPUT1, "r")) == NULL || (fi2 = fopen(INPUT2, "r")) == NULL || (fo1 = fopen(OUTPUT1, "w")) == NULL || (fo2 = fopen(OUTPUT2, "w")) == NULL)
exit(1);
while (fgets(buf, 128, fi1)) {
sscanf(buf, "%c %s %lf", &mb[count].position, mb[count].name, &mb[count].rate);
count++;
}
fclose(fi1);
while (fgets(buf, 128, fi2)) {
sscanf(buf, "%c %s %lf", &mb[count].position, mb[count].name, &mb[count].rate);
count++;
}
fclose(fi2);
for (i = 0; i < count; i++)
switch (mb[i].position) {
case 'B':
fprintf((mb[i].rate >= 0.3) ? fo1 : fo2, "%c %s %f\n", mb[i].position, mb[i].name, mb[i].rate);
break;
case 'P':
fprintf((mb[i].rate <= 4.2) ? fo1 : fo2, "%c %s %f\n", mb[i].position, mb[i].name, mb[i].rate);
break;
default:
break;
}
fclose(fo1);
fclose(fo2);
return 0;
}
>>1の移転先わかる人URIキボン。
お前らは負け組みであり勝ち組
そういう均衡を保った凄まじさに可憐さを交えた
熱い思いを吐き出せずに、ただ毎日を暗鬱と過ごしている
だけのカリカチュア。
誤爆?
ローカル記憶域を指してthisポインタのようなものと言ってるのだろう。
376 :
デフォルトの名無しさん:04/12/03 18:18:08
以下のメインプログラムを基に、4次のAdams-Bashforth法を用いて常微分方程式を
解くプログラムを作成せよ。
#include <stdio.h>
#include <math.h>
#define DX 0.1
#define XINI 1.0
#define YINI 0.0
#define IXFIN 10
main()
{
double x = XINI, y= YINI, y_next;
int ix;
double next(double,double);
for(ix=1;ix<=IXFIN;ix++)
{
y_next= next(x,y);
x= XINI + DX*(double)ix;
y= y_next;
printf("%f%f\n",x,y);
}
}
Cでお願いします。
最近思うんだ・・・
#defineは使うんじゃネェ!
ってint ix;
for(ix=1
ってやってるあたりからしてCか・・・
>>377
だからCだと言ってるじゃないですか。
いいかげんにしてください。
379 :
デフォルトの名無しさん:04/12/03 18:45:48
#define よりも const を使うことが推奨されている
>>379 わたしを区切らないで
,(コンマ)や;(セミコロン)いくつかの段落
そしておしまいに「return」があったりする
プログラムのようには
こまめにコメントをつけないでください
わたしは終りのないプログラム
川と同じに
はてしなく流れていく 拡がっていく
一行の詩
池沼?
>>384 そういうふうな言葉を言われるととても悲しくなります。
どうして、そんな非道いこと僕にいったの?
。゚(゚´Д`゚)゚。
...,、 - 、
,、 ' ヾ 、 丶,、 -、
/ ヽ ヽ \\:::::ゝ
/ヽ/ i i ヽ .__.ヽ ヽ::::ヽ
ヽ:::::l i. l ト ヽ ヽ .___..ヽ 丶::ゝ
r:::::イ/ l l. i ヽ \ \/ノノハ ヽ
l:/ /l l. l i ヽ'"´__ヽ_ヽリ }. ', ',
'l. i ト l レ'__ '"i:::::i゙〉l^ヾ |.i. l
. l l lミ l /r'!:::ヽ '‐┘ .} / i l l / ̄ ̄ ̄ ̄ ̄ ̄ ̄
l l l.ヾlヽ ゝヾ:ノ , !'" i i/ i< お呼びですか?
iハ l (.´ヽ _ ./ ,' ,' ' | ・・・・・
|l. l ` ''丶 .. __ イ \_______
ヾ! l. ├ァ 、
/ノ! / ` ‐- 、
/ ヾ_ / ,,;'' /:i
/,, ',. ` / ,,;'''/:.:.i
死ねよ
また禁断症状ですか?
c言語です。お助けください…
文字列数字を10進数に変換して表示させる
NGワード:atoi(ss)
自分は(恐らく)00001111でその文字とANDをとったところまでしかわからんです
一桁までならわかるんだけど、何だか制限されてるんですよ。
以下問題箇所をそのまま載せます
char suuji[5]= "5432" ;
unsigned int r1=0; mask=(任意)
int cnt ;
for(cnt = 0 ; cnt < 4 ; cnt ++){
r2 = (unsigned int)suuji[cnt] ;
r2 = r2 (演算子1) mask ;
r1 = (r1 (演算子2) 3 ) + (r1 (演算子3) 1 ) ;
r1 = r1 + r2 ;
}
printf("10進数 = %u\n",r1) ;
(演算子1〜3)を補って10進数を表示させるらしいのですが…
maskの値は…0x0fじゃないかなーとか思っております…こういうひらめきなの嫌いです。
ヒントでも良いです・・・お願い致します…
なんかきもちわるいプログラムですね。
mask = 0x0f;
r2 = r2 & mask;
r1 = (r1 << 3) + (r1 << 1); /* (r1 * 8) + (r1 * 2) は (r1 * 10) */
r1 = r1 + r2;
関係ないけど
r1 *= 10;って書くより
r1 = (r1 << 3) + (r1 << 1);
のほうがいいの?
>>394 昔のCPUで命令に掛け算が無かった頃はその方が速かった。
はやっ・・・・・・・・・
おれはあれですか、バカですか・・・ありがとうございました・・・r1*10か・・・なるほどね・・・がっくし
>>396 バカとは言ってないよ。こういうのは経験として知ってるかどうかだけだと思う。
とりあえず、2進数の掛け算を筆算でしてみればいい。
さっぱりわかんない宿題がでました。助けてください。
[1] 授業単元:プログラミング言語基礎
[2] 問題文:
2ちゃんねるデータ形式で、ID名をカウントし、一番多いやつを調べる。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): MinGW 2.0.0
[3.3] 言語:C
[4] 期限:2004年12月24日
それ宿題じゃなくてお前が作って欲しいだけだろ
ネタ乙
401 :
デフォルトの名無しさん:04/12/05 04:16:38
int* sumArrays(int* a, int* b, int N){
int* c = new int[N];
for (int i = 0; i < N; ++i)
c[i] = a[i] + b[i];
return c;
}
これってコンパイルとラン可能ですよね?
自分でやってみたら、動いたんですけど。。。
でもエラーとか不利点とか、あるみたいで、それがいまいち、よく分からないんですが。。。
ポインターって、関数で、&パス(リファレンス)できないですよね?
なんでですか?
402 :
デフォルトの名無しさん:04/12/05 04:50:32
>ポインターって、関数で、&パス(リファレンス)できないですよね?
なんのために使う?
403 :
デフォルトの名無しさん:04/12/05 05:09:59
使わないけど、そういう問題が出てて。なんで出来ないのか書けって。
404 :
デフォルトの名無しさん:04/12/05 05:18:45
int* sumArrays(int*& a, int*& b, int N){
int* c = new int[N];
for (int i = 0; i < N; ++i)
c[i] = a[i] + b[i];
return c;
}
これコンパイル&ラン可能だったけど?
405 :
404:04/12/05 05:19:23
コンパイラはBorland C++ Compiler
関数呼んだあとdeleteをするのを忘れるなって話?
407 :
デフォルトの名無しさん:04/12/05 05:24:16
そうなんだよね。私も出来たんですよ。でも、問題文が、
「これは、コンパイラー、ラン可能か?そのエラーと不利点をあげ、正しくプログラムを書き換えろ」
なんだよね。。。
std::vector<int> sumArrays(int*& a, int*& b, int N) {
std::vector<int> v;
for (int i = 0; i < N; ++i)
v.push_back(a[i] + b[i]);
return v;
}
こう直せばいいんじゃないか?
409 :
404:04/12/05 06:35:08
int* sumArrays(int*& a, int*& b, int N){
int*&ってしたの気づいてくれてるよね?
410 :
404:04/12/05 06:35:39
>403
プログラムの開始前時刻と終了後時刻を調べその差を取ってプログラム実行時間(秒単位)を調べよ
↑
この課題の時間差ってどうやってもとめるのでしょうか?
time
>>409 ポインタのリファレンスは呼び出し側で&を省けるって利点があるね。
それがそのまま欠点にもなってるけど。
出力結果をhtml形式の表に出力するのはどうやったら宜しいのでしょうか?
htmlファイルの中にある複数のセルを結合した中にC言語の変数の内容を出力したいのですが・・・
printf関数の内容をhtml出力対象にしてもセル関係がうまく均等にならなかったり
>>414 CでHTMLを出力するってこと?
それならHTMLの勉強をすればいい。
HTMLでのtableの結合は、tdタグのcolspan属性またはrowspan属性だ。
>>411 時間変数2個作って最初と最後に取った差分を取るだけ?
417 :
デフォルトの名無しさん:04/12/05 14:18:10
助けて下さい! 「身長を入力していき、一番背の高い人と一番低い人の身長を
求めるぷログラム(0を入力した時にデータ終了)」が課題なんです。while文を
使うんです。私はSUMとかDATとか習ってないのでそれらを使わずに作らなくては
いけないんですが、どうしても分かりません・・。誰かお助けをお願いします!
>>417 ソートの問題はさんざん既出だろ。
みなさん、スルーで。
419 :
417:04/12/05 14:29:31
すいません。ソートって何ですか?過去ログ四段ですけどいまいち分からなくて。
c++とかのことですか?
ソートじゃないと思うけど。
>>419 int i;
double a[100]
double max;
double min;
max = a[0];
min = a[0];
i = 0;
while (a[i] != 0) {
if (a[i] > max) max = a[i];
if (a[i] < min) min = a[i];
++i;
}
>>417 #include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{
char buf[256];
int n, min = INT_MAX, max = INT_MIN;
while( n = atoi(fgets(buf, sizeof(buf), stdin ) ) ){
if( min > n ) min = n;
if( max < n ) max = n;
}
printf(" 最大 %d, 最小 %d \n", max, min );
return 0;
}
こんなの出ました(Cです)
"end"という文字列が入力されるまで文字列を入力として受け付けて、
入力された文字列を全て配列に格納せよ(ただし、上限は100とする)。
この配列の要素のうち、添え字が偶数のもののみ出力せよ。
お願いします。
ガンバレ
scanfで文字列読みとって
charの2次元配列にstrcpyでコピー
入れた数は変数にでもいれとけ
425 :
デフォルトの名無しさん:04/12/05 15:54:27
ファイルを読み取り、その各行に行番号をつけたものを別のファイルに出力する
プログラムを作成せよ。(C言語でお願いします)
例)
Nice to meet you.
My name is Taro Tanaka.
のとき、出力は
1: Nice to meet you.
2: My name is Taro Tanaka.
のように。
FILE *rfp, *wfpみたいにファイルポインタを宣言して
fopen やfclose などを使って
if((rfp = fopen("test1input.txt", "r")) == NULL)
みたいにやっていくみたいなんですが、サパーリです(汗
よろしくお願いします。
>>423 #include <stdio.h>
#include <string.h>
int main() {
char Buf[101] = "";
int i, Len;
for (i = 0; i < sizeof Buf; i++) {
int ch = getchar();
Buf[i] = ch;
if (ch == EOF || !strcmp(Buf + i - 2, "end"))
break;
}
Len = strlen(Buf);
for (i = 0; i < Len; i += 2)
putchar(Buf[i]);
return 0;
}
>>425 #include <stdio.h>
int main(void)
{
char buf[1024];
FILE *rfp, *wfp;
int line = 1;
if((rfp = fopen("test1input.txt", "r")) == NULL){
fprintf(stderr, "file open error\n");
return -1;
}
if((wfp = fopen("test1output.txt", "w")) == NULL){
fprintf(stderr, "file create error\n");
return -1;
}
while(fgets(buf, sizeof buf,rfp) != NULL){
fprintf(wfp, "%d: %s", line, buf);
line++;
}
fclose(rfp);
fclose(wfp);
return 0;
}
>>425 #include <stdio.h>
int main(int argc, char **argv) {
FILE *fpInput, *fpOutput;
unsigned i = 0;
if (argc <= 2)
return 1;
fpInput = fopen(argv[1], "r");
fpOutput = fopen(argv[2], "w");
if (!fpInput || !fpOutput)
return 1;
for (;;) {
char Buf[512];
if (!fgets(Buf, sizeof Buf, fpInput) || fprintf(fpOutput, "%d:\t%s", ++i, Buf) < 0)
return 0;
}
}
これは0からカウントするようになっているが、もし1からカウントするようにしたいならi++を++iに書き替えれば良い。
431 :
デフォルトの名無しさん:04/12/05 17:48:35
C++の「algorithm」にある、文字列の並び替え関数next_permutationって、
どういうアルゴリズムなんですか?普通のC言語のプログラムで書こうとしたらどうなるのでしょうか?
javaで同じことをしたいんですけど、ヘッダファイルを見てもチンプンカンプン。
配列を使用して3つの整数を入力しました。
この3つの整数の大小を比較して大きい順に並び替えたいんですが、
整数のかず(今は3つ)に依存せずいくら多くなっても少なくても並びかえれるようにできるプログラム
はできますでしょうか?教えてください。お願いします(C言語でお願いします)
だからソートしるって。
435 :
デフォルトの名無しさん:04/12/05 19:34:23
int min (int x, int y) {
if ( x < y ) {
return x;
else
return y;
}
}
print("小さいのは %d です。", min(x, y));
上記のように関数ではなく以下のようにマクロを用いるメリットについて考察して述べよ。
#define MAX(a, b) ((a > b) ? a : b )
〜略〜
printf("大きいのは %d です。\n", MAX(x, y));
どうなんでしょう?
>>435 関数を呼ぶときのオーバーヘッドが無くなる かも しれない
メリットとしては、型に関係ないコードが書けるので同じ内容のコードを
型ごとに書く手間が省ける点、関数呼び出しのオーバーヘッドがない点
がある。その反面、マクロはスコープを持たず、エラーメッセージが読み
にくくなりやすい等の副作用が無視出来ない程に多い。型を無視すると
いうのも、分かりにくいエラーの元になり、必ずしもメリットとは言い切れ
ない。よって、殆どの場合において出来る限りマクロは避け関数で書いた
方がよい。C++にはテンプレートと言う機能があり、副作用がなく、しかも
基本的には型ごとに同じコードを書く必要がない。関数呼び出しのオーバー
ヘッドに関しては、inlineキーワードを使うことによって関数呼び出しの
オーバーヘッドを取り除くかどうかの判断をコンパイラに任せるのが
得策である場合が多い。
よって、マクロには現実的メリットは殆どない。
C++持ち出してメリットないなんていかがなものかと。
C99でもinlineもサポートされたけどポータブルな分まだ利用価値はあるだろ。
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
あと MAX(hoge++, fuga++) みたいな使い方も爆死
マクロのほうがカッコイイ。
マクロはカッコだらけでカッコワルイイ。
444 :
425:04/12/05 20:09:00
>>429さん
エラー出ちゃうんですけど・・・
エラーの内容ぐらい書けよ
#define より defmaro のほうがカッコイイ。
>>431 順列を生成してるだけだから。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int nextperm(int n, int pp[]) {
int i, j, t;i = n - 2;
while (0<=i && pp[i] >= pp[i+1]) i--; if (i < 0) return 0; j = n - 1;
while (pp[i] >= pp[j]) j--;t = pp[i]; pp[i] = pp[j]; pp[j] = t;
i++; j = n - 1; while (i < j) {t = pp[i]; pp[i] = pp[j]; pp[j] = t; i++; j--;}return 1;
}
#defineN4
int main(int argc, char* argv[]) {
int i, count = 0, p[n];
for (i = 0; i < N; i++) p[i] = i + 1;
do {
printf("%5d: ", ++count); for (i = 0; i < N; i++) printf("%4d", p[i]); printf("\n");
} while (nextperm(N, p));
return 0;
}
>>444 どうせ、txtファイルを、プログラムと同じ場所においてないからじゃないの。
ファイルの内容を読み込んでそれを2進数で出力せよ。
どうやるんでしょう?
ものすごい桁数になるがそれでもいいのか?
>>451 OKです
入力用のファイルは多くても200byteなので。
>>450 int main(int argc, char **argv)
{
FILE *fpInput;
if (argc <= 1)
return 1;
fpInput = fopen(argv[1], "r");
if (!fpInput)
return 1;
for (;;)
{
int i, ch = getc(fpInput);
if (ch == EOF)
break;
for (i = 0; i < CHAR_BITS; i++, ch <<= 1)
putchar((ch & 80 != 0) + '0');
putchar('\n');
}
fclose(fpInput);
return 0;
}
>>450 #include <bitset>
#include <climits>
#include <fstream>
#include <iostream>
#include <iterator>
int main()
{
std::ifstream file("data.dat", std::ios::in | std::ios::binary);
for (std::istreambuf_iterator<char> first(file), last; first != last; ++first) std::cout << std::bitset<CHAR_BIT>(*first);
}
>>426 ありがとうございました!
助かりました!
1int型整数a,bに値をキー入力する。
2a,bのアドレスをポインタ変数pa,pbに代入する
3paとpb内容(アドレス)を交換する
4paとpbが指すアドレスに格納されている値を表示する
プログラムおねがいします
>>458 #include <stdio.h>
int main(void)
{
int a, b, *pa, *pb, *temp;
printf("a,bの形式で入力せよ:");
scanf("%d,%d", &a, &b);
pa = &a;
pb = &b;
temp = pa;
pa = pb;
pb = temp;
printf("*pa = %d, *pb = %d", *pa, *pb);
return 0;
}
460 :
425:04/12/05 23:45:27
すいません、2問目もお願いします。
ファイルを読み込み、合計・平均・最大値と最小値を求め、ファイルに書き出す
プログラムを作成せよ。
(429さんみたいにお願いします。Cで)
例
(入力ファイル)
1
2
3
4
出力
合計:10
平均:2.5
最大値:4
最小値:1
つーか、といてもらってお礼もなしで
次の質問なんてずいぶん礼儀正しい人ですね。
全角数字では難しいですねぇ
>>460 半角数字でよければw
#include <stdio.h>
#include <limits.h>
int main(void) {
FILE *rfp, *wfp;
int temp, n = 0, sum = 0, max = INT_MIN, min = INT_MAX;
if((rfp = fopen("test1input.txt", "r")) == NULL){
fprintf(stderr, "file open error\n");
return -1;
}
if((wfp = fopen("test1output.txt", "w")) == NULL) {
fprintf(stderr, "file create error\n");
fclose(rfp);
return -1;
}
while(fscanf(rfp, "%d\n", &temp) != EOF) {
if (temp > max) max = temp;
if (temp < min) min = temp;
sum += temp;
++n;
}
fprintf(wfp, "合計:%d\n平均:%f\n最大値:%d\n最小値:%d", sum, (double)sum / n, max, min);
fclose(rfp);
fclose(wfp);
return 0;
}
[2] 二次方程式の解を求めるプログラムの作成
・係数 a,b,c はキーボードより入力
・繰り返し処理が出来る事(for,while,don 〜 while文のいずれかを用いる)
・繰り返しの条件終了は a=0 の時とする
・虚数解は、求めなくて良い
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ(バージョン): CPad Ver2.31
[3.3] 言語:C++
[4] 期限:2004年12月6日
素人なのでよく分かりません。よろしくお願いしますm(__)m
466 :
425:04/12/06 00:25:15
>>429さん
すいません、エラー出てて書き込めてなかったみたいです。
よく出るんです・・・何故?
ありがとうございましたm(__)m
>>466 だから、エラーの内容を書けとあれほど・・・
解いて欲しい問題だけは書き込めるんだな
1a,bに値を代入する。
2a,bのアドレスをポインタ変数pa,pbに代入する
3pa,pbをつかって(a,bを使わずに)aとbの値(内容)を交換する
4a,bの値を表示する
を自分でやってみました
#include <stdio.h>
int main(void)
{
int a,b,*c,*pa,*pb;
printf("a= ");
scanf("%d",&a);
printf("b= ");
scanf("%d",&b);
pa=&a;
pb=&b;
pa = pb - pa;
pb -= pa;
pa += pb;
printf("pa=%p\n",*pa);
printf("pb=%p\n",*pb);
}
途中までしたんですがエラーが出ます
間違って入るところを直してください。
おねがいします
――【注意点】――――――――――――――――――――――
・使用する言語(C/C++)や環境(CUI/GUIなど)は必ず書きましょう。
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その行とエラーの詳細を書きましょう。
エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>465 #include <iostream>
#include <cmath>
int main()
{
double a, b, c;
for (; ; )
{
std::cout << "a?:";
std::cin >> a;
if (a == 0.0) break;
std::cout << "b?:";
std::cin >> b;
std::cout << "c?:";
std::cin >> c;
if (b * b - 4 * a * c < 0)
{
std::cout << "方程式" << a << "x^2+(" << b << ")x+(" << c << ")=0は実解を持ちません" << std::endl;
continue;
}
std::cout << "方程式" << a << "x^2+(" << b << ")x+(" << c << ")=0の解" << std::endl
<< "x=" << (- b + std::sqrt(b * b - 4 * a * c)) / (2 * a) << std::endl
<< "x=" << (- b - std::sqrt(b * b - 4 * a * c)) / (2 * a) << std::endl;
}
}
474 :
466:04/12/06 00:54:26
>>467さん
すいません、指摘のとうり
同じトコにファイル置いてないだけでした。
ご迷惑をおかけしましたm(__)m
>>469 >pa = pb - pa;
>pb -= pa;
>pa += pb;
これはダメ。pbもpaもポインタだから「pb - pa」の型はsize_tだから。
普通の整数と違ってそういう足し算引き算でポインタ交換するのは面倒くさい。
>>302-304 どうもありがとうございます。
参考にさせていただきました。
#include <iostream.h>#include<cstdlib>
#include<iomanip>#include<fstream>
#include <stdlib.h>#include<string>
using namespace std;
#define Sales_counter 45
struct Sales_struct
{//Begin Sales_struct
char sale_id[12],item_id[4],sale_date[12],customer_id[6];
};//End Sales_struct
void ReportMenu();
void SalesByOrder(Sales_struct [], int);
int main()
{//Begin Main()
ReportMenu();system("PAUSE");return 0;
}//End Main()
void ReportMenu()
{//Begin ReportMenu()
int action,
Sales_Counter;
Customer_struct Customer;
Sales_struct Sales[Sales_counter];
//Ask user to Enter the action
cout<<"\n\n\nREPORT MENU:"<<endl;
cout<<"\n2.Sales by Order Number "
<<"\n\nEnter the number to proceed your action" <<endl;
cin >>action;
//go to function SlaesByOrder()
if(action==2)
SalesByOrder(Sales, Sales_counter);
}//End Report_Menu()
void SalesByOrder(Sales_struct Sales[], int size)
{//Begin SalesByOrder()
cout<<"\nThis is the Sales by order menu : " ;
fstream data("a:\\PROJECT\\Sales.txt", ios::in);
if(data.fail())
{cout <<"\nNo file" <<endl;
system("PAUSE");}
data.getline( (char *) &Sales[Sales_counter].sale_id, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].item_id, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].sale_date, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].customer_id, sizeof(Sales_struct));
while(!data.eof())
{//Begin while Loop
data.getline( (char *) &Sales[Sales_counter].sale_id, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].item_id, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].sale_date, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].customer_id, sizeof(Sales_struct));
cout << "\nDEBUG! : " << Sales[Sales_counter].sale_id
<< Sales[Sales_counter].item_id
<< Sales[Sales_counter].sale_date
<< Sales[Sales_counter].customer_id;
}//End while Loop
char BackMenu ='q';
cout <<"enter Q to back to REPORT MENU" <<endl;
cin >> BackMenu;
if((BackMenu=='q')||(BackMenu=='Q'))
ReportMenu();
}//End SalesByOrder()
Sales.txtの中身
Sale_ID, Item_id, Sale_Date, Customer_id,
2004090001, p1, 09/01/2004, 0000
2004092002, p2, 09/01/2004, 0000
2004090003, p1, 09/01/2004, 0001
2004090004, p3, 09/01/2004, 0000
2004090005, p2, 09/01/2004, 0000
2004090006, s1, 09/01/2004, 0001
2004090007, p2, 09/01/2004, 0000
2004100001, p1, 10/01/2004, 0001
480 :
285 DevC++:04/12/06 03:16:50
Sales.txtをSales[Sales_counter]に読み込むまではなんとかなりました。
次はSales_ID順にその日のデータを表示しなくてはなりません。
Sale_ID, Item_id, Sale_Date, Customer_id,←Customer_idの後の「,」は間違いです。本来はありません。
char Date[12];
cout<<"Enter the date mm/dd/yyyy"<<endl;
cin>>Date;
として、その入力された日付分のデータを表示したいのですがどうしたらいいでしょ?
while(!data.eof())
{//Begin while Loop
if(Date=Sales[Sales_counter].sale_date)
{
data.getline( (char *) &Sales[Sales_counter].sale_id, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].item_id, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].sale_date, sizeof(Sales_struct), ',');
data.getline( (char *) &Sales[Sales_counter].customer_id, sizeof(Sales_struct));
}これだと156 void value not ignored as it ought to be というエラーメッセージがでました。
}//End Whileloop
481 :
285 DevC++:04/12/06 03:23:01
if(Date=&Sales[Sales_counter].sale_date)ですね。
これで出るエラーは 156 incompatible types in assignment of `char (*)[12]' to `char[12]'です。
C言語でジグザグスキャンを行うには
どのようにしたらよいのでしょうか?
教えてくださいm(__)m
>>483 JPEGのとか対象が小さいならテーブル使うのがいい
>m(__)m
↑これを使われると不快感たっぷりになるのはなぜだろう
ハゲドー
C言語で
キーボードから数値を入力して、それが偶数の時のみ入力した数値を足し算する。
合計が50になるまで続け、50になったら合計値を出力するプログラムを作ろうとしているのですが、
まだまだ良く理解出来ていないせいで、完成に至りません。
どこもかしこも間違っていると思いますが、添削お願いします。
#include<stdio.h>
main(){
int a,sum;
sum=0;
printf("input number >>\n");
while(sum<=50)
{scanf("&d",&a);
if (a%2==0)
{sum=sum+a;
printf("input again");}
else {printf("input again");}
printf("sum=%d\n",sum);
}
>>487 致命的にまちがってるのは
scanf("&d",&a); じゃなくてscanf("%d",&a);
あと、最後にカッコが足りない。
>>487 #include <stdlib.h>
#include <stdio.h>
main()
{
int sum;
sum = 0;
puts("input number >>");
while (sum <= 50)
{
char buf[64];
int n;
fgets(buf, sizeof buf, stdin);
n = atoi(buf);
if (n % 2 == 0)
{
sum += n;
}
puts("input again");
}
printf("sum = %d\n", sum);
}
whileの判定式が間違ってるな
それから非数が入力された場合のフローが激しくキモい
#inclide <stdio.h>
int main(void)
{
short a[]={10,11,12,13};
short *b;
int i;
b=a;
for(i=0;i<4+i++){
printf("a[%d]=%d ",i,a[i]);
printf("&a[%d]=%p ",i,&a[i]);
printf("a+%d=%p ",i,b);
printf("*(a+%d)=%d\n",i,*b);
b++;
}}
このプログラムの配列とポインタ変数をlong型に変更してください。
おねがいします。
>>491 shortをlongにして、a[i]と*bを表示するprintf()内の書式を%dから%ldに替える。
iとiを表示する%dと%pはそのまま。
使用する言語:C
【問題文】
五角形の面積をヘロンの公式を用いて求めるプログラムを作成しなさい。
繰り返し処理を用いて複数回連続処理ででるようにすること。終了条件は自由。
【ヘロンの公式】
面積 = bh/2 又は
ヘロンの公式
面積 =√( S (S-a) (S-b) (S-c) )
ここで S=(a+b+c)/2 とする
● 鈍角三角形でも、同じ
サッパリ分からず困り果てています。どうかよろしくお願いします。
>>494 五角形?三角形じゃないの?
それから辺の長さを入力させるのか?それとも頂点の座標を入力するのか?
はっきりさせないと。
>>495さん
本当にすみません。ヘロンの公式は使用しなくても良いです。。
ヘロンの公式って三角形の面積を求める公式ですよね。。(^^;
申し訳ありません。
辺の長さを入力させたいと思います。
>>481 おまいは比較したいときに代入してどうすると言うのだ。
コンパイラのエラーくらいきちんと読め。
それから文字列の比較は、C++らしくstd::stringに格納して比較演算子で比較するか、
C流にstrcmp()を使うかだ。
おまいの課題の場合は、日付けを数値化しておいて数値として比較してもいいかも知れん。
はい。「辺の長さを入力させて五角形の面積を求めるプログラム」でお願いします^^;
本当に細かいご指導までありがとうございます。
>>500 ありがとうございます!動かす事ができました。
問題文の中の
>繰り返し処理を用いて複数回連続処理ででるようにすること
というのが自分はよく分からないのですが、
1辺の値を変動させるという事なのでしょうか。。
見事に苛めに誘導されているなぁ。
辺の長さだけでは五角形の面積は一意に決まらないのに。
元がヘロンの公式だから、>500でFAだろうけど。
>>501 ごめん
オレわからん('A`)
他の人よろー
ぷっ、2秒差w
>>501 >500のmain()の先頭で、直接代入しているのを止めて、
ループの先頭で入力するようにすればいいと思われ。
但し、5辺ではなくて5辺+対角線2本であることに注意。
>>504 ありがとうございます。一応頭では分かりました。
しかしどう書けば良いのかわかりません^^;
度々申し訳ないのですが、できればその処理をソースで書いていただけないでしょうか。。
(; ・`д・´) !? (`・д´・ (`・д´・ ;) ナ,ナンダッテ−!
>>398 むかーしつくったのがあるよ
ほしけりゃさらすけど需要ないかな?
>>505 あとは適当に改造して
int main()
{
double a, b, c, d, e, f, g;
double s1,s2,s3,s;
int ans;
while(1){
printf("input a:"); scanf("%lf", &a);
printf("input b:"); scanf("%lf", &b);
printf("input c:"); scanf("%lf", &c);
printf("input d:"); scanf("%lf", &d);
printf("input e:"); scanf("%lf", &e);
printf("input f:"); scanf("%lf", &f);
printf("input g:"); scanf("%lf", &g);
s1=area(a,b,c);
s2=area(b,d,e);
s3=area(e,f,g);
s=s1+s2+s3;
printf("五角形の面積は%10.2f\n",s);
printf("続けますか?(yes = 0 / no = 1):");
scanf("%d", &ans);
if (ans == 1) break;
putchar('\n');
}
return 0;
}
これって真面目にやると奥が深いねぇ。
長さが不適切だとsqrt()でエラーになるとか、
通常、対角線が得られていることは少ないだろうから寧ろ座標を入れた方がいいとか、
どっちみちヘロンの公式を単純に利用したんじゃ凹五角形に対応できないとか…
それにしても、bとeを対角線にしているってのもわかりにくいね。
a
_ f
c|/|>
 ̄ g
d
こんな感じか。
511 :
デフォルトの名無しさん:04/12/06 17:14:01
#include <cassert>
#include <iostream>
using namespace std;
class Set{
public:
Set() : size(0) {} // Default constructor.
Set(int data0[], int size0); // Initializing constructor.
bool has( int ) const; // membership checker
void join( int ); // membership maker -- union with one more int.
void assign( const Set& ); // assignment
friend Set setIntersect(const Set&, const Set&);
friend Set setUnion(const Set&, const Set&);
void get( istream& ); // stream input
void put( ostream& ) const; // stream output
private:
static const int MAX_SIZE = 20;
int data[ MAX_SIZE ];
int size;
};
512 :
デフォルトの名無しさん:04/12/06 17:15:08
bool Set::has( int value ) const {
bool answer = false;
for (int i=0; i< size && !answer; ++i)
if (data[i] == value )
answer = true;
return answer;
}
void Set::join( int value ) { // Corrected 10:15am 2/20/03
if ( size < MAX_SIZE ){
if ( !has(value) )
data[size++] = value ;
}
else
cerr << "Error in Set::join(): "
<< "storage size limit exceeded.\n";
}
void Set::assign( const Set& rhs ){ // assignment
size = rhs.size;
for (int i = 0; i < size; ++i)
data[i] = rhs.data[i];
}
513 :
デフォルトの名無しさん:04/12/06 17:15:35
void Set::get( istream& is ){
is >> size;
if ( size > 0 && size <= MAX_SIZE ){
for (int i = 0; i < size; ++i)
is >> data[i];
}
else
cerr << "Set::get() input error: set size out of range.\n";
}
void Set::put( ostream& os ) const { // Note: not symmetric w.r.t. get().
for (int i = 0; i < size; ++i)
os << data[i] << " ";
}
Set setIntersect(const Set& A, const Set& B){
// Quadratic-time solution for unsorted sets
Set C;
for (int i = 0; i < A.size; ++i)
if (B.has( A.data[i] ))
C.join( A.data[i] );
return C;
}
514 :
デフォルトの名無しさん:04/12/06 17:16:12
void menu(){
cout << "Enter \n"
<< " E to ENTER set A or set B by keyboard input \n"
<< " V to VIEW all sets \n"
<< " R to REPLACE a set \n"
<< " I to find the INTERSECTION of A and B \n"
<< " U to find the UNION of A and B \n"
<< " Q to QUIT \n" << endl;
}
515 :
デフォルトの名無しさん:04/12/06 17:16:35
void prompt() { cout << "\nEVRIUQ > "; }
int main(){
Set A,B,C;
menu();
char ch;
do{
prompt();
cin >> ch;
switch (ch){
case 'e': case 'E': {
cout << "A or B? ";
cin >> ch;
if (ch == 'A') A.get(cin);
else if (ch == 'B') B.get(cin);
break;
}
case 'v': case 'V':
cout << " A = "; A.put(cout); cout << endl;
cout << " B = "; B.put(cout); cout << endl;
cout << " C = "; C.put(cout); cout << endl;
case 'i': case 'I':
C.assign( setIntersect(A, B) );
}
} while (ch != 'q' && ch != 'Q' );
return 0;
}
どなたか助けて下さい
問一 (Cで)
キーボードから入力した整数型の配列とその配列の要素数を引数として取り、最大の要素に対応する添え字を
返す関数及びプログラムを作成せよ。ただし、最大の要素が複数ある場合には、一番小さい値の添え字を、
又、この関数の配列としの要素数として1未満の数が渡された場合には、-1を返すようにせよ。
例1 例2
1 4
3 2
5 3
2 4
結果=2 結果=1
問二
問一で作られたプログラムの考え方(アルゴリズム、方針)を説明せよ。
問二は板違いかもしれないので強くは要求しません。
よろしくお願いします。
私達は弱くても要求されません
518 :
デフォルトの名無しさん:04/12/06 17:26:49
setUnion(...) functionをthe fixed-length-array versionで作れってことなんだけど、
クラスって難しい。。。
助けてください。
要求されたくありません
答えてくださった皆様ありがとうございました!
無事に解決しましたー。
これからはこのスレで答える側になれるようがんばりたいと思います。
本当にありがとうございました。
>>522 当分それは無理そうだから、いらん事は書かなくていいよ。
>>516 # include <limits.h>
# include <stdio.h>
# include <stdlib.h>
int min_index_of_max(int array[], int size) {
int max = INT_MIN;
int ret;
int i;
if(size < 1) return -1;
for(i = 0; i < size; i++)
if(array[i] > max) {
max = array[i];
ret = i;
}
return ret;
}
int main(void) {
int size = 0;
int capacity = 10;
int *data = (int *)malloc(sizeof(int) * capacity);
int state;
for(state = scanf("%d", data); state != -1 && state != 0; state = scanf("%d", data + size)) {
size++;
if(size == capacity) {
capacity *= 2;
data = (int *)realloc(data, sizeof(int) * capacity);
}
}
printf("\n結果:%d\n", min_index_of_max(data, size));
free(data);
return 0;
}
C宿題とJava宿題比べるとC宿題スレはなんでこんなにレベルが低いのですか?
>>516 こんなのでいいのかな。もし間違ってたらゴメン。(例2の結果が正解がよくわからないけど。)
#include <stdio.h>
int func(const int x[], int num){
int i, temp, ans = 0;
temp = x[0];
if (num < 1) return -1;
for (i = 1; i < num - 1; i++){
if (temp < x[i]){
ans = i;
}
}
return ans;
}
int main(){
int i, ans;
int array[4];
for (i = 0; i < 4; i++){
scanf("%d", &array[i]);
}
/* 第2引数(要素数)を0にした場合、-1が返ってくる */
ans = func(array, 4);
printf("結果=%d\n", ans);
return 0;
}
被ってしまった
526は無かった事に
俺はとてもこのスレで答える実力はないが、無理してデタラメな解答を
書いて、出題者を困らせてみようと思う。皆さんよろしく。
(display "俺はとてもこのスレで答える実力はないが、無理してデタラメな解答を書いて、出題者を困らせてみようと思う。皆さんよろしく。")
532 :
511-515,518:04/12/06 19:50:24
今、必死こいてやってんだけど、・・・。
誰か助けてちょ。m(_ _)m
LisperかSchemerか知らんがどっか行け
<algorithm>のstd::set_union()を使うか、そのソースを参考にしなされ。
ハッシュ法を作成しています。
1000から2000個程のデータをハッシュ表に格納して衝突回数を調査するという課題を行っているのですが、
データ総数によってエラーが出てしまい、どうしようもなく困っています。
データが100程度ならなんとか、オペランドエラーが出なくなりますが、
総数を多くすると、エラーが出現します。
下にプログラムを貼り付けますので、良くない所をどんどん指摘、御教授
下さい。宜しくお願い致します。
エラー画面:行番号134:初期値エラー
行番号136:'!='の演算項が不当
行番号70:'='の左辺値オペランドが不当
ハッシュ表に格納するデータは[数字 文字列]がランダムに格納されているもので、データ総数は1000程度です。
環境はWindows Me、Ultra-C Pro2を使用しています。
データ例:
978 rejoice
743 duplicate
205 lantern
254 shed
631 chop
93 livestock
918 network
380 milestone
239 advocate
212 visibility
88 label
489 sociobiology
251 cram
932 synchronize
187 interconnect
<pre>/* ハッシュ法 */
/* ハッシュ関数:除算法(division method) */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define HashSize 150 /*ハッシュ表サイズ*/
#define NameSize 20
#define TableSize 150
/*--ハッシュ表に格納するデータの構造体--*/
typedef struct cell{
int number;
char name[NameSize];
struct cell *next;
} Data;
Data *hashtable[HashSize]; /*ハッシュ表*/
FILE *fp;
void MakeHashTable(void);
void Chaining(Data *, unsigned int);
unsigned int Hash(char *);
void PrintHash(void);
void PrintHashBunsan(void);
void Free(void);
int main(void)
{
MakeHashTable();
PrintHash();
PrintHashBunsan();
Free();
fclose(fp);
return(0);
}
void MakeHashTable()
{
Data *temp;
int i;
for(i=0; i<HashSize; i++)
hashtable[i]=NULL;
if((fp=fopen("word.txt", "r"))==NULL){
printf("エラー\n");
exit(1);
}
for(;;){
temp=(Data *)malloc(sizeof(Data));
if(fscanf(fp, "%d", &temp->number)!=EOF){
fscanf(fp, "%s", temp->name);
temp->next=NULL;
Chaining(temp, Hash(temp->name));
free(temp);
}
else{
free(temp);
break;
}
}
}
void Chaining(Data *temp, unsigned int f)
{
Data *s;
if(hashtable[f]==NULL){
hashtable[f]=(Data *)malloc(sizeof(Data));
*hashtable[f]=*temp;
}
else{
s=hashtable[f];
while(s->next)
s=s->next;
s->next=(Data *)malloc(sizeof(Data));
*s->next=*temp;
s->next->next=NULL;
}
}
/*--ハッシュ関数:除算法(division method)--*/
unsigned int Hash(char *buf)
{
unsigned int value;
for(value=0; *buf!='\0'; buf++)
value=*buf+value*11;
return value%HashSize; /*valueをHashSizeで割った剰余(valueとHashSizeは整数でなければならない)*/
}
void Chaining(Data *temp, unsigned int f)
{
Data *s;
if(hashtable[f]==NULL){
hashtable[f]=(Data *)malloc(sizeof(Data));
*hashtable[f]=*temp;
}
else{
s=hashtable[f];
while(s->next)
s=s->next;
s->next=(Data *)malloc(sizeof(Data));
*s->next=*temp;
s->next->next=NULL;
}
}
/*--ハッシュ関数:除算法(division method)--*/
unsigned int Hash(char *buf)
{
unsigned int value;
for(value=0; *buf!='\0'; buf++)
value=*buf+value*11;
return value%HashSize; /*valueをHashSizeで割った剰余(valueとHashSizeは整数でなければならない)*/
}
/*--ハッシュ表中の全データを表示--*/
void PrintHash(void)
{
Data *s;
int i;
for(i=0; i<HashSize; i++){
printf("[%d]\t", i);
s=hashtable[i];
while(s){
printf("%4d %-16s\t -> ", s->number, s->name);
s=s->next;
}
printf("(NULL)\n");
}
}
/*--ハッシュ表のクリーンアップ--*/
void Free(void)
{
int i;
Data *s, *t;
for(i=0; i<HashSize; i++){
s=hashtable[i];
while(s){
t=s->next;
free(s);
s=t;
}
}
}
/*--ハッシュ表中の全データを表示--*/
void PrintHash(void)
{
Data *s;
int i;
for(i=0; i<HashSize; i++){
printf("[%d]\t", i);
s=hashtable[i];
while(s){
printf("%4d %-16s\t -> ", s->number, s->name);
s=s->next;
}
printf("(NULL)\n");
}
}
void PrintHashBunsan(void)
{
int i, total=0;
int table[TableSize];
for(i=0; i<TableSize; i++)
table[i]=0;
for(i=0; i<HashSize; i++){
Data *ptr=hashtable[i];
int n=0;
if(*ptr!=NULL){
for(; *ptr!=NULL; *ptr=*ptr->next)
n++;
}
total+=n;
if(n<TableSize){
table[n]++;
}
else{
fprintf(stderr, "table size error%d\n", n);
}
}
for(i=0; i<TableSize; i++){
if(!(i%8))
putchar('\n');
printf("%3d:%3d", i, table[i]);
}
printf("\n 合計 %d 個\n", total);
}
</pre>
546 :
デフォルトの名無しさん:04/12/06 21:37:45
Cでこの課題のプログラム作ってくださいm(__)m
英語の文章に出現する単語の中で、文字数が最も多い単語を出力して終了するプログラムを作成せよ。
入力データには英文字、スペースのみが含まれているものとし、単語とはスペースで区切られた連続する英文字の列とする。
文章の文字数は80文字以下で、一つの単語の文字数は32文字以下とする。
最長の文字数を持つ単語は文中にただ一つだけ存在するものとする。
以上です。至らないところがあったら、申し訳ありません。
>>547 貼ったのはご苦労だが
>>372のアップローダも使え。
すぐ消えちまうが、ファイル全体を貼れるはず。
どれがエラー行かわかんねーよ。
>>524 >>526 図々しい問題にも関わらず答えて頂いたおかげで、無事課題を終わらせる事が出来ました。
物凄く助かりました。本当にありがとうございました。
ハッシュ法プログラムをアップロードしました。
改行が出来なくてすいません
ごめんなさい。
ちゃんと改行できたやつを、アップロードしました。
554 :
デフォルトの名無しさん:04/12/06 22:18:17
助けてください。
OSはUNIXでc言語でお願いします。期日は早めでお願いします。
1.c言語を用いてスロットマシーンをつくってください。
2.構造体利用を用いたプログラムをつくって下さい。
以上の二つです。
>>553 CodeGuardかけたら実行時エラー出るぞ。fscanf()の使い方がおかしいらしい。
word.txtは
>>536のをそのまま使った。
Error 00001. 0x820000 (スレッド 0x0C50):
Function failure:
関数呼び出し:
fscanf(0x004108EC, 0x004100B7 ["%d"], ...)=0x0 [0]
呼び出し履歴:
0x00401318(=hash1.exe:0x01:000318) hash1.c#51
0x0040123D(=hash1.exe:0x01:00023D) hash1.c#31
0x0040D14A(=hash1.exe:0x01:00C14A)
------------------------------------------
Error 00002. 0x100400 (スレッド 0x0C50):
不正なメモリの アクセス : アドレス 0x00000000 から 128
バイトを参照しました。.
呼び出し履歴:
0x00401719(=hash1.exe:0x01:000719) hash1.c#132
0x00401247(=hash1.exe:0x01:000247) hash1.c#33
0x0040D14A(=hash1.exe:0x01:00C14A)
------------------------------------------
Error 00003. 0x400000 (スレッド 0x0C50):
Exception 0xC0000005: Access violation at 0x0.
呼び出し履歴:
0x0040172F(=hash1.exe:0x01:00072F) hash1.c#132
0x00401247(=hash1.exe:0x01:000247) hash1.c#33
0x0040D14A(=hash1.exe:0x01:00C14A)
------------------------------------------
>>554 >期日は早めでお願いします。
うざwww
いや、fscanf()が失敗しているのは正常なのか。
何だろこの不正なメモリのアクセスってのは。
多分malloc()で確保してないメモリアドレスでもアクセスしてるんじゃない?
559 :
デフォルトの名無しさん:04/12/06 22:31:40
助けてください。
OSはUNIXでc言語でお願いします。期日は早めでお願いします。
1.c言語を用いてスロットマシーンをつくってください。
2.構造体利用を用いたプログラムをつくって下さい。
以上の二つです。
助けてください。
OSはUNIXでc言語でお願いします。期日は早めでお願いします。
1.c言語を用いてスロットマシーンをつくってください。
2.構造体利用を用いたプログラムをつくって下さい。
以上の二つです。
いい加減にお前ら答え書かんかい!ヴォケ。
int main()
{
struct baka{
int shit;
} foolish;
foolish.shit = 0;
return foolish.sit;
}
>>561 ああ?そんな答えで俺が満足するとでも思ってるんかい?
この季節になると年度末の課題をぎりぎりになって提出しようとする
アフォが増えて困る。
なんか他スレでも同じの見ちゃったよ
課題を作成する途中で詰まったので先達や識者の知恵をお借りしようかと思います。
※ C++
※ 構造体使用不可とのこと
学生3人の国語・英語・数学のそれぞれのテストの点数を読み込んで
1:学生個人の平均点
2:科目の平均点
3:評価(平均80以上:A 60以上80未満:B 60未満:C)
を計算する。
そのうえで、以下のように表として表示せよ。
氏名 国語 英語 数学 平均点 評価
-------------------------------------------------
-------------------------------------------------
科目平均
といった問題です。
力技での表示はできたのですが、自分で関数を設定したり多次元配列などを使ったりして
ソースをよりスマートにするにはどうしたらよいでしょうか?
#defineで最初に学生の人数や科目数を設定し、汎用性をもたせるように、とも言われました。
お願いします。
課題を作成する途中で詰まったので先達や識者の知恵をお借りしようかと思います。
※ C++
※ 構造体使用不可とのこと
学生3人の国語・英語・数学のそれぞれのテストの点数を読み込んで
1:学生個人の平均点
2:科目の平均点
3:評価(平均80以上:A 60以上80未満:B 60未満:C)
を計算する。
そのうえで、以下のように表として表示せよ。
氏名 国語 英語 数学 平均点 評価
-------------------------------------------------
-------------------------------------------------
科目平均
といった問題です。
力技での表示はできたのですが、自分で関数を設定したり多次元配列などを使ったりして
ソースをよりスマートにするにはどうしたらよいでしょうか?
#defineで最初に学生の人数や科目数を設定し、汎用性をもたせるように、とも言われました。
お願いします。
課題を作成する途中で詰まったので先達や識者の知恵をお借りしようかと思います。
※ C++
※ 構造体使用不可とのこと
学生3人の国語・英語・数学のそれぞれのテストの点数を読み込んで
1:学生個人の平均点
2:科目の平均点
3:評価(平均80以上:A 60以上80未満:B 60未満:C)
を計算する。
そのうえで、以下のように表として表示せよ。
氏名 国語 英語 数学 平均点 評価
-------------------------------------------------
-------------------------------------------------
科目平均
といった問題です。
力技での表示はできたのですが、自分で関数を設定したり多次元配列などを使ったりして
ソースをよりスマートにするにはどうしたらよいでしょうか?
#defineで最初に学生の人数や科目数を設定し、汎用性をもたせるように、とも言われました。
お願いします。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct UNCO{
int money;
int wwwww;
}kuso;
void xxx(void){
puts("キタ━━━━(゚∀゚)━━━━!!"); getchar();
puts(" ∧_∧ ミ ギャーッハッハッハッ!");
puts(" o/⌒(. ;´∀`)つ");
puts(" と_)__つノ ☆ バンバン "); getchar();
}
569 :
デフォルトの名無しさん:04/12/06 22:46:56
助けてください。
OSはUNIXでc言語でお願いします。期日は早めでお願いします。
1.c言語を用いてスロットマシーンをつくってください。
2.構造体利用を用いたプログラムをつくって下さい。
以上の二つです。
main(){
int a,b,c;
kuso.money = 100; kuso.wwwww = 0;
srand(time(0));
while(kuso.money > 0){
kuso.money -= 10;
printf("money:%d (・∀・):%d\n", kuso.money, kuso.wwwww);
if (rand() % 10 == 0){
a = 7; b = 7; c = 7;
} else {
a = rand()%9+1; b = rand()%9+1; c = rand()%9+1;
}
getchar(); printf("1つ目は〜?www→ %d ",a);
getchar(); printf("2つ目は〜?www→ %d ",b);
if (a == b){
printf("あたるかもよ〜すごいねえwwww");
}
getchar(); printf("3つ目は〜?www→ %d\n",c);
if (a == b && b == c){
xxx();
kuso.money += 100; kuso.wwwww++;
} else {
puts("うんこ!!!!!\n\n");
}
}
puts("へたくそやめれ");
return 0;
}
課題を作成する途中で詰まったので先達や識者の知恵をお借りしようかと思います。
※ C++
※ 構造体使用不可とのこと
学生3人の国語・英語・数学のそれぞれのテストの点数を読み込んで
1:学生個人の平均点
2:科目の平均点
3:評価(平均80以上:A 60以上80未満:B 60未満:C)
を計算する。
そのうえで、以下のように表として表示せよ。
氏名 国語 英語 数学 平均点 評価
-------------------------------------------------
-------------------------------------------------
科目平均
といった問題です。
力技での表示はできたのですが、自分で関数を設定したり多次元配列などを使ったりして
ソースをよりスマートにするにはどうしたらよいでしょうか?
#defineで最初に学生の人数や科目数を設定し、汎用性をもたせるように、とも言われました。
お願いします。
多重してしまいました。申し訳ない
課題を作成する途中で詰まったので先達や識者の知恵をお借りしようかと思います。
※ C++
※ 構造体使用不可とのこと
学生3人の国語・英語・数学のそれぞれのテストの点数を読み込んで
1:学生個人の平均点
2:科目の平均点
3:評価(平均80以上:A 60以上80未満:B 60未満:C)
を計算する。
そのうえで、以下のように表として表示せよ。
氏名 国語 英語 数学 平均点 評価
-------------------------------------------------
-------------------------------------------------
科目平均
といった問題です。
力技での表示はできたのですが、自分で関数を設定したり多次元配列などを使ったりして
ソースをよりスマートにするにはどうしたらよいでしょうか?
#defineで最初に学生の人数や科目数を設定し、汎用性をもたせるように、とも言われました。
お願いします。
575 :
デフォルトの名無しさん:04/12/06 22:52:45
オシエテクン養成してるあんたらの方がよっぽど鬱陶しいんだよ
>>575 そう思うならこのスレ読まなきゃいいのに( ´゚д゚`)
577 :
デフォルトの名無しさん:04/12/07 00:01:59
頭文字を読み込み、与えられた名前の中からその頭文字を含む名前を表示せよ。
なければそのむね表示せよ。
という問題で、下記のようにプログラムを書いたところ、Eを入力すると、
Eluza Eandy Emy Enn
と表示されてしまいました・・・
考えても解りませんでした、教えてくださいm(- -)m
#include <stdio.h>
int main(void)
{
static char *name[]={"Eluza","Candy","Emy","Ann"};
int i,j;
printf("input initial\n");
j=getchar();
for (i=0;i<4;i++)
if(name[i][0]=j)
printf("%s\n",name[i]);
else
printf("no name\n");
}
>>578 凡ミスでした…THX
しかしこんどは
Eluza
no name
Emy
no name
と表示されてしまいました
分岐の仕方がわかりません・・・
>>370氏
ハイパーデンジャラス・レインボー亀レスですが、助かりました…
お礼を言うのが遅くなって申し訳ありませんでした。
>>579 #include <stdio.h>
int main(void)
{
static char *name[]={"Eluza", "Candy", "Emy", "Ann"};
int i, j, flag = 0;
printf("input initial\n");
j = getchar();
for (i = 0; i < 4; i++)
if (name[i][0] == j) {
printf("%s\n", name[i]);
flag = 1;
}
if (flag == 0)
printf("no name\n");
return 0;
}
{
sw=0;
if(name[i][0]==j)
{
printf("%s\n",name[i]);
sw=1;
}
}
if(sw==0)
...
2分半も遅かった
>自分で関数を設定したり多次元配列などを使ったりしてソースをよりスマートにするにはどうしたらよいでしょうか?
一般的には「リファクタリング」
>#defineで最初に学生の人数や科目数を設定し、汎用性をもたせる
汎用性、か?(保守性でねーの?)
586 :
デフォルトの名無しさん:04/12/07 04:45:42
istream& getline(istream& ins, string& strVar);
っていう関数が、いまいち良くわかんないんですけど、
istreamをデータタイプみたいに、書いて、このinsって何?
587 :
ポインタ初心者:04/12/07 12:45:56
#include <stdio.h>
void main(void)
{
int a[10]={38, 52, 16, 45, 73,
97, 63, 25, 81, 68};/* 配列変数a の型宣言*/
void disp_data(int, int*); /*関数disp_data()の型宣言*/
disp_data(10, a);
}
/* 配列データを画面に表示する関数*/
void disp_data(int len,int *c)
{
int i;
for(i=0; i<len; i++)
printf("c+%d=%d *(c+%d)=%d c[%d]=%d\n",i,c+i,i,*(c+i),i,c[i]);
}
このプログラムを実行し,どんな形で呼び出し側と関数側の間で配列データを
やり取りしているのかを説明してください!
呼び出し側 関数側
10 --> len(配列データの数)
a(先頭番地) --> c (ポインタ型変数)
となっているのでしょうか?説明して下さい!
>>586 insは仮引数名。
getline自体はこんな感じで使う。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
getline(cin, str);
cout << str << endl;
}
589 :
デフォルトの名無しさん:04/12/07 13:24:27
getline は分かるんだけど、このistreamをデータタイプのように使ってるのってどういうわけかなってわかんなくて。
590 :
デフォルトの名無しさん:04/12/07 13:34:18
ウィンドウを作成して、リサイズできるようにするには
どうしたらいいでしょうか?
マルチでアウト!
>>589 istreamはデータ型だ。insはistreamへの参照型となる。
>>589 もしかしたらstd::istreamではなくてstd::ifstreamかもしれんし、std::istringstream
かもしれん。
C言語で、ファイルから英文を読み込み単語とその数を表示するプログラムを作ります。
出力例
Output:Word [frequency]
in [1]
a [3]
program [1]
of [1]
.
.
.
.
End
お願いします。
>>594 かってに cygwin つかっててね
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Word { char* word; int count; struct Word* left, * right; };
struct Word* push_word(char* str, struct Word* node) {
int cond;
if (node == NULL) {
node = (struct Word*) malloc(sizeof(struct Word));
node->word = strdup(str); node->count = 1;
node->left = node->right = NULL;
}
else if ((cond = strcmp(str, node->word)) == 0) { (node->count)++; }
else if (cond < 0) { node->left = push_word(str, node->left); }
else { node->right = push_word(str, node->right); }
return node;
}
void print_all(struct Word* node) {
if (node) {
print_all(node->left);
printf("%s [%d]\n", node->word, node->count);
print_all(node->right);
}
}
int main(void) {
char buf[20]; struct Word* t = NULL; FILE* fp = fopen("hoge.txt", "r");
while (fscanf(fp, "%20s", buf) > 0) { t = push_word(buf, t); }
printf("Output:Word [frequency]\n"); print_all(t); printf("End\n");
return 0;
}
ひたすら1行で済ませようとする香具師だな
単なる嫌がらせか、これが
>>597のコーディングスタイルなのか…
>>598 (´・ω・`)ショボーン
改行大杉で投稿できなかったから...
そんなこと言わなくてもぉ
>>597 ひでえな。これを俺にコンパイルしろと?
>>600 > ひでえな。これを俺にコンパイルしろと?
コンパイラがコンパイルするんじゃ?
603 :
デフォルトの名無しさん:04/12/07 21:09:27
5個の数字を入力して平均値・最大値・最小値をそれぞれ表示するプログラムを作れ
>>603 #include <stdio.h>
#define SIZE 5
int
main(void)
{
double A[SIZE], min, max, sum = 0;
int i;
for (i = 0; i < SIZE; i++) { scanf("%lf", A + i); }
for (min = max = A[0], i = 0; i < SIZE; i++) {
sum += A[i];
if (min > A[i]) { min = A[i]; }
if (max < A[i]) { max = A[i]; }
}
printf("%lf\n%lf\n%lf\n", sum / SIZE, max, min);
return 0;
}
>>604 min,maxが間違っていると思うのは俺だけか?
早とちりスマソ
607 :
デフォルトの名無しさん:04/12/07 21:25:56
UNIX上で、”ディレクトリを再帰的に調べ、引数と同名のファイルを探し、
発見したファイルの以下の情報を表示
・絶対パス
・getcnd
・realpath
・iノード番号
・アクセス許可情報
・割り当てられたブロック数
・最終ファイル更新時刻
コマンド引数は、1:ファイル名、2:ディレクトリ名、
無指定の場合はカレントディレクトリ”
という、課題が与えられました、情報を表示するのはできたのですが、ファイル等を
調べるのがわかりません。
また、それをつかって情報を表示する方法にもいきづまってしましました。
どなたか、アドバイスをください。お願いします。
608 :
名無し募集中。。。:04/12/07 21:32:31
>>607 #include <stdio.h>
#include <stdlib.h>
int
main(void)
{
if (system("echo マルチしね") < 0) { fprintf(stderr, "マルチしね\n"); }
return 0;
}
609 :
デフォルトの名無しさん:04/12/07 21:32:35
すみません。誠に失礼でしたが、1つ情報を付け忘れました。
言語はC言語です。
610 :
デフォルトの名無しさん:04/12/07 21:32:53
3インデントがはやってるの?
>19
遅くなってすみま。
数理計画法のシンプレックス法を使うんじゃない?
613 :
デフォルトの名無しさん:04/12/07 21:50:37
お願いします。
・c++
・文字配列
・forではなくwhileを使用
・cout,cinを使用
の条件で
1、キーボードからアルファベットの文字列を入力し、
それが何文字か字数をカウントするプログラム。
例:キーボードからbookと入力したら4と表示させる。
2、キーボードから文字列を入力し、次に1字入力し、
その時が文字列の中にいくつあるかを求めるプログラム。
例:はじめにキーボードからbookと入力し、次にoと入力した場合、
oは2つなので2と表示させる。
お願いします。
614 :
デフォルトの名無しさん:04/12/07 21:55:16
>>604 8行目の
>{ scanf("%lf", A + i); }
は何を表しているのでしょうか?
>>613 1と2は別?
STL は使って良いの?
1はアルファベット以外の入力はあるの?ないの?考えなくて良いの?
>>614 A[i] と *(A + i)
は同じ
&A[i] と A + i
は同じ
>613
1.
string str;
cin >> str;
cout << str.length() << endl;
2.
string str;
char c;
cin >> str >> c;
cout << str.find(c)+1 << endl;
こんなんでいいか?
あっ
whileつかってねえ・・
> cout << str.find(c)+1 << endl;
( ゚д゚)ポカーン
string::size_typeはsize_tだから問題ないかと
621 :
デフォルトの名無しさん:04/12/07 22:22:53
y= 1(x>1) x(|x|≦1) -1(x<-1)
の値を-5≦x≦5の範囲で0.1刻みで計算し、結果をファイルに出力する
プログラムを書け。
Cでお願いします。
for文3つ使ってfopen fcloseをつかうってのは分かるのですが・・・
>>621 #include <stdio.h>
double
f(double x)
{
return ((x > 1) ? 1 : ((x < -1) ? -1 : x));
}
int
main(void)
{
double x;
FILE* fp = fopen("out.txt", "w");
for (x = -5.0; x <= 5.0; x += 0.1) { fprintf(fp, "%.1lf %.1lf\n", x, f(x)); }
fclose(fp);
return 0;
}
>>613 その1。cout,cinはちゃんと使用しているからな。
#include <iostream>
#include <cstddef>
using std::cout;
using std::cin;
int main()
{
char Buf[1024];
cin >> Buf;
std::size_t i = 0;
while (Buf[i])
i++;
cout << i << std::endl;
return 0;
}
>>623 YOU
using namespace std;
しちゃいなYO!
>>613 その2。条件は満たしているはずだ。
#include <iostream>
#include <cstddef>
using std::cout;
using std::cin;
int main()
{
char Buf[1024];
char ch;
cin >> Buf >> ch;
std::size_t i = 0, n = 0;
while (Buf[i])
if (Buf[i++] == ch)
n++
cout << n << std::endl;
return 0;
}
>>624 だって「cin, coutを使用」ってはっきり書いてあるじゃん。
627 :
デフォルトの名無しさん:04/12/07 23:16:28
-5.0 から 0.1 きざみで足してるのに 0.0 を通過してくれません
ヒロシです・・・
-5.0 から 0.1 きざみで足してるのに 0.0 を通過してくれません!
630 :
デフォルトの名無しさん:04/12/07 23:25:53
const int getHoge()
の
constって何の意味があるのでしょうか?
戻り値をconstにするよ、ってことなの?
>>630 getHoge() = 10;
↑こういうのを防止するため
実際のところ意味がない。int getHoge()に対してgetHoge() = 5;などと
しても意味がない。意味がないから出来なくしてしまおうと思えばconstを
付ければいい。だから「意味がない」と言う意味があるとも言えるかもしれない。
633 :
デフォルトの名無しさん:04/12/07 23:32:42
>>631 >>632 早速の解決方法ありがとうございます。
getHoge=10;
なんて、よっぽどのバカじゃないとやらないと思うなぁ・・・。
Meyers氏は「使えるところではconstを使え」と書いております
635 :
デフォルトの名無しさん:04/12/07 23:39:35
C言語です。
#define DADR0 (*((unsigned char*)0xfffff8))
#define DACR (*((unsigned char*)0xfffffa))
#define MSTPCRH (*((unsigned char*)0xffff86))
main()
{
MSTPCRH&=0x3b;
DACR=0xc0;
DADR0=0xff;
}
D/A変換器によるアナログ出力電圧を以下の画像のような周期波形を発生させるには、
上のソースをどのように変更すればいいのでしょうか?
http://up.isp.2ch.net/up/3e4ded303767.jpg
636 :
デフォルトの名無しさん:04/12/07 23:41:30
2chのあぷろだはいつも繋がらないからやめて
637 :
613:04/12/07 23:45:57
>>615 1と2は別?
STL は使って良いの?
1はアルファベット以外の入力はあるの?ないの?考えなくて良いの?
えっと1、2は別物で、STLは聞いたことないんで使えません。
あと入力はアルファベットのみです。
説明足らずですみません。
作ってくれた方々ありがとうございます。
これからコンパイル&実行してみます。
642 :
デフォルトの名無しさん:04/12/08 00:20:54
644 :
デフォルトの名無しさん:04/12/08 00:42:20
>>273 法○大学の計算機プログの問題だな
以前作った素数プログをFor文で繰り返させればOKだぜ
ただし、1以下の条件を忘れるなよ
下4桁ってとこまで乗せんなよw
こんばんは
どこで聞いてもswapっての入れられちゃうんです。
一度配列を使ってしまい込んだ数(マクロ使えると(・∀・)イイ!!)の大小を比較して
大きい順に並べたいです。そのときC言語でFor文とIF文のみを用いて何とかならないですか?
for(i=0;i<n;i++) {
printf(“x[%d]?:”i);
scanf(“%d”,&x[i]);
}
これ以下がわかりません
IF文のみでは数が大きくなるととても大変です。
何とか助けてください。よろしくお願いします
x[i]=y[i]
とか置き換えて
for(j=i;j>0;j--){
if(y[j]<y[j-1]){
とか考えてみたんですが、どういう関係になるのかわからず、
ソースを完成すらできませんでした。よろしくお願いします
swapのどこが悪い
授業で学習した範囲内でプログラムを書くということになっているので
まったく使用したことが無いswapを使うと便利かもしれないですがまずいんです
申し訳ありません
649 :
デフォルトの名無しさん:04/12/08 01:21:04
swapって文字を使わなければいいじゃん。
機能としては凄く単純で簡単な物なんだから。
#include <stdio.h>
int main(void){
int i, j, dat[5], tmp;
for (i = 0; i < 5; i++){
printf("整数を5つ入力してください。(%d つ目) : ", i+1);
scanf("%d", &dat[i]);
}
printf("入力された5つの数字は : ");
for (i = 0; i < 5; i++){
printf("%d ", dat[i]);
}
printf("\n ");
/* dat[0]〜dat[4] の内容を小さい順に並べ替える部分 */
printf("小さい順に並べ替えると : ");
for (i = 0; i < 5; i++){
printf("%d ", dat[i]);
}
printf("\n ");
return 0;
}
では・・・
こういう問題だったら・・・
どう答えますか?
swap に swap 以外の名前を付けて欲しくないな
652 :
デフォルトの名無しさん:04/12/08 01:28:56
>>650 別に問題変わって無いじゃん?
swapの本質ってのは単なるデータの交換だよ?
交換無しにソートするのは非効率になると思うよ。
653 :
デフォルトの名無しさん:04/12/08 01:29:59
>>651 使えないって言ってるんだからしょうがないんじゃん?
名前変えるか、関数化しないで書くかの2択でしょ。
swap関数をmainに展開すれば終わりの話じゃないか…
#include <stdio.h>
#include <stdlib.h>
static int sortNumsCB(const int* lhs, const int* rhs)
{
if (*lhs < *rhs) return -1;
if (*lhs > *rhs) return +1;
return 0;
}
int main(void)
{
int i, j, dat[5], tmp;
for (i = 0; i < 5; i++){
printf("整数を5つ入力してください。(%d つ目) : ", i+1);
scanf("%d", &dat[i]);
}
printf("入力された5つの数字は : ");
for (i = 0; i < 5; i++){
printf("%d ", dat[i]);
}
printf("\n ");
/* dat[0]〜dat[4] の内容を小さい順に並べ替える部分 */
qsort(dat, sizeof(dat) / sizeof(int), sizeof(int), sortNumsCB);
printf("小さい順に並べ替えると : ");
for (i = 0; i < 5; i++){
printf("%d ", dat[i]);
}
printf("\n ");
return 0;
}
_| ̄|○
説明まずいですかね・・・
658 :
デフォルトの名無しさん:04/12/08 01:40:36
ここに書いて、スレ更新して、読んで、また書いて・・・
こんな事してる時間があるならCの教科書でも読んで
自分で書いた方が自分のためにもなると思うんだがなぁ。
>>658 だからさーここはCやC++のスレを宿題で汚されないようにするための
スレであって、質問者のレベル向上のためじゃないんだってば
#include <stdio.h>
int main()
{
int i, j, tmp, buf[3];
for(i=0;i<3;i++){
for(j=i+1;j<3;j++){
if(buf[i] < buf[j]){
tmp = buf[i];
buf[i] = buf[j];
buf[j] = tmp;
}
}
}
for(i=0;i<3;i++)
printf("%d\n", buf[i]);
return 0;
}
tmp = buf[i];
buf[i] = buf[j];
buf[j] = tmp;
ここのところ解説してください・・・
661 :
デフォルトの名無しさん:04/12/08 01:46:23
実際には、ここの生徒が他のスレで暴れまわってるとしか思えない
機能してない隔離センターなんて、隔離対象を引き寄せてるだけ
>>660 buf[i]とbuf[j]の値を交換する
664 :
デフォルトの名無しさん:04/12/08 01:51:01
665 :
デフォルトの名無しさん:04/12/08 01:53:04
その通り。教えるから次々を虫が湧く
教えたら減るとでも言いたいのか?
669 :
デフォルトの名無しさん:04/12/08 01:58:41
>>667 一時的に増える時期ってのはありそうだよね。
授業単元でプログラミングが出た時とか。
でもそれを乗り切れば、また減ると思う。
sin関数みたいな感じになるんじゃないかな。
670 :
デフォルトの名無しさん:04/12/08 02:00:17
教えがり君の出方次第だな
必ず、我慢できずに教えまくる奴いるから
このスレの何が不満なんだ
てか素直に言うと、今までプログラム言語なんて全部自学でなんにも
困ったことないんで、このスレ自体が教えたがり君
どうもありがとうございました
交換ってところが少しの見込めませんが眺めてみて理解してみます
>>672 このスレ自体が教えたがり君なのが何?どうしたいんだ?
お前は何が言いたい?
675 :
デフォルトの名無しさん:04/12/08 02:09:12
>>674 オマエが馴れ合いあたりで宿題スレを運用しろよ
このスレ自体が教えたがり君
ってのが言いたいだけだろ?
日本語読めてんのか?
>>675 ではあんたがここの削除依頼を出し、通った後にそちらに立ててくれ
680 :
デフォルトの名無しさん:04/12/08 02:17:05
一から十まで全部言わなきゃわかんねーの?
このスレ自体が教えたがり君
↓
スレにむらがる虫常時湧く
↓
他のスレにも沸きまくり
↓
結局
>>659は達成されていない
主観もはいってるだろうけどな
とりあえず一から五ぐらいまで説明したぞ
どういうスレにしたいのさ?
そろそろム板にもIDが欲しいと思わん?
ム板といわず全板に付ければいいとは思うが板違いだな
686 :
デフォルトの名無しさん:04/12/08 04:02:53
データ点の個数が2の べき乗 の場合に FFT を行うプログラムの作成。
C言語。入出力配列以外に用いる配列の記憶容量が最小になるようにすること。
だそうです。あまり期待してませんがよろしくお願いします。
2時間かんがえた末の煽りか
興味アル方メールください
業務内容
サーバ・アプリケーションの設計・開発・運用・保守管理などの業務に取り組んでいただきます。
資 格
学歴不問25〜40歳位迄、下記項目中2項目以上の経験者が望ましい。
Java開発経験者(Tomcat等のJakarta Projectを利用した開発)
DB開発運用経験者(Oracle,PL/SQL,Pro*C,MySQL,PostgreSQLを利用した大規模DBの運用・開発経験者)
Linuxサーバの構築・運用経験者(bind,sendmail,qmail,ネットワーク一般、セキュリティ設定等)
システム開発プロジェクトマネージャー経験者
勤務地
東京都渋谷区
690 :
デフォルトの名無しさん:04/12/08 09:02:06
#typedef multimap<int ,string , less<int> > MMAP;
typedef MMAP::value_type Mvalue;
ostream& operator<<(ostream& os, const Mvalue& p){
os << p.second ;
return os;
}
main() {
MMAP m;
string a;
while(getline(cin,a)){
if( a.size()!=1)
m.insert(Mvalue(a.size(),a));
}
for(MMAP::iterator i=m.begin(),end=m.end(); i!=end; i++){
cout << *i << endl;
}
}
このプログラムの 入出力のしかた
データ構造について
整列の方法について
よろしくお願いします。
入出力の仕方:getline()で1行ずつ読む
データ構造:マルチマップ
整列の方法:挿入法
692 :
690:04/12/08 09:10:38
693 :
デフォルトの名無しさん:04/12/08 10:27:02
Dateっていうクラスがあって、
ostream& operator << (ostream& os, const Date& d){
os << d.month << d.day << d.year;
return 0;
}
この関数もあるわけなんだけど、このostreamをintとかvoidみたいに使っているのが
いまいち、よくわからないんです。
osっていうのが、ファイルだから、それを受け渡しするときに使うってこと?
でも、なんでosをreturnする必要あるんですか?
ファイルは、存在するわけだから、またメインなり、どこかで、開けばいいんじゃないんですか?
>なんでosをreturnする必要あるんですか?
return 0;
>>659 >だからさーここはCやC++のスレを宿題で汚されないようにするための
>スレであって、質問者のレベル向上のためじゃないんだってば
CやC++のスレがとてもまともとは思えんが
>>661 >機能してない隔離センターなんて、隔離対象を引き寄せてるだけ
それは機能しているって言わないか?
>>693 os << yesterday << today << tomorrow << ...
699 :
デフォルトの名無しさん:04/12/08 16:34:21
Visual C++
#include <stdio.h>/* 入出力を使うためのおまじない */
#include <string.h>/* 文字列を操作する関数を使うためのおまじない */
#include <stdlib.h>/* 乱数を使うためのおまじない */
#include <time.h>/* 時刻を使うためのおまじない */
void main()
{
char alphabets[100];/* アルファベット全体を入れる配列 */
char challenge[100];/* 打ち込む文字列 */
char input[100];/* 打ち込んだ文字列 */
int i;
/* 配列alphabetsにアルファベットを詰める */
strcpy(alphabets, "abcdefghijklmnopqrstuvwxyz\n");
/* 時刻を使って乱数作成 */
srand(time(NULL));
/* alphabetsからランダムに1文字ずつ取って、challengeに代入 */
for(i=0 ; i<5 ; i++){
challenge[i]=alphabets[rand()%strlen(alphabets)];
}
challenge[5]='\0';
printf("以下の文字列を入力して、リターンキーを押してください\n");
printf("%s\n", challenge);
scanf("%s", input);
700 :
デフォルトの名無しさん:04/12/08 16:35:01
/* challengeとinputがあっているか判定し、結果を表示 */
if(strcmp(challenge , input) == 0){
printf("2つの文字列は等しい\n");
}
else{
printf("2つの文字列はちがう\n");
}
}
上のタイピングのプログラムで
/* challengeとinputがあっているか判定し、結果を表示 */
の部分をポインタを用いた表現に書き直す
という宿題なんですがさっぱりわかりません。
お願いします。
701 :
デフォルトの名無しさん:04/12/08 16:54:32
702 :
名無し募集中。。。:04/12/08 16:55:18
>>699 こういうことなのかな?
#include <stdio.h>/* 入出力を使うためのおまじない */
#include <string.h>/* 文字列を操作する関数を使うためのおまじない */
#include <stdlib.h>/* 乱数を使うためのおまじない */
#include <time.h>/* 時刻を使うためのおまじない */
int sayu(char* sayumin, char* eririn)
{
for (; *sayumin == *eririn; sayumin++, eririn++) { if (*sayumin == '\0') { return 0; } }
return *sayumin - *eririn;
}
int main(void)
{
char alphabets[100];/* アルファベット全体を入れる配列 */
char challenge[100];/* 打ち込む文字列 */
char input[100];/* 打ち込んだ文字列 */
int i;
strcpy(alphabets, "abcdefghijklmnopqrstuvwxyz\n");
srand(time(NULL));
for (i = 0; i < 5; i++) { challenge[i]=alphabets[rand()%strlen(alphabets)]; }
challenge[5] = '\0';
printf("以下の文字列を入力して、リターンキーを押してください\n");
printf("%s\n", challenge);
scanf("%s", input);
if (sayu(challenge , input) == 0) { printf("2つの文字列は等しい\n"); }
else { printf("2つの文字列はちがう\n"); }
return 0;
}
>>666 おっちゃん前のソースUPローだみたいに、
レス形式のみやすーいCGIつかってくだちゃい
そんでもっておっちゃんとこをこのスレのソースうpろーだにしよーよー
質問ですunsorted list(ソートされないリスト)で
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┛
と配列が渡されたとき、「75」を挿入すると
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃75┃ ┃
┗━┻━┻━┻━┻━┻━┛
となるので正しいですか??
また、
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┛
から53を削除した場合、リストはどの様に並びますか?
よろしくおねがいしますm(_ _"m)
707 :
699:04/12/08 18:42:24
>>702 ポインタの導入に対する考え方
・challengeとinputはどちらも文字列の名前、すなわち、文字列の先頭のアドレスである。
-ただし、別のポインタにコピ−しておく。
・先頭から順'\0'(文字列の終端)に到達するまで、ポインタを一文字ずつ増やして比較する。
繰り返しの構造は
・「・・にと歌うするまで・・・する」の部分は、while文による繰り返し
・正しくなかったかをあらわす変数としてjudgeを宣言しておく。整数でよい
・while文の直前では
-それぞれ(challengeとinput)のポインタを先頭に合わせる
-judgeを「正しいのほうに初期化
・while文の本体は
-challengeの方のポインタがさす文字が'\0'になるまでの間に・・・
-1文字でも違いが現れたら、judgeを「正しくない」にセット
-それぞれのポインタを1ずつ進める
・challengeよりinputが長いとき
・while文を抜けたところで、もう1回だけ文字を比較すれば
challengeとinputが違うことがわかる
のヒントが出ていました。すみません。
あとreturnが入っていますが今まで習ったことないです。
> ・後になって問題につけたしをするのはやめましょう。
> 解いてもらっている方に失礼になってしまいます。
>>707 という事でこのスレでの追加分の解答は諦めて他に逝って下さい。
>>709 >
>>707 > という事でこのスレでの追加分の解答は諦めて他に逝って下さい。
>>659 >だからさーここはCやC++のスレを宿題で汚されないようにするための
>スレであって、質問者のレベル向上のためじゃないんだってば
/*
>>707 */
/* challengeとinputがあっているか判定し、結果を表示 */
{
#define Tadashii 1
#define Tadashikunai 0
int judge = Tadashii;
char * hintDashita = challenge;
char * yashiHaKuso = input;
while (*hintDashita != '\0' && *yashiHaKuso != '\0') {
if (*hintDashita != *yashiHaKuso) {
judge = Tadashikunai;
break;
}
++hintDashita;
++yashiHaKuso;
}
if (*hintDashita != *yashiHaKuso) {
judge = Tadashikunai;
}
printf("2つの文字列は%s\n", judge ? "等しい" : "ちがう");
#undef Tadashii
#undef Tadashikunai
}
同じことやるんだったら、これだけで良くない? judgeは0で初期化。
while (*str1 == *str2 && *str1 != '\0') {*str1++; *str2++;}
if (*str1 == *str2) judge = 1;
そんなことより、この後printf("%s", str1) とすると、ポインタが動いてしまってるから
文字列が表示できないが、このポインタを元の位置に戻す方法は無いの?
どこか適当な変数にアドレス保持させておくか、*(str1 + i)みたいにするしか無い?
ポインタのインクリメントは使うメリットが良く解らない…
ミスった
*str1++ → str1++ , *str2++ → str2++
void swap(int *x, int *y)
{
*x^=*y^=*x^=*y;
}
>>717 int main()
{
int a[10] = {1};
printf("%d\n",a[0]);
swap(&a[0],&a[0]);
printf("%d\n",a[0]);
return 0;
}
質問です
「整数の配列とその要素数を引数として受け取り、添え字の1と2、3と4、…、nとn+1の要素を
それぞれ入れ替える関数を作成せよ。ただし、配列の要素数が奇数個である場合、最後の要素は入れ替えの
対象とならない。main関数では整数を入力として受け付けて、その数分の整数を配列に格納し、この配列の操作の対象とする」
って問題が出たので、とりあえずプログラムを作ってみたのですが、出力結果が正しく出ません。
下に作ったプログラムを貼ってみますので、誰か凄い方、添削お願い致します。
#include <stdio.h>
int irekae(int x, int data[]){
int i, tmp;
if(x % 2 == 1){
for(i = 0; i < x - 1; i = i + 2){
tmp = data[i];
data[i] = data[i + 1];
data[i + 1] = tmp;
}
}
else{
for(i = 0; i < x; i = i + 2){
tmp = data[i];
data[i] = data[i + 1];
data[i + 1] = tmp;
}
}
return(data[i]);
}
int main(void) {
int i, x, m, ans;
int data[256];
scanf("%d", &x);
for(i = 0; i < x; i ++){
scanf("%d", &m);
data[i] = m;
}
for(i = 0; i < x; i++){
ans = irekae(i, data);
printf("%d", ans);
}
printf("\n");
return(0);
}
以上です。お願いします。
>>722 直接scanf("%d", &data[i]);としてもコンパイルできるよ。
でも俺とscanfの相性は悪いんで使っていない。
#include <stdio.h>
#include <stdlib.h>
void irekae(int data[], int x) {
int i;
x &= ~1;
for (i = 0; i < x - 1; i += 2) {
int tmp = data[i];
data[i] = data[i + 1];
data[i + 1] = tmp;
}
}
int main(void) {
int i, num;
int data[256];
char buf[256];
fgets(buf, sizeof buf, stdin);
num = atoi(buf);
for (i = 0; i < num; i ++) {
fgets(buf, sizeof buf, stdin);
data[i] = atoi(buf);
}
irekae(data, num);
for (i = 0; i < num; i++) {
printf("%d ", data[i]);
}
putchar('\n');
return 0;
}
>>712 普通にstr1[i]のようにすればいいと思われ。
ポインタを理解させるのが目的だろうけど、
教える側が苦労したと言う自覚があればあるほど
判りにくい教え方になる罠。
>>723 あ、即レスありがとうございます!
そこで、あの、折角やって頂いたのに大変申し上げ難いのですが、
#include <stdlib.h>というのをまだ習っておりませんので、
これを除いてプログラムを作って頂けると嬉しさ倍増なのですが・・・
いかがでしょうか?
>>726 fgets()+atoi()をsscanf()に入れ替え、stdlib.hのインクルードを止める。
なにー、atoi()なんか使ってたのか。
>>723のボケが。
>>728 fgets+atoiをsscanfに変えたら意味変わらない?
揚げ足取りすまそ
732 :
デフォルトの名無しさん:04/12/08 23:31:35
2が1番小さい素数、3が2番目に小さい素数・・・・・、
i番目に小さい素数を返す関数nthprime(i)をつくり、500番目に
小さい素数を求めよ。
ただし関数nthprimeは再帰呼び出しを用いて作成すること。
#include<stdio.h>
int primep(int) ;
int nthprime(int) ;
int main()
{
int i = 500 ;
printf("%d",nthprime(i));
}
int primep(int i)
{
int k ;
for(k = 2 ;k < i ;k++){
if(i % k == 0){
return 0 ;return 1 ;
}
}
}
int nthprime(int i)
{
/*ここがわからないです・・・*/
}
誰かお願いします。
>>732 あってる気がするけど自信がない. 確認してね
#include<stdio.h>
int primep(int) ;
int nthprime(int) ;
int
main(void)
{
int i = 500;
printf("%d\n", nthprime(i));
return 0;
}
int
primep(int i)
{
int k ;
for (k = 2 ;k < i ;k++) { if (i % k == 0) { return 0; } }
return 1 ;
}
int
nthprime(int i)
{
int j;
if (i == 1) { return 2; }
else {
j = nthprime(i - 1) + 1;
while (!primep(j)) { j++; }
return j;
}
}
734 :
デフォルトの名無しさん:04/12/09 00:03:43
>>733 確認できました。動作しました。
ありがとうございました!!
問題の意図考えると
int nthprime(int i){
static int j = 1;
if(i == 0)
return j;
++j;
if(primep(j))
return nthprime(i - 1);
else
return nthprime(i);
}
とかのが良くね?
736 :
デフォルトの名無しさん:04/12/09 00:19:17
>>736 但し書きまであるわけだから、ループは再帰で書けって意図なんじゃないかなあと思っただけだけどね
別にループ使うなとも書いてないからどっちでも良いと思うけど。
738 :
デフォルトの名無しさん:04/12/09 00:32:36
>>737 ちなみに735の簡単な説明お願いしてもいいですか?
nthprime(i) は nthprime(i - 1) 次に大きい素数 (i >= 2 の時)
nthprime(i) は 2 (i == 1 の時)
の表現が意図なのでは?
s/nthprime(i) は nthprime(i - 1) 次に大きい素数 (i >= 2 の時)/nthprime(i) は nthprime(i - 1) の次に大きい素数 (i >= 2 の時)/
741 :
デフォルトの名無しさん:04/12/09 00:43:10
ありがとうございます!!
すいません。教えてもらってもいいでしょうか?
宿題がわからず困っています。
使用する言語はC言語です。
「英語、数学、国語の点数を入力してその平均点に
よって合否を表示するプログラムを作れ。
入力:英数国の各点数
処理:次の関数を使用する↓
60点以上を「合格」、未満を「不合格」
という成績の文字列を返す関数(grade)
出力:main関数にて成績を表示
点数を比較するときは同じ型同士で比較する。」
>同じ型同士で比較
意図がわからん
...英語型、数学型、国語型をつくり、基準点型にキャストする?
>>743 すいません。それは無視してもらっても結構らしいです。
/*
60点以上を「合格」、未満を「不合格」
という成績の文字列を返す関数(grade)
*/
char *grade(double p){ return (p<60.0)?"不合格":"合格"; }
C言語超初心者の俺ががんばって考えた
#include <stdio.h>
#include <string.h>
void grade(int a, int b, int c, char x[]){
double temp;
temp = (double)(a + b + c)/3;
if (temp >= 60.0){
strcpy(x, "合格");
} else {
strcpy(x, "不合格");
}
}
int main(){
int eigo, sugaku, kokugo;
char hantei[40];
printf("英語:"); scanf("%d", &eigo);
printf("数学:"); scanf("%d", &sugaku);
printf("国語:"); scanf("%d", &kokugo);
grade(eigo, sugaku, kokugo, hantei);
printf("%s\n", hantei);
return 0;
}
>>747 ありがとうございます。
自分でも今の時間考えてみましたが、
やはり出来なかったので参考にさせて
いただきます。
>746
問題をよく読め
>入力:英数国の各点数
>処理:次の関数を使用する↓
>60点以上を「合格」、未満を「不合格」
>という成績の文字列を返す関数(grade)
>出力:main関数にて成績を表示
gradeの入力が英数国の各点数ぢゃねーぞ
読解力の低下は文章題が解けないものどもの増加に影響を与えている
いいなぁ このスレ。
始めから読んでみると目頭が熱くなってくるよ。
いや、懐かしくて(藁
自分にもこんな時代もあったなぁと。
理解できるのは747のソースくらいだよ・・・
情報系の学科行っても全然プログラムやらんし
これじゃダメかな。
#include <stdio.h>
#include <string.h>
char *grade(int a, int b, int c){
double temp;
temp = (double)(a + b + c)/3;
if (temp >= 60.0){
return "合格";
} else {
return "不合格";
}
}
int main(){
int eigo, sugaku, kokugo;
char *hantei;
printf("英語:"); scanf("%d", &eigo);
printf("数学:"); scanf("%d", &sugaku);
printf("国語:"); scanf("%d", &kokugo);
printf("%s\n", grade(eigo, sugaku, kokugo));
return 0;
}
すまん、間違った。
#include <stdio.h>
#include <string.h>
char *grade(int a, int b, int c){
if (((double)(a + b + c)/3) >= 60.0){
return "合格";
} else {
return "不合格";
}
}
int main(){
int eigo, sugaku, kokugo;
printf("英語:"); scanf("%d", &eigo);
printf("数学:"); scanf("%d", &sugaku);
printf("国語:"); scanf("%d", &kokugo);
printf("%s\n", grade(eigo, sugaku, kokugo));
return 0;
}
倍精度浮動小数点型が出てくる意義が分らん
756 :
707:04/12/09 10:54:21
>>708-709 ごめんなさい。以後気をつけます。
>>711 遅くなってすみません。
今コンパイルしてうまく実行できました。ありがとうございます。
757 :
デフォルトの名無しさん:04/12/09 11:06:09
[1] 授業単元:計算機概論
[2] 問題文(含コード&リンク):整数nを入力して、nが素数か、合成数であるかを
判定するプログラムを作る。1を入力すると判定終了となります。(while文は
必ず使う)
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):Microsoft Visual C++6.0
[3.3] 言語:C++
[4] 期限:2004年12月14日まで
[5] その他の制限:
758 :
757:04/12/09 11:06:57
お願いします!
[6] 2chで同様の解答を見つけた場合はその解答を無効とします。
>711をそのまま提出したらすげぇな。
コンパイラがVC++なのに言語がC++とは一体何事か
>>762 意味がわからないのだが、何かおかしいのか?
>>757 ねえねえ、入力する整数nに上限があるのならすぐ作れるんだけど。
問題を読む限り上限はないよね?そういうのは俺には無理です。
上限ありやけど
#include<bitset>
#include<iostream>
void main(){
const int max = 1000;
std::bitset<max+1> prime_table;
prime_table.set();
prime_table[0] = prime_table[1] = false;
for(int i = 2; i * i <= max; ++i)
for(int j = 2; i * j <= max && prime_table[i] != 0; ++j)
prime_table[i * j] = false;
int input;
std::cin >> input;
std::cout << (prime_table[input] ? "素数だ" : "素数じゃない") << std::endl;
}
しまった
void main -> int main
最近C#ばっかやってたから癖が
しかももんだいよんでなかったorz
if(input == 1) return 0;
と
while(false);
でも入れといてくれ
>>770 そう言うならお前が作ってみろ。
>>771 標準C++はmain()に限り最後のreturn 0;は省略可能です。
C++だったかC99だったか忘れたが、intでreturn省略できなかったかな
C99, C++ も省略可能でなかったか?
>>772 ヘタレ
ダメだこいつ。
自分が問題を勝手に曲解しといて、
今度は自分が作れるかのようなこと言い出した
曲解じゃないだろ。例えば
>>766で1000以上のnが入力されたらどうなる。
問題の意図を満たさないだろ。
そういう場合必ずnの条件が付いてるはずなんだ。
両方ヘタレでFA
以下何事もなかったかのように再開
>>775 素数判定アルゴリズムを理解するために、以前ちょっとしたコードを書いたけれど
理解したから興味を失っただけだ!!!!!!?#
巨大な数の扱い方も知っているし、君とは殻が違うのだよ。殻が。解かる?殻。
ところで、DQNって何ですか?
>>780 殻?格の間違いじゃないの?(ワラ
多倍長計算のライブラリはいくつも持ってるし、Mathematicaもあるよ。
お前と一緒にすんなヴォケ。
どうでもいいけど、
>多倍長計算のライブラリはいくつも持ってるし、Mathematicaもあるよ
ワロタ
>>783 だから多倍長計算ライブラリを使えばそのまま
>>766のプログラムが移植
できるだろ。
Mathematicaは余計だったが、そのまま簡単なプログラムで多倍長計算が
できる罠。それだけの話。
しかしね。どんな多倍長計算クラスにも上限はあるし、素数を求める
アルゴリズムにも楕円曲線法とかいろいろある。あまり難しい話を
ここでしても意味がない。
やめいやめい。
↓以降何もなかったかのように質問受け付けます。
宿題スレで
>>757を見て多倍長計算ライブラリとかMathematicaとか言い出すアホが居るスレはここですか?
>>781 バカめ!!!!!!!?#
格とひきこもりが閉じこもる心の殻を掛けたのを見抜けないのか!!!!!?#
mathematicaを出してくる意図が理解できん。
こいつぼけ
>>788 そうか。
>>780はヒッキーでしかもニート君だったか。これは失礼。
君のプライドを傷つけるつもりは毛頭なかったので、許してくれたまえ。
なんかまた曲解している模様
ひょっとしてリアルで低脳だったのか?
誰かsakuraにかわる宿題スレ用のソースアップローダつくらないのぉ?
昼間いろんな板を回ると、人が少ないせいか、「あれ、こいつ
さっきあの板にいた香具師じゃね?」と思う場面に出くわす事が
多いね。ニートの生活ってこんな感じなのかな?
797 :
757:04/12/09 17:59:46
すいません。学校行ってて返事遅れました。上限はないです!
私が作ったのが(全く初心者なので間違いだらけです・・)
int n,i;
printf("整数nを入力して下さい \n");
scanf("%d",&n);
i=2
while (i<=(n-1)){
i=i+1;
}
if ((n%i)=0)
printf ("\n nは合成数です。\n",n);
else
printf ("\n nは素数です。\n",n);
}
798 :
757:04/12/09 18:02:07
超間違いだらけで・・。基本はこんな形で提出しなきゃならないので、
誰か心優しい方、手直ししてもらえませんか?申し訳ないです・・
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
なのでスルーされること請け合いでしょうね
#include <stdio.h>
main(){
printf("おちんちんを高速でしごくんだ。\n");
}
>>797 #include <stdio.h>
int main()
{
int n,i;
bool isPrime=true;
printf("整数nを入力して下さい \n");
scanf("%d", &n);
for (i=2; i*i <= n; i++) {
if ((n%i)==0) {
isPrime = false;
break;
}
}
printf("%d は %s です。\n", n, isPrime?"素数":"合成数");
return 0;
}
#include <stdio.h>
main(){
printf("もっと早くッッ!!\n");
}
>>797 int n,i;
printf("整数nを入力して下さい \n");
scanf("%d",&n);
i=2;
while (i<=(n-1)){
if ((n%i)==0)
{
printf ("\n %dは合成数です。\n",n);
return 0;
}
i=i+1;
}
printf ("\n %dは素数です。\n",n);
>>801 Cでbool使うときは何かincludeしないといけないんじゃなかったっけ?
(('))
805 :
デフォルトの名無しさん:04/12/09 18:14:06
携帯(iMona)で見てるせいか、めちゃくちゃなソースに見える。
806 :
757:04/12/09 18:26:27
みなさん、ありがとうございます。
#include<stdio.h>
void main()
{
int n,i;
printf("整数nを入力して下さい \n");
scanf("%d",&n);
i=2;
while (i<=(n-1)){
if ((n%i)==0)
{
printf ("\n %dは合成数です。\n",n);
}
i=i+1;
}
printf ("\n %dは素数です。\n",n);
}
エラーはなかったんですが、整数を入力すると、「整数です 合成数です」
と二つとも出てきてしまうんです。あと、1を入力して判定終了するのって
どうすれば良いのでしょうか・・ほんと迷惑かけて申し訳ないです
>>806 ちゃんとreturn 0;も書け。
>あと、1を入力して判定終了するのって
>どうすれば良いのでしょうか
#include <stdio.h>
int main(void)
{
int n,i;
while(1)
{
printf("整数nを入力して下さい \n");
scanf("%d",&n);
if(n == 1)
break;
i=2;
while (i<=(n-1)){
if ((n%i)==0)
{
printf ("\n %dは合成数です。\n",n);
goto next;
}
i=i+1;
}
printf ("\n %dは素数です。\n",n);
next:;
}
return 0;
}
808 :
757:04/12/09 18:35:53
>>806 本当にありがとうございます!助かりました v(^^)
809 :
(・∀・)イイ!! ◆LC7P44pfbg :04/12/09 18:47:40
こういう日があっても(・∀・)イイ!!
(・∀・)イイ!!さんはいつもpositiveですね。
イニシャルの名前を表示する関数を作りなさい。
データの終わりはNULLとする。
#include <stdio.h>
void disp(char *p[],char key)
{
int i=0;
while (p[i]!=NULL){
if (p[i][0]==key)
printf("%s\n",p[i]);
i++;
}
}
void main(void)
{
static char *nam[]={"Candy","Nancy","Eluza",
"Ann","Rolla","Emy",NULL};
disp(nam,'E');
}
上のプログラムを関数プロトタイプ宣言してscanfでイニシャルを打ち込み、
そのイニシャルの名前がある場合はその名前を、ない場合はその旨を表示する
プログラムに書き換えたいんですが、どうしたらいいでしょうか?
言語はCです。
みんなスペース入れて読みやすいようにしようよ…
消すのめんどいから、短いのはいい。
#include <stdio.h>
int disp(char *p[],char key){
int i = 0;
int existed = 0;
while(p[i] != NULL){
if(p[i][0] == key){
printf("%s\n",p[i]);
existed = 1;
}
i++;
}
return existed;
}
int main(void){
static char *nam[]={ "Candy", "Nancy", "Eluza", "Ann", "Rolla", "Emy", NULL };
char initial;
scanf("%c", &initial);
if(disp(nam, initial) == 0)
printf("なかった\n");
return 0;
}
[1] 授業単元:プログラミング基礎
[2] 問題文 :
○○○○年、○○月、○曜日(その月の1日の曜日。数化したもの)を入力し、
2次元配列を利用してカレンダーを作成し6行7列の配列で出力せよ。
計算が複雑になるのでうるう年は28日とする。
[3.1] OS:XP
[3.2] コンパイラ(バージョン): Borland C++ Compiler
[3.3] 言語:C
[4] 期限:2004年12月10日
[5] その他の制限: 前提として、自分が習った範囲(if do switch、while for 配列)を使って作成しないといけません。
ヒントだけでもお願いします…。
その月の1日の曜日入力するのか・・・
818 :
デフォルトの名無しさん:04/12/09 20:28:10
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):
hドライブの○○フォルダ配下の××.datからデータを入力し、そのデータを金額とした時の金額の一覧を表示するプログラムを作成せよ。
但し、××.datファイルはint型の複数データが格納されたバイナリファイルとする。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ(バージョン):.NET2002
[3.3] 言語:C++
[4] 期限:2004年12月13日20:00まで
[5] その他の制限:無し
どうかよろしくお願いします。
819 :
デフォルトの名無しさん:04/12/09 20:32:24
>>814 ありがとうございます!
本当に助かりました。
>>819 ありがとうございます!とてもヒントになります!
そんなんでよかったのか?
>>821 たまには嘘をつくのも(・∀・)イイ!!
C++言語で
[初期化]文字列をポインタで、整数値:n、文字
[処理]文字列のn番目の文字を、初期化した文字で置換して
mainで置換された文字列を出力するプログラムを誰かお願いします
関数はパラメータ3個使って作成する問題です
たとえばlendという文字列の2番目(n)のeを文字aに置換して
landと出力するようなプログラムです
825 :
デフォルトの名無しさん:04/12/09 21:04:04
昨日
2が1番小さい素数、3が2番目に小さい素数・・・・・、
i番目に小さい素数を返す関数nthprime(i)をつくり、500番目に
小さい素数を求めよ。
ただし関数nthprimeは再帰呼び出しを用いて作成すること。
を作っていただいたのですが誰か下のプログラムを見て
アルゴリズム書けるひといませんか?
よろしくお願いします。
826 :
デフォルトの名無しさん:04/12/09 21:05:16
>>825の続き
int primep(int) ;
int nthprime(int) ;
void main()
{
int i = 500;
printf("%d",nthprime(i));
}
int primep(int i)
{
int k;
for(k = 2 ;k < i ;k++){
if(i % k == 0){
return 0;
}
}
return 1;
}
int j=1;
int nthprime(int i)
{
if(i == 0)
return j;
j++;
if(primep(j))
return nthprime(i - 1);
else
return nthprime(i);
}
お願いします。
821は自分の発言ではありません。
system("cal"); でくぐって調べてみましたが自分に扱えそうにないですね。
もう少し分かり易いのをお願いします…。
828 :
デフォルトの名無しさん:04/12/09 21:09:06
あっ、#include<stdio.h>がぬけちゃいました。
それとアルゴリズムは解説みたいな感じでお願いしますm(__)m
>>816 #include <stdio.h>
int main(void){
int months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i, j;
int year, month, dayOfTheWeek;
int table[6][7] = {0};
printf("年:");
scanf("%d", &year);
printf("月:");
scanf("%d", &month);
printf("曜日(日曜:0...土曜:6):");
scanf("%d", &dayOfTheWeek);
printf("%d年%d月\n", year, month);
printf("日 月 火 水 木 金 土\n");
for(j = dayOfTheWeek; j < dayOfTheWeek + months[month - 1]; ++j)
table[j/7][j%7] = j - dayOfTheWeek + 1;
for(i = 0; i < 6; ++i){
for(j = 0; j < 7; ++j){
if(table[i][j] != 0)
printf("%2d ", table[i][j]);
else
printf(" ", table[i][j]);
}
printf("\n");
}
return 0;
}
830 :
デフォルトの名無しさん:04/12/09 21:17:54
すいません、あぷろだしんでるみたいなので、3つに分けます。
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define WORDLEN 50
#define SIZE 32/*素数であること*/
/*単語と出現回数をまとめて1つの構造体で表す。*/
struct wd {
struct wd *next;/*次の単語へのポインタ*/
char *str;/*文字列の先頭へのポインタ*/
int count;/*単語の出現回数*/
};
typedef struct wd WORD;/*WORD型とする*/
WORD *word[SIZE];/*WORDへのポインタを要素とする配列。SIZE個のリストを表す。*/
/*関数の宣言*/
void init_word();
WORD *add_word(char *);
char *getword(char *, int);
int hash(char *);
831 :
デフォルトの名無しさん:04/12/09 21:19:22
int main()
{
char w[WORDLEN];/*単語を読み込むための文字配列*/
WORD *p;/*リストの先頭を指す*/
int i;
init_word();/*単語の出現表を初期化*/
while (getword(w, WORDLEN) != NULL) {
p = add_word(w);/*同じ単語の探索・新しい単語の追加*/
if (p == NULL) {
fprintf(stderr, "Too many words\n");
exit(1);/*単語が多過ぎる時*/
}
p->count++;/*出現回数を1増加*/
}
for (i = 0; i < SIZE; i++) {
for (p = word[i]; p != NULL; p = p->next) {
printf("%d %s\n", p->count, p->str);
}/*全単語とその出現回数を表示*/
}
return 0;
}
832 :
デフォルトの名無しさん:04/12/09 21:19:50
int hash(char *w)
{
int i;
unsigned int h = 0;
for (i = 0; w[i] != '\0'; i++)
h = 65599 * h + w[i];
return h % SIZE;
}
void init_word()/*単語の出現表を初期化する関数*/
{
int i;
for (i = 0; i < SIZE; i++)
word[i] = NULL;
}
WORD *add_word(char *w)
/*文字列wと一致する単語がリスト内にあればその要素へのポインタを返す。
なければ、リストに追加し、その要素へのポインタを返す。
その際countは0にする。*/
{
char *s;
WORD *p;
int i;
833 :
デフォルトの名無しさん:04/12/09 21:20:15
i=hash(w);
for (p = word[i]; p != NULL; p = p->next) {
if (strcmp(w, p->str) == 0)
return p;
}/*リスト内を探索し一致する単語があればそのポインタを返してある。*/
s = (char *)malloc(strlen(w) + 1);/*新しい単語を保存する領域を指すポインタ。*/
if (s == NULL)
return NULL;
strcpy(s, w);/*wをsにコピー。*/
p = (WORD *)malloc(sizeof(WORD));/*新しい単語を保存する領域を確保*/
if (p == NULL)
return NULL;
p->str = s;
p->count = 0;/*新しい単語を追加した時、countを0に*/
p->next = word[i];
word[i] = p;/*リストへの追加*/
return p;
}
834 :
デフォルトの名無しさん:04/12/09 21:20:32
char *getword(char *w, int n)/*単語を文字配列に読み込む関数*/
{
int c;
int i = 0;
if (n <= 0 || feof(stdin))
return NULL;/*入力の終端かどうかをチェック
また単語の最大長が負かどうかもチェック*/
c = getchar();
while (c != EOF && ! isalpha(c)) {
c = getchar();
}/*英文字でない文字をとばす*/
if (c == EOF)
return NULL;/*EOFならNULLを返す*/
while (isalpha(c)) {
if (i < n - 1)
w[i++] = toupper(c);
c = getchar();
}/*英文字の間は大文字に変換しつつ文字配列wに代入*/
if (i < n)
w[i++] = '\0';/*単語の最大長を超えたら最後にNULLを代入*/
return w;/*代入された文字配列を返す*/
}
上は標準入力中に現れる英単語(英文字の列)の回数を数え、
大文字になおして標準出力に出力するコードです。
さらに、出現回数の多いものから順に表示できるようにするのが課題なのですが、
ソートがわからなくて困っています。
言語はCです。
また、入力されるのはハムレットや海底2万里などの全文です。
どうかよろしくお願いします。
835 :
デフォルトの名無しさん:04/12/09 21:20:57
5つになりました。申し訳ありません
>>829 ヒントどころか解答までして貰ってホントにありがとうございます。
自分は見当違いの事やってたし…。
このままじゃ試験危ないから勉強しないとなぁ。
837 :
デフォルトの名無しさん:04/12/09 21:41:12
838 :
デフォルトの名無しさん:04/12/09 22:04:07
誰か826の説明お願いします・・・。
い・や・♪
テンプレにこれ追加しろよ
・自分の宿題に解答がつかない時はあきらめて下さい
昨日
2が1番小さい素数、3が2番目に小さい素数・・・・・、
i番目に小さい素数を返す関数nthprime(i)をつくり、500番目に
小さい素数を求めよ。
ただし関数nthprimeは再帰呼び出しを用いて作成すること。
を作っていただいたのですが誰か下のプログラムを見て
アルゴリズム書けるひといませんか?
よろしくお願いします
こうしてテンプレはどんどん肥大化していくのであった。
int primep(int) ;
int nthprime(int) ;
void main()
{
int i = 500;
printf("%d",nthprime(i));
}
int primep(int i)
{
int k;
for(k = 2 ;k < i ;k++){
if(i % k == 0){
return 0;
}
}
return 1;
}
int j=1;
int nthprime(int i)
{
if(i == 0)
return j;
j++;
if(primep(j))
return nthprime(i - 1);
else
return nthprime(i);
}
お願いします。
>>824 >[初期化]文字列をポインタで、整数値:n、文字
日本語意味不明。意図に合うように適当に直してくれ。
#include <string>
#include <iostream>
void replace(std::string& str, int n, char ch);
void replace(std::string& str, int n, char ch){
str.replace(n, 1, 1, ch);
}
int main(){
std::string str;
int n;
char ch;
std::cin >> str;
std::cin >> n;
std::cin >> ch;
replace(str, n, ch);
std::cout << str;
}
I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCnN0YXRpYyBpbnQgaiA9IDE7DQoNCmludCBwcmltZXAoaW50
IGkpDQp7DQoJaW50IGs7DQoJZm9yKGsgPSAyOyBrICogayA8PSBpOyBrKyspDQoJCWlmKCEoaSAl
IGspKSByZXR1cm4gMDsNCglyZXR1cm4gMTsNCn0NCg0KaW50IG50aHByaW1lKGludCBpKQ0Kew0K
CWlmKCFpKSByZXR1cm4gajsNCglqKys7DQoJaWYocHJpbWVwKGopKSByZXR1cm4gbnRocHJpbWUo
aSAtIDEpOw0KCWVsc2UgcmV0dXJuIG50aHByaW1lKGkpOw0KfQ0KDQppbnQgbWFpbih2b2lkKQ0K
ew0KCXByaW50ZigiNTAwdGggcHJpbWUgPSAlZFxuIiwgbnRocHJpbWUoNTAwKSk7DQoJcmV0dXJu
IDA7DQp9DQo=
uue?
課題それであってんのか?
最低search_nで探して置換って話じゃないのか?
>>824だとreplaceどころか検索するまでもなく配列の書き換えで終わるし、
いくらなんでもそんな課題ないっしょ
このスレのレベルから言って妥当な課題と思うけど
嬲ったね!?
親父にも嬲られたことないのに!!
>>847 オレもそう思ったけど
>文字列のn番目の文字を、初期化した文字で置換して
>mainで置換された文字列を出力するプログラムを誰かお願いします
>関数はパラメータ3個使って作成する問題です
なるべくこれに沿ってみた
851 :
830:04/12/09 23:47:57
>>724のロダお借りしました。
ありがとうございました。
うpしました。お願いします。
>>851 > #define SIZE 32/*素数であること*/
激しくワロタ
853 :
デフォルトの名無しさん:04/12/10 02:57:51
双方向リストに対して、次の3つのソート方法を用いた辞書順ソートプログラムを作れ。
1.バブルソート
2.クイックソート
3.マージソート
本当によろしくお願いします
すいません、課題の問題が自分がかいたやつとほとんど同じで
文字列を入力してその文字のn番目の文字を、1文字置換するって問題です
日本語変ですいません・・
#include <stdio.h>
#define n 10
int main(void)
{
char mojiretsu[n];
mojiretsu[n] = mojiretsu[n];
printf(mojiretsu);
return 0;
}
857 :
818:04/12/10 09:07:48
[4] 期限:2004年12月13日20:00まで
と書きましたができれば明日の12時までにお願いします!
858 :
デフォルトの名無しさん:04/12/10 09:26:23
test
>>818 system("type hドライブの○○フォルダ配下の××.dat");
三つほどお願いします!問題自体はつながっていますので
(-1)^nを計算する関数を作ってください.入力は整数n
{(-1)^(n-1)・x^(2n-1)}/(2n-1)!を計算する関数を
作ってください. 入力は整数nと実数xとします
sinのテイラー展開は •Sin x=x- x^3/3! +x^5/5!+ …+ {(-1)^(n-1)・x^(2n-1)}/(2n-1)!+…ですが、
sin xを計算する関数をお願いします.
お願いします
関数int rand()を用いて0から9までの間でランダムな
整数を返す関数randm10をつくってください.10回繰り返して結果を出力してください.
また、繰り返し実行して、各値になる頻度をしらべてください.100回後と
10000回後の結果を画面に出力してください.
すみませんテンプレの下のほう読んでいませんでした・・・
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:xp
[3.2] コンパイラ(バージョン):NET2002
[3.3] 言語:C
[4] 期限:なるべく早めにお願いします。午後から講義なので・・・
間に合わなければ来週の月曜でも大丈夫ですのでどうかよろしくお願いします
[5] その他の制限:なし
>>859 int型のバイナリって書いてあるから
system("od -l hドライブの○○フォルダ配下の××.dat");
>>860 >(-1)^nを計算する関数を作ってください.入力は整数n
printf("%d", n & 1 ? -1 : 1);
>>860 >{(-1)^(n-1)・x^(2n-1)}/(2n-1)!を計算する関数を
>作ってください. 入力は整数nと実数xとします
>sinのテイラー展開は •Sin x=x- x^3/3! +x^5/5!+ …+ {(-1)^(n-1)・x^(2n-1)}/(2n-1)!+…ですが、
>sin xを計算する関数をお願いします.
精度(有効桁数)は?
sin(x) を計算するときの n は?
>>865 それは定数にして置いてその変更で変えられるように作るべきでは
まじめに毎回 {(-1)^(n-1)・x^(2n-1)}/(2n-1)! を計算するんじゃなくて、
x^3/3! = (x)*x*x/2/3
x^5/5! = (x^3/3!)*x*x/4/5
x^7/7! = (x^5/5!)*x*x/6/7
・・・
を逐次足す方が良いです。
>>864 早速ありがとうございます!
>>865 問題文に与えられているのはそれだけでしたので
>>866、867さんの仰られる通りでおねがいします
1 2
3 4
5 6
という中身のファイルがあったとして
一列目をa[]、二列目をb[]というようにするにはどうすればいいのでしょうか?
すいません、書いている途中に書き込んでしまいました。
ファイルを開くのはできるのですが、それをどのように利用すればいいのかわかりません。
言語はCでお願いします。
>>861 #include <time.h>
#include <stdio.h>
#include <stdlib.h>
int randm10(void)
{
return (int)(rand()/(RAND_MAX+1.0) * 10.0);
}
void f(int ntimes)
{
int i;
int a[10] = {0};
for (i = 0; i < ntimes; i++)
a[randm10()]++;
for (i = 0; i < 10; i++)
printf("%d: %d\n", i, a[i]);
}
int main(void)
{
int i;
srand(time(NULL));
for (i = 0; i < 10; i++)
printf("%d: %d\n", i+1, randm10());
f(100);
f(10000);
return 0;
}
0から100未満のランダムな数を10000個生成して、それぞれの数の出現回数を求めよ。
ただし、0から100までの乱数は以下の様にして求める。
(int)((double)100 * rand() / (RAND_MAX + 1.0))
C言語で宜しくお願い申し上げ候。
>>872 ( ゚д゚)
(つд⊂)ゴシゴシ
(;゚д゚)
(つд⊂)ゴシゴシ
_, ._
(;゚ Д゚)
>>872 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000
int main()
{
int i, ntable[100]={0};
srand((unsigned int)time(0));
for (i=0; i<N; i++) {
ntable[(int)((double)100 * rand() / (RAND_MAX + 1.0))]++;
}
for (i=0; i<100; i++) {
printf("[%2d] : %d\n", i, ntable[i]);
}
return 0;
}
( ゚д゚)
(つд⊂)ゴシゴシ
(;゚д゚)
(つд⊂)ゴシゴシ
_, ._
(;゚ Д゚)
>>872 >(int)((double)100 * rand() / (RAND_MAX + 1.0))
rand() % 100でいいぞ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i;
int randNums[100] = {0};
srand((unsigned int)time(0));
for(i = 0; i < 10000; ++i)
++randNums[rand() % 100];
for(i = 0; i < 100; ++i)
printf("%d ", randNums[i]);
return 0;
}
rand() % 100は精度が悪いからじゃないの?
>>874では
ntable[(int)((double)100 * rand() / (RAND_MAX + 1.0))]++;
>>875では
++randNums[rand() % 100];
演算子(++)の位置が違いますけど
このプログラムの場合どっちでもOKですか?
>>879 式の値を何にも使ってないし、後置き/前置きの++よりも[]の方が優先順位高いから大丈夫
[1] 授業単元:計算機
[2] 問題文(含コード&リンク):
>>869 [3] 環境
[3.1] OS:xp
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:一週間以内くらいなら
[5] その他の制限:なし
>>883 答えられるが、お前の態度が気に入らない。
>>869 開くところまでできているなら、
unsigned ic = 0;
while (fgets(buf, sizeof(buf), fp)) {
char buf[100];
sscanf(buf, "%d%d", a[ic], b[ic]);
++ic;
}
のような感じ。
課題の説明が中途半端なので回答も中途半端にならざるを得ない。
>>885 #include <stdio.h>
#include <stdlib.h>
#define MAXN 10
int main(void)
{
int a[MAXN], b[MAXN], i, count;
char buf[128];
FILE *fi;
if ((fi = fopen("data.txt", "r")) == NULL)
exit(1);
for (i = 0; i < MAXN; i++)
if (fgets(buf, 128, fi) == NULL)
break;
else {
sscanf(buf, "%d %d", &a[i], &b[i]);
}
fclose(fi);
count = i;
for (i = 0; i < count; i++)
printf("%d %d\n", a[i], b[i]);
return 0;
}
>>886 >sscanf(buf, "%d%d", a[ic], b[ic]);
これ間違ってるぞ。a[]やb[]がポインタ配列ならまだしも。
>>886 中途半端な課題に答えてくれてありがとうございます。
その回答で充分です。
sscanfを使えば良かったんですね。
891 :
デフォルトの名無しさん:04/12/10 17:21:06
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):
-----------------------------------
//file1.txt
12 123 1234
23 234 2345
34 345 3456
-------------------
のようなファイルの中身を、
-------------------
123 1234
234 2345
345 3456
-------------------
のように、左端の要素だけを取り除いて表示するようなプログラムを作りたいです。
[3] 環境
[3.1] OS:xp
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:1〜2日でお願いします!すんません。
[5] その他の制限:UNIXで動作できるようにしてください
間違えてC言語板に書き込んでしまいました。
改めてポインタについて教えてください。
struct test{
string aaa;
};
test *pstr[10];
pstr[10]->aaa = "ABC";
ポインタ配列pstrのメンバaaaに"ABC"を代入するには
どう書けばいいですか?
>>893 ・ポインタは何か指す物が無いとと使えない。pstrを宣言しただけでは
testのインスタンスは生成されない。
・配列の添え字は0から(要素数-1)まで。
test *pstr[10];
for(int i = 0; i < 10; i++) pstr[i] = new test;
pstr[8]->aaa = "ABC";
pstr[7]->aaa = "CDE";
>>893 ここは宿題スレだ。よって残念ながらここもスレ違い。
>>891のプログラムを知りたいのでできたらそのスレを教えてください。
>>895 非常に申し訳ないっす
文法的には下のような感じでいいのでしょうか?
スレ違いっぽくて申し訳ないですが添削よろしくお願いします。
#include <iostream.h>
struct test{
char *aaa;
};
int main(){
int i;
struct test *test_ptr[10];
for (i = 0; i < 10; i++){
test_ptr[i] = new test;
}
test_ptr[0]->aaa = "ABC";
test_ptr[9]->aaa = "DEF";
printf("%s\n", test_ptr[0]->aaa);
printf("%s\n", test_ptr[9]->aaa);
for (i = 0; i < 10; i++){
delete test_ptr[i];
}
return 0;
}
>>898 問題ないということしょうか
ありがとうございました
うーん・・なんと言ったらいいのでしょうか。
まずは
>>894さんありがとうございました。
教えて頂いたとおりに書いたらできました。
>>897さんは私ではないですね・・・
でも分かりやすい見本でした。
delete()もすべきなんですね。勉強になりました。
あと、質問して教えて頂いた後には
出来上がったソースをそえてお礼した方がマナーがいいんですね。
いろいろありがとうございます。頑張ります。
場合によりけりだけどこうで十分な気がする。
test *pstr;
pstr = new pstr[10];
pstr[0] = "ABC";
delete[] pstr; // delete pstr;だと駄目
>>889 うい、typo。ヒントにはなるだろうから訂正しなかった。
>>901 newしてるものが……
904 :
デフォルトの名無しさん:04/12/10 21:21:43
905 :
デフォルトの名無しさん:04/12/10 23:47:28
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
hドライブの○○フォルダのint型の複数データが格納されたバイナリファイルを使って
|給 与|一万円|五千円|千 円|五百円|百 円|五十円|十 円|五 円|一 円|
--+------+------+------+------+------+------+------+------+------+------|
1|423251| 42| | 3| | 2| 1| | | 1|
2|498225| 49| 1| 3| | 2| | 2| 1| |
3|316482| 31| 1| 1| 1| 4| 1| 3| | 2|
--+------+------+------+------+------+------+------+------+------+------|
合 計 | 122| 2| 7| 1| 8| 2| 5| 1| 3|
という表を作らなければならないみたいです。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ(バージョン):.NET2002
[3.3] 言語:C++
[4] 期限:2004年12月11日12:30まで
[5] その他の制限:無し
どなたかよろしくお願いします!!
>>905 明日の朝の900頃でもよければupするわ。
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
以下の式において、項数nを入力して、
tの範囲を0〜1とし、それを100等分して
f(t)の値を計算し列挙せよ。
n
f(t)=(4/π)* Σ{(1/(2k+1))*sin(2k+1)t}
n=0
フーリエの問題だと思うのですが、
プログラムが作れません><
よろしくお願いします。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ(バージョン):VC++ 6.0
[3.3] 言語:C言語
[4] 期限:2004年12月11日17:30まで
[5] その他の制限:特になし
>>908 #include <stdio.h>
#include <math.h>
#define Pi 3.141592653589793
double f(double t, unsigned int n) {
unsigned int k;
double ret = 0.0;
for (k = 0; k < n; ++k) {
ret += 1.0 / (2.0*k + 1) * sin(2.0*k + 1.0) * t;
}
return ret;
}
int main() {
unsigned int i;
for(i = 0; i < 100; ++i) {
printf("%lf\n",f((double)i / 100.0, 20));
}
return 0;
}
>>909 早速の回答ありがとうございます。
n
f(t)=(4/π)* Σ{(1/(2k+1))*sin(2k+1)t}
n=0
この式でΣのn=0からnまでの
nの値はscanf使って任意に入力したい
場合はどうしたらいいんでしょうか。。。
>>891 データの区切りは 1バイト スペースとみなした
int ch,flg=0;
while((ch=getchar())!=EOF){
if(flg) putchar(ch);
if(ch=='\n') flg=0;
if(ch==' ') flg=1;
}
>>910 意図から判断すると
n
Σ
k=0
だろ。
scanfで入力するにはmain関数を
int main() {
unsigned int i;
unsigned int n;
scanf("%d", &n);
for(i = 0; i < 100; ++i) {
printf("%lf\n",f((double)i / 100.0, n));
}
とする。
ところで、scanfはテストにしか使ってはいけないよ。
学校の課題くらいなら使っても大丈夫だろうけれど。
913 :
デフォルトの名無しさん:04/12/11 01:30:14
1 鈴木 16 49
2 渡辺 4 68
3 斉藤 51 49
4 安藤 85 46
5 亘理 25 15
上のデータをファイルから読み込み、下のような構造体に格納し
3番と4番の間に 佐藤 67 34 を追加しファイルに書き出しなさい。
struct seiseki{
int no;
char name[10];
int tensuu[2];
}
こんな問題出されたんですがサッパリわかりません・・・(´Д⊂
一つ次のデータのアドレスを使うやつ(線形リスト構造?)を使わずに作りたいのですが
どなたか回答いただけないでしょうか
>>912 たびたびありがとうございます。
ところでscanfは何故テストにしか使ってはいけないんでしょーか?
問題があるんですか??初心者ですいません><
915 :
デフォルトの名無しさん:04/12/11 01:35:17
913補足です
[1] 授業単元:情報処理実習
[2] 上記のとおり
[3] 環境
[3.1] OS:winxp
[3.2] コンパイラ(バージョン):VC++6.0
[3.3] 言語:C
[4] 期限:月曜テストなんで日曜の夜くらいまでにいただけると助かります。
>>916 なるほど、配列を超えた入力の抑制が出来ないのですね、、、
ありがとうございます
918 :
デフォルトの名無しさん:04/12/11 01:45:35
OpenGLはスレ違いですかね?
>>918 OpenGLのスレがあるのにわざわざここで?
920 :
デフォルトの名無しさん:04/12/11 01:57:13
言ったら雑談スレだった('A`)
>>916 おいおい、そのリンク見てみたけど、
fflush(stdin);
って平気で書いてるぞ。VCだけが処理系だと思っている痛い香具師が
書いたな。
>>921 scanf問題の説明が載っていればどこでもよかった。
今では後悔している。
923 :
デフォルトの名無しさん:04/12/11 02:58:24
パーティクルを飛ばすためのソースが浮かばない
誰か教えてください
>>923 パーティクルって何?飛ばすって?まずそれがわからないことには。
926 :
デフォルトの名無しさん:04/12/11 03:42:57
うまく行くときと行かないときがあります。
どこを直せばいいしょうか?
/*単語を数え、各単語の先頭だけを大文字にする。*/
#include <stdio.h>
#define N 100
int word (char *, int);
int main (void)
{
char str[N], *error="ERROR!!";
int ret;
printf("文字列を入力して最後にReturnキーを押して下さい.\n");
gets(str);
ret = word(str, N);
if (ret == -1) printf(error);
else
{
printf("%s\n", str);
printf("%d語\n", ret);
}
return 0 ;
}
927 :
デフォルトの名無しさん:04/12/11 03:43:48
//単語の先頭だけを大文字にし、単語数を返す関数
int word (char *p, int n)
{
int word = 0;
char *p_0 = p;
while (*p)
{
//アルファベットが見つかったら
if ((0x41 <= *p && *p <= 0x5a) || (0x61 <= *p && *p <= 0x7a))
{
word++;
//先頭の1文字
if (0x61 <= *p && *p <= 0x7a) //小文字なら大文字に
*p-=32;
p++;
if ((int)(p-p_0) > n) return -1;
//その単語の残りの文字
while ((0x41 <= *p && *p <= 0x5a) || (0x61 <= *p && *p <= 0x7a))
{
if (0x41 <= *p && *p <= 0x5a) //大文字なら小文字に
*p+=32;
p++;
if ((int)(p-p_0) > n) return -1;
}//アルファベットの間ループ
}
928 :
デフォルトの名無しさん:04/12/11 03:44:09
p++;
if ((int)(p-p_0) > n) //型キャストはなくてもいいんですか?
return -1; //もしかしてnじゃなくてn-1!?
}
return word;
}
>>928 「うまくいかない」とはどう「うまくいかない」のか書け。
なんか文字列長がN以上のときに悩んでるみたいだが、
自作関数のほうでなんぼチェックしても、getsの地点ですでに壊れてるから意味ないわな
fgets使っとき
もしかしたら単語と単語の間にスペースを2個以上入れるとそれが単語の数
としてカウントされてしまうという不具合か?それはアルゴリズムが間違って
いるから。
あと、0x41とか32とか、ASCII文字体系でしか動かないハードコーディングを
していて好ましくないから、isalphaとかtoupper、tolowerを使うべき。
文字列の終端はポインタの減算でチェックするより、'\0'が現れる事によって
判断した方が楽。
>>929 >>930 N以下の文字列でもERRORになることがある・・・
>>931 えっ!そうなんすか?
どこがまずいんですか?
>>932 ヌル文字でってどうやってやるんですか?
str[N]以降にアクセスしたくないんですけど、
例えばヌル文字が出るまでk++するとかだと
str[N]より前に'\0'がなかったら
str[N]を超えて調べちゃいますよね?
オレにはそんなやり方しか思いつかない、、、
あそっか、kがN以上になったらそこで止めればいいだけか…
オレはバカ……
>>933 Cの文字列は'\0'で終わるもんだ。
p[n]より手前までに'\0'がないときは、そんな引数を渡す奴が悪い。
/*単語を数え、各単語の先頭だけを大文字にする。*/
#include <stdio.h>
#include <ctype.h>
#define N 100
int word(char *p);
int main(void)
{
char str[N], *error = "ERROR!!";
int ret;
printf("文字列を入力して最後にReturnキーを押して下さい.\n");
gets(str);
ret = word(str);
if (ret == -1)
puts(error);
else {
printf("%s\n", str);
printf("%d語\n", ret);
}
return 0 ;
}
//単語の先頭だけを大文字にし、単語数を返す関数
int word(char *p)
{
int word = 0;
while (*p) {
//アルファベットが見つかったら
if (isalpha(*p)) {
word++;
//先頭の1文字は大文字に
*p = (char)toupper(*p);
p++;
while (*p && isalpha(*p)) { // 残りの文字は小文字に
*p = (char)tolower(*p);
p++;
}
}
while (*p && !isalpha(*p)) // アルファベットまたはターミネート文字が出るまで p を進める
p++;
}
return word;
}
gets()をfgets()に直すのは宿題として取っておく。
939 :
デフォルトの名無しさん:04/12/11 10:11:13
>>939 そのファイルにはどのようにデータが入っているんだ?
941 :
939:04/12/11 10:24:54
>>940 なんかfopen("h:\\○○\\kyuu-yo.dat")みたいなのを使うみたいです。
>>941 そのバイナリ・ファイルがない事にはプログラムが作れません。
どこかにうpして下さい。
943 :
939:04/12/11 10:30:50
>>942 ファイル学校行かないとないんです…。形だけでもどうにかなりませんか?
>>943 いつまでもフザケた事言ってんじゃねえよ
ファイル学校ってどんな学校や
…とか一瞬考えたのは秘密
あわれ905楽しようとしたばっかりに
寝坊した漏れに笑いのネタを提供してくれた。
いや、7時には起きたんだけどね。
>>905のレスを見ても仕様がよく分からんから
二度寝したんだよね。
別に学校の宿題くらい納期過ぎたって問題ないっしょ
自分でガン( ゚д゚)ガレ
#include <stdio.h>
int main(void)
{
int n,i;
int flag;
printf("n=");
scanf("%d",&n);
flag=0;
for(i=2;i<=n-1;i++){
if(N%i==0){
flag=1;
break;
}
}
if(flag==1){
printf("Sosuu de nai|n");
}
else{
printf("Sosuu de aru\n");
}
}
これを関数を使用したプログラムに直してくれませんか。
判定対象の整数を引数とし、判定結果(素数である場合を0,素数でない場合を1)
を辺値とする。
また数値の入力と結果の表示はmainで行う
>>947 #include <stdio.h>
int isPrime(int num){
int i;
for(i = 2; i <= num - 1; ++i)
if(num % i == 0)
return 1;
return 0;
}
int main(void){
int n;
printf("n=");
scanf("%d",&n);
if(isPrime(n))
printf("Sosuu de nai|n");
else
printf("Sosuu de aru\n");
}
>判定結果(素数である場合を0,素数でない場合を1)
!!
isPrimeの戻り値と結果表示逆にしてくれ
>>950 結果表示はそのままでよかったんじゃないんですか?
>>951 だ。自分のそそっかしさが嫌になってきたorz
>辺値
どうもありがとうございました
>>944 なんだ、できないのか。糞の役にもたたねえな。
週末に2ちゃんで人の宿題するのも(・∀・)イイ!!
どうしようもない質問者に翻弄されるのも(・∀・)イイ!!
次スレ立てちゃっていい?
ところでターミネート文字って'\0'のことで、ヌル文字とおなじことだよねえ?
1000ゲットニダ ━━<ヽ`∀´>@∀@)`ハ´)´Д`>━━!!!!
>>937 最後のほうの
while (*p && !isalpha(*p)) // アルファベットまたはターミネート文字が出るまで p を進める
p++;
って、単にp++;だけでもたぶんできますよね?
こうしたのは何か意図があるんですか?
こっちのほうが速いとか?
>>959 m9(^Д^)プギャー
小学生みたいな返しだな。そんな低脳じゃできるわけないなwww
>>965 自分が低脳である事を棚にあげて、よくそこまで開き直れるもんだ。
でも開き直ってもプログラムはできないぞ。低脳。
>>966 それがどうした無能野郎
低脳でも無能よりマシだクソッタレ
喧嘩はイイクナイ
どうせ一人でやってるんだろ。
>>964 レス遅くなってスマソ。
単にp++;だけだと、文字列の最後を越えていつまででもpをインクリメントし続け、
そのうちアクセス違反を出すと思います。
>>967 氏ね。答えを書いてもらえなかったのは、お前の質問の仕方が糞だったからだ。
まず日本語勉強ちまちょーね。あ?日本人じゃねーのか?祖国に帰った方が
ええんとちゃうか?
>>970 でも一番外側のwhile(*p)があるからだいじょぶなんじゃないんですか?
>>973 だめです。最後にホワイトスペース文字が入っている場合を
考えてみて下さい。