C/C++の宿題を片付けます 89代目
レス数が1000を超えています。これ以上書き込みはできません。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 88代目
http://pc11.2ch.net/test/read.cgi/tech/1180070116/
0002デフォルトの名無しさん
2007/06/06(水) 11:47:130003デフォルトの名無しさん
2007/06/06(水) 12:25:00問題文(含コード&リンク):
環境
OS: (Windows/Linux/等々)
コンパイラ名とバージョン: ボーランド
言語: C
[5] その他の制限:現在for文 if文 入力・出力・演算子
テーマ:繰り返し処理(while文)
問題:キーボードより整数nを入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15
0004デフォルトの名無しさん
2007/06/06(水) 12:48:08#include <stdio.h>
int main(void)
{
int a,count,total;
count=total=0;
printf("キーボードより整数nを入力=");
scanf("%d",&a);
while(count <= a){
total += count;
count++;
}
printf("合計=%d",total);
return 0;
}
0005デフォルトの名無しさん
2007/06/06(水) 13:09:48[2] 問題文(含コード&リンク): キーボードから入力される2つの整数a、bについて、
aとbの最大公約数g、最小公倍数lを計算し出力するプログラムを作成せよ。
【ヒント】
最大公約数 g は、しらみつぶしに調べる方法や、ユークリッドの互除法を使って計算できる。
最小公倍数 l は、aとbとgから計算できる。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:visual studio 2005
[3.3] 言語: C
[4] 期限: 6/6 午後二時まで
[5] その他の制限: #include<stdio.h> ヘッダーは←だけを使って。
お願いします
0006デフォルトの名無しさん
2007/06/06(水) 13:40:33#include<stdio.h>
int main(void)
{
int a,b,m,n,g,l;
printf("a:");scanf("%d",&a);
printf("b:");scanf("%d",&b);
m=a;n=b;
while(m%n!=0){
g=m%n;m=n;n=g;
}
g=n;
l=a*b/g;
printf("GCD(%d,%d)=%d\n",a,b,g);
printf("LCM(%d,%d)=%d\n",a,b,l);
return 0;
}
0007デフォルトの名無しさん
2007/06/06(水) 14:21:16[2] 問題文(含コード&リンク):キーボードから2以上の整数を入力し、
その数が素数であるかどうかを判断するコードを記述せよ。
【ヒント】
素数‥2以上の整数について、1とその数以外で割り切れない数
しらみつぶしに割り切れるかどうか調べる
調べる範囲(繰り返しの継続条件)に注意する
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:visual studio 2005
[3.3] 言語: C
[4] 期限: 6/6 午後3時まで
[5] その他の制限: #include<stdio.h> ヘッダーは←だけを使って。
二つ目お願いします。
0008デフォルトの名無しさん
2007/06/06(水) 14:39:42これは・・・レスするのを3時まで待つしかないわめ
0009デフォルトの名無しさん
2007/06/06(水) 14:40:55#include<stdio.h>
int main(void)
{
int n,i,flg=0;;
printf("n: ");scanf("%d",&n);
if(n<2)return -1;
for(i=2;i<=n/2;i++)if(!(n%i)){flg=1;break;}
printf("%d is%sprime number.\n",n,flg?" not ":" ");
return 0;
}
0010デフォルトの名無しさん
2007/06/06(水) 14:47:31ありがとですー
0011デフォルトの名無しさん
2007/06/06(水) 14:50:00#include <stdio.h>
int main(void) {
int x,i,flg=1;
printf("Input > ");
scanf("%d",&x);
if(x<2) return 1;
else if(x==2) flg=1;
else if(x%2==0) flg=0;
else if(x>=3) {
for(i=3; i*i<=x; i+=2) {
if(x%i==0) { flg=0; break; }
}
}
if(flg) printf("素数である\n");
else printf("素数ではない\n");
return 0;
}
0012デフォルトの名無しさん
2007/06/06(水) 15:16:28[2] 問題文(含コード&リンク):
char[20]型の文字配列に入力された情報を受取り
取得したデータが日本語・2バイト文字を含んでいた場合TRUEを返し
そうでなければFALSEを返すクラスを作成せよ
(クラス名は各自にまかせる)
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2003
[3.3] 言語: C
[4] 期限: 06/08まで
[5] その他の制限:-
一文字取得してisalnumかと思ったのですが
2バイト文字の場合でも、1バイトだけ取得してしまい思った結果がだせません
解決法よろしくお願いします
0013デフォルトの名無しさん
2007/06/06(水) 15:21:10文字セット/エンコーディングは不明だわ
「日本語・2バイト文字」という超アバウトさ
極めつけは
> [1] 授業単元:C言語
> [3.3] 言語: C
なのに
> クラスを作成せよ
釣りか。釣りなのか。
0014デフォルトの名無しさん
2007/06/06(水) 15:23:35001512
2007/06/06(水) 15:25:22すいません、本当に問題文は口頭説明そのままです
ただ、2回講義を受けられなかったので
過去になにか別の言い回し?クセ?がある人なのかもしれないです(普段別言語の開発を行っているらしい)
ちょっと出題した人に問題自体聞きなおしてきます
お騒がせしました
0016デフォルトの名無しさん
2007/06/06(水) 15:31:10追加がありました。
入力される数値が2以上でない場合、
繰り返し入力を求めるように改良しなさい
(実行時エラーの回避)。
#include <stdio.h>
int main(void) {
int x,i,flg=1;
printf("Input > ");
scanf("%d",&x);
if(x<2) return 1;
else if(x==2) flg=1;
else if(x%2==0) flg=0;
else if(x>=3) {
for(i=3; i*i<=x; i+=2) {
if(x%i==0) { flg=0; break; }
}
}
if(flg) printf("素数である\n");
else printf("素数ではない\n");
return 0;
}
このプログラムで追加のものを
どのように入れればうまい具合に行きますか?
教えてください。
0017デフォルトの名無しさん
2007/06/06(水) 15:37:24do{
printf("Input > ");
scanf("%d",&x);
}while(x<2);
0018デフォルトの名無しさん
2007/06/06(水) 15:38:26if(x<2) return 1; < この行を削除
else if(x==2) flg=1; < else を削除
0019デフォルトの名無しさん
2007/06/06(水) 15:38:53とりあえず
Cでクラスってどういう了見よ?
と問い詰めてこい
クラスの三文字を見なかったことにすれば、出題のアバウトさから言って
↓程度で済む話かもしれない。
#include <ctype.h>
int f(const char *s)
{
while (*s && isascii((unsigned char)*s))
++s;
return !*s;
}
0020先生失格です
2007/06/06(水) 16:34:46皆さんに大変な迷惑をかけてしまい申し訳ありませんでした。
先生として、非常に恥ずかしいとともに、何故こんな出題をしてしまったのだろう
という後悔の気持ちで一杯です。
元々頭の弱く、学校ではいつも苛められて、いつの頃からか精神的にも異変が出てきたので
何とかしなければいけないと心配していたのですが、まさかこんなことになって
しまうとは.....
先生として何とお詫びすればよろしいのやら...
でも、来週から精神病院に入院することが決まりました。
多分、一生退院できないと思います。
先生失格である 私 を一生世の中に出さないことが、
先生の私にできる、皆様への精一杯のお詫びだと考えています。
このたびは本当に申し訳ありませんでした。
0021デフォルトの名無しさん
2007/06/06(水) 16:35:45#include <stdio.h>
#include <string.h>
#include <ctype.h>
// SHIFT-JISの全角文字が入っているか?
char *shift_jis(unsigned char *str, size_t len) {
size_t i;
for(i=0; i<len; i++) {
if(str[i]>=0x81 && str[++i] >=0x3f) return "TRUE";
}
return "FALSE";
}
int main(void) {
unsigned char *str1="abcあいうえお";
unsigned char *str2="abc";
printf("%s : %s \n",str1, shift_jis(str1,strlen(str1)) );
printf("%s : %s \n",str2, shift_jis(str2,strlen(str2)) );
return 0;
}
0022デフォルトの名無しさん
2007/06/06(水) 16:38:34Shift JISのコード表
0023 ◆lIN/ESgxWw
2007/06/06(水) 18:14:36[2]1本の道に,食べ物が多数落ちている.
ランダムに動く動物が,それらを全て食べ尽くすと終了するようなプログラムを作成せよ.
<仕様>
「道」は要素数20程度の1次元配列で表現する.
「食べ物」は,上記配列の各要素に値1があればその場所に存在し,値0であればその場所には存在しないものとする.
「動物」は,1回の移動で配列中の1つ左または1つ右に移動できる.
「動物」の訪れた場所のエサは食べられたものとする.
「道のうち食べ物のない箇所」,「道のうち食べ物のある箇所」,「動物」は,それぞれ -, *, O で表現する.それらを横一列の文字で表示する.
繰り返し処理中は,毎回数十〜数百ミリ秒程度の時間,実行を一時停止させることで,状態の推移を見やすくする.
[3]OS:Linux
コンパイラ名:スイマセン、分かりません
言語:C
[4]できれば今日中にお願いします
[5]制限:配列まで習ってます。標準ライブラリは習ってません
よろしくお願いします。
0024デフォルトの名無しさん
2007/06/06(水) 18:22:58つまり、標準ライブラリを使うな、ということだな。
0025デフォルトの名無しさん
2007/06/06(水) 18:24:50つまり遠まわしにぬるぽって言いたいわけだな
0026デフォルトの名無しさん
2007/06/06(水) 18:26:440027デフォルトの名無しさん
2007/06/06(水) 18:31:300028デフォルトの名無しさん
2007/06/06(水) 18:32:270029デフォルトの名無しさん
2007/06/06(水) 18:32:32つまり標準ライブラリ関数以外を使えばいいんだぜ
0030デフォルトの名無しさん
2007/06/06(水) 18:33:080031デフォルトの名無しさん
2007/06/06(水) 18:33:40ってことは、標準ライブラリじゃなきゃ何使ってもいいってことだな
0032デフォルトの名無しさん
2007/06/06(水) 18:35:07003323
2007/06/06(水) 18:43:340034デフォルトの名無しさん
2007/06/06(水) 19:47:38[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テキストファイル中で,最も文字数が多い行の行番号と文字数,最も文字数が少ない行番号と文字数
を出力するプログラムを作成せよ.
% ./test < test.c
最も文字数が多い行番号は 13 行目で,その文字数は 18 文字です.
最も文字数が少ない行番号は 3 行目で,その文字数は 2 文字です.
%
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: [2007年6月11日])
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタと構造体はまだは習ってません
よろしくお願いします
0035デフォルトの名無しさん
2007/06/06(水) 20:03:49#include <stdio.h>
int main(void){
int line_number=1, line_max, line_min, row_number=0, row_max, row_min;
int moji;
while((moji=getchar())!=EOF){
if(moji=='\n'){
if(line_number==1){
line_max=line_min=line_number;
row_max=row_min=row_number;
}
if(row_min>row_number){
line_min=line_number;
row_min=row_number;
}
if(row_max<row_number){
line_max=line_number;
row_max=row_number;
}
line_number++;
row_number=0;
}
else{
row_number++;
}
}
printf("最も文字数が多い行番号は %d 行目で,その文字数は %d 文字です\n", line_max, row_max);
printf("最も文字数が少ない行番号は %d 行目で,その文字数は %d 文字です.\n", line_min, row_min);
return 0;
}
0036デフォルトの名無しさん
2007/06/06(水) 20:06:14#include <stdio.h>
#include <limits.h>
int main(void)
{
int c, len = 0, lno = 1, maxlno = 0, minlno = 0,
maxlen = INT_MIN, minlen = INT_MAX;
while ((c = getchar()) != EOF) {
if (c == '\n') {
++len;
if (len < minlen) minlen = len, minlno = lno;
if (len > maxlen) maxlen = len, maxlno = lno;
len = 0, ++lno;
} else ++len;
}
if (len > 0) {
if (len < minlen) minlen = len, minlno = lno;
if (len > maxlen) maxlen = len, maxlno = lno;
}
if (maxlno > 0) {
printf("最も文字数が多い行は %d 行目で,"
"その文字数は %d 文字です.\n", maxlno, maxlen);
printf("最も文字数が少ない行は %d 行目で,"
"その文字数は %d 文字です.\n", minlno, minlen);
}
return 0;
}
0037デフォルトの名無しさん
2007/06/06(水) 21:06:54#include <stdio.h>
typedef int HUMAN;
typedef int ANIMAL;
int main()
{
HUMAN nanoha[2] = {9, 19};
ANIMAL yukari[2] = {31, 17};
int i=0;
printf("なのはたんが%d才の頃、ゆかりんは%d才でしたが\n", nanoha[i], yukari[i]);
printf("なのはたんが%d才になり、ゆかりんは%d才になりました\n", nanoha[++i], yukari[i]);
return 0;
}
0038デフォルトの名無しさん
2007/06/06(水) 21:10:55[2] 問題文(含コード&リンク):
?新しい型(設計図)として,下記の要素を含む「電車」型を設計しなさい(新しい型(設計図)は,main関数の外で記述すること)。
?次に,main関数で上記の型(設計図)の変数を1つ宣言(生成)し,その変数の要素に適当な初期値を格納しなさい。
?最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。
?新しい型名:TRAIN
?要素1:車輪数・・・型,型名は考えること
?要素2:窓数・・・型,型名は考えること
?要素3:座席数・・・型,型名は考えること
?要素4:車内温度・・・型,型名は考えること
[3] 環境
[3.1] OS: WindowsXP
[3.2] visual studio2005
[3.3] 言語: C++
[4] 期限: 6/15まで
[5] その他の制限: 特になし
前すれでから引用
よろしくお願いします。
0039デフォルトの名無しさん
2007/06/06(水) 21:11:16#include <stdio.h>
int main()
{
int n, sum;
for (scanf("%d", &n), sum=0 ; n>0 ; sum+=n, n--);
printf("%d", sum);
}
0040デフォルトの名無しさん
2007/06/06(水) 21:12:38class?struct?
0041デフォルトの名無しさん
2007/06/06(水) 21:16:460042デフォルトの名無しさん
2007/06/06(水) 21:19:560043デフォルトの名無しさん
2007/06/06(水) 21:21:08[2] 問題文:配列宣言以外はポインタを用いること。空白英数字からなる2つの文字列を入力し、それぞれをa1,a2とおく、
a1が”NHK”で、a2が”NH"の場合のように、a2の先頭の文字が
a1に含まれているときは1を返し、違えば0を返す関数 int suture(char *a1,char *a2);
を作成しなさい.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2007年6月7日 0:00まで
[5] ポインタまで
お願いします。
0044デフォルトの名無しさん
2007/06/06(水) 21:26:56課題ではstructで作るのが通常みたいですが、クラスでも問題ないようなので
0045デフォルトの名無しさん
2007/06/06(水) 21:26:56a2の先頭の文字?a2がa1の先頭に含まれている場合じゃなくて?
0046デフォルトの名無しさん
2007/06/06(水) 21:27:07structって単に全部のメンバがpublicなclassじゃん
C++なら
0047デフォルトの名無しさん
2007/06/06(水) 21:27:22[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4167.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 6月7日まで
[5] その他の制限: 構造体まで習っています。よろしくお願いします。
0048デフォルトの名無しさん
2007/06/06(水) 21:38:25と表示させたいです。お願いします
0049デフォルトの名無しさん
2007/06/06(水) 21:41:110050デフォルトの名無しさん
2007/06/06(水) 21:44:12#include<stdio.h>
#define N 256
int suture(char *a1,char *a2){
while(*a1 && *a2 && *a1++ == *a2++);
return !*a2;
}
int main(){
char a1[N],a2[N];
printf("a1:");
fgets(a1,N,stdin);
printf("a2:");
fgets(a2,N,stdin);
printf("%s\n",suture(a1,a2)?"yes":"no");
return 0;
}
0051デフォルトの名無しさん
2007/06/06(水) 21:45:23#include <stdio.h>
int suture(char *a1,char *a2)
{
return *a1 ? (*a1==*a2)+suture(a1+1,a2): 0 ;
}
int main()
{
printf("%d\n", suture("NHK", "NH"));
}
0052デフォルトの名無しさん
2007/06/06(水) 21:49:33すっごい文法基礎な予感なので、テンプレ形式にキャストしてこっちに持ってきてみました
ヒントください;
template<typename T> class sometemplates {
static int i;
public:
sometemplates(){
i=0;
}
};
void main(void){ // てきとーだ
sometemplates<int> o;
}
(コンパイル結果)
sample.obj : error LNK2001: 外部シンボル ""private: static int sometemplates<int>::i" (略
)" は未解決です
問題文: sometemplates<int>::i がインスタンス化されないことを説明せよ。
処理系: VC6gold (万一に処理系の問題なようでしたらVC7-8にしますが、違う気がする)
期限: 特にないが数日を目処に取り下げ宣言の上他スレに移動(恥ずかしい;)
0053デフォルトの名無しさん
2007/06/06(水) 21:55:48クラス内の変数は全部privateになって、set〜,get〜でクラス内の変数にアクセス
するようしてあります。多分、問題の趣旨と激しく異なっているので他の人に期待してください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4168.cpp
0054デフォルトの名無しさん
2007/06/06(水) 21:57:40有り難うございます!
0055デフォルトの名無しさん
2007/06/06(水) 22:04:06iの定義が必要。
template <typename T>
int sometemplates<T>::i;
それから、mainの結果の型はintね。
0056デフォルトの名無しさん
2007/06/06(水) 22:13:26>>55
!!!
何かが見えた気がします もちろんVC6goldでコンパイル通りました
ちょっと派生疑問もあるのですが、(即聞かずに)ちょっといろいろやってみます
> mainの結果の型はint
いくらなんでも手抜き過ぎますたw
…反省は、していない // お約束
ありがとうございました 精進します
005752,56
2007/06/06(水) 22:27:34気が変わって、恥の上塗りにきますた
void main(void){} は、そのコンパイル結果に責任を持てないなら…
…何が起こるかわからないなら、やってはいけない 少なくとも非礼です
おいらは/Fa,ml /coffを日常的に使い、crt/srcよりもntsdの出力を信じ、
なにより粗野な性格ゆえ、あのような非礼なコードを書くのです 真似しないよう
ソースコードは人の恥部とは、言ったものだな…。
0058デフォルトの名無しさん
2007/06/06(水) 22:36:10サンデープログラマで宿題ってどうよ
0059デフォルトの名無しさん
2007/06/06(水) 22:38:290060デフォルトの名無しさん
2007/06/06(水) 22:43:32C++ならreturn 0;が省略できるから。
0061デフォルトの名無しさん
2007/06/06(水) 22:45:29質問するサンデープログラマは珍しいな。
別に質問者が何者でもOK。俺っちは、答えたい質問には誠意を持って対応
気に入らない質問&レスは脳内あぼ〜んするだけだ。
0062デフォルトの名無しさん
2007/06/06(水) 22:47:43それと、少なくともg++は戻り値voidだとエラーにするぞ
0063デフォルトの名無しさん
2007/06/06(水) 22:48:310064デフォルトの名無しさん
2007/06/06(水) 22:49:40今、我流でC言語を勉強してて今配列やってる
0065デフォルトの名無しさん
2007/06/06(水) 22:55:11配列とポインタとメモリの関係を理解できて、
まだ学生であればプログラマーになれる。
0066デフォルトの名無しさん
2007/06/06(水) 22:57:220067デフォルトの名無しさん
2007/06/06(水) 22:59:23今現在は25歳のフリーター・・・
しかもパソコン一年生です・・・
0068デフォルトの名無しさん
2007/06/06(水) 23:01:39よほど才能が無い限り無理。
ほかの道を探したほうが自分のため。
0069デフォルトの名無しさん
2007/06/06(水) 23:03:00S(符号)は1ビットで仮数の符号を表す
E(指数部)は4ビットで指数を表し負数は2の補数で表現
M(仮数部)は11ビットで仮数の絶対値を表す
基数は2とする
仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す
小数点はEとMの位置にする
0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする
問.10進数の-5.25を2進数で表示しなさい
問.10進数の-0.125を2進数で表示しなさい
解き方と答えを教えて頂ければ幸いです
0070デフォルトの名無しさん
2007/06/06(水) 23:04:13>>1読んで書き直し
0071デフォルトの名無しさん
2007/06/06(水) 23:04:46#include <stdio.h>
#include <string.h>
struct data{ int point; char name[20];};
int input_data(struct data *x){
char temp[20];
printf("Name : "); scanf("%s", temp);
if(!strcmp(temp, "END")) return 0;
strcpy(x->name, temp);
printf("Point : "); scanf("%d", &(x->point));
while(x->point < 0 || x->point > 100){
printf("Sorry. Point is 0-100\n");
printf("Point : "); scanf("%d", &(x->point));
}
return 1;
}
void display_data(struct data *x){ printf("%3d %s\n", x->point, x->name);}
void bsort(struct data x[], int index){
int i, j;
for(i = 0; i < index-1; i++)
for(j = i+1; j < index; j++)
if(x[i].point < x[j].point){ struct data temp = x[i]; x[i] = x[j]; x[j] = temp;}
}
int main(void){
struct data x[10];
int i = 0, j;
while(i < 10 && input_data(&x[i])) i++;
bsort(x, i);
printf("-point- -name-------\n");
for(j = 0; j < i; j++) display_data(&x[j]);
return 0;
}
0072デフォルトの名無しさん
2007/06/06(水) 23:05:20亀ですが教えていただきありがとうございました。
0073デフォルトの名無しさん
2007/06/06(水) 23:06:18Cが書けるだけではプロにはなれない
上司・顧客が要求するモノを書けなければいけない 実は、どんな業種でも同じ事
でも、Cすらもかじったことないような営業は、事務職やってるアマのおいらでもイヤだ
納められたコードは必ず読む 逆汗に通す 腐ったコード納めるんじゃない。
顧客に、手抜きはわかると思ってほしい
その感覚が、Cやった人間なら、多少わかるんじゃないか
実装に苦心した様子だって逆汗からわかるもんさ ガキじゃないんだ 無下にはしない!
自分で、「自分の要求」をC/C++で実装してみろ。他人の苦労がわかるようになる
もう一度言う、Cが書けるだけではプロにはなれない
でも、Cはやっとけ。
Cとともにアセンブラが使え、「組み込みC」のスキルが取れれば、形勢は逆転かもw
0074デフォルトの名無しさん
2007/06/06(水) 23:09:060075デフォルトの名無しさん
2007/06/06(水) 23:09:55H Jungle With t
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
S(符号)は1ビットで仮数の符号を表す
E(指数部)は4ビットで指数を表し負数は2の補数で表現
M(仮数部)は11ビットで仮数の絶対値を表す
基数は2とする
仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す
小数点はEとMの位置にする
0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする
問.10進数の-5.25を2進数で表示しなさい
問.10進数の-0.125を2進数で表示しなさい
[3] 環境
[3.1] OS:Windows
[4] 期限: 6月7日午前10:30
[5] その他の制限:
GOIN GOINGは間違えてコピーしてしまいました、お気になさらないでください
007776
2007/06/06(水) 23:12:37007877
2007/06/06(水) 23:15:140079デフォルトの名無しさん
2007/06/06(水) 23:20:02課題:04A
#include<stdio.h>
void main(void)
{
int n,m,sum;
printf("整数nの入力==>");
scanf("%d",&n);
m = 0; sum = 0;
while(m < n){
sum+=++m;
}
printf("合計:%d\n",sum);
}
実行画面
整数nの入力==>5
合計:15
OS:Windows
コンパイラ名とバージョン: ボーランド
言語: C
[5] その他の制限:現在for文 if文 入力・出力・演算子
テーマ:繰り返し処理(while文)
問題:キーボードより整数nを入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15
0080デフォルトの名無しさん
2007/06/06(水) 23:21:06このスレで既出
0081デフォルトの名無しさん
2007/06/06(水) 23:24:30ただの浮動小数点の問題じゃねえか。消えろ
008271
2007/06/06(水) 23:35:46int input_data(struct data *x){
char temp[256];
printf("Name : "); scanf("%s", temp);
while(strlen(temp) >= 20){
printf("Error\n");
printf("Name : "); scanf("%s", temp);
}
if(!strcmp(temp, "END")) return 0;
strcpy(x->name, temp);
printf("Point : "); scanf("%d", &(x->point));
while(x->point < 0 || x->point > 100){
printf("Sorry. Point is 0-100\n");
printf("Point : "); scanf("%d", &(x->point));
}
return 1;
}
0083デフォルトの名無しさん
2007/06/06(水) 23:46:04strcmpを使わないでできますか?
0084デフォルトの名無しさん
2007/06/06(水) 23:49:45if(temp[0] == 'E' && temp[1] == 'N' && temp[2] == 'D' && temp[3] == '\0') return 0;
0085デフォルトの名無しさん
2007/06/06(水) 23:50:520086デフォルトの名無しさん
2007/06/06(水) 23:55:27不思議だなあ
0087デフォルトの名無しさん
2007/06/07(木) 00:30:490088デフォルトの名無しさん
2007/06/07(木) 00:37:14for(;i%20==0;)printf("\n");
0089デフォルトの名無しさん
2007/06/07(木) 00:38:26ただの質問ならスレ違い。宿題ならテンプレ通りに書いてな
0090デフォルトの名無しさん
2007/06/07(木) 00:38:4420行ある時点で少なくとも19回は改行してるんj(ry
0091デフォルトの名無しさん
2007/06/07(木) 00:53:20それ言っちゃいやーーーーーーんw
0092デフォルトの名無しさん
2007/06/07(木) 02:16:17[2] 問題文(含コード&リンク):
整数nを入力し入力された整数分”山”を表示せよ。
(例)
n=1
*
**
*
n=3
*
**
*
*
**
*
*
**
*
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Cygwin gcc
[3.3] 言語:C言語
[4] 期限:無理を承知で今晩中にお願いします。
起きてる方いたらお願いします。
0093デフォルトの名無しさん
2007/06/07(木) 02:19:59#include <stdio.h>
int main(void) {
int i,n;
printf("Input n > ");
scanf("%d",&n);
for(i=0; i<n; i++)
printf("*\n**\n*\n");
return 0;
}
0094デフォルトの名無しさん
2007/06/07(木) 02:20:58#include<stdio.h>
int main(void)
{
int i;
int n;
printf("n=");
scanf("%d", &n);
for( i = 0; i < n; i++ ) {
printf( "*\n" );
printf( "**\n" );
printf( "*\n" );
}
return 0;
}
0095デフォルトの名無しさん
2007/06/07(木) 02:25:55汚いプログラムで悪いが、エスパーしてみた。
#include<stdio.h>
int main(void)
{
int i;
int j;
int n;
printf("n=");
scanf("%d", &n);
for ( i = 0; i < n; i++ ) {
for ( j = 0; j <= i; j++ ) {
printf( "*" );
}
printf( "\n" );
}
for ( i = n - 1; i > 0; i-- ) {
for ( j = 0; j < i; j++ ) {
printf( "*" );
}
printf( "\n" );
}
return 0;
}
0096デフォルトの名無しさん
2007/06/07(木) 02:32:480097デフォルトの名無しさん
2007/06/07(木) 02:34:47初めて2週間でfor分の回し方がよく分からなかったので参考になります。
0098デフォルトの名無しさん
2007/06/07(木) 02:36:33せめて変数nだけは初期化して欲しい・・・
あと、ループするとこないなぁ。
入力を何度も受け付けるんだよね?
0099デフォルトの名無しさん
2007/06/07(木) 02:39:55エスパーはよく分からないですけど、そのソースも参考にさせていただきます。
0100デフォルトの名無しさん
2007/06/07(木) 02:44:230101デフォルトの名無しさん
2007/06/07(木) 03:00:420102デフォルトの名無しさん
2007/06/07(木) 04:21:250103デフォルトの名無しさん
2007/06/07(木) 04:24:47scanfで代入されるから初期化は意味無くね?
0104デフォルトの名無しさん
2007/06/07(木) 06:25:08scanfで代入されればの話な。
数字以外を入力されたらnには代入されんよ。
そうすると何が入っているかは実行環境ごとのお楽しみに。
0105デフォルトの名無しさん
2007/06/07(木) 07:39:580106デフォルトの名無しさん
2007/06/07(木) 07:43:39[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:ボーランド
[3.3] 言語:C言語
テーマ:繰り返し処理(do〜while文)
問題:収支と金額を入力し、残高を求め表示しなさい
残高の処理値は0とする
収支0は収入、収支1は支出、収支に不の値が入力されたら、データの終了とする
実行画面
収支、金額==>0,10000
収支、金額==>1,1500
収支、金額==>1,2300
収支、金額==>0,3000
収支、金額==>1,4800
収支、金額==>1,560
収支、金額==>-10
残高:3840円
0107デフォルトの名無しさん
2007/06/07(木) 08:04:28#include <stdio.h>
int main(void){
int syuushi, kingaku, zandaka = 0;
do{
printf("収支、金額==>");
scanf("%d%d", &syuushi, &kingaku);
if(syuushi == 0)
zandaka += kingaku;
else if(syuushi == 1)
zandaka -= kingaku;
}while(syuushi >= 0);
printf("残高:%d円\n", zandaka);
return 0;
}
0108デフォルトの名無しさん
2007/06/07(木) 09:02:03[2] 問題文(含コード&リンク):
長さ157以下の英数字,空白の並びからなる文字列を二つ入力し,
それぞれをa1, a2とする. a1が"abc",a2が"ab"の場合のように,
a2の先頭部分がa1の先頭部分に含まれるときは1を,そうでないときは0を値として
返す関数 int match(char *a1, char *a2);を作成しなさい.
配列宣言を除きすべてポインタを用いて処理すること.
文字列は157文字以下が入力されるものとし,文字列の長さに関するエラー処理を
する必要はない.
計算の手順としては,文字列の先頭から一文字ずつ一致するかどうかを比較する.
a2にあたる文字列中の比較対象となった文字が'\0'であれば,a2はa1に包含された
ものとして扱う.これ以外で比較時に,一文字でも一致しない場合があれば
包含されていないとして扱う.
この関数をもちいて,2つの文字列を与えたとき,一つ目の文字列の中に二つ目の
文字列が含まれている場合(この場合先頭が必ずしも一致していなくてもよいものとする)
には "一致"をさもなければ"不一致"を出力するプログラムを作成しなさい.
[3] 環境
[3.1] OS:Windows
[4] 期限: 6月7日午前10:30
[5] その他の制限:
よろしくお願いいたします。
0109デフォルトの名無しさん
2007/06/07(木) 09:08:57[home@C*LPC* ~/test]% ./test
abc
ab
一致
[home@C*LPC* ~/test]% ./test
ab
abc
不一致
[home@C*LPC* ~/test]% ./test
abc
abd
不一致
[home@C*LPC* ~/test]% ./test
abc
bc
一致
[home@C*LPC* ~/test]%
0110デフォルトの名無しさん
2007/06/07(木) 09:20:58void main(void)
{
int n,m,sum;
printf("整数nの入力==>");
scanf("%d",&n);
m = 0; sum = 0;
while(m < n){
sum+=++m;
}
printf("合計:%d\n",sum);
}
実行画面
整数nの入力==>5
合計:15
このプログラムをdo〜while文に変えたやつ何方か作ってください(ノ_<。)
0111デフォルトの名無しさん
2007/06/07(木) 09:27:05#include <stdio.h>
#include <string.h>
int match(char *a1, char *a2){
int i = 0, j = 0;
while(a2[j] != '\0'){
if(a1[i] == '\0')
return 0;
else if(a1[i] == a2[j])
i++, j++;
else
i++, j = 0;
}
return 1;
}
int main(void){
char a1[158], a2[158], *p;
fgets(a1, 158, stdin);
fgets(a2, 158, stdin);
p = strchr(a1, '\n'), *p = '\0';
p = strchr(a2, '\n'), *p = '\0';
if(match(a1, a2))
printf("一致\n");
else
printf("不一致\n");
return 0;
}
0112デフォルトの名無しさん
2007/06/07(木) 09:31:24#include<stdio.h>
int main(void)
{
int n,sum=0;
printf("整数nの入力==>");
scanf("%d",&n);
do sum+=n--;while(0 < n);
printf("合計:%d\n",sum);
return 0;
}
0113デフォルトの名無しさん
2007/06/07(木) 09:33:12#include <stdio.h>
void main(void)
{
int n, m, sum;
printf("整数nの入力==>");
scanf("%d",&n);
m = 0, sum = 0;
do{
sum += ++m;
}while(m < n);
printf("合計:%d\n",sum);
}
0114デフォルトの名無しさん
2007/06/07(木) 09:42:35ありがとうございました。助かりました^^
0115デフォルトの名無しさん
2007/06/07(木) 09:47:44マルチ氏ね
0116デフォルトの名無しさん
2007/06/07(木) 10:01:00-―-
. ´ ` 、
' , i l ! ヽ ヽ
〈\ .〃/‐リノ ノリ)ヘヽ.\`
,' ヽ \ /,ィ'"|` f'!ヽト、!_ヽ! / ̄ ̄ ̄ ̄ ̄
l//, ゙{0))! ヒ1! ,l.!,. l、 | | |
' /l/` リl、"´ !7 イゝ| | < お呼びに?
'´ l/_i_リ,! r__´ リ r‐ '、 |
'「 , ‐ゝ>r'l〉く.、 {` ト、 \_____
く,`l ,.`Kト〉ヾ ヽ,TT.ソ
ゝL ヾ.l、〉,!、' ` ' }/
,. -\ ヽ'ヽ 〉ーr'
! ー〉 ヽ __/ | |
`>/ 》ー-‐'l | |
く./ くj l} | |
// 「i. k | |
,.' / >! l} | |
j / r'j i1 | |
^!,' k1 k' | |
0117デフォルトの名無しさん
2007/06/07(木) 10:04:340118デフォルトの名無しさん
2007/06/07(木) 10:13:040119デフォルトの名無しさん
2007/06/07(木) 11:27:33環境:if文・do〜while文・while文・for文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:多分岐処理(switch〜case文)
問題1:整数nを入力し、nが1:ABC、nが2:DEF、nが1,2以外:XXXを表示しなさい
実行画面
整数nの入力==>1
ABC
整数nの入力==>2
DEF
整数nの入力==>10
XXX
問題2:成績(A、B、C、D)を入力し、評価を表示しなさい
実行画面
成績入力==>A
評価:たいへん優秀です
成績入力==>a
評価入力:たいへん優秀です
成績入力==>B
評価:普通です
成績入力==>C
評価:上を目指しましょう
成績入力==>D
評価:もっと頑張りましょう
成績入力==>E
評価:成績の入力エラーです
0120デフォルトの名無しさん
2007/06/07(木) 11:58:09環境:if文・do〜while文・while文・for文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数5のarrayの合計を求めなさい
int array[5] = {3,8,2,10,1}
実行画面
合計:24
0121デフォルトの名無しさん
2007/06/07(木) 12:46:06int sum=0;
int i=5;
int array[5] = {3,8,2,10,1};
while(i-->0)
sum+=array[i];
printf("%d",sum);
return 0;
0122デフォルトの名無しさん
2007/06/07(木) 13:03:59[2] 問題文(含コード&リンク):
姓,名,年齢,郵便番号,電話番号の各データをメンバとする構造体配列を下記のように宣言し,
その構造体配列にキーボードからデータを逐次入力して,最大100名のデータを格納できるようにしなさい。
但し,入力の終了は,姓入力の際にnullと入力することによって判定しなさい。また,入力が終了した時点で,
格納された複数名のデータをすべて出力するようにしなさい。
#define MAXREC 100
struct namelist {
char last_name[21], first_name[21];int age;char zip[9], tel[13];
} meibo[MAXREC];
▼出力例
Last name(終了はnull入力)> Natsume↵
First name > Soseki↵
Age > 49↵
Zip code > 123-4567↵
Telephone > 0120-1234567↵
Last name(終了はnull入力)> null↵
Name : Soseki Natsume
Age : 49
Zip code : 123-4567
Telephone: 0120-1234567
[3] 環境
[3.1] OS: Windows [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C
[4] 期限: 明日まで
よろしくお願いします。
0123デフォルトの名無しさん
2007/06/07(木) 13:04:08[2] 問題文(含コード&リンク):キーボードから入力される2つの整数を変数a、bに格納し、
aの0乗からaのb乗までを順に出力するプログラムを作成せよ。
ただし変数bは0以上の整数が入力されるまで、入力を繰り返すものとする。
【ヒント】
aに2、bに3を入力した場合の実行結果は
2の0乗 = 1
2の1乗 = 2
2の2乗 = 4
2の3乗 = 8
となる。
【発展】
bに負の値が入力された場合も、
計算結果を出力するように拡張しなさい。
このとき、計算結果は実数(小数)で表示すること。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:visual studio 2005
[3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: #include<stdio.h> ヘッダーは←だけを使って。
お願いします
0124デフォルトの名無しさん
2007/06/07(木) 13:24:54発展も一緒にしてくれるとうれしいです
0125デフォルトの名無しさん
2007/06/07(木) 13:36:35すげー簡単な初歩的な部分だと思うんだけど
それを他人まかせでやらせて自分は大丈夫なのか?
たぶん学生だと思うけど、自分の為に少しはソース書いてみたら?
0126デフォルトの名無しさん
2007/06/07(木) 13:40:03#include <stdio.h>
int main(void)
{
int a, b, i, sign = 0;
double n;
while (scanf("%d %d", &a, &b) != 2) {
clearerr(stdin);
scanf("%*[^\n]\n");
}
if (b < 0) {
sign = 1;
b *= -1;
}
for (i = 0, n = 1.0; i <= b; ++i, n *= a)
printf("%dの%d乗 = %g\n", a, i, sign ? 1.0 / n : n);
return 0;
}
0127デフォルトの名無しさん
2007/06/07(木) 13:41:27#include <stdio.h>
int main(void) {
int a,b,i,res;
printf("Input a > ");
scanf("%d",&a);
printf("Input b > ");
scanf("%d",&b);
for(i=0,res=1; i<b; i++) {
printf("%dの%d乗 = %d \n",a,i,res);
res*=a;
}
return 0;
}
0128デフォルトの名無しさん
2007/06/07(木) 13:50:48#include <stdio.h>
int main(void) {
int a,b,i;
double res=1.0;
printf("Input a > ");
scanf("%d",&a);
if(a==0) return 1;
printf("Input b > ");
scanf("%d",&b);
if(b>=0) {
for(i=0; i<=b; i++) {
printf("%dの%d乗 = %.0lf \n",a,i,res);
res*=a;
}
}
else {
for(i=0,b*=-1; i<=b; i++) {
printf("%dの%d乗 = %lf \n",a,i,1.0/res);
res*=(double)a;
}
}
return 0;
}
0129デフォルトの名無しさん
2007/06/07(木) 13:52:590の0乗=1キターーーーーー!
0130デフォルトの名無しさん
2007/06/07(木) 13:53:07int i=0,last=0;
while(i<MAXREC)
{
printf("Last name(終了はnull入力)>");
scanf("%s",meibo[i].last_name);
if(strcmp(meibo[i].last_name,"null")==0)
break;
printf("First name >");
scanf("%s",meibo[i].first_name);
printf("Age >");
scanf("%d",&meibo[i].age);
printf("Zip code >");
scanf("%s",meibo[i].zip);
printf("Telephone >");
scanf("%s",meibo[i].tel);
last=i++;
putchar('\n');
}
printf("\n\n\n");
for(i=0;i<=last;i++)
{
printf("Name : %s %s\n",meibo[i].first_name,meibo[i].last_name);
printf("Age : %d\n",meibo[i].age);
printf("Zip code :%s\n",meibo[i].zip);
printf("Telephone:%s\n",meibo[i].tel);
putchar('\n');
}
0131デフォルトの名無しさん
2007/06/07(木) 14:00:290132デフォルトの名無しさん
2007/06/07(木) 14:05:11ついでに0の-n乗だと0で助産もキターーーー!
0133デフォルトの名無しさん
2007/06/07(木) 14:08:56char res;
printf("成績を入力してください(A〜D) ->>");
scanf("%c",&res);
if(res=='a')
res='A';
if(res=='b')
res='B';
if(res=='c')
res='C';
if(res=='d')
res='D';
printf("評価:");
switch(res)
{
case 'A' : printf("たいへん優秀です。\n"); break;
case 'B' : printf("普通です。\n"); break;
case 'C' : printf("上を目指しましょう。\n"); break;
case 'D' : printf("もっと上を目指しましょう\n"); break;
default : printf("成績の入力エラーです。"); break;
}
0134デフォルトの名無しさん
2007/06/07(木) 15:11:12[3] 環境
[3.1] OS:WinXP
[3.2] BorlandC++
[3.3] 言語:C++
[5] その他の制限:ヘッダファイルは<stdio.h>のみです。while、do、switchも使えないです。
例 acbd →abcdとなる
0135デフォルトの名無しさん
2007/06/07(木) 15:11:36[2] 問題文(含コード&リンク):入力した単語の長さをヒストグラムにしてプリントするプログラムを書け。ヒストグラムは横に書く方が簡単だが縦書きに挑戦してみるのもいい。
[3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限:#include<stdio.h> テーマ:一次配列 使えるもの:今まで学習した for文 while文 switch文 if文
改良点した方がいい点、問題点があったらお願いします。
#include <stdio.h>
#define IN 1 /* 単語の中 */
#define OUT 0 /* 単語の外 */
main(void)
{
int length[10];
int i , c , n, state;
n = 0; state = OUT;
for(i=0;i<10;i++){
length[i] = 0;
}
while((c = getchar()) != EOF){
if(c == ' ' || c == '\t' || c == '\n'){
if(state == IN) printf(" = %d\n",length[n]);
n++;
state = OUT;
}else{
putchar(c);
state = IN;
length[n]++;
}
}
return 0;
}
0136デフォルトの名無しさん
2007/06/07(木) 15:42:06[2] 問題文: 2つの数字を入力してそれらを加算した値を2進数で表示させる
[3] 環境
[3.1] WinXP
[3.2] BorlandC++
[3.3] 言語:C++
0137デフォルトの名無しさん
2007/06/07(木) 15:43:50なんっちゅーか、変な制限があると面倒だな。
#include <stdio.h>
int main(void) {
int c,i,j,pos;
char str[256],swp;
printf("Input string > ");
fgets(str,sizeof(str)/sizeof(str[0]),stdin);
for(i=0; str[i]!='\n'; i++) {
if( str[i]>='A' && str[i]<='Z' )
str[i]+='a'-'A';
}
for(i=0; str[i]!='\n'; i++) {
pos=i;
for(j=i+1; str[j]!='\n'; j++) {
if(str[pos]>str[j]) pos=j;
}
swp=str[pos];
str[pos]=str[i];
str[i]=swp;
}
printf("%s",str);
return 0;
}
0138デフォルトの名無しさん
2007/06/07(木) 15:50:18環境:if・for・while文
問題:複数件の整数を入力し、合計、件数、平均を求め表示しなさい
0が入力されたらデータの終了とし、合計、件数には反映しない実行画面
整数入力(0で終了)==>5
整数入力(0で終了)==>4
整数入力(0で終了)==>10
整数入力(0で終了)==>8
整数入力(0で終了)==>0
合計:27 件数:4 平均:6.8
0139デフォルトの名無しさん
2007/06/07(木) 16:14:19int kensu=0,sum=0,i=1;
while(i!=0)
{
scanf("%d",&i);
sum+=i;
if(i)
kensu++;
}
printf("合計:%d 件数:%d 平均%.1f\n",sum,kensu,(double)sum/kensu);
0140デフォルトの名無しさん
2007/06/07(木) 16:30:400141デフォルトの名無しさん
2007/06/07(木) 16:45:360142デフォルトの名無しさん
2007/06/07(木) 16:58:26#include <stdio.h>
#include <string.h>
int main(void){
int i = 0, j, k, max_len = 0;
char word[10][20];
while(i < 10){
printf("word : "); scanf("%s", word[i]);
if(max_len < (int)strlen(word[i])) max_len = strlen(word[i]);
i++;
}
for(k = 0; k < max_len; k++){
for(j = 0; j < i; j++){
if(k < (int)strlen(word[j])) printf("%c ", word[j][k]);
else printf(" ");
}
printf("\n");
}
for(k = 0; k < max_len; k++){
for(j = 0; j < i; j++){
if(k < (int)strlen(word[j])) printf("* ");
else printf(" ");
}
printf("\n");
}
return 0;
}
0143135
2007/06/07(木) 16:59:33とりあえずヒストグラムにして画面に出力するプログラムを作って提出しようと思うんで、誰かお願いします・・・
0144142
2007/06/07(木) 17:00:13printf(" ");はprintf(" ");にしといて
0145デフォルトの名無しさん
2007/06/07(木) 17:01:360146デフォルトの名無しさん
2007/06/07(木) 17:07:32ありがとうござます
大変申し訳ないんですが、135にもあるように #include<stdio.h> の制限があるのです
0147デフォルトの名無しさん
2007/06/07(木) 17:12:32#include <stdio.h>
int my_strlen(char *str){
int i = 0;
while(str[i++] != '\0');
return i;
}
int main(void){
int i = 0, j, k, max_len = 0;
char word[10][20];
while(i < 10){
printf("word : "); scanf("%s", word[i]);
if(max_len < my_strlen(word[i])) max_len = my_strlen(word[i]);
i++;
}
for(k = 0; k < max_len; k++){
for(j = 0; j < i; j++){
if(k < my_strlen(word[j])) printf("%c ", word[j][k]);
else printf(" ");
}
printf("\n");
}
for(k = 0; k < max_len; k++){
for(j = 0; j < i; j++){
if(k < my_strlen(word[j])) printf("* ");
else printf(" ");
}
printf("\n");
}
return 0;
}
0148147
2007/06/07(木) 17:14:25while(str[i] != '\0) i++;に変更plz
0149デフォルトの名無しさん
2007/06/07(木) 17:31:24[2] OS windos
[3]課題
長さ256文字以下の英数字,空白の並びからなる文字列を二つ
入力し,それぞれをT1, T2とする. T1の中にT2が出現する場
合に,その一番左に現れる文字列の先頭アドレスを値として返
す関数 char *findstr(char *t1, char *t2);を作成しなさい
.ただし,T1の中にT2が出現しないときはNULLを値として返す
ものとする.findstr()の中で,比較対象となるT1のなかの先頭文字を先頭
から一文字ずつずらして 7-2で用いたchkmatch()を呼び出すこ
とにより要求を満たす関数を作成することができる.
0150デフォルトの名無しさん
2007/06/07(木) 17:43:47> 7-2で用いたchkmatch()を呼び出すこ
7-2で用いたchkmatch()について悔しく
0151デフォルトの名無しさん
2007/06/07(木) 17:46:57この関数を用いて, 1)最初にT1を表示し,2)その次にT1の中
でT2の文字列が出現するまでの文字をスペース(' ')として端
末に出力し,そのあとT2の文字列文だけ(’^’)を出力し、
再度T2の文字列が出現するまでスペース(’ ’)を出力し..
というプロセスを文末まで続けるプログラムを作成しなさい。
3a)このプロセスは、findstrを実行して文字列の先頭を検索
し、そこまでスペースを出力する。3b)文字列の先頭が検出さ
れたら、T2の文字列分だけ(’^’)を出力する。3c)T2の
文字列分だけポインタを進め、そこからfindstrを再実行する
(3aにもどる)というプロセスを繰り返すことで完成する。
4)T2がT1に出現しない場合はT1の文字数だけのスペースが表
示されるようにすること.
配列宣言を除き,すべてポインタを用いて処理すること.文字
列の長さに関するエラー処理をする必要はない.
0152デフォルトの名無しさん
2007/06/07(木) 17:48:30#include <stdio.h>
void nishin(int c)
{
if (!c) return;
nishin(c>>1);
printf("%d", c&1);
}
int main()
{
int a,b;
scanf("%d", &a);
scanf("%d", &b);
nishin(a+b);
return 0;
}
0153デフォルトの名無しさん
2007/06/07(木) 17:50:13[5] 実行結果
[home@C*LPC* ~/test]% ./test
pen and pencils
pen
pen and pencils
^^^ ^^^
[home@C*LPC* ~/test]% ./test
Government of the people by the people for the people
people
Government of the people by the people for the people
^^^^^^ ^^^^^^ ^^^^^^
[home@C*LPC* ~/test]%
特に、検索文字列が重複している場合も正確に検出できるよう
にせよ。例えば、下記のような出力となる。
[home@C*LPC* ~/test]% ./test
aaaaaaaaaaaaaaaaabbaaa
aaaa
aaaaaaaaaaaaaaaaabbaaa
^^^^^^^^^^^^^^^^^
[home@C*LPC* ~/test]%
宜しくお願いします。
続けての書き込みすいませんでした…
0154デフォルトの名無しさん
2007/06/07(木) 17:54:39#include <stdio.h>
#include <string.h>
char *findstr(char *t1, char *t2)
{
return strstr(t1, t2);
}
int main()
{
char T1[500],T2[500];
scanf("%s", T1);
scanf("%s", T2);
printf("%s\n", findstr(T1, T2));
return 0;
}
0155デフォルトの名無しさん
2007/06/07(木) 17:56:080156デフォルトの名無しさん
2007/06/07(木) 18:01:23strstr(s, find)
const char *s, *find;
{
char c, sc;
size_t len;
_DIAGASSERT(s != NULL);
_DIAGASSERT(find != NULL);
if ((c = *find++) != 0) {
len = strlen(find);
do {
do {
if ((sc = *s++) == 0)
return (NULL);
} while (sc != c);
} while (strncmp(s, find, len) != 0);
s--;
}
/* LINTED interface specification */
return ((char *)s);
}
0157デフォルトの名無しさん
2007/06/07(木) 18:01:34[2] 問題文(含コード&リンク):a,b,cをキーボードから入力し、最小値を出力するプログラムを作成せよ。3項演算子を用いること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: CC
[3.3] 言語: C++
[4] 期限: 6月7日 21:00まで
[5] その他の制限:
基本なのだと思いますが、どうかよろしくお願いします。
0158デフォルトの名無しさん
2007/06/07(木) 18:14:00#include <stdio.h>
int main(void){
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("min : %d\n", a > b ? b > c ? c : b : a > c ? c : a);
return 0;
}
0159デフォルトの名無しさん
2007/06/07(木) 18:14:52ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4177.c
> 7-2で用いたchkmatch()
を妄想実装して、string.hを使用しないで書いてみたが、これで良いんだろうか?
0160デフォルトの名無しさん
2007/06/07(木) 18:27:35[2]
1.Person Classを作り、身長、体重をメンバ変数とする。各メンバ変数へアクセスするメンバ関数を作り、Aくん、Bくん、Cくんの身長、体重、を出力する。
2.身長、体重の和と平均を出力する。
3.World Classを作る。そのメンバ変数に、Person Classの
インスタンスであるAくん、Bくん、Cくんを入れて、身長、体重の平均を出力する。
[3] 環境
[3.1] OS: WindowsXP
[3.2] visual studio
[3.3] C++
[4] 6月7日20:00まで
[5] 初歩的なんですけど、お願いします。
0161デフォルトの名無しさん
2007/06/07(木) 18:32:000162デフォルトの名無しさん
2007/06/07(木) 19:06:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4178.c
fgetsで改行コードも含まれた文字列のせいで、比較がうまくいってなかったようだ。
scanfだと空白は無効になるから、とりあえずこれで対処でうまく行った?かと。
0163デフォルトの名無しさん
2007/06/07(木) 20:08:34int main(void)
{
return 0;
}
0164デフォルトの名無しさん
2007/06/07(木) 20:30:04#include <stdio.h>
int main(void)
{
printf("%c %c %c %c %c %c\n",110,117,114,117,112,111);
return 0;
}
0165デフォルトの名無しさん
2007/06/07(木) 20:34:580166デフォルトの名無しさん
2007/06/07(木) 20:37:240167デフォルトの名無しさん
2007/06/07(木) 20:47:39Aくん、Bくん、Cくんのデータは既知なん?(´・ω・`)
0168デフォルトの名無しさん
2007/06/07(木) 20:50:02ッガ!
0169デフォルトの名無しさん
2007/06/07(木) 20:59:060170デフォルトの名無しさん
2007/06/07(木) 21:00:06#include <stdio.h>
int main(void) {
int *x=NULL;
return x; }
0171771
2007/06/07(木) 21:02:09同一のアプリは表示できなくなる方法を教えて下さい。
ちなみに環境はBorland C++ Builder5.0です。
0172デフォルトの名無しさん
2007/06/07(木) 21:24:15class Person{
double height;
double weight;
public :
Person(double h,double w){height=h;weight=w;}
double GetHeight(){return height;}
double GetWeight(){return weight;}
};
int main()
{
Person A(170.5,68.9),B(180.9,78.6),C(160.8,41.2);
double HeightSum=A.GetHeight()+B.GetHeight()+C.GetHeight();
double WeightSum=A.GetWeight()+B.GetWeight()+C.GetWeight();
cout <<"Aくんの身長:"<<A.GetHeight()<<endl;
cout <<"Aくんの体重:"<<A.GetWeight()<<endl;
cout <<"Bくんの身長:"<<B.GetHeight()<<endl;
cout <<"Bくんの体重:"<<B.GetWeight()<<endl;
cout <<"Cくんの身長:"<<C.GetHeight()<<endl;
cout <<"Cくんの体重:"<<C.GetWeight()<<endl;
cout <<"平均身長:"<<HeightSum/3<<endl
<<"平均体重:"<<WeightSum/3<<endl;
return 0;
}
0173デフォルトの名無しさん
2007/06/07(木) 21:33:34World Classはどこに?
0174デフォルトの名無しさん
2007/06/07(木) 21:34:29http://worldclassmode.biz/
0175デフォルトの名無しさん
2007/06/07(木) 21:36:36死ね
0176デフォルトの名無しさん
2007/06/07(木) 21:37:41断る
0177デフォルトの名無しさん
2007/06/07(木) 21:38:40死ねったら死ね死ね死ね死ね
0178デフォルトの名無しさん
2007/06/07(木) 21:39:24や〜だねやだやだやだやだ
0179デフォルトの名無しさん
2007/06/07(木) 21:39:52HANDLE hMutex;
hMutex=CreateMutex(NULL,TRUE,TEXT("hoge"));
if(GetLastError()==ERROR_ALREADY_EXISTS){
MessageBox(NULL,TEXT("hoge"),TEXT("hoge"),MB_OK)
return 0;
もしくは
if(FindWindow(TEXT("hoge"),NULL)!=NULL)
return 0;
0180デフォルトの名無しさん
2007/06/07(木) 21:40:02くれぐれも、0^0=1なんてソースは書くなよ
0181デフォルトの名無しさん
2007/06/07(木) 21:55:47Worldクラスの仕様をもう少し、
というか全体的に質問する時はもう少し詳細に書くべきだと思うよ?(´・ω・`)
とりあえず入れるだけなら
class World{
public :
World();
Person A;
};
ていうかこんなの書くより
http://www.kumei.ne.jp/c_lang/cpp/cpp_14.htm
ここ見たほうが幸せになれると思う。
0182デフォルトの名無しさん
2007/06/07(木) 21:56:36ふりってことでおk?
0183デフォルトの名無しさん
2007/06/07(木) 22:24:39[2] 問題文:
例に示す数値が有効か無効か判定せよ。
数値はキーボードで入力し、gets()を使うこと。
例
有効 無効
0 00010
00000 1,00,00000
10,000,000 0,10000000
100,000,000 1,000000,0
結果は入力数値とステータスのみ出力する
(例)
入力数値:0
判定結果:有効
入力数値:00010
判定結果:無効
入力数値:10,000,000
判定結果:有効
入力数値:1,00,00000
判定結果:無効
[3] 環境
[3.1] OS:win xp
[3.2] コンパイラ名とバージョン:vc6.0
[3.3] 言語:c言語
[4] 期限:6月8日 9:00
急な期限で申し訳ないですが、よろしくお願いします。
0184デフォルトの名無しさん
2007/06/07(木) 22:27:24数値の例を訂正します。すいません。
例
有効 無効
0 00010
00000 1,00,00000
10,000,000 0,10000000
100,000,000 1,000000,0
0185デフォルトの名無しさん
2007/06/07(木) 22:31:50それ以外の入力はすべて無効でいいのか?
0186デフォルトの名無しさん
2007/06/07(木) 22:40:14ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4128.c
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4129.c
0187デフォルトの名無しさん
2007/06/07(木) 22:41:580188デフォルトの名無しさん
2007/06/07(木) 22:42:07例に示している8つの数値だけです。
解けていない私が言うのもなんですが、
数値として正しい表記が有効だそうです。
例えば、123,45はコンマの位置がおかしいので無効。
7, 781 は有効に見えても、スペースがあるから無効とか。
数値として無効な0もダメだそうです。
0や00はOKでも01はダmだそうです。
わかりずらければ、すいませんです。
0189デフォルトの名無しさん
2007/06/07(木) 22:44:14ズラとか言っちゃ駄目!
0190デフォルトの名無しさん
2007/06/07(木) 22:45:260191デフォルトの名無しさん
2007/06/07(木) 22:48:26参考になります。ソースをいじってみます。ありがとうございます。
前スレは1000レスもあるので、全部は確認できてませんでした。。。
>>189
はい。づらが正しい表記だと思います。
0192デフォルトの名無しさん
2007/06/07(木) 22:51:37先頭にスペースがある場合は飛ばす仕組みになっているから、そこを外すなり
符号の+−は有効になっていて、その次が0でない数値なら有効といった流れだから
先頭に数字が来ていなければ無効にする形に書き換えればおkかと。
0193デフォルトの名無しさん
2007/06/07(木) 23:04:09>数値はキーボードで入力し、gets()を使うこと。
( ´,_ゝ`)プッ
0194デフォルトの名無しさん
2007/06/07(木) 23:11:08ttp://www.youtube.com/watch?v=YDw3cdxMiiU&mode=related&search=
0195デフォルトの名無しさん
2007/06/07(木) 23:16:58[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4180.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 6月8日
[5] その他の制限:
自分にはできません、お願いします
0196デフォルトの名無しさん
2007/06/07(木) 23:19:12#include<stdio.h>
#define isnum(c) ('0'<=c && c<= '9')
int check(char *s){
int i = 0, f = 1;
if(*s == '0'){
while(*s && *++s == '0');
return !*s;
}else{
while(isnum(*s)){
while(*s && isnum(*s)){ i++; s++; }
if(i>3) return 0;
if(!*s && (f || i == 3)) return 1;
if(*s == ','){ i = f = 0; s++; }
}
return 0;
}
}
int main(){
char s[256];
while(1){
printf("入力数値:");
gets(s);
printf("判定結果:%s\n\n",check(s)?"有効":"無効");
}
}
途中であきらめた
0197デフォルトの名無しさん
2007/06/07(木) 23:30:350198デフォルトの名無しさん
2007/06/07(木) 23:33:54え?無効でいいんじゃないの?1,000だろ?
0199デフォルトの名無しさん
2007/06/07(木) 23:36:100200デフォルトの名無しさん
2007/06/07(木) 23:40:10なんとなくだけど
0201171
2007/06/07(木) 23:42:06ありがとう。
0202デフォルトの名無しさん
2007/06/07(木) 23:45:54いえいえ、というか今見返したら上のやり方の方で
テスト用に書いたMessageBoxのあたり中途半端に消し忘れてた・・・orz
0203デフォルトの名無しさん
2007/06/07(木) 23:56:51>>186みたいなごちゃごちゃしたものにならずに済む罠。
0204デフォルトの名無しさん
2007/06/08(金) 00:42:07[2] ttp://www-2ch.net:8080/up/download/1181230743729546.jPSXRN
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:Borland C++ Compiler
[3.3] 言語: C
[4] 期限: 6月8日 午前8時以内
[5]
[2]のリンク先passは syukudai です。
0205デフォルトの名無しさん
2007/06/08(金) 00:45:05重くてつながらない
メンドクせ
0206204
2007/06/08(金) 00:46:34私の確認不足で二次曲線の表示にミスがありました。
製作途中のプログラムも載せてあるので気づかれた方がほとんどかと思います。
申し訳ない
0207デフォルトの名無しさん
2007/06/08(金) 00:57:52whileの中身だけ。
while(x<=8.0)
{
y=(int)pow((double)x,(double)2);
printf("%4.1f",x);
for ( i = 0; i < y; i++ ) {
printf( " " );
}
printf("*\n");
x=x+1;
}
0208デフォルトの名無しさん
2007/06/08(金) 02:21:39[2] 問題文(含コード&リンク): BIOSを書き換えてパソコンを起動できなくするプログラムを作成せよ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc32
[3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限:
お願いします
0209デフォルトの名無しさん
2007/06/08(金) 02:27:13そんな課題でるかよw
0210デフォルトの名無しさん
2007/06/08(金) 02:33:42BIOSのROMを抜いた方が早いだろw
0211デフォルトの名無しさん
2007/06/08(金) 02:35:36[2] 問題文(含コード&リンク): (´・ω・`)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc32
[3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限:
0212デフォルトの名無しさん
2007/06/08(金) 02:54:220213デフォルトの名無しさん
2007/06/08(金) 02:59:24(´・ω・`) < 俺と一緒にCをやらないか?
0214デフォルトの名無しさん
2007/06/08(金) 03:23:43#include <stdio.h>
#include <math.h>
int main()
{
int y,i;
double x=-8.0;
printf(" 1 2 3 4 5 6 7\n");
printf(" 01234567890123456789012345678901234567890123456789012345678901234567890\n");
while(x<=8.0){
y=(int)pow(x,2);
printf("%+.1f",x);
for(i = 0; i <= y; i++)
putchar(' ');
putchar('*');
putchar('\n');
x+=1.0;
};
return 0;
}
0215214
2007/06/08(金) 03:31:05ま、変更点はint iの宣言と、while文のみです
0216デフォルトの名無しさん
2007/06/08(金) 03:37:51えーと、問題文は?
0217デフォルトの名無しさん
2007/06/08(金) 04:38:38#include <stdio.h>
int main(void)
{
printf("(´・ω・`)");
return 0;
}
0218デフォルトの名無しさん
2007/06/08(金) 04:57:14これが・・・も・・・・萌えってやつなのか・・・
0219195
2007/06/08(金) 08:05:450220デフォルトの名無しさん
2007/06/08(金) 08:37:28>matrixA[ i ][ 0 ] ? matrixB[ 0 ][ j ] + matrixA[ i ][ 1 ] ? matrixB[ 1 ][ j ] + ・ ・ ・
>・ ・ ・+matrixA[ i ][ m? 1 ] ? matrixB[ m ? 1 ][ j ]
これでどうしろと?
0221デフォルトの名無しさん
2007/06/08(金) 08:42:500222デフォルトの名無しさん
2007/06/08(金) 08:54:57% test
l とm を入力してください: 2 3
行列A を入力してください
> 2 4 8
> 7 3 3
n を入力してください(m = 3): 4
行列B を入力してください
> 4 5 2 7
> 5 6 2 8
> 1 2 3 6
C=
36 50 36 94
46 59 29 91
%
--
これだけ判っていれば作れるだろ。
0223195
2007/06/08(金) 09:14:52・ ・ ・+matrixA[ i ][ m - 1 ] * matrixB[ m - 1 ][ j ]
文字化けしてた
0224デフォルトの名無しさん
2007/06/08(金) 09:16:36#include<stdio.h>
#define N 99
int matrixA[N][N];
int matrixB[N][N];
int matrixC[N][N];
void read(int matrix[N][N],int x,int y){
int i,j;
printf("enter matrix\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
scanf("%d",&matrix[i][j]);
}
}
}
int main(){int i,j,k,n,l,m;
printf("m=?n=?");
scanf("%d %d",&m,&n);
read(matrixA,m,n);
0225デフォルトの名無しさん
2007/06/08(金) 09:18:43printf("l=?");
scanf("%d",&l);
read(matrixB,n,l);
for(i=0;i<m;i++){
for(j=0;j<l;j++){
for(k=0;k<n;k++){
matrixC[i][j]+=matrixA[i][k]*matrixB[k][j];
}
}
}
printf("C=\n");
for(i=0;i<m;i++){
for(j=0;j<l;j++){
printf("%2d ",matrixC[i][j]);
}
printf("\n");
}
}
0226195
2007/06/08(金) 09:51:460227デフォルトの名無しさん
2007/06/08(金) 10:01:21[2] 問題文(含コード&リンク):
whileループを用いて、等差数列
1+3+5+7+...+9999
を計算するプログラムを作成せよ。複合代入演算子を使用すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: c++
[4] 期限: 6月8日16:00まで
[5] その他の制限:
どうぞよろしくお願いします。
0228デフォルトの名無しさん
2007/06/08(金) 10:06:51/´ ヽ` ̄ ー-゙:.、
i - 、 `ヽ_
l: 、.: ヽ ゙i"
! i ; n .:c.: ', _..ハ
| ハ/ { _,..-ァノ 、r‐、>ー ヽ
| ト./ ` ̄__,.:=彡 :.ヾ、ニ二 /
. | |ノ -=< ゙=tラ'"
| / ,-一'" ̄´ i
|:/ / \:. !
| ' / ヽ:. :、 \
゙、 ノ .i:. ` ヽ
`ー' _:/__:. `ー---─ ''"´ ̄ ̄`` ー- 、
/´ `ヽ、. .: `ヽ、
/ `ヽ、 ゙i
i :; ,!
! ‐-、 :. ;: .:' /
ヽ ヽ ; j:! " __..:-‐'"´ ̄ ̄` __ノ
\ ! .:' 〃 ,..:---─‐'"´ __.. -──── ''"´
`ヽ、 ヽ、 ノー;'"、二:.:'ー--ァ'"´
`ヽ、 >:).......ヽ、_∨:/` ̄i
....:::::::::::にニニイ::::::::::::::::ヾK.._.ノ、
....::::::::::::::::::,! _ i!:::::::::::::::::..ヾ:、__/ ミ、::::::::::::::::.........
..::::::::::::::::::::::::!`´_` .! `===='' :::::::::::::.......
::::::::::::::::::::::::::k'´! i ,``;|
..:::::::::::::::::::::ヾ三三ノ
0229デフォルトの名無しさん
2007/06/08(金) 10:56:50int an(int n)
{
return (2*n-1);
}
int main()
{
int sum=0;
int n=1;
while(n<=5000)
sum+=an(n++);
cout<<sum<<endl;
return 0;
}
0230デフォルトの名無しさん
2007/06/08(金) 13:19:13#include <iostream>
using namespace std;
int main() {
int sum=0;
int n=1;
while(n<=9999) {
sum+=n; n+=2;
}
cout<<sum<<endl;
return 0;
}
0231デフォルトの名無しさん
2007/06/08(金) 14:33:30[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4183.txt
このソースを使って2.3行列Aと2.3行列Bの転置行列Cの積である2.2行列Dを求めようとしたのですが、答えが出ません。
エラーを消していってこの形までになったのですが、もうお手上げです。助けてください。
[3.1] Windows
[4]明後日まで
0232デフォルトの名無しさん
2007/06/08(金) 14:57:13> if(l=0)
とか、これじゃ代入であって比較じゃないよ。
ttp://ja.wikipedia.org/wiki/%E8%BB%A2%E7%BD%AE%E8%A1%8C%E5%88%97
0233デフォルトの名無しさん
2007/06/08(金) 15:02:12d_method()が無限ループになってるてのは、>230の指摘にあるけど、
そもそも0と1で場合わけしたらループにする意味が全くないぞ。
ついでに言えばb_rebirth()(関数名としては意味がおかしい)も転置してない。
0234デフォルトの名無しさん
2007/06/08(金) 15:04:010235デフォルトの名無しさん
2007/06/08(金) 15:18:26b_rebirth()の C[i][j] は C[j][i] じゃないと単なるBのコピーにしかならない。
d_method()は一般化しないんなら
D[0][0] = A[0][0] * C[0][0] + A[0][1] * C[1][0] + A[0][2] * C[2][0];
D[0][1] = A[0][0] * C[0][1] + A[0][1] * C[1][1] + A[0][2] * C[2][1];
D[1][0] = A[1][0] * C[0][0] + A[1][1] * C[1][0] + A[1][2] * C[2][0];
D[1][1] = A[1][0] * C[0][1] + A[1][1] * C[1][1] + A[1][2] * C[2][1];
をそのまま書いたほうが無駄にループで書くよりマシ。
0236デフォルトの名無しさん
2007/06/08(金) 15:19:150237デフォルトの名無しさん
2007/06/08(金) 16:49:58[2] 問題文:
1行1単語の形式で単語が辞書順にならんでいる辞書ファイルがある。
(例えば http://www.jp.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/share/dict/web2?rev=1.12&content-type=text/plain
で入手できる)
引数で渡された単語を辞書からCase無視で先頭一致検索し、
マッチした単語を全て標準出力に出力せよ。
辞書内の配列が昇順であることを利用して、なるべく効率のよいアルゴリズムを
考えてみよ。
[3] 環境
[3.1] OS: Windows XPまたはLinux
[3.2] コンパイラ: Visual Studio 2005またはgcc
[3.3] 言語: C++
[4] 期限: 6/11 午前10時
[5] その他の制限: 特になし。C風のプログラムでも構いません。
0238237
2007/06/08(金) 17:26:39もっと良いやりかたがあったらおねがいします。
#include <cstring>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define DICT "web2"
int main(int argc, char **argv)
{
if (argc == 1) return 1;
size_t wlen = strlen(argv[1]);
ifstream dict(DICT);
if (!dict) return 2;
string s;
while (getline(dict, s)) {
int n = strncasecmp(s.c_str(), argv[1], wlen);
if (n == 0) cout << s << endl;
else if (n > 0) break;
}
return 0;
}
0239211
2007/06/08(金) 19:21:58#include <stdio.h>
int main(void)
{
printf("(´・ω・)<�d");
return 0;
}
0240デフォルトの名無しさん
2007/06/08(金) 21:39:49[2] 問題文(含コード&リンク):
関数f(x)は次式で与えられる。
f(x)=x+x*x/4+x*x*x/9+……+xのn乗/n*n+……
上式右辺の無限級数は、第n項(xのn乗/n*n)の絶対値が最初に0.000001より小さく
なる項までの和で打ち切っても近似的には問題ないものとする。
x=0.1, 0.2, 0.3, 0.4, …, 0,9, 1におけるf(x)の値を計算して表示するプログ
ラムをつくれ。
[実行例]
f(0.1)=0.202618
f(0.2)=0.411004
f(0.3)=0.626129
f(0.4)=0.849283
:
:
f(0.9)=2.19971
f(1)=2.64393
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C++
[4] 期限:6月10日まで
[5] その他の制限:
よろしくお願いします。
0241デフォルトの名無しさん
2007/06/08(金) 21:57:25[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
各要素が整数の2つの10次元ベクトルをキーボードから入力し,2つのベクトルの和
及び内積をサブルーチンで求めて表示せよ. ベクトルは配列で表現せよ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
0242デフォルトの名無しさん
2007/06/08(金) 21:57:49[2] 問題文:
ファイルからデータを読み込み、pointが85以上、gpa<2,0のデータだけを表示しなさい。
続いて、(1)ファイルの内容を全て表示し、次に上記の条件に合致するデータだけを別ファイルに書き出し
さらにこのファイルを読み込んで表示せよ。
最後に、point、gpaの平均を計算して同じファイルのデータ後に書き出し、そのファイル内容を読み込み表示せよ。
(つまり2.3,4を表示)
x-file.tex↓
1 alice 48 3.6
2 bob 88 3.2
3 charlie 69 1.8
4 dick 100 3.9
5 bomb 3 0.4
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ: Visual Studio 2005またはgcc
[3.3] 言語: C++
[4] 期限: 6/11 08:40まで
[5] その他の制限: for loop、配列のどちらを使ってもよい。ただし配列ならばdefineを使って実行したほうがよい。
一問が多すぎるのですがどうかよろしくお願いします。
0243デフォルトの名無しさん
2007/06/08(金) 22:00:58あとdefineで定義とはN Mを3とか5に定義して使えということです。
0244デフォルトの名無しさん
2007/06/08(金) 22:10:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4184.c
色々と考えてみたが、俺の実力じゃ今のところこんなものしか作れん。
あと書いたソースはC言語。
0245デフォルトの名無しさん
2007/06/08(金) 22:11:42やってみたけど、出力される内容が実行例の内容と違う。
関数f(x)の定義間違ってない?
#include<stdio.h>
double f(double x){
double x_n=1.0, dx, ret=0.0; // x_n -> x^n : dx -> x^n / n^2 : ret -> f(x)
int n;
for(n=1;;n++){
x_n*=x;
dx=x_n/(n*n);
ret+=dx;
if(dx<0.000001) break;
}
return ret;
}
int main(void){
int i;
for(i=1;i<=10;i++)
printf("f(%g)=%f\n", i/10.0, f(i/10.0));
return 0;
}
0246デフォルトの名無しさん
2007/06/08(金) 22:11:59web2_out.txt に検索結果を出力するようにしてあるっす。不要なら消しておくべし。
0247231
2007/06/08(金) 22:35:17ありがとうございます。
一応、教えてもらったとおりにすれば実行できたのですが、d_method()を一般化してD[][]を求めるにはどのようなソースを組めばよいのでしょうか?
0248237
2007/06/08(金) 22:41:37有難うございます。
>>238のプログラムでは引数としてzを与えた時に
real 0m0.657s, user 0m0.530s, sys 0m0.040s
でした。
>>244では
real 0m0.165s, user 0m0.140s, sys 0m0.040s
のように性能が改善されました。
もしかしてC++が遅いだけでは?と思い、>>238のプログラムを
全く同じアルゴリズムでCで書き直したら
real 0m0.142s, user 0m0.120s, sys 0m0.020s
のようになりました。
0249237
2007/06/08(金) 22:42:24もっといい方法がありましたら、お教えください。
#include <stdio.h>
#include <string.h>
#define DICT "web2"
int main(int argc, char **argv)
{
FILE *fp;
size_t wlen;
char buff[4096];
if (argc == 1) return 1;
wlen = strlen(argv[1]);
if ((fp = fopen(DICT, "r")) == NULL) return 2;
while (fgets(buff, sizeof buff, fp)) {
int n = strncasecmp(buff, argv[1], wlen);
if (n == 0) fputs(buff, stdout);
else if (n > 0) break;
}
return 0;
}
0250デフォルトの名無しさん
2007/06/08(金) 22:57:48#include <stdio.h>
#define N 10
int main(void){
double vector1[N], vector2[N], sum = 0;
int i;
printf("Input vector1 : "); for(i = 0; i < N; i++) scanf("%lf", &vector1[i]);
printf("Input vector2 : "); for(i = 0; i < N; i++) scanf("%lf", &vector2[i]);
i = 0;
printf("addition : (");
while(1){
printf("%g", vector1[i] + vector2[i]);
if(i >= N) break;
printf(", ");
i++;
}
printf(")\n");
for(i = 0; i < N; i++) sum += vector1[i]*vector2[i];
printf("dot product : %g\n", sum);
return 0;
}
0251デフォルトの名無しさん
2007/06/08(金) 23:00:16「真ん中を比較して、どんどん半分にする」
という方法が定石だと思うのだけど、どう実現して良いやら。
0252デフォルトの名無しさん
2007/06/09(土) 00:32:21[2] 問題文(含コード&リンク):
組クラスを作成しなさい。組クラスは教員と学生からなる。
教員は1人で学生は最大40人とする。
学籍番号で検索する機能を付ける事。
学生には、名前、住所、学籍番号(文字列型)という属性があり、
教員には名前、住所、教員番号(整数型)という属性があるとする。
教員と学生の共通部分をまとめたクラスを定義し、
それを継承する形で教員クラスと学生クラスを定義せよ。
それぞれの属性には、getter、setter、表示関数を定義せよ。
継承した教員クラスで、名前を表示する関数では、「○○教授」、
「○○助教授」などのように役職名を添えて表示する関数として、上書き定義せよ。
これらの機能が正しく動くことを確認するmain関数(適当なサンプル)もあわせて作ること。
[3] 環境
[3.1] OS: (Windows/Linux/等々)Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)VC
[3.3] 言語: (C/C++/どちらでも可 のいずれか)C++
[4] 期限: 2007年6月11日
どうかよろしくお願いします
0253デフォルトの名無しさん
2007/06/09(土) 00:37:46http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4185.c
>>244と比べてほとんど改良した点はないが、>>244に不適切な部分があると思ったんで
ちと改造。これ以上は俺の実力じゃ無理ぽ。
余談だが、1つのファイルにしちゃうより、頭文字別にファイルを分ける方が
もっと膨大なデータになったときには処理に差が出るでしょうね。
こうなると、管理体制から問われるね。
0254デフォルトの名無しさん
2007/06/09(土) 00:42:54単語が一つ増えただけで書き直しになるけど
0255デフォルトの名無しさん
2007/06/09(土) 00:45:37初めまして。
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テキストファイルに保存された改行で区切られた整数(縦に並んだ整数)を読み込んで、
その平均値と標準偏差を計算し、結果をファイルに保存することのできるプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2003
[3.3] 言語: C言語
[4] 期限:2007年06月13日 17:00まで
[5] その他の制限:
結果のファイル名が「あなたの名前.txt」になるようにすること。
結果ファイルの先頭行に「あなたの学籍番号、クラス番号、名前」が記されるような、プログラムにすること。
データ数は最大1000個まで計算できるようにすること。
僕の能力では解けませんでした。よろしくお願いします。
0256デフォルトの名無しさん
2007/06/09(土) 00:46:44日本語でおk。無駄口叩いて知ったかぶっているとボロ出すからw
0257237
2007/06/09(土) 00:50:24アルゴリズムを改造せずに姑息な最適化を施したら
real 0m0.072s, user 0m0.060s, sys 0m0.030s ぐらいにはなりました。
>>254の方法も試してみます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DICT "web2"
int main(int argc, char **argv) {
FILE *fp;
int n, wlen, fsize;
char *dict, *p, *q;
if (argc == 1) return 1;
wlen = strlen(argv[1]);
if ((fp = fopen(DICT, "rb")) == NULL) return 2;
fseek(fp, 0, SEEK_END); fsize = ftell(fp); fseek(fp, 0, SEEK_SET);
dict = malloc(fsize);
fread(dict, 1, fsize, fp);
fclose(fp);
for (p = dict; fsize > 0 && (q = memchr(p, '\n', fsize));
fsize -= (q - p + 1), p = q + 1)
{
n = strncasecmp(p, argv[1], wlen);
if (n == 0) fwrite(p, 1, q - p + 1, stdout);
else if (n > 0) break;
}
return 0;
}
0258デフォルトの名無しさん
2007/06/09(土) 00:51:12>改行で区切られた整数(縦に並んだ整数)
改行で区切られてるのに横に並んでる?
入力ファイルのフォーマットをもう少し詳しく
0259デフォルトの名無しさん
2007/06/09(土) 00:54:05おまいの頭の中をもう少し詳しく
0260デフォルトの名無しさん
2007/06/09(土) 00:55:02ほんとだ、縦だった
脳内変換してた
スマソ>>255
0261デフォルトの名無しさん
2007/06/09(土) 00:59:46これで早くなってるんじゃないかな?
#include <stdio.h>
#include <string.h>
#define DICT "web2"
#define DIVNUM 50 // 適当な数
int main(int argc, char **argv) {
FILE *fp;
size_t wlen, filesize, pos, pos_prev;
char buff[4096];
if (argc == 1) return 1;
wlen = strlen(argv[1]);
if ((fp = fopen(DICT, "r")) == NULL) return 2;
fseek(fp, 0L, SEEK_END);
filesize=ftell(fp);
fseek(fp, 0L, SEEK_SET);
for(pos=pos_prev=0;pos<filesize;pos_prev=pos,pos+=filesize/DIVNUM+1) { // +1 で無限ループ回避
fseek(fp, pos, SEEK_SET);
fgets(buff, sizeof(buff), fp);
if(fgets(buff, sizeof(buff), fp)==NULL) break;
if(strncasecmp(buff, argv[1], wlen)>=0) break;
}
fseek(fp, pos_prev, SEEK_SET);
while (fgets(buff, sizeof buff, fp)) {
int n = strncasecmp(buff, argv[1], wlen);
if (n == 0) fputs(buff, stdout);
else if (n > 0) break;
}
fclose(fp);
return 0;
}
0262デフォルトの名無しさん
2007/06/09(土) 01:05:49オフセットの位置をあらかじめ・・・でわかる?
0263デフォルトの名無しさん
2007/06/09(土) 01:06:470264デフォルトの名無しさん
2007/06/09(土) 01:07:50だからそういう取り扱いがすでに不適切だって言ってんだが?
汎用性を無視した固有のやり方は、ちょっと環境が変わればそれに応じた対処をするのに
ものすごく無駄な手間が掛かるぞ?何か運営したことのない素人かい?
0265デフォルトの名無しさん
2007/06/09(土) 01:10:19ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/strcasecmp.3.html
準拠はPOSIX.1-2001
0266237
2007/06/09(土) 01:10:29素晴らしい!!
real 0m0.020s
user 0m0.030s
sys 0m0.010s
でした。ここまで速ければ文句は無いでしょう。
>>263
VC++では
#ifdef _MSC_VER
#define strncasecmp strnicmp
#endif
とでもしてください。
0267デフォルトの名無しさん
2007/06/09(土) 01:10:51ちゃんと書き直しになるって書いてあるだろ
0268デフォルトの名無しさん
2007/06/09(土) 01:13:37引数をazとかにしたら検索してくれないアルよ
0270デフォルトの名無しさん
2007/06/09(土) 01:15:50賠償しるニダ
0271デフォルトの名無しさん
2007/06/09(土) 01:24:37fseek(fp, pos_prev, SEEK_SET);
↓
fseek(fp, pos_prev, SEEK_SET);
fgets(buff, sizeof(buff), fp);
0272デフォルトの名無しさん
2007/06/09(土) 01:27:26面白そうなんでやってみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4186.c
0273デフォルトの名無しさん
2007/06/09(土) 01:36:22[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4187.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C
[4] 期限: 2007/6/10 23:00まで
[5] その他の制限:
AI_move関数部分を変更して下さい。
よろしくお願いします。
0274デフォルトの名無しさん
2007/06/09(土) 01:38:52ぷっ遅w
0275デフォルトの名無しさん
2007/06/09(土) 01:40:200276237
2007/06/09(土) 01:42:29azが検索できるようになりました。
>>272
real 0m0.525s
user 0m0.450s
sys 0m0.040s
でした。
0277デフォルトの名無しさん
2007/06/09(土) 01:45:46読み込むファイルはリダイレクトで与えてね
#include <stdio.h>
#include <math.h>
int main(void){
double x_sum=0.0, x2_sum=0.0;
int x, num;
FILE *fp_out, *fp_in=stdin;
for(num=0;num<1000;num++){
if(fscanf(fp_in, "%d", &x)!=1) break;
x_sum+=x;
x2_sum+=x*x;
}
fp_out=fopen("あなたの名前.txt", "w");
if(fp_out==NULL) return 1;
fprintf(fp_out, "あなたの学籍番号、クラス番号、名前\n");
if(num>0) fprintf(fp_out, "平均値:%f\n", x_sum/num);
if(num>2) fprintf(fp_out, "標準偏差:%f\n", sqrt( (x2_sum-x_sum*x_sum/num) / (num-1) ));
fclose(fp_out);
return 0;
}
0278デフォルトの名無しさん
2007/06/09(土) 01:47:350279>>261=>>271
2007/06/09(土) 01:59:27ごめ。もう一回 >>261 の訂正
fseek(fp, pos_prev, SEEK_SET);
↓
fseek(fp, pos_prev, SEEK_SET);
if(pos_prev) fgets(buff, sizeof(buff), fp);
0280デフォルトの名無しさん
2007/06/09(土) 02:05:44IOを伴う関数は出来る限り呼び出しが少ないほうがいいと思うよ
0281デフォルトの名無しさん
2007/06/09(土) 02:10:45#include <stdio.h>
#include <time.h>
int main(void) {
FILE *fp=fopen("web2","r");
clock_t s,e;
char c,buf[256];
s=clock();
while( fgetc(fp) != EOF );
e=clock();
printf("fgetc %d ms \n",e-s);
rewind(fp);
s=clock();
while( fscanf(fp,"%s",buf) != EOF );
e=clock();
printf("fscanf %d ms \n",e-s);
return 0;
}
0282デフォルトの名無しさん
2007/06/09(土) 02:20:32cygwinは標準入出力関数の呼出しごとにオーバヘッドがあるらしくfgetc()は鈍足だった。
0283デフォルトの名無しさん
2007/06/09(土) 02:21:09fgetc と fscanf とを比較してたのか…orz
確かに fscanf の方が遅いね
0284237
2007/06/09(土) 02:36:09有難うございます。
頑張りましたが>>261さんのコードには勝てませんでした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4189.txt
0285デフォルトの名無しさん
2007/06/09(土) 02:53:57[2] 問題文:3行3列の行列A、Bと4行4列の行列Cの各要素を入力ファイルから読み込み、
出力ファイルに書き込んで出力せよ。各要素の型は実数型とする。
A 1 2 3
4 5 6
7 8 9
B 5 -2 2
2 3 1
1 2 2
C 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:?Visual studio.2003
[3.3] 言語: C
[4] 期限: ([2007年6月10日11:00まで]
[5] その他の制限:ファイルポインタの宣言 FILE *fp
fopen関数
fclose関数
ファイルからの読み込み fscanf
ファイルへの書き込み fprintf
です。お願いします。
0286デフォルトの名無しさん
2007/06/09(土) 03:27:010287デフォルトの名無しさん
2007/06/09(土) 03:53:17いつもゴミソース書いてごめんなさい
0288デフォルトの名無しさん
2007/06/09(土) 04:00:000289デフォルトの名無しさん
2007/06/09(土) 04:09:58>>261 をちょっと改良して2分探索にした
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4190.c
>>285 は入力/出力ファイルの形式がわからん
単にファイルコピーするだけとも読めるが…
いいかげんな推測に基づくコード↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4191.c
0290289
2007/06/09(土) 04:14:37よしなに
あと、下のはエラーチェック一切していない
0291237
2007/06/09(土) 05:01:55有難うございます。速いですね……
自分も>>284で2分探索にしましたが、これより大分遅かったです。
相当姑息な手を使って>>284よりはかなり速くなりましたが、
それでも>>289さんのより若干遅いです。一括とは言え、下手にファイル全部
読み込まないほうが良いようですね。
mmap()でも使えば別かも知れませんが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4192.txt
# getc()を1回呼ぶだけでファイル全部読んだことにしているところが
# 姑息なところですが、規格で保障された動作ではない気もします。
0292デフォルトの名無しさん
2007/06/09(土) 05:13:54if(strncasecmp(buff, argv[1], wlen)>=0) end=pos; ↓
if(strncasecmp(buff, argv[1], wlen)>=0) break;
0293デフォルトの名無しさん
2007/06/09(土) 05:43:09全然検証もクソもしてないが、各先頭文字が同じ文字列数が同数と仮定して
forループの前のSEEK位置の初期化時に当たりつけて、
fseek(fp, (arg[1]<'A'?arg[1]-'a':arg[1]-'A')*(filesize/26), SEEK_SET);
ぐらいから前方、または後方に探す方が早くないか?
後ろの方の単語の検索が遅くなる度合いを、演算1行とif分岐1回で
平均化出来ると思うんだけど、微妙かな?
演算1回だからfilesize/26で良いと思うが、filesize>>5のが早いかも?
0294デフォルトの名無しさん
2007/06/09(土) 05:53:08どこからどこまでに何が入っているかなんてわかっていない状態からやってんだし
本当に検索を速くするってなら、適当に単語ファイルを分けて管理する方が良いだろ。
0295デフォルトの名無しさん
2007/06/09(土) 06:03:54場合わけをするのもありか。
0296デフォルトの名無しさん
2007/06/09(土) 06:07:37このスレ頭良いやつ多すぎ
0297デフォルトの名無しさん
2007/06/09(土) 06:16:250298289
2007/06/09(土) 06:18:10read_dictをmmapで実装すると相当速くなるね
289と比べてみたがどちらも0.001秒とかなので
どっちが速いのかよくわからん
>>292
それは速くなることもあるけど平均的には遅くなりますね
>>293
後ろの方検索するときは効果ありそう
問題文にある辞書でも相当バラツキがあるが、線形検索よりは速くなるだろう
0299デフォルトの名無しさん
2007/06/09(土) 06:21:56> それは速くなることもあるけど平均的には遅くなりますね
???、探す範囲が見つかったら、それ以降はサーチせんで良いんでは?
速くなるならないは、実行時の単なる誤差でしょ。実際のところ、変更前と後では
扱うデータが大きくないから、人間が感じる範囲内ではほとんど差はない。
0300デフォルトの名無しさん
2007/06/09(土) 06:28:37辞書ファイルにまで手を入れるんだったら、
先頭にバイナリでハッシュテーブルでも入れとく方が格段に早い。
でも趣旨と全然違うんだよネ・・・。
0302デフォルトの名無しさん
2007/06/09(土) 06:43:09このifの条件が成立した段階でstartとposの間に求める単語が
あることはわかっているが、startはもっと後ろにずらせるかもしれない
breakしていないのはそのため
たまたまそれ以上ずらせなかった場合は292のほうが速くなるでしょう
0303255です。
2007/06/09(土) 11:20:04ご解答ありがとうございます。
0304デフォルトの名無しさん
2007/06/09(土) 12:30:55>if(fgets(buff, sizeof(buff), fp)==NULL) break;
なんで>>261って一行読み捨ててるの?
0305デフォルトの名無しさん
2007/06/09(土) 12:35:54入出力ファイルの形式は.txtです。よろしくおねがいします。
0306デフォルトの名無しさん
2007/06/09(土) 13:00:07そうじゃなくて、入出力するtxtの中身を聴いてるんでしょ
数字の並びをどういう風に整形するのかってこと
0307デフォルトの名無しさん
2007/06/09(土) 13:06:080308デフォルトの名無しさん
2007/06/09(土) 13:18:38ファイルポインタのシーク場所を適当に飛ばしてるから、
単語の途中を指してる可能性が高い。
ていうか自分でifの前にputs(buff);入れて実行してみろよ。
0309デフォルトの名無しさん
2007/06/09(土) 13:19:42俺の馬鹿さかげんではほんと手がでません。よろしくおねがいします。
0310デフォルトの名無しさん
2007/06/09(土) 13:46:41>>289のプログラムのどの辺が気に入らない?
0311デフォルトの名無しさん
2007/06/09(土) 13:52:52error C2143: 構文エラー : '{' が '<' の前にありません。
error C2059: 構文エラー : '<'
ってでちゃうんです…
0312デフォルトの名無しさん
2007/06/09(土) 14:03:59うちはコピペでコンパイル通るが。
手で書き写したなら、写し間違いの可能性がある。
>error C2143: 構文エラー : '{' が '<' の前にありません。
が出てる行と前後の行を確かめてみ。
書き間違いが無いなら、ファイルの拡張子をチェック。
それでもダメなら、ファイルをアップロードしてくれ。
0313デフォルトの名無しさん
2007/06/09(土) 14:08:162] 問題文(含コード&リンク): 2教科のテストの点数を入力し、その2つの点数に
任意の点数を加算する関数を、ポインタを使って定義し、以下のように出力するコー
ドを提出しなさい。
例)2教科分の点数を入力してください。
78
65
加算する点数を入力してください。
12
12点加算したので
科目1は90点になりました。
科目2は77点になりました。
[3] 環境
[3.1] OSLinux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:6月11日17時まで
[5] その他の制限: 配列を関数までならいました。ポインタは初めてです
とにかく初心者です。
よろしくお願いします(><)
0314デフォルトの名無しさん
2007/06/09(土) 14:27:10#include <stdio.h>
void func(int *arg1, int arg2){if(arg1)*arg1+=arg2;}
int main(){
int point1,point2,up;
printf("2教科分の点数を入力してください。\n");
if(scanf("%d\n", &point1)!=1){printf("だめー\n"); return 1;}
if(scanf("%d\n", &point2)!=1){printf("だめー\n"); return 1;}
printf("加算する点数を入力してください。\n");
if(scanf("%d\n", &up)!=1){puts("だめー\n"); return 1;}
func(&point1, up);
func(&point2, up);
printf("%d点加点したので\n科目1は%d点になりました。\n科目2は%d点になりました。\n",up,point1,point2);
return 0;
}
0315デフォルトの名無しさん
2007/06/09(土) 14:34:52>>314のscanf、\n要らない。
×:"%d\n"
○:"%d"
0316デフォルトの名無しさん
2007/06/09(土) 14:34:53'fopen' の宣言を確認してください。
'fscanf' の宣言を確認してください。
って出るようになったのですが、ここからどうすればいいですか?
0317デフォルトの名無しさん
2007/06/09(土) 14:37:06警告なら気にしないー
古い形式とか言われるだけでしょ。
0318デフォルトの名無しさん
2007/06/09(土) 14:38:28その警告はVisualStudioなら出る。
あとは入力ファイル「inp」を作って実行するだけ。
0319デフォルトの名無しさん
2007/06/09(土) 14:38:50っつか、ちゃんとソースをそのまま使ってるのか?ヘッダはちゃんとincludeしてるのかと
0320デフォルトの名無しさん
2007/06/09(土) 14:52:43>>314さんのコードを自分の環境で実行すると
>2教科分の点数を入力してください
>50
>60
>30
>加算する点数を入力してください。
>40
>30点加点したので
>科目1は80点になりました。
みたいな出力になるのですが、これってなんででしょうか?
自分で考えてもコードは合ってる気がするのです><;
0321320
2007/06/09(土) 14:56:18>科目2は90点になりました。
っていう最後の一行コピペし忘れましたorz
0322デフォルトの名無しさん
2007/06/09(土) 14:58:22今度は入力ファイルについての質問なんですが、入力ファイルってどこに作成すればいいんですか。
0323デフォルトの名無しさん
2007/06/09(土) 15:02:29ごめん。
314だが>>315
3つあるscanfの\nを削除してくれ。
0324デフォルトの名無しさん
2007/06/09(土) 15:06:41カレントのフォルダ。
カレントのフォルダは実行の仕方によって違う。
VS上から実行してるなら、ソースファイルがあるフォルダ。
コマンドプロンプト上からなら、実行時のフォルダ。
0325デフォルトの名無しさん
2007/06/09(土) 15:07:43なるほど、scanfって\n付けちゃダメなんですね。
リロードしてなかったので>>315を見てませんでした。
あ、決してケチ付けたかったわけじゃなくて、
純粋にどこが悪いか知りたかっただけなので気を悪くさせてしまったらすいません><
0326デフォルトの名無しさん
2007/06/09(土) 15:14:31実行プログラムと同じ場所。
>>324
カレントといった場合は意味が違ってくるよ。
0327デフォルトの名無しさん
2007/06/09(土) 15:16:190328デフォルトの名無しさん
2007/06/09(土) 15:23:20>314さん、そしてそれを解いて勉強してる320さん
ありがとうございました!!
0329デフォルトの名無しさん
2007/06/09(土) 15:24:18いや、カレントで合ってるハズ。
実行ファイルがC:\program\にあって、
コマンドプロンプト上でC:\に居る時に、
パス指定で実行した場合、
ファイル「inp」はC:\に無きゃダメ。
VS上からF5なりCtrl+F5なりで実行した場合、
カレントのフォルダはプロジェクトファイルがある場所。
0330デフォルトの名無しさん
2007/06/09(土) 15:25:27あっているあっていないではなく、カレントディレクトリの意味わかってますか?
実行するときにカレントディレクトリを実行プログラムの場所に移動させているって話だろ?
低学歴だってバレるから、これ以上知ったかな口はきかない方が良いよw
0331デフォルトの名無しさん
2007/06/09(土) 15:26:18とにかく消費時間の短縮を目指したいと思います。
どうぞ知恵をお貸しください。よろしくお願いします。
また、消費時間の短縮に繋がった改善点を簡単でけっこうですので
説明してくだされば幸いです。
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4193.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: [2007年06月11日21:00まで]
[5] その他の制限:
1.画像のためのメモリはヒープ領域に動的に確保する。
2.結果画像が変わらない。
以下の制約を守っていただければ、どのように変更されても構いません。
0332デフォルトの名無しさん
2007/06/09(土) 15:26:57ttp://yougo.ascii24.com/gh/04/000430.html
> 現在ユーザーが作業しているディレクトリ
であって、実行プログラムやファイルがある場所を指すんじゃないんだよw
0333デフォルトの名無しさん
2007/06/09(土) 15:32:04プログラム実行してもカレントは変わらないって・・・。
プログラム内でsystem("cd");を実行してみて試してみると良い。
Linux上ならsystem("pwd");かな。
0334デフォルトの名無しさん
2007/06/09(土) 15:35:04ヒント:カレントディレクトリからでも、他の場所にある実行プログラムのあるパス名を指定して
プログラムを実行できる。使用するファイルも指定はパス名を通して指定できる。
ゆえに、現在作業中のディレクトリに置かなくてもなんら問題なし。
0335デフォルトの名無しさん
2007/06/09(土) 15:36:41Debug Assertion Failed!
Program;...
File:fscanf.c
ってでてしまうんですが・・・
0336デフォルトの名無しさん
2007/06/09(土) 15:41:160337デフォルトの名無しさん
2007/06/09(土) 15:55:49>使用するファイルも指定はパス名を通して指定できる。
どんな環境だ?
少なくともVS2005、XPのコマンドプロンプト、bashとcshはそんなことしない。
もしかしてソースコード見てないんじゃないか?
> fp_in = fopen("inp", "r");
こうだぞ?
>>335
どうやって実行してる?
0338デフォルトの名無しさん
2007/06/09(土) 16:04:40自分の理解力の無い頭を露呈しなくて良いから、黙ってろガキw
カレントディレクトリの意味が書かれている参照ページを出しても理解できないとは、馬鹿じゃね?
現在作業中のディレクトリが必ずしも実行プログラムのある場所とは限らないだろw
とりあえず、実行プログラムと同じ場所においておけばなんら問題なし。
同じ場所でなくてもパス名の指定は可能なんだよ。お前、パスを通すとか理解してないだろ?w
コマンドプロンプトを使ってコンパイル、実行とかしたことないだろ?
UNIXも使ったことないだろ?w
0339デフォルトの名無しさん
2007/06/09(土) 16:06:330340デフォルトの名無しさん
2007/06/09(土) 16:06:47ttp://yougo.ascii24.com/gh/04/000430.html
ttp://e-words.jp/w/E382ABE383ACE383B3E38388E38387E382A3E383ACE382AFE38388E383AA.html
>>333
> Linux上ならsystem("pwd");かな。
知ったかな知識を持ち出して何が言いたいんだろうね。
ttp://cns-guide.sfc.keio.ac.jp/1999/3/1/6.html
パス名の表示だろ?そんなの知ってるわ、大学でUNIX使ってたし
0341デフォルトの名無しさん
2007/06/09(土) 16:11:27その都度カレントディレクトリに実行プログラムと必要なファイルを移動なりコピーして
カレントディレクトリに置くか?俺はいちいちそんなことやらんね。カレントディレクトリにではなく
ファイルのある場所とか実行プログラムのある場所にカレントディレクトリを移動させるならわかるけど。
0342デフォルトの名無しさん
2007/06/09(土) 16:30:350343デフォルトの名無しさん
2007/06/09(土) 16:37:410344デフォルトの名無しさん
2007/06/09(土) 16:42:06>>341
だからVC++のメニューから実行した場合は、
実行ファイルがある場所がカレントじゃないんだよ・・・。
VC++ 2005のデフォルトの状態だと
slnファイルがC:\slnにあって、プロジェクト名がprojectの場合、
プロジェクトファイルはC:\sln\projectにあって、
実行ファイルはC:\sln\debugに出来るんだ。
「デバッグ開始」とか「デバッグなしで開始」で実行した場合、
C:\sln\debugの下にある実行ファイルが実行されるけど
カレントディレクトリはC:\sln\projectになるから、
fp_in = fopen("inp", "r"); でオープンするファイル"inp"は
C:\sln\projectに置いて置かないと見つからないんだよ。
俺、何か間違えたこと言ってるのか・・・?
0345デフォルトの名無しさん
2007/06/09(土) 16:53:01[2] 問題文:0〜100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムを作成せよ。
入力された数値を記憶する配列の要素数は10とし、-1が入力された場合は入力の終わりと判定する。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語: (C
[4] 期限: [無期限]
[5] その他の制限: <stdio.h> for while if 一次配列のみ
アルファベット、記号を入力するとおかしい動作をするので改善したい、ソースを出来る限り簡潔にしたい。
#include <stdio.h>
int main(void)
{
int min,max,i,value[10];
min = 100;
max = 0;
i = 0;
printf("0〜100の数値を入力して下さい\n終了:-1\n");
while(value[i] != -1 && i < 10){
printf("%d番目の数値を入力:",i+1); scanf("%d",&value[i]);
if(value[i] <= 100 && 0 <= value[i]){
if(value[i] < min)
min = value[i];
if(value[i] > max)
max = value[i];
i++;
}
}
printf("最大値:%d 最小値:%d\n",max,min);
return 0;
}
0346デフォルトの名無しさん
2007/06/09(土) 17:02:43簡単に対応するなら、入力を文字列として受け取ってatoiとかで変換とかかな?
0347345
2007/06/09(土) 17:12:55>いろんな入力に対応しようとすると結構面倒じゃね?
そうなんですか・・・
今の段階では自分には無理そうなのであきらめます
他に改善すべき点があればアドバイスお願いします
0348デフォルトの名無しさん
2007/06/09(土) 17:16:40valueを初期化していないままwhileの条件判定を行っている。
iが0〜10のループなのでforのほうがいいと個人的に思う。
0349デフォルトの名無しさん
2007/06/09(土) 17:34:03コーディングスタイルは好みもあるんであれだが書き直してみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4194.txt
このページ初心者のうちから読んでおくとだいぶ違うと思われ。
http://www.pro.or.jp/~fuji/mybooks/cdiag/
演算子とかカンマのとなりはスペースつけたほうがいいよ
i+j+k → i + j + k
i,j,k → i, j, k
0350デフォルトの名無しさん
2007/06/09(土) 17:39:26do{
rewind(stdin);
if(!scanf("%d", &value[i]))
printf("数値でおk\n");
}while(-1);
0351デフォルトの名無しさん
2007/06/09(土) 17:44:18>>349
>>350
ありがとうございました
0352デフォルトの名無しさん
2007/06/09(土) 17:48:240353デフォルトの名無しさん
2007/06/09(土) 18:08:12置き換えれば大分被害は減る。
それと、面倒でもこの手の入力関数の戻り値は見とけ。
0354デフォルトの名無しさん
2007/06/09(土) 18:21:40どーでもいいもん作るなら楽でいいが、少しまともにしようと思うだけで使いもんにならんよな。
0355デフォルトの名無しさん
2007/06/09(土) 18:35:38データを取り込むインターフェースのほとんどは数字だけでなく
英数字の入力が可能なため、数値を扱う変数には文字が入らないように
一度文字列として入力データを受け継いで、文字列の中から適切に数字を取り込む
仕様にしようとか、初心者に説明してもちんぷんかんぷんかも?
0356デフォルトの名無しさん
2007/06/09(土) 18:41:56書式指定で取り込まないように、かな。まぁ、説明して理解させるのも面倒だろうし
数値だけ入力して取り込むことを条件にして、授業を進めると。俺もそうだった。
まぁ、俺が授業を受けたのは98年だからずいぶん前になるが。今じゃ普通に
int main(void)とか(int argc, char *argv[]) とかANSI、ISO準拠も考慮しているのかな?
0357デフォルトの名無しさん
2007/06/09(土) 18:43:03scanf()の仕様を初心者に正しく理解させることのほうが
ずっと難しいと思う
0358デフォルトの名無しさん
2007/06/09(土) 18:43:45いや、ライブラリについて細かくではなく、データを取り込む手段に関して。
0359デフォルトの名無しさん
2007/06/09(土) 18:45:48/* org にシーケンシャルアクセスする事でキャッシュヒット率を上げる */
/* 領域内外の計算を先にしておく */
void emboss(UCHAR ***ans, UCHAR ***org, int dx, int dy, int n_gyou, int n_retu){
int g, r, g_max, r_max, val;
int g_org=0, r_org=0, g_ans=0, r_ans=0;
UCHAR *pans, *porg;
memcpy(&ans[0][0][0], &org[0][0][0], sizeof(UCHAR) * n_retu * n_gyou * 3);
g_max=n_gyou-abs(dy);
r_max=n_retu-abs(dx);
if(dy>0) g_org=dy;
else g_ans=dy;
if(dx>0) r_org=dx;
else r_ans=dx;
for(g=0;g<g_max;g++){
pans=&ans[g+g_ans][r_ans][0];
porg=&org[g+g_org][r_org][0];
for(r=0;r<r_max*3;r++){
val=*pans - *porg + 128;
if(val > 255) *pans = 255; /* 画素値は0以上255以下 */
else if(val < 0) *pans = 0;
else *pans = val;
pans++;
porg++;
}
}
for(g=n_gyou-dy;g<n_gyou;g++) memset(&ans[g][0][0], 128, sizeof(UCHAR)*n_retu*3);
for(g=0;g<-dy;g++) memset(&ans[g][0][0], 128, sizeof(UCHAR)*n_retu*3);
if(dx>0) r = n_retu - dx;
else r = 0;
for(g=0;g<n_gyou;g++) memset(&ans[g][r][0], 128, abs(dx)*3);
}
0360デフォルトの名無しさん
2007/06/09(土) 18:50:170361デフォルトの名無しさん
2007/06/09(土) 19:00:52分かったから黙って出てけよ
0362252
2007/06/09(土) 19:04:500363デフォルトの名無しさん
2007/06/09(土) 19:36:54[2] 問題文:0〜100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムを作成せよ。-1が入力された場合は入力の終わりと判定する。
ポインタを使用し、最大値と最小値はmain関数以外の一つの関数の中で求める。入力された数値を記憶する配列の要素数は10とする。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語: (C
[4] 期限: [無期限]
[5] その他の制限: <stdio.h> for while if 一次配列 自作関数 ポインタ
自分なりに頑張って作ってみましたが、ポインタさっぱりわけワカメです
もっとエレガントになりませんか?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4195.txt
0364デフォルトの名無しさん
2007/06/09(土) 19:56:34問題点
1.いきなり -1 を入力すると…
2.100 より大きな数 又は -1より小さな数を入力すると…
まずはデバッグしてみては?
0365デフォルトの名無しさん
2007/06/09(土) 20:01:28しぃぷらぷらはめんどくさくてイヤなのですよ。
0366デフォルトの名無しさん
2007/06/09(土) 20:05:19[2] 問題文(含コード&リンク):
マージソートによるソーティングに対する非再帰的なプログラムを作りなさい。
ただし、データ数を2^kとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 金曜日までです。
[5] その他の制限: 特にないです。
よろしくお願いします。
0367デフォルトの名無しさん
2007/06/09(土) 20:40:31# include <stdlib.h>
# include <string.h>
void merge(int *a, int *b, int *out, int size)
{
int *orig_out = out;
int i = 0, j = 0;
while(i < size || j < size)
if(j >= size || i < size && a[i] < b[j])
*out++ = a[i++];
else
*out++ = b[j++];
}
void mergesort(int *a, int k)
{
int i;
int *temp = malloc((1 << k) * sizeof(int));
if(!temp) perror("malloc"), exit(1);
for(i = 0; i < k; i++)
{
int n = 1 << i;
int j;
for(j = 0; j < 1 << k - i - 1; j++)
{
int *x = a + 2 * j * n;
merge(x, x + n, temp, n);
memcpy(x, temp, n * 2 * sizeof(int));
}
}
free(temp);
}
0368367
2007/06/09(土) 20:41:17int *orig_out = out;
は消し忘れ。
0369デフォルトの名無しさん
2007/06/09(土) 20:51:03http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4196.txt
こんな感じでどうでしょ。
0370デフォルトの名無しさん
2007/06/09(土) 21:19:26getterとsetterって何するもんなの?
0371デフォルトの名無しさん
2007/06/09(土) 21:26:12getter = http://ja.wikipedia.org/wiki/%E3%82%B2%E3%83%83%E3%82%BF%E3%83%BC%E3%83%AD%E3%83%9C
setter = http://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%83%E3%82%BF%E3%83%BC_(%E3%83%90%E3%83%AC%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%AB)
0372デフォルトの名無しさん
2007/06/09(土) 21:29:170373デフォルトの名無しさん
2007/06/09(土) 21:58:25[2] 問題文(含コード&リンク):
9×9の2次元配列を用意し座標に見立てる,ゴール座標を1ヵ所設定し,ゴール以外の座標には,ゴールからの距離の2乗を計算して入れる.
キーボードから座標を入力し,ゴール以外の場合は,配列に格納してあるゴールからの距離の2乗の値を表示する.
ゴールの座標が入力されたら,入力回数と,得点を表示する.得点は,持ち点を100点とし,入力ごとにゴールからの距離を減点していく.
ただし,最低点を0点とする(今回は正解するまで続ける.)
ただし,配列は,
int dist[9][9];
とする.(要素は81個しか持ってはいけない.)
なお,ゴールの座標は自由に決めてよい.
[実行結果]
座標を入力してください(X Y): 4 6
距離 20 です.(持ち点:80)
座標を入力してください(X Y): 9 7
距離 2 です.(持ち点:78)
座標を入力してください(X Y): 8 8
!!! 3 回目で大当たり!!!
得点は,78点です
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C言語
[4] 期限: 6/13まで
[5] その他の制限: 制御構文はif、for、whileだけ breakは駄目だそうです
0374デフォルトの名無しさん
2007/06/09(土) 21:59:34学生の学籍番号を保持するメンバ変数と、その変数のsetterとgetter
Teacharクラスの役職を保持するメンバ変数と、その変数のsetterとgetter
とテキストにはあります
これで分かりますでしょうか?
0375デフォルトの名無しさん
2007/06/09(土) 22:03:520376デフォルトの名無しさん
2007/06/09(土) 22:22:15「距離の2乗」 を配列に入れるのに、
得点から引くのは 「距離」 なの?
0377デフォルトの名無しさん
2007/06/09(土) 22:25:55#include <stdio.h>
int main(void){
int dist[9][9];
int x, y, ans_x=3, ans_y=4, wrong_x=0;
int score=100, try_count=1;
for(y=0;y<9;y++)
for(x=0;x<9;x++)
dist[y][x]=(x-ans_x)*(x-ans_x)+(y-ans_y)*(y-ans_y);
if(dist[0][wrong_x]==0) wrong_x++;
x=wrong_x;
while(dist[y][x]!=0){
printf("座標を入力してください(X Y):");
scanf("%d %d", &x, &y);
if((x<0 || 9<=x) || (y<0 || 9<=y)){
printf("範囲外です X:(0-8) Y:(0-8)\n");
x=wrong_x;
y=0;
}else if(dist[y][x]>0){
try_count++;
score-=dist[y][x];
if(score<0) score=0;
printf("距離 %d です.(持ち点:%d)\n", dist[y][x], score);
}
}
printf("!!! %d 回目で大当たり!!!\n", try_count);
printf("得点は,%d点です\n", score);
return 0;
}
0378デフォルトの名無しさん
2007/06/09(土) 22:26:04まあいいや
距離2乗をひいといた
printfの中身とかは直す必要があるなら直してください
ゴール座標は1,2にしときました
0379デフォルトの名無しさん
2007/06/09(土) 22:30:040380デフォルトの名無しさん
2007/06/09(土) 22:32:20ええ、そうです。適当でかまいません
0381デフォルトの名無しさん
2007/06/09(土) 22:33:57いいえ、違います。うちの大学です。
0382デフォルトの名無しさん
2007/06/09(土) 22:35:02>>377 だが、回りくどい方法だったので >>378 を参考にして書き直した
#include <stdio.h>
int main(void){
int dist[9][9];
int x, y, ans_x=3, ans_y=4, is_goal=0;
int score=100, try_count=1;
for(y=0;y<9;y++)
for(x=0;x<9;x++)
dist[y][x]=(x-ans_x)*(x-ans_x)+(y-ans_y)*(y-ans_y);
while(!is_goal){
printf("座標を入力してください(X Y):");
scanf("%d %d", &x, &y);
if((x<0 || 9<=x) || (y<0 || 9<=y)){
printf("範囲外です X:(0-8) Y:(0-8)\n");
}else if(dist[y][x]>0){
try_count++;
score-=dist[y][x];
if(score<0) score=0;
printf("距離 %d です.(持ち点:%d)\n", dist[y][x], score);
}else
is_goal=1;
}
printf("!!! %d 回目で大当たり!!!\n", try_count);
printf("得点は,%d点です\n", score);
return 0;
}
0383デフォルトの名無しさん
2007/06/09(土) 23:13:33それでは誰もわからないとおもうよ。
setterとgetterが何のための関数なのかよくわからんし
showも別につけるみたいだし
0384デフォルトの名無しさん
2007/06/09(土) 23:29:35>保持するメンバ変数と、その変数のsetterとgetter
これ以上何が知りたいんだw
0385デフォルトの名無しさん
2007/06/09(土) 23:34:250386デフォルトの名無しさん
2007/06/10(日) 00:11:330387デフォルトの名無しさん
2007/06/10(日) 00:19:20できたケロ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4199.zip
めんどくせーからヘッダーに全部実装書いた。
0388奏
2007/06/10(日) 00:23:42[2] 問題文:
画面上の点という概念をあらわす、Pointという名前のクラスを作る定義を書いてください。
なお、Pointは次のメンバから構成されるクラス。
x(publicなメンバオブジェクト)点のx座標を格納するintの変数。
yx(publicなメンバオブジェクト)点のy座標を格納するintの変数。
そして次の関数から構成されるプログラムを書いてください。
main
動作:二個の点を読み込んで、それらの中点を出力。
ReadPoint
宣言:void ReadPoint(Point& rp);
動作:点を、rp.xとrp.yに読み込む。
PrintPoint
宣言:void PrintPoint(Point p);
動作:点を(p.x,p.y)という形で出力。
MiddlePoint
宣言:Point MiddlePoint(Point pa,Point pb);
動作:workという名前のPointクラスの変数を作り、(pa.x,pa.y)と(pb.x,pb.y)の中点のx座標をwork.xに、y座標をwork.yに代入してworkの内容を返します。
0389デフォルトの名無しさん
2007/06/10(日) 00:40:31[2] 問題文(含コード&リンク):
構造体とメンバ変数の関係で定数定義をしなさい
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VC2005(MFC利用可)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([2007年06月13日まで]
[5] その他の制限:
.Net Frameworkの使用は禁止。
構文は間違ってるのですが、やりたいことはこういうことです。
インスタンスを生成せずにスタティックに利用するものを作るように言われています。
struct AAA{
const CString s = "abc";
const CString s1 = "ABC";
}
ご多忙のところ申し訳ありませんがよろしくお願いします。
0390デフォルトの名無しさん
2007/06/10(日) 00:45:06[2] 問題文(含コード&リンク):
(問題1)下の表より国語80以上または英語20以下のものを行ごと表示しなさい
(問題2)国語または英語の平均を計算して表示しなさい
国語 英語
1、A君 40 49
2、B君 88 69
3、C君 60 12
4、D君100 88
5、E君 30 67
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:visual studio 2005
[3.3] 言語: C
[4] 期限: 6/13
[5] その他の制限:for loopまたは配列を使ってやる
0391デフォルトの名無しさん
2007/06/10(日) 01:22:22ろだ 4200.txt
0392デフォルトの名無しさん
2007/06/10(日) 01:25:41> 継承した教員クラスで、名前を表示する関数では、「○○教授」、
> 「○○助教授」などのように役職名を添えて表示する関数として、上書き定義せよ。
については?
...って >362 よ、"教授","助教授"ってどうやって判別すんだw
0393デフォルトの名無しさん
2007/06/10(日) 01:26:37[2] 問題文(含コード&リンク):
以下のコマンドを実行可能な名簿管理システムを作成せよ。
1 メンバの追加
2 メンバの削除
3 メンバリストを名前順(アルファベット昇順)で表示
4 メンバリストのファイル出力
5 引数として"-f ファイルパス"を指定することによるメンバ初期データの読込
メンバ情報としては、最低限、名前と学生番号を持つこと。
[3] 環境
[3.1] OS: TurboLinux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6月12日18:00まで
[5] その他の制限: なし
0394デフォルトの名無しさん
2007/06/10(日) 01:27:430395392
2007/06/10(日) 01:34:52> class Professor : public Teacher {}
> class AssistantProfessor : public Teacher {}
ってことだったのね...
Teacher で全部やるのかとおもてたのでorz
0396デフォルトの名無しさん
2007/06/10(日) 01:38:29問題的にはTeacherでオーバーライドして、
適当に決めうちで「教授」とか出しておけば良いとオモタ。
0397デフォルトの名無しさん
2007/06/10(日) 01:53:50ろだ 4201.txt
ReadPointの仕様がよくわからんので未使用
0398デフォルトの名無しさん
2007/06/10(日) 02:15:36途中まで書いたけどやぱーりソートがめんどいからパス
0399デフォルトの名無しさん
2007/06/10(日) 02:32:21strcmpとかでバブルソートでいいんでね?
0400デフォルトの名無しさん
2007/06/10(日) 02:37:35[2] 問題文(含コード&リンク):
C言語では、以下のようなコードが許される
int a[10];
0[a]=1;
これが、何故なのか、
糖衣構文に留意して答えなさい。
寝てたので分かりません><
意味不明です。誰か教えてください
[3] 環境
[3.1] OS:
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 6月11日10:00まで
[5] その他の制限: なし
0401デフォルトの名無しさん
2007/06/10(日) 02:41:03そうなんだけど書くのがめんどい
梅酒がまずくなる
BMはオレライブラリにあるけど、棚までCDとりにいくのがめんどい
0402デフォルトの名無しさん
2007/06/10(日) 02:48:100403デフォルトの名無しさん
2007/06/10(日) 02:49:30[]は単なる演算子。a[0]も0[a]も同じ、程度しかいえないやOTL
0404デフォルトの名無しさん
2007/06/10(日) 03:01:00T型のオブジェクトを生成する演算子で、かつオペランドが可換
これだけの事だろ。そういう仕様なんだとしか言い様がない
つーかこんな課題に何の意味があるんだろうな
そんなトリッキーなコード、IOCCCぐらいでしかお目に掛からないだろ
0405デフォルトの名無しさん
2007/06/10(日) 03:02:41アピってんだろ。そういう勘違いって、痛々しいけどな・・・
0406デフォルトの名無しさん
2007/06/10(日) 03:48:54int array[10]; //int型配列 array の宣言
array[5] = 12; //嘘くせえ書き方
//↑の書き方は単なる↓の糖衣構文(シンタックスシュガー)
*(array+5) = 12; //これが本来の書き方
//足し算なので足す順番をひっくり返してもOK
*(5+array) = 12;
//読みづらければ糖衣構文を使ってもOK
5[array] = 12;
0407388
2007/06/10(日) 04:21:090408デフォルトの名無しさん
2007/06/10(日) 04:30:120409デフォルトの名無しさん
2007/06/10(日) 04:34:01#include <iostream>
using namespace std;
class Point { public: int x,y; };
void ReadPoint(Point& rp) { cin >> rp.x >> rp.y; };
void PrintPoint(Point p) { cout << "(" << p.x << "," << p.y << ")"; }
Point MiddlePoint(Point pa, Point pb)
{ Point work; work.x = (pa.x + pb.x) / 2; work.y = (pa.y + pb.y) / 2; }
int main(void)
{
Point pa, pb, pc;
ReadPoint(pa); ReadPoint(pb);
PirntPoint( MiddlePoint(pa, pb) );
return 0;
}
0410デフォルトの名無しさん
2007/06/10(日) 04:45:19#include<iostream>
class Point {
public:
int x;
int y;
};
void ReadPoint( Point &rp );
void PrintPoint( Point p );
Point MiddlePoint(Point pa,Point pb);
void ReadPoint( Point &rp ) {
std::cin >> rp.x;
std::cin >> rp.y;
}
void PrintPoint( Point p ) {
std::cout << "(" << p.x << "," << p.y << ")" << std::endl;
}
Point MiddlePoint( Point pa, Point pb ) {
Point work;
work.x = ( pa.x + pb.x ) / 2;
work.y = ( pa.y + pb.y ) / 2;
return work;
}
int main( void ) {
Point pt1,pt2,pt3;
ReadPoint( pt1 );
ReadPoint( pt2 );
pt3 = MiddlePoint( pt1, pt2 );
PrintPoint( pt3 );
return 0;
}
0411デフォルトの名無しさん
2007/06/10(日) 06:15:35http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4202.txt
0413デフォルトの名無しさん
2007/06/10(日) 10:49:40{
printf("%d",a);
}
で1から100までの数字を表示してるんですが、これを20文字ごとに改行するにはどうすればいいでしょうか?
0414デフォルトの名無しさん
2007/06/10(日) 10:56:46int main(void) {
int a;
int letter = 0;
for(a = 1; a <= 100; a++) {
if (letter > 0 && letter % 20 == 0) {
printf("\n");
}
printf("%d", a);
letter++;
}
return 0;
}
0415デフォルトの名無しさん
2007/06/10(日) 11:08:45[2] 問題文(含コード&リンク): 次の積分の値を数値計算で求めるプログラムを作れ。
また、解析解、Mathematicaとの値についても比較論ぜよ。
さらに、積分精度を上げるためにはどうすれば良いか。
ttp://smokingblues.web.infoseek.co.jp/column/2003-04_suutikeisan/index.htm
積分の値は上記リンクの(2)の問題と同じです。
リンクのソースを使ってコンパイルしてもエラーがでてしまふ・・・
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual C++
[3.3] 言語: C++
[4] 期限: 6月18日まで
[5] その他の制限: 特になし
0416デフォルトの名無しさん
2007/06/10(日) 11:17:470417デフォルトの名無しさん
2007/06/10(日) 11:39:37プログラミングを組めばいいのですか
0418デフォルトの名無しさん
2007/06/10(日) 11:43:43の始点はどこですか?
0419デフォルトの名無しさん
2007/06/10(日) 11:47:27コンパイルはできたよ。
数学知らんから答えとかシラネ。
integralの引数double nは不要そうだからはずした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4203.txt
0420デフォルトの名無しさん
2007/06/10(日) 11:47:28#include <stdio.h>
int main()
{
int in, i;
scanf("%d", &in);
for (i=in ; i<=in+20 ; i++)
printf("%d\n", i);
return 0;
}
0421デフォルトの名無しさん
2007/06/10(日) 11:54:48うお。ありっしたー
0422デフォルトの名無しさん
2007/06/10(日) 12:25:23>>421のような ありっしたー ってのは伸びないよな
自分で調べて、考えて、ってことをやらない奴は根本的に素養がない
0423デフォルトの名無しさん
2007/06/10(日) 12:29:03うお。ありっしたー
0425デフォルトの名無しさん
2007/06/10(日) 12:47:23[2] 問題文(含コード&リンク):
(1) 0-255の範囲の乱数を20個生成して配列に格納し、これを大きい順に並べ替え、当初の配列の要素と並べ替え後の要素を比較して出力するプログラムを作成せよ。
2. 同様な並べ替え処理を(1)と別のアルゴリズムで実現せよ。
[3] 環境
[3.1] OS: MacOSX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 月曜までにお願いします。
0426デフォルトの名無しさん
2007/06/10(日) 13:02:56比較って具体的にどうすればいいんだ?
0427デフォルトの名無しさん
2007/06/10(日) 13:10:46#include <stdio.h>
#include <stdlib.h>
int compare(const unsigned char *a, const unsigned char *b)
{
return *a - *b;
}
int main()
{
unsigned char num[20];
int i;
puts("使用前");
for (i=0 ; i<20 ; i++)
{
num[i]=rand();
printf("%d\n", num[i]);
}
qsort(num, 20, sizeof(unsigned char), (int (*)(const void*, const void*))compare);
puts("使用後");
for (i=0 ; i<20 ; i++)
printf("%d\n", num[i]);
return 0;
}
0428デフォルトの名無しさん
2007/06/10(日) 13:45:27[2] 問題文(含コード&リンク):
100人の生徒の遅刻回数が次のように記録されている.
int late[100] = (5, 2, 0, 12, ..., 3);
このとき,遅刻回数が多いワースト5位までを配列の添字を使い次のようにリストアップする.
31 14 0 19 45 ※0〜99までの数
なお,遅刻回数はint型に収まる程度の任意の自然数とし,
出力する順番は遅刻回数が多い順とする.
また,同じ遅刻回数の人間が5位と6位にまたがる場合も,出力するのは5人までとする.
例:24(14) 14(12) 60(10) 51(10) 80(9) 45(9) ... ※添字(回数) の出力は
24 14 60 51 80
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 6/10 午後9時
0429デフォルトの名無しさん
2007/06/10(日) 14:09:58#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int late[100];
int cmp(const void *a, const void *b)
{
int aa = *((int *)a);
int bb = *((int *)b);
return late[aa] == late[bb] ? 0 : late[aa] < late[bb] ? 1 : -1;
}
int main(void)
{
int i, idx[100];
srand(time(0));
for (i = 0; i < 100; ++i) {
late[i] = rand();
idx[i] = i;
}
qsort(idx, 100, sizeof(int), cmp);
for (i = 0; i < 5; ++i)
printf("%d(%d) ", idx[i], late[idx[i]]);
putchar('\n');
return 0;
}
0430デフォルトの名無しさん
2007/06/10(日) 14:21:24#include <iostream>
#include <vector>
using namespace std;
void main()
{
vector<int> vLate;
int i;
for( i=0; i<100; i++ )
vLate.push_back(rand()%100);
sort( vLate.begin(), vLate.end() );
for( i=99; i>=95; i-- )
cout << vLate.at(i) << " ";
}
0431デフォルトの名無しさん
2007/06/10(日) 14:22:06> [3.3] 言語: C
0432430
2007/06/10(日) 14:27:030433デフォルトの名無しさん
2007/06/10(日) 15:05:41ありがとうございます。
(2)のほうもできたらお願いします。
0435デフォルトの名無しさん
2007/06/10(日) 16:25:57>429 だと、出力がlate[]の添え字順にならない場合があるがよいのか?
例) 99(0) 1(0) 2(0) 3(0) 4(0)
0436デフォルトの名無しさん
2007/06/10(日) 16:49:31出力例で思いっきり順番ひっくり返ってるし、いいんじゃねぇの?
0437デフォルトの名無しさん
2007/06/10(日) 16:57:40確かに〜♪
0438デフォルトの名無しさん
2007/06/10(日) 17:47:11#include <stdio.h>
int main(void)
{
int i,n,total;
total = 0;
printf("整数nを入力:"); scanf("%d",&n);
i = n;
while(i){
total += i;
i--;
}
printf("1〜%dの合計=%d\n",n,total);
return 0;
}
0439208
2007/06/10(日) 17:47:19もうすぐ締め切られる!!!
0440デフォルトの名無しさん
2007/06/10(日) 17:57:32http://search.luky.org/linux-users.a/msg04234.html
0441デフォルトの名無しさん
2007/06/10(日) 18:00:09キーボードから入力された10進数を、2進数として出力するプログラムをつくりなさい。
2進数への変換は、商が0になるまで10進数を2で割りl、あまりを逆の順番で並べる方法を用いる。
ただし、入力は正の整数であって最大値は16838とする
0442デフォルトの名無しさん
2007/06/10(日) 18:00:560443デフォルトの名無しさん
2007/06/10(日) 18:12:50>>1
0444デフォルトの名無しさん
2007/06/10(日) 18:15:040445デフォルトの名無しさん
2007/06/10(日) 18:19:43#include <stdio.h>
int main(void)
{
int i;
unsigned n = 0xffff;
scanf("%ud", &n);
if (n > 16838) return puts("( ´,_ゝ`)"), 123;
for (i = 0xf; i >= 0; --i) putchar(n >> i & 1 ? '1' : '0');
putchar('\n');
return 0;
}
0446デフォルトの名無しさん
2007/06/10(日) 18:19:47#include <stdio.h>
#define BIN_MAX 16838
#define BIN_SIZE 16
int main(void)
{
int a,i,binary[BIN_SIZE];
printf("整数を入力(MAX 16838):"); scanf("%d",&a);
while(!(0 <= a && a <= BIN_MAX))
{
printf("エラー,整数を入力(MAX 16838):");scanf("%d",&a);
}
i=0;
while(a){
binary[i++] = a % 2;
a = a / 2;
}
while(i--) printf("%d", binary[i]);
printf("\n");
return 0;
}
0447デフォルトの名無しさん
2007/06/10(日) 18:19:54int num = n;
int tmp[20];
int i = 0;
for(i = 0 ; i<20 ; i++){
tmp[i] = n%2;
n = n/2;
if(n == 0)break;
}
for(j = i ; j>=0 ; j--)
printf("%d",tmp[j]);
}
0448デフォルトの名無しさん
2007/06/10(日) 18:21:510449デフォルトの名無しさん
2007/06/10(日) 18:27:32テンプレに沿ってって言ったのに
#include <stdio>
#include <stdlib>
int main(void)
{
char *p,buf[20];
int a,b,n;
n=19;
while(1)
{
printf("16838までの整数を入力して>");
fgets(buf,10,stdin);
a=atoi(buf);
if((0<=a&&a<=16838) break;
printf("入力範囲外です\n");
}
buf[n]='\0';
while(a)
{
n--;
b=a%2;
buf[n]=(char)b+'0';
a/=2;
}
printf("%s",buf+n);
return 0;
}
0450デフォルトの名無しさん
2007/06/10(日) 18:30:17[2] 問題文(含コード&リンク):
以下を改良して、任意のWebサーバーの任意のファイルのヘッダ情報を取得するプログラムを作成せよ。
たとえばwww.yahoo.co.jp/news/みたいに指定できるようにする
http://www.uploda.net/cgi/uploader2/index.php?file_id=0000034663.c
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限: 特にないです。
どうかよろしくお願いしますm(__)m
0451デフォルトの名無しさん
2007/06/10(日) 18:32:05#include <stdio.h>
#include <math.h>
int main()
{
int y,i;
double x=-8.0;
printf(" 1 2 3 4 5 6 7\n");
printf(" 01234567890123456789012345678901234567890123456789012345678901234567890\n");
while(x<=8.0){
y=(int)pow(x,2);
printf("%+.1f",x);
for(i = 0; i <= y; i++)
putchar(' ');
putchar('*');
putchar('\n');
x+=1.0;
};
return 0;
}
0453デフォルトの名無しさん
2007/06/10(日) 18:47:390454デフォルトの名無しさん
2007/06/10(日) 18:48:45↑のほうに全く同じ回答あるし
0455デフォルトの名無しさん
2007/06/10(日) 18:50:590456デフォルトの名無しさん
2007/06/10(日) 18:58:23引数にURLで実行。
エラー処理は知らん。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4205.txt
0457450 ◆QeWFJGRDFk
2007/06/10(日) 18:58:49というか>>451で頂いたのは間違ってるんでしょうか?
うpしたの消しちゃったのでもう一度上なおしました。
よろしくお願いしますm(__)m
http://www.uploda.net/cgi/uploader2/index.php?file_id=0000034665.c
0458デフォルトの名無しさん
2007/06/10(日) 18:59:15http://x68000.q-e-d.net/~68user/net/c-http-1.html
だがCだとめんどくさくて、正直やる気になれない。
0460デフォルトの名無しさん
2007/06/10(日) 19:41:28[2] 問題文(含コード&リンク):
まずmallocを使ってバッファを確保しバッファへのポインタを返し、
またもう読み込むデータがないならNULL(EOFに到達したら)を返すfgetsのための関数を作る。
入力はいつもstdinからで100バイト程度の大きさとする。
main文では100行程度入力し、最後の行から最初の行に向かって出力させる。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6/13
[5] その他の制限: 特になし。
よろしくお願いします。
0461デフォルトの名無しさん
2007/06/10(日) 19:57:38#include <stdio.h>
#include <stdlib.h>
void push(char **s, int *nc, int *sz, int c)
{
if (*nc == *sz) *s = realloc(*s, *sz *= 2);
(*s)[(*nc)++] = c;
}
char *getline(FILE *fp)
{
char *s = malloc(1);
int c, nc = 0, sz = 1;
while ((c = getc(fp)) != EOF && c != '\n')
push(&s, &nc, &sz, c);
if (nc == 0 && c == EOF) return 0;
if (c == '\n') push(&s, &nc, &sz, '\n');
push(&s, &nc, &sz, 0);
return s;
}
int main(void)
{
char *s, **lines = malloc(sizeof(char*));
int nc = 0, sz = 1;
while (s = getline(stdin)) {
if (nc == sz) lines = realloc(lines, sizeof(char*)*(sz*=2));
lines[nc++] = s;
}
while (nc) fputs(lines[--nc], stdout);
return 0;
}
0462デフォルトの名無しさん
2007/06/10(日) 19:58:180463デフォルトの名無しさん
2007/06/10(日) 19:58:44「fgetsのための関数」は一体何をする関数?
程度っていうのはやっかいな指示だな
100バイト程度とか100行程度
~~~~~ ~~~~~
// エスパー回答の一部
char *fgets_no_tame_no_kansuu(void){
char buf[200], *ret=NULL;
int len;
fgets(buf, sizeof(buf), stdin);
len=strlen(buf);
if(len>0){
ret=malloc(strlen(buf)+1);
strcpy(ret, buf);
}
return ret;
}
0464デフォルトの名無しさん
2007/06/10(日) 20:02:290465デフォルトの名無しさん
2007/06/10(日) 20:10:00[2] 問題文(含コード&リンク): 下記値で一次元配列a[]を初期化し、その最大値と最小値を求める。
ただし最後の要素9999はデータの終わりを示す記号であり最大値にも最小値にもならない。
配列の初期化データ-->75,64,12,48,88,26,57,94,37,9999
(実行結果)
最大は94で、配列の8番目の要素である。
最小は12で、はいれつの3番目の要素である。
[3] 環境
[3.1] OS: xp
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 今日まででお願いします。
0466デフォルトの名無しさん
2007/06/10(日) 20:16:16#include <stdio.h>
int main(void)
{
int a[] = { 75,64,12,48,88,26,57,94,37,9999 };
int i, imin = 0, imax = 0, vmin = 75, vmax = 75;
for (i = 0; a[i] != 9999; i++) {
if (a[i] < vmin) imin = i, vmin = a[i];
if (a[i] > vmax) imax = i, vmax = a[i];
}
printf("最大は%dで、配列の%d番目の要素である。\n", vmax, imax+1);
printf("最小は%dで、はいれつの%d番目の要素である。\n", vmin, imin+1);
return 0;
}
0467デフォルトの名無しさん
2007/06/10(日) 20:17:39int main(void){
int i;
int a[10] = {75, 64, 12, 48, 88, 26, 57, 94, 37, 9999};
int max = a[0], max_num = 0;
int min = a[0], min_num = 0;
for(i=1; i<10; i++){
if(max < a[i]){
max = a[i];
max_num = i;
}
if(min > a[i]){
min = a[i];
min_num = i;
}
}
printf("最大は%dで、配列の%d番目の要素である。\n", max, max_num);
printf("最小は%dで、はいれつの%d番目の要素である。\n", min, min_num);
return 0;
}
0468デフォルトの名無しさん
2007/06/10(日) 20:18:46それだと9999が入る
0469デフォルトの名無しさん
2007/06/10(日) 20:21:020470デフォルトの名無しさん
2007/06/10(日) 20:21:32int main(void)
{
int data[10]={75,64,12,48,88,26,57,94,37,9999};
char i=0,max=0,min=0;
while(data[i] != 9999){
if(data[i]>data[max]) max=i;
if(data[i]<data[min]) min=i;
i++;
}
printf("最大は%dで、配列の%d番目の要素である。\n",data[max],max+1);
printf("最小は%dで、配列の%d番目の要素である。\n",data[min],min+1);
return 0;
}
0471デフォルトの名無しさん
2007/06/10(日) 20:24:060472デフォルトの名無しさん
2007/06/10(日) 20:25:180473デフォルトの名無しさん
2007/06/10(日) 20:27:040474デフォルトの名無しさん
2007/06/10(日) 20:37:360475デフォルトの名無しさん
2007/06/10(日) 20:40:56ありがとうございます。
これから課題立て続けに書きますけどよろしいでしょうか?
さっきみたいな基礎的な課題です。
0477デフォルトの名無しさん
2007/06/10(日) 20:43:31>>476
俺にはレベルたけぇYO!
0478デフォルトの名無しさん
2007/06/10(日) 20:49:15画像用意するのがマンドクセ
0479465
2007/06/10(日) 20:49:20下記値を配列a[3]、b[3]に代入して、相対する値の積をc[3]に代入して表示する。
a[0] a[1] a[2]
8 3 6
b[0] b[1] b[2]
2 5 7
c[0] c[1] c[2]
8*2 3*5 6*7
<実行結果>
8*2=16
3*5=15
6*7=42
0480465
2007/06/10(日) 20:52:18<実行結果>
a[0]=58
a[1]=32
a[2]=17
a[3]=46
a[0]=46
a[1]=17
a[2]=32
a[3]=58
0481デフォルトの名無しさん
2007/06/10(日) 20:52:380482465
2007/06/10(日) 20:55:46x[0] 〜〜〜x[4]
10 15 20 50 55
<実行結果>
x[0]=10 x[1]=15 x[2]=20 x[3]=50 x[4]=55 total=150
0483デフォルトの名無しさん
2007/06/10(日) 20:56:02[2] 問題文:
整列を行う関数テンプレートを作りなさい。整列方法は問わない。引数は、大小比較が出来るデータ型の配列とその要素数を入れるものとする。
データ型の異なる2種類以上の適当な配列に対して、適用せよ。参考として、int 型配列に対する選択法の関数を記載する。
void sentakuhou(int n, int *a)
{
int w;
int j,k;
for(j=0;j<n-1;j++){
for(k=j+1;k<n;k++){
if(a[j]>a[k]){
w=a[k];
a[k]=a[j];
a[j]=w;
}
}
}
}
[3] 環境
[3.1] OS:WindowsXP Pro
[3.2] コンパイラ名とバージョン: VC++2005
[3.3] 言語: C++
[4] 期限: 2007年6月13日
[5] その他の制限: C言語はとりあえず終っています、標準ライブラリは習っていません
よろしくお願いします
0484465
2007/06/10(日) 21:00:04※switch文を使用すること。
変数はint mon を使用すること。
<実行結果1>
今、何月ですか?:6
夏だよぉプールいきてぇ。
<実行結果2>
今、何月ですか?:2
冬じゃぼけカイロくれぇ。
<実行結果3>
今、何月ですか?:13
・・・あほ?
0485デフォルトの名無しさん
2007/06/10(日) 21:03:240486デフォルトの名無しさん
2007/06/10(日) 21:07:45int main(void){
int a[3] = {8, 3, 6};
int b[3] = {2, 5, 7};
int c[3];
int i;
for(i=0; i<3; i++){
c[i] = a[i] * b[i];
printf("%d*%d=%d\n", a[i], b[i], c[i]);
}
return 0;
}
0487デフォルトの名無しさん
2007/06/10(日) 21:10:03[2] 問題文(含コード&リンク):
長さ256以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする.
T1が"ABC",T2が"AB"の場合のように,T2の先頭部分がT1の先頭部分に含まれるときは1を,
そうでないときは0を値として返す関数 int chkmatch(char *t1, char *t2);を作成しなさい.
プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.
文字列は256文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない.
計算の手順としては,文字列の先頭から一文字ずつ一致するかどうかを比較する.
T2にあたる文字列中の比較対象となった文字が'\0'であれば,T2はT1に包含されたものとして扱う.
これ以外で比較時に,一文字でも一致しない場合があれば包含されていないとして扱う.
この関数をもちいて,
2つの文字列を与えたとき,一つ目の文字列の中に二つ目の文字列が含まれている場合(この場合先頭が必ずしも一致していなくてもよいものとする)には "yes"を
さもなければ"no"を出力するプログラムを作成しなさい.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年6月15日
[5] その他の制限: #include "stdio.h"のみで、他の標準ライブラリの関数を使う場合は自作すること。
0488デフォルトの名無しさん
2007/06/10(日) 21:10:26春:3〜5月
夏:6〜8月
秋:9〜11月
冬:12〜2月
と仮定
switch(mon){
case 3: case 4: case 5: puts("春"); break;
case 6: case 7: case 8: puts("夏だよぉプールいきてぇ。"); break;
case 9: case 10: case 11: puts("秋"); break;
case 12: case 1: case 2: puts("冬じゃぼけカイロくれぇ。"); break;
default: puts("・・・あほ? ");
}
0489デフォルトの名無しさん
2007/06/10(日) 21:12:070490デフォルトの名無しさん
2007/06/10(日) 21:12:09[2] 問題文(含コード&リンク):
長さ256文字以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする.
T1の中にT2が出現する場合に,その一番左に現れる文字列の先頭アドレスを値として返す関数 char *findstr(char *t1, char *t2);を作成しなさい.
ただし,T1の中にT2が出現しないときはNULLを値として返すものとする.
findstr()の中で,比較対象となるT1のなかの先頭文字を先頭から一文字ずつずらして
chkmatch()を呼び出すことにより要求を満たす関数を作成することができる.
この関数を用いて, 1)最初にT1を表示し,2)その次にT1の中でT2の文字列が出現するまでの文字をスペース(' ')として端末に出力し,
そのあとT2の文字列文だけ(’^’)を出力し、再度T2の文字列が出現するまでスペース(’ ’)を出力し..というプロセスを文末まで続けるプログラムを作成しなさい。
3a)このプロセスは、findstrを実行して文字列の先頭を検索し、そこまでスペースを出力する。3b)文字列の先頭が検出されたら、T2の文字列分だけ(’^’)を出力する。
3c)T2の文字列分だけポインタを進め、そこからfindstrを再実行する(3aにもどる)というプロセスを繰り返すことで完成する。4)T2がT1に出現しない場合はT1の文字数だけのスペースが表示されるようにすること.
プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.
文字列は60文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年06月13日まで)
[5] その他の制限: #include "stdio.h"のみで、他の標準ライブラリの関数を使う場合は自作すること。
この二つをお願いします。
0491460
2007/06/10(日) 21:13:00fgetsを使うとき、クライアントプログラムは入力のためにバッファを準備しなければなりません。
mallocを使ってバッファを割り当てて、バッファにポインターを戻すfgetsのための関数を作成してください。読み込むデータがないとき(EOFになったら)、NULLを返してください。
行の長さは多くても100バイトであると仮定してください。また、入力が常にstdinからあると仮定してください。
最高100本の行を読み込むmain文を作成してください。逆順で行を出力してください。各々の行へのポインタを格納するために、多数のポインタ(array of pointers)を使用してください。
あなたはメモリをfreeする必要はありません。
バッファの長さとstdinが一定であるので、あなたは関数へバッファを渡す必要はないので、あなたの関数の型はchar *getline(void)でなければなりません。
あとコンパイラとは別にputtyというのを使っていて、それで入力ファイルをパイプし出力ファイルと比較するみたいです。
入力ファイルhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4206.txt
出力ファイルhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4207.txt
0492デフォルトの名無しさん
2007/06/10(日) 21:13:10int main(void){
int a[4] = {58, 32, 17, 46};
int i, temp;
for(i=0; i<2; i++){
temp = a[i];
a[i] = a[3-i];
a[3-i] = temp;
}
for(i=0; i<4; i++){
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
0493デフォルトの名無しさん
2007/06/10(日) 21:17:30int main(void){
int sum=0, i, x[5] = {10, 15, 20, 50, 55};
for(i=0; i<5; i++){
printf("a[%d]=%d ", i, a[i]);
sum += a[i];
}
printf("total=%d", sum);
return 0;
}
0494デフォルトの名無しさん
2007/06/10(日) 21:18:470495デフォルトの名無しさん
2007/06/10(日) 21:22:190496デフォルトの名無しさん
2007/06/10(日) 21:23:29とりあえずもう少し他人が読みやすい文章
ということについて考えたほうがいい
0497デフォルトの名無しさん
2007/06/10(日) 21:24:560498デフォルトの名無しさん
2007/06/10(日) 21:25:31#include <stdio.h>
int chkmatch(char *t1, char *t2)
{
if(*t2==0) return 1;
while(*t1 && *t2) if(*(t1++)!=*(t2++)) return 0;
return 1;
}
int main(void)
{
char t1[]="aaaaaaaabbbbbbbbccccccccd";
char t2[]="bc";
char *p;
int f=0;
for(p=t1; *p; ++p) if(chkmatch(p, t2)){ f=1; break; }
printf("%s\n", (f)?"yes":"no");
return 0;
}
0499デフォルトの名無しさん
2007/06/10(日) 21:27:40#include <stdio.h>
#include <string.h>
int chkmatch(char *t1, char *t2) {
while (*t1 && *t2 && *t1++ == *t2++) {}
return !*t2;
}
char *findstr(char *t1, char *t2) {
for (;*t1 && !chkmatch(t1, t2); ++t1) {}
return *t1 ? t1 : 0;
}
#define NPUT(s,c,n) do { memset(s, c, n); fwrite(s, 1, n, stdout); } while (0)
int main(void)
{
char T1[0x100], T2[0x100], tmp[0x100], *p, *q;
int n;
while (fgets(T1, sizeof T1, stdin) && fgets(T2, sizeof T2, stdin)) {
if (p = strchr(T1, '\n')) *p = 0;
if (p = strchr(T2, '\n')) *p = 0;
puts(T1);
for (p = T1, n = strlen(T2); q = findstr(p, T2); p = q + n) {
NPUT(tmp, ' ', q - p);
NPUT(tmp, '^', n);
}
n = T1 + strlen(T1) - p;
NPUT(tmp, ' ', n);
putchar('\n');
}
return 0;
}
0500デフォルトの名無しさん
2007/06/10(日) 21:29:420501デフォルトの名無しさん
2007/06/10(日) 21:30:110502デフォルトの名無しさん
2007/06/10(日) 21:31:50#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *fgets_no_tame_no_kansuu(void){
char buf[200]="", *ret=NULL;
int len;
fgets(buf, sizeof(buf), stdin);
len=strlen(buf);
if(len>0){
ret=malloc(strlen(buf)+1);
strcpy(ret, buf);
}
return ret;
}
int main(void){
char *line_top[100], *ret;
int i, line_num;
for(line_num=0;line_num<100;line_num++){
ret=fgets_no_tame_no_kansuu();
if(ret==NULL) break;
line_top[line_num]=ret;
}
for(i=line_num-1;i>=0;i--)
printf("%s", line_top[i]);
return 0;
}
0503デフォルトの名無しさん
2007/06/10(日) 21:33:04すみませんでした・・。問題そのままコピペしたもので・・。
このような表示のものを出したいのです
[b1007xxx@C*LPC* ~/pp7]% ./fstr
pen and pencils
pen
pen and pencils
^^^ ^^^
[b1007xxx@C*LPC* ~/pp7]% ./fstr
Government of the people by the people for the people
people
Government of the people by the people for the people
^^^^^^ ^^^^^^ ^^^^^^
最初に文を入力して、次にチェックする文を入れ、
結果では最初に入力した文を表示し、その下にチェックする文と
同じものに'^'を表示せよ、というものです。わかりずらくてすみませんでしたorz
0504デフォルトの名無しさん
2007/06/10(日) 21:34:32で、>>499で何か問題があるのか?
0505デフォルトの名無しさん
2007/06/10(日) 21:35:24更新してませんでしたーorz
>>499さんので問題なさそうです
0506デフォルトの名無しさん
2007/06/10(日) 21:35:40>>461でよかったと思うぞ
動かしてみたか?
0507デフォルトの名無しさん
2007/06/10(日) 21:41:040508499
2007/06/10(日) 21:46:45#include <stdio.h>
#include <string.h>
int chkmatch(char *t1, char *t2) {
while (*t1 && *t2 && *t1++ == *t2++) {}
return !*t2;
}
char *findstr(char *t1, char *t2) {
for (;*t1 && !chkmatch(t1, t2); ++t1) {}
return *t1 ? t1 : 0;
}
#define NPUT(s,c,n) do { memset(s, c, n); fwrite(s, 1, n, stdout); } while (0)
int main(void)
{
char T1[0x100], T2[0x100], tmp[0x100], *p, *q;
int n;
while (fgets(T1, sizeof T1, stdin) && fgets(T2, sizeof T2, stdin)) {
if (p = strchr(T1, '\n')) *p = 0;
if (p = strchr(T2, '\n')) *p = 0;
puts(T1);
if ((n = strlen(T2)) > 0) {
for (p = T1; q = strstr(p, T2); p = q + n) {
NPUT(tmp, ' ', q - p);
NPUT(tmp, '^', n);
}
n = T1 + strlen(T1) - p;
NPUT(tmp, ' ', n);
}
putchar('\n');
}
return 0;
}
0509デフォルトの名無しさん
2007/06/10(日) 21:48:10ああ、getlineの引数がvoidじゃないんだな。
0510デフォルトの名無しさん
2007/06/10(日) 22:05:360511デフォルトの名無しさん
2007/06/10(日) 22:08:181レスに収まるのならオレは jane の過去ログに残っているほうがありがたい
0512デフォルトの名無しさん
2007/06/10(日) 22:09:210513デフォルトの名無しさん
2007/06/10(日) 22:47:580514デフォルトの名無しさん
2007/06/10(日) 22:56:270515デフォルトの名無しさん
2007/06/10(日) 23:08:23ttp://www.cs.bme.hu/~bodon/en/apriori/
のプログラムを変えて、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4208.txt
↑のようなもっと長いデータ読み込ませたいのですが、
どうすればいいでしょうか?
実行は
WinXP上でCygwin動かしてやってます
0516デフォルトの名無しさん
2007/06/10(日) 23:09:34#include <atlstr.h>
#include <iostream>
struct AAA {
static const CString s;
static const CString s1;
};
const CString AAA::s = "abc";
const CString AAA::s1 = "ABC";
int main()
{
std::cout << AAA::s << std::endl;
std::cout << AAA::s1 << std::endl;
}
0517デフォルトの名無しさん
2007/06/10(日) 23:14:40マルチ乙
0518デフォルトの名無しさん
2007/06/10(日) 23:23:150519デフォルトの名無しさん
2007/06/10(日) 23:42:13プログラムはどのようなプログラムを組めばよろしいのでしょうか
0520デフォルトの名無しさん
2007/06/10(日) 23:46:520521デフォルトの名無しさん
2007/06/10(日) 23:46:57キーボードから10進数を入力し、その数値の16進数と8進数を表示しー900を入力すると処理を終了するプログラムを組めばいいと思います。
テンプレ読んでくださいね。
言語と環境くらいは書いてほしいです。
−900で終了って変わってますな。
0522デフォルトの名無しさん
2007/06/10(日) 23:47:05そのとき、ifを用いて-900なら終了、そうでないならプログラムを継続するようにし、
継続している場合は16進数と8進数を、printfを用いて表示してやればいい。
0523デフォルトの名無しさん
2007/06/10(日) 23:54:09[2] 問題文(含コード&リンク):
main文は変えずにgetline関数内のfgetsで入力を得るのではなくをgetcharで入力を得るようにする。またmallocを使い最初、大きさを100とする。
読み込む行がバッファより大きくなったらreallocを使ってバッファを大きくする、またreallocする際大きさは倍にする(100で足りなければ200にする)。行が終わったら'\n'と'\0'という文字を加える。その後またreallocを使い読み込んだ行と同じ大きさに短くする
またgetlineより受け取ったバッファをfreeすること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4210.txt
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6/13
[5] その他の制限: 特になし。
よろしくおねがいします。
0524デフォルトの名無しさん
2007/06/10(日) 23:55:07言語はCでOSはXPです
0525デフォルトの名無しさん
2007/06/10(日) 23:57:33テンプレ通りに書けっつう話だよ。
0526デフォルトの名無しさん
2007/06/10(日) 23:57:49プログラミング始めたばかりでよくわからないんです・・・。
どうかお願いします。
最大値を最小値を求める関数を作る問題なのですが、
#include <stdio.h>
// iとjのうち,大きいほうの数字を返す
double myMax(double i, double j){
// ここを作成する
}
// iとjのうち,小さいほうの数字を返す
double myMin(double i, double j){
// ここを作成する
}
void main(){
// myMax(), myMin()が正しく動くか調べる処理を書く
}
の形で作ってもらえませんか。出来れば理解したいので簡単なものにしてほしいです。
いきなり、ずうずうしいと思いますがどうかお願いします。
0527デフォルトの名無しさん
2007/06/11(月) 00:00:550528デフォルトの名無しさん
2007/06/11(月) 00:02:360529526
2007/06/11(月) 00:04:43[1] 授業単元:授業演習
[2] 問題文(含コード&リンク):最大値,最小値を求める関数を作れ
#include <stdio.h>
// iとjのうち,大きいほうの数字を返す
double myMax(double i, double j){
// ここを作成する
}
// iとjのうち,小さいほうの数字を返す
double myMin(double i, double j){
// ここを作成する
}
void main(){
// myMax(), myMin()が正しく動くか調べる処理を書く
}
の形で
[3] 環境
[3.1] OS: Windows XP
[3.2] Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:明日16時
[5] その他の制限:とくになし
0530デフォルトの名無しさん
2007/06/11(月) 00:10:38double myMax(double i, double j){
if(i-j>0) return i;
return j;
}
double myMin(double i, double j){
if(i-j>0) return j;
return i;
}
void main(){
double x, y;
double max, min;
printf("値を二つ入力してください。\n");
printf("x = ");
scanf("%lf", &x);
printf("y = ");
scanf("%lf", &y);
max = myMax(x, y);
min = myMin(x, y);
printf("max = %lf, min = %lf である。\n", max, min);
}
0531デフォルトの名無しさん
2007/06/11(月) 00:14:35誰かおねがいー
0533デフォルトの名無しさん
2007/06/11(月) 00:16:27テンプレ読んで来いって言われたのがわかんないのか?
0534デフォルトの名無しさん
2007/06/11(月) 00:17:07#include <stdio.h>
int main(void)
{
int n;
while (scanf("%d", &n) == 1 && n != -900)
printf("oct:%o hex:%x\n", n, n);
return 0;
}
0535デフォルトの名無しさん
2007/06/11(月) 00:18:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4211.txt
猿でもわかりそうな風に解説しといた
0536デフォルトの名無しさん
2007/06/11(月) 00:22:44死ね
0537デフォルトの名無しさん
2007/06/11(月) 00:24:40お前さん>>460か。条件を小出しにするのは感心せんな。
で、>>502のコードをほんの少し変えたんだな。
getline()は>>461を少しいじくるだけでいいだろ。
0538デフォルトの名無しさん
2007/06/11(月) 00:34:290539デフォルトの名無しさん
2007/06/11(月) 00:38:260540デフォルトの名無しさん
2007/06/11(月) 00:39:47> 回答者の便宜のため、質問の際は以下を行うことを推奨します。
「推奨」だあくまで。
あとは勝手にやれ。
0541デフォルトの名無しさん
2007/06/11(月) 00:56:01>>536
>>533
>>527
>>525
↑こいつらうっとうしい、嫌ならこんなスレにこなきゃ良いだろ。馬鹿じゃね?こういうのって
引きこもりの基地外なんだろうね
0542デフォルトの名無しさん
2007/06/11(月) 00:57:18そんなあなたも仲間入り♪
0543デフォルトの名無しさん
2007/06/11(月) 00:59:05はぁ?テンプレ無視した課題でも俺はいちいちガミガミ文句言わずにレスするけど?w
なんかさぁ、世の中を勘違いしている基地外っているよな。ルール違反しているやつを
見つけて、気持ち悪くネチネチおめー悪いんだよ!みたいな司法の番人ぶっているやつ。
終いには、裁く権利もないのに、自分勝手なルールで裁きを始める奴w
そいつ、完全に周りから干されているよな・・・勘違い野郎だってw
0544デフォルトの名無しさん
2007/06/11(月) 01:00:03テンプレ守れない奴に回答してる馬鹿は何なの
↑さらにこれだろ、レスした奴を馬鹿にする奴。いちいちうぜーって。お前がレスすんなやw
0545デフォルトの名無しさん
2007/06/11(月) 01:01:33ttp://www.youtube.com/watch?v=Pc2sCf9MBIc
0546デフォルトの名無しさん
2007/06/11(月) 01:07:12乞食乙
0547デフォルトの名無しさん
2007/06/11(月) 01:11:30たぶん君、このスレ向いてないと思うよ。
質問者は丸投げするだけ
答えたい奴は勝手に答えるだけ
そういうスレだから。
0548デフォルトの名無しさん
2007/06/11(月) 01:13:00裁く権利もないのに、自分勝手なルールで裁きを始める奴乙
0549デフォルトの名無しさん
2007/06/11(月) 01:13:06(笑)
0550デフォルトの名無しさん
2007/06/11(月) 01:14:210551デフォルトの名無しさん
2007/06/11(月) 01:14:49たぶん君、このスレ向いてないと思うよ。
質問者は丸投げするだけ
答えたい奴は勝手に答えるだけ
そういうスレだから。
0552デフォルトの名無しさん
2007/06/11(月) 01:19:21?
質問者は自助努力をせずに丸投げがデフォのスレなんだから、
それを乞食と呼び不快に感じるような精神性の持ち主には向いてないよ、と
言ったのだが、分からなかったのかい?
質問者は丸投げとは言えテンプレを守ることが「推奨」されているが、
あくまで推奨だ。
テンプレを守らない質問者の態度が気に食わないのなら、えんえん粘着して
駄レスを積み重ねるような真似をせずに、スルーしたらどうかね。
答えたい奴が答えるかもしれないし、答えないかもしれない。
それは答えるやつの勝手だな。
0553デフォルトの名無しさん
2007/06/11(月) 01:26:04答える答えないは回答者の勝手なんだよな?
で、テンプレを使わなかった人が回答が突かずオロオロしてるところに
「テンプレ使え」とアドバイスすることがそこまでキレる理由なのか?
回答するしないも、テンプレ使う使わないも勝手だろ?
アドバイスするしないも勝手じゃね?ってかもうスルーしようよ。
0554デフォルトの名無しさん
2007/06/11(月) 01:27:52> そこまでキレる理由なのか?
俺は別にキレてないよ。>>541あたりのレスは俺じゃないし。
> 「テンプレ使え」とアドバイス
いや、それは構わんと思うよ。
>>536, 538は「アドバイス」なんてもんじゃないけどな。
0555デフォルトの名無しさん
2007/06/11(月) 01:28:39アドバイス?レスした他の人も含めてお前は 馬鹿 にしてんじゃんw
自分の発言や行動に責任を持てや、ガキw
なにこれ?
538 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:34:29
テンプレ守れない奴に回答してる馬鹿は何なの
536 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:22:44
>>534
死ね
0556デフォルトの名無しさん
2007/06/11(月) 01:30:52良い解決策を教えてやるよ。嫌ならこんなスレに来るな、分かりやすいだろ?
別にお前みたいなクズをこのスレが雇っているわけでもないんだから、嫌ならいつでも辞めて良いよ?
どうせお前みたいな奴は、現実社会でも自分が気に入らないことを理由に会社に不満を言って
お前辞めろ?って解雇されてんだろw
0557デフォルトの名無しさん
2007/06/11(月) 01:31:410558デフォルトの名無しさん
2007/06/11(月) 01:33:230559自分で言ってて恥ずかしい奴w
2007/06/11(月) 01:34:29>>552
答える答えないは回答者の勝手なんだよな?
で、テンプレを使わなかった人が回答が突かずオロオロしてるところに
「テンプレ使え」とアドバイスすることがそこまでキレる理由なのか?
回答するしないも、テンプレ使う使わないも勝手だろ?
アドバイスするしないも勝手じゃね?ってかもうスルーしようよ。
> 答える答えないは回答者の勝手なんだよな?
そうですが何か?w
> 回答するしないも、テンプレ使う使わないも勝手だろ?
勝手って何だよ、勝手ってw いかに自分勝手な奴か分かりやすい奴だなぁw
他人がレスするのも勝手だがお前に馬鹿にされる筋合いはねーよ
嫌ならお前が回答しなきゃ良いだけ、分かったか?
> アドバイスするしないも勝手じゃね?
他者を馬鹿にするのはアドバイスでもなんでもねーよw
0560デフォルトの名無しさん
2007/06/11(月) 01:34:550561デフォルトの名無しさん
2007/06/11(月) 01:37:56[2] 問題文(含コード&リンク):2つの復素数を入力し、それらの積を表示するプログラムを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年6月11日23:00mmまで
[5] その他の制限:復素数は構造体により実現すること
どうか宜しくお願いいたします。
0562デフォルトの名無しさん
2007/06/11(月) 01:44:470563デフォルトの名無しさん
2007/06/11(月) 01:53:270564デフォルトの名無しさん
2007/06/11(月) 01:57:4710進数を2進数に変換する問題なのですが、
S(符号)は1ビットで仮数の符号を表す
E(指数部)は4ビットで指数を表し負数は2の補数で表現
M(仮数部)は11ビットで仮数の絶対値を表す
基数は2とする
仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す
小数点はEとMの位置にする
0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする
問1.10進数の5.25を2進数で表現しなさい
という問題なのですが、答えは0001110101000000であっているのでしょうか
0565デフォルトの名無しさん
2007/06/11(月) 02:14:520566デフォルトの名無しさん
2007/06/11(月) 02:29:090568デフォルトの名無しさん
2007/06/11(月) 03:28:27#include <stdlib.h>
#include <string.h>
//#define CX COMPLEX_T//#define Cx Complex//#define Ml Multiple//#define pt print//#define it input//#define sh show//#define rl real//#define im im//#define de dest
#define pf printf
#define rn return
#define NL NULL
#define EF EOF
typedef struct{double rl,im;}CX;
int mulCx(CX*de,CX*a,CX*b){if(de==NL||a==NL||b==NL)rn-1;de->rl=a->rl*b->rl-a->im*b->im;de->im=a->rl*b->im+a->im*b->rl;rn 0;}
int itCx(CX*de){char buf[255],*p;if(de==NL||pf("input complex ( format : [real](+|-)[imaginary]i ) : ")==EF||fgets(buf,sizeof(buf),stdin)==NL)rn-1;de->rl=atof(buf);
if((p=strchr(buf,'+'))==NL)if((p=strchr(buf,'-'))==NL)rn-1;de->im=atof(p);rn 0;}
int ptCx(CX*src){if(src==NL||pf("%g",src->rl)==EF||(src->im!=0&&pf("%s%gi",src->im>0?"+":"",src->im)==EF))rn-1;rn 0;}
int itMlCx(CX*a,CX*b){if(pf("a = ")==EF||itCx(a)!=0||pf("b = ")==EF||itCx(b)!=0)rn-1;rn 0;}
int shMlCx(CX*c,CX*a,CX*b){if(pf(" ( ")==EF||ptCx(a)!=0||pf(" ) * ( ")==EF||ptCx(b)!=0||pf(" ) = ")==EF||ptCx(c)!=0||pf("\n")==EF)rn-1;rn 0;}
int main(int argc,char*argv[]){CX a,b,c;if(itMlCx(&a,&b)!=0||mulCx(&c,&a,&b)!=0||shMlCx(&c,&a,&b)!=0){pf("error.\n");rn 1;}rn 0;}
今日が月曜だという理由だけで気が滅入る。
0569デフォルトの名無しさん
2007/06/11(月) 06:13:470570デフォルトの名無しさん
2007/06/11(月) 06:50:160571デフォルトの名無しさん
2007/06/11(月) 07:11:19どなたか教えてください
0572デフォルトの名無しさん
2007/06/11(月) 09:28:02[2] 問題文(含コード&リンク): 何か面白いプログラムを作成せよ(笑いを誘うものは評価が高い!)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: 今日中(明日提出なので)
[5] その他の制限: ifとPADの授業後の課題。しかし制限は特に指定されていません
僕には面白いものを作成する自信がありません。どうか力を貸して下さい。
0573デフォルトの名無しさん
2007/06/11(月) 09:33:43http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4214.c
0574デフォルトの名無しさん
2007/06/11(月) 10:23:53二つ名占い。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4217.c
0576デフォルトの名無しさん
2007/06/11(月) 10:59:51[2] 問題文(含コード&リンク):
次の式をx=1.0として前進、中央、後退 の値をn=2,6,10の場合で出し、精度を比較せよ
(式)3(xのn乗)+4x+5
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:今週の火曜日まで
[5] その他の制限:
数値微分を使うらしいのですが、それ以外は分からない状況です。
これだけのヒントで分かる方いましたらよろしくお願いします。
0577デフォルトの名無しさん
2007/06/11(月) 11:29:00[2] 問題文(含コード&リンク):
キーボードから入力された1行(空白で区切られた正整数並びの文字列)を項に分解して,i番目の項の整数値を配列要素d[i-1]に累算しながら格納するプログラムをつくりなさい。
ただし,配列dの要素数は10として宣言し,10項目より多い入力の場合は11項目以降を棄却しなさい。1行の入力には関数fgetsを用いなさい。
fgetsは改行文字も取り込む点に注意して,入力の終了は「改行のみの入力」で判定しなさい。
<入力例>
空白文字で区切って正整数の並びを入力してください!
入力終了は何も入力せずに改行です
59 37 88 32 19 44 98 78 ↵ ……8項目の入力
21 35 57 ↵ ……3項目の入力
↵ ……入力終了
<出力例>
d[0] = 80
d[1] = 72
d[2] = 145
d[3] = 32
d[4] = 19
d[5] = 44
d[6] = 98
d[7] = 78
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:borland
[3.3] 言語: C
[4] 期限:6月14日まで
よろしくお願いします。
0578574
2007/06/11(月) 11:34:12講義の内容から察すると、574は不適切な気がする。
出題者はこんなのを期待してるんじゃないかな?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int a;
srand(time(NULL));
printf("あなたの前世を占います。\nあなたの前世は・・・ ");
a=rand()%4;
if(a==0) printf("お笑い芸人です。");
else if(a==1) printf("名も無き風来坊です。");
else if(a==2) printf("サラリーマンです。");
else printf("平凡な主婦です");
return 0;
}
0579デフォルトの名無しさん
2007/06/11(月) 11:47:49[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4218.txt
上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文)
値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
ある値が出た場合のみポイントが復活する機能を追加しなさい
(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
2つのプログラムの作成をお願いします。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月20日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
0580デフォルトの名無しさん
2007/06/11(月) 11:50:14[2] 問題文:
新しい型(設計図)として,下記の要素を含む「電車」型を設計しなさい(新しい型(設計図)は,main関数の外で記述すること)。
–次に,main関数で上記の型(設計図)の変数を1つ宣言(生成)し,その変数の要素に適当な初期値を格納しなさい。ただし,関数を用いること。
–最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。ただし,関数を用いること。
•新しい型名:TRAIN
–要素1:車輪数・・・型,型名は考えること
–要素2:窓数・・・型,型名は考えること
–要素3:座席数・・・型,型名は考えること
–要素4:車内温度・・・型,型名は考えること
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月17日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
0581デフォルトの名無しさん
2007/06/11(月) 12:00:15[2] 問題文:
ボーリングのスコア計算をするプログラムを作成しなさい
(入力:スコア, 配列データ:スコア表, 出力:入力毎にスコア表を表示させる)
ttp://hmets.hp.infoseek.co.jp/boul.html
↑のように表を作成して表示するみたいです。10回戦目は3投、投げます
氏名の部分はいりません。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月20日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
0582デフォルトの名無しさん
2007/06/11(月) 13:42:04[3] 環境 [3.1] OS:WinXP [3.2] BorlandC++ [3.3] 言語:C++
[5] その他の制限:ヘッダファイルは<stdio.h>のみです。while、do、switchも使えないです。
例 acbd →abcdとなる
#include <stdio.h>
#define STR_MAX 256
#define EOS '\0'
int main(void)
{
char buf,str[STR_MAX];
int i,a;
printf("a〜zのアルファベットを入力して下さい\n");
for( i = 0 ; i < STR_MAX ; i++ ){ /* 配列に文字列を入力&ENDの判定 */
str[i] = getchar();
if( str[i] == EOF || str[i] == '\n' ){
str[i] = EOS;
break;
}
}
for( i-=1 ; 0 <= i ; i--){ /* アルファベットをソート */
for( a = i -1 ; 0 <= a ; a-- ){
if( str[i] < str[a]){
buf = str[i];
str[i] = str[a];
str[a] = buf;
}
}
}
printf("%s\n",str);
return 0;
}
0583デフォルトの名無しさん
2007/06/11(月) 13:55:02これってどういう意味ですか?
実行結果はどうなるの?
0584デフォルトの名無しさん
2007/06/11(月) 14:20:39> 仮数の0,2進数の少数以下第一位が1になるように
ってことは、0.1…… × 2^e
の形に正規化するってことかな。
だとすれば、5.25は0.10101(2進) × 2^4だから、
0010010101000000
になると思うよ。
0585デフォルトの名無しさん
2007/06/11(月) 14:20:45aに1×10^(-10)が代入される。
0586デフォルトの名無しさん
2007/06/11(月) 14:37:27>0010010101000000
何このバカ。
0587デフォルトの名無しさん
2007/06/11(月) 15:22:36きみやばいべ
0588デフォルトの名無しさん
2007/06/11(月) 15:24:4510.5乙
0589584
2007/06/11(月) 15:28:270590デフォルトの名無しさん
2007/06/11(月) 17:51:44[2] 問題文(含コード&リンク):
問題文と、指示が入ったテキストファイルです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4219.txt
こちらが読み込みに再利用するファイルです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4220.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualStudio2005
[3.3] 言語: C++
[4] 期限: 2007/6/16まで
[5] その他の制限:基本的に指定はありません。
よろしくお願いします。
0591デフォルトの名無しさん
2007/06/11(月) 19:45:03[1] 授業単元:Cプログラミング実習
[2] 問題文(含コード&リンク):
オリジナルプログラムの作成
下記要綱を満たしていればどんなプログラムでも問題ありません
�@文は最低50以上(;で終わる文のみカウント)
�A2次元配列、マクロを使用
�Bif,while,for文の使用
�C自作関数又は引数を使用。戻り値は問いません
�Dヘッダファイルを使用
�E誰が見ても分かりやすいプログラムにすること(/*説明*/)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VB.NET2003
[3.3] 言語: C
[4] 期限: 2007年6月15日
[5] その他の制限:ポインタ、リスト使用不可
初心者問題で気分悪くされたらもうしわけありません。宜しくお願いします。
0592デフォルトの名無しさん
2007/06/11(月) 19:47:59マルチ乙
0593デフォルトの名無しさん
2007/06/11(月) 20:58:52[2] 問題文(含コード&リンク):
オオカミとヤギを連れキャベツを持った農夫が川岸にいる。
川にはボートがあるが農夫の他には
動物一頭かキャベツ一個しか乗せられない。
農夫がいなければオオカミはヤギを襲うし、
ヤギはキャベツを食べてしまう。
すべてを無事に対岸に渡すにはどうしたらよいか?
(出展:wikipedia)
この問題を解くプログラムを作れ。
出力の形式は問わないが、他人が見て分かるような形にすること。
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007/6/13まで
[5] その他の制限:なし。
ぜひよろしければ、アルゴリズムを教えていただきたく思います。
コーディングなしでも、むしろそちらの方がありがたいです。
0594デフォルトの名無しさん
2007/06/11(月) 21:05:42バグ取りの依頼かい?コメントの前に全角スペースが入ってるからエラーが出るんだよ。
0595デフォルトの名無しさん
2007/06/11(月) 21:15:01こんなの見つけたけど参考になるかな?
ttp://www2.et.soft.iwate-pu.ac.jp/~g031b084/tubo/2004b/iskiso/answer/isen04.html
0596デフォルトの名無しさん
2007/06/11(月) 21:18:31[2] 問題文(含コード&リンク):
任意の関数(変数x)をキーボードから入力し、
xの値を変化させた場合の結果を表として出力するプログラムを作成せよ。
[3] 環境
[3.1] Windows
[3.2] Microsoft Visual C++
[3.3] C++
[4] 期限: 2007年06月12日09:00まで
[5] その他の制限: 特になし
よろしくお願いします。
文字列で入力させた後の分解・解析のやり方が特に分かんないです…
0597デフォルトの名無しさん
2007/06/11(月) 21:20:03[3.2] Microsoft Visual C++ 2003
0598デフォルトの名無しさん
2007/06/11(月) 21:20:19[2] 問題文(含コード&リンク):
ソース
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4221.txt
問題
このプログラムでは、1度結果を表示すると終了する。
その為、最後に「もう一度計算しますか」と表示して
“y”or“Y”を入力したら、再度データ入力に戻るよう変更する。
[3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C
[4] 期限: 明朝まで
[5] その他の制限: 制限ナシです。
よろしくお願いします
0599デフォルトの名無しさん
2007/06/11(月) 21:22:25[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
"rand1000.dat"というファイル(http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt)がある.
次の手順で動作するプログラムinsert.cを作成し,その動作を確認せよ.
1.まずファイルから保存されているデータ数nを読み込み,その数だけデータを読み込み配列に格納する.
2.次に,格納された配列をディスプレイ上に表示する.
3.そして,データが保存された配列について挿入ソートを実行する関数 insertionsort()を呼び出し,配列データを整列する.
4.最後に,整列された配列をディスプレイ上に表示しプログラムを終了する.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005
[3.3] 言語: C
[4] 期限:6月12日の夜までにお願いします
[5] その他の制限:特になし
0601デフォルトの名無しさん
2007/06/11(月) 21:44:210602デフォルトの名無しさん
2007/06/11(月) 22:03:04[2] 問題文(含コード&リンク):
1.random(), srandom(seed) 関数を用いて2 数の足し算問題を出すプログラムを作成しなさい.
ただし,問題は実行ごとに変化するようにすること
2.任意個の整数データをキーボードから入力して,総和,平均値,最大値,最小値,分散および標
準偏差を求めるプログラムを作成しなさい.ただし,プログラム中のどこかでポインタと配列を用
いて作成し,ポインタを使用した部分にはコメントをつけて処理内容を説明すること.
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし
よろしくお願いします
0603デフォルトの名無しさん
2007/06/11(月) 22:37:09#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int a,b;
srand((unsigned)time(NULL));
a=rand(); b=rand();
printf("%d + %d = %d \n",a,b,a+b);
return 0;
}
0604デフォルトの名無しさん
2007/06/11(月) 22:56:04#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
#define END_DATA (99999)
int main(void) {
static int datamax = 2;
int *data;
int *temp;
int i,j;
int sum,max,min;
double av,bunsan,hensa;
data = (int*)malloc(sizeof(int)*datamax);
sum = 0; min = 0x7FFFFFFF; max = -0x7FFFFFFF;
av = bunsan = hensa = 0.0;
for (i=0;;i++) {
if (i>=datamax) {
temp = (int*)malloc(sizeof(int)*datamax*2);
memcpy(temp,data,sizeof(int)*datamax);
free(data);
data = temp;
datamax *= 2;
}
scanf("%d",&data[i]);
if (data[i]==END_DATA) break;
sum += data[i];
if (data[i]<min) min = data[i];
if (data[i]>max) max = data[i];
}
続く
0605デフォルトの名無しさん
2007/06/11(月) 23:00:450606デフォルトの名無しさん
2007/06/11(月) 23:03:26for (j=0;j<i;j++) {
bunsan += (data[j] - av)*(data[j] - av);
}
bunsan /= i;
hensa = sqrt(bunsan);
printf( "sum:%d min:%d max:%d\n"
"av:%.4f bunsan:%.4f hensa:%.4f\n"
,sum,min,max
,av,bunsan,hensa);
free(data);
return 0;
}
0607デフォルトの名無しさん
2007/06/11(月) 23:04:42[2] 問題文(含コード&リンク):絶対値を求める関数および,2乗の数を求める関数を作成しなさい.main()で正しく動くかチェックすること.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:水曜16時まで
[5] その他の制限:とくになし
よろしくお願いします。
0608デフォルトの名無しさん
2007/06/11(月) 23:25:03#include<iostream>
int myabs(int n){ return n<0?-n:n; }
int square(int n){ return n*n; }
int main(void){ std::cout << myabs(-2) << ' ' << myabs(0) << ' ' << myabs(2) << '\n' << square(-2) << ' ' << square(0) << ' ' << square(2) << std::endl; return 0; }
手抜きでよければ
0609デフォルトの名無しさん
2007/06/11(月) 23:28:54配列とコメント忘れてたな
int *data; /* 処理内容:データに使う */
int *temp; /* 処理内容:テンポラリに使う*/
char str[] = "ans\n";
:
printf(ans);
こんなもんで。
0610デフォルトの名無しさん
2007/06/11(月) 23:33:47#include <iostream>
template<typename T> T absx(T n){ return n < 0 ? n * T(-1) : n;}
template<typename T> T square(T n){ return n * n; }
main(){
std::cout << absx(-10) << ", " << absx(-1.1) << ", " << absx(-3e-10) << std::endl;
std::cout << square(2) << ", " << square(-3.14) << ", " << square(0.4e8) << std::endl;
}
0611607
2007/06/11(月) 23:35:16ありがとうございます。
ですが、もう少し簡単に出来ませんか?4月から初めてまだあまり理解できないので・・・。
すみません。お願いします。
0612デフォルトの名無しさん
2007/06/11(月) 23:43:264月からはじめてそれならもうあきらめたほうがいいよ
せめてどこが理解できないのかを書くべき
0613デフォルトの名無しさん
2007/06/11(月) 23:54:020614デフォルトの名無しさん
2007/06/11(月) 23:54:13昨日もそうだが、おめーはいちいちごちゃごちゃうるせーんだよ
宿題に関係ないレスしてんじゃねー、てめぇ〜みたいなクズに
いちいち他人を心配している余裕があると思ってんのかよ?
お前の今後の人生を考えて生きていけや、格差社会の底辺めが
0615デフォルトの名無しさん
2007/06/11(月) 23:55:31昨日は旅行行っててこのスレ書き込んでねーよ
0616デフォルトの名無しさん
2007/06/11(月) 23:56:37ありがとうございます。
0617デフォルトの名無しさん
2007/06/11(月) 23:59:05貧乏人が見栄はって強がってんじゃねーよw
こんな丸投げスレで何上からものを言う説教を始めてんだよ?w
嫌なら答えなくて良いんだよw
0618デフォルトの名無しさん
2007/06/12(火) 00:01:38どっちもどっちだよ
0619デフォルトの名無しさん
2007/06/12(火) 00:02:39三項演算子で検索
0620デフォルトの名無しさん
2007/06/12(火) 00:04:12>こんな丸投げスレで何上からものを言う説教を始めてんだよ?w
>>614
>お前の今後の人生を考えて生きていけや、格差社会の底辺めが
0621デフォルトの名無しさん
2007/06/12(火) 00:04:440623デフォルトの名無しさん
2007/06/12(火) 00:08:18int myabs(int n)
{
if(n < 0)
{
return -n;
}
else
{
return n;
}
}
これでどうだ
0624デフォルトの名無しさん
2007/06/12(火) 00:10:160625デフォルトの名無しさん
2007/06/12(火) 00:18:26int myabs(int n)
{
int abs;/*絶対値を入れる変数*/
if(n < 0)
{
abs = -1 * n; /* nが0より小さいので-1をかけて正の数にする*/
}
else
{
abs = n;
}
return abs;/* nが0以上なのでそのままでOK*/
}
0626デフォルトの名無しさん
2007/06/12(火) 00:20:090627デフォルトの名無しさん
2007/06/12(火) 00:29:41int main(void) {
/* 僕には難しくて分かりませんでした */
return 0;
}
0628デフォルトの名無しさん
2007/06/12(火) 00:33:46やっと分かりました。どうもありがとうございました。
0629デフォルトの名無しさん
2007/06/12(火) 00:34:450630デフォルトの名無しさん
2007/06/12(火) 00:35:59#include <stdio.h>
#define N 2000
void insertionsort(int x[], int gap, int n){
int i, j;
for(i = gap; i < n; i++)
for(j = i - gap; j >= 0; j -=gap){
if(x[j] <= x[j + gap]) break;
else{
int temp = x[j]; x[j] = x[j + gap]; x[j + gap] = temp;
}
}
}
int main(void){
FILE *fp = fopen("rand1000.dat", "r");
int x[N], n, i;
if(!fp) return -1;
while(1){
printf("n : "); scanf("%d", &n);
if(n >= 1 && n <= N)
break;
printf("nは1以上%d以下で\n", N);
}
for(i = 0; i < n && fscanf(fp, "%d", &x[i]) == 1; i++) ;
n = i;
fclose(fp);
for(i = 0; i < n; i++) printf("%d\n", x[i]);
for(i = n/2; i > 0; i /= 2) insertionsort(x, i, n);
for(i = 0; i < n; i++) printf("%d\n", x[i]);
return 0;
}
0631デフォルトの名無しさん
2007/06/12(火) 00:37:24やさしいね
0632デフォルトの名無しさん
2007/06/12(火) 00:51:58#include <math.h>
#include <string.h>
#include <conio.h>
int main(void)
{
int n, ch;
double sum, xsum, av, sg, sd;
char data[64];
do{
n = 1;
sum = 0.0;
/*中略*/
printf("標準偏差 =%f\n", sd);
ch = _getch();
}while(ch == 'y' || ch == 'Y');
return 0;
}
0633デフォルトの名無しさん
2007/06/12(火) 01:23:22【言語:コンパイラ】
C言語:gcc 3.4
【問題】
今日のあなたの運勢は##って感じで表示するプログラムを作成する、ただし
・##の部分はrandを使ってランダムに表示させる
・##は配列に格納し、表示させる時はポインタを使用する
【一応考えた(ミスだけど)】
#include<stdio.h>
int main (void)
{
char unsei[] = { "大吉" , "吉" , "凶" };
printf ("今日のあなたの運勢は\n");
printf ("%cです!!\n", *unsei[rand() % 3]);
return 0;
}
【エラー】
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4222.txt
俺の五行目の何がいけないんだと…orz
0634デフォルトの名無しさん
2007/06/12(火) 01:31:410635デフォルトの名無しさん
2007/06/12(火) 01:34:460636デフォルトの名無しさん
2007/06/12(火) 01:37:16#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (void)
{
char *unsei[] = { "大吉" , "吉" , "凶" };
srand((unsigned int)time(NULL));
printf ("今日のあなたの運勢は\n");
printf ("%sです!!\n", *(unsei + rand()%3));
return 0;
}
0637デフォルトの名無しさん
2007/06/12(火) 01:40:01ほいさっさ
#include<stdio.h> /*printf*/
#include<stdlib.h> /*rand*/
#include<time.h> /*time*/
int main (void)
{
const char * const unsei[3] = { "大吉" , "吉" , "凶" };
srand( time( NULL ) ); /*乱数の初期化*/
printf( "今日のあなたの運勢は\n" );
printf( "%sです!!\n", unsei[ rand( ) % 3 ] );
return 0;
}
0638デフォルトの名無しさん
2007/06/12(火) 01:42:36#include <stdio.h>
#include <string.h>
#define STUDENT_NUM 100
#define BUF_SIZE (127+1)
struct student{ int sex; char number[BUF_SIZE], lastname[BUF_SIZE], firstname[BUF_SIZE];};
void print_student(struct student x){ printf("%s\t%s\t%s\t%s\n", x.number, x.lastname, x.firstname, x.sex == 0 ? "男" : "女");}
int main(void){
struct student x[STUDENT_NUM], temp;
FILE *fp = fopen("studentdata.dat", "r");
int i = 0, j;
if(!fp) return -1;
while(i < STUDENT_NUM){
fscanf(fp, "%s%s%s%d", temp.number, temp.lastname, temp.firstname, &temp.sex);
if(!strcmp(temp.number, "0") || feof(fp)) break;
x[i] = temp;
print_student(x[i++]);
}
fclose(fp);
while(1){
char *p;
printf("Input search number : "); fgets(temp.number, BUF_SIZE, stdin); p = strchr(temp.number, '\n'); *p = '\0';
if(!strcmp(temp.number, "10:04 2007/06/110")) break;
for(j = 0; j < i; j++) if(!strcmp(temp.number, x[j].number)) break;
if(j < i) print_student(x[j]);
else printf("not found\n");
}
return 0;
}
0639デフォルトの名無しさん
2007/06/12(火) 01:48:10理解した
サンクス
0640デフォルトの名無しさん
2007/06/12(火) 02:22:460641デフォルトの名無しさん
2007/06/12(火) 02:38:240642デフォルトの名無しさん
2007/06/12(火) 03:34:52[2] 問題文
半径1の円に外接する正2^n角形(n>=2)の周囲長と内接する正2^n角形(n>=2)の周囲長との差がε(マクロで1E-4に設定)未満となる最小のnを求め、
そのときの周囲長から円周率πを算出するプログラムを作れ。このとき円に内接する正2^n角形(n>=2)の一辺の長さの1/2を入力し円に内接する
正2^(n+1)角形の一辺の長さの1/2を算出する関数と円に外接する正2^n角形(n>=2)の一辺の長さの1/2を入力し円に外接する正2^(n+1)角形の
一辺の長さの1/2を算出する関数を使用せよ.
[3] 環境
[3.1] OS: Linux
[3.2] gcc versionは不明ですが最新版のはずです
[3.3] 言語:C
[4] 期限: 2007年6月16日0:00まで
[5] その他の制限: 下のヒントを使ってください。
�@単位円に内接する正n角形の周囲長は,2n sin(π/n), 単位円に内接する正n角形の周囲長は,
2n tan(π/n)であるが,このnを2^nに置き換えて求めてはいけない.高校時代の数学の知識を
使えばπを使わずに求めることができる.
�A(1-Sqrt(1-s^2))/2は,s^2/(2(1+Sqrt(1-s^2)))として計算せよ.
(数値計算の精度が良くなる.各自実験してみよ.)
0643デフォルトの名無しさん
2007/06/12(火) 07:48:55ありがとうございました
0644デフォルトの名無しさん
2007/06/12(火) 09:21:36[2] 問題文(含コード&リンク)
次に説明する写像f(3) について,リターンマップを描け(横軸xn, 縦軸xn+3).
いまxn+1 = f(xn) だから,同様にxn+2 = f(xn+1),xn+3 = f(xn+2) が成り立つ.これらをまとめると,xn+3 = f(xn+2) = f(f(xn+1)) = f(f(f(xn))) と書ける.
この,xn からxn+3 を求める式xn+3 = f(f(f(xn))) を簡単のためにxn+3 = f(3)(xn) と書くことにする.これまではxn とxn+1 の間のリターンマップを書いてきたが,xn とxn+3 の間のリ
ターンマップをr = 3.8284 のときに書いてみよ
[3] 環境
[3.1] OS: Windows
[3.3] 言語:C
[4] 期限:火曜17時まで
[5] その他の制限:とくになし
よろしくお願いします。
0645デフォルトの名無しさん
2007/06/12(火) 11:13:07[2] 問題文:
多次元配列を用いて自分の時間割を作成しコマンドプロンプトへ出力しなさい。
なお,履修データはプログラムに直接記述してよい。
また,時限名,曜日名のタイトルも出力すること。
配列などはいれてませんが出力すると、下記urlのcout文のような表示にするようです。
枠や時間割りはすべては埋めてませんが、時間割の枠と全ての時間割り枠内に
科目名、担当の先生の名前、講義室の番号室の3つと
それプラス曜日名と時限名を多次元配列で出力表示します
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月15日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
0646デフォルトの名無しさん
2007/06/12(火) 11:19:230647デフォルトの名無しさん
2007/06/12(火) 11:29:36>>579 >>581の方続けて、よろしくお願いします。
0648デフォルトの名無しさん
2007/06/12(火) 12:09:35[2] 問題文:
前スレでプログラムを作ってもらったのですが、プログラムの表示方法が少し違いました
計算部分はあってると思うのですが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4225.txt
問題文
下記�@�Aの銀行に「1億円」を預けた場合,何年と何ヶ月後に�Aの銀行の預金額を�@の銀行の預金額が超えるか。
•�@利率0.08%(複利)の銀行
•�A利率0.09%(単利)の銀行
–反復文を用いて�@�A双方の毎月の預金額を表示し、�Aの銀行の預金額を�@の銀行の預金額が超えた時点で反復文を終了後,「�@の銀行は●年と●ヶ月後に�Aの銀行の預金額を超える」と表示しなさい。
ここまではあっているのですが、下記の
–また,上記�@の銀行に「1億円」,�Aの銀行に「9999万円」を預けた場合,どちらが先に「1億200万円」になるか。前問と同様の処理を行い,最後に「○の銀行が●年と●ヶ月後に先に1億200万円貯まる」と表示しなさい。
前問と同様の処理は行われたと思うのですが、表示方法に難ありでした。
○の銀行が○年○ヵ月後にと言う部分は筆記で計算してみたところ
�Aの銀行が1年と11ヶ月後に102000000円貯まる。と出力されるはずなんですが
しかし、二年一ヵ月後に1億200万たまると出力するので、�@の銀行が1億200万貯まる歳月が出力されてると思います
修正しようにも関数の方はまだ習っていなくて修正できず@@
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月15日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
0649デフォルトの名無しさん
2007/06/12(火) 12:20:25問題文の意味がよくわからないけど、こんなもんかな?
r って何?
csv形式で出力するので適当にプロットして
#include<stdio.h>
double f(double x){
return x*x-2;
}
double f_n(int num, double x){
if(num<=0) return x;
return f_n(num-1, f(x));
}
int main(void){
double x;
int i;
for(i=0;i<=20;i++){
x=i/10.0;
printf("%f,%f,%f,%f\n", x, f_n(1, x), f_n(2, x), f_n(3, x));
}
return 0;
}
0650デフォルトの名無しさん
2007/06/12(火) 12:53:46[2] 問題文:
まず,3×3の全マス目の初期状態を1〜6の並び番号付きでコンソールに表示する.
次に,キーボードからシフト回数を入力する.
入力された回数だけ,下記(�@)〜(�B)を繰り返し実行する.
(�@) 1〜6の並びのうちの1つをランダムに選び,その並びのシフト方向(-1 または +1)をランダムに決定する.
(�A) 上記(�@)の並びに対し,決定した方向のシフトを実行する.
(�B) シフトされた結果を表示する.なお,選択された並び番号及びシフト方向も併せて表示する.
その後,(�@)へ.
<実行例>
1 2 3
[1][1][1] 4
[2][2][2] 5
[3][3][3] 6
シフト回数は? 2 ← キーボードから2と入力
<シフト1回目> 3を-1動かす
1 2 3
[1][1][2] 4
[2][2][3] 5
[3][3][1] 6
<シフト2回目> 5を1動かす
1 2 3
[1][1][2] 4
[3][2][2] 5
[3][3][1] 6
[3]環境 OS:Linux コンパイラ:gcc 言語:C
[4]期限:6月14日 12時ごろまで
よろしくお願いします。
0651デフォルトの名無しさん
2007/06/12(火) 13:02:48[2] 問題文(含コード&リンク): 次々に入力される値を合計する処理である。
変数dtにデータを入力する処理を繰り返し行い、
入力終了後その合計sumと平均aveを出力する。
なお、入力データは正の整数とし、
入力するデータがなくなったら、
終わりの印として負の値を入力する。
平均の計算は、合計÷入力回数。
入力回数も変数を用意して数える。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: visual studio2005
[3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: ヘッダーは#include<stdio.h>のみでお願いします
0652デフォルトの名無しさん
2007/06/12(火) 13:57:23ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4227.c
0653デフォルトの名無しさん
2007/06/12(火) 14:17:07図形を手で書いたのなんて何年ぶりだろ。
#include <stdio.h>
#include <math.h>
#define E 1E-4
double inscribed(double s)
{
return sqrt(s * s / (2 * (1 + sqrt(1 - s * s))));
}
double circumscribed(double s)
{
return (sqrt(s * s + 1) - 1) / s;
}
int main(void)
{
double s1 = sqrt(2) / 2, s2 = 1.0;
int i = 4;
while(s2 - s1 > E) {
s1 = inscribed(s1);
s2 = circumscribed(s2);
i *= 2;
}
printf("%.2f\n", s1 * i);
return 0;
}
0654デフォルトの名無しさん
2007/06/12(火) 14:18:320655デフォルトの名無しさん
2007/06/12(火) 14:38:39見本プログラムのURLを貼っていたつもりが抜けていました。
すみませんでした
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4223.txt
0656デフォルトの名無しさん
2007/06/12(火) 15:17:51[2] 二次元平面内の点の座標を, typedef で定義した構造体 point_t で表現する.また、構造体のメンバーは,
x座標の値は double型 とし,メンバー名は x y座標の値は double型 とし,メンバー名は y とする.
このとき、以下の機能をもつ関数を定義することにより,入力した二点間の距離を計算するプログラムを完成させなさい.
1点の座標の入力処理 2点間の距離を算出
1点の座標の入力処理を行う関数は, point_t InputPoint() とし,キーボードから入力した座標を戻り値として返す.
2点間の距離の2乗を計算する関数は, double Distance(point_t, point_t) とし, 2点の座標を引数で渡し,2点間の距離を戻り値として返す.
以下の雛形プログラムの指定部分のみを変更すること.
#include <stdio.h>
#include <math.h>
/* point_t型の構造体を宣言する */
typedef struct {
double x; double y;
} point_t;
/* プロトタイプ宣言 */
point_t InputPoint();
double Distance(point_t, point_t);
int main(void){
point_t p1,p2; double d;
p1=InputPoint(); p2=InputPoint();
d=Distance(p1,p2); printf("%lf\n",d);
return 0;
}
point_t InputPoint()
{
/* ここを作成する */
}
double Distance(point_t p, point_t q)
{
/* ここを作成する */
}
06571/2
2007/06/12(火) 15:28:39[1] 授業単元: C言語 [2]Nの太さのLを表示するプログラム
出力結果は以下の様になります。
./letter
1
*
*
*
****
./letter
2
**
**
**
**
******
******
0658デフォルトの名無しさん
2007/06/12(火) 15:30:27point_t InputPoint()
{
point_t p;
printf("input x:");
scanf("%lf", &p.x);
printf("input y:");
scanf("%lf", &p.y);
return p;
}
double Distance(point_t p, point_t q)
{
return sqrt((p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y));
}
06592/2
2007/06/12(火) 15:33:08水平な線は、高さユニットのnと幅+2ユニットの2nです。 (1個のユニットは1「*」によって表されます)
0660デフォルトの名無しさん
2007/06/12(火) 15:38:31#include <stdio.h>
int main(void)
{
int i, j, n;
scanf("%d", &n);
for(i=0; i<n+2; i++) {
for(j=0; j<n; j++) putchar('*');
putchar('\n');
}
for(i=0; i<n; i++) {
for(j=0; j<2*n+2; j++) putchar('*');
putchar('\n');
}
return 0;
}
0661デフォルトの名無しさん
2007/06/12(火) 15:44:19#include <stdio.h>
int main(void)
{
int dt, sum = 0, count = 0;
double ave;
while(1) {
scanf("%d", &dt);
if(dt<0) break;
sum += dt;
count++;
}
ave = count ? (double)sum / count : 0;
printf("合計sum:%d 平均ave:%.1f\n", sum, ave);
return 0;
}
0662デフォルトの名無しさん
2007/06/12(火) 17:07:00ありがとうございました☆
0663デフォルトの名無しさん
2007/06/12(火) 17:41:56[2] 問題文(含コード&リンク):キ−ボ−ドから整数デ−タを入力し、その2乗和を求めるプログラムを作成。
デ−タの終わりは、^Zとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年06月12日11:00まで
[5] その他の制限: 配列まで習っています。
お願いいたします。
0664デフォルトの名無しさん
2007/06/12(火) 17:43:06すいません。
期限: 2007年06月12日23:00まで
でした。
0665デフォルトの名無しさん
2007/06/12(火) 17:57:560666デフォルトの名無しさん
2007/06/12(火) 17:59:52ありがとうございました。
0667デフォルトの名無しさん
2007/06/12(火) 18:01:59ありがとうございました。
0668デフォルトの名無しさん
2007/06/12(火) 20:33:38C++の研修でございます。データの圧縮!
[2] 問題文(含コード&リンク):
入力された値数の桁数を調べ入力された数値をパック(2桁を1桁にする)
処理を行い結果を表示するプログラムを作成しなさい。
1、入力データは文字列として扱う。
2、入力桁数は最大32桁。
3、入力された桁数が奇数桁の場合最後の数は0をいれる。
4、桁数オーバーの場合は「入力エラー」と表示
5、「END」「end」を入力したらプログラム終了
6、数字または上記以外の文字列が入力されたら「入力エラー」と表示。
3] 環境
Windowsxp
ボーランド5.5?最新のやつ
C++でいいはずです
[4] 期限
今日中に仕上げないとまずいw 無理ならあきらめます^^;
[5] その他の制限:
配列の基礎とかprintf scanf、条件分岐 演算子
問題例
(入力値)
1234567890
(表示結果)
12(18)
34(52)
56(86)
78(120)
ffffff90(-112)
0669デフォルトの名無しさん
2007/06/12(火) 20:45:33[2] 問題文(含コード&リンク):銀行に預金し、元金が2倍になるまでの年数
を求めなさい。ただし、年利(%)と元金(円)は入力し、利息は複利で計算
するものとする。
0670デフォルトの名無しさん
2007/06/12(火) 20:57:50#include <stdio.h>
int main (void)
{
int a;
while(1)
{
printf("数値を入力してください>>");
if(scanf("%d",&a)==EOF)
break;
printf("二乗和は%dです。\n",a*(a+1)*(2*a+1)/6);
}
return 0;
}
0671デフォルトの名無しさん
2007/06/12(火) 21:07:23ありがとうがおざいます。
0672デフォルトの名無しさん
2007/06/12(火) 21:17:27[2]OpenGLをつかって
「クリックした全ての点を覚えておき,それらを一筆書きで結んだ折れ線を表示する.
なおかつ,右クリックで不要な点を消去できる」
[3]WindowsXP、CigWin、C言語
[4]6月中
[5]リスト構造を使うこと
お願いします
0673デフォルトの名無しさん
2007/06/12(火) 21:18:22#include <stdio.h>
#include<math.h>
int main (void)
{
int motokin;
double i;
printf("元金と利率を入力してください。\n");
printf("元金>>");
scanf("%d",&motokin);
printf("利率>>");
scanf("%lf",&i);
printf("そのお金が2倍になるのには%f年掛かります",log(2)/log(1+i));
return 0;
}
0674デフォルトの名無しさん
2007/06/12(火) 21:30:21すいません、for文などの繰り返し文ではできないでしょうか?
0675デフォルトの名無しさん
2007/06/12(火) 21:35:43条件があるなら最初に書けカス
0676デフォルトの名無しさん
2007/06/12(火) 21:40:44[2] 問題文(含コード&リンク):
岸Aと岸Bに挟まれて川が流れている。岸Aにボートが1艘つながれている。
岸Aに羊3匹と狼3匹がいて川を渡ろうとしている。
次のルールに従って6匹が全員無事に岸Bへと渡る手順を考える。
・ボートは1艘。はじめ岸Aにある。
・ボートの定員は2匹。1匹か2匹のとき対岸に移動できる(誰も乗っていない、3匹以上の移動はだめ)
・岸A、岸B、ボート上どの場所でも狼の数が羊の数より多くなってしまうと狼が羊を食べてしまう。(ボート上ってのはたぶん意味無いと思うが・・・)
・ボートに乗って対岸に渡ったとき、必ず1度ボートから降りる(ボート上に残ったままメンバーを入れ替えることはできない)。
問題「6匹全員無事に岸Bに渡る最小のステップの手順をすべて列挙し出力するプログラムを作成せよ」。
ただし、ボートを1回対岸へ移動させるごとに1ステップ数えるとする。
[3] 環境
[3.1] OS: Mac(学校のがMacです)
[3.2] コンパイラ名とバージョン: ごめんなさい分かりません。
[3.3] 言語: C
[4] 期限: 今週の木曜日(6/14)まででお願いします。
[5] その他の制限:特にありません。
プログラミングというかアルゴリズム的な問題ですが・・・。はじめからまったく手付かずでどうしたらいいか分かりません。
どうかよろしくお願いします。
0677デフォルトの名無しさん
2007/06/12(火) 21:45:42[2]
添字 0 1 2 3 4
値 9 4 7 2 5
int型arrayの各要素は表のとおりである。キーボードから要素番号(添字)を読み込むとその要素の値を表示するプログラムを作成しなさい(arrayの各要素の値は初期化で設定)
[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2006
[3.3] 言語: C
[4]6月14日まで
実行画面
実行結果例1
要素番号を入力:3
--------------------------
array[3]=2
実行結果例2
要素番号を入力:4
--------------------------
array[4]=5
0678366
2007/06/12(火) 21:45:50LIBCMT.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmain
CRTStartup で参照されました。
abcd.exe : fatal error LNK1120: 外部参照 1 が未解決です。
(abcdはファイル名です)
というエラーが表示されました。
また、今まで自分が見たプログラムは必ずmain関数があったのですが、
今回はmain関数がないですよね?
プログラム自体の性能は悪くても、動けば良いので、できれば、普通に
main関数と他の関数(他の関数を使わなくても大丈夫ならmain関数だけ)
で簡単に作って頂きたいと思うのですが…
せっかく使って下さったのに申し訳ないです。
0679デフォルトの名無しさん
2007/06/12(火) 21:48:330680デフォルトの名無しさん
2007/06/12(火) 21:52:28どこかでエラーが出たらごめんね!
#include <stdio.h>
void main(void){
int array[5] = { 9, 4, 7, 2, 5 };
int num;
printf("要素番号を入力:");
scanf("%d", &num);
printf("-----------------------\n");
printf("array[%d] = %d\n", num, array[num]);
}
0681デフォルトの名無しさん
2007/06/12(火) 21:58:02#include <stdio.h>
int main (void)
{
int array[5] = {9, 4, 7, 2, 5};
int num;
printf("要素番号を入力:");
scanf("%d",&num);
printf("array[%d]=%d",num,array[num]);
return 0;
}
0682デフォルトの名無しさん
2007/06/12(火) 21:58:480683デフォルトの名無しさん
2007/06/12(火) 22:02:32#include <stdio.h>
int main()
{
int array[5]={9,4,7,2,5};
int i;
printf("要素番号を入力:");
scanf("%d",&i);
printf("-------------------------\n");
printf("array[%d]=%d\n",i,array[i]);
return 0;
}
0684683
2007/06/12(火) 22:03:360685デフォルトの名無しさん
2007/06/12(火) 22:05:11おまいら結婚しろw
0686675
2007/06/12(火) 22:16:49ごめんなんか痛いニュースで当て逃げ動画見てたら
イラッときて何故かこんな所で八つ当たりしてしまった。
自分意味分からなさすぎて正直反省しまくっているorz
繰り返しだとこんな感じなのかな?
int main (void)
{
int motokin;
double i;
double sum=1;
int n=0;
printf("元金と利率を入力してください。\n");
printf("元金>>");
scanf("%d",&motokin);
printf("利率>>");
scanf("%lf",&i);
while(sum<2)
{
sum*=(1+i);
n++;
}
printf("元金が2倍になるには%d年掛かります。",n);
return 0;
}
0687デフォルトの名無しさん
2007/06/12(火) 22:17:24[2] 問題文(含コード&リンク):
整数nをを入力し、整数nの数だけ値を読み込む。
読み込んだ値を小さい順に並び替え、並び替えた値の中央値を示すコードを書け。
(またnの数が奇数の場合は中央値を1つ、偶数の場合は2つを2つ表示せよ。)
(例)
整数n=3
561
156 中央値6
整数n=6
629257
225679 中央地56
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:cygwin gcc
[3.3] 言語:C
[4] 期限:今晩中にお願いします。
[5] その他の制限:配列の問題なので配列を使っておねがいします。
0688デフォルトの名無しさん
2007/06/12(火) 22:18:43[2]あるファイルを監視して、何か変更があるたびにそのファイル
の先頭から表示するようなwatchfileというプログラムを作成せよ
ヒント:
for(;;){ /* 無限ループ */
stat(argv[1],&sbuf);
if(・・・・・){ /* ファイルの状態を検査して
変わっていれば */
while ((n=read(fd,buf,1024))>0)
write(1,buf,n); /* 1024バイト単位に、
readバイト数がゼロになるまで読んで出力 */
}
sleep(10); /* 10秒待機 */
}
[3]
[3.1]Linux
[3.2]ちょっとわかりませんgccとかつかってるとおもいます
[3.3]C
[4]6/13夕方まで
[5]制限は特にありません
0689デフォルトの名無しさん
2007/06/12(火) 22:40:21すいません!!
ソースを出力して^Zで終わろうとしたら強制的に終了されます。
どうにかならないでしょうか。
^Dも試しましたが同様に終了するだけでした。
0690231
2007/06/12(火) 22:52:16[2] 問題文(含コード&リンク):
1)10000この整数(乱数で発生、1〜10000の範囲)をdata00.txtに保存する
2)このデータをファイルから読み込み、バブルソートでソートする。これらを別々のプログラムとして作る。
[3] 環境 [3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Cresent?
[3.3] 言語: C++
[5] その他の制限: 今回読み込み、書き込みを習ってる程度です
1)と2)を作ってるのですが、どうしても1しか出力しません。
1)
main()
{ FILE *file_p;
int K[10000];
int a,i;
randomize();
file_p=fopen("data00.txt","w");
for(i=0;i<10000;i++){
a=random(10000);
K[i]=a; }
for(i=0;i<10000;i++){
fprintf(file_p,"%d\n",K[i]);
printf("%d\n",K[i]); }
fclose(file_p);
getch();
exit(0); }
0691231
2007/06/12(火) 22:52:56void pswap(int *x,int *y){
int work;
work=*x;
*x=*y;
*y=work; }
main()
{ FILE *fp;
int K[10000];
int a,i,j;
fp=fopen("data00.txt","r");
for(i=0;i<10000;i++){
fscanf(fp,"%d",&a);
K[i]=a; }
for(i=0;i<=9999;i++){
for(j=9999;j>=i+1;j--){
if(K[j]<K[j-1]){
pswap(&K[j],&K[j-1]); }
}
}
for(i=0;i<10000;i++){
printf("%d\n",K[i]); }
fclose(fp);
getch();
exit(0); }
0692デフォルトの名無しさん
2007/06/12(火) 23:00:56すまない、自分の環境ではbccとgccで今やったら正常に終わったけど、
強制的に終了ってのはCtrl+Zを押すとエラー終了するってこと?
0693デフォルトの名無しさん
2007/06/12(火) 23:12:491,5,6の中央値が6の意味は分からんが一応できたぜ
#include <stdio.h>
#define N 100
int main(void) {
int array[N];
int num,i,j,temp;
printf("整数n=");
scanf("%d",&num);
for(i = 0; i < num; i++) scanf("%d",&array[i]);
for(i = 0; i <= num; i++) {
temp = i;
for(j = i; j < num; j++)
if(array[temp] > array[j]) temp = j;
j = array[i];
array[i] = array[temp];
array[temp] = j;
}
if(num%2==0) printf("%d%d\n", array[num/2-1], array[num/2]);
else printf("%d\n", array[num/2]);
return 0;
}
0694デフォルトの名無しさん
2007/06/12(火) 23:14:50コマンドプロンプトから実行じゃなくてアイコンダブルクリックで起動させて
画面が閉じちゃうんです...とかじゃない?
0695デフォルトの名無しさん
2007/06/12(火) 23:16:35俺の環境だと動いちゃったけど…
0696デフォルトの名無しさん
2007/06/12(火) 23:17:48[2] 問題文(含コード&リンク):
UDPでソケットを使ってサーバーからデータを受け取る
パケットを送るときにチェックサムを計算して一緒に送る
データを受信したときもデータが正しいか
チェックサムを計算してエラーがないか確認する
長いので以下に詳しい問題文をうpします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4228.txt
↑拡張子をhtmlに直して見てください
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4229.c
↑書きかけのソースですがこんな感じになるのでしょうか
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:6/18(月) 9:00
[5] その他の制限: サーバーが学内にあるのですぐに動作確認はできません
0697デフォルトの名無しさん
2007/06/12(火) 23:17:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4230.c
0698デフォルトの名無しさん
2007/06/12(火) 23:19:59それだと561って入力してもそれを一つの整数として受け取っちゃうからダメだろ
0700デフォルトの名無しさん
2007/06/12(火) 23:25:04file00.txtは作成できてるんだよね?
んで、2のプログラムを走らせたら、出力されないってこと?
もっとまともな症状を書いてくれ
0701デフォルトの名無しさん
2007/06/12(火) 23:25:500702デフォルトの名無しさん
2007/06/12(火) 23:27:46消したとか
違うフォルダにあるとか言うなよ
0703デフォルトの名無しさん
2007/06/12(火) 23:27:57特に指定は無かったので値の入力方法は
5,6,1(,で区切り)
5
6
1
(1個づつ入力)
とりあえず入力した整数nの文値を入れて並び替えて、中央値が出れば問題ないと思います。
0704デフォルトの名無しさん
2007/06/12(火) 23:29:311<5<6だろ?
6って最大値やん
0705デフォルトの名無しさん
2007/06/12(火) 23:30:50例見ろよ。,で区切ってもいないし、改行もされてないだろうが。
0706デフォルトの名無しさん
2007/06/12(火) 23:33:070707231
2007/06/12(火) 23:34:07なぜか知りませんがもう1回このスレに貼ったのをやってみたらできました。
ご迷惑おかけしました。
0708デフォルトの名無しさん
2007/06/12(火) 23:34:54君なら自力で修正できよう
0709デフォルトの名無しさん
2007/06/12(火) 23:35:39すいません ゴキブリと奮闘してました。
ctrl+zだと[1]+ Stoppedとでて結果が出力されません。
0710デフォルトの名無しさん
2007/06/12(火) 23:37:08配列の仕組みよくわからないのでお任せします。
0711デフォルトの名無しさん
2007/06/12(火) 23:40:20すまんすまん、
>デ−タの終わりは、^Zとする。
この辺で脳内でCtrl+Zに変換されてた。
Windowsならこれで良いけどUNIXだとフォアグラウンド処理の停止だ。
でも、Ctrl+Dでも出来ない?
0712デフォルトの名無しさん
2007/06/12(火) 23:41:25561並び替えて156で中央値6?
5じゃねーの?
0713デフォルトの名無しさん
2007/06/12(火) 23:42:12修正版
#include <stdio.h>
#define N 100
int main(void) {
int array[N];
int n,num,i,j,temp;
printf("整数n=");
scanf("%d %d",&n,&num);
for(i = 0; i < n; i++) {
array[i] = num % 10;
num /= 10;
}
for(i = 0; i <= n; i++) {
temp = i;
for(j = i; j < n; j++)
if(array[temp] > array[j]) temp = j;
j = array[i];
array[i] = array[temp];
array[temp] = j;
}
if(n%2==0) printf("%d%d\n", array[n/2-1], array[n/2]);
else printf("%d\n", array[n/2]);
return 0;
}
0714デフォルトの名無しさん
2007/06/12(火) 23:43:24よく見たらlinuxか
コマンドプロンプトじゃないね
0716デフォルトの名無しさん
2007/06/12(火) 23:49:44出力されるとき何もかえしてこないですね。
0717デフォルトの名無しさん
2007/06/12(火) 23:52:22原因がわかりました。
%dが文字化けして数値返してないだけでした。
ctrl+dでいけました
0718デフォルトの名無しさん
2007/06/12(火) 23:53:38ちょっと待って。
何も返して来ないって何を返して欲しいの?
それで終了なんでしょ?
0719デフォルトの名無しさん
2007/06/12(火) 23:55:01( ゚д゚ )ポカーン…
0720デフォルトの名無しさん
2007/06/12(火) 23:56:38これ、解あるか?
0721デフォルトの名無しさん
2007/06/12(火) 23:59:24プロログとかでやれば綺麗なのができるのに
0722デフォルトの名無しさん
2007/06/12(火) 23:59:26似た問題を番組で見たことある
0723デフォルトの名無しさん
2007/06/13(水) 00:01:180724デフォルトの名無しさん
2007/06/13(水) 00:01:41つかアニメーションでも入れろと?
0725デフォルトの名無しさん
2007/06/13(水) 00:02:09お父さんと娘だけだとお父さんが娘襲っちゃって
お母さんと息子だとお母さんが息子襲っちゃって
とかそんな内容の。
0726デフォルトの名無しさん
2007/06/13(水) 00:03:54アルゴリズムの問題といわれてもこれくらいだと全パターン検索したいな。
そこまでパターン数爆発するかな?
0727720
2007/06/13(水) 00:06:36BからAへ船が戻るとき、二人帰るパターンを除外しているのがまずいのかな・・・。
それを入れると無限ループになりそうだ…再帰の打ち切り条件を考えないと・・・。
0728デフォルトの名無しさん
2007/06/13(水) 00:09:25ステップ回数をはかって
それをオーバーしたらアウトって削れるね
0729デフォルトの名無しさん
2007/06/13(水) 00:13:53過去の履歴にあるパターンと同じになったら終了とかかな?
0730デフォルトの名無しさん
2007/06/13(水) 00:14:04以前の状態を記憶していればいいと思う
岸A にいるオオカミの数 0-3
岸A にいる羊の数 0-3
船の位置 AorB
4*4*2=32
0731720
2007/06/13(水) 00:21:21各ステップの終了時の状態がちょうど、二次元の表にできる。
| 3/0 2/1 1/2 0/3 ← 狼の数 A岸/B岸
--------------------------
3/0 | S O O O
2/1 | X O X X
1/2 | X X O X
0/3 | O O O G
↑
羊の数 A岸/B岸
上の表で、O の部分は羊が食われる心配がない。
S が初期状態、G が目指す状態。
A→Bに狼がN匹移動すると、表の上で現在位置が右にNマス動く。
B→Aなら逆にNマス左へ動く。
羊の場合は、狼がX軸方向なのに対して、Y軸方向に同様に動くことになる。
これを踏まえて表の上でXを踏まないようにGまで行けばいいんだけど。
>>729-730
やっぱり全部履歴をとるしかないか。
0732デフォルトの名無しさん
2007/06/13(水) 00:31:54再帰つかってるんだよね?
ステップをスタックタイプの変数に積んでいくとかで出来ないかな?
push(step1)→push(step2)→ダメ→pop(step2)→push(step2')→・・・
今までと同じパターンがあるかはスタック内全検索で。
いや、実際コーディングしてないのに横槍スマソ。
できるかどうかもわかんねwスルーしてくれ。
0733720
2007/06/13(水) 00:33:080734デフォルトの名無しさん
2007/06/13(水) 00:35:10確かに、そうだな。
単純なフラグじゃなくて船がどっちにいるかってのも一緒に要素として持たなきゃだめだな。
0735デフォルトの名無しさん
2007/06/13(水) 01:12:03開始→狼羊→羊→狼狼→狼→羊羊→狼羊→羊羊→狼→狼狼→狼→狼狼
この順で移動すればおk
あとはコーディングかぁ
0736デフォルトの名無しさん
2007/06/13(水) 01:21:350737デフォルトの名無しさん
2007/06/13(水) 01:24:060738720
2007/06/13(水) 01:40:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4231.txt
解一つしか出ない。
出題文を見ると、複数あるような文章だけど、これじゃまだ見落としがあるのかな。
0739デフォルトの名無しさん
2007/06/13(水) 01:56:390740デフォルトの名無しさん
2007/06/13(水) 01:59:29> カス
だからいちいちうるせーつってんだよボケが
気に入らないならスルーしろ、別にお前が答えなくてもここは困らんぞ
0741デフォルトの名無しさん
2007/06/13(水) 02:02:49一応4パターン発見。
全部11ステップ。
2ステップ目、10ステップ目に2パターンあって入れ替え可能で2×2の4パターンっぽい。
ソース上げるからちょっとまって。いまぐちゃぐちゃw
0742720
2007/06/13(水) 02:04:23int main(){
init_matrix();
AtoB(1,1,1);
init_matrix();
AtoB(2,0,1);
init_matrix();
AtoB(0,2,1);
return 0;
}
どっかのタイミングでVisitフラグクリアする必要があるみたいだな・・・
0743デフォルトの名無しさん
2007/06/13(水) 02:17:020744720
2007/06/13(水) 02:17:17再帰から帰ってくるとこでvisitフラグをクリアしたら、
>>741さんの言うように4解出る用になりました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4233.txt
これでいいのかな。
0745デフォルトの名無しさん
2007/06/13(水) 02:22:07いちおソース上げときます。再帰してるけど汚いw
スタックで手順保存したけど、スタックはもろグローバルwww
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4234.c
0746デフォルトの名無しさん
2007/06/13(水) 02:25:240747デフォルトの名無しさん
2007/06/13(水) 02:27:21ほんとだorz
出力は少し見栄えよくと思って後から書いたからか・・・
しかもステップ数、−1とかいらねぇし・・・
0748デフォルトの名無しさん
2007/06/13(水) 09:23:01環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数5の配列に[0]から入力し、逆順に表示しなさい
実行画面
数値[0]==>78
数値[1]==>100
数値[2]==>65
数値[3]==>52
数値[4]==>89
数値[4]==>89
数値[3]==>52
数値[2]==>65
数値[1]==>100
数値[0]==>78
0749デフォルトの名無しさん
2007/06/13(水) 09:35:18全部のレスちゃんと読めカス。
0750デフォルトの名無しさん
2007/06/13(水) 09:40:34#include <stdio.h>
int main()
{
int array[5];
int i;
for(i=0;i<5;i++)
{
printf("数値[%d]==>",i);
scanf("%d",&array[i]);
}
putchar('\n');
for(i=4;i>=0;i--)
printf("数値[%d]==>%d\n",i,array[i]);
return 0;
}
0751デフォルトの名無しさん
2007/06/13(水) 10:15:32環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数10の配列に整数を入力し、負の値のみ表示しなさい
実行画面
数値[0]==>-10
数値[1]==>8
数値[2]==>-70
数値[3]==>30
数値[4]==>9
数値[4]==>-2
数値[3]==>51
数値[2]==>73
数値[1]==>-40
数値[0]==>100
負の値の一覧
-10 -70 -2 -40
0752デフォルトの名無しさん
2007/06/13(水) 10:25:53要素数が意味不明だけどタイプミスと解釈した。
#include <stdio.h>
int main()
{
int array[10];
int i;
for(i=0;i<10;i++)
{
printf("数値[%d]==>",i);
scanf("%d",&array[i]);
}
putchar('\n');
printf("負の値の一覧\n");
for(i=0;i<10;i++)
{
if(array[i]<0)
printf("%d ",array[i]);
}
return 0;
}
0753デフォルトの名無しさん
2007/06/13(水) 10:37:03#include<stdio.h>
int main(void)
{
int i,v[10];
for(i=0;i<10;i++){
printf("数値[%d]==>",(i<5)? i:9-i);
scanf("%d",&v[i]);
}
printf("負の値の一覧\n");
for(i=0;i<10;i++){
if(v[i]<0)printf("%d ",v[i]);
}
return 0;
}
0754デフォルトの名無しさん
2007/06/13(水) 11:48:26以下のプログラムのバグを取り除きなさい。
#include
int main() {
struct date
{
int day;
int month;
int year;
char note[100];
}
struct date fun = 1, 4, 2000, "The opening of school";
struct date abe = 24, 9, 1954, "The Japanese Prime Minister's Birthday";
printf("Here are some interesting dates:\n");
printf("%d %d %d: %s\n", fun.day, school.month, school.year);
printf("%d %d %d: %s\n", abe.day, abe.month, abe.year);
}
./
Here are some interesting dates:
1 4 2000: The opening of school
24 9 1954: The Japanese Prime Minister's Birthday
よろしくおねがいします。
0755デフォルトの名無しさん
2007/06/13(水) 11:53:49#include
#define MAX 4
typedef struct {
int day;int month;int year;
char note[100];
} stored_dates[MAX] = {1, 4, 2000, "the opening of school
",
24, 9, 1954, "the Japanese Prime Minister's Birthday",
23, 10, 1988, "the release of Super Mario Bros 3",
7, 1, 1989, "the death of the Showa Emperor", };
struct date *date_ptr;
int main() {int count, birthday, birthmonth, birthyear;
date_ptr = &stored_dates[0];
printf("Input your birthday (1-31)\n");
scanf("%d", &birthday);
printf("Input your birth month (1-12)\n");
scanf("%d", &birthmonth);
printf("Input your birth year (eg 1980)\n");
scanf("%d", &birthyear);
for (count = 0; count < MAX; count++)
{ if (birthday == date_ptr.day)
printf("You were born on the same day of the month as %s\n", *date_ptr.note);
if (birthmonth == *(date_ptr).month)
printf("You were born in the same month as %s\n", *date_ptr.note);
if (birthyear == *date_ptr -> year)
printf("You were born in the same year as %s\n", (*date_ptr) -> note);
date_ptr++;}}
0756デフォルトの名無しさん
2007/06/13(水) 11:55:27./
Input your birthday (1-31)
1
Input your birth month (1-12)
4
Input your birth year (eg 1980)
1988
You were born on the same day of the month as the opening of school
You were born in the same month as the opening of school
You were born in the same year as the release of Super Mario Bros 3
[b1007xxx@C*LPC* ~/pp8]% ./dates2
Input your birthday (1-31)
29
Input your birth month (1-12)
9
Input your birth year (eg 1980)
1969
You were born in the same month as the Japanese Prime Minister's Birthday
0757デフォルトの名無しさん
2007/06/13(水) 12:09:33[2] 問題文 1〜40番目のフィボナッチ数列の下一桁の出現頻度を求めて以下の書式で表示するプログラムを作成せよ.
0 : **
1 : ******
2 : **
3 : ****
:
<中略>
:
9 : *****
※ヒント:ある整数値の下一桁は,その数を10で割った余りにより得ることができます
[3.1] Unix
[3.2] gcc
[3.3] c
[4] 6月15日 20時50分
[5] 配列を使って行う。
0758デフォルトの名無しさん
2007/06/13(水) 12:21:22#include <stdio.h>
int main() {
struct date
{
int day;
int month;
int year;
char note[100];
} ; // セミコロン追加
struct date fun = { 1, 4, 2000, "The opening of school"};
struct date abe = { 24, 9, 1954, "The Japanese Prime Minister's Birthday"};
printf("Here are some interesting dates:\n");
printf("%d %d %d: %s\n", fun.day, fun.month, fun.year); // school -> fun
printf("%d %d %d: %s\n", abe.day, abe.month, abe.year);
return 1;
}
0759デフォルトの名無しさん
2007/06/13(水) 12:22:34環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数10の配列に数字を入力し、平均を求め、平均以上のデータについて要素番号とデータを表示しなさい
実行画面
整数[0]==>100
整数[1]==>80
整数[2]==>60
整数[3]==>75
整数[4]==>89
整数[5]==>62
整数[6]==>71
整数[7]==>50
整数[8]==>49
整数[9]==>90
平均(72.6)以上のデータ
0:100
1:80
3:75
4:89
9:90
0760デフォルトの名無しさん
2007/06/13(水) 12:38:55環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
整数配列array[10]に値を入力後、昇順にソースして表示しなさい
実行画面
整数入力[0]==>8
整数入力[1]==>22
整数入力[2]==>10
整数入力[3]==>37
整数入力[4]==>16
整数入力[5]==>63
整数入力[6]==>25
整数入力[7]==>33
整数入力[8]==>8
整数入力[9]==>19
***ソース後***
配列[0]:3
配列[1]:8
配列[2]:8
配列[3]:10
配列[4]:16
配列[5]:19
配列[6]:22
配列[7]:25
配列[8]:33
配列[9]:37
0761デフォルトの名無しさん
2007/06/13(水) 12:42:09#include<stdio.h>
int main()
{
int i;
int array[10];
int sum=0;
double ave;
for(i=0;i<10;i++){
printf("整数[%d]==>",i);
scanf("%d",&array[i]);
sum+=array[i];
}
ave=(double)sum/10;
printf("平均(%.1f)以上のデータ\n",ave);
for(i=0;i<10;i++){
if(array[i]>ave)
printf("%d:%d\n",i,array[i]);
}
return 0;
}
0762デフォルトの名無しさん
2007/06/13(水) 12:42:43#include <stdio.h>
int main(void){
int F[40], count[10] = {0}, i, j;
F[0] = 1;
F[1] = 1;
for(i = 2; i < 40; i++)
F[i] = F[i-2] + F[i-1];
for(i = 0; i < 40; i++)
count[F[i]%10]++;
for(i = 0; i < 10; i++){
printf("%2d : ", i);
for(j = 0; j < count[i]; j++)
printf("*");
printf("\n");
}
return 0;
}
0763デフォルトの名無しさん
2007/06/13(水) 12:55:03[2]あるファイルを監視して、何か変更があるたびにそのファイル
の先頭から表示するようなwatchfileというプログラムを作成せよ
ヒント:
for(;;){ /* 無限ループ */
stat(argv[1],&sbuf);
if(・・・・・){ /* ファイルの状態を検査して
変わっていれば */
while ((n=read(fd,buf,1024))>0)
write(1,buf,n); /* 1024バイト単位に、
readバイト数がゼロになるまで読んで出力 */
}
sleep(10); /* 10秒待機 */
}
[3]
[3.1]Linux
[3.2]すいませんよく分かりません
[3.3]C
[4]6/14
[5]制限は特にありません
おねがいします
0764デフォルトの名無しさん
2007/06/13(水) 13:12:52ソースはウスターソースをかければ良いですか?
0765デフォルトの名無しさん
2007/06/13(水) 13:14:520766デフォルトの名無しさん
2007/06/13(水) 13:32:58ちょっと遅いけど、ありがとうございます!
小さい順に並べるコードは自分でなんとかします。
0767デフォルトの名無しさん
2007/06/13(水) 13:40:27ソースと聞いて、キムチかつが食べたくなったニダ
揚げたてキムチかつと炊き立てご飯を要求するニダ
ついでにこれを受け取るニダ、拒否する事は許さないニダ
#include<stdio.h>
#define NUM_DATA 10
void swap(int *a,int *b)
{
int temp;
temp=*a;*a=*b;*b=temp;
}
int main(void)
{
int i,j,data[NUM_DATA];
for(i=0;i<NUM_DATA;i++){
printf("整数[%d]==>",i);scanf("%d",&data[i]);
}
for(i=0;i<NUM_DATA-1;i++){
for(j=NUM_DATA-1;j>i;j--){
if(data[j]<data[j-1]) swap(&data[j],&data[j-1]);
}
}
printf("***ソース後***\n");
for(i=0;i<NUM_DATA;i++) printf("配列[%d]:%d\n",i,data[i]);
return 0;
}
0768デフォルトの名無しさん
2007/06/13(水) 13:45:500769デフォルトの名無しさん
2007/06/13(水) 13:50:23[2] 問題文(含コード&リンク):
人数nを読み込んだ後、配列に身長のデータを読み込んでいき、入力された
身長を10cmごとにわけたヒストグラムを作成するプログラムを作成せよ。
またヒストグラムは、指定された区間に対象がいくつ入っているかをカウントしたグラフです。
ヒストグラムの実行例は以下の通りになる。
n=18
:
(身長のデータを18人分読み込む)
:
150cm <= 160cm: ** 2名
160cm <= 170cm: **** 4名
170cm <= 180cm: ***** 5名
180cm <= 190cm: *** 3名
190cm <= 200cm: *** 3名
200cm <= 210cm: * 1名
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:環境CYGWIN コンパイラgcc
[3.3] 言語:C言語
[4] 期限:今日中にお願いします。
0770デフォルトの名無しさん
2007/06/13(水) 14:00:22環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
配列[8]に整数を入力し、以下のような表示をしなさい
実行画面
整数入力[0]==>4
整数入力[1]==>3
整数入力[2]==>8
整数入力[3]==>6
整数入力[4]==>1
整数入力[5]==>5
整数入力[6]==>2
整数入力[7]==>7
0771デフォルトの名無しさん
2007/06/13(水) 14:03:140772デフォルトの名無しさん
2007/06/13(水) 14:03:380773デフォルトの名無しさん
2007/06/13(水) 14:17:060774デフォルトの名無しさん
2007/06/13(水) 14:19:42[2]
商品番号1〜6の商品の単価と売り上げ個数は表のとおりであった
商品番号をキーボードをキーボードから読み込むと、その商品の売り上げ金額(単価X個数)を表示するプログラムを作成しなさい
(単価、売り上げのそれぞれを、要素数6の配列データとして、表の値で初期化して用いる)
、
商品番号 1 2 3 4 5 6
単価 120 150 130 190 210 100
売上げ個 13 24 11 20 18 16
[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2006
[3.3] 言語: C
[4]6月14日まで
実行画面
実行結果例1
商品番号を入力;4
-------------------------
商品番号[4]の売上げ
3800円
実行結果例2
商品番号を入力;1
---------------------
商品番号[1}の売上げ
1560円
0775デフォルトの名無しさん
2007/06/13(水) 14:24:51#include<stdio.h>
int main(void)
{
int n,i,j,f[6]={0,0,0,0,0,0};
double h;
printf("n=");scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf",&h);
if(h>150 && h<=210) f[(int)h/10-15]++;
}
for(i=0;i<6;i++){
printf("%dcm <= %dcm:",150+i*10,160+i*10);
for(j=0;j<f[i];j++) printf("*");
printf(" %d名\n",f[i]);
}
return 0;
}
0776デフォルトの名無しさん
2007/06/13(水) 14:42:010777デフォルトの名無しさん
2007/06/13(水) 14:55:33[2] 問題文:整数を読み込み、値が正ならばその数を逆順に表示するプログラムを作成せよ。
なお、読み込んだ値が負の0以下ならエラーを表示すること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限: 特にありません
期限近づいて焦ってます・・・どなたかよろしくお願いします。
0778デフォルトの名無しさん
2007/06/13(水) 14:57:14#include <stdio.h>
int main(void){
int i, search;
int code[6] = {1, 2, 3, 4, 5, 6}, price[6] = {120, 150, 130, 190, 210, 100}, num[6] = {13, 24, 11, 20, 18, 16};
printf("商品番号を入力;");
scanf("%d", &search);
for(i = 0; i < 6; i++)
if(search == code[i])
break;
if(i >= 6)
return -1;
printf("商品番号[%d]の売上げ\n%d\n", code[i], price[i]*num[i]);
return 0;
}
0779デフォルトの名無しさん
2007/06/13(水) 15:02:36#include <iostream>
int main(){
int n;
std::cin >> n;
if(n < 0)
return -1;
for(; n!=0; n = n/10)
std::cou << n%10;
std::cout << std::endl;
return 0;
}
0780デフォルトの名無しさん
2007/06/13(水) 15:02:50[2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ
実行例
*****
***
*
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限:for文を使うこと
よろしくお願いします・・・
0781デフォルトの名無しさん
2007/06/13(水) 15:03:30#include <stdio.h>
typedef struct
{
int no; // 商品番号
int tanka; // 単価
int num; // 売り上げ個数
} _tNode;
void setNode( _tNode *node, int no, int tanka, int num )
{
node->no = no;
node->tanka = tanka;
node->num = num;
}
void showUriage( _tNode *node )
{
printf( "売り上げ:%d円\n", node->tanka*node->num );
}
続く
0782デフォルトの名無しさん
2007/06/13(水) 15:04:59void main()
{
_tNode node[6];
setNode( &node[0], 1, 120, 13 );
setNode( &node[1], 2, 150, 24 );
setNode( &node[2], 3, 130, 11 );
setNode( &node[3], 4, 190, 20 );
setNode( &node[4], 5, 210, 18 );
setNode( &node[5], 6, 100, 16 );
int i = 0;
printf( "表品番号?:" );
scanf( "%d", &i );
showUriage( &node[i-1] );
}
終わり
0783デフォルトの名無しさん
2007/06/13(水) 15:07:190784デフォルトの名無しさん
2007/06/13(水) 15:10:10#include<stdio.h>
int main()
{
int n,k;
do{
printf("最上段の個数(奇数):");
scanf("%d",&n);
}while(n%2==0);
k=n;
while(n>0)
{
while(k-->0)
putchar('*');
putchar('\n');
k=--n;
}
return 0;
}
0785デフォルトの名無しさん
2007/06/13(水) 15:15:08[2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ
実行例
*****
***
*
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限:for文を使うこと
よろしくお願いします・・・
0786デフォルトの名無しさん
2007/06/13(水) 15:16:21[1] 授業単元: 基本プログラミング
[2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ
実行例
*****
***
*
ここでは空白が表示できないですが、逆ピラミッドになっています。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C++
[4] 期限: 2007/6/13 24:00まで
[5] その他の制限:for文を使うこと
よろしくお願いします・・・
0787デフォルトの名無しさん
2007/06/13(水) 15:19:43ごめんfor文とか二個ずつ減らすとかよく読んでなかったorz
#include<stdio.h>
int main()
{
int n,k;
do{
printf("最上段の個数(奇数):");
scanf("%d",&n);
}while(n%2==0);
for(;n>0;n-=2)
{
for(k=n;k>0;k--)
putchar('*');
putchar('\n');
}
return 0;
}
0788デフォルトの名無しさん
2007/06/13(水) 15:24:35ごめんなさい、ついでに言うと、逆ピラミッドは正三角形を逆にした感じで2列目以降空白を入れなければいけませんでした。
あと、言語はC++です
もしお時間あればよろしくお願いします
0789デフォルトの名無しさん
2007/06/13(水) 15:32:03いい加減ちょっと吊ってきます…orz
#include<iostream>
using namespace std;
int main()
{
int n,k;
do{
cout<<"最上段の個数(奇数):";
cin>>n;
}while(n%2==0);
for(;n>0;n-=2)
{
cout<<endl;
for(k=n;k>0;k--)
cout<<"*";
cout<<endl;
}
return 0;
}
0790デフォルトの名無しさん
2007/06/13(水) 15:33:49***
*
こういうことかな?
0791デフォルトの名無しさん
2007/06/13(水) 15:34:44***
*
0792デフォルトの名無しさん
2007/06/13(水) 15:35:50#include <iostream>
int main()
{
int i, j, n;
std::cin >> n;
if(n%2 == 0)
return -1;
for(i = n; i > 0; i -= 2){
for(j = n - i; j > 0; j -= 2)
std::cout << " ";
for(j = 0; j < i; j++)
std::cout << "*";
std::cout << std::endl;
}
return 0;
}
0793デフォルトの名無しさん
2007/06/13(水) 15:37:03ごめんなさい、またしても修正しなければならないところがorz
行と行の間は空白なしで大丈夫ですが、列のはじめに空白を入れなければいけないんです。
1行目→空白なし
2行目→空白1個
3行目→空白2個
こんな感じで下にいくにつれてだんだん細くなればおkです。
FFのクリスタルみたいな感じでしょうか・・・
0794デフォルトの名無しさん
2007/06/13(水) 15:41:050795デフォルトの名無しさん
2007/06/13(水) 15:42:410796デフォルトの名無しさん
2007/06/13(水) 15:47:21PCの前で赤面しながらコードを書く自分…。
#include<iostream>
using namespace std;
int main()
{
int n,k,h=1,j;
do{
cout<<"最上段の個数(奇数):";
cin>>n;
}while(n%2==0);
for(;n>0;n-=2)
{
for(j=h-1;j>0;j--)
cout<<" ";
h++;
for(k=n;k>0;k--)
cout<<"*";
cout<<endl;
}
return 0;
}
0797デフォルトの名無しさん
2007/06/13(水) 16:08:17すごく感謝、期限がぎりぎりだったから更に感謝です。
0798デフォルトの名無しさん
2007/06/13(水) 16:33:020799デフォルトの名無しさん
2007/06/13(水) 16:42:05[2] 問題文(含コード&リンク):以下のテキストファイルを読み込んで、空白以外の文字を表示する。
テキストファイル
アメニモマケズ カゼニモマケズ
ユキニモ ナツノ アツサニモマケヌ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C
[4] 期限: 2007年6月14日まで
[5] その他の制限: 特になし
やってみたのですが、どうしても 空白が出力で出てしまいます。
すみませんがお願いします
0800デフォルトの名無しさん
2007/06/13(水) 16:49:130801デフォルトの名無しさん
2007/06/13(水) 16:49:31そのテキストはシフトジスで空白というのは全角空白のことで良いか
0802デフォルトの名無しさん
2007/06/13(水) 16:53:280803デフォルトの名無しさん
2007/06/13(水) 16:55:02シフトジスで全角空白でOKです
0804デフォルトの名無しさん
2007/06/13(水) 16:59:46シフトジスで全角空白でOKです
0805デフォルトの名無しさん
2007/06/13(水) 17:26:57[2] ファイルから読み込んだテキストをchar配列として保持し
ユーザーにコマンドプロンプト上で入力させた数字(一桁のみ)のバイト数だけ行ごとに表示せよ
行の表示の前後に'|'を表示し、行の上下列には表示バイト数の'-'を表示させ、見やすくまとめること
(他は出来たのですが、わからないこと-問題文ではないです)
例えば"あいうえお"の文字列を5バイト分表示したい場合などの時、あい まではいいのですが
日本語の半分の値+'|'の値がまざった文字が最後に一文字表示されてしまいます
最初は、表示桁数が奇数の場合は表示する最後の一文字が半角かどうかを判定していたのですが
そのような処理では半角が混ざった時など("aあい"を4バイト表示など)には対応できませんでした
[3] 環境
[3.1] XP
[3.2] visual studio 2005
[3.3] C
[4] 期限: 6/15 10:00
[5] 特にないと思います
半角・全角混ざったchar配列の場合の時に、上記問題を解決できる方法はありませんでしょうか
説明がややこしくなってしまった上、前質問があるようですが、よろしくお願いします
0806デフォルトの名無しさん
2007/06/13(水) 17:31:58漢字の1バイト目は取っておいて2バイト目と同時に出し、
最後1バイト目だけだったときはかわりにスペースを出せばいいかな。
0807デフォルトの名無しさん
2007/06/13(水) 20:00:39これ、VS2005でなければwchar_t使うのが楽だと思うが
VS2005だとVSのバグでうまくいかないっぽいな
0808デフォルトの名無しさん
2007/06/13(水) 20:08:22本当にありがとうございました。
0809デフォルトの名無しさん
2007/06/13(水) 20:12:54#include <wchar.h>
#include <locale.h>
int main(void)
{
wint_t c;
setlocale(LC_CTYPE, "");
while ((c = getwchar()) != WEOF)
if (c != L' ') putwchar(c);
return 0;
}
うちではVS2005でこのコードが正しく動作しないよ。
VS2003では動作するけど。
0810デフォルトの名無しさん
2007/06/13(水) 20:22:57SP1でも解決されてないよな
やる気ないのかMS
0811デフォルトの名無しさん
2007/06/13(水) 20:25:210812デフォルトの名無しさん
2007/06/13(水) 20:36:40[2] 問題文:10l、8l、3lの水があり、10lの容器に水が一杯入っている。この3つの容器を用いて、8l容器に4lの水を取り出す最小の手順を求めよ。水を移すときは、移す側の水が空になるか、移される側が一杯になるかのいづれかの時とする。
[3] 環境
[3.1] OS: Windows
[3.2] cygwin
[3.3] 言語:C
[4] 期限: 6月15日 10時
[5] その他の制限:制限は特にありません
手順は思いつくんですが、C言語でどう表現したらよいかわかりません。
非常に申し訳ありませんが宜しくお願いします
0813デフォルトの名無しさん
2007/06/13(水) 20:40:200814デフォルトの名無しさん
2007/06/13(水) 21:15:07[2] 問題文(含コード&リンク):
配列の要素数を超えてメモリにアクセスするとどうなるかを以下のプログラムで確認する。
表示した結果より、なぜそうなるのか説明せよ。
(プログラム中に/**/などで説明も入ること。)
#include <stdio.h>
int main(void){
int a[2][3] = {{0,1,2} , {3,4,5}};
int i, j;
i=0;
for(j=0; j<6; j++){
printf("%x - a[%d][%d] = %d\n", &a[i][j], i, j, a[i][j]);
}
return 0;
}
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Linux gcc
[3.3] 言語: C
[4] 期限: 今日中にお願いします!!
0815デフォルトの名無しさん
2007/06/13(水) 21:27:540816デフォルトの名無しさん
2007/06/13(水) 21:34:370817デフォルトの名無しさん
2007/06/13(水) 21:37:35今日も面白そうな問題があるな。考えてみよ。
0818デフォルトの名無しさん
2007/06/13(水) 21:41:24あぁ、%xの後はマイナスじゃないのか…。
�@構造体と違って配列は連続したアドレスに読み込まれる。
�Aアドレス上の並びはa[0][0],a[0][1],a[0][2],a[1][0],a[1][1]…という順になっている。
�B要素数を超えたa[0][3]はa[1][0]の地点を指している。
�Ca[0][3]としてa[1][0]の値が出力される。
こんな感じなのかな?
ていうか自分もプログラミング習い始めだから若干不安。
時間ギリっぽいから書いたけどちゃんと詳しい人からレスがあったらそちらを参考にしてほしい…。
0819デフォルトの名無しさん
2007/06/13(水) 21:41:28//ていぎ されていない a[0][3], a[0][4], a[0][5] を さんしょう している。
//なにが おきるか しょりけい しだいの おたのしみ。
とかってコメントを追加しろってことか?
0820デフォルトの名無しさん
2007/06/13(水) 21:43:47レイトン教授に頼もう
0821デフォルトの名無しさん
2007/06/13(水) 21:46:23jが3以上のとき、つまりa[0][3]〜a[0][5]は、配列範囲外のアクセスになるので
本来は違法。だが、Cには配列の添え字の範囲をチェックするような機能は
無いので、単純にオフセットを計算して当該アドレスをアクセスしようとする。
一方、a[0][0]〜a[0][2]とa[1][0]〜a[1][2]をメモリ上で連続して割り付ける
処理系が多く(そうでないのは俺は見たことが無い)、その場合は
a[0][3]のアドレスが、計算上はa[1][0]に一致することになる。
よって、本来違法な手段によって、結果的にはa[1][0]〜a[1][2]にアクセス
してしまっているわけだ。
0822デフォルトの名無しさん
2007/06/13(水) 21:47:08このプログラムの実行結果の「22cca0」とかはメモリ上の格納場所、対応アドレスを示してるのか?
で入れる配列a[〜][〜]の格納値は〜ですって表示になってんの?
どういう仕組みなのかよくわからない。
0823デフォルトの名無しさん
2007/06/13(水) 21:48:32> このプログラムの実行結果の「22cca0」とかはメモリ上の格納場所、対応アドレスを
> 示してるのか?
そうなんだが、Cの規格からいうとこれも良くない。%xではなく%pを使うべきだな。
0824デフォルトの名無しさん
2007/06/13(水) 21:51:51十分参考になった上仕組みもわかりました。
そうですかC言語では添え字の範囲をチェックすることはなく、本当は違反だけどコンパイラが通ってしまうから
アクセス出来ないハズの場所を参照しているとこういうわけですね。
0825デフォルトの名無しさん
2007/06/13(水) 21:55:350826818
2007/06/13(水) 21:59:44横からだけどC言語って添え字の範囲をチェックする機能無いんですね。
>>814のコンパイルが通った時ひどくビックリしてしまった。
こういうのがアリな場合もあるんだ…。
0827デフォルトの名無しさん
2007/06/13(水) 22:01:18%xが非推奨で%pが推奨されるのって何か理由があるですか?
0828デフォルトの名無しさん
2007/06/13(水) 22:01:32ありがとうございます。2003で試してみてから、2005で試してみます。
0829デフォルトの名無しさん
2007/06/13(水) 22:04:24%xはunsigned intな引数を仮定している。%pはポインタ用。
printf()族のような可変長引数関数は、引数のサイズが分からないので、
ユーザが正しいサイズの引数を渡してくれることを信じて動作するし、
そうしなかった場合の挙動は未定義だ。
早い話が、sizeof(void*) != sizeof(unsigned int)な処理系では、
おかしなことになる。
0830デフォルトの名無しさん
2007/06/13(水) 22:26:24なるほど、参考になったです。
ありがとう><
0831デフォルトの名無しさん
2007/06/13(水) 22:28:16[2]条件分岐を使って2つの数字の四則計算が可能なプログラムを記述せよ
[3]
[3.1]windowsXP
[3.2]bcc32
[3.3]C
[4]明日朝提出
[5]この前if,else ifを習いました
命令文はscanfとprintfまでしか習っていません
数値はfloat型に指定されています
よろしくお願いします
0832デフォルトの名無しさん
2007/06/13(水) 22:32:12驚いた
俺が高一のときに出された問題とまったく一緒だ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4236.txt
0833デフォルトの名無しさん
2007/06/13(水) 22:38:110834 ◆lIN/ESgxWw
2007/06/13(水) 22:40:23よろしくお願いします。
0835デフォルトの名無しさん
2007/06/13(水) 22:43:33ちょっと修正してくる
0836デフォルトの名無しさん
2007/06/13(水) 22:44:03[2] 問題文(含コード&リンク):
与えられた3つの整数値a,b,cを使って定義された二次方程式
a*x*x + b*x + c ==0
の解のうち、絶対値が大きい方の絶対値を表示するプログラムを示せ。
(a≠0と仮定してよい。)
[3] 環境
[3.1] OS:Mac OS X
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:明日提出
[5] その他の制限: まだ演算と型について習ったところです。
習い始めでいきなりつまずいてしまいました…orz
よろしくお願いします。
0837デフォルトの名無しさん
2007/06/13(水) 22:52:34#include <stdio.h>
int main()
{
double a,b;
int x;
while(1){
printf("a=");scanf("%lf",&a);
printf("b=");scanf("%lf",&b);
printf("1:加算 2:減算 3:乗算 4:除算\n");
printf("計算方法を入力してください>>");
scanf("%d",&x);
if(x==1)
printf("a+b=%f\n",a+b);
else if(x==2)
printf("a-b=%f\n",a-b);
else if(x==3)
printf("a*b=%f\n",a*b);
else if(x==4)
{
if(b==0){printf("0での除算は行えません。\n");
return -1;}
printf("a/b=%f\n",a/b);
}
else printf("数値入力は1〜4で行ってください。\n");
}
return 0;
}
0838デフォルトの名無しさん
2007/06/13(水) 22:52:40#include<stdio.h>
int main(void)
{
double v1,v2,va;
char c;
printf("数式を例のように入力してください、例12.3+5.2\n");
scanf("%lf%c%lf",&v1,&c,&v2);
if(c=='+') va=v1+v2;
else if(c=='-') va=v1-v2;
else if(c=='*') va=v1*v2;
else if(c=='/') {
if(v2==0){
printf("0で除算できません。");
return 1;
}
else va=v1/v2;
}else {
printf("無効な演算子です。");
return 1;
}
printf("結果:%f",va);
return 0;
}
0839デフォルトの名無しさん
2007/06/13(水) 22:53:14#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <time.h>
int main(void) {
int bucket[3][2] = {{10,10},{8,0},{3,0}};
int bucket1[20][3][2],bucket2[20][3][2];
int min = 9999;
int from,to,aki,hist1[20][2],hist2[20][2],i,j;
srand(time(NULL));
for(i=0 ; i<1000 ; i++) {
bucket[0][1] = 10; bucket[1][1] = bucket[2][1] = 0;
for(j=0 ; j<20 ; j++) {
if (j>min) { j=9999; break; }
while(1) {
from = (rand()>>7)%3;
if (bucket[from][1]) break;
}
while(1) {
if ((to=(rand()>>7)%3)==from) continue;
aki = bucket[to][0] - bucket[to][1];
if (aki) break;
}
0840デフォルトの名無しさん
2007/06/13(水) 22:53:52[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi
の50
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の10:00まで
[5] その他の制限: 特にナシ
0841デフォルトの名無しさん
2007/06/13(水) 22:55:35hist1[j][0] = from; hist1[j][1] = to;
if (aki>=bucket[from][1]) {
bucket[to][1] += bucket[from][1];
bucket[from][1] = 0;
} else {
bucket[from][1] -= aki;
bucket[to][1] = bucket[to][0];
}
memcpy(bucket1[j],bucket,sizeof(int)*3*2);
if (bucket[1][1]==4) break;
}
j++;
if ((j>20)||(j>min)) continue;
min = j;
memcpy(hist2,hist1,sizeof(int)*min*2);
memcpy(bucket2,bucket1,sizeof(int)*min*3*2);
}
if (min>=20) { printf("not found\n"); return 1; }
for (i=0;i<min;i++)
printf ( "%d -> %d %d:%d %d:%d %d:%d\n"
, hist2[i][0],hist2[i][1]
, bucket2[i][0][0],bucket2[i][0][1]
, bucket2[i][1][0],bucket2[i][1][1]
, bucket2[i][2][0],bucket2[i][2][1]
);
return 0;
}
0842デフォルトの名無しさん
2007/06/13(水) 22:55:440843デフォルトの名無しさん
2007/06/13(水) 22:56:46[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi
の50
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の10:00まで
[5] その他の制限: 特にナシ
よろしくお願いいたします^^
0844デフォルトの名無しさん
2007/06/13(水) 22:58:160845デフォルトの名無しさん
2007/06/13(水) 23:01:12最後の方は
if (min>20) { printf("not found\n"); return 1; }
の間違い。
0846デフォルトの名無しさん
2007/06/13(水) 23:02:220847デフォルトの名無しさん
2007/06/13(水) 23:05:400848デフォルトの名無しさん
2007/06/13(水) 23:06:52なんかわかりずらくてスミマセン
0849デフォルトの名無しさん
2007/06/13(水) 23:15:35一応できたぜ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4240.c
0850デフォルトの名無しさん
2007/06/13(水) 23:16:41[2]
各月(1〜12月)の日数(例えば、1月は30日間など)を保存する配列monthを用意して、各要素をこの日数で初期化する。
この配列monthを利用して、キーボードから月(1〜12)を読み込むと、1月1日からその月の末日までの日数を表示するプログラムを作成しなさい。(2月は28日間とする)
[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2006
[3.3] 言語: C
[4]6月14日まで
実行画面
実行結果例1
月(1−12)を入力=3
--------------------------
3月31日までは90日間です
実行結果例2
月(1−12)を入力=12
-----------------------------
12月31日までは365日間です
0851デフォルトの名無しさん
2007/06/13(水) 23:19:37アルゴリズムを考えていたら先を越されてしまった。
とりあえずまとめてみた。理屈はこれでいけるはず。
http://www.acat.jp/acat/upload/up/675.pdf
0852デフォルトの名無しさん
2007/06/13(水) 23:19:52#include <stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double answer,answer1,answer2;
printf("a=");scanf("%d",&a);
printf("b=");scanf("%d",&b);
printf("c=");scanf("%d",&c);
printf("%f\n",-sqrt(b*b-4*a*c));
answer1=(sqrt(b*b-4*a*c)-b)/(2*a);
if(answer1<0)answer1=-answer1;
answer2=(-sqrt(b*b-4*a*c)-b)/(2*a);
if(answer2<0)answer2=-answer2;
printf("%dx^2+%dx+%dの解のうち絶対値の大きなものの絶対値は、\n",a,(b>0)?b:-b,(c>0)?c:-c);
printf("x=%fです。\n",(answer1>answer2)?answer1:answer2);
return 0;
}
0853デフォルトの名無しさん
2007/06/13(水) 23:23:08しかし書いた後でだけどsqrtは大丈夫なのかな…?
0854デフォルトの名無しさん
2007/06/13(水) 23:36:35#include <stdio.h>
int main(void)
{
int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i, n, day = 0;
do {
printf("月(1−12)を入力=");
scanf("%d", &n);
} while(n<1 || n>12);
for(i=0; i<n; i++) day += month[i];
printf("%d月%d日までは%d日間です\n", n, month[n-1], day);
return 0;
}
0855デフォルトの名無しさん
2007/06/13(水) 23:38:27ありがとうございます
0856デフォルトの名無しさん
2007/06/13(水) 23:38:54>>837
遅くなりましたがありがとうございました
>>837
ちょっと習った範囲を出ています…
return -1ってのは正常終了しなかった時に使うのですか?
0857デフォルトの名無しさん
2007/06/13(水) 23:42:33エラーを示したい時は1〜127の範囲の小さい正の整数を使うか、
EXIT_FAILUREを使うとよい。
0858デフォルトの名無しさん
2007/06/13(水) 23:44:07ちんぷんかんぷんです
return xでxが0以外の数字なら、それは正常終了できなかったことをしめす、でFA?
0859デフォルトの名無しさん
2007/06/13(水) 23:49:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4241.txt
0860デフォルトの名無しさん
2007/06/13(水) 23:49:29へぇ、今まで自分もエラーは一括して-1返してた。
ていうかそもそもmainの正常終了異常終了って何かが拾って処理してるんですか?
0861デフォルトの名無しさん
2007/06/13(水) 23:52:55(ものにもよるが)OSが拾ってる。
0862デフォルトの名無しさん
2007/06/13(水) 23:53:19bR、右下だとは思うんだが、右上だったり左下だったり、もうメチャクチャだな。
0863831
2007/06/13(水) 23:54:34else if(enzanshi==4)
{
printf("一番目の数字を入力してください\n");
scanf("%f",&a);
printf("二番目の数字を入力してください\n");
scanf("%f",&b);
if(b==0)
{
System.out.println("0は不正な値です。プログラムを終了します。本当にありがとうございました。");
return 1;
ans = a / b;
printf("計算結果は%fです",ans);
}
これで正常に作動するはず
0864デフォルトの名無しさん
2007/06/13(水) 23:54:52$statusとかERRORLEVELとか。Cからsystemで呼んだ場合はそのプログラムとか。
0865デフォルトの名無しさん
2007/06/13(水) 23:58:37まーEXIT_FAILURE/EXIT_SUCCESS以外は処理系依存の話になっちゃうんだが、
Cの故郷のUnixでは、0がプロセスの正常終了を意味し、1〜127が
異常終了を示すような慣習になってて、プロセスを起動するシェルも、
それに沿った仕様になってる。んで、MS-DOSやWindowsなんかも一応それを
真似ている。127とかいう制限は無いけれどもな。
Unixでそうなるのは、シグナルで殺された場合のシグナル値とのビット和を
一緒に扱ったりしているからだ。
>>860
その辺は処理系依存だけど、一般には親プロセスで、普通はシェルだな。
Windowsだと、コマンドプロンプトから起動したプロセスの終了コードは
%errorlevel%という変数に入ってて、バッチや何かで使われることが多い。
0866デフォルトの名無しさん
2007/06/14(木) 00:00:24突っ込み所満載だな
0867860
2007/06/14(木) 00:03:26ありがとうございます。
今までmainの返却値って気にしてなくて、
プログラミングの本で関数なんかの失敗時に-1返すのが多いから
何となくmainも正常以外は-1で良いかくらいのノリ(?)でした><
0868デフォルトの名無しさん
2007/06/14(木) 00:04:56typedef struct {
point_t tL;
point_t bR;
} rect_t;
void NormalizeRect(rect_t *r) {
if(r->tL.x > r->bR.x) {
double temp = r->tL.x;
r->tL.x = r->bR.x;
r->bR.x = temp;
}
if(r->tL.y < r->bR.y) {
double temp = r->tL.y;
r->tL.y = r->bR.y;
r->bR.y = temp;
}
}
0869デフォルトの名無しさん
2007/06/14(木) 00:06:25>>852
回答ありがとうございました。
>>853
sqrtは習ってないので分かりませんorz
できれば使わない解答も書いていただければ非常にありがたいのですが…。
0870デフォルトの名無しさん
2007/06/14(木) 00:06:430871デフォルトの名無しさん
2007/06/14(木) 00:09:41ググったらJava関連のばっかり出てきたけどC言語でこういうのあるの?
自分もそれほどCに詳しくはないけど初めて見た。
っていうか>>831の書き込みからすごく初歩な人かとオモテタ。
0872デフォルトの名無しさん
2007/06/14(木) 00:13:10>%errorlevel%という変数に入ってて、バッチや何かで使われることが多い。
これははじめて知った
ROMってて良かったぁ
0873デフォルトの名無しさん
2007/06/14(木) 00:14:04ごめんなさい…
System.out.printlnはjavaで使用する命令です…混同してしまいました
>>866
突っ込んでください
0874デフォルトの名無しさん
2007/06/14(木) 00:17:02http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4242.txt
これで大丈夫ですかね?
0875デフォルトの名無しさん
2007/06/14(木) 00:20:45{
printf("0は不正な数値です。1以上の数値を入力してください。プログラムを終了します。");
return 1;
}
}
でいいぜ
0876デフォルトの名無しさん
2007/06/14(木) 00:21:46しかしswitch文使いたいね。
0877デフォルトの名無しさん
2007/06/14(木) 00:22:270878デフォルトの名無しさん
2007/06/14(木) 00:24:43おいおい……
0879デフォルトの名無しさん
2007/06/14(木) 00:24:52分かりました、修正しておきます
>>876
switchはまだ習っていないのです…
yes or no判断で無いならswitchのが断然楽ですね
0880デフォルトの名無しさん
2007/06/14(木) 00:25:340881デフォルトの名無しさん
2007/06/14(木) 00:29:02if(b==0) ってところも笑うところだな
if(!b)だろ普通
0882デフォルトの名無しさん
2007/06/14(木) 00:31:190883デフォルトの名無しさん
2007/06/14(木) 00:31:52いいえ、そこは0と比較すべきところであって、無理に論理否定を使うべきところではありません。
0884デフォルトの名無しさん
2007/06/14(木) 00:33:00別にどっちでもいいがb==0の方がわかりやすいな
0885デフォルトの名無しさん
2007/06/14(木) 00:33:41>>884
じゃあb==0でいいよ
0886デフォルトの名無しさん
2007/06/14(木) 00:34:31コンパイラ : 不明
getchar();で入力された英字の他に改行コードも一緒にラインバッファに保存され
次の入力で改行コードが返されてしまう問題で、ラインバッファに保存されてる改行コードをクリアする方法
はありませんか?
for(i=0;i<10;i++){
ch = getchar();
printf("%c\n",ch);
ch = 改行コードをクリア
}
こんな感じで
とりあえず今は下のような感じで対処してるのですが、他に方法があったらお願いします
ちなみに入力関数はgetchar();のみしか使用できません
for(i=0;i<10;i++){
ch = getchar();
printf("%c\n",ch);
ch2 = getchar();
}
0887831
2007/06/14(木) 00:37:15もうひとつの宿題がありまして、そっちは終わらせたのですが、大体何点ぐらいか採点していただきたいのです。
100点満点でお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4243.txt
0888デフォルトの名無しさん
2007/06/14(木) 00:39:17そのレベルなら100点
0889デフォルトの名無しさん
2007/06/14(木) 00:40:33変数名がローマ字 -10点
0890デフォルトの名無しさん
2007/06/14(木) 00:41:40引数がないならANSI、ISO準拠だと int main(void) とするのが適切。
0891デフォルトの名無しさん
2007/06/14(木) 00:42:27それでおk
0892デフォルトの名無しさん
2007/06/14(木) 00:42:32減点理由が意味分からん
あとできるだけdouble型使った方がいいよ
理由は自分で調べてくれ
0894デフォルトの名無しさん
2007/06/14(木) 00:44:21なぜか問題文に「float型で」とあるのです…
0895デフォルトの名無しさん
2007/06/14(木) 00:46:39実引数 main(仮引数)
0896デフォルトの名無しさん
2007/06/14(木) 00:46:52scanf使ってるからバグの誘致はあるだろうし
面積は%fです のあとに \nの改行コードが欲しい。
変数名はローマ字よりheightのような英語であるべき
更に言うと、インデント。 その方法もありだろうけど、
if {...} else if {...} のつながりが、イマイチわかりづらくて一瞬迷う。
こんなところ
0897デフォルトの名無しさん
2007/06/14(木) 00:49:32分かりました、ありがとうございました
>>896
scanf以外の入力関数を習っていません…
改行コードは完全に見落としでした。ありがとうございます
変数名は先ほども指摘されましたので、英単語の勉強もかねて出来るだけ英語にします
インデントですか…
どういう形にすればいいですかね?
0898デフォルトの名無しさん
2007/06/14(木) 00:50:21/* 改行まで読み捨てる */
while ((ch = getchar()) != EOF && ch != '\n') {}
0899デフォルトの名無しさん
2007/06/14(木) 00:52:15#include<stdio.h>
int main()
{
int a,b,c;
double answer,answer1,answer2,D;
double xn;
int i,n;
n=10;
xn=0;
printf("a=");scanf("%d",&a);
printf("b=");scanf("%d",&b);
printf("c=");scanf("%d",&c);
D=b*b-4*a*c;
do {
xn+=1;
} while (xn*xn<D);
for (i=0;i<n;i++) {
xn=(xn+D/xn)/2;
}
if(D>=0){
answer1=(-b+xn)/(2*a);
if(answer1<0)
answer1=-answer1;
answer2=(-b-xn)/(2*a);
if(answer2<0)
answer2=-answer2;
0900899
2007/06/14(木) 00:53:47if(answer1>=answer2)
answer=answer1;
else answer=answer2;
printf("a=%d,b=%d,c=%dにおける方程式ax*x+bx+cの2解のうち絶対値の大きなものは、\n",a,b,c);
printf("%fです。\n",answer);
}
else printf("方程式は虚数解となります。\n");
return 0;
}
sqrt使わないで二次方程式の解を求めるのって何気に凄く大変…?
あと関数使って良いか分からなかったからmainが長くて分かりづらいorz
0901デフォルトの名無しさん
2007/06/14(木) 00:55:590902デフォルトの名無しさん
2007/06/14(木) 00:56:37インデントには色々なやり方があるから一概にこれとは言えない。
人によって見やすい見難いがでるため、いろんなソースを読んだりして自分にあったものを選べばいいと思う。
もし会社なんぞに入れば大抵、そこのコーディング規約があるからそれに従えばOK。
プログラムは習うものというより、調べるものとでも思ったほうがいい。
興味があるならいろいろ調べてなぜscanfがよろしくないといわれるのか考えてみるのもいいと思う。
0903デフォルトの名無しさん
2007/06/14(木) 00:58:23joteとかkateとかがちょっとわかりにくかったから減点。
teihenとかjoteiとかkateiだったら-8点くらい。
0904デフォルトの名無しさん
2007/06/14(木) 01:00:53必要ないような気がするけど
0905デフォルトの名無しさん
2007/06/14(木) 01:03:30それは質問?それとも指摘?独り言?
終了コードを使いたいと思うことって無い?
0906デフォルトの名無しさん
2007/06/14(木) 01:03:33異常終了を1、正常終了を0ってしたかったんだろうね。
確かに気にするような部分じゃないと思う。
0907デフォルトの名無しさん
2007/06/14(木) 01:06:34kateはアメリカ人の女の子の名前みたいに読めてしまうな
0908デフォルトの名無しさん
2007/06/14(木) 01:07:560909デフォルトの名無しさん
2007/06/14(木) 01:08:18jotei これが女帝に見えた
0911デフォルトの名無しさん
2007/06/14(木) 01:09:41今忙しいんだ
後にしろ
0912デフォルトの名無しさん
2007/06/14(木) 01:11:530913デフォルトの名無しさん
2007/06/14(木) 01:13:54>>367じゃないけど、これにmain関数くっつけてみた?
動作確認してないけど↓みたいな感じになるかな?
int main(void){
int i;
int a[10]={/*好きなものいれて};
printf("before\n");
for(i = 0;i<10;i++){
printf("%d:[%d]\n",i,a[i]);
}
mergsort(a,10);
printf("after\n");
for(i = 0;i<10;i++){
printf("%d:[%d]\n",i,a[i]);
}
}
0914デフォルトの名無しさん
2007/06/14(木) 01:16:24お尻の穴がギョウチュウでムズムズする感じがする
0915デフォルトの名無しさん
2007/06/14(木) 02:09:47http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4244.txt
0916デフォルトの名無しさん
2007/06/14(木) 02:14:51[2] 問題文(含コード&リンク):
参照仮引数にする必要があるケース、および仮引数を参照にした方が良いケース、
それぞれについて思いつく限り、コードを書き、それが必要となる理由や良い理由をできる限り詳しく述べよ。
また、戻り値を参照にする利点についても考え、コードと理由を併せて提出せよ。
[3] 環境
[3.1] OS: WindowsかLinuxどちらでも
[3.2] コンパイラ名とバージョン: gcc 3.4、bcc
[3.3] 言語: C++
[4] 期限: 2007/06/18 12:50迄
[5] その他の制限: 制限は設けられませんでしたが、あまり高度なことは理解できないと思います。
0917デフォルトの名無しさん
2007/06/14(木) 02:21:11もう少し具体的にならない?思いつく限りとかあまりにも抽象的すぎるかと・・・
今までこんな課題がありましたとかでもいいから。
あと、理由とかもあったほうがいいの?そこは自分?
0918デフォルトの名無しさん
2007/06/14(木) 02:25:24講義では参照を使う例として、入出力ストリームが紹介されました。
コードさえあれば理由は自分でも考えますが、
わからなかったときに備えて添えていただけると俺が喜びます。
でも自分でも考えたいので、
別々のtxtファイルにして、zipにしてもらえたりすると泣いて喜びます。
0919デフォルトの名無しさん
2007/06/14(木) 02:29:59class DummyInterface {
public:
virtual void dummy_method ( ) = 0;
};
void function ( DummyInterface dummy ) {
:
}
0920デフォルトの名無しさん
2007/06/14(木) 02:32:58[2] 問題文(含コード&リンク):
じゃんけんを5回して先に3勝したほうを勝者とする。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: borland c++ 5.5.1
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int com(){
int com;
srand((unsigned int)time(NULL));
com=rand() % 3;
return com;
}
int you(){
int you;
do{
printf("グーなら0、チョキーなら1、パーなら2を入力してください。");scanf("%d",&you);
if (!(you==0 || you==1 || you==2))
printf("0か1か2を入力してください\n");
}while(!(you==0 && you==1 && you==2));
return you;
}
0921>920続き
2007/06/14(木) 02:33:41if ((you==0 && com==1) || (you==1 && com==2) || (you==2 && com==0)) {
return 0;
}
else if ((you==0 && com==2) || (you==1 && com==0) || (you==2 && com==1)) {
return 1;
}
else return 2;
}
int main(){
int w=0,l=0;
while(w<3 && l<3){
printf("あなた %d vs CPU %d\n",&you,&com);
if(whowin(you,com)==0){
printf("あなたの勝ちです。\n");
w++;
}
else if(whowin(you,com)==1){
printf("あなたの負けです\n");
l++;
}
else printf("あいこなのでもう一度!\n");
}
if(w==3){
printf("あなたの3勝です。あなたの勝ちです。");
}
else printf("CPUの3勝です。あなたの負けです。");
return 0;
}
見たことないエラーが出て動いてくれません。
根本的なこと間違えてそうですが、どうか教えてください。
0922デフォルトの名無しさん
2007/06/14(木) 02:38:170923デフォルトの名無しさん
2007/06/14(木) 02:38:48int com(){
int com;
int you(){
int you;
っつか、function名と変数名が被ってるYO! 当然、こういうのは識別子として使うのはエラー。
0924デフォルトの名無しさん
2007/06/14(木) 02:40:460925デフォルトの名無しさん
2007/06/14(木) 02:42:350926デフォルトの名無しさん
2007/06/14(木) 02:54:32自力で直したい?
それとも全部コード書いてほしい?
0927デフォルトの名無しさん
2007/06/14(木) 03:00:21ありがとうございます
スコープを調べてみて、もう少し自力でがんばってみます
0928デフォルトの名無しさん
2007/06/14(木) 03:03:14>whowin(you,com)
だな。
youとcomは関数だからintを受け取る関数にはyou()とcom()で渡さないと。
0929デフォルトの名無しさん
2007/06/14(木) 03:03:31http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4245.c
こんなんでどうだ?
0930デフォルトの名無しさん
2007/06/14(木) 07:30:52if (bucket[1][1]==4) break; が嘘くさい気がするんだけど、どうなんだろう
0931デフォルトの名無しさん
2007/06/14(木) 09:27:48http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4246.txt
0932デフォルトの名無しさん
2007/06/14(木) 09:29:01すごい欝
0933デフォルトの名無しさん
2007/06/14(木) 09:47:52[2] 問題文(含コード&リンク):
(1) ニューラルネットワークを用いた学習アルゴリズムに従って、
主成分分析をするプログラムをつくりなさい。
(2) (1)で出た結果を使って画像の情報量を圧縮をするプログラムをつくりなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C++
[4] 期限: [2007年6月15日まで] (時刻の指定なし)
[5] その他の制限:
つくりかけのソースがここにあるのですが(元の画像つきです、コンパイルは通ります)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4247.zip
学習自体はうまくいっている(結果の値をそのまま使って復元すると元に戻っている)思うのですが、
量子化を施すと、面影はあるのですがぐちゃぐちゃの画像が出てきて思うように復元することができません。
(プログラムをそのまま実行してみればわかるかと思います)
ここからどのようにすれば、元の画像と遜色なく復元できるのでしょうか。
どなたかご教授のほどをよろしくお願いいたします。
0934デフォルトの名無しさん
2007/06/14(木) 09:53:390935デフォルトの名無しさん
2007/06/14(木) 10:21:05お前はいったい何を言ってるんだ
0936デフォルトの名無しさん
2007/06/14(木) 11:02:33よろしくお願いします
0937デフォルトの名無しさん
2007/06/14(木) 11:28:03よろしくお願いします。
0938デフォルトの名無しさん
2007/06/14(木) 11:48:29よろしくお願いします。
0939デフォルトの名無しさん
2007/06/14(木) 11:51:290940デフォルトの名無しさん
2007/06/14(木) 12:20:52環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
キーボードより複数件の整数(0〜49)を入力し、データの範囲ごとに配列に
件数を集計して出力しなさい
ルール:件数集計のグループ
0〜9
10〜19
20〜29
30〜39
40〜49
入力データのグループチェック二以下のようなif文は使用しない
if(n>=0&&n<=9)
実行画面
整数入力==>3
整数入力==>15
整数入力==>43
整数入力==>8
整数入力==>38
整数入力==>7
整数入力==>49
整数入力==>18
整数入力==>^Z
* * *結果* * *
配列[0]:3件(0〜9)
配列[1]:2件(10〜19)
配列[2]:0件(20〜29)
配列[3]:1件(30〜39)
配列[4]:2件(40〜49)
0941940の続き
2007/06/14(木) 12:38:46環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
配列[8]に整数を入力し、以下のような表示をしなさい
実行画面
整数入力[0]==>4
整数入力[1]==>3
整数入力[2]==>8
整数入力[3]==>6
整数入力[4]==>1
整数入力[5]==>5
整数入力[6]==>2
整数入力[7]==>7
0942デフォルトの名無しさん
2007/06/14(木) 12:46:190943デフォルトの名無しさん
2007/06/14(木) 13:04:46調べてみてもlena.pgmが元々エロ画像であることくらいしかわからん
0944デフォルトの名無しさん
2007/06/14(木) 13:36:090945デフォルトの名無しさん
2007/06/14(木) 13:45:20[2]問題文:下記の補足課題のプログラムを下記の<仕様>のとおりに改変してください。
<仕様>
次のような関数rank_dispを用意し,活用する.
・機能: 引数で与えられた点数より成績評価(S, A, B, C, D)を行う.評価結果をコンソールに表示する.
・引数: 点数データ(0〜100の範囲の整数値)
・戻り値: 無し
※グローバル変数は使わないこと.
-----------------------------------------------------
<補足課題>
ある科目の成績は,点数に応じて下記のように定まるとする.
・90点以上: S
・80点以上90点未満: A
・70点以上80点未満: B
・60点以上70点未満: C
・60点未満: D
1つの整数のデータがキーボードから入力されると,対応する成績評価結果(S,A,B,C,Dのいずれか)がコンソールに出力されるプログラムを作成せよ.
なお,キーボードからの入力前に,「点数を入力して下さい」などといったようなメッセージが出力されるようにすること.
<実行例>
点数 = ? 73
B
-----------------------------------------------------
[3]環境 OS:Linux、コンパイラ:すみません、ちょっと分からなくて。言語:C
[4]期限:14時50分まで
よろしくお願いします。
0946デフォルトの名無しさん
2007/06/14(木) 13:55:180947デフォルトの名無しさん
2007/06/14(木) 13:56:25#include<stdio.h>
int main()
{
int x,i,array[5]={0};
while(1){
printf("整数入力==>");
if(scanf("%d",&x)==EOF)
break;;
if(x<49){
switch(x/10)
{
case 0 : array[0]++;break;
case 1 : array[1]++;break;
case 2 : array[2]++;break;
case 3 : array[3]++;break;
case 4 : array[4]++;break;
}
}
}
printf(" * *結果* * * \n");
for(i=0;i<5;i++)
printf("配列[%d]:%d件(%d〜%d)\n",i,array[i],i*10,(i+1)*10-1);
return 0;
}
0948デフォルトの名無しさん
2007/06/14(木) 13:59:130949デフォルトの名無しさん
2007/06/14(木) 14:05:560950デフォルトの名無しさん
2007/06/14(木) 14:08:370951デフォルトの名無しさん
2007/06/14(木) 14:10:48#include<stdio.h>
void rank(char *c,int score)
{
if(score<60)
*c='D';
else if(score>=60&&score<70)
*c='C';
else if(score>=70&&score<80)
*c='B';
else if(score>=80&&score<90)
*c='A';
else if(score>=90)
*c='S';
}
void disp(char c)
{
printf("%c\n",c);
printf("----------------------------\n");
}
0952951
2007/06/14(木) 14:12:11int main()
{
int score;
char c;
printf("点数を入力してください。\n");
printf("点数=");
scanf("%d",&score);
putchar('\n');
rank(&c,score);
disp(c);
return 0;
}
0954デフォルトの名無しさん
2007/06/14(木) 14:28:46[2] 問題文:2~1000までの値を入力し、入力された値を2で繰り返し1になるまで割り、その途中経過と回数を表示するプログラム
[3.1] WindowsXP
[3.2] BorlandC++
[3.3] C++
[5] その他の制限:while文使用、
例:値を入力してください:10
10÷2=5
5÷2=2
2÷2=1
回数:3回
0955デフォルトの名無しさん
2007/06/14(木) 14:31:39なんか微妙に条件付け忘れた。
まだ見てたらmain関数を以下のように変更してほしい。
int main()
{
int score=999;
char c;
while(score>100){
printf("点数を入力してください。\n");
printf("点数>>");
scanf("%d",&score);
if(score>100)printf("点数は0〜100の範囲で入力してください。\n");
}
putchar('\n');
rank(&c,score);
disp(c);
return 0;
}
0956デフォルトの名無しさん
2007/06/14(木) 14:37:15int main(void)
{
int s,c=0;
printf("数を入力:"); scanf("%d",&s);
while(s > 1){
printf("%d / 2 = %d\n",s,s/2);
c++;
}
printf("回数:%d回\n",c);
return 0;
}
0957デフォルトの名無しさん
2007/06/14(木) 14:39:21#include<iostream>
using namespace std;
int main()
{
int x,n=0;
cout<<"値を入力してください:";
cin>>x;
while(x>1)
{
cout<<x<<"/2="<<x/2<<endl;
n++;
x/=2;
}
cout<<"\n回数"<<n<<endl;
return 0;
}
0958修正
2007/06/14(木) 14:39:58int main(void)
{
int s,c=0;
printf("数を入力:"); scanf("%d",&s);
while(s > 1){
printf("%d / 2 = %d\n",s,s/=2);
c++;
}
printf("回数:%d回\n",c);
return 0;
}
0959デフォルトの名無しさん
2007/06/14(木) 14:41:590960デフォルトの名無しさん
2007/06/14(木) 14:50:45問題を載せさせてもらいましたので、またよろしくお願いします。
0961デフォルトの名無しさん
2007/06/14(木) 15:02:19ちょっwwwwwwwwwwwwwおまっwwwwwwwww
0962デフォルトの名無しさん
2007/06/14(木) 15:09:270963デフォルトの名無しさん
2007/06/14(木) 15:23:46C/C++の宿題を片付けます 90代目
http://pc11.2ch.net/test/read.cgi/tech/1181802185/
0964デフォルトの名無しさん
2007/06/14(木) 15:23:59[2] 問題文:入力された値が素数か判定するプログラム
[3.1] OS:WindowsXP
[3.2] BorlandC++
[3.3] C++
[5] その他の制限:<stdio.h>しか使えないです
0965問題♀16歳
2007/06/14(木) 15:24:44ただし、if文を使用すること。
0966デフォルトの名無しさん
2007/06/14(木) 15:27:43#include <stdio.h>
int main(void) {
double x;
printf("Input > ");
scanf("%lf",&x);
printf("%.0lf \n",x);
return 0;
}
0967問題♂16歳
2007/06/14(木) 15:28:160968デフォルトの名無しさん
2007/06/14(木) 15:28:33http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4250.txt
0969問題♀16歳
2007/06/14(木) 15:30:53if文だっちゃ!!!でもありがとうございまず。
0970デフォルトの名無しさん
2007/06/14(木) 15:31:52それ答えになってないって。21歳の(ry
0971問題♀13歳
2007/06/14(木) 15:38:3421歳の童貞乙
0972デフォルトの名無しさん
2007/06/14(木) 15:39:30#include<iostream>
using namespace std;
int main()
{
int x,n=2;
cout <<"判定する数値を入力してください:";
cin>>x;
while(n<x)
{
if(x%n==0){
cout<<"その数値は素数ではありません"<<endl;
return 0;
}
n++;
}
cout<<"その数値は素数です。"<<endl;
return 0;
}
0973デフォルトの名無しさん
2007/06/14(木) 15:40:55まぁcoutとcinをそれぞれ置き換えてください。
0974デフォルトの名無しさん
2007/06/14(木) 15:41:45#include <iostream.h>
int main()
{
int i, n, flag = 1;
cin >> n;
if(n%2 == 0)
flag = 0;
else
for(int i = 3; i*i <= n; i += 2)
if(n%i == 0){
flag = 0
break;
}
if(flag) cout << "prime" << endl;
else cout << "not prime" << endl;
return 0;
}
0975デフォルトの名無しさん
2007/06/14(木) 15:43:002 is not prime?
097629歳♀
2007/06/14(木) 15:50:450977デフォルトの名無しさん
2007/06/14(木) 15:51:52#include <stdio.h>
int main(void)
{
int i, n, flag = 1;
scanf("%d", &n);
if(n < 2)
return 1;
else if(n == 2)
;
else if(n%2 == 0)
flag = 0;
else
for(i = 3; i*i <= n; i += 2)
if(n%i == 0){
flag = 0;
break;
}
if(flag)
printf("prime\n");
else
printf("not prime\n");
return 0;
}
0978デフォルトの名無しさん
2007/06/14(木) 16:02:20#include <stdio.h>
int main(void)
{
float n;
long int m;
scanf("%f", &n);
if((long int)(n*10)%10 >= 5)
m = (long int)n + 1;
else
m = (long int)n;
printf("%ld\n", m);
return 0;
}
0980デフォルトの名無しさん
2007/06/14(木) 19:03:41[2]
3x3の計9つの整数をキーボードから読み込み、その値が100以上であれば1を、100未満であれば0を表示するプログラムを作成せよ
例
120 50 70 1 0 0
90 150 110 → 0 1 1
40 100 20 0 1 0
[3]
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C
0981デフォルトの名無しさん
2007/06/14(木) 19:04:411行目の
1列目=120
2列目=50
3列目=70
2行目の
1列目=90
2列目=150
3列目=110
3行目の
1列目=40
2列目=100
3列目=20
----------------------
元のデータ
120 50 70
90 150 110
40 100 20
変換後のデータ
1 0 0
0 1 1
0 1 0
よろしくお願いします
0982デフォルトの名無しさん
2007/06/14(木) 19:19:34#include <stdio.h>
int main()
{
int array[3][3];
int i,j;
for(i=0;i<3;i++){
printf("%d行目の\n",i+1);
for(j=0;j<3;j++){
printf("%d列目=",j+1);
scanf("%d",&array[i][j]);
}}
printf("-----------------------\n");
printf("元のデータ\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%d ",array[i][j]);
putchar('\n');
}
printf("変換後のデータ\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++)
if(array[i][j]>=100)
printf("1 ");
else printf("0 ");
putchar('\n');
}
return 0;
}
0983デフォルトの名無しさん
2007/06/14(木) 19:40:11よろしくお願いします
0984デフォルトの名無しさん
2007/06/14(木) 19:47:480986デフォルトの名無しさん
2007/06/14(木) 20:01:420987デフォルトの名無しさん
2007/06/14(木) 20:29:23めんどくせ
0988デフォルトの名無しさん
2007/06/14(木) 20:34:190989デフォルトの名無しさん
2007/06/14(木) 20:37:37C++の方が多機能で楽だ。
0990デフォルトの名無しさん
2007/06/14(木) 20:47:430991デフォルトの名無しさん
2007/06/14(木) 20:47:580992デフォルトの名無しさん
2007/06/14(木) 21:41:16fstreamで読み込んで表示するのが一番楽だ。
0993デフォルトの名無しさん
2007/06/14(木) 22:22:26C++に挑戦したが途中で挫けた。後は自分でガンバレ
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
struct subject{
string info[3];
};
const int WEEK_DAY=5;
const int LAST_SUBJECT=5;
int main(void){
subject time_table[WEEK_DAY][LAST_SUBJECT]={
{{"C言語研究1", "山田太郎", "E303"}, {"", "", ""}},
{{"Java", "田中次郎", "E404"}},
};
string subject_info[]={"1限", "2限", "3限", "4限", "5限"};
for(int subject=0;subject<LAST_SUBJECT;subject++){
for(int a=0;a<3;a++){
if(a==1) cout << "| " << subject_info[subject] << " |";
else cout << "| |";
for(int week_day=0;week_day<WEEK_DAY;week_day++)
cout << "|" << setw(10) << time_table[week_day][subject].info[a] << "|";
cout << endl;
}
cout << "|--------|";
for(int week_day=0;week_day<WEEK_DAY;week_day++)
cout << "|----------|";
cout << endl;
}
return 0;
}
0994デフォルトの名無しさん
2007/06/14(木) 23:49:47理解するのにちょっと時間かかりそうですががんばります!
0995デフォルトの名無しさん
2007/06/14(木) 23:57:460996デフォルトの名無しさん
2007/06/14(木) 23:59:452割くらいは自分も考えさせられる質問が出るから一概に馬鹿に出来なくて困る。
0997デフォルトの名無しさん
2007/06/15(金) 00:02:07ただ自分で考える力がないのはどこ行ってもダメだろうけど
0998デフォルトの名無しさん
2007/06/15(金) 00:07:07仕事で心が寂しくなってませんか?仕事と2chをやめて
出家すれば、きっとも豊かな心と人間的な生活が取りもどせますよ。
0999デフォルトの名無しさん
2007/06/15(金) 00:08:591000デフォルトの名無しさん
2007/06/15(金) 00:09:3710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。