ぼるじょあがC/C++の宿題を片づけますYO! 41代目
827 :
デフォルトの名無しさん:2005/04/12(火) 14:13:31
質問おねがいします。
複素数を標準入力で入れたいのですが方法がわかりません。
普通のだと %d%c%d%*c で、大丈夫なのですが
i や、 4 などと入力する場合があるので
文字列からやればいいのかどうすればいいのか全くわかりません
>>827 質問お願いされても困ります。
つーか、何を言いたいのか判りません。
あれやらこれやらごちゃごちゃ書いてありますが全く判りません。
>>827 複素数の入力形式が何種類あるのかまずはっきりしろ。
それから、そのすべての形式に対応する入力解析ルーチンを作るしかない。
>>827 i は 0+1*i
4 は 4+0*i
と入力するのはダメかい?
悪いことは言わない、こうしとけ、
(%はプロンプト)
%complex_input.exe
% 実数部を入れてください > 10
% 虚数部を入れてください > -5
% あなたの入力したのは 10 - 5 i です。
%
>>831 日本語がダメ。
あなたが入力したのは 10 - 5 i です。
あなたの入力した複素数は 10 - 5 iです。
あなたらは馬鹿ですか?
836 :
デフォルトの名無しさん:2005/04/12(火) 22:53:06
*NULL=ぬるぽ
大学を主席で卒業できました。いままでありがとうございました。
839 :
デフォルトの名無しさん:2005/04/13(水) 18:02:47
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)が初めてでよくわからないのです。
よろしくお願いします。
842 :
デフォルトの名無しさん:2005/04/13(水) 19:01:16
>>841 ありがとうございます。
これは、本の問題なので、先生からは何も言われてません。
そもそも後半のvector<accumulator<int> > count(10);からがよく分からなかったんですよね。
乱数0-9のいずれかを100万回足すというのですが、それでもオーバーフローになりますか?
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
>>846 char str[10];
sprintf(str, "%d", 100);
848 :
846:2005/04/13(水) 22:04:57
>847 レスありがとうです
さっきの質問なのですが、もう少し詳しい状況を説明します。
@数値を入力 >A 文字列に交換 >B 出力 をしたいです。
Aの文字列に変換する目的は、例えば1000を入力した場合、1,000というように
3桁ごとにカンマを挟みたいからです。
文字列を交換する部分には、 itoa という関数を使用し、
main関数から呼び出そうと考えています。
そこで、知りたいことは何かというと、
itoa関数を使って、何桁かの数値を
3桁ごとにカンマで区切って表示する、、、、
プログラムを教えてください。
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] その他の制限:
お願いします。
>>848 ぐおっ、マルチかよてめえ。
次からレス付かなくなるぞ。
>>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;
}
855 :
846:2005/04/13(水) 22:46:19
すいません。
書き込むとこがよくわからなくって、結果マルチになってしまいました。
不快にさせてすいません。
そして、ありがとう
856 :
850: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] 期限:明後日
cygwinはコンパイラじゃない。
859 :
デフォルトの名無しさん:2005/04/14(木) 01:13:22
>>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;
}
>>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
>>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;
}
}
}
自然数って0を含むか含まないか、人によって違うよね。
>>857はどっちのタイプ?
典型的な数学では自然数は0を含まないのだが。
>>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]
0を含むのはブルバキ流。それだけのこと。
別にどちらでもいいんじゃないか?
大変です〜答えが変わってしまいます〜
古典数学の時代には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文を使ってやることは分かるんですが、どういう式を書けばいいのかわかりません。
よろしくおねがいします
>>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;
}
}