<`Д´>C/C++の宿題は私にやらせるニダ!Ver11

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
私はC++房。
今まで1年*ヶ月、ほとんど毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら私にやらせてくださいm(_ _)m
ただし四面体の宿題は禁止!
前スレhttp://pc2.2ch.net/test/read.cgi/tech/1057070174/

9代目:http://pc2.2ch.net/test/read.cgi/tech/1055944101/ 150
8代目: http://pc2.2ch.net/test/read.cgi/tech/1055056940/l50
7代目: http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50
6代目: http://pc2.2ch.net/test/read.cgi/tech/1053045530/l50
↓現在5代目スレまでhtml化完了
5代目: http://pc2.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc2.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc2.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html

ラウンジ:質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
std::endl;
fflush(>>1);
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;
7前スレ911:03/07/16 00:54
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;
}
}
}

/* データ検索のルーチン終了 */
ここから改造してそこを修正する方法はないんでしょうか?
8前スレ911:03/07/16 01:08
前スレ989さんありがとうございました。
出来たら解説お願いしたいんですが…
fseekをファイルストリーム内を後ろに戻っているんだろ。
Cで計算機を作る宿題なんですが
授業に寝坊しまくりで肝心なヒント全然聞けなくて
4段階中の1段階の途中でつまづいてかなりヤヴァイです。
>12 + 320
見たいな感じに>の後に任意の式を数字スペース演算子スペースって書き込んで
計算結果を返し、それ以外の入力には
ERRORを返すのを.(ドット)を入力するまで繰り返すってだけなのですが。。。
ちなみに↑はまだ1段階目です。
11961:03/07/16 01:21
>>985
はい。。

>>986
ありがとうございます!!ですがこの形でビルドすると戻り値がないのですが。。
戻り値はノード数にしたいのですがどうすればいいですか???
>>11
どこにレスしてんだよ
ちなみに後で知ったのですがscanfで読み込んで
strpbrkを使ってスペースごとにポインタを切れと言わましたが
strpbrkでのポインタの切って別のポインタに格納するやり方がよく分からないです。

とりあえず1段階目の(3)が計算結果ではなく
12 数値
+ 演算子
320 数値
という風に返す問題だったんですが
1段階目の最終的な完成には通用しないと分かりつつも
とりあえずこれを解こうとgetcで頑張ろうとしましたが
コンパイルでエラーが大量にでてデバグできずに挫折しました。

家に環境が無いので思い出しながらですが、とりあえずできるところまで書いてみます。
1411:03/07/16 01:30
>>12
前レスです。間違えましたすみません。。
>>14
前レスではなく前スレだ
>>13
まず、コンパイル環境を構築しろ。
話はそれからだ。
>>16
ここで聞くべき質問じゃないかもしれませんが
無料でwindows(XP)上で動かせる環境とかってありませんか?
できれば教えてもらえればうれしいです。
>>13
strpbrkはポインタを返すから、それを変数に入れればよいのでは?

char *s="abcdefghijk",*p;
p=strpbrk(s,"egu");
if(p) puts(p);

efghijkと表示されるはず
>>17
スレ違いだってわかってんならここで聞くなボケ

タダで最強!フリーC/C++コンパイラ
http://pc2.2ch.net/test/read.cgi/tech/1035882599/
基本的にscanfはスペースで区切ってしまうぞ。%[]を使うときは例外だけど
>>20
あ、scanfは使うなと言われて
fgetsの間違いだと思いますスイマセン
c++の課題がでたんですけど、自分の力じゃわからなかったんで、教えて下さい。どうぞよ
ろしくお願いします。

与えられた文字列sのn文字目からm文字目 からなる部分文字列を返す関数を定義し、
その動作を確認しなさい。 ただし、文字列を操作するシステムの関数を使ってはならない。
char* substring(char* s, int n, int m)

>>1
乙。
>>22
その課題の問題点。
・車輪の再生産で激しく無駄。
・「文字列を返す」だけでは仕様が曖昧。
*あらたにmalloc()した領域を返すか
*関数内部で用意した静的領域を返すか
*引き数で渡された領域を書き換えるのか
・C++だとしたらなんらかの文字列を取り扱うクラスにするべき。
25r:03/07/16 13:54
>>24
宿題に対して
「車輪の再生産で激しく無駄」
じゃねーだろ。ばーか。


関数の具体的な仕様について、問題に記述されていないのは
出題者がそれを規定しないからであり、つまり
「関数の仕様については回答者にゆだねる」と解釈するのが普通。


> ・C++だとしたらなんらかの文字列を取り扱うクラスにするべき。
これは同意。
26r:03/07/16 14:19
>>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;
}

3231:03/07/16 19:24
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;
}
}
まで行き着いたのですが、コンパイルしたらエラーがでます。
どのようにすればいいのか添削してくださる方いましたらおねがいします。
度々すいません・・・
エラーメッセージの内容くらい書け
話はそれからだ
>>34
Setを宣言する前に使ってるぞ。
あ、あああああ・・・・・・・。
38デフォルトの名無しさん:03/07/16 22:57
これも宿題なんでお願いします。
「char a;としてアルファベットを入力するものとする。
入力した際に画面に表示されずに、すぐにaに格納してくれる
関数を調べて来い。」です。
echoがあるかどうかは端末しだいだろう
40デフォルトの名無しさん:03/07/16 22:59
誰かCでオセロ作ってもらえませんか?
エスケープシーケンスは使ってもOKということで。
どなたかお願いします
41デフォルトの名無しさん:03/07/16 23:13
>>38
scanf
42_:03/07/16 23:15
>>40
七行プログラムの過去スレ嫁
>>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
>>45
ソートを行うCの標準関数
>>45
クイックソート
つーか、ぐぐれ
48デフォルトの名無しさん:03/07/16 23:39
>>44
muridesuta
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
本当に宿題なのか?
56sage:03/07/17 03:04
>>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 ;
}
全ビット反転なら補数演算子を使えばいいのに。
>>56
どうもありがとうございます。
59sage:03/07/17 04:05
>>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プログラミングを勉強したほうが早い気がするなぁ。
70_:03/07/17 11:08
>>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
焼きなまし法ってどうプログラミングすればいいんでしょう…。
山登りが一番簡単でいいと思うんですけども、さーっぱりわからんの
です…。
プログラミングなんかやめちまえ。
それが一番簡単だ。
7960:03/07/17 14:25
>>74
ありがとうございます!!

ですが、申し訳ないのですが、C++でなくCでお願いします。
書くの忘れてましたm(_ _)mごめんなさい
>>79
C++でもいいじゃねーか
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);
}
8260:03/07/17 14:34
>>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() という実装があるから参考に。
8574:03/07/17 14:54
>>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);
        }
    }
}
8660:03/07/17 15:09
>>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, こういう風になっているんじゃないのか?
8987:03/07/17 15:43
俺が言いたいのは>>85だと
2列目の文字列の先頭にKEYWORDが無いとだめじゃないのかってことなんだけど。

>if(!strncmp(q,key,len))

これだとそうなるよね?
"aa,bb", "KEYWORD"
こうなっていると単純に','を探すだけでは二列目の始まりをみつけることができない。
9174:03/07/17 15:50
>>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
>>93
breakでは?
9574:03/07/17 17:43
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
ヽ(ヽ ・∀・)わけ (ノ・∀・)ノわか ヽ( ・∀・)ノらん
>>99
goolge
10299:03/07/17 20:43
goolge検索はしたのですが適当なのが見つからなくて…
もしリスト構造について載っているようなサイトあれば教えていただけないでしょうか
>>99
□→□→□→□→□→□→□→■
10499:03/07/17 21:03
ポインタと構造体のコンボ
106デフォルトの名無しさん:03/07/17 21:18
浮動小数点変数を a に、桁数を n に入力して、
char* round(double a, int n)
この関数に、小数以下n桁に四捨五入した文字列を返すような仕組みを
作らなければいけないのですが、どうもその仕組みがうまくつかめない
もので。。
またかよ
108106:03/07/17 21:21
どうしても四捨五入ととこができないのでおねがいします。
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番目に上手に書き込む処理はどのようにすれ
ばよいでしょうか。ご教授よろしくお願いいたします。
119_:03/07/17 22:09
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
この課題を教えてください
ttp://karma.j.dendai.ac.jp/algo1/kadai03.html
最近C言語習い始めた私には分かりませんでした(´・ω・`)
どうか、よろしくお願いします
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言語の文字列型に変換して標準出力に表示。
135131:03/07/17 23:07
std::string とはどういう事ですか?
密教の儀式
namespace stdに定義されている string クラス。
馬鹿をからかうのは楽しいね。
139128:03/07/17 23:12
>>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;
>>73
違います
もっと、ソースを眺めましょう
142128:03/07/17 23:25
>>140
多分あとは自力でできそうです。
どうもありがとうございました。
14374:03/07/17 23:33
>>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++でパターンマッチってなんですか?
簡単に説明してください。
>>147

