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

このエントリーをはてなブックマークに追加
827デフォルトの名無しさん:2005/04/12(火) 14:13:31
質問おねがいします。
複素数を標準入力で入れたいのですが方法がわかりません。
普通のだと %d%c%d%*c で、大丈夫なのですが
i や、 4 などと入力する場合があるので
文字列からやればいいのかどうすればいいのか全くわかりません
828デフォルトの名無しさん:2005/04/12(火) 15:24:38
>>827
質問お願いされても困ります。
つーか、何を言いたいのか判りません。
あれやらこれやらごちゃごちゃ書いてありますが全く判りません。
829デフォルトの名無しさん:2005/04/12(火) 15:36:39
>>827
複素数の入力形式が何種類あるのかまずはっきりしろ。
それから、そのすべての形式に対応する入力解析ルーチンを作るしかない。
830デフォルトの名無しさん:2005/04/12(火) 17:57:10
>>827
i は 0+1*i
4 は 4+0*i
と入力するのはダメかい?
831デフォルトの名無しさん:2005/04/12(火) 19:20:57
悪いことは言わない、こうしとけ、
(%はプロンプト)

%complex_input.exe
% 実数部を入れてください > 10
% 虚数部を入れてください > -5
% あなたの入力したのは 10 - 5 i です。
%
832デフォルトの名無しさん:2005/04/12(火) 19:33:46
>>831
日本語がダメ。

あなたが入力したのは 10 - 5 i です。
833デフォルトの名無しさん:2005/04/12(火) 20:23:54
あなたの入力した複素数は 10 - 5 iです。
834デフォルトの名無しさん:2005/04/12(火) 22:14:36
あなたらは馬鹿ですか?
835デフォルトの名無しさん:2005/04/12(火) 22:19:47
>>834
俺たち馬鹿だろ?
836デフォルトの名無しさん:2005/04/12(火) 22:53:06
*NULL=ぬるぽ
837デフォルトの名無しさん:2005/04/12(火) 23:02:26
大学を主席で卒業できました。いままでありがとうございました。
838デフォルトの名無しさん:2005/04/13(水) 13:39:21
>>837 誰?おまい
839デフォルトの名無しさん:2005/04/13(水) 18:02:47
【質問テンプレ】
[1] 授業単元: Data Structure using STL
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=217
の301-303
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン): MS VC++
 [3.3] 言語:C++
[4] 期限:なるべく早く
[5] その他の制限: なし
840デフォルトの名無しさん:2005/04/13(水) 18:04:24
上の追加
(a){4,6,1,6,9}を使って6つの整数をinputし、平均をoutputする。
(b)vector of 10 accumulator objects を宣言する。
  vector<accumulator<int>> count(10)
100万のランダム整数(範囲0-9)を生成しする。
count[value]をインクリメントする。
アウトプットする。
==================
そもそも、
vector<accumulator<int>> count(10)が初めてでよくわからないのです。
よろしくお願いします。
841デフォルトの名無しさん:2005/04/13(水) 18:29:01
>>840
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/304.txt
作ってみたが、このままだと32bit intでは、100万回も乱数を足すと、オーバーフロー
を起こして結果がマイナスになる事があるぞ。その辺はどう言われてる?
842デフォルトの名無しさん:2005/04/13(水) 19:01:16
>>841
ありがとうございます。
これは、本の問題なので、先生からは何も言われてません。
そもそも後半のvector<accumulator<int> > count(10);からがよく分からなかったんですよね。
乱数0-9のいずれかを100万回足すというのですが、それでもオーバーフローになりますか?
843デフォルトの名無しさん:2005/04/13(水) 19:02:23
0〜9なら大丈夫かと
844デフォルトの名無しさん:2005/04/13(水) 19:03:40
もしかして、r.random()%10 にすべきなのかな?
845デフォルトの名無しさん:2005/04/13(水) 19:11:46
なんか上手くできました。
ありがとうございました。
846助けて:2005/04/13(水) 20:58:31
質問です。
整数を一桁ずつを一文字として、文字列に格納したい。
これは、1000 を 1,000のようにカンマで区切ってあらわしたいからです。
どのような関数を使ってやるのかどうか。。。
さっぱりわかりません。知識ある人どうか教えてください。
説明不足だと思うので、いろいろ質問してくださいm( __ __ )m
847デフォルトの名無しさん:2005/04/13(水) 21:02:25
>>846
char str[10];
sprintf(str, "%d", 100);
848846:2005/04/13(水) 22:04:57
>847 レスありがとうです

