プログラマー軍団がC/C++の宿題を解決します 34代目
あなたのお悩み、ご相談下さい。
史上最強のプログラマー軍団の見解は?
――【注意点】――――――――――――――――――――――
・使用する言語(C/C++)や環境(CUI/GUIなど)は必ず書きましょう。
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その行とエラーの詳細を書きましょう。
エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html 【歴代スレは
>>2-10】
4get
【注意点追加】
・複雑なAAはスレが荒れたり問題を埋もれさせてしまう原因に
なりますので、使用を控えてください。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
6 :
デフォルトの名無しさん:04/11/16 00:13:12
>>967 ほい。
#include <stdio.h>
int main(void)
{
int i,j,dat,histo[11];
for (i=0;i<=10;i++)
histo[i]=0;
printf("input point\n");
while (scanf("%d",&dat)!=EOF)
histo[dat/10]++;
for(i=0;i<=10;i++) {
printf("%3d :%3d ",i*10,histo[i]);
for(j=0;j<histo[i];j++)
putchar('*');
putchar('\n');
}
return 0;
}
/*あるいは、
while(histo[i]-- > 0) putchar('*');
とか。*/
8 :
デフォルトの名無しさん:04/11/16 01:28:51
スレ違いかもしれないんですけど
C言語からフローチャートを生成するソフトが
あると聞いたのですが誰かご存知の方いらっしゃいませんか?
>>8 せめて前スレ埋まるまで待ってよ、向こうで答えてんだからさ。
10 :
デフォルトの名無しさん:04/11/16 02:14:57
>>9 すみません。
では前スレへ逝ってきますm(_ _)m
12 :
デフォルトの名無しさん:04/11/16 02:26:42
>>11 いつの間にかもう1000になってましたね。
では改めてよろしくお願いします。
え?もう教えたじゃん。
14 :
デフォルトの名無しさん:04/11/16 02:45:38
>>13 「手続き型のプログラムって局所的にはシーケンスだけど
大域的にはツリーやグラフじゃん?
フローチャートってあんま役に立たなくね?」
って事ですか?
>>8 手で書いた方が良いよ。
レポートにたえられるようなフローチャートは吐かない。
あ?ソフトそのものを紹介してやったはずだが。
17 :
デフォルトの名無しさん:04/11/16 03:12:51
>>16 ありました!!
どうもありがとうございました。
まだ使い方がよくわからないですが
今から頑張ってみます。
わざわざありがとうございました。
18 :
デフォルトの名無しさん:04/11/16 03:22:16
>>15 そうなんですか!?
それは残念ですたい…
19 :
デフォルトの名無しさん:04/11/16 03:27:19
Cを始めようとして、LSICの試食版をダウンロードして
環境設定したのですが、いざコマンドプロンプトに「lcc」と
入力すると、「C:\WINDOUS\SYSTEM32\AUTOEXEC.NT.システムファイルは
MS-DOS及びMicrosoft Windowsアプリケーションを実行するのに適して
いません。」と表示されてしまい、一歩も前に進めません。
解決方法について検索してみたんですが、こんな初歩のトラブルについて
説明してくれているようなページはありませんでした。
解決方法を教えてください。
宜しくお願いします。m(_ _)m
>>19 LSI-C使うのはやめとけ。あれは過去の遺産だ。
敢えて言うなら、ペン習字習うのに墨と硯を持ち出すようなもんだ。
入門ならMinGW Developer Studioとかよさそうじゃない?
22 :
デフォルトの名無しさん:04/11/16 03:36:23
マジですか?んじゃやめます。システム復元で元に戻します。
XP使ってるんですけど、コンパイラってもともと入ってるもんなのですか?
買ったのは二年前なんですが…。
一応、「cl」を入力してやってみたりもしたんですが、
それでも動きませんでした。(ノ_−。)
もう五時間くらいやって死にそうです。
>>22 XPには元から入ってない。
cl.exeは.NET Framework SDKとかダウンロードすると入ってる。
24 :
デフォルトの名無しさん:04/11/16 03:51:44
どうもです。早速ディベロッパースタジオとNETフレームワークっていうの
ダウンロードしてみました。あっ、正確には後者はダウンロードしてる途中です。
っていうか、なんかさっきから何回も書き込んでるのにエラーって出て
書き込めない…
25 :
デフォルトの名無しさん:04/11/16 03:52:08
あ、書き込めました。
26 :
デフォルトの名無しさん:04/11/16 04:21:43
NET Framework SDKをダウンロードしました。
セットアップをする際にIISを先に取得しろ、って言われたんですが、
これをどこからダウンロードしたらいいのやら。
もう、目がちかちかする。
こんなにパソコンと格闘するの初めてですわ。
すいません、IISのダウンロードの場所を知ってたら教えてください。
宜しくお願いします。
もちっと落ち着こうぜよ
ドトネトは使ってないから良く知らないが
学生なら時間はあるんだし自分で調べて探した方が得るものが多いと思うぞ
…そういやスレ違いだ罠
コメントしようと思ったら、言いたい事ほとんど全部
>>27 が言ってくれていた。
LSI-Cってたびたび出てくるな。
CPadからの流れだと思われ
宿題まだー?ちんちん
32 :
法学部生:04/11/16 12:30:43
26です。落ち着きます。
確かに、もっと自分で調べてみたほうがためになりそうなので、
頑張ってみようと思います。なんか昨日は、わけもわからず一人で
テンパってました。どうもありがとうございました。m(__)m
もっとレベルアップしてからやってくるので、そのときまた
宜しくお願いします。では。ノシ
33 :
33代目スレ−(778):04/11/16 13:31:56
779さん。ありガット!
参考になりますた。
遅れてごめん。
34 :
デフォルトの名無しさん:04/11/16 17:00:38
明日までに認識用文法(
http://julius.sourceforge.jp/grammar.html )を
作成しなければいけないのですが、どうしても最初の一歩で躓いてしまっています。
test.voca test.grammarを作成した後で、mkdfa.plを使うことで
自動的にtest.dfa, test.term, test.dictが作成されるはずなのですが
実行時に下記エラーが表示されます。
'/mkfa'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
mkdfa.plと同じディレクトリにmkfa.exeは存在しているのですが
どうしてもこのエラーが出ます。どなたかアドバイス頂ければ助かります。
宜しくお願いします〜〜(;;
35 :
デフォルトの名無しさん:04/11/16 17:04:18
引数として受け取った文字列を逆順にした文字列に変換する関数を作成して、
キーボードから入力した文字列を逆順に表示するプログラムを教えてください。
C言語です。
36 :
デフォルトの名無しさん:04/11/16 17:05:27
/mkfaって出てんだから、/削ればいいんじゃないの?
37 :
デフォルトの名無しさん:04/11/16 17:10:53
>>35 reverse(char *abc) {
int len = strlen(abc);
char *rev = new char[len+1];
for(int ii = 0; ii < len; ii++) rev[ii] = abc[len-ii];
rev[len] = 0;
printf("%s\n", rev);
delete[] rev;
}
コンパイルテストもしてないから、ミスってたらスマン。
39 :
デフォルトの名無しさん:04/11/16 17:15:15
>>36 ありがとうございました。既存のプログラムでマニュアル通りに動作させて
エラーがあると思わなかったのでplファイルを見てませんでしたが、
ソースを変更したら動きました。
本当に有難うございます。
40 :
デフォルトの名無しさん:04/11/16 17:21:12
>>39 オメ。しかしこの程度を解決できないのはちょっと問題。
せっかくエラーが出てんだから、良く嫁と言いたい。
整数を引数としてうけとり、その数値を三桁ごとにコンマを入れて表示する関数
を書いてください。
1000000 だと 1,000,000 こう表示したいわけです。お願いします。
>>41 void f(int n)
{
std::locale old(std::cout.imbue(std::locale("")));
std::cout << n;
std::cout.imbue(old);
}
>>42 それだと2バイト文字にならねぇべさ。
>>41 つーか、2バイト文字で出力せなあかんの?
>整数を引数としてうけとり
3名(A,B,C)の4科目(英、国、数、物)の得点を入力し
学生ごと、科目ごとの平均(小数点2位まで),合計を求め
下のような表みたいに(配列)表示させるプログラム
数、国、数、物 合計 平均
A
B
C
合計
平均
全くわかりません、プログラマーの方お願いします。
>>46 偶々気が向いた。細かいところは好きにして。
>47の作業効率は約200行/時間であることが判明しました。
>>41 #define BASE 1000
void disp(int n)
{
int d = 1;
if (n < 0) {
printf("-");
n = -n;
}
while (n / BASE >= d) { d *= BASE; }
printf("%d", n / d);
n %= d;
d /= BASE;
while (d) {
printf(",%03d", n / d);
n %= d;
d /= BASE;
}
printf("\n");
}
stdbool.h なんてあるのか。始めてみた。
53 :
デフォルトの名無しさん:04/11/16 23:41:28
メイン関数で配列a[0]からa[5]に数字をつめて関数に渡す。
関数ではその平均値を計算してメインに戻す。
(実引数は配列名と要素数とする)
っていう問題がとけません。数字を詰める事はできたんですけど、
関数が???
お願いします。
54 :
デフォルトの名無しさん:04/11/16 23:41:49
>>53 平均なんだから実数なんだろうと思ったのでそうした。
#include <stddef.h>
double avg(double *a, size_t n)
{
double sum = 0.0;
while (n--) sum += a[n];
return sum / n;
}
おいおい、その関数常に0で除算するじゃん
間違い
#include <stddef.h>
double avg(double *a, size_t n)
{
size_t i = n;
double sum = 0.0;
while (i--) sum += a[i];
return sum / n;
}
>>53 #include <iostream>
typedef int Ta;
typedef double Tr;
static Tr calcAverage(Ta * array, unsigned num);
int main()
{
Ta array[] = {1, 3, 4, 6, 8, 10, 12,};
Tr average = calcAverage(array, sizeof(array) / sizeof(*array));
std::cout << average << std::endl;
return 0;
}
Tr calcAverage(Ta * array, unsigned num)
{
Ta sum;
for (int ic = 0; ic < num; ++ic) {
sum += array[ic];
}
return (Tr) sum / num;
}
おおう、Ta sum = 0;だぜ。
double ave(double *tbl, size_t item){ double a=*tbl; int i; for(i=1; i<item; ++i) a+=*(tbl+i); return (item)?(a/item):0; }
>>61 要素数が0の場合への対応をしてるわりには、要素数0のときでも
配列にアクセスしてるね。まあ、問題はないんだけど。
要素数0のときは素直に先頭でreturnすべきだろうか。
63 :
デフォルトの名無しさん:04/11/17 00:10:51
参考になりました。
ありがとうございました。
64 :
デフォルトの名無しさん:04/11/17 00:11:09
if文の中にfor文って入れられますか?
68 :
デフォルトの名無しさん:04/11/17 00:28:51
arigatougozaimasu
69 :
デフォルトの名無しさん:04/11/17 00:31:34
前にもここで教えてもらったんだけど、やっぱ分かんないんで
もう一度おしえてください。
347863000050097003096
347863000100093004095
347863000150092004098
347863000200088003094
347863000250092003096
347863000300061002097
347863000350076003102
347863000400079003103
347863000450063002094
こういう数字の羅列の1桁目と2桁目のみを出力させたいです。
ちなみに数字のデータはtxtデータから読み込ませたいです。
もう百回かんがえろ
「ちなみに」って…
fgets()してからsscanf()。
マージソートを作成するプログラムを教えてください。
>>69 #include <stdio.h>
int main()
{
FILE *fp;
int a;
int line = 21; // 行数
char ch[10];
if(NULL == (fp = fopen("test.txt", "rb"))) return 0;
while(fgets(ch,3,fp)){
sscanf(ch,"%d",&a);
printf("%d\n",a);
fseek(fp, line, SEEK_CUR);
}
return 0;
}
とりあえず動く
74 :
デフォルトの名無しさん:04/11/17 01:16:44
>>70 >>71 とりあえず考えたプログラム載せるんで訂正してください。
#include<stdio.h>
#define MAX 3000
void main(void){
char h[MAX][30];
int i,j,s;
FILE *data,*kekka;
if((data=fopen("data.txt","r"))==NULL){
printf("ファイルオープン失敗。(data.txtがないのでは?)\n");
goto END2;
}
if((kekka=fopen("kekka.txt","w"))==NULL){
printf("ファイル書き込み失敗。(kekka.txtを開いてませんか?)\n");
goto END1;
}
printf("データ数は幾つありますか?(最大3000個まで)\n");
scanf("%d",&s);
if(s>3001){
printf("データ数の上限を超えています。\n");
goto END1;
}
for(i=0;i<s+1;i++){
for(j=18;j<21;j++){
fprintf(kekka,",%c",h[i][j]);
}
}
fprintf(kekka,"\n");
END1:fclose(kekka);
END2:fclose(data);
}
fcloseしてなかった
>>72 マージソートでまず検索しろよ…
>>74 goto使いすぎ…
>>73 突っ込みどころ満載だなぁ。間違いもあるし。
>>74 >73より酷い。つーか、少しは指摘されたことに頭使おうや。
スマソ
せっかくだから教えてください
79 :
デフォルトの名無しさん:04/11/17 01:37:13
>>73 しも1桁と2桁なんですよ。あとしたから7桁、8桁、9桁、10桁のデータ
も出力したいんです。
いきなり仕様がかわっとるぞ
漏れが悪かったよ…
下からって言ってよ…
82 :
デフォルトの名無しさん:04/11/17 01:44:29
ファイルの後ろから1byteづつ読み込んで改行コード数えればいいだろ
>>67 それは俺が書いたんだが、要素数0なら例外ですw
>>79 #include <stdio.h>
#define MAX 100
#define LINE 21
int main()
{
FILE *fp;
int a;
int keta = 4; //ketaは表示させたい桁数
int sk = LINE - keta;
char ch[MAX];
if(NULL == (fp = fopen("test.txt", "rb"))) return 0;
fseek(fp, sk, SEEK_SET);
while(fgets(ch,MAX,fp)){
sscanf(ch,"%d",&a);
printf("%d\n",a);
fseek(fp, sk, SEEK_CUR);
}
fclose(fp);
return 0;
}
とりあえず動くだけでいいですか
もうわからんす…
宿題をお願いしますm(_ _)m 言語はCかC++。
「abc-0000_IMG 〜 abc-9999_IMG を1行ずつ出力するプログラムを書け。」
例:
abc-0000_IMG
abc-0001_IMG
abc-0002_IMG
という具合に10000行をテキストに出力して保存して欲しいのです。
テキスト名は任意(適当)に付けてください。お願いします。m(_ _)m
>>86 abc-0000_IMG
abc-0001_IMG
...
abc-000f_IMG
abc_0010_IMG
...
abc_9999_IMG
ですね。
>>86 #include <stdio.h>
int main(void) {
FILE *fp = fopen("hoge.txt", "wt");
if (!fp) return 3;
fputs("abc-0000_IMG\n", fp);
fputs("abc-0001_IMG\n", fp);
fputs("abc-0002_IMG\n", fp);
:
fputs("abc-9999_IMG\n", fp);
return 0;
}
#include <stdio.h>
int main(void) {
FILE *fp = fopen("hoge.txt", "wt");
int i;
if (!fp) return 3; /* error */
for (i = 0; i < 10000; i++) {
fprintf(fp, "abc-%04d_IMG\n", i);
}
fclose(fp);
return 0;
}
>>90>>91 ありがとうございます。m(_ _)m
91さんの方を頂きます。90さんすいません。
夜遅くにどうもすいません。助かります。
93 :
69 79:04/11/17 02:57:58
>>73 >>85さんありがとうございます。でも答え出てこないので、
だれか助けてください。
>>93 仕様がよくわからんが、
・数字列は、必ず21桁
・出力するのは、18〜21桁きめうち
でいいの?
使い方は、コマンドプロンプトで、
xxx.exe <入力ファイル名 >出力ファイル名
#include<stdio.h>
void main()
{
char s[30];
while(gets(s) != 0){
for(int i = 18; i < 21; i++){
printf("%c,", s[i]);
}
}
printf("\n");
}
>>93 下2桁と下7~10桁を出力するかも
#include <stdio.h>
#define N 23
int main(int argc, char* argv[])
{
FILE *fp;
char str[N];
int a,b,t;
fp = fopen(argv[1], "r");
while (fgets(str, N, fp)) {
sscanf(str, "%11d%4d%4d%2d",&t,&a,&t,&b);
printf("%04d\t%02d\n",a,b);
}
fclose(fp);
return 0;
}
エラーチェックはシラネ
>>72 「マージソートを作成する」って何だよ。
merge_sort(a, a + sizeof(a) / sizeof(a[0]));でdoubleの配列aをマージソート。
newとかdeleteとか使ってるから、もしCがよければ自分で書き換えろ。
そのくらい自分でやってもいいだろ。
void merge_sort(double* first, double* last)
{
if (first == last) return;
if (first == last - 1) return;
double* mid = first + (last - first) / 2;
merge_sort(first, mid);
merge_sort(mid, last);
int v1_n = mid - first, v2_n = last - mid;
double *v1 = new double[v1_n], *v2 = new double[v2_n];
for (int i = 0; i < v1_n; ++i) *(v1 + i) = *(first + i);
for (int i = 0; i < v2_n; ++i) *(v2 + i) = *(mid + i);
int v1_index = 0, v2_index = 0;
int i = 0;
for (; v1_index < v1_n && v2_index < v2_n; ++i)
{
if (*(v1 + v1_index) < *(v2 + v2_index))
*(first + i) = *(v1 + v1_index++);
else
*(first + i) = *(v2 + v2_index++);
}
for (; v1_index < v1_n; ++i) *(first + i) = *(v1 + v1_index++);
for (; v2_index < v2_n; ++i) *(first + i) = *(v2 + v2_index++);
delete[] v1;
delete[] v2;
}
>>95 fgets(str, N, fp);
↓
fgets(str, sizeof(str), fp);
sscanf(str, "%11d%4d%4d%2d", &t, &a, &t, &b);
↓
sscanf(str, "%*11d%4d%*4d%2d", &a, &b);
CLAPAC以外で行列対角化のおすすめライブラリおしえてください
101 :
99:04/11/17 09:53:40
C++のものでも構いません。
とにかく、LAPACK以外でおねがいします。
104 :
デフォルトの名無しさん:04/11/17 17:50:37
Visual C++
50までの素数を見つけるプログラムで、以下のヒントが出ました。
#include <stdio.h>
#define N 51
void main()
{
変数宣言
for (i=2; i<=N-1; i++) {
a[i] = i;
}
max_prime = 2;
while (max_prime*max_prime <= N-1) {
for (j=max_prime+1; j<=N-1; j++) {
a[j]がmax_primeで割り切れるなら、a[j]にゼロを代入する。
}
k = max_prime + 1;
max_primeより大きく、ゼロでない最小のa[k](次の素数である)を見つける。
みつかったa[k]をmax_primeに代入する。
}
ゼロでないa[m]をすべて出力(mは2からN-1まで)
}
105 :
デフォルトの名無しさん:04/11/17 17:50:44
*
***
*****
*******
*********
C言語です。↑を表示するプログラムを作成しなさい。
よろしくお願いします。初心者なんでなるべくわかりやすいプログラムでお願いします。
106 :
104:04/11/17 17:51:44
自分は
#include <stdio.h>
#define N 51
void main()
{
int a[N];
int i,j,k,m;
int max_prime;
for (i=2; i<=N-1; i++) {
a[i] = i;
}
max_prime = 2;
while (max_prime*max_prime <= N-1) {
for (j=max_prime+1; j<=N-1; j++) {
while (a[j]%max_prime)
a[j] = 0;
}
k = max_prime + 1;
while((a[k] !=0) && (a[k]> max_prime)) {
k++;
}max_prime = a[k];
}
for (m = 2; m <= N-1; m++) {
printf("a[%d]",m);
}
}
とやったのですがうまくいきません。
お願いします。
>>105 int main()
{
int i,j;
for(i=0;i<5;i++)
{
for(j=4-i;0<j;j--)printf(" ");
for(j=0;j<1+i*2;j++)printf("*");
printf("\n");
}
return 0;
}
脳内コンパイルなのでうまくいくかシランネ
109 :
69 79:04/11/17 18:28:28
>>94 >>95 ありがとうございます。
数字列は必ず21桁です。
そのしも1桁と2桁です。あとしたから7桁、8桁、9桁、10桁のデータ
も出力したいです。
>>95の方の入力はどういうふうにすればいいんですか?
テキスト入力ではないみたいなんで。
>>109 俺は95ではないが実行ファイルがhoge.exeで
調べたいファイルがmoge.txtだったらコマンドラインで
hoge moge.txt
と入れればokでつ
111 :
デフォルトの名無しさん:04/11/17 19:04:45
*記号を使って、絵を描くという課題が出ました。
数式を使って書くようにという指示が出ているのですが、
野口秀雄の髪の毛・顔の輪郭を数式で表すのって無理でしょうか?
>>113 そういう画像を取り込んで*で描画するプログラムなら作れそうだがな
115 :
105:04/11/17 19:30:03
>>108 コンパイルできました。ありがとうございました。
>>106 #include <stdio.h>
#define N 51
void main()
{
int a[N];
int i,j,k,m;
int max_prime;
for (i=2; i<=N-1; i++) {
a[i] = i;
}
max_prime = 2;
while (max_prime*max_prime <= N-1) {
for (j=max_prime+1; j<=N-1; j++) {
if (!(a[j]%max_prime)) /* 割り切れるなら */
a[j] = 0;
}
k = max_prime + 1;
while((a[k] ==0) || (a[k] <= max_prime)) {
k++;
}
max_prime = a[k];
}
for (m = 2; m <= N-1; m++) {
if (a[m] != 0){
printf("%d\n",a[m]);
}
}
}
何価括弧悪い怪盗馬っ鹿
118 :
105:04/11/17 21:04:46
#include <stdio.h>
void space_star(int,int);
main()
{
space_stsr(4,1);
space_star(3,3);
space_star(2,5);
space_star(1,7);
space_star(0,9);
}
void space_star(int spaces,int stars)
{
int j,i;
for(j=spaces;j>0;j--){
printf(" ");
}
for(i=stars;i>0;i--){
printf("*");
}
printf("\n");
}
>>105の問題です。関数を使ってみたのですがコンパイルできませんでした。
どこがいけないかわかりません。お願いします。
main関数で一番最初に呼び出す関数がspace_stsrなのだが、それが原因か?
120 :
105:04/11/17 21:11:17
>>119 ありがとうございます!コンパイルできました!
>>104 >>106 >>116 for (j=max_prime+1; j<=N-1; j++) {
a[j]が0以外のときだけ、a[j]がmax_primeで割り切れるなら、a[j]にゼロを代入する。
}
もう、アウト
べき乗法のプログラムお願いします!!!
明日提出
pow(2,10) じゃダメなんだよね?
べき乗を求める関数(整数のみ)
int func(int x, int y)
{
int ret = 1;
while(y > 0){
ret *= x;
y--;
}
return(ret);
}
>>126 こんな感じだったかな…うろ覚え
#include <stdio.h>
#include <math.h>
double ipow(double a, int b)
{
int n=abs(b);
double r=1;
while (n) {
if (n&1) r *= a;
a *= a;
n >>= 1;
}
return (n>=0 ? r : 1/r);
}
double power(double a, double b)
{
if (b == (int)b) return ipow(a,(int)b);
if (a > 0) return exp(b * log(a));
if (a != 0 || b <= 0) return -1;
return 0;
}
int main()
{
printf("%g\n", power(10, 1.5));
printf("%g\n", power(1.5, 2));
return 0;
}
130 :
デフォルトの名無しさん:04/11/17 22:44:42
素数を判定する関数ができません。
誰か教えてください・・・。
ごちゃごちゃ言わずに全部オメーラがやればいいんだよ!
ほれ!
bool isSosuu(int n)
{
for(int i=1;i<n;i++) {
if(!(i%n)) return false ;
}
return true;
}
134 :
デフォルトの名無しさん:04/11/17 22:52:36
正整数を入力してそれが素数かどうかを判定するプログラムです。
int sosuu(int n)
{
int i;
for( i=2; i<n; i++ ){
if( (n%i) == 0 ) return 0;
}
return 1;
と書いたら間違ってました。
間違えた。
bool isSosuu(int n)
{
for(int i=2;i<n;i++) {
if(!(n%i)) return false ;
}
return true;
}
>>130 どうでしょう
#define NMIN 3
#define NMAX 30000
int IsPrime(int n)
{
int i;
if(n<NMIN||NMAX<n)return -1;//この範囲の計算はしない
if(n%2)
for(i=NMIN;n%i;i+=2)
if(n<i*i) return 1;//素数!
return 0;//残念…
}
138 :
130:04/11/17 23:02:50
>>137 どうせ最後に中括弧がないとかいうオチでは
いや、全然まずくないとおもう。
142 :
69 79:04/11/17 23:14:00
>>111 有難うございます。でも95はコンパイルはできるんですけど、
実行はできないみたいなんですよね。
もはや自分では限界です。だれか助けて。
scanfは処理系によってはインチキだかんね。
すかんふ
補足。
NMAXの値は好き(必要)なだけ増やしてください。
値の大きい素数判定のときに早く計算できると思います。
147 :
デフォルトの名無しさん:04/11/17 23:50:29
すいません、お願いします。
<実行結果>
下底6.50 上底2.80 高さ3.30の台形の面積は15.345です。
doble a =6.5,b=2.8,h=3.3,s;
s=?
printf ?
?のとこよろしくお願いします。
パロディウスを思い出した。やってくる。
>>147 実行結果は全角で表示なのか
めんどくさいからやめた
doble a =6.5,b=2.8,h=3.3,s;
s = daikei_menseki(a, b, h);
printf("下底6.50 上底2.80 高さ3.30の台形の面積は15.345です。 ");
P2
640 480
255
162153167・・・166
4行目の空間はtab
4行目を読み込んで数値化して編集して書き出したいのですがどうやるのでしょうか
152 :
46:04/11/18 00:10:21
>>47 47さん大変有難うございます!助かりました。
4行目ミスしました
162 153 167 ・・・ 166
155 :
デフォルトの名無しさん:04/11/18 00:14:06
157 :
ランタイムエラー:04/11/18 00:39:31
ランタイムエラーが でます。teeth07-test.dxf というファイルから 3DFACE という 文字を 数えたいのですが。
どうすればいいですか?
158 :
ランタイムエラー:04/11/18 00:41:45
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream.h>
void main()
{
char filename[]="teeth07-test.dxf";
double *coord;
char buf[256];
int count = 0;
int num = 0;
FILE *fp;
159 :
ランタイムエラー:04/11/18 00:42:16
cout <<"1\n";
fp = fopen(filename,"r");//ファイルを開く
if (fp == NULL)
{
cout << "ファイルを作成できません\n";
}else{
cout <<"2\n";
//四角形パッチの数を 数える 四角形パッチの数は文字列"3DFACE"の個数に等しい。
while(1){
if(fgets(buf,sizeof(buf),fp) == NULL)
{//1行分をbufに格納
cout << "4\n";
break;
}
if(strstr(buf,"3DFACE") != NULL)
{
//cout << "5\n";
count++;
}
}
}
160 :
ランタイムエラー:04/11/18 00:43:33
fclose(fp);//ファイルを閉じる
cout<< "count は" << count <<"\n";
cout <<"6\n";
coord = new double [count*4*3];//coordという名前の配列を作る。大きさはcount*4*3
161 :
ランタイムエラー:04/11/18 00:45:17
fp = fopen(filename,"r");
//ファイルの先頭行からENTITIESまで 読み捨てる(読み込んでも何もしない)
while(1){
if(fgets(buf,sizeof(buf),fp)==NULL)
break;
if(strstr(buf,"ENTITIES") !=NULL)
break;
}
続きがないのか、連投規制に引っかかったのか
NULLの時fcloseするとランタイムエラー出るのはいかがなものかと
>>157 #include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
const char filename[] = "teeth07-test.dxf";
std::ifstream input(filename);
if (!input)
{
std::cout << filename << "は開けませんでした" << std::endl;
return 1;
}
std::string line;
std::string::size_type pos = 0;
int count = 0;
while (pos = 0, std::getline(input, line))
while ((pos = line.find("3DFACE", pos)) != std::string::npos) ++count, ++pos;
std::cout << "count = " << count << std::endl;
double* coord = new double [count * 4 * 3];
input.close(); input.open(filename);
while (std::getline(input, line) && line.find("ENTITIES") != std::string::npos)
if (!input)
{
std::cout << "ENTITIESは見つかりませんでした" << std::endl;
delete[] coord;
return 1;
}
return 0;
}
[1] 授業単元:コンピュータ演習2
[2] 問題文(含コード&リンク):下記に書きます。
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ(バージョン):bcc32
[3.3] 言語:C/C++どちらでも可
[4] 期限:2004年11月25日hh:mmまで/無期限 のいずれか
[5] その他の制限:特に無し
問題文です。
連立方程式@2*a*x+b*y=5とAa*x+b*y=3(a=1,b=2)があり、
問1;@、Aの連立方程式の解を求めるプログラムを作成せよ(ガウスの消去法)
問2;@、Aの連立方程式のxの解の値を@、Aのaに代入し、新たにできた
式をそれぞれB、Cとする。同様にB、Cのxの解を求め@、Aのaに代入し、
新たにできた式をD、Eとする。
式Eのyの値を出力するプログラムを作成せよ。
(採点のポイント;@、Aの連立方程式をモジュール化されているかどうか)
よろしくお願いします。
WinXP + cygwin + gccで動作確認。
ガウスの消去法って確か係数行列を対角成分だけにする奴だよな?
------------------
int main();
void solver(double a1, double a2, double a3, double b1, double b2, double b3, double* x, double* y);
int main()
{
double a=1, b=2;
int i;
double x, y;
for(i=1;i<4;i++)
{
printf("式%d: %f x + %f y = %f\n", 2*i-1, 2*a, b, 5.0f);
printf("式%d: %f x + %f y = %f\n", 2*i, a, b, 3.0f);
solver(2.0f*a, b, 5.0f, a, b, 3.0f, &x, &y);
printf(" (%d)(%d)の連立方程式の解:x= %f, y= %f\n\n", 2*i-1, 2*i, x, y);
a = x;
b = y;
}
return 0;
}
void solver(double a1, double a2, double a3, double b1, double b2, double b3, double* x, double* y)
{
//前進消去
b2 = b2 - b1/a1 * a2;
(*y) = (b3 - b1/a1 * a3)/b2;
//後退なんたら
(*x) = (a3 - a2*(*y))/a1;
}
>167
ありがとうございました。
169 :
デフォルトの名無しさん:04/11/18 17:23:59
ファイルを読み込んで指定された範囲をNOTしてまた書き込むのをおながいします。
>>169 人にわかるように説明する気はあるのか?
もういいです。
印cぅ出<stぢお。h>
173 :
デフォルトの名無しさん:04/11/18 18:09:11
>>170 指定されたファイルの指定された範囲のデーターをNOTで反転したいのです。
例えば40バイト目から10バイトが1111001110だったら0000110001にして保存です。
印cぅ出<イオstレアm>
範囲はどうやって指定するんだ?
176 :
デフォルトの名無しさん:04/11/18 18:35:37
C言語なんですが下の実行結果になるように20人分の身長の度数分布表を表示する
プログラムの作り方を教えてください
double data[ ]={ 1.73, 1.68, 1.89, 1.65, 1.60, 1.75, 1.80, 1.75, 1.83, 1.90,
1.68, 1.77, 1.62, 1.58, 1.53, 1.49, 1.80, 1.72, 1.70, 1.69};
↓実行結果です。
平均身長1.71m
1.3m :
1.4m :*
1.5m :**
1.6m :******
1.7m :******
1.8m :****
1.9m :*
2.0m :
STEP1."C言語 文法"などのキーワードでぐぐる。
STEP2.検索されたサイトを見て理解する。
STEP3.自分なりに問題の解答になるように覚えたことを応用する。
178 :
デフォルトの名無しさん:04/11/18 18:48:38
がんばろうね。
がんばれや
181 :
169=173:04/11/18 18:55:27
>>175 とりあえずは範囲の始めと終わりは定数としてできますでしょうか
>>169 ファイル中に、'0'や'1'以外のバイトが現れたらどうするんだ?
>>176 #include <stdio.h>
int main()
{
double data[20]={ 1.73, 1.68, 1.89, 1.65, 1.60, 1.75, 1.80, 1.75, 1.83, 1.90, 1.68, 1.77, 1.62, 1.58, 1.53, 1.49, 1.80, 1.72, 1.70, 1.69 };
double table[8]={ 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0 };
int result[8]={ 0, 0, 0, 0, 0, 0, 0, 0 };
double total = 0; int i,j;
for(i=0; i<20; i++)
total += data[i];
double average = total / 20;
printf("平均身長%.2fm\n",average);
for(i=0; i<20; i++) {
for(j=7; j>=0; j--) {
if(data[i] >= table[j]) {
result[j]++;
break;
}
}
}
for(i=0; i<8; i++) {
printf("%.1fm:", table[i]);
for(j=0; j<result[i]; j++) {
printf("★");
}
printf("\n");
}
return 0;
}
185 :
デフォルトの名無しさん:04/11/18 21:58:48
C言語、ポインタの部分の問題です。
2つの連結リスト(データは文字)を結合するプログラムを書け.このプ
ログラムでは,引数として2つのリストへのポインタを受け取り,二番目のリ
ストを最初のリストに連結する関数concateateを作って使用すること.
どうかお願いします。
乱数100個くらい、小さい順に並べ替える。
より高速にソートするにはどういうやり方がいいの?
自然数同士の除算を減算の繰り返しで計算するプログラムのコードだれかわかりますか?
余りも考慮して。
189 :
185:04/11/18 22:34:51
>>186 たぶんそうです。
ダイテルさんの教科書の問題だと思うのですが、教授がけちって
問題部分のプリントしか配布しませんでした。
それは今世紀中には解けないと言われてる難問中の難問やん。
1981年に、アメリカのカースマンが、解法が必ず存在することを証明したが、
未だかつて、それを見つけたものはいない。
しかし、このスレの人間なら、その呪縛をとくことができるかもしれない。
君たちには、期待してるよ。
>>188 void Divide(int x, int y, int *q, int *r)
{
if (x <= 0 || y <= 0) {
printf("error\n");
return;
}
*q = 0;
while (x >= y) {
x -= y;
(*q)++;
}
*r = x;
}
192 :
カズヲ:04/11/18 22:51:19
<data.txt>ファイルからデータを読み込むプログラムを作成しています。
<data.txt>は以下の4パターンの文字の区切れ方でそれぞれ作成します。
「bbbbb」のデータの区切れが「(スペース)」、「,」、「\n」、「;」の4通りです。
その4パターンとも対応したいのですが、判別する部分がわかりません。
ご教授頂けませんでしょうか?
※4パターンは<data.txt>の中の「bbbbb」の区切れを書き直して作成しています。
<data.txt>
1) aaaaa bbbbb ccccc ddddd
2) aaaaa bbbbb,ccccc ddddd
3) aaaaa bbbbb
ccccc ddddd
4) aaaaa bbbbb; ccccc ddddd
193 :
カズヲ:04/11/18 22:56:37
192の続き
<sample.c>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
void main(){
Member pro;
char data[50];
char name1[8];
char name2[8];
char name3[8];
char name4[8];
char *A;
char *B;
char *C;
FILE *fp;
fp = fopen("data.txt", "r");
if(fp == NULL){
printf("ファイルオープンエラー!!\n");
exit(-1);
}
194 :
カズヲ:04/11/18 22:57:08
193の続き
printf("ファイルオープン!!\n");
while(1){
memset(data, 0x00, sizeof(data));
if(fgets(data, sizeof(data), fp) == NULL){
fclose(fp);
break;
}
strncpy(name1, data, strlen(data)-strlen(strchr(data, " ")));
A = strchr(data, " ");/* ここの部分の" "を変える。 */
strncpy(name2, A+1, strlen(A)-strlen(strchr(A+1, ","))-1);
B = strchr(A+1, ",");
strncpy(name3, B+1, strlen(B)-strlen(strchr(B+1, ","))-1);
C = strchr(B+1, " ");
strncpy(name4, C+1, strlen(C)-strlen(strchr(C+1, ",")));
printf("%-10s %-10 %-10 %\n", name1, name2, name3, name4);
}
}
明日提出の宿題が分からない…。
お願いします。
以下の実行結果を表示するように身長と標準体重の対応表を表示する
プログラムを作成せよ。なお、表示する身長の範囲(開始値、終了値、増分)は、
整数値として読み込み、標準体重は小数点以下2桁だけを表示すること。
標準体重の求め方は (身長ー100)*0,9
実行結果(の例)
何cmから:150
何cmまで:190
何cmごと:5
150cm: 45.00kg
155cm: 49,50kg
・・・以下省略・・・・
書き忘れてましたが、for文を使って作成せよとの事です。
宜しくお願いします。
198 :
デフォルトの名無しさん:04/11/18 23:27:08
>>195 #include <stdio.h>
#include <stdlib.h>
void main()
{
char line[128];
int start, end, inc, i;
printf("何cmから:");
start = atoi(gets(line));
printf("何cmまで:");
end = atoi(gets(line));
printf("何cmごと:");
inc = atoi(gets(line));
for(i = start; i <= end; i += inc)
printf("%dcm: %.2fKg\n", i, (i - 100) * 0.9);
}
C言語の課題で入力した16進数の
下位4ビットをオール1にした値を16進数と
上位4ビットをオール0にした値を表示せよという問題があるのですが
どのようにしてビットをいじればよいのでしょうか?
>>200 上位はわかったんですが
下位がわかりません。
具体的に教えていただけないでしょうか?
あ、逆でした。
わからないのは上位のほうです。
>>198 そのソースを参考にしたら出来ましたぁぁぁぁっぁ!
ありがとうございました!
…自己解決しました。
いや、逆立ちして考えたらなぜか閃いた。
単純なことでしたんですね
123 456 78
というファイルの内容を逆順に表示するにはどうすればいいんでしょうか?
↑整数の個数は決まってないです。
FILO型スタックを使う
それって普通のスタックじゃん…
ワラタ
FIFO型スタックとかLIFO型スタックとかFILO型スタックって言葉があるんですか
211 :
169=173:04/11/19 02:13:14
>>169=173=181=211
おれは解けたからおまえもがんばれ
線形リストの中に値を入れていって、それを昇順にソートしてください。
>>211 >173では、「10バイトが1111001110だったら」と書いているが、
>211ではビットでと書いている。
矛盾しない具体的な説明を希望する。
AAA.h と BBB.h という二つのファイルがあります。
AAA.h には
#define DAM 1
BBB.h には
#define DAM 2
と定義されています。
両ヘッダを編集せずに、両方の定義値を使用する方法は
例えば CCC.h に
#define DAM_2 2
として AAA.h と CCC.h をインクルードする以外にありますか?
変態行為はやめて下さい
#include "AAA.h"
#define DAM_A DAM
/* 処理A */
#include "BBB.h"
#define DAM_B DAM
/* 処理B */
別にインクルードする場所はファイルの先頭と決まっているわけではないから、
上記/* 処理 */に関数でも好きなだけ置けばいい。
#もちろん、DAM_A,DAM_Bはなくてもいい。
おおう、undefするの忘れてたよ。
#include "AAA.h"
#define DAM_A DAM
/* 処理A */
#undef DAM
#include "BBB.h"
#define DAM_B DAM
/* 処理B */
#undef DAM
C言語で
7個の要素からなる配列の任意の位置に
入力されたひとつのデータを挿入するプログラム
のつくりかたをおしえてください
問題は
オーストリアという配列を
「ト」と「り」の間に「ラ」を入れてオーストラリアという配列にしろという問題です
どなたかおしえてくださいよろしくおねがいします
>>220 ひらがなをカタカナに自動変換するのめんどくさいから
誰かに解いて貰って
すいません「り」じゃなくて「リ」でした
>>218 それで実現出来そうです。
ありがとうございました。
>>220 7個の要素からなる配列で、どのように「オーストリア」を表現しているのか説明してください。
#charなら7個じゃできない。
半角カタカナでええんかな
>>224 220じゃないが、WCHAR型でUNICODEなんじゃないか?
・・・たしかに問題が悪いなあ。
質問があからさまに初心者用やし、そんな相手に
UNICODEとかシフトJISとか半角とか全角とか
いちいち細かい注文つけへんと思うねん。
課題の要点は、文字列処理よりも「配列の後方転送」とちゃうかな。
解答全部やないけど、これでサンプルとかヒントになるかいな。
<pre/>// string[index] に insert を挿入。
// index以降の要素が後方に移動される。
// ただし挿入位置の妥当性やバッファサイズはチェックしない。
void insert(char *string, int index, char *insert)
{
int i;
int n;
// 重複する領域内でのコピーは、順序に注意すること。
// ここでは後方転送なので、後方から順次コピーする。
n = strlen(insert);
i = strlen(string);
while (i >= index)
{
// 1文字をコピー
string[i + n] = string[i];
// 前方に戻っていく(この順番が大事)
i -= 1;
}
// できた隙間に insert で示される文字列を挿入。
// ただし strcpy のように '\0' はコピーしない。
while (n != 0)
{
n -= 1;
string[index + n] = insert[n];
}
}</pre>
タグ書き間違えた。読みにくいから、もういっぺん貼っとこか。
<pre>
void insert(char *string, int index, char *insert)
{
int i;
int n;
// 重複する領域内でのコピーは、順序に注意すること。
// ここでは後方転送なので、後方から順次コピーする。
n = strlen(insert);
i = strlen(string);
while (i >= index)
{
// 1文字をコピー
string[i + n] = string[i];
// 前方に戻っていく(この順番が大事)
i -= 1;
}
// できた隙間に insert で示される文字列を挿入。
// ただし strcpy のように '\0' はコピーしない。
while (n != 0)
{
n -= 1;
string[index + n] = insert[n];
}
}
</pre>
>>205-206 どなたかお願いします。
実行すると、78 456 123 のように表示されるようにしたいのです。
↑ファイル読む所とかは自分で作れ。
void hoge( char* in )//in は読み込んだ一行
{
int* arr;
int n = 0;
char* ptr;
ptr = strtok( in, " \t\n" );
if( ! ptr )return;
arr = (int*)malloc( sizeof( int ) );
arr[n] = atoi( ptr );
n++;
while( ( ptr = strtok( NULL, " \t\n" ) ) ) {
arr = (int*)realloc( arr, sizeof( int ) * ( n + 1 ) );
arr[n] = atoi( ptr );
n++;
}
for( ; n > 0; n-- )
printf( "%d ", arr[n-1] );
printf( "\n" );
free( (void*)arr );
}
231 :
デフォルトの名無しさん:04/11/19 12:43:28
#include<stdio.h>
#include<math.h>
void main(void)
{
void henkan(float, float,float *, float *);
float a,b,amp,phase;
printf("Input real part="); scanf("%e",&a);
printf("Input imag part="); scanf("%e",&b);
henkan(a,b,&,&phase);
printf("%e+j%e=|%e|∠%e\n",a,b, amp,phase);
}
void henkan(float x, float y, float *r, float *theta)
{
*r=sqrt(x*x+y*y);
*theta=180.0*atan2(y,x)/3.141592;
}
このプログラムの反対の働きをするプログラム,絶対値|z|と位相角∠zを
キーボードから入れると,実数部と虚数部を表示するポインタを使った
プログラムを作ってください。
又、*theta=180.0*atan2(y,x)/3.141592;の意味がよくわからないので
教えてください。お願いします
sscanf()を使えないでstrtok()使う馬鹿。
>>231 どうでもいいが、突っ込みどころだらけなプログラムだな。
float * thetaから判るように、thetaはfloat へのポインタである。
したがって、* theta = 180.0 * atan2(y, x) / 3.141592;の意味は
atan2()関数を引き数y と x で呼び出し、その結果をラジアンから度に変換して
呼び出し元で用意した場所に格納している。
#atan2()関数が何をしているかくらいは自分で調べろ。
プログラム作成の方は、main()の方は同じ要領だから省略。
変換関数は、r とtheta を求める代わりにx とy を求めればいい。
それぞれ、r * cos(theta[rad]), r * sin(theta[rad])で求められる。
言語:C言語 環境:CUI OS:WindowsXP Pro
ソート:基本選択法を使用
キーボードから「番号、氏名」を複数入力する。
入力した各データは、一旦それぞれに配列に格納して、学籍番号をキーに昇順にソートする。
そして、ソートしたデータのそれぞれをカンマで区切ったレコードにして
csv形式のファイルへ出力するプログラムを考えてます。
どなたか宜しくお願いしますm(_ _)m
>>234 「配列」じゃないとダメなんでしょうか? ツリーに追加していくほうが楽なんですが。
>>156 やってみた。バブルソートだけど、いいかなあ・・・
Pop *Sort(Pop *top){
Pop dummy_top;//ダミーの先頭を作る
dummy_top.pop = 0;
dummy_top.NextPtr = top;
Pop *p_search = dummy_top.NextPtr;//検索対象
Pop *p_replace = &dummy_top;//置き換え対象(比較対象)の一つ前
while(p_search != NULL){
while(p_replace->NextPtr != p_search){
if(p_replace->NextPtr->pop > p_search->pop){
//置き換える
Pop *search_next = p_search->NextPtr;
Pop *replace_next = p_replace->NextPtr;
Pop *replace_next_next = p_replace->NextPtr->NextPtr;
p_search->NextPtr = replace_next;
p_replace->NextPtr->NextPtr = search_next;//p_replace->NextPtrより先に置き換えること
p_replace->NextPtr = replace_next_next;
//最初に戻して繰り返し
p_search = dummy_top.NextPtr;
p_replace = &dummy_top;
break;
}
p_replace = p_replace->NextPtr;
}
p_search = p_search->NextPtr;
p_replace = &dummy_top;
}
return dummy_top.NextPtr;
}
238 :
721:04/11/19 15:09:09
3点を通る円のプログラミングを作りたいのですが、
どのように式を作ったらよいかどなたか教えてください。
・分かってる点、始点(X1,Y1)中点(X2、Y2)終点(X3,Y3)です。
・(X-X0)^2+(Y-Y0)^2=r^2の式を使って連立方程式を立て中心(X0,Y0)と半径rを求めたいです。
そこまでわかってるんなら
3つの点代入して、その連立方程式の解を求めればいいんじゃないのか
240 :
238:04/11/19 15:21:06
>>239 そうなんですが、プログラムに直す時にどのようにしたら良いか分からなくて…
>>237 ソートできてませんでした…。なんでだろう?
そういえばそうだな…
円の方程式を
x^2+y^2+lx+my+n=0
という形で表して(円の方程式をばらしただけ、数Uの教科書参照)
ばらした式に3つの点代入して3元連立1次方程式を解いてlとmとnを求めて
元の式(x-a)^2+.....と係数比較すれば強引に求まるかも
しかし検索したら解法のアルゴリズムとかありそうだなあ…
>>234 できたけどファイルがちょっと大きかった。ここに貼るのは難しい。
しかも今ちょっと忙しい(本業:システムエン死に屋)
捨てアドでも晒してくれたら今日・明日中にでも送りますが。
それまでにだれかがソース貼ってくれるかもしれませんがw
>>237 すみません、私のミスでした。
ていねいなソースありがとうございました。
245 :
238:04/11/19 16:23:20
>>242 アドバイスありがとうございます。
もう一度挑戦してみます。
中点てのはなのよ?
(x1,y1)(x3,y3)の中点では、異なる2点を与えたのと同値で
円は一意に定まらない
用語の使い方がおかしい
249 :
238:04/11/19 16:38:09
>>246 中点に特に意味は無いです。
区別をつけたつもりが変な区別のつけ方になってしまいました。
ということでやってみた
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k; double cx,cy,r; double x[3],y[3];
double pivot; double a[3][4]; double erase;
printf("始点?:"); scanf("%lf,%lf", &x[0], &y[0]);
printf("中点?:"); scanf("%lf,%lf", &x[1], &y[1]);
printf("終点?:"); scanf("%lf,%lf", &x[2], &y[2]);
for(i=0; i<3; i++) {
a[i][0] = x[i]; a[i][1] = y[i]; a[i][2] = 1.0; a[i][3] = -(x[i]*x[i] + y[i]*y[i]);
}
for(i=0; i<3; i++) {
pivot = a[i][i];
for(j=0; j<4; j++) {
a[i][j] /= pivot;
}
for(k=0; k<3; k++) {
erase=a[k][i];
for(j=i; j<4; j++){
if(k != i) a[k][j] -= erase*a[i][j];
}
}
}
cx = a[0][3]/2; cy = a[1][3]/2;
r = sqrt((cx*cx) + (cy*cy) - a[2][3]);
printf("中心:(%lf, %lf)", cx, cy);
printf("半径:%lf", r);
return 0;
}
答えが整数になるような問題じゃないと解けないかも…
始点、中点、終点って3つの点ってことでいいよな
そもそも円だと始点と終点が同じ…
0除算チェック入れないと駄目だった…
中点の符号逆
あと始点のXが0だとだめだから
そのときは格納するときどこかと交換とか他色々
255 :
デフォルトの名無しさん:04/11/19 17:28:48
次の仕様を満足するプログラムを作成しなさい。
1.要素が50ある配列を二つ用意する。(とりあえずa[ ], b[ ]とする)
2.用意した配列a[ ]に数値をランダムに入れる
3.a[ ]の50個のデータのうち最小のものを求めて、b[0]に入れる
4.a[ ]の残りの49個のデータのうち最小のものを求めてb[1]に入れる
5.a[ ]の残りの48個のデータのうち最小のものを求めてb[2]に入れる
以下繰り返し。全部のデータがb[ ]に入ったらおしまい。
ど素人です。よろしくお願いします。
256 :
デフォルトの名無しさん:04/11/19 17:32:53
スレ違いでしたら、スイマセン。
N88BASICのプログラムをC言語に直せ。
という課題がでたのですが、一週間考えてもわかりません。
どうか教えてください。
257 :
デフォルトの名無しさん:04/11/19 17:33:47
Fractional Derivate
SCREEN2 : CONSOLE 0,25,0,0
KMAX=100:XMAX=300
RANDOMIZE
PI=3.14159*2:EK=PI/XMAX*.7
DIM ER(KMAX),EI(KMAX),F(XMAX)
FOR K=1 TO KMAX
GOSUB *GA : ER(K)=MO
GOSUB *GA : EI(K)=MO
NEXT K
*SA
CLS
INPUT "Fractional Derivate(1.0.-2.0)",D
A=5-2*D
FMAX=0 : FMIN=0
FOR K=1 TO KMAX : KA(K)=(EK*K)^(-A/2) : NEXT K
FOR X=0 TO XMAX
F(X)=0
FOR K=1 TO KMAX
KX=EK*K*X
F(X)=F(X)+KA(K)*(ER(K)*COS(KX)-EI(K)*SIN(KX))
NEXT K
IF FMAX<F(X) THEN FMAX=F(X)
IF FMIN>F(X) THEN FMIN=F(X)
NEXT X
RETURN
258 :
デフォルトの名無しさん:04/11/19 17:34:33
WINDOW (0,FMIN*1.2)-(XMAX,FMAX*1.2)
VIEW (0,200)-(XMAX,299)
FB=F(0)
FOR X=1 TO XMAX
LINE (X-1,FB)-(X,F(X))
FB=F(X)
NEXT X
GOTO *SA
*GA
MO=0
FOR GI=1 TO 10
MO=MO+RND-.5
NEXT GI
RETURN
259 :
デフォルトの名無しさん:04/11/19 17:35:23
256〜258までです。
どうかよろしくお願いします。
>>259 微妙にスレ違い。
で、Fractional Derivateってなんだ。
しかもLINEとかの描画処理が入ってるが、これはどうだろうな・・・。
こんな宿題出すやつの気が知れん。
OSはなんだ。Windowsか?
環境を明記しとけば、暇人が手伝ってくれるかもしれん。
>>243 本当にありがとうございます
捨てあどメ欄に書いておきます
C#の課題なのですが、DateTimeクラスでの、staticメンバとインスタンスメンバの違いは何か。
どう答えればいいかも
よく分からない小娘ですが、
宜しくお願いします。
まんこで釣ろうたって、そうはいかん
この喧騒の街で、一人ぼっちで
プログラミングする(・∀・)イイ!!
中途半端に小娘というキーワードの武器を使ったことで
さらに破壊的な武器を要求されてまつね
まぁこういう女を主張する香具師はロクに仕事できずに
給料平等にしろなどとのたまうんだろうがな
プログラマ界に蔓延っている男尊女卑(・∀・)イイ!!
まあ問題はスレ違いってことだけなんだが…
メンバの違いとか言われてもなぁ…
クラスメンバはクラスで一つ
インスタンスメンバはインスタンスごとに一つ
とか?メソッドは違うけど。
つーかC#シラネ
273 :
169=173:04/11/19 21:24:50
>>214 失礼いたしますた
あまりビットとかバイトを理解してませんでした。
これではどうでしょうか?
指定されたファイルの指定された範囲のデーターをNOTで反転
例えば40ビット目から10ビットが1111001110だったら0000110001にして保存です。
>>271 何がイイんだかわかんねえよカスが!!
天の上にヒトを作らず、
天の下にヒトを作らず、
って言葉しらねえのかw?
だがな、天の下に実はヒトがいたんだよ!!
それが、ここにいる香具師ら、プログラマーなんだよWWWWWW
女プログラマーに言いたい
ひたすらコピペプログラミングしないで、きちんと清書下さい
なぜか動いてるから変えたくないとか言わないで下さい
殆どありえない場合だから構わないとか言わないで下さい
全然正しくない数式にいつまでもこだわらないで下さい
>>275 職にしてない者が言って悪いんだけど
そ れ っ て そ の 人 個 人 じ ゃ な い の ?
大半がそうならすまん
>きちんと清書下さい
pu
>>276 今のところ、俺の職場にあらわれては消えていった、そしていまいる
女プログラマーの共通項。その数10人以上
279 :
デフォルトの名無しさん:04/11/19 21:46:13
280 :
259:04/11/19 21:48:51
環境はWindowsXPです。
非整数微積分をフーリエ変換を用いて表したものです。
フラクタルの授業の課題で出ました(T_T)
教官曰くC言語で簡単に書けるらしいのですが、全く掛けません。
281 :
デフォルトの名無しさん:04/11/19 21:52:40
>>275 確かにいるね
動いてるんだから他の部分変えたくないって人
ソース見たらごちゃごちゃしすぎて、行き当たりばったりでデバッグの繰り返しで継ぎ足していった感じ
そいつの直すのは根本的にむりぽ
>N88BASICのプログラムをC言語に直せ。
257と258の途中が抜けてるから無理
284 :
259:04/11/19 22:17:38
>282 途中抜けてるんですか??
一応もらったプリントどおりにうつしてあるのですが^^;
286 :
デフォルトの名無しさん:04/11/19 22:18:07
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
287 :
デフォルトの名無しさん:04/11/19 22:27:14
>>285 男でも女でもいる。
でも、女の方が多いように感じる
職場に女がいなくて目につきやすいせいかわからんが
:
NEXT X
RETURN
ここから
ここ
WINDOW (0,FMIN*1.2)-(XMAX,FMAX*1.2)
VIEW (0,200)-(XMAX,299)
:
returnの直後になぜ命令が?
292 :
259:04/11/19 23:00:49
>289 確かにそうです。すいません。
確認したところ257の最後のretuenはいらないみたいです。
でも何か間違っている気がします。ややこしくてすいません。
>何か間違っている気がします
*SA
:
GOTO *SA
...ダメポ
END無い…
N88BASICなんてすっかり忘れてるなあ。。。
How many files (0-15)?
297 :
259:04/11/19 23:59:07
とりあえず教官にメールして聞いてみます。
どうも自分では、よくわかりません(T_T)鬱になります・・・
298 :
デフォルトの名無しさん:04/11/20 00:18:03
299 :
259:04/11/20 00:39:45
>298 いいサイトありがとうございます!
でも残念ながら使えません。。
コマンドプロンプトでも試したのですが、使えませんでした。
半日見ないと結構延びるねぇ、無駄に。
>>274 >天の上にヒトを作らず、
>天の下にヒトを作らず、
>って言葉しらねえのかw?
「天は人の上に人を作らず、人の下に人を作らず」って言葉なら知ってます。
どっちみち使えたって、そんな機械変換は見てすぐにばれる
>>259 そもそもコンパイラは?VC++?BCC?cygwin+XWindow+gcc?
それ次第で描画系コードが変わると思うんだけど。
>>286 #include <algorithm>
#include <iostream>
#include <list>
#include <string>
struct pred{
bool operator()(const std::string& x, const std::string& y)
{return x.length() < y.length();}
};
int main(){
std::list<std::string> li;
std::string line;
while (std::getline(std::cin, line))
if (!line.empty())
li.push_back(line.length() > 80 ? line.substr(0, 80) : line);
li.sort(pred());
for (std::list<std::string>::const_iterator first = li.begin(), last = li.end(); first != last; ++first)
std::cout << *first << std::endl;
}
304 :
デフォルトの名無しさん:04/11/20 01:47:42
for文でxをdt=0.01刻みで増やし、テキストファイルに落としたいのですが、
全部が必要ではなく(この場合MAX/dt=10000)、1、501、1001…
というように500刻みにするにはどうすればいいのですか?
double x;
double dt=0.01;
int MIN=0;
int MAX=100;
for(x<MIN;X<=MAX;X+=dt){
if(xを500刻みで表示させたい。)
printf("hogehoge");
}
}
ifの中身を教えてください。お願いします。
dt変えれば
500で割った余りが1
double なのに?
308 :
304:04/11/20 01:59:25
>>305 区間(MIN<x<MAX)をできるだけ細かし、必要なだけ(500個とか300個等)
取り出したいのです。
キャストでも何でも好きなようにすりゃいいじゃん。
>304
ループ用のixとdtはintで。
あらためてdoubleのxを使え。
入力された文字の中にハイフンが入っていたらハイフン以降の文字列を表示
するというプログラムを作成しているのですが
char mozi[100];
gets(mozi);
char *haihun = strchr(mozi, '-');
int len;
if(NULL != haihun){ // ***
len = strlen(haihun); // ***
}else{ // ***
len = 0; // ***
} // ***
printf "一個目のハイフン以降の文字数は%d文字です", len;
cygwin上では正常にコンパイル出来て動くのですがRedHat7.3(gcc-2.96-113)
上ではparse errorが出てしまいます。
***の部分をlen = strlen(haihun);の1行にすればコンパイルは通り動作するものの、
入力文字列にハイフンが含まれていないとNULLをstrlenするためかコアダンプしてしまいます。
見ての通りぴよぴよですが解決をご教授下さいませ。
314 :
デフォルトの名無しさん:04/11/20 05:44:07
「氏名」「国語の点数」「数学の点数」「国語数学の合計点」
をメンバに持った構造体を定義し、vectorを用いて成績表を作成せよ。
10人分入力し、最後に合計点の高い順に整列させ一覧を表示する事とする。
環境はC++のコンソールです。お願いします。
>>313 C++としてコンパイルしてるのかな?
Cだとシンタックスエラーになるはずなんだが。
それにprintfに括弧がついてないけど。
ソースをコピペしてみて。
>>313 Cなら変数の宣言は前のほうにもってくるほうがいいと思うけど。
char mozi[100];
char *haihun;
int len;
gets(mozi);
haihun = strchr(mozi, '-'); 以下略
317 :
デフォルトの名無しさん:04/11/20 09:17:25
>>273 >>214ではないが、まだ仕様がわからない。
対象のファイルは、バイナリ?テキスト?
バイナリであれば、どこからどこまでを1つの数字と見ていいのか?
「1、2、3」という「数値の」並びがファイルにあるとしたら、どう変更すればいいのか?
2進数だと、「00000001、00000010、00000011」
319 :
259:04/11/20 09:21:14
>302 コンパイラの種類というのがよくわからないのですが、
コンパイルする時は gcc ファイル名 -O ファイル名 です。
初心者で申し訳ありません。できる方どうかよろしくお願いしますm(_ _)m
>>314 10人分の入力はどうやってやるの?
入力機能を作るの?
unsigned char a = 0xF2; //反転させたいビット列
unsigned char HANTEN(unsigned char a)
unsigned char b = 0x01;
unsigned char work =0, out =0;
for(int i=0; i<8; i++){
work = a & b;
work << (7 - i);
out = out | work;
b << 1;
}
return out;
}
下位から1bitずつ取り出してその分シフト、orで足し算、と。
取り出したビットがゼロだったら飛ばしてもいいかも
申し訳ない、321は誤爆デス
>>320 すいません。できればscanfとかcinなどで、
一人目の氏名→一人目の国語の点数→一人目の数学の点数
という感じで順番に手入力し、314の構造体に入れ、順次vectorに追加していく、、、
これを10人分繰り返す、という感じでお願いします。
原始的というか、初歩的な感じで結構です。よろしくお願いします。
*SAの終了がRETURNで、*SAからRETURNまでは最初はスキップされるから、
*SAまでの初期化のあとに実行されるのは
WINDOW (0,FMIN*1.2)-(XMAX,FMAX*1.2)
から。
なのか?
それにしてもなんでGOTO*SAなんだ?
325 :
デフォルトの名無しさん:04/11/20 10:21:58
>教官曰くC言語で簡単に書けるらしいのですが、全く掛けません。
↑
この教官バカ。学校変えた方がいい。
馬鹿大学か
331 :
259:04/11/20 10:33:52
そのバカ教官からの返信メールですが、
そのプログラムは多少間違えてるけど、そこは推測してC言語に直すように
だそうです。。
嫌になります。とりあえず今から学校に行ってあがいてきます・・・
>>331 そのサンプルはBASICで書いた時の例でしかなくて、
実際には別の問題文かなにかがあるんじゃないのか?
だったら、その問題文の方をここにうpしろ。
おまえら、まんこにはやさしいねぇ・・・・・・
>>331 バカ教官が昔書いたプログラムを
自分でCに置き換え出来ないので
学生にやらせようという魂胆だろうと
エスパーしてみる。
改行コード消してんでしょ、多分
338 :
デフォルトの名無しさん:04/11/20 10:52:04
>>325 ぶっちゃけカコイイと思ったの反対の賛成なのだ
>>314 #include <algorithm>
#include <iostream>
#include <string>
#include <vector>
struct student{
std::string name;
int japanese;
int english;
int total;
};
struct pred{bool operator()(const student& x, const student& y){return x.total > y.total;}};
int main(){
std::vector<student> table;
for (int i = 0; i < 10; ++i){
student temp;
std::cout << i + 1 << "番目の名前は?:";
std::cin >> temp.name;
std::cout << i + 1 << "番目の日本語は?:";
std::cin >> temp.japanese;
std::cout << i + 1 << "番目の英語は?:";
std::cin >> temp.english;
temp.total = temp.japanese + temp.english;
table.push_back(temp);
}
std::sort(table.begin(), table.end(), pred());
for (std::vector<student>::const_iterator first = table.begin(), last = table.end(); first != last; ++first)
std::cout << first->name << ' ' << first->japanese << ' ' << first->english << ' ' << first->total << std::endl;
return 0;
}
> char x[100];
> fgets(x, sizeof(x), stdin); ← 修正箇所
> x[strlen(x)-1] = '\0'; ← 修正箇所
fgets()って必ず最後に'\0'いれてくれんだっけ?
strlen()が正しく動かない時はないのけ?
fgetsが正常に動作してれば確実に'\0'は入る
char *fgets(char *s, int size, FILE *stream);
fgets() は size よりも1文字以上少ない文字を stream から読み込み、 s で示されるバッファに書き込む。
読み込みは EOF または改行文字を読み込んだ後終わる。
改行文字は読まれるとバッファに書き込まれる。
'\0' 文字がバッファの中の最後の文字の後に1文字書き込まれる。
>339
「日本語」ってあーた(w
>「国語の点数」「数学の点数」「国語数学の合計点」
微妙に問題と違ってますけど。
残念!
悪かったな、どうせ俺は日本人だよ。国語と言えば日本語しか
思いつかないようなやつだよ。
I'm just a Japanese.(・∀・)good!!
>344
ってゆーか、数学嫌いなんだろ(w
>>344 STL使った事なかったんですが助かりました。
ありがとうございました。
ところでvectorって普通の構造体配列のように
たとえばhoge[2].japanese=60;みたく
あとから簡単に特定の要素番号とメンバを指定して値を入れなおすのって
できないんでしょうか。
>>347 できるに決まってるやん。出来なかったら糞だし誰も使わないよ。
あ、普通にできました。イテレーターがどうとかでそんなものを使わないと
できないのかと思ってました。
350 :
デフォルトの名無しさん:04/11/20 16:30:36
351 :
デフォルトの名無しさん:04/11/20 17:19:09
352 :
デフォルトの名無しさん:04/11/20 17:30:51
常識のない人間がいるようですね。
>>355 提出期限は11月29日だろ?
まだまだじゃねーか。
>>355 > 本課題の提出期限は、祭日を挟むので再来週の11月29日(月)午後8:00 とする。
まだまだ余裕じゃん。
本人が書き込んでるんだろうか
んなわけねえだろ
本人はどこへ行ったんだろう
できた。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
(こぴぺがたるいので以下略)
以上。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct {
int number[MAX]; /* 各桁の数字 */
int figure; /* 桁数 */
} MPI;
// 関数のプロトタイプ宣言
MPI *getInteger(int);
int compareInteger(MPI *, MPI *);
int main() {
MPI *a, *b;
int result;
// aの入力
printf("aの値: ");
a = getInteger(MAX);
if ( !a )
return -1;
// bの入力
printf("bの値: ");
b = getInteger(MAX);
if ( !b )
return -1;
// aとbの比較
result = compareInteger(a, b);
// 結果の出力
if ( result > 0 ) {
printf("aの方が大きい\n");
} else if ( result < 0 ) {
printf("bの方が大きい\n");
} else {
printf("aとbは等しい\n");
}
free(a); a = NULL;
free(b); b = NULL;
return 0;
}
a = (MPI *)malloc(sizeof(MPI));
if(!a)return NULL;
// 標準入力 からmax+1個の文字を読み込む
fgets(ch, max+2, stdin);
// 受けとった文字を先頭から調べて、数字以外のときはエラーとする
for ( i = 0; i < max; i++ )
if ( '0' <= ch[i] && ch[i] <= '9' ) {
continue;
} else if ( ch[i] == '\n' ) {
break;
} else {
printf("数字以外が入力されました\n");
free(a);
return NULL;
}
// max+1の長さ文字列を受け取ったとき、改行で終わってないときはエラーとする
if ( i == max ) {
if ( '0' <= ch[i] && ch[i] <= '9' ) {
printf("入力が長すぎます\n");
free(a);
return NULL;
} else if ( ch[max] != '\n' ) {
printf("数字以外が入力されました\n");
free(a);
return NULL;
}
}
// 各桁の文字を数に置き換えて逆順に配列に格納し、数を表現する
a->figure = i;
for ( i = 0; i < a->figure; i++ )
a->number[i] = ch[a->figure - i -1] - '0';
// 0から数字が始まっているときは、桁数を減らす
for ( i = a->figure - 1; i > 0; i-- ) {
if (a->number[i] == 0) {
a->figure--;
} else {
break;
}
}
return a;
}
int compareInteger(MPI *a, MPI *b) {
int i;
if ( a->figure < b->figure ) return -1;
if ( a->figure > b->figure ) return 1;
for ( i = a->figure -1; i >= 0; i--) {
if ( a->number[i] < b->number[i] ) return -1;
else if ( a->number[i] > b->number[i] ) return 1;
else {
continue;
}
}
return 0;
}
369 :
デフォルトの名無しさん:04/11/20 18:41:51
325 350 351はおいらですが、他違いますです
ageてる時点でんなの誰でも気づいてるっちゅーの
ポインターの宿題でクラス内関数です。
C++でVB6使ってます。
プログラム内容は銀行の入金と出金を個別にファイルから入力しそれをポインタを使ってメモリに保存していくものです。
他の関数(入金と出金)を呼び出す必要があると思いますがそれは省略してくれてOKです。
この関数の役割はそのポインタと配列を使ってメモリ内にストア
していくものです。説明不足でしたら申し訳ありませんがよろしくおねがいします。
void CCheckbook::InsertTransaction(char type,float amount)
{
//InsertTransaction will insert a pointer to a newly
//created Transaction into an unsorted list (array) of pointers to Transactions.
//Dynamically create a new Transaction and store its pointer in the
//transactions array at the correct index.
//Populate the new Transaction with the passed in type and amount.
//Increment a member variable to get ready for the next insert.
}
質問の仕方すら分からないような低脳は素直に単位落としといた方が
お前のためにも周りの為にもなる。
373 :
デフォルトの名無しさん:04/11/20 18:52:19
だって友達いないし、今回だけ人助けだと思って助けておくれよ
周りは友達のコピーしまくりらしいけど、俺はそんな友達いないだんよ
単位落としたくないよ・・・
辞めればいいじゃん
375 :
デフォルトの名無しさん:04/11/20 18:55:57
ファイル名も分からんし、クラスのメンバも分からん。
その状態で俺が作った所で頓珍漢で無駄だらけのプログラムになる事必至。
だから作らん。
>>373 コピーされてる大元は自分で作った奴だろ?
オマエも自分で作れ。
376 :
デフォルトの名無しさん:04/11/20 19:03:56
>>355見て思ったんだが、構造体の名前を全て大文字で書くのは如何な物か?
俺もtypedefするときは全部大文字で書くよ
378 :
デフォルトの名無しさん:04/11/20 19:10:20
379 :
デフォルトの名無しさん:04/11/20 19:11:34
[1] 授業単元:IT入門
[2] 問題文:n×n行列Aが与えられたとき逆行列A^-1を計算するプログラムを作成しなさい。
[3] 環境
[3.1] OS:リナックス
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:11月26日
お願いします
俺も大文字
クラスです。
ファイルには「D, 234.25」「W, 25.13」といった感じで表現されており、
「D」の場合そのあとの数を入金し、「W」のときに出金します。
そこで挿入した数値を上記の「void InsertTransaction(char,float);」にて
ポインタで処理するわけです。
class CCheckbook
{
public:
CCheckbook(ofstream &);
~CCheckbook();
CCheckbook( const CCheckbook& otherCheckbook);
void Deposit(float); //入金の関数
void Withdrawal(float); //出金の関数
void ReadTransactions(ifstream &);
void InsertTransaction(char,float); //この関数
float GetBalance() const;
void PrintTransactions() const;
void PrintDeposits() const;
void PrintWithdrawals() const;
bool IsFull() const;
void SortTransactions();
private:
Transaction * transactions[MAX_TRANS];
int numOfTransactions;
float balance;
ofstream & outfile;
};
逆行列の計算って宿題でやるレベルなの?
>>376 漏れは一文字目のみ大文字かな。
全部大文字はマクロ定義ぐらい。
385 :
デフォルトの名無しさん:04/11/20 19:22:25
>>380 うそーん・・・
>>384 だよな!!俺もだ。
ちょっと安心した。これからもこれで行く。
#include<stdio.h>
#include<math.h>
#define M 0.0001
double f1(double x)
{
return(exp(x)-1.0/x);
}
double f2(double x)
{
return(exp(x)+1.0/pow(x,2));
}
int main(void)
{
double x1=1.0,x2;
do{
x2=x1;
x1-=(f1(x1)/f2(x1));
}while(fabs(x2-x1)<M);
printf("x=%f\n",x1);
return(0);
}
ニュートン・ラフソン法でexp(x)-(1..0/x)を解く問題なのですが
なぜか1回しかループしません。だから答えが出ないんです。
教えてくんでゴメンナサイ、教えてください。
387 :
デフォルトの名無しさん:04/11/20 19:25:01
>>381 ポインタとか言ってるけど引数にポインタねーじゃねーか。
グローバルか?変数名わかんねーよ。
それとファイル名もわかんねーよ。
>>378 一般的かはしらん。
とりあえず、MSのPlatform SDKでは大文字になってる。
他のソースの構造体も見てみる
>>386 while ループを勉強するといいと思う
>>386 whileは条件式が真の時にループする(偽になったら止まる)
本当は閾値以下になったらループを止めたいんだろうから
fabs(x2-x1) > M を式とすべき
あとどうでもいいけど、
数値計算やるならfabsとか使わないほうがいい
難しいことはわからんが、Mの横の比較演算子が逆なんちゃうかと…直感レス
>>392 ニュートン・ラフソン法って何?
って聞いていい?
395 :
デフォルトの名無しさん:04/11/20 19:44:16
>>386 int main(void){
double x1,x2;
x1=1.0;
x2=x1-f1(x1)/f2(x1);
while(fabs(x1-x2)>M){
x1=x2;
x2=x1-f1(x1)/f2(x1);
}
return(0);
}
ほいよ
396 :
デフォルトの名無しさん:04/11/20 19:48:09
>>392 宿題程度なんだし、わざわざ関数マクロ作らないでもヨカロ
397 :
デフォルトの名無しさん:04/11/20 19:50:07
>>392 > あとどうでもいいけど、
> 数値計算やるならfabsとか使わないほうがいい
横から失礼。
これはどうしてですか?
ニュートン法といっしょ
399 :
デフォルトの名無しさん:04/11/20 19:55:40
>>397 遅くなるからでしょ?
細かい事言ったら[ ]とか->とかも止めた方がいいと思う。
最適化オプションつければ関係無いけど、
コンパイラの方にもバグあるからねぇ。
数値計算限定の話じゃないかな。
abs( )系は二乗して平方根とってるから
どうも有難うございます。
嬉しくて涙が出そうです。
私、馬鹿なんで細かい事は分からないんですけど理解できるようがんばります。
>>400 まじですかそれ。しらんかった。
ほんまかどうか調べてみよう。。。
>>400 符号ビットをクリアするだけだと思っていたんだけど。
嘘に決まってるだろ
abs() は符号ビットをクリアしているだけだね (VC6 で)。
int Func1(void)
{
return abs(-1);
}
7: int Func1(void)
8: {
00401000 or eax,0FFFFFFFFh
00401003 cdq
00401004 xor eax,edx
00401006 sub eax,edx
9: return abs(-1);
10: }
00401008 ret
fabs() は fabs 命令になるだけだね (VC6 で)。
double Func2(void)
{
return fabs(-1.0);
}
12: double Func2(void)
13: {
00401010 fld qword ptr [__real@8@bfff8000000000000000 (004070c0)]
00401016 fabs
14: return fabs(-1.0);
15: }
00401018 ret
408 :
デフォルトの名無しさん:04/11/20 20:11:55
だったら、どうして fabs() を使ったらあかんの?
誰か本当のこと教えてください。m(_ _)m
CPUにバグがあるから
>>388 MSが基準と思うな
大文字小文字はマクロ・関数・変数・クラス(構造体)など区別すべき
一般的、と謳うのは避けておくが
全て大文字:マクロ
クラス(構造体):単語の頭文字は大文字、その他小文字
は大抵お決まり
関数・変数はわりと好みが分かれるが、全て大文字はまずないだろう
あー、ごめん
fabs()は遅いってあたまがあったんだけど…
もうしわけない 知ったかぶりでした
>>410 一つ例挙げただけなのに「基準と思うな」って言われても困る。
typedef struct (A){
} (B);
(B)はstruct (A)に置き換えられるようなもんだから、
って理由で全部大文字で書いてる。俺は。
ちなみに、(A)の所は全部大文字ではない。
>>412 遅いのはdoubleとかfloatをintにキャストする時じゃなかった?
>>414 VC6 では __ftol() 関数が呼び出されるね。
たしかに遅くなりそう。
__ftol:
004010A0 push ebp
004010A1 mov ebp,esp
004010A3 add esp,0FFFFFFF4h
004010A6 wait
004010A7 fnstcw word ptr [ebp-2]
004010AA wait
004010AB mov ax,word ptr [ebp-2]
004010AF or ah,0Ch
004010B2 mov word ptr [ebp-4],ax
004010B6 fldcw word ptr [ebp-4]
004010B9 fistp qword ptr [ebp-0Ch]
004010BC fldcw word ptr [ebp-2]
004010BF mov eax,dword ptr [ebp-0Ch]
004010C2 mov edx,dword ptr [ebp-8]
004010C5 leave
004010C6 ret
>>413 その他との区別をどうしてるか知らんが
くれぐれも他人に渡すソースは可読性の低いものにするなよ?
315さん、316 さんありがとうございました。
予想されたとおり、cgwinではC++、Linux上ではCでコンパイルしておりました。
コンパイルしている言語が違うことに微塵も気づく気配が無いほどぴよぴよでした。
本買って勉強してきます。
俺は416じゃないが、
typedef struct (A) {
} (B);
は、例えばHogeなら
(A) : Hoge_
(B) : Hoge
てなように内部実装ぽく書いてる
>>257 ソースが正しいと仮定すると、
*SA
は只のラベルだから
NEXT K
に続いて
CLS
が実行される。
そして、
RETURN
で戻り先がなくてアボーン。
>>286 ここできいてることを教授に報告しておいたよ
>>417 君の反応からして今まで読みやすいソースを意識してなかった香具師に見える
指摘されて逆切れ、みたいな
違ったら悪いが
プログラマー軍団って、何かいいね。
強そうで。
プログラマー軍団が解決(・∀・)イイ!!
全然コード書いてないのに、ここに居座って優越感に浸る(・∀・)イイ!!
427 :
259:04/11/20 23:14:55
>421 おっしゃるとおりです。
色々試してみましたが、上手くうごきません。
問題は非整数ブラウン運動の例です。諦めそうです。。
429 :
259:04/11/20 23:34:43
24日までです(T_T)連休がつぶれそうです。。。
Win95時代に、時勢に逆らってMS-DOS&マシン語にしがみついていた
つわもの集団。
新日本プログラミングを知ってる人はいるのか?
新日本プロレスリングなら知ってる
時代は大阪プロレスです
>>429 >421以前に、kaって配列が使われているのに宣言されていないからエラーになると思われ。
元のプログラムが未完成品なのか、全文伝わっていないのか。
どっちみち、0から書いたほうが早そうな。
「VisualBasicゲームプログラミングの応用50例」の人?
>全文伝わっていないのか
はげしくどうい
>>430 >新日本プログラミングを知ってる人はいるのか?
俺にはPCマガジンの燃える闘魂、マシン語秘伝の書の中の人
日高総帥の文章は個性的なので、かなり印象に残ってるなぁ…
>>436 漏れは ga() はこれだけでいいと思った
int ga()
{
return ((rand() % 11) - 5);
}
440 :
259:04/11/21 10:45:31
>436さん,439さん
本当にありがとうございます。今すぐ試すことができないのですが、残念ですが。
急いで試しに行きたいと思います。
本当に本当にありがとうございます!!!
というかあれだとrand()を先にdoubleにキャストしないと駄目じゃん…
正しいソースがあるならテストランできるんだけどな。
#さっきPC-9801DAの電源入れたらMS-DOS版N88Basicがちゃんと動いた。
尤も、Webに繋ぐためにはPC(Win端末)とシリアル(RS-232c)で転送しないとならないけど。
うちにもDAあるんだがHDDに溜まってる過去のデータを
転送しようとおもっても9600bpsじゃ時間掛かりすぎてorz
エミュで何とかしよう、と思ったら、ROM-BASICしか使えないorz
445 :
デフォルトの名無しさん:04/11/21 12:57:37
3点を通る円を作りたいのですが、
どのようにをプログラムを作ったらよいかどなたか教えてください。
・分かってる点、始点(X1,Y1)中点(X2、Y2)終点(X3,Y3)です。
円弧は円のみではなく始点から始まって終点まで描画する円弧も作成できるようにしたいです。
・(X-X0)^2+(Y-Y0)^2=r^2の式を使って連立方程式を立て中心(X0,Y0)と半径rを求めたいです。
>>445 3点がわかっているのだから解は一意に決まるんじゃないの?
手計算で連立方程式も簡単にとけるでしょ。
それとも連立方程式をプログラムで解かないといけないの?
238==445?
448 :
デフォルトの名無しさん:04/11/21 13:14:47
<<446
三点の値は自由に変えられるようにしたいです。
<<447
はい。またアドバイスがいただけたらと…
もう何回も答えは出てるだろが
>>448 だから、三点の座標を(x1,y1),(x2,y2),(x3,y3)として連立方程式を解けばいいじゃないか。
君、この程度の数式もとけないの?
452 :
デフォルトの名無しさん:04/11/21 13:42:32
>>259 オリジナルのBASICプログラムは無駄なコードだらけなので整理した。
/*
Fractional Derivate
*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define KMAX 100
#define XMAX 300
#define MAXBUF 256
#define PI 3.14159265358979323846
double ga()
{
double r = 0.0;
int i;
for(i = 0; i < 10; i++){
r += ((double)rand() / RAND_MAX) - 0.5;
}
return r;
}
int main(void)
{
double ek = PI * 2.0 * 0.7 / XMAX;
double a = 2.5 - 1.0;
double fmax = 0.0;
double fmin = 0.0;
double f[XMAX];
int x, k;
srand((unsigned)time(NULL));
for(x = 0; x < XMAX; x++){
f[x] = 0.0;
for(k = 0; k < KMAX; k++){
double rk = k + 1.0;
double kx = ek * rk * x;
f[x] += pow((ek * rk), -a) * (ga() * cos(kx) - ga() * sin(kx));
}
if(fmax < f[x])
fmax = f[x];
if(fmin > f[x])
fmin = f[x];
}
{
int x0 = 100;
int y0 = 200;
double w = 200.0 / (fmax - fmin);
HWND hWnd = NULL;
HDC hDC = GetDC(hWnd);
RECT r = {100, 100, 400, 300};
HBRUSH hbr = (HBRUSH)GetStockObject(GRAY_BRUSH);
HPEN hpen = (HPEN)GetStockObject(BLACK_PEN);
SelectObject(hDC, hpen);
FillRect(hDC, &r, hbr);
MoveToEx(hDC, x0 + 0, y0 + 0, NULL);
for(x = 0; x < XMAX; x++){
char s[256];
sprintf(s, "%24.18f, %24.18f", f[x], f[x] * yw);
TextOut(hDC, 500, 20 * x, s, strlen(s));
LineTo(hDC, x0 + x + 1, y0 + (int)(f[x] * yw));
}
ReleaseDC(hWnd, hDC);
}
return 0;
}
まあ、かなり手抜きなんだが、
>>436 よりはマトモに動く。
double w = 200.0 / (fmax - fmin);
↓
double yw = 200.0 / (fmax - fmin);
直してくれ。スマソ
457 :
235:04/11/21 16:13:33
もう見てないかもしれませんが
>>437 説明を見落としてました
前に送ったのはクイックソートでした
もういっぺん送ります
あふぉな漏れですみませんorz
吊ってきます・・・
c++で以下の条件でのプログラムを書く問題です。よろしくお願いします。
○ クラス名:
- bank_account
○ データメンバ:
- name (char 配列,名前)
- personal_code (int 型,暗証番号)
- balance (int 型,残金)
○ メンバ関数:
- init_account(char *name0, int code0, int pay0) (void 型)
口座の初期化を行う.名前,暗証番号,最初の入金を入力する.
- pay_in(int pay) (void 型)
口座に入金する.
- withdraw(int draw) (void 型)
口座からお金を引き出す.ただし暗証番号を入力させて,正しい場合のみ引き出す.
- show_balance() (void 型)
残高照会.名前と残高を表示する.残高がマイナスの場合は加えて”赤字です.」と表示す
る.
- is_correct_code(int code) (bool 型)
暗証番号を調べる.正しければtrue を返し,間違っていればfalse を返す.
※ 必要なら口座の初期化を行うコンストラクタも作成すること.
○ main 関数
下記の流れで処理を行う.
1. 名前,暗証番号,最初の入金を入力し,bank_account クラスの初期化を行う.
2. while ループに入る.
次のように表示して,番号を入力する.
終了の番号(0)が入力されるまでループを繰り返す.
cout << "番号を入力してください." << endl;
cout << "(1:入金,2:引き出し,3:残高照会,0:終了):";
3. (ループの中で)switch 文で入力された番号をもとに処理を分岐させ,それぞれの処理を行う.
ただし,お金を引き出す場合は暗証番号の入力を求めて,暗証番号が正しい場合のみ
引き出すこと.
そこまでわかっていて何故書けないんだろう…
>>459 愚か者ですまんです。
お察しください。
#include <iostream>
using namespace std;
class bank_account {
private:
char *name; int personal_code; int balance;
public:
~bank_account(){};
void init_account(char *name0, int code0, int pay0);
void pay_in(int pay);
void withdraw(int draw);
void show_balance();
bool is_correct_code(int code);
};
void bank_account::init_account(char *name0, int code0, int pay0) {
name = name0; personal_code = code0; balance = pay0;
}
void bank_account::pay_in(int pay) {
balance += pay;
}
void bank_account::withdraw(int draw) {
balance -= draw;
}
void bank_account::show_balance() {
cout << "名前:" << name << endl;
cout << "残高:" << balance << endl;
if(balance < 0) cout << "赤字です" << endl;
}
bool bank_account::is_correct_code(int code) {
if(personal_code == code) return true;
return false;
}
462 :
続き:04/11/21 18:30:20
int main()
{
int number; int pay,draw,code;
bank_account ba;
ba.init_account("暇人", 459, 1000);
while(1) {
cout << "番号を入力してください." << endl; cout << "(1:入金,2:引き出し,3:残高照会,0:終了):";
cin >> number;
switch(number) {
case 1:
cout << "金額?:"; cin >> pay;
ba.pay_in(pay);
break;
case 2:
cout << "暗証番号?:"; cin >> code;
if(ba.is_correct_code(code)) {
cout << "OK" << endl; cout << "金額?:"; cin >> draw;
ba.withdraw(draw);
} else { cout << "Error" << endl; }
break;
case 3:
ba.show_balance();
break;
case 0:
return 0;
}
}
}
ノートから構成されるリスト構造を用いて
名前と電話番号を入力して名前が文字コード順になるように名前と電話番号を
出力するプログラムなのですが、肝心DisplayList以外の関数が出来ません。
どうかよろしくお願いします。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct _node {
char name[20];
char phone[12];
struct _node *next;
}Node;
Node *CreateNode(Node*),*InsertNode(Node*,Node*);
void DisplayList(Node*),FreeList(Node*);
int main(void)
{
Node *p=NULL,q;
while(1){
printf("名前:"); scanf("%s",q.name);
if(strcmp(q.name,"end")==0) break;
printf("電話番号"); scanf("%s",q.phone);
p=InsertNode(p,CreateNode(&q));
}
DisplayList(p);
FreeList(p);
return;
}
Node CreateNode(Node*){}//ノードの作成(ヒープ領域の確保及び値の設定)
Node *InsertNode(Node*,Node*){}//ノードの挿入
void DisplayList(Node*){}
void FreeList(Node*){}//リスト全体のヒープ領域の開放
>>463 Node* CreateNode(Node* src){
Node* ret = (Node*)malloc(sizeof(Node));
memcpy(ret, src, sizeof(Node));ret->next = NULL;
return ret;
}
Node* InsertNode(Node* dest, Node* src){
Node* temp;
if (dest == NULL){dest = (Node*)malloc(sizeof(Node));memcpy(dest, src, sizeof(Node));}
else if (dest->next == NULL){dest->next = (Node*)malloc(sizeof(Node));memcpy(dest->next, src, sizeof(Node));}
else if (!(strcmp(dest->next->name, src->name) < 0)){temp = (Node*)malloc(sizeof(Node));memcpy(temp, src, sizeof(Node));temp->next = dest->next;dest->next = temp;}
else /* strcmp(dest->next->name, src->name) < 0 */InsertNode(dest->next, src);
return dest;
}
void DisplayList(Node* root){Node* cur = root;while (cur != NULL){printf("name:%20s phone:%12s\n", cur->name, cur->phone);cur = cur->next;}}
void FreeList(Node* ptr){if (ptr->next != NULL) FreeList(ptr->next);free(ptr);}
>>464 ありがとうございました。とっても助かりました。
がんばります。
ノートから構成されるリスト構造を用いて
ノートから構成されるリスト構造を用いて
ノートから構成されるリスト構造を用いて
[head] - [ノート1] - [ノート2] - [ノート3] - [NULL]
短縮
Node* InsertNode(Node* dest, Node* src){
if (dest == NULL){dest = src;}
else if (dest->next == NULL){dest->next = src;}
else if (!(strcmp(dest->next->name, src->name) < 0)){src->next = dest->next;dest->next = src;}
else InsertNode(dest->next, src);
return dest;
}
間違ってたらスマソ
大学ノートか?バインダーか?
470 :
デフォルトの名無しさん:04/11/21 21:46:33
ノードの間違い
だと釣られてみるテスト
デスノート万歳!
あれ面白いか?くだらない。
DEATH NOTEって書いた大学ノート持った女子見かけたよ。
某県立高校にて。
475 :
デフォルトの名無しさん:04/11/21 22:32:54
1.キーボードから入力された10真数を、2真数として出力するプログラムをつくりなさい。
2進数への変換は、商が0になるまで10進数を2で割り、余りを逆の順番で並べる方法を
用いる。ただし、入力は正の整数であって、最大値は16383(すべてが1である14桁の2進数)
とする。
2.キーボードから入力した文字列の中の、英大文字、英小文字、数字、その他(記号など)の
個数を出力するプログラムを、ポインタを使ってつくりなさい。
3.キーボードから和暦(英文字に続く数字)を入力したとき、西暦年を出力するプログラムを
プログラムを作りなさい。ただし、明治はmまたはM、大正はtまたはT、
昭和はs、またはS、平成はhまたはHとし、数字は必ず2けたで入力するものとする。
たとえば、平成7年の場合は、H07またはH07と入力すること。
どなたかお願いしますm(__)m
476 :
デフォルトの名無しさん:04/11/21 22:34:41
自分で一切やろうとしないで全部ここにやらせようという考えかw
ここってそういうスレじゃないんですかm(__)m
478 :
デフォルトの名無しさん:04/11/21 22:40:19
>>477 自分でやって駄目だったらって位置付けだと思う。
それってC言語の初歩の初歩じゃん。
自分でやった方がいいと思うし、自分で出来るレベルの問題だよ。
>>475 1.解いたよ
#include <stdio.h>
void main(void){
int i, j, k;
int kazu;
char ss[20];
scanf("%d", kazu);
i=0;
j=0;
label0:
if(kazu==0)goto label1;
if(kazu&1){ss[i]='0';}else{ss[i]='1';}
kazu = kazu - (kazu/2);
j++;
goto label0;
label1:
label2:
if(j==-1)goto label3;
putchar(ss[i]);
j = j-1;goto label2;
}label3:
}
やべ、下のほうにある
putchar(ss[i]);
は、
putchar(ss[j]);
でお願い。
問題解かしてもらってる立場の分際で
バグ作っちゃったりしてほんとにごめんなさい。
481 :
デフォルトの名無しさん:04/11/21 22:49:29
>>480 あなた問題欲しいの?
ならf2cをVC6.0で使えるようにして、ついでに公開してよ。
この課題、難しすぎて解けません!!
どなたか難問に挑戦してくださいますか?
課題:標準入力からテキストファイルを読み込み、 行を短い順に出力しなさい。 但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い 出力し、空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力 した出力と、
ttp://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存 しなければなりません。 勝手な上限を設けてはいけません。
>>475さん
問2もできました。
どうぞ
void main(void){
int i;
char *p;
char ss[80];
i=0;
scanf("%s", ss);
p=ss;
label0:
if(*p==0)goto label1;
i++;p++;
goto label0;
label1:
printf("%d個文字があったよ\n", i);}
何回もおんなじ物投下すんなぼけ
実行例
入力
あいうえお
あい
あいう
出力
あい
あいう
あいうえお
>>481 int main(void)
{
label0:
goto label0;
/*ここまでこれるかは知らんけど*/
return 0;
}
ヒント
C++ で行の取得をするには std::istream のメンバ関数である getline メソッ ドを使います。 これは getline(文字配列のポインタ, 文字数, 区切り文字)で呼びます。
ここで、区切り文字が来る前に文字数-1 文字だけ読み込んでしまった時、 std::ios:failbit が ON になってしまいます。
この場合 clear() メソッドでこのビットを OFF にする必要があります。 但し、この clear() メソッドは std::ios:eofbit も OFF にしてしまうので、 注意して使う必要があります。
以下は標準入力から各行を高々 80 文字だけ読み込み出力するプログラムです。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
main(){
char buffer[81];
while(!cin.eof()){
cin.getline(buffer,sizeof(buffer));
cout << buffer << endl;
while((!cin.eof())&&cin.fail()){
cin.clear();
cin.ignore(80,'\n');
}
}
}
これを元にお願いします。
goto推奨委員会に入りたい君は名前欄に
goto推奨委員会#goto
と入力。
int main()
{
goto main;
return 0;
}
for VC++
>>491さん
問題といてもらったのは嬉しいんですが・・・
m、s、t、h、Hの時にうまくいきません。
もう少しがんばってください。
あと、もうちょっと簡単に解いてください
494 :
259:04/11/21 23:30:05
>453さん
返信がおくれてすいません。
プログラム本当にありがとうございます。
今回色々な人に助けられて、無事に課題を終えることができました。
皆様本当にありがとうございますm(_ _)m
構造体の配列について質問です。
構造体の配列を使って以下のように出力するとします
出席番号 名前 点数1 ・・・ 点数N 平均点 評価
メンバには上の全てをくわえ、平均点は点数1〜Nで計算、評価は平均点で考えるとします。
このとき平均点は0を入れて初期化が適当ですが、評価のところには何を入れればよいのでしょうか。
どなたかご教授願います。
「評価は表示等に使われる前に必ず平均点から算出されている」
が保証されているなら、何を入れていてもいい気がする。
もし未評価状態でも表示したいなら、「未評価」な状態を一個定義してそれを設定する
今はこんな感じになっています。後は評価が出力されれば課題終了です。
#include<stdio.h>
struct data{int no;
char name[50];
int tensu[2];
double avg;
char gj[5];};
void main(void)
{int i;
char h[5];
struct data ch[]={{101,"名無しさん",{42,12},0,h[0]},
{403,"名無し君",{6,5},0,h[1]},
{404,"名無しちゃん",{60,23},0,h[2]},};
for(i=0;i<3;i++){ch[i].avg=(float)(ch[i].tensu[0]+ch[i].tensu[1])/2;}
printf("番号 氏名 教科1 教科2 平均点 評価\n");
for(i=0;i<4;i++){if(ch[i].avg<=100&&81<=ch[i].avg){h[i]='A';}
else if(ch[i].avg<=80&&61<=ch[i].avg){h[i]='B';}
else if(ch[i].avg<=60&&41<=ch[i].avg){h[i]='C';}
else{h[i]='D';}
printf("%d %s %d %d %d %.1f %c\n",ch[i].no,ch[i].name,ch[i].tensu[0],ch[i].tensu[1],ch[i].avg,gaku[i].gj);}
}
こちら側も選ぶ権利はある
ワラタ
後からチョロチョロと情報小出しにしておいて文句言うなよ。
>>1より
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
質問。
後になって解答につけたしをするのはOKですか?
なんで解答側が答えて"もらう"んだろう....
質問者がわのことだろ、何いってんだ。
何だ、質問者が解答に対して何か付け加えると勘違いしたのか。
正直スマンカッタ
508 :
デフォルトの名無しさん:04/11/22 02:27:21
初心者です。
index10.txt、index20.txt、hello30.txt、hogehoge.txtが生成されないの
はなぜですか?お願いします。
#include <iostream.h>
int main() {
int i;
for (i <= 0; i <= 5; i++){
switch ( i ){
case 1:
freopen("index10.txt", "w", stdout);
printf("Hello, World!");
fclose(stdout);
break;
case 2:
freopen("index20.txt", "w", stdout);
printf("Sage, World!");
fclose(stdout);
break;
case 3:
freopen("hello30.txt", "w", stdout);
printf("Hoge, World!");
fclose(stdout);
break;
default:
freopen("hogehoge.txt", "w", stdout);
printf("mogemoge, World!");
fclose(stdout);
break;
}
}
}
>>508 初心者です。ではなくて
ネタです。だよな?
stdout
freopen, fclose, printfを使っておきながらiostream.hとは何事か。
.hは過去の遺物だ。
イオ → イオラ → イオストリーム
514 :
デフォルトの名無しさん:04/11/22 07:55:39
タワラ
515 :
デフォルトの名無しさん:04/11/22 08:48:57
ポインターの利点ってアドレスにある値を直接操作できるってことでええんですかね?
配列の時にP+1とかって利用できるのが利点なのは後付けなきがするのですが。
オイ→オラオラ→シュトロハイム
>>515 それであってると思うよ。でも、
配列の機能がポインタの機能の後付みたいな物でないか?
519 :
デフォルトの名無しさん:04/11/22 09:28:59
>>517 サンクス
やっぱり値操作がメインですよね
二行目は多分同じことを言ってるかも?
520 :
gakusei:04/11/22 10:01:29
>>518 開けね
つーか>読める方、、いるのかどうかわかりませんが なめすぎ
今のご時世、英会話とまで行かなくともせめて読めなきゃやってられんぞ
>>520 ほとんどが、正常に動作するか確認せよ。と書かれているが…
>520
マルチヤメレ
いろんなスレの人に迷惑がかかるだろがヴォケ
1はそのまま実行するだけ。
2は****の部分をheightにして実行。
3も2と同様に。
4は最初の****のところにheightを、次の****のところにheight,weight,bmi,sweightをいれる。
5は実行するだけ。
…もしかして釣りか?
524 :
デフォルトの名無しさん:04/11/22 10:20:54
525 :
gakusei:04/11/22 10:21:02
>>522 有難うございますm(_ _)m
ネタじゃないです^^;
>>522の補足
5はscanfの行を while( scanf(略) != EOF ){ に変更して最後にも } をつける
527 :
gakusei:04/11/22 10:24:43
有難うございます^^
感謝しますm(_ _)m
>526
補足サンクスコ
529 :
デフォルトの名無しさん:04/11/22 10:27:33
またまんこの丸投げか
520は怖くて試せなかった。きっとデ・・・
>518
これホントに宿題か?
>526
普通にwhile(1){ … }でいいと思うんだが
宿題ですよー。
いくつかのソースは入力済みです。
InsertTransaction関数だけでもなんとか教えて頂けませんでしょうか・・・
バカ東大生
しーーっ!
東大生で女で入院か・・・・・・ネタで(ry
>>533 問題文は Ctrl+C ではなくCtrl+D を指定してるんだぞ?
バッファがあふれても知らんけど…。
int main(void) {
double height, weight, bmi, sweight;
char buf[256];
while (printf("身長(m)と体重(kg)を入力してください "), fgets(buf, sizeof(buf), stdin)) {
if (sscanf(buf, "%lf%lf", &height, &weight) != 2)
continue;
/* BMIの計算 */
bmi = bmi_cal(height, weight);
/* 標準体重の計算 */
sweight = std_weight(height);
/* 肥満度の判定 */
message(height, weight, bmi, sweight);
}
return 0;
}
540 :
デフォルトの名無しさん:04/11/22 14:57:16
C言語についての課題です。
「50単語程度からなる英文(複数のセンテンスでも可)をファイルから読み込み、その文章中に出現する単語とその頻度を画面表示するプログラムを作成すること。」です。
実行結果が以下のようになるようにお願いします。
ファイルの内容例
Put your hand on a hot stove for a minute, and it seems like an hour.
Sit with a pretty girl for an hour, and it seems like a minute.
That's relativity.
実行結果
Put[1] your[1]hand[1]
on[1]a[4]stove[1]
for[1]minute[2] and[2]
it[2]seems[2] like[2]
an[2]hour[2]Sit[1]
with[1]pretty[1] girl[1]
for[1]That’s[1]relativity[1]
>>540 That と that は同一として扱うのか?
>>540 hotが消えたりforが二回数えられたり、難しすぎて漏れにはわかんないや。
543 :
デフォルトの名無しさん:04/11/22 15:21:25
>>541 別みたいです。
>>542 すいません。hotが消えてるのと、forを2回数えてるのはミスです^^;
544 :
デフォルトの名無しさん:04/11/22 16:18:40
C++言語の課題です
D=v^2sin2θ+Aw(vsinθ)^2
上の式において、D,v,A,wは定数として値を与えられる。このときのθを求める問題です
よろしくお願いします
545 :
デフォルトの名無しさん:04/11/22 16:19:16
宿題です。やってみましたが、どうもうまくいきません。誰か教えてください。
以下のような動作をするプログラムを、ビット演算子利用して作成しなさい。
まずキーボードからアルファベット1文字読み込む。
ただし、アルファベット以外の文字が入力された場合は、アルファベットが入力されるまで入力を繰り返す。
そのようにしてキーボードから入力されたアルファベットが大文字なら小文字へ、小文字なら大文字へ変換し、
表示するプログラムを作成しなさい。ただし、変換する部分の処理には必ずビット演算子を使用すること。
注意)
・必ず、入力された文字がアルファベットであるかどうかを判断して、アルファベットが1文字入力されるまで、入力を繰り返すこと。
・C言語には大文字に変換する標準関数toupperや小文字に変換する標準関数が用意されているが、それらを使用してはならない。
546 :
545:04/11/22 16:24:11
C言語の課題です。よろしくお願いします。
環境依存ながら手抜くなら 0x20 でビット差とるか、引き算もしくは足し算で
全ての環境でうまいことやりたいのならテーブルで書くしかない
課題 1-1
次の条件を満たす関数 dispArray() を作りなさい。
入力は整数型のポインタ
入力されたポインタに対して、順に格納されている正の整数を 10 個ずつ表示する。
入力に -1 が入っていたら終了する
例えば整数型の配列 a[] が 1 から 15 まで順に入っていて、最後に -1 が入っている時、dispArray(a) は次のような出力をする。
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15
課題 1-2
次の条件を満たす関数 rotate() を作りなさい。
入力は整数型のポインタ
入力データはポインタから順に正の整数が並び、最後に -1 の値で終了する
この関数は入力されたポインタに対して、最初の正の整数値を一番後ろ (-1 の手前)に移動し、残りのデータは一つずつ前にずらす。
例えば 1, 2, 3, -1 という配列の先頭番地を rotate() に与えると 2, 3, 1, -1 となります。
課題 1-3
課題 1-1, 1-2 で作成した dispArray(), rotate() に対して次のプログラムを動かし結果を報告しなさい。
#include <stdio.h>
dispArray(int *p);
rotate(int *p);
#define N 99
main(){
int *a[5];
int b[]={-1};
int c[]={1,-1};
int d[]={1,2,3,-1};
int e[N+1];
int i,j;
for(i=0;i<N;i++){
e[i]=i;
}
e[N]=-1;
a[0]=b; a[1]=c; a[2]=d; a[3]=e; a[4]=NULL;
for(i=0;a[i]!=NULL;i++){
dispArray(a[i]);
for(j=0;j</* 3 桁*/; j++){
rotate(a[i]);
}
dispArray(a[i]);
}
}
プログラム音痴です。。。
せめて、課題2のヒントだけでも欲しいです。。・゚・(ノД`)・゚・。
>>545 ASCIIコード限定なら・・・
#include <stdio.h>
#include <ctype.h>
int main()
{
int c;
do{
c = getchar();
}while(!isalpha(c));
if(islower(c))
c = c ^ 0x20;
else if(isupper(c))
c = c | 0x20;
putchar(c);
return 0;
}
スレ汚しごめんなさい・・・
やっぱ他力本願は駄目ってことなんだろうと思うので
自力でがんばる事にします。
気を悪くされたかた、失礼しました。。。
>>552 このスレで珍しく見込みがありそうな質問者ハッケン
ガンガレ
がんばってみます!
ソースが書き終わったら
添削だけお願いしようかと思うので
その時はまたよろしくお願いします。
555 :
545:04/11/22 17:17:54
>551
ありがとうございました。すごく参考になりました。m(-_-)m
おいおい
>>555よ、はやまるな。
>>551の場合分けは必要ないぞ。
c = c^0x20でビットは反転される。
549 == 552
かもしれないのでヒントを
rotateに渡す添え字間違ってる…
>>556 たぶん islower isupper isalpha も使っちゃいけないんだと E.S.P. してみる。
559 :
デフォルトの名無しさん:04/11/22 18:29:37
>558
実はそれ習ってなくてよくわかりません・・・
560 :
545:04/11/22 18:30:55
559は私です。名前入れるの忘れてました。
>>545 #include <stdio.h>
typedef enum { false, true } bool;
bool isAlpha(int c)
{ return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); }
char implicit_cast(int c)
{ return c; }
int main(void)
{
int c;
do {
c = getchar();
} while (!isAlpha(c));
printf("%c", implicit_cast(c ^ 0x20));
return 0;
}
562 :
545:04/11/22 18:47:42
>561
ありがとうございました。おかげさまで何とか完成することができました。
次にやるときは自力でできるようにがんばりたいと思います。お世話になりました。
enumは分かるのか・・
564 :
545:04/11/22 19:04:36
>563
enumはわかりませんでした。561さんのを参考にして、
自分の分かるやつを見ながらいろいろやっていたら、何とか作れました。
重ね重ねありがとうございました。
565 :
デフォルトの名無しさん:04/11/22 22:35:01
これがうまく動きませんです・・・
よろしこおながいします
#include <zaisan>
int main(void)
{
person 俺, akemi;
int zaisan(3000000);
kekkon(俺, akemi);
for(;;) {
zaisan -= akemi;
if (zaisan <= 0)
heartbreak;
}
free(俺);
return 田舎;
}
//--------------------構成: 俺 - Win32 Debug--------------------
//コンパイル中...
//俺.cpp
//俺.cpp : fatal error C1083: インクルード ファイルがオープンできません。'zaisan': No such file or directory
//cl.exe の実行エラー
//
//俺.obj - エラー 1、警告 0
>>565 BonusSDKをインストールしてみたら?
>>565 /* zaisan.h */
#include <stdio.h>
typedef int person;
#define inaka 0
#define jisatu -1
#define free(x) { printf("実家に帰ろう…\n"); (x) += 100000;}
#define heartbreak { printf("破局\n"); break; }
void kekkon(person &m, person &f) {
m = 1000; f = 1000000; printf("結婚\n");
}
#include "zaisan.h"
#include <stdio.h>
int main(void)
{
person ore,akemi; int zaisan = 3000000; int day = 0; int ps;
kekkon(ore, akemi);
for(;;) {
zaisan -= akemi;
zaisan += ore;
printf("%d日目\n",day);
day++;
if (zaisan <= 0)
heartbreak;
}
free(ore);
return inaka;
}
569 :
デフォルトの名無しさん:04/11/23 00:23:19
ワロタw
C++導入しようぜ
#define MIKON 0
#define KIKON 1
class person{
private:
char name[32];
unsigned int nenshu;
unsigned int married;
int zaisan;
public:
person(char* n, int z) { strcpy(name, n); zaisan = z; }
~person(void) { std::cout << "さようなら";}
void kekkon() { married = KIKON; }
void rikon(unsigned int isharyou);
void getjob(unsined int s) { nenshu = s; }
void mushoku() { nenshu = 0; }
void zaisanhendou(int zh) { zaisan += zh; }
}
void person::rikon(unsigned int isharyou){
if(married==1){
married = MIKON;
zaisan -= isharyou;
}
明美が高すぎる件について
女は結局金金カネカネだからな。。。
女は時間と金がかかる
Girls require time and money(女 = 時間 x 金)
時は金なり
Time is money(時間 = 金)
⇒女 = 金 x 金
^2じゃ効かねーよ
575 :
sa:04/11/23 11:33:03
この問題を解いてもらえませんか?標準入力からテキストファイルを読み込み、
行を短い順に出力しなさい。 但し、行は最大 80 文字とし、 80 文字以上の
行は先頭 80 文字だけの行として取扱い 出力し、空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存
しなければなりません。 勝手な上限を設けてはいけません。
なんやえらい宿題たまってるなあ。
暇やからどれかやってみてもええけど、どれがまだなんかわからんわ。
それともテンプレ無視はまとめて強制退去処分(
>>550サンショー)になるんかいな。
ここの常駐者やないけど、ちょっと言わしてもらいま。
勉強の助けになるんならやってもええけど、
解答出しても、それ見て勉強するなんてありえへんやつばっかりちゃうかいな。
ろくに解答も実行結果も確認せんと、そのまま提出してるだけちゃうかと思うわ。
>>553→
>>552の意見はもっともやな。
そもそもテンプレ(
>>5)しっかり読んで、細かいこともしっかり書かなあかんで。
やる気ないのバレバレやと、だれも宿題やってくれへんでー。
なんや感じ悪いこと書いてスレに水差したみたで、えらいすんまへん。
>>576 このスレは宿題に答える隔離スレ
件のテンプレもスレタイどうこうで暴れてたバカが作った物
>>577 さよですか。質問テンプレの内容は便利そうに見えたんやけど、
外野の補欠でっさかい、いらんことは言わんときますわ。すんまへん。
質問テンプレどうこうより、変に省略せず全文を書いて欲しいのと、
長いソースは
>>1のアップローダ使って欲しい。
581 :
sa:04/11/23 14:18:43
582 :
デフォルトの名無しさん:04/11/23 14:27:17
c言語。初心者です。
プログラム実行中、常にcsvファイルへのアクセスがあります。
csvファイルは
氏名(半角カナ),住所(Shift_JIS),電話1(半角数字),電話2,メアド1(半角英数記号),メアド2
で、保証されているのは氏名のみ。1行の長さは任意。
maxは1000行程度。
アクセスの種類は検索、更新。
更新時は該当行への検索結果を表示後、更新という処理の流れなので
i/oを削減するために、csvファイルに対する検索用の簡単なindexテーブルを
RAMに保有することにしました。
indexテーブルの目的は、更新対象のcsvファイル内の位置を特定するためと、
検索時にはファイルへのアクセスはせず、検索結果としてテーブルの氏名のみ表示。
ややこしいハッシュテーブル等は使用しません。
indexテーブル、プログラム実行時の初回作成と、
csvファイル更新時のタイミング。テーブルに保有するのは
「氏名」と「csvファイル内での位置」
としたとき、「csvファイル内での位置」は単純に行位置を保有するor
ftell等でその行の先頭のオフセットを取得する
のどちらがスマート&高速?
行位置だと更新時に目的行までfreadで読む。
オフセットだと一発アクセス可能?
>581
過去ログ嫁
584 :
sa:04/11/23 14:30:53
どうやったら見れるんですか?
>582
高々1000行、全部メモリでやれ
586 :
デフォルトの名無しさん:04/11/23 14:31:12
×indexテーブル、プログラム実行時の初回作成と、
○indexテーブルはプログラム実行時の初回作成と、
587 :
sa:04/11/23 14:39:55
588 :
デフォルトの名無しさん:04/11/23 14:43:37
float n[5]に適当な数値が入っているとして、
これを一定の刻みに整頓するプログラムを作成せよ。
例:「1.3, 1.6, 2.8, 1.0, 0.1」という数列を
0.5刻みで整頓させ「1.5, 1.5, 3.0, 1.0, 0.0」とする。
Cのコンソールで5つの数値と区切り幅を入力させる感じでお願いします。
区切りに吸着しさえすればよいです。
>>589 なんてこと言うんですか!
私は初心者ですよ?!
初心者は大事にしないとけませんにょ!
>>588 #include <stdio.h>
#define N 5
int main()
{
float n[N], d;
int i, k;
for (i=0; i<N; i++) {
printf("n[%d]=",i);
scanf("%f", &n[i]);
}
printf("d=");
scanf("%f", &d);
for (i=0; i<N; i++) {
k = (int)(n[i]/d);
if ((int)(n[i]/d*10)%10 >= 5) k++;
printf("%f ",d*k);
}
return 0;
}
初心者には単位はあげられません
594 :
gakusei:04/11/23 16:13:45
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
#include<stdio.h>
int main()
{
int n,i,sum;
/*キーボードから整数nを読み込み8,10,16進数で表示する*/
/*1からnまでの総和を求める*/
scanf("%d",&n);
printf("%6o\n",n);/*6文字幅で8進数として表示*/
printf("%6d\n",n);/*6文字幅で10進数として表示*/
printf("%6x\n",n);/*6文字幅で16進数として表示*/
for (i = 1, sum = 0; i <= n; i++){
sum+=1;
}
printf("1 - %-3d, sum = %6d\n", n, sum); /*総和を表示*/
return 0;
}
CのプログラムをC++で書き換えるというのが問題です。
#include <iostream>
using namespace std;
int main()
{
くらいまでしか分かりません・・。よろしくお願いします。
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
課題
入力ファイル(テキストファイル)の中の文字、空白、タブ(水平)
改行数を調べて結果を表示するプログラムを作れ。
エスケープシーケンス(\n 改行)?を利用するみたいなんですが
よくわかりません。あと、テキストをプログラムに入力する際の
リダイレクトの使い方がよくわかりません。
言語はCです。よろしくお願いします。
帰ってくれ
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
できれば、夜の7時までにお願いします。その後遊びに行きたいので。
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
できれば、夜の7時までにお願いします。その後遊びに行きたいので。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ばか
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
できれば、夜の7時までにお願いします。その後遊びに行きたいので。
質問者はトリップつけろよー
608 :
デフォルトの名無しさん:04/11/23 17:00:44
バカ!バカ!まんこ!!
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
お前ら早く答え教えろよ!いい加減に教えないと頃すぞ!!
610 :
デフォルトの名無しさん:04/11/23 17:20:19
611 :
デフォルトの名無しさん:04/11/23 17:33:03
declaration of `R' as multidimensional array must have
bounds for all dimensions except the first
612 :
デフォルトの名無しさん:04/11/23 17:34:14
declaration of `R' as multidimensional array must have
bounds for all dimensions except the first
というエラーメッセージが出ました。これって
どういうことですか?教えてください。
declaration of `R' as multidimensional array must have
bounds for all dimensions except the firstって事です。
declaration of `R' as multidimensional array
が
must have bounds for all dimensions except the first
って事です。
a[][N]はいいけどa[][]はだめって事だろ。
616 :
デフォルトの名無しさん:04/11/23 17:51:16
関西学園さんこんにちは
どなたかお願い・・
>>599,618
はいよ。
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n,i,sum;
/*キーボードから整数nを読み込み8,10,16進数で表示する*/
/*1からnまでの総和を求める*/
scanf("%d",&n);
printf("%6o\n",n);/*6文字幅で8進数として表示*/
printf("%6d\n",n);/*6文字幅で10進数として表示*/
printf("%6x\n",n);/*6文字幅で16進数として表示*/
for (i = 1, sum = 0; i <= n; i++) sum++;
printf("1 - %-3d, sum = %6d\n", n, sum); /*総和を表示*/
return 0;
}
>>599 C++でもその元のソースは問題なく使えると思うのだが、何を持ってC++に書き換えたと判断するんだ?
#出力の整形にprintf()系を使うなということなのかな?
だとしたら私はパスだ。
>>619 馬鹿野郎
- for (i = 1, sum = 0; i <= n; i++) sum++;
- printf("1 - %-3d, sum = %6d\n", n, sum); /*総和を表示*/
+ printf("1 - %-3d, sum = %6d\n", n, n * (n + 1) / 2); /*総和を表示*/
だろ。
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』
CとC++のどちらでも構いません。よろしくお願いします。
夜の7時までにお願いします。今コンパ中なんで、帰ったらできてるようにな。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n,i,sum;
cin >> n;
cout << setw(6) << oct << n << endl;
cout << setw(6) << dec << n << endl;
cout << setw(6) << hex << n << endl;
for(i=1, sum=0; i<=n; i++) {
sum += 1;
}
cout << dec << "1 - " << setw(3) << left << n << ", sum =" << setw(6) << right << sum << endl;
return 0;
}
使いづらい…
setwは直後のものしか反映されなかったはず
624 :
デフォルトの名無しさん:04/11/23 18:21:01
質問です。
基本クラスAから導出されたクラスB,Cがあります。それぞれがファイルなどへの書き込みと
読み出し命令を持っています。
class A{
A()
virtual bool Save();
virtual bool Load();
};
class B : public A{
B();
virtual bool Save();
virtual bool Load();
};
class C : public A{
C();
virtual bool Save();
virtual bool Load();
};
625 :
624:04/11/23 18:21:29
ここで、基本クラスの保存の場合は
A*DimPoint[10];
//この10個のポインタには保存する前には何かのデータがあるはずです。
DimPoint[0]->Save();
DimPoint[1]->Save();
・
・
DimPoint[9]->Save();
とするだけですが、読み込みの場合、DimPoint[]がNULLであることが多いので、
DimPoint[0]=new B; //あるいはnew C
DimPoint[0]->Load();
などとしなければならず、これから読み込むデータ型によってnewする
クラスを切り替える必要があり、オブジェクト指向的ではありません。
もっとスマートな方法はないでしょうか?
これは、画面に図形を描画するときなど、図形データの保存はスマートなの
ですが、読み込みが汚くなります。
>624
それこそOOPで解決してる問題な希ガス
>>625 そこでFactoryMethodですよ。
AbstractFactoryだろ?
>>616 パッと見ただけだが、それはC99で書かねばならないのか?
631 :
デフォルトの名無しさん:04/11/23 19:25:37
>>540 この問題がスルーされてるんで、誰か挑戦してください。
FactoryMethodでいいんじゃない
>>631 半年前も見たぞ。腐れ産業大かどっかの宿題だった
634 :
616:04/11/23 19:27:58
どなたかお願いします
635 :
610:04/11/23 19:32:04
>>610 なんですけど、やっぱりDNAの螺旋にします。
サイン波(コサイン波)の数式って、文字で表すとどういう風になるのでしょうか?
636 :
デフォルトの名無しさん:04/11/23 19:32:29
>>633 申し訳ないですけど、答えを載せてもらえませんか?
そーいや、
>>540の例文ってアインシュタインがどっかのパーティーで無知なオバサンに
相対性理論は何かを説明してくれって頼まれた時の返事だっけな。
AbstractFactoryはFactoryMethodより一段階抽象化が深く、
>>625のような
単純な階層ではなくてもっと複合的な継承がなされている場合に有効。
但し組み合わせに制限があると設計が硬直化するので、FactoryMethodより
も柔軟性に欠けるし変更が面倒くさい。
>>616 配列って定数でしかサイズ指定できないだろ
どうやって動かしたんだ?
VC7だと通らない…
C99に対応してないコンパイラで通らなくてもおかしくありません
644 :
デフォルトの名無しさん:04/11/23 20:18:22
>>633 過去ログを調べてみたんですが、それらしきものは見当たらなかったんですが・・・・。
どなたかわかる方いましたらお願いします。
>>616 int show_flag = 0;
while (long_string2[m] != '\0')
{
if(long_string2[m] == key[n]) {
while(long_string2[m] == key[n]) {
m++;
n++;
}
if(key[n] == '\0') {
show_flag = 1;
printf( "%d文字目から%d文字目までに出現している。\n", m - n + 1, m );
}
} else {
m++;
n = 0;
}
}
if(show_flag ==0) printf( "含まれていない。\n" );
646 :
デフォルトの名無しさん:04/11/23 20:41:35
質問
char buf[80];
short num;
fgets(buf,sizeof(buf)-1,stdin);
num=(short)atoi(buf);
の fgets関数とatoi関数の使用法をおしえてください
manpage-fgets
manpage-atoi
でぐぐれ。以上
printfの下にm--;とn=0;を追加
int m = 0;
int n = 0;
int show_flag = 0;
while ( long_string2[ m ] != '\0'){
n = 0;
if ( long_string2[ m ] != key[ n ] )
++m;
else
{
do{
++m;
++n;
}while ( long_string2[ m ]!='\0' && key[ n ]!='\0' && long_string2[ m ]==key[ n ] );
if ( key[ n ] == '\0' ){
printf( "%d文字目から%d文字目までに出現している。", m - n + 1, m );
show_flag = 1;
}
}
}
if(show_flag)
printf( "含まれていない。\n" );
あんまし違わないね...
>あんまし違わないね...
っつーか微妙にまちがっとる
>if(show_flag)
> printf( "含まれていない。\n" );
言語C 環境CUI
課題でテキストエディタを作ることになりましたが、どういう風に書いたらいいか悩んでます。
プログラムの動作例は以下のように考えています。
・キーボードから文章を入力する。
・「99」を押したら入力終了。
・その後、出力ファイル名を指定して.txt形式に出力する。
とりあえず入力する文字は100文字程度で、考えています。
どなたか、よろしくお願いしますm(_ _)m。
655 :
デフォルトの名無しさん:04/11/23 23:30:28
>>654 コンパイル時のエラーは出なかったんですけど、実行されませんでした。
どうやれば実行結果が得られるのか、詳しく教えていただきたいです。
お願いします。
657 :
デフォルトの名無しさん:04/11/23 23:45:57
>>655 ヤフーで検索してみましたけど、いまいちよくわかりませんでした。
658 :
616:04/11/24 00:39:14
659 :
610:04/11/24 00:40:09
最近は円周率が2.14になっているのか…
661 :
デフォルトの名無しさん:04/11/24 00:51:38
すいません、手に負えないのでお願いします。
@ ラプラス方程式を解くプログラムを作れ。
A @を用いて長方形領域 0≦x≦2、0≦y≦1の上でラプラス方程式を解け、
ただし境界条件(周上の関数値)はデータとして読み込むものとする。
B 適当なxおよびyの値の組{(x1,y1),(x2,y2),...,(xm,ym)}(例えば,y=ax^3+bx^2+cx+d+ノイズ)
に対してべき多項式モデルf=Xcを当てはめた結果をグラフ表示せよ。なお、べき次数n
およびデータ点数mを様々に変化させよ。
すいません、手に負えないのでお願いします。
@ ラプラス方程式を解くプログラムを作れ。
A @を用いて長方形領域 0≦x≦2、0≦y≦1の上でラプラス方程式を解け、
ただし境界条件(周上の関数値)はデータとして読み込むものとする。
B 適当なxおよびyの値の組{(x1,y1),(x2,y2),...,(xm,ym)}(例えば,y=ax^3+bx^2+cx+d+ノイズ)
に対してべき多項式モデルf=Xcを当てはめた結果をグラフ表示せよ。なお、べき次数n
およびデータ点数mを様々に変化させよ。
手に負える人だけ解答して下さい。
>>662はすっこんでろ!!!!
664 :
610:04/11/24 01:00:30
>>660 そこは図形の形を変えるためにいじったところです
>663
俺じゃないが他にも同じ宿題で悩んでる人がいるのか。
Cの宿題です。
循環リスト(末尾ノードに先頭ノードを指すポインタを与えたもの)で、
a〜hのどのアルファベットからスタートしても、アルファベット順で1周するような順序
を実現してください。(例:cからなら、c,d,e,f,g,h,a,bの順)
667 :
デフォルトの名無しさん:04/11/24 01:54:01
C++の宿題なんですがよろしくお願いします。
問題1. 実数のキューおよびスタックのクラスを、配列および連結リストで作成せよ。
(整数でなく実数。それぞれを作成するので4つ)
問題2. 実数のスタックを用いて逆ポーランド式計算機を作れ。余裕があれば単語分割するクラス
(TokenReader)を改良してキューを利用した形にしてみよ。
よろしくお願いしますm(_ _)m
668 :
デフォルトの名無しさん:04/11/24 02:22:42
採点側もここらへんのスレはチェックしてるから
丸写しはしないようにね
丸写し見つけたら本当に理解しているか
それとなく試してみて
理解してなければできてないものとして減点するから
プログラミング演習を採点してるTAより
669 :
デフォルトの名無しさん:04/11/24 02:29:30
Cです。
次に示される関数を利用して、f2(2)を求めなさい。
f2(x) int x; {return(2*x*x+3*x-4);}
求めるも何もf2(2)で求まるわけだが。
671 :
デフォルトの名無しさん:04/11/24 02:38:47
>>669 指導者は高齢か?
f2(x) int x; なんて書き方古いぞ
672 :
デフォルトの名無しさん:04/11/24 02:42:23
>>670 関数の使い方忘れたみたいで何度やってもエラー出るんです。
>>671 確か93年くらいの問題集からの問題だった気がします。
スマートな書き方でお願いします。
There are tons of web pages, google it for yourself, you lamer.
lamer->moronだと煽り率20%UP!!
>>672 #include <stdio.h>
int f2(int x)
{
return( 2*x*x + 3*x - 4 );
}
int main()
{
printf("%d", f2(2));
return 0;
}
>>675 ありがとう。これで残りの問題も解けそう。
678 :
デフォルトの名無しさん:04/11/24 05:27:01
質問です。
『二つの円O1,O2それぞれの半径をr1,r2(可変)とする。r1-r2の領域
を黒く塗りつぶすプログラムを作りなさい。ただし、全体領域を100行
100列であるものとする。』
という内容ですが、C言語で教えていただけないでしょうか。どうか
お願いします。
>>678 腹ごなしに書いてみた。全体領域の定義がよくわからないからそこれへんは適当に直してくれ。
#include <stdio.h>
#include <stdlib.h>
#define SCREEN_W 100
#define SCREEN_H 100
int check_black( double x, double y, double r1, double r2)
{
const double f = x * x + y * y;
return (r1 >= r2) ? ((r1 * r1) >= f) && (f >= (r2 * r2))
: ((r2 * r2) >= f) && (f >= (r1 * r1));
}
680 :
デフォルトの名無しさん:04/11/24 07:08:43
*記号を使ってDOS窓に斜めに線を描きたいのですが、まったくわかりません。
続き。
int main( void)
{
const double r1 = 20, r2 = 40; /* 半径はこちら */
const int xhalf = SCREEN_W / 2, yhalf = SCREEN_H / 2;
int x, y;
if( (r1 < 0) || (r2 < 0) || (SCREEN_W < 0) || (SCREEN_H < 0) ) {
printf( "error: parameters (r1,r2,SCREEN_W,SCREEN_H) must be positive.\n");
exit( EXIT_FAILURE);
}
for( y = yhalf; y >= -yhalf; --y ) {
for( x = xhalf; x >= -xhalf; --x ) {
printf( "%c ", check_black( (double)x, (double)y, r1, r2) ? '*' : '-');
}
printf( "\n");
}
return EXIT_SUCCESS;
}
>>680 #include <stdio.h>
int main(void)
{
int i, j;
for(i = 0; i < 20; i++) {
for(j = 0; j < i; j++) printf(" ");
printf("*\n");
}
return 0;
}
683 :
678:04/11/24 07:45:04
>>679 考えてくれてありがとうございます。
return (r1 >= r2) ? ((r1 * r1) >= f) && (f >= (r2 * r2))
: ((r2 * r2) >= f) && (f >= (r1 * r1));
この行でエラーが大量に出るのですが、?がまずいのでしょうか?
>>685 > 「99」を押したら入力終了。
の意味が分からない
9 を2回押したらすぐに終了?
99でその行が終わっていて改行したら終了?
>>687 error C2061: 構文エラー : シンタックスエラーを起こしました。
>>683の脳では理解できません。
だろw
ワロタ
>>686 下手な説明で申し訳ございません。
文章を入力し終わり、Enterキーを押し改行してから
9を2回押し、Enterキーを押してから終了ということです。
691 :
デフォルトの名無しさん:04/11/24 09:33:09
類の要員函數を静的にせずに呼び返し函數の引数として
与えるにはどうしたらいいの?
ふざけた質問分だな
メンバ関数のポインタ、とかで調べろ
693 :
691:04/11/24 09:41:58
>>692 「要員函數の指示子」でググったところ
何もヒットしませんでした
何が悪いんでしょう?
お前の頭
>>686 入力サイズは決め打ちです
#include <stdio.h>
#include <string.h>
#define M 1000
#define N 256
#define FILE_NAME_SIZE 256
int main(void)
{
char buf[M][N], file[FILE_NAME_SIZE];
FILE* fp;
int i, j;
for (i = 0; i < M; i++) {
fgets(buf[i], N, stdin);
if (strcmp("99\n", buf[i]) == 0) { break; }
}
fgets(file, FILE_NAME_SIZE, stdin);
file[strlen(file) - 1] = '\0';
fp = fopen(file, "w");
for (j = 0; j < i; j++) { fprintf(fp, "%s", buf[j]); }
fclose(fp);
return 0;
}
698 :
678:04/11/24 10:11:26
>>687 C:\Program Files\Microsoft Visual Studio\MyProjects\en\en.cpp(15) : error C2018: 文字 '0x81' は認識できません。
C:\Program Files\Microsoft Visual Studio\MyProjects\en\en.cpp(15) : error C2018: 文字 '0x40' は認識できません。
このエラーが数行にまたがって大量に出るのですがどのようにしたら
いいでしょうか?
認識できない文字を消せばいい
つ−か、マルチバイトの空白を消せ
701 :
678:04/11/24 11:02:16
>>699-700 すいません、情けないエラーでした。。
一つだけお聞きしたいのですが、
(r1 >= r2) ? ((r1 * r1) >= f) && (f >= (r2 * r2))
: ((r2 * r2) >= f) && (f >= (r1 * r1));
の部分だけ説明願えませんか?
よくわかってないのが単純にコピペしないように
かつレスを見やすくするために
2バイト空白まぜるのは常
それは、以前はtab文字が使えなかったから
>>701 円の方程式x^2+y^2=r^2を使って円O1,O2の範囲内かどうか調べてるだけ。
f=x^2+y^2 とおいて r^2 以上なら円の外部分 以下なら内部分ってことで。
705 :
678:04/11/24 12:13:47
>>701 了解しました。どうもありがとうございました。
706 :
todokuro :04/11/24 13:19:58
i need some cool c programs for my presentation tomorrow.
if any one can help me, please give me some idea or program
that i can get good grade.
i can read japanese but cant write.
onegaishimasu
>>706 その発表で求められてるレベルが分からないので何とも言えない。
>>706 int strlen(const char* s)
{
int i=0;
while(s[i])i++;
return i;
}
>>706 int main()
{
printf("Hello World!\n");
}
This is a super program.
710 :
todokuro:04/11/24 13:35:50
ha
hi
>>706 int strcmp(char*l,char*r){return*l==*r?(*l?0:strcmp(++l,++r)):(*l>*r)*2-1;}
>>706 正方向で符号化するハフマンなんかいいと思う
714 :
todokuro:04/11/24 14:00:17
thank you people. i'll try my best.
i just quit this shit and will go outside to buy ganja.
bye-bye thank you all!
715 :
todokuro:04/11/24 14:09:13
oh i got last question. Is it able to make same
intresting game program by c?
Last time i saw the matrix movie program that was typed by c
>>713さま
そのようにしてみようとおもいます。
ありがとうございました。
>>666 これが聞きたいんかいな
{
struct list
{
struct list *next;
char data[1024 * 1024 * 1024];
};
struct list *head;
struct list **chain;
int index;
chain = &head;
for (index = 0; index < 1024; index++)
{
*chain = (struct list *)malloc(sizeof(struct list));
if (*chain == NULL)
{
// error processing
exit(1024);
}
chain = &((*chain)->next);
}
*chain = head;
}
細かいとこは自分で書きなはれ。
718 :
パスカル:04/11/24 16:16:13
スレ違いなんすけど、誰かこの問題できますか??
ちなみにパスカル言語っす。
This program will require the student to build a singly-linked list.
The definitions to be used are:
TYPE
LISTPTR = ^LIST;
LIST = RECORD
KEY:CHAR;
LINK:LISTPTR
END;
719 :
パスカル:04/11/24 16:16:48
The records to be linked will be placed into ascending order based
on the KEY field and duplicates are not allowed. If the insertion
of a duplicate is attempted, a message should be output to the
printer indicating the value of the KEY that was provided and the
fact that it was a duplicate and insertion was disallowed. After
the entire list has been built, it shoud be output ot the pirnter.
The program will be executed three times; the following data will
be used;
QWERTYUIOPASDFGHJKLZXCVBNM
PLANYOURWORKANDWORKYOURPLAN
720 :
デフォルトの名無しさん:04/11/24 16:19:53
>>540 この問題なんですけど、構造体を使わずに、ポインタと配列で作っていただけませんか?
どなたか挑戦お願いします。
二日間何やってたんだよ
今時Pascalなんかやらせる学校は辞めていいよ
727 :
667:04/11/24 20:16:55
728 :
デフォルトの名無しさん:04/11/24 20:27:50
fgets()というか EOFがらみの質問ですが、
if( fgets(buf,MAXLEN,stdin) ) {
printf("==%s==\n",buf);
}
これを実行し、キーボードから abc<RET> と入力すると(<RET>は改行)
==abc
==
と出力されます。これは理解出来る。次に abc<CTRL-D><CTRL-D> と入力すると
==abc==
と出力されます。なぜ <CTRL-D>が2個必要なのか、という質問なのですが。
ちなみに、abc<CTRL-D>de<RET> と入力すると
==abcde
==
と出力されます。
文字列を何も入力せずいきなり <CTRL-D>をたたくとなにも出力されません
( if( fgets() ) が false になる)。この場合は <CTRL-D> 1個で済みます。
(Linux での話です。DOS だと <CTRL-Z> が2回必要なのでしょうか。確認していません)
>>728 Ctrl+Dが行頭でしか有効じゃないからじゃねぇの?
730 :
728:04/11/24 21:39:04
>Ctrl+Dが行頭でしか有効じゃないからじゃねぇの?
行頭かどうかが重要、というのはご指摘の通りのようです。
行頭以外の CTRL-D がどう扱われているのか、なんか複雑なのですが、
動作から推測するに
(1)行頭の CTRL-D は EOF と解釈される
(2)いったん文字入力を始めると"行の途中" という状態になる。
(3)行の途中 状態を終了するのは RETだけ
(CTRL-M とか CTRL-J とか。stty の状態によるでしょうが)。
(4)行の途中の CTRL-D は無視される。ただし直後に CTRL-D が続くと EOF になる。
こういうこと??
CTRL-D 1個で常に EOF にしたいとすれば、fgets() はだめで fgetc() を使うしかない?
>なぜ <CTRL-D>が2個必要なのか
1個で大丈夫では?
char *fgets(char *s, int size, FILE *stream);
fgets() は成功すると s を返し、ファイルの終り(あるいはエラー)の場合 NULL を返す。
何文字かに続けてCTRL-Dなら、NULLにならないのは当然だろ?
Ctrl-D の扱いは端末のお話になってくるので UNIX の本とか読んでみたり.
feof使ってもダメ?
ごめん、見なかったことにして
735 :
デフォルトの名無しさん:04/11/25 00:39:29
#include<iostream>
using namespace std;
class vector{
private:
double x;
double y;
public:
vector(){x=0.0;y=0.0;}
vector(double a,double b){x=a;y=b;}
vector add(vector p,vector q);
void print(void);
double getx(void){return x;}
double gety(void){return y;}
};
void vector::print(void){
cout<<"(x,y)=("<<x<<","<<y<<")"<<endl;
}
vector vector::add(vector p,vector q){
vector temp(0,0);
temp.x=(p.x)+(q.x);
temp.y=(p.y)+(q.y);
return temp;
}
ヘッダファイルをこう書いて・・・
737 :
728:04/11/25 00:41:25
>何文字かに続けてCTRL-Dなら、NULLにならないのは当然だろ?
はい。man fgets によれば、fgets() が NULL を返すのは、エラーか、
一文字も読まずにEOFになった場合。文字を読んだ後 EOF になっても NULL を
返さないのはマニュアルどおりです。質問は、EOF にするのになぜ Ctrl-D が
2回要るか、ということでした。
>Ctrl-D の扱いは端末のお話になってくるので UNIX の本とか読んでみたり.
本を読んだわけではありませんが、ネットで少し調べると、どうも端末のバッファリングが
関係しているようでした。
abc と入力したあと、ctrl-D や RET を押す前なら、backspace で修正等が出来る。
ctrl-D を押すと、現在のバッファの内容が送られ、バッファは空になる。
バッファが空の時に ctrl-D を押すと、EOF になる。
バッファが空なのは、行頭か、ctrl-D を押した直後。
どうもこういうことらしいです。(私の理解が正しければ)
#include<iostream>
#include"basic2.h"
int main()
{
vector p=vector(1.0,0.0);
vector q=vector(0.0,1.0);
p.print();
q.print();
cout<<add(p,q)<<endl;
return 0;
}
.cppファイルをこう記述して、コンパイルしたのですが、
「.cpp 11: 未定義の関数 'add' を呼び出した」
と、出ます。いったい何がだめなのでしょうか?
739 :
デフォルトの名無しさん:04/11/25 00:43:33
Cと直接の関係がないのですが・・・
いま、Cで数値計算のプログラムを作り、WinXpのコマンドプロンプトから実行しています。
ところが繰り返し回数を大きく設定しすぎてしまったため、
今表示されている結果を保持したままプログラムを終了したいのですが
強制終了の方法を教えてもらえませんでしょうか・・・
>今表示されている結果を保持
キャプチャ&タスク終了
>>736 なんかめちゃくちゃだな…
それをやりたいなら
vector add(vector p, vector q)をフレンド関数にするか、
staticにしてvector::addで呼び出す
>>739 CTRL+Cすればプロンプトに戻るかもしれない。
戻らないで消えるかもしれない。
742 :
デフォルトの名無しさん:04/11/25 00:50:37
すんません。三行三列と三行二列の行列の積を求める書き方教えてください。
めんどくさかったら軽いヒントでもいいんで
ちなみに初期数値は与えられてます。forを使うみたいですがいまいち・・・
違うスレに間違って書いてしまったんで、ここに書き直します。マルチになってしまって申し訳ないです。
どうかお願いします。
743 :
デフォルトの名無しさん:04/11/25 00:55:38
>740それが面倒だったので・・・
>741ありがとうです、無事停止しました!助かりました
ありがとうございます、friend関数を使って、なんとかできました。
あと、他にも、pとqの加算の方法ってありますか(friend関数を使わずに)?
もうしわけありませんが、staticに関しては、当方まったくわかりません・・・
745 :
742:04/11/25 01:01:48
#include<stdio.h>
int main(void)
{
int A[3][3]={{2,5,10},{4,7,8},{8,2,3}};
int B[3][2]={{10,25},{20,15},{5,10}};
int C[3][2];
int i,j,k;
for(i = 0; i<3; i++){
for(j = 0; j<2; j++){
C[i][j] = 0;
for(k = 0; k<3; k++){
C[i][j] = C[i][j] + A[i][k] * B[k][j];
}
}
}
printf("%d\n",C[i][j]);
return 0;
}
>>737 canonical 入力のときは
EOF をタイプすると読み取りを待たされてるバイトをすぐに入力に渡す.
読み取りを待たされていないバイトが無いときは0を渡す.
だと思ったけど UNIX 系の人に聞いた方がいいよ
747 :
742:04/11/25 01:06:18
上のやつのどこを変えたらいいんでしょうか?
ここの人からすれば初歩だろうに、情けない
748 :
742:04/11/25 01:27:10
もう一時間半近くやってるんで誰か救いの手を差し伸べてください
>>736 EffectiveC++を一読することをお勧めしておく。
つーか、complexの実装でも見てみたら?
>>742 どう巧くいかないのか書いたらこちらも検討してみる気になるが。
>744
>あと、他にも、pとqの加算の方法ってありますか(friend関数を使わずに)?
あたりまえですが、メンバ関数 add を定義して
p.add(q)
で p と q の和がえられるようにはできますよね。でも friend を使う方が普通では。
もちろん、add などという関数名ではなく、operator + を使うわけですが。
そうすれば r = p + q; などとかけます。さらに凝れば p += q; なんかも可能にする
ことが出来ます。
ベクトルクラスは、たいがいの C++ の解説本に例があると思いますよ。
って書いてたら変なもん見つけた。
>printf("%d\n",C[i][j]);
このとき、i と j はいくつでしょう。そしてC[i][j]は合法でしょうか。
/ a b \ / e \ / ae + bg \
\ c d / \ g / = \ ce + dg /
[質問]3行3列×3行2列って?
/ a b c \ / j k \ / \
| d e f | | l m | = | |
\ g h i / \ n o / \ /
753 :
742:04/11/25 01:43:13
>>749 まず計算結果が単なる整数で出てくる。
しかもどういう計算が行われた出たのかわからん数値が。
行列の形で表示できない。
forのところでも聞きたいのですが、うまくわからないとこを説明できないです。
模範解答があって初めて自分の間違いに気づきそうな気がします。
755 :
742:04/11/25 01:48:37
>>752 aj+bl+cn ak+bm+co
dj+el+fn dk+em+fo
gj+hl+in gk+hm+io
>>755 一件落着オメ。
さあ次いきましょ、次。
>>755 めんどくせぇから
C[0][0] = A[0][0] * B[0][0]+A[0][1]B[1][0]+A[0][2] * B[2][0];
C[0][1] = A[0][0] * B[0][1]+A[0][1]B[1][1]+A[0][2] * B[2][1];
C[1][0] = A[1][0] * B[0][0]+A[1][1]B[1][0]+A[1][2] * B[2][0];
C[1][1] = A[1][0] * B[0][1]+A[1][1]B[1][1]+A[1][2] * B[2][1];
C[2][0] = A[2][0] * B[0][0]+A[2][1]B[1][0]+A[2][2] * B[2][0];
C[2][1] = A[2][0] * B[0][1]+A[2][1]B[1][1]+A[2][2] * B[2][1];
とでもして、
printf("%d %d\n%d %d\n%d %d\n", C[0][0], C[0][1], C[1][1], C[2][0], C[2][1]);
とでもしておけ。
面倒なループなんて考えずに済むぞ。
いけね、sedで変換してたら真ん中の掛け算を'*'にするの忘れてたw
for(i = 0; i<3; i++){
for(j = 0; j<2; j++){
C[i][j] = 0;
for(k = 0; k<3; k++){
C[i][j] = C[i][j] + A[i][k] * B[k][j];
}
printf("%d\n",C[i][j]);
}
}
ってことなのでは?
760 :
742:04/11/25 02:01:10
いやこんな高校生でも知ってる計算式はいいんですよ。
forを使って繰り返し計算させるにはどうしたらいいのかを知りたいんです。
もし仮に100行200列とかなってもforで組めるなら時間かからないでしょ?
三行三列とかだから手打ちで各要素を計算してもいいけど要素が増えたらできないじゃないですか!
その組み方で間違いと思われる箇所を指摘して欲しいんです。
私の聞き方悪いですか?
761 :
742:04/11/25 02:03:29
さっきのは756さんにです。
759さん参考に頑張ってみます
>751をスルーしておいて随分偉そうだな。
763 :
デフォルトの名無しさん:04/11/25 02:08:22
hoge(double a, double b);
のbをfor(0<b<1000)のようにしたいのですが、どうすればいいのですか?
いや、>754もか。そんなことだから>757にからかわれるんだ。
刻み幅は?
while (1) {
if (b <= 0.0 || b >= 1000.0) break;
hoge(a, b);
/* 必要なら、ここでbの値に何らかの操作を加える */
}
みたいな?
767 :
742:04/11/25 02:16:33
>>751 iとjはforによって変動する値すべてに当てはまるんじゃないんですか?
C++の授業まだ4回しか受けてないんで、自信ないです
あー、開き盲になってるのかな。>745に貼ったソースをよく見てみろ。
>751の指摘した行はループの外にあるのが見えてこないか?
769 :
763:04/11/25 02:31:33
>>刻み幅は?
bの刻み幅は10です。
770 :
742:04/11/25 02:31:50
>>768 printfの位置が{}の外に出てるということですか?
たぶんそう言いたいのだと思うけど、何でこの位置だとダメかはわからんです。
あと759さんのおかげで正しい値は出ました。しかし
170 225
220 285
135 260
というように行列式っぽく出力するにはどうしたらいいんでしょうか?
エスケープ記号?とかいうのは\nしかわからないのですが、この際に使える書き方あればお願いします
>768
for(b=0; b<=1000; b=b+10)
hoge(a, b);
間違えた 769 アテネ
for(i = 0; i<3; i++){
for(j = 0; j<2; j++){
C[i][j] = 0;
for(k = 0; k<3; k++){
C[i][j] = C[i][j] + A[i][k] * B[k][j];
}
printf("%d ",C[i][j]);
}
printf("\n");
}
>>770 >何でこの位置だとダメかはわからんです。
これがわからないで単位をとろうというのは、なんぼなんでも無理。
素直に留年したら?
for文が分からなくてもgoto使えばループは書けるけど(以下省略します
776 :
742:04/11/25 02:49:56
>>773 C[i][j] = C[i][j] + A[i][k] * B[k][j];
}
printf("%d\f",C[i][j]);
}
printf("\n");
}
ってしたら
170 225
220 285
135 260
ってできました。
ありがとう
他の人もありがとでした。
\f って何だ?
778 :
デフォルトの名無しさん:04/11/25 02:52:24
すいませんがどうか
>>727の問題を解いてください。
よろしくお願いしますm(_ _)m
質問者は口の聞き方がひでーな
782 :
デフォルトの名無しさん:04/11/25 13:26:32
線形探索と二分探索のプログラムを作っていますがわかりません。
ここまで自力で作りましたが合っているかわかりません。
よろしくお願いします。
/*tansaku.c*/
#include <stdio.h>
#define ARRAYI1_MAX sizeof(array1)
#define ARRAYI2_MAX sizeof(array2)
int binary_search(int*,int,int);
int liner_search(int*,int,int);
void main(void)
{
int array1[]={2,3,5,8,12,20,32,52};
int araay2[]={22,34,65,66,12,33,43,5,1};
int result,key;
printf("探す文字を入力して下さい。\n");
sacnf("%d",&key);
result=liner_search(array1,ARRAI1_MAX,key);
if(result<0)
{printf("見つかりませんでした\n");}
else
{printf("%d番目に見つかりました\n",result);}
}
783 :
782続き:04/11/25 13:27:08
//線形探索
int liner_search(int*array,int num_array,int key)
{
}
//二分探索
int binary_search(int*array,int num_array,int key)
{
}
>>782-783 そこまで書けるならなんで線形探索が書けないんだ?
二分探索はともかく。
786 :
782:04/11/25 15:41:37
>>784 ここまでは分かるですけど・・・
//線形探索
int liner_search(int*array,int num_array,int key)
{
int i=0;
for(i=0;i<result;i++)
}
787 :
782:04/11/25 15:53:41
頼んでいる身分で言いにくいですけど、二分探索については解説も書いてもらえたら嬉しいです。
>>785 このスレに(・∀・)イイ!!人など一人もいませんよ。
本来、宿題の丸投げに答えること自体悪いこととされてるんだからね。
(・∀・)イイ!!も悪いもどうでもいいんですよ。
別に、みんな助けてあげようとかそういう気持ちでやってるわけじゃないんだから。
ただ自分が作りたいから作ってるんだからね。そりゃ言葉使い悪いやつに答えたく
ないやつもいるだろうが、答える奴を非難するのは的外れですね。
そんなにコード書きたかったらもっとやりがいのある物作ればいいのに・・・
お前は何を求めてこんなスレ覗いてるんだw
>>792 NumberPlace自動解答。簡単だYo!
答えたきゃ答えれば(・∀・)イイ!!
答えなくなければ答えなきゃ(・∀・)イイ!!
自分本位な理想主義者(・A・)イクナイ!!
>>792 f2cをVCで使えるようにしてくれ。
3次元の立体があって、表面が三角形の集合であらわされてる。
ファイルに全ての三角形の頂点座標と法線ベクトルが与えられてる。
法線の方向は、三角形の頂点を半時計周りに与えて求めてる。
この3次元の立体を、四面体or六面体or三角形の集合で表してくれ。
(要するに表面のみのメッシュを、内部までメッシュ化してくれ)
よろしくお願いします。
フリーで公開すれば、ある程度の需要は見込めるかもよ。
なんだ、この恩着せがましい阿呆は
>>792 DirectShowにて、音の高さを変えないで再生速度を
変えるフィルタを作ってください☆彡
>>791 質問者に回答する人を減らすため。
こんな低レベルな宿題を他人に丸投げなんてふざけすぎ。
(・∀・)イイ!!
てめーうるせーんだよ。お前、前スレの常識人だろ?
そんなもんはっきりいって一目瞭然。隠そうとしても無駄なんだよ。
お前の考え方を押し付けるのは止めろや。
俺は常識とかそういうの嫌いだからさ。
お前みたいな常識のない常識人は見てると腹が立つんだけど?
今後(・∀・)イイ!!とかほざきやがったら、まじでぼこすぞ?
>>798 無駄
基本的に、答えてる人は困ってる人を助けようと思ってやってるのではなく
ボケ防止、自己満足、好奇心などでやってるからむしろ解答者が餌をもらってる感じ
(・∀・)イイ!!
>>800 宿題を他人にやらせるのは良くない。ボケ防止を求めるなら、算数ドリルでもやっておけ。
自己満足?ずいぶんレベルの低い事で満足出来るんだなおい。
好奇心?ずいぶんレベルの低い物に好奇心持てるんだなおい。
ここに出てきてる宿題なんぞC/C++の文法を理解するための宿題だろ?
こんなもんで自己満足できたり、こんなもんに好奇心もてる奴は文法の本でも買うか、そういう初心者サイトでも見てろ。
どうした、自分の宿題がスルーされてトサカにきてんのか?
>>799 (・∀・)イイ!!は考え方の押し付けではなく、むしろ解放をしているのだと思うが。
>>789=(・∀・)イイ!!としての話だが。
それをわかっていないお前は相当なドキュソだと言える。
それに常識が嫌いと言ったり常識のない常識人が嫌いと言ったり
どうも、話に一貫性がないな。頼むからもう荒らすのは止めような。
>>785=
>>790=
>>795?=
>>792?=
>>799=
>>800 かな?
なぜ宿題をやるのかって?そこに宿題があるからさ。
ただの暇つぶし。
>>803 なんでそう妄想するかね。
俺はここ300レスぐらい何も書いてなかったよ。
>>802 俺の宿題?
>>795の事?
あれはやりがいのある事やりたいって有志がいたから出した宿題だ。
そんなパッパッと終わるような簡単な宿題はやりがいがあるとは言わないだろ。
恐らく
>>792さんは今プログラムの設計中かコーディング中だ。
>>803 全然外れてるぞ。
>>790=
>>795=
>>801=俺
>>804 そうか。
常識外れの事をしてる奴等を邪魔して、
邪魔した奴はそれを理解出来なくて視野が狭い奴。
視野うんぬんを語る前にオマエは常識外れだ。
ボケ防止訓練の前にまず小学校の授業を受けさせてもらえ。
と、自称常識人が申しております
(・∀・)イイ!!さんよお?
ここまでスレが荒れたのはお前の責任だぞ?
どう落とし前つけてくれるんだプゲラ
達観したような顔しやがって、気にいらねえな。
結局これがお前の残した結果なんだよ。お前のやり方じゃ、
スレの治安は悪くなる一方なんだよ糞顔が!!!藁藁藁
過去やった宿題の回答の間違いに気づいた。
・・ま、過去は振り返らないことにしよう。
ネタはマ板でやってくれんかね。
つ[宿題]
一応根拠を言っとくと
まず、常識人はある程度もっともらしいことを、突然述べ始める。
で、最近いなくなったと思ったら、今度は(・∀・)イイ!!という名前で書きこむやつが最近出てきて
今回近い時間帯に
>>789=
>>794と二つの書きこみがあったので、まずこれを確信。
さらに、常識人は書いたあとに、必ず自分のレスにケチをつけたりするよくわからない自演をするのが
定番だった。俺のような論理的思考ができるやつにとっては、正直自明だった。
(・∀・)
また宿題切れて
スレが禁断症状におちいってるな・・・
>>818 ネタふりした785とか801、811はどうなんだ?
823 :
デフォルトの名無しさん:04/11/25 17:26:58
#include <windows.h>がエラーになります。
コンパイラはgccなのですが、どうすればよろしいでしょうか??
-mwindows
宿題がないと左手がティムポを握ってしまいます。
どうにかしてください。
>>822 それはきっと全部おまいでしょう。
そのレス番はおまい本人だから、当然おまいは正解を初めから知っている。
その上で漏れを試して、漏れがまちがえたときに、それを打ち明けて
漏れをはめようとしている。
そうはいかない。漏れをあんまなめんじゃねーぜ?
俺の予想だと
>>818=(・∀・)イイ!!なんだが。
ネタ振り:ネタを提示する
830 :
デフォルトの名無しさん:04/11/25 17:47:34
>>540 上記の問題なんですけど、学校で構造体を習っていないので使用してはいけないみたいなんです。
ポインタと配列を使って、どうにかして解いてもらえないでしょうか?
ほんとわからなくて困ってます。ここの掲示板だけが救いなので、お願いします。
831 :
823:04/11/25 17:48:09
>824 #include <windows.h>を#include <mwindows.h>または、#include <-mwindows.h>
に変更しても、no such file or directory になってしまいます。
834 :
823:04/11/25 18:09:12
>832 初心者で本当にスイマセンが、
MinGWとは何でしょうか?サイトに行ったのですがわかりません。
俺のせいで荒れてる…orz
ネタフリしてごめんなさい。
>>834 ここに来る以前の問題だから教授/講師にでも聞いてくれ
>>835 何言ってる!!荒らしてたのはおまいだろ(・∀・)ニヤニヤ
いまさら何を言っても自作自演と思われるだろうな…
荒れて悪かったと思うなら、一言謝ってもう出てくるな。それが最善。
名無しで出てこれば出てきてもわからない罠
それが名無しのいいとこさ。コテならいつまでも過去の行動に粘着されるからな。
宿題といてくれれば電波だろうが、犯罪者だろうが
誰だっていいです。プンプン
間違うような素人でも良いんだろうか
間違っていても本人がわからずに適当にやって提出するよりはマシ、ということで
間違っていたところで文句を言われる筋合いは無い。
漏れはコードに常にウイルスをしこんでいまつ。
つか、玄人w の843が答えるなり指摘するなりすりゃいい
>>846 AならばBが成り立つとしたらAでないならばBでもない が成り立つ人?
ロジックがおかしいです。どうしましょう…
>>847 それでも9課の雑用ロボには使ってもらえるよ
次スレ
C老人がボケ防止にC/C++の宿題を解決します 35代目
A ∩ B が成り立つとしたら
Aでない ∪ Bでもない が成り立たないんです
852 :
デフォルトの名無しさん:04/11/25 22:58:05
There you go. You are always so right. It is all a big show. It is all about you.
↑の文章を打つと、↓のような実行結果が出てくるプログラムを作りなさい。
There[1]You[1]go[1]
you[2]are[1] always[1]
so[1]right[1]It[2]
is[2]all[2]a[1]
big[1]show[1]about[1]
難しいことはよくわからないので、ポインタを使っておねがいします。
,,;:-‐''"⌒ ̄";;;;;;;⌒ ̄"ヾ、
='-‐''"/,::´ /::::::::::::::::ヽ :::`ヾ
ァ'´.,:´/.::::::/i:: :::::. :; :::丶 ::::::ヾ、
/ / ::/.: { l ヽ_,,,_`、 .:`、ヽ:::::::ヽ`
{::/ァ' .i..:/i.::{::{.ヾ~::i:ヾ丶::::::.::::i:::::::::}
、_ノ'.{ .::::{-{‐{:;iヾ{ '"T ヾ il.|'.:::.::}::::::::ト、
l.:il :lヽi'"ヽ`、ヽ .l,'゚i!'〉リi}::i:::::l:::ノ::ハヽ、_
麻衣子は {:| i .} } {'゚}. ┴-' i}:ノl::::}::i:::::. l`ー"
お風呂入るから {、.ヾ-i ー´、 〃 ノ:::ノ::ノ::}:: ::. }
ちょっと待っててね ノト " っ 、_,;-':.:'/:::::::l: : l
{:l:::`i::..、 ._.,.;:イシ:::/::ノ l、
iんV´iノノ` ツi iリノツ-‐''" :: : ヽ 、
_,-.r‐i {,-ト .i_,,ノ-‐-―/ : : :::ノ :::::. } `、
( l ./ /~ / .ノ/:::::/: ::::::: : :l
(.._,,iツvV .,' ,'::{:::;::::: :::::::: :::i
`ー7/::::{. '"~/ {;;;li/::::l:::::: :::::::::::::{
{:l(ァ' ,, ' l::;;|l/:::{i::::: : ::: :::: ::::l
リァ' ., ´ /メ{ {l:::/ {:::l:. : : ::::|
/, ´ ノ // l {iメ {:::|i:: : :::l
/./ /::'/:/ {:i:|イ{ i::l:: i ::}
i' ´ /::::::/::/ l .:|::::|:l:::l : l : ::l
{ , イ´ /::;/ .ィ´:| }::::l:i::::i:i:. .| : :. ::l
i、__,, ィ i::::l /:,:::l //l::::l .}::::li:::::l l::::} i: i :::l
>>852 You[1]
you[2]
これは大文字小文字は区別してそれぞれ数えるってことでいいよね?
「.」はどうなるの?
>>852 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* from = "There you go. You are always so right. It is all a big show. It is all about you.\n";
char* to = "There[1]You[1]go[1]\nyou[2]are[1] always[1]\nso[1]right[1]It[2]\nis[2]all[2]a[1]\nbig[1]show[1]about[1]";
int main(void) {
char* buf;
buf = malloc(4096);
printf("文章を入力してください。");
fgets(buf, 4095, stdin);
if (strcmp(buf, from)) {
printf("出力: %s\n", to);
} else {
printf("出力:\n");
}
return 0;
}
動作確認はしてない。
あー、メモリ開放忘れてた。
- }
- return 0;
+ }
+ free(buf);
+ return 0;
間違い発見
- if (strcmp(buf, from)) {
+ if (!strcmp(buf, from)) {
858 :
デフォルトの名無しさん:04/11/25 23:12:33
char* to = "There[1]You[1]go[1]\nyou[2]are[1] always[1]\nso[1]right[1]It[2]\nis[2]all[2]a[1]\nbig[1]show[1]about[1]";
ここなんですけど、文章を打つだけで出てきた単語の回数が数えられるように改造してもらえんませんか?
859 :
デフォルトの名無しさん:04/11/25 23:15:41
>>854 別でお願いします。
「.」は飛ばして読み込むようにしてください。
double MIN = 0.0;
double MAX = 10.0;
double dt = 0.01;
euler(MIN, MAX, dt) //積分結果の最後の値を返す
0から10.0まで積分計算をし、積分結果の最後の値を返す関数eulerがあるのですが、
途中の計算過程も出力するようにするにはどうすればいいのですか?
>>861 int i;
double slice = MAX / 100;
for (i = 1; i < 100; i++);
euler(MIN, slice * i , dt);
euler(MIN, MAX, dt);
ipivot=gauss(*a,x,L,n,eps,isw);
a
>>852 []に加算されるルールがわからないから誰も作ってくれないと思うよ
866 :
デフォルトの名無しさん:04/11/26 00:16:52
>>865 同じ単語が2回出てきた場合は単語の後に[2]となり、一回しか出てこなかったら単語の後に[1]
が付くようにお願いしたいです。
>>865 単語を分割してリンクリストに格納、ソートして隣同士コンペアすりゃ楽に出来るだろ。
さっさとやれ。
各マイクロ操作後のAの値をそれぞれ求めよ。
(1)初期状態 A=1101,B=0110
(2)初期状態 A=0110,B=1101
(3)初期状態 A=0110,B=0110
よろしくお願いします。
浮動小数をASCII文字列に変換する関数
int dtoc(double, int, char*)
と言う関数を作ってください。
引数
double 変換する対象
int 出力する小数点以下の文字数
char* doubleをASCII文字列で、小数点以下の桁数はint指定
戻り値
int char*に格納された文字数
char*は'\0'終端で。
>>860 あと少しだ。おそらくその問題の意味は、
「init()で分割した単語を順にキューに格納し(enqueue()を使う)、
getToken()で順にその単語を出していく(peek()とdequeue()を使う)
ようにせよ」
と言うことであると思われる。まずすべきことは、実数のキューを
文字列のキューに書き換えること(これに際してデータは動的な
メモリの確保を行って文字列の長さに制限を加えない方がよいと
思われるが)、現在getToken()で逐次行っている処理をinit()で
すべて済ませてしまうことだ。
ガンガレ、終わればかなりの力になるぞ。
>>869 ASCII文字列とやらのフォーマットは?
そのメモリはどうやって確保する?(malloc?new?)
>>871 sprintf関数の代わりに使えればOKです。
>>865 ほれ。
int main()
{
system("awk '{for (i = 1; i <= NF; ++i) {print $i;}}'|sort|uniq -c|awk '{print $2\"[\"$1\"]\";}'");
return 0;
}
There you go.
You are always so right.
It is all a big show.
It is all about you.
↑の文章を打つと、↓のような実行結果が出てくるプログラムを作りなさい。
There[1]You[1]go[1]
you[2]are[1] always[1]
so[1]right[1]It[2]
is[2]all[2]a[1]
big[1]show[1]about[1]
You より you が後ろなのはなぜ?
俺も思ったけど深く考えない事に下
876 :
デフォルトの名無しさん:04/11/26 01:08:34
>>874>>875 順番的に、
There[1]→You[1]→go[1]→
you[2]→are[1]→always[1]→
so[1]→right[1]→It[2]→
is[2]all[2]a[1]→
big[1]show[1]about[1]
という感じです。わかりにくくてすいません。
つまり、出現順か。
だから、You より you が後ろなのはなぜかと聞いている。
youが先なら作れるが、Youが先だとすると作れない。
879 :
デフォルトの名無しさん:04/11/26 01:21:50
ほんとすいません。
There[1]→you[2]→go[1]→
You[1]→are[1]→always[1]→
so[1]→right[1]→It[2]→
is[2]all[2]a[1]→
big[1]show[1]about[1]
の順番でお願いします。
基準の一貫性へのこのこだわり、プログラマ軍団恐るべしと
言うところか。
881 :
デフォルトの名無しさん:04/11/26 01:58:36
C言語の配列で、ある条件にあう要素の個数を求めるにはどうすればいいですか?
例)x[]={3,5,6,4,1}のうち3より大きい要素は何個?みたいな。
883 :
デフォルトの名無しさん:04/11/26 02:01:32
もっと大きな数字とか別な条件とかになった場合のことで教えてください・・m(__)m
885 :
デフォルトの名無しさん:04/11/26 02:06:44
他どなたかいませんか〜??
コンピュータの中にエスパーでも飼わない限り、比較無しで篩い分けなんて無理だと分からないのかな
>>881 unsigned arrcnt(int n, int *arr, int (*pf)(int, int))
{
unsigned ret = 0;
int i;
for (i = 0; i < n; ++i)
if (pf(arr[i], 3)) ++ret;
return ret;
}
int isover3(int x)
{
return (x > 3)? 1: 0;
}
int main()
{
:
cnt = arrcnt(5, x, isover3);
:
}
ちょっと間違えているが、察して。
いちおう直し床
- unsigned arrcnt(int n, int *arr, int (*pf)(int, int))
+ unsigned arrcnt(int n, int *arr, int (*pf)(int))
- if (pf(arr[i], 3)) ++ret;
+ if (pf(arr[i])) ++ret;
890 :
デフォルトの名無しさん:04/11/26 02:14:59
x[]={a,b,c,d,e}
c=0;
for(i=0;i<n;i++)
{
if(a[i] > 3)
{
c++;
}
}
printでcってのは?
891 :
デフォルトの名無しさん:04/11/26 02:16:25
x[i]やった
テキトーでスマソ
>>860 終わればかなりの力になるぞと言われ(`・ω・´)となったけれど
だんだん(´・ω・`)に・・・。“まずすべきこと”について大ヒントをください…。
>>892 >まずすべきこと
寝ろ。こんな時間に頭の整理しろったって無理だろ。
895 :
デフォルトの名無しさん:04/11/26 03:41:28
アキュムレータの問題なのですが、教えて頂けないでしょうか・・?
>>896 問題は全文掲載しましょう。
>>895 学校名丸出しで、pdf読むのに手間掛けさせてまでやらせるのか?
虫が良すぎ。
#でもきっと誰かやる。
>>895 ずうずうしすぎて笑った。
ニュートン法もラグランジェもやり方書いてあるじゃん。
式をプログラムに放り込むだけだろ。
なんかもうネタにしか思えないな…(笑
答える人減りそうな予感
>>895 さては・・・
不正アクセスさせて2chネラ逮捕させようって気だな
怖くてpw入力する気になれん
いくら
>>895が許可したっつっても
管理者次第だしな・・・
>>899 こういうこと?
>(1)初期状態 A=1101,B=0110
>(2)初期状態 A=0110,B=1101
>(3)初期状態 A=0110,B=0110
and or xor shift r shift l
(1) 0100 1111 1011 0110 1010
(2) 0100 1111 1011 0011 1100
(3) 0110 0110 0000 0011 1100
>>902の次スレはほんとの次スレ?
いろんな連中が入り乱れてる「次スレ」で、なんか意味わからんちん。
>>908 「次スレ」にそれ以上のものを求められても…
マジレスすると、
>>902は「次スレ」と言うスレタイのネタスレ。
>>906 ありがとうございマス
自分で単純にand,or,eor(xor?)だけやったんですが一緒でした。
右シフト、左シフト参考にさせてもらいます。ありがとうございました。
914 :
北斗づくし:04/11/26 10:50:56
スロットのプログラムを作りたいのですが、乱数の抽出方法がわかりません。
どなたかお教えください。
rand()
916 :
北斗づくし:04/11/26 11:07:39
初心者なので申し訳ありませんが、rand()の具体的な使い方と
具体例を教えてもらえませんか?
以下、乱数の品質だの剰余は駄目だのとお決まりネタが続きます。
918 :
デフォルトの名無しさん:04/11/26 11:08:14
死ね
>>916 乱数を使ってπの近似値を求める例(間違ってても知らない)
つか俺も初心者、ぐぐったら一杯でてくるだろうに…
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, n, count = 0;
double x, y;
scanf("%d",&n);
srand((unsigned)time(NULL));
for (i = 0; i<=n; i++)
{
x = (double)(rand() / (RAND_MAX + 1.0));
y = (double)(rand() / (RAND_MAX + 1.0));
if((x * x + y * y) < 1.0)
count++;
}
printf("π=%lf\n",((double) count)/((double) i)*4.0);
return 0;
}
足し算か引き算をコマンドライン引数で選択したいのですが、
やり方が分かりません。お願いします。
main(){
foo(double x, double y);
//足し算か引き算をコマンドライン引数で選択したい。
}
foo(double x, double y){
AA = x + y;
BB = x - y;
}
mainに引数つけろ
>>920 int main(int argc, char *argv[])
同じ学校の低脳が聞きに来たのか荒らしなのか
>>920 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
int num1, num2;
int result;
if (argc < 4) {
fprintf(stderr, "Usage: %s <num1> <num2> <operator>\n", argv[0]);
exit(EXIT_FAILURE);
}
num1 = atoi(argv[1]);
num2 = atoi(argv[2]);
switch (argv[3][0]) {
case '-':
result = sub(num1, num2);
break;
cae '+':
result = add(num1, num2);
break;
default:
fprintf(stderr, "Unknown operator.\n");
exit(EXIT_FAILURE);
break;
}
printf("%d\n", result);
return EXIT_SUCCESS;
}
あ、肝心なもん忘れた。
int sub(int num1, int num2)
{
return num1 - num2;
}
int add(int num1, int num2)
{
return num1 + num2;
}
cae '+':
勉強とバイトの両立はかなり大変だが、全く刺激のない生活はひからびていて嫌なんだ
私のバイトは、進学塾、予備校講師に家庭教師
この仕事は本当にやりがいがある。
生徒のために頑張っている、という意識が勉強との両立ができる状態に運んでいる。
そんな意識が無かったら、やっていないだろう。
本当に大変だ。睡眠時間も少ないし、体力、精神力勝負。
他人のために頑張る、というのは重い荷を背負うことなんだ。
中途半端じゃだめだ。生徒のために頑張ろう、という強い意識がなければ生徒の学力も伸びなやむだろう。
そんな強い意識があるからこそ、生徒も僕についていく。
その生徒の態度が私を支えているのだ。
すれ違い
>>786 分かってないし。
こんなカンジ。
動作確認してないので間違いがあってもしらん。
int liner_search(int*array, int num_array, int key)
{
int i=0;
for(i=0; i<num_array && array[i]!=key ;i++);
return i==num_array ? -1 : i;
}
すみませんお願いします。
自分の名前をローマ字表記で文字型の配列として設定。
(例)char str[ ] {};
小文字は大文字として扱い、英大文字データを13文字分ずらしたデータに変換して(Aの時はN、Bの時はO)表示する。
言語はCです。
よろしくお願いします。
932 :
デフォルトの名無しさん:04/11/26 20:05:21
基底クラスでpublicで宣言されているメソッドを派生クラスでpublicにしたくない場合
どうすればよいのでしょうか。
環境:VC++.NET
private override
>>931 #include <stdio.h>
#include <string.h>
int main(void)
{
int i;
char str[] = {'n', 'u', 'l', 'l', 'p', 'o', '\0'};
printf("%s -> ", str);
for(i = 0; i < strlen(str); i++){
str[i] += 13;
}
printf("%s\n", str);
return 0;
}
積分区間がMIN<x<MAXである積分の最後の値を返す関数
euler(MIN,MAX,dt)があり、xはdtずつ変化(x+=dt)する。
double MIN = 0.0;
double MAX = 100.0;
double dt = 0.01;
euler(MIN, MAX, dt) //積分結果の最後の値を返す
0から100.0まで積分計算をし、xの値が0番目、100番目、200番目…900番目、
1000番目というように積分区間の間の任意の値を表示するにはどうしたら
いいのですか? お願いします。
積分ループの中に任意の回数ループしたら変数に格納する部分を作って、それを表示すればよろし。
937 :
デフォルトの名無しさん:04/11/26 20:55:36
double型の指数部と仮数部がそれぞれ何ビットで
構成されているかを調べるプログラムを作りなさい。
という問題があるのですが、どうすればいいのか分かりません。
教えてください。
>>937 いい問題だなぁ。
はてさて、どう解こうか。
939 :
デフォルトの名無しさん:04/11/26 21:13:31
>>933 overrideはC#の構文でC++にはないのではないでしょうか?
>>937 DBL_MANT_DIG
DBL_MAX_EXP
DBL_MIN_EXP
あたりで。
>>934 ありがとうございます。
すみませんが#include <string.h>を使わないやり方で教えてもらえないでしょうか??
長さはstringインクルードしないと・・・・
>>942 おまい
>>934か?
for (i = 0; str[i]; i++)
なり何なり普通は思いつくだろ
>>941 #include <stdio.h>
int main(void)
{
int i;
char str[] = {'n', 'u', 'l', 'l', 'p', 'o', '\0'};
printf("%s -> ", str);
for(i = 0; i < strlen(str); i++){
str[i] += 13;
}
printf("%s\n", str);
return 0;
}
>>939 class Hoge
{
public:
void Foo();
};
class Bar : public Hoge
{
private:
void Foo();
};
小文字大文字としてないやん。
#include <stdio.h>
int main(void)
{
int i;
char str[] = {'n', 'u', 'l', 'l', 'p', 'o', '\0'};
printf("%s -> ", str);
for(i = 0; str[i]; i++){
str[i] += (str[i] & 0x20) ? -19 : 13;
}
printf("%s\n", str);
return 0;
}
float と double の値について標準入力から入力し、
その内部表現を
「符号, n * (2 ^ e)」
という形で表示するプログラムを作って下さい。
???
>>945 ありがとうございます。
同じように書いているのですが上手くいかず基底クラスのメソッドが
見えてしまいます。__gcのせいでしょうか。
__gc public class Hoge
{
public:
void Foo();
};
__gc public class Bar : public Hoge
{
private:
void Foo();
};
早く答えろオタク共
もういいよwww
おまえらみたいなクズに教えてもらおうと思った俺が馬鹿だったw
>>949 #include <stdio.h>
#include <math.h>
int main()
{
double d;
float f;
int e;
puts("double");
scanf("%lf", &d);
putchar(d >= 0 ? '+' : '-');
d = frexp(fabs(d), &e);
printf(", %g * (2 ^ %d)\n\n", d, e);
puts("float");
scanf("%f", &f);
putchar(f >= 0 ? '+' : '-');
f = frexpf(fabsf(f), &e);
printf(", %g * (2 ^ %d)\n", f, e);
return 0;
}
&160;
乙
eって対数に出てくるやつかと思ったよ
>>949 frexp()使えばいいんじゃねーの?
>>952-953 は私じゃありません
実はこの問題の一つ前に
浮動小数点数(float, double)の2進内部表現を
4bit毎に区切って表示しなさい
という問題がありました。
それは出来たんですけど・・・
>>954 さんありがとうございます。
明日学校で試してみます。
>>958-959 frexp()使ってもいいのか?その実装方法についての問題じゃないのかな?
>784
int liner_search(int*array, int num_array, int key)
{
int i,bk=array[num_array-1];
array[num_array-1]=key;
for(i=0; array[i]!=key;i++);
array[num_array-1]=bk;
return array[i]!=key ? -1 : i;
}
>>923 >540
ファイルの内容例
Put your hand on a hot stove for a minute, and it seems like an hour.
Sit with a pretty girl for an hour, and it seems like a minute.
That's relativity.
実行結果
Put[1] your[1]hand[1]
on[1]a[4]stove[1]
for[1]minute[2] and[2]
it[2]seems[2] like[2]
an[2]hour[2]Sit[1]
with[1]pretty[1] girl[1]
for[1]That’s[1]relativity[1]
>654 の実行結果
Put[1] your[1] hand[1]
on[1] a[4] hot[1]
stove[1] for[2] minute[2]
and[2] it[2] seems[2]
like[2] an[2] hour[2]
Sit[1] with[1] pretty[1]
girl[1] That's[1] relativity[1]
...微妙に違うなw (540の方が間違っとる希ガス)
963 :
デフォルトの名無しさん:04/11/27 08:20:33
X = -tanA / (B * cos(C + X/2))
(入力値:A、B、C 出力値:X A,B,C,Xはラジアン値)
で、C言語でXの値を求めたいのですがー
cosの中にXがあるためソースがつくれません。
どなたかご親切な方分かりますでしょうか
965 :
963:04/11/27 09:39:24
できれば今日中に
>>963 問題は全文掲載するよろし。
初期値を与えれば収束するなら、収束する様子を見ながら何度でも呼べばいいと思うが。
>>963 B * X * cos(X / 2 + C) + tan(A) = 0
この式から適当にグラフを描いてみたけど、解が無数に出来るね。
問題ではもっと条件があったんじゃないの?
>>963 移項すると、
X * cos(C + (X / 2)) = - tan(A) / B
となるから、
Y = - tan(A) / B (式1) ・・・ 一定
Y = X * cos(C + (X / 2)) (式2)
これらの交点を求めれば良い。
969 :
963:04/11/27 10:41:42
よくわからない
970 :
963:04/11/27 11:26:48
>>966 >>967 すみません条件抜けてました。
解は無数に出ると思いますが、
-Pi/2 <= X <= Pi/2
の範囲内の解で良いです。
>>968 やっぱグラフの交点を求めるしかないんでしょうかー
式のみでできれば行きたいのですがー。
971 :
デフォルトの名無しさん:04/11/27 12:10:00
>本
スマップの本物?
973 :
デフォルトの名無しさん:04/11/27 13:53:50
元
あれ、名前変わった?森じゃなかったっけ
元SMAPって森かつゆきとかいう名前じゃなかったっけ?
>>970 よくわからんけど非線形方程式の解法で検索してみては
ってここ宿題スレだっけ…
978 :
デフォルトの名無しさん:04/11/27 14:24:05
そいつ、スタッフとか並べて蹴りとか暴力振るいまくってたんだろ?
なんか確かにそんな顔してるよ。
10個の配列を用意し、過去10日分の最高気温のデータを設定します
この時、前日の最高気温からの変化量を算出して表示させるCプログラムを作成しなさい。
また、前日より気温が高くなったら+、低くなったら-、変化無しの場合は (空白)を表示するCプログラムを作成しなさい。