暇な人がエレガントにC/C++の宿題片づけます 33代目
暇な人がエレガントにC/C++の宿題を片づけて見せます。
――【注意点】――――――――――――――――――――――
・使用する言語(C/C++)や環境(CUI/GUIなど)は必ず書きましょう。
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか
・エラーは、その行とエラーの詳細を書きましょう。
エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html 【歴代スレは
>>2-10】
32代目は諸事情によりお見せできません。
どうかご了承ください。
前スレが終わってからでも遅く無いのに
【注意点追加】
・複雑なAAはスレが荒れたり問題を埋もれさせてしまう原因に
なりますので、使用を控えてください。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
テンプレに沿って質問したほうが回答者も正確な情報をつかみやすくなります。
問題文はこう書いたほうが分かりやすいだろうとか自分で勝手に改変しないでください。
原文をそのまま忠実に書いてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>6 過去スレあさる奴が迷惑だろ?
あんなAAばっかの糞スレなんか
安心しろ。過去スレあさる奴なんていない。
さぁ毎度お馴染みの最悪な空気です
つか、前1の影響引きずってるなー
>>10 違う。
漏れは歴代スレの2-3でお世話になってた者
今では回答者側に回ってる。
ここのスレにお世話になったから変なAAでいっぱいになるのがつらかった。
だからこのスレたてた。
今1=前1
だったりしてな
ま、ガンバレ
俺はあっちが終わるまでは、重複に質問するようなのは無視する
15 :
デフォルトの名無しさん:04/10/16 22:57:35
削除依頼しておく。
>>15 それならついでに前スレのAAのレス削除依頼してきて
こっちはその時(あっちを使い切ったとき)がくるまでじっくり寝かせておこう。
/ヽ /ヽ
/ ヽ / ヽ
______ /U ヽ___/ ヽ
| ____ / U :::::::::::U:\
| | /|(●), 、(●)、.:::::::::::::::|
| | | ,,ノ(、_, )ヽ、,, .U :::::::::::::::| なにこのスレ……
| | .|U `-=ニ=- ' .::::::::::::U:::|
| | | `ニニ´ U.....:::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ ::::::
(●)
/ヽ /ヽ
/ ヽ / ヽ
______ /U ヽ___/ ヽ
| ____ / U :::::::::::U:\
| | /|(○), 、(○)、.:::::::::::::::|
| | | ,,ノ(、_, )ヽ、,, .U :::::::::::::::| なにこのスレ……
| | .|U `-=ニ=- ' .::::::::::::U:::|
| | | `ニニ´ U.....:::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ ::::::
\((●|○)\)
前スレタイよりはまし。
ただ、感情にまかせてスレ立てするのはいただけない
気持ちはわかるが。
24 :
デフォルトの名無しさん:04/10/17 12:14:06
Linax 2.4.23 SCHED.C を修正して FAIR TIME SCHEDULING にしなさい。
というものです。どうか、よろしくお願いします。
25 :
デフォルトの名無しさん:04/10/17 12:16:04
あっ、間違いました。Fair Share Scheduling です。
すみません、よろしくお願いします。
Linux 2.6.0 を修正してマイクロカーネルにしなさい.
というものです.どうかよろしくお願いします.
>>26 良い課題に恵まれたんですね.いいなぁ.
GNU Hurd のソースとかは参考になるのかな?
なんか凄いね。
会社で良い組み込み系OS探してんだが、
調べてる暇も無いので、完成したらパクらせて欲しい。
/\___/ヽ
/'''''' '''''':::::::\
. |(●), 、(●)、.:| +
>>26 全部自分でやりなさい。
| ,,ノ(、_, )ヽ、,, .::::|.
. | `-=ニ=- ' .:::::::| +
\ `ニニ´ .:::::/ +
,,.....イ.ヽヽ、ニ__ ーーノ゙-、
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||.
31 :
デフォルトの名無しさん:04/10/21 00:43:10
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:winXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:今日中
[5] その他の制限:特に無し
C言語初心者です。課題で迷っています。
strcmp関数(文字列の比較する関数)と同じ働きをする関数αを作りたいですがどのように作れば良いのか分かりません。教えて下さい。
ちなみに関数の作り方の構文は知っています。
開発環境はMicrosoft Visual Studio .NET 2003
>>31 関数の作り方の構文とは何だ。
ていうか、前スレ終わってから使えよ、ここを。
>>31 動作確認もしとらんがこんなもんだろ。マルチやめれ。
int α( char* a, char* b )
{
while( *a && *b && *a == *b ) { a++; b++; }
return *a - *b;
}
マルチなんかに答えてやるなよ
まぁそうなんだが、誰か答えれば止めるだろうと...
そうやって甘やかす香具師がいるから図に乗ってマルチすんだろが
そうやって誰も答えないからさらにマルチするんだろが。
ま、素人のマナー違反にカリカリしなさんな。
>>38 あっちでみんな答えてるだろうが。
お前のマナー違反をどうにかしろ馬鹿野郎
↑あっちこっちにまともな回答がないから書いたわけだが...
不毛なのでもうやめ。逃げるにあらず。
逃げやがった
>>40 ちゃんと答え出てるのにな。ああ、お前が理解できないだけか。
逃げた馬鹿に何を言ってもしかたがないけど。
ヘタレ野郎を追い詰めるスレはここですか?
>>44 ていうか、前スレ終わってから使えよ、ここを。
>>44 正方行列でなくても転置行列って定義できるのか?
というか題意の通り行と列をひっくり返したら正方行列でないと積が不可能になっちまう。
>>46 ..........................................................................
>>47 何が言いたいのか低学歴なヲレにも分かるような表現をしてくれ
行列Bは転置したあとに 必ずM x N 行列となると考えていいです。
Bを転置する関数かいて放り込めばいいやん
それぐらいやれ
51 :
デフォルトの名無しさん:04/10/25 18:25:51
すいません!よろしくお願いします!(赤、緑、青、白、黒を示すプログラム)
赤、緑、青の数値の中で
(1)まず青の数値の割合が20〜26%の時に白
(2)次に赤、緑、青のうちで最も割合の多い色を示し
(3)それ以外は黒
とするプログラムを作成願います。
自分はif文のただ羅列で行き詰ってしまったのでお手数ですが。
>>51 RGB各プレーンを対象とするということか?
(1)はBプレーン以外は関係ないのか?
(2)は各プレーンのうち一番明るいプレーンがどれかということか?
(3)は(1)以外で(2)以外と解釈すると有り得ないがどういう意味か?
55 :
デフォルトの名無しさん:04/10/25 21:32:25
>>54 (1)はBプレーン以外のものはなんでもいいんじゃない!
それから(2)と(3)は逆のプログラムすればいいと思うがそれにしてもムリそうだな!
>>51 何をしたいのか全く分からん。そのif文だらけになった
自分で書いたコードをさらしてみよ。理解の一助になるかも知れん。
そうやって甘やかす香具師がいるから図に乗ってマルチすんだろが
ここって、甘やかすためのスレではなかったのですか?
マルチする奴にやってはいけませんよと優しくささやくスレですが?
エラストテネスのふるいで100までの素数を求める方法キボンヌ
ていうか、前スレ終わってから使えよ、ここを。
>>60 工夫という工夫、一切なし。
#include <iostream>
static const int PRIME_MAX = 100;
int main()
{
int prime[PRIME_MAX + 1];
for (int i = 2; i <= PRIME_MAX; ++i)
prime[i] = 1;
for (int i = 2; i <= PRIME_MAX; ++i)
{
int notprime = i;
while ((notprime += i) <= PRIME_MAX)
prime[notprime] = 0;
}
for (int i = 2; i <= PRIME_MAX; ++i)
if (prime[i]) std::cout << i << ' ';
std::cout << std::endl;
}
て い う か 、 前 ス レ 終 わ っ て か ら 使 え よ 、 こ こ を 。
つまり前スレ終わってからここを使えってことか?
「ていうか」ってなんですか?
もうこのスレ埋め立てするの?
本当にまずいんです!よろしくお願いします!(赤、緑、青、白、黒を示すプログラム)
赤、緑、青の数値の中で
(1)まず青の数値の割合が20〜26%の時に白
(2)次に赤、緑、青のうちで最も割合の多い色を示し
(3)それ以外は黒
とするプログラムを作成願います。
自分はif文のただ羅列で行き詰ってしまったのでお手数ですが。
>>54 違います!
>>56 すいません。いやになって消してしまいました
>>57 どうかお願いします!
>>60 サンクス!!繰り返しの仕方かなり参考になるわ。初心者でスマヌ。
だから何を言いたいのかまったく分からないと書いているだろうに。
こんなんでいいんかいな。
#include <stdio.h>
int max(double x[3]){
return x[0] < x[1] && x[1] < x[2] ? 2 : x[0] < x[1] && x[1] > x[2] ? 1 : x[0] > x[1] && x[1] > x[2] ? 0 : x[0] < x[2] ? 2 : 0;
}
int main(void){
double color[3];
const char* colorname[3] = {"赤", "緑", "青"};
printf("%s(%%)?:", colorname[0]);
scanf("%lf", &color[0]);
printf("%s(%%)?:", colorname[1]);
scanf("%lf", &color[1]);
printf("%s(%%)?:", colorname[2]);
scanf("%lf", &color[2]);
if (color[0] < 0.0 || 100.0 < color[0] ||
color[1] < 0.0 || 100.0 < color[1] ||
color[2] < 0.0 || 100.0 < color[2]) {
printf("Error!:0%未満、または100%以上のものがあります!");
return 1;
}
if (20.0 <= color[2] && color[2] <= 26.0) {
printf("白\n");
printf("最大のものは%s\n", colorname[max(color)]);
}
else
printf("黒");
return 0;
}
>>67 誰だよ!俺のフリして書き込みしてるアホは!
>>69 どうもありがとうございました、ご恩に尽きます。
恩に尽きちゃうのか。
,,;:-‐''"⌒ ̄";;;;;;;⌒ ̄"ヾ、
='-‐''"/,::´ /::::::::::::::::ヽ :::`ヾ
ァ'´.,:´/.::::::/i:: :::::. :; :::丶 ::::::ヾ、
/ / ::/.: { l ヽ_,,,_`、 .:`、ヽ:::::::ヽ`
{::/ァ' .i..:/i.::{::{.ヾ~::i:ヾ丶::::::.::::i:::::::::}
、_ノ'.{ .::::{-{‐{:;iヾ{ '"T ヾ il.|'.:::.::}::::::::ト、
l.:il :lヽi'"ヽ`、ヽ .l,'゚i!'〉リi}::i:::::l:::ノ::ハヽ、_
麻衣子は {:| i .} } {'゚}. ┴-' i}:ノl::::}::i:::::. l`ー"
お風呂入るから {、.ヾ-i ー´、 〃 ノ:::ノ::ノ::}:: ::. }
ちょっと待っててね ノト " っ 、_,;-':.:'/:::::::l: : l
{:l:::`i::..、 ._.,.;:イシ:::/::ノ l、
iんV´iノノ` ツi iリノツ-‐''" :: : ヽ 、
_,-.r‐i {,-ト .i_,,ノ-‐-―/ : : :::ノ :::::. } `、
( l ./ /~ / .ノ/:::::/: ::::::: : :l
(.._,,iツvV .,' ,'::{:::;::::: :::::::: :::i
`ー7/::::{. '"~/ {;;;li/::::l:::::: :::::::::::::{
{:l(ァ' ,, ' l::;;|l/:::{i::::: : ::: :::: ::::l
リァ' ., ´ /メ{ {l:::/ {:::l:. : : ::::|
/, ´ ノ // l {iメ {:::|i:: : :::l
/./ /::'/:/ {:i:|イ{ i::l:: i ::}
i' ´ /::::::/::/ l .:|::::|:l:::l : l : ::l
{ , イ´ /::;/ .ィ´:| }::::l:i::::i:i:. .| : :. ::l
i、__,, ィ i::::l /:,:::l //l::::l .}::::li:::::l l::::} i: i :::l
>>72 ( ゚Д゚)ゴルァ!!
こっちきちゃダメ。
xが整数であるかどうかを,if文で判別したいんですが,どうすればいいんかな?
doubleのxのことか?
xは文字列ではないかと超予想
>>76 エスパーキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
>>74 if(x == (int)x)
で、望みの結果が得られるかもしれない。
/ ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| /__/ / < なわけねぇだろ!
/| /\ \__________
望みの結果がintに収まる範囲でのみ、で桶なら
83 :
デフォルトの名無しさん:04/10/29 16:44:10
(x+0.5)(int)
四捨五入な。
85 :
デフォルトの名無しさん:04/10/29 17:05:00
ファイルを読み込むときにその前にscanfで入力した値に
依存するファイルを読み込む、ってことはできるんでしょうか?
scanf("%d",&n);
fp=fopen("node3.dat","r");
この3をnによって変えたいのですがやり方がわかりません。
>>85 char filename[100];
sprintf(filename, "node%d.dat", n);
fp = fopen(filename, "r");
88 :
デフォルトの名無しさん:04/10/29 17:07:03
>>86 すみません、できれば教えていただきたいのですが・・・
89 :
デフォルトの名無しさん:04/10/29 17:07:44
90 :
デフォルトの名無しさん :04/10/30 02:03:56
依頼お願いします。
ある領域内に長方形が描画されている(入力画像として読み込み)として、
その長方形で平行な線分どうし(縦横各一組)をペアリングして検出する
プログラムをVC++で作りたいのですが、どのような記述にすればよいで
しょうか。
結果の表示方法は、平行だということが言えている様ならどんな感じでも
大丈夫です。どなたか知恵を貸して下さい。
edgeの抽出は終わってて辺の直線のベクトルとかは既に得られてると考えていいの?
>>90 ■■■
■■■
こういう画像があったら、
│
─┴─┬─
│
微分するとこうなる。
↑ ↑
ここに注目すればペアが得られる。写真などの場合はノイズに注意。
◆
こんなのも
質問なのですが
#defineで指定している定数値があるのですが
それを外部のファイルから数値を読み込んで設定する方式に変えたいのですが
どのように書けばいいでしょう?
Win32APIのInterlocked〜とCriticalSectionだけを使って同期を取り、2つのスレッドを交互に実行する方法はありますか?ヒントだけでもお願いします。
n人の成績データを入力して、合計、平均、平均との差を出力するプログラムを
書いてるんですが、もう少しきれいなソースになる気がするんですが、どう変更すればいいでしょうか?
#include<stdio.h>
#define N 10
int main(void)
{
int ten[N],sum,ave,i;
printf("点数データを%d件入力してください\n->",N);
scanf("%d",&ten[0]);
sum=ave=ten[0];
for(i=1;i<N;i++){
printf("->");
scanf("%d",&ten[i]);
ave=(ave+ten[i])/2;
sum+=ten[i];
}
printf(" 点数 平均との差\n");
printf("----------------\n");
for(i=0;i<N;i++){
printf("%3d\t%3d\n",ten[i],ten[i]-ave);
}
printf("----------------\n");
printf("合計:%4d : 平均:%3d\n",sum,ave);
return 0;
}
>>97 int sum=0
for(i=0;i<N;i++){
printf("->");
scanf("%d",&ten[i]);
sum+=ten[i]
}
ave=ten/N;
こんな感じに変更すればいいでしょうか?
#include<stdio.h>
#define N 10
int main(void)
{
int ten[N], sum, ave, i;
printf("点数データを%d件入力してください", N);
for (i = 0; i < N; i++) {
puts("->");
scanf("%d", &ten[i]);
sum += ten[i];
}
ave = sum / N;
puts(" 点数 平均との差");
puts("----------------");
for(i = 0; i < N; i++) {
printf("%3d\t%3d\n", ten[i], ten[i] - ave);
}
puts("----------------");
printf("合計:%4d : 平均:%3d\n", sum, ave);
return 0;
}
100 :
从*・ 。.・) ◆SayuminPM. :04/10/30 17:25:08
100
101 :
90:04/10/30 18:06:17
>>91-92 返信遅れてすみません。
edgeの抽出は終わってる状態でかまいません。もし分かるなら
教えていただけませんでしょうか。
102 :
デフォルトの名無しさん:04/10/30 18:18:35
Cで自然数a,bの約数を全て表示するプログラムを教えてください。
>>102 公約数じゃなくてそれぞれの約数でいいのか?
工夫なし
#include <stdio.h>
int main(void)
{
int a, b, x, i;
printf("a b "); scanf("%d %d", &a, &b);
if (a < 0 || b < 0) return 1;
x = (a - b) ? (b) : (a);
for (i = 1; i <= x; i++)
if(a % i == 0 && b % i == 0) printf("%d\n", i);
return 0;
}
一応
#include <stdio.h>
void f(int x)
{
int i;
for (i = 1; i <= x; i++)
if(x % i == 0) printf("%3d ", i);
puts("");
}
int main(void)
{
int a, b;
printf("a b "); scanf("%d %d", &a, &b);
if (a < 0 || b < 0) return 1;
puts("aの約数"); f(a);
puts("bの約数"); f(b);
return 0;
}
あ、まちがえてた。
まあいいや、勝手にしる。
>>102 公約数なら、、 と思って作ったら表示してねぇ。まぁいいか。
struct int_list{
int value;
int_list next*;
}
int_list* kouyakusuu(int a,int b){
if(a==0 || b==0){
return null;
}
int_list result* = new int_list;
int_list nowList* = result;
int minArg = a<b?a:b;
for(int i=1;i <= minArg;i++){
if(a%i==0 && b%i==0){
(*nowList).next = new int_list;
nowList = (*nowList).next;
(*nowList).value=i;
}
}
return (*result).next;
}
108 :
102:04/10/30 18:59:45
公約数とはどこにも書いてないからなあ
>>107 に、これつなげれば動くかな。
#include <stdio.h>
void main(char** args){
int a,b;
scanf("%d %d", &a, &b);
int_list result* = kouyakusuu(a,b);
while(result != null){
printf("%d\n", (*result).value);
result = (*result).next;
}
}
#include <stdio.h>
int main(void)
{
int a = 234, b = 354, i;
for(i = 1; i <= a && i <= b; i++)
if(a % i == 0 && b % i == 0)
printf("%d\n", i);
return 0;
}
急ぎなんですけど、誰か助けてください。
学校で課題が出たんですけど、さっぱり分かりません。
ボイヤームーア法を使って文字列の探索するプログラムを作れという課題です。
下にプログラム(未完成)を載せておきます。これを改良して作るのらしいのですが・・・。
どなたかお願いします。
#include <stdio.h> #include <string.h> #define MAXCHR1 1000 #define MAXCHR2 256
int main(void){
char filename[MAXCHR2], ex[MAXCHR1], strg[MAXCHR2];
FILE *fp;
printf("Input filename.\n");
fgets(filename, MAXCHR2, stdin);
printf("Input search string.\n");
fgets(strg, MAXCHR2, stdin);
if((fp = fopen(filename, "r")) == NULL){
printf("read open error!");
return(-1);
while(fgets(ex, MAXCHR1, fp) != NULL){
/* ここでボイヤームーア法を使う */ }
fclose(fp);
return (0);
急ぎ?
今日土曜だし、明日日曜だし、早くても明後日までだろ?
そうですね。あさってまでなら何とかなりそうです。
お願いします。
知ってるが
お前の態度が
気に入らない
118 :
デフォルトの名無しさん:04/10/31 13:51:42
C++ の宿題なんですが
入力した文字を逆転表示して表示させるにはどうしればいいのでしょうか・・・?
例
こんにちは
はちにんこ
と言った具合です。
for(i=0; i<sizeof(str); i++)
{
printf("%c",str[(sizeof(str)-1)-i]);
}
printf("\n");
120 :
デフォルトの名無しさん:04/10/31 14:01:44
sizeofでいいのかー?
>>118 1-tape TuringMachineのプログラムでもいいですか?
122 :
デフォルトの名無しさん:04/10/31 14:05:10
こんにちは
はマルチバイトだよ
#include <stdio.h>
void main(){
char str[256];
gets(str);
for(int i=strlen(str)-1;i;i--){
printf("%c",str[i]);
}
}
125 :
デフォルトの名無しさん:04/10/31 14:16:25
>>124 error C2065: 'strlen' : 定義されていない識別子です。とでました・・・
ハハハ・・・
strlenはstring.hにあるの忘れてた上にマルチバイトも無視するとはな・・・
#include <string.h>
127 :
デフォルトの名無しさん:04/10/31 14:25:08
>>126 今度は出来ました。
ありがとうございました。
//ちょっと訂正。いまだマルチバイト無視。
#include <stdio.h>
#include <string.h>
void main(void){
char[] str = new char[256];
gets(str);
int i=strlen(str);
while(i){
i--;
printf("%c",str[i]);
}
}
>>128 \test2.cpp(5) : warning C4091: 空白の宣言が見つかりました。
\test2.cpp(5) : error C2143: 構文エラー : ';' が '[' の前に必要です。
\test2.cpp(5) : error C2143: 構文エラー : ';' が '[' の前に必要です。
\test2.cpp(6) : error C2065: 'str' : 定義されていない識別子です。
\test2.cpp(10) : error C2109: 配列または、ポインタでない変数に添字が使われました。
cl.exe の実行エラー
test2.exe - エラー 4、警告 1
ってなります・・・
CコンパイラじゃなくてC++コンパイラじゃなきゃいやん。
131 :
デフォルトの名無しさん:04/10/31 14:43:05
(σ゚∀゚)σgets!!
>>130 コンパイラは Microsoft Visual C++ 6.0使ってます。
あらま、、、 C++じゃない環境で動作確認したのがまずかったか・
char[] str = new char[256];
じゃなくて
char str[256];
だな。
>>133 今度はOKでした。
しかし DOSでこんにちはと打つと
こんにちは
ヘちにんこ1ress any key to continue
となってしまいます・・・
getsしたあと'\n'のあとに'\0'を入れなきゃだめな希ガス。
136 :
デフォルトの名無しさん:04/10/31 15:23:24
再度依頼お願いします。
ある領域内に長方形が描画されている(入力画像として読み込み)として、
その長方形で平行な線分どうし(縦横各一組)をペアリングして検出する
プログラムをVC++で作りたいのですが、どのような記述にすればよいで
しょうか。
結果の表示方法は、平行だということが言えている様ならどんな感じでも
大丈夫です。edgeの抽出は終わってる状態として結構です。
どなたか知恵を貸して下さい。
本当に宿題か?
宿題じゃなくてもいいんじゃない?
class Line {
public:
double GetX1() const;
double GetY1() const;
double GetX2() const;
double GetY2() const;
};
こんなインタフェースが用意されていて、
全部のLineはvector<Line> lines;に入っているとする。
こんなクラスを用意する
struct K {
Line* line;
double a;
Katamuki( const Line* line ) {
this.line = line;
a = ( line -> getX1() - line -> getX2() )/ ( line -> getY1() - line -> getY2() );
}
};
あとは、
vector<K> ks;
for( ... )
katamuki.push_back( lines[i] );
とし、ks を a の値でソートし、
値の近い物を平行なラインとすればいい。
aが無限大になりそうな場合の処理は、まあ、なんとか考えて。
141 :
デフォルトの名無しさん:04/10/31 17:07:00
scanfでAかBを入力させて、そのあとifを使って分岐させて続きを作りたいのですが、
char x,A,B;
printf("AかBを入力してください>>");
scanf("%c",&x);
if(x == A)
{
}
if(x == B)
{
}
こんな感じにしましたが、ifの中身から実行されません。scanfで表示させた文字を
if文に反映させるにはどうすればいいんでしょうか?言語はCです。
>>141 char x,A,B;
printf("AかBを入力してください>>");
scanf("%c",&x);
A = ’A’;
B = ’B’;
if(x == A)
{
}
if(x == B)
{
}
143 :
デフォルトの名無しさん:04/10/31 17:21:35
>>142 できました。どうもありがとうございます。
…テンプレ修正きぼん
旧: ・計算問題は必ず数式自体をあげ、どのような計算をするのか
新: ・計算問題、アルゴリズム問題では必ず数式や手順を示し、詳しい説明を付記してください。
>>145 そんな事が書けるようだったら質問なんかするわけないじゃん
誰か教えてください・・・
/*
>>118 文字反転プログラム(Shift-JIS)
*/
#include<stdio.h>
#define SIZE 256
void r_put(unsigned char* p) {
if (*p == '\0')
return;
if (((0x80<p[0]) && (p[0]<0xa0)) || ((0xe0<=p[0]) && (p[0]<0xf0))) {
r_put(p+2);
putchar(p[0]);
putchar(p[1]);
} else {
r_put(p+1);
putchar(p[0]);
}
}
int main() {
unsigned char buff[SIZE];
printf("文字列を入力してください\n");
scanf ("%s", buff);
r_put (buff);
return 0;
}
>>148 なんとお礼を申し上げたらいいものか・・・
完璧です!
ありがとうございました。
150 :
ジョン:04/10/31 20:31:57
>>144 ありがとうございます。でも、コンパイル時にエラーがでます・・・。
>>148 「хavを入力すると正しく動きません。
>>150 ソースの先頭に
#include <stdio.h>
#define ASIZE 256 /* 256文字種(asciiだけでいいなら128?) */
#define XSIZE 100 /* 検索文字列の最大長かな(動的確保するなら不要) */
#define OUTPUT(x)printf("%d\n", (x))
#define MAX(a, b)(a) > (b) ? (a) : (b)
でもつけとけ。
153 :
ジョン:04/10/31 21:14:58
>>152 #define MAX(a, b)(a) > (b) ? (a) : (b)
の?っていうのはどういうものですか?
if(a>b)
return b;
else
return a;
を総画
あー、小修正。
#define OUTPUT(x) printf("%d\n", (x)) /* 開始位置の出力(0オリジン) */
#define MAX(a, b) ((a) > (b) ? (a) : (b)) /* 大きいほうの数値を得るよくあるマクロ */
156 :
デフォルトの名無しさん:04/10/31 21:31:49
どうしてもわかりません。どなたかご教授ください。おねがいします!
f(x)=exp(-x^2)-sinx=0を2分法で根を求めるプログラムを作成せよ。
・初期値a,bをそれぞれ1,0とし、収束判定値eを5*10^-7とすること。
・コマンドライン引数として「-k」を与えると計算量を表示すること。
・計算結果はファイルに保存できるようにすること。
(実行例1)
C:\....\C>nibunpou
a=1
b=0
e=5E-7
出力ファイル名を入力してください。 > test.txt
c n
----------------
1 0.5000000
2 0.7500000
3 0.6250000
4 0.6875000
5 0.6562500
・
・
・
20 0.6805983
(実行例2)
C:\....\C>nibunpou -k
a=1
b=0
e=5E-7
計算量は20回です。
157 :
デフォルトの名無しさん:04/10/31 21:44:04
言語はCです。お願いします。
>>156 どこがどう判らない?
全部丸ごと一分たりとも判らないなら死ね。
>>118 #include <locale>
#include <string>
#include <list>
#include <iostream>
int main() {
std::locale::global(std::locale("japanese"));
std::wstring wstr;
std::wcin >> wstr;
std::list<wchar_t> wclst(wstr.begin(), wstr.end());
wclst.reverse();
wstr.assign(wclst.begin(), wclst.end());
std::wcout<< wstr << std::endl;
}
>>156 #include <stdio.h>
#include <assert.h>
#include <math.h>
#include <string.h>
#define func(x) (exp(-pow((x),2))-sin(x))
int main(int argc, char **argv) {
double low=0, mid, high=1, ret;
double e = 5 * pow(10,-7);
int count = 0;
assert((func(low)<0&&func(high)>0) || (func(low)>0&&func(high)<0));
for (;;) {
count++;
mid=(low+high)/2;
if (fabs(ret=func(mid))<e)
break;
if (ret>0)
low = mid;
else
high = mid;
}
if (argc==2 && strcmp(argv[1],"-k")==0)
printf("%d times, ans: %f\n",count,mid);
else
printf("ans: %f\n",mid);
return 0;
}
完全に仕様には沿ってないけど、こんなもんでどう?
どうでもいいこと気にしてみたり。
#define func(x) (exp(-(x)*(x))-sin(x))
double e = 5e-7;
>double e = 5e-7;
完全に忘れてたよ(;´Д`)
164 :
156:04/10/31 23:52:48
↑みれない
おもしろそうだけど今日の昼までにはさすがに無理。
3日くらいほしいな。。
>>168 独創的なのを作ろうとして*ボタンを切り替えボタンにして、
キーボードのQWERTY配列をキーボード左から3×3マスずつカットして3分割したのを
*ボタンで切り替えてうつって方式やりたいんだけど
切り替えボタンのプログラムがわからないっぽ
キーボードの3×3カットの意味わかります?
こゆことです
パターン1
1ボタン q 2ボタン w 3ボタン e
4ボタン a 5ボタン s 6ボタン d
7ボタン z 8ボタン x 9ボタン c
パターン2
1ボタン r 2ボタン t/ 3ボタン y
4ボタン f 5ボタン g 6ボタン h
7ボタン v 8ボタン b 9ボタン n
パターン3
1ボタン u 2ボタン i 3ボタン o
4ボタン j 5ボタン k 6ボタン l
7ボタン m 8ボタン p 9ボタン 記号
マルチすんなボケ
>>165 オオ同じ穴の狢よw
ところで、オレはオーソドックスにToUpperを使って小文字を大文字に変換するプログラムを作ろうと思ってるんだけど
else if(SensePressedDuration(2) == LONG){//強く押された時
if (status == 10 ){//直前に入力された文字が10[a]なら
DeleteLetter();//[a]を削除し
DisplayLetter(ToUpper(10)); //大文字の[A]に変換、表示し ←ここがかなり間違ってる臭い・・
status = -1;//文字を確定する
}
でいのでしょうか・・・教えて偉い人・・・
>>172 終わりそう?
俺取扱説明書で死にそう。2000字もいかね
創意工夫点も1000字もいかねw
174 :
デフォルトの名無しさん:04/11/01 07:57:03
質問です。
配列に格納された文字列を1文字ずつ表示する関数。
void put_st(const char str[])
{
unsigned i=0;
while(str[i])
putchar(str[i++]);
}
これをprintf関数を用いるとコンパイルは出来るのですが、
実行途中でエラーがでます。
printf("%s",str[i++]);
なぜでしょうか?
どう直したらいいのでしょうか?
おねがいします。
>>172 else if(SensePressedDuration(2) == LONG){//強く押された時
ってPressedDurationは長さのやつやのにコメントが「長く」じゃなくて「強く」
になってんの?
>>169 配列とかでパターンごとのマップで持つくっといて、
'*'が押されたらマップを切り替えるようなものを作ってみたら?
%sは文字列。この場合は%c。
>>176 アドバイスさんくすです。
それ考えてたんですが。パターンごとのボタン表示のプログラム(今は3つ繋げられないんでパターンごとに保存してます)
はできているんですが、マップとしてくくるためにどんなプログラム使えばよろしいでしょうか?
みなさんどうもありがとうございましたm(. .)m
すっきりしました。
181 :
デフォルトの名無しさん:04/11/01 08:24:15
>174
printf("%c",str[i++]);
じゃないの?あるいは
printf("%s",str+i);i++;
ランレングス符号化において、
効率よく圧縮を行う方法はどのようなものがありますか?
>>173 こっちに書き込むときに間違ってたw
本文は確かめたけどちゃんと短く長くになってた・・
取り扱い説明書は、いろんな所のマニュアルからひっぱってくればいいとおもうよ
創意工夫は・・・むずいw
int SensePressedDuration(int ButtonNum)のくだりは合ってると思う
int ToUpper(int LetterNum)の使い方がちょっとわからなくて・・・
>>183 てか海外向けだから説明書は英語じゃなくていいのか?w
>>182 ランレングス法の問題点は、ランダムな文字列を符号化する場合
かえってサイズを大きくしてしまうことがある
そこで 「ここからn文字先までは符号化をしない――」
ような情報を付加すれば、極端な膨張をおこさずに効率よく圧縮できる。
C言語:分割コンパイルの宿題
2つの値(実数)をキーボードから入力し、
それぞれ以下のことを行う関数を作成し画面に表示するソースコードを記述しなさい。
ただし、main()関数と以下の関数は別ファイルに記述し、ヘッダファイルmp用いること。
-@加算 A減算 B乗算 C除算
-D大きいほうを出力 E小さいほうを出力
よろしくお願いします。
誤字です、すいません
mp→も
>>189 そんなときはExcite翻訳で。
#事後チェックを忘れずにw
191 :
デフォルトの名無しさん:04/11/01 12:30:29
エキサイト翻訳を使うのは初心者。
漏れみたい玄人は暗記パンを使う。
192 :
デフォルトの名無しさん:04/11/01 12:51:53
人の宿題をやってあげるなんて・・・。
なんていい人たちだ・・
教えたがり人種
CやC++のスレで宿題教えてと書くと邪魔だからこの隔離スレがあるのだよ
そしてスルーされる187
>>187 //main.c
#include <stdio.h>
#include <stdlib.h>
#include "calc.h"
int main() {
char Buffer[128];
double Num[2];
int i;
for (i = 0; i < 2; i++) {
printf("%dつめの数:", i + 1);
fgets(Buffer, sizeof Buffer, stdin);
Num[i] = atof(Buffer);
}
Add(Num);
Sub(Num);
Mul(Num);
Div(Num);
Max(Num);
Min(Num);
return 0;
}
//calc.c
#include <stdio.h>
#include "calc.h"
void Add(double d[]) {
printf("加算:%f\n", d[0] + d[1]);
}
void Sub(double d[]) {
printf("減算:%f\n", d[0] - d[1]);
}
void Mul(double d[]) {
printf("乗算:%f\n", d[0] * d[1]);
}
void Div(double d[]) {
printf("除算:%f\n", d[0] / d[1]);
}
void Max(double d[]) {
printf("最大値:%f\n", d[0] > d[1] ? d[0] : d[1]);
}
void Min(double d[]) {
printf("最小値:%f\n", d[0] < d[1] ? d[0] : d[1]);
}
//calc.h
void Add(double []);
void Sub(double []);
void Mul(double []);
void Div(double []);
void Max(double []);
void Min(double []);
どうすべきか指定がないから、対応しようがないわな
201 :
Cの課題:04/11/01 17:40:46
#include <stdio.h>
int gi;
void main(void)
{
int i,gi=0;
void count();
printf("\t gi\t ai\t si\n");
for(i=0; i<3; i++){
count();
gi=gi+1;
printf("main()\t gi= %d\n",gi);
}}
void count(void)
{
int i, ai=0;
static int si;
for(i=0; i<3; i++){
printf("count()\t gi= %d\t ai=%d\t si=%d\n",gi,ai,si);
ai =ai+1;
gi =gi+1;
si =si+1;
}}
(1)以上のプログラムを実行し,表示結果を説明せよ。
また,main()の中と外で変数名giを誤って重複使用している。
この場合,コンピュータは重複した変数をどう扱ってると考えられるか。
(2)変数宣言のところで,自動変数のgiやaiを0に初期化しているが,
初期化を行わないとどうなるか。
なんだかよく分からないので、どなたか説明して下さい!お願いします。
(1)count関数を呼び、グローバル変数gi,自動変数ai,静的変数siを表示し、
それぞれ+1する。これを3回繰り返しcount関数から戻る。
自動変数giを+1して表示する。
main関数内ではこの、「count関数を呼ぶ,自動変数giを+1して表示」を3回繰り返す。
main関数内では、giは自動変数としてグローバル変数giとは別に扱われる。
(2)自動変数を初期化しないと、変数の内容は不定(なにが入っているか分からない)
で開始される。
203 :
デフォルトの名無しさん:04/11/01 18:36:30
#include <stdio.h>
#defineVSIZE 256
#defineHSIZE 256
int im[VSIZE][HSIZE];
main ()
{
int i,j;
int c;
FILE *fp;
fp = fopen("カラー.psd","rb");
for(i=0;i<VSIZE;i++){
for(j=0;j<HSIZE;j++){
c = fgetc(fp);
im[i][j] = c;
}
}
fclose(fp);
fp=fopen("グレースケール.psd", "wb");
for (i=0;i<VSIZE; i++){
for(j=0;j<HSIZE;j++){
fputc(im[i][j],fp);
}
}
fclose(fp);
}
カラー画像をグレースケール画像に変換する式は分かったんですが
どうやって書いていいのか分かりません。
変換式 グレースケール = 0.299R + 0.587G + 0.114B
おねがいします
>>203 食事のあと入浴してから紅茶を飲んだ後に作ってあげるけれど、
言語はCでカラーのPSDフォーマットの画像をグレイスケールのPSDフォーマットの画像
に変換するんだね?
C++でもOK?
206 :
203:04/11/01 18:53:03
>>165がどんな問題だったのか教えてくれorz気になって眠れん(´д`)
PSDってどんな形式だっけ…。
変換式がわかっててなんでかけないんだろう……
psdって、レイヤー情報も持ってるんじゃなかったっけ?
単純に>203みたいには読めないと思うのだけど。
PSDフォーマットの詳細がみつからないんだけど、
だれか知らない?
psdの仕様が教えられている or 仕様書を貰っている
でもなきゃ、そんな宿題でないはず…。
214 :
デフォルトの名無しさん:04/11/02 00:11:19
ちょっとお聞きしたいのですが、C言語の
関数からで.midiの再生をするプログラムを作ることは可能ですか?
.wavの再生にはPlaySound関数を使ってるのですがwavはファイルサイズ
が大きすぎて人に渡すプログラムを作るときに困ってしまいます。
もし再生する方法をどなたかご存じでしたらお願いします。
ふーん、宿題スレは誘導されなかったのに敢えてマルチとはねぇ。
調べた方が早い上に労力もいらないだろうに
218 :
デフォルトの名無しさん:04/11/02 00:21:55
216>>ついてきたか
217>>アフォだからわかんなかったんだよ
>>219 うへっ、めんどくせ。>204は満漢全席でも食べに行ったのか、一向に仕上がってこないから
フォーマットが来たことだしちょっとやってみようかと思ったら……
ImageMagickでも拾ってこいって感じだな。
ポインタについて易しく書いてあるサイトありませんか?・・・
ポインタの理解が変な人って、大抵メモリがイメージできてないんだよね
目盛りですか?
軽量カップみたいなものを想像すればよろしいのでしょうか?
それとも、メジャーみたいなもののほうがいいのでしょうか?
軽量カップですか?
NASAが開発した新素材かなんかを想像すればよろしいのでしょうか?
昼間は厨房ばかりだな。つまんねーんだよ
もう夕方だ
クワガタ
厨房ですか?
厨房は確かに、私のスーパープログラムの作成を阻害し、
またそれにより、私のスーパープログラムを、お目にかかることのできなくなった
このスレの住人には大損失です。
ですか、そもそも宿題を丸投げする人種は厨房なのです。
自分に利益をもたらす厨房(自己満足、優越感、技術向上を与えてくれる)は、歓迎し、
そうでない厨房(ネタレスをする厨房)は貶める。これはただのわがままです。
つまり、厨房ということになります。
厨房をこのスレでは許容すべきです。
お前が厨房だという意見は受け付けないので悪しからず。
ほんたま?とはキャラ違うか
> またそれにより、私のスーパープログラムを、お目にかかることのできなくなったこのスレの住人には大損失です。
日本語の勉強をしましょう
優越感なんて感じるかよ・・・・こんな糞簡単な質問ばかりで・・・・・・
そりゃあ、君にはかなり難しいかもしれないがな・・・・
批判は受け付けません。以上。
まあコピペなんだがな。
常識人さん。
またあなたですか?
どうして、あなたはわざわざ、長文を書いてまでこのスレを荒らすのです?
スーパープログラムですって?なんですか、スーパーって?
プログラマー以前に、人間として恥ずかしくないのですか?
もし、私だったらそんな生き恥をさらす前に、死を選ぶところです。
常識人さん。
わたしはこれまであなたに、「もう来ないで下さい」
そう言い続けてきました。
ですが、今日はあえて言わねばなりますまい。
常 識 人 死 ね。
それもコピペなんだがな。
コピペではないだろうが
>>236 お前は少し言いすぎなんじゃねーの?
”死ね”なんて軽々しく人に対して言っていいもんじゃない。
せめて”氏ね”とかにして”死”という字を使わないのが2ちゃんの常識。
そういう意味でお前は常識知らず。常識人のほうが
常識を持っている分だけまし。
もうこないでほしいのはお前のほうだ。常識人は、宿題が枯渇しているときの
俺たちの心のオアシス。
水がなければ俺たちは死ぬ。
>>236、お前は俺たちを殺すつもりか?
殺される前に、俺はお前のことを警察に通報するつもりだ。
これもコピペなんだがな。
数系変換プログラムをつくってくれませんか?
>>240 template< T_>
int henkan( T_ arg_ ){
return 1;
}
242 :
デフォルトの名無しさん:04/11/02 21:47:23
ここではレポートの書き方とか質問しても大丈夫ですか?
言いわけねーだろ
244 :
デフォルトの名無しさん:04/11/02 22:07:47
よしのぶもちょっときてるな。
古田もきてるしな。
245 :
デフォルトの名無しさん:04/11/02 22:16:59
>>243 C言語の課題のアルゴリズムを書かなくちゃいけないレポートなんですけどそれでもダメですか?
247 :
デフォルトの名無しさん:04/11/02 22:32:20
この問題が分かりません。どなたかお願いします。
1.要素の数256の文字型配列str1, str2を宣言する。gets 関数を使ってstr1にキーボードから文字列を入力し、
ポインタを使ってその文字列をstr2にコピーするプログラムを作りなさい
2.入力された英文字列を、すべて大文字に変換して出力するプログラムを、
ポインタを使って作りなさい。
249 :
デフォルトの名無しさん:04/11/02 22:41:52
>249
もちとまともなのを基に汁!
>>247 1
#include <stdio.h>
int main(void)
{
char str1[256], str2[256], *p1 = str1, *p2 = str2;
printf("str1:");
gets(str1);
while (*p2++ = *p1++) ;
printf("str2:%s\n",str2);
return 0;
}
2
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char str[256], *p = str;
gets(str);
while (*p) *p++ = toupper(*p);
printf("%s\n", str);
return 0;
}
>>249 ポーカーのルールがわからない俺は(ry
常にクールな顔をすればいいのだよ
( ´・ω・`)Am I cool?
( ´・ω・`)私は寒いの?
( ´・ω・`)そう、心が寒いの
ストレートの判定
下の関数は外で宣言
int comp(const void *i, const void *j)
{
return *(int*)i - *(int*)j;
}
ここから
//hdは%13されてる
int flag_str=0;
qsort(hd,5,sizeof(int),comp);
for(int i=0; i<4; i++){
// 9は13から1にいった場合の判定
if(abs(hd[i]-hd[i+1])==1 || abs(hd[i]-hd[i+1])==9){if(i==3) flag_str=1; }
else{i=4}
}
ストレートフラッシュはフラッシュとのフラグの組み合わせ
合ってるか自信は無い
259 :
デフォルトの名無しさん:04/11/03 02:01:28
>>257,
>>258 ありがとうございます。
一応一通り判定はできるようになりました。
あと、同じマークのカードが4つ来たときに
フラッシュを狙うための方法を考えているのですが
うまくいきません。もしよければ教えていただけませんか?
ハニーフラッシュを作りなさい
Qが5枚はイカサマです。
ジョーカー使えば・・・?
ショッカーってなんでキーキー言うの?耳障りなんだけど
>>259 仲間はずれのカードを捨てればいいんじゃないの?
card[5] に、手持ちのカードが入ってるとして
/* 捨てるべき、手持ちのカードへのインデックスを返す */
int forFlash( int* card )
int mark[4], i, target_mark;
for( i = 0; i < 5; i++ )
mark[ card[i] / 13 ]++;
for( i = 0; i < 4 && mark[i] == 4; i++ )
;
if( i == 4 )
return -1;
target_mark = mark[i];
for( i = 0; i < 5; i++ )
if( card[i] / 13 != target_mark )
return i;
return -1; // エラー
}
268 :
デフォルトの名無しさん:04/11/03 14:19:29
>>268 見たまんまだろ?
これ以上、何を説明しろと?
270 :
デフォルトの名無しさん:04/11/03 14:31:43
前者はローカル変数を引数として渡し、後者はグローバル変数を使っている。以上。
何が知りたいのかよく分からん。
「プログラム変数の受け渡し方法の違い」って何よ?
同じ出力結果になるソースを提示されても非常に説明しづらい。
違う結果になるソース貼られて「どうして違うの?」なら答えやすいけど。
グローバルに宣言しちゃえば関数に渡す必要ないんだから
全部グローバルで宣言すればええやん
なんでわざわざそんな面倒なことするん?
とエスパってみる(リンク先すら見てないので見当違いかも)
273 :
268:04/11/03 15:50:30
>>271 >>この二つのプログラムの変数の受け渡し方法の違いを
「の」が抜けてましたね
自分も答え方が分からなくて困ってます
例えて言うならデータを渡す時にメール(引数)を使うか
掲示板(グローバル変数)を使うかの差。
なんて答え方すればいいのだろうか。
関数の呼び出し時に値がスタックに積まれる、とか
戻り値がeaxに入ってくる、とか
なんかソッチ方面の気がしね?
あとは何だ、再帰してたり再入してたりすると
アレだったりとかよ。
>>275 >関数の呼び出し時に値がスタックに積まれる、とか
これは処理系依存。レジスタ渡しだって普通にあるぜ
>276
言われてみりゃそうだな。Winでも fastcall だとレジスタ渡しか。
__declspec(naked) で自前で fastcall やろうとして暴走させたりしてよw
まーでも学校の課題だしよ。センコーも難しーことは考えてなさそーくね?
もれはソッチ方面にジェンキン寿司禁固1年賭けんぜ。ウヘヘ
問題文の意図が汲み取れないので、
答え方が解らんといっているくせに、
当の問題文を改変せずに
そのまま載せようとしない奴には
回答のしようがない。
同じクラスの奴キタ━━━━(゚∀゚)━━━━ッ!!
a(0)=1
b(0)=1
a(n)=a(n-1)+b(n)
b(n)=b(n-1)*1.1
で与えられる数列を、a(n)が30以下の間表示せよ
変数がいっぱいで意味わからない。゚(゚´Д`゚)゜。
おねがいしまs
>>281 #include <iostream>
double b(int n)
{
return (n == 0) ? 1. : b(n - 1) * 1.1;
}
double a(int n)
{
return (n == 0) ? 1. : a(n - 1) + b(n);
}
int main()
{
for (int n = 0; n <= 30; n++)
std::cout << "a(" << n << ") = " << a(n) << ", b(" << n << ") = " << b(n) << std::endl;
}
>>281 #include <stdio.h>
int main() {
int i = 0;
double a = 1;
double b = 1;
printf("a(%d) = %lf, b(%d) = %lf\n", i, a, i, b);
for(i = 1; i < 30; i++) {
b = b * 1.1;
a = a + b;
printf("a(%d) = %lf, b(%d) = %lf\n", i, a, i, b);
}
return 0;
}
>>281 失礼。訂正。
#include <iostream>
double b(int n)
{
return (n == 0) ? 1. : b(n - 1) * 1.1;
}
double a(int n)
{
return (n == 0) ? 1. : a(n - 1) + b(n);
}
int main()
{
for (int n = 0; n <= 30; n++)
if (a(n) <= 30.)
std::cout << "a(" << n << ") = " << a(n) << ", b(" << n << ") = " << b(n) << std::endl;
}
>>281 #include <stdio.h>
int main() {
int i;
double a=b=0;
for (i=0; i<30; i++) {
b = b * 1.1;
a = a + b;
printf("a(%d) = %f\n", i, a);
printf("b(%d) = %f\n", i, b);
}
return 0;
}
どのへんが変数多いんだろう?
( ´д`;) aとbを0にしてどうするんだろう・・・
double a=b=1.0;
a(n)が30以下の時だぞ。
今の所正解は
>>284だけだ。
>>288 そりゃ「nが30以下の場合」だろ。頭悪いのか?
a(n)が30以下の間表示せよ
a(n)が30以下の間表示せよ
a(n)が30以下の間表示せよ
a(n)が30以下の間表示せよ
おおっと、全員間違いか?!
アホばっかだな。
こんな奴らに仕事は出せんな。とんでもないプログラムを作ってくれそうだ。
あ!
いっぱい書いてもらったところ恐縮なんですが
while文使ってできますか?
>>297 #include <iostream>
double b(int n)
{
return (n == 0) ? 1. : b(n - 1) * 1.1;
}
double a(int n)
{
return (n == 0) ? 1. : a(n - 1) + b(n);
}
int main()
{
double a = 1., b = 1.;
int n = 1;
while (true) {
if (a > 30.) break;
std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;
b *= 1.1;
a += b;
n++;
}
}
C言語で『西暦年月日を入力し、2000年12月31日までの日数を計算するプログラム』を作りたいのですが、
全然分かりません.どなたかプログラムを作ってくれませんか?お願いします.
あ、スマソ。こちらで
#include <iostream>
int main()
{
double a = 1., b = 1.;
int n = 1;
while (true) {
if (a > 30.) break;
std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;
b *= 1.1;
a += b;
n++;
}
}
whileを使うならこの方が良くない?
#include <iostream>
int main()
{
double a = 1., b = 1.;
int n = 1;
while (a <= 30.) {
std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;
b *= 1.1;
a += b;
n++;
}
}
>>297 std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;
→
printf("a(%d) = %lf, b(%d) = %lf\n", n, a, n, b);
ね。
死らな刈田だろう。
>>299 #include <stdio.h>
#include <time.h>
int main(void)
{
struct tm tm, tm2;
int y, m, d;
printf("西暦と年月日を入力して下さい:");
scanf("%d %d %d", &y, &m, &d);
tm.tm_year = 2000 - 1900;
tm.tm_mon = 12 - 1;
tm.tm_mday = 31;
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_isdst = 0;
tm2.tm_year = y - 1900;
tm2.tm_mon = m - 1;
tm2.tm_mday = d;
tm2.tm_hour = 0;
tm2.tm_min = 0;
tm2.tm_sec = 0;
tm2.tm_isdst = 0;
printf("%ld days\n", (long)difftime(mktime(&tm), mktime(&tm2)) / (60 * 60 * 24));
return 0;
}
>>299 ちなみに2000年12月31日から経過した日数ならtmとtm2をdifftime()の中で
ひっくり返せ。
>>303 「西暦と年月日」というのはおかしいので、「年月日を年を西暦で」か何かに
読み替えてくれ。
306 :
デフォルトの名無しさん:04/11/03 22:02:50
問題はキーボードから入力した文字列中の英大文字、英小文字、数字、記号の個数を出力しなさい。というものです。
下記のところまでできました。エラー、警告等もないのですが、KKKkkk999−−−と3つずつのように同じ数だけ入力すると最後にエラー表示(?)がでます。
なぜでしょうか?
#include <stdio.h>
void main()
{
char *a;
int o=0,k=0,su=0,ki=0;
scanf("%s",a);
while(*a!='\0'){
if(*a>='a'&&*a<='z'){
k++;}
else if(*a>='A'&&*a<='Z'){
o++;}
else if(*a>='0'&&*a<='9'){
su++;}
else{
ki++;}
a++;
}
printf("小文字は%d個\n大文字%d個\n数 字%d個\nその他%d個\n",k,o,su,ki);
}
エラー表示(?)
>>char *a;
>>scanf("%s",a);
ネ申
何もかもが理解出来てない悪寒
310 :
306:04/11/03 22:12:49
すみませんエラー表示書き忘れました。
エラー表示は「"0x77f627fe"の命令が"0x00000004"のメモリを参照しました。メモリが"read"になることはできませんでした」というものです。
スミマセンでした。
変えてみた
char *a=(char*)malloc(sizeof(char)*100);
char *b = a;
int o=0,k=0,su=0,ki=0;
scanf("%s",a);
while(*a!='\0'){
if(*a>='a'&&*a<='z'){
k++;}
else if(*a>='A'&&*a<='Z'){
o++;}
else if(*a>='0'&&*a<='9'){
su++;}
else{
ki++;}
a++;
}
a=b;
printf("小文字は%d個\n大文字%d個\n数 字%d個\nその他%d個\n",k,o,su,ki);
free(a);
でいいのかなあ
しかし暦の計算は知らなかったなあ
>>311 char a[100];でもいいんじゃないか?
ポインタインクリメントしてるからなあ
コンパイラに怒られたよ
free( b ); でいいじゃん。
それは何となく…
>>313 char buf[100];
char *a = buf;
>>問題はキーボードから入力した文字列中の
318 :
306:04/11/03 23:51:12
ポインタでインクリメントを使用し、ポインタの文字型に入れた「m12」の「2」を画面に出力しなさい。
printf("?",*(a+2));
「?」は?
ポインタの文字型に入れた
↑
このへんが「?」
%cが文字
%sが文字列
>>318 どんな本使ってるんだ?
もしかして釣り?
バネ振り子をプログラムで作る宿題が出ました。
式は
dx/dt=v
dtheta/dt=a
dv/dt=(L+x)*a^2+g*cos(theta)-k/m*x
da/dt=-(2*v*a+g*sin(theta)/(L+x)
です。
これをアダプティブ・ルンゲクッタ法で解くプログラムをお願いします?
氏ねってお願いします?
お願いしません。
逝けってお願いします?
西暦1900年の干支は「子」である。1900以上の数値を
入力したとき、その歳の干支を出力するプログラムを作りなさい。
文字型配列etoに{"子","丑","虎",〜・・・"戌","猪"}を格納。
入力された数値と1900の差を12で割った余りでその年の干支を特定すればよい。
ポインタを使ったほうが、プログラムが簡単になる。
この問題が宿題として出されたんですが、どなたかお願いします。
それは干支か?十二支ではなく、本当に干支か?
>>325 フローに 1→n って書いてあるから出題者は BASIC を対象言語にしてるんだろなぁ。
香ばしい問題なので汚いソースを用意しました。
#include <stdio.h>
int main( void ) {
int maxn=5,n,Irank,Iusrn,Orm=0,Ormno[5];
int no[]={101,102,201,202,301},umaxn[]={4,4,3,4,6},status[]={0,1,0,1,0},rank[]={3,3,2,2,1};
scanf("%d %d", &Irank, &Iusrn );
for(n=0;n<maxn;n++)
if(!status[n]&&umaxn[n]>=Iusrn&&(Irank<1||Irank==rank[n])){
Ormno[Orm]=no[n];Orm++;
}
for(n=0;n<Orm;n++)
printf("%d\n",Ormno[n]);
return 0;
}
>>327 ポインタを使ったほうが簡単って
char* eto[]={"子","丑"....};
の事かぁ?
printf("%s\n", eto[(In-1900)%12]):
これだけ書けば良いだろ。
>>327 ということで回答。
#include <iostream>
int main()
{
static const char jikkan[][3] = {"庚", "辛", "壬", "癸", "甲", "乙", "丙", "丁", "戊", "己"};
static const char junishi[][3] = {"申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"};
std::cout << "西暦(年):";
int year;
std::cin >> year;
std::cout << "干支:" << jikkan[year % 10] << junishi[year % 12] << std::flush;
}
ポインタってdouble型なら
double *a;
と書くと思いますが、
double* a; てのとどう違うのですか?(*の位置?両方あっているの?)
>>332 意味は同じ。
前者が昔風、後者が最近(といっても10年くらい前)からの流行。
「double* までが型である」という主張に元ずく。
double* a, b;
だと b の型は double になるのが気持ち悪いので、後者で書くときは1行1変数が
一般的。
double* a, * b;
↑本当にそんな書き方してるの?
double* a, *b;
>>329さん
ありがとうございます。
助かりました
これぐらいすぐ作れるように頑張ります〜
double
* a,
* b;
>>334 「元ずく」という表記は何時頃からの流行でつか?
typedef double *pointer_to_double;
pointer_to_double a, b;
343 :
デフォルトの名無しさん:04/11/05 10:16:36
どなたかお願い致します。Cです。
一問目
整数を入力し、入力した数値の二乗を出力するプログラムを作成せよ。
ただし、入力した整数を引数とし、その二乗を復帰値とする関数を作ること。
二問目
時間を(0〜23)を入力し、以下のような挨拶を出力せよ。
ただし、関数には入力した時間を引数として渡し、復帰値は無いこと。
0〜3 Good Night
4〜11 Good Morning
12〜16 Good Afternoon
17〜20 Good Evening
21〜23 Good Night
int square(int n)
{
return n * n;
}
void greeting(int hour)
{
switch (hour)
{
case 0:
case 1:
case 2:
case 3:
printf("Good Night");
break;
マンドクセ
default:
break;
}
}
後適当に埋めて。マンドクセ
case 1:
が消えちゃってら。マンドクセ
Janeが変だっただけだ。マンドクセ
347 :
343:04/11/05 10:32:20
続きです。
三問目
2つの正の整数を入力し、最大公約数を求めよ。
ただし、入力促進メッセージを必ず付けること。
また、ユークリッドの互除法を用いること。
また、何回ループしたかも表示せよ。
四問目
矩形則にてf(x)=x(2)の(a,b)での定積分を求めよ。
ただし、分割数nとa,bはキーボードより入力すること。
五問目
座標P(a,b)を円の中心とし、座標Q(c,d)を円周の一点とする円の面積を求めよ。
ヒント 1,点(e,f)を中心で半径をrとする円の公式は
(x - e)(2)+(y - f)(2)=r(2)
2,円の面積はs=πr(2)
3,まず、1からr(2)を求め、それから面積を求める。
348 :
デフォルトの名無しさん:04/11/05 10:33:17
マンドクセ
>>343 void greeting(int hour){
char *word[] = {"Night", "Morning", "Afternoon", "Evening"};
int id[24] = {0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,0,0,0};
printf("Good %s\n", word[id[hour % 24]]);
}
>>347
5
#include <stdio.h>
#define PI 3.14159
int main(void)
{
double a, b, c, d, s;
printf("a >>"); scanf("%lf", &a);
printf("b >>"); scanf("%lf", &b);
printf("c >>"); scanf("%lf", &c);
printf("d >>"); scanf("%lf", &d);
s = PI * ((c - a) * (c - a) + (d - b) * (d - b));
printf("s = %f", s);
return 0;
}
352 :
デフォルトの名無しさん:04/11/05 12:45:28
ぱいのていぎは 4*atan(1.0)
titty fucking
すいません皆さんにはレベルが低すぎてつまらないかと思いますがお願いします
双方向リストの隣接交換法でソートするプログラムです
struct EMPLOYEE { /* 社員データ */
char name[NAME_LENGTH]; /* 氏名 */
int age; /* 年齢 */
char section[SECTION_LENGTH]; /* 所属 */
char address[ADDRESS_LENGTH]; /* 住所 */
char status; /* 状態 ('i':データ有り、'h':データ仮削除) */
struct EMPLOYEE * next; /* 次のリストを示す */
struct EMPLOYEE * prev; /* 前のリストを示す */
};
を使用してください
ソートには、ポインタをつなぎかえる方法を使用してください
359 :
デフォルトの名無しさん:04/11/05 21:53:53
Cで 4次の方程式
x^4 + A*x^3 + B*x^2 + C*x + D = 0
を A, B, C, Dを与えて、虚数解を含む4つの解を求めたいのですが
上手くいきません。どうかお願いします。
visual C++ 6.0
配列の最大値と最小値を求める関数を作成しなさい。
最大値と最小値の表示はmain関数で表示するものとします。
初期値
a[] = {10, 25, 7, 45, 2, 100, 3, 70, 50, -1};
-1は配列の終端を意味します。
#include <stdio.h>
void MaxMin(int*, int*);
void main(void)
{
int a[] = {10, 25, 7, 45, 2, 100, 3, 70, 50, -1};
}
void MaxMin(int *x, int *y)
{
}
別の変数名例えば”int Max = 0”を宣言してforで-1になるまでループし、ifで比較して格納するって言う方法以外を探しているのですができませぬ。
考えるだけ考えましたが無理だったので恥を忍んでお願いします。orz
後説明へたくそで面目ない。(´・ω・`)
>>358 何をどの順番にソートするんだ?
>>360 ソートとアルゴリズムで検索してくれ
4次は無理です…
解き方いろいろありそう
最大値、最小値の初期値は はいれつの先頭要素に汁のがセオリー(w
んで、要素2番目から比較汁!
>360
>別の変数名例えば”int Max = 0”を宣言
えーっと、パラメータの *x,*y そのまま使え(w
年齢でお願いします >361
366 :
デフォルトの名無しさん:04/11/05 23:01:47
#include <stdio.h>
void MaxMin(int*, int*, int*);
void main(void)
{
int a[] = {10, 25, 7, 45, 2, 100, 3, 70, 50, -1};
int Max, Min;
MaxMin(&Max, &Min, a);
printf("%d\n", Max);
printf("%d\n", Min);
}
void MaxMin(int *x, int *y, int *z)
{
for(*x = *y = *z, *z++; *z != -1; *z++)
{
if(*x < *z)
*x = *z;
if(*y > *z)
*y = *z;
}
}
試してないから動くかは知らん
367 :
デフォルトの名無しさん:04/11/05 23:40:57
すみません。お手上げです。5時間以上考えたんですが、どうしても上手くいきません。
何故でしょうか?^^;。分かる方ご指摘下さい。f=1です。
http://ceram.material.tohoku.ac.jp/~takamura/class/comp16/day5/day5.html #include <stdio.h>
#include <math.h>
main()
{
int h, k, l;
float x1=0.0, x2=0.0, x3=0.5, x4=0.5, y1=0.0, y2=0.5, y3=0.5, y4=0.0, z1=0.0, z2=0.5, z3=0.0, z4=0.5;
double a, d, lambda, theta, F, FF, Fa, Fb;
a = 0.3615;
lambda = 0.154056;
for( h = -4; h<=4; h++){
for( k = -4; k<=4; k++){
for( l = -4; l<=4; l++){
if ( !(h==0 && k==0 && l==0) ){
d = a / sqrt(h*h+k*k+l*l);
theta = 2*asin(lambda/(2*d));
if ( F > 0.001){
Fa = 1+cos(6.28*(h*x2+k*y2+l*z2))+cos(6.28*(h*x3+k*y3+l*z3))+cos(6.28*(h*x4+k*y4+l*z4));
Fb = sin(6.28*(h*x1+k*y1+l*z1))+sin(6.28*(h*x2+k*y2+l*z2))+sin(6.28*(h*x3+k*y3+l*z3))+sin(6.28*(h*x4+k*y4+l*z4));
FF = Fa*Fa + Fb*Fb
printf("( %2d %2d %2d ) d = %.4lf 2theta = %.41fnm F_square = %.41f\n", h, k, l, d, theta, FF);
}}}}}}
>>347 > 三問目
20bitまでの対応だけど
/* calc GreatestCommonDivisor and get Iteration count */
#include <stdio.h>
int gcd(int a, int b, int n){
return (a>b)?b?gcd(b,a%b,++n):a|n<<20:gcd(b,a,n);
}
int main(){
int a, b, n, tmp;
puts("a wo irete:"); scanf("%d", &a);
puts("b wo irete:"); scanf("%d", &b);
tmp=gcd(a,b,0);
printf("saidai kouyakusu ha %d\n%d kai no loop\n",tmp&1048575,tmp
>>20);
return 0;
}
>>367 とりあえず突っ込みどころ、
sqrtの引数、(double)でキャストしてあげましょう。
if(F>0.001)、Fの値が未定義です。全て偽になってprintf文が一回も呼び出されません。
printf文内、%.41fは小数点以下41桁出します。nmは謎です。指数を使いたいなら、eを使いましょう。
とりあえず5時間何を考えてたのか知りませんが、適当なところでprintf文埋め込んでデバッグしていくのがいいかと思われます。
また、うまくいかないのは何なのか、しっかり答えましょう(コンパイルがうまくいかない、実行中エラーが出る、値が違う、など)
がんばってくださいね。
悪い、nmはナノメートルの事ね。fとくっついてたからわからんかった。スマソ
#define PI 3.141592654
int main()
{
int h, k, l, cnt=0; /*追加*/
float x1=0.0, x2=0.0, x3=0.5, x4=0.5, y1=0.0, y2=0.5, y3=0.5, y4=0.0, z1=0.0, z2=0.5, z3=0.0, z4=0.5;
double a, d, lambda, theta, F, FF, Fa, Fb;
a = 0.3615;
lambda = 0.154056;
for( h = -4; h<=4; h++){
for( k = -4; k<=4; k++){
for( l = -4; l<=4; l++){
if ( !(h==0 && k==0 && l==0) ){
d = a / sqrt((double)(h*h+k*k+l*l));/*変更*/
if(lambda/(2*d)>1){continue;} /*追加*/
theta = 2*asin(lambda/(2*d));
Fa = 1+cos(6.28*(h*x2+k*y2+l*z2))+cos(6.28*(h*x3+k*y3+l*z3))+cos(6.28*(h*x4+k*y4+l*z4));
Fb = sin(6.28*(h*x1+k*y1+l*z1))+sin(6.28*(h*x2+k*y2+l*z2))+sin(6.28*(h*x3+k*y3+l*z3))+sin(6.28*(h*x4+k*y4+l*z4));
FF = Fa*Fa + Fb*Fb;
if ( FF > 0.001){
cnt++;/*追加*/
printf("( %2d %2d %2d ) d = %.4lf nm 2theta = %6.2f F_square = %4.2e\n",h,k,l,d,(180*theta)/PI,FF);/*変更*/
}}}}}
printf("count=%d",cnt);/*追加*/
}
できた。
確認のためにcntでカウント回したが、いらなかったら削除してくれ。あとはソートするだけ。
373 :
デフォルトの名無しさん:04/11/06 17:13:29
すみません、教えていただきたいのですが、
「100行100列のフィールドを全体領域として、そのフィールド内で5行5列の
窓枠を用意する。その窓枠内の各行列全ての値の総和が、別のフィールド(
任意の行列で構成)の任意のマスの値として代入できるようなプログラム」
という課題が出たのですが、お手上げです。どなたか考えていただけない
でしょうか。。VisualC++です。これを機会に勉強したいと思っております。
フィールドの構造も指定されてないのか?
375 :
373:04/11/06 18:03:36
>>374 指定されていませんが、おそらくある程度大きなフィールドを用意しなければ
いけないと思います。30×30の行列くらいで考えていただけないでしょうか。
もし不都合ならば、多少いじっても大丈夫だと思います。
素直に二次元配列でやればいいんじゃないの?
クラスでやるのも面白いだろうけど、373はそこまでやる気あるとは
思えないし。
377 :
367:04/11/06 18:37:04
>>370 明らかに勉強不足でした。それと説明不足で申し訳ありませんでした。
5時間一体何をやっていたのでしょうか?^^;。やはり基本的なところ
に穴があるようなので、もっとCの事を勉強しなくてはと思いました。
本当にどうもありがとうございました。
378 :
デフォルトの名無しさん:04/11/06 19:04:13
質問です。
iとj,nを指定してある中で下記のようなプログラムを作りました。
do{
t = rand()%n+1;
}while(t==i&&t==j);
i,j≠tであるtが欲しいのですが、実行してもi=tやj=tのときが
あります。do whileの継続条件にこのような書き方は認められない
のでしょうか?だとしたらどのようにかけばよいのでしょうか?
do{
t = rand()%n+1;
}while(t==i||t==j);
か?
380 :
378:04/11/06 19:10:12
>>379 ありがとうございます!実行したところできました!
そうですよね、かつではなくまたは、じゃないと
明らかにダメでした…助かりました☆
i = 3 j = 10
とかのとき
t = i と t = j
が同時になりたつことなんてないだろw
382 :
373:04/11/06 19:19:25
>>376 二次元配列・・・。そんな言葉が授業中出てきたような気がします。。
自分で考えるべきなのは承知してますが、助けてもらえないでしょうか・・・
>>382 二次元配列だったらググった方が絶対に早いぞ
384 :
デフォルトの名無しさん:04/11/06 19:27:50
test
int matrix[100][100];
っていうのはわかるの?
わからないと相当説明がしんどい。
まとりっくすひゃくばんひゃくばん
387 :
373:04/11/06 19:45:35
>>385 はい、左の[]が行で右の[]が列を表すんだと思います。
for文を使ってループだの、和をsumに足しこむなどするんだと
思うんですが、それをプログラムの記述にしたときのルールと
いうか、順番というか、表現方法がいまいち分かりません。。
言語はCです。どなたかお願いします。
空白で区切られた2つの正の整数を標準入力から読み込んで、そのまま標準出力へ書き出すプログラムを作成しなさい。
ただし以下の条件を満たすこと。
1、scanfは使わない。
2、行の先頭にある連続した空白は無視する。
3、2つの整数は複数の空白で区切られてもよい。
4、最初の2つの整数以降の文字は無視する。
5、数字以外の文字が含まれている場合(4f ,343kd 等)は0とする。
sscanf()って落ち?w
getcをループでまわして文字列入力
そのあと、strtolを二回呼び
最後にprintf
で、strtol の前にstrtok?
訂正
最初の while を 無限ループではなく。
while( *word_start )
としてくれ。
こうしないと、1ワード + スペースだけしか入力されなかったとき、無駄な0が出力される。
>>392 ちゃんとみてないが、2つの整数の間の空白に関して
> そのまま標準出力へ書き出す
が満たされていない気がする。
ということでやってみた。
#include <stdio.h>
int buf[256], sp;
void push(int c) { if(sp < 256) buf[sp++] = c; }
void output(void) { int i; for(i = 0; i < sp; i++) putchar(buf[i]); sp = 0; }
void popall(void) { sp = 0; }
int main(int argc, char argv) {
int c, state = 0, num_output = 0;
c = getchar();
while(c != EOF && c != '\n') {
switch(state) {
case 0:
if(isspace(c)) { c = getchar(); continue; }
else if(isdigit(c)) { state = 1; }
else { state = -1; }
break;
case 1:
while(isdigit(c)) { push(c); c = getchar(); }
if(isspace(c)) { output(); }
else { putchar('0'); popall(); while(!isspace(c)) c = getchar(); }
if(++num_output == 2) return 0;
state = 2;
break;
case 2:
while(isspace(c)) { putchar(c); c = getchar(); }
state = 0;
break;
default:
printf("bad input\n");
return -1;
}
}
}
>>388 エラーは考慮してない。
#include <stdio.h>
#include <ctype.h>
int a[2], i, flag;
int space(void) {
char c = getc(stdin);
if (isspace(c)) return 1;
else {ungetc(c, stdin); return 0;}
}
int graph(void) {
char c = getc(stdin);
if (isgraph(c)) {
if (isdigit(c) && flag) (a[i] *= 10) += c - '0';
else a[i] = flag = 0;
return 1;
}
else {ungetc(c, stdin); return 0;}
}
void doc(void) {
while (space()) ;
i = 0; flag = 1; a[i] = 0; while (graph()) ;
while (space()) ;
i = 1; flag = 1; a[i] = 0; while (graph()) ;
}
int main(void) {
doc();
printf("%d %d", a[0], a[1]);
return 0;
}
397 :
デフォルトの名無しさん:04/11/06 22:07:47
言語はC++です。どなたかお願いします。
適当に名前を入力すると、名前のアルファベット順にソートして出力する。
入力件数は最大5件とする。
名前はローマ字表記とし、半角大文字で入力する。
名前入力の時に改行のみを入力するか、5件入力されたら、入力を打ち切る。
ソートのアルゴリズムは単純選択法を用いること。
398 :
デフォルトの名無しさん:04/11/06 22:47:09
double a[}={3.4 , 5.8 , 0.6 , 2.4 , 1.8 , -1}の配列の要素をバブルソートで昇順に並べるプログラム(C++)
"-1"は番兵である。 これ私に教えてください〜!!
>>398 複数のスレで聞く行為はマルチと呼ばれ、一番最低の行為です。
>>397 #include <iostream>
#include <string>
void selection_sort(std::string* first, std::string* last){
for (int n = last - first, i = 0; i < n - 1; i++) {
int k = i;
for (int j = i + 1; j < n; j++) if (*(first + j) < *(first + k)) k = j;
std::string temp = *(first + i); *(first + i) = *(first + k); *(first + k) = temp;
}
}
int main(){
std::string name[5];
int i = 0;
for (; i < sizeof(name) / sizeof(name[0]); ++i) {
std::cout << "name?:";
if (!std::getline(std::cin, name[i]) || name[i] == "") break;
}
selection_sort(name, name + i);
for (int j = 0; j < i; ++j) std::cout << "name[" << j << "]:" << name[j] << std::endl;
}
402 :
デフォルトの名無しさん:04/11/06 23:35:59
ごめんなさい、よくそういうの知らなかったもので>w<
404 :
デフォルトの名無しさん:04/11/06 23:50:11
399に対してです。たびたびすみません。
あなたは404ふぉーびっつんです
406 :
デフォルトの名無しさん:04/11/07 00:14:24
何か398可哀想だから教えてあげるかな。
何を知らないって、常識を知らないんだな。
あと客観的思考が足りないとか。
409 :
デフォルトの名無しさん:04/11/07 00:43:29
ほんとにごめんなさい。でも私、その398のやつ知りたかったから〜>w<できればもう常識はずれなことをしないから教えて欲しい・・・。
>>409 とりあえずその相手をおちょくってるような顔文字やめろ
>>409 自分で調べたところまでを書くとかなんとか…
せめて予想でも.
いきなり,もってきてわかりませんじゃ,答えてくれないよ
414 :
デフォルトの名無しさん:04/11/07 01:37:02
何か厳しいというか、私が何にもわかってなかったから、ほんとみなさんすみませんでした。
頼むからここでは非常識な厨にも優しくしてやってくれ
他のスレに来られると困るんだよ。
416 :
モウモウ:04/11/07 01:42:05
>>414 その宿題かたずけないと、先生に怒られるの?
せっぱつまっているんなら教えてあげてもいい。
417 :
デフォルトの名無しさん:04/11/07 01:49:48
できれば教えて欲しいです。実は焦ってるんで、お願いします。
>>417 わかった。30分ぐらいまってて。
プログラム書くから。
420 :
373:04/11/07 02:10:17
>>398 >
>>417 これでいいだろう。たぶん。
#include <stdlib.h>
#include <stdio.h>
/**
* data に数値データを渡すと、バブルソートで昇順にソートする。
* data 内の -1 は番兵になる。
* data には番兵を除いて少なくとも 1 つの数値があること。
*/
void bubble_sort(double* data)
{
int i, j;
for (i = 0; data[i] != -1; i++) {
for (j = i + 1; data[j] != -1; j++) {
if (data[i] > data[j]) {
// データを入れ替える
double temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
/**
* 数値データを表示する。
*/
void print_data(double* data)
{
int i;
printf("data =");
for (i = 0; data[i] != -1; i++) {
printf(" %g", data[i]);
}
printf("\n");
}
int main(void)
{
double a[] = {3.4 , 5.8 , 0.6 , 2.4 , 1.8 , -1};
print_data(a);
bubble_sort(a);
print_data(a);
return 0;
}
>>420 その宿題かたずけないと、先生に怒られるの?
せっぱつまっているんなら教えてあげてもいい。
424 :
デフォルトの名無しさん:04/11/07 02:22:39
モウモウさん、できれば421のやつをC++でやってもらいたいのですが。でもたぶん同じ感じですよね!?
>>424 上のやつは C に近いけど、C ではコンパイルとおらないよ。
C++ でって、どういうこと?STL とか使えってこと?
要件定義をしっかり教えてくれ。
STL使ったら、バブルソートなんか作るのアホだよな
ごめん、C でもたぶんとおるよ (C++ でもとおる)。
printf じゃなくて cout を使ってほしいってこと?
>>424 やってもらって礼もいわずに書き直せだから常識がないと言われるんですよ.
429 :
373:04/11/07 02:29:13
>>モウモウさん
月曜日までに作るように言われてるんですが、知り合いのいない授業
でして・・・。できないと怒られるというより、単位がでないかもしれ
なくてかなり困ってる次第です。どうか教えてください。
>>373 やろうと思ったけど問題の意味が分からない。
100行100列のフィールドと、別のフィールドを造るってこと?
>>430 やってくれるんなら 430 さんに任せるけど、それでいいですか?
432 :
373:04/11/07 02:31:45
いいけど、問題の意味がいまいち理解できてない。
他にもstd::vector<std::vector<hoge> >とかstd::valarray<hoge>を
使っていいかとか。それによってはコード量も違う。
>>434 老婆心ですまないが、初心者にそれは使わないほうがいいんでは?
C だけで済ませておいたほうが、彼のためにもなるし。。。
野暮なことで申し訳ないが
彼のため、というのならそもそも答えてあげるのが間違いだ罠
全体フィールドのある領域の合計を、別のフィールドの特定の場所に代入すればいいのかな?
438 :
373:04/11/07 02:45:21
最初の100行100列の各行列に数値(任意)を入れます。次に5行5列の窓枠を
用意して、1行1列のマスに入ってる数値、1行2列のマスに入っている数値、
1行3列のマスに入っている数値、1行4列のマスに入ってる数値、1行5列のマスに入ってる数値、
2行1列に入っている数値、2行2列のマスに入ってる数値、・・・、5行5列に入っている数値
までの総和を、別の50行×50列のフィールドの1行1列目のマスの値となるように
代入、1行2列のマスに入っている数値〜1行6列のマスに入っている数値、2行2列・・・5行6列
のマスに入っている数値までの総和が別の50行×50列のフィールドの1行2列目のマスの値と
なるように代入、以下同様に5行5列の窓枠をシフトしていってそれぞれの総和が順次代入
されていくようなプログラムです。説明が足らずすみませんでした。
439 :
373:04/11/07 02:50:33
50*50だと足りないですね・・・。100*100の行列をもう一つ用意
に訂正です。。すみません。
C++ でいいんだっけ?
441 :
373:04/11/07 02:56:21
>>441 ほんとにいいのか?
第3者から見ても、
おそらく
>>373の考えてるレベルと
>>440が書こうとしてる内容は
結構ギャップがあると思うぞ
見栄張らず、Cで書いてもらったほうが勉強という意味でも適正レベルだと思うぞ
443 :
373:04/11/07 03:03:53
>>442 VisualC++だったと思うんですが、それってC++ということではないの
でしょうか?
444 :
デフォルトの名無しさん:04/11/07 03:04:20
ほんとありがとうございます。そしてすぐにお礼もいわずにすみません。COUTを使ったらどうなりますか!?
まぁ、C++といっても、Cに毛の生えたような感じで作ります。
malloc 使いたくないだけなんでw
VisualC++というのはソフトウェアを指す
C++というのはC言語の拡張版、といったところ
C言語と記述方法は互換性あるけど、別物と考えてもいいぐらい
なので、C言語もろくすっぽに理解してない場合はC++なんて到底理解できない
>>444 printf(" %g", data[i]) のところを cout << " " << data[i]
printf("\n") のところを cout << "\n" もしくは cout << endl にするだけ。
ちなみに私はもう寝るからな。
449 :
373:04/11/07 03:13:59
>>430 本当に助かります。よろしくお願いします。
>>447 授業がC++だと思うので提出もC++だと思います。
作っていただくプログラムを頑張って理解したいと思います。
もし、わからないところが出てきたら質問するのでそのときは
よろしくお願いします。
451 :
373:04/11/07 03:20:25
>>450 はい。。430さんをはじめ、すみませんでした。
>>373 多分勘違いのままだろうから説明加えとく
おそらく授業というのは
「VisualC++という名前のソフトウェアを使ったC言語」の授業だろう
この「VisualC++」が「メモ帳」であってもC言語やC++言語は勉強できる
ソフトの名前にC++が付いていても
C++言語を授業として扱わない限りC++を習っていることにはならない
そもそもC++が理解できるレベルならこういう宿題もぱっぱと済ませられる(はず)
っていうかそもそもそんな宿題出さないね
この勘違いのままスレ違いな発言して追い出されてマルチということはするなよ
>>439 ちょっと待て。100*100の行列を別に用意したとして、
辺や隅はどうするんだ。
教えてもらったプログラム間違ってるんですけど・・・
全部0になっちゃう
#include <stdio.h>←これ使いたい
int main()
{
double a = 1., b = 1.;
int n = 1;
while (a <= 30.) {
printf("a(%d) = %lf, b(%d) = %lf\n", n, a, n, b);
b *= 1.1;
a += b;
n++;
}
}
>455
普通に>283でいいんじゃない?
それとnの初期値は0にしてね
C++の問題をCで解いたってなんの問題もないだろ
coutやclassを使えというなら、そのことを書くべき
CとC++が全然別の言語とでも思い込んでるんだろ
458 :
デフォルトの名無しさん:04/11/07 09:30:47
〔問題〕
文字列strを空文字列にする関数
void null_string(char str[])
を作成し作成した関数を実行する
プログラムを作成せよ
そんな餌に(ry
void null_string(char str[]){
str[0] = '\0';
}
int main(void){
char str[] = "クマー";
null_string(str);
return 0;
}
>>455 printf()の"%lf"は(基本的に)間違い。
また、"%f"よりも"%g"をお奨め。
((String)null).length();
COUT
BASICに時代を戻さないでください
何でも大文字にしたがるMFCにはカスタマイズされたCOUTがあるに違いない。
469 :
373:04/11/07 14:47:00
すいませんこれがわからなくて困ってますぅ
言語仕様外ですがおねがいしまーす
//以下のプログラムに何らかの入力を与え
//結果として以下のプログラム内で/bin/shを実行せよ
//環境はi386 && (linux||*bsd)とする
namespace vuln {
void off_by_one(const char *input)
{
char buffer[16];
for (int i = 0; i <= sizeof(buffer) && input[i] != '\0'; ++i)
buffer[i] = input[i];
}
}
int main(int argc, char **argv)
{
if (argc == 2)
vuln::off_by_one(argv[1]);
return 0;
}
>>470 それで問題文は全部?
なんか意味がわからね。
off_by_one()をリターンする前に
system( buffer );
を呼べばイイとか、そういう事?
コードの書き換え書き足し削除は一切無しで。
バッファオーバーランでも狙うのか?
i <= sizeof(buffer)
ここを突けってことか?
patchあてるならそこですねー。
言葉遣い悪すぎ
57 名前:マイク ◆yrBrqfF1Ew [] 投稿日:04/10/25 08:37:20
俺はできるがgoodを表示させられる奴いるか?
//bcc32 5.5.1 on win2k
#include <iostream>
#include <iomanip>
int main()
{
volatile int n = 0;
char buffer[128];
cin.get(buffer, 132, '\0');
std::cout<<(n == 4276545 ? "good" : "bad")<<std::endl;
return 0;
}
58 名前:マイク ◆yrBrqfF1Ew [sage] 投稿日:04/10/27 18:45:03
やはり誰もいないな(▽
で、できるんですか?
やはり誰も出来ないな(▽
まあなんかしらんが
>>477 はできた。
てか'\0'ってのが不可解だ。
ヒントは4276545が何を表すかを考えることだなあ。
あとは128に132分読み込んでるって事か。それでbufferがあふれるわけだな。
これで十分だろ。答えになっちまうよ。
なんか知らんが、どうしてチート関連になると答えないんだろうね。
ここはチートスレじゃないんだぞ?
はいはい"AA...A"(Aを132個)入力すればいいんでしょ。それでは
宿題をドゾー
Windowsについてる電卓使うとわかりやすくなるよね。
チートスれじゃないから、チート関連には答えないんじゃねーの?
やはり誰も出来ないな(▽
どうも、常識人さんがいないと
スレが荒れる傾向にあるな。
それは大変だな。
そんな怪しいリンク誰も踏まないだろ。
>>492 ん?このリンク先知らない?
英辞郎だよ
全く知らん。
こんな古典は答える価値もないのに、図に乗りやがって
土下座して出て行け
・処理系依存方法しかない
・1バイトオーバーライトで、(恐らく)pushされてるebpを書き換える
・関数エピローグでスタックをbufferに向けてeipを変更する
>>494 だったら今知ればいい。
英語に通じている人でも、ときどきこの英単語を日本語ではどう訳せばよいのか、
と思うことがあるよね。
特に専門用語では訳が難しい。
エルミート作用素、演算子、どっちがいいの?とか。
英辞郎はわりと専門用語も載っているWEB上の英和辞典だから便利だよ
四則計算
キーボードから実数を2つ入力し、実数の加算、減算、乗算、除算と
整数の加算、減算、乗算、除算、剰余算を表示するプログラムを作りなさい。
なお、整数の値は(入力せずに)実数値を整数値に変換して用いなさい。
[実行例]
a b = 64.2 22.8 <--- ここで2つの実数値を入力
a=64.19997, b=22.799999
a + b = 86.999996
a - b = 41.399998
a * b = 1463.759881
a / b = 2.815789
ia=64, ib=22 <--- この場所で入力した実数値を整数値に変換した値を表示しておく
ia + ib = 86
ia - ib = 42
ia * ib = 1408
ia / ib = 2
ia % ib = 20
お願いします。
>>498 真摯さが足りん。
君は人の言葉に対して敬意がない。
君は情報をあたえてもらったのだから、そのことに対して「よかったな。」の一言か?
それはあまりに無礼だ。
常識人に常識を教えてもらったらどうだ?
>>499 #include <stdio.h>
int main(void) {
double a, b;
int ia, ib;
printf("a b = ");
scanf("%lf %lf", &a, &b);
printf("a=%lf, b=%lf\na + b = %lf\na - b = %lf\na * b = %lf\na / b = %lf\n", a, b, a + b, a - b, a * b, a / b);
ia = a; ib = b;
printf("ia=%d, ib=%d\nia + ib = %d\nia - ib = %d\nia * ib = %d\nia / ib = %d\nia %% ib = %d\n", ia, ib, ia + ib, ia - ib, ia * ib, ia / ib, ia % ib);
return 0;
}
>>499 言語は?
> a b = 64.2 22.8
ここから
> a=64.19997, b=22.799999
何でこうなるの?
> この場所で入力した実数値を整数値に変換した値を表示しておく
切り上げ?切り捨て?四捨五入?
>>502 低レベルの人は書き込みをご遠慮ください。
JIS丸めもあるね
505 :
デフォルトの名無しさん:04/11/08 01:06:22
問題は文字型のポインタに数字を5個入れprintfで出力せよというものです。
そこで↓な感じで作りましたがうまくいきません。初心者なのですが、分かりやすい解説お願いします。
下記のとおりな感じでお願いします。
#include <sdio.h>
int mani()
{
char *a;
int i;
scanf("%s",a);
for(i=0;i<5;i++){
printf("c",*a);
a++;}
return 0;
}
506 :
デフォルトの名無しさん:04/11/08 01:07:21
誤<sdio.h>→<stdio.h>
>>505 まず、「文字型のポインタ」と言う表現をそのままとると、char*ということになる。
君の書いているchar *a;と言うのは、ポインタ型変数の宣言だ。しかし、ポインタとは
あくまである領域を指す値(メモリのアドレス)を入れる場所であって、数字などを入れる
場所ではない。ということは、ポインタだけ作ってやってもそれが指す領域を実際に
作ってやらないと、代入も何もないわけだ。
…とここまで書いてみて、突っ込みどころ満載過ぎてもう何を書いていいのやら。
とりあえずsdio→stdio、mani→main、char *a;→char a[6];、scanf("%s", a);→scanf("%5s", a);、
printf("c", *a);→printf("%c", *(a+i));、a++;→(削除)とすれば動かないではないけれども、
ポインタを使っているとは言いがたい。もうめんどくさいから寝る。
>>505 ポインタ変数に数字を5個入れるのは無理だが・・・
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *a;
a = (char *)malloc(sizeof(char)*(5+1)); // とりあえず (5文字+終端文字) 分のメモリを確保
scanf("%5s",a); // 入力ストリームから5文字以内で入力
printf("%s\n",a); // あとは表示するだけ
free(a); // 確保したメモリを解放
return 0;
}
もしや、配列を使ったほうがいいのだろうか・・・
ちゅーか
>>505の内容だけでは
問題に沿った解答解説ができない
#include <studio.h>
int main(void)
{
char *s = "12345";
printf("%s\n", s);
return 0;
}
#include <stdio.h>
int main()
{
char a[5+1]; // (5文字+終端文字) を格納する配列
char *p; // 題意に沿うようにポインタ変数を用意
p = &a[0]; // 配列の先頭アドレスをポインタ変数に代入
scanf("%5s",p); // 5文字以内で入力
for(i=0;i<5&&p[i]!='\0';i++){
printf("%c",p[i]); // 終端文字のところまで1文字づつ表示する
}
return 0;
}
これなら、ポインタを使ってると言える・・・よね?
文字型のポインタに数字を入れることはできません。
>>510 また斬新な回答を・・・
#include <studio.h>
になってるからネタか?
もしや、
>>510が正解か?
#include <studio.h>は別として
>>513 全然斬新じゃない。
C言語のプログラミング入門的講義では、まず間違いなく一人はstudio.hと書く。
>>515 と、言うことはみな「スタジオ」と読んでるのか?
君を含めて( ̄ー ̄)ニヤリッ。
先生に
スタジオどっとえいち
と習いました
うるせーよ (゚Д゚) バーヤ バーヤ
ノД`、)
C言語課題
・「ID」「名前」「年齢」を要素にもつ構造体INFOを作成しなさい。
ただし、名前は動的メモリにて確保するものとする。
・scanf関数から「名前」と「年齢」を入力し、
動的メモリを用いて、どんどん何人分でも追加できていけるソースコードを記述しなさい。
この2つで1つのソースコードです。
よろしくお願いしますー
>>どんどん何人分でも
不可能
IDは自動採番やろか。
template <class T> static T abs(T a) { return a > 0 ? a : -a; }
のtemplate <class T> static T abs(T a)って何を意味しているんですか?
任意の型であるTという型のaというパラメータを採るabsという名前のTという型の値を返す静的なテンプレート関数。
IDは連番数字です
>>516 どう呼んでいようが聞いていない学生はいるものだ。
>>519 少し長いので2回に分ける
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct INFO { int id;char* name;int age; };
static int Use = 0;
static int Max = 0;
static INFO* info = NULL;
static int add( char* name, int age )
{
INFO* tmp;
if( Use >= Max ) {
Max += 32;
tmp = (INFO*)malloc( sizeof( INFO ) * Max );
if( ! tmp )return 0;
if( info ) {
memcpy( (void*)tmp, (void*)info, sizeof( INFO ) * Use );
free( (void*)info );
}
info = tmp;
}
info[Use].id = Use;
info[Use].name = (char*)malloc( strlen( name ) + 1 );
if( ! info[Use].name )return 0;
strcpy( info[Use].name, name );
info[Use].age = age;
Use++;
return 1;
}
続き
int main( void )
{
charname[128];
intage, i;
while( 1 ) {
scanf( "%s %d", name, &age );
if( ! strcmp( name, "end" ) )break;
if( ! add( name, age ) ) {
printf( "cannot alloc any more!\n" );
return 1;
}
}
for( i = 0; i < Use; i++ )
printf( "%d: %s (%d)\n", info[i].id, info[i].name, info[i].age );
return 0;
}
なんかつながってしまったとこがあるな。
charname -> char name
intage -> int age
名前を end にすると終了して入力されたのを表示する。(それぐらい判るか)
529 :
デフォルトの名無しさん:04/11/08 16:10:58
C言語で、x円借金して年利yで毎月z円返済して、
返却を完了する月とその月の返却額を計算するプログラムを教えてください。
530 :
デフォルトの名無しさん:04/11/08 16:21:10
収入が無く返済できず自己破産で糸冬 了..._〆(゚▽゚*)
532 :
デフォルトの名無しさん:04/11/08 16:33:28
お願いしますよ〜
じゃあまず算数でそれを表現してみては?
いくらなんでもそれぐらいはできるだろ?
#include <stdio.h>
void main()
{
int x,y,z;
int nokori;
int tuki;
int i;
int hensai;
tuki = 1;
printf("借金の金額:\n");
scanf("%d",&x);
printf("年利:\n");
scanf("%d",&y);
printf("月の返済額:\n");
scanf("%d",&z);
nokori = x;
while(nokori>0)
{
for(i=0; i<12; i++,tuki++){
nokori -= z;
if(nokori <= 0)
{ break;}
}
nokori=nokori+x*y/100;
if(nokori >= x || tuki > 1000) {printf("欝だ氏のう"); return;}
}
hensai = nokori+z;
printf("月:%d 返済額:%d\n",tuki,hensai);
return;
}
直しておこう
while(nokori>0)
{
for(i=0; i<12; i++,tuki++){
nokori -= z;
if(nokori <= 0)
{ goto yatta;}
}
nokori=nokori+x*y/100;
if(nokori >= x || tuki > 1000) {printf("欝だ氏のう"); return;}
}
yatta:
たまにはgotoを
void main
537 :
デフォルトの名無しさん:04/11/08 17:03:08
おいらの人生終了..._〆(゚▽゚*)
gotoを出すならgotoの問題もちゃんと教えとけ
goto推奨みたいに受け止められたらかなわん
539 :
デフォルトの名無しさん:04/11/08 17:27:48
>>534 ありがとうございます。参考になりました。
gotoはソース見づらくなるから、あまり使わないほうがいいらしいです
あとwhileの中とか直しといて
多重ループやswitchから抜け出すための goto なら禿も推奨している
リストの結果を逆順に表示するように表示関数を書き直す
って問題なんですが、教えて頂けますでしょうか?
void print(List *p) {
int i;
printf("(");
for(i=0; i<size(p); i++) {
printf("%d",get(p,i));
if (i < size(p)-1) printf(",");
}
printf(")\n");
}
543 :
デフォルトの名無しさん:04/11/08 18:00:22
void print(List *p) {
int i;
printf("(");
for(i=size(p)-1;i >=0 i--) {
printf("%d",get(p,i));
if (i !=0) printf(",");
}
printf(")\n");
}
>>543 Bjarne Stroustrap(C++の作者)のこと
すみません、また質問なのですが、
/* index番目にvalueを挿入する */
void insert(List *p, int index, Item value) {
int i;
if (index < 0) return;
while (index >= size(p)) add(p,nil);
for (i = size(p)-1; i > index; i--)
set(p, i, get(p, i-1));
set(p, index, value);
}
とあるのですが、例えば
s(セット)で
1
5
(0,5)
とした場合、i(インサート)で
1
4
と入力すると、
(0,4)
となってしまうのですが、
(0,4,5)
と表示させるためにはどうしたらいいんでしょうか?
よければおしえてください…。
( @盆@)
>>551 それだけでは、情報不足でなんともいえない。
考えられることは。
(1) インサート処理がうまくされていない。(setのバグ)。
4のうしろのちゃんと5がリンクされているかどうか確認汁。
(2) 表示ルーチンのバグ。
ちゃんと0-4-5 とリストは出来ているが、全部表示できていない。
どっちかだろうな。
sとかiとかって一体何だ。エスパーじゃないんだから何を指しているのか、
全ソースを示すなりしなければ何も相手に通じないぞ。
void insert(List *p, int index, Item value) {
int i;
if (index < 0) return;
add(p,nil);
for (i = size(p)-1; i > index; i--)
set(p, i, get(p, i-1));
set(p, index, value);
}
でどうよ?
>>555 なんでそう思ったのか、興味あるな。
関係なさげだが・・。
>>553 試したんですけど、やっぱり見えていない部分の数字は消えていました・・。
>>555 すごいっす!できました。
ありがとうございます!
>>554 すみません・・。
それでいいのか・・。何でだ?
既に
>>551は見てないだろうけど
>>556のために。
indexの場所によらずサイズが増えるので while(index>=size(p)) は不要。
ただし消したせいでindex > size(p)+1 の場合バグになると言う罠…ということに気付いたのは今。
と言うことでリトライ。
void insert(List *p, int index, Item value) {
int i;
if (index < 0) return;
add(p,nil);
while (index >= size(p)) add(p,nil);
for (i = size(p)-1; i > index; i--)
set(p, i, get(p, i-1));
set(p, index, value);
}
…元のと混合しただけ。
注釈つけ忘れ
add(p,nil); // 最低1つ追加
while (index >= size(p)) add(p,nil); // 足りなければその分追加
>>559,560
みてますよ〜。馬鹿ですが、自分でも頑張ってみます^^
ありがとうございます。
リストのなかに未使用ノードある場合、addしなくてもいいように思えたんだけど、
必ずaddしないとならないのか・・・。
setのつくりが分からんから、確かなことは分からないけど。
すみません、setのつくりも載せておきます。
/* index番目の要素をvalueとする */
void set(List *p, int index, Item value) {
if (index < 0) return;
if (index >= p->N) {
insert(p, index, value);
return;
}
p->data[index] = value;
}
565 :
マイク ◆yrBrqfF1Ew :04/11/09 05:12:55
566 :
デフォルトの名無しさん:04/11/09 05:56:38
1,タナカ,キムラ,スズキ
2,ササキ,タムラ,アオキ
3,シムラ,カトウ,タカギ
(↓つづく)
:
:
半角数字につづき名前が並んだ、
カンマで区切られたN行4列のname.txtがあるとして、
このファイルを読み込み文字配列char yasai[128][4]に入れなさい。
ファイルのテキストの行数は128未満であるとする。
C言語です。お願いします。
↑問題が変。
char* yasai[128][4]; に入れるなら可能だが...
すいません、それでお願いします。
↑1度に書けないので分割
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void) {
char*ya[128][4];
FILE*fp;
inti,j;
charbuf[1024];
char*ptr;
for( i = 0; i < 128; i++ )
for( j = 0; j < 4; j++ )
ya[i][j] = NULL;
fp = fopen( "name.txt","rt" );
i = 0;
while( i < 128 && fgets( buf, 1023, fp ) ) {
j = 0;
ptr = strtok( buf, ",\n" );
while( j < 4 && ptr ) {
ya[i][j] = (char*)malloc( strlen( ptr ) + 1 );
strcpy( ya[i][j], ptr );
j++;
ptr = strtok( NULL, ",\n" );
}
i++;
}
fclose( fp );
i = 0;
while( ya[i][0] && i < 128 ) {
j = 0;
while( ya[i][j] && j < 4 ) {
printf( "%s\t", ya[i][j] );
j++;
}
printf( "\n" );
i++;
}
return 0;
}
一部くっついた
inti -> int i,
charbuf ->char buf
572 :
デフォルトの名無しさん:04/11/09 10:55:36
Cです。お願いします。
直線P1(1,4),P2(3,0)の二点を入力し、この直線に直行する
直線を求めよ。
1点目のX座標= =>1
1点目のY座標= =>4
2点目のX座標= =>3
2点目のY座標= =>0
直線の式は Y=0.50X + 1.00です。
二点に直行する直線って何だ?
二点を結ぶ直線なら一意に決まるが、それに直交する直線なら無数にあるわけだが。
>>569 あんた、変数の定義のときにタブを入れる癖があるだろ。
だせぇからやめようぜ。
>>575 おまえさんのソース提供だけは断るYO
>>578 メリット:
タブ幅のスペースを\t(タブ)に変更したらサイズが小さくなる
>>580 デメリット:
?
俺も変数宣言にタブ文字使うんだけど、
ナウでヤングな若者の感覚じゃダサイのか。
位置を揃えるなんて考えがださいっつーの。
int, doubleくらいならいいが、const char * も揃えるのか?
くだらねぇ。
あ、インデントにタブを使うなら賛成。つーか、スペースを4つも入れるな。
タブ幅が違うと悲しい結果にはなる気もする。
それにタブって機種依存しなかったっけ?記憶が薄いが。
>>581 ファイルサイズなんて・・・
まあプロポーショナルフォントを常用する人にはメリットがでかい気もする。
そんな俺はインデントにタブ使う。orz
インデントは位置揃えに入らないのかと問い詰めたい。
586 :
デフォルトの名無しさん:04/11/09 12:23:11
FORTRAN70です。お願いします。
ある数xとyのそれぞれの約数とxとyの最大公約数、そして最小公倍数を計算しなさい。
ただし、関数副プログラムまたはサブルーチン副プログラムのどちらかを用いること。
>>586 ほほぅ。C/C++言語のスレでFORTRANか。狂ってるな。
インデントはスペース
プログラマなら常識
>>575 ここで晒すソースにタブ使わないほうが良いのは確かだな。
>>583 const char* どころか CLongLongNameClass とかが有っても揃えてるな。
見た目で変数名定義が揃ってると気持ち良いので...そろそろ止めようかとも思うけど。
スレ違いの話題だが、目立系でタブ使用禁止のサイトあったな。
vi のタブ幅を変更できる奴が居なかったてのが理由なんだが...
スペースにするとカーソルを移動させる際のキーを押す回数が増えるのがめんどくさい
そんなエディタを使う(orそんな使い方しかできない)香具師が蛸
593 :
デフォルトの名無しさん:04/11/09 13:43:40
>>587 細かいこと言うなよ。C/C++もFORTRAN70もたいして変わらないだろ。
>>593 ケチな事言うなよ。お前がスパっと答えればいいだろ。
595 :
デフォルトの名無しさん:04/11/09 13:46:06
FORTRANの問題を板間違えてカキコしてしまいました。すみませんでした
タブに文句つけてるのは、タブ←→スペースを手で書き換えてる初心者だろ。
整形したきゃ自分でやれ
そんなの人にやらせることか
>>596 自分が初心者のときそうだったからと言って、他人まで同じだと思わないほうがいいよ。
とりあえずHomeとEndキーをFnつきにするのは止めて
>>最近のキーボード
で、結局複数のスペースをカーソルキー(それに順ずるもの)一つで
一度にそのスペース群を飛ばせるエディタなんてあるの?
そもそもそんな挙動してたらタブと変わらんと思うが
>>598 ノートで十字キーのそばにあるならOK
600 :
デフォルトの名無しさん:04/11/09 16:12:48
C言語で、N次元連立一次方程式の解を求めるプログラムを教えてください。
例えばNが3だとしたら、
A1x+A2y+A3z=B1
A4x+A5y+A6z=B2
A7x+A8y+A9z=B3
このAとBの値を入力してx,y,zを出力させるようなプログラムです。
>>600 先ずはそのような解を求める方法を教えてください。
603 :
デフォルトの名無しさん:04/11/09 16:35:15
>>602 掃き出し法でもAの逆行列をBにかける方法でもなんでもいいです!
>>603 >602はリア厨以下だからそれを知らないのだよ。
>600
ここはC/C++の宿題を片付けるスレだ
学校の宿題は自分の机で片付ける方が将来の為だぞ
>>605 600はC/C++の宿題じゃないの???
>605は、>600が算数の問題を解くためにプログラムを作らせようとしていると思ったんジャマイカ。
そんなばなな
暇人だった
書き込めればなんでもよかった
いまは反省しているΛ||Λ
611 :
デフォルトの名無しさん:04/11/09 19:46:07
Cです、お願いします。
キーボードから入力したの実数のビット列を表示するプログラムを作文しなさい
(32ビット表示し、4ビットごとにスペースで区切る)
作文かい。
(´-`).。oO(ここは質問の仕方を教えるスレじゃないんだけどな…)
ビットパターンの出力なんてわざわざCでやる必要はない
Javaならデフォルト関数で一発だ。ハイ解決
「プログラム」
ろく いちいち
きょう、キーボードからにゅうりょくした
じっすうのビットれつをひょうじするプロ
グラムがしゅくだいにでた。じょうけんと
して32ビットひょうじし、4ビットごとにス
ペースでくぎるようにいわれた。
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
キーボードから入力した実数のビット列を表示するプログラムを作文しなさい
(32ビット表示し、4ビットごとにスペースで区切る)
[原文通りです]
[3] 環境
[3.1] OS:Windows Me
[3.2] コンパイラ(バージョン):Borland C++ 5.5.0
[3.3] 言語:C
[4] 期限:2004年11月12日15:00まで
[5] その他の制限:ありません
ビットにして表示するなんて荒業以外方法あるのだろうか
ちょっと興味がある…
あまりにも簡単な宿題を丸投げしてて、先々自分が困ると思わねーの?
ここは宿題を片付けるスレであって
初心者に手取り足取り教えてやるすれではないんだけどな・・・・・・(´-`)y-┛~~
>>613,619
じゃ、お前がやってあげればいいじゃん♪
int xtob(unsigned int n)
{
int i, j;
for(i=31;i>=0;i++){
for(i=0;i<4;i++){
if(0x80000000 & n){
putchar('1');
}else{
putchar('0');
}
n <<= 1;
}
putchar(' ');
}
putchar('\n');
return 0;
}
どっか間違いがあるけどバグ取りくらいしてくれるよな
どこが悪いかくらい自分で考えてね
うわ、だっせぇ、問題もまともに読めないのに偉そうに「自分で考えてね」なんて書いちゃってるよこの人。
>>617-619 申し訳ありませんでした
やはりもう少し自分で考えてみます。
>>621 ありがとうございました。参考にさせていただきます
タブは(広義の)環境依存だから使わない方がいいよ。
空白なら、等幅フォントの場合絶対ずれないし。
>>625 おいおい、問題文が正しいなら実数だろ?
>621は整数だぞ。
; orz
(setq-default indent-tabs-mode nil)
だから、インデント以外でタブを使うからずれるんだって。
インデントで使うなら4カラムごとだろうが8カラムごとだろうが問題ないっしょ。
スペース使っても固定ピッチじゃなきゃずれるけどな
#include <stdio.h>
#include <string.h>
int main(){
int n,i,j;
float f;
unsigned char b[4],msk;
printf("数字をいれろ> ");fflush(stdin);
n = scanf("%g",&f);
if(n!=1){printf("嫁寝ーよ\n");exit(1);}
printf("\n 28 24 20 16 12 8 4 0\n");
memcpy((void *)b,(void *)&f,4);
for(i=3;i>=0;i--){
msk = (1 << 7);
for(j=7;j>=0;j--){
if(b[i] & msk)printf("1");
else printf("0");
if(!(j%4))printf(" ");
msk >>= 1;
}
}
printf("\n");
return 0;
}
このスレじゃバカでも解答者になれるのか
#include <stdio.h>
#include <string.h>
int main(){
int n,i,j;
float f;
unsigned char b[4],msk;
printf("数字をいれろ> ");fflush(stdin);
n = scanf("%g",&f);
if(n!=1){printf("嫁寝ーよ\n");exit(1);}
printf("\n 28 24 20 16 12 8 4 0\n");
memcpy((void *)b,(void *)&f,4);
for(i=3;i>=0;i--){
msk = (1 << 7);
for(j=7;j>=0;j--){
if(b[i] & msk)printf("1");
else printf("0");
if(!(j%4))printf(" ");
msk >>= 1;
}
}
printf("\n");
return 0;
}
タブが潰れてるけど勘弁な
#include<stdio.h>
int main(){
unsigned char buf[4];
char *table[] = { "0000 ","0001 ","0010 ","0011 ",
"0100 ","0101 ","0110 ","0111 ",
"1000 ","1001 ","1010 ","1011 ",
"1100 ","1101 ","1110 ","1111 "};
scanf("%f", (float *)buf);
printf("%s%s%s%s%s%s%s%s\n",table[buf[3]/16], table[buf[3]%16],
table[buf[2]/16], table[buf[2]%16],
table[buf[1]/16], table[buf[1]%16],
table[buf[0]/16], table[buf[0]%16]);
return 0;
}
いちおうリトルエンディアン用、SUNとかには0123の順で表示さしてくれい。
>unsigned char buf[4];
unsigned char buf[sizeof(float)];
後はループで
関係ないけど、判定関数。
int is_little_endian(){
char ch[2];
*(int*)ch = 1;
return ch[0] == 1;
}
あ、int のバイト数無視してた。
>>611 これで良いと思うのだが...
『入力した実数のビット列を表示する』って書いてるからバイトオーダーなんか意識
する必要ないのでは?
#include <stdio.h>
#include <string.h>
int main( void )
{
int a, i;
float b;
scanf( "%f", &b );
memcpy( &a, &b, sizeof( int ) );
for( i = 0; i < 32; i++ ) {
printf( "%d", ( a & 0x80000000 ) / 0x80000000 );
a <<= 1;
if( i % 4 == 3 )
printf( " " );
}
return 0;
}
>>410 亀レスだが一つだけ逝っておきたいことがある
のっとふぁうんど
でした。すいませんごめんなさいもうしません。゚(゚´Д`゚)゚。
641 :
600:04/11/10 02:21:55
>>641 アルゴリズムはそこらじゅうに落ちてたから、後でトリッキーなコード
考えてみる。一日ほどまたれい。
for(t=0;t<10;t++)
num[t]=0; /* 配列fをクリヤー*/
while((ch=fgetc(fin))!=EOF) /* 1行読む*/
{
if(isdigit(ch))
num[ch-48]+=1; /*listの48番目に1を足す*/
}
for(t=0;t<10;t++)
fprintf(fout,"%c :%4d\n",t+48,num[t]);
数字を抽出して出力するプログラムですが、
これの後に、a-zA-zそれぞれをislower isupper を使って、上と同じようにfor whileでプログラムを作ったら、出力されるのは数字部分だけですよね。
数字、英小文字、英大文字を抽出して出力するにはどうすればいいでしょうか?
for(t=0;t<10;t++)のあとの出力で終わらないようにしたいのですが。
647 :
デフォルトの名無しさん:04/11/10 07:44:18
ageます
↑特定文字の出現回数を抽出するんだろ。
num[256] にして全文字の出現回数を取得→見たい文字だけ出力
が一番普通で早いと思うぞ。
お前さんのはトリッキー。
あれだ。「コメントが無いほうがマシ」ってのの例だな。
問題の内容さえ理解していないのがワラッタ。
int num[256];
for(t=0;t<256;t++)num[t]=0;
while((ch=fgetc(fin))!=EOF){/*1文字読む*/
&bpsp;&bpsp;num[ch] += 1; /* 文字に対応したカウンタを1増やす*/
}
/* 大文字小文字といわず、記号も含めて吐きだす */
for(t=33;t<=126;t++) fprintf(fout,"%c :%4d\n",t,num[t]);
>>650 そういえばコメント消すの忘れてたw
ハズカシ
652 :
デフォルトの名無しさん:04/11/10 09:17:07
>>652 >・エラーは、その行とエラーの詳細を書きましょう。
>エラーメッセージが出た場合はそのままコピーしてください。
つーか、>1を100辺くらい読め。
そして己の書いたソースを穴が開くほど読め。
655 :
ネムー:04/11/10 11:54:44
質問です。
フーリエガラーキン法を用いて、ガウシアンパルスf(x)=exp(-100*x^2)を
微分するプログラムを教えて下さい。
xの範囲は-1〜1で、f(x)の値としてはガウシアンパルスを
128等分した離散値を使うものとしてください。
言語はC++でコンパイラはボーランドC++コンパイラーです。
GNU Scientific Libraryが移植済みです。
656 :
デフォルトの名無しさん:04/11/10 16:11:14
C言語の宿題です。
2桁以上の任意の整数を入力して、数字の桁を入れ替えるプログラムを作る問題です
例…1234→4321
誰かお願いします
>>656 #include <stdio.h>
int main() {
int in,out,wk;
scanf("%d",&in);
wk = in;
out = 0;
while(wk)
{out = (out * 10) + wk % 10;
wk /= 10;
}
printf("%d %d",in,out);
return 0;
}
手抜きして作ったので自分で修正してくれ
>>656 #include <stdio.h>
#include <string.h>
int main()
{
char buf[64];
size_t i;
printf("2桁以上の整数を入力: ");
scanf("%s", buf);
i = strlen(buf);
while( i > 0 )
printf("%c", buf[--i]);
printf("\n");
return 0;
}
659 :
デフォルトの名無しさん:04/11/10 16:30:59
漏れ
>>660 じゃないけど気持ちは解る。
ほとんど同じ様な問題に解答したので...
もっとも
>>659 にはそれを直すだけの力も無さそうだけどな。
今回は別な人が答えてやんなよ。
この問題1から順にやればできるようになってる
よって順番にやって詰まってからもう一回鯉
↑しかし、この問題を1から順番にやるとなると最初は main() に全処理書くことに
なりそうだな。
こうゆう学校を出た奴がKStep関数を書くのか?
Cの課題です。
1.N×N行列の行列式を求めるプログラムを作成。
Nはプリプロセッサで指定する。数値は初期値で設定する。
不要な演算をしないようにする。たとえば0となっている要素に掛けたりすること
エラー(計算結果にNaNとう値)が出ないようにする。
2.1のプログラムを参考して、逆行列を求めるプログラムを作成。
行列式の値が0なら適切なメッセージを表示して、計算を中止する。
それ以外は逆行列を表示する。
お願いします。
行列式の求め方かいて
逆行列の求め方かいて
C言語でn×n行列のAとBの二乗平均誤差を計算をしたいのですが
どなたかわかりませんか?
式は
1/(n^2)×{Σ(A−B)^2}の平方根
で、Σの範囲は1≦i≦nです。
A及びBはA[1][1]、A[1][2]、・・・A[1][n]、A[2][1]、A[2][2]、・・・・A[n][n]
というように変化して計算いくものとします。
ありがとうございます。参考になりました
671 :
デフォルトの名無しさん:04/11/10 20:49:10
【宿題】
Σ(a_i - b_i)^2 を計算する場合と、
Σ(a_i^2 + b_i^2) - 2Σ(a_i * b_i) を計算する場合とでは、
どちらが誤差が大きくなりますか?
>>672 a_i と b_i は正の数で、近い値の場合はどうなりますか?
>>673 差を取ると桁落ちする
0.1234 - 0.1232 = 0.0002
有効数字 4桁 ⇒ 1桁
課題が完了しました
ご指導くださった方々ありがとうございました
なんか別のスレにも質問あがっているみたいですが、
どうやら同じ課題を与えられている人らしいです…
[1] 授業単元:データ構造とアルゴリズム
[2]問題:
標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。また、同じ長さの行は入力した順番に出しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存しなければなりません。勝手な上限を設けてはいけません。
実行例
入力
Windows XP
Power Mac G5
Unix SVR4
出力
Unix SVR4
Windows XP
Power Mac G5
[3] 環境:
[3.1] OS:WinXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可
[4] 期限:2004年11月24日
[5] その他の制限:
どなたかわかる方はご教授くださいm(__)m
678 :
ネムー:04/11/11 10:39:16
質問です。
・1次元配列で与えられた離散データをFFT(高速フーリエ変換)する
プログラムを教えて下さい。
・配列で与えられた離散データをFFTして、ikかけて
逆FFTすると微分値が求まるらしいので、その方法を教えて下さい。
OS;Windows XP
言語;CかC++
コンパイラ;ボーランドC++コンパイラ
です。
よろしくお願いします。
>>678 俺も眠いから無理。
それに高速ふーりえ変換の方法も知らないし。
と、ゆうことで自分で調べるかネ申でもまってて。
680 :
デフォルトの名無しさん:04/11/11 11:25:22
681 :
ネムー:04/11/11 11:31:43
すいません。
方法わかっててもなかなかうまいことかけなくて・・・。
とりあえずダウンロードしてやってみます。
ありがとうございました。
682 :
デフォルトの名無しさん:04/11/11 12:11:28
キボードから入力された英小文字を英大文字にして表示するプログラム
文字列の最大の長さは20まで
それ以外はそのまま表示する
小文字 adc12
大文字 ADC12
>>682 #include <stdio.h>
int main()
{
int i;
char str[21];
printf("input> ");
scanf("%20s",str);
for(i=0;i<20;i++)
{
if(str[i]=='\0')break;
else if(0x60<str[i]&&str[i]<0x7b) str[i]-=0x20;
}
printf("%s",str);
return 0;
}
684 :
デフォルトの名無しさん:04/11/11 12:50:19
同じネタの繰り返しかorz
686 :
デフォルトの名無しさん:04/11/11 13:08:19
任意サイズのリングバッファのアドレス計算
をするプログラムを作れ。
>>688 ごめんなさい。問題文がそうだったので・・・
改めまして
問題:任意サイズのリングバッファのアドレス計算
をするプログラムを作りましょう。
以上、宜しくお願いします。
>>689 アドレス計算
の意味がわからんのは俺だけか?
俺もわかんね
おらもわかんね
授業に出席していない
>>689もわからないにイピョーウ
リングバッファの末尾のポインタを求めればいいんじゃないの?
リングバッファは通信系でよく使うな。
なに。そんなに難しいものではない。
では“アドレス計算”どぞー
697 :
デフォルトの名無しさん:04/11/11 18:12:29
2問お願いします
「キーボードから入力された10進数を、2進数として出力するプログラムを作りなさい。
2進数への変換は、キーボードから入力された10進数を2で0になるまで割り、余りを逆の順番で並べる方法を用いる。
ただし、入力は正の整数で最大値は16383(すべてが1である14桁の2進数)とする。
「キーボードから和暦(英文字に続く文字)を入力したとき、西暦年を出力するプログラムをつくりなさい。
ただし、明治はmまたはM,大正はtまたはT,昭和はsまたはS、平成はhまたはHとし、数字は必ず2桁で入力するものとする。
たとえあ平成7年の場合はh07またはH07to入力すること。
698 :
デフォルトの名無しさん:04/11/11 18:13:57
修正)最後の行の「またはH07to入力すること。」は「またはH07と入力すること。
」です。
お願いします。
mtshMTSHは全角?
>>697 本人がもういないようなのでこの質問はキャンセルされました。
701 :
デフォルトの名無しさん:04/11/11 18:30:05
>>699 スミマセン。mtshMTSHは半角でお願いします
702 :
デフォルトの名無しさん:04/11/11 18:43:09
. ∩_∩ ;
; | ノ|||||||ヽ `
, / ● ●|
;, |\( _●)/ ミ
; 彡、| |∪| |、\ ,
./ ヽ/> ) :
(_ニニ>/ (/ ;
; | | ;
' \ヽ/ / :
, //\\ .
; し’ '`| |
というかそんな簡単なのもできないで大丈夫か?
簡単言うならちゃちゃっとやってやれ
705 :
デフォルトの名無しさん:04/11/11 19:29:47
>>730様
当方、初心者なので。。申し訳ありません。
>>707 以前に出たような質問をするなよ。
過去ログでも参照しとけ。
709 :
デフォルトの名無しさん:04/11/11 20:02:42
707は当方ではないので、お願いします。
当方、この場での質問は初めてなので
>>708様がおっしゃっているのは別の方だと思います。
回答のほうお願いします
自分でやりな
できないならできないで、できるとこまでやれ
それから来い
てか、過去ログにあるらしいから探しに行け
>>697 #include <stdio.h>
#include <limits.h>
int main()
{
char buf[256];
unsigned int d, mask;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int status = sscanf(buf, "%ud", &d);
if (status == 0 || status == EOF) {
continue;
}
for (mask = ~(UINT_MAX >> 1); mask != 0; mask >>= 1) {
if ((d & mask) != 0) {
break;
}
}
if (mask == 0) {
puts("0");
continue;
}
for ( ; mask != 0; mask >>= 1) {
if ((d & mask) != 0) {
putchar('1');
} else {
putchar('0');
}
}
putchar('\n');
}
return 0;
}
>>706さん、私はどうしてもあなたに教えてほしいのです。
あなたが、このスレ随一のプログラマだということを確信しておりますので。
もちろん、だからといって、あなたが私の”宿題”を引き受けてくれる道理
などはないことも、重々承知しているつもりです。
ですが、私は、自分の宿題を済ませるということだけが、目的というわけではないのです。
私は、あなたのプログラミング能力を、世間に知らしめたいのです。
”こんなにも才能あふれるプログラマが、このスレにはいるんだぞ”ということを
自慢してまわりたいのです。
どうかお願いします。私のささやかな願いをかなえてもらえないでしょうか。
あなたの、プログラムが、いつか世界を救う。
今ではそんな気さえしています。
・長ったらしい文章
・文中からほとばしる電波
・くどい敬語
ま た 常 識 人 か ! !
時々えらい粘着質な香具師がわくな
宿題をやってもらえず、単位でも落したか?
>>716 そんな奴は単位を落として当然だろ。
どうせ学科のゴミの癖にまだ大学にへばり付いて、
なに?粘着した垢?石鹸カス?チンカス?
大学にいても意味ないだろ。
大学の名前に傷がつくどころか、同級生にも迷惑なんだよ。
>>697 #include <stdio.h>
int main()
{
char buf[256], era;
int year;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int status = sscanf(buf, "%c%d", &era, &year);
if (status == 0 || status == EOF) {
continue;
}
switch (era) {
case 'm': case 'M':
printf("%d\n", year + 1867);
break;
case 't': case 'T':
printf("%d\n", year + 1911);
break;
case 's': case 'S':
printf("%d\n", year + 1925);
break;
case 'h': case 'H':
printf("%d\n", year + 1988);
break;
default:
break;
}
}
return 0;
}
宿題の内容から言って、工業高校か専門学校だろ
これが大学生の宿題だとしたら終わっとるよ
721 :
デフォルトの名無しさん:04/11/11 20:42:31
#include <stdio.h>
int main()
{
char *a;
int i,k,n10,n1,g,a1,a2,a3;
scanf("%s",a);
for(i=0;i<=3;i++){
if(*(a+i)=='M'||*(a+i)=='m'){
k=1867;
}
else if(*(a+i)=='T'||*(a+i)=='t'){
k=1911;
}
else if(*(a+i)=='S'||*(a+i)=='s'){
k=1925;
}
else if(*(a+i)=='H'||*(a+i)=='h'){
k=1988;
}
a++;
}
for(i=0;i<=3;i++){a--;}
a1=*(a+1);
a2=*(a+2);
printf("西暦%d年",(k+(a1*10)+a2));
return 0;
}
久しぶりのCだができた。と思ったらどこかおかしいので
>>697は
>>727以降を参照しな
早くこの流れを終わらせようぜ
>>719 自分のやけど、ちょっとよろしゅうないところがあるわ。
> if (status == 0 || status == EOF) {
ここは、『if (status != 2 || status == EOF) {』 やね。
あとswitchのところは、『switch(toupper(era)) {』 でcaseを減らすのもええかも。
is〜()やto〜()の未定義動作が怖いから、あまり使いとうないねんけどな。
宿題が出る。
煽るやつととくやつが出る。
だらだらする。
また宿題が出る。
マルチということが判明する。
叩く。
また宿題が出る。
ずっと前からこの流れだよ。
724 :
デフォルトの名無しさん:04/11/11 20:49:06
>>721 『a1=*(a+1);
a2=*(a+2);』
のトコ見てみろ
>>723 まとめページが必要かなぁー にゃんにゃん
>>char *a;
>>scanf("%s",a);
>>721 そのプログラムはまずいで。
aにメモリが割り当てられてへんから、スタック破壊される。
あと入力に年号の一文字が無かったときに、動作が不定やわ。
それとこれが一番問題やねんけど、それほんまにまともに動くん?
文字(a1, a2)に対して演算してはるで。
言わせてもらうと、かなりあかんプログラムやわ。作りがひどすぎます。
728 :
デフォルトの名無しさん:04/11/11 20:51:47
てかレス激しいなw
解答が出たことだし、これにて一件落着!
次の宿題の方、どうぞー
氏ねマルチ
↓
ご主人様ぁ〜
733 :
デフォルトの名無しさん:04/11/11 20:59:31
1問目がまだやんけ
ほんたま辺りが…
736 :
デフォルトの名無しさん:04/11/11 21:01:36
>>735 2問お願いします
「キーボードから入力された10進数を、2進数として出力するプログラムを作りなさい。
2進数への変換は、キーボードから入力された10進数を2で0になるまで割り、余りを逆の順番で並べる方法を用いる。
ただし、入力は正の整数で最大値は16383(すべてが1である14桁の2進数)とする。
やて
>>736 「剰余算の結果を逆順で出力」って、全然面白くも何ともないやん。
719で出しとき。あれなら(逆順にするための)バッファもいらんし、なにより美しいわ。
>>736 ごめん、間違えてもた。719 ちゃうわ。 711 が答えや。
題意通りにやらないと失格だよ
743 :
デフォルトの名無しさん:04/11/11 21:14:48
>>739 やっぱ学校は美しさにはこだわってないねん
ま、ほんま汚いプログラになんねやなw
宿題やっててエラーの原因がわからないってのも貼ってよろしいのでしょうか
いいんでない
>>743 ↑
課題の意図が理解できない下級高卒プログラマ
747 :
697:04/11/11 21:32:41
697です。
遅レスすみません。なにか私の偽者(?)が多く出没しておりますが。。。
2問目の回答ありがとうございました。
1問目のほうもよろしくおねがいします。
>>697参照
/* やおやさん */
#include <stdio.h>
#define MONEY 1000;
typedef struct
{
char name[20];
int price;
int rest;
int bought;
} yasai;
int main(void)
{
int roop = 1;
int i;
int money = MONEY;
int num;
yasai ve[] ={
{"ninjin", 100, 5, 0},
{"daikon", 150, 5, 0},
{"retasu", 400, 2, 0},
};
printf("(´・д・`)<へいらっしゃい\n");
while(roop)
{
printf("残り残金:%d円\n\n", money);
for(i = 0; i < 3; i++)
printf("%d---%s-%d円-%d個持っている-残り%d個/n", i, ve[i].name, ve[i].price, ve[i].bought, ve[i].rest);
printf("何を買いますか? 0:%s 1:%s 2:%s 3:帰る", ve[0].name, ve[1].name, ve[2].name);
scanf("%d", &num);
if(num == 3)
{
printf("(´・д・`)<今後ともごひいきに\n");
break;
}
if(money < ve[num].price)
printf("(´・д・`)<お金が足りないよ\n");
else
{
money -= ve[num].price;
ve[num].rest--;
ve[num].bought++;
}
}
return(0);
}
20,22行目で「ここでは宣言はできない(関数 main )」といわれます
上から20行目と22行目です
#define MONEY 1000;
↑
>>752 (´・д・`)<愛してます
今後とも ごひいきに
>>752 プリプロセッサの悪いところそのままだね。
755 :
デフォルトの名無しさん:04/11/11 22:18:49
以下の練習プログラムを変更して、node1、node2、node3の順にリストを構成して、
その内容を表示するコードを記述してください。 //よろしくおねがいします
#include<stdio.h>
typedef struct NODE{
int num;
struct NODE *pnext;
}NODE;
int main(void){
NODE node1,node2,node3;
NODE *phead,*ptmp;
scanf("%d",&node1.num);
scanf("%d",&node2.num);
scanf("%d",&node3.num);
phead = &node1;
node1.pnext = &node2;
node2.pnext = &node3;
node3.pnext = NULL;
printf("%d\n",phead->num);
printf("%d\n",phead->pnext->num);
printf("%d\n",phead->pnext->pnext->num);
for( ptmp=phead ; ptmp!=NULL ; ptmp=ptmp->pnext)
printf("%d\n",ptmp->num);
return 0;
} //見直しましたがPPTを見て手打ちしたのでスペルミスがあったらすいません
#include <stdio.h>
char output_buf[14];
void flush(void)
{
for (int i = 13; i >= 0; i--){
if (output_buf[i] != 0x00){
putchar(output_buf[i]);
}
}
putchar('\n');
}
void reg(int num, int i)
{
if (i >= 14 && i < 0){
return;
}
if (num != 0 && num != 1){
return;
}
output_buf[i] = num + 0x30;
}
void init(void)
{
for (int i = 0; i < 14; i++){
output_buf[i] = 0x00;
}
}
int main()
{
char buf[256];
int cnt;
unsigned int d;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int status = sscanf(buf, "%ud", &d);
if (status == 0 || status == EOF) {
continue;
}
if (d > 16383 || d < 0){
continue;
}
cnt = 0;
init();
while (true){
reg(d % 2, cnt++);
d /= 2;
if (d == 1){
reg(d, cnt++);
break;
}
else if(d == 0)
break;
if (cnt >= 14)
break;
}
flush();
}
return 0;
}
>>755 すでにリストになってるし、内容を順に表示してる気がする…
C言語の課題が分からない・・・。どなたかお願いします。
非負の整数を入力する。・・・・@
1桁の整数を入力する。・・・・・A
@で入力した整数のA桁目を表示する。(@に5678,Aに3と入力したら出力結果は6となる)
上記をdo,while使って作成し、終了時に繰返し行なうかを尋ねるプログラミングです。
あすいません
問題文が3,2,1の順にリスト構成しろでした
#include<stdio.h>
#include<string.h>
int main(void)
{
char buf[256];
int a = 5678;
int b = 3;
int len;
printf("適当な数値を入れてください\n");
scanf("%d",&a);
printf("一桁の数値を入れてください\n");
scanf("%d",&b);
sprintf(buf, "%d", a);
len = strlen(buf);
if ((b > 9 && b < 0) || (len < b)){
printf("値が不適当");
return 0;
}
printf("%c\n", buf[strlen(buf) - b]);
return 1;
}
適当に直してくれ
>>760 まず、丸付き数字使うたらあかんよ。そこのコードには本来、文字がないからね。
数値のまま処理。(errorチェックなし)
#include <stdio.h>
int main(void)
{
int x, y, i;
char buf[16];
do{
printf("x >>"); scanf("%d", &x);
printf("y >>"); scanf("%d", &y);
(void)getchar();
for (i = 0; i < y - 1;i++)
x /= 10;
printf("%d\n", x % 10);
printf("continue? ");
fgets(buf, sizeof buf, stdin);
}while(buf[0] == 'Y' || buf[0] == 'y');
return 0;
}
#include<stdio.h>
typedef struct NODE{
int num;
struct NODE *pnext;
}NODE;
int main(void){
NODE node1,node2,node3;
NODE *phead,*ptmp;
scanf("%d",&node1.num);
scanf("%d",&node2.num);
scanf("%d",&node3.num);
phead = &node3;
node3.pnext = &node2;
node2.pnext = &node1;
node1.pnext = NULL;
printf("%d\n",phead->num);
printf("%d\n",phead->pnext->num);
printf("%d\n",phead->pnext->pnext->num);
for( ptmp=phead ; ptmp!=NULL ; ptmp=ptmp->pnext)
printf("%d\n",ptmp->num);
return 0;
}
よく分からんけど、こんなんでいいの?
とりあえず要件は満たしてると思うんだけど
767 :
デフォルトの名無しさん:04/11/12 01:07:27
>>764 + errorチェック
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#define BUF_MAX 256
int main( void )
{
char *str_end, buf1[BUF_MAX], buf2[BUF_MAX];
int ndigits;
long l, ith_digit;
do {
parameter1_input:
printf( "non-negative integer? " );
if ( fgets( buf1, BUF_MAX, stdin ) == NULL ) {
fprintf( stderr, "ERROR: UNEXPECTED EOF. ABORT.\n" );
return EXIT_FAILURE;
}
l = strtol( buf1, &str_end, 10 );
if ( buf1[0] == '\n' || *str_end != '\n' || l < 0 ) {
printf( " invalid parameter: %s", buf1 );
goto parameter1_input;
} else if ( l == LONG_MAX ) {
printf( " sorry, it is an overflow situation...: %s",
buf1 );
goto parameter1_input;
}
ndigits = str_end - buf1;
768 :
デフォルトの名無しさん:04/11/12 01:07:49
parameter2_input:
printf( "a digit? " );
if ( fgets( buf2, BUF_MAX, stdin ) == NULL ) {
fprintf( stderr, " ERROR: UNEXPECTED EOF. ABORT.\n" );
return EXIT_FAILURE;
}
if ( buf2[0] == '0' || buf2[1] != '\n' || ! isdigit( buf2[0] ) ) {
printf( " invalid parameter: %s", buf2 );
goto parameter2_input;
}
ith_digit = (int)strtol( buf2, NULL, 10 );
if ( ith_digit > ndigits ) { printf( " 0\n" ); }
else { printf( " %c\n", *(str_end-ith_digit) ); }
printf( "Wanna play more? (Y/N) " );
if ( fgets( buf1, BUF_MAX, stdin ) == NULL ) {
fprintf( stderr, "ERROR: UNEXPECTED EOF. ABORT.\n" );
return EXIT_FAILURE;
}
} while ( strcmp( buf1, "Y\n" ) == 0 || strcmp( buf1, "y\n" ) == 0 );
return EXIT_SUCCESS;
}
769 :
767:04/11/12 01:26:52
あ、インプットが 256 文字以上の時のエラーチェックし忘れた。
ここはエレガントに宿題を片付けるスレなんだが
771 :
デフォルトの名無しさん:04/11/12 10:13:27
誰かいますか?
いません
773 :
デフォルトの名無しさん:04/11/12 11:02:05
誰か助けてください。
次の関数で0≦x≦2の範囲で、xの値の0,1ごとに
yの値を計算するプログラムを作成せよ。画面にはx、y両方の値を表示す
るようにすること。while文を使うこと。y=x*x−3x+5/4
>>773 double x = 0.0;
while( x <= 2.0 )
std::cout << "x=" << x << " y=" << (x*x-3*x+5.0/4) << std::endl;
途中で送信しちゃった
double x = 0.0;
while( x <= 2.0 )
{
std::cout << "x=" << x << " y=" << (x*x-3*x+5.0/4) << std::endl;
x += 0.1;
}
776 :
773:04/11/12 13:49:40
ありがとうございます
>>776 あやまれ!
マルチしたことをこのスレでもあやまれ!
778 :
デフォルトの名無しさん:04/11/12 15:29:36
課題が出たのでお願いします。
【質問テンプレ】
[1] 授業単元:プログラミング応用
使用教科書→問題解決のための Cプログラミング
佐藤次男、中村理一郎 共著
コロナ社 \2,600 + Tax
[2] 問題文(含コード&リンク):Nを入力し、Nの階乗を求めるプログラムを再帰的な処理を用いて作成せよ。教科書 p.131 例題5.8 参照
[3] 環境
[3.1] OS:XPだと思います。
[3.2] コンパイラ(バージョン):32
[3.3] 言語:C
[4] 期限:2004年11月13日16:00まで
[5] その他の制限:ヒントとしてこのようなものが与えられました↓教科書 p.131 例題5.8 参照
階乗を求める関数をfact とする
1 の階乗 1
2 の階乗 2 × fact( 1 )
3 の階乗 3 × fact( 2 )
4 の階乗 4 × fact( 3 )
5 の階乗 5 × fact( 4 )
6 の階乗 6 × fact( 5 )
7 の階乗 7 × fact( 6 )
>>778 int fact(int n)
{
if( n<1 )return 0;
if( n==1 )return 1;
return n*fact(n-1);
}
if( n<1 )return 0;
これはちょっと自信ない
入力した文字列データを2次元配列に格納したあと、
逆順に表示するプログラムの表示。
ただし、一文字目に'@'が入力されるとデータ入力を終わる。
データ数は最大20個、また一つの文字列データの
最大長は半角10文字。
おねがいします
実行例
word=sekiyu
word=yasai
word=denwa
word=@
denwa
yasai
sekiyu
int i = 0;
char buf[20][11];
while( i < 20 ) {
printf("word=");
scanf("%s", buf[i]);
if( strcmp(buf[i], "@") == 0 )
break;
++i;
}
while( i > 0 )
printf("%s\n", buf[--i]);
strcmpが定義されていませんって出たんですが。
784 :
773:04/11/12 16:41:15
ほんとにごめんなさい。いままで書き込んだことなくて
ルールよくわかってませんでした。
こんな問題がでました
「HTTPの通信プログラムをC言語で作成する際,改行コードをどのように取り扱えばよいか調査せよ」
教えてエロイ人
ネット環境あるなら・・・とか言ってみるが
しかしどのように取り扱うかというのはまた抽象的でよくわからんな。
>>785 なかなか面白い問題やね。良い先生(もしくは良い大学)かも。
いろいろ試行錯誤するのがええねんけど、そういうスレッドちゃうからいきなり核心に行こか。
HTTPのRFC(RFC 2616)の「2.2 基本ルール」を読んでみ。改行コードの規定のあたり。
あとはそれをCに関連づけて説明すればええ。これで9割5分はもらえるやろ。
http://www.studyinghttp.net/translations#RFC2616 完璧を期すなら、socketをfdopen()したときのテキストモード/バイナリモードについても
触れておくとええんちゃうかな。「Cで作成する際」っていうのが気になるからね。
でもこれは冗長やろな。
788 :
デフォルトの名無しさん:04/11/12 18:19:50
>>785 Windowsの改行コードに統一するだけでいい。
ペイロードに乗っている部分の改行はHTTPと無関係。
数字を対応する序数(英語)に変換する関数
例えば
1 なら first, 2 なら second, 3 なら third
>>791 const char* henkan(unsigned int i)
{
static char* eigo[] = {"first", "second", "third",…};
return eigo[i];
}
>>792 const char* henkan(unsigned int i)
{
static const char* eigo[] = {"first", "second", "third",…};
return eigo[i + 1];
}
-1だろ
そうでしたっ!!テヘ
スレ違いだということはわかってるが言わせてくれ。
俺は今まで、数々の宿題を解いてきてる、いわば大御所ってやつだ。
だから多少の無茶は許されるはずだ。
windows updataすると再起動しなきゃいけないじゃん?
で、めんどいから、すぐには再起動しないんだけど、数分おきに
右下からうにょっと、再起動をうながすウインドウが出て来るんだよな。
あれがうざくてしょうがない。
けどな、お前らよりはうざくないから別にいいよ。
俺が言いたかったのはそれだけ じゃ ノシ
宿題が出る。
煽るやつと、とくやつが出る。
だらだらする。 ←今ここ。
また宿題が出る。
マルチということが判明する。
叩く。
また宿題が出る。
暇なんでエレガントに片付けられそうな宿題投下してください。
エイトクイーン問題を解くプログラムを作ってください
エイトキング問題を解くプログラムを作ってください
>>800 王□□王□□王□
□□□□□□□□
□□□□□□□□
王□□王□□王□
□□□□□□□□
□□□□□□□□
王□□王□□王□
□□□□□□□□
9個置けた。
プログラムの宿題を作るプログラムを作って下さい。
>>799 エイトクイーン昔やったんだけど。
暗算(?)で出来ちゃったよ。
マス書いてクイーン置いてってら出来た。
>>801 一番効率の悪い置き方したらいくつくらいなんだろう?
>>801 一番ゆかいな置き方したらいくつくらいなんだろう?
>>778-779 せっかく提出するならこのぐらい。
int fact(int n){retrurn n?n*fact(n-1):1}
809 :
デフォルトの名無しさん:04/11/12 23:21:41
適当な要素数の整数型の 1 次元配列を初期化し、全要素の合計を求めて表示するプログラムを教えてください。
ターミネータを用いる方法と、sizeofを用いる方法の両方をお願いします。
大原ゆきさんに犯されたい
#include <stdio.h>
int main(void){
int s[] ={1,23,6,38,14,6,3,54,44,3};
int i, n, sum= 0;
n = sizeof(s) / sizeof(int);
for (i = 0; i < n;i++)
sum += s[i];
printf("sum = %d\n", sum);
return 0;
}
>>809 普通にやるとターミネータ(もしくは番兵、sentinel)の個数がsizeof()に含まれてしまうが・・・
その辺はどうなっとるの?
814 :
デフォルトの名無しさん:04/11/12 23:43:34
>>809 usingterminator() {
static int x[] = { 1, 2, -1 }, i, sum;
for (i = 0; x[i] != -1; i++) sum += x[i];
printf("sum= %d\n", sum);
}
usingsizeof() {
static int x[] = { 1, 2 }, i, sum;
for (i = 0; i < sizeof(x) / sizeof(x[0]); i++) sum += x[i];
printf("sum= %d\n", sum);
}
main() { usingterminator(); usingsizeof(); }
815 :
デフォルトの名無しさん:04/11/12 23:49:27
>>814 なんでstaticにしてんのかな?
変数が自動的に0に初期化されるから?
int main() {
usingterminator(); usingsizeof();
usingterminator(); usingsizeof();
}
を実行するとどうなる?
return 0;
忘れてた… orz
問
文字列を入力として受け付けて、その文字列中にabcという文字列が含まれていればyesを、
含まれていなければnoを出力せよ。ただし、文字列ライブラリは使ってはならない。
実行例
・ugabcftと入力 → yes
・abcと入力 → yes
・iunhabと入力 → yes
と、問題を出されました。
誰か解いて下さい。月曜夜までに。
・iunhabと入力 → no
orz
strstrで速攻完了
すま、ライブラリ使っちゃいけんのね
strstrのソースを提出すれば
>>820 ありがとうございます。
えっと、ちょこっとレスされてて何なんですど、結局
strstrっていうのは文字列ライブラリに入るんですか?
何か #include <string.h> が文字列ライブラリだー、
みたいな説明受けたんですが。
もうよくワカンネ('A`)
>>825 文字列を検索するコードを自分で書くのが目的だから
string.hにあるstrstrを使うなってこと。
>>820のはそれを自作してあるから別に
関数名にstrstrが含まれてるからって関係ない。
828 :
デフォルトの名無しさん:04/11/13 21:37:15
C言語です。お願いします。
正整数nを入力するとn以下の正の偶数を計算するプログラムをwhile文とfor文
を用いたものをそれぞれつくれ。
define EOF -1
int mojishirabe(char ss[], char str[])
{
int i, j=0, k;
for(;;){
i=0;
while(ss[i] != str[j] && ss[i] != '\0'){
i++;
}
if(ss[i] == '\0'){
return 0;
}
while(ss[i] == str[j] && str[j] != '\0'){
i++;
j++;
}
if(str[j] == '\0'){
return 1;
}
}
}
int main(void)
{
int i, j, k;
char ss[80], str[80;
printf("入力される文字列中に"abc"が含まれているか判定します。\n");
printf("判定対称文字列を入力してください。\n");
printf("->");gets(ss);
if(mojishirabe(ss, "abc"){
printf("yes\n");
}else{
printf("no\n");
}
return 0;
}
int i;
int n;
scanf("%d",n);
#ifdef WHILE_VER
i = 0;
while(++i <= n)
#else
for(i=1;i<=n;++i)
#endif
printf("%d\n",i);
・・・偶数かすまん
>>828 偶数を計算って
全部表示させろってこと?
合計ってこと?
834 :
デフォルトの名無しさん:04/11/13 21:56:40
while
#include <stdio.h>
int main(void)
{
int sum = 0, x;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
while(x){
sum += x;
x -= 2;
}
printf("sum = %d", sum);
return 0;
}
for
#include <stdio.h>
int main(void)
{
int sum, x;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
for(sum = 0; x; x-=2){
sum += x;
}
printf("sum = %d", sum);
return 0;
}
xの値を変えたくなかったら
int main(void)
{
int sum = 0, x, i;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
for(i = x; i > 0; i-=2){
sum += i;
}
printf("sum = %d", sum);
return 0;
}
837 :
デフォルトの名無しさん:04/11/13 22:08:44
if(x&1)x--; と if(x%2!=0)
って同じ意味ですか?
if(x&1)x--; と if(x%2!=0)x--;ね。
学校じゃ後者の書き方しかしないだろうから一応。
if(x%2) x--; でも同じ意味になりますわな
学校でも x & 0x1 くらいすると思うが
841 :
デフォルトの名無しさん:04/11/13 22:17:15
なるほど。あとwhile文の継続条件がxというのはxが0になったら
継続しなくなるということですか?
>>841 そうだ。C では整数型が論理型の役目もする。
843 :
デフォルトの名無しさん:04/11/13 22:23:06
はぁ〜。勉強になりました。ありがとうございました。
>>829-830 お疲れ様です。ありがとうございます。
一つ注文といっては何ですが、このプログラムを
#include <stdio.h>
int main(void)
の2行から始めるように書き換える事って出来ますか?
出来るけどmainの中が長たらしくて
分かりにくくなるぞ。
エレガントな宿題まだー?
>>845 それでも良いのでお願いします。
これが今習ってるスタイルなので。
>>838 きょうび学校でも分岐は減らす方針で教えた方がいいのでは?
x-=(x%2);
x-=(x&1);
>>836 エレガントってほどでもないけど・・・
for(sum=0,i=0; i<x; sum+=i,i+=2){}
だんだん読みにくくなっててってねぇか?
x/=2;