鬼門
ありがとうございました。
>>148
風水ではないです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だけで四捨五入じゃなくて、切り捨てだろ。
154147&148:03/07/18 00:03
わかんねぇけど鬼門て風水に出てくるでしょ。
だから・・。俺もしかしてキチガイ?
C++ではパターンマッチを避けたほうがいいっていうのを
鬼門っていってるんじゃないの?
156147&148:03/07/18 00:07
>>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;
}

これでも同じ結果。
>>156
頭悪いな。
159147&148:03/07/18 00:11
>>158
それがわかってなかったらきてねぇっぺよ
>>157
round(1.005, 2)やってみ
1.perlで正規表現のスクリプトを書く。
2.C/C++から呼ぶ
終了
>>160
round(1.006,2)やってみ
163128:03/07/18 00:35
後は自力で出来る言ってしまいましたが、
binary_search が call された回数: の出し方が分かりません。
教えてくださいお願いします。
>>163
適当なstaticな変数をインクリメント
>>163
適当なグローバル変数をインクリメント
適当なことばっかいうなよ!
適当な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);
}
>>168-169
例題1の関数 fact をキボンヌ。使わなくて何とかなりそうだが。
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");
}
>>171
パースエラー
>>171
カッコ悪いな。
175172:03/07/18 11:13
問題文よく読んでなかったし、無駄な処理も多すぎますね。スマソ。
質問なのですが、

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
でいいんじゃない?
ノードの問題なんですが教えてください。
ソース:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=121

問題(3)main関数、及びInsertNode(treeT *tptr,string key)を次のように変更しなさい。
これに応じて他の関数についてもif(t<=(treeT)0x00001001)及びif(t>=(treeT)0x00001001)の部分を変更しなさい。

変更するところ:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=122

どういう風に変更するのか教えてください。
179178:03/07/18 14:59
わかりました
質問は撤回します
標準入力から文字列を読み込み、その中のアルファベットの
出現回数(文字「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;
}
>>181
ありがとうございますm(_ _)m
183なっち:03/07/18 22:47
はじめまして♪

何度やってもうまく作れないので、教えてください。お願いします。

よく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;
}
>>191
STLって読みづらいよね…
19399:03/07/19 01:23
先日リスト構造について質問した者ですが、↓みたいなのってリスト構造でしょうか・・・?
ttp://www.asahi-net.or.jp/~uc3k-ymd/Sketch/Life/life02.html
>>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
☆頑張ってまーす!!☆女の子が作ったサイトです☆
       ☆見て見て!!
http://yahooo.s2.x-beat.com/linkvp2/linkvp2.html
205200:03/07/19 13:21
すいません。表現があいまいでしたね。
queueです。よろしくお願いします
206200:03/07/19 13:24
すいません。表現があいまいでしたね。
cueです。よろしくお願いします
207セイラ:03/07/19 13:32
山崎と広告Uzeeeeeeeeeeeeeeeeeeeee!!!!
209200:03/07/19 14:01
すいません。表現があいまいでしたね。
sphereです。よろしくお願いします
210r:03/07/19 14:23
>>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] );
    }
}

キューは使ってないけど、大体こんな感じの処理になるかと。
(疑似コードだと思ってみて下さい)
211r/210:03/07/19 14:26
あ、そうか、ここで再帰を使うのが嫌だったんだ。
で、キューな訳ね。
212r/210:03/07/19 14:37
1. 開きたいタイルの座標を、キューに入れる。
2. キューからデータを一つポップし、それを操作対象にする。
3. タイルを開く関数をよぶ。引数には、さっきポップした操作対象と、キューへのポインタを設定。
4. タイルを開く関数では、タイルを開くのに成功し、
タイルの周りの爆弾の数が0だったら、タイルの周辺をキューにPushする。
5. 2に戻る

こんな感じかな。
213193:03/07/19 16:23
スルーされてる(つД`)
214r/210:03/07/19 16:44
>>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つがわからないので、どなたか知っている方は教えていただけないでしょうか
>>221
スレ違い
1は漠然としすぎてると思うけど。
224r:03/07/19 22:00
>>222
宿題なんじゃない?だったらすれ違いじゃない気がする。
板違いではある
へー
Cの宿題ではないと思う。
227r:03/07/19 22:11
そだね。
ttp://yougo.ascii24.com/gh/03/000386.html

 「pull oneself up by one's own bootstraps:
自力で進む、自力で向上する」という口語から生まれた言葉で、コンピュータを起動する過程を指す。
たとえばPC互換機では、電源投入時にはまずシステムROM内の小さなコードが実行され、
各種デバイスの初期化が行なわれる。続いてこのコードは、ディスク内にあるOSの初期コードに
制御を移す。このように、より高レベルなソフトウェアを実行するために、段階を追って初期化を
行なうことをブートストラップという。
ローダーとはどう違うんだ?
名前。
231193:03/07/19 23:24
>>21ありがとうございます、
ttp://mukun_mmg.tripod.co.jp/mmg/bncpp/10/174.html
を見てどんなのがリスト構造なのかってのは何となく分かりました、>>193は違うみたいですね。

今回の宿題は、>>193にあるみたいなライフゲームを、配列を用いて生きているセル、死んでいるセルを管理するのではなく
生きているセルの縦横の位置をリストの要素として持つリスト構造を使って作成せよって物なんですが
考えるといろいろ分からないとこがでてきて混乱してします(;´Д`)

配列使わないでできるもんなんでしょうか・・
232193:03/07/19 23:29
あ、配列をつかってのライフゲームは前回までの宿題で完成しているます
上下右左のポインタでつないで、
配列でhoge[x-1][y]とかやるかわりに
ポインタでアクセスする。
234193:03/07/20 00:39
ttp://mukun_mmg.tripod.co.jp/mmg/bncpp/10/174.html
みたいな書き方で言うと

□→□→□→□→□→
■  ■  ■  ■  ■
↓  ↓  ↓  ↓  ↓
□→□→□→□→□→
■  ■  ■  ■  ■
↓  ↓  ↓  ↓  ↓
□→□→□→□→□→
■  ■  ■  ■  ■        (□:ポインタ)
↓  ↓  ↓  ↓  ↓        (■:データ)

