ニダ
気が早いよ
4 :
デフォルトの名無しさん :2006/11/06(月) 20:56:11
前スレが落ちたのでage
[1] プログラミング [2] 整数 m と d をを入力し, m 月 d 日が 1 年の何日目にあたるかを表示するプログラムを作成せよ. 例えば, 2 と 1 を入力すると, "2 月 1 日は 1 年の 32 日目です" 等と表示するようにせよ. 閏年は考慮しなくてよい. また, 間違った月日 (例えば, m=13 や m= 4, d=31 等) が入力された場合には, 入力が間違っている旨を表示して終了するようにせよ. ※ m月d日 → 1月〜m-1月の日数の和を求め, それに d を足せばよい. [3] [3.1] windowsXP sp2 [3.2] cygwin [3.3] C [4] 2006年 10月6日(今日中にアップロード) [5] 配列って分野の宿題です。なるべく簡単な書き方でお願いします。
このすれって監視されてる? 友達がばれたとか言ってたけど釣り?
>>8 利用させてもらうこともあるけど、
書き方とか定義する文字とか変えて絶対自分だって分からないようにしてる。
>>5 #include<stdio.h>
#include<stdlib.h>
int main(void){
int day_list[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day_sum;
int m, d, i;
printf("Input date month day :");
scanf("%d %d", &m, &d);
if(m<1 || m>12 || d<1 || d>day_list[m]){
printf("\n入力が間違っています\n");
exit(1);
}
day_sum=d;
for(i=0;i<m;i++)
day_sum+=day_list[i];
printf("%d 月 %d 日は 1 年の %d 日目です\n", m, d, day_sum);
return 0;
}
scanf とか printf の f って何?
formatのfじゃね?
友達が「すきゃんふ」「ぷりんとふ」って発音してくるから 最近は、本当は意味なんてないんじゃないかと思い始めてた
とうふぷりん?
18 :
デフォルトの名無しさん :2006/11/06(月) 21:54:05
Format = 書式指定 のこと。とマジレス。 char とかstrlen とか、Cの用語には読み方が分かれるものが多いね。
>>16 <豆知識>
atof → あ、豆腐 → 豆腐は柔らかい → 固定されていない → 浮動小数点数に変換
間違っても ascii to float ではない
オマエラもっとアホ知識をひけらかして下さい
平均値と標準偏差を求める過程で出す「合計」の値を 表示させようとしたらそこだけバグるんだけど。 例えばm=sum/n が平均だとすると mはちゃんとした数字出るけどsumはバグってる。 sumそのままprintしようとしちゃいけないんでしょうか。 これだけしか書かなくて分かるだろうか。
>>22 わからん。テンプレ嫁。
まぁ書式指定子がどっかおかしいんだろうとは思うが。
>>23 に同意
表示部分と変数宣言だけでも晒すべし
>>23 うまくいかないのがほんの一部だけで、全部晒すと効率悪いと思って
>>24 #include<limits.h><math.h><stdio.h>(全部)
int i,x[n];
double sum,m,s,v;
中略
for(sum=0.0,i=0;i<n;i++)
{
sum += x[i];
}
m=sum/n;
for(sum=0.0,i=0;i<n;i++)
{
sum += (x[i]-m)*(x[i]-m);
}
v=sum/n;
s=sqrt(v);
printf("合計%f\n",sum);
printf("平均%f\n",m);
printf("標準偏差%f\n",s);
return終わり
です
再現できないバグは存在しないことになっている
>>29 書いてあるとおりに動いているだけじゃないのか?
sum を上書きしてしまってるの忘れてるとかな
>>29 sumがバグってるとはどのような状況か?
異常なものが表示されるのか、
表示されないのか、
暴走するのか?
はっきりさせろ。
>>29 出来ればどうバグってるのか教えておくれ。
オレはてっきり出力が”あqwせdrftgyふじこ”になってるんだと
思ってたんだけど、違うっぽいし。
あとドットとか本でした見た事なかったよ。
>>31 親切にありがとうございます。
気付きました。
35 :
デフォルトの名無しさん :2006/11/07(火) 00:41:28
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): オイラーの予想: オイラー(Euler, 1707年-1783年)は、1769年頃に、 「a^5+b^5+c^5+d^5=e^5を満足する正の整数はない」という予想を立てた。 コンピュータを用いて、偉大な数学者であるオイラーの予想を覆せ。 また、このプログラムは多少時間がかかることが予想されるので、 効率よくプログラムを組むこと。そのため、すべてを計算すると大変なので、 a<b<c<d<e<200を仮定してよい。 ヒント: カウンタ変数を5つ用意して5重ループを構成する。 ループ数が多くなるので計算量に注意されたい。 200^5程度の値になると、通常のint型の表現範囲を超えるので注意すること。 答えは、次のとおり a=27,b=84,c=110,d=133,e=144 a^5=14348907,b^5=4182119424,c^5=16105100000,d^5=41615795893,e^5=61917364224 c^5,d^5,e^5は、int型の表現範囲を超えているので、注意してください。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0 [3.3] 言語: C++ [4] 期限: 2006年11月7日まで [5] その他の制限: この答え以外でも存在したら表示して欲しいです。
この答えは自力で出したの? 意地悪で聞いてるわけじゃなくて,手元にある程度プログラムが出来てるのか確かめておきたい
37 :
デフォルトの名無しさん :2006/11/07(火) 00:55:47
答えは与えられたものです。 このプログラムは出来ています。 他の答えをだすプログラムを知りたくて。
他のも何も、見つかった時にそこで終わらずprintfでabcde表示して続行すればいいだけじゃないの? 単純に考えて・・・
39 :
デフォルトの名無しさん :2006/11/07(火) 01:05:39
そうですよね。 ありがとうございます。
a=54, b=168, c=220, d=266, e=288 ってのがあったけど200超えてるしな。
[1] 授業単元: 数値解析 [2] 問題文(含コード&リンク):3元連立方程式をガウスザイデル法で解くプログラムを作成せよ [3] 環境 [3.1] OS: (Windows/Linux/等々) Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Microsoft Visual C++ 6.0 [3.3] 言語: C [4] 期限:水曜日まで [5] その他の制限: 参考書にアルゴリズムは色々書いてあるけど これをどうやってプログラムで書けばいいか分かりません・・・
44 :
c不明な人 :2006/11/07(火) 13:10:25
1] 授業単元:情報処理U [2] 問題文(含コード&リンク):二つの整数n , r をキーボードから入力し,組合せの数nCrを画面表示するプログラムを作成 しなさい.ただし,組合せの数を求める関数のプロトタイプを「int combination(int, int)」, 整数値の階乗を求める関数のプロトタイプを「int kaijo(int)」としてプログラムすること. n や r を大きくとるとオーバフローすることがあるが,本課題では考慮しなくてよい. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2006年11月10日まで] [5] その他の制限:なし よろしくお願いします。。。
45 :
デフォルトの名無しさん :2006/11/07(火) 13:15:45
46 :
デフォルトの名無しさん :2006/11/07(火) 13:17:20
(x_a-x_b)(x_c-x_b)+(y_a-y_b)(y_c-y_b) / √(((x_a-x_b)^2+(y_a-y_b)^2)((x_c-x_b)^2+(y_c-y_b)^2)) をプログラムで書こうとして、 ((x[i]-x[i+1])(x[i+2]-x[i+1])+(y[i]-y[i+1])(y[i+2]-y[i+1])) /sqrt(((x[i]-x[i+1])^2+(y[i]-y[i+1])^2))*((x[i+2]-x[i+1])^2+(y[i+2]-y[i+1])^2))) と書いてみたのですが、エラーばっかりです。 x[i+1]と言う表現はダメなんでしょうか? どのように表現すればいいでしょうか? また、^2という表現も使えないのでしょうか? どのように記述すればよいでしょうか? 言語はcです
47 :
c不明な人 :2006/11/07(火) 13:19:40
もう1つです。よろしくお願いします。 1] 授業単元:情報処理U [2] 問題文(含コード&リンク):x を-2.8 以上2.8 以下の範囲で0.02 ずつ変化させ, y = cos x 及びy = sin x の値を画面表 示するプログラムを作成しなさい.ただし, y = cos x 及びy = sin x は,次式に示す多項式 cosx=1-x^2/2!+x^4/4!-x^6/6!+x^8/8!-x^10/10! sinx=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-x^11/11! により計算すること.また,これらの計算を行う関数のプロトタイプをそれぞれ「double mycos(double)」,「double mysin(double)」とし,課題1(↑の44の問題です。)で作成した「kaijo()」関数を利用す ること. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2006年11月10日まで] [5] その他の制限:なし 改めてよろしくお願いしますm(__)m
>>46 >・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
配列宣言してないんじゃないのって気がするがな
そもそもそこで配列を使いたい理由がわからん
49 :
c不明な人 :2006/11/07(火) 13:30:12
>>47 すいません!0.02じゃなくて0.1でした。
>>45 それってどこですか?
50 :
デフォルトの名無しさん :2006/11/07(火) 13:30:31
[1] 授業単元: [2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える int reverse_string(char *str)を作成せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5 [3.3] 言語: C [4] 期限:2006年11月8日 半角英数字はうまくいくのですが2バイト文字の場合がわかりません。 よろしくお願いします。
51 :
50 :2006/11/07(火) 13:31:48
#include <stdio.h> int reverse_string(char *str) { char *p,tmp; p=str; for(;*p !='\0';p++); for(;p-str>0;str++){ tmp=*(--p); *p=*str; *str=tmp; } return 0; } main(void) { char str[50]="C言語"; printf("reverse_string関数実行前\n%s\n",str); printf("reverse_string関数実行後\n"); reverse_string(str); printf("%s\n",str); return 0; }
52 :
デフォルトの名無しさん :2006/11/07(火) 13:36:02
配列は #define M 4096 double x[M], y[M], z[M]; で確保してあります。 error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。 error C2296: '^' : 不正な左オペランドです。 こんな感じです。 >そもそもそこで配列を使いたい理由がわからん 配列に連続した座標が入っているので。 一つずつ動かして判定したいのです。
まずは、math.hのpow関数を勉強しようぜ 期限もまだあることだし
>>52 error C2296: '^' : 不正な左オペランドです。 というエラーメッセージを見る
↓
^2という表現は使えないのかな と気づく←ここまで出来てる
↓
C 演算子でググる
↓
^はxorに使われていることを知る
↓
じゃあべき乗はどう表すのか疑問に思う
↓
C べき乗でググる
↓
math.hのpowを使うことが分かる
はぁ・・・
55 :
デフォルトの名無しさん :2006/11/07(火) 13:44:11
c言語で英文を入力し,その英文の単語を全て出力するソースコードを作って頂きたいのですが
57 :
46 :2006/11/07(火) 13:56:11
です。 ありがとうございます。 べき乗については解決いたしました。 (x[i]-x[i+1]) のみだとエラーは出ないのですが、 (x[i]-x[i+1])(x[i+2]-x[i+1]) と書くと error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。 となります。 なぜなんでしょうか???
58 :
デフォルトの名無しさん :2006/11/07(火) 14:00:26
すいません初心者で(汗) [1] cis english 2 [2] 問題文 英文を入力し,その英文の単語を全て出力するソースコード [3] 環境 [3.1] OS: WindowsXP [3.2]gcc [3.3] C [4] 期限:2006年11月12日12:00まで [5] その他の制限:なし
>>58 は重複した単語に関する指定ないし
.,!?;:"'取り除くだけで答えになってしまうんじゃないだろうか
出てきた単語は昇順に並べ替えるとか 指定ないの?
60 :
デフォルトの名無しさん :2006/11/07(火) 14:05:24
[1] 授業単元:数値解析
[2] 問題文:
ガウスの消去法を用いたプログラムで微分方程式を解く
f(0)=0,f(pi/2)=1の条件でf''(x)+f(x)を解け
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: gcc 2.95
[3.3] 言語: C言語
[4] 期限: レポート提出があるので可能なら今日、できれば明日まで
[5] その他の制限: 特にありません
現在
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2897.c までプログラムが進んでいます
数値の入力の直後にセグメンテーション違反です。と表示され終了してしまいます
微分方程式を解くときの数値などは問題ないはずなのですが、
17行目のscanfのところで止まってしまいます。
このエラーをどうにかする方法はないでしょうか?力を貸して頂ければ幸いです
61 :
デフォルトの名無しさん :2006/11/07(火) 14:06:15
62 :
60 :2006/11/07(火) 14:07:48
>>60 微分方程式が間違っていました
正しくはf''(x)+f(x)=0です
63 :
46 :2006/11/07(火) 14:09:02
>>61 さん
すみませんでした・・・・アホすぎました。
ありがとうございます。
死んできます。
>>63 いい意味でアメリカのラテン系移民の英語みたいなガッツを感じます。
>>44 脳内コンパイラ
#include<stdio.h>
main() {
int kotae,n,r;
printf("nCrを計算するにゃん\n");
printf("nの値を入力するにゃん\n(n>=0にゃん)");
scanf("%d",&n);
if(n<0){
printf("死ねにゃん");
exit(1);
}
printf("rの値を入力するにゃん\n(0<=r<=nにゃん)\n");
scanf("%d",&r);
if(r>n||r<0){
printf("死ねにゃん");
exit(1);
}
printf("計算開始にゃん\n");
kotae = combination(n,r);
printf("答えは%dにゃん\a",kotae);
}
int kaijo(int x) {
if(x=1||x=0){return 1};
return x*kaijo(x-1);
}
int combination(int n, int r) {
int c;
c = kaijo(n)/(kaijo(r)*kaijo(n-r));
return c;
}
脳内失敗 int kaijo(int x) { if(x=0) return 1; return x*kaijo(x-1); }
67 :
デフォルトの名無しさん :2006/11/07(火) 15:07:24
いや、まだ失敗してるから if ( x == 0 ) だろうが
脳内大失敗 int kaijo(int x) { if(x==0) return 1; return x*kaijo(x-1); }
#include <stdio.h> #include <math.h> main(){ double i,y1,y2; for (i=-2.8;i<=2.8;i=i+0.02){ 省略 指定された書式で思い思いに表示してください } } double mycos(double x){ int n; double y=0; for(n=10;n>=2;n=n-4){ y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2); } return y; } double mysin(double x){ int n; double y=0; for(n=11;n>=3;n=n-4){ y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2); } return y; } 展開式はアンロールしたよ その方が早いから(言い訳
70 :
デフォルトの名無しさん :2006/11/07(火) 16:27:45
59さん、説明不足ですいません。書き出すだけで順番の指定はありません。重複した単語は@つにまとめる必要があるみたいです(>_<)
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): #include <stdio.h> #include<string.h> int main(void) { int i; char str_num[10] = "123456789"; char str_alpha[6] = "abcde"; for(i=0;i<10;i++){ strcpy(str_num, "123456789"); /* @ */ strncpy(str_num, str_alpha, i); /* A */ printf("i=%d, str_num:\"%s\"\n", i, str_num); /* B */ } return 0; } このプログラムの @をstrcpy(str_alpha, "abcde"); Aをstrncpy(str_alpha, str_num, i); Bをprintf("i=%d, str_alpha=\"%s\"\n", i, str_alpha); とした場合の実行結果について説明し、strncpy()の動作について説明 しなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: 分かりません [3.3] 言語: C [4] 期限: 明日の朝まで よろしくお願いします。
コンパイラ名とバージョン: 分かりません ちょwwww分かれwwwwww
73 :
71 :2006/11/07(火) 17:04:28
>>72 申し訳ないです。
コンパイラ名とバージョンは教えてもらってないです。
>>71 kore.jikkou.sure.ba.ii.dake.jamaica!
75 :
sage :2006/11/07(火) 17:21:14
1] 授業単元:プログラミング [2] 問題文 番号と名前をメンバとする構造体を作成し、3件分のデータ表示を行うプログラムを作成せよ。 番号は3桁までとし、3桁を超える場合やすでに入力済みの数字が入力された場合はエラーを表示せよ。 [3.1] OS:unix [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2006年11月9日まで] [5] その他の制限:なし 特に番号の重複エラーの処理がよくわからないのでよろしくお願いします。
76 :
71 :2006/11/07(火) 17:24:41
>>74 もちろん実行したのですが、
/* @ */
/* A */
/* B */
を変えることによって、なぜこの様な実行結果になったかを説明しないと
いけないのです。
なぜこの様な実行結果になったかが解らなくて。
>>76 strcpy.to.strncpy.wo.google
78 :
デフォルトの名無しさん :2006/11/07(火) 18:32:35
[1] 授業単元: 情報A [2] 問題文(含コード&リンク): 数字を二つ入力したとき、その二つの数字の間の全ての数の和(シグマ計算) を出力する(1と10を入力すると55、のような)プログラムをif と gotoを用いて2パターン以上作成せよ。 [3] 環境 [3.1] OS: (Windows [3.2] コンパイラ名とバージョン: 初心者なもので何のことか… [3.3] 言語: C++ [4] 期限: ([今年11月10日まで] [5] その他の制限:超初心者なのでなるべく単純な方法でお願いします。m(_ _ )m
>>76 ヒント web: manpage of strcpy
>>35 作ってはみたが、時間がかかりすぎる。
それでもいいなら、アップする
CPU600MHz → 推定12時間以上?アリエネ
枝狩りのアルゴリズム考えないとな
>>78 #include <stdlib.h>
main(){
int s,m,n;
scanf("%d",&m);
scanf("%d",&n);
s=(m+n)*(abs(m-n)+1)/2;
printf("%d",s);
}
>>78 1)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>
go amain(){
go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
to:gogo gog <= gg toog goto togo;printf("%d\n",tot);
}
2)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>
go og(go gg){gg/10&&og(gg/10);putchar(gg%10+48);}
go main(){
go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
to:gogo gog <= gg toog goto togo;
og(tot);
}
83 :
81 :2006/11/07(火) 19:49:05
#include <stdio.h> ぬけてた
>>81 さらに条件を満たすために最後に追記しては?
if(1) goto owari;
owari:
>>84 先生がイラつくこと間違い無しの良解答だな
goto文を使わせるなんてどういう教育してるんだか。 最近の教科書にはどんどん使いましょうとか書いてあるのか。
IOCCC は anderson.c が最高傑作だと思う。
>>58 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 1024
typedef struct tag_word_list{
char *word_data;
struct tag_word_list *next;
}word_list;
void word_add(const char *one_word, word_list **start){
word_list *wl;
for(wl=*start;wl!=NULL;wl=wl->next)
if(strcmp(one_word, wl->word_data)==0) return;
wl=malloc(sizeof(word_list));
wl->word_data=strdup(one_word);
wl->next=*start;
*start=wl;
}
int main(void){
char one_word[BUF_SIZE], dummy[BUF_SIZE];
word_list *wl=NULL;
while(!feof(stdin)){
one_word[0]='\0';
if(fscanf(stdin, "%[a-zA-Z-]", one_word)==1) word_add(one_word, &wl);
fscanf(stdin, "%[^a-zA-Z-]", dummy);
}
for(;wl!=NULL;wl=wl->next)
printf("%s\n", wl->word_data);
return 0;
}
[2] 問題文(含コード&リンク): 以下の様なプログラムを作りなさい。 ・メイン関数の引数を用いてユーザ名とパスワードの前半部分を入力する。 ・scanfを用いてパスワードの後半部分の入力を要求する。 ・前半部分と後半部分を連結して1つのパスワードにする。 ・前もって決めたパスワードと一致するか調べ、一致する場合には「OK, ユーザ名」のメッセージを 表示し、一致しない場合はパスワードの文字数を表示する。 以下、自分で考えてみたプログラムです。 #include<stdio.h> #include<string.h> #define MAX 20 int main(int argc, char *argv[]) /* ユーザ名をargv[1]としてパスワードの前半をargv[2]とします。*/ {char x[MAX], y[MAX], password[MAX]=abcd; int i, k, flag=1; scanf("%s", x); y[MAX] = *strcat(argv[2], x); k = strlen(strcat(argv[2], x)); for(i=0;i<=3;i++){ flag *= (y[i] == password[i]);} if(flag == 1) printf("OK, %s\n", argv[1]); else printf("パスワードの長さ:%d", k);} ユーザ名はVVVでパスワードの前半はabで実行しパスワードの後半はcdを入力してみたのですが、 ちゃんとなりませんでした。どこをどのように訂正すれば良いのでしょうか? [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2006年11月8日18:00まで [5] その他の制限: C言語を始めて4ヶ月程度なのであまり上級な知識は避けて頂けると助かります。
>>35 #include <stdio.h>
#include <time.h>
void p(int i) { printf("%d ", i); fflush(stdout); }
int proc(void)
{
int a, b, c, d, e; double x, y, z, f[200];
for (e = 1; e < 200; e++)
f[e] = (double)e * e * e * e * e;
for (e = 1; e < 200; e++)
for (p(e), d = 1; d < e; d++)
for (c = 1; c < d && (z = f[c] + f[d]) < f[e]; c++)
for (b = 1; b < c && (y = f[b] + z) < f[e]; b++) {
for (a = 1; a < b && (x = f[a] + y) < f[e]; a++)
;
if (x == f[e])
return !printf("\na=%d b=%d c=%d d=%d e=%d\n",
a, b, c, d, e);
}
return printf("not found\n");
}
int main(void)
{
clock_t t = clock();
proc();
printf("%g\n", difftime(clock(), t) / CLOCKS_PER_SEC);
return 0;
}
パスワードはパスワード用のライブラリ関数を使うべき
92 :
デフォルトの名無しさん :2006/11/07(火) 20:42:01
[1] 授業単元: プログラミングI(C) [2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える int reverse(char *str)を作成せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限:明日まで [5] その他の制限: インクルードはstdio.hのみでお願いします。 「C言語プログラミング」と文字列に入れたら「グンミラグロプ語言C」と出力されるようにお願いします。
お願いします [1] 授業単元: プログラミング [2] 問題文(含コード&リンク):ある商店でメロンを販売している。この商店では購入個数が増えると1個あたりの単価が安くなる。メロン1個の仕入価格は1000円である。またメロンの購入個数と単価の関係は以下のようになっている。 5個未満:1個あたり2000円 10個未満:1個あたり1900円 15個未満:1個あたり1500円 20個未満:1個あたり1400円 20個以上:1個あたり1200円 客がn人買いにきたとして、格客の購入個数を入力し、それぞれの支払い価格と商店の総販売価格と総利益出力するプログラムを作成せよ。nはプログラム開始時に読み込むこと。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C++ [4] 期限:明日
>>89 password[MAX]=abcd;
↓
password[MAX]="abcd";
y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
↓
flag=(strcmp(y, password)==0);
>>92 文字コードの指定はないのか?
内部で判別するの?
シフトJIS限定?
>>92 >引数で受け取った全角文字列を逆順に入れ替える
>〜と出力されるように
どっちだ?
むしろ出力したら駄目なんじゃないかな?かな?
98 :
92 :2006/11/07(火) 21:04:37
文字コードの指定はありませんでした。
99 :
89 :2006/11/07(火) 21:17:45
レスありがとうございます。
>>94 あ、「"」つけるの忘れてました。
y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
についてですが、sprintfは、まだ習って無いです。strcatを使って出来ないですかね?
strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
それだとコンパイルに通らないですし。
>>95 あ、リターンも忘れてました。
(;´Д`)つ $man strcat
101 :
92 :2006/11/07(火) 21:21:48
#include <stdio.h> int reverse(char *str) { char *p, tmp; p = str; for( ; *p != '\0' ; p++); for( ; p-str > 0 ; str++){ tmp = *(--p); *p = *str; *str = tmp; } return 0; } main(void) { char str[30]="abcde"; printf("reverse関数実行前\n%s\n",str); printf("reverse関数実行後\n"); reverse(str); printf("%s",str); return 0; } 1バイト文字をreverse関数で逆順に並べ替えて、main関数で出力はできたのですが、 2バイト文字だと文字化けしてしまいます。
102 :
デフォルトの名無しさん :2006/11/07(火) 21:23:27
ここが合ってるのかわからないのですが質問させていただきます。 今逆行列を求めるプログラムを作っていて 完全陰解法とSOR法では作り終えてるんですが 行列を増やすとそれほど精度が出ない(発散してしまう)ので困っています。 他に逆行列(n元一次方程式)を解く方法はないのでしょうか? またよいサイトなどありましたら教えてください。
>>99 > strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
うん、strcatでもいけるんだな。
ただ、strcatは何を返すの?そして、*演算子は何をするもの?
char y[MAX];
と定義した変数yの型は何?配列とポインタ理解してる?
>>92 int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str+=2){
tmp = *(--p,--p);
*p = *str;
*str = tmp;
tmp = *(p+1);
*(p+1) = *(str+1);
*(str+1) = tmp;
}
return 0;
}
105 :
92 :2006/11/07(火) 21:39:07
みなさんありがとうございました。 2バイト文字が正常に逆順に出力されました。 宿題ではないのですが、 もしこれが1バイト文字、2バイト文字が混合されていた場合はどうすればいいのでしょうか?
cygwin [1] 情報演習のスキルT [2] 素数を求めるプログラム [3] 環境 [3.1] OS: WindowsXP [3.2] cygwin [3.3] C [4] 期限: 11月14日 お願いします。
107 :
デフォルトの名無しさん :2006/11/07(火) 21:42:34
>>105 1) 固定長のwchar_tに変換して処理→単一の処理、変換の必要あり
2) 文字種(1バイト文字か2バイト文字か)を判別して処理→エンコードごとに処理が別、変換の必要なし
文字コードの種類によって判別法は違う。 UNICODEは全部2バイトだから判別する必要なし JISはエスケープシーケンスの切り替えを検出 シフトJISは2バイト文字の1バイト目かどうか調べる EUCは最上位ビットを検査
cygwin ってコンパイラなん
>>106 #include <stdio.h>
int main()
{
char s[8]
puts("素数を入力してください");
gets(s);
return 0;
}
112 :
再帰式 :2006/11/07(火) 21:56:05
[1] 授業単元:非線形方程式の解(反復法)
[2] 問題文(含コード&リンク):x^3-2x+5=0の近似解を反復法により計算せよ。
参考URL(反復法):
http://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E6%B3%95_ (%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:C
[4] 期限:明日の午前中までにお願いいたします
@
#include <stdio.h>
#include <math.h>
#define g(x) (pow(x, 3)+2*x-5)/(2*pow(x, 2))
int main(void)
{ double e,f,x,x1;
e=pow(10,-7.0);
f=fabs(x1-x);
x1=1000;
while(f > e)
{ f=fabs(x1-x);
x=x1;
x1=g(x);
}
printf("解は%1.16lf\n",x1);
return 0;
}
113 :
再帰式 :2006/11/07(火) 21:57:49
A #include <stdio.h> #include <math.h> int main(void) { double e,f,x,x1,Xn; e=pow(10,-7.0); f=fabs(x1-x); x1=1000; while(f > e) { Xn=(pow(x, 3)+2*x-5)/(2*pow(x, 2)); f=fabs(x1-x); x=x1; x1=Xn; } printf("解は%1.16lf\n",x1); return 0; } @とAの違いはどこなのでしょうか? できればAで実行して成功させたいのですが、どこがおかしいのか分かりません。 アドバイスお願いいたします。
>>105 winXPなんだしS-JIS決め打ちで。
/*
pが指すマルチバイト文字の長さを返す
このへんはmbrlenとか使ったほうがいい気もするけど
stdio.hしか使うなという条件を守るために使わない
*/
size_t mblen(const char*p){
/* S-JIS決め打ち */
return (*p&0x80) ? 2 : 1;
}
/*
指定したメモリブロックをreverseする
*/
void memrev(char*str,size_t n){
char*p = str+n;
if(str == p)return;/*C言語のポインタの有効範囲の仕様を守るため*/
for(;str < --p;++str){
char c=*str;*str=*p;*p=c;
}
}
/*
マルチバイト文字を考慮したreverse
*/
void reverse(char*str){
int len = 0;
while(str[len]){
int c = mblen(str+len);
memrev(str+len,c);
len+=c;
}
memrev(str,len);
}
>>106 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *sieve_of_eratosthenes(int upper) {
int i, notprime, *integers = (int*)malloc(sizeof(int) * (upper + 1));
for (i = 2; i <= upper; i++) integers[i] = 1;
integers[0] = integers[1] = 0;
for (i = 2; i <= upper / 2; i++) {
notprime = i;
while ((notprime += i) <= upper) integers[notprime] = 0;
}
return integers;
}
int is_prime(int n) {
int *sieve = sieve_of_eratosthenes(n), ret = sieve[n];
free(sieve);
return ret;
}
int main(void) {
int upper_num, *sieve, i;
printf("MAX?:");
scanf("%d", &upper_num);
sieve = sieve_of_eratosthenes(upper_num);
for (i = 2; i <= upper_num; i++)
if (sieve[i]) printf("%4d", i);
free(sieve);
}
[1] 授業単元: [2] 問題文(含コード&リンク):第1因数に含まれる第2因数と第3因数の間にある文字列を返す関数を作る(因数はすべて文字列) [3] 環境 [3.1] Linux [3.2] gcc 3.4 [3.3] C [4] 期限: 11/9 [5] その他の制限:特になし
>>115 for (i = 2; i <= upper / 2; i++) {
+ if (!integers[i]) continue;
notprime = i;
これがないと篩になってないかと。
119 :
92 :2006/11/07(火) 22:16:58
みなさんいろいろありがとうございました。
>>93 #include<stdio.h>
int get_price(int number){
if(number<5) return 2000;
if(number<10) return 1900;
if(number<15) return 1500;
if(number<20) return 1400;
return 1200;
}
int main(void){
int i, n, m;
int total_price=0, total_profit=0;
printf("客の人数を入力してください ");
scanf("%d", &n);
for(i=0;i<n;i++){
printf("購入個数を入力してください ");
scanf("%d", &m);
total_price+=m*get_price(m);
total_profit+=m*(get_price(m)-1000);
printf("\n支払い価格 %d 円\n", m*get_price(m));
}
printf("\n総販売価格 %d 円\n総利益 %d 円\n", total_price, total_profit);
return 0;
}
>>108-109 堅苦しいことを言えば、そもそもwchar_tはUnicodeと決まっているわけではないし、
文字集合がUnicodeでも、符号化にUTF-8やUTF-16を使っていれば、固定長とは限らないわけで。
>>116 これはシンタックスエラーな問題文ですね
>>99 y[0]='\0';
strcat(y, argv[2]);
strcat(y, x);
または
strcpy(y, argv[2]);
strcat(y, x);
>>124 というより、いろんな意味に取れるのが問題かと…
>>116 のやりたい事は何となく分かるんだけどね
コマンド
./a.out futongafuttonda uton utton
実行結果
gaf
ってところか
>>125 >関数を作る
main も関数には違いないけど、多分題意とは違うとおもふ。
127 :
80 :2006/11/07(火) 23:30:05
>>90 めちゃはえー。こんなにも差がでるのか orz
>>127 事前に200までの5乗を計算するだけでも現実的時間で終わるよ
for文の重なりが把握できるのは3つまでな俺
>>128 計算するアルゴリズムはほとんど一緒なんだが、
多倍長整数の計算が遅くて><
double で計算するなんて思いつきもしなかった…
さすがFPUはんやで
>>130 long long使ってもいいんじゃない?
>>35 はVC++6.0だからわからんけど、最近のなら対応してる
133 :
OS :2006/11/08(水) 00:16:50
[1] 授業単元: オペレーティングシステム [2] 問題文(含コード&リンク): 第4回課題 セルオートマトンの動作推移を表現する。 ・渋滞の様子をC++を使って表現する。 ・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。) ・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。) ・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。 以下に、例を示す。 問題 □□■□■□が与えられるとする。 t=1 □■□■□□ t=2 ■□■□□□ t=3 □■□□□□ t=4 ■□□□□□ 終了 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C、C++ (出来ればC++が望ましい。) [4] 期限: 2006年11月8日 23:59まで(出来れば23時まで。) [5] その他の制限: 特になし
134 :
OS :2006/11/08(水) 00:18:38
宜しくお願いします。
135 :
◆rqrMes8uog :2006/11/08(水) 00:50:42
[1] 授業単元: C++プログラミング
[2] 問題文(含コード&リンク):
最初にあなたは 1 から 99 までの範囲で数を一つ頭に思い浮かべます.
推測値を提示し,その推測が当たっているかどうか,
当たっていなければより大きいか小さいかを繰り返し質問して,
あなたからの答に基づいて推測値を改善し,
最終的にあなたが思い浮かべた数を言い当てるプログラムを作成しなさい.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C++
[4] 期限: 2006年11月8日(水)23:59まで
[5] その他の制限:
・質問への答え方では,「当たりなら0,もっと小さければ1,
もっと大きければ2を入力してください」といったルールを示す。
・質問に対する想定外の答え方には警告を出す
・正しい数を当てるまでにかかった回数を数えて,その回数に応じたメッセージを出す.
・コンピューターからの最初の質問は「50ですか?もっと大きい?小さい?」とする。
以上です。C++を始めたばかりです。
>>133 と期限がかぶってしまいまして、すいません。
どうか宜しくお願いします!
>>132 VC6なら型名は__int64、printfの変換指定子は%I64dね。
>>133 すまん、俺自身セルオートマトンをいまいち理解してないのだが、
これって塗りつぶしセルが時間に従って左側に移動しているだけであって、
空白セル云々は関係ないように見えるんだが(例を見る限り)
141 :
デフォルトの名無しさん :2006/11/08(水) 02:53:58
>>86 はgotoは絶対に使ってはいけないと信じている雑魚プログラマ
Cの文法にgotoがある限り使われても文句は言えんだろが
俺は極力使わないが多重ループを抜けるための一手段ではあるな そもそも機能を覚えさせようとしてるだけであって 推奨してるわけではないだろう goto文の是非にあたってはここで議論すべきないようではないし
146 :
◆rqrMes8uog :2006/11/08(水) 03:24:13
ありがとうございました。かなり助かりました。
147 :
OS :2006/11/08(水) 04:49:05
>>133 おそらく、発展問題として、今後
□□■
は
□■□
となるが、
■□■
は
■■□
となる左側で止めてしまう場合があるのです。
この問題は、渋滞の研究に使うものなので、□は、動ける場所、■は、渋滞していて動けない場所というものです。
148 :
OS :2006/11/08(水) 05:01:07
ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。 発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。 nは、コマンドラインから入力。(入力方式は問わない。) (例) t=1 ■□■ t=2 ■■□ t=3 ■■□ t=4 ■■□ t=5 ■□□ この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。 今、この場合のプログラムも考えてますが、どうも徹夜気味です。宜しくお願いします。
[1]計算機プログラミング [2] ● 2つの自然数を入力して、その間にある素数を表 示するプログラムを作成しましょう。 ■ プロジェクト名:07prime ファイル名:07prime.c ■ 入力:整数(自然数)を2つ ■ 大小関係が逆でも対応できるようにすること。 ■ 処理:2つの自然数の間で素数の場合、その数を表示 する ■ 素数:1と自分自身以外は割り切れない数 ■ 出力:素数の値 ■ 自分の学籍番号下4桁と下4桁+100で試してみよう ■ ソースコードを印刷し、自分の学籍番号下4桁と下4桁 +100の結果を記入して、提出しましょう [3]WindowsXP [4]11月13日
150 :
115 :2006/11/08(水) 12:12:35
isprimeは不要だった。
>>149 #include <stdio.h>
int main(void) {
int i, j, min, max, temp;
scanf("%d%d", &min, &max);
if (min > max) {
temp = min;
min = max;
max = temp;
}
for (i = min; i <= max; i++) {
for (j = 2; j <= i; j++) if (i % j == 0) break;
if (i == j) printf("%5d", i);
}
return 0;
}
151 :
デフォルトの名無しさん :2006/11/08(水) 12:17:43
>>47 誰か教えてくれないでしょうか??(
>>49 に変更点が書いてあります。)
>>151 画面表示までやるのか、表示はgnuplotに任せちゃっていいのか
[1] 授業単元: プログラミングC [2] 問題文(含コード&リンク): 名前と5教科の点数(国語、数学、社会、理科、英語)と 基準点を入力して、基準点以上の該当科目と点数を表示する関数 void search(int *mark,int std)を作成せよ。 mark:点数配列 std:基準点 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC6.0 [3.3] 言語: C [4] 期限: 決まってないです。 [5] その他の制限: 現在、配列とポインタのところをやっています。 よろしくお願いします。
その仕様通りに作るとおかしなことになるけど それで間違いないの?
156 :
154 :2006/11/08(水) 16:00:35
〔名前「テストユーザー」 国語の点数:「40」 数学の点数:「50」 社会の点数:「60」 理科の点数:「70」 英語の点数:「80」 基準点:「60」 テストユーザーさんの60点以上の科目は〕 (社会の点数:60 理科の点数:70 英語の点数:80) 〔〕の処理をmain関数で、 「」をscanfでキーボードから入力し ()の部分をsearch関数内でやるのだと思うのですが
[1] 授業単元:コンピュータプログラミングおよび演習 [2] 問題文(含コード&リンク): 1、自然数n を一つ読み込み、n が2 でも3 でも割り切れない場合は「!」を、 そうでない場合は「@」を画面に書き出すプログラムを作成せよ。 2、自然数n を一つ読み込み、それに続いて画面に2, 4, 6, ... 2n を(都合n 個) 画面に書き出すプログラムを作成せよ。 3、自然数n を一つ読み込み、それを2 で何回割ると0 になるかを数え、その回 数を画面に書き出すプログラムを作成せよ。なお、割り算において割り切れ ない場合は結果を切り捨てて整数にするものとする。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: (不明) [3.3] 言語: (C++) [4] 期限: 明日の正午までには… お願いいたします。授業内容が早すぎてまともにできません…
こんなうんこみたいな課題が出てるのに 授業が早いなんて信じられない
>>157 void func1(int n)
{
printf("%c\n",(n%2 != 0 && n%3 != 0) ? '!' : '@');
}
void func2(int n)
{
int i;
for(i = 2; i<=2*n; i*=2)
printf("%d,",i);
}
void func3(int n)
{
int c=0;
while((n>>c) != 0)c++;
printf("%d回\n",c);
}
>>148 言いたいことは大体分かるんだが、どうにも例が怪しい。
t=4とt=5の間の遷移はおかしくないか?
そもそも147-148は誰に向けて言ってるの?
>>154 #include <stdio.h>
#include <stdlib.h>
char subject[6][7] = {"国語","数学","社会","理科", "英語","基準点"};
void search(int *mark,int std)
{
int i;
for(i=0; i<5; i++)
if(mark[i] >= std)
printf("%sの点数:%d\n",subject[i],mark[i]);
}
int main(int argc, char *argv[])
{
int mark[6];
int i;
char name[64];
printf("名前:");
scanf("%s",name);
for(i=0; i<6; i++)
{
printf("%sの点数:",subject[i]);
scanf("%d",&mark[i]);
}
printf("%sさんの%d点以上の科目は\n",name,mark[5]);
search(mark, mark[5]);
return 0;
}
>>157 訂正
void func2(int n)
{
int i;
for(i = 2; i<=2*n; i+=2)
printf("%d,",i);
}
163 :
デフォルトの名無しさん :2006/11/08(水) 16:47:47
>>154 こんなんどうだべ?環境依存だけんども。
#include <stdio.h>
#define 科目数 5
char* kamoku[科目数] = {"国語", "数学", "社会", "理科", "英語"};
void search(int* mark, int std)
{
int i;
char* name = (char*) mark[5];
printf("名前 : %s\n", name);
for(i=0; i!=科目数; i++)
if(mark[i] >= std)
printf("%s : %d点\n", kamoku[i], mark[i]);
}
int main(void){
int i;
int mark[科目数+1];
char name[] = "与太郎";
for(i=0; i!=科目数; i++){
printf("%s 点数>", kamoku[i]); scanf("%d", &mark[i]);
}
mark[5] = (int) name;
search(mark, 50);
return 0;
}
これはひどい
チーズフォンデュ吹いた
気持ち悪い、キモイじゃなくて気持ち悪い
変数名にローマ字を使う人っていまだにいるんだなぁ
168 :
デフォルトの名無しさん :2006/11/08(水) 17:13:28
>>167 業務プログラムを作ってごらん
ローマ字だらけのプログラムになるから
俺もダメな奴に教えるときは kaisuu とか使うなあ
170 :
デフォルトの名無しさん :2006/11/08(水) 17:32:35
普通、格好良さより読みやすさ重視だべさ。 VC++6.0で通るかは知らんが、こうしたっていいくらいだべ。 #define 科目数 5 #define 末尾 科目数 char* 科目名[科目数] = {"国語", "数学", "社会", "理科", "英語"}; void search(int* mark, int std) { int カウンタ; char* 名前 = (char*) mark[末尾]; printf("名前 : %s\n", 名前); for(カウンタ=0; カウンタ!=科目数; ++カウンタ) if(mark[カウンタ] >= std) printf("%s : %d点\n", 科目名[カウンタ], mark[カウンタ]); }
171 :
154 :2006/11/08(水) 17:32:55
ありがとうございました。
おかげさまで完成できました。
>>163 さんのは勉強に使わせていただきました。
[1] 授業単元:画像処理演習 [2] 問題文(含コード&リンク): jpg画像をファイルから読み込み、それを拡大縮小できるようにし、拡大(または縮小)した画像をjpgで保存するプログラムを作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:2006/11/13 [5] その他の制限: よろしくお願いします
>>173 それは自分でデコードするのか?
それともlibjpegとか使っていいの?
>>175 出来なくもないし画像処理演習
なんだからやっても何の不思議もない
177 :
173 :2006/11/08(水) 19:40:03
>>177 できればとかじゃなくて宿題でどういう指示が出たかが問題なんじゃないの
教員が想定してないレベルの宿題を他人に作らせると後々ややこしくなるだけだぜ
180 :
173 :2006/11/08(水) 19:54:00
ごちゃごちゃうっせーな 完成品のプログラムを見てヒントもらいたいだけだ 拡大縮小処理もたぶんできてる libjpeg使ってもいいから早くやって下さい
>>47 #include <stdio.h>
int kaijo(int n) {
if (!n) return 1;
else return n * kaijo(n - 1);
}
double mycos(double x) {
int i, s = -1;
double r = 1, xn = x * x;
for (i = 2; i <= 10; i += 2, xn *= x * x, s *= -1) {
r += s * xn / kaijo(i);
}
return r;
}
double mysin(double x) {
int i, s = -1;
double r = x, xn = x * x * x;
for (i = 3; i <= 11; i += 2, xn *= x * x, s *= -1) {
r += s * xn / kaijo(i);
}
return r;
}
int main(void) {
int i;
printf("x cos sin\n");
for (i = -28; i != 29; i++)
printf("% .1f % .8f % .8f\n", i / 10., mycos(i / 10.), mysin(i / 10.));
}
183 :
173 :2006/11/08(水) 20:20:36
177と180は偽物です。
ライブラリ?は必要なら使ってもよいと思います。
画像の拡大縮小の仕方もわかりません。
>>181 リンク先のプログラムを見てみましたが、どう修正すればいいのかわかりません。
よろしくお願いします。
184 :
デフォルトの名無しさん :2006/11/08(水) 20:58:11
[1] 授業単元: 画像処理 [2] 問題文(含コード&リンク):細線化しなさい [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: VC++ MFC [5] その他の制限:ゲットピクセルで8近傍を取得して、それの結果で注目点を白にするか黒にするかを決める。 8近傍はd[7]にGet8関数を使って取得。d[0]は注目点の右側でそこから反時計回りで1,2,3とかわっていく。 で、今Get8はできてます。for(n=0; n<=7; n++) d[i]=get8(n,i,j,CDC) で8近傍がdに格納されます。 画像は2値化画像です。 お願いします><
>>172 こんなんでいいんかな。
void triangle(int data[][Y_SIZE][3], int x1, int y1, int x2, int y2,int x3, int y3){
float x,y;
float dx,dy=0.2;
dx = (float)(x2-x1)/(y2-y1)*dy;
for(x=x1,y=y1;y<=y2;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
dx = (float)(x3-x2)/(y3-y2)*dy;
for(x=x2,y=y2;y<=y3;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
dx = (float)(x3-x1)/(y3-y1)*dy;
for(x=x1,y=y1;y<=y3;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
}
>>184 細線化の対象は黒ドットだけですか?
白も含みますか?
>>186 黒だけでいいです。白地に黒い文字を書いてそれが細線化されるような感じでおねがいします。
>>47 #include <stdio.h>
int kaijo(int i) { return (i>0 ? i * kaijo(i-1) : 1 ); }
double enujo(double x, int n) { return (n>0 ? x * enujo(x, n-1) : 1 ); }
double mycosR(double x, int i) { return (i>0 ? enujo(x,i+i-2)/kaijo(i+i-2) - mycosR(x,i-1) : 0); }
double mycos(double x) { return -mycosR(x,6); }
double mysinR(double x, int i) { return (i>0 ? enujo(x,i+i-1)/kaijo(i+i-1) - mysinR(x,i-1) : 0); }
double mysin(double x) { return -mysinR(x,6); }
main(void) {
double x;
for(x=-2.8;x<=2.8;x+=0.1) printf("%.8f %.8f\n",mycos(x),mysin(x));
}
その宿題の意図するところは再帰関数なんジャマイカ?
>>47 ということは main関数も再帰化したほうがいいのか。
#include <stdio.h>
int kaijo(int i) { return i>0 ? i * kaijo(i-1) : 1 ; }
double enujo(double x, int n) { return n>0 ? x * enujo(x, n-1) : 1 ; }
double mycosR(double x, int i) { return i>0 ? enujo(x,i+i-2)/kaijo(i+i-2) - mycosR(x,i-1) : 0; }
double mycos(double x) { return -mycosR(x,6); }
double mysinR(double x, int i) { return i>0 ? enujo(x,i+i-1)/kaijo(i+i-1) - mysinR(x,i-1) : 0; }
double mysin(double x) { return -mysinR(x,6); }
int mainR(double x) { return x<=2.8 ? printf("%.8f %.8f\n",mycos(x),mysin(x)), mainR(x+0.2) : 1; }
main(void) { mainR(-2.8); }
徹底してるな
191 :
デフォルトの名無しさん :2006/11/08(水) 22:07:52
【質問テンプレ】 [1] 授業単元: ポインタ [2] 問題文(含コード&リンク): 文字型配列の先頭アドレスを受け取り、文字列内の文字を昇順にソート する関数void sort_ch()を作成せよ。 [3] 環境 [3.1] OS: /Linux/ [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: どちらでも可 [4] 期限: 今週いっぱい [5] その他の制限: ポインタを習っています。
>>191 バブルソートでよければ
void sort_ch( char *Input, int length )
{
int No;
for(No=0; No < length-1; No++ ){
if( Input[No] > Input[No+1] ){
swap( &Input[No], &Input[No+1] );
}
}
if(length > 2){
sort_ch( Input, length-1 );
}
}
void swap( char *i, char *j )
{
char Buff;
Buff = *i;
*i = *j;
*j = Buff;
}
193 :
デフォルトの名無しさん :2006/11/08(水) 22:17:32
バブルソートってなんですか・・
なんですかと言われても、、
>>192 がバブルソートだよ。
つかググれ、その方が早いから。
ソート法の一種 あんま早くないけど安定 これくらいの理解でいいんだろうか
197 :
デフォルトの名無しさん :2006/11/08(水) 22:43:36
奴が求めてるポインタを使って答えようか
198 :
OS :2006/11/08(水) 22:54:52
[1] 授業単元: オペレーティングシステム [2] 問題文(含コード&リンク): 第4回課題 セルオートマトンの動作推移を表現する。 ・渋滞の様子をC++を使って表現する。 ・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。) ・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。) ・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。 以下に、例を示す。 問題 □□■□■□が与えられるとする。 t=1 □■□■□□ t=2 ■□■□□□ t=3 □■□□□□ t=4 ■□□□□□ 終了
199 :
OS :2006/11/08(水) 22:55:25
また、今後 □□■ は □■□ となるが、 ■□■ は ■■□ となる左側で止めてしまう場合があるのです。 この問題は、渋滞の研究に使うものなので、□は、動ける場所、■は、渋滞していて動けない場所というものです。 ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。 発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。 nは、コマンドラインから入力。(入力方式は問わない。) (例) t=1 ■□■ t=2 ■■□ t=3 ■■□ t=4 ■■□ t=5 ■□□ この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C、C++ (出来ればC++が望ましい。) [4] 期限: 2006年11月9日 23:59まで(出来れば23時まで。) [5] その他の制限: 特になし
200 :
デフォルトの名無しさん :2006/11/08(水) 23:15:11
超初心者ですみません・・ 本当に困っているので、助けてください・・・ 解説的なものをつけていただけたら幸いです・・ 【質問テンプレ】 [1] 授業単元: ポインタ [2] 問題文(含コード&リンク): 名前(char),身長(double),体重(double)、視力(視力構造体)これらのデータをメンバとする 構造体を定義し、入力と表示を行うプログラムを作成しなさい。 入力件数は最大5件で、名前は19文字までの入力とし、範囲外だったのならば エラーメッセージを表示し再入力させてください。名前に"END"が入力されたときは 入力終了とする。表示は身長で昇順にソートして出力。 また、身長、体重は小数点以下第一位までの表示とする。視力は小数点以下第三位までの表示とする。 出力の幅は、名前が19文字分、その他は5文字分で指定してください。 視力は右()、左()をメンバとする構造体でで扱ってください。 1件分の入力はinput_data()で、表示はdisplay_data()で、ソートはsort_data()でと処理を関数に分けて行ってください。 名前入力の最初に"END"が入力された場合は、"Input data is nothing!"と出力しなさい。 [3] 環境 [3.1] OS: /Linux/ [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: どちらでも可 [4] 期限: 今週いっぱい [5] その他の制限: 構造体を習っています。
[1] 授業単元:C言語講義 [2] 問題文(含コード&リンク): #include <stdio.h> #include <string.h> #define MAX 10 int main(void) {char a[MAX]=""; char b[MAX]=""; char c[MAX]="Hello"; strcpy(a, c); strcpy(b, "Good Bye"); printf("%s,%s,%s\n", a, b, c); return 0;} このプログラムのbのサイズを1にして実行した時 なぜ実行結果がこのようになるか説明しなさい。 まず、お聞きしたいのが、bのサイズを1にするとは、 char b[MAX]=""; を char b[1]=""; とすれば良いのですよね? この実行結果は ood Bye,Good Bye,Hello となりましたが、 なぜ、aにHelloではなくGoodbyeが入ってるのですか? プログラム的にこのようになるのは、おかしい気がするのですが…。 また、なぜGoodbyeのGが消えているのでしょうか? [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日の朝9時まで [5] その他の制限: なし
202 :
デフォルトの名無しさん :2006/11/08(水) 23:19:16
>>201 説明が求められてるだけ、ですよね。
ならバッファオーバーランでググってみれば良いと思う。
203 :
わからないんです。 :2006/11/08(水) 23:25:56
OSがAIXで Oracle10を使用したC言語(ProC)について聞いてもよろしいですか? 簡単に言うと、子プロセスがsystem関数で実行したシェル内で別のシェルを実行した場合に戻り値が取得できないんですが。 Oracleにコネクトしないと取得できるのですが。
む、今アップローダー落ちてるか?
>>191 再帰関数でよければ・・・
#include <stdio.h>
char *sort(char *c){return *(c+1)!=0?sort(c+1),(*c>*(c+1) ? *c^=*(c+1),*(c+1)^=*c,*c^=*(c+1):c),sort(c+1):c;}
void sort_ch(char *c){return sort(c);}
main (void) {
char s[32]="/tech/1162771475/";
sort_ch(s);
printf("%s\n",s);
}
>>206 なんか、voidなのに間違えてreturnしてるけど、
それは問題文がvoid指定されていなければもっと簡略化できたのに
という怨念みたいなもの。
208 :
デフォルトの名無しさん :2006/11/08(水) 23:38:40
[1] 授業単元:プロブラミング [2] 問題文(含コード&リンク): sin(x)の値をマクローリン展開を用いて計算するプログラムを作成せよ。第20項まで求めることとする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11/11 [5] その他の制限:ヒントΣ[n=0→∞]{(-1)^n1}x^2n+1/(2n+1)! 単位はラジアン
[1]C言語プログラミングB [2] 今回はファイル入出力の応用で、 ファイルの簡単な暗号化及び複合化を行うプログラムを作成する。 暗号化は改行以外の文字のアスキーコードに1を足す 複合化はその逆の動作を行うこと 引数の2番目が暗号化と複合化のどちらかを決定、 3番目が入力ファイル名を示し、 4番目が出力ファイル名を示す 上記のようなプログラムを作成せよ [3]OS:Linux コンパイラ:gcc3.4 言語:C [4]明日 [5]関数・ポインタ・構造体・ファイル入出力まで学びました
210 :
201 :2006/11/08(水) 23:46:21
>>202 レスありがとうございます。
とりあえず、ぐぐってみましたが、自分と同じような例は、なかったです。
説明と言っても、そこまで詳しく説明しなくても問題ないです。
とりあえず、201で自分がした質問
>まず、お聞きしたいのが、bのサイズを1にするとは、
>char b[MAX]=""; を char b[1]=""; とすれば良いのですよね?
>この実行結果は ood Bye,Good Bye,Hello となりましたが、
>なぜ、aにHelloではなくGoodbyeが入ってるのですか?
>プログラム的にこのようになるのは、おかしい気がするのですが…。
>また、なぜGoodbyeのGが消えているのでしょうか?
の回答を頂ければ、それをヒントに自分で説明できそうです。
>>210 printf("%p %p %p\n", a, b, c);
212 :
201 :2006/11/08(水) 23:52:08
>>211 レスありがとうございます。
実行しアドレスを調べてみましたが、全部バラバラでした。
このことから何かが読み取れそうですが、解らないです…。
>>201 printf("%X %X %X\n",a,b,c);で各々のアドレスを調べてみよう
bのサイズがMAXの時、俺の環境だと
22FF60 22FF50 22FF40
となる
bのサイズが1のときは
22FF60 22FF5F 22FF40
これのダンプをちと書くと
b=MAX
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
22FF40 48 65 6C 6C 6F 00
22FF50 47 6F 6F 64 20 42 79 65 00
22FF60 48 65 6C 6C 6F 00
b=1
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
22FF40 48 65 6C 6C 6F 00
22FF50 47
22FF60 6F 6F 64 20 42 79 65 00
48 65 6C 6C 6F 00は"Hello"、47 6F 6F 64 20 42 79 65 00は"Good Bye"
なんか書くのが面倒になってきたけどようはstrcpy(b, "Good Bye");によって
aの一部が上書きされちまったってわけ
文字のおわりは00で判断するから
b = "Good Bye"
a = "ood Bye"
になるわけ
214 :
デフォルトの名無しさん :2006/11/09(木) 00:04:54
[1] 授業単元:計算機化学 [2] 問題文(含コード&リンク): //モンテカルロ法でパイを求める #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; int () { double p,pai,x,y; unsigned int k,n,count; count=0; cout<<"試行の回数"<<endl; cin>>n; srand((unsigned int)time(0)); for(k=0;k=n;k++) //1以下の乱数を出す x=(double)rand()/(double)RAND_MAX; y=(double)rand()/(double)RAND_MAX; if(x*x+y*y>1)continue; else(count=count+1) p=(double)count/n; pai=p*4.0; cout<<"paiの値は"<<pai; return 0; } これで実行すると エラー E2040 2.cpp 6: 宣言が正しく終了していない と、出るんですが6行目のどこを直せばいいのでしょうか。 くだらない質問かもしれませんが、よろしくお願いします。 [3]Windows XP 、Borland C++ 5.5.1 、C++ [4] 期限:無期限
×文字のおわり ○文字列のおわり
>>214 ×int()
○int main()
なんだよこのミス
ありえねぇだろ
217 :
214 :2006/11/09(木) 00:18:44
>>216 ありがとうございます。
次のエラーに変わったんですけど、どう直したらいいでしょうか。
警告 W8060 2.cpp 14: おそらく不正な代入(関数 main() )
エラー E2033 2.cpp 18: continue の位置が誤っている(関数 main() )
エラー E2379 2.cpp 20: ステートメントにセミコロン(;)がない(関数 main() )
プログラムを勉強し始めたばかりで何もわからないので、ヒントだけでもお願いしますm(__)m
>>208 #include <stdio.h>
double d(double x, double n) {
return n == 0 ? x : -x * x * d(x, n - 1) / (2 * n + 1) / (2 * n);
}
double mysin(double x) {
int i;
double r = 0.;
for (i = 0; i < 20; i++) r += d(x, i);
return r;
}
int main(void) {
double i;
for (i = 0.; i <= 3.1415926535898; i += 0.31415926535898) printf("%f\n", mysin(i));
}
220 :
デフォルトの名無しさん :2006/11/09(木) 00:27:11
>>214 多分、計算機化学は計算機科学になおさないと
コンパイルエラーになるんじゃないか?
>>214 かっことかせみころんとか、いろいろあるだろう、なぁおい。
>>217 よく眺めるんだな
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
double x, y;
int n, count = 0;
cout << "試行の回数" << endl;
cin >> n;
srand(static_cast<unsigned int>(time(0)));
for (int i = 0; i < n; ++i) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x * x + y * y < 1) ++count;
}
cout << "piの値は" << count * 4.0 / n;
return 0;
}
#include <iostream> #include <cmath> using namespace std; double monte_carlo(){return M_PI} int main() { cout << "piの値は" << monte_carlo(); return 0; } モンテカルロ法ならこっちのほうが簡潔だぜ
224 :
209 :2006/11/09(木) 00:54:30
さっさと回答出してくださいよ屑ども
>>223 モンテカルロ法でそこまで高速・高精度に計算するとはお前天才だな
>>209 書いたけど、アップローダが死んでるぽいから、代わりのURLちょうだい。
>>223 は?お前馬鹿だな!入力とらないとばれるだろ?
228 :
214 :2006/11/09(木) 01:27:26
>>220 計算機科学ではなく、計算機化学という授業名なんです。
>>221 ,222
プログラム作れました。
乱数を用いた例として授業で示されたものだったのですが
知識がないので、わからなくて質問させて頂きました。
ありがとうございましたm(__)m
229 :
226 :2006/11/09(木) 02:03:02
>>209 もう寝る。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
if( argc != 4 ) {printf("Usage : command [e|d] [infile] [outfile]\n") ;}
else {if( 0 == (strcmp(argv[1],"e")) ) {encode(argv[2], argv[3]) ; }
else if(0 == ( strcmp(argv[1],"d")) ) {decode(argv[2], argv[3]) ;}
else {printf("オプションの指定が間違っています。\n") ; }}
return(0) ;
}
int encode(char *iname, char *oname){
FILE *infp, *outfp ;
char c ;
if( NULL == (infp = fopen(iname,"r")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
else {if( NULL == (outfp = fopen(oname, "w")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
while( EOF != (c = getc(infp)) ) {putc((c=='\n'?c:c+1), outfp) ;}}
return(0) ;
}
int decode(char *iname, char *oname){
FILE *infp, *outfp ;
char c ;
if( NULL == (infp = fopen(iname,"r")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ;exit(1) ;}
else {if( NULL == (outfp = fopen(oname, "w")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
while( EOF != (c = getc(infp)) ) { putc((c=='\n'?c:c-1), outfp) ; }}
return(0) ;
}
230 :
226 :2006/11/09(木) 02:04:19
書き忘れてた。 コマンド名 e 入力ファイル 出力ファイルで暗号化 コマンド名 d 入力ファイル 出力ファイルで復号化ね。 やっつけだけど。
>>116 これでおk?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *func(const char *a, const char *b, const char *c){
char *pb, *pc, *temp, *ret;
int i, keylen;
pb=strstr(a, b);
pc=strstr(a, c);
if(pb==NULL || pc==NULL)
return NULL;
keylen=strlen(b);
if(pb>pc){
temp=pb;pb=pc;pc=temp; // swap(pb, pc)
keylen=strlen(c);
}
if(keylen>=pc-pb) return NULL;
ret=malloc(pc-pb-keylen+1);
for(i=0;i<pc-pb-keylen;i++)
ret[i]=pb[keylen+i];
ret[i]='\0';
return ret;
}
int main(void){
printf("%s\n", func("futongafuttonda", "utton", "uton"));
return 0;
}
232 :
60 :2006/11/09(木) 02:45:18
自力でなんとかなりました 変数の初期化のループに誤りがあったようです
>>200 #include<stdio.h> #include<string.h> #define MAX 5 typedef struct { double
l_eyesight; /*左視力*/ double r_eyesight; /*右視力*/} Eyesight; typedef struct
{char name[20]; /*名前*/ double height; /*身長*/ double weight; /*体重*/
Eyesight eyesight; /*視力*/ } Data; void input_data(Data *, int *); void
display_data(Data *, int *); void sort_data(Data *, int *); int main(){ int *i;
Data data[MAX], x; input_data(data, i); sort_data(data, i); display_data(data,
i); return 0; } /*入力処理*/ void input_data(Data *data, int *n){ char *name;
int i; *n = 0; for (i = 0; i < MAX; i++){ do{ printf("名前:"); scanf("%s",
name); if (strlen(name) > 19){ printf("名前が長すぎです\n"); } else {
strcpy(data[i].name, name); break; } }while(1); if ((strcmp(data[i].name, "END"
) == 0) | (strcmp(data[i].name, "end") == 0)){ if (i == 0){ printf
("Input data is nothing!"); exit(0); } else{ break; }} printf("身長:");
scanf("%lf", &data[i].height); printf("体重:"); scanf("%lf", &data[i].weight);
printf("視力(左):"); scanf("%lf", &data[i].eyesight.l_eyesight);
printf("視力(右):"); scanf("%lf", &data[i].eyesight.r_eyesight); } *n = i; }
/*ソート*/void sort_data(Data *data, int *n){int i, j;Data temp;for (i
= 0;i < *n - 1; i++)for (j = *n - 1; j > i; j--)if (data[j-1].height >
data[j].height){temp = data[j-1]; data[j-1] = data[j]; data[j] = temp; }}
/*表示*/void display_data(Data *data, int *n){int i;for (i = 0; i < *n; i++){
printf("名前:%-19s 身長:%6.1f 体重:%6.1f 視力(左):%6.3f 視力(右):%6.3f\n",
data->name, data->height, data->weight, data->eyesight.l_eyesight,
data->eyesight.l_eyesight); data += 1;} }
>>208 やってることは219と一緒
課題の内容として「xが0近傍の方が誤差は少ない」ってことを学習するためにやってるなら必要ないけど
単純に精度出したい時はmysin内のコメント外してmynorm使ってください
mainは219と同じ物使うなり適当に
#include <math.h>
//#include <stdio.h>
double mynorm(double x){
/*xを-2π〜+2πにする*/
x=fmod(x,M_PI*2);
/*xを-π〜+πにする*/
if(x<-M_PI)x=x+M_PI*2;
else if(x>M_PI)x=x-M_PI*2;
/*xを-π/2〜+π/2にする*/
if(x>M_PI_2)x=M_PI-x;
else if(x<-1*M_PI_2)x=-M_PI-x;
return x;
}
double mysin(double x){
double x2=x*x,y=1;
int i;
//x=mynorm(x);
for(i=39;i>=3;i=i-2){
y=1-x2*y/(i*(i-1));
}
y=x*y;
return y;
}
[1]C言語プログラミング [2] 問4 引数に3つのファイル名を取ると、最初の二つのファイルを結合し、 3つめのファイルに保存するプログラムを作成せよ -実行例- % cat text01.txt good morning!! % cat text02.txt good bye!! % ./a-2 text01.txt text02.txt text03.txt % cat text03.txt good morning!! good bye!! [3]OS:Win/Linux コンパイラ:VC/gcc3.4 言語:C [4]あと2時間ほどです; [5]ポインタを終えてファイル入出力まで学びました よろしくお願いします
>>235 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv){if (argc < 4) return 1;char buf[1000];sprintf(buf, "/bin/cat '%s' '%s' > '%s'", argv[1], argv[2], argv[3]);return system(buf) >> 8;}
[1] 授業単元:Cプロ入門演習2 [2] 問題文(含コード&リンク): キーボードから指定した範囲の素数の合計を求める関数を作成し、プログラムを完成させよ プリントのほうには指定した範囲内の素数も表示されています [3] 環境 [3.1] OS: XPSP2 [3.2] study C [3.3] C [4] 明日まで [5] その他の制限:引数、戻り値まで習いました
>>239 >>150 のだと1が表示されないのですがどこを変えればいいんでしょうか
あともう一問お願いします
[2] 問題文(含コード&リンク):
5人の学生の点数を読み込み、得点の高い順に並び替え、右のような得点グラフを作成せよ。
得点グラフは「#」は10点、「*」は1点に相当する。
条件:並び替えを行う関数と、引数として得点を受け取り、得点に応じたグラフを書く関数を
作成してプログラムを完成させなさい
例
1人目 >> 54
2人目 >> 67
3人目 >> 75
4人目 >> 92
5人目 >> 33
----------------------------
得点グラフ
----------------------------
第1位 (92点): #########**
第2位 (75点): #######*****
第3位 (67点): ######*******
第4位 (54点): #####****
第5位 (33点): ###***
>>240 1も素数してあげたいけど、都合があってゴメン
>
>>150 のだと1が表示されないのですがどこを変えればいいんでしょうか
「素数の定義」を変える必要があります。
>>240 素数(そすう)とは、1とその数自身以外に正の約数を持たない(つまり1とその数以外のどんな自然数によっても割り切れない)、1 より大きな自然数のことである。
あれ、でもプリントには1がでてる・・・ 間違いって事でいいのかな・・・
ええい教師のせいにするな見苦しい
1を素数と言うことにしてしまうと、素因数分解が発散してしまうので定義上、素数と認められない。 Ex. 6 = 3 * 2 * 1 * 1 * 1 * ....
247 :
デフォルトの名無しさん :2006/11/09(木) 19:07:59
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ. [実行例] 文字列を入力してください:japan 反転文字列は"napaj"です. [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VisualStudo.net2003 [3.3] 言語: C [4] 期限: 11月12日 [5] その他の制限: お願いします
>>247 strrev(char* str, int n)
{
char* p;
for(p = str+n; p != str; p--)
putchar(*p);
}
配列いじるなら char* strrev(char* str, int n) { char* p; for(p = str+n; p > str; p--,str++) *str = *p; }
>>247 #include <stdio.h>
#include <string.h>
void reversePrint(const char * p) {if (* p != '\0') {reversePrint(p + 1); putchar(* p);}}
int main() {char buf[1000]; if (fgets(buf, sizeof(buf), stdin) != NULL) {* strchr(buf, '\n') = '\0'; reversePrint(buf);} return 0;}
>>248 ・戻り値の型がない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている
・更に、最初の一文字が出力されない。
>>249 ・戻り値を戻していない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている
ダメすぎ
能無しは書くなってやつだな
>>252 ぶっちゃけここに宿題持ち込むようなクズの宿題がどうなろうとどうでもよくね
ここは能無しがクズの宿題利用して練習するスレだろ
まぁおちつけ
256 :
251 :2006/11/09(木) 19:36:49
>>253 あ、ほんとだ。それどころじゃねぇや。
>>250 ・再帰でやるか、再帰でw
・リダイレクトで改行のないテキスト食わせるとぬるぽ
・わざわざ4行にまとめなくていいよ……
奇を衒い過ぎw
>・リダイレクトで改行のないテキスト食わせるとぬるぽ どういう事? 別に問題無いように思えるけど。
>>206 これでどうしてソーティングになるのかイマイチわからん。
>>246 その式は全く発散してないけど?「発散」を普通と違う意味で使ってるの?
1 を素数とする場合に問題になるのは一意性。
1 を素数としない場合の素因数分解では「順番を除いて一意」という性質が成り立つ。
1 を素数とする場合は 「順番と1倍を除いて一意」という言い方をしないといけない。
ただ、一般の場合は後者のほうが使いやすく、例えば
負の数の素因数分解は「-1倍を除いて一意」という言い方になり、
実係数多項式の素因数分解は「定数倍を除いて一意」という言い方になる。
[1] 授業単元: メディア基礎 [2] 問題文(含コード&リンク): 配列にデータを10個読み込み、次いで、その中 で最大のものを求め、その値を書き出すプログラムを 作成せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: 知りません [3.3] 言語:C++ [4] 期限: 本日まで [5] その他の制限: 特になし お、お願いしますorz
261 :
デフォルトの名無しさん :2006/11/09(木) 20:41:48
[1] 授業単元:情報処理U [2] 問題文(含コード&リンク):2を底とするlogを計算するプログラムを作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年11月10日まで [5] その他の制限:なし お願いします。
>>261 #include <stdio.h>
#include <math.h>
main(){
double x,y;
scanf("%d",&x);
y=log(x)/log(2);
printf("%f",y);
}
263 :
デフォルトの名無しさん :2006/11/09(木) 20:51:09
>>260 こんなんでどうだべか。
変数名も絶対に他の人と被らない様にしてある親切設計。
#include<iostream>
int main()
{
int hailine[10];
int mostdai = 0;
for(int i=0; i!=10; i++){
std::cout << "数値" << i << " >";
std::cin >> hailine[i];
if(mostdai < hailine[i])
mostdai = hailine[i];
}
std::cout << "最大は" << mostdai << std::endl;
return 0;
}
264 :
260 :2006/11/09(木) 21:03:44
>>263 std::cout std::endl
ってのはまだ習ってないんで、
入力するときに使う物をscanf
表示するときに使う物をprintf
にする場合どうしたらいいですかね?
>>263 与えられる10個の数値が全て負のときには…
266 :
260 :2006/11/09(木) 21:12:31
>>264 それもしかして、C++じゃなくてただのCだったりしないか?
268 :
デフォルトの名無しさん :2006/11/09(木) 21:19:19
>>264 オラの裏を書くとは、オメさてはプロだな?
#include <cstdio>
int main()
{
int highretu[10];
int saibig = 0;
printf("負数は入力しちゃダメ\n");
for(int i=0; i!=10; i++)
scanf("%d", &highretu[i]);
if(saibig<highretu[i])
saibig<highretu[i];
}
printf("最大は%d\n", saibig);
return 0;
}
>>268 if(saibig<highretu[i])
saibig<highretu[i];
↓
if(i==0 || saibig<highretu[i])
saibig=highretu[i];
じゃね?
270 :
デフォルトの名無しさん :2006/11/09(木) 21:43:12
[1] 授業単元: プログラミング演習U [2] 問題文(含コード&リンク): 入力した文字列から指定した文字を検索するプログラムをポインタ変数を用いて作成せよ. [実行例] 文字列を入力してください:Exercise 検索文字を入力してください:e 文字列"Exercise"に"e"は 3番目 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:visualstudio2003 [3.3] 言語: C [4] 期限: 11月11日 [5] その他の制限: よく考えたけど分かりませんでした。 どなたかお願いします。
271 :
デフォルトの名無しさん :2006/11/09(木) 21:47:01
1] 授業単元: プログラミング [2] 問題文: 1.入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ. 2.入力した文字列から指定した文字を検索するプログラムをポインタ変数を用いて作成せよ. [実行例] 文字列を入力してください:Exercise 検索文字を入力してください:e 文字列"Exercise"に"e"は 3番目 8番目 にあります. 文字列を入力してください:Exercise 検索文字を入力してください:a そんな文字は入っていない! [3] 環境 [3.1] OS:Windowsxp [3.3] 言語:C++ [4] 期限:明日の午前中 よろしくお願いします。
>>270 ポインタ使えばいいんだな
#include <stdio.h>
#include <string.h>
int main() {
char str[128], str2[128];
char *p;
printf("文字列を入力してください:");
scanf("%s\n", str);
printf("検索文字を入力してください:");
scanf("%s", str2);
p = strstr(str, str2);
printf("文字列\"%s\"に\"%s\"は\n%d番目", str, str2, p-str+1);
return 0;
}
>>273 よっしゃおまいは正しいぞ!
ただちょっと天邪鬼さんだったな
[1] 授業単元: Cプログラミング演習2 [2] 問題文(含コード&リンク): 5人の学生の点数を読み込み、得点の高い順に並び替え、右のような得点グラフを作成せよ。 得点グラフは「#」は10点、「*」は1点に相当する。 条件:並び替えを行う関数と、引数として得点を受け取り、得点に応じたグラフを書く関数を 作成してプログラムを完成させなさい 例 1人目 >> 54 2人目 >> 67 3人目 >> 75 4人目 >> 92 5人目 >> 33 ---------------------------- 得点グラフ ---------------------------- 第1位 (92点): #########** 第2位 (75点): #######***** 第3位 (67点): ######******* 第4位 (54点): #####**** 第5位 (33点): ###*** [3] 環境 [3.1] OS: XPSP2 [3.3] C [4] 明日まで [5] その他の制限:引数、戻り値まで習いました
似たような問題ばっかだしFAQ作ったら50%は解決しそうだなあと思ったが 万が一にもこいつらがFAQなんか読むわけが無いことに気がついた
まとめサイトでもあればいいのに
>>275 #include<stdio.h>
#include<stdlib.h>
int score_cmp(const void *a, const void *b){
const int *pa, *pb;
pa=a;pb=b;
return *pb-*pa;
}
int main(void){
int i, score[5];
for(i=0;i<5;i++){
printf("%d人目 >> ", i+1);
scanf("%d", &score[i]);
}
qsort(score, sizeof(score)/sizeof(score[0]), sizeof(score[0]), score_cmp);
printf("----------------------------\n");
printf(" 得点グラフ \n");
printf("----------------------------\n");
for(i=0;i<5;i++){
printf("第%d位 (%3d点): ", i+1, score[i]);
for(;score[i]>=10;score[i]-=10) printf("#");
for(;score[i]>0;score[i]--) printf("*");
printf("\n");
}
return 0;
}
279 :
278 :2006/11/09(木) 22:18:57
qsort(score, sizeof(score)/sizeof(score[0]), sizeof(score[0]), score_cmp); ↓ qsort(score, 5, sizeof(int), score_cmp);
>>278 まさかqsort使ってくるとは思わなかったぜ
俺たちはシェフじゃないんだからもっと初心者向きになりませんかといわれても困るぜ
283 :
278 :2006/11/09(木) 22:45:11
>>278 を変更
qsort(score, sizeof(score)/sizeof(score[0]), sizeof(score[0]), score_cmp);
↓
for(i=0;i<5-1;i++){
int j, temp;
for(j=i+1;j<5;j++){
if(score[i]<score[j]){
temp=score[i];
score[i]=score[j];
score[j]=temp;
}
}
}
284 :
デフォルトの名無しさん :2006/11/09(木) 22:47:18
[1] 授業単元:応用プログラミング [2] 問題文(含コード&リンク): 入力した文字列のアルファベットをカウントするプログラムをポインタ変数を用いて作成せよ. [実行例] 文字列を入力してください:Programming2 アルファベットの数 A or a --> 1 G or g --> 2 I or i --> 1 M or m --> 2 N or n --> 1 O or o --> 1 P or p --> 1 R or r --> 2 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Sudio.NET2003 [3.3] 言語: C [4] 期限: 2006年11月14日 [5] その他の制限: よろしくお願いします。
>>280 こんなんどう?
#include<stdio.h>
double f_n_0(int n){ /* f(0) (=sin(0)) の n 回微分 */
if(n%4==1) return 1.0;
if(n%4==3) return -1.0;
return 0.0;
}
double f(double x){
double value, x_beki_n=1.0, n_kaijo=1.0;
int n;
value=f_n_0(0);
for(n=1;n<20;n++){
x_beki_n*=x;
n_kaijo*=n;
value+=f_n_0(n)*x_beki_n/n_kaijo;
}
return value;
}
int main(void){
double x;
for(x=0;x<3.141592*2;x+=3.141592/6)
printf("f(%f)=%f\n", x, f(x));
return 0;
}
>>280 シェフの気まぐれプログラミング初心者風
mysineをこれに差し替えろ
オーバーフローしてもそれは仕様です
double mysin(double x){
return x-x*x*x/(3*2)+x*x*x*x*x/(5*4*3*2) -x*x*x*x*x*x*x/(7*6*5*4*3*2)+x*x*x*x*x*x*x*x*x/(9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x/(11*10*9*8*7*6*5*4*3*2)+x*x*x*x*x*x*x*x*x*x*x*x*x/(13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(35*34*33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(37*36*35*34*33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(39*38*37*36*35*34*33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
}
なにそのコンパイラのバグ探しのためのようなコード
>>287 この解答を見てしまったときの教師の精神状態を想像して吹いた
>>284 #include<stdio.h>
#include<ctype.h>
int main(void){
int count[26]={};
char buf[512], *p;
int i;
printf("文字列を入力してください:");
gets(buf);
for(p=buf;*p!='\0';p++){
if(isalpha(*p))
count[toupper(*p)-'A']++;
}
printf("\nアルファベットの数\n");
for(i=0;i<26;i++)
if(count[i]>0)
printf("%c or %c --> %d\n", 'A'+i, 'a'+i, count[i]);
return 0;
}
292 :
デフォルトの名無しさん :2006/11/09(木) 23:34:49
一応、定石通りなんだろうケド・・・
>>258 swap(a,b) は
a^=b;
b^=a;
a^=b;
と書くことが出来る。a^=b は a=a xor b な。
>>293 それ初学者に示す場合には、a と b が同じ変数の場合にNGとなることも教えた方がいい。
>>293 だからだめだって。
a==bの時に0になっちまうだろうが。
>>295 そうじゃなくて &a==&b の時でしょ
>>293 こんな方法があったんだ、正直感動した。
>>293 書けねーよ
定期的に沸くな、こういうアホ
[1] 授業単元:アルゴリズム概論
[2] 問題文(含コード&リンク):
&dで指定したp->dataを削除するように、???の部分を埋めなさい。
変数を新たに追加してもかまわない。なお、消し終えた部分の
p->nextはfree();を使って開放すること。さらに、p->dataは???
の部分で使えない事とする。基本的に???の部分(と変数追加)のみ改造すること。
解答は???の部分だけ提出すること。
問題文↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2910.txt [3] 環境
[3.1] OS: WindowsXP(HomeSP2)
[3.2] コンパイラ名とバージョン: Visual Sudio.NET2005(C++)
[3.3] 言語: C言語
[4] 期限: 2006年11月10日のPM5:00まで
[5] その他の制限:全然分からなくて素で困っていますorzお願いしますorz
こんな寝静まる時間に…
302 :
300 :2006/11/10(金) 00:43:23
ってWhile文の中が違っていたorz while(d1>0 && d2>0)ではなくて、while(d>0)だったorz
303 :
デフォルトの名無しさん :2006/11/10(金) 00:59:28
>>302 p = start;
while (p->next != NULL)
{
if(p -> data == d)
{
tmp->next = p->next;
free(p);
break;
}
tmp = p;
p = p->next;
}
こんなんでいいんかな?
304 :
303 :2006/11/10(金) 01:01:32
訂正。 while (p != NULL)
#include<stddef.h> tmp = (struct node*)((char*)&start - offsetof(struct node, next));
306 :
デフォルトの名無しさん :2006/11/10(金) 01:41:13
>>271 #include <stdio.h> #include <string.h> int main() { char *str; char p;
int i = 0,j; printf("文字列を入力してください:"); scanf("%s", str);
printf("検索文字を入力してください:"); scanf("%1s", &p); /*反転表示*/ while(1){
if (*(str + i) == '\0'){ i--; break; } else i++; } printf("反転表示:");
for (;i >= 0; i--) printf("%c",*(str + i)); printf("\n\n"); /*検索*/
printf("文字列\"%s\"に\"%s\"は\n", str, &p); for(i = 0, j = 0; *(str + i); i++)
if (*(str + i) == p){ printf("%d番目です\n", i + 1); j++; } if (!j)
printf("ありません\n"); else printf("にあります.\n"); return 0;}
307 :
219 :2006/11/10(金) 02:01:59
>>278 問題文もまともに読めない奴に限ってくだらないことしたがるんだな。
>引数として得点を受け取り、得点に応じたグラフを書く関数
310 :
デフォルトの名無しさん :2006/11/10(金) 02:37:28
[1] 授業単元:ファイルからの入力・構造体 [2] 問題文 ファイル「kyotocity.txt」には、 京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されている。 これらの情報を格納する構造体 struct division を宣言しなさい。 struct division { char name[20]; int population; double area; } struct division型の配列 kyoto[11]を用意し、 ファイルからデータを読んで、配列に入力しなさい。 入力した構造体の配列を調べて、以下の情報を出力しなさい。 人口が最大の区と最小の区の、名前と人口。 面積が最大の区と最小の区の、名前と面積。 人口密度が最大の区と最小の区の、名前と人口密度。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio.NET2003 [3.3] 言語: C [4] 期限: 2006年11月12日 [5] その他の制限: よろしくお願い致します。
[1] 授業単元:プログラミング実習II [2] 問題文(含コード&リンク): 入力した日の曜日を返す関数を書け。 注意) 1.00年01月01日は月曜日とする。 2.閏年も正しく判定せよ。 3.提出する際は関数を使い、実際に曜日を判定できるプログラムを提出すること 実行例 年月日を入力してください 年:2006 月:11 日:6 2006年11月6日は月曜日です。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Boland C++ 5.5.1 [3.3] 言語: C言語 [4] 期限: 2006年11月12日(日) [5] その他の制限:なし よろしくお願いいたします。
>2.閏年も正しく判定せよ。 この「正しく」ってのは、グレゴリオ歴でいいんかいな?
>>312 再度プリントを確認しましたがその辺の指定はありません。
実行結果も書かなければいけないのですが、それは自分の誕生日です。
なので自分の誕生日が正しく判定できればいいです。
よろしくお願いいたします。
そうなんじゃね?
>>313 あ…どうでもいいですが、判定するのは教授の誕生日の曜日だった…。
教授カワイス
>>316 私の誕生日って書いてあったので、最初は自分自身のかと思ったけど
教授の生年月日が書いてあったので多分、教授のを判定しろって事ですよね…
318 :
デフォルトの名無しさん :2006/11/10(金) 03:18:37
>>300 25行目に int d1=10,d2=10;を挿入し
/* 要素の削除 */
p = tmp = start;
for(i = 0;i < 10 & tmp != NULL; i++)
if (d == (*tmp).data){
if (start == tmp)
start = tmp->next;
else
p->next = tmp->next;
d1--;
free(tmp);
break;
} else {
p = tmp;
tmp = tmp->next;
}
if (d1 == 0)
break;
こんな感じか?
d1とd2の意味がわからなかった。スマン
2000年1月1日ではなく0000年1月1日です
321 :
デフォルトの名無しさん :2006/11/10(金) 07:14:20
>>310 #include <stdio.h> #include <string.h> struct division { char name[20]; int
population; double area; }; int main(void){ struct division kyoto[11]; FILE
*fp; int i = 0; int max_pop, min_pop, max_pop_name, min_pop_name, max_area_name,
min_area_name, max_area_name, min_area_name, max_poparea_name, min_poparea_name,
fpopulation; double max_area, min_area, max_poparea, min_poparea, farea; char
fname[20]; if ((fp = fopen("kyotocity.txt", "r")) == NULL){ printf(
"\aファイルオープン出来ません\n"); exit (0); } while(fscanf(fp, "%s%d%lf",
fname, &fpopulation, &farea) == 3){ printf("name = %s pop = %d farea = %lf",
fname,fpopulation,farea); kyoto[i].population = fpopulation; strcpy(
kyoto[i].name ,fname); kyoto[i].area = farea;
つづく
322 :
デフォルトの名無しさん :2006/11/10(金) 07:15:15
>>310 つづきから
if (i == 0){ max_pop = min_pop = fpopulation; max_pop_name = min_pop_name = i;
max_area = min_area = farea; max_area_name = min_area_name = i; max_poparea =
(fpopulation / farea); min_poparea = max_poparea; max_poparea_name =
min_poparea_name = i; } else{ if (fpopulation < min_pop){ min_pop =
fpopulation; min_pop_name = i; } if (fpopulation > max_pop){ max_pop =
fpopulation; max_pop_name = i; } if (farea < min_area){ min_area = farea;
min_area_name = i; } if (farea > max_area){ max_area = farea; max_area_name =
i; } if ((fpopulation / farea) < min_poparea){ min_poparea = (fpopulation /
farea); min_poparea_name = i; } if ((fpopulation / farea) > max_poparea){
max_poparea = (fpopulation / farea); max_poparea_name = i; } } i++;}
printf("人口最大区:%-20s %d人\n", kyoto[max_pop_name].name, max_pop);
printf("人口最小区:%-20s %d人\n", kyoto[min_pop_name].name, min_pop);
printf("面積最大区:%-20s %d人\n", kyoto[max_area_name].name, max_area);
printf("面積最小区:%-20s %d人\n", kyoto[min_area_name].name, min_area);
printf("人口密度最大区:%-20s %d人\n", kyoto[max_poparea_name].name,
max_poparea);
printf("人口密度最大区:%-20s %d人\n", kyoto[min_poparea_name].name,
min_poparea);
fclose(fp); return 0;}
こんな感じか?
323 :
278 :2006/11/10(金) 07:31:56
>>309 同意
>>278 は問題を百回読んでから書き込め… orz
void sort(int *data, int data_num){
int i, j, temp;
for(i=0;i<data_num-1;i++)
for(j=i+1;j<data_num;j++)
if(data[i]<data[j]){temp=data[i];data[i]=data[j];data[j]=temp;}
}
void print_bar(int score){
for(;score>=10;score-=10) printf("#");
for(;score>0;score--) printf("*");
printf("\n");
}
void print_graph(int *score, int score_num){
int i;
printf("----------------------\n 得点グラフ \n----------------------\n");
for(i=0;i<5;i++){
printf("第%d位 (%3d点): ", i+1, score[i]);
print_bar(score[i]);
}
}
int main(void){
int i, score[5];
for(i=0;i<5;i++){
printf("%d人目 >> ", i+1);
scanf("%d", &score[i]);
}
sort(score, 5);
print_graph(score, 5);
return 0;
}
>>311 0年1月1日はユリウス暦で今のグレゴリオ暦と違うが、そこまで考慮していない。
よって、以下のプログラムはグレゴリオ暦初日である1582年10月15日(金)以降の
日付に対してのみ正しい曜日を出力する。当然、0年1月1日の曜日は正しく出力
されないし、月曜日にもならない。もしどうしても必要ならば、自分で改造すること。
#include <stdio.h>
int day_of_week(int year, int month, int day) {
if (month == 1 || month == 2) {
--year;
month += 12;
}
return (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7;
}
int main(void) {
int year, month, day;
printf("年月日を入力してください\n年:"); scanf("%d", &year);
printf("月:"); scanf("%d", &month);
printf("日:"); scanf("%d", &day);
printf("%d年%d月%d日は%s曜日です。\n", year, month, day, &"日\0月\0火\0水\0木\0金\0土"[3 * day_of_week(year, month, day)]);
return 0;
}
326 :
OS :2006/11/10(金) 17:04:25
[1] 授業単元: オペレーティングシステム [2] 問題文(含コード&リンク): 第4回課題 セルオートマトンの動作推移を表現する。 ・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。) ・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。) ・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。 以下に、例を示す。 問題 □□■□■□が与えられるとする。 t=1 □■□■□□ t=2 ■□■□□□ t=3 □■□□□□ t=4 ■□□□□□ 終了 また、今後 □□■ は □■□ となるが、 ■□■ は ■■□ となる左側で止めてしまう場合があるのです。
327 :
OS :2006/11/10(金) 17:06:02
この問題は、□は、動ける場所、■は、渋滞していて動けない場所というものです。 ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。 発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。 nは、コマンドラインから入力。(入力方式は問わない。) (例) t=1 ■□■ t=2 ■■□ t=3 ■■□ t=4 ■■□ t=5 ■□□ この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C、C++ (出来ればC++が望ましい。) [4] 期限: 2006年11月10日 23:59まで(出来れば23時まで。) [5] その他の制限: 特になし
あきらめたら?
[1] 授業単元:情報演習 [2] 問題文(含コード&リンク):x円を年利1.4%で借りた場合と18%で借りた場合のn年後の返済総額を計算する プログラムを作成せよ。プリプロセッサを用いて、金利が変動した場合にもすぐに対応できるようにすること。 (x,nの値はscanfを用いて入力) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) よろしくお願いします
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): read.txtファイルを読み込みそれに書かれたローマ字をひらがなに 直してwrite.txtファイルに書き込むプログラミング。出てくるローマ字はringo,budou,mikanのみ。 テキストは以下のような感じです。 ringo budou mikan mikan ringo budou [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: c [4] 期限: 2006年11月12日 [5] その他の制限:出来るだけ関数を使い、fopen,fcloseを使うこと ファイル開くのと書き込みまでは出来たのですが、空白文字を読み込んだり変換がうまく できません。こんなこと言うのも失礼ですが、関数名とうできるだけ分かりやすくお願いします。
>>330 こんな感じ?
if (strcmp(buf,"mikan")==0)
fprintf(fp,"みかん");
>>331 ありがとうございます!!比較はコレでつくれそうです。あとファイルから読み込むとき
一行ずつしかも空白文字も読み込んで配列に入れることはできますか?
337 :
デフォルトの名無しさん :2006/11/10(金) 20:12:13
CFILE
>>336 fgetsを使ったんですがread.txtの中身が
mikanandbudouなどのとき、出力としてテキストに書き込むと、
本当は「みかんandぶどう」としたいんですがうまくいきません。なにか
いい方法はないでしょうか?できればファイルからfgetsで読み込んで
どのように配列にいれif文等で判定すればこの様に変換できるか
教えてください。
340 :
デフォルトの名無しさん :2006/11/10(金) 21:08:28
>>338 >>330 んー。なんか、アルゴリズム見直したほーがいい気がするぞ。
1)5文字読む。5文字以下しか読めないならe)へ。
2)5文字がringo,budou,mikanのいずれかなら対応するひらがなを出力し、バッファをクリアし、1)へ。
3)先頭の1文字を出力する。
4)5文字のうち、先頭の1文字を捨てる。
5)新しく文字を1文字読み込む。読み込めたら2)へ。
e)残りの文字を出力する。
mikanandbudou こんな物までやるのか
みかなんdぶどう
343 :
デフォルトの名無しさん :2006/11/10(金) 21:23:09
CString、ハッシュテーブルで一発
[1] 授業単元:情報技術英語U [2] 問題文(含コード&リンク): 英文が書いてあるファイルdat.txtから単語を抽出するプログラム、 英文の空白は空白を表示し、","や"."も空白で返す。 dat.txtは次のものとする。 This is a pen. I am a student. It is impossible to solve this problem. When she relaxes, she slips back into the local accent. [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:lcc [3.3] 言語:C [4] 期限:11月12日まで [5] その他の制限:fclose,fopenを使う
>>344 単語を抽出するのに空白もドットも関係なくない?
>>344 #include<stdlib.h>
#include<stdio.h>
int main(){
FILE *fp;
char data[256];
int c=0;
int count=0;
if( (fp=fopen("data.dat","r")) == NULL ) { exit(1); }
while( (c=getc(fp)) != EOF){
data[count] = c;
if(c==' ' || c==',' || c=='.'){
data[count] = '\0';
printf("%s\n",data);
printf("%c\n",c);
count=0;
}else{
count++;
}
}
}
return(0);
}
これでいいのか?
347 :
346 :2006/11/10(金) 22:08:25
クローズするの忘れてたw しかもインデントがずれてるしorz
He roared, "URRRYYYYYYY!!!!!"
349 :
デフォルトの名無しさん :2006/11/10(金) 23:06:46
>>344 #include <stdio.h> #include <string.h> #include <stdlib.h>
typedef struct Word{ char *word;unsigned int num;struct Word *next;
}Word;Word *CountWord(void);
int main(){ Word *last = CountWord();Word *p;Word *temp;char *cf = NULL;
for(p = last; p != NULL; p = p->next) printf("%d %s \n", p->num, p->word);temp = last;
while(temp!=NULL){p = temp;cf = temp->word;temp = temp->next;free(p);free(cf);}return 0;}
Word *CountWord(void){FILE *fp;char buff[1024] = {'\0'};char *gDlim = " ,.\t\n";char *word = NULL;
unsigned num =1;unsigned len;Word *temp;Word *top = NULL;fp = fopen("dat.txt","r");
while(fgets(buff, sizeof(buff), fp)){word = strtok(buff,gDlim);while(word != NULL){
temp = (Word *)malloc(sizeof(Word));len = strlen(word);temp->word = (char *)malloc(len + 1);
strcpy(temp->word, word);temp->num = num;temp->next = top;top = temp;
num++;word = strtok(NULL, gDlim);}memset(buff, '\0', sizeof(buff));}fclose(fp);return temp;}
>>349 読んでたら前頭葉あたりが痛くなってきた
352 :
OS :2006/11/11(土) 00:15:33
353 :
デフォルトの名無しさん :2006/11/11(土) 01:12:26
[1] 授業単元:プログラミング [2] 問題文:以下のように1000個の整数を選択整列,挿入整列,バブルソートをつかってソートするプログラムを作成せよ。 * データセット o データセットは自分で作成すること. o rand関数を使用しなさい o 同じ整数が2度以上現れないこと. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:11/13
このスレは俺には早すぎた
355 :
デフォルトの名無しさん :2006/11/11(土) 01:26:56
バブルソート void bubble_sort(int sort[], int elements) { int i,j,temp;for(i=0; i < elements; i++){ for(j=i; j < elements; j++){if(sort[i] > sort[j]){ temp = sort[i];sort[i] = sort[j];sort[j] = temp;}}}} 選択ソート void SimSelSort(int num[ ], int n) { int i, j, k, min, temp; for (i = 0; i < n - 1; i++) { min = num[i]; k = i; for (j = i + 1; j < n; j++) { if (num[j] < min) {min = num[j]; k = j;}} temp = num[i];num[i] = num[k];num[k] = temp;}} 単純挿入ソート void InsertSort(int num[ ], int n) { int i, j, temp;for (i = 1; i < n; i++) {temp = num[i]; for (j = i; j > 0 && num[j-1] > temp; j--) num[j] = num[j -1]; num[j] = temp; }}
356 :
デフォルトの名無しさん :2006/11/11(土) 01:31:50
>>355 あとデータセットの作り方がわからないので教えてくださいませんか?
long deetasetto[1000]; int i,j; for(i=0;I=<999;i++){ deetasetto[i]=rand(); for(j=0;j<i;j++){ if(deetasetto[i]==deetasetto[j]){ i=i-1; break; } } } longじゃなくてintでいい気がするけど どういう実装なんか知らんし一応これで
358 :
デフォルトの名無しさん :2006/11/11(土) 12:41:55
[1] プログラミング
[2] 8queen問題で、対称性を持たない独自な解がいくつあるかを求めよ
[3] 環境
[3.1] windowsXP
[3.2] BCC
[3.3] C言語
[4] 期限:2006/11/12
[5] その他の制限:特になし
ttp://free.gikoneko.net/up/source/up129964.c ↑は全解を求めるプログラムを元に作ったものですが、
答えは12のはずなのに15となってしまいます。
おかしい点を指摘していただければ助かります。
ざっとしか眺めてないけど対角線に対する線対称のチェックって 回転と反転だけで吸収できるっけ?
あーできるな ごめんごめん
compare()が1回足りてない気がする しかし、それを追加したところで結果が変わらないから別なところに原因があるのか
362 :
349 :2006/11/11(土) 13:20:47
[1] 授業単元:プログラミング (ファイルからの入力 [2] 問題文:10*10の任意の数字 (小数・負数含む) が書かれたファイルから最大値、最小値の表示 0 1 2 3 4 5 6 7 8 9 1... 2... 3.. 4... 5... 6... 7... 8... 9.. ファイルは↑みたいな形式です。. [3] 環境 [3.1] OS:WinXP Pro [3.2] コンパイラ名とバージョン:Boland C 5.5.1 [3.3] 言語:C [4] 期限:2006/11/17 [5] その他の制限:前回が配列だったのでその程度のレベルで
>>358 >>361 にあるけど対称形は8通り
foundanswerで答えをanswerにちゃんとコピーしてない
yの値が不定なのによく落ちなかったものだ
>>358 203行目に for(y=0;y<8;++y) が足りない
×if(compare()>0)
○if(compare()==0)
366 :
364 :2006/11/11(土) 13:59:50
>>365 見て書き忘れてたの思い出した
compare()の中身が少し変
boardとtmpが同一かどうかの判定だけでいいと思う。
367 :
349 :2006/11/11(土) 19:24:53
>>363 10*10は10行10列ってことか?
それと、その任意の数字が書かれたファイルぐらいどっかにアップしろ
いちいち読み込むためのその任意の数字が書かれたファイルを作るのが
めんどう。
あと、前回が配列だったので、って前回ってどれだよ。
>>235 #include <stdio.h>
#include <stdlib.h>
int main(int argc , char *argv[]) {
FILE *f1,*f2,*fs;
int c;
if (argc < 4) return 1;
if ((f1=fopen(argv[1],"r"))==NULL) exit(1);
if ((f2=fopen(argv[2],"r"))==NULL) exit(1);
if ((fs=fopen(argv[3],"w"))==NULL) exit(1);
while (1) {
if ((c=fgetc(f1))==EOF) break;
fprintf(fs,"%c",c);
}
while (1) {
if ((c=fgetc(f2))==EOF) break;
fprintf(fs,"%c",c);
}
printf("\(^o^)/オワタ\n");
fclose(f1);
fclose(f2);
fclose(fs);
return 0;
}
中学生にも出来た
371 :
デフォルトの名無しさん :2006/11/11(土) 21:05:43
>>370 2時間だったんだよ〜二日じゃないよ〜><
while (1) { if ((c=fgetc(f1))==EOF) break; fprintf(fs,"%c",c); } while (1) { if ((c=fgetc(f2))==EOF) break; fprintf(fs,"%c",c); } ここらへんがもにょるな 不思議なプログラムだ
373 :
349 :2006/11/11(土) 22:05:30
>>369 中身みたら00〜99までの数字が順番に書いてるだけじゃん
そうじゃなくて、少数・負数含むんじゃないの?
それも任意だから、順番じゃないだろうし
指数表現した小数とかも含むのかとかそういう意味で
そういうファイルを作ってって言ったの
>>363 #include <float.h>
int main(void){
FILE *f=fopen("file.txt","r");
if (!f) goto RET;
char cp_line[1024],*p,*b;
double d,d_min=DBL_MAX,d_max=DBL_MIN;
for(;;){
if (!fgets(cp_line,1024,f)) break;
for(p=cp_line;;){
d=strtod(b=p,&p);
if (p!=b){
if (d<d_min)
d_min=d;
if (d>d_max)
d_max=d;
}
if (!*(p++)) break;
}
}
printf("最小値: %f\n",d_min);printf("最大値: %f\n",d_max);fclose(f);
RET:return 0;
}
こんなんでいい?
>>371 あ〜らら。期限を
>[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
にしたがって書かないからだよ。
テンプレはただ漫然とそこにあるんじゃなくて、過去に発生した誤解などを元に
再び同じ過ちを繰り返さないように調整してあるんだから。
[2] 問題文(含コード&リンク): Hello World! Hello World! Hello World! Goodbye World! Hello World! Hello World! Hello World! Goodbye World! Hello World! Hello World! のように出力するプログラムを、以下の@〜Cの各条件で実現せよ。 @forとifを用いた方法 但し、出力する行数が増えても同じパターンでの出力が可能であるようにせよ。 すなわち、ベタにifで4行目を判定してGoodbye World!にしてはならない。 Aforとswitch-caseを用いた方法 但し、breakは一度しか使ってはならない。 すなわち、default節を有効に活用せよという事である。 これについても、行数が増えても対応可能なアルゴリズムを考えよ。 Bwhileとifを用いた方法 注意は@と同様 Cwhileとswitch-caseを用いた方法 注意はAと同様 [3] 環境 [3.1] WindowsXP [3.2] BCC [3.3] C [4] 無期限 早めがいいです [5] 繰り返し文までです
379 :
349 :2006/11/12(日) 01:29:14
380 :
358 :2006/11/12(日) 02:57:01
レス遅くなりました。
対称形は、
・元の形の90〜270度回転の3つ
・元の形の反転の0〜360度回転の4つ
のトータル7つではないかと思ったのですが違うのでしょうか。
追加で質問するようになりますが、もう1つが何か教えていただけたら助かります。
ご指摘の通り、for(y=0;y<8;++y)は足りてないですね。
ただ、実行はできているのがフシギです。
compare()は同一かどうかだけの判断にしました。
if文の記述を直す(">"→"==")と、うまく実行できるようになりました。
最後になりましたが、
>>359 =360さん、
>>361 さん、
>>364 =366さん、
>>365 さん、ありがとうございました。
[1] 授業単元:情報基礎 [2] 問題文(含コード&リンク): 以下の2つをそれぞれプログラムにしてコンパイル・実行させる。 エラーが出なくなったら、1つにまとめてファイル名:1107.txt、レポート第5回送付 1.keisan.c 変数 x と y を用い、簡単な計算をして結果を表示させるプログラム [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Boland C 5.5.1 [3.3] 言語: C [4] 期限: 本日(正午12:00) [5] その他の制限: ほんとの基礎の基礎です。初めて2回目くらいです。 お願いします。
382 :
381 :2006/11/12(日) 03:28:11
訂正です。 問題文に以下二つってありますけど、1つなんで気にしないでください。 あと、小数の計算もできるようにお願いします。
>374 ゴトゥは使わない方がいいと聞いているのですがいいんですか? わたしは>363じゃないですけど
>>383 gotoは使ってもいいけど、奇麗な構造をブチ壊すような使い方は余り好まれない
ブチ壊した例)
※ブロック記号の"{"と"}"はCのブロックステートメントを意味しているわけじゃないです
概念的なくくりだとおもてください
{ ...A... there ... goto here }
{ ...B... goto there
{ ...C... here ... }
}
こんな風になってると、"{"と"}"の構造をブチ壊した構造に出来るので好まれない
>>374 はオレなら
int main(..){
if(!〜) return 1;
〜K〜
}
とかにするんじゃないかな
(仮にKが30行くらいのコードだと考えれば、この方法なら可読性を維持できる)
>>381 簡単な計算ってなんだろ・・・四則演算?
基礎の基礎って言ってるからプログラム中で変数決めていいのかな
#include <stdio.h>
int main(void)
{
int x,y;
x = 10;
y = 10; //x,yは任意
printf("%d",x+y); //上から順に加減乗除
printf("%d",x-y);
printf("%d",x*y);
printf("%d",x/y);
return 0;
}
386 :
385 :2006/11/12(日) 05:25:15
少数の計算っての見落としてた 宣言部分の int ⇒ double printfの%dを%f
[1] 授業単元:Cプラクティス
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2926.txt このプログラムでは、コンピュ−タがマークを置く位置を乱数で生成している。
三目並べの最善手のアルゴリズムを求めなさい。
また、Computer関数を修正しコンピュ−タが最善手を打つようにプログラムを改良しなさい。
なお、三目並べでは、双方が最善手を打つと引き分けとなる。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C
[4] 期限:2006年11月13日01:00まで
[5] その他の制限:C言語勉強して1年くらいの人が書く感じでお願いします。
この三目並べの最善手がわからなくて、単純に相手が置いた隣とかではだめでした。
どうやったら最善手が求められるのかもお願いします。
つ Wikipedia
389 :
387 :2006/11/12(日) 07:26:23
>>388 Wikipediaに最善手自体は載っているのですが、そこにたどり着くまでの考え方とアルゴリズムが知りたいのです。
>>387 これでも十分最善手だとおも
int i,ret,th[2]={turn,human};
for(i=0;i<sizeof(th);i++){
for(*height=0;*height<MAX_HEIGHT;++*height){
for(*width=0;*width<MAX_WIDTH;++*width){
if(board[*width][*height]==EMPTY){
board[*width][*height]=th[i];
ret=IsComplete();
board[*width][*height]=EMPTY;
if(ret)return;
}
}
}
}
if(board[*width=1][*height=1]==EMPTY)return;
for(*height=0;*height<MAX_HEIGHT;++*height){
for(*width=0;*width<MAX_WIDTH;++*width){
if(board[*width][*height]==EMPTY)return;
}
}
391 :
387 :2006/11/12(日) 08:48:03
>>390 先手で、(2,2),(3,3),(3.1),(1,3)と打つと勝ててしました。
何が悪いのか考えてみます。
あと、引き続き
>>387 をよろしくお願いします。
[1] 授業単元:計算科学
[2] 問題文
確率変数Xが確率密度関数
0( x < 0)
p(x)=(1/2)e^-x/2( x >=0)
に従うとしよう
サンプル0502sample.cを書き換えて,
サンプル数?
300
シード?
128478
と入力すると, 逆関数法を利用して p(x) に従う xを生成する(ただし, X=-1/alog(1-r)を使う).
これを300回生成し, 平均, 分散, 0.0と4.0の間を何個かのビンに分割して
ヒストグラムを出力するプログラムを作ろう. ビンの個数は, 8,80 など, 何種類か試そう.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年11月14日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2928.txt を利用して作ってください
うちのぐーぐるさんは、 ○× って問い合わせしても無視します。なぜでしょうか?
○とか×とか、そういうのグーグルは嫌いなんだよ。
396 :
デフォルトの名無しさん :2006/11/12(日) 16:02:13
[1] 授業単元:コンピュータ実習T [2] 問題文(含コード&リンク): 構造体に値を設定する。 struct numb { int n; double d; } の構造体で100の要素を持つ配列を用意する。 メンバー変数 n には 0, 1, 2, - - - 99 を設定し メンバー変数 d には 0.99, 0.98, 0.97, - - - 0.0 を設定する。 できれば ポインターを使うこと。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 11月15日 [5] その他の制限:特になし
int main(void){ int i; struct numb hoge[100], *p; for(i=0,p=hoge;i<100;i++){ p[i].n=i; p[i].d=(99-i)/10; //アヤシイ } } 無理にポインタ使ってみた 最近Cやってない
>>397 //アヤシイ
のところは先にキャストしとくか99.0とか10.0とかにするべきだろう
[1] 授業単元:情報処理 [2] 問題文:1から12の数字を縦3,横4で表記させよ。 <例>1 4 7 2 5 3 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:明日の14時 [5] その他の制限:9月から受講しているのでなるべく簡単な関数でお願いします!
#include <stdio.h> main(){ printf("1 4 7 10\n2 5 8 11\n3 6 12"); }
[1] 授業単元:C言語基礎U [2] 問題文(含コード&リンク): 二次方程式の3つの係数を入力させ、解を出力するプログラムを作れ(0=Ax^2+Bx+C) 実数解が存在しない場合は、「実数解が存在しません」と表示させる事。小数点は第二位まで。 (例1)係数を入力してください A=3,B=5,C=1 解:x=-1.43,-0.23 (例2)係数を入力してください A=2,B=3,C=4 解:実数解が存在しません ※係数に応じ、一次方程式になる場合、判別式Dの値によって 実数解が存在しないしない場合、重解となる場合、解が二つ存在する場合、があることに注意。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:11月13日の13:00まで [5] その他の制限: 特になし 一週間も前から考えていたけれど、全然分かりません。どうかお願いいたします。
9がぬけた
404 :
400 :2006/11/12(日) 18:31:18
ちょっと待て 冗談で書いたのにこれでいいのか
>>404 え!?そうなんですか・・・。
すみません。他の方法があれば是非教えてください!!
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク):html.txtのHTML方式で書かれた文を LaTEXに書き換え、latex.txtに書き換える。 html.txtの中身 <table> <tr align="center"><td>Hello world</td><td align="right">Hello</td></tr> </table> [3] 環境 [3.1] OS:Linux [3.2]コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年11月13日 [5] その他の制限:
>>401 #include <stdio.h>
#include <math.h>
double hanbetusiki(int a,int b,int c){
return b*b-4*a*c;
}
main(){
int a,b,c;
double d;
printf("係数を入力してください\nA=");
scanf("%d",&a);
printf("B=");
scanf("%d",&b);
printf("C=");
scanf("%d",&c);
d=hanbetusiki(a,b,c);
printf("解:");
if(d>0) printf("x=%.2f,%.2f",(-1.0*b+sqrt(d))/a/2,(-1.0*b-sqrt(d))/a/2);
else if(d==0) printf("x=%.2f",(-1.0*b)/a/2);
else printf("実数解が存在しません");
}
今ひとつ問題の要求とかみ合ってない答えだけど
これでいいのかなあ
>>399 #include<stdio.h>
int main(){
int i;
for(i=1;i<13;i++){
printf("%3d ",i);
if(i%4==0){ printf("\n"); }
}
return(0);
}
つられてみるw
これ、本来なら構文解析ものですぜ、だんな
>>408 すみません。俺も最初そう思ったんですが、
よくみたら縦に1、2、3だったんです。
でも、ありがとうございます!!
>>411 ごめんなさい。私には理解できませんでした。。。先生いわく、すべてのhtml
を変換するのは大変なので、今回は使われているのだけを変換できれば
いいそうです。
>>410 >408 を改造してみる。
#include<stdio.h>
int main(){
int i;
for(i=0;i<12;i++){
printf("%3d ",i/4+(i%4)*3+1);
if(i%4==3){ printf("\n"); }
}
return(0);
}
>>407 ありがとうございます!なんとかなりそうです!
>>413 ありがとうございます!本当に助かりました!
416 :
デフォルトの名無しさん :2006/11/12(日) 20:35:56
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): キーボードから重複を許して与えられるN個のint型の値の中で、2番目に大きな値を印字するプログラムを作成せよ。そのような値がない場合は「なし」と印字。データの個数N(≧1)はマクロNで与えられるものとする。値は一度に1つずつ入力されるものとする。 [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語: c [4] 期限: 2006年11月14日まで [5] 四則演算、繰り返し、配列ぐらいしかやっていません。 配列の分野の問題です。
配列使わんがな(´・ω・`)
418 :
デフォルトの名無しさん :2006/11/12(日) 21:57:35
4つの文字列のメンバを持つ構造体があります。 struct data { char d1[128]; char d2[64]; char d3[32]; char d4[64]; } この内容をcvsファイルとして出力したのちに、ファイルから読み込みたいのですが…。 一文字ずつfgetsしてカンマを判定して処理するしかないですか?
>>418 「"」で囲われた「,」は区切りではない等といったメタな処理が無ければ、
fgets() で一行読み込んで sscanf() で解析するのが定石。
>>416 2番目に大きい値がないとはどういう状態だ?
トリつけます
>>420 例えば
5 5 5 5
(全て同じ値)
とか
4
(値が1つしかない)
といった感じです。
>>418 エラー処理とかやってないけど、これでどうですか?
data d = {"test","test2","test3","test4"};
fstream f("test.txt", ios::out);
f << d.d1 << ',' << d.d2 << ',' << d.d3 << ',' << d.d4;
f.close();
string s = "";
char buf[128];
f.open("test.txt", ios::in);
while(f.getline(buf, sizeof(buf), ',')){ s += buf; }
f.close();
cout << s << endl;
>>416 #include <stdio.h>
#include <limits.h>
#define N 10
main(){
int atai[N];
int tmpmax=INT_MIN,tmpnibanme=INT_MIN;
printf("今から%d個の数値を入力してもらいます\n%dを入力したらころします",N,INT_MIN);
for(i=0;i<N;i++){
printf("%d番目の値を入力してください",i+1);
scanf("%d",&atai[i]);
}
for(i=0;i<N;i++){
if(atai[i]>tmpmax){
tmpnibanme=tmpmax;
tmpmax=atai[i];
}
else if(atai[i]>tmpnibanme) tmpnibanme=atai[i];
}
if tmpnibanme>INT_MIN printf("多分%d",tmpnibanme);
else
printf("なし");
}
>>393 x=-2*log(1-get_uniform_rand());
425 :
406 :2006/11/12(日) 23:33:37
html→latexはhtmlとlatex分からないと出来ないと思うのでそこは自分で かんがえますから どなたか、配列の中からある文字列に合致するのを選んで処理する方法だけでも 教えていただけないでしょうか? 例えば次のように it is my pen という文字列が入った配列strからitをthisにmyをyourに変えて strに入れなおす。みたいな感じで
>>406 ,425
yacc とか bison について調べてみては?
427 :
416 ◆nZ5tHzSn6E :2006/11/12(日) 23:49:56
>>423 ありがとうございます。
#include <limits.h>は習ってませんが、参考にさせていただきます。
>>427 <limits.h>はただのマクロなんで深く考えずに使っていいと思う
後int tmpmax=INT_MIN,tmpnibanme=INT_MIN; を
long型にしてLONG_MINにすれば実行した人をころさずにすむ
429 :
406 :2006/11/13(月) 00:05:44
宿題スレでこの質問は間違っているとも思いますが、現在リストやポインタ を習っていて少し行き詰っています。なにか良い参考書はありませんでしょうか?
430 :
デフォルトの名無しさん :2006/11/13(月) 00:06:23
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):1から100までの素数の和を求めるプログラムを書け。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:lcc-win32 [3.3] 言語:C 検索してみましたが、答えが見つからないのでねがいします。
432 :
デフォルトの名無しさん :2006/11/13(月) 00:31:14
>>431 問題が少し違うので、どこをどう変えれば1から100までの素数の和になるか教えていただきたいです。お願いします。
[1] プログラミング [2] src[] 内の文字が大文字の場合は小文字にして (それ以外の文字はそのまま) dst[] にコピーする関数 str_lcopy(char dst[], char src[]) を作成せよ. 下のような main でこの関数の動作をテストせよ. str_lcopy が src の値を書き換えてならないことに注意. "This is the 21st Century!" を入力して, src: This is the 21st Century! dst: this is the 21st century! 力される (dst は正しく変換されるが, src が書き変わっていない) ことを確認せよ. int main ( void ) { char src[128], dst[128]; printf("文字列を入力して下さい >> "); gets(src); str_lcopy(dst, src); printf("src: %s\n", src); printf("dst: %s\n", dst); return 0; } [3] [3.1] winXP sp2 [3.2] cygwin [3.3] C [4] 2006年11月14日火曜 [5] 自力で3時間考えても手に負えませんでした。お願いします。
>>432 #include <stdio.h>
int main(void) {
int i, j, s = 0;
for (i = 2; i <= 100; i++) {
for (j = 2; j <= i; j++) if (i % j == 0) break;
if (i == j) s += i;
}
printf("%d\n", s);
return 0;
}
435 :
デフォルトの名無しさん :2006/11/13(月) 00:51:40
>>432 ありがとうございます。すごく助かりました。
434で満足できるのか・・・ まあコピペしか能が無いんだから仕方ないか
437 :
434 :2006/11/13(月) 00:57:32
>>436 一応そこまで配慮したつもり。
>>433 #include <stdio.h>
#include <ctype.h>
void str_lcopy(char dst[], char src[]) {
char *d = dst, *s = src;
while ((*d++ = tolower(*s++)) != '\0') {}
}
int main (void) {
char src[128], dst[128];
printf("文字列を入力して下さい >> ");
gets(src);
str_lcopy(dst, src);
printf("src: %s\n", src);
printf("dst: %s\n", dst);
return 0;
}
[1] 授業単元 : 情報処理 [2] 問題文:2進数で入力されたものを10進数で表示 [3.1] OS:windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:火曜日の朝6時
>>433 すいません、正常に動作したのですが
意味が理解できませんでした。
関数の内容をcharとか使う下に書いたみたいな感じのでお願いできないでしょうか?
if(src >= 'A' && src <= 'Z')
{
diff = 'A'-'a';
s = src - diff;
printf("%c",s);
}
ちなみにこういう感じのを定義もつけて放り込んだらまともに動作しませんでした。
443 :
デフォルトの名無しさん :2006/11/13(月) 02:19:00
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):小さいほうから100番目までの素数の和をもとめよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C このスレはすべてみて、似た問題の答えからこの問題の答えを出そうとしましたが、できなかったのでお願いします。
>>443 # include <stdio.h>
int isprime(int n)
{
int i;
for(i = 2; i < n; i++)
if(n % i == 0)
return 0;
return 1;
}
int main(void)
{
int sum = 0;
int n = 2;
int count = 0;
while(count < 100)
{
if(isprime(n))
{
sum += n;
count++;
}
n++;
}
printf("%d\n", sum);
return 0;
}
434をリスペクトしてみるか
>>443 #include <stdio.h>
int main(void) {
int i, j, k = 0, s = 0;
for (i = 2; k <= 100; i++) {
for (j = 2; j <= i; j++) if (i % j == 0) break;
if (i == j) {s += i;k++}
}
printf("%d\n", s);
return 0;
}
;ぬけた ねみー
447 :
387 :2006/11/13(月) 02:33:10
ありがとうございます。 プログラムで探索をする方向で考えます。
448 :
デフォルトの名無しさん :2006/11/13(月) 03:02:39
>>440 #include<stdio.h>
#include<stdlib.h>
int main(){
char *s;
int count,i,n;
while(get(s)!EOF) count ++;
n=count-1;
for (i=0;i<n-1;i++){
sum=2^i*(*s);
s++;
};
printf("answer=%d",sum);
return 0;
}
449 :
デフォルトの名無しさん :2006/11/13(月) 04:34:46
[3] 環境 [3.1] Windows [3.2] Borland C++ 5.5.1 for Win32 [3.3] C [4] 明後日 char Q(char " void f(doubl *, 〜〜); と定義された関数に double a[4][5]; を f(a, 〜); と渡したが「問題のあるポインタの変換」と出るので f(*a, 〜); と渡したところ正常に動作。 配列の場合"a"はa[0][0]のアドレスを渡せるのでは…? *aではa[0][0]の中身を渡してしまいそうなのに何故正常に動くのでしょうか…。 ")
>>449 double (*a)[5] としないとだめだろう?
>>449 ポインタの深さが違うからエラーがでたんだよー。
452 :
デフォルトの名無しさん :2006/11/13(月) 05:09:58
>>450 それに変えてみたらWinXPがエラー吐いて止まった件
>>452 お前もう一回よく調べてみ。いい加減な事を書くなカス。
454 :
デフォルトの名無しさん :2006/11/13(月) 05:34:00
>>453 そういわれても…。
double a[4][5];
を
double (*a)[5];
としたけれどaにscanfから数値を入れると強制終了する…。
>>454 だからscanf()周りを調べろって。自分の思い込みだけで書くな。
scanf("%lf", &a[i][j]); のように書いてなかったらアウトだな。
scanf("%lf", &a[i][j]); こう書いてあるけど…。 他に何かミスってる可能性ある…?
すげぇ、エスパーがいっぱいだ
>>458 おいおい、そんな驚き方したら(w
自 分 が エ ス パ ー じ ゃ な い っ て バ レ て し ま う だ ろ ?
>>449 呼び出された関数側では二次元配列の大きさを知ることはできない。
明示的に示すには、関数の最初を変更しないといけない。
void f(double *, 〜〜);
↓
void f(double [][5], 〜〜);
461 :
デフォルトの名無しさん :2006/11/13(月) 11:17:14
お願いします [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):x と y の数値の対を読み込むことを繰り返し、 それぞれの和を出力するプログラムを作れ。ただし,和の計算部分には、 2数の和を計算する関数を作って、それを呼び出すこと。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2006年11月14日
>461 #include <stdio.h> double mysum(double x, double y){ return x+y; } main(){ double x, y; while(1){ scanf("%lf",&x); scanf("%lf",&y); printf("%f",sum(x,y)); } }
matigaeta printf("%f",mysum(x,y));
>>442 それを使うことが前提なら次は最初から書いてね。ちなみにtolower()は、小文字にできるものは
その小文字を、その他の文字はそのままを返す関数(マクロの可能性もある)で、ctype.hに宣言
されている。
#include <stdio.h>
#include <ctype.h>
void str_lcopy(char dst[], char src[]) {
char *d = dst, *s = src;
while (*s != '\0') {
if (*s >= 'A' && *s <= 'Z') {
*d++ = *s++ - ('A'-'a');
} else {
*d++ = *s++;
}
}
*d = '\0';
}
int main (void) {
char src[128], dst[128];
printf("文字列を入力して下さい >> ");
gets(src);
str_lcopy(dst, src);
printf("src: %s\n", src);
printf("dst: %s\n", dst);
return 0;
}
466 :
デフォルトの名無しさん :2006/11/13(月) 14:05:08
[1] C言語プログラミング [2] 問題文: 配列に格納されたデータをソートするプログラムを作成するにあたり、 以下の機能を持つ関数を作成しなさい。 ・乱数を生成し配列要素に格納する init_array(int *pa, int n) ・配列要素を1行で画面に出力する output_array(int *pa, int n) ・指定された2つアドレスのデータを交換する swap(int *x, int *y) [3.1] OS: windws xp [3.2] visual studio 2003 [3.3] 言語: C [4] 期限: 11月16日 [5] その他の制限: 反復構造、ソート、探索、ポインタ、ファイル、構造体 よろしくお願いします。
467 :
デフォルトの名無しさん :2006/11/13(月) 14:05:18
#include <stdio.h> #include <math.h> main(){ double x,y; scanf("%d",&x); y=log(x)/log(2); printf("%f",y); } というプログラムにすると /tmp/ccIE035m.o(.text+0x2e): In function `main': : undefined reference to `log' /tmp/ccIE035m.o(.text+0x48): In function `main': : undefined reference to `log' collect2: ld はステータス 1 で終了しました というエラーがでます。何が間違っているんでしょうか?
>>467 数学関数ライブラリがリンクされていない。
たぶんgccに-lmを渡せば良い。
>>467 後scanfを
scanf("%lf",&x);
にしておいて
>>467 [1] 授業単元:情報処理U
[2] 問題文(含コード&リンク):2を底とするlogを計算するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006年11月10日まで
[5] その他の制限:なし
お願いします。
なんで今ごろバグ取りしてるんだぜ?
471 :
デフォルトの名無しさん :2006/11/13(月) 16:20:13
>>466 #include <stdio.h>
#include <stdlib.h>
void init_array(int* pa, int n){
for(; n!=0; n--)
pa[n-1] = rand();
}
void output_array(int* pa, int n){
for(; n!=0; n--)
printf("%d ", *pa++);
}
void swap(int* x, int* y){
_asm{
mov ecx, x
mov edx, y
xchg eax, [ecx]
xchg eax, [edx]
xchg eax, [ecx]
}
}
minmaxちゃうんかと
>>440 #include<stdio.h>
#include<stdlib.h>
int main(void){
char buf[256];
long number=0L;
int i;
scanf("%s", buf);
for(i=0;buf[i]!='\0';i++){
if(buf[i]!='0' && buf[i]!='1'){
fprintf(stderr, "%s not binary.\n", buf);
exit(1);
}
number=(number<<1)|(buf[i]=='1');
}
printf("%ld\n", number);
return 0;
}
478 :
392 :2006/11/13(月) 19:22:59
というかおまいら 392 は無視でつか? orz
>>392 >>478 この辺があやしい
if(turn == CIRCLE && human == CIRCLE || turn == CROSS && human == CROSS)
>>464 ありがとうございます、whileは思いつきませんでした。
482 :
デフォルトの名無しさん :2006/11/13(月) 20:21:14
1] 授業単元: プログラミングV [2] 問題文(含コード&リンク): C言語のプログラムにより、端末の画面をうまく利用した ゲーム等を2週間の間にグループ(3人または2人)で考案すること。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: cc [3.3] 言語: C [4] 期限:11月15まで [5] その他の制限: VT100制御コードというのを使って画面消去やカーソル移動をさせないといけないらしいです。 3年間プログラミングを習いましたが、基礎的なことしか分かりませんorz それなのにいきなりの大きな課題・・まったく手がつかず放置状態です 作りたいゲームがいろんなチームとかぶっているので、私のチームは一人神経衰弱を作ることになったんですが、 私がまかせられっきりで班員が手伝おうとしてくれません(というか、唯一普通にプログラミングができるのが私だけみたいです。汗) 乱数を発生させて(?)毎回遊べるようにしたいのですが。。 どうか一番簡単なプログラムでいいので考えてもらえると助かります(TT)色々な課題と重なっていてかなりせっぱつまってます・・
>>482 エスケープシーケンスのことでいいのかな?
void clear_screen(void){
printf("\x1b[2J"); // 画面を消去する
}
void locate(int x, int y){
printf("\x1b[%d;%dH", y+1, x+1); // 現在のカーソル位置を変更する
}
>一人神経衰弱 一人で延々とめくるのか?それともコンピュータと対戦?
>>482 乱数を使う方法かぁ・・・srand()とtime()あたり。
班員が動いてくれないのをどーにかする方法は、あんたが動かなければいい。
486 :
482 :2006/11/13(月) 20:33:45
コンピュータはさらに難しくなりそうなので・・とりあえず一人でめくるのでもいいかなぁと・・ ごめんなさい、1週間前から色々なプログラム見たり、前を振り返ったり先輩に聞いたりしたのですが どうしても1から作ることができなくてorz
487 :
482 :2006/11/13(月) 20:36:27
あ、あとVt100の参考資料です 【参考資料】 ●VT100制御コード カーソル移動 画面消去 ** vt100.c ** #include <stdio.h> main() { int x,y; char moji[10]; x=1; y=3; printf("\033[2J"); printf("\033[9;30HK"); printf("\033[9;31Ha"); printf("\033[9;32Hz"); printf("\033[9;33Hu"); printf("\033[11;30H%1d",x+3); printf("\033[11;31H%1d",y+5); printf("\033[13;30H?? "); printf("%c\n",getchar()); }
488 :
デフォルトの名無しさん :2006/11/13(月) 20:40:11
>>476 long number=OL;
number=(number<<1)|buf[i]=='1');
の意味が分かりません。
いちばん簡単なゲーム? ジャンケンでいいじゃん
>>482 3年間プログラミングを習って、普通にプログラミングができるなら余裕だろ。
int cards[4][13]; // トランプなら1〜13?
int state[4][13]; // 表か裏か
for(i=0;i<4;i+=2) {
for(j=0;j<13;j++) {
cards[i][j] = cards[i+1][j] = rand()%13;
state[i][j] = state[i+1][j] = 0; // 裏
}
}
// カードをシャッフル
int cnt = 0;
while(1) {
int f = 1;
// 表示
while(f) {
// cnt++;
// 入力(1枚目)
// 表にする
// 表示
// 入力(2枚目)
// 表にする
if(同じカードじゃなかったら) {
2枚のカードを裏返す
f = 0;
}
}
if(カードが全部表になったら) break;
}
途中で力尽きた
>>482 まー・・・マイコンBASICマガジンのバックナンバーでも読んで、移植に励んでくれ。
80年代のなら、短いのもあるだろう。
>>488 とりあえず「文字を正確に読む」という能力を身に付ければいいんじゃないかな
やる気のない奴は黙ってろよ。
>>482 一応やってみるが、途中で投げ出すかも知れんので保険を用意しておいてくれ。
494 :
482 :2006/11/13(月) 21:04:11
ありがとうございます!! すっごい助かります>< まだ、期限延ばしてもらえるかもしれないので大丈夫です!
>>488 >long number=OL;
よく読め
>number=(number<<1)|buf[i]=='1');
number=(number<<1)|(buf[i]=='1');
だよく読め
分からないならnumber=number*2+(buf[i]=='1');
えーっと、未解決リスト製作よろしく。 出来そうなのは解いてみる。
498 :
デフォルトの名無しさん :2006/11/13(月) 23:58:02
1] 授業単元:情報処理 [2] 問題文(含コード&リンク): トランプを切る方法の一つとして、トランプを2つに分けて両手でばらばらと切る方法がある。 今、トランプは、ジョーカを除いた52枚とする。もし、切り方のうまい人がいて、 トランプを正しく半分(26枚)にして、かつ交互に1枚ずつ切れるとする。 この方法では、何回か行うと元に戻ることが知られている。さて、何回で元に戻るであろうか。 これを計算するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: visual stdio 2005 [3.3] 言語:C++ [4] 期限:2006年11月20日まで [5] その他の制限:プログラムの説明もお願いします。 長くてごめんなさい
499 :
デフォルトの名無しさん :2006/11/14(火) 00:02:01
>>498 の続き
次のプログラムを参考にせよ。
#include<stdio.h>
#define N 52 /* トランプの枚数 */
#define M (N/2) /* その半分の数 */
int main( void )
{
int k;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
/* トランプをセット */
for( k=0; k<N; k++ )
cards[ k ] = k+1;
while( 1 ) /* 無限ループ */
{
count++; /* 回数を一回増分 */
temp ← cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの
temp が元に戻っていたら終了(breakする)
cards ← temp
}
printf( "%d 回目で元に戻る", count );
return 0;
}
500 :
デフォルトの名無しさん :2006/11/14(火) 00:03:12
[1] 授業単元:電子計算機実習 [2] 問題文(含コード&リンク): 10等分法のアルゴリズムを作成し、x^3-10=0の解を求めるプログラムを作成せよ なお、許容誤差を10^-7 とし、区間幅が10^-7 を下回ったところで計算を打ち切ること [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: 不明 [3.3] 言語: C [4] 期限: 2006年11月15日午前中まで [5] その他の制限: while文を使っての作成お願いします
502 :
482 :2006/11/14(火) 05:24:27
>>497 あぁ、ありがとうございます!
よければ続きもお願いします・・;;
504 :
デフォルトの名無しさん :2006/11/14(火) 13:48:11
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): キーボードから1以上の整数n を入力し、(i=1からn番目までのi^2を求めるΣ) を計算して結果を画面表示するプログラムを 作成しなさい.ただし,1 未満の整数が入力された場合には再入力ができるように,1 以上の整 数が入力されるまで「scanf()」を繰り返すこととし,計算部分は再帰的プログラムとして作成す ること.また,この関数のプロトタイプは「int square_sum(int)」とする. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月15日まで [5] その他の制限: なし お願いします。
505 :
デフォルトの名無しさん :2006/11/14(火) 14:01:29
これをそのまま提出したら、やる気ない奴らより悪い事する事になるな。 やる気ない奴らは何もしなかっただけだが、ここに丸投げするのは不正だもんな。 まあ、分からなかった部分の参考にするのはアリだろうけど。
>>505 そんなことをこのスレで言われても。
問題がとければそれで良し、後は依頼者が何をしようが関知しない、というのでは駄目なのか?
整数nが与えられたとき、 n×nのサイズで螺旋状に0から(n二乗ー1)までの数が並ぶ行列を作成し、 画面に表示させるプログラムって配列を使って組むにはどうすればいいでしょうか? ヒントだけでもいいので教えてください。お願いします。
508 :
デフォルトの名無しさん :2006/11/14(火) 16:11:04
>>504 int square_sum(int n)
{
return n * (2 * n + 1)*(n + 1)/6;
}
int main()
{
int n = 0, sum;
while(n < 1){
puts("第何項まで?(1以上) =");
scanf("%d", &n);
}
printf("数列iの2乗の%d番目を含む総和は%d \n", n, square_sum(n));
return 0;
}
>>507 ですが、ここまで出来てます。
#include<stdio.h>
int main(void){
int a, b;
int c[100][100]
printf("please input! n = ");
scanf("%d\n",a);
>>504 int square_sum(int n)
{
if (n < 1) return 0;
return (n + 1) * n / 2 + square_sum(0);
}
>>507 ヒント1.方眼紙を用意する。(無ければ紙に線を引いて作ること)
ヒント2.方眼紙にn×nサイズの枠を作り、その中に左上から指示通り数字を埋めていく。
ヒント3.nと、曲がるまでに配置する数値の数と、曲がる回数に法則性がないか考える。
>>498 その切りかたを何回か繰り返すともとに戻る、ということを前提とするなら、
最大でも52!回繰り返せば十分である。なぜなら、52!回繰り返してもとに戻らないなら、
どこかでループしていて、それ以降も決してもとに戻らないからである。
よって、1回〜52!回繰り返せばもとに戻るわけだが、これらの公倍数である
(52!)!回目にはいずれの場合でももとに戻る。よって、
int main(void){ return printf("(52!)!\n"); }
>>507 int main(void){
int i, j, k, n;
int **p;
/* 中略 */
k = n*n-1;
for(i=0; i<=n/2; i++) {
for(j=i; j<=n-i-1; j++) p[i][j] = k--;
for(j=i+1; j<n-i-1; j++) p[j][n-i-1] = k--;
for(j=n-i-1; j>i; j--) p[n-i-1][j] = k--;
for(j=n-i-1; j>i; j--) p[j][i] = k--;
}
/*後略*/
}
516 :
デフォルトの名無しさん :2006/11/14(火) 17:30:41
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):1から500の中で 任意の数a,b,cの公倍数を求めるプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: BCC5.5 [3.3] 言語: C++ [4] 期限: 11/15まで [5] その他の制限:なし 自分で考えてみても、手も足もでなかったので教えてください。お願いします。
つまり、公倍数がなんなのかわからない、と?
518 :
515 :2006/11/14(火) 17:35:52
訂正 i<=n/2→i<n/2+n%2
519 :
デフォルトの名無しさん :2006/11/14(火) 17:41:25
プログラム上で公倍数をどのように 表示すればいいのか、がわからないです。
最小公倍数じゃなくて公倍数なんだろ 余裕じゃん long koubaisuu (int a, int b, int c){ return a*b*c; }
オーバーフローを考慮してない。 失格。
32ビットあれば大丈夫だろ。
なにが大丈夫なのやら。
>>521 なんのためにa,b,cが500以下とか言う条件がついてると思ってるんだよ
500以下のしばりがa,b,cだけなのなら 有限時間で公倍数全てを表示することはできない
「すべて表示しろ」なんてどこにも書いてないけどな。
すいません。問題文に追加があります。 「結果は7個以上出力すること」 です。
それなら単純に7倍まですりゃいいだけだろ。 それすらも思いつかないのか? お前の肩の上に乗ってるのはなんだ? 漬物石か? ずいぶんと軽そうな漬物石だこと。
肩の上ワラタ
昔理科の先生が空気は重いって言ってたのを思い出した
>>528 >>1 >・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
533 :
デフォルトの名無しさん :2006/11/14(火) 19:38:11
1] 授業単元:情報処理 [2] 問題文(含コード&リンク):ローンの利息計算をするプログラムを作る [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: VC++ 2005 [3.3] 言語: C++ [4] 期限: 今週木曜日 [5] その他の制限:元金、年利率、年間利息(単利)、年間利息(複利)、元利合計(単利)、元利合計(複利)を定義して、元金と年利率のみを cin で入力して20年間分の利息と元利合計(それぞれ単利、複利を別々に)を1年ごとに表示できるように出力する。 よろしくお願いします。 switch をこの課題が出された日に習ったんですが、if と else でいいですよね。
>>516 500 縛りの文言が公倍数を指すと考えた場合。問題追加部分は無視。
#include <stdio.h>
int gcd(int a, int b)
{
int c;
do {
c = a%b;
a=b;
b=c;
} while(c != 0);
return a;
}
int lcm(int a, int b)
{
return a*b/gcd(a,b);
}
int main()
{
int a,b,c,l,i;
printf("整数を空白で区切って3個入力:");
fflush(stdout);
scanf(" %d %d %d", &a, &b, &c);
l = lcm(lcm(a,b),c);
for(i=l; i<500; i+=l)
printf("%d\n", i);
return 0;
}
なんで終了前にfflush(stdout)しないの?
536 :
534 :2006/11/14(火) 19:57:27
>>535 確かプログラムが正常終了すれば全部フラッシュされるはず。違ったっけ?
>>516 よく見たら c++ だった…。
頭の #include <stdio.h> を #include <iostream> に、
またmain() を以下のものに差し替えてください。
int main()
{
int a,b,c,l,i;
std::cout <<"整数を空白で区切って3個入力:" <<std::endl;
std::cin >> a >> b >> c;
l = lcm(lcm(a,b),c);
for(i=l; i<500; i+=l)
printf("%d\n", i);
return 0;
}
537 :
534 :2006/11/14(火) 20:00:52
再訂正 orz printf("%d\n", i); ↓ std::cout << i << std::endl;
漏れはC++でもprintf系使うけどな。
>538 <cstdio>ならOK。
1,2,3,…,100までの整数の中からN個の数字を取り出すとして、その組み 合わせをすべて記述するようなプログラム(たとえばN=3なら(1,2,3),(1,2,4),… (98,99,100))ってどうやって作ればいいか教えて下さい。
テンプレを読む。
542 :
デフォルトの名無しさん :2006/11/14(火) 21:51:57
[1]授業単元:プログラミングB [2]問題文:RSA公開鍵暗号方式の実装について考えてみる。 キーボードからX,e,p,qを入力させ、暗号文(Y)が出力される プログラムを組め。 以下に実際に行われる計算式が示されているので、それらを 利用して実装せよ。 p*q = n a = (p-1)*(q-1) X^e = Y (mod n) ※ ただし、pおよびqは異なる150~200桁程度の素数とし、aとeは互いに素で あること。また、Xも150〜200桁程度の数とする。素数を求めるプログラム を組む必要はない。 ヒント:@ユークリッドの互除法 Aint型以上の数に対して配列の利用 [3]環境 [3.1]Windows XP [3.2]gccまたはVisual C++ 6.0 [3.3]CでもC++でも可です。 [4]期限:2006/11/20 [5]その他の制限:特になし。あまり難しいことは習ってないです。
543 :
デフォルトの名無しさん :2006/11/14(火) 21:53:50
542続き #include <stdio.h> void main(){ int a1, b; int x1, y, q, r; printf("2つの正の整数を入力。\n"); scanf("%d %d", &a1, &b); x1=a1; y=b; while( 1 ){ q=x1/y; r=x1-q*y; if(r==0) break; x1=y; y=r; } printf("%dと%dの最大公約数は%d。\n", a1, b, y); if(y==1){ printf("%dと%dは互いに素。\n",a1, b); } これぐらいしかわからないです。どうか力をお貸し下さい。
RSA面倒だからカエサルにしようZE!
>>541 失礼しました。
[1] 授業単元:C++によるプログラミング入門
[2] 問題文(含コード&リンク):
1,2,3,…,100までの整数の中からN個の数字を取り出すとして、その組み
合わせをすべて記述するようなプログラム(たとえばN=3なら(1,2,3),(1,2,4),…
(98,99,100))を提出せよ
[3] 環境
[3.1] OS: Windows XP
[3.2] VC 6.0
[3.3] C++
[4] 期限: 2006年11月19日17:00まで
[5] その他の制限:特になし
#include <stdio.h>
#define nmax 100
int i
double data[nmax+1]
main{
scanf("整数N%d\n",&N);
}
これでdata[1],data[2],…,data[N]に整数を入れて
すべての組み合わせをプリントしていこうとおもったんですけど、
for文がいっぱいになってしまうようなものしか思いつきませんでした。
ご協力お願いします。
>>533 もしかして、誤差を出さない計算ルーチン作らないとダメだったりする?
こういうのって誤差にとてもうるさかったはず。
548 :
デフォルトの名無しさん :2006/11/14(火) 22:38:40
>>500 下のプログラムを大枠として作っていただけないですか?
最後の方の三行がわかりません。
#include<stdio.h>
#define N 52 /* トランプの枚数 */
#define M (N/2) /* その半分の数 */
int main( void )
{
int k;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
/* トランプをセット */
for( k=0; k<N; k++ )
cards[ k ] = k+1;
while( 1 ) /* 無限ループ */
{
count++; /* 回数を一回増分 */
temp ← cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの
temp が元に戻っていたら終了(breakする)
cards ← temp
}
printf( "%d 回目で元に戻る", count );
return 0;
}
>>545 /*1レスに納めるためコメント省略*/
#include <stdio.h>
#define N 3
#define MAX 100
int main(void){
int num[N];
int i,j;
num[0]=1;
for(i=1;i<N;i++){
num[i]=num[i-1]+1;
}
i=N-1;
while(i>=0){
if(num[i]<MAX+i-(N-1)){
for(j=0;j<N;j++)printf("%d ",num[j]);
printf("\n");
num[i]++;
while(i<N-1){
num[i+1]=num[i]+1;
i++;
}
}else i--;
}
for(j=0;j<N;j++)printf("%d ",num[j]);
printf("\n");
return 0;
}
551 :
デフォルトの名無しさん :2006/11/14(火) 22:44:42
シリアルポートに入力した文字を送信して返してきた値を出力するプログラムを作成せよだって 言語はC言語でコンパイラVC.NET
デバイスファイル AUX
>>547 URLありがとうございます。
しかし、残念ながら内容が難しく
理解できなかったですorz
失礼ですが、C言語でのRSA暗号実装紹介のサイトは
ご存知じゃありませんか?
>>548 #include<stdio.h>
#define N 52 /* トランプの枚数 */
int main( void )
{
int k, i;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
int cards_at_begining[N];
for( k=0; k<N; k++ ) {
cards[ k ] = k+1;
cards_at_begining[k] = k+1;
}
while( 1 ) {
loop_start:
count++; /* 回数を一回増分 */
for (i=0; i<N/2; i++) { /* shuffle */
temp[i]=cards[2*i];
temp[i+M]=cards[2*i+1];
}
for (i=0; i<N; i++)
cards[i]=temp[i];
for (i=0; i<N; i++) { /* check */
if (cards[i] != cards_at_begining[i])
goto loop_start;
}
break;
}
printf( "%d 回目で元に戻る", count );
return 0;
}
556 :
デフォルトの名無しさん :2006/11/14(火) 23:15:57
>>548 for(k=0; k<N; k++) temp[k] = i%2?cardsk/2+M]:cards[k/2];
for(k=0; k<N; k++) if(temp[k]!=k+1) break;
if(k==N) break;
for(k=0; k<N; k++) cards[k] = temp[k];
cardsk/2+M] →cards[k/2+M]
>>555 切り方間違ってない?
560 :
デフォルトの名無しさん :2006/11/14(火) 23:33:01
お願いします [1] 授業単元: プログラミング [2] 問題文(含コード&リンク):整数値nを読み込み、1からnまでで、2で割り切れて3で割り切れない数値の個数を出力するプログラムを作成せよ。 実行例 読み込み数値20の場合 INPUT INTEGER:20 7 integers can be divided by 2 and not by 3 (2,4,8,10,14,16,20の7個) [3] 環境 [3.1] OS:windows [3.3] 言語:c++ [4] 期限: 明日
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): @ int a,b,c,d; のように、文字が来ればコンマの繰り返しで セミコロンが来たら終了というプログラムを作れ A int a,b; int x; のように、改行できるプログラムを作る [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限 明日の14時まで [5] その他の制限: なし
>>560 # include <iostream>
int main(void)
{
int n;
std::cout << "INPUT INTEGER:";
std::cin >> n;
std::cout << (n / 6) * 2 + (n % 6 >= 2) + (n % 6 >= 4) << " integers can be devided by 2 and not by 3\n";
}
>>560 #include<stdio.h>
main(){
int i,N,kosuu;
printf("INPUT INTEGER:");
scanf("%d",&N);
for (i=0;i<=N;i=i+2){
if(i%3==0) kosuu=kosuu+1;
}
printf("%d integers can be divided by 2 and not by 3",kosuu);
}
564 :
562 :2006/11/14(火) 23:43:42
>devided dividedね。
if(i%3==0) kosuu=kosuu+1; if(i%3!=0) kosuu=kosuu+1; matigaeta
567 :
デフォルトの名無しさん :2006/11/14(火) 23:47:12
よろしくお願いします。 [1] 授業単元: C言語 [2] 問題文(含コード&リンク): 最大8桁の整数を2つ入力し、int型配列に格納。 入力後2つの数の和を求める。負の数、整数以外、スペースのみが入力された場合 エラーメッセージを表示 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11/18まで [5] その他の制限: gets,scanfは禁止
568 :
561 :2006/11/15(水) 00:01:12
for文でお願いします ちょっと説明不足でしたか・・・
>>568 それで説明が足りたと思う神経を自分で疑ったことが無いのか?
>>568 せめてI/Oぐらいちゃんと書けってこった
>>568 はっきり言って何を言ってるのか全く分からん
問題文をそのまま一字一句間違いなく写してくれ
573 :
デフォルトの名無しさん :2006/11/15(水) 00:13:11
>>568 どうせ、goto でループつくってもいいんでしょ?
>>559 わざわざありがとうございます。量が膨大で
自分のヘタレのせいで
中身もまったく理解できない始末でしたorz
また、VC6.0でコンパイラしようとしたらエラーになって
しまいました。
お時間あれば助力お願いします。
575 :
545 :2006/11/15(水) 00:21:51
>>550 実際に走らせて見たところちゃんとできててビックリしました。
なぜこれでできるかは明日じっくり考えたい思います。
ありがとうございました。
>>568 #include <stdio.h>
int main()
{
printf("int ");
printf("a,");
printf("b,");
printf("c,");
printf("d;");/* <-セミコロンが来た */
printf("\n");
printf("終了します\n");
for(;0;);
return 0;
}
>>561 >>568 エスパーでも探してるのか?
#include<stdio.h>
int main(void){
char buf[1024];
int i;
printf("Input string : ");
gets(buf);
for(i=0;buf[i]!='\0';i++){
if(buf[i]==';') break;
printf(",");
}
return 0;
}
#include<stdio.h>
int main(void){
char buf[1024];
int i;
printf("Input string : ");
gets(buf);
for(i=0;buf[i]!='\0';i++){
printf("%c", buf[i]);
if(buf[i]==';') printf("\n");
}
return 0;
}
[1] 授業単元: アルゴリズム [2] 問題文(含コード&リンク):BM法を作って比較とジャンプの履歴を表示する。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C BM法のプログラミングは作ってみましたが、ジャンプと比較の履歴の表示 の仕方がわかりません。 よろしくおねがいします。
BM法のプログラミングです。 #include <stdio.h> #include <string.h> #include <limits.h> int bm_match(const char txt[], const char pat[]) { int pt; int pp; int txt_len = strlen(txt); int pat_len = strlen(pat); int skip[UCHAR_MAX + 1]; for (pt = 0; pt <= UCHAR_MAX; pt++) skip[pt] = pat_len; for (pt = 0; pt < pat_len - 1; pt++) skip[pat[pt]] = pat_len - pt - 1; while (pt < txt_len) { pp = pat_len - 1; while (txt[pt] == pat[pp]) { if (pp == 0) return (pt);
pp--; pt--; } pt += skip[txt[pt]]; } return (-1); } int main(void) { int idx; char s1[80]; char s2[80]; printf("テキスト:"); scanf("%s", s1); printf("パターン:"); scanf("%s", s2); idx = bm_match(s1, s2); if (idx == -1) puts("テキスト中にパターンは存在しません。"); else printf("%d文字目に見つかりました。\n", idx + 1); return (0); }
↑のプログラミングにジャンプと比較の履歴を表示 したいのですがわかりません。 よろしくおねがいします m(__)m
582 :
561 :2006/11/15(水) 00:37:58
>>577 ありがとうございます。
俺日本語から勉強し直します・・・
>>574 VC6でコンパイルできるようにするだけなら、
28行目
# else /* C99 */
の前に、
# elif defined _MSC_VER
typedef unsigned __int16 smallint;
typedef unsigned __int32 middleint;
typedef unsigned __int64 largeint;
の4行を追加すればたぶん問題ない。
gccでは-std=c99フラグを付ければコンパイルできる。
こういう小細工をせずにC89標準の機能のみで動くようにするのは厄介だけど、できなくはない。
>>577 すげぇエスパー。元の問題知ってるとしか思えない。
>>578 こういうことでいいのかな?
while (txt[pt] == pat[pp]) {
↓
while (1) {
printf("compare : txt[%d]=%c and pat[%d]=%c\n", pt, txt[pt], pp, pat[pp]);
if(txt[pt] != pat[pp]) break;
pt += skip[txt[pt]];
↓
pt += skip[txt[pt]];
printf("jump : %d to %d\n", pt, pt+skip[txt[pt]]);
586 :
578 :2006/11/15(水) 01:10:52
>>585 どうも回答ありがとうございます!!
変更後エラーはでましたが、ここまでヒントをくれれば
あとはなんとかなりそうです。
本当にありがとうございました☆
587 :
デフォルトの名無しさん :2006/11/15(水) 01:53:36
すみません 533 お願いします
>>587 Cでつくったが問題見たらC++でcin使ってとか書いてあった。
眠くなったからおやすみ
590 :
デフォルトの名無しさん :2006/11/15(水) 02:56:57
>>507 どっち方向がお望みか知らんけど螺旋にしてみた
#include <stdio.h> #define N 9 //サイズ
void print(int ary[N][N]);int right(int ary[N][N],int x,int y, int n, int past);int up(int ary[N][N],int x,int y, int n, int past);
int down(int ary[N][N],int x,int y, int n, int past);int left(int ary[N][N],int x,int y, int n, int past);void answer(int ary[N][N], int n);
int main(){ int ary[N][N] = {0}; int n = 0; answer(ary, n); print(ary); return 0;}void answer(int ary[N][N], int n){ int i,j;
for(j =0,i = 1; i <= (N/2 + 1) ; i++,j++){ n = right(ary,j,j,n, i); n = down(ary,i ,N-i,n, i); n = left(ary,N-i,N - i - 1,n, j); n = up(ary,N - i - 1,j, n,j);
}} int right(int ary[N][N],int y,int x, int n, int past){ if(x > N - past || y > N || x < 0 || y < 0)return n; ary[y][x] = n ; right(ary, y, x+1, n +1 , past );
} int down(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N - past || x < 0 || y < 0)return n; ary[y][x] = n; down(ary, y+1,x , n+1 , past );
} int left(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N || x < past || y < 0)return n; ary[y][x] = n; left(ary, y, x-1, n+1 , past );
} int up(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N || x < 0 || y <= past)return n; ary[y][x] = n; up(ary, y-1, x, n+1 , past );
} void print(int ary[N][N]){ int *p = &ary[0][0],i; for(i = 1,p = &ary[0][0]; p <= &ary[N-1][N-1]; p++,i++){ printf("%3d ", *p);
if(!(i % N))putchar('\n');}}
591 :
◆sUfWYz9MSA :2006/11/15(水) 09:30:23
[1] 授業単元: プログラミング [2] 問題文:2つの自然数 a, b に対し, a と b の最大公約数を 求める関数 int gcm(int a, int b) とその公約数をすべて表示する関数 void print_gcm(int , int) を作成せよ. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 2006年11月15日12:00まで [5] その他の制限:関数まで習いました。
>>588 ありがとうございます。
相変わらず中身はさっぱりでしたorz
VC6でコンパイルしたところエラー1が
以下のように出てしまいました。
273行目
'return' : 'void *' から 'unsigned int *' に変換することはできません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
ヘタレでホントすいません。お願いします。
594 :
たか :2006/11/15(水) 10:53:01
[1] 授業単元: プログラミング実習 [2] 問題文:キーボードから入力される100個の整数のうち、 2桁の数がいくつあるかを数えて、その個数を表示する。 文字配列にアルファベットで適当な文字を10文字入れたとき、 入力順序と逆順で表示する。 (配列やポインタを使って記述する。) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Microsoft VisualStudio6.0 [3.3] 言語: C++ [4] 期限: 2006年11月17日まで [5] その他の制限: お願いします!!
曖昧な仕様だな。
>>594 using namespace std;
#include<iostream>
int main(void){for(int i=0,int c=0;i<10;i++){int n;cin>>n;if(n>=10 && n<100)c++;}cout<<c<<endl;return 0;}
↑こいつ最高にアホ
598 :
デフォルトの名無しさん :2006/11/15(水) 13:07:09
[1] 授業単元: プログラミング演習 [2] 問題文 キーボードから入力した複数の英単語を連結して行くプログラムを書け。 ただし、 (1)単語は一度に1つずつ入力し(各単語の入力は改行で終る)、EOFの入力で単語入力を終了とする。 (2)連結する時に、直前の単語との間に区切り文字としてスペースを1つ置き 9 (そうすると英文として読める)、連結した文字を最後に入力する。 ヒント:連結単語を置くために十分長い配列を用意しておいて、入力単語を順番に、その配列にコピーして行けば良い。 [3.1] OS:unix [3.3] 言語:c [4] 期限: 午後6時まで 期限が短すぎるし私には解けそうにありません。 お願いします。
[1] 授業単元: プログラミングT [2] 問題文: 0〜100までの間の数をランダムに5つ入力し、 最小値、最大値、合計、平均値を求めるプログラムを for文とif文を用いて作りなさい。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: Microsoft VisualStudio2005 [3.3] 言語:C++ [4] 期限:2006年11月17日17:00まで [5] その他の制限:表示させるだけの(Printfを使った)基本的なプログラミングから、if、for構文のみ習っています。 宜しくお願いします。
#include <stdio.h> int main(){ int c; while ((c=getc(stdin))!=EOF){ if (c=='\n')c=' '; putc(c,stdout); } fflush(stdout); return 0; }
>>599 using namespace std;
#include<iostream>
int main(void){int max=0,min=100,sum=0,n;
for(int i=0;i<5;i++){cin>>n;sum+=n;if(min>n)min=n;if(max<n)max=n;}
cout<<"最小値:"<<min<<endl<<"最大値:"<<max<<endl<<"合計:"<<sum<<endl<<"平均値:"<<(double)sum/5.0<<endl;
return 0;}
>>598 これでいいのか?単語長はMAXCHARS、単語数はMAXWORDSをいじればよい。
#include <stdio.h>
#define MAXCHARS 10
#define MAXWORDS 1000
int main (void) {
int i = 0, j;
char words[MAXWORDS][MAXCHARS];
while (scanf("%s", words[i++]) != EOF) {}
for (j = 0; j < i - 1; j++) printf("%s ", words[j]);
return 0;
}
>>591 ちょっと遅れた
#include <stdio.h>
int gcm(int a, int b) {
if (b == 0) return a; else return gcm(b, a % b);
}
void print_gcm(int a, int b) {
int i = gcm(a, b);
do if (a % i == 0 && b % i == 0) printf("%d ", i); while (--i != 0);
}
int main (void) {
int a, b;
printf("a b?:");scanf("%d%d", &a, &b);
print_gcm(a, b);
return 0;
}
期限過ぎてるじゃねーかこの愚図!
607 :
デフォルトの名無しさん :2006/11/15(水) 14:20:04
>>602 ようやくできました。有り難うございます。
609 :
デフォルトの名無しさん :2006/11/15(水) 16:58:57
634 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/15(水) 18:19:30 C++ガウス関数作れって言われたんだけど、渡された本は読んだんだけど おすすめな初心者解説サイトないですぁ? お返事もらえないのでこっちで質問します。
613 :
デフォルトの名無しさん :2006/11/15(水) 19:04:21
>>613 This page does not exist yet.の意味がわからないので
訳してください
615 :
デフォルトの名無しさん :2006/11/15(水) 19:08:46
>>614 Before creating the page, please check if a similar page already exists.
Here are some existing pages with similar names:
* la3
* la4
おまいらどんだけ凄いんだよ・・・英語の問題とか見てると劣等感が・・・ それを澄ました顔でペラペラと・・・く・・・
re-entrantってなんすか?
620 :
◆mI7lo1ZRb6 :2006/11/15(水) 19:43:02
mod_perlもP2Pも言語じゃねえ あ、釣られた
622 :
デフォルトの名無しさん :2006/11/15(水) 20:36:18
[1]プログラミング [2]与えられた文字列a,bを交互に入れ替えて表示する関数の作成 [3] 環境 [3.1]リナックス [3.2]gcc [3.3]C [4]無期限 [5]文字列に関したライブラリ関数使用禁止 ↓以下自分で作ったヤツ。どこがおかしい?? #include<stdio.h> void irekae(char *a, char *b, char *kekka) { while(*a != '\0'){ *kekka++ = *a; *a++; *kekka++ = *b; *b++; } } int main(void) { char a[]="12345"; char b[]="abcde"; char kekka[11]; irekae(a,b,kekka); printf("%s",kekka); return(0); }
>>612 コンパイルできました。
誠にありがとうございます。
なんとか提出期限には間に合いそうです。
残りの期間で必死に中身を理解しなければ…
たぶんムリだがorz
>>624 こんなところに上げられたWordのファイルを誰が読むんだ?
テキストにせぃ。
>>627 wordなのかよ
zipな時点で俺はダウンロード諦めた
>>625 @@ -7,6 +7,7 @@
*kekka++ = *b;
*b++;
}
+*kekka=0;
}
int main(void)
{
631 :
625 :2006/11/16(木) 00:28:58
ありがとうございます。 m(_ _)m
>>624 #include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct field_tag {
char word[32];
int count;
struct field_tag *next;
} field;
int myfget(FILE *fp, char *s) {
int c, p = 0;
while (1)
if ((c = fgetc(fp)) == EOF) return c;
else if (!isalnum(c)) {
s[p++] = '\0';
return 1;
}
else s[p++] = (char)c;
}
int isword(char *s) {
int p = 0;
while (1) {
if (!isalnum(s[p]))
if (s[p] == '\0' && p != 0) return 1;
else return 0;
p++;
}
}
void search_and_insert(field *dest, const field *src){
field *temp;
if (dest->next == NULL) {
dest->next = (field*)malloc(sizeof(field)); memset(dest->next, 0, sizeof(field)); strcpy(dest->next->word, src->word); dest->next->count++; } else if (!strcmp(dest->next->word, src->word)) dest->next->count++; else if (!(strcmp(dest->next->word, src->word) < 0)) { temp = (field*)malloc(sizeof(field)); memset(temp, 0, sizeof(field)); strcpy(temp->word, src->word); temp->count++; temp->next = dest->next; dest->next = temp; } else search_and_insert(dest->next, src); } void free_all(field *ptr){ if (ptr->next != NULL) free_all(ptr->next); free(ptr); } int main(int argc, char *argv[]){ field *root= (field*)malloc(sizeof(field)), *cur = root, temp; FILE *fp = fopen(argv[1], "r"); memset(root, 0, sizeof(field)); temp.next = NULL; while(myfget(fp, temp.word) != EOF){ if (isword(temp.word)) search_and_insert(cur, &temp); memset(&temp, 0, sizeof(field)); } cur = root->next; while (cur != NULL){ printf("%s : %d\n", cur->word, cur->count); cur = cur->next; } if (root != NULL) free_all(root); return 0; }
Linux Is Not UniXである UNIXはOSである したがってLinuxはOSではない こうですか わかりません
>>635 三段論法の要件満たしてないだろそれじゃ
637 :
デフォルトの名無しさん :2006/11/16(木) 04:39:32
連立方程式をとくサブ関数をお願いします! x1*a + y1*b=0 x2*a + y2*b=0 のように引数にx1 x2 y1 y2をとる感じの関数をお願いします><
すいません!
>>637 ですが引数は右辺の0も引数にとって6個でお願いします。
付け加えてしまって本当にすいません!
謝る暇があったらテンプレにそって書き直せクズ
>>637 ガウスの消去法
ガウス・ジョルダン消去法
反復法
いろいろあるね(・∀・)
>>640 へへ、すいやせん!
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):2元連立方程式を解きなさい
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC2005
[3.3] 言語: C++
[4] 期限: 今週まで
[5] その他の制限:
>>637 >>638 です
>>641 ガウス・ジョルダン法ができればいいですけど答えがでればなんでいいです。ガウスジョルダンは頭では理解できるんですけど
プログラムにかけません><
しかしx、yの方が係数なのか 変わってるな 引数6つって答えはどうやって返すの? 構造体?
>>643 いや、気になるならabを係数にしていただいても( ;・∀・)
答えはどうやって返しましょう?素人に一番わかりやすい形で返していただければ・・・
#define BEST 5.058548 . . . if(fy[0] == BEST || s > N) break; プログラムの先頭でBESTを定義しておいて、ループの中の条件で breakさせたいのですが、ループから抜け出せません。 printfで確認しましたが、配列fy[0]の中身は確かに5.058548でした。 おしえてください><
648 :
大学生 :2006/11/16(木) 08:46:42
「問題16」eの値を実数として計算し表示せよ。 「問題17」πの値を実数として計算し表示せよ。 「問題18」eの値を小数点以下60桁まで求めよ。 「問題19」πの値を小数点以下60桁まで求めよ。 この問題16.17.18、19のC言語プログラム(C++)でお願いします。 それと多倍長少数を利用して作ってください。
>>645 fabs(fy[0]-BEST)<0.000001
651 :
デフォルトの名無しさん :2006/11/16(木) 13:55:14
>>648 問題19 :printf("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647");
652 :
デフォルトの名無しさん :2006/11/16(木) 14:42:00
[1] 授業単元: 卒業研究 [2] 問題文(含コード&リンク): フレーム間差分 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual Studio 2003 [3.3] 言語: C++ [4] 期限: 今週まで [5] その他の制限: ありません。 aviファイルを取り込んで、フレーム間差分を実行できるプログラムを希望します。
653 :
一年生 :2006/11/16(木) 14:49:10
[1] 授業単元: プログラミング [2] 問題文:文字配列にアルファベットで適当な文字を10文字入れたとき、 入力順序と逆順で表示する。 なお、配列を用いること。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0 [3.3] 言語: C++ [4] 期限: 2006年11月17日まで [5] その他の制限: なし
>>653 #include <stdio.h>
#include <string.h>
int main(void){
int i;
char buf[11];
scanf("%s",buf);
for(i=strlen(buf)-1;i>=0;i--){
putchar(buf[i]);
}
}
>>653 このスレを逆順で検索
int i;
char a[11];
char *p = a;
scanf("%s", p);
for(i=9;i>=0;i--)printf("%c",p[i]);
>>652 卒研をこのスレに丸投げw
年収200万円コースだな
ほぅ。漏れの10倍の年収だな。
659 :
デフォルトの名無しさん :2006/11/16(木) 15:29:56
[1] 授業単元: プログラミング [2] 問題文・キーボードから n (1 <= n <= 50) 人分の得点(整数)を入力する. ・得点は0点以上100点以下とし,範囲外なら再入力させる. ・全員分入力が完了したら,平均点を求め,小数点以下1桁で表示する. ・各個人について,得点,平均点との差,および判定を表示する. ・判定は,80点以上を優,80点未満70点以上を良, 70点未満60点以上を可,60点未満を不可とする. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名 gcc [3.3] 言語: C [4] 期限: 今週まで [5] その他の制限: ありません。
>>658 お前の年収はいずれ100倍にしてやる!
だから、今はガンバレ。
>>648 問題18
#include <stdio.h>
#include <math.h>
void e(int *data) {
int i, j, *dap;
unsigned k = 1, k2 = 2, s = 0;
long x;
for (dap = data, j = 16; j--; ) *dap++ = 0;
for (i = 1; s <= 201; i++, s += j)
if (i >= k) {
k = k2; k2 <<= 1; j++;
}
*data = 1;
while (--i) {
for (x = 0, j = 16, dap = data; j--; ) {
x = x * 10000 + *dap; *dap++ = x / i; x %= i;
}
(*data)++;
}
}
int main(void) {
int i, data[16];
e(data);
printf("e = %1d.", data[0]);
for (i = 1; i <= 15; i++) printf("%04d", data[i]);
printf("\n");
}
>>659 #include <stdio.h>
#include <stdlib.h>
int main(void){int n,sum,i;double avg;int* p;char tmp[10];
do{fgets(tmp,sizeof(tmp),stdin);n=atoi(tmp);}while(n>50||n<1);
p=(int*)malloc(sizeof(int)*n);for(i=0,sum=0;i<n;i++){do{fgets(tmp,sizeof(tmp),stdin);
p[i]=atoi(tmp);}while(p[i]>100||p[i]<0);sum+=p[i];}avg=(double)sum/(double)n;
printf("平均:%.1f\n",avg);for(i=0;i<n;i++){printf("%-2i %-3i %-2.1f %s\n",i+1,p[i],
(double)p[i]-avg,(p[i]>=80)?"優":((p[i]>=70)?"良":((p[i]>=60)?"可":"不可")));}return 0;}
>>652 単なる研究の手段として、差分画像がほしいだけなら、 avi を連番ビットマップに変換する
フリーのプログラムがあるから、それを持ってきてあとは単純にバイト列を引き算汁。
BMPヘッダを飛ばすくらいはできるだろ。
フレーム間差分を取るプログラムの研究が主目的なら、4月開始の卒研だったら
間に合わない悪寒。さっさと教授に相談に行ったほうがいい。
[1] プログラミング [2] 例えば, "Antonio Rodorigo Nogueira" → "arieugoN ogirodoR oinotnA" のように, 引数として受け取った文字列を 逆順にした文字列に書き換える関数 void str_reverse(char s[]) を作成せよ. この関数を用いて, キーボードから入力した文字列を逆順に表示するプログラムを作成せよ. [3] [3.1] winXP sp2 [3.2] cygwin [3.3] C [4] 2006年11月23日 [5] ポインタ無しです。多バイト文字は無視してもらって構いません。
また逆順か! もういいかげんにするっすお!(ポッポー
>>664 #include <stdio.h>
#include <stdlib.h>
void str_reverse(char s[]){int i,l=strlen(s);char t;for(i=0;i<l/2;i++){t=s[i];s[i]=s[l-i-1];
s[l-i-1]=t;}}int main(void){char s[100];fgets(s,sizeof(s),stdin);s[strlen(s)-1]='\0';
str_reverse(s);puts(s);return 0;}
667 :
デフォルトの名無しさん :2006/11/16(木) 18:57:22
[1] プログラミング [2] 特にはないが、テンプレートマッチングのプログラムを作ること。 [3] 環境 [3.1] Windows XP [3.2] cl [3.3] C言語 [4] 2006年11月18日 [5] 特にありません。
>>653 が微妙にめんどくさいな。
課題をそのまま解釈すると、アルファベット以外は逆順にしないことになる。
逆順がはやってる?
>>668 こ、、コレ、、、これ戦闘力たけぇな・・・・。
s[l-i-1] こんな数学僕には思いつきません。もうぬるぽ
>>668 「アルファベットで適当な文字を10文字入れたとき」以外の動作は未規定、と解釈すればよろし
3つの整数のうち最大のものを選べってプログラムで if(x>y>z) {max=x} if(y>x>z){}max=
673 :
デフォルトの名無しさん :2006/11/16(木) 19:15:33
>>671 んじゃ、その時はディスクをすっきりフォーマットするってことで
あーごめんなさい 3つの整数のうち最大のものを選べってプログラムで if(x>y>z) {max=x} if(y>x>z){max=y} ・ ・ ・ って全通り書いたらyが無視されたり、最大がとんでもない数字になったりして困ってます
>>653 というわけでアルファベットのみひっくり返す版。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void str_reverse(char s[],int l){int i;char t;for(i=0;i<l/2;i++){t=s[i];s[i]=s[l-i-1];
s[l-i-1]=t;}}void rev_no_alpha(char s[]){int b,e,f=0,l=strlen(s),i;for(i=0;i<l;i++){if
(!f&&!isalpha(s[i])){f=1;b=i;}if(f&&isalpha(s[i])){f=0;e=i;str_reverse(&s[b],e-b);}}}
int main(void){char s[100];int l;fgets(s,sizeof(s),stdin);l=strlen(s)-1;s[l]='\0';
rev_no_alpha(s);str_reverse(s,l);puts(s);return 0;}
>>674 例えばx>y>zだと、zが評価される相手は0か1しかない。
これ以上はスレ違い。
677 :
デフォルトの名無しさん :2006/11/16(木) 19:29:16
1] 授業単元: プログラミング [2] 問題文:main関数内でint型配列変数を定義し、適当な値で初期化 そのint型配列変数と要素数を受け取りすべての要素を表示する ユーザー定義関数を作成する。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2006年11月27日まで [5] その他の制限: なし
>>677 #include "stdafx.h"
#include<stdio.h>
void print_array(int a[],size_t len){int i;for(i=0;i<len;i++){printf("%i\n",a[i]);}}
int main(void){int a[]={1,1,2,3,5,8,13,21,34,55,};print_array(a,sizeof(a)/sizeof(int));return 0;}
LinuxはOSじゃないつってんだろ ぼけ
>>679 >main関数内でint型配列変数を定義し、適当な値で初期化
ってあるからmain関数も必要なんでない?
俺のESPによると、>681は「最初」と「最後」を間違えている
おれも
>>680 なんていえばいいの?
GNU/Linuxシステム?
確かにLinus一人の手柄みたいになる呼称は良くないよな。
Linux.orgにもLinux is a free Unix-type operating systemと書いてある件について
Linux系OSって書けってこと?
ところで宿題マダァー? (・∀・ )っ/凵⌒☆チンチン
692 :
デフォルトの名無しさん :2006/11/16(木) 21:34:50
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2955.txt を改造し, バブルソートの要素の交換を, 逆順で行うプログラムを作成し, x[ ]={7,1,2,3,4,5,6} という列が一度でソートできるようにしなさい.
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2956.txt を改造し, 立方根を計算するプログラムを作成しなさい。
この二つの宿題をおながいします。。。
695の問題読んでたらなんか笑いがこみ上げてきた
>>696 えぇ?何かおかしなところありましたか?
その50メートルはどうやって算出?dpiは?
>>700 scanf( "%d", &suryo );
とりあえず&をつけ忘れてるぞ
>>702 うひぃありがとうございます。こんなところでミスってたんですね…本当に顔から火が出る思いです。
ちゃんと結果も出ました。駄文を見ていただきありがとうございました!
705 :
STUDENT :2006/11/16(木) 23:31:16
「問題17」πの値を実数として計算し表示せよ。 「問題19」πの値を小数点以下60桁まで求めよ。 のCプログラム(C++)を作ってください。 多倍長少数を利用してプログラムを作ってください。
>>707 はい、完璧です!ありがとうございました
こんな早く出来るなんて二週間も考えていた私が阿呆のようです
710 :
デフォルトの名無しさん :2006/11/16(木) 23:43:08
こんなことこのスレで言うのもなんだが問題17くらい自分で解けば?と思うんだが π=4arctan1とかマチンの公式とか連分数展開とか方法は色々あるだろ
>>713 左が大きい方が一般的なんだっけ?ごめんそこらへんテキトー
>>710 > <<本日までの売上>>
> ナシ:800
> 今日の売上を入力してください.
> ナシ:100
> <<本日までの売上>>
> ナシ:1600
このプログラム、漏れには無理だ…。
変数が左なのがほとんどじゃない?
社会派な先生だぜ
721 :
デフォルトの名無しさん :2006/11/17(金) 00:45:23
>>710 念レス成功? って、俺と同じ大学の人間かよ
明日の昼提出だから俺といっしょで焦ってるなw
つーわけで俺からも頼みます、応用だけでいいのでお願いします(ペコリ
722 :
デフォルトの名無しさん :2006/11/17(金) 00:49:56
710が大学の問題だったということに衝撃を受けた
>>722 今むこうで解説を書いてるからちょっと待て。
725 :
デフォルトの名無しさん :2006/11/17(金) 00:53:57
売上初期化が何を行うのか悩んだが 0入れるだけかよ
[1] 授業単元:情報処理 [2] 問題文: 多倍長演算の手法を用いてキーボードから 20 桁までの整数 a, b を入力し、減算(a - b)をするプログラムを作成せよ。答が負の場合は、マイナス記号を表示させること。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:11月17日4時 [5] その他の制限: charで入力後intの配列へ入れ直す。
729 :
こまったさん ◆LY1hBagPlw :2006/11/17(金) 01:36:28
[1] プログラム:
[2]問題文:
コード番号と名前から構成される構造体(name_list)のスタックマシンプログラムを作成せよ。
スタックマシンとは、LIFO (Last in First Out: 後入れ先出し)を実現する機構で、
push操作によりデータが保存され,pop操作により最も最近pushしたデータが取り出される。
ここで,pop,pushの操作を自己参照型の構造体を利用してプログラムしなさい。
簡単にまとめると最初のoperateにpopかpushを入れます。
popなら番号と名前を入れると、新しいデータが保存されます。
pushなら一番最近に入れたデータを自動で出します。
実行画面:例
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2971.txt [3] 環境
[3.1]WindowsXP
[3.2]gcc 3.4
[3.3]C/C++/どちらでも可
[4] 期限:2006年11月18日 7:00 まで
[5] 関数popとpushを定義するプログラムで無ければならない。
そのファイルだけで実行できるプログラムで無ければならない。
期限が短すぎて僕には無理そうです…
お願いします・・・
STLのstack使ったらさすがに反則か
>>710 ,721
問1
void initialize(int account[]){
for(int i=0;i<=4;i++){
account[i]=0;
}
}
void daily_input(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
int tmp;
for(int i=0;i<=4;i++){
printf("%s :",hinmoku[i]);
scanf("%d",&tmp);
account[i]+=tmp;
}
}
void daily_output(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
for(int i=0;i<=4;i++){
printf("%s :%d\n",hinmoku[i],account[i]);
}
}
問2 int main(void) { nt i,account[3][5], input; char* tenmei[]={"星が丘本店","塩釜口支店","上社支店"}; for (i=0;i<=2;i++){initialize(account[i]);} printf("初期化を完了しました.\n"); while (1) { printf("売上を入力しますか.プログラムを終了しますか.(入力:1,終了:99):"); scanf("%d", &input); if (input == 99) { printf("終了します\n"); break; } printf("本日の売上を入力してください.\n"); for (i=0;i<=2;i++){ printf("%s\n",tenmei[i]); daily_input(account[i]); } printf("<<本日までの売上>>\n"); for (i=0;i<=2;i++){ printf("%s\n",tenmei[i]); daily_output(account[i]);} } return 0; }
応用 typedef void (*PFUNC)(int account[]) ; int main(void) { PFUNC syori[] = {daily_input, daily_output,initialize} ; int i,account[3][5], input; char* tenmei[]={"星が丘本店","塩釜口支店","上社支店"}; for (i=0;i<=2;i++){ initialize(account[i]); } printf("初期化を完了しました.\n"); while (1){ printf("処理を選択してください.\n1:売上入力\n2:売上表示\n3:売上初期化\n99:プログラム終了\n番号を入力してください:"); scanf("%d", &input); if (input == 99){printf("終了します\n");break;} else if (input>=1 &&input<=3){ for (i=0;i<=2;i++){ printf("%s\n",tenmei[i]); syori[input-1](account[i]); } } } return 0; } 最後だし全角でインデントしてみたお^^
>>705 問題19。行数制限により多少汚く整形されている。
#include <stdio.h>
#include <stdlib.h>
void series(int *data, int maxItem, unsigned bunsi, unsigned bunpo, unsigned plusMinus) {
unsigned bunpo2, *item, *itemDiv, *imp, *ikp; int *dap, i, j, k; long x;
item = (unsigned *)calloc(16, sizeof(unsigned)); for (imp = item, i = 16; i--; ) *imp++ = 0;
itemDiv = (unsigned *)calloc(16, sizeof(unsigned));
*item = bunsi * bunpo * 4; bunpo2 = bunpo * bunpo;
for (j = 1; maxItem--; j += 2, plusMinus++) {
x = 0;
for (i = 16, imp = item; i--; ) {x = x * 10000 + *imp; *imp++ = x / bunpo2; x %= bunpo2;}
imp = item; ikp = itemDiv;
if (j == 1) for (i = 16; i--; ) *ikp++ = *imp++; else for (x = 0, i = 16; i--; ) {x = x * 10000 + *imp++; *ikp++ = x / j; x %= j;}
k = 0; dap = data + 16; ikp = itemDiv + 16;
if (plusMinus & 1) for (i = 16; i--; ) {*--dap += *--ikp + k; if (*dap < 10000) k = 0; else {*dap -= 10000; k = 1;} }
else for (i = 16; i--; ) {*--dap -= *--ikp + k; if (*dap >= 0) k = 0; else {*dap += 10000; k = 1;} }
}
free(itemDiv); free(item);
}
void pi(int *data) {
int i; for (i = 0; i < 16; i++) data[i] = 0;
series(data, 45, 4, 5, 1); series(data, 15, 1, 239, 0);
}
int main(void) {
int i, data[32];
pi(data);
printf("円周率π = %1d.", data[0]);
for (i = 1; i <= 15; i++) printf("%04d", data[i]);
return 0;
}
736 :
デフォルトの名無しさん :2006/11/17(金) 09:27:25
int型一次元配列を受け取り、EOFまでデータを、 配列の先頭から順に10進入力し、入力されたデータの個数をint型で返す関数を作れという事なのですが、EOFまでとはどういう事でしょうか? コンソールからEOFを入力?できるという事ですか? どうやったら入力出来るのか、またそれを検出するにはどうすれば良いのでしょうか、教えてください。 携帯からなので読みにくいかもしれませんが宜しくお願いします。
737 :
r ◆r/etvCKR2A :2006/11/17(金) 09:38:03
>>736 windowsのコマンドプロンプトならctrl+Z
Unixっぽいshとかならctrl+D
738 :
r ◆r/etvCKR2A :2006/11/17(金) 09:39:37
>>736 検出は、feof( stdin )が非0を返すから、それを評価すればいいよ。
739 :
さん :2006/11/17(金) 10:43:11
[1] 授業単元: 継承 [2] 問題文(含コード&リンク): #include <iostream> using namespace std; class c1{ //基本クラス int i; public: void seti(int n){i=n;}; int geti(){return i;}; }; class c2 : public c1 {//発生クラス int j; public: void setj(int n) {j = n;}; void disp(){cout<<geti()<<","<<j<<"\n";}; }; int main() { c2 ob; ob.seti(10); //基本クラスの関数 ob.setj(4); //発生クラスの関数 ob.disp(); return 0; } 基本クラスc1のメンバ関数iは発生クラスc2のメンバ関数disp()内と 関数main()内で、それぞれアクセスできるか。 基本クラスc1のメンバ関数iをprotectedにしたらどうなるか? 基本クラスc1のメンバ変数iはpublicで、基本クラスc1をprivate指定にしたらどうなるか?
740 :
さん :2006/11/17(金) 10:44:02
[3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC++ 6.0 [3.3] 言語: C++ [4] 期限:2006 年11月17日13:00まで 改行が多すぎてエラーになったので分けました、すいませんがよろしくお願いします。
base classを「基底クラス」と言う派閥はあるが、derived classを「発生クラス」というのは 初めて見たな。
>>743 「occurred class」なんて用語を使う宗派自体見たこと無いw
745 :
さん :2006/11/17(金) 11:20:11
disp()とmain()にメンバ変数iをアクセスする手段がわかりません‥。エラーが二つでるとは思うのですが
じゃあそれが回答だろ。
747 :
デフォルトの名無しさん :2006/11/17(金) 11:34:34
自分で項目追加して出典にできるwikipediaは便利すぎ
>>748 父親が判然としないのはbastard classじゃないのか?
751 :
デフォルトの名無しさん :2006/11/17(金) 13:28:11
1] 授業単元:プログラミング [2] 問題文(含コード&リンク): [3] 環境 2分木を「深さ優先探索」する。以下のプログラムを完成させなさい。 関数dfs( )で、訪問した頂点の値を表示する。 -------------------ここから-------------------- #include <stdio.h> typedef struct { int key; int left; int right; } BT; int main( void ) { BT a[ 7 ] = { { 10, 1 , 2 }, { 20, 3 , 4 }, { 30, 5 , 6 }, { 40, -1 , -1 }, { 50, -1 , -1 }, { 60, -1 , -1 }, { 70, -1 , -1 } }; dfs(a, 0); } int dfs( printf(" [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:11月20日 [5] その他の制限:特になし
>>751 dfsの仕様がわからんのでやりようがない。
引数と戻り値の意味くらい書け。
>>751 int dfs(BT a[], int index){
if(index<0)
return 0;
printf("%d\n", a[index].key);
dfs(a, a[index].left);
dfs(a, a[index].right);
return 1;
}
[1] 授業単元: UNIXシステムコール [2] 問題文(含コード&リンク): 引数に与えられたファイルの各行が始まる位置を配列に保存し、 ファイル名以降に指定された行番号の行を出力するプログラムを 作成しなさい。最初にファイルの最初から最後までを読み、各行の開始 する位置を記録しなさい。その後、lseekを使って指定された行を 出力するようにしなさい。ファイルの最大行数は10000行とします。 例 % a.out abc.txt 8 13 5 3 abc.txtの8行目、13行目、5行目、3行目の順番に出力します。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限: 2006年11月18日23時まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ポインタ、構造体などは習いました。
??? 問題文の通りに作ればいいんじゃね?
756 :
◆l34PBoNoqE :2006/11/17(金) 20:18:57
>>756 float xmax, xmin;
xmax = xmin = x[0];
if(x[i]<xmin) xmin = x[i];
if(x[i]>xmax) xmax = x[i];
printf("最小値:%10.2f\n最大値:%10.2f", xmin, xmax);
これをそれぞれ適切な場所に入れる。
[1] 授業単元: プログラミング言語 [2] 問題文(含コード&リンク): A[0]=1,A[1]=2,A[2]=3,A[3]=4,・・・のように配列A[i]をA[50]=51まで代入し、 これらの合計をA[0],A[0]+A[1],A[0]+A[1]+A[2]・・・となるように順に求めていくプログラムを作成せよ。 このプログラム中では、合計が400を超えたときのiと合計をprintfで表示するようにせよ。 [3] 環境 [3.1] OS: (Windows/Linux/等々) WindowsXP HomeEdition [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Visual Stadio2005 [3.3] 言語: (C/C++/どちらでも可 のいずれか) Cでお願いします。 [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 2006/11/19日まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) For文、IF文をかじったところまで習っています。
[1] 授業単元:計算科学
[2] 問題文
確率変数Yが区間[0,1] の一様乱数 X と関数関係 Y = sinh(X)= (e^x - e^-x )/2 にある.
サンプル数?
10000
シード?
128478
と入力すると, p(y) に従う y を生成する.
これを10000回生成し, 平均, 分散, ymin とymaxの間を80のビンに分割して
ヒストグラムを出力するプログラムを作る.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年11月21日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2988.txt を利用して作ってください
>>758 #include <stdio.h>
int main(void)
{
int A[51]; /* A[0]からA[50]までなので51個 */
int i;
/* 配列に初期値をセット */
for(i = 0; i <= 50; i++)
{
A[i] = i;
}
/* 合計を計算 */
for(i = 1; i <= 50; i++)
{
A[i] = A[i - 1] + A[i];
if(A[i] > 400)
{
printf( "合計が400を超えました。\n" );
printf( "合計 = %d, i = %d\n" , A[i], i );
return 0;
}
}
return 0;
}
762 :
◆l34PBoNoqE :2006/11/17(金) 22:21:10
【質問テンプレ】
[1] プログラミング
[2] 与えられたデータ列の自己相関係数を計算区間100、時間間隔t=0〜100で求める
データは
ttp://www.uploda.org/uporg583007.dat [3] 環境
[3.1] OS:WindowsXP
他は良くわかりません
[4] すでに過ぎています……この土日中で……
[5] その他の制限: 当然できるよな?見たいなノリで出題されたので制限などはなさそうです
以下参考例です。???を埋めろといわれました
それ以外にも加える箇所があるかもしれないとのことです
// MRa.c データファイルを読み込み 分散,相関を求める
//データファイル名,ラグはコマンドライン引数から取得
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define OFST 0 //計算開始位置
#define N 24 //計算区間
int main(int argc, char *argv[]) //引数の数,ポインタをargc,argv[]に
{
char *fname ="defoult datafile name";
char fname1[20]; //ファイル名の格納場所 20文字分用意
char dummy[255];
FILE *fp;
int i,t,te=0;
float data;
float x[2048];
double mx,my,sx,sy,sxy,sxx,syy,cxx,cxy,cyy,rxy;
//データファイル名構築,ラグ t のセット if (argc==3) {fname = argv[1]; //引数の数が2つの時のみ読み込み te = atoi(argv[2]);} //最大ラグ数 te を読み込み strcpy(fname1,fname); //文字列のコピー strcat(fname1,".txt"); //文字列の追加 拡張子.txtをつける //データ読み込み /*file open & read 書式付き*/ if (NULL==(fp = fopen(fname1,"rt"))) { puts("FILE is not exist!!"); exit(1); } //ファイル終端まで配列に読み込む fscanf(fp,"%s", dummy); fscanf(fp,"%s", dummy); i=0; while(!feof(fp)&&i<2024){ fscanf(fp,"%f", &data); x[i]=data; // printf("\n %6d,%8.3f",i,x[i]); i=i+1; //データ数カウント } for(t=0;t<=te;t++){ //ラグ te まで繰り返し sx = 0.0; sy = 0.0; sxy= 0.0; sxx= 0.0; syy= 0.0;
//平均,分散の計算準備 for(i=OFST;i<N+OFST;i=i+1){ //printf("\n %5d %8.3f %8.3f",i,x[i],x[i+t]); sx = sx+x[i] ; sy = sy+x[i+t] ; sxy= sxy+x[i]*x[i+t]; sxx= sxx+x[i]*x[i]; syy= syy+x[i+t]*x[i+t]; } mx= sx / N ; my= sy / N ; cxx=????????????????????; cyy=????????????????????; cxy=????????????????????; rxy=????????????????????; //printf("\n N=%4d t=%4d",N,t); //printf("\n 平均 =%8.3f, %8.3f",mx,my); //printf("\n 自己共分散 =%10.5f",cxx); //printf("\n 自己共分散 =%10.5f",cyy); //printf("\n 自己共分散 =%10.5f",cxy); //printf("\n 自己相関 ρ=%10.5f",rxy); printf("\n %5d %10.5f",t,rxy);} return(0);}
[1] 授業単元:プログラミング演習 [2] 問題文:初項が1、交差が(-1/1000000)の数列がある。この数列の初項から最初に値が0になる項までの和を求めるプログラムを作成せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年11月21日まで [5] その他の制限:百万回の和の繰り返しでプログラムする。 ↓自分で作ってみたのですが、エラーが出てしまいます。 どこが間違いかを指摘してもらえませんか? #include<stdio.h> int main() { double a[1000000],s=0,a1=1,d=-0.000001; int n=1; while(a[n]==0){ a[n] = a1 - ((n-1)*d); s = s + a[n]; n++; } printf("ans : %lf",s); return 0; }
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
>>767 a[1000000]とかいらねーだろ。
これ普通だと8Mバイトほどになるよな。スタックはデフォルトで1Mほどしか
取られていない(Windows)
>>768 すみません↓エラーはこれです。
10 [main] a 3552 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
Segmentation fault (core dumped)
>>769 返答ありがとうございます。
どのように変更すればよいですか?
配列取らずにforループで回せばいいじゃん しかも事前に配列の中身用意してるわけでもなし もったいないもったいない
未初期化の領域を参照してるわ、whileの条件が意味わからないわでグダグダだな 自分で作ったのなんて書かかないほうがよかったな
>>771 返答ありがとうございます。
配列はいらないんですか・・・
ちょうど配列を習ったばかりだったので使わなければいけないものだと思っていました。
>>772 whileの条件はだめですか?問題に忠実に作ったつもりでしたがorz
ご指摘ありがとうございました。
>>773 このプログラムがやったことは、
毎日20人の客がくる定食屋において
20×365枚の皿を用意するようなもんだ
100万回繰り返せっていってるんだから素直に百万回繰り返しなさい
>>773 0.1単位の小数は2進数の浮動小数点では正しく表せないので注意
#include <stdio.h>
#include <math.h>
#define EPS 1e-7
int main(void)
{
double s = 1.0, a1 = 1.0, d = -1e-6;
while (fabs(a1) > EPS) {
a1 += d;
s += a1;
}
printf("ans : %f\n", s);
return 0;
}
>>774 はい・・・素直になります・・・
とてもわかりやすくありがとう!
>>775 誤差が生じてくるということでしょうか・・・。
ソースコードまで載せてくれてありがとう。
>>777 10進の小数でも使わないと必ず誤差が出る。
それか64bit整数で100万倍で計算しておいて最後に100万で割るとか。
>>778 なるほどなー。すごく勉強になります!
0.1単位の小数には注意すると。フムフム
ほんとありがとう!
>>778 多分これは誤差が出るよね?おかしいよね?
っていうことを確認する課題だと思う
こういう問題に対して誤差が出ないような答えを出すと嫌がられるので
きっちり誤差を出すようにするのが処世術だぜ
二進数の小数で正しく表せる数は0.5、0.25、0.125、0.0625・・・(以下続く) と、それらの和だけ。
[1] 授業単元:プログラミングT [2] 問題文(含コード&リンク):上底、下底、高さを入力して、台形の面積を逐次計算し 表示せよ。ただし入力データのいずれかが0のとき終了するものとする。 また、入力したデータの中で、面積が最大のものの面積、上底、下底、高さを求めて表示せよ。 [3] 環境 [3.1] OS:Windows [3.2] すみません。よくわからなかったです [3.3] C++/ [4] 今度の火曜日 [5] 特に無し #include<stdio.h> void main() { float a,b,h,max=0,amax,bmax,hmax; double s; amax=0; bmax=0; hmax=0; printf("上底,下底,高さを入力してください。\n"); scanf("%f,%f,%f",&a,&b,&h); while(a!=0&&b!=0&&h!=0){ s=(a+b)*h*0.5; printf("s=%lf\n",s); if(s>max)max=s; if(s>max){amax=a; bmax=b; hmax=h; }
scanf("%f,%f,%f",&a,&b,&h); } printf("s=%lf a=%f b=%f h=%f\n",max,amax,bmax,hmax); } とりあえずここまで作ってみて、計算して面積の最大は表示できるんですが、 面積最大のときの各辺の長さの表示がわかりません。 よろしくお願いします。
>>782 if(s>max)max=s;
if(s>max){amax=a;
↓
if(s>max){max=s;
amax=a;
これはひどい
あ、あれ?それさっきやってみて出来なかったのに もっかいやって見たら出来ました。なんかよく分からないけど、 助かりました。ありがとうございます。
[1] プログラミング [2] 下のように初期化した文字列 sentence と, キーボードから入力した文字列 str に対し, sentence が str で始まっているかどうか (str が sentence の先頭から一致するかどうか) を判定して表示するプログラムを作成せよ. sentence の方が str より長いと仮定してよい. char s[] = "This is a pen. That is an apple. "; 次を確認せよ. o This → 始まっている o That → 始まっていない o Th → 始まっている o Thise → 始まっていない [3] [3.1] winXP sp2 [3.2] cygwin [3.3] C [4] 2006年11月23日 [5] 文字列を比較する関数を使ってください。 参考にしなくてはいけないプログラムがあるので、 それを次のレスに書きます。似たような感じでお願いします。
788 :
787 :2006/11/18(土) 03:27:17
int main(void) { int len; char line[100]; printf("入力された文字列の長さを数えます。\n"); printf("終了するときはquitと入力してください。\n"); for(;;){ printf(">>>"); gets(line); if(str_comp(line,"quit")==0){ break;} len=str_length(line); printf("%sの長さは%dです。\n",line,len); } printf("終了します\n"); return 0; } int str_comp(char str1[],char str2[]){ int i; for(i=0;str1[i]==str2[i];i++){ if(str1[i]=='\0'){ return 0;} } return str1[i] - str2[i]; } int str_length(char s[]){ int i; for(i=0;s[i]!='\0';i++) ; return i; } これを参考にです、よろしくお願いします。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 任意の金額をある利率(複利、日率)で運用した場合の、
目標金額をに達する日数を求めよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々) WindowsXP SP2
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) VC++ 2005
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限:今週いっぱい
[5] その他の制限: 基礎程度です。取りあえずwhileで書きましたが、
どこが間違っているのかさっぱりです・・・orz
出来ればwhileだけで作ったのと、forだけで作ったものの2つのタイプを
お願いしたいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2992.txt
>>789 少数の変換指定子は d ではなく f
a, b, c を引数にとっている4箇所の %d を %f に書き直せばOK
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
文字のリストを操作するプログラムを作成せよ。
このプログラムには以下の3つの機能を持たせること。
1・・・リストにアルファベット順に文字を挿入する(関数 insert)
2・・・リストからある文字を削除する(関数 delete)
3・・・プログラムを終了する
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2993.txt 自分なりにやったものの関数insert, delete の部分が分かりませんでした。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006/11/19 PM01:00
[5] その他の制限: 上記にあるプログラムを使ってお願いします。
おまんこした
>>790 出来ました!こんな単純なことを何時間も悩んでたなんて
お恥ずかしいです・・・orz
本当に有難う御座いました!
未解決問題の量とかお構い無しにどんどんスタックされていくな
>>787 int func787(const char *sentence, const char *str)
{
int i, check_length;
check_length=str_length(str);
for(i=0;i<check_length;i++)
{
if(sentence[i]!=str[i])
{
return 0;
}
}
return 1;
}
return 0;とreturn 1;ってどう違うの?3行以内で頼む。
>>797 return 0;はint型の0が返る。
reutnr 1;はint型の1が返る。
返っちゃったら実行できないんじゃないの?
>798 なるほど!よくわかったよ、ありがとう。
いいんかいそれで
[1] 授業単元:情報技術英語U
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2994.txt 英文が書いてあるファイルdat.txtから単語を抽出し、その単語をabc順に並び替えるプログラム、
英文の空白や"."や","は表示しない、大文字は小文字にする。また、抽出した単語を並び替えるために
コマンドプロンプトで使うsortのコマンドをプログラム中に使う。
dat.txtは次のものとする。
This is a pen.
I am a student.
It is impossible to solve this problem.
When she relaxes, she slips back into the local accent.
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:lcc
[3.3] 言語:C
[4] 期限:11月19日まで
[5] その他の制限:fclose,fopenを使い、sortのコマンドを使う。
>>344 の問題は解くことができました。ありがとうございます。
上の問題ですが文字列をどうやって並びかえるのかが分かりません。
あと、配列を使うとしてもどう格納するべきかが分かりません。
803 :
692 :2006/11/18(土) 18:50:59
>>693-694 すみません、
>>1 をしっかり見ていませんでした。
[1] 授業単元:コンピュータ入門
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2955.txt を改造し, バブルソートの要素の交換を, 逆順で行うプログラムを作成し, x[ ]={7,1,2,3,4,5,6} という列が一度でソートできるようにしなさい.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C言語
[4] 期限:無期限
回答くださったプログラムをコンパイルしようとしたのですが、バブルソートの方がコンパイルできませんでした。
<stdio.h>を加えてもできず、自分にはわかりません。
よろしくお願いします。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
1をしっかり見てこれか
>>804-805 テンプレに従うかどうかは質問者の自由。
適切な書き方じゃないと思ったらスルーしようぜ。
>気に入らない質問やその他や発言はスルーの方向で。
807 :
692 :2006/11/18(土) 19:20:16
重ね重ね申し訳ないです。 回答くださったプログラムをそのままコンパイルしたところ、 エラー E2046 kadai24.1.1.c 4: include 指令のファイル名の書式が正しくない エラー E2378 kadai24.1.1.c 13: For文に ; がない(関数 main ) 警告 W8004 kadai24.1.1.c 15: 'i' に代入した値は使われていない(関数 main ) エラー E2377 kadai24.1.1.c 21: While文に ) がない(関数 bubblesort ) エラー E2378 kadai24.1.1.c 22: For文に ; がない(関数 bubblesort ) 警告 W8004 kadai24.1.1.c 26: 'j' に代入した値は使われていない(関数 bubblesort ) 警告 W8004 kadai24.1.1.c 26: 'i' に代入した値は使われていない(関数 bubblesort ) 警告 W8057 kadai24.1.1.c 26: パラメータ 'a' は一度も使用されない(関数 bubblesort ) 警告 W8057 kadai24.1.1.c 26: パラメータ 'n' は一度も使用されない(関数 bubblesort ) エラー E2303 kadai24.1.1.c 27: 型名が必要 エラー E2451 kadai24.1.1.c 27: 未定義のシンボル end エラー E2040 kadai24.1.1.c 28: 宣言が正しく終了していない エラー E2141 kadai24.1.1.c 28: 宣言の構文エラー エラー E2293 kadai24.1.1.c 29: ) が必要 エラー E2190 kadai24.1.1.c 30: 不要な } エラー E2190 kadai24.1.1.c 31: 不要な } *** 11 errors in Compile *** とでました。 よろしければ回答お願いします。
>>807 コンパイラの吐いたエラーメッセージを読んでるか?
main() とする奴を一度殺したい
俺が見た694には#include<stdio.h>が最初からついていたし 俺のコンパイラでは694はコンパイル通ったので きっと692は俺と別の位相で生きているのだろう
>>808 読んで色々試しているのですがなかなかコンパイルが成功しません。
;や<stdio.h>が足りないだけならわかるのですが、()があるのにないというメッセージがきたり、途中の構文自体が間違っているみたいな場所があって、自分にはわかりませんでした…
BCCはどんな仕様なんか知らないが C++としてコンパイルしようとしてるんじゃないの?
813 :
692 :2006/11/18(土) 20:00:49
自己解決しますた… なんというか申し訳ないですorz
main(){return;}
public static void main(stirng args[])
int main(byVal argc as Integer, byVal argv() as string)
817 :
デフォルトの名無しさん :2006/11/19(日) 00:11:02
>>817 その問題のリクエストをするのは君で三人目なんだ
ナシ:1600に吹いた
820 :
817 :2006/11/19(日) 00:32:27
答えてくれるのかだめなのかはっきりして下さい。 だめなら他行きますから
うっせハゲ うっせハゲ うっせハゲ
>>820 このスレの回答者は誰かに統率されているわけではないので、
誰も答えが出るかどうか分からない。
823 :
818 :2006/11/19(日) 00:39:13
割と親切に教えたつもりだったのに
割と じゃ駄目なんだろ。ここにリクエストするような人なんだから
>>731
こんな問題が大学の課題としてだされ それに答えられない人間が少なくとも3人もいて そのうちの一人は818を読んでも既に解答済みであるという 可能性に思い当たらないレベルの池沼 なんという底辺大学
実は小学生の宿題。嘘を嘘と…ってやつだな。
他行けタコ
829 :
デフォルトの名無しさん :2006/11/19(日) 01:53:56
>>825 そんな問題に回答できないおまえは・・・
煽り下手っすねwwwwwwwwwwwwww
832 :
デフォルトの名無しさん :2006/11/19(日) 02:04:21
宿題ではありませんが、質問です。 自分のC/C++の実力がどのていどあるかを知れることできませんかね? 中学、高校のときは全国模試等で自分が全国で大凡どのあたりにいるか 判断できたんですど・・・
>>832 ソフトウェア開発技術者試験を受けてこい
>>833 ソフ開はC/C++の問題は出ないでしょ。
基本情報もC(しかもすごく簡単な)だけだから資格でC/C++の習熟度計るのは難しいと思うよ。
鉛筆を使う実力が全国何位とか消しゴムを使う実力が全国何位とか そういったことを気にしても仕方あるまい?
836 :
デフォルトの名無しさん :2006/11/19(日) 03:18:38
鉛筆を使う実力や消しゴムを使う実力であっても 全国1位ならたいしたものだと思いますけど・・・ あなたは、なにかの分野で全国TOP1%未満に入ったことあるのですか?
>>836 多分たいていの人が何かのTop1になってる
>>836 大体のことなら1%に入れる自信がある
だけど60億の1%って6000万だよね
学校と社会で大きく違うのは、 学校では人と競争して、どれだけ多くできるか、ミスに関しては余り深く考えない。 社会では、95%は失敗と一緒。 如何に確実なモノとしてできるか。 例えば、自分のプログラムが人命に関わる部分に使われるとか考えてみればいい、充分に練り上げてテストしないと怖くて出せないだろう。
>>837 「topから526438番目に近い」という項目でtopになったり
なんでもありだからな
841 :
デフォルトの名無しさん :2006/11/19(日) 03:30:26
>>838 全国TOP1%って言ってるのに60億の1%とは意味不明
こんな人が
大体のことなら1%に入れる自信がある
とはw
ぬるぽのTop1は漏れということで。
844 :
デフォルトの名無しさん :2006/11/19(日) 03:35:28
>>841 全国=全ての国
全日本ならまだしも、あんたばかぁ?
何おう、ぬるぽは漏れのもんだぞ。 勝手に盗むな。 おなかが減ったので日清カップヌードルカレーを食べました。 (゚д゚)ウマ-
>>846 漏れの手作りの餃子スープと交換しないか?
848 :
デフォルトの名無しさん :2006/11/19(日) 03:47:19
>>845 全国=全ての国 ・・・
あの〜もう止めたら?w
学の無さを露呈する結果になってますよ
>>836 全国0.01位未満ってことは
1位からドベまで全てが対象だ
>845 君は悪く無い。悪いのはゆとりシステムを生み出した大人達だ。
853 :
デフォルトの名無しさん :2006/11/19(日) 09:12:48
初心者勉強しても分かりませんでした。よろしくお願いします。配列のところを勉強しています。 [1] 授業単元: プログラミング [2] 問題文:10個の数値を配列に入力し、その数値を昇順(小さい→大きい)に並べ替えて 表示するプログラムを作成せよ。 ソートは以下のアルゴリズムに従い実現する。 ・配列を1回走査することで最小の値が配列の最初の要素に格納される ・2回目の配列走査は2番目の配列要素から大小比較を行い、走査後には 2番目に小さい値が配列の2番目の要素に格納される ・以下同様に、N回目の走査ではN番目の配列要素から比較を行う [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: [5] その他の制限:特になし
>全国=全ての国 もはや日本人ではn
856 :
デフォルトの名無しさん :2006/11/19(日) 11:58:09
Cってヒッピーっぽいから順位なんて気にしないとおもってたのに、 C++になって変わっちゃってたんだね。 ベトナム戦争反対!
# include <stdio.h> void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } int *min_element(int *array, int size) { int minv = array[0]; int *minp = array; int i; for(i = 1; i < size; i++) if(array[i] < minv) { minv = array[i]; minp = array + i; } return minp; } void sort(int *array, int size) { int i; for(i = 0; i < size; i++) swap(array + i, min_element(array + i, size - i)); } int main(void) { int i; int a[10]; for(i = 0; i < 10; i++) scanf("%d", a + i); sort(a, 10); for(i = 0; i < 10; i++) printf("%d\n", a[i]); return 0; }
859 :
デフォルトの名無しさん :2006/11/19(日) 12:38:40
どうも本当にありがとうございますm(__)m
宣言と代入を同時にやるのってキモいよな。
>>860 未初期化の変数を放置しておく方がキモい。
キモさはコーディング独立。
参照はどうすれば・・・
867 :
デフォルトの名無しさん :2006/11/19(日) 15:28:04
>>858 いまどき、コンソールで動くプログラムを使う人なんて
ほんの一握りのヲタクだけでしょ?
>>732 遅くなりましたが、ありがとうございました。
このスレは人としてダメだろ。宿題丸投げでそれを解いてる偽善ぶった暇人は死ねよ こんなんで単位取っていいと思ってるのか?課題の意味分かってんの?糞野郎ども 在学中はお世話になりました。ありがとう
>>876 質問者から卒業という意味
・・・まあ、過ちは認めないとな。正直、見逃した。
>>873 質問
中退した後はどうしたのか詳しく教えてほしい
法科大学院受験を目指して浪人中です。 この国で最後に笑うのはやっぱり文系だよ。
>>879 文理の区別なんて日本位のもの。外国では通用しない。
まあがんばれ。人には向き不向きがある。たとえ簡単なCプログラムさえ書けないとしても、
代わりに一人でも多くの無罪の人を救う力があるのなら、それは価値のあることだと思う。
>>874 解けるんだが先に回答する人のを見るとまだまだ全然。勉強になるw
>>875 以外に優しい・・・
>>876 ごめんなさい。中退しました
>>877 俺の出した問題を解いてくれて有難う御座いました。今でも回答者の頭のキレの速さには尊敬しちまうw
>>878 就職活動をしPGかSE希望で相当周りました。SE採用(嘘臭い)なのに深夜までPCカチャカチャさせられる('A`)
>>879 文系に未来はあるのだろうか???
>>880 >>879 は俺じゃないw
これからもおまいらの知識を搾り取って成り上がる。あの時は(-u- )っ[お世話になりました。ノシ]
ごめん
>>859 が 「どう見ても精子です。本当にありがとうございました」に見えた
>>884 YOU もしかして NEET なのかい ???
887 :
デフォルトの名無しさん :2006/11/20(月) 02:16:20
[1] 授業単元:計算力学 [2] 問題文(含コード&リンク): 1.2つの1次元配列の内積を計算するプログラムを作成せよ。 2.2つの2次元配列の積を計算するプログラムを作成せよ。 3.上のプログラムを関数を用いて実現せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: [3.3] 言語:C言語 [4] 期限: [5] その他の制限:
888 :
デフォルトの名無しさん :2006/11/20(月) 03:01:09
配列の内積? 配列の積?
889 :
デフォルトの名無しさん :2006/11/20(月) 03:26:00
内積 外積について 3:5=6:10
要はvectorの内積とmatrixの積をやりゃあいいんだろ? 簡単じゃないか。
C言語でwebブラウザ(IE程度のもの)を作りたいのですが、 C言語だけで可能でしょうか?(C++は使用不可です。)
諦めた方がいいと思うよ 可能か不可能かで言えば「可能」
>>891 >IE程度
それはもちろん脆弱性も含めて?
>>893 脆弱性はIEより低くてもいいです。
とりあえずページが表示できれば・・・
895 :
デフォルトの名無しさん :2006/11/20(月) 13:16:51
入力した5つのデータ(10,20,-5,100,0)のうち、最大値と最小値を求める サブ関数minmaxを作成せよ。ただし、入力するデータはdouble型の配列 に格納するものとする。また、minmaxは配列の先頭アドレス情報が代入 されたポインタで呼び出されるものとし、戻り値はvoid型とする。 実行結果 1個目のデータを入力:10 2個目のデータを入力:20 3個目のデータを入力:-5 4個目のデータを入力:100 5個目のデータを入力:0 最大値は100.000000です。最小値は-5.000000です。
>>895 void minmax(double *in, int len, double *out_min, double *out_max);
void minmax_(double *in, int len, double *out_min, double *out_max);
void minmax(double *in, int len, double *out_min, double *out_max){
//ものすごく殺伐としてる関数
*out_min=-5.0;
*out_max=100.0;
}
void minmax_(double *in, int len, double *out_min, double *out_max){
//おまけ
int i;
double min, max;
if(len>=0) min=max=in[0]; else min=max=0;
for(i=0;i<len;i++){
if(min>in[i]) min=in[i];
if(max<in[i]) max=in[i];
}
*out_min=min;
*out_max=max;
}
>>896 Forbidden
問題文が読めないよ
>>898 大学でログインしないと見れないのかも。
問題は
「double a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1};
のような正の実数の配列が与えられているとします。但し、最後の "-1"はデータの終りを意味している特別な値(番兵)であるとします。
バブルソートについて調べて、上のような任意長の配列の要素をバブルソートを用いて昇順に並べるプログラムを書け。 」
で全文です。
>>897 ・lenが0のときに破綻する。
・lenが1以上を仮定していいなら、forループの初期値は1でいい。
901 :
デフォルトの名無しさん :2006/11/20(月) 13:46:15
[1] 授業単元: 画像処理 [2] 問題文(含コード&リンク):フラクタル次元の算出(ボックスカウンティング法) [3] 環境 [3.1] OS: (WindowsXP [3.2] gcc 3.4 VC 6.0 [3.3] 言語: どちらでも可 [4] 期限: 2006年11月25日12:00まで お願いいたします。
>>899 #include <stdio.h>
int main(void)
{
double a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1}, t;
int i, j, n;
for (n = 0; n < sizeof(a) / sizeof(a[0]); n++)
if (a[n] == -1) break;
for (i = 0; i < n - 1; i++)
for (j = n - 1; j > i; j--)
if (a[j] < a[j - 1])
t = a[j], a[j] = a[j - 1], a[j - 1] = t;
for (i = 0; i < n; i++)
printf("%f ", a[i]);
putchar('\n');
return 0;
}
>>900 > ・lenが0のときに破綻する。
あー
if(len>=0)じゃなくてif(len>=1)だね
> ・lenが1以上を仮定していいなら、forループの初期値は1でいい。
('A`)
904 :
デフォルトの名無しさん :2006/11/20(月) 14:03:05
[1] 授業単元: 卒研の授業の課題 [2] 問題文: 三次元self-aboidingウォークのプログラム self-aboidingウォークとはランダムウォークしてるときに 一度通った道を通らないもの。 格子状でお願いします(上下左右の運動) [3] 環境 [3.1] OS: WindowsXP [3.3] 言語: C言語 [4] 期限: なるべく早めでお願いします [5] その他の制限: cygwinを使います。gnuplotで表示させます どなたかお願いします。。
>>902 無事起動できました。
本当にありがとうございます。
908 :
デフォルトの名無しさん :2006/11/20(月) 15:48:47
typedefはカタカナでなんと読みますか?
トゥーペデフィ
>>903 >>・lenが1以上を仮定していいなら、forループの初期値は1でいい。
つーか、lenが0の時に最大値最小値を0にしていいかどうかって問題だね。
913 :
デフォルトの名無しさん :2006/11/20(月) 16:39:39
[1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ファイルをよみこんで、そのファイルのワードカウントせよ。 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語: C [4] 期限:今日の18時までにお願いします。 [5] その他の制限:
#include <stdio.h> int main(){ FILE* fp; int size; fp = fopen("file", "rb"); fseek(fp, 0, SEEK_END); size = ftell(fp); fclose(fp); printf("ファイルサイズは %d byte", size); }
return忘れたがまあいいか
整数型変数nの値を1から25まで1ずつ変化させて、nの2乗、1/n, nの平方根、nの立方根を求めよ。 よろしくおながいしまつ
>>917 # include <stdio.h>
# include <math.h>
int main(void)
{
int i;
for(i = 1; i <=25; i++)
printf("n = %d, nの2乗 = %d, 1/n = %f, nの平方根 = %f, nの立方根 = %f\n",
i, i * i, 1. / i, sqrt(i), pow(i, 1. / 3));
return 0;
}
動かぬ…
[1] 授業単元:データ構造とアルゴリズム [2] 問題文 この状態だと逆順印字になってしまうので、正順印字にできるように書き換える [3.1] OS:rinux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:明日午後3時
#include<stdio.h> #include<stdlib.h> typedef struct Node_template{ int number; struct Node_template *next; }node; node *start = NULL; int push(int date){ node *ptr = start; start = (node *)malloc(sizeof(node)); if(start == NULL){ fprintf8stderr,"Nomore memory"); exit(1); } start->number = date; start->next =ptr;[ return(EXIT_SUCCESS); }
int main(void){ int input_date; int i; node *p; while(fprintf(stdout,"\n Enter an integar") ,scanf("%d",&input_date) == 1 ){ push(input_date); } fprintf(stdout,"\nMemory image\n"); i = 0; for(p = start;p != NULL;p = p->next){ fprintf(stdout,"[%3d] = %5d\n",i,p->number); i=i+1; } return(EXIT_SUCCESS); }
聞いたことの無いOSだな
知らないのかよ 遅れてるな
これ?
http://uncyclopedia.org/wiki/Rinux node *start = NULL;
node *last = NULL;
int push(int date){
node *ptr = (node *)malloc(sizeof(node));
if(ptr == NULL){
fprintf(stderr,"Nomore memory");
exit(1);
}
if(start==NULL)
start = ptr;
ptr->number = date;
ptr->next = NULL;
if(last!=NULL)
last->next = ptr;
last = ptr;
return(EXIT_SUCCESS);
}
rinuxってスレイヤーズでつか?
[1] 授業単元: 情報処理 [2] 問題文:整数型変数nの値を1から25まで1ずつ変化させて、nの2乗、1/n、nの平方根、nの立方根を求めて以下のような 数表を作成させるプログラムを完成させよ n n*n 1/n sqrt(n) n^(1/3) 1 1.00000 1.00000 1.00000 1.00000 2 4.00000 0.50000 1.41421 1.25992 3 9.00000 0.33333 1.73205 1.44225 4 16.00000 0.25000 2.00000 1.58740 長いので途中は略・・・・本当は4 5 6 7 8 ・・・・と続いてます 23 529.00000 0.04348 4.79583 2.84387 24 576.00000 0.04167 4.89868 2.88450 25 625.00000 0.04000 5.00000 2.92402 [3] 環境 [3.1] OS: (Windows/Linux/等々) Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Microsoft Visual C++ 2005 [3.3] 言語: C++ [4] 期限: 今日中に・・・ [5] その他の制限: どうにかおながいします。
929 :
927 :2006/11/20(月) 22:50:38
おぉΣ(゚Д゚; まったく同じだ・・・・・ 同胞がいたのねww 928さん、ありがとうございます!!
>>927 問題の意図はとりあえずCの関数を「自分で」調べてもらうことと
forの回し方と出力に慣れる事、発展として数値計算に興味を持ってチャレンジする
学生が出てこないかなぁなんて夢見てとりあえずだしてみた講師の思いは
このスレで無残に切り捨てられるわけか、南無。
まぁいいじゃないの。 若手が育たなければ、我々年寄りが職を失わずに済むわけだから。
>>931 若手が働かなくちゃ
年金はさらに遠のく
933 :
デフォルトの名無しさん :2006/11/20(月) 23:32:58
助かりました、ありがとうございました!
>>927 #include<stdio.h>
#include<math.h>
int main()
{
int i,n;
printf("n n*n 1/n sqrt(n) n^(1/3)\n");
for (i=1;i<=25;i++){
printf("%d %1.5f %1.5f %1.5f %1.5f",i,n*n,sqrt(n),pow(n,1/3));
}
}
936 :
927 :2006/11/20(月) 23:48:42
ありがとうございます! 935をMicrosoft Visual C++ 2005 Express Editionを使用して実行してみましたが、 「オーバーロード関数の呼び出しを解決することができません。」 と出て実行できないのですが・・・・。 本当に、何もわからなくてすみません。
>>933 シャッフルその1
for(i=52; i>0; i--) {
j = rand() % i;
temp = deck[j];
for(;j<51;j++) deck[j] = deck[j+1];
deck[51] = temp;
}
シャッフルその2
for(i=0; i<10000; i++) {
a = rand() % 52;
b = rand() % 52;
temp = deck[a];
deck[a] = deck[b];
deck[b] = temp;
}
>>936 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
939 :
927 :2006/11/21(火) 00:01:15
わかりました。 発生した行: printf("%d %15.5f %15.5f %15.5f %15.5f",i,n*n,1/n,sqrt(n),pow(n,1/3)); 以下エラー内容 1>..\..\..\DATA\01.cpp(10) : error C2668: 'sqrt' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(581): 'long double sqrt(long double)' の可能性があります。 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(533): または 'float sqrt(float)' 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(128): または 'double sqrt(double)' 1> 引数リスト '(int)' を一致させようとしているとき 1>..\..\..\DATA\01.cpp(10) : error C2668: 'pow' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(575): 'long double pow(long double,int)' の可能性があります。 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(527): または 'float pow(float,int)' 1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(489): または 'double pow(double,int)' 1> 引数リスト '(int, int)' を一致させようとしているとき 1>ビルドログは "file://d:\VC\Projects\ex\ex\Debug\BuildLog.htm" に保存されました。 1>ex - エラー 2、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== 以上です。よろしくお願いします
940 :
927 :2006/11/21(火) 00:04:59
訂正です。。。 発生した行: printf("%d %1.5f %1.5f %1.5f %1.5f",i,n*n,1/n,sqrt(n),pow(n,1/3)); でした
>>939 printf("%d %15.5f %15.5f %15.5f %15.5f",i,n*n,1/n,sqrt((double)n),pow((double)n,1/3));
でなんとかならんか
943 :
デフォルトの名無しさん :2006/11/21(火) 00:09:42
>>901 ボックスカウンティング法だと細線化が必要ですね。
読み込む画像に細線化を施して・・・
あとは本読んでみてください。
944 :
927 :2006/11/21(火) 00:12:47
941さん エラーなく実行できましたが、プログラムが強制終了されて以下のような メッセージが出ました。。。。 /-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/- n n*n 1/n sqrt(n) n^(1/3) ハンドルされていない例外: System.DivideByZeroException: 0 で除算しようとしました 。 場所 main() 場所 d:\vc\data\01.cpp:行 10 続行するには何かキーを押してください . . . -/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-
>>939 VC8でやってみた。プログラムミスだね。こちらでやって
#include <stdio.h>
#include <math.h>
int main()
{
int i;
double n;
printf("n n*n 1/n sqrt(n) n^(1/3)\n");
for (i = 1; i <= 25; i++) {
n = i;
printf("%d %1.5f %1.5f %1.5f\n", i, n * n, sqrt(n), pow(n, 1./3.));
}
}
947 :
927 :2006/11/21(火) 00:16:33
>>945 さん
ありがとうございます!
無事に実行できました。感激です。
いろいろとアドバイスをしてくださった皆さん、ありがとうございました。
また何かありましたらよろしくです。
948 :
927 :2006/11/21(火) 00:18:06
あ、1/nは自分で追加しました。
949 :
941 :2006/11/21(火) 00:18:30
>>944 1/3は0になっちゃうのを忘れてた。1.0/3にしてみれ。
#include <stdio.h> #include <math.h> int main(void) { int i; double n; printf("n\t\tn*n\t\t1/n\t\tsqrt(n)\t\tn^(1/3)\n"); for (i = 1; i <= 25; i++) { n = i; printf("%d %15.5f %15.5f %15.5f %15.5f\n", i, n * n, 1 / n, sqrt(n), pow(n, 1./3.)); } }
[1] プログラミング [2] 配列 (の先頭アドレス) a とそのサイズ n を受け取り, 要素を逆順に並び換える (a[0]=1, a[1]=9, a[2]=2, a[3]=6 を a[0]=6, a[1]=2, a[2]=9, a[3]=1 にする) 関数 array_reverse(int *a, int n) を作成せよ [3] [3.1] winXP sp2 [3.2] cygwin [3.3] C [4] 2006年11月30日 [5] forを使ってできるだけ簡単なのがほしいです。関数だけでいいです。 自分で考えた時間は3時間ですが作れません。
簡単な問題になんつ〜粗悪な回答プログラムの乱載。 ちっとは推敲しておくれ。
953 :
927 :2006/11/21(火) 00:30:53
>>944 参考書を確認していたら載ってました。ありがとうございます。
>>950 さんので実行してみたらきれいに整列しました
ありがとうございます!
>>951 void reverse_array(int *a, int n)
{
int i, temp;
for(i=0; i<n/2; i++) {
temp = a[i];
a[i] = a[n-1-i];
a[n-1-i] = a[i];
}
}
>>952 粗悪な方がコピーしたと疑われなくてちょうどいいと思うがどうだろうかw
a[n-1-i] = a[i]; →a[n-1-i] = temp;
orz 書き終えてさぁ貼ろうとリロードしたらすでに回答されてる・・・ こんな夜遅くまで何をやってるんだろうか私は・・・
958 :
デフォルトの名無しさん :2006/11/21(火) 00:38:11
array_reverse(int *a, int n) { int i = 0; int temp = 0; for(i = 0; i < (n-1)/2; i++) { temp = a[i]; a[i] = a[n-i-1]; a[n-i-1] = temp; } }
>>958 それだとnが偶数のときおかしくない?
例えばn=4のとき(n-1)/2は1になりa[1]とa[2]が交換されない。
960 :
951 :2006/11/21(火) 00:47:49
>>954 さん+
>>95 全角のスペースが含まれていたので除去したら
なんかへんなエラーでました。
家のコンパイラではなぜかコピーできないんですけど
underfined reference to '_array_reverse'とかなんとか
>>958 さん
>>959 さんの言うように、
{2,3,4,5,}の逆が{5,3,4,2}になったりします
961 :
951 :2006/11/21(火) 00:49:33
>>95 でなくて
>>956 でした。
そこらへんのサイトで調べてきたやつも入れてみたり
いろいろ試してみるんですがどれも上手くいかないです。
まさか関数以外の部分が間違ってたりするんでしょうか。
この関数無しだと正常にそのままの数値で返ってくるプログラムになるのですが
962 :
958 :2006/11/21(火) 00:50:53
はい、すいません間違えました
>>960 958がコピペで通ってるなら(n-1)/2のとこだけn/2にすればいいだろ
964 :
958 :2006/11/21(火) 00:53:25
<=にでもしといてください
n/2の切捨てしたものを変数に入れる部分作って for文の終了条件に入れときゃいいよ。 それだけのこと
奇数の時は真ん中の入れ替え必要ないからn/2で切り捨てられてもなんの問題もないんだよ。
実行速度に問題がないなら最適化はコンパイラに任せたほうがいいよ
968 :
951 :2006/11/21(火) 00:59:16
>>963 >>964 解決しました。ありがとうございます。
できるだけ自力でやろうと思ってたんですが無理でした。
わかんないのは別に良いけど紙に書いたら 小学生の算数レベルの簡単な話ですよ。 もう少し勉強したってください。
970 :
951 :2006/11/21(火) 01:06:11
>>969 n/2とかが全然思いつきませんでした><
そう言うだろうと思って
>>965 書いといた。
いきなりうまくやろうとするよりまずは動くプログラム作って
それから改良しとき、うちはもう寝るわぁ。
ありがとうございました。
973 :
デフォルトの名無しさん :2006/11/21(火) 09:45:37
[1] 授業単元: プログラミング [2] 以下のような3つのペアの実数をファイルに書き、 それらのペアを配列を使って読んで、 それぞれの四則演算を別のファイルに書き出しなさい。 5.0 3.0 2.5 1.0 4.0 1.5 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: emacs [3.3] 言語: C [4] 期限: 2006年11月21日14時まで
マルチしまくる奴って2chしか頼るとこねーのかよと思うwwwwww
975 :
デフォルトの名無しさん :2006/11/21(火) 10:24:54
今日貼る時点で終わってるし…
973は質問の意味がわからない
[1] 授業単元:プログラミングT [2] 問題文(含コード&リンク): キーボードからa,b,c,の値を入力し、二次方程式 ax2+bx+c=0 平方根を求め、下記のように表示するプログラムを作りなさい。 但し、while文を用いて繰り返し計算ができるようにすること。 終了はaに0が入力されたときとする。 例:2実根の時 : 2実根 :x=1,2,3,4x2=-2,3,4 重根の時 : 重根 :x=3,2,1 複素根の時: 複素根:x1,x2=1,2±j3.4 ※ルートは数学処理の#include <math.h> とsqrt(値)を使用する。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005 [3.3] 言語:C++ [4] 期限: 2006年11月23日19:00まで [5] その他の制限: for構文、if構文、while構文のみ習っています。 申し訳ありませんが、インデント付でお願いします。
>>977 >申し訳ありませんが、インデント付でお願いします。
まず自分でやってみよう!
>>977 あぁ?おめーらいい加減にしとけやコラァ!
図書館で算数の教科書見て自分で解けやバカが。
それとも高校レベルの数学も出来ないバカなんですか?
なら退学しろクズが
まてまて、高校生かも知れないだろ
今ひとつ977の例の意味がわからないのは俺だけだろうか
大丈夫、漏れもだ。
984 :
デフォルトの名無しさん :2006/11/21(火) 13:09:41
[1]単元名: 計算機演習 [2] 課題:整数nが与えられたとき、n×nのサイズで螺旋状に0から(n二乗ー1)までの数が並ぶ行列を作成し、 画面に表示させるプログラムを作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ:gcc [3.3] 言語:C [4] 期限:11月24日(金)12:00厳守 [5] その他の制限: ポインタ、データ構造までは習っています。 宜しくお願い致します。
俺もよく判らんけど、 多分、二次方程式作って、その解を求めるだけくね?
>>984 螺旋状がよく判らない。
計算結果の例を載せるがよろし。
987 :
977 :2006/11/21(火) 13:12:52
ごめんなさい。高校生です。 皆さんにご迷惑をおかけし、申し訳ありません。 言われるようにまだ、自分で考えてみたいと思います。
#include<stdio.h> #include<math.h> int main(){float a,b,c,d;while(1){printf("a b c:");scanf("%f %f %f",&a,&b,&c);if(a==0)return 0;d=b*b-4*a*c; if(d>0)printf("2実根:%f,%f\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)); else if(d==0)printf("重根:%f\n",-b/(2*a)); else printf("複素根:%f±%fi\n",-b/(2*a),sqrt(-d)/(2*a));}} 申し訳ありませんが、検算とインデントは自分でお願いします。 正直、よく判らんかった
誰か過去の宿題検索作ってくれないか?
言い出しっぺがやるべきなんだよ?
複素のとこ実部と虚部に分けれ ネットにいくらでもあるし、解説してるサイトが。 それでもわからないなら高校ヤメレ 螺旋? * * * * * * * * * * こういうのか。 こんな出力だけの問題じぶんでやれよ
なんだよ、変な表示になったしまあいいや。
993 :
984 :2006/11/21(火) 13:23:09
>>986 様
例えばキーボードから5を読み込ませると(n=5にすると)
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8
という感じになります。
入力だろうが、埋め
ジエンド
おまえ んだは しうも
埋めついでに
>>977 なんで2実根の時のxとx2の数が違うのかとか
2実根の時はxとx2なのに複素根の時はx1とx2なのかとか
埋め みんな自力で頑張ろうな
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。