<`Д´>C/C++の宿題は私にやらせるニダ!Ver11
1 :
デフォルトの名無しさん :
03/07/16 00:45
std::endl;
4 :
デフォルトの名無しさん :03/07/16 00:47
printf("楽俊ハァハァ\n"); printf("ナユタンハァハァ");
5 :
デフォルトの名無しさん :03/07/16 00:50
<`Д´>C/C++は韓国が起源ニダ!
6 :
デフォルトの名無しさん :03/07/16 00:50
delete this;
911ですけどやっぱり検索文字列aabでaaabを検索したら無理でした。 /* データ検索のルーチン */ while ((ch = fgetc(fp)) != EOF) { if (ch == argv[2][j] || ch == argv[2][j = 0]) { ++j; if (argv[2][j] == '\0') { ++i; j = 0; } } } /* データ検索のルーチン終了 */ ここから改造してそこを修正する方法はないんでしょうか?
前スレ989さんありがとうございました。 出来たら解説お願いしたいんですが…
fseekをファイルストリーム内を後ろに戻っているんだろ。
Cで計算機を作る宿題なんですが 授業に寝坊しまくりで肝心なヒント全然聞けなくて 4段階中の1段階の途中でつまづいてかなりヤヴァイです。 >12 + 320 見たいな感じに>の後に任意の式を数字スペース演算子スペースって書き込んで 計算結果を返し、それ以外の入力には ERRORを返すのを.(ドット)を入力するまで繰り返すってだけなのですが。。。 ちなみに↑はまだ1段階目です。
>>985 はい。。
>>986 ありがとうございます!!ですがこの形でビルドすると戻り値がないのですが。。
戻り値はノード数にしたいのですがどうすればいいですか???
ちなみに後で知ったのですがscanfで読み込んで strpbrkを使ってスペースごとにポインタを切れと言わましたが strpbrkでのポインタの切って別のポインタに格納するやり方がよく分からないです。 とりあえず1段階目の(3)が計算結果ではなく 12 数値 + 演算子 320 数値 という風に返す問題だったんですが 1段階目の最終的な完成には通用しないと分かりつつも とりあえずこれを解こうとgetcで頑張ろうとしましたが コンパイルでエラーが大量にでてデバグできずに挫折しました。 家に環境が無いので思い出しながらですが、とりあえずできるところまで書いてみます。
>>13 まず、コンパイル環境を構築しろ。
話はそれからだ。
>>16 ここで聞くべき質問じゃないかもしれませんが
無料でwindows(XP)上で動かせる環境とかってありませんか?
できれば教えてもらえればうれしいです。
>>13 strpbrkはポインタを返すから、それを変数に入れればよいのでは?
char *s="abcdefghijk",*p;
p=strpbrk(s,"egu");
if(p) puts(p);
efghijkと表示されるはず
基本的にscanfはスペースで区切ってしまうぞ。%[]を使うときは例外だけど
>>20 あ、scanfは使うなと言われて
fgetsの間違いだと思いますスイマセン
c++の課題がでたんですけど、自分の力じゃわからなかったんで、教えて下さい。どうぞよ ろしくお願いします。 与えられた文字列sのn文字目からm文字目 からなる部分文字列を返す関数を定義し、 その動作を確認しなさい。 ただし、文字列を操作するシステムの関数を使ってはならない。 char* substring(char* s, int n, int m)
>>22 その課題の問題点。
・車輪の再生産で激しく無駄。
・「文字列を返す」だけでは仕様が曖昧。
*あらたにmalloc()した領域を返すか
*関数内部で用意した静的領域を返すか
*引き数で渡された領域を書き換えるのか
・C++だとしたらなんらかの文字列を取り扱うクラスにするべき。
>>24 宿題に対して
「車輪の再生産で激しく無駄」
じゃねーだろ。ばーか。
関数の具体的な仕様について、問題に記述されていないのは
出題者がそれを規定しないからであり、つまり
「関数の仕様については回答者にゆだねる」と解釈するのが普通。
> ・C++だとしたらなんらかの文字列を取り扱うクラスにするべき。
これは同意。
>>22 #include <stdio.h>
char* substring( char* str, int n, int m ) {
int w,r;
for( w = 0, r = n; r <= m && str[r] != '\0' ; w++, r++ )
str[w] = str[r];
str[w] = '\0';
return str;
}
int main( int argc, const char* argv[] ) {
char buf[100];
if( argc < 4 )
exit(1);
strcpy( buf, argv[1] );
printf("%s", substring( buf, atoi(argv[2]), atoi(argv[3]) ) );
}
mainのほうはおまけなので、strcpyとかを無造作に使ってる。
いやならてめぇでどうにか汁。
substring関数は「n文字目」って言葉をテキトーに解釈してる。
不都合があれば+1なりなんなりする。
27 :
デフォルトの名無しさん :03/07/16 18:39
宿題おねがいします。 文字をデータとして保持する構造体Listを考える。二つの リストをl1とl2とするとき、 l2の要素を l1の後ろに連結する関数を定義し、その動作を確認しなさい。 戻り値は、 追加したノード数とする。また、l2の要素と l1に追加された要素は独立の存在するとする。 int concat(List &l1,List l2) 構造体の定義はないです。
>27 別にどうでもいいんですけどその構造体Listの中身を教えてください。 あと戻り値というのは全ノード数ですか?それとも追加したノードの個数(1個)ですか?
29 :
デフォルトの名無しさん :03/07/16 18:48
>>28 戻り値は追加した個数(1個)と思います。構造体の中身はおまかせします。
>29 この関数は呼び出し側でどのように使うつもりですか? あと第2引数に&はつかないんですか?
>>27 #include <iostream>
typedef struct Node{struct Node *next;char data;};
typedef struct List{Node *start;Node *end;int length;};
int concat(List &l1, List l2){
l1.end = l2.start;
return l2.length;
}
int main(){
List l1,l2;
l1.start = new Node(); l1.start->next = new Node();
l1.end = l1.start->next->next; l1.length = 2;
l2.start = new Node(); l2.start->next = new Node();
l2.end = l1.start->next->next; l2.length = 2;
if(concat(l1,l2) == 2) std::cout << "正常でした。"<< std::endl;
else std::cout << "異常でした。" <<std::endl;
return 0;
}
typedef はいらなかった。 質問は却下。
33 :
デフォルトの名無しさん :03/07/16 20:27
計算機応用工学で以下の課題が出たのですが難しく、私の頭では解けなかったので どうか教えていただけませんか?よろしくお願いします。 #問題# 2桁の16進数をキーボードから入力し、学籍番号の末尾2桁(16進数表示)と ビット単位のAND演算を行い、その結果を学習ボードの8ビット発光ダイオード (orモニター画面上に)にBCDコードで表示するCプログラムを作成せよ (下記のプログラム例参照) さらに、この8ビットデータを、ロータリースイッチ(orキーボード)から読み込んだ (0)16〜(F)16の値の回数だけ、ビット単位で順次ゆっくりと左回転シフトさせよ (一回転1秒以内) #include <studio.h> int main(void){ int data; printf("start I/O Test\n"); /**************************************/ _outp(0x0106,0x82); /* PA=PC="OUT";PB="IN" */ data=_inp(0x0102); /* read B-port */ _outp(0x0100,data); /* write A-port */ /**************************************/ printf("stop I/O Test\n"); return(0); }
以前に 文字の集合を表す構造体Setを定義し、要素を追加する 関数を定義し、その動作を確認しなさい。 追加した要素が 集合の新しい要素の場合1、既に存在していた場合0を返すとする。 int addset(Set &set,char a) という質問をした者ですが、 #include<iostream.h> #define MAX_CHAR_NUM 256 int addset(Set& set, char a); struct Set{ int cp; char data[MAX_CHAR_NUM]; }set; int main() { int addset(Set& set, char a ) { int i; for(i=0; i<=set.cp; i++){ if(a==set.data[i]) return 0; } set.data[set.cp++]=a; return 1; } } まで行き着いたのですが、コンパイルしたらエラーがでます。 どのようにすればいいのか添削してくださる方いましたらおねがいします。 度々すいません・・・
エラーメッセージの内容くらい書け 話はそれからだ
あ、あああああ・・・・・・・。
38 :
デフォルトの名無しさん :03/07/16 22:57
これも宿題なんでお願いします。 「char a;としてアルファベットを入力するものとする。 入力した際に画面に表示されずに、すぐにaに格納してくれる 関数を調べて来い。」です。
echoがあるかどうかは端末しだいだろう
40 :
デフォルトの名無しさん :03/07/16 22:59
誰かCでオセロ作ってもらえませんか? エスケープシーケンスは使ってもOKということで。 どなたかお願いします
41 :
デフォルトの名無しさん :03/07/16 23:13
>>40 #include <stdio.h>
int*i,p,t,a,d,v,m[91]={-10,-9,-8,-1,1,8,9,10},s;void k(){if(m[p]==0)for(i=m;*i
;i++){for(v=p+*i;m[v]==9-t;v+=*i);if(v-p-*i&&m[v]==t&&(s=a=v=p,d))do m[v]=t,v
+=*i;while(m[v]-t);}}main(){for(m[40]=m[50]=s=t=3,m[41]=m[49]=6;s-1;a=d=0){for
(p=8;++p<82;printf("・\0○\0●\0\n"+m[p]))p%9?k():m[p]=9;for(a?d=a=p=9:s?s=0,
puts("pass"):s++;a==9;k())t-6?scanf("%d%d",&p,&v),p+=v*9:++p;t=9-t;}return 0;}
45 :
デフォルトの名無しさん :03/07/16 23:28
明日までにqsort使ってプログラム組んでこいって言われたんですが qsortって何でしょうか?
46 :
デフォルトの名無しさん :03/07/16 23:33
48 :
デフォルトの名無しさん :03/07/16 23:39
49 :
デフォルトの名無しさん :03/07/16 23:52
>>44 興味津々なんだけど・・・。
コンパイルエローになるよん。
50 :
デフォルトの名無しさん :03/07/17 00:13
この課題をやってください、お願いします。 "変数(英小文字の文字列)=値" (a=1,b=4+3等)という形の式を (キーボードから)入力したら、その変数に値を記憶し、変数だけを 入力したら、記憶した値を表示する。この形式以外ならエラーを返す。
>>50 >その変数に値を記憶し
擬似的な変数なら可能だけど、変数に代入するのは無理ポ
52 :
デフォルトの名無しさん :03/07/17 01:04
>>51 最終的にメモリ機能付きの電卓を作るのですが、これでは無理ですか?
変数名と現在の値の2つの列からなる配列の構造体をつくるらしいのですが。
>>52 C/C++で言う所の変数のようなものを実装させる事なら出来るが、
実際の変数に代入する事は無理と言う意味
CでCRC32のコードを作成&チェックするソースお願いします。
>>54 #include <stdio.h>
#include <limit.h>
typedef unsigned int crc32 ; /* 32ビットの符号無し整数型 */
#define getcrc32( src, size ) chkcrc32( 0, src, size )
#define cmpcrc32( crc, src, size ) ( getcrc32( 0, src, size ) == crc )
crc32 chkcrc32 ( crc32 crc, const unsigned char *src, size_t size )
{
size_t n, m ;
crc ^= 0xffffffff ;
for ( n = 0 ; n < size ; n++ )
{
crc ^= src[n] ;
for ( m = 0 ; m < CHAR_BIT ; m++ )
{
int flag = ( crc & 1 ) ;
crc >>= 1 ;
if ( flag ) crc ^= 0xedb88320 ;
}
}
return crc ^ 0xffffffff ;
}
int main()
{
unsigned char buf[4] = "TEST" ;
printf ( "%08x\n", getcrc32 ( buf, 4 ) ) ;
return 0 ;
}
全ビット反転なら補数演算子を使えばいいのに。
>>57 本当は、crc32型は32ビット以上で、全ビット反転とは限らないから
60 :
デフォルトの名無しさん :03/07/17 08:54
こんな宿題が出ますた。全然わかりません。お願いします CSVファイル(list.csv)を開いて、 特定の文字列"KEYWORD"が2列目に含まれている行を すべて表示しなさい
>>59 だったらtypedef unsigned long int crc32にしなよ。
intと違って必ず32bit以上になる。
62 :
デフォルトの名無しさん :03/07/17 09:39
任意の異なる3個の整数dat1,dat2,dat3を入力し、最大値MAXと最小値MINを求めて結果を表示 するプログラムを作成しなさい。ただし,else if文を用いて作成すること。 これをお願いします。なんか4個ぐらいの式でできるそうなので・・・・・
< `ш´>
#define IS_CRESCENDO(x,y,z) ((x)<(y)&&(y)<(z)) と定義しておき、 if( IS_CRESCENDO(dat1,dat2,dat3) ) { printf("min is dat1(%d), mid is dat2(%d), max is dat3(%d)\n", dat1, dat2, dat3 ); } else if( IS_CRESCENDO(dat1,dat3,dat2) ) { printf("min is dat1(%d), mid is dat3(%d), max is dat2(%d)\n", dat1, dat3, dat2 ); } else if( IS_CRESCENDO(dat3,dat1,dat2) ) { こんな調子で延々と。 else if の練習ならこれで正解だと思う。
>>62 if(dat1>dat2){max=dat1;min=dat2;}else{max=dat2;min=dat1;} /* max>=min */
if(dat3>max)max=dat3; else if(dat3<min)min=dat3;
かぶったか…。
クレッシェンドとはセンスいいな。
68 :
デフォルトの名無しさん :03/07/17 11:00
オセロを作ろうと思うのですが、 土台の部分ができてません。 判定の部分は自分で考えてみたいのですが。 [ ][ ][ ] [ ][ ][ ] [ ][ ][ ] これを表示して、yで上に、bで下に、gで左に、hで右にカーソルを 移動させてEnterkeyでチェックしようと思うのですが、 奇数回なら●、偶数回なら〇を表示させたいです。 ポインタの使い方がイマイチなんで、できればポインタを使わないで 作ってみたいです。 どなたか、↑のサンプルを作ってみてもらえないでしょうか。 あと、完成したらここにまた紹介しに来たいと思います。 過去ログに似たようなのがあったのですが、 よく分かりませんでした。あと、XPなのでエスケープシーケンスが使えません。 APIを使うしかないのでしょうか。
こういうのはむしろGUIプログラミングを勉強したほうが早い気がするなぁ。
>>68 2000/XPでもエスケープシーケンスは使えます。
ANSI.SYS組み込んで16ビットコード吐くコンパイラ(LSI-Cとか)使えば。
>>68 JavaScriptで作れば表示入力系の問題は解決。
つーか、Cでポインタ使わずになにするのさ。
>>56 chkcrc32に戻り値はOK:0NG:1で良いんですか?
>>60 #include <iostream>
#include <fstream>
#define len 7
const char key[] = "KEYWORD";
int main(int,char **av)
{
using namespace std;
ifstream in(av[1]);
string ls;
string::size_type i;
while(getline(in,ls)){
if((i=ls.find_first_of(',')) != string::npos){
if(!ls.compare(i+1,len,key,0,len)){
cout<<ls<<endl;
}
}
}
}
#include <stdio.h> #include <stdlib.h> #define num 100000 int main(){ int i,pin,a,attempt; double pi,n[num]; for(i=0;i<num;i++){ n[i]=rand()/32768; } pin=0; for(a=0;a<num;a+=2){ attempt=(a/2)+1; if((n[a]*n[a]+n[a+1]*n[a+1])<1) pin++; pi=pin*4/(attempt*1.0); printf("pi=%f\n",pi); } montecarloの円周率を求めるプログラムをつくったつもりなんっですけど、 答えが4しかでないのは何でですか?
76 :
デフォルトの名無しさん :03/07/17 12:46
>>68 無理ぽ。
試してみたけど途中でわけわかんなくなった。
誰かお願い。俺も気になる
77 :
デフォルトの名無しさん :03/07/17 12:50
焼きなまし法ってどうプログラミングすればいいんでしょう…。 山登りが一番簡単でいいと思うんですけども、さーっぱりわからんの です…。
プログラミングなんかやめちまえ。 それが一番簡単だ。
>>74 ありがとうございます!!
ですが、申し訳ないのですが、C++でなくCでお願いします。
書くの忘れてましたm(_ _)mごめんなさい
81 :
デフォルトの名無しさん :03/07/17 14:34
>>75 #include <stdio.h>
#include <stdlib.h>
#define num 100000
int main(){
int i,pin,a,attempt;
double pi,n[num];
for(i=0;i<num;i++){
n[i]=rand()/32768.0;
}
pin=0;
for(a=0;a<num;a+=2){
attempt=(a/2)+1;
if((n[a]*n[a]+n[a+1]*n[a+1])<1) pin++;
pi=pin*4/(attempt*1.0);
printf("pi=%f\n",pi);
}
>>80 Cしか習ってないのに、C++の持っていったら怒られちゃいます!
ごめんなさい
83 :
デフォルトの名無しさん :03/07/17 14:43
>>75 #include <stdio.h>
#include <stdlib.h>
#define num 100000
int main(){
int i,pin,a;
double pi,n[num];
for(i=0;i<num;i++){
n[i]=rand()/32768.0;
}
pin=0;
for(a=0;a<num;a+=2){
if((n[a]*n[a]+n[a+1]*n[a+1])<1) pin++;
}
pi=pin*4/(num/2.0);
printf("pi=%f\n",pi);
return 0;
}
>>77 GSLに gsl_siman_solve() という実装があるから参考に。
>>82 #include <stdio.h>
#include <string.h>
#define len 7
const char key[] = "KEYWORD";
int main(int ac,char **av)
{
char ls[256];
char *q;
FILE *fs;
if((fs=fopen(av[1],"r")) == NULL) return 0;
while(fgets(ls,256,fs)){
q = ls;
while(*q++ != ',');
if(!strncmp(q,key,len)){
printf("%s",ls);
}
}
}
>>85 ありがとうございました!助かりました。
がんばって勉強します。
87 :
デフォルトの名無しさん :03/07/17 15:25
>>85 >こんな宿題が出ますた。全然わかりません。お願いします
>
> CSVファイル(list.csv)を開いて、
> 特定の文字列"KEYWORD"が2列目に含まれている行を
> すべて表示しなさい
となってるけど
"KEYWORD"が2列目に含まれている行ってのに
null,THE KEYWORD IS NULLPO,po …
みたいなのは含まれないの?
0, "The KEYWORD is ぬるぽ", 89.4, こういう風になっているんじゃないのか?
俺が言いたいのは
>>85 だと
2列目の文字列の先頭にKEYWORDが無いとだめじゃないのかってことなんだけど。
>if(!strncmp(q,key,len))
これだとそうなるよね?
"aa,bb", "KEYWORD" こうなっていると単純に','を探すだけでは二列目の始まりをみつけることができない。
>>87 ああめんど。
while(fgets(ls,256,fs)){
q = ls;
while(*q++ != ',');
while(*q != ','){
if(*q == 'K'){
if(!strncmp(q,key,len)){
printf("%s\n",ls);
}
}
++q;
}
}
92 :
デフォルトの名無しさん :03/07/17 15:58
>>91 それだと
2列目にKEYWORDが二つ以上含まれてるときに(ry
表示したらcontinu;しろよ
94 :
デフォルトの名無しさん :03/07/17 16:42
96 :
デフォルトの名無しさん :03/07/17 19:51
#include <stdio.h> main(int argc, char *argv[]) { int ans, b, c , i; b = 0; for(i = 0; argv[1][i] != '\0'; i++){ b = b*10+(argv[1][i] - '0'); } c = 0; for(i = 0; argv[3][i] != '\0'; i++){ c = c*10+(argv[3][i] - '0'); } if(*argv[2] == '+'){ ans = b + c; } else if(*argv[2] == '-'){ ans = b - c; } else if(*argv[2] == '*'){ ans = b * c; } else if(*argv[2] == '/'){ ans = b / c; } printf("%d \n", ans); } コマンドラインの問題ですが、掛け算だけ結果がゼロになりま す。なぜか分かりません。 教えてくださいお願いします。言語はCです。
97 :
デフォルトの名無しさん :03/07/17 20:07
>>96 掛け算のときans = b * c;の行に来てますか?
どういう環境でコマンドを打っているのかわかりませんが
おそらくshellで'*'をワイルドカードとしてみなし、
カレントディレクトリの全ファイルのリストに変換されて
いるのだと思われます。
プログラムの頭で
for (int j = 0; j < argc; j++) {
printf("argv[%d]=%s\n", j, argv[j]);
}
を入れてみて確認してください。
対応
@ *を使わない
A *をエスケープしてシェルでワイルドカードとして解釈させない
Aは使っているシェルによります。
98 :
デフォルトの名無しさん :03/07/17 20:08
★★★★★★★★★★★★★★★★★★★★
★ 激安アダルトDVDショップ ★
★ 開店セール1枚500円!急げ! ★
★★★★★★★★★★★★★★★★★★★★
激安でDVDをGET!
http://www.get-dvd.com 何と! 1枚 500円均一 セール中!
インターネット初!「きたぐに割引」
北海道・東北の皆様は送料も激安!!
http://www.get-dvd.com ゲットDVDドットコム!
今すぐアクセス Let's go !!!!!!!
すみません、リスト構造って一体何なんでしょうか(;´Д`)? リスト構造を使ったプログラミングの宿題が出たんですがこんなの習った覚えは・・・
>>96 ヽ(ヽ ・∀・)わけ (ノ・∀・)ノわか ヽ( ・∀・)ノらん
goolge検索はしたのですが適当なのが見つからなくて… もしリスト構造について載っているようなサイトあれば教えていただけないでしょうか
ポインタと構造体のコンボ
106 :
デフォルトの名無しさん :03/07/17 21:18
浮動小数点変数を a に、桁数を n に入力して、 char* round(double a, int n) この関数に、小数以下n桁に四捨五入した文字列を返すような仕組みを 作らなければいけないのですが、どうもその仕組みがうまくつかめない もので。。
またかよ
どうしても四捨五入ととこができないのでおねがいします。
char* round(double a, int n) こんなの俺には絶対作れねぇよ・・・。わりぃ。
110 :
デフォルトの名無しさん :03/07/17 21:30
すいません。 質問なんですけど。 元の基底クラスと継承したクラスがツリーなどになっていて 混在しているような構造を作ってしまったのですが、 型を判別するのにtypeidで強引にやってますがこのやり方は正しいのですか? それともそもそもこういった構造にしてしまうこと自体が間違いなのでしょうか? どう組むべきなのでしょうか? よろしくおねがいします。
111 :
デフォルトの名無しさん :03/07/17 21:31
>>106 文字列を返すとして...、それは、どこでどれだけ確保すべきか、
その方針を示していただけませんか。
可能ならば問題の出題者に聞いてください。
>>108 じゃあ、四捨五入するところだけ飛ばして作ったソースをさらせ。
>>106 俺、前に書いた気がするんだけど・・・。
>>110 virtualなメソッドを書いて、それを呼び出すだけにすればいいんじゃない?
>>110 宿題なの?
とりあえず、デザインパターンの中の
Composite、Visitorパターンなんかを調べるとよいかも。
>>95 quotation markを区別してない。
"abc',defKEYWORD",no key word
さらにいえば変数の名前がへたくそ。
117 :
デフォルトの名無しさん :03/07/17 22:05
VC++を初めて間もない者です。 お菓子.CSVファイルの中身はお菓子の番号、名前、値段、在庫数です。 1,あめ,10,20 2,ガム,20,30 3,チョコ,50,10 int CShohin::OkashiZaiko) { CString strButton; CString strKakaku; CString strZaiko; int a; //ファイルが開けるか確認 CStdioFile fin; a = fin.Open("C:\\Jihanki\\お菓子.csv",CFile::modeWrite); //ファイルの結合 strButton.Format("%d",m_intButton); strKakaku.Format("%d%",m_intKakaku); strZaiko.Format("%d%",m_intZaiko); strButton.operator += (","); strButton.operator += (m_strShohinnamei); strButton.operator += (","); strButton.operator += (strKakaku); strButton.operator += (","); strButton.operator += (strZaiko); strButton.operator += ("\n"); fin.WriteString(strButton); //ファイルを閉じる fin.Close(); return 0; }
118 :
デフォルトの名無しさん :03/07/17 22:05
ソースが長くなってしまうので重要な部分だけなのですが、CSV ファイルから1列だけ取ってきて構造体に格納し、お菓子が買われる と在庫数を1減らして.CSVファイルのその商品名の部分に上書きしたい のですが、このソースですと何を買っても1番上に書き込みがされて しまいます・・ 途中で処理が入り、strButtonは3、m_strShohinnameiにはチョコ、 strKakakuには50、strZaiKoには9を結合し、3,チョコ,50,9という 文字列をファイルの3番目に上手に書き込む処理はどのようにすれ ばよいでしょうか。ご教授よろしくお願いいたします。
120 :
デフォルトの名無しさん :03/07/17 22:09
俺は教授じゃない!!!
>>118 ソースを見る前にあなたの文章が理解できないんだけど。
これだけ長いのに句点が二つしかない。
123 :
デフォルトの名無しさん :03/07/17 22:37
早い話、ファイルの中から構造体に取得して更新されて、再度結合した 文字列を、ファイルの中の商品名と同じ場所に上書きしたいってこと じゃないの?
124 :
デフォルトの名無しさん :03/07/17 22:45
>>114 型によって違う関数が定義されているので問題ありなんです。
>>115 ConpositeパターンはConponentクラスが大爆発しそうです。
Visitorパターンはこれをやるよりいまのtypeidの方がスマートに組めるような気がします。
わがままばかりいってすみません。
レスありがとうございます。
解決策を求めて旅に出ようと思います。
Conponentクラスにメソッドやメンバが多くなってしまうってこと? だったらそれはConpositeパターンに向いている状態だと思うが。
>元の基底クラスと継承したクラスがツリーなどになっていて >混在しているような構造を作ってしまったのですが、 >型を判別するのにtypeidで強引にやってますがこのやり方は正しいのですか? 型を判別するにはその方法くらいしかないでしょうね。 >それともそもそもこういった構造にしてしまうこと自体が間違いなのでしょうか? >どう組むべきなのでしょうか? なにを?
型ごとの違いはvirtualなメソッドで吸収しろってことなんだけど・・・。
128 :
デフォルトの名無しさん :03/07/17 22:56
129 :
デフォルトの名無しさん :03/07/17 22:56
>>125 向いてるのですか?
どうも私の直感が全力でヤメトケといっているのですが。
わからん、おまえの言いたいことがさっぱりわからん。
struct List { std::string buf_; }; 、と printf("%s",l1.buf_.c_str()); を日本語で説明するとどういう事でしょうか??
>>128 提出期限終わってるが、そのまま再帰で書けばいい。
Listにはstd::stringがあってcの文字列に変換して出力してる。
>>struct List >>{ >>std::string buf_; >>}; std::string クラスをメンバに持つList構造体。 >printf("%s",l1.buf_.c_str()); Listのインスタンスが保持するデータをC言語の文字列型に変換して標準出力に表示。
std::string とはどういう事ですか?
密教の儀式
namespace stdに定義されている string クラス。
馬鹿をからかうのは楽しいね。
>>132 再帰型で書けなくて困ってます。
一度提出したら反復型だって怒られた。
教えてくださいお願いします
140 :
デフォルトの名無しさん :03/07/17 23:16
if (a[l] == k) return l; else if (a[l] < k && k <= a[(l + r) / 2]) return binary_search(a, k, l, (l + r) / 2); else if (a[(l + r) / 2] < k && k <= a[r]) return binary_search(a, k, ((l + r) / 2) + 1, r); else return -1;
>>140 多分あとは自力でできそうです。
どうもありがとうございました。
>>116 >if(*q == '\"' || *q == '\'' ){
> if(!flg) flg = 1;
> else flg = 0;
>}
if(*q == '\"'){
144 :
デフォルトの名無しさん :03/07/17 23:39
ファイルを16進ダンプするプログラムの書き方を教えてください。
>>144 system("od -x file");
char* p; ファイルの全バイトに fprintf(fp,"%x",*p++);
c++でパターンマッチってなんですか? 簡単に説明してください。
ありがとうございました。
>>106 sprintfだけで、四捨五入になってたけど・・・(BCC)。
#include <stdlib.h>
#include <stdio.h>
double pow10(int x)
{
int i;
double ret=1.0;
for(i=0; i<x; i++) ret*=10;
return ret;
}
#define MAX_MOJISUU 100
char * round(double a, int n)
{
char *p;
p = (char*)malloc(MAX_MOJISUU)
a += 0.5/pow10(n);
sprintf(p,"%.*f",n,a);
return p;
}
>>148 &&150
風水では、パターンマッチを鬼門って言うのか?
sprintfだけで四捨五入じゃなくて、切り捨てだろ。
わかんねぇけど鬼門て風水に出てくるでしょ。 だから・・。俺もしかしてキチガイ?
C++ではパターンマッチを避けたほうがいいっていうのを 鬼門っていってるんじゃないの?
>>155 カコイイ!!
でも課題が出ちゃったんですよね。
なってた
>>153 #define MAX_MOJISUU 100
char * round(double a, int n)
{
char *p;
p = (char*)malloc(MAX_MOJISUU)
sprintf(p,"%.*f",n,a);
return p;
}
これでも同じ結果。
>>158 それがわかってなかったらきてねぇっぺよ
>>157 round(1.005, 2)やってみ
1.perlで正規表現のスクリプトを書く。 2.C/C++から呼ぶ 終了
後は自力で出来る言ってしまいましたが、 binary_search が call された回数: の出し方が分かりません。 教えてくださいお願いします。
>>163 適当なstaticな変数をインクリメント
適当なことばっかいうなよ!
適当なdouble型変数をインクリメント
パスカルの三角形って・・・ 組み合わせの数nCmを求める関数combinationを書け。この関数の引数は、整数が二つである。 例題1の関数factを利用して書いても良い。関数combinationを使ってPascalの三角形 (0<=n<=10),0<=m<=nの範囲のnCmの一覧表)を表示するmainを書くこと。 出力は例えば次のようになればよい 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ........... この表の出力の仕方がわかりません(´・ω・`) とりあえずソース書きます
#include <stdio.h> int fact(int x); int combination(int n,int m); int main(void){ int m,n,x,i; printf("n: ");scanf("%d",&n); printf("m: ");scanf("%d",&m); x=combination(n,m); printf("nCm=%d",x); return(0); } int fact(int x) { int f; f=1; while(x>0){ f=f*x; x=x-1; } return(f); } int combination(int n,int m){ int a; a=fact(n)/(fact(m)*fact(n-m)); return(a); }
171 :
デフォルトの名無しさん :03/07/18 07:44
for (n = 0; n <= 10; n++) { for (m = 0; m <= n; m++) printf("%d ", conbination(n, m); printf("\n"); }
問題文よく読んでなかったし、無駄な処理も多すぎますね。スマソ。
質問なのですが、 node->data.key < head->data.key これをless関数で書くと、 less(key2(node),key(head))==1 と書けますが、 node->data.key < p->next->data.key はless関数で書くとどのようになりますか? それと、 head->data.key==a_key これをequal関数で書くと、 equal(key2(head),a_key)==1 と書けますが、 p->next->data.key==a_key はequal関数で書くとどのようになりますか? 教えて下さい。
less関数、equal関数ってのが何なのか良く知らないけど、 less( key2(node), key(p->next) ) == 1 equal( key2( p->next ), a_key ) == 1 でいいんじゃない?
わかりました 質問は撤回します
標準入力から文字列を読み込み、その中のアルファベットの 出現回数(文字「a」が何回、文字「b」が何回、・・・・)を計算し、 出現回数が1以上の文字について次のように表示(文字・出現回数・ グラフ)するプログラムを作成せよ。 Input string : Tokyo Osaka Nagoya N --- 1 * O --- 1 * T --- 1 * a --- 4 **** g --- 1 * k --- 2 ** o --- 3 *** s --- 1 * y --- 2 ** [ヒント1] ・ASCIIコード256種類分を表す配列変数としてcountを用意する。 ・h[i]を入力文字列の各要素の文字とすれば、count[h[j]]++ により、 文字ごとに一回現れるたびにcountを1増やす処理を行う。 ・最後に英小文字と英大文字の範囲でカウント回数と*を出力する。 [ヒント2]文字列の代入例 i=0; while ( (h[i]=getchar()) != EOF) { i++; } EOFはEnd Of File を意味し、入力ファイルの終わりの文字、すなわち Ctrl-d という文字に対応した記号である。 Ctrl-d を入力した時点で、それまでに入力した文字情報が対称になる。 お願いします
#include <stdio.h> #include <stdlib.h> void showHist(char c,int num){ int j; printf("%1c :",c); for(j=0;j<num;j++){ printf("*"); } printf("\n"); } int main(){ char h[BUFSIZ]; int count[256]={0}; int i=0,j; while ( (h[i]=getchar()) != EOF) { i++; } h[i]='\0'; for(j=0;j<i;j++) count[h[j]]++; for(i='A';i<='Z';i++){ if(count[i]!=0) showHist(i,count[i]); } for(i='a';i<='z';i++){ if(count[i]!=0) showHist(i,count[i]); } return 0; }
はじめまして♪ 何度やってもうまく作れないので、教えてください。お願いします。 よくYes/Noで選択肢を選び、あなたは〜〜ですという占いのようなものご存知でしょうか。 今、それを作ろうとしています。 もしよろしければ、作成していただけないでしょうか?
最後の文とその前の文が繋がらんな
>>184 よく〜ご存知でしょうか。
も繋がってない
186 :
デフォルトの名無しさん :03/07/18 23:33
#inlucde<stdio.h> #include<string.h> int main (void) { char buf[5]; printf("Yes/No"); scanf("%s",buf); if(!strcmp(buf,"Yes")) { printf("あなたはひきこもりです。\n"); } else if(!strcmp(buf,"No")) { printf("あなたは厨房です。\n"); } else { printf("あなたは知障です\n"); } return 0; }
>>186 Yes/Noって入れて実行したら暴走しますた
188 :
デフォルトの名無しさん :03/07/18 23:49
>>187 4文字を超えてはならない、
とマジレスしておこう。
189 :
デフォルトの名無しさん :03/07/18 23:51
int main (void) { char buf[256]; printf("Yes/No\n"); scanf("%s",buf); if(!strcmp(buf,"Yes")) printf("あなたはひきこもりです。\n"); else if(!strcmp(buf,"No")) printf("あなたは厨房です。\n"); else printf("あなたは知障です\n"); return 0; }
#include <string> #include <iostream> using namespace std; int main(){ string buf; cout << "Yes/No > "; cin >> buf; if(buf == "Yes") cout << "あなたはひきこもりです。" << endl; else if(buf == "No") cout << "あなたは厨房です。" << endl; else cout << "あなたは知障です。" << endl; return 0; }
#include <string> #include <iostream> #include <map> using namespace std; typedef pair<string, string> Pair; int main(){ Pair p[] = {Pair("Yes","ひきこもり"),Pair("No","厨房")}; map<string,string> m(p,p+sizeof(p)/sizeof(Pair)); map<string,string>::iterator it; string in,result; cout << "Yes/No > "; cin >> in; if((it = m.find(in)) == m.end()) result = "知障"; else result = it->second; cout << "あなたは" << result << "です。" << endl; return 0; }
>>183 #include <iostream>
#include <map>
#include <utility>
typedef std::pair<std::string,std::string> yesno;
typedef std::map<std::string,yesno> question;
template<class T,int I>T *eoa(T(&a)[I]){return a+I;}
const char *const startques="毎日2chを見る";
const char *data[][3]={
{startques,"一日2時間以上2chを見る","2chはおかしな人の集まりだ"},
{"一日2時間以上2chを見る","2chに書き込むことがある","2chは便所の落書き"},
{"2chはおかしな人の集まりだ","2chなど無くなればいい","2chは見ていて楽しい"},
{"2chは便所の落書き","2chは見ていて楽しい","モナーはかわいい"},
{"2chなど無くなればいい","さては2chで嫌な事がありましたね?","モナーはかわいい"},
{"2chに書き込むことがある","煽りあいは楽しい","2chは見ていて楽しい"},
{"2chは見ていて楽しい","あなたは平均的な2chねらーです。","あなたはまだ2chの素晴しさに気付いていません。"},
{"モナーはかわいい","あなたの世界は色鮮やかなことでしょう。","憂鬱な生活を送っていますね。"},
{"煽りあいは楽しい","コテハンがある","普通の掲示板利用者です。"},
{"コテハンがある","あなたは2ch中毒です。","娯楽をかなり2chに依存していますね。"}
};
main(){
question ques ;
for(const char *const (*ci)[3]=data;ci!=eoa(data);ci++)ques[**ci]=yesno((*ci)[1],(*ci)[2]);
std::cout << "yes/noで答えてね" << std::endl;
std::string current=startques;
do{
std::string ans;std::cout << current << ">";std::cin >> ans;
if(ans.find("n")!=ans.npos||ans.find("N")!=ans.npos) current=ques[current].second;
else current=ques[current].first;
}while(ques.find(current)!=ques.end());
std::cout << "\n" << current << std::endl;
}
195 :
デフォルトの名無しさん :03/07/19 12:06
Hallo World
#include <stdio.h> int main(){puts("晴郎ワールド"); return 0;}
197 :
デフォルトの名無しさん :03/07/19 12:45
シベリア超特急age
世界の車窓から。 だーーーーい好きぃーーーーーーーーーーー♥
世界の社(会の)窓から。
200 :
デフォルトの名無しさん :03/07/19 13:02
マインスイーパーのボタンを押したときの、周りに爆弾がなかったときに いっきにボタンが消える処理をキューを使ってやるにはどうすれば?
Q?
>>200 質問が曖昧過ぎます。具体的にどうぞ。
>>201 Q(que)じゃなくて、queueでは?
マインスイーパーのボタンを押したときの、周りに爆弾がなかったときに いっきにボタンが消える処理するクラス、Q をつくれ。
204 :
デフォルトの名無しさん :03/07/19 13:18
すいません。表現があいまいでしたね。 queueです。よろしくお願いします
すいません。表現があいまいでしたね。 cueです。よろしくお願いします
山崎と広告Uzeeeeeeeeeeeeeeeeeeeee!!!!
すいません。表現があいまいでしたね。 sphereです。よろしくお願いします
>>200 struct Tile_tag {
unsigned int opened;
unsigned int count;
unsigned int exist;
} Tile;
const static int hoge[] = { -1, 0, 1 };
void OpenTile( Tile* tileArray, int x, int y ) {
Tile* t= &tileArray[y * WIDTH + x];
if( ! t -> opened && t -> count == 0 && ! t -> exist ) {
t -> opened = 1;
for( i = 0; i < 9; i++ )
OpenTile( tileArray, x + hoge[i%3], y + hoge[i/3] );
}
}
キューは使ってないけど、大体こんな感じの処理になるかと。
(疑似コードだと思ってみて下さい)
あ、そうか、ここで再帰を使うのが嫌だったんだ。 で、キューな訳ね。
1. 開きたいタイルの座標を、キューに入れる。 2. キューからデータを一つポップし、それを操作対象にする。 3. タイルを開く関数をよぶ。引数には、さっきポップした操作対象と、キューへのポインタを設定。 4. タイルを開く関数では、タイルを開くのに成功し、 タイルの周りの爆弾の数が0だったら、タイルの周辺をキューにPushする。 5. 2に戻る こんな感じかな。
スルーされてる(つД`)
>>213 長いな。
最初の方しかみなかったのでよくわかんないが、lifeクラスはリストじゃなさそう。
lifeのメンバに、「lifeへのポインタ」は無いでしょ?
215 :
デフォルトの名無しさん :03/07/19 21:15
ブラウン運動のシミュレーションプログラムが作れる人います?
いません
オレニマカセロ!
218 :
デフォルトの名無しさん :03/07/19 21:34
/* _list, list, cons, car, cdrの定義をここに挿入 */ struct _list{ int car; struct _list* cdr; }typedef struct _list* list; list cons (int x, list xs){ list ret = (list)malloc(sizeof(struct _list)); ret->car = x; ret->cdr = xs; return ret; } int car(list xs){ return xs->car; } list cdr(list xs){ return xs->cdr; } /* insertの定義をここに挿入 */ (ここに入れるべきプログラムを教えてください。 また、新しい要素(insertの第1引数)をcar成分に持つ ひとつのconsセル以外は新しいconsセルを作らず、 既存の consセルを破壊的に書き換えるバージョンも定義してください。) int main(int argc, char** argv) { list xs = cons(1, cons(4, cons(7, cons(10, NULL)))); xs = insert(atoi(argv[1]), xs); printf("result: ") for(; xs; xs=cdr(xs)) { printf("%d ", car(xs)); } putchar('\n'); }
219 :
デフォルトの名無しさん :03/07/19 21:38
名前:「マツダ ユウイチ」松田雄一
http://lv3.lib.net/up/img-box/img20030713070131.jpg 年齢:12歳(確定)
身長:約165cm(確定)
住所:長崎市千歳町5番26号 「チトセピア」1201(確定)
両親:父親は調理師、母親は去年まで専業主婦今年からパート(確定)
兄弟:一人っ子(確定)
学校:長崎市立西浦上中学校(確定)、小学校の時には私立→公立に転校(精道小学校?)
学年:中学1年(確定)
所属クラブ:小学校時代パソコンクラブ、現在中学校では無所属(確定)
犯罪歴:過去数回に渡り近隣で児童わいせつなどの事件を起こす。
また今回の事件現場と同じ立体駐車場で、
以前に犬を投げ落とし骨折させていた模様。(同一人物とほぼ確定)
cdrを書き換える。
221 :
デフォルトの名無しさん :03/07/19 21:39
3つ教えてほしいことがあるのですが、 1.演算レジスタの説明 2.ブートストラッパの役割 3.補助記憶から目的プログラムを主記憶にコピーするシステムプログラムの名称 この3つがわからないので、どなたか知っている方は教えていただけないでしょうか
1は漠然としすぎてると思うけど。
>>222 宿題なんじゃない?だったらすれ違いじゃない気がする。
板違いではある
へー
Cの宿題ではないと思う。
そだね。
ttp://yougo.ascii24.com/gh/03/000386.html 「pull oneself up by one's own bootstraps:
自力で進む、自力で向上する」という口語から生まれた言葉で、コンピュータを起動する過程を指す。
たとえばPC互換機では、電源投入時にはまずシステムROM内の小さなコードが実行され、
各種デバイスの初期化が行なわれる。続いてこのコードは、ディスク内にあるOSの初期コードに
制御を移す。このように、より高レベルなソフトウェアを実行するために、段階を追って初期化を
行なうことをブートストラップという。
ローダーとはどう違うんだ?
名前。
あ、配列をつかってのライフゲームは前回までの宿題で完成しているます
上下右左のポインタでつないで、 配列でhoge[x-1][y]とかやるかわりに ポインタでアクセスする。
ttp://mukun_mmg.tripod.co.jp/mmg/bncpp/10/174.html みたいな書き方で言うと
□→□→□→□→□→
■ ■ ■ ■ ■
↓ ↓ ↓ ↓ ↓
□→□→□→□→□→
■ ■ ■ ■ ■
↓ ↓ ↓ ↓ ↓
□→□→□→□→□→
■ ■ ■ ■ ■ (□:ポインタ)
↓ ↓ ↓ ↓ ↓ (■:データ)
って感じでしょうか?
そうするとデータに当たるのはそのセルが生きているか死んでいるか?
>生きているセルの縦横の位置をリストの要素として持つ
ってのはどういう事なんでしょう(´・ω・`)?
各要素が座標データを持っているってことじゃねーの
生きてるセルの座標データをまた別のリストに持つとか? なんでそんなことするのかわからんけど
>>234 の図みたいな座標軸のリストは無しで、
生きてるCellのインスタンスだけつなげてリストにしろって事だろ。
Cellのメンバはx座標とy座標。
でも隣の座標の状態を調べるだけでも全走査するんだろうか…
全走査するんじゃない? 二分木リストとかにするんだろうけど。
struct cell_t { struct cell_t* tonari[8]; int live; }; とかじゃねーの?
じゃあ □→□→□→□→□→ ■ ■ ■ ■ ■ で、データが座標、生きてるセルができるたび追加して死んだら削除すればよいですか? 周り数えたり、死んでるセルについても順番に判定していかないといけないこと考えると配列使うのに比べてすっごい無駄な気がするです・・
全部のセルを持っとくとn次元では地図の一辺のn乗に比例するメモリがいる。 いっぽう、生きてるやつだけ持っておけばその時点で生きてるやつの個数に比例する メモリしかいらない。Conwayのルールだと全部生きてることは初期値以外あり得ない。 ところで各セルは自分の座標だけ知ってればよいから、2次元なら typedef size_t Index; // 座標を表すのに必要な整数型にする struct cell_t { Index x,y; char next_state; }; で良いと思う。こうするとsizeof(Index)を小さくとればより省メモリ。
>>242 おおそうか。なるほどな。
しかし
>>241 の言うことも正しい気がするな。
セルの数がn個、平均個体数がmだとすると、
メモリ
配列:O(n)
リスト:0(m)
計算速度
配列:O(n)
リスト:O(m^2)
ただし n >> m
って所か。
n > m^2 なら、リストの方が有利かな。
ただ配列の方が定数係数少なそうだから...
実際やってみて、メモリ使用量とか実行速度とか
計ってみないと、なんとも言えないか。
>>243 ライフゲームとチューリング機械が等価だという話があって、
グライダーを使ってワイヤーとゲートを構成するんだけど、
それで少しでも意味のあるTMを組んで実際に動かそうとすると、
セルは疎なのに回路(グライダーの経路)を張るのに馬鹿デカい空間が必要で、
空間全体を保持しようとすれば二次記憶を要することになり、
生きたセルのみを管理する場合と比べて比例係数はむしろ大きい、
とかいう昔話もある。
それとランダムな初期値に関する平均コストの解析は簡単ではないと思われ。
有限の空間では必ず周期運動に落ちるが、空間サイズの関数としての
平均セル数などは知られていないはず。Collatz problem に似た話。
読み筋は Wolfram の class IV や Langton の edge of chaos など。
要するに効率は初期条件に禿しく依存。
>>242 メモリをケチるなら next_state は生死の1ビットにcharを使ってて勿体ないので、
ビットベクトルを別に持ちセルには座標だけ持たせるのが良い。
また速度が欲しければ、セル管理に単純なリストだけでなくハッシュを併用する。
知り合いが高速なConway'sLife作ってたな。 ソース見てみるか。
生きているセルを双方向リストでもって、順番になるようにする。 配列を確保して生きているセルのポインタをいれる。 順番に上下左右のセルがあれば1足すし、無ければ新たにセルをつくる。 双方向にしとけば走査は一回につき一辺の長さの2倍で済む。 俺の考えたのはこんなの。
>順番に上下左右のセルがあれば1足すし、無ければ新たにセルをつくる。 どういう意味?
/* insertの定義(問の答)をここに挿入 */ int insert(int x, list xs){ if(xs == NULL || x < (xs->car)){ return cons(x, xs); }else{ return cons (car(xs),insert(x,cdr(xs))); } } こんな感じでいいのでしょうか?
配列に入れたポインタを順番に実行する。 そのセルの上左と下右のセルを探す。 セルがあれば周りのセルの数を示す数値を1増やす。 なければ作る。
[0,1]の一様分布に従う互いに独立な2つの乱数an,bnを生成せよ。 お願いします
anは、配列か?関数か?どんな宣言をする?
1)以下の式を中央差分を使って計算するプログラムを作成してください。df(x)/dxを 計算する。 f(x)=ax*x+bx+c 係数aは10、bは5、cは2とします。答えは、2ax+bになるはずなので数値的に微分した 結果と解析的に求めた値を比べて、計算が正しく行われていることを示してください。 計算範囲は0から2までとします。分割数は各自決めてください。(十分正確に計算できるように) 2) 台形公式を使って、1)の式を積分計算してください。積分範囲は0から2とします。 解析的な解も計算して、数値計算結果を比較してください。a、b、cの値は1)と同様とします。 以上のプログラムと実行結果をお願いいたします。
>>250 とか
>>252 みたいな数学とかが絡んでくる問題って、
難しいよなぁ。
何をどうすればいいのかさっぱり判らん。
>>250 乱数の種が違ったら、それは「独立した乱数列」と認めるのかえ?
だったらちょー楽勝だが。
The C Language* *The C Language e*The C Languag ge*The C Langua age*The C Langu uage*The C Lang guage*The C Lan nguage*The C La anguage*The C L Language*The C 規則性がある。これに着目してプログラムを作成せよ。 for文でお願いします
#include <stdio.h> int main(void) { const char string[] = "The C Language*"; int i; for (i = sizeof string - 1; i >= 6; --i) { printf("%s", string + i); printf("%.*s\n", i, string); } return 0; }
もちろんfprintfもです。 printfと名の付くものは禁止なんです。
>>257 後から条件を付け足す奴は
嫌われるっと。
#include <stdio.h> int main(void) { const char* strings[] = { "The C Language*", "*The C Language", "e*The C Languag", "ge*The C Langua", "age*The C Langu", "uage*The C Lang", "guage*The C Lan", "nguage*The C La", "anguage*The C L", "Language*The C ", }; int i; for (i = 0; i < sizeof strings / sizeof strings[0]; ++i) { puts(strings[i]); } return 0; }
そして嫌われるとこんな答えが返ってきますよっと。
>>254 struct random_array_t {
int* array;
int size;
};
struct random_array_t* CreateRandam( int n, int seed ) {
int i;
struct random_array_t* r = malloc( sizeof( struct random_array_t ) );
r -> array = calloc( size = n, sizeof( int ) );
srand( seed );
for( i = 0; i < n; i++ )
r -> array[i] = rand();
return r;
}
main () {
struct random_array_t* An = CreateRandom( 100, 1 );
struct random_array_t* Bn = CreateRandom( 100, 2 );
}
こんなもんでいいかな。
コンパイルしてないので、修正は任せた。
>>255 #include <iostream>
#include <string>
int main(void)
{
using namespace std;
string str("The C Language*");
int i, len = str.length();
for (i = len; i >= 0; --i)
cout << str.substr(i, len - i) << str.substr(0, i) << endl;
return 0;
}
>>264 ありがとうございます。バカな僕を助けてください。お願いします
double f(double); double sekibun(double, double); int a = 10, b = 5, c = 2; int main() { int i, n; double x, h, s, aa, bb; x = 0.5; h = 0.05; printf("f(x) = %d*x*x + %d*x + %d のとき\n", a, b, c); printf("(1)解析解 f'(%lf) = %lf\n", x, 2*a*x+b); printf(" 数値解 f'(%lf) = %lf\n", x, (f(x-2*h)-8*f(x-h)+8*f(x+h)-f(x+2*h))/(12*h)); aa = 2.0; bb = 0.0; printf("(2)解析解 S = %lf\n", sekibun(aa, bb)); n = 4000; h = (aa-bb) / n; x = 0.0; s = 0.0; for(i = 0; i < n; i++){ s += h*(f(x) + f(x+h))/2; x += h; } printf(" 数値解 S = %lf\n", s); return 0; } double f(double x){ return a*x*x+b*x+c; } double sekibun(double p, double q){ return (a*p*p*p/3+b*p*p/2+c*p)-(a*q*q*q/3+b*q*q/2+c*q); }
>252 汚いコードだけど勘弁。教科書片手に見ればそのままだと思う。 数値は適当にいじったりして動かして。
>>255 #include <stdio.h>
#include <string.h>
#define REP 10
int main()
{
char lang[]="The C Language*",buf[(sizeof(lang)-1)*REP+1]="";
int i;
for(i=0;i<REP;i++)strcat(buf,lang);
for(i=0;i<(sizeof(lang)-2)*REP;i++)
{
if(i%(sizeof(lang)-2)==0&&i)
{
fputc(buf[i],stdout);
fputc('\n',stdout);
}
fputc(buf[i],stdout);
}
return 0;
}
>>255 #include <iostream>
#include <string>
#include <algorithm>
main(){
std::string s="The C++ Language*";
for(int i=0;i<s.size();i++){
std::cout << s << std::endl;
std::rotate(s.begin(),s.end()-1,s.end());
}
}
>>255 途中で方向性変えてたの忘れてたので、それまでの無駄を排除
#include <stdio.h>
#define REP 10
int main()
{
char lang[]="The C Language*";
int i;
for(i=0;i<(sizeof(lang)-2)*REP;i++)
{
if(i%(sizeof(lang)-2)==0&&i)
{
fputc(lang[i%(sizeof(lang)-1)],stdout);
fputc('\n',stdout);
}
fputc(lang[i%(sizeof(lang)-1)],stdout);
}
return 0;
}
f(x)=exp(1.37*x)とする。 (1)x=0,0.1,0.2,0.3,0.4に対するf(x)の値を計算により求めて、 xとf(x)の表を作成せよ。 (2) xを二つの領域(0<=x=<0.2 , 0,2<=x=<0.4)にわけ、それぞれの領域で ラグランジュ補間を行い、0から0,4までの間で0.02きざみで、f(x) の値、 補間による近似値 g(x) 及び、 f(x)-g(x) の値を表にして示せ。 (3) (2)で得られた21個のxとf(x)のデーターに対し、最小二乗法による理論式 y=A*x+B の最適のA,Bの値を推理せよ。 (4) exp(1.37*x)テイラー展開して、第二項までを取った直線の式を y=A'*x+B'とするとき、(3)で得られた y=A*x+Bに対する N E(A,B)= (yi-A*xi-B)^2 i=1 と、y=A'*x+Bに対する N E(A',B')= (yi-A'*xi-B')^2 i=1 を求め、E(A,B)<=E(A',B')を示せ・・・。 このプログラムのアルゴリズムとフローチャートを教えてください。
>>183 で質問させていただいたなっちです。答えていただいた皆様、ありがとうございました。 しかし、条件を書き忘れてしまいました・・・ごめんなさい。Yes/Noで進んでくのは同じなのですが、
設問や結果を別ファイルから呼び出さなくてはならないそうなのです。
例>
性格診断〜♪
10
質問1 1 3
質問2 2 5
結果1 0 0
質問1 7 4
質問2 8 5
質問3 6 9
結果2 0 0
結果3 0 0
結果4 0 0
以上のようなファイルを呼び出します。 1行目は、プログラムタイトル。2行目は設問数。
また以下のように↓
質問1 0
質問2 1
結果1 2
質問3 3
質問4 4
質問5 5
結果2 6
結果3 7
結果4 8
結果5 9
と番号を振り、質問のYes/Noに応じ プログラム末尾の2つの番号の設問に飛ぶようになっています。
そして答えは0 0としています。 たびたび申し訳ありませんが、ご協力お願いします。
276 :
デフォルトの名無しさん :03/07/21 05:43
設問 要素数がnである配列aに対して、a[idx]にxを挿入する関数 void aryins( int a[], int n, int idx, int x); を作成せよ。 挿入に伴ってa[idx], a[idx + 1], ... , a[n - 2]を a[idx + 1], a[idx + 2], ... , a[n - 1]にずらすこと。 って問題をWebで見つけたのですが解答が無くて困っています。 よろしくお願いします。
277 :
デフォルトの名無しさん :03/07/21 06:00
1、新規テキストファイルを作成し、 そこにscanfで取り込んだ文字列を書き込む。 2、既にあるファイルにscanfで取り込んだ文字列を付け足す。 このとき、毎回改行して付け足すのと、付け足さないののプログラムの 変更点を教えて下さい。 すみません。宿題というか、少し予習なんですが。
>>277 1、ファイルの作成はfopenを書き込みモードで呼ぶことでできる。
2、fopenのモードを"a"とすることで追加書き込みモードとなる。
末尾に改行をつけて書き込むか、つけないで書き込むかの違い。
280 :
デフォルトの名無しさん :03/07/21 09:44
LPCREATESTRUCT型って一体どんな型ですか?
ヘッダファイルの中を探せ。
独立した2つの正規乱数の作り方教えてくださ〜い
283 :
デフォルトの名無しさん :03/07/21 10:20
>>276 問題に無理が有るな。
a[] の要素数が増えるわけだから a[] の領域再確保が必要になるが
指示された関数IFでは無理だ。
void aryins( int** a, int n, int idx, int x);
とすべきだな。
>>276 void aryins( int a[], int n, int idx, int x)
{
if (idx < 0 || idx > n - 1) {
return;
}
#ifdef USE_MEMCPY
memcpy(&a[idx + 1], &a[idx], sizeof(int) * (n - 1 - idx));
#else
for (int ic = n - 1; ic > idx; ic--) {
a[ic] = a[ic - 1];
}
#endif
a[idx] = x;
}
>>283 設問を見る限り、要素数が増えることを考慮する必要はなさそうに見えるが?
>>283 処で関数IFってなんだ?
まさか、Interfaceの略じゃないだろうし、一般的な言葉を使ってくれ。
>>260 typedef struct {
size_t size;
unsigned int seed;
double* array;
} rand_array_t;
rand_array_t* RandArrayCreate( size_t size, unsigned int seed ) {
size_t i;
double* d;
rand_array_t* this = (rand_array_t*)calloc( 1, sizeof( rand_array_t ) );
this -> array = d = (double*)calloc( this->size=size, sizeof(double) );
srand( this -> seed = seed );
for( i = 0; i < size; i++ )
*(d++) = (double)rand() / RAND_MAX;
return this;
}
void RandArrayDelete( rand_array_t* this ) {
free( this -> array );
free( this );
}
void RandArrayPrint( const rand_array_t* this ) {
double* d = this -> array;
size_t i, size = this -> size;
for( i = 0; i < size; i++ )
printf("[%d] : %f\n", i, *(d++) );
}
void main() {
rand_array_t* An = RandArrayCreate( 10, 1 ), * Bn = RandArrayCreate( 10, 2 );
puts("----- An -----"); RandArrayPrint( An );
puts("----- Bn -----"); RandArrayPrint( Bn );
RandArrayDelete( An ); RandArrayDelete( Bn );
}
>>283 末尾の要素( a[n-1] )は捨てるんじゃないの?
a[n-2]をa[n-1]に移す、とは書いてあるけど、a[ n-1 ]の扱いを
敢えて書いてないから....
int w = 0, r = 0;
while( r < n ) {
if( w == idx )
a[w++] = x;
a[w++] = a[r++];
}
こんなかんじかな。未コンパイル。
未コンパイルだとことごとく間違える俺。 これだと、idx以降の要素が全部xになっちゃう。
>>289 既に答えの出ているものに敢えて挑戦するのは勝手だし、
恥を晒すのも勝手だが、
見苦しいとは思わんか?
>>285 模範解答とさせていただきます。
擬似命令の部分が理解出来ないので、ちょっと調べてきます。
皆さん、ご回答ありがとうございました。勉強になりました。
>>250 >>282 線形合同法やM系列などの一様乱数生成器の状態をファイルスコープの
static変数で保持し、生成してからそれぞれ必要な分布に加工。
でも、大抵の乱数生成アルゴリズムは高次元分布もランダムだから
一つの乱数系列を交互に使っても独立性の検定には合格するんだけどね。
実際M系列は本質的には一つの乱数系列だし。
>>285 memcpyじゃなくmemmove使え
領域が重なるから。
If copying takes place between objects that overlap, the behavior is undefined. なるほろ
これは独立擬似乱数ですか? #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i; srand( time( NULL ) ); for( i = 0; i < 8; i++ ) printf("%d %d\n", rand(),rand() ); return 0; }
検証してみては?
そうだよな。乱数生成器の善し悪しは一概にいえるもんではない。
300 :
デフォルトの名無しさん :03/07/21 19:29
(1)円の面積を求める関数と円周を求める関数を作成せよ。 引数はdouble型で半径とし、戻り値を面積または円周の長さとせよ。 (2) (1)で作成した2つの関数を用いて半径1.72の円の面積と、 円周の長さを計算してそれを表示するプログラムを作成せよ。 よろしくお願いします。
301 :
デフォルトの名無しさん :03/07/21 19:35
アホか?
禿同
これはモンテカルロ法で求めるとか 数値積分で求めるとかそういうのなんだろ?
304 :
デフォルトの名無しさん :03/07/21 19:43
5名分3教科のテストの結果が5×3の配列に入ってる時、 各教科ごとに点数の高い順に並び替えた配列を出力する関数とmain関数を作成せよ。 テストの結果(英語 数学 国語) 50 65 45、 77 80 90、 30 40 50、 75 92 80、 65 69 90 レベルの低い問題かもしれませんがお願いします。
305 :
デフォルトの名無しさん :03/07/21 19:45
出力の形式はどうするの。
英語 77,75,65,... 数学 92,80,69,... 国語 90,90,80,... こんな形でお願いします。
307 :
デフォルトの名無しさん :03/07/21 20:24
かれこれ数時間やってお手上げなのでお願いします・・・。 a,b,cを全て実数型の関数であるとする。 以下の三個の数学の式で表される値をプログラム言語の表記法で式として 計算し、それぞれ順に変数x,y,zにそれぞれ代入するプログラム言語を書きなさい。 1.a-3b-5c-2ab 2.((a-2bc)/(a+6c-2))-((5-2c)/(3+6b)) 3.(a+2)/(4-(6c-3)/(7b+a)) です。1問だけでもいいのでお願いします・・・。 言語はC,VB,Delphiのいずれかでお願いします。
>>307 in C
x = a()-3*b()-5*c()-2*a()*b();
y = ((a-2*b()*c())/(a()+6*c()-2))-((5-2*c())/(3+6*b()));
z = (a()+2)/(4-(6*c()-3)/(7*b()+a()));
>>305 #include <stdio.h>
#include <stdlib.h>
int intcmp(const void *a, const void *b){return *(int*)b-*(int*)a;}
int
main(){
int i, j, tmp[5];
char subject[3][5] = {"英語", "数学", "国語"}; /* assumed 2byte/kanji */
int score[5][3] = {{50,65,45},{77,80,90},{30,40,50},{75,92,80},{65,69,90}};
for (j=0; j<3; j++) {
printf("%s ", subject[j]);
for(i=0; i<5; i++) tmp[i] = score[i][j];
qsort(tmp, 5, sizeof(int), intcmp);
for(i=0; i<5; i++) printf("%d%s", tmp[i], i==4 ? "\n" : ",");
}
return 0;
}
>>308 レス感謝です
a、b、cをそれぞれx,y,zにおきかえて問題ごとに3つの答えを出したいんです。
お願いします
>>307 よく分からんのだが、a,b,c は"関数"なの?"変数"じゃなくて?
関数ならどんな関数か分からないことには・・・
311の a,b,c を x,y,z に置き換えて・・・ってのも訳分からんのだけど。連立?
1.a-3b-5c-2ab = x
2.((a-2bc)/(a+6c-2))-((5-2c)/(3+6b)) = y
3.(a+2)/(4-(6c-3)/(7b+a)) = z
って事じゃなくて?
>>312 すみません,変数のことです。
式の中のa,b,cの値を計算させて順にx,y,zに代入して答えを表示したいんです。
式が3つなので3つプログラムを作りたいんです。
>>310 ありがとうございます!!助かりました。
315 :
デフォルトの名無しさん :03/07/21 21:54
形の違う魔法陣を三つぐらい並べて 書くプログラムってどうやって作るんですか?
踊りながら
しらみつぶし
319 :
デフォルトの名無しさん :03/07/21 22:24
>>1 #include <stdio.h>
int main(){
int a,b,c;
printf("自然数入力して");
scanf("%d",&c);
for(a=0;a<=c;a++){
for(b=0;b<=a;b++){
printf("☆");
}
printf("\n");
}
return 0;
}
先日リスト構造をつかったライフゲームについて質問した者です、 今作成中なんですが 生きているセルの縦横の位置をリストの要素として持つリストは↓みたいな感じでOKですか? class list{ int x, y; list* next; list* back; public: list(int,int); void insert(int,int); void display(); list* search(int,int); int around_search(int,int); int delete(living*); };
アハァ見にくくなった…ちょっと変だし class list{ int x, y; list* next; list* back; public: list(int,int); void insert(int,int); void display(); list* search(int,int); int around_search(int,int); int delete(list*); }; です
メモリ機能のついた電卓を作成せよ。 入力例 Input:10+5 15 Input:a=2*3 6 Input:bc=a+8 14 Input:a 6 Input:. (.は終了の意味でつ) % こんな感じでおながいします。
/* 入力する部分 配列operandと配列operatorに入力されたオペランドとオペレータを仕舞う。 '('が入力されたら0を返す。それ以外は1を返す。*/ #include <stdio.h> #include <string.h> #define MAX_OPERAND 2 static char OPERAND_SET[] = "+-*/"; int input(int* operand, char* operator) { char buf[256]; char* token; int i; printf("Input:"); fgets(buf, 255, stdin); if(buf[0] == '(') { return 0; } token = strtok(buf, OPERAND_SET); i = 0; while(token != NULL && i < MAX_OPERAND) { sscanf(token, "%d", &operand[i]); strncpy(&operator[i], token+1, 1); i++; token = strtok(buf, "+-*/"); } return 1; }
ごめんなさい。貼ってから気付いたけど、こんな関数使わない方がいい気がしてきました。
>>301-303 >>300 は、戻り値がメモリが許す限り、いくらでも扱える多倍長型へのポインタで
多倍長型、及び、その表示の実装と、πを高速に求める方法が要点なのでは?
>>324 字句解析と構文解析を行なうのが正統。以下は入力例のみ動くインチキ。
#include <stdio.h>
#include <string.h>
unsigned int vi(char *v){
unsigned int i = 0; while(*v != '\0') i+=(*v++ - 'a')*26; return i; }
double compute(double *v, double x, char o, double y){
*v = o == '+' ? x+y : o == '-' ? x-y : o == '*' ? x*y : x/y; return *v; }
int main(void){
char op,buf[BUFSIZ],v[BUFSIZ],v1[BUFSIZ]; double x,y,z,t[17576];
while(!feof(stdin)) {
fprintf(stderr, "Input: ");
fgets(buf,BUFSIZ,stdin);
if (4 == sscanf(buf, "%3[a-z] = %3[a-z] %1[-+*/] %lf", v,v1,&op,&y))
fprintf(stderr, "\t%g\n", compute(&t[vi(v)], t[vi(v1)], op, y));
else if (4 == sscanf(buf, "%3[a-z] = %lf %1[-+*/] %lf", v, &x, &op, &y))
fprintf(stderr, "\t%g\n", compute(&t[vi(v)], x, op, y));
else if (3 == sscanf(buf, "%3[a-z] %1[-+*/] %lf", v1, &op, &y))
fprintf(stderr, "\t%g\n", compute(&z, t[vi(v1)], op, y));
else if (3 == sscanf(buf, "%lf %1[-+*/] %lf", &x, &op, &y))
fprintf(stderr, "\t%g\n", compute(&z, x, op, y));
else if (1 == sscanf(buf, "%3[a-z]", v))
fprintf(stderr, "\t%g\n", t[vi(v)]);
else if (buf[0] == '.') return 0;
else fprintf(stderr, "ERROR\n");
}
return 0;
}
文字列型の'30,2'といった物から整数型の30と2を得るにはどのようにすればいいのでしょうか?
sscanf
ありがとうございます、調べて試してみたところ >'string' 型は 'const char *' 型に変換できない というエラーが出たのですがstring型ではできないのでしょうか?
const char* cs; cs = str.c_str(); sscanf(cs, "%d,%d", &x, &y); でできました…が、何故こうなるのか(;´Д`)
std::stringはoperator char* ()関数がないから。 要するにconst char*へのポインターを知りえるc_str()しかないわけ。 また、たいていうまくいく方法として(おすすめはしないけど) sscanf(&str[0], "%d,%d", &x, &y); こんなのもある。
>sscanf(cs, "%d,%d", &x, &y); istringstream使おうよ
336 :
デフォルトの名無しさん :03/07/22 10:32
大文字と小文字を区別せずに文字列の比較を行う関数、strcasecmpを作成せよ。 プロトタイプは以下のものとし、戻り値は第一引数が第二引数よりも[小さい|同じ|大きい]ならば[負|0|正]とせよ。 int strcasecmp(const char *s1,const char *s2); お願いします。
#include <ctype.h> typedef unsigned char u_char; int strcasecmp(s1, s2) const char *s1, *s2; { register const u_char *us1 = (const u_char *)s1, *us2 = (const u_char *)s2; while (tolower(*us1) == tolower(*us2++)) if (*us1++ == '\0') return (0); return (tolower(*us1) - tolower(*--us2)); }
#include <ctype.h> int strcasecmp (s1, s2) const char *s1; const char *s2; { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; int result; if (p1 == p2) return 0; while ((result = tolower (*p1) - tolower (*p2++)) == 0) if (*p1++ == '\0') break; return result; }
#include <ctype.h> int strcasecmp (s1, s2) const char *s1; const char *s2; { while (*s1 != '\0' && tolower(*s1) == tolower(*s2)) { s1++; s2++; } return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2); }
>>336 では聞くが、文字列が小さいとは何だ。
#所謂辞書順か文字コード順か、長さが違う場合の取り扱いはどうか・・・
341 :
デフォルトの名無しさん :03/07/22 12:30
>>340 同じつっこみをLinuxのstrcmpのマニュアルにもしてあげてください。
>>335 sscanf();
よりも
istringstream
の方がいいのですか?
問3はともかく、問2はそれでいいのでは?
348 :
デフォルトの名無しさん :03/07/22 16:37
ファイル出力のところ(60行目) wp->next → × wp → ○ で解決しました お騒がせしました
350 :
デフォルトの名無しさん :03/07/22 17:11
問3は上書きしてるね。 それより外部変数(list_i)は初期化されてないけど0初期化が保障 されてたっけ? 未初期化変数を使ったこと無いのでよう解らんが…
351 :
デフォルトの名無しさん :03/07/22 17:24
353 :
バカのき極み :03/07/22 18:31
an、bnは[0,1]の独立正規乱数 Θn=√(-2lnan)cos(2πbn) Φn=√(-2lnan)sin(2πbn) Pn=√(3/2αΔ)*Θn+√(1/2αΔ)*Φn Qn=√(2/3αΔ^3)* Θn u(nΔ+Δ)=u(nΔ)-u(nΔ)Δ+u(nΔ)Δ^2/2+Pn-Qn X(nΔ+Δ)=x(nΔ)+n(nΔ)Δ-u(nΔ)Δ^2/2+Qn ti,…,tN(Nは最低100ぐらい)を間隔20Δでとって φ(t)=(1/N)Σ(i=0→N)u(t+ti)u(ti)とする。 十分大きいtでのxの傾きと、∫(0→∞)φ(t)dtの値を求めよ。 一応、下ぐらいまで出来ましたが、かなり間違ってると思います。脳がおかしくなってます。助けてください。
354 :
バカのき極み :03/07/22 18:33
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> #define RAND() (double)rand()/((double)RAND_MAX+1.0 ) #define deruta 0.1 #define pai 3.14 int main(void) { double u[20001];double U[20001]; long int i; double a,b,sita,fai,P,Q,x; P,Q=0;x=0;u[0]=0,U[19899]=0; srand((unsigned int)time(NULL)); for(i=1;i<=20000;i++) { a=rand()/(RAND_MAX+1.0); b=rand()/(RAND_MAX+1.0); sita=sqrt(-2*log(a))*cos(2*pai*b); fai=sqrt(-2*log(a))*sin(2*pai*b); P=sqrt(1.5*deruta)*sita+sqrt(0.5*deruta)*fai; Q=sqrt(0.5*deruta*deruta*deruta)*sita; u[i]=u[i-1]-u[i-1]*deruta+u[i-1]*deruta*deruta*0.5+P-Q; x+=u[i-1]*deruta-u[i-1]*deruta*deruta*0.5+Q; if(i<19000||i%20) ; else U[i]=U[i-1]+u[i]*u[i-500]; if(i>19900) printf("t=%f x=%f\n",i*deruta,pow(x,2)); } while(10000<=i&&i<=20000) {U[i]=deruta*U[i-1]/i;} printf("%f\n",U[20000]); return 0; }
正規乱数?一様乱数?
356 :
バカのき極み :03/07/22 19:30
オリジナルの文字列暗号化、復元関数きぼん
オリジナルの文字列ってなんだ?
暗号化アルゴリズムを1から作れってことだろ
暗号化スレいきゃいいのに
いまさら素人が作ったところで何かの暗号アルゴリズムと同等にしかならんよ
>文字列型の"30,2"といった物から整数型の30と2を得るにはどのようにすればいいのでしょうか? について、sscanfと言われ調べて ------------------------- string str = "30,2"; int x, y; const char* cs; cs = str.c_str(); sscanf(cs, "%d,%d", &x, &y); ------------------------- でできたのですが、istringstream使おうよと言われまた調べて ------------------------- string str = "30,2"; int x, y; char c; istringstream ss(str); ss >> x >> c >> y; ------------------------- を作りました。 どちらでも正しく動作するのですが、この場合どちらが適切なんでしょうか?
下の方がC++っぽい
>>362 前者は区切りが','である必要があるが後者はそうではない。
その辺りで使い分ければいいのでは?
365 :
デフォルトの名無しさん :03/07/22 22:38
366 :
バカのき極み :03/07/22 23:14
誰か・・・ #include<stdio.h> include<stdlib.h> #include<math.h> #include<time.h> #define RAND() (double)rand()/((double)RAND_MAX+1.0 ) #define deruta 0.1 #define pai 3.14 int main(void) { double u[200001]; double U[20001]; double A[20001]; long i,j; double a,b,sita,fai,P,Q,x; P,Q=0;x=0;u[0]=0,U[500]=0;A[500]=0; srand((unsigned int)time(NULL)); for(i=1;i<=20000;i++) { a=rand()/(RAND_MAX+1.0); b=rand()/(RAND_MAX+1.0); sita=sqrt(-2*log(a))*cos(2*pai*b); fai=sqrt(-2*log(a))*sin(2*pai*b); P=sqrt(1.5*deruta)*sita+sqrt(0.5*deruta)*fai; Q=sqrt(0.5*deruta*deruta*deruta)*sita; u[i]=u[i-1]-u[i-1]*deruta+u[i-1]*deruta*deruta*0.5+P-Q; x+=u[i-1]*deruta-u[i-1]*deruta*deruta*0.5+Q; if(i<1000||i%20) ; else U[i]=U[i-1]+u[i]*u[i-500]; if(i>19900) printf("t=%f x=%f U[%d]=%f \n",i*deruta,pow(x,2),i,u[i]); } for(j=1000;j<=20000;j++) {A[j]=A[j-1]+deruta*U[j-1]/(j-999);} printf("D=%f\n",A[20000]); return 0; }
367 :
バカのき極み :03/07/22 23:15
353を・・・
このスレは数値計算の宿題には反応がにぶいよ。 根気よくやればできる。 自分でがんばれ。
>>353-354 &366-367
うんとねー、すごく見難い。見てあげる人の身にもなってよ(笑)。
整形して、ソースのどの部分が
>>353 のどの数式を意味しているのか
コメント入れて、
>>1 に書いてあるラウンジにでも張ってよ。
あ、その前に、”lnan” って n を底とし、真数に an を取っている log だよね?最初ワケわかんなかった。
他の式の分数とかのスコープもよく分かんないから、
>>353 も書き直して。
どうしても上手く表現出来ないなら、TeX ソースライクに書いてもいいから。
370 :
デフォルトの名無しさん :03/07/23 02:10
『円周率πの値を次式の無限級数(の一部)より近似し、結果を表示するプログラムを作成せよ』 π=4(1/1-1/3+1/5-1/7+…+1/997-1/999) doubleを使うぐらいしか分からないんですけど、どうすれば…。 お願いします。
#include <stdio.h> int main(void) { float pi=0.0; int s=1; int n; for(n=1;;n++) { s=-1*s; pi=pi+1.0/(2*n-1)*s; printf("%d回目:%f\n",n,4*pi); } return 0; }
lnanは、自然対数でloge(an) 底はeじゃない?
>>372 本当だ…。間違えちゃった♪
ご指摘ありがとうございます。
374 :
デフォルトの名無しさん :03/07/23 02:31
>>371 >>370 を見る限り、円周率の値に収束するんじゃないか?
突っ込んどいて俺はできないがw
#include <stdio.h> int main(void) { float pi=0.0; int s=1; int n; for(n=1 ; n<=999 ; n=n+2) { pi=pi+1.0/n*s; printf("%d分の1まで:%f\n",n*s,4*pi); s=-s; } return 0; }
376 :
370です :03/07/23 03:32
>>375 うーん、まだpiとかfloatを習ってない初心者なんですがそれ無しでもできますかね?
たぶん結果は3.1415…と一発で出ると思うんですが。
pi はただの変数名だから、変数宣言のルールに反しない名前に変えてもよい。 float は単精度浮動小数点だから、倍精度の double に変えても(多分)差し支えない。 float より double の方が高速らしいし。
>>378 ありがとうございます。
でも
>>375 さんのが今だにしっくり来ない…。
これでいいんですかね?
>>379 #include <stdio.h>
int main(void)
{
int i;
printf("#include <stdio.h>\nint main(void)\n{\n\tprintf(\"%%f\\n\",\n\t\t");
for (i=1; i<=500; i++)
printf("%+d.0/%-3d%s", (i%2)*8-4, 2*i-1, i%7==0 ? "\n\t\t" : "");
printf(");\n\treturn 0;\n}\n");
return 0;
}
>>370 >>375 ので完璧じゃん。
一発で出るって・・・君の言いたいのはこういうこと?(改変スマソ
999みたいな小さい数字までじゃ3.1415・・・っていうほどの精度の近似はできないよ。
#include <stdio.h>
int main(void)
{
double pi=0.0;
int s=1;
int n;
for(n=1 ; n<=999 ; n=n+2)
{
pi=pi+1.0/n*s;
s=-s;
}
printf("%f\n",4*pi);
return 0;
}
ただ、近似されていく様子が分かるように書くべきだと思うので
俺は
>>375 そのままでいいと思う。
384 :
バカのき極み :03/07/23 11:03
>>369 氏の通りに問題を書き直しました。ソースは
>>1 のとこに書きました。
よろしくお願いします。
an、bnは[0,1]の独立一様正規乱数
Θn=cos(2πbn)*√(-2log(an))
Φn=sin(2πbn)*√(-2log(an))
Pn=Θn*√((3/2)Δ)+Φn*√((1/2)Δ)
Qn=Θn*√((\\2/3)Δ^3)
u(nΔ+Δ)=u(nΔ)-u(nΔ)Δ+(u(nΔ)Δ^2)/2+Pn-Qn
X(nΔ+Δ)=x(nΔ)+n(nΔ)Δ-(u(nΔ)Δ^2)/2+Qn
ti,ti+1,…,tN(Nは最低100ぐらい)を間隔20Δでとって
φ(t)=(1/N)Σ(i=0→N)u(t+ti)u(ti)とする。
十分大きいtでのxの傾きと、∫(0→∞)φ(t)dtの値を求めよ。
385 :
バカのき極み :03/07/23 11:06
間違えた・・・ Qn=Θn*√((\\2/3)Δ^3) →Qn=Θn*√((2/3)Δ^3) φ(t)=(1/N)Σ(i=0→N)u(t+ti)u(ti)→φ(t)=(1/N)Σ(i=1→N)u(t+ti)u(ti)
正規乱数?一様乱数?
どの値になると正解になるか教えて。
389 :
デフォルトの名無しさん :03/07/23 11:43
u(nΔ+Δ)=u(nΔ)-u(nΔ)Δ+(u(nΔ)Δ^2)/2+Pn-Qn X(nΔ+Δ)=x(nΔ)+n(nΔ)Δ-(u(nΔ)Δ^2)/2+Qn ti,ti+1,…,tN(Nは最低100ぐらい)を間隔20Δでとって φ(t)=(1/N)Σ(i=0→N)u(t+ti)u(ti)とする。 この辺さっぱりわからん。 nΔはΔのn倍? φ(t)をもとめるには0から2000Δとtからt+2000Δのuの値が要るの?
390 :
バカのき極み :03/07/23 11:52
>>388 傾きが2で、φ(t)dtが1です
>>389 >nΔはΔのn倍?
そうです。漸化式になります。
>φ(t)をもとめるには0から2000Δとtからt+2000Δのuの値が要るの?
そうなんですが、初期値の影響を除くため、
最初の数百ステップのデータは用いるなとのことです。
問題に付け忘れてました。
391 :
370です :03/07/23 11:56
393 :
教えてください :03/07/23 13:31
VC++で、Waveでデータを波形にし、サンプリング周波数を出すプログラムはできたのですが、 波形の高い部分を見つけ、それをテキストに変換し保存するプログラムが分かりません。 どなたか、教えてくれませんでしょうか? 参考URLなどご存知でしたらお願いします。 せめて、WAVEデータをテキスト変換するプログラムを教えてください。 お願いします。
性器卵巣なら知っている。
訂正します Θとφが正規乱数で、aとbが一様乱数ですね
問題あるならちゃんと写せ。 あと、これがどういう意味がある問題なのか書け。 ただ計算しろって式だけ出されても、読む気すら起こらない。
相手にしなきゃいいじゃん。
402 :
デフォルトの名無しさん :03/07/23 15:18
2つほど教えてクダサイ。 問題1 文字列 str2 を逆順に並べたものを str1 に代入し、 str1 のポインタを返す関数 char *reverse_string(char *str1, const char *str2) を添字演算子を使わずに作成しなさい。 動作確認をするためのmain関数も作成しなさい。
問題2 身長と体重から、BMI 値と理想体重のふたつの値を返す関数 void bmi_healtyweight(int h, int w, float *b, float *sw) を作成しなさい。 BMI 値は 体重(kg)÷身長(m)2) で、 理想体重は 22×身長(m)2 で計算する。 動作確認のため、身長(cm)と体重(kg)をキーボードから入力し、 上の関数を使って2つの値を計算し、その結果を出力しなさい。
>>402 #include <stdio.h>
#include <string.h>
char *reverse_string(char *,const char *);
int main()
{
char s1[1024],*s2="Good-bye world!!";
puts(s2);
puts(reverse_string(s1,s2));
puts(s1);
return 0;
}
char *reverse_string(char *str1, const char *str2)
{
char *pstr1=str1;
const char *pstr2=str2;
if(!*str2){*str1='\0'; return str1;}
str2+=strlen(str2)-1;
for(;str2>=pstr2;str1++,str2--)
*str1=*str2;
*str1='\0';
return pstr1;
}
>>402 これに訂正
#include <stdio.h>
#include <string.h>
char *reverse_string(char *,const char *);
int main()
{
char s1[1024],*s2="Good-bye world!!";
puts(s2);
puts(reverse_string(s1,s2));
puts(s1);
return 0;
}
char *reverse_string(char *str1, const char *str2)
{
char *pstr1=str1;
size_t n;
n=strlen(str2);
if(!n){*str1='\0'; return str1;}
str2+=strlen(str2)-1;
for(;n--;str1++,str2--)
*str1=*str2;
*str1='\0';
return pstr1;
}
それとstr2+=strlen(str2)-1;じゃなくてstr2+=n-1;だ。
>404 ありがとうございます。でも >char s1[1024],*s2="Good-bye world!!"; "Good-bye world!!"; ってどういう意味なんですか?
>>403 #include <stdio.h>
void bmi_healtyweight(int, int, float *, float *);
int main()
{
int h,w;
float b,sw;
printf("身長(cm):");
scanf("%d",&h);
printf("体重(kg):");
scanf("%d",&w);
bmi_healtyweight(h,w,&b,&sw);
printf("BMI値:%f\n理想体重:%.2fkg\n",b,sw);
return 0;
}
void bmi_healtyweight(int h, int w, float *b, float *sw)
{
float hm=h/100.0F;
*b=w/(hm*hm);
*sw=22.0F*(hm*hm);
}
>>407 おなじみのHello worldをちょっと変えてみただけ。そこは別になんでもいい。
410 :
デフォルトの名無しさん :03/07/23 16:52
なんでもよくはないか。1バイト文字のみで構成された文字列ならなんでもよい。
>409 そうなんですか。 本当にどうもありがとうございました あなたは私の命(単位)の恩人です!
>>390 ちょっと書いてみたけど、xの傾きは2にならないな。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
const double delta = 0.1;
double RAND(void) { return (double)rand() / RAND_MAX; }
int main(void) {
int i; double u = 0, x = 0;
for (i = 0; i < 20000; i++) {
double a, b, theta, phi;
double P, Q;
a = RAND();
b = RAND();
theta = sqrt(-2*log(a)) * cos(2*M_PI*b);
phi = sqrt(-2*log(a)) * sin(2*M_PI*b);
P = sqrt(1.5*delta)*theta + sqrt(0.5*delta)*phi;
Q = sqrt(0.5*delta*delta*delta)*theta;
x += u*delta - u*delta*delta*0.5 + Q;
u += - u*delta + u*delta*delta*0.5 + P - Q;
printf("%f %f\n", x, u);
}
return 0;
}
>>400 この問題は1次元ブラウン運動の問題です。xがブラウン粒子の位置で、
uが速度です。
>>413 すいません。十分大きなtでのxの2乗の平均の傾きが2になるの間違いでした。
415 :
デフォルトの名無しさん :03/07/23 18:01
この問題はC言語の問題です ポインタを抜かして、関数までの知識でも 分かる範囲で教えてください。 つまりif文switch文for文while文や関数を使って 教えてください。 問題1、要素数10の配列を用意し、 スタックにてデータ管理できるようにしなさい ただし、メニュー形式にし、各機能を関数化すること。 問題2、要素数10の配列を用意し、 キューにてデータ管理できるようにしなさい 但し、メニュー形式にし、各機能を関数化すること
x += u*delta - u*delta*delta*0.5 + Q; が違わない? X(nΔ+Δ)=x(nΔ)+n(nΔ)Δ-(u(nΔ)Δ^2)/2+Qn
あんのsplit関数考えたんですけど //split(&結果が入る配列, 目的の配列, 区切り文字, index) void split(char *moto[],char str[],char de,int index) { char x1[30][256]; int i,e=0,count1=0; for(i=0;i<=strlen(str)-1;i++) {if(str[i]==de){ count1++;e=i+1; } x1[count1][i-e]=str[i]; } strcpy(moto,x1[index]); } これじゃなぜか二回連続で使うと値がバグるんですけど、 なんででっか?
char *moto[]
関数ごと捨てろ。
421 :
デフォルトの名無しさん :03/07/23 19:15
初心者です。今、ファイル操作の勉強してます。 下のソースで exit(-1)の関数のプロトタイプ宣言がありません。 と出ます。教えてやってください。お願いします。 #include <stdio.h> #include <process.h> int main( void ) { FILE *fp; char str[256]; //text.txtを開く。出来ない場合nullを返す。 fp = fopen("test.txt","r"); if (fp == NULL){ printf("error\n"); exit(-1); } while (fscanf(fp,"%s",str) != EOF) printf(str); fclose(fp); return 0; }
422 :
デフォルトの名無しさん :03/07/23 19:18
半径を0.1から4.0まで0.1ずつ変えて、円の面積と円周の長さが等しくなるときの 半径を表示するプログラムをCでお願いします。
>>421 exit 関数は stdlib じゃないか?
double radius; for( radius = 0.1; radius<4.0; radius += 0.1 ); printf( "2" );
>>415 1問目だけ.
バグだらけだが
#include <stdio.h>
void push(int a[], int head) {
printf("Input number: ");
scanf("%d", &a[head]);
}
void pop(int a[], int head) {
printf("pop %d\n", a[head - 1]);
}
int main(void) {
int a[10], head = 0;
int c, i;
printf("push - 'u', pop - 'o', end - 'e' : ");
while ((c = getchar()) != 'e') {
switch (c) {
case 'u' :
push(a, head);
head++;
break;
case 'o' :
pop(a, head);
head--;
break;
}
printf("push - 'u', pop - 'o', end - 'e' : ");
}
return 0;
}
>>423 コンパイルできました。
ありがとうございます。
>>422 >円の面積と円周の長さが等しくなるとき
なんか変ですねぇ
単位の違うものを比べてはいけないと先生が言ってました(w printf("1.0");
しかし単位の次元はあるのだ。だから長さと面積の比較は一般には無意味だ。 何なら面積の単位を単位長さの正方形ではなくて正三角形にしてもよい。 正方形で面積を測る文字通り「方法」は一つの歴史的な大発明で、 それ以前はいろいろと面白い物が沢山あったのだ。 数学的でも面積の測り方は定義上のものである。
#define Circle_Area(r) (M_PI*r*r) #define Circumference(r) (M_PI*2.00*r) #define EPS(1E-5) #include <stdio.h> #include <math.h> int main(void){ double radius; for( radius = 0.1; radius<=4.0; radius += 0.1 ){ if( fabs(Circle_Area(radius) - Circumference(radius)) < EPS){ printf("Radius = %20.15lf \n",radius); printf("Circle_Area = %20.15lf \n",Circle_Area(radius)); printf("Circumference = %20.15lf \n",Circumference(radius)); } } }
無駄に桁数が多いのは、どうして >if( fabs(Circle_Area(radius) - Circumference(radius)) < EPS){ を >if( Circle_Area(radius) == Circumference(radius) ){ にしないのか、ということの答え。
最近自称釣り師がダイレクトで自分の本音を攻撃されて「釣れた!」とか言ってるの多いよね。 これは、どっちかというと、 │ ○ 釣り師→ └┬─┴─ ↓水面 ~~~~|~~~~~~~~~~~~~~~~~~~ ↑チンコ >゚++< かと思うんだけど、どうよ?
437 :
デフォルトの名無しさん :03/07/23 21:44
Write a program using structure that stores five students'name,adress, and phone number. Allow the user to search a student by provideing his/her name and display all the details of that specific student. c言語の宿題なんですけど、 明日中に提出なのでお願いします。
生徒のデータはどこから?
439 :
デフォルトの名無しさん :03/07/23 21:51
>>422 です。
円の面積と円周の長さが等しくなるときの半径を表示する
これはやっぱり無理なのでしょうか?
無理と言うか 長さと面積を比べることが数学上意味のあることなのか という話だったんだが
海外の学校で勉強してるんですけど、あんまり問題の意味もわかんないんですよ。 生徒のデータは適当に作ればいいのかな?
444 :
デフォルトの名無しさん :03/07/23 21:55
出川のモラルの低さは勉強不足も去ることながら、 その知識の低さ、ゲーム脳等がかなりの要因を占めている。 ユーザーとしての意識がお話にならない程度しかなく、出川が 購買、話題にしたゲームには糞ゲー、バグ、低評価ソフトが多発した。 出川が粗暴であったのは、出川個々人にゲームソフトへの 大義がなく、ゲームをやらされている感が強かったから。 所詮出川はやらされていた、だけ。 妊娠叩きによる思想統制が生み出すものなど、所詮この程度に過ぎない。 PS2のDVD-ROM採用は効果があった。 だが今となっては、DVDにも様々な フォーマットがあり、AV機器環境もVHS時代のころとは全くちがうほど複雑化した。 +R、−R、+RW、−RW、RAMなどがありVHSのようにはいかない。 DVDフォーマット全てに対応しなかったところに、PS2の失敗はある。 一部だけ対応させても意味が無い。
445 :
デフォルトの名無しさん :03/07/23 21:55
ただ単に、πr*r = 2πr となるようなrを求めればいいんだろ? 出題者の意図ぐらい読み取れよな
問題文がこれだけだったら、 ・5人分の氏名・住所・電話番号を保持するような構造体を宣言する。 ・この詳細(?)を表示するプログラムを作成する までしか情報が与えられていない。データファイルとかは自分で作るんだろうな。
問題文はこれだけです。 自分にはこんなむずいのはできません。ちなみに今日はじめて自分で プログラム書いてみました。↓このレベルで今は限界です。 #include<stdio.h> int hight,weight,answer; void main(void) { int hight; int weight; int answer; printf("how tall are you?"); scanf("%d",&hight); printf("what do you weight?"); scanf("%d",&weight); answer=hight-weight; if(answer>110)printf("you are slim,do not need diet at all"); else if(answer>105)printf("you are in average,do not need diet"); else if(answer>100)printf("you are little bit fat,need to go gym or do something"); else printf("you are too fat need to go hospital and mind diabetic"); }
構造体は授業でやったろ? struct person{ char name[NAME_LEN]; char address[ADDRESS_LEN]; char tel[TEL_LEN]; } students[5]; とかやっといて for(int i=0;i<5;i++){ scanf("%s",students[i].name); } とかやるような奴と思われ。動作確認してないし、テケトーですまん
どーもありがとう。たすかります。 授業、ぶっちゃけわかんないんですよ。 先生英語でべらべらしゃべって(当然だけど)半分も理解できません。
451 :
デフォルトの名無しさん :03/07/23 22:18
わざわざ海外まで逝ったんなら自分でやれよ金もったいないだろと思った。
ほんとそのとうりですね。
#include <stdio.h> #include <string.h> struct person { char name[NAME_LEN]; char address[ADDRESS_LEN]; char tel[TEL_LEN]; } students[5]; void register(void); void search(void); int main() { int x=0; while(x!=3) { printf("1:register\n2:search\n3:quit\n);
scanf("%s",&x); switch (x) { case 1: register(); break; case 2: search(); break; default: break; } } return 0; } 以下略
海外の大学行かしてくれるなんていい親だ 英語理解できるというのはかなり有利だ
458 :
デフォルトの名無しさん :03/07/23 23:00
Windowsですでに起動してる別プロセスの 特定のメモリ領域を書き換えるには どのようにしたらいいのでしょうか? 書き換える領域は仮想アドレスの指定で ゲーム改造とかで使われるメモリエディタみたいに
460 :
デフォルトの名無しさん :03/07/23 23:11
>>459 WindowsXP PEで
VC++6.0で作るとしたらどうなりますか?
VCのスレのほうがいい気がする。
Cで標準入力から以下の条件に沿った有理数を入力したいのですが どのようにしたらいいですか? scanfでなくfgetsを使いたい 複数問あるのでできるだけmain()外に出したい 有理数自体はスペースで区切って'/'で分母分子(ともに整数)を区切る。 符号は先頭だけで'/'の後ろにはつけない。 int a[2][10];で宣言して 235/17 12.5 62 x 32/1.5 -3/15 13/2O 3/-2 と入力したとき a[0][0]=235: a[1][0]=17; a[0][1]=62; a[1][1]=1; a[0][2]=-3; a[1][2]=15; と渡したいのです。この時点では約分はしなくていいです。 12.5 x 32/1.5 13/2O(Oはオー) 3/-2はとばしてください。 お願いします。
464 :
デフォルトの名無しさん :03/07/24 08:54
C言語の宿題なんですけど if文switch文for文while文ぐらいまでの知識で 課題1、※月※日と入力すると※曜日とでるプログラム 課題2、生まれてから本日までの総日数を求めよ っていう問題を教えて下さい。
>>464 標準ライブラリは自由に使っていいのか?
>>464 課題1は不可能だな。
年(たとえば西暦)を入力しないと無理だろ。
軸がないと、どうしようもない。
467 :
デフォルトの名無しさん :03/07/24 12:57
(1)円の面積を求める関数と円周を求める関数を作成せよ。 引数はdouble型で半径とし、戻り値を面積または円周の長さとせよ。 (2) (1)で作成した2つの関数を用いて半径1.72の円の面積と、 円周の長さを計算してそれを表示するプログラムを作成せよ。
>>463 "/"とスペースはstrtokを使って分ける
>>467 /*面積と円周の関数*/
double menseki(double radius)
{
return radius*radius*3.1415; //円周率は指定された値を使う
}
double enshu(double radius)
{
return radius*2*3.1415;
}
>>463 複雑な問題をそのまま考えると大変なので、以下の3つにわけてくれ。
1.[235/17 12.5 62 x 32/1.5 -3/15 13/2O 3/-2]という入力を、一つ一つ項に分けていく
2.分けられた項に対して、不正な文字が含まれてないかチェックを行う
3.不正な文字が含まれていないのであれば、それを有理数として認識する
こんな感じか。2と3は同じ関数上に実装したほうがいいかも。
#include <stdio.h> #include <string.h> int RationalNumberConvert(char *src,int *denominator,int *numerator){ int i,countSlash = 0,flagDigit = 0; char *pNumerator=NULL; char temp[BUFSIZ]; strcpy(temp,src); for(i=0;i<strlen(temp);i++){ char cur = *(temp+i); switch (cur){ case '+': case '-': if(i!=0) return 1; // 先頭以外に符号が含まれている break; case '/': countSlash++; if(*(temp+i+1) != '\0')pNumerator=temp+i+1; // 分母は/の後 break; default: if( !isdigit(cur) )return 1; break; } } if(countSlash>=2) return 1; *numerator = 1; if(pNumerator != NULL){ *numerator = atoi(pNumerator); *(pNumerator-1)='\0'; } *denominator = atoi(temp); return 0; }
int main(){ char src[]="235/17 12.5 62 x 32/1.5 -3/15 13/2O 3/-2"; int i; char *pCurrent; pCurrent = strtok(src," "); i=0; do{ int denominator, numerator; if(RationalNumberConvert(pCurrent,&denominator,&numerator) == 0){ printf("%d : %s = %d / %d \n",i++ , pCurrent,denominator,numerator); } }while(pCurrent = strtok(NULL," ") ); return 0; }
473 :
デフォルトの名無しさん :03/07/24 13:56
c言語でプログラムの途中でファイル名のコマンドラインから入力を 求めたいんですが、そのときtab補完機能をつけたいんですけど、 tabを押したらこれを実行せよ、みたいな命令ってcにありますかね?
標準ではない。自作で。
自作は初心者にも可能なレベルですか? ワイルドカード指定なら実装したんですけど、 使い勝手がわるいんで。。。
それは宿題でつか?
そうです。まぁ、tab補完は別にしなくていいですけど、 拡張すると加点されるんで。。。
>>473 windowsのAPIだったらGetKeyStateとかいうのがあってそれでどのキーが押されているか
確かめる方法がある。ファイル名の補完は知らない。
そうですか。。貴重なご意見ありがとうございました。
intが32bitの処理系とする。 typedef struct tag_uint64{ unsigned hi; unsigned lo; }uint64; を通常の64ビット符号無し整数と同一視する。 int divmod(uint64 *a,uint64 *b,uint64 *d,uint64 *m); を実装しなさい。(外部アセンブラ等を使ってはならない) 但しこの関数はa,bに対し、a=b*d+mとなるd,mを セットして返るものとする。*b=0(64bit)の時に限り0を返し、それ以外は 常に1を返すものとする。64ビット整数の意味で0<=m<bでなければならない。 a,bがNULLであるかのチェックはしなくても良い。 お願いします。
訂正 >但しこの関数はa,bに対し、a=b*d+mとなるd,mを... 但しこの関数は(*a),(*b)に対し(*a)==(*b)*(*d)+(*m)となる (*d),(*m)をセットして返るものとする。 >a,bがNULLであるかのチェックは a,b,c,dがNULLであるかのチェックはしなくても良い。
もうひとつありました。すみません。 >64ビット整数の意味で0<=m<bでなければならない 64ビット整数の意味で0<=(*m)<(*b)でなければならない
>外部アセンブラ等を使ってはならない じゃ、インラインアセンブラで解決だネ
485 :
デフォルトの名無しさん :03/07/24 16:37
初心者です。コマンドラインから云々の勉強してるんですが、 コンパイルできません。教えていただけたら嬉しいです。 #include<stdio.h> #include<string.h> int file_read(FILE *) int main(int argc, char *argv[]){ char fname[64]; FILE *fp; if (argc == 1){ printf("コマンドラインからファイル名を入力できます\n"); printf("ファイル名="); scanf("%s",fname);} else strcopy(fname,argv[1]); while(1){fp = fopen(fname,"r"); if (fp == NULL){ printf("ファイル名が不当です。\n"); printf("ファイル名="); scanf("%s",fname);} else break;} file_read(fp); fclose(fp); return 0;} int file_read(FILE *fp){ int ch; while((ch = getc(f)) != EOF) putc(ch,stdout); return 0;}
>>485 > コンパイルできません。教えていただけたら嬉しいです。
エラーメッセージがないからコードを読む気にならん
int file_read(FILE *) ;がない
いくつかの入力ミスがありました。
>>486-487 レスありがとうございます。
次回からは質問の仕方に気をつけます。
コードを張るときに改行が多いって出る時は皆さん分割して張られてるんですか?
何か回避する方法ってあるのかな...
int i; i=255; printf("%lf",(double)i);
>>490 16ビットグレーのTIFFで同じことできませんかね?
詳しい人が身近に居ないので。
>>422 double radius;
for( radius = 0.1; radius<4.0; radius += 0.1 ) {
double area = M_PI * radius * radius;
double circumference = 2 * M_PI * radius;
if (area == circumference) {
printf("%f" , radius);
}
}
上記のプログラムで数学的にはあってるっぽいのですが
計算誤差があるのでなにも表示されないのですよね。
area == circumference を誤差が 0.0001 くらいいあっても大丈夫な
式に変更すれば 2と表示されるはず。
>>468 ,470,471
少し修正して何とか動くようになりました。
数値計算部分は値がはじめから用意されているときには意図したとおり
動くのですが入力部分がどうもうまくいかなくて(つд`)
ありがとうございます。
int i; for(i=1;(radius=i/10.0)<4.0;i++){
496 :
デフォルトの名無しさん :03/07/24 21:18
以前にも書いたのですがどうしてもわからないのでお願いします。 線形リストを用いて、過去に素数と分かった数を保存し、指定された数(N) 以下の素数を求めるプログラムを作成せよ。 ただし、Nはプログラム実行中で外部から入力できるようにすること。 線形リストはこんな感じののですけど #include<stdio.h> #include<stlib.h> typedef struct data Data; typedef struct data *DateP; struct data{ int val; DataP prev; }; DataP add_data( int i,DataP last); void print_data(Data last); void free_list( DataP last); よろしくお願いします。
>>496 add_data()等は書かなくていいのよね?
DataP primes = NULL;
int isprime(int num)
{
DataP p;
for (p = primes; p != NULL; p = p->prev) {
if ((num % p->val) == 0) return 0;/* FALSE */
}
return 1;/* TRUE */
}
int main()
{
int i, N = 0;
printf("N=? ");
scanf("%d", &N);
for (i = 2; i <= N; i++) {
if (isprime(i)) {
printf("%d\n", i);
primes = add_data(i, primes);
}
}
return 0;
}
500 :
デフォルトの名無しさん :03/07/25 00:09
>>499 できればadd_data()等も買いてもらいたいのです。
すいませんけど、お願いします。
>>500 リスト処理がぜんぜん理解できねーてことか。
鉛筆で紙に四角と矢印を描きながら考えると理解しやすいかもよ。
DataP add_data(int i, DataP last)
{
DataP p = (DataP)malloc(sizeof(Data));
p->val = i;
p->prev = last;
return p;
}
void print_data(DataP last)
{
DataP p;
for (p = last; p != NULL; p = p->prev) {
printf("%d ", p->val);
}
printf("\n");
}
void free_list(DataP last)
{
DataP p, prev;
for (p = last; p != NULL; p = prev) {
prev = p->prev;
free(p);
}
}
502 :
デフォルトの名無しさん :03/07/25 00:42
>>500 ありがとうございます。
C++を始めたばかりだったので、分からないことが多いので。
503 :
デフォルトの名無しさん :03/07/25 00:43
502の >500というのは>501の間違えです。
何でnextでなく、prevなのだろうか…?
505 :
デフォルトの名無しさん :03/07/25 02:05
電話帳のようなのプログラムを作ってるんですが、 データ削除がうまく出来ません。 下にあるのが私が作ったプログラムなんですが、 これだと指定した行以下のすべてのデータが消えてしまいます。 どうかご教授願います。 void deldate() { int i; char ans[2]; printf("どのデータを削除しますか?\n"); scanf("%d",&nDate); printf("%s\n",date[nDate].name); printf("%s\n",date[nDate].tel); printf("このデータを削除します。\n"); printf("消去してよろしければ'y'を入力してください。\n"); scanf("%s",&ans); if(ans=='y'){ for(i=nDate;i<nDate-i;i++){ strcpy(date[i].name,date[i+1].name); strcpy(date[i].tel,date[i+1].tel); }//for nDate--; writedate(); }//if };//deldate
>>505 ぱっと見ただけで、これくらい
scanf("%d",&nDate); // nDate を上書きして良いのか?
scanf("%s",&ans); // エラーは出ないのか?
if(ans=='y'){ // 何と 'y' を比べてる?
for(i=nDate;i<nDate-i;i++){ // 初期値が nDate なので nDate-i は 0
レスどうもです。 > scanf("%d",&nDate); // nDate を上書きして良いのか? データ拡張の際に scanf("%s",date[nDate].name); ということをやっていたのでこれは大丈夫だと思います。 > scanf("%s",&ans); // エラーは出ないのか? これは大丈夫です。 > if(ans=='y'){ // 何と 'y' を比べてる? これは'y'を入力するとこのif文を実行するという意味です。 > for(i=nDate;i<nDate-i;i++){ // 初期値が nDate なので nDate-i は 0 とりあえずいろいろ試し、 データをいじりまくってたんですが、 間違いを修正し忘れたまま書き込んだようです。 最初は for(i=0;i<nDate;i++) という表記でした。 因みにこのfor文がさっぱりわからないです。
>>507 >ということをやっていたのでこれは大丈夫だと思います。
nDataは要素数じゃないのか?
>これは大丈夫です。
ansは配列で、ans自体のポインタは存在しなくても良いので &ans はエラーが出るべき
(実際、動くものが多いのも事実だが)
>これは'y'を入力するとこのif文を実行するという意味です。
ansのみだとans配列への0番目の要素へのポインタを返す
>因みにこのfor文がさっぱりわからないです。
forで、削除した次の構造体から、最後の構造体までを
1つずつ、前の構造体にコピーする
こっちの方が良さそうなので訂正 >ansは配列で、ans自体のポインタは存在しなくても良いので &ans はエラーが出るべき ansは配列で、ans自体は値である、よって、値に&は適用出来ないとエラーが出るべき
>>510 と書いたものの、良く考えたら、余計混乱するだけかな…
つー訳で、誰か説明が上手い香具師が ans 自体の説明をしてくれる事に期待しつつ寝る
scanf("%d",&nDate); ここの nDate は関数内で宣言した適当な自動変数にしないといけないでしょ? nDateを上書きしているから、nDate--;で要素数が今消した所-1になってると思われ。 そのため表示するときに指定した行以下が全て消えたように見える。 実際にはコピーはされている。 あと、scanf("%s",&ans); のところは &ans[0] か、ans のみ ans はそれだけでは ans配列の アドレスを意味している。そしてそのアドレスの先頭にあるのがans[0]で、 ans と &ans[0] が等価だ。 あとはいいんじゃないかと思った。けど自信なし。
ans配列のアドレス->ans配列の先頭アドレス
>>512 > ans と &ans[0] が等価だ。
配列と、配列の先頭要素へのポインタが等価なのは、
引数として渡された場合に限る。ねんのため。
515 :
デフォルトの名無しさん :03/07/25 15:40
住所録作らされてて 基本的な機能の他に独自の機能を追加汁! ってことなんですが何か適当な機能ないですか?
518 :
デフォルトの名無しさん :03/07/25 15:51
>>515 順番をソートする。漢字なら、音読みを調べてソートする。
条件によって一部だけ表示の機能をつける。
520 :
デフォルトの名無しさん :03/07/25 16:02
>510 >ansは配列で、ans自体は値である、よって、値に&は適用出来ないとエラーが出るべき 「式あるいは部分式の型が、ある型Tについて、”Tの配列”であれば、その式の値は 配列の中の最初のオブジェクトへのポインタであり、式の型は”Tへのポインタ”に 変更される。この式が単項の&演算子、あるいは++、--、sizeofの被演算数、あるいは代入演算子、あるいは.演算子の左演算数のものであれば、この変換は行われない。」 &ansの型はchar (*)[2]
俺に聞けスレに解説が・・・ 蛇足スマソ
523 :
デフォルトの名無しさん :03/07/25 18:17
宣言シンタックスエラーと出ます。 なるべく易しく教えてください。 float calc(float float); int main() { float price,tax,total; printf("金額に0を入れると終了します。\n"); while(1){ printf("商品金額を入力してください。\n"); scanf("%f",&price); if(price == 0.0) break; printf("消費税率(%)を入力してください。\n"); scanf("%f",&tax); total = calc(price,tax); printf("%f円払って下さい\n",total); } return 0; } float calc(float a, float b) { float c; c=a*(1+b/100.0); return c; }
524 :
デフォルトの名無しさん :03/07/25 18:23
>>523 一行目の二番目のfloatのあとにカンマ
a,bも買い解け
>>515 住所録に登録すると自動的に2chに書き込まれる、ってどうかな。
529 :
デフォルトの名無しさん :03/07/25 23:37
530 :
無料動画直リン :03/07/25 23:38
531 :
デフォルトの名無しさん :03/07/26 00:42
違うスレで前に配列を使わないバージョンを聞いたのですが、 今度は配列そして、二次配列?を使った方法を聞きたいです。 問題は abc.....xyz bcd.....yza . . yza.....vwx zab.....wxy abc.....xyz これを表示させるプログラムです。ちなみにC++です。 おわかりの方、力を貸してください!
#include <iostream.h> int main(void){ char alphabet[26] = "abcdefghijklmnopqrstuvwxyz"; for (int i = 0; i < 26; i++) { for (int n = 0; n < 26; n++) { cout << alphabet[(i + n) % 26]; } cout << "\n"; } return 0; }
あ 2次元配列じゃないや
>>531 #include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
main(){
std::string s="abcdefghijklmnopqrstuvwxyz";//文字列定数は一次元配列
for(std::string::iterator si=s.begin();si!=s.end();si++,std::cout<<std::endl)
std::rotate_copy(s.begin(),si,s.end(),std::ostream_iterator<std::string::value_type>(std::cout));
std::cout << s << std::endl;
}
最後の一回が良くないなあ
>>532 iostream.h でいいんだっけ?ただの iostream じゃないか?
536 :
デフォルトの名無しさん :03/07/26 01:18
iostream.hというのは標準規格には無いんだよね
538 :
デフォルトの名無しさん :03/07/26 01:21
>>534 そこまでstd::を連発するなら
using namespace std;にしる
mainに返り値セットしる
>mainに返り値セットしる mainではreturnがなければ自動的に(int)0が返る。
>>539 それは知ってるけど
書いたほうがいいじゃん
間違っていない以上どちらでもいい
main(){ ↓ int main(){
543 :
デフォルトの名無しさん :03/07/26 02:20
"いいと思う"程度か。自分のやり方を押し付けようと思うな C++でmainでのreturnの省略がサポートされたメリットを 他の多くのメリット同様に享受しない手はない。 C++自体を否定するなら別だが。 >main() これは駄目だな。Cの方法だ。しかしC++でもまだまだ const i=1;などと書く者がいるから当分はほとんどの処理系で サポートされるだろう。
皆さんありがとうございました。 これで楽しい夏休みが・・・・ってw これぐらいできないとって思うんですが、 始めたばかりってこともあってついたよっちゃいました。
C++でちょっと聞きたい。 cで、 static int const sDayOfMonths[] = {31, 28, 31,}; ってやるような要領で、c++で vector <int> dayOfMonths; を初期化するような手軽な方法はないもんだろうか。 宿題って言うか、この休み中にクラスを設計しておきたいのだが 自宅の端末にはC++の資料がなくて。 #dayOfMonthsはあくまでも例。実際のメンバは構造体のvectorのつもり。
>>564 C++に静的初期化ブロックが無いことを不幸に思いねえ。
動的に確保するしかない const int aiDaysofMonth[]={31,28,31}; std::vector<int> DaysofMonth(aiDaysofMonth,aiDaysofMonth+3);
スタートアップで出来るから処理時間が気にならないなら 静的でなくても問題ないと思う。
http://www.crt.or.jp/~kokochi/sosu.htm#shou2 上記サイトで
”210で割った端数を用いる場合には、7 の倍数を除いた 48個を素数源の数として、
エラトステネスのふるいを用いればよい”
”210で割った端数に 48 bit を当てはめる”
というのを踏まえつつ、メモリの管理もフォローしてプログラムを書いて
くださる神いらっしゃいませんか?だれか挑戦してみろゴラァ!!
悲しい事に、私のちっぽけな脳みそでは書けませんでした。
(他スレを含め既出だったらスマソ、あと、素数関係のスレは一通り目
を通した次第です)
552 :
デフォルトの名無しさん :03/07/26 20:27
>551 48ビット入れるのに64ビット整数を使ってもいい? あと上限はどうしますか。「10億までの素数」だと簡単すぎますかね。
そういう改良は大して役に立たないぞ しかし1500円って何だよ
554 :
デフォルトの名無しさん :03/07/26 20:59
標準入力/Aファイルから入力した文字列が Bファイルの中に何件あるかを検索して その結果を標準出力/Cファイルに出力する というプログラムを作りたいんですが ファイルの操作の仕方がわかりません。 どうすればいいんですか?
ちなみにC言語での作成になります。 よろしくおながいします。
>>552 神だ!!マジ感謝〜
えーと、細かいことは気にしません(細かくないか・・・)、別に64ビットで
構いません。上限は10億ではちょっと、64ビットまでの素数表が作れる
ようにしたいですね〜(アホです)
アホだ。
>556 エラストテネスのふるいで64ビットまでの素数表は無理。 せいぜい1兆以下(40ビット)程度が限度じゃないかな。
エラトステネス
エトラステトトテテネストラ
まぎわらしい
ぐああトスなのか。エレベストの頂上から飛び降りてきます
>>554 FILE *fp;
if((fp = fopen("FILE_A","r")==NULL) { //ファイルを開く
printf("ファイル開けん\n");
return -1;
}
処理
fclose(fp); //ファイルを閉じる
チョモランマ
>>554 たまにはソースは書かずにレス。
@ファイルAから検索したいキーワードをすべてメモリ上にロードする。(GetKeywordくらいか?)
AファイルBをメモリ上にロード。(LoadTextくらい?)
B各キーワードをファイルBの内容から検索して個数をカウントする。(FindKeyWordくらい?)
CファイルCを生成し、キーワードとそのカウントを書き込む。(WriteResultくらい?)
D終了処理をする。
1から5のような関数をつくってこんな手順で実行するといいんじゃないかと。
ファイルの扱いは
>>563 ののようにfopen,fclose,fgets(かfread),fputs(かfprintfやfwrite)
あたりをぐぐって見るといいと思う。
ファイルのロードに関してはメモリの動的な使用が必要だろうからmallocとfreeについて
調べるべし。
文字列中のキーワードの検索はまぁ好きなように実装すべし。
これだけ知識があれば、多分できると思う。がんばって実装してみてください。
566 :
デフォルトの名無しさん :03/07/27 08:31
从从从从从从从从从从从从从从从从从从从 ≪ ふざけるなニダーーッ!!! チョパーリ共がっ ≫ ≪ ウリに言いたい事があるならハッキリ言うニダ!! ≫ YYYYYYYYYYYYY"|/"YYYYYYYYYYYYYYYYYY :::::::::::::::::::::::::::::::::::ヽヾ ;| l: 〃::::::::::::::::::::::::::::::::::::::::::::::: ________ ∧_∧ _ [=[]=] _______  ̄ ̄ ̄ ̄ ヴシッ <#`Д´''>  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (YY9 二つ / /\\彡 〈_人_〉 〈_フ |二二二二二二二二二二二二二二二二二二二| |│!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!│| |│!!!!!!!!!!!!!!!!!!!!!!!!!!!! ∧,,∧ !!!!!!!!!!!!!!!!!!!!!!!!!!!!│| ∧_∧ ミ 彡 ∧_∧ /■\ ( '') ( '') ミ 彡 (゙ ) (゙ )
チョモランマ2分の1
568 :
デフォルトの名無しさん :03/07/27 15:04
夏休みの宿題とかあるだろ?やらせろや!
文字列を取ってそれをダブル型で返すatofと同様の 関数を作りたいのですがうまく動きません 下に書いてあるのを直してみてください。お願いします #include<stdio.h> double myatof(char *); int main() { double d; char str[] = "123"; printf("%s\n",str); d = myatof(str); printf("%lf\n",d); return 0; } double myatof(char *z) { return z; }
直してみて下さいというか丸投げじゃん。
572 :
デフォルトの名無しさん :03/07/27 15:49
#include<stdio.h> double myatof(char *); int main() { double d; char str[] = "123"; printf("%s\n",str); d = myatof(str); printf("%lf\n",d); return 0; }
double myatof(char *z) { double reti = 0, retr = 0; double rl = 1; bool r = false; for(int i=0;i<strlen(z);i++) { if(z[i] == '.') r = true; else { double s = z - '0'; if(z < 0 || z > 9) return 0; if(r) { retr += s / rl; rl *= 10; } else { reti = reti * 10 + s; } } return reti + retr; } }
>>574 は間違い
double myatof(char *z)
{
double reti = 0, retr = 0;
double rl = 1;
bool r = false;
for(int i=0;i<strlen(z);i++)
{
if(z[i] == '.')
r = true;
else
{
double s = z - '0';
if(z < 0 || z > 9)
return 0;
if(r)
{
retr += s / rl;
rl *= 10;
}
else
{
reti = reti * 10 + s;
}
}
}
return reti + retr;
}
>>575 も間違い
double myatof(char *z)
{
double reti = 0, retr = 0;
double rl = 1;
bool r = false;
for(int i=0;i<strlen(z);i++)
{
if(z[i] == '.')
r = true;
else
{
double s = z[i] - '0';
if(s < 0 || s > 9)
return 0;
if(r)
{
retr += s / rl;
rl *= 10;
}
else
{
reti = reti * 10 + s;
}
}
}
return reti + retr;
}
お前らもっと素直に書けよ。 int char_to_int(char c) { switch(c){ case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; default : return -1; } } /*
*/ double myatof(char *z) { int negative = 0; double res = 0.0; double weight = 1.0; while(isspace(*z)) z++; if(*z=='+') z++; else if(*z == '-'){ z++; negative = 1; } for(; *z && *z != '.'; z++){ if(!isdigit(*z)) return res; res *= 10.0; res += char_to_int(*z); } for(; *z; z++){ if(!isdigit(*z)) return res; weight /= 10.0; res += weight * char_to_int(*z); } return res; }
偉そうな事を書いておいてミスった。 2つのforの間に if(*z=='.') z++; を入れておいてけれ。
もう一個。 最後は、 return negative ? -res: res; だな。
問題きぼんぬ
583 :
デフォルトの名無しさん :03/07/27 17:00
2つの行列の積を求めるプログラムをお願いします ソースは for(i = 1; i < 4; i++){ for(j = 1; j < 4; j++){ a = matrix[i][j] * tenchi[j][i] + a; } seki[i][j] = a; です よろしくお願いします
>>582 やってみます。
>>583 元の問題文だしてくれないとよくわからないyo。
# ていうか殆ど出来てるんじゃ..
585 :
デフォルトの名無しさん :03/07/27 17:37
>>584 #include<stdio.h>
int main()
{
int matrix[3][3] = {{1,2,3},{4,5,6},{7,8,9}};;
int tenchi[3][3] = {{1,2,3},{4,5,6},{7,8,9}};;
int seki[3][3];
int i, j, b;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
for(b = 0; b < 3; b++){
seki[i][j] = matrix[i][b] * tenchi[b][j] ;
}
}
}
printf("入力された行列同士の積表示\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
printf("%4d", seki[i][j]);
}
printf("\n");
return 0;
}
こんな感じです。よろしくお願いします
586 :
デフォルトの名無しさん :03/07/27 17:52
行列の問題できました ありがとうございました
>>586 もう出来たらしいけどこういう事かな?
#include<stdio.h>
int main()
{
int matrix[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int tenchi[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int seki[3][3];
int i, j;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
seki[i][j] = matrix[i][j] * tenchi[i][j];
}
}
printf("入力された行列同士の積表示\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
printf("%4d", seki[i][j]);
}
printf("\n");
}
return 0;
}
588 :
初心者です・・・ :03/07/27 18:32
わりと初歩的なC言語の問題です。分かる人いましたら教えて下さい。 問題)7桁の整数を入力すると(例 1234567)各桁の和が出力される(例 28) #include<stdio.h> void main(void) { int sum; long kazu; sum=0;kazu=0; printf("7桁の整数を入力\n"); scanf("%ld",&kazu); if(1000000<=kazu && kazu<=9999999){ while(kazu==0){ sum=sum+kazu%10; kazu=kazu/10; } printf("%ldの各桁の和は%dです",kazu,sum); } else{ printf("条件が正しくありません"); } } どこが間違っているのでしょうか???
while(kazu==0)
勘違いしてた…、逝ってくる…。
>>585 seki[i][j] = matrix[i][b] * tenchi[b][j];
を
seki[i][j] += matrix[i][b] * tenchi[b][j];
にしたら恐らくいけるね。
スレ汚しスマソ。。
>>589 ん!?正しくはどうすればいいのでしょうか?
あと kazu=kazu/10; なんてしちゃうと printf("%ldの各桁の和は%dです",kazu,sum); のkazuは元の値じゃなくなるぞ
while(kazu!=0)
597 :
デフォルトの名無しさん :03/07/28 16:46
整数1から20までの乱数をn個発生させ、各整数ごとの生成個数の平均と標準偏差を示しなさい。 ここで、nは1000,2000,・・・,10000とする。 なお、乱数はrandom()%20+1の式で生成するものとする。という問題で
598 :
デフォルトの名無しさん :03/07/28 16:47
597続き #include<stdio.h> #include<math.h> int main() { int a[21],c[10001],s,n,i,b; double av,sd,sd2; for(n=1000;n<=10000;n=n+1000){ printf("n=%5d\n",n); for (i=0;i<=21;i++); a[i]=0; s=0; for (i=0;i<=n;i++){ b=random()%20+1; c[i+1]=b; a[b]++; } av=s/n; for(i=1;i<=n;i++){ sd2(c[i] - av)*(c[i] - av)/n + sd2; } sd=sqrt(sd2); printf("整数 出現回数\n"); for(i=1;i<=21;i++) printf("%2d %d \n",i,a[i]) printf("平均値 %7.5f,標準偏差 %7.5\n",av,sd); } }
599 :
デフォルトの名無しさん :03/07/28 16:48
597、598続き とやったのですが、出現回数の平均値が50とでません。 あと、出現回数がnの値を超えてしまいます。 どうすればいいか教えてください。C言語です。
601 :
デフォルトの名無しさん :03/07/28 17:19
598訂正 #include<stdio.h> #include<math.h> int main() { int a[21],c[10001],s,n,i,b; double av,sd,sd2; for(n=1000;n<=10000;n=n+1000){ printf("n=%5d\n",n); for (i=0;i<21;i++); a[i]=0; s=0; for (i=0;i<=n;i++){ b=random()%20+1; c[i+1]=b; a[b]++; } av=s/n; for(i=1;i<=n;i++){ sd2(c[i] - av)*(c[i] - av)/n + sd2; } sd=sqrt(sd2); printf("整数 出現回数\n"); for(i=1;i<=21;i++) printf("%2d %d \n",i,a[i]); printf("平均値 %7.5f,標準偏差 %7.5\n",av,sd); } }
603 :
デフォルトの名無しさん :03/07/28 17:20
598です。すいませんでした。ちょっと間違っていたみたいです。 初心者なのですいません。
604 :
デフォルトの名無しさん :03/07/28 17:26
>>601 for()の中身がないときにもブロック化することをお勧めします。
っていうか、寧ろ慣れるまで省略すんな。
>>601 間違いさがしの問題なのか?11コ見つかったよ!
#include<stdio.h>
#include<math.h>
int main()
{
int a[21],c[10001],s,n,i,b;
double av,sd,sd2;
for(n=1000;n<=10000;n=n+1000){
printf("n=%5d\n",n);
for (i=1;i<=20;i++) /* (1)セミコロンが余計、(2)iは1から20 */
a[i]=0;
s=0;
for (i=1;i<=n;i++){ /* (3)iは1からn */
b=rand()%20+1; /* (4)標準関数の名前はrand() */
c[i]=b; /* (5)c[i+1]ではなくc[i] */
a[b]++;
s+=b; /* (6)合計値にbを足してなかったので1行追加 */
}
av=(double)s / n; /* (7)sをdoubleに変換してから除算 */
sd2=0.0; /* (8)sd2を0に初期化してなかったので1行追加 */
for(i=1;i<=n;i++){
sd2 = (c[i] - av)*(c[i] - av)/n + sd2; /* (9)代入文の"="がない */
}
sd=sqrt(sd2);
printf("整数 出現回数\n");
for(i=1;i<=20;i++) /* (10)iは1から20 */
printf("%2d %d \n",i,a[i]);
printf("平均値 %7.5f,標準偏差 %7.5f\n",av,sd); /* (11)2つめの%7.5fの"f" */
}
}
607 :
デフォルトの名無しさん :03/07/29 00:10
char ItoH(unsigned int n,char s[]) { int h,i; i=0; do{ h=n%16; s[i++]=(h<=9)?(h+'0'):(h+'A'-10); }while((n/16)!=0); s[i]='\n'; return(strrev(s)); } この関数、学校で例として出されたものなんですが(10進数の整数を16進数の文字列に変換) なぜ文字列が引数に入ってるんでしょうか?これは戻り値を文字列として結果を得ると思っていいのですよね? mainを書いていろいろ試してみたんですが上手く動作しません…。(mainの書き方がおかしいのかもしれない)
>>607 char *ItoH(unsigned int n , char s[]);
の間違いでは?
C言語では、文字列を返せない(そもそも文字列型がない)ので、
通常は、文字型の配列を引数として渡して、その配列を関数内で
操作する。
慣例として渡した配列(実際はポインタ)を返す。そのほうが何かと都合がいい。
strcpy()、strcat()の使い方を見ろ。
>>607 その引数は文字列ではなく、char 配列へのポインタ。
そのItoH()が間違ってるべさ。
611 :
デフォルトの名無しさん :03/07/29 01:40
UNIXでCプログラム開発をするとき、 gcc xxxx.c -im -o xxxx >& xxxx.err xxxx >xxxx.out & ps というコマンドを入力しました。その意味をパラメータも含めて書きなさい。 書いてもらえませんでしょうか??
すれちがい
>>611 -o 実行ファイル名を指定
-lm 算術演算用ライブラリをリンク
> リダイレクション。標準出力を、ディプレイではなく、ファイルに出力する
>613 >じゃなくて>&なんだけど?
たびたびすいません。。
>>608-610 宣言を cahr *ItoH(.... に直してみましたがまだダメです…
printf("%s", ItoH(n,s));
この書き方じゃダメなんでしょうか。。。
ItoHに渡す配列s[]の宣言の仕方がイマイチわかりません。適当に
char s[64]; とかでいいんでしょうか。
>>613 > -lm 算術演算用ライブラリをリンク
611は-imなんだが。
>>607 char *ItoH(unsigned n,char *s) {
sprintf(s,"%x\0",n);
return s;
}
int main(void) {
char s[64];
printf( "%s", ItoH(100,s));
return 0;
}
>>607 の ItoH() 関数の内部にも問題がある
>>618 文字列定数内に\0を入れるのは激しく無駄。
ついでに言えば無意味。
更に言えば無様。
sprintfの便利さはわかりましたが、前述のItoHを使いたいのです。 内部の問題とは何でしょう。
619も無駄だらけだな。(ワラ 更に言えばアホ。
623 :
デフォルトの名無しさん :03/07/29 12:49
624 :
デフォルトの名無しさん :03/07/29 12:56
なにか厨房がまだ今日も増(略
コメントに使える printf("(%d,%d)\n\0 xy座標を表示",x,y);
printf("(%d,%d)\n\0 総務の鈴木はホモ",x,y);
628 :
デフォルトの名無しさん :03/07/29 13:22
629 :
デフォルトの名無しさん :03/07/29 17:23
C言語で SO/SIによって半角カナモードに切り替えるJIS7の 半角カナをEUCもしくはSJISに変換するルーチンを作りたいのですが さぱーりわかりません・・・ 諸先輩方のご指導、ご鞭撻キボンヌです・・・
631 :
初心者です。 :03/07/29 18:06
標準関数printfは表示桁数を変数で指定できないため、 それを可能にする関数char*printint(int n,x)を作りなさい。 ここで、変数nは表示桁数、変数xは出力したい数値を表すものとする。 なお、表示桁数に満たない数の頭の部分は空白で埋めるものとする。 また、得られた処理結果はprintf("%s\n",printint(n,x));で確認できる。 という問題なのですが、ご迷惑でなければ、完全な回答を教えて下さい。 関数とmain文を使ってやって下さい。習って間もないので、簡単なプログラムで表記して下さい。
632 :
デフォルトの名無しさん :03/07/29 18:10
>>631 過去ログ読め
ちなみにprintfは桁数を変数で指定できる。
その問題出した奴にちゃんと伝えろ
635 :
デフォルトの名無しさん :03/07/29 23:40
cで、波動方程式df/dt+c*df/dxを次の条件で解く. 初期条件としてjが20と30の間でfj=1(n=0) それ以外でfj=0とし、 中央差分法、Lax-Wendroff法、風上差分法で解くプログラムを作成し それをグラッフィク表示する. ただし、空間方向のメッシュ数は60として、時間的に100ステップで計算し、 1ステップ、50ステップ、100ステップをグラッフィク表示する. また、毎時刻でf1=0,f60=0とおく. こんな問題ですけどできますか?
数値計算の問題はなかなか答えてもらえないよ。
638 :
デフォルトの名無しさん :03/07/30 13:18
Cの宿題なんですが9文字以内の文字列を入力し数字でない文字が 含まれていたら「数字でない文字が含まれています」と表示する プログラムです。 #include <stdio.h> #include <@> main(){ char a[10]; int i,n; printf("9個以下の数字を入力しなさい"); scanf("%s",A); n=B(a); for(i=0;i<n;i++){ if(a[i]<48 C a[i]>57{ printf("数字でない文字が含まれています\n"); D; }}} 上の@〜Dまでを教えてください。
639 :
デフォルトの名無しさん :03/07/30 13:22
>>638 #include <stdio.h>
#include <string.h>
int main()
{
char buf[10];
printf("入力:");
fgets(buf,sizeof buf,stdin);
if(strspn(buf,"0123456789")!=9)
printf("数字でない文字が含まれています\n");
return 0;
}
穴埋めか・・・
>>638 1,string.h
2,a
3,strlen
4,||
5,break
if(strspn(buf,"0123456789")!=9) じゃなくてif(strspn(buf,"0123456789")!=strlen(buf)) か。 見当違いな回答だからどうでもいいけど。
>>639 お手数かけてすみません。
ありがとうございました。
>>644 ( ̄▽ ̄;)
元が9文字ぴったり入力させるつもりのものだったからつい
>>638 と同じく穴埋めなんですが3つの整数a,b,cを入力して
a,b,cを3辺とする直角三角形ができるか判定するプログラムで
int a,b,c;
printf("整数を3個入力してください\n");
scanf("%d %d %d",&a,&b,&c);
if(a*a==b*b+c*c@b*b==c*c+a*aAc*c==a*a+b*b){
printf("B\n");
}else{
printf("C\n");}}
さっぱりわかりません。誰かお願いします。
最近の小学校ではCをやるのか...
648 :
デフォルトの名無しさん :03/07/30 14:38
別名:エピステーメー
↑誤爆った。スマソ
651 :
デフォルトの名無しさん :03/07/30 15:24
宿題で出されたんですが、サパーリわからないので教えてください。 「ボックス・ミュラー法によって標準正規乱数を生成するプログラムをC言語で書け。 また、ヒストグラムも作成せよ」 ほんとにさっぱりなんで教えてください。お願いします・゚・(ノД`)・゚・
>>646 #include <stdio.h>
int main()
{
int a,b,c;
printf("整数を3個入力してください。\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a*a==b*b+c*c||b*b==c*c+a*a||c*c==a*a+b*b) {
printf("どうやら直角三角形みたいでつ。\n");
}else{
printf("直角三角形ではないようでつ。\n");
}
return 0;
}
沢村にマジレスカッコイイ
657 :
デフォルトの名無しさん :03/07/31 05:34
659 :
デフォルトの名無しさん :03/07/31 08:32
>>658 どうしてプログラマってこういう言い方をするやつが多いのかねぇ。
素直にWord文書はやめろと言え。
ms word を持ってないと office document としかわからない罠
拡張子とHTTPヘッダーで分かりそうなものだが・・・ Content-Type: application/msword
663 :
デフォルトの名無しさん :03/07/31 11:22
double kane,kinri; int nensuu,saisyuu; scanfで各値に入力 kinri = kinri / 100 + 1; while (kane<saisyuu){ kane=kane*kinri; nensuu++; } って感じの金利計算プログラムなんですが 実際やらせてみるとすごい年数になってしまいます。 どこが悪いのか教えていただけないでしょうか?
double型の変数にscanfって scanf("%d",&kane) じゃだめでしたか? どうもステップインで見てると金利とかが怪しいのですが。。。 なおCです
666 :
デフォルトの名無しさん :03/07/31 11:41
ありがとうございます。 kaneとkinriのscanfのところをlfにしてみました。 で実行しなおしたのですが-8589(中略)年後に0円 という結果になってしまったのですが。。。。 再度ご教授願えないでしょうか? やっぱ金利がアレな気がするのですが
すいません自己解決しました。 nensuuを指定していなかったのが原因でした。 お手数かけて申し訳ございませんでした。
>>668 あ、そうですよね・・。 少し時間下さい。和訳します。さっきからお手数かけてすいません。
670 :
デフォルトの名無しさん :03/07/31 15:01
6つの実数a b c d e fをキーボードから入力すると、ax+by+c>0かつdx+ey+f>0を満たす領域を白く描画するプログラムを作成せよ お願いします…
671 :
デフォルトの名無しさん :03/07/31 15:06
>>670 訂正:6つの実数abcdefをキーボードから入力すると、『ax+by+cが0より大きい、かつdx+ey+fが0より大きい』を満たす領域を白く描画するプログラムを作成せよ。
でした。
どの環境でやるのかがわからない。Windows上のVCでいいのか?
674 :
デフォルトの名無しさん :03/07/31 15:20
676 :
デフォルトの名無しさん :03/07/31 15:37
お願いします。 名詞だけを取り出すCプログラムを作ってください。 20行くらいで出来ると聞いたのですが、C言語まったく出来ません。 お願いします。
ドイツ語なら簡単だな
681 :
デフォルトの名無しさん :03/07/31 16:11
誰か>671分かりませんか…
そういうのは普通ビットマップをファイルに保存するだけで十分だろう
684 :
デフォルトの名無しさん :03/07/31 16:20
>>682 初心者でテラパッドからコマンドプロンプトでやってるんですが…
686 :
デフォルトの名無しさん :03/07/31 17:12
クライアントからファイルを送り、サーバで受信するプログラムを作成せよ。 また、逆にサーバからファイルを送りクライアントで受信するプログラムを作成せよ。 どなたか、お願いします。
>>687 サウンドカードのLine in/outでお願いします
>>687 すみません、良くわかりません。
それがわからなければ組めませんか?
>>689 宿題だろ?どんな環境でのソフトなのか、説明しないと作る方もわかるわけないだろ
作った後で「こんなんじゃないんです」なんて言われたくないな
情報の後出しは苦労を無にする事となる
>>677 は、C++で作っていただきたいのですが?お願いします。
全然わからないので・・。
名詞を定義してくれ。
>>691 一応釣られてやるよ。
「名詞」とはなんだ?
どこから取り出すんだ?
日本語や英語のテキストから名詞だけを抜き出す一般的な方法はないぞ。
宿題なら宿題らしく、宿題の全文を提示してみろ。
>>690 ネットワークに接続された複数のワークステーションのプロセス間で
ソケットを構築し、ソケット同士を画像データの伝送経路として結合する形式である
ストリームソケット(TCP/IP)で画像による通信を行う。
osはそらりす
端末エミュレータで他ホストにリモートログインしサーバプログラムを実行
自分のホストでクライアントプログラムを実行する。
よくわかりませんが、こういうことで良いでしょうか?
日本語ならkakashiか茶筅落とさないと無理
>694 Cならsocket.h使うとか。
>>694 それはすでに C / C++ の基礎は終えて、ソケットライブラリとかネットワークとかの
勉強に入ってるんですね。。。この夏休み利用して遅れを取り戻さないとちょっと洒落に
ならないような気が。。
700 :
デフォルトの名無しさん :03/07/31 18:32
701 :
デフォルトの名無しさん :03/07/31 18:44
702 :
デフォルトの名無しさん :03/07/31 18:45
listenが1・・・
703 :
デフォルトの名無しさん :03/07/31 18:49
二つのエディットボタン(IDC_EDITの1と2)に入れた数字を足して IDC_STATICに結果を表示したいのですが、 IDC_STATIC = IDC_EDIT1 + IDC_EDIT2; ではエラーになります、どうしてでしょうか?
704 :
デフォルトの名無しさん :03/07/31 18:50
>>703 エラーメッセージくらい書け。
つーかスレ違い。ここは宿題をやらせるスレ。
>703 エラーメッセージも読めない&写せないんですか?
706 :
デフォルトの名無しさん :03/07/31 18:53
すみません、エラーメッセージは error C2106: '=' : 左のオペランドが、左辺値になっていません です。
707 :
デフォルトの名無しさん :03/07/31 18:55
>>706 じゃあ代入できないんだろ。
IDC_STATICって定数なんじゃ・・・
何方かVC++.net2003使える方でこの課題できる方いませんか? お返事くれましたら、とりあえず課題内容が書いてあるWordのファイル送ります どうか大変かってて申し訳ないと思いますがどうしてもやり方がわからなくてもう人に頼るしかないので本当にごめんなさいデスが宜しくお願いします
709 :
デフォルトの名無しさん :03/07/31 19:01
初めて、VCで計算機作れと言う課題出されてわけわかりません。 質問できるくらいの知識身に付けてから着ます、ありがとうございました
>>708 日本語が不自由で困ってるんだな。
課題の概要すら書いてないのに「この課題」とか、
見ず知らずの人に「Word ファイル送ります」とか。
711 :
デフォルトの名無しさん :03/07/31 19:03
>>703 1)クラスウィザードでそれぞれをメンバ変数化。
IDC_STATIC → CString m_result
IDC_EDIT1 → int m_num1
IDC_EDIT2 → int m~num2
2)適当なメッセージ関数で、
m_result.Format("%d", m_num1 + m_num2);
710番さんすいましせん。不愉快な思いさせるつもりではなかったのですがなんとなくどこから課題の内容書いたらいいかわからなくて。 簡単にいいますと、品物名を入力して、金額もいれて、合計金額を出力するwindowsの入力画面です。 本当に言葉足らなくて申し訳ありませんでした
>>712 補足1:
IDC_STATICのままだとメンバ変数にできない。
予め、IDC_STATIC1などと名前を変えておく必要がある。
補足2:
コントロールでないメンバ変数を更新するために、
UpdateData();
m~result....;
UpdateData(false);
としないといけない。
716 :
デフォルトの名無しさん :03/07/31 19:27
本当に宿題か?
3つのパラメータから中央値を選び出して返す関数 int select(int a , int b , int c)をコーディングしてくれ できるだけスマートなやしで
>>718 #include <stdlib.h>
static int icmp(const void *x,const void *y);
int iselect(int a,int b,int c)
{
int ia[3];
ia[0]=a,ia[1]=b,ia[2]=c;
qsort(ia,3,sizeof(int),icmp);
return ia[1];
}
static int icmp(const void *x,const void *y)
{
const int *xp=x;
const int *yp=y;
return *xp==*yp?0:*xp<*yp?-1:1;
}
int select(int a , int b , int c){ return max(max(min(a,b),min(b,c)),min(c,a)); }
おっと、システムコールとかぶらんように関数名を変えていたのを忘れた。 int select(int a,int b,int c) だ
>>691 さん
#include <stdio.h>
#include <stdlib.h>
struct juman{
char tago[4][21];
int a;
char b[21];
int c;
char d[21];
int e;
char f[21];
int g;
};
void main()
{
>>721 感動した!
課題のクイックソートで使ってみます
>>720 確かにselectって直接すぎでした。変えてみます
struct juman tango[256]; int i=0,x,z; FILE *fp; fp=fopen("juman.dat","r"); while(fscanf(fp,"%s%s%s%s%d%s%s%s%s",&tango[i].tango[0],%tango[i] .tango[1],&tango[i].tango[2],%tango[i].tango[3],%tango[i].a,%tango[i].b,&tango[i].c,tango[1] .d,%tango[i].e,tango[i].f,tango[i].g) != EOF) i++; for(i=0;i<256;i++){ if(tango[i].a == 6%% tango[i].c == 2){ X=i; for(Z=0;Z<=256;Z++){ if(tango[Z].a == 9 && tango[Z+1].a == 2){ printf("%s%s%s\n",tango[X].tango[0],tango[Z].tang[0] ,tango[Z+1].tango[2]); } } } fclose(fp); } ↑を?参考にして、ワークステーション? のなかで作れって言われたので何がなんだか?説明出来なくて ・・・。 自分がプログラム見ても分からないので・・・すみません。
726 :
デフォルトの名無しさん :03/07/31 20:46
>>725 for(Z=0;Z<=256;Z++){
if(tango[Z].a == 9 && tango[Z+1].a == 2){
アクセス違反の予感
むちゃくちゃだな こんなのを参考にするのか…
728 :
デフォルトの名無しさん :03/07/31 20:55
730 :
デフォルトの名無しさん :03/07/31 21:50
ソート(シェルソートやクイックソートなど)をつかって、なんかおもしろ いもの作りたいんやけどなんかある?
>>730 3つのパラメータから中央値を選び出して返す関数なんてどうだ?
>>714 別に不快になったわけじゃないけど、
日本語はちゃんと書いた方がいいよ。
指定された言語とか、どの部分が出来ないかとかちゃんと書いた方がいい。
丸投げは流石にちょっとどうかと思うんだが。
733 :
デフォルトの名無しさん :03/07/31 22:01
>>732 > 丸投げは流石にちょっとどうかと思うんだが。
スレ違いです。
どっちかっつーと、丸投げする場所だよな、ここは。
やっぱり・・・無理っぽいですね・・・。
>>735 質問が明確な物はちゃんとレスついてるだろう?
有効な返答が返ってこないのは、質問があいまいだったり、何か問題があったりするからだ。
737 :
デフォルトの名無しさん :03/07/31 22:52
はじめまして、早速なんですが sqrt domain error というエラーが出てしまって困っています sqrtの範囲外のエラーらしいというのは調べたんですが それ以上わからなくて質問させてもらいました ちなみにエラーが起こってるっぽいのは下の部分です。 b=tan(sqrt(k1*k1-B*B)*T)-sqrt((B*B-k2*k2)/(k1*k1-B*B));
738 :
デフォルトの名無しさん :03/07/31 22:53
マイナスになってるんだろう。
739 :
デフォルトの名無しさん :03/07/31 23:00
>>738 ありがとうございます。
でもあれなんです、tanを除いてやると
動くんです、これってsqrtのエラーなんでしょうか?
>>739 その後のbの振る舞いは?
晒せるならソース晒してみたら?
sqrtの結果がtanの特異点になってんじゃないか?
・2つの異なる値を入力しそれらを比較して、大きい値がいくつで小さい値がいくつであるかを出力するプログラムを作成してください。 ・2つの値を入力し、はじめに入力した値から次に入力した値未満まで1つ飛ばしに値を出力するプログラムを作成してください。
勉強不足。
int a, b; cin >> a; cin >> b; if(a < b) { double tmp = a; a=b; b=tmp; } cout << "大きい値は " << a; cout << "小さい値は " << b;
int a, b; cin >> a; cin >> b; int d = a > b ? -1 : 1; for(int i=a; i!=b; i+=d) { cout << i << endl; }
>>670 #include <stdio.h>
#include <stdlib.h>
#define Y_SIZE 11
#define X_SIZE 19
int main(void){
int a,b,c,d,e,f,y,x,g0,g1;char str[BUFSIZ];int gurafu[2][X_SIZE*2+1]={0};
printf("ax+by+c>0とdx+ey+f>0の2つの式のa,b,c,d,e,fを入力してください\n");
if(fgets(str,sizeof(str),stdin)==NULL) exit(1);
if(sscanf(str,"%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f)!=6) exit(1);
for(x=-X_SIZE;x<=X_SIZE;x++)
{
gurafu[0][x+X_SIZE]=(-a*x-c)/b;//(((-a*x-c)/b*2)+1)/2;
gurafu[1][x+X_SIZE]=(-d*x-f)/e;//(((-d*x-f)/e*2)+1)/2;
}
for(y=Y_SIZE;y>=-Y_SIZE;y--,puts(""))
for(x=-X_SIZE;x<=X_SIZE;x++)
{
g0=gurafu[0][x+X_SIZE];
g1=gurafu[1][x+X_SIZE];
if(y==g0||y==g1) printf("*");
else if(y==0&&x==0) printf("╋");
else if(y==0) printf("━");
else if(x==0) printf("┃");
else if(g0>0&&g1>0) printf("%c%c",0x14,0x14);
else printf(" ");
}
return 0;}
>>746 最後から3行目のprintf("");はスペースが2つ必要なので、
減ってしまっている場合は追加してね。
749 :
デフォルトの名無しさん :03/08/01 01:24
>>740 #include <stdio.h>
#include <math.h>
double f(double B, double k2, double k1, double T){
double b;
b=tan(sqrt(k1*k1-B*B)*T)-sqrt((B*B-k2*k2)/(k1*k1-B*B));
return b;}
int main(void){
int p;
double k1,k2,pai=3.141592,r0=0.03;
double b,T,a,S,R,d,ep=1.56,Bet;//R(Xn-1) S(Xn) Bet(Xn+1) ep(ε)
int N=500,i,j;
for(j=1;j<N+1;j++){
T=0.01*sin(pai*j*0.01)+0.011;
k2=2*pai/r0;
k1=ep*k2;
for(b=k2;b<k1;b++){
a=f(b,k2,k1,T);
if(a<0){R=b; break;}
else { S=b; }}
for(p=0;p<10;p++){
d=f(S,k2,k1,T)-f(R,k2,k1,T);
if(d==0){break;}
Bet=(R*f(S,k2,k1,T)-S*f(R,k2,k1,T))/(f(S,k2,k1,T)-f(R,k2,k1,T));
R=S,S=Bet;}
// 〜中略}
return 0;}
bとかサブルーチンに関わる部分はこのような感じです
よろしくお願いします。
>>749 double型に==を使うのはやめよう。
751 :
C言語だめぽ :03/08/01 02:38
6つの実数a、b、c、d、e、fをキーボードから入力すると、ax+by+c>ゼロかつdx+ey+f>ゼロを満たす領域を白く描画するプログラムを作成せよ。 お願いします、助けて下さい…。
>>751 グラフィクス関係の宿題はOSとコンパイラくらい書かないと、誰もあなたの
環境を知らんぞ?
仮定が多すぎるナ。まあ、一番素直な方法で。苦情は受け付けません(w #include <windows.h> int main(){ int x,y, mx=320, my=240; double a,b,c,d,e,f; HDC dc = GetDC(NULL); scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &e, &f); for( y=-my; y<my; y++) for( x=-mx; x<mx; x++ ) if( a*x + b*y + c > 0 && d*x + e*y + f > 0 ) SetPixelV(dc, x+mx, y+my, RGB(255,255,255)); else SetPixelV(dc, x+mx, y+my, 0); SetPixelV(dc, mx, my, RGB(0,0,255)); ReleaseDC(NULL,dc); }
754 :
デフォルトの名無しさん :03/08/01 03:12
>>752 OSはWindowsXP[Version 5.1.2600]
コンパイラはBCC(Borland C++ Compiler)
です…。
>>753 ありがとうございます。
参考にさせていただきます。
755 :
C言語だめぽ :03/08/01 04:06
やっぱ難しいですかね?
756 :
デフォルトの名無しさん :03/08/01 04:09
基地外、氏ね
757 :
C言語だめぽ :03/08/01 04:14
>>756 先生に言ってよ。
プログラム歴1か月の学生なんかに出す問題じゃないよこれ。
759 :
C言語だめぽ :03/08/01 04:57
>>758 不満じゃないですけど、画像を表示するのにbmpdispを使ってるから分からない単語があるんです。
例えば
HDC dc=Get DC(NULL)や、
RGBはどういう意味なんですかね?
まず先生のせいにするな できないのは自分のせいだ
>>759 情報の小出しをするから悪いんだろう?
先生はどんな方法で画面に出せと言ったんだ?
あなたが出した少なすぎた結果だ。
>RGBはどういう意味なんですかね? これなら僕でもわかる。光の三原色です。 赤、緑、青で0から255まで扱う。255,255,255なら白色ですね。
ホントに無知でごめんなさい…(´・ω・`) コレ以上だとスレが荒れる気がするのでこの話はもう終わりにしましょう。
>>762 ありがとうございます。
こんなことも知らないで俺もっと勉強しなきゃダメですね。
また出直してきます…。
765 :
デフォルトの名無しさん :03/08/01 12:36
x万円を年利率複利n%でy年間で返すには何年かかるか を求めるプログラムを作りたいのですが どういう感じで組めばいいのでしょうか。 最初は30年間の金額を算出して30で割れば余裕とか思ってたんですが 複利だったんで。。。 どなたかご教授願います
>y年間で返すには何年かかるか y年だろ。
767 :
デフォルトの名無しさん :03/08/01 13:00
y年間で返すには年間いくら返すか、でした。すいません
>>766 年にいくらずつ返せばいいかってこと?
数学勉強しる。
z 万円ずつ返すとすると、n 年後の残金 x[n] は
x[n+1] = (1 + n/100)(x[n] - z)
これをといて、x[y] <= 0 になる z を求める。
変数名 n がかぶっちゃってるな。 ごめん。 z 万円ずつ返すとすると、i 年後の残金 x[i] は x[i+1] = (1 + n/100)(x[i] - z)
x[i+1] = (1+n/100)*x[i] - z とちがうん?
771 :
デフォルトの名無しさん :03/08/01 13:23
その式にはたどり着いたんですが zを求めるにはC言語的にはどうやればいいんでしょうか?
772 :
デフォルトの名無しさん :03/08/01 13:37
どうやればいいかってそのままだろ。
面倒だから N = 1 + n/100 とする。 x[y] = N*x[y-1] - z x[y-1] = (x[y] + z ) / N from x[y] = 0 x[y-1] = z/N x[y-2] = (z+zN)/N^2 x[y-3] = (z + zN +zN^2)/N^3 ... x[y-k] = z*(1+N+N^2+...N^(k-1) )/N^k x[y-y] = z*(1+N+N^2+...N^(y-1) )/N^y z = x[0]*(N^y)/(sigma{k=0 to y-1}( N^k ) と変形できるだろ。
774 :
デフォルトの名無しさん :03/08/01 14:22
[0]とかって配列ですよね? 配列はまだ大学でやってないのでそれを使わないとなると それだけの数の変数を宣言しなくちゃ駄目ですか?
おいおい、、ネタか? 結局必要なのはx[0]だけで、それは、借金の初期金額だろうが。 あとはみんな途中計算だよ。
776 :
デフォルトの名無しさん :03/08/01 14:36
そうですね。どうもありがとうございます。 あとsigmaの関数?もやってないんですが それを使わずには解けないのでしょうか?
少しは頭使えよ
778 :
デフォルトの名無しさん :03/08/01 14:40
関数定義して再帰的にやればできる。
while(1) { y = x; for(i=0; i<n; i++) y = (1 + r)*y - 12*answer; if(y <= 0) break; answer++; } これとかどうよ?
782 :
デフォルトの名無しさん :03/08/01 14:58
文字列をdouble型に変換するatof関数と 文字列をint型に変換するatoi 文字列をlong型に変換するatol それにstrtodを自作しろという宿題があるのですが 全く分かりません。 どれでもいいので分かる方いたらよろしくお願いします
783 :
デフォルトの名無しさん :03/08/01 15:09
>>781 すいません。
変数が何が何なのかがわかりません。。。
どなたか教えていただけないでしょうか?
おまえはいったい、何歳なんだ? ホントはCのこと、まるで分かってないんだろ
まぁ実際781はおかしい訳だが。
>784さん 18歳です。 C言語は大学に入って初めてやり始めました。 金利の複利計算の課題とこのローンの課題が出て 複利計算の方はforで回したら自分でできたんですが こっちがどうしてもわからなくて。。。 ホント何も分かってなくて申し訳ございません。
787 :
デフォルトの名無しさん :03/08/01 15:31
>>786 まぁここはそういう奴らが課題を丸投げする為のスレなんだが。
誤ることは無いと思うが複利計算のプログラム書けたら
それと同じ要領でやればいいんじゃねーの?
>>786 毎年の支払額yから完済にかかった年数を求める関数
int clear(int y);を作り
安定な二分法でかかる年数の境界を求めればよい
だから、 (1+N+N^2+...N^(y-1) ) * z = x[0]*(N^y) を解けば求まるって。 右辺は、最初の借金を、最終年度換算したもの(y回複利で利息がつく)。 左辺は、最終年度換算で幾ら払ったか。 (1年目に払ったz円は、y-1回複利で利息が付き、 2年目に払ったz円は、y-2回複利で利息が付き、 y年目に払ったz円には、利息が付かない)
問題の意図を全く分かっていない
791 :
デフォルトの名無しさん :03/08/01 17:48
786じゃないがそれだと凄く冗長的じゃないか?
いつもの流れなら誰かがソース張るんだが。 俺もソース貼ろうと思ったがどうも論理エラーがあるようで。 つかこれ一年に解かせるにはかなりむずくないか? 誰か正解ソースキボン。
z = x * n / 100 / (1 - pow(1 + n / 100, -y));
その式使ってこっちでコンパイルしたが凄い答えになったぞ。
int main() { int Loan,Year,i; double interest_rate, N, denominator=0, numerator=1,d=1; printf("initial_rent year interest(%%) \n"); scanf("%d %d %lf", &Loan, &Year, &interest_rate ); N = 1+interest_rate/100; for( i=0; i<Year; i++){ denominator += d;d *= N;numerator *= N;} printf("Payment per year is : %d.", (int)(Loan*numerator/denominator+.5) ); }
(^^)
やっぱ夏はお題が少ないなぁ
799 :
デフォルトの名無しさん :03/08/02 18:13
年金公式 n期間にわたって、金利がr、現在価値(借金した額)Pとすると P x r x ( 1 + r ) ^ n (支払)=ーーーーーーーーー ( 1 + r ) ^ n - 1
#include <math.h> static float pension( int total, int period, float interest ) { float r = interest / 100; return ( total * pow( r + 1, period ) * r ) / ( pow( r + 1, period ) - 1 ); } int main() { float interest; int period; int loan; printf( "利子[%]? : " ); scanf( "%f", &interest ); printf( "支払期間? : " ); scanf( "%d", &period ); printf( "借りた額? : " ); scanf( "%d", &loan ); printf( "毎期の支払額 = %f\n", pension( loan, period, interest ) ); return 0; }
802 :
デフォルトの名無しさん :03/08/02 18:47
数値例 利子[%]? : 4 支払期間? : 30 借りた額? : 100000000 毎期の支払額 = 5783012.500000 578万円ずつ返すらしい。 以上、大学生活板からコピペ
803 :
デフォルトの名無しさん :03/08/02 18:51
804 :
デフォルトの名無しさん :03/08/02 19:03
>>782 #include <string.h>
static int myatoi( const char in[] )
{
int value = 0;
int length = strlen( in );
int i;
for( i = 0; i < length; i++ )
{
value *= 10; // 10進数だから
value += in[i] - '0'; // 文字を数値に直す
}
return value;
}
int main()
{
const char str[] = "123456";
printf( "%s = %d\n", str, myatoi( str ) );
}
文字が数字じゃなかったら
806 :
デフォルトの名無しさん :03/08/02 19:17
#include <math.h> #include <string.h> static double myatof( const char in[] ) { double value = 0; int length = strlen( in ); int period = 0; int i; for( i = 0; i < length; i++ ) { int c; c = in[i] - '0'; if( 0 <= c && c <= 9 ) { value *= 10; // 10進数だから value += c; } }
807 :
デフォルトの名無しさん :03/08/02 19:17
// 小数点を探す
for( i = 0; i < length; i++ )
{
if( in[i] == '.' )
{
period = i;
break;
}
}
// 小数点の位置に合わせて10で割る
value /= pow( 10, length - period - 1 );
return value;
}
int main()
{
const char str[] = "3.14159";
printf( "%s = %lf\n", str, myatof( str ) );
}
>>805 atof()では数字じゃないときも考慮。
全体的に手抜きだけど。
808 :
デフォルトの名無しさん :03/08/02 19:23
>>806 >int period = 0;
int period = length;
>if( 0 <= c && c <= 9 )
化けている。
if( 0 <= c && c <= 9 )
809 :
デフォルトの名無しさん :03/08/02 19:23
どうしても化けるな。 >if( 0 <= c && c <= 9 ) if( 0 <= c && c <= 9 )
810 :
デフォルトの名無しさん :03/08/02 19:29
まだ負の数に対応していないとか問題だらけだけど、 原理としてはこんな感じ。
sscanfは駄目?
>>811 気持ち悪いと言う人も入るけど、使いこなせるなら無問題。
814 :
デフォルトの名無しさん :03/08/02 19:51
>>811 別に駄目ではないけど、たぶん循環問題になる。
sscanf()の中身でstoiとか使っているだろうから。
>>812 気持ち悪いと言うのは、たぶんscanf()系の関数は
気をつけて使わないと領域破壊をする、
つまり、有名なバッファオーバーフローのバグを作りやすいからでは?
815 :
デフォルトの名無しさん :03/08/02 20:07
816 :
デフォルトの名無しさん :03/08/02 23:03
誰か教えてください 下図のような罫線文字を使用して描かれたテキストデータより ・ループしている線の本数 ・ループしていない線分の本数 を出力するプログラムを作れ。 ┏━┓ ┃┃┃ ┏━┓ ┃┃┃ ┃┏┛ ┗╋╋━╋╋━━┓ ┏┛┗━╋╋━━┛ ┃┏━━┛┃ ┏━ ╋╋━━━╋━┛ ┗━━━┛ ->ループしている線:2本 ->ループしていない線分:2本
>>816 例題にはT字型で接続された罫線がないけど、それがないことは前提にしていい?
そんなのダメ
┏┓ ┣╋┓ ┃┃┃ ┃┃┃ ┗┻┛ T字型があるとすると、上のような形が出てくる可能性があるけど、その場合は ループいくつになる?1つ、2つ?
820 :
デフォルトの名無しさん :03/08/03 00:11
jm
考えられるケースとそれぞれに最適解を
つまり問題の考え得る全てのパターンをまず考えてください
C言語でないパターン含む
罫線の太さも考慮せよ ┏┯┳┯┯┳┯┯┯┓ ┣┿╋┿┿╋┿┿┿┫ ┠┼╂┼┼╂┼┼┼┨ ┣┥┣┥┝┫┝┥┝┫ ┗┷┻┷┷┻┷┷┷┛
826 :
GET!DVD :03/08/03 01:12
今日の運勢も出せるといいですね ││├┤ ├┤││ │├┤└ ├┤││ 大小末大 凶凶凶吉
三次元の場合も、もちろん考慮して下さい
>>817 何か偽者が暴れているようです。。。
T字を使用しないことが前提となります。
お願いします。
831 :
デフォルトの名無しさん :03/08/03 07:32
>>830 >T字を使用しないことが前提となります。
そうだろうね。
グラフ理論というか、あるポイントとあるポイントが結合しているという
情報でなんとかなる問題だと思う。
T字を含めると1:多数でリンクしちゃう。
まずはテキストからグラフに変換するルーチンを書いて
それを解析する2段構えのプログラムを書けばいいんだろうけど、
眠いからまた今度。
s/眠いからまた今度/分からないので放置/
僕は真性馬鹿なので。。。 永遠に放置してください。 お願いします。
なんで荒らしてんの? 同じ授業受けてる奴が妨害してんの? 「俺は苦労して作ったのに、馬鹿に楽して単位取らせてたまるか!」って感じ?
感じぃ〜
そうか、それなら納得。 作ろうと思ったけど、眠いからまた今度。
s/眠いからまた今度/分からないので放置/g
おっと今7割方作っちゃったけど中途半端じゃ悪いし・・ 眠いからまた今度。
s/7割方作っちゃったけど/肝心な部分がさっぱり分からないのでそれ以外の7割は作ったけど/o
841 :
デフォルトの名無しさん :03/08/03 23:33
>>816 みたいなパズルゲームがあったな、そういえば。
843 :
デフォルトの名無しさん :03/08/04 00:52
二つの整数X,Yを読み込み、X+Y、X-Y、X*Y、X/Yを表示するプログラムを書け。 どなたか、御願いします(^-^*) 当方高校2年です。
>>843 #include <iostream>
main()
{
double x, y;
std::cout << "Xを入力して" << std::endl;
std::cin >> x;
std::cout << "Yを入力して" << std::endl;
std::cin >> y;
std::cout << "X+Y=" << X+Y << std::endl;
std::cout << "X-Y=" << X-Y << std::endl;
std::cout << "X*Y=" << X*Y << std::endl;
std::cout << "X/Y=" << X/Y << std::endl;
}
なるほど〜アリガト!(´▽`)ございました^^
COMMAND.COM /C BCC32.EXE ex1.cpp *** コンパイル開始 *** Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ex1.cpp: エラー E2206 ex1.cpp 5: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2206 ex1.cpp 6: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2206 ex1.cpp 7: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2206 ex1.cpp 8: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2206 ex1.cpp 9: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2206 ex1.cpp 10: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2451 ex1.cpp 10: 未定義のシンボル X(関数 main() ) エラー E2451 ex1.cpp 10: 未定義のシンボル Y(関数 main() ) エラー E2206 ex1.cpp 11: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2206 ex1.cpp 12: 不正な文字 ' ' (0x8140)(関数 main() ) エラー E2206 ex1.cpp 13: 不正な文字 ' ' (0x8140)(関数 main() ) *** 11 errors in Compile *** *** コンパイル終了 *** ( ̄□ ̄;)ナント!!こうなってしまうのですが…。 このソフトが糞なのでしょうか・・。
>>846 あと、
double x, y;
を
double X, Y;
に置き換えて
>>842 コードを追ってみたところ、大変勉強になりました。
ありがとうございました。
http://osaka.yomiuri.co.jp/new_feature/kokoro/jyuku06.htm 社会福祉法人「いのちの電話」の斎藤友紀雄事務局長は、「『いじめ』は
世界中で起きていますが、日本の場合、その一番大きな原因は、異質なも
のを認めないという精神文化に根ざしていると思います。偏差値教育や核
家族化によって孤独を強いられた子どもたちは、必死に自分の居場所を求
めるのですが、性格や能力が集団と調和しない子は、集団から排除されて
しまう。つまり、村意識が働いて、村八分にされてしまうのです」と語る。
<差別いじめをなくそう>
日本国憲法(国のあり方を定めた法)は、個人主義を定めています。
それは、戦前、全体主義だったわが国が、悲惨な戦争に突入し敗戦したと
いう苦い経験の反省に基づきます。
別にみなが一緒じゃなくてもいいでしょ?
みなが一緒じゃないと安心できない集団がいて、その集団が
異質分子を排斥しようとする。
A型は仲間を作ろうとする時、自分と価値観やリズムが同じ人ばかりを引 き寄せて、波長の合わない人々を避けてしまう傾向があります。そこには、A型 の、周囲に波風を起こしたくない、できるだけ安定した環境を作っておきたい、と いう思いが働くからです。そんな風にしているうちに、気がついてみたらA型ば かりの集団になっていた、ということはよくあります。 価値観がある程度同じ方向に向かっていることは大切なことですが、あまり同じ ような考えの人ばかりが集まることは危険です。和気合いあいのムードにすっ かり慣れて、「井の中の蛙」になってしまう恐れがあるからです。 A型は、周囲と協調して現状を安定させたい面と、常に向上心を持って現状を 脱皮したい面の両方を、バランスよく保っていくことで、上手に成長していくので す。 自分と違う考えの人は、衝突も激しく起こるけれど、自分に良い刺激を与え、視 野を広げることにもなるということを考えてみて下さい。 また、人間関係にもけじめをつけようとするA型は、お客と店員など、立場で態 度を大きく変えたりすることがありますが、行き過ぎれば、やはり好ましくない行 動表現に見えます。
852 :
デフォルトの名無しさん :03/08/04 14:54
854 :
デフォルトの名無しさん :03/08/04 16:05
#include<stdio.h> #include<stdlib.h> struct gin{ int account[30]; char name[30]; double balance[30]; }; int main() { int i = 1, j = 1, v, hold; struct gin data[30]; FILE *cfPtr; if((cfPtr = fopen("clients.dat","r")) == NULL) printf("ファイルをオープンできません\n"); else{ printf("%-12s%-14s%s\n","口座番号","名前","取引残高"); fscanf(cfPtr,"%d%s%lf",&data[i].account,data[i].name,&data[i].balance); while(!feof(cfPtr)){ printf("%-12d%-12s%10.2lf\n",*data[i].account,data[i].name,*data[i].balance); fscanf(cfPtr,"%d%s%lf",&data[i].account,data[i].name,&data[i].balance); } fclose(cfPtr); } return 0; }
854の問題はファイルからaccount name balance を読み取り表示するのですが これをbalance順に並べて表示する方法を教えてください
856 :
デフォルトの名無しさん :03/08/04 16:26
ソートする
なんで、accountやbalanceが配列なの?
>>857 30人分のデータを入れるためです
accountは口座番号,nameは名前,balanceは残りの残高です
それで残高が多い順にソートしたいのです
30人分のデータが、30個=900人のデータが入るということか? それにしては、nameの扱いが解せないが。
助けて下さい。全く見当がつきません。 1.標準入力ストリームから任意の正の整数値をうけとってその5乗根を表示するプログラムを書け。 2.標準入力ストリームから任意の2つの実数値a,bを受け取ってa^bを表示するプログラムをかけ。
>>861 pow(a, 0.2);
pow(a, b);
>>864 ありがとうございます。ただ、既存の関数は使わず一から実装せよとのことでした。
866 :
デフォルトの名無しさん :03/08/04 18:22
C言語ってint型の変数の範囲って決まってますよね。 その範囲を超えたときにエラーメッセージを表示する方法はありますか? 例外処理なんかができるとgoodです。
>>866 signal()
ただし使えるかどうかは知らん
お初です. 夏休みのC++の宿題でボーランドのコンパイラでコンパイルするのと VC++でコンパイルするのでは処理速度にかなりの差がでるのはなぜか という宿題が出されてしまいました。なぜだか分かったら教えてくだ さい。HPアドレスなんかも教えてくれたらありがたいですm(__)m
すみません。上の発言はコンパイルしたファイルの処理速度です
870 :
デフォルトの名無しさん :03/08/04 19:02
最適化ってなんですか。 宿題の答えとして出せるようなレベルのがほしいんですが。
>>868 ディスアセンブル汁
そもそも速度が違うという前提はどこからでてきたのか確かめろよ
丸投げスレではあるんだけども、しかしムカつく書き方だな。 最適化って言うのは、コンパイラがソースコードの無駄な箇所を自動的に見つけて、 当該部分を削除したり効率のよくなるように書き換えたりすること。 宿題で出せるレベルにするなら、両コンパイラに同じソースのアセンブリコード吐かせて、比較してみられー。
コンパイルオプションにもふれてないしネタか?
整数(0〜99)をn個入力し、範囲別に結果を表示せよ。for、if使用 例 0-99 : 2 100-199 : 1 . . 900-999 : 3 よろしくおねがいします
876 :
デフォルトの名無しさん :03/08/04 21:14
>>875 最小値-最大値 : 入力された個数
こういうことか?
>>876 そうですー
878 :
デフォルトの名無しさん :03/08/04 21:17
>>877 入力する個数は可変みたいだけど、入力を終了するときはどうするの?
>最適化って言うのは、コンパイラがソースコードの無駄な箇所を自動的に見つけて、 >当該部分を削除したり効率のよくなるように書き換えたりすること の訳がない
>>879 Optimization って言う is a compiler's finding the useless part of a
source code automatically, and deleting the portion concerned, or
rewriting so that it may become good [ efficiency ].
by excite
終了は適当で いいみたいですけど。。
>>881 そうか。
じゃあ面倒だから数字の入力に先立って入力する個数を入力させるか。
しばし待たれよ。
>>875 今一わからんけど、こういうこと?
あと、0〜99ってなってるけど0〜999の間違い?
#include <stdio.h>
int main(void)
{
int i, hist[10] = { 0 };
while (scanf("%d", &i) == 1) {
if (i >= 0 && i <= 999) {
++hist[i / 100];
}
}
for (i = 0; i < 10; ++i) {
printf("%d-%d: %d\n", i * 100, i * 100 + 99, hist[i]);
}
return 0;
}
やっぱり分布図か。
>>884 100ごとにだから0-99でいいと思う。
>>885 分布図ですね それは printf で長々と かいていいみたいです
>>886 そんなことは聞いてない。ていうか君には聞いてない。
訳わけ 訳やく 微妙な字体の違いだよね。
素因数分解の結果の表示の仕方で 200= (2^3)*(5^2) と表示させたいんですけど お願いします
整数(0〜99) ←これのことか
>>896 すまない。「例 0-99 : 2」と勘違いしたよ。
よくみたら「〜」と「-」の違いがあるじゃないか・・・
>>897 整数(0〜999)の間違いでしたね ごめんなさい。。。
899 :
>>893 :03/08/04 22:07
すみません871は私の発言ではないです。 このようなことは私は書いてません。
>>584 / ヽ / ヽ
/ ヽ___/ ヽ
/ 井\ l___l /\
| 井 ● | | ● | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
へ | へ ヽ / | < >>エラトステネスはまだ〜?
\\ \ \\ ヽ/ / \_____________
チン \\ .> \\ ヽ
チン \\/ \\ _ |
\ ̄ ̄ ̄ ̄ ̄ ̄ ̄/ / ̄ ヽ / _
\回回回回回/ ̄ ̄ヽ / ̄ ̄ /|
\___/ ヽ____/ / |
/ |
/ |
>>693 さん
Cで・・・(++でない)
二つのファイルを出力し
品詞が名詞のレコードのみを出力するプログラムを作れ。
使用する品詞は、普通名詞、固有名詞、さ変名詞。
こんな感じで?分かります??
わからん
>>906 おまえの知っている情報を全部出せ。
宿題として出されたのならその文章を全部間違いなく書き写せ。
話はそれからだ。
#辞書DBでも参照するって言うDBアクセスの課題って気がしてきた・・・
レコード、とは? その「レコード」はどこにある?
1、毎日新聞記事の入ったファイルを作る 2、1をJUMANにかける→ファイル出力 3、2のファイルを品詞が名詞のレコードのみを出力するプログラムを作る。 UNIX上のコマンドにある「awk」の入力1行のことを1レコード(ファイルの1行?) みたいなんですけど・・・。
運動:名詞,動く:動詞,・・・・と属性を伴っているのならいいけど、単語から名詞かどうか判断するのって難しそう。
名古屋空港で小型機が胴体着陸、搭乗4人けがなし
名古屋 (なごや) 名古屋 地名
空港 (くうこう) 空港 普通名詞
で (で) で 格助詞
小型 (こがた) 小型 普通名詞
機 (き) 機 普通名詞
が (が) が 格助詞
胴体 (どうたい) 胴体 普通名詞
着陸 (ちゃくりく) 着陸 サ変名詞
、 (、) 、 読点
搭乗 (とうじょう) 搭乗 サ変名詞
4 (よん) 4 数詞
人 (にん) 人 名詞性名詞助数
けが (けが) けが サ変名詞
なし (なし) ない 形容詞 イ形容詞アウオ 文語基本形
こんな感じです。
>>911
もうやだ、この知・・・ 大体Cの課題というよりシェルスクリプトの課題じゃないか(:;
JUMANってそういうものなのか。 じゃあstrstrでいいんじゃないの。
「地名も固有名詞だから
>>906 の使用する品詞にはいるだろう」
と突っ込みが入りそうなので修正。
>>906 に挙げてある3つは、JUMANが吐いた出力のことだと思うが、
地名・人名のように、特別な出力があるものは無視していいのか?
>>918 レス遅れましたm(..)m
う〜ん・・・もう一回詳しく聞いてみます。
申しわけないです。
>>918 今のところは特別な出力は無視していいそうです。
未だやってもらう気満々だったのか・・・
>>920 次の指令:
JUMANが1行に出力する文字数に制限はあるか?
あるならそれは何文字か?
>>922 10文字〜最大20文字です。
制限はあまり気にしなくても良いといわれましたのですが。
C++コンソールアプリで、方程式/連立方程式を解くコンソールアプリを作りたいのですが、 全くできません。目標は C:\>hoge.exe "7x-45y=-284" "x+y=4" x=-2 y=6 C:\> こんな感じです。実際はLinuxで使うので少し違いますが。 誰か作ってもらえませんか?
宿題なら全文提示してくれ
>>926 そのまんまです。""が一つの場合は一つのアルファベットを解いて""が二つ(連立)の場合は
二つのアルファベットを解くやつです。
どっから手をつければいいかすら分かりません。
よかったら、全部作ってください
なかなか難しいな
>>928 そうなんです。
だから、「なんでもまかせろ」とおっしゃるここのスレの方ならなんとかなるかと。
宿題じゃないんだろ?
>>930 課題です。まぁ宿題みたいなもんです。
夏休み中です。
要は、"5.08x+4y+9=-04.80+3z-3x" という式をパースして、 [3.000000 4.000000 -3.000000] = -13.800000 という行列(の一部)を生成すればいいんだろ。できたよ。
早速バグってやがる( ´Д`)y━─┛~~ [8.080000 4.000000 -3.000000] = -13.800000
934 :
デフォルトの名無しさん :03/08/07 09:30
C++で入力された単語がそれぞれ何回出たかを出力するものを書いているのですが 途中でアクセス違反になってしまいます。どこがおかしいのでしょうか? よろしくお願いします。 int main() { vector<string> num; string x; cout << "単語を複数個入力してください。 << '\n' << "ctrl+zで入力をやめます。" << endl; while(cin >> x){ num.push_back(x); cin.clear(); } if(num.size()<=){ cout << "入力された単語の数が足りません。" << endl; return 1; }
935 :
デフォルトの名無しさん :03/08/07 09:30
続きです sort(num.begin(),num.end()); vector<string>::size_type size; size = num.size(); string tmp; int tmp2=0; //比較と結果の出力 for(int i=0; i != size; i++){ tmp = num[i]; if(i==size){ cout << "比較は終了しました" << endl; } else if(tmp==num[i+1]){ tmp2++; } else{ cout << tmp << "は" << tmp2+1 << "個です。" << endl; tmp2=0; } } return 0; }
すいません if(num.size()<=) のところは if(num.size()<=1) です。
i = size -1のとき、 num[i+1]が違法。
>>934 map<string,unsigned int>words;
while(cin >> x){
words[x]++;
}
for(map<string,unsigned int>::const_iterator i = words.begin(); i != words.end(); ++i){
cout << i->first << "は" << i->second << "回" << endl;
}
>>932 便乗だけど2次方程式解くにはどうしたらよいの?
x^2+3y+5=0
x+5y=2
みたいな香具師
<<937 ありがとうございます。最後の所を for(int i=0; i != size; i++){ tmp = num[i]; if(i==size-1){ cout << num[i] << "は" << tmp2+1 << "個です。" << endl; cout << "比較は終了しました" << endl; } else if(tmp==num[i+1]){ tmp2++; } else{ cout << tmp << "は" << tmp2+1 << "個です。" << endl; tmp2=0; } } にしたらできました。
>>938 mapという型自体をはじめて知りました。
勉強してきます。
943 :
デフォルトの名無しさん :03/08/07 11:08
unsigned charを引数にして LSB側4bitが全て0であるかどうかを判定する 関数を誰か作ってください 戻り値はunsigned char型で 1なら真 0なら偽 それ以外ならエラー と言う条件でお願いします
エラーって、どういう状況だろーか
unsgned char testLSB4bit( unsgned char ch ) {return !( ch & 0x0f );}
>>925 ガウス消去はたぶん理解できないだろうから
#include <iostream>
using namespace std;
int main()
{
double x[] = {7,-45,-284};
double y[] = {1,1,4};
double div_x = x[0];
for(int i=0; i<3; ++i){
x[i] = x[i] / div_x;
cout << x[i] << ", ";
}
cout << endl;
double div_y = y[0];
for(int i=0; i<3; ++i){
y[i] = y[i] / div_y;
cout << y[i] << ", ";
}
cout << endl;
for(int i=0; i<3; ++i){
y[i] = y[i] - x[i];
cout << y[i] << ", ";;
}
cout << endl;
div_y = y[1];
for(int i=0; i<3; ++i){
y[i] = y[i] / div_y;
cout << y[i] << ", ";
}
cout << endl;
続き cout << "y=" << y[2] << endl; for(int i=0; i<3; ++i){ y[i] = y[i] * x[1]; cout << y[i] << ", "; } cout << endl; for(int i=0; i<3; ++i){ x[i] = x[i] - y[i]; } cout << "x=" << x[2] << endl; あとは自分で考えれ。
>939 その二元二次方程式は、楕円の交点を求める問題にまで 発展するのか? 5xx-6xy+5yy-14x+2y+5=0 xx+4yy=1 みたいに。
なにをやってるかわからんかったら数Cの吐き出し法を復習しれ
>>949 別に宿題じゃないんだけどふと思いついた。
なんかいい方法ってありましたっけ?
解なしのときの処理とかが面倒だね。
954 :
デフォルトの名無しさん :03/08/08 17:39
こんなかんじ。動作未確認、勘弁。 void Search_r(char *sid,int depth, Node *node) { if (strcmp(node->id,sid)!=NULL){ printf("%s,%s,%s\n", root->id, root->name, root->ruby); return; } if (node->left != NULL) { Search_r(sid,depth + 1, node->left); /* 余白の間隔を調節 */ } if (node->right != NULL) { Search_r(sid,depth + 1, node->right); /* 余白の間隔を調節 */ } }
>955 ありがとうございます。 参考にさせてもらいます。
コンパイルすると次の行 if (strcmp(node->id,sid)!=NULL){ が warning: comparison between pointer and integerとでるのですが なぜでしょうか。
strcmpって・・・ まあいいか
Search_rの使い方が悪いんじゃないか? idに0わたしてるようだし
・本来のmain文が読めません(;;)使い方不明です。 とりあえず嘘main文を書いておきました。 ・Display関数も、こんな風に簡略化できる。
フローを詳しく追っていけばあなたなら分かると思うけど、 3,木田,kida( 6,下田,simoda( 2,山田,yamada( 1,中田,nakata( 7,山田,yamada( 9,ぬるぽ,gaxtu!( こういう内容のファイルを用意してコマンドラインから 実行ファイル名 < テキストファイル みたいにするとできる。(このへんはやってないのかな?) データの(の意味がよく分からないけど、 そのあとになにかはいるんだろう。たぶん。
_ ミ ∠_)←>木田 下田 山田 中田 山田 / / \\ ウイーン Γ/了 | | ウイーン |.@| | | ガッガッガッ | / | 人 |/ | < >_Λ∩ _/ | //.V`Д´)/ (_フ彡 /
965 :
デフォルトの名無しさん :03/08/09 20:05
lessを作れと言う課題が出ました。 UNIXのLESSです。 機能としては, j=一行進む k=一行戻る space=一画面進む b=一画面戻る q=終了 を作れと言う事です。 C言語でncursesという端末を制御するライブラリを使って作れと言う事です。 入力として与えられたファイルから1行ずつ読み出してそれを双方向リストで繋げろという課題です。 全く分かりません助けてください。
こういうときlessのソースを探すのが定石
そしてGPL違反
>>955 とりあえず
struct line{
char *s;
struct line *prev, *next;
};
俺としては、 struct line { struct line *prev, *next; char s[1];}; の方がいいナ
970 :
デフォルトの名無しさん :03/08/09 23:07
972 :
デフォルトの名無しさん :03/08/09 23:15
>>969 ねぇ、その要素がひとつの配列にはどんな意味があるの?C FAQにもあるけれどよく分からない。
973 :
デフォルトの名無しさん :03/08/09 23:25
同じだろ
>>972 つまり、struct lineを確保する時に配列s用の容量も上乗せすると
いっぺんに確保解放ができて便利。Win32では普通に使われている
しかし標準Cではできないらしい。CFaqの二つ目の方法は
char s[沢山];としておいて必要なだけ少なく確保する。
しかしこれも標準Cではできないらしい。
976 :
デフォルトの名無しさん :03/08/09 23:47
>>975 もしかして、
struct hoge *p;
p=sizeof(struct hoge)+strlength;
strcpy(p->s,"もしかして・・・・");
free(p);
こういうこと?配列はメモリー上で連続していて、配列の大きさを越えても文句を言われないことをうまく利用して。
977 :
デフォルトの名無しさん :03/08/09 23:48
ムッチリ系の巨乳美女ですね。バイブを挿入されはしゃぎまくっちゃいます。
そのあたりまでは普通のビデオですがそこからがすごいです。
なんと5人連続生姦、中出しに挑戦!オマンコの中はザーメンまみれ!
大量のザーメンが流れ出てくるラストシーンは圧巻ですよ。
無料ムービーあるよ。
http://www.cappuchinko.com/
もしかしなくても、そういうこと。 hoge p; という使い方は考慮されていない。常にポインタで。
p=sizeof(struct hoge)+strlength;じゃなくて、p=malloc(sizeof(struct hoge)+strlength);だ。
>>976 もしかしてmallocが抜けているかもしれないけど
そういうこと
>>978 なるほどねぇ、、、すごいこと考える人がいるものだね。
C FAQにあるほどだから常套手段なのか。
あ、ありがとうございました。