って感じでしょうか?
そうするとデータに当たるのはそのセルが生きているか死んでいるか?
>生きているセルの縦横の位置をリストの要素として持つ
ってのはどういう事なんでしょう(´・ω・`)?
各要素が座標データを持っているってことじゃねーの
生きてるセルの座標データをまた別のリストに持つとか?
なんでそんなことするのかわからんけど
>>234の図みたいな座標軸のリストは無しで、
生きてるCellのインスタンスだけつなげてリストにしろって事だろ。
Cellのメンバはx座標とy座標。

でも隣の座標の状態を調べるだけでも全走査するんだろうか…
全走査するんじゃない?
二分木リストとかにするんだろうけど。
239r:03/07/20 03:04
struct cell_t {
struct cell_t* tonari[8];
int live;
};

とかじゃねーの?
>>239
意味がわからん。
241193:03/07/20 03:41
じゃあ

□→□→□→□→□→
■  ■  ■  ■  ■

で、データが座標、生きてるセルができるたび追加して死んだら削除すればよいですか?
周り数えたり、死んでるセルについても順番に判定していかないといけないこと考えると配列使うのに比べてすっごい無駄な気がするです・・
全部のセルを持っとくとn次元では地図の一辺のn乗に比例するメモリがいる。
いっぽう、生きてるやつだけ持っておけばその時点で生きてるやつの個数に比例する
メモリしかいらない。Conwayのルールだと全部生きてることは初期値以外あり得ない。

ところで各セルは自分の座標だけ知ってればよいから、2次元なら
typedef size_t Index; // 座標を表すのに必要な整数型にする
struct cell_t { Index x,y; char next_state; };
で良いと思う。こうするとsizeof(Index)を小さくとればより省メモリ。
243r:03/07/20 05:43
>>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足すし、無ければ新たにセルをつくる。
どういう意味?
248218:03/07/20 16:12
/* 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増やす。
なければ作る。
250アフォ:03/07/20 18:47
[0,1]の一様分布に従う互いに独立な2つの乱数an,bnを生成せよ。
お願いします
anは、配列か?関数か?どんな宣言をする?
252pop:03/07/20 23:15
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
乱数の種が違ったら、それは「独立した乱数列」と認めるのかえ?
だったらちょー楽勝だが。
254250:03/07/21 00:17
>>253
一様分布していれば問題ないと思います
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;
}
>>256
あ、printfは使用禁止なんです。
もちろん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;
}
>>259
>>257
>>258
>>255じゃない
そして嫌われるとこんな答えが返ってきますよっと。
>>260
できました。ありがとうございました。
>>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 );
}

こんなもんでいいかな。
コンパイルしてないので、修正は任せた。
265264:03/07/21 00:52
>>264は、ぜんぜん駄目!すまん、ゆるせ!
>>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;
}
267250:03/07/21 01:03
>>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);
}
269268:03/07/21 01:07
>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;
}
273tin:03/07/21 03:18
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')を示せ・・・。
このプログラムのアルゴリズムとフローチャートを教えてください。

274なっち:03/07/21 03:44
>>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としています。 たびたび申し訳ありませんが、ご協力お願いします。
>>274
条件を後から付け加える奴は嫌われる。
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"とすることで追加書き込みモードとなる。
  末尾に改行をつけて書き込むか、つけないで書き込むかの違い。
>>276
宿題じゃないなら困らんだろ
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);

とすべきだな。
>>282
専門書でも読んで自分でやれ。
>>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の略じゃないだろうし、一般的な言葉を使ってくれ。
287r/264:03/07/21 10:49
>>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 );
}
288r/264:03/07/21 10:56
>>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++];
}
こんなかんじかな。未コンパイル。
289r/288:03/07/21 10:57
未コンパイルだとことごとく間違える俺。
これだと、idx以降の要素が全部xになっちゃう。
>>289
既に答えの出ているものに敢えて挑戦するのは勝手だし、
恥を晒すのも勝手だが、
見苦しいとは思わんか?
291276:03/07/21 11:52
>>285 模範解答とさせていただきます。
擬似命令の部分が理解出来ないので、ちょっと調べてきます。
皆さん、ご回答ありがとうございました。勉強になりました。
>>250
>>282
線形合同法やM系列などの一様乱数生成器の状態をファイルスコープの
static変数で保持し、生成してからそれぞれ必要な分布に加工。

でも、大抵の乱数生成アルゴリズムは高次元分布もランダムだから
一つの乱数系列を交互に使っても独立性の検定には合格するんだけどね。
実際M系列は本質的には一つの乱数系列だし。
>>285
memcpyじゃなくmemmove使え
>>293
なぜ?
領域が重なるから。
If copying takes place between objects that overlap, the behavior is undefined.
なるほろ
297250:03/07/21 15:32
これは独立擬似乱数ですか?

#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
出力の形式はどうするの。
306304:03/07/21 19:48
英語 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()));
>>308
それじゃ駄目だな
>>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;
}
311307:03/07/21 21:27
>>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

って事じゃなくて?
313307:03/07/21 21:40
>>312
すみません,変数のことです。
式の中のa,b,cの値を計算させて順にx,y,zに代入して答えを表示したいんです。
式が3つなので3つプログラムを作りたいんです。
314304:03/07/21 21:41
>>310
ありがとうございます!!助かりました。
315デフォルトの名無しさん:03/07/21 21:54
このスレに
   依頼をする前に
        ちょい考えて
   もっといいスレが
あるかもよ。
http://pc2.2ch.net/test/read.cgi/tech/1054702114/l50 
飢えてます     
形の違う魔法陣を三つぐらい並べて
書くプログラムってどうやって作るんですか?
踊りながら
しらみつぶし
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;
}
320_:03/07/21 22:28
>>316
魔方陣なら、知っているのだが・・・
322193:03/07/22 00:40
先日リスト構造をつかったライフゲームについて質問した者です、 今作成中なんですが
生きているセルの縦横の位置をリストの要素として持つリストは↓みたいな感じで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*);
};
323193:03/07/22 00:41
アハァ見にくくなった…ちょっと変だし
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;
}
326325:03/07/22 02:00
ごめんなさい。貼ってから気付いたけど、こんな関数使わない方がいい気がしてきました。
>>325
わざわざありがとんございます。
>>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
http://jbbs.shitaraba.com/computer/6765/
ここを有効利用しよう。
マルチOK!
>>340
同じつっこみをLinuxのstrcmpのマニュアルにもしてあげてください。
>>335
sscanf();
よりも
istringstream
の方がいいのですか?
>>342
はぁ?
Cのリスト構造体の課題です
↓問2が分かりません
ttp://members.jcom.home.ne.jp/exceler/file1.c

お願いします
問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
>>350
自分で調べろ
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
>>355
一様です
オリジナルの文字列暗号化、復元関数きぼん
オリジナルの文字列ってなんだ?
暗号化アルゴリズムを1から作れってことだろ
暗号化スレいきゃいいのに
いまさら素人が作ったところで何かの暗号アルゴリズムと同等にしかならんよ
362330:03/07/22 21:06
>文字列型の"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
>>300
Cでお願いします。
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じゃない?
373369:03/07/23 02:21
>>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;
}
376370です:03/07/23 03:32
>>375
うーん、まだpiとかfloatを習ってない初心者なんですがそれ無しでもできますかね?
たぶん結果は3.1415…と一発で出ると思うんですが。
pi はただの変数名だから、変数宣言のルールに反しない名前に変えてもよい。
float は単精度浮動小数点だから、倍精度の double に変えても(多分)差し支えない。
float より double の方が高速らしいし。
378377:03/07/23 04:04
あ、>>377>>376へのレスね。
379370です。:03/07/23 04:25
>>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;
}
382381:03/07/23 07:48
ただ、近似されていく様子が分かるように書くべきだと思うので
俺は>>375そのままでいいと思う。
>>376
> doubleを使うぐらいしか分からないんですけど

つまり、「無限級数で近似する」ってことの意味が分からないのか?
それで>>376の「一発で出ると思」ったということか?
それなら>>381-382を信じて>>375(+>>377)を採用したまへ。
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)
正規乱数?一様乱数?
387_:03/07/23 11:18
どの値になると正解になるか教えて。
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の値が要るの?
そうなんですが、初期値の影響を除くため、
最初の数百ステップのデータは用いるなとのことです。
問題に付け忘れてました。
391370です:03/07/23 11:56
>>381-383
なるほど。ありがとうございました。
392バカの極み:03/07/23 13:23
>>386
一様分布に従う、正規乱数です
393教えてください:03/07/23 13:31
VC++で、Waveでデータを波形にし、サンプリング周波数を出すプログラムはできたのですが、
波形の高い部分を見つけ、それをテキストに変換し保存するプログラムが分かりません。
どなたか、教えてくれませんでしょうか?
参考URLなどご存知でしたらお願いします。
せめて、WAVEデータをテキスト変換するプログラムを教えてください。

お願いします。
>>392
正規乱数って何か知ってる?
性器卵巣なら知っている。
396バカの極み:03/07/23 13:52
>>394
知りません
>>396
じゃあ、なぜ正規乱数と言い張るの?
398バカの極み:03/07/23 13:56
訂正します
Θとφが正規乱数で、aとbが一様乱数ですね
399バカの極み:03/07/23 13:57
>>397
問題に書いてあったんで・・・
問題あるならちゃんと写せ。
あと、これがどういう意味がある問題なのか書け。
ただ計算しろって式だけ出されても、読む気すら起こらない。
相手にしなきゃいいじゃん。
402デフォルトの名無しさん:03/07/23 15:18
2つほど教えてクダサイ。

問題1
文字列 str2 を逆順に並べたものを str1 に代入し、
str1 のポインタを返す関数
char *reverse_string(char *str1, const char *str2)
を添字演算子を使わずに作成しなさい。
動作確認をするためのmain関数も作成しなさい。
403402:03/07/23 15:19
問題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;
}
405404:03/07/23 16:34
>>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;
}
406404:03/07/23 16:35
それとstr2+=strlen(str2)-1;じゃなくてstr2+=n-1;だ。
407402:03/07/23 16:50
>404
ありがとうございます。でも

>char s1[1024],*s2="Good-bye world!!";
"Good-bye world!!";
ってどういう意味なんですか?
408404:03/07/23 16:50
>>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);
}
409404:03/07/23 16:52
>>407
おなじみのHello worldをちょっと変えてみただけ。そこは別になんでもいい。
410デフォルトの名無しさん:03/07/23 16:52
☆綺麗なおしりときれいなおっぱいがたくさん!
http://www3.free-city.net/home/espresso/bigapple/queen.html

☆可愛い女の子がたーくさん脱いでるよ★
http://www3.free-city.net/home/espresso/function/girls.html

☆無修正画像たくさんあるからみてね!
http://www3.free-city.net/home/espresso/function/photo.html
411409:03/07/23 16:54
なんでもよくはないか。1バイト文字のみで構成された文字列ならなんでもよい。
412402:03/07/23 16:55
>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;
}
414バカの極み:03/07/23 17:25
>>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
>>415
メニュー形式と各機能とは何?
あんの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;
}
426421:03/07/23 19:31
>>423
コンパイルできました。
ありがとうございます。
>>422
>円の面積と円周の長さが等しくなるとき

なんか変ですねぇ
単位の違うものを比べてはいけないと先生が言ってました(w
printf("1.0");
>>427-428
数学では長さも面積も単位はつけないよ
しかし単位の次元はあるのだ。だから長さと面積の比較は一般には無意味だ。
何なら面積の単位を単位長さの正方形ではなくて正三角形にしてもよい。
正方形で面積を測る文字通り「方法」は一つの歴史的な大発明で、
それ以前はいろいろと面白い物が沢山あったのだ。
数学的でも面積の測り方は定義上のものである。
#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));
}
}
}
432431:03/07/23 20:54
無駄に桁数が多いのは、どうして
>if( fabs(Circle_Area(radius) - Circumference(radius)) < EPS){

>if( Circle_Area(radius) == Circumference(radius) ){
にしないのか、ということの答え。
突っ込みどころ満載ですな>>431
434431:03/07/23 21:11
おめでとう>>433
最近自称釣り師がダイレクトで自分の本音を攻撃されて「釣れた!」とか言ってるの多いよね。
これは、どっちかというと、

       │   ○
釣り師→ └┬─┴─  ↓水面
      ~~~~|~~~~~~~~~~~~~~~~~~~
        ↑チンコ  >゚++<

かと思うんだけど、どうよ?
>>433,434,435
厨房三兄弟かよ...
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
です。
円の面積と円周の長さが等しくなるときの半径を表示する
これはやっぱり無理なのでしょうか?
>>422
431でも出しておけ
無理と言うか
長さと面積を比べることが数学上意味のあることなのか
という話だったんだが
>>440
>>424に答えがでてる。
443437:03/07/23 21:54
海外の学校で勉強してるんですけど、あんまり問題の意味もわかんないんですよ。
生徒のデータは適当に作ればいいのかな?
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を求めればいいんだろ?
出題者の意図ぐらい読み取れよな
>>439
>>424に答えがでてる。
問題文がこれだけだったら、
・5人分の氏名・住所・電話番号を保持するような構造体を宣言する。
・この詳細(?)を表示するプログラムを作成する
までしか情報が与えられていない。データファイルとかは自分で作るんだろうな。
448437:03/07/23 22:03
問題文はこれだけです。
自分にはこんなむずいのはできません。ちなみに今日はじめて自分で
プログラム書いてみました。↓このレベルで今は限界です。

#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);
}
とかやるような奴と思われ。動作確認してないし、テケトーですまん
450437:03/07/23 22:15
どーもありがとう。たすかります。
授業、ぶっちゃけわかんないんですよ。
先生英語でべらべらしゃべって(当然だけど)半分も理解できません。
451デフォルトの名無しさん:03/07/23 22:18
あなたの本能極限まで引きづり出しちゃう画像大量連発!!
http://www3.free-city.net/home/espresso/bigapple/cherry.html

新しい無修正画像も追加したから見に来てね!!!
http://www3.free-city.net/home/espresso/au/sweety.html
わざわざ海外まで逝ったんなら自分でやれよ金もったいないだろと思った。
453437:03/07/23 22:27
ほんとそのとうりですね。
#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ですでに起動してる別プロセスの
特定のメモリ領域を書き換えるには
どのようにしたらいいのでしょうか?
書き換える領域は仮想アドレスの指定で
ゲーム改造とかで使われるメモリエディタみたいに
>>458
環境依存。
460デフォルトの名無しさん:03/07/23 23:11
>>459
WindowsXP PEで
VC++6.0で作るとしたらどうなりますか?
>>460
すげー宿題だな。
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にありますかね?
標準ではない。自作で。
475473:03/07/24 14:04
自作は初心者にも可能なレベルですか?
ワイルドカード指定なら実装したんですけど、
使い勝手がわるいんで。。。
それは宿題でつか?
477473:03/07/24 14:09
そうです。まぁ、tab補完は別にしなくていいですけど、
拡張すると加点されるんで。。。
どの程度の初心者かわからないが、多分無理。

他の言語なら、こういうのもあるんだが...
http://www.kagoya.net/php/manual/ref.readline.html

>>473
windowsのAPIだったらGetKeyStateとかいうのがあってそれでどのキーが押されているか
確かめる方法がある。ファイル名の補完は知らない。
480473:03/07/24 14:15
そうですか。。貴重なご意見ありがとうございました。
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であるかのチェックはしなくても良い。

お願いします。
482481:03/07/24 14:21
訂正
>但しこの関数はa,bに対し、a=b*d+mとなるd,mを...

但しこの関数は(*a),(*b)に対し(*a)==(*b)*(*d)+(*m)となる
(*d),(*m)をセットして返るものとする。

>a,bがNULLであるかのチェックは

a,b,c,dがNULLであるかのチェックはしなくても良い。
483481:03/07/24 14:23
もうひとつありました。すみません。
>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 *)
;がない
488485:03/07/24 16:53
いくつかの入力ミスがありました。

>>486-487
レスありがとうございます。
次回からは質問の仕方に気をつけます。

コードを張るときに改行が多いって出る時は皆さん分割して張られてるんですか?
何か回避する方法ってあるのかな...
>>488
>>1
ラウンジ:質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=124

800*600のBMPファイルを読み込んで、RGB情報を配列に格納しました。
RGB→XYZ→Lab空間に変換するプログラムを作りたいのですが、うまくいきません。

全画素が白の画像を読み込ませて%dでprintfすると
255 255 255というように出力されるのですが、%fで表示させると
0.000 0.000 0.000となってしまいます。
255.000 と表示させるにはどうしたらいいですか?
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と表示されるはず。
494463:03/07/24 20:32
>>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);

よろしくお願いします。
497_:03/07/24 21:25
>>422
安心しろ、完璧なソースは>>433が作る、絶対な。
>>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つずつ、前の構造体にコピーする
510509:03/07/25 02:55
こっちの方が良さそうなので訂正
>ansは配列で、ans自体のポインタは存在しなくても良いので &ans はエラーが出るべき
ansは配列で、ans自体は値である、よって、値に&は適用出来ないとエラーが出るべき
511509:03/07/25 02:59
>>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
住所録作らされてて
基本的な機能の他に独自の機能を追加汁!
ってことなんですが何か適当な機能ないですか?
・郵便番号←→住所 相互変換(ttp://www.post.japanpost.jp/zipcode/download.html
>>515
年賀状作成
518デフォルトの名無しさん:03/07/25 15:51
開店セール見に来て500円から販売―――!DVDを見ようー!GO!
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
開店セール1枚 500円より→→→http://www.dvd-exp.com 
アダルトDVDが500円より激安販売→→→http://www.dvd-exp.com 
最短でご注文いただいた翌日にお届け!→→→http://www.dvd-exp.com 
セルビデオ店の人気商品が24時間お買い物が出来ます。
見やすい画面・注文簡単・時間をかけてゆっくり選んでください!
          http://www.dvd-exp.com←へGO!
>>515
順番をソートする。漢字なら、音読みを調べてソートする。
条件によって一部だけ表示の機能をつける。
520デフォルトの名無しさん:03/07/25 16:02
★クリックで救えるオマ○コがあるらしい★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
>510
>ansは配列で、ans自体は値である、よって、値に&は適用出来ないとエラーが出るべき

「式あるいは部分式の型が、ある型Tについて、”Tの配列”であれば、その式の値は
配列の中の最初のオブジェクトへのポインタであり、式の型は”Tへのポインタ”に
変更される。この式が単項の&演算子、あるいは++、--、sizeofの被演算数、あるいは代入演算子、あるいは.演算子の左演算数のものであれば、この変換は行われない。」

&ansの型はchar (*)[2]
522521:03/07/25 17:29
俺に聞けスレに解説が・・・

蛇足スマソ
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も買い解け
526523:03/07/25 18:44
>>524-525さん
ありがとうございました。
527509:03/07/25 21:27
>>510~>>514
どうもありがとうございます。
がんばって完成させます。
>>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
>>535
>>532ならiostream.hでよい
名前空間stdを使うならiostream
iostream.hというのは標準規格には無いんだよね
538デフォルトの名無しさん:03/07/26 01:21
>>534
そこまでstd::を連発するなら
using namespace std;にしる
mainに返り値セットしる
>mainに返り値セットしる

mainではreturnがなければ自動的に(int)0が返る。
540538:03/07/26 01:51
>>539
それは知ってるけど
書いたほうがいいじゃん
間違っていない以上どちらでもいい
main(){

int main(){
543デフォルトの名無しさん:03/07/26 02:20
>>541
慣例には従ったほうがいいと思う
"いいと思う"程度か。自分のやり方を押し付けようと思うな
C++でmainでのreturnの省略がサポートされたメリットを
他の多くのメリット同様に享受しない手はない。
C++自体を否定するなら別だが。

>main()
これは駄目だな。Cの方法だ。しかしC++でもまだまだ
const i=1;などと書く者がいるから当分はほとんどの処理系で
サポートされるだろう。
545531:03/07/26 08:00
皆さんありがとうございました。
これで楽しい夏休みが・・・・って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);
549546:03/07/26 13:55
>>547,548
スピードレスTHX!
スタートアップで出来るから処理時間が気にならないなら
静的でなくても問題ないと思う。
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ファイルに出力する
というプログラムを作りたいんですが

ファイルの操作の仕方がわかりません。
どうすればいいんですか?
555554:03/07/26 21:02
ちなみにC言語での作成になります。

よろしくおながいします。
>>552
神だ!!マジ感謝〜
えーと、細かいことは気にしません(細かくないか・・・)、別に64ビットで
構いません。上限は10億ではちょっと、64ビットまでの素数表が作れる
ようにしたいですね〜(アホです)
アホだ。
>556
エラストテネスのふるいで64ビットまでの素数表は無理。
せいぜい1兆以下(40ビット)程度が限度じゃないかな。
エラトステネス
エトラステトトテテネストラ
まぎわらしい
562558:03/07/26 23:20
ぐああトスなのか。エレベストの頂上から飛び降りてきます
>>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
夏休みの宿題とかあるだろ?やらせろや!
569551:03/07/27 15:29
>>552
ワクワク
570will:03/07/27 15:31
文字列を取ってそれをダブル型で返す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
>>570
まずprintの中をfに変えてみれ
#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;
}
5771/2:03/07/27 16:05
お前らもっと素直に書けよ。

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;
    }
}

/*
5782/2:03/07/27 16:06
*/
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;
}
579578:03/07/27 16:12
偉そうな事を書いておいてミスった。
2つのforの間に

if(*z=='.') z++;

を入れておいてけれ。
580578:03/07/27 16:14
もう一個。
最後は、

return negative ? -res: res;

だな。
問題きぼんぬ
>>581
じゃあ>>551をやって下さい。結構おもしろそうじゃないですか?
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)
590587:03/07/27 19:19
勘違いしてた…、逝ってくる…。
591587:03/07/27 19:28
>>585
seki[i][j] = matrix[i][b] * tenchi[b][j];

seki[i][j] += matrix[i][b] * tenchi[b][j];
にしたら恐らくいけるね。

スレ汚しスマソ。。
592588:03/07/27 19:50
>>589
ん!?正しくはどうすればいいのでしょうか?

>>592
kazu を 0 で初期化しておいて、>>589で 0 と equal で比較してる。
あと
kazu=kazu/10;
なんてしちゃうと
printf("%ldの各桁の和は%dです",kazu,sum);
のkazuは元の値じゃなくなるぞ
while(kazu!=0)
596588:03/07/28 02:36
>>589
>>593
>>595
ありがとうございました。無事解決しました。
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言語です。

>>598
それコンパイル出来そうもないけど
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);
}
}
>>597
前スレに同じ問題があったけど同じ人?
603デフォルトの名無しさん:03/07/28 17:20
598です。すいませんでした。ちょっと間違っていたみたいです。
初心者なのですいません。
604デフォルトの名無しさん:03/07/28 17:26
>>602
違います。
>>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
>じゃなくて>&なんだけど?
615607:03/07/29 08:58
たびたびすいません。。

>>608-610
宣言を cahr *ItoH(.... に直してみましたがまだダメです…

printf("%s", ItoH(n,s));
この書き方じゃダメなんでしょうか。。。
ItoHに渡す配列s[]の宣言の仕方がイマイチわかりません。適当に
char s[64]; とかでいいんでしょうか。
616_:03/07/29 09:01
>>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を入れるのは激しく無駄。
ついでに言えば無意味。
更に言えば無様。
620607:03/07/29 12:10
sprintfの便利さはわかりましたが、前述のItoHを使いたいのです。
内部の問題とは何でしょう。
619も無駄だらけだな。(ワラ
更に言えばアホ。
>>619
>>621
煽り厨房はいらん
消えろ
623デフォルトの名無しさん:03/07/29 12:49
>>622
オマエモナー
624デフォルトの名無しさん:03/07/29 12:56
>>618
不思議な人ですね。
なにか厨房がまだ今日も増(略
コメントに使える
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に変換するルーチンを作りたいのですが
さぱーりわかりません・・・

諸先輩方のご指導、ご鞭撻キボンヌです・・・
>>626
何のメリットがあるんだ
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は桁数を変数で指定できる。
633_:03/07/29 18:11
その問題出した奴にちゃんと伝えろ
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とおく.
こんな問題ですけどできますか?
数値計算の問題はなかなか答えてもらえないよ。
>>635
【初心者歓迎】C/C++室【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1059041347/
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;
}
640639:03/07/30 13:23
穴埋めか・・・
641639:03/07/30 13:29
>>638
1,string.h
2,a
3,strlen
4,||
5,break
642639:03/07/30 13:31
if(strspn(buf,"0123456789")!=9) じゃなくてif(strspn(buf,"0123456789")!=strlen(buf)) か。
見当違いな回答だからどうでもいいけど。
>>639
お手数かけてすみません。
ありがとうございました。
>>642
改行が入る場合を考慮してない
>>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
別名:エピステーメー
↑誤爆った。スマソ
650_:03/07/30 14:49
651デフォルトの名無しさん:03/07/30 15:24
宿題で出されたんですが、サパーリわからないので教えてください。
「ボックス・ミュラー法によって標準正規乱数を生成するプログラムをC言語で書け。
また、ヒストグラムも作成せよ」
ほんとにさっぱりなんで教えてください。お願いします・゚・(ノД`)・゚・
652_:03/07/30 15:28
>>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
学生です!本当に困っています!
だれか手伝ってください
メールに解答送ってもらっても嬉しいです。
ttp://www.geocities.co.jp/PowderRoom-Rose/9814/final_project.doc
$ wget -q http://www.geocities.co.jp/PowderRoom-Rose/9814/final_project.doc
$ file final_project.doc
final_project.doc: Microsoft Office Document

出直して来な。
659デフォルトの名無しさん:03/07/31 08:32
http://www.geocities.co.jp/PowderRoom-Rose/9814/final_project.htm

↑でよいでしょうか・・。すいません。
>>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です
>>664
%lf
666デフォルトの名無しさん:03/07/31 11:41
ありがとうございます。
kaneとkinriのscanfのところをlfにしてみました。
で実行しなおしたのですが-8589(中略)年後に0円
という結果になってしまったのですが。。。。
再度ご教授願えないでしょうか?
やっぱ金利がアレな気がするのですが
すいません自己解決しました。
nensuuを指定していなかったのが原因でした。
お手数かけて申し訳ございませんでした。
>>659
英語が読めません。和訳してください。
669659:03/07/31 12:22
>>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でいいのか?
>>670
【初心者歓迎】C/C++室【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1059041347/
674デフォルトの名無しさん:03/07/31 15:20
>>672
はい、それでお願いします
675_:03/07/31 15:21
676デフォルトの名無しさん:03/07/31 15:37
>>675
677ね〜:03/07/31 15:49
お願いします。
名詞だけを取り出すCプログラムを作ってください。
20行くらいで出来ると聞いたのですが、C言語まったく出来ません。
お願いします。
ドイツ語なら簡単だな
679ね〜:03/07/31 15:54
>>678
じゃあ、ドイツ語でお願いします
680ね〜:03/07/31 16:07
>>679
逝ってよし
681デフォルトの名無しさん:03/07/31 16:11
誰か>671分かりませんか…
>>681
GUIだと環境依存になるが
そういうのは普通ビットマップをファイルに保存するだけで十分だろう
684デフォルトの名無しさん:03/07/31 16:20
>>682
初心者でテラパッドからコマンドプロンプトでやってるんですが…
685_:03/07/31 16:21
686デフォルトの名無しさん:03/07/31 17:12
クライアントからファイルを送り、サーバで受信するプログラムを作成せよ。
また、逆にサーバからファイルを送りクライアントで受信するプログラムを作成せよ。

どなたか、お願いします。
>>686
RS-232Cでの通信でいいのか?
688686:03/07/31 17:25
>>687
サウンドカードのLine in/outでお願いします
689686:03/07/31 17:32
>>687
すみません、良くわかりません。
それがわからなければ組めませんか?
>>689
宿題だろ?どんな環境でのソフトなのか、説明しないと作る方もわかるわけないだろ
作った後で「こんなんじゃないんです」なんて言われたくないな
情報の後出しは苦労を無にする事となる
691ね〜:03/07/31 18:03
>>677
は、C++で作っていただきたいのですが?お願いします。
全然わからないので・・。
名詞を定義してくれ。
>>691
一応釣られてやるよ。

「名詞」とはなんだ?
どこから取り出すんだ?
日本語や英語のテキストから名詞だけを抜き出す一般的な方法はないぞ。
宿題なら宿題らしく、宿題の全文を提示してみろ。
694686:03/07/31 18:14
>>690
ネットワークに接続された複数のワークステーションのプロセス間で
ソケットを構築し、ソケット同士を画像データの伝送経路として結合する形式である
ストリームソケット(TCP/IP)で画像による通信を行う。

osはそらりす
端末エミュレータで他ホストにリモートログインしサーバプログラムを実行
自分のホストでクライアントプログラムを実行する。

よくわかりませんが、こういうことで良いでしょうか?
日本語ならkakashiか茶筅落とさないと無理
>694
Cならsocket.h使うとか。
697 :03/07/31 18:26
>>694
それはすでに C / C++ の基礎は終えて、ソケットライブラリとかネットワークとかの
勉強に入ってるんですね。。。この夏休み利用して遅れを取り戻さないとちょっと洒落に
ならないような気が。。
698_:03/07/31 18:29
>>694
基本的には
ttp://www.ueda.info.waseda.ac.jp/~toyama/network/example2.html
のような感じになる。ソースもあるので、ちょっとがんばってみましょうね

・・・画像による通信ってナニ?
700デフォルトの名無しさん:03/07/31 18:32
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★ 新商品 ゾク・ゾク 入荷 ☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com      
☆★  激安アダルトDVDショップ        
★☆    お買い得!! 1枚500円〜 急げ!   
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com      
★☆        スピード発送!        
☆★      http://www.get-dvd.com      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
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って定数なんじゃ・・・
708本当に困ってる者:03/07/31 18:56
何方か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
>>657かな
714本当に困ってる者:03/07/31 19:06
710番さんすいましせん。不愉快な思いさせるつもりではなかったのですがなんとなくどこから課題の内容書いたらいいかわからなくて。
簡単にいいますと、品物名を入力して、金額もいれて、合計金額を出力するwindowsの入力画面です。
本当に言葉足らなくて申し訳ありませんでした
>>712
補足1:
IDC_STATICのままだとメンバ変数にできない。
予め、IDC_STATIC1などと名前を変えておく必要がある。
補足2:
コントロールでないメンバ変数を更新するために、
UpdateData();
m~result....;
UpdateData(false);
としないといけない。
716デフォルトの名無しさん:03/07/31 19:27
>>712>>715
レスありがとうございました。
まずはC++から勉強してきます。
本当に宿題か?
3つのパラメータから中央値を選び出して返す関数
int select(int a , int b , int c)をコーディングしてくれ
できるだけスマートなやしで
>>718
味噌汁で顔をあらってこい。
>>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));
}
722720:03/07/31 20:14
おっと、システムコールとかぶらんように関数名を変えていたのを忘れた。
int select(int a,int b,int c) だ
723ね〜:03/07/31 20:23
>>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って直接すぎでした。変えてみます
725ね〜:03/07/31 20:24
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
http://homepage3.nifty.com/coco-nut/
簡単に見れるぞ
729_:03/07/31 20:56
730デフォルトの名無しさん:03/07/31 21:50
ソート(シェルソートやクイックソートなど)をつかって、なんかおもしろ
いもの作りたいんやけどなんかある?
>>730
3つのパラメータから中央値を選び出して返す関数なんてどうだ?
>>714
別に不快になったわけじゃないけど、
日本語はちゃんと書いた方がいいよ。

指定された言語とか、どの部分が出来ないかとかちゃんと書いた方がいい。
丸投げは流石にちょっとどうかと思うんだが。
733デフォルトの名無しさん:03/07/31 22:01
>>732
> 丸投げは流石にちょっとどうかと思うんだが。

スレ違いです。
どっちかっつーと、丸投げする場所だよな、ここは。
735ね〜:03/07/31 22:33
やっぱり・・・無理っぽいですね・・・。
>>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の特異点になってんじゃないか?
742分かんないYO:03/08/01 00:20
・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;}
>>744
なぜdouble?
>>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型に==を使うのはやめよう。
751C言語だめぽ: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
ありがとうございます。
参考にさせていただきます。
755C言語だめぽ:03/08/01 04:06
やっぱ難しいですかね?
756デフォルトの名無しさん:03/08/01 04:09
基地外、氏ね
757C言語だめぽ:03/08/01 04:14
>>756
先生に言ってよ。
プログラム歴1か月の学生なんかに出す問題じゃないよこれ。
>>757
>753 の何が不満なんだ?
759C言語だめぽ:03/08/01 04:57
>>758
不満じゃないですけど、画像を表示するのにbmpdispを使ってるから分からない単語があるんです。
例えば
HDC dc=Get DC(NULL)や、
RGBはどういう意味なんですかね?
まず先生のせいにするな
できないのは自分のせいだ
>>759
情報の小出しをするから悪いんだろう?
先生はどんな方法で画面に出せと言ったんだ?
あなたが出した少なすぎた結果だ。
>RGBはどういう意味なんですかね?
これなら僕でもわかる。光の三原色です。
赤、緑、青で0から255まで扱う。255,255,255なら白色ですね。
763C言語だめぽ:03/08/01 05:22
ホントに無知でごめんなさい…(´・ω・`)
コレ以上だとスレが荒れる気がするのでこの話はもう終わりにしましょう。
764C言語だめぽ:03/08/01 05:25
>>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
関数定義して再帰的にやればできる。
>>778
ハァ?
780_:03/08/01 14:48
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));
794792:03/08/01 19:08
その式使ってこっちでコンパイルしたが凄い答えになったぞ。
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) );
}
>>794
>>793>>795は四捨五入の差以外は同じになりますが?
797山崎 渉:03/08/02 02:05
(^^)
やっぱ夏はお題が少ないなぁ
799デフォルトの名無しさん:03/08/02 18:13
【徹底的】プログラマーが語るviとemacs 4【バトル】
http://pc.2ch.net/test/read.cgi/prog/1059814696/
年金公式
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
AVアニメの決定版!
隠すトコはまるでなし すべて見せます。
女子校生も大股開きで頑張ってるよ
http://www.pinkfriend.com/
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
気持ち悪いと言う人も入るけど、使いこなせるなら無問題。
>>812
そんなこと言ってるんではないと思われ
814デフォルトの名無しさん:03/08/02 19:51
>>811
別に駄目ではないけど、たぶん循環問題になる。
sscanf()の中身でstoiとか使っているだろうから。

>>812
気持ち悪いと言うのは、たぶんscanf()系の関数は
気をつけて使わないと領域破壊をする、
つまり、有名なバッファオーバーフローのバグを作りやすいからでは?
815デフォルトの名無しさん:03/08/02 20:07
あの有名女優の無修正が!
セーラー服姿の美少女の無修正も!
http://www.ncdonald.com/
816デフォルトの名無しさん:03/08/02 23:03
誰か教えてください

下図のような罫線文字を使用して描かれたテキストデータより
    ・ループしている線の本数
    ・ループしていない線分の本数
を出力するプログラムを作れ。

┏━┓      
┃┃┃ ┏━┓  
┃┃┃ ┃┏┛  
┗╋╋━╋╋━━┓
┏┛┗━╋╋━━┛
┃┏━━┛┃ ┏━
╋╋━━━╋━┛ 
 ┗━━━┛   

->ループしている線:2本
->ループしていない線分:2本
>>816
例題にはT字型で接続された罫線がないけど、それがないことは前提にしていい?
818816:03/08/02 23:31
そんなのダメ
819817:03/08/02 23:45
┏┓
┣╋┓
┃┃┃
┃┃┃
┗┻┛
T字型があるとすると、上のような形が出てくる可能性があるけど、その場合は
ループいくつになる?1つ、2つ?
820デフォルトの名無しさん:03/08/03 00:11
jm
821816:03/08/03 00:21
考えられるケースとそれぞれに最適解を
822816:03/08/03 00:54
つまり問題の考え得る全てのパターンをまず考えてください
823816:03/08/03 00:56
C言語でないパターン含む
824_:03/08/03 00:57
825816:03/08/03 01:10
罫線の太さも考慮せよ

┏┯┳┯┯┳┯┯┯┓
┣┿╋┿┿╋┿┿┿┫
┠┼╂┼┼╂┼┼┼┨
┣┥┣┥┝┫┝┥┝┫
┗┷┻┷┷┻┷┷┷┛
826GET!DVD:03/08/03 01:12
☆★ 新商品 ゾク・ゾク 入荷!! 急げ〜!! ☆★☆
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★ 送料激安!  スピード発送!  商品豊富!   
★☆      http://www.get-dvd.com        
☆★ 激安DVDショップ 「GETDVDドットコム」 
★☆      http://www.get-dvd.com        
☆★ 今すぐアクセス Let’s Go!   急げ! 
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
827816:03/08/03 01:18
今日の運勢も出せるといいですね

││├┤
├┤││
│├┤└
├┤││
大小末大
凶凶凶吉
>>827
笑わせに来たのか?
829816:03/08/03 03:36
三次元の場合も、もちろん考慮して下さい
830816:03/08/03 06:42
>>817
何か偽者が暴れているようです。。。

T字を使用しないことが前提となります。
お願いします。
831デフォルトの名無しさん:03/08/03 07:32
>>830
>T字を使用しないことが前提となります。

そうだろうね。
グラフ理論というか、あるポイントとあるポイントが結合しているという
情報でなんとかなる問題だと思う。
T字を含めると1:多数でリンクしちゃう。

まずはテキストからグラフに変換するルーチンを書いて
それを解析する2段構えのプログラムを書けばいいんだろうけど、
眠いからまた今度。
832_:03/08/03 07:45
s/眠いからまた今度/分からないので放置/
834816:03/08/03 08:40
僕は真性馬鹿なので。。。

永遠に放置してください。
お願いします。
なんで荒らしてんの?
同じ授業受けてる奴が妨害してんの?
「俺は苦労して作ったのに、馬鹿に楽して単位取らせてたまるか!」って感じ?
836816:03/08/03 10:37
感じぃ〜
そうか、それなら納得。
作ろうと思ったけど、眠いからまた今度。
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;
}
なるほど〜アリガト!(´▽`)ございました^^
846843:03/08/04 01:12
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
全角スペースを全部タブに置き換えてね
>>846
あと、

double x, y;


double X, Y;
に置き換えて
849816:03/08/04 02:00
>>842
コードを追ってみたところ、大変勉強になりました。
ありがとうございました。
850時代は個人主義:03/08/04 14:28
http://osaka.yomiuri.co.jp/new_feature/kokoro/jyuku06.htm

社会福祉法人「いのちの電話」の斎藤友紀雄事務局長は、「『いじめ』は
世界中で起きていますが、日本の場合、その一番大きな原因は、異質なも
のを認めないという精神文化に根ざしていると思います。偏差値教育や核
家族化によって孤独を強いられた子どもたちは、必死に自分の居場所を求
めるのですが、性格や能力が集団と調和しない子は、集団から排除されて
しまう。つまり、村意識が働いて、村八分にされてしまうのです」と語る。

<差別いじめをなくそう>
日本国憲法(国のあり方を定めた法)は、個人主義を定めています。
それは、戦前、全体主義だったわが国が、悲惨な戦争に突入し敗戦したと
いう苦い経験の反省に基づきます。

別にみなが一緒じゃなくてもいいでしょ?
みなが一緒じゃないと安心できない集団がいて、その集団が
異質分子を排斥しようとする。


851時代は個人主義:03/08/04 14:28
A型は仲間を作ろうとする時、自分と価値観やリズムが同じ人ばかりを引
き寄せて、波長の合わない人々を避けてしまう傾向があります。そこには、A型
の、周囲に波風を起こしたくない、できるだけ安定した環境を作っておきたい、と
いう思いが働くからです。そんな風にしているうちに、気がついてみたらA型ば
かりの集団になっていた、ということはよくあります。
価値観がある程度同じ方向に向かっていることは大切なことですが、あまり同じ
ような考えの人ばかりが集まることは危険です。和気合いあいのムードにすっ
かり慣れて、「井の中の蛙」になってしまう恐れがあるからです。
A型は、周囲と協調して現状を安定させたい面と、常に向上心を持って現状を
脱皮したい面の両方を、バランスよく保っていくことで、上手に成長していくので
す。
自分と違う考えの人は、衝突も激しく起こるけれど、自分に良い刺激を与え、視
野を広げることにもなるということを考えてみて下さい。
また、人間関係にもけじめをつけようとするA型は、お客と店員など、立場で態
度を大きく変えたりすることがありますが、行き過ぎれば、やはり好ましくない行
動表現に見えます。
852デフォルトの名無しさん:03/08/04 14:54
853_:03/08/04 14:58
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;
}
855854:03/08/04 16:06
854の問題はファイルからaccount name balance
を読み取り表示するのですが
これをbalance順に並べて表示する方法を教えてください
856デフォルトの名無しさん:03/08/04 16:26
ソートする
なんで、accountやbalanceが配列なの?
858854:03/08/04 16:32
>>857
30人分のデータを入れるためです
accountは口座番号,nameは名前,balanceは残りの残高です
それで残高が多い順にソートしたいのです
30人分のデータが、30個=900人のデータが入るということか?
それにしては、nameの扱いが解せないが。
↓少し呆れ気味の>>857のレス
助けて下さい。全く見当がつきません。
1.標準入力ストリームから任意の正の整数値をうけとってその5乗根を表示するプログラムを書け。
2.標準入力ストリームから任意の2つの実数値a,bを受け取ってa^bを表示するプログラムをかけ。
>>843
>>844には有名なバグがあります
探してみよう
有線順位?>>862
>>861
pow(a, 0.2);
pow(a, b);
865861:03/08/04 18:05
>>864
ありがとうございます。ただ、既存の関数は使わず一から実装せよとのことでした。
866デフォルトの名無しさん:03/08/04 18:22
C言語ってint型の変数の範囲って決まってますよね。
その範囲を超えたときにエラーメッセージを表示する方法はありますか?
例外処理なんかができるとgoodです。
>>866
signal()
ただし使えるかどうかは知らん
868vivace:03/08/04 18:54
お初です.
夏休みのC++の宿題でボーランドのコンパイラでコンパイルするのと
VC++でコンパイルするのでは処理速度にかなりの差がでるのはなぜか
という宿題が出されてしまいました。なぜだか分かったら教えてくだ
さい。HPアドレスなんかも教えてくれたらありがたいですm(__)m
869vivace:03/08/04 18:55
すみません。上の発言はコンパイルしたファイルの処理速度です
870デフォルトの名無しさん:03/08/04 19:02
>>868
最適化の違い
871vivace:03/08/04 20:15
最適化ってなんですか。
宿題の答えとして出せるようなレベルのがほしいんですが。
>>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>>878
>>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;
}
885883:03/08/04 21:24
ちょっと待てよ・・・>>875って分布図か?
886883:03/08/04 21:26
やっぱり分布図か。
>>884
100ごとにだから0-99でいいと思う。
>>885
分布図ですね それは printf で長々と かいていいみたいです
>>880
馬鹿も休み休み言え
>>887
分布図なら>>884でいいと思う。
>>889
 ありがとうございますー
>>886
そんなことは聞いてない。ていうか君には聞いてない。
訳わけ
訳やく

微妙な字体の違いだよね。
素因数分解の結果の表示の仕方で
  200= (2^3)*(5^2)
と表示させたいんですけど お願いします
>>884
  プログラム動かないですけど。。
895886:03/08/04 21:50
整数(0〜99) ←これのことか
>>895
 そうです
>>896
すまない。「例  0-99 : 2」と勘違いしたよ。
よくみたら「〜」と「-」の違いがあるじゃないか・・・
>>897
整数(0〜999)の間違いでしたね ごめんなさい。。。
899>>893:03/08/04 22:07
>>496
類似の問題は既出。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=92
これを参考に書き直してやってくださいな。


900_:03/08/04 22:09
901_:03/08/04 22:13
902vivace:03/08/04 23:13
すみません871は私の発言ではないです。
このようなことは私は書いてません。
>>902
コテハン使うから騙られるんだよ。
>>584
                  / ヽ        / ヽ
               /   ヽ___/   ヽ
            /   井\  l___l /\
             |  井   ●  |    |  ●  |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       へ    |   へ       ヽ   /     | < >>エラトステネスはまだ〜?
        \\  \  \\    ヽ/     /   \_____________
チン        \\  .> \\          ヽ
   チン      \\/    \\  _       |
      \ ̄ ̄ ̄ ̄ ̄ ̄ ̄/  / ̄   ヽ    /   _
        \回回回回回/ ̄ ̄ヽ        / ̄ ̄ /|
         \___/      ヽ____/  /  |
                               /   |
                              /     |


>>904
うっせーな、8月はまだ3週もある。
906ね〜:03/08/05 16:06
>>693さん
Cで・・・(++でない)
二つのファイルを出力し
品詞が名詞のレコードのみを出力するプログラムを作れ。
使用する品詞は、普通名詞、固有名詞、さ変名詞。
こんな感じで?分かります??
わからん
>>906
おまえの知っている情報を全部出せ。
宿題として出されたのならその文章を全部間違いなく書き写せ。
話はそれからだ。

#辞書DBでも参照するって言うDBアクセスの課題って気がしてきた・・・
レコード、とは?
その「レコード」はどこにある?
910ね〜:03/08/05 16:40
1、毎日新聞記事の入ったファイルを作る
2、1をJUMANにかける→ファイル出力
3、2のファイルを品詞が名詞のレコードのみを出力するプログラムを作る。
UNIX上のコマンドにある「awk」の入力1行のことを1レコード(ファイルの1行?)
みたいなんですけど・・・。

>>910
最初から2の出力例を出しとけ
運動:名詞,動く:動詞,・・・・と属性を伴っているのならいいけど、単語から名詞かどうか判断するのって難しそう。
913ね〜:03/08/05 17:37
名古屋空港で小型機が胴体着陸、搭乗4人けがなし
名古屋 (なごや) 名古屋 地名
空港 (くうこう) 空港 普通名詞
で (で) で 格助詞
小型 (こがた) 小型 普通名詞
機 (き) 機 普通名詞
が (が) が 格助詞
胴体 (どうたい) 胴体 普通名詞
着陸 (ちゃくりく) 着陸 サ変名詞
、 (、) 、 読点
搭乗 (とうじょう) 搭乗 サ変名詞
4 (よん) 4 数詞
人 (にん) 人 名詞性名詞助数
けが (けが) けが サ変名詞
なし (なし) ない 形容詞 イ形容詞アウオ 文語基本形
こんな感じです。
>>911
もうやだ、この知・・・

大体Cの課題というよりシェルスクリプトの課題じゃないか(:;
916912:03/08/05 18:15
JUMANってそういうものなのか。
じゃあstrstrでいいんじゃないの。
>>913
地名も名詞なわけだが無視でいいのか?
918917:03/08/05 20:41
「地名も固有名詞だから>>906の使用する品詞にはいるだろう」
と突っ込みが入りそうなので修正。

>>906に挙げてある3つは、JUMANが吐いた出力のことだと思うが、
地名・人名のように、特別な出力があるものは無視していいのか?
919ね〜:03/08/05 22:42
>>918
レス遅れましたm(..)m
う〜ん・・・もう一回詳しく聞いてみます。
申しわけないです。
920ね〜:03/08/06 13:52
>>918
今のところは特別な出力は無視していいそうです。
未だやってもらう気満々だったのか・・・
>>920
次の指令:
JUMANが1行に出力する文字数に制限はあるか?
あるならそれは何文字か?
923ね〜:03/08/06 15:21
>>922
10文字〜最大20文字です。
制限はあまり気にしなくても良いといわれましたのですが。


>>905
早めにお願いしまSU
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;
}
936934:03/08/07 09:33
すいません
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
みたいな香具師
940934:03/08/07 10:34
<<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;
}
}

にしたらできました。
941934:03/08/07 10:38
>>938
mapという型自体をはじめて知りました。
勉強してきます。
>>925
ガウスの消去法でぐぐれ
943デフォルトの名無しさん:03/08/07 11:08
unsigned charを引数にして
LSB側4bitが全て0であるかどうかを判定する
関数を誰か作ってください
戻り値はunsigned char型で
1なら真 0なら偽 それ以外ならエラー
と言う条件でお願いします
エラーって、どういう状況だろーか
unsgned char testLSB4bit( unsgned char ch )
{return !( ch & 0x0f );}
946_:03/08/07 11:17
>>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の吐き出し法を復習しれ
951943:03/08/07 11:25
>>945
ありがとうございました
>>949
別に宿題じゃないんだけどふと思いついた。
なんかいい方法ってありましたっけ?
解なしのときの処理とかが面倒だね。
>>947-948
微妙なとこでおわったな(w
954デフォルトの名無しさん:03/08/08 17:39
スレ違いといわれてここに来た。
リンク先のプログラムを提出したら先生に
2分木を作成後に,任意の節(idを指定)のデータを木を根から
辿りながら見つけて出力できるようにしなさいって言われた。
どこをどうしたらいい?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=131
こんなかんじ。動作未確認、勘弁。

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); /* 余白の間隔を調節 */
}
}
956955:03/08/08 17:49
>955
ありがとうございます。
参考にさせてもらいます。
957954:03/08/08 17:59
コンパイルすると次の行
if (strcmp(node->id,sid)!=NULL){
が warning: comparison between pointer and integerとでるのですが
なぜでしょうか。
958954:03/08/08 18:23
957は解決しました。そこで以下のように修正しました。
しかしコンパイルはできたのですが実行できません。
なぜでしょうか。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=133
strcmpって・・・
まあいいか
Search_rの使い方が悪いんじゃないか?
idに0わたしてるようだし
961955:03/08/08 19:19
962955:03/08/08 19:23
・本来の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
>>966
どうやって探せばいいのでしょう?
>>970
ググる
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; という使い方は考慮されていない。常にポインタで。
979976:03/08/09 23:49
p=sizeof(struct hoge)+strlength;じゃなくて、p=malloc(sizeof(struct hoge)+strlength);だ。
>>976
もしかしてmallocが抜けているかもしれないけど
そういうこと
981976:03/08/09 23:51
>>978
なるほどねぇ、、、すごいこと考える人がいるものだね。
C FAQにあるほどだから常套手段なのか。
982976
あ、ありがとうございました。