さっきの質問なのですが、もう少し詳しい状況を説明します。

@数値を入力 >A 文字列に交換 >B 出力 をしたいです。

Aの文字列に変換する目的は、例えば1000を入力した場合、1,000というように
3桁ごとにカンマを挟みたいからです。

文字列を交換する部分には、 itoa  という関数を使用し、
main関数から呼び出そうと考えています。

そこで、知りたいことは何かというと、
itoa関数を使って、何桁かの数値を
3桁ごとにカンマで区切って表示する、、、、
プログラムを教えてください。


849デフォルトの名無しさん:2005/04/13(水) 22:06:15
itoaよりsprintfの方がよい。(Cなら)
850デフォルトの名無しさん:2005/04/13(水) 22:17:56
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):

学籍番号、氏名、電話番号、住所 がsample.txtに
001,名前1,09012345678,日本
002,名前2,09012222222,韓国
003,名前3,08012345678,台湾
とある。この時、
問1:sample.txtを読み込み、,を抜かしてDOSプロンプトに表示せよ。
問2:適当な構造体を作成し、問1で読み込んだデータ郡を格納せよ。
問3:問2で構造体に格納したデータをsample.csvに出力せよ。その際、学籍番号
の前に行番号を付加せよ。
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年04月19日
[5] その他の制限:
お願いします。
851BYヌルポ:2005/04/13(水) 22:26:31
http://tmp4.2ch.net/test/read.cgi/mog2/1108463145/l50
↑逝ってなんかカキコしてちょ。(☆W☆)
852デフォルトの名無しさん:2005/04/13(水) 22:28:01
>>848
itoa()は処理系依存の関数だから、使わない方がいいよ。
sprintf()を使ったものを書いておくが、どうしてもitoa()を使いたいなら
簡単に改造できるはず。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/305.txt
853デフォルトの名無しさん:2005/04/13(水) 22:35:08
>>848
ぐおっ、マルチかよてめえ。
次からレス付かなくなるぞ。
854デフォルトの名無しさん:2005/04/13(水) 22:44:03
>>850
#include <stdio.h>
typedef struct {
    unsigned num;
    char name[6];
    char tel[12];
    char address[5];
} PERSON;
int main(void) {
    FILE * in_f, *out_f; int c, i; PERSON p;
    if ((in_f = fopen("sample.txt", "r")) == NULL) return 1;
    if ((out_f = fopen("sample.csv", "w")) == NULL) {
        fclose(in_f);
        return 1;
    }
    while ((c = getc(in_f)) != EOF) if (c != ',') putchar(c);
    rewind(in_f);
    for (i = 1; fscanf(in_f, "%u,%5s,%11s,%4s", &p.num, p.name, p.tel, p.address) == 4; ++i)
        fprintf(out_f, "%d,%03u,%s,%s,%s\n", i, p.num, p.name, p.tel, p.address);
    fclose(in_f);
    fclose(out_f);
    return 0;
}
855846:2005/04/13(水) 22:46:19
すいません。
書き込むとこがよくわからなくって、結果マルチになってしまいました。
不快にさせてすいません。
そして、ありがとう
856850:2005/04/13(水) 22:52:01
>>854
さっそくの書き込みありがとうございました。
857デフォルトの名無しさん:2005/04/14(木) 00:42:23
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):自然数nを入力し、x^2+y^2=z^2(x<y)を満たすようなn以下の自然数の組(x,y,z)
がいくつあるかを出力するプログラムをお願いします。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ(バージョン): cygwin
 [3.3] 言語:C
[4] 期限:明後日
858デフォルトの名無しさん:2005/04/14(木) 01:05:44
cygwinはコンパイラじゃない。
859デフォルトの名無しさん:2005/04/14(木) 01:13:22
>>858
すいません、gccでした。
860デフォルトの名無しさん:2005/04/14(木) 01:21:19
>>857
#include <stdio.h>

int main(void)
{
    int n, x, y, z, count = 0;
    scanf("%d", &n);
    for (x = 1; x <= n; x++)
        for (y = x; y <= n; y++)
            for (z = 1; z <= n; z++)
                if (x * x + y * y == z * z) count++;
    printf("%d", count);
    return 0;
}
861デフォルトの名無しさん:2005/04/14(木) 01:23:29
>>860を少々改良してスピードを速くしてみた。
#include <stdio.h>
#include <stdlib.h>
#define MAXL 128

int main(void)
{
 int i, x, y, n, count = 0;
 char buf[MAXL];

 printf("自然数 n = ");
 fgets(buf, MAXL, stdin);
 n = atoi(buf);

 if (n <= 0) {
  fprintf(stderr, "nは1以上の整数を入力して下さい\n");
  exit(1);
 }

 for (i = 1; i <= n; i++)
  for (y = 1; y < i; y++)
   for (x = 1; x < y; x++)
    if (x * x + y * y == i * i) {
     count++;
     printf("%d^2 + %d^2 = %d^2\n", x, y, i);
    }
 printf("%d個見つかりました\n", count);

 return 0;
}
862デフォルトの名無しさん:2005/04/14(木) 01:31:30
>>861
どうもありがとうございます!
863デフォルトの名無しさん:2005/04/14(木) 01:31:48
>>850
なんだかよくわかりませんが、トーカナイザ書いときますね。

int tokenizer (char* tok, FILE* fin) {
int i;
char c;
for (i = 0; i < MAX_TOKSIZE; ++i) {
c = fgetc (fin);
switch (c) {
case ',':
case '\n': tok[i] = '\0'; return 1+strlen (tok);
case EOF: tok[i] = '\0'; return EOF;
default: tok[i] = c;
}
}
}
864デフォルトの名無しさん:2005/04/14(木) 01:44:12
自然数って0を含むか含まないか、人によって違うよね。
>>857はどっちのタイプ?
865デフォルトの名無しさん:2005/04/14(木) 01:45:43
典型的な数学では自然数は0を含まないのだが。
866デフォルトの名無しさん:2005/04/14(木) 01:54:20
>>857
haskellなら1行なんだがなあ。
f n = length [(x,y,z)|(x,y,z)<-[(x,y,z)|x<-[1..n],y<-[1..n],z<-[1..n]],x<y,x^2+y^2==z^2]
867デフォルトの名無しさん:2005/04/14(木) 01:55:28
0は自然数か

大学1年生に「0は自然数である」と言うと、「本当ですか!」とか、
「高校では、自然数は1から始まる、と教わりました」という反論がかえってきます。
また『広辞苑』には,「正の整数」として「自然数」が定義されています.
このコラムをお読みの貴方はどう考えますか。結論を急がず、しばし一緒にお考え下さい。
http://www.ss.u-tokai.ac.jp/~itai/column/three.html
868デフォルトの名無しさん:2005/04/14(木) 01:55:59
>>865
それは高校までの数学でしょ?
869デフォルトの名無しさん:2005/04/14(木) 01:58:37
0を含むのはブルバキ流。それだけのこと。
870デフォルトの名無しさん:2005/04/14(木) 01:59:06
>>865は工房って事でFA
871デフォルトの名無しさん:2005/04/14(木) 02:00:08
別にどちらでもいいんじゃないか?
872デフォルトの名無しさん:2005/04/14(木) 02:02:29
大変です〜答えが変わってしまいます〜
873デフォルトの名無しさん:2005/04/14(木) 02:02:41
>>861
早くするなら、これを利用する手もある。
http://www.geocities.jp/ikuro_kotaro/koramu/seisuu.htm
O(N^3) → O(N^(3/2))と劇的にスピードアップする。
874デフォルトの名無しさん:2005/04/14(木) 02:09:18
古典数学の時代には0は発見されていなかった
875デフォルトの名無しさん:2005/04/14(木) 07:49:13
下に示す行列x,y,の積を求めるプログラムを作成せよ。
x[2][3] = { { 1 , 2 , 3 } , { 4 , 5 , 6 } } 
y[3][2] = { { 1 , 5 } , { 5 , 3 } , { 8 , 1 } }
って問題なんですが、for文を使ってやることは分かるんですが、どういう式を書けばいいのかわかりません。
よろしくおねがいします
876デフォルトの名無しさん
>>875
int z[2][2];
int sum;
for (i=0; i<2; i++) {
 for (j=0; j<2; j++) {
   sum = 0;
   for(k=0; k<3; k++) sum += x[i][k]*y[k][j]
   z[i][j] = sum;
 }
}