ページ 1 / 1
初投稿です。
Posted: 2009年12月22日(火) 11:40
by tika
初めまして、色々検索して見つけました。
もう何をやっても自分で解決できないので、相談しにきました><
↓
キーボードから入力した数値を、カンマ編集(3桁ごとにカンマで区切って表示)するプログラムを作成。
ただし、以下の条件を満たすものとする。
①中心となるロジックは関数として作成すること。
main関数でキーボード入力を受け取り、その値を関数に渡す。
②2種類(以上)のロジックを作成すること。
キーボード入力は1回のみでOK。
[実行例]
<カンマ編集>数値を入力してください:12345[Ente[/url]
12,345
12,345
というものです。
よろしくおねがいします><!
Re:初投稿です。
Posted: 2009年12月22日(火) 11:48
by もぐりん
規約は読んでいますか?
開発環境が書かれていませんし、自分で作ったソースは添付してないしでは、
丸投げの質問ですよね?
Re:初投稿です。
Posted: 2009年12月22日(火) 11:59
by softya
質問に答えるために幾つかお願いがあります。スムーズに回答するために必要な事柄ですのでぜひお願いします。
・ 使用している環境やコンパイラ(VisualC++2008ExpressEdition等)、自分が習っている言語の規格(CにもC89やC99など幾つか規格があります)を教えて下さい。
・ 自分はどこまで理解しているのか、学校ではどこまで習ったのか明確にして下さい。特に使って良い関数の制限などが分かると答えやすいです。無制限なら無制限と書いて下さいね。
・ 自分で書いたソースプログラムがあるなら提示をお願いします。
・ ソースが有る場合は、自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
・ ソースコードは< pre>と< /pre>のタグで囲んで下さい。※preを使うときは空白は削除してお使い下さい。ここでは表示の都合で空白を入れています。
詳しくはこの掲示板の使い方をご覧ください→
http://dixq.net/board/board.html
Re:初投稿です。
Posted: 2009年12月22日(火) 12:16
by tika
丸投げな書き方をしてすいません、何も読まずに投稿したことを謝ります。
今ちゃんと読んできました。
C言語については9月ごろから授業で始めました。
けど、先生の説明も教科書読んでいても理解は何も出来ずなんとなくでやっている感じで課題を出されても何も出来ずって感じな状態です。
なので、softyaさんが言っていることもよく分かっていません;
なんとなくで分かっていることは、-1も答えに出すと先ほど先生が言っていました。
簡単な方法でitoa関数を使用して文字列に変換するとも言われました。
また、ソース・プログラムはまだ作成してません。
Re:初投稿です。
Posted: 2009年12月22日(火) 12:24
by softya
じゃあまず、コンパイル環境を自宅で用意しましょう。
学校の環境に合わせた方が良いで、どうやってコンパイルしているか具体例を書いてみて下さい。
学校で使っているOSも分かるなら書いて下さい。
Re:初投稿です。
Posted: 2009年12月22日(火) 12:32
by Dixq (管理人)
tikaさん
こんにちは^^
昼は携帯からしか書き込めないので簡潔に書きます;
まずsoftyaさんがおっしゃってるコンパイラってわかりませんか?VC++だとか。
今OS何使ってますか?授業ならリナックスとか?
また、作れることから書いてみましょう。
答えを教わるにしても突然長いコードを見てもわかりにくいと思います。
後、キーボードから入力するのは数値なんですか?文字列なんですか?
まずは、こんなとこからやってみましょう
1、キーボードから入力した数値を表示するだけ
2、その数値を100で割った数と100で割ったあまりにわけて表示
これくらいなら出来ますか?
2番は何型で受け取るかで処理がかわりそうです。
2種類以上で作れと書いてあるので、数値、文字列、両方期待されてるのかもしれませんね。
(数値の場合上限がありますが。
Re:初投稿です。
Posted: 2009年12月22日(火) 12:38
by tika
親切に本当にありがとうございます。
→softさん
コンパイルというものが分かりません;
初心者でももっと分かっていないほうに分類をされているので‥。
OSはVistaです。
→管理人さん
携帯からわざわざすいません、ありがとうございます。
キーボードから入力するのは数値となっています。
んっと・・分からないです;
本当にすいません><
Re:初投稿です。
Posted: 2009年12月22日(火) 12:41
by Dixq (管理人)
1番わからないですか?
じゃ画面に「helloworld」と表示させるプログラムならかけますか?
Re:初投稿です。
Posted: 2009年12月22日(火) 12:44
by Dixq (管理人)
どうやってコンパイルしてるんだろうf^_^;
コンパイルっていうのは機械語に翻訳することで‥
って昼休憩オワター‥。
どなたかバトンタッチ(>_<)
Re:初投稿です。
Posted: 2009年12月22日(火) 12:52
by softya
>コンパイルというものが分かりません;
>初心者でももっと分かっていないほうに分類をされているので‥。
>OSはVistaです。
学校もVistaなんでしょうか?
じゃあ、質問を変えて学校ではプログラムを打ち込んで動かすときにどうしてますか?
Re:初投稿です。
Posted: 2009年12月22日(火) 12:58
by tika
#include<stdio.h>
int main(void)
{
printf("helloworld"\n");
return 0;
}
であっているでしょうか・・?
学校でもvistaで使っています。
学校ではメモで作成しています。
Re:初投稿です。
Posted: 2009年12月22日(火) 13:01
by Naohiro19
Re:初投稿です。
Posted: 2009年12月22日(火) 13:17
by softya
>学校ではメモで作成しています。
メモで作成した後は、何かしませんか?
やっていることを全て書いて下さいね。
Re:初投稿です。
Posted: 2009年12月22日(火) 13:59
by tika
メモで作成してそれをファイル保存しています。
そのあとに添付のとこで実行しています。
Re:初投稿です。
Posted: 2009年12月22日(火) 14:00
by tika
添付できませんでした;
%SystemRoot%\system32\cmd.exe
Re:初投稿です。
Posted: 2009年12月22日(火) 14:05
by softya
>そのあとに添付のとこで実行しています。
>%SystemRoot%\system32\cmd.exe
これは、コマンドプロンプト(黒い画面のウィンドウ)を起動するやつですね。
この後の実行の手順も教えてください。
実行の結果が出てくる処まで、残さず全部を願いします。
Re:初投稿です。
Posted: 2009年12月22日(火) 14:25
by tika
はい、黒いところです。
そこで
bcc32 ファイル名
ファイル名
とやると結果が出てくるようになっています。
Re:初投稿です。
Posted: 2009年12月22日(火) 14:48
by softya
>bcc32 ファイル名
やっと分かりました。これがコンパイラですね。
bcc32は、「Borland C++ Compiler」と言います。
じゃあ、下記の手順まずコンパイラを自宅に導入して下さい。
http://natural-high.at.webry.info/200811/article_6.html
インストールに成功したら、まずhello worldが動くこと確認して下さいね。
ここまでで、何か分からなかったら聞いてください。
Re:初投稿です。
Posted: 2009年12月22日(火) 21:05
by むん
tikaさん微妙に間違ってますが、おそらくタイプミスでしょう。
#include<stdio.h>
int main(void)
{
printf("helloworld"\n");
return 0;
}
↑printf("");と書くので " が一つ多いですね。
tikaさんは文字列に文字を加えるということはできますか?
文字列の配列の中身がどうなっているのかわかりますか?
Re:初投稿です。
Posted: 2009年12月22日(火) 22:46
by Dixq (管理人)
ふ~やっと帰ってきました。年末は忙しいですねぇ。
>もう何をやっても自分で解決できないので、相談しにきました><
と書いてありますが、(厳しい事を言いますが)
hello worldがちゃんと書けないレベルは
「もう自分が出来る事は全てやった!」というレベルではないです。
hello worldはプログラムの参考書の1ページ目に書いてあるようなことなので、
しっかし参考書を読み返し、復習しましょう。
「参考書は持ってない。授業中先生が言ってるのを聞くだけだ」ということであれば、
ネットで勉強するのもありです。
・・というか、最近はほとんどネットで勉強出来ます。
むしろネットの方が欲しい情報を早く見つけやすいので、本を手に取らなくなるほどです。
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
この辺を読めばいくらでも勉強出来ると思います。
私たちが答えを教えるのは簡単ですが、それでは自分の力になりませんし、
この段階で答えを聞いていると次のステップの問題は全く解けなくなってしまうと思います。
ですので、なんとか自力でやってみましょう。
まずは私が最初に言った
「キーボードで入力した数値をそのまま描画する」
ここまではやってみませんか?
上のサイトにも書いてありますし、ググればいくらでも答えは見つかります。
Re:初投稿です。
Posted: 2009年12月23日(水) 00:47
by Dixq (管理人)
コンパイラをお持ちではない場合まず、自分のPCにコンパイラを入れましょう。
・・といっても解り難いでしょうから、説明を書いたページを用意しました。
よければご覧ください。
http://dixq.net/vcpp.html
こちらのコンパイラは学校で使っているものとは違うと思いますが、
こちらの方がずっと便利なんですよね。
もしtikaさんが、
「単位が取れたらそれでいい。プログラムには興味無い」
という場合なら学校で使っているコンパイラでいいかもしれません。
せっかく導入してももう使う事が無いのなら無駄ですし・・。
しかし、もしプログラムに興味があり、勉強したいのなら是非VisualC++をお勧めします。
tikaさんの気持ちとしてはどちらなのでしょう?
Re:初投稿です。
Posted: 2009年12月23日(水) 06:56
by Ma
とりあえず、ひとつだけ提供します。
ただし、std::string 使っています。
#include <string>
using namespace std;
void logic1(char* in){
string text = in;//std::string に変換
for(int i = text.size()-3;i > 0; i -= 3){
text.insert(i,",");//挿入
}
printf("%s",text.c_str());//表示
}
int main(void)
{
char input[256] = "";
scanf("%s",input);//入力
logic1(input);//関数に渡す
//logic2(input);
return 0;
}
答え丸投げではためにならない、とか思われるかもしれませんが、
なんだか質問していたのに環境導入の話に変わってしまって、解答得るまで苦戦しそうな気がするので
まずひとつだけでも解法をのせました。
(家で環境を整えればテストもできますので、当然私もVC++等のコンパイラの導入をおすすめします。)
ここから、考え方だけでも習得していただけると幸いです。
二つ目は、これを参考にがんばってください。
名前全角にしてミスったので編集しました。
うおー新機能すごいです、Dixqさん! ⇒

Re:初投稿です。
Posted: 2009年12月23日(水) 13:00
by Dixq (管理人)
編集したかどうかが解るようにしてみました^^
最初は[編]だったのですが、味気ないのでちゃちゃっと画像作りましたw
自作cgiじゃないので、出来る事は少ないですが、、、。
Re:初投稿です。
Posted: 2009年12月27日(日) 21:10
by tika
遅くなってすいません。
みなさんにこんな細かく教えてもらって本当に嬉しい限りです、本当にありがとうございます。
まずコンパイラ導入なんですが、順調に進んでましたが途中で電源が落ち出来ず、再挑戦しようとしましたが友達に学校のとごちゃ混ぜになるからやめといたほうがいいよと言われ諦めてしまいました、ごめんなさい。
また文字列に文字を加えることは、なんとなくですが理解出来ていて出来ます。
ですが、中身についてはよく分かっていません;
C言語プログラミングに関しては、専攻科目として修得しなくてはいけなくてただやっている感じです。
周りにも真面目にやっている友達は1人もおらず、男子生徒の1人答えがスラスラ分かる人にみんな頼って答えを見てやっている感じです;
あたしはそういうのが苦手で先生に聞いたり参考書を図書館などで探してやったりとしていましたが、授業でもただ先生が喋り言っていることを黒板に書かれるだけで、先生がパソコン使ってスクリーンで教えるという形もなく、また一人一人教えてくれることもほぼありません。
今回の課題に関しては自力でと言われ質問も聞いてくれませんでした。
前期のころは興味ありましたが、進むペースが早く次第にやる気もなくなってしまい、ただ単位が取れればいいという気持ちだけです;
提供本当にありがとうございます。
少しずつそれを参考し頑張ってみようと思います。
親切に本当にありがとうございます。
Re:初投稿です。
Posted: 2009年12月28日(月) 13:19
by Dixq (管理人)
> 前期のころは興味ありましたが、進むペースが早く次第にやる気もなくなってしまい、ただ単位が取れればいいという気持ちだけです;
なるほど。
察するに「わからないから面白くない」ようなので、わかれば面白くなるんじゃないかと思いますが・・。
それに、真っ黒のコンソール画面にbcc32とかよくわからないコマンド入れたりややこしいことしないといけないから、
「勉強するにも億劫だし」という状況が拍車をかけているように思います。
簡単にコンパイルできる環境を用意して、自分が思いついたらすぐ実行できるような環境があれば、
勉強もスムーズに進むのではないかと思います。
・・というか、勉強だと思うから進まないのではないかと思います。
実は学生時代私もtikaさんと同じ気持ちだったんです。
真っ黒のコンソール画面によくわからないコマンド入力して、
面白くもない計算結果が出るだけのC言語なんか何が面白いんだろうと思っていました。
授業も難しいし、やりたいことはスムーズに出来ないし、わからないことだらけで嫌になっていました。
プログラムの授業は必修だったのに、もう嫌になっていたので、単位落としました。
しかし、ある時、C言語でゲームが作れることを知り、
ゲームを作っているうちにC言語がとても面白くなり、C言語を勉強しました。
・・いや、勉強という意識は無かったです。
tikaさんの趣味が何かはわかりませんが、
例えばある料理が作りたかったとすると、そのレシピを本屋やサイトで見て回ったりして情報得ようとしますよね。
私もゲームが作りたかったので、ゲームが作れる為の情報収集しました。
その中にC言語があったというだけで勉強したという気持ちはありませんでした。
やらされているCの勉強と自分から意欲的に学ぶCは全く違うものでした。
最初は「Cって結局何が出来るの?」そういうことが明確になってないから
学ぼうという気持ちも薄れてしまうのではないかと思います。
Cがあれば何でも作れますよ。
今tikaさんがお使いになっているVistaもC(C++)で出来ています。
ワードやエクセルなんかのソフトもCで作れますし、
プレステみたいな3Dゲームだって作れます。
うちのサイトで公開しているようなゲーム
http://dixq.net/sr/
http://dixq.net/Aerobeat/
程度なら浅い知識のまま作る事も出来るほど簡単に出来てしまいます。
学校の授業が面白くないなら、少し自分で学んでみませんか?
きっとわかれば面白くなると思いますよ。
せっかくCを学ぼうと思っている人が日本中大勢いるのに、
大学や専門学校のしょうもない授業のせいでその人たちの意欲がそがれているのが残念でなりません・・。
Re:初投稿です。
Posted: 2009年12月28日(月) 16:38
by sizuma
教授の授業はカッスカスが多いですよね。
正直、黒板に書くだけだったら、全部ノートに書いたやつをコピーして配ってくれるだけでいいです。
写すの疲れるだけだし。
まぁ教育者ってわけじゃないし、東大出とかだとわかりやすく授業する気がなかったりするんでしょう。
分からないやつが悪い、みたいな感じですかね。
大学ってそういう所だといえばそうですけど・・・・
>カンマ区切り
printfのフォーマット指定とかマニピュレータ使えば一発で出来るんじゃないかな?って思ったんですけど、ないみたいですねー。
・・・めんどくさ!!
#include <stdio.h>
#include<string.h>
int main(void)
{
char input[/url] = "123456789";
int i;
int length = strlen(input);
for(i=0;i<length;i++){
if((i != 0) && (length-i)%3 == 0)
printf(",");
printf("%c",input);
}
return 0;
}
一応動きますけど、合ってるかは分かりません。
Cは独学なので。 
Re:初投稿です。
Posted: 2009年12月28日(月) 18:11
by non
>キーボードから入力した数値を、カンマ編集(3桁ごとにカンマで区切って表示)するプログラムを作成。
入力する数値が何桁までなのかわからないので、どの型で受ければ良いのか、また
関数への引数は何の型で渡せばよいのかわかりません。
>簡単な方法でitoa関数を使用して文字列に変換するとも言われました。
ということなので、int型なのかもしれませんが。
2種類以上のロジックで作れということですので、一例を添付します。
#include <stdio.h>
void kanma(long n)
{
static int count=0;
int c;
if(n==0)
return;
c=count++;
kanma(n / 10);
printf("%d",n % 10);
if(c % 3 == 0 && c>0)
printf(",");
}
int main(void)
{
long n;
printf("数値=");
scanf("%ld",&n);
kanma(n);
return 0;
}
>なんとなくで分かっていることは、-1も答えに出すと先ほど先生が言っていました。
この意味がよくわからないのですが、負数も出力できることというのでしょうか?
添付のプログラムは負数では使えません。