1 :
デフォルトの名無しさん :
2007/06/06(水) 08:49:31 BE:151474144-2BP(12)
乙
3 :
デフォルトの名無しさん :2007/06/06(水) 12:25:00
問題文(含コード&リンク): 環境 OS: (Windows/Linux/等々) コンパイラ名とバージョン: ボーランド 言語: C [5] その他の制限:現在for文 if文 入力・出力・演算子 テーマ:繰り返し処理(while文) 問題:キーボードより整数nを入力し、1〜nまでの合計を求めなさい 実行画面 整数nの入力==>5 合計:15
>>3 #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;
}
5 :
デフォルトの名無しさん :2007/06/06(水) 13:09:48
[1] 授業単元: C言語 [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> ヘッダーは←だけを使って。 お願いします
>>5 #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;
}
7 :
デフォルトの名無しさん :2007/06/06(水) 14:21:16
[1] 授業単元: C言語 [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> ヘッダーは←だけを使って。 二つ目お願いします。
8 :
デフォルトの名無しさん :2007/06/06(水) 14:39:42
> [4] 期限: 6/6 午後3時まで これは・・・レスするのを3時まで待つしかないわめ
>>7 #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;
}
10 :
デフォルトの名無しさん :2007/06/06(水) 14:47:31
11 :
デフォルトの名無しさん :2007/06/06(水) 14:50:00
>>7 #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;
}
[1] 授業単元:C言語 [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バイトだけ取得してしまい思った結果がだせません 解決法よろしくお願いします
>>12 文字セット/エンコーディングは不明だわ
「日本語・2バイト文字」という超アバウトさ
極めつけは
> [1] 授業単元:C言語
> [3.3] 言語: C
なのに
> クラスを作成せよ
釣りか。釣りなのか。
ライブラリのことか?
15 :
12 :2007/06/06(水) 15:25:22
>>13 すいません、本当に問題文は口頭説明そのままです
ただ、2回講義を受けられなかったので
過去になにか別の言い回し?クセ?がある人なのかもしれないです(普段別言語の開発を行っているらしい)
ちょっと出題した人に問題自体聞きなおしてきます
お騒がせしました
16 :
デフォルトの名無しさん :2007/06/06(水) 15:31:10
>>7 追加がありました。
入力される数値が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;
}
このプログラムで追加のものを
どのように入れればうまい具合に行きますか?
教えてください。
>>16 do{
printf("Input > ");
scanf("%d",&x);
}while(x<2);
>>16 >>17 の追加修正
if(x<2) return 1; < この行を削除
else if(x==2) flg=1; < else を削除
>>15 とりあえず
Cでクラスってどういう了見よ?
と問い詰めてこい
クラスの三文字を見なかったことにすれば、出題のアバウトさから言って
↓程度で済む話かもしれない。
#include <ctype.h>
int f(const char *s)
{
while (*s && isascii((unsigned char)*s))
++s;
return !*s;
}
12 の先生です。このたびは私が生徒にこのような無知でいい加減な出題をして 皆さんに大変な迷惑をかけてしまい申し訳ありませんでした。 先生として、非常に恥ずかしいとともに、何故こんな出題をしてしまったのだろう という後悔の気持ちで一杯です。 元々頭の弱く、学校ではいつも苛められて、いつの頃からか精神的にも異変が出てきたので 何とかしなければいけないと心配していたのですが、まさかこんなことになって しまうとは..... 先生として何とお詫びすればよろしいのやら... でも、来週から精神病院に入院することが決まりました。 多分、一生退院できないと思います。 先生失格である 私 を一生世の中に出さないことが、 先生の私にできる、皆様への精一杯のお詫びだと考えています。 このたびは本当に申し訳ありませんでした。
>>12 SHIFT-JISを参照して書いてみたが、これでいけるだろうか?
#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;
}
23 :
◆lIN/ESgxWw :2007/06/06(水) 18:14:36
[1]c言語 [2]1本の道に,食べ物が多数落ちている. ランダムに動く動物が,それらを全て食べ尽くすと終了するようなプログラムを作成せよ. <仕様> 「道」は要素数20程度の1次元配列で表現する. 「食べ物」は,上記配列の各要素に値1があればその場所に存在し,値0であればその場所には存在しないものとする. 「動物」は,1回の移動で配列中の1つ左または1つ右に移動できる. 「動物」の訪れた場所のエサは食べられたものとする. 「道のうち食べ物のない箇所」,「道のうち食べ物のある箇所」,「動物」は,それぞれ -, *, O で表現する.それらを横一列の文字で表示する. 繰り返し処理中は,毎回数十〜数百ミリ秒程度の時間,実行を一時停止させることで,状態の推移を見やすくする. [3]OS:Linux コンパイラ名:スイマセン、分かりません 言語:C [4]できれば今日中にお願いします [5]制限:配列まで習ってます。標準ライブラリは習ってません よろしくお願いします。
>>23 つまり、標準ライブラリを使うな、ということだな。
>>23 つまり遠まわしにぬるぽって言いたいわけだな
いやん
そして、その後
>>23 は別のスレへと答えを求めて旅立ったのであった・・・
アッー つまり標準ライブラリ関数以外を使えばいいんだぜ
必要なライブラリを実装すりゃええがな。
そうか ってことは、標準ライブラリじゃなきゃ何使ってもいいってことだな
maniac libraryでおk
33 :
23 :2007/06/06(水) 18:43:34
アッー
[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ポインタと構造体はまだは習ってません よろしくお願いします
>>34 #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;
}
>>34 #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;
}
>>997 #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;
}
[1] 授業単元: C++実習 [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] その他の制限: 特になし 前すれでから引用 よろしくお願いします。
>>3 #include <stdio.h>
int main()
{
int n, sum;
for (scanf("%d", &n), sum=0 ; n>0 ; sum+=n, n--);
printf("%d", sum);
}
>> structです
え〜クラスじゃないの?C++らしい問題が来たと思って張り切って作ったのに
43 :
デフォルトの名無しさん :2007/06/06(水) 21:21:08
[1] 授業単元: C言語演習 [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] ポインタまで お願いします。
>>42 クラスでつくってもらったのなら、クラスで構わないです
課題ではstructで作るのが通常みたいですが、クラスでも問題ないようなので
>>43 a2の先頭の文字?a2がa1の先頭に含まれている場合じゃなくて?
>>42 structって単に全部のメンバがpublicなclassじゃん
C++なら
47 :
デフォルトの名無しさん :2007/06/06(水) 21:27:22
48 :
デフォルトの名無しさん :2007/06/06(水) 21:38:25
43の問題 すみません。そうですねa2がa1に含まれているときはyes 含まれていなかったら no と表示させたいです。お願いします
49 :
デフォルトの名無しさん :2007/06/06(水) 21:41:11
a2がa1に含まれていれば yes 違えば no と表示させたいです。
>>43 #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;
}
>>43 #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"));
}
宿題ではないのですが、我流独習のC++で詰まりました すっごい文法基礎な予感なので、テンプレ形式にキャストしてこっちに持ってきてみました ヒントください; 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にしますが、違う気がする) 期限: 特にないが数日を目処に取り下げ宣言の上他スレに移動(恥ずかしい;)
>>52 iの定義が必要。
template <typename T>
int sometemplates<T>::i;
それから、mainの結果の型はintね。
早い!
>>55 !!!
何かが見えた気がします もちろんVC6goldでコンパイル通りました
ちょっと派生疑問もあるのですが、(即聞かずに)ちょっといろいろやってみます
> mainの結果の型はint
いくらなんでも手抜き過ぎますたw
…反省は、していない // お約束
ありがとうございました 精進します
そうだった、ここ(サンデープログラマさんだけじゃなくて)学生さんも見てるんだった 気が変わって、恥の上塗りにきますた void main(void){} は、そのコンパイル結果に責任を持てないなら… …何が起こるかわからないなら、やってはいけない 少なくとも非礼です おいらは/Fa,ml /coffを日常的に使い、crt/srcよりもntsdの出力を信じ、 なにより粗野な性格ゆえ、あのような非礼なコードを書くのです 真似しないよう ソースコードは人の恥部とは、言ったものだな…。
学生メインのスレだろここはw サンデープログラマで宿題ってどうよ
サンデーってずっと水曜日のことだと思ってたよ
つーか、手抜きならintの方が一文字短いぞ。 C++ならreturn 0;が省略できるから。
解答する方にはサンデープログラマが結構居そうだけど 質問するサンデープログラマは珍しいな。 別に質問者が何者でもOK。俺っちは、答えたい質問には誠意を持って対応 気に入らない質問&レスは脳内あぼ〜んするだけだ。
仮引数のvoidとかいらねーしな それと、少なくともg++は戻り値voidだとエラーにするぞ
俺は日曜日だと思ってた
64 :
デフォルトの名無しさん :2007/06/06(水) 22:49:40
プログラマーになるにはどれくらい知識つけないとダメでしょうか? 今、我流でC言語を勉強してて今配列やってる
>>64 配列とポインタとメモリの関係を理解できて、
まだ学生であればプログラマーになれる。
どうせ入社したらC言語やらないんだよ
>>65 今現在は25歳のフリーター・・・
しかもパソコン一年生です・・・
>>67 よほど才能が無い限り無理。
ほかの道を探したほうが自分のため。
C言語といいますか、10進数を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進数で表示しなさい 解き方と答えを教えて頂ければ幸いです
>>47 #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;
}
>>64 Cが書けるだけではプロにはなれない
上司・顧客が要求するモノを書けなければいけない 実は、どんな業種でも同じ事
でも、Cすらもかじったことないような営業は、事務職やってるアマのおいらでもイヤだ
納められたコードは必ず読む 逆汗に通す 腐ったコード納めるんじゃない。
顧客に、手抜きはわかると思ってほしい
その感覚が、Cやった人間なら、多少わかるんじゃないか
実装に苦心した様子だって逆汗からわかるもんさ ガキじゃないんだ 無下にはしない!
自分で、「自分の要求」をC/C++で実装してみろ。他人の苦労がわかるようになる
もう一度言う、Cが書けるだけではプロにはなれない
でも、Cはやっとけ。
Cとともにアセンブラが使え、「組み込みC」のスキルが取れれば、形勢は逆転かもw
どうせやるのはJavaかASPばかり
GOING GOIN HOME H 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] その他の制限:
>>75 GOIN GOINGは間違えてコピーしてしまいました、お気になさらないでください
77 :
76 :2007/06/06(水) 23:12:37
トリップは間違えて入れてしまいました。お気になさらないでください
78 :
77 :2007/06/06(水) 23:15:14
間違えて産まれてしまいました。お気になさらないでください
79 :
デフォルトの名無しさん :2007/06/06(水) 23:20:02
問題文(含コード&リンク):課題04Aをdo〜while文を使用して合計を求めなさい 課題: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
>>75 ただの浮動小数点の問題じゃねえか。消えろ
82 :
71 :2007/06/06(水) 23:35:46
>>47 int 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;
}
83 :
デフォルトの名無しさん :2007/06/06(水) 23:46:04
>>83 if(temp[0] == 'E' && temp[1] == 'N' && temp[2] == 'D' && temp[3] == '\0') return 0;
*(int*)temp=='DNE' みたいな感じで?(試さないけど。)
20行ごとに改行するにはfor文でどう書けばいいんでしょうか?
>>87 for(;i%20==0;)printf("\n");
>>87 ただの質問ならスレ違い。宿題ならテンプレ通りに書いてな
>>87 20行ある時点で少なくとも19回は改行してるんj(ry
92 :
デフォルトの名無しさん :2007/06/07(木) 02:16:17
[1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク): 整数nを入力し入力された整数分”山”を表示せよ。 (例) n=1 * ** * n=3 * ** * * ** * * ** * [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Cygwin gcc [3.3] 言語:C言語 [4] 期限:無理を承知で今晩中にお願いします。 起きてる方いたらお願いします。
>>92 #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;
}
ほんとに例のとおりでいいのか? #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; }
>>92 汚いプログラムで悪いが、エスパーしてみた。
#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;
}
ウンコーなソースを貼るんじゃねぇ〜〜〜w
97 :
デフォルトの名無しさん :2007/06/07(木) 02:34:47
お二方ありがとうございます。 初めて2週間でfor分の回し方がよく分からなかったので参考になります。
>>93-95 せめて変数nだけは初期化して欲しい・・・
あと、ループするとこないなぁ。
入力を何度も受け付けるんだよね?
99 :
デフォルトの名無しさん :2007/06/07(木) 02:39:55
>>95 エスパーはよく分からないですけど、そのソースも参考にさせていただきます。
賠償しるニダ
賠償したニダ
>>98 scanfで代入されるから初期化は意味無くね?
>>103 scanfで代入されればの話な。
数字以外を入力されたらnには代入されんよ。
そうすると何が入っているかは実行環境ごとのお楽しみに。
それを言い出したら……
106 :
デフォルトの名無しさん :2007/06/07(木) 07:43:39
[3] 制限:do〜while文・while文・for文・if文 [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円
>>106 収支、金額==>-10 のところを再現してません
#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;
}
1] 授業単元:C言語演習 [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] その他の制限: よろしくお願いいたします。
↑実行結果はこのようになります。 [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]%
110 :
デフォルトの名無しさん :2007/06/07(木) 09:20:58
#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 このプログラムをdo〜while文に変えたやつ何方か作ってください(ノ_<。)
>>108 #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;
}
>>110 #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;
}
>>110 #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);
}
>>111 ありがとうございました。助かりました^^
>>115 -―-
. ´ ` 、
' , 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' | |
量産化の暁には俺にも嫁が
量産化の暁には俺にも夫が
119 :
デフォルトの名無しさん :2007/06/07(木) 11:27:33
授業単元:C言語 環境: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 評価:成績の入力エラーです
120 :
デフォルトの名無しさん :2007/06/07(木) 11:58:09
授業単元:C言語 環境:if文・do〜while文・while文・for文 OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:数値配列の操作 要素数5のarrayの合計を求めなさい int array[5] = {3,8,2,10,1} 実行画面 合計:24
>>120 int sum=0;
int i=5;
int array[5] = {3,8,2,10,1};
while(i-->0)
sum+=array[i];
printf("%d",sum);
return 0;
122 :
デフォルトの名無しさん :2007/06/07(木) 13:03:59
[1] 授業単元: C [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] 期限: 明日まで よろしくお願いします。
123 :
デフォルトの名無しさん :2007/06/07(木) 13:04:08
[1] 授業単元: C言語 [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> ヘッダーは←だけを使って。 お願いします
124 :
デフォルトの名無しさん :2007/06/07(木) 13:24:54
>>123 すげー簡単な初歩的な部分だと思うんだけど
それを他人まかせでやらせて自分は大丈夫なのか?
たぶん学生だと思うけど、自分の為に少しはソース書いてみたら?
>>123 #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;
}
>>123 #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;
}
>>123 #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;
}
>>122 int 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');
}
131 :
デフォルトの名無しさん :2007/06/07(木) 14:00:29
何方か119の問題お願いします
>>126 ついでに0の-n乗だと0で助産もキターーーー!
>>131 char 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;
}
134 :
デフォルトの名無しさん :2007/06/07(木) 15:11:12
[2] 問題文:入力した文字列をaから順に並べるプログラム [3] 環境 [3.1] OS:WinXP [3.2] BorlandC++ [3.3] 言語:C++ [5] その他の制限:ヘッダファイルは<stdio.h>のみです。while、do、switchも使えないです。 例 acbd →abcdとなる
135 :
デフォルトの名無しさん :2007/06/07(木) 15:11:36
[1] 授業単元:プログラミング [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; }
136 :
デフォルトの名無しさん :2007/06/07(木) 15:42:06
[1] 授業単元:プログラミング [2] 問題文: 2つの数字を入力してそれらを加算した値を2進数で表示させる [3] 環境 [3.1] WinXP [3.2] BorlandC++ [3.3] 言語:C++
>>134 大文字が入力されたら小文字に、英字以外の文字も入る仕様になっているけど。
なんっちゅーか、変な制限があると面倒だな。
#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;
}
138 :
デフォルトの名無しさん :2007/06/07(木) 15:50:18
言語:C 環境:if・for・while文 問題:複数件の整数を入力し、合計、件数、平均を求め表示しなさい 0が入力されたらデータの終了とし、合計、件数には反映しない実行画面 整数入力(0で終了)==>5 整数入力(0で終了)==>4 整数入力(0で終了)==>10 整数入力(0で終了)==>8 整数入力(0で終了)==>0 合計:27 件数:4 平均:6.8
>>138 int 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);
140 :
デフォルトの名無しさん :2007/06/07(木) 16:30:40
きちんと回答を解説している書籍の購入をすすめる
>>135 #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;
}
143 :
135 :2007/06/07(木) 16:59:33
課題なので回答を解説してる書籍なんてないです・・・ とりあえずヒストグラムにして画面に出力するプログラムを作って提出しようと思うんで、誰かお願いします・・・
144 :
142 :2007/06/07(木) 17:00:13
まずった printf(" ");はprintf(" ");にしといて
1〜∞ の1幅ヒストグラムならば 単語数の総数で終了さね
>>144 ありがとうござます
大変申し訳ないんですが、135にもあるように #include<stdio.h> の制限があるのです
>>135 #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;
}
148 :
147 :2007/06/07(木) 17:14:25
while(str[i++] != '\0'); を while(str[i] != '\0) i++;に変更plz
[1] C言語演習 [2] OS windos [3]課題 長さ256文字以下の英数字,空白の並びからなる文字列を二つ 入力し,それぞれをT1, T2とする. T1の中にT2が出現する場 合に,その一番左に現れる文字列の先頭アドレスを値として返 す関数 char *findstr(char *t1, char *t2);を作成しなさい .ただし,T1の中にT2が出現しないときはNULLを値として返す ものとする.findstr()の中で,比較対象となるT1のなかの先頭文字を先頭 から一文字ずつずらして 7-2で用いたchkmatch()を呼び出すこ とにより要求を満たす関数を作成することができる.
>>149 > 7-2で用いたchkmatch()を呼び出すこ
7-2で用いたchkmatch()について悔しく
↑の続き この関数を用いて, 1)最初にT1を表示し,2)その次にT1の中 でT2の文字列が出現するまでの文字をスペース(' ')として端 末に出力し,そのあとT2の文字列文だけ(’^’)を出力し、 再度T2の文字列が出現するまでスペース(’ ’)を出力し.. というプロセスを文末まで続けるプログラムを作成しなさい。 3a)このプロセスは、findstrを実行して文字列の先頭を検索 し、そこまでスペースを出力する。3b)文字列の先頭が検出さ れたら、T2の文字列分だけ(’^’)を出力する。3c)T2の 文字列分だけポインタを進め、そこからfindstrを再実行する (3aにもどる)というプロセスを繰り返すことで完成する。 4)T2がT1に出現しない場合はT1の文字数だけのスペースが表 示されるようにすること. 配列宣言を除き,すべてポインタを用いて処理すること.文字 列の長さに関するエラー処理をする必要はない.
>>136 #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;
}
[4] 6月8日 午後6:00 [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]% 宜しくお願いします。 続けての書き込みすいませんでした…
>>149 #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;
}
strstrは浮かんだが、それを実装しろって話じゃね・・・?
char * strstr(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); }
157 :
デフォルトの名無しさん :2007/06/07(木) 18:01:34
[1] 授業単元: プログラミングA [2] 問題文(含コード&リンク):a,b,cをキーボードから入力し、最小値を出力するプログラムを作成せよ。3項演算子を用いること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: CC [3.3] 言語: C++ [4] 期限: 6月7日 21:00まで [5] その他の制限: 基本なのだと思いますが、どうかよろしくお願いします。
>>157 #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;
}
160 :
デフォルトの名無しさん :2007/06/07(木) 18:27:35
[1] 授業単元:C++ [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] 初歩的なんですけど、お願いします。
っつか
>>159 はうまく処理されないものがあった orz
>>160 int main(void)
{
return 0;
}
>>163 #include <stdio.h>
int main(void)
{
printf("%c %c %c %c %c %c\n",110,117,114,117,112,111);
return 0;
}
165 :
デフォルトの名無しさん :2007/06/07(木) 20:34:58
ランレングス関係で、符号を白ランと黒ランの系列に直す、とかでも構いませんか?
キャッチ ガッ!
>>160 Aくん、Bくん、Cくんのデータは既知なん?(´・ω・`)
>>168 #include <stdio.h>
int main(void) {
int *x=NULL;
return x; }
171 :
771 :2007/06/07(木) 21:02:09
一度 アプリを起動したら開いたアプリケーションを終了するまで 同一のアプリは表示できなくなる方法を教えて下さい。 ちなみに環境はBorland C++ Builder5.0です。
>>169 class 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;
}
>>171 HANDLE 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;
ちょっとゲームやってくる、後はお前らで適当に宿題に答えておいてくれ。 くれぐれも、0^0=1なんてソースは書くなよ
183 :
デフォルトの名無しさん :2007/06/07(木) 22:24:39
[1] 授業単元:c言語プログラミング [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 急な期限で申し訳ないですが、よろしくお願いします。
184 :
デフォルトの名無しさん :2007/06/07(木) 22:27:24
ずれすぎ(汗 数値の例を訂正します。すいません。 例 有効 無効 0 00010 00000 1,00,00000 10,000,000 0,10000000 100,000,000 1,000000,0
せっかくネタ回答を用意して待ってたのに・・・
188 :
デフォルトの名無しさん :2007/06/07(木) 22:42:07
>>185 例に示している8つの数値だけです。
解けていない私が言うのもなんですが、
数値として正しい表記が有効だそうです。
例えば、123,45はコンマの位置がおかしいので無効。
7, 781 は有効に見えても、スペースがあるから無効とか。
数値として無効な0もダメだそうです。
0や00はOKでも01はダmだそうです。
わかりずらければ、すいませんです。
191 :
デフォルトの名無しさん :2007/06/07(木) 22:48:26
>>186 参考になります。ソースをいじってみます。ありがとうございます。
前スレは1000レスもあるので、全部は確認できてませんでした。。。
>>189 はい。づらが正しい表記だと思います。
>>191 先頭にスペースがある場合は飛ばす仕組みになっているから、そこを外すなり
符号の+−は有効になっていて、その次が0でない数値なら有効といった流れだから
先頭に数字が来ていなければ無効にする形に書き換えればおkかと。
>>183 >数値はキーボードで入力し、gets()を使うこと。
( ´,_ゝ`)プッ
>>183 #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)?"有効":"無効");
}
}
途中であきらめた
>>197 え?無効でいいんじゃないの?1,000だろ?
カンマ無しの数字も有効にしたければ、if(i>3) return 0;をひとつ下に下げればOKかな? なんとなくだけど
201 :
171 :2007/06/07(木) 23:42:06
>>201 いえいえ、というか今見返したら上のやり方の方で
テスト用に書いたMessageBoxのあたり中途半端に消し忘れてた・・・orz
>>183 はコンマの区切りを判別するだけなら
>>186 みたいなごちゃごちゃしたものにならずに済む罠。
204 :
デフォルトの名無しさん :2007/06/08(金) 00:42:07
206 :
204 :2007/06/08(金) 00:46:34
大変申し訳ない。 私の確認不足で二次曲線の表示にミスがありました。 製作途中のプログラムも載せてあるので気づかれた方がほとんどかと思います。 申し訳ない
>>206 whileの中身だけ。
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;
}
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): BIOSを書き換えてパソコンを起動できなくするプログラムを作成せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc32 [3.3] 言語: C [4] 期限: 6/12 [5] その他の制限: お願いします
>>208 BIOSのROMを抜いた方が早いだろw
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): (´・ω・`) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc32 [3.3] 言語: C [4] 期限: 6/12 [5] その他の制限:
212 :
デフォルトの名無しさん :2007/06/08(金) 02:54:22
(´・ω・`)・・・
>>211 (´・ω・`) < 俺と一緒にCをやらないか?
214 :
デフォルトの名無しさん :2007/06/08(金) 03:23:43
>>206 #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;
}
215 :
214 :2007/06/08(金) 03:31:05
ん?コピペしたらy軸用のprintf文がおかしくなったな ま、変更点はint iの宣言と、while文のみです
>>211 #include <stdio.h>
int main(void)
{
printf("(´・ω・`)");
return 0;
}
218 :
デフォルトの名無しさん :2007/06/08(金) 04:57:14
>>217 これが・・・も・・・・萌えってやつなのか・・・
219 :
195 :2007/06/08(金) 08:05:45
だれか〜
>>195 >matrixA[ i ][ 0 ] ? matrixB[ 0 ][ j ] + matrixA[ i ][ 1 ] ? matrixB[ 1 ][ j ] + ・ ・ ・
>・ ・ ・+matrixA[ i ][ m? 1 ] ? matrixB[ m ? 1 ][ j ]
これでどうしろと?
221 :
デフォルトの名無しさん :2007/06/08(金) 08:42:50
403
-- % 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 % -- これだけ判っていれば作れるだろ。
223 :
195 :2007/06/08(金) 09:14:52
matrixA[ i ][ 0 ] * matrixB[ 0 ][ j ] + matrixA[ i ][ 1 ] * matrixB[ 1 ][ j ] + ・ ・ ・ ・ ・ ・+matrixA[ i ][ m - 1 ] * matrixB[ m - 1 ][ j ] 文字化けしてた
224 :
デフォルトの名無しさん :2007/06/08(金) 09:16:36
>>195 #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);
225 :
デフォルトの名無しさん :2007/06/08(金) 09:18:43
>>195 続き
printf("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");
}
}
226 :
195 :2007/06/08(金) 09:51:46
ありがとう!
227 :
デフォルトの名無しさん :2007/06/08(金) 10:01:21
[1] 授業単元:プログラミングA [2] 問題文(含コード&リンク): whileループを用いて、等差数列 1+3+5+7+...+9999 を計算するプログラムを作成せよ。複合代入演算子を使用すること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: c++ [4] 期限: 6月8日16:00まで [5] その他の制限: どうぞよろしくお願いします。
お願いします・・・ /´ ヽ` ̄ ー-゙:.、 i - 、 `ヽ_ l: 、.: ヽ ゙i" ! i ; n .:c.: ', _..ハ | ハ/ { _,..-ァノ 、r‐、>ー ヽ | ト./ ` ̄__,.:=彡 :.ヾ、ニ二 / . | |ノ -=< ゙=tラ'" | / ,-一'" ̄´ i |:/ / \:. ! | ' / ヽ:. :、 \ ゙、 ノ .i:. ` ヽ `ー' _:/__:. `ー---─ ''"´ ̄ ̄`` ー- 、 /´ `ヽ、. .: `ヽ、 / `ヽ、 ゙i i :; ,! ! ‐-、 :. ;: .:' / ヽ ヽ ; j:! " __..:-‐'"´ ̄ ̄` __ノ \ ! .:' 〃 ,..:---─‐'"´ __.. -──── ''"´ `ヽ、 ヽ、 ノー;'"、二:.:'ー--ァ'"´ `ヽ、 >:).......ヽ、_∨:/` ̄i ....:::::::::::にニニイ::::::::::::::::ヾK.._.ノ、 ....::::::::::::::::::,! _ i!:::::::::::::::::..ヾ:、__/ ミ、::::::::::::::::......... ..::::::::::::::::::::::::!`´_` .! `===='' :::::::::::::....... ::::::::::::::::::::::::::k'´! i ,``;| ..:::::::::::::::::::::ヾ三三ノ
>>227 int 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;
}
>>227 #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;
}
231 :
デフォルトの名無しさん :2007/06/08(金) 14:33:30
>231 d_method()が無限ループになってるてのは、>230の指摘にあるけど、 そもそも0と1で場合わけしたらループにする意味が全くないぞ。 ついでに言えばb_rebirth()(関数名としては意味がおかしい)も転置してない。
rebirthとは、転生しているんでしょう。
>380じゃなくて>382だった。 b_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]; をそのまま書いたほうが無駄にループで書くよりマシ。
238 :
237 :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; }
239 :
211 :2007/06/08(金) 19:21:58
>>217 #include <stdio.h>
int main(void)
{
printf("(´・ω・)<d");
return 0;
}
240 :
デフォルトの名無しさん :2007/06/08(金) 21:39:49
[1] 授業単元:基本プログラミング [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] その他の制限: よろしくお願いします。
241 :
デフォルトの名無しさん :2007/06/08(金) 21:57:25
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 各要素が整数の2つの10次元ベクトルをキーボードから入力し,2つのベクトルの和 及び内積をサブルーチンで求めて表示せよ. ベクトルは配列で表現せよ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C
[1] 授業単元: コンピュータ・C言語 [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を使って実行したほうがよい。 一問が多すぎるのですがどうかよろしくお願いします。
すいません(つまり2.3.4を表示)は関係ありませんでした・・・・ あとdefineで定義とはN Mを3とか5に定義して使えということです。
>>240 やってみたけど、出力される内容が実行例の内容と違う。
関数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;
}
>>237 >>244 の補足
web2_out.txt に検索結果を出力するようにしてあるっす。不要なら消しておくべし。
247 :
231 :2007/06/08(金) 22:35:17
>>232-235 ありがとうございます。
一応、教えてもらったとおりにすれば実行できたのですが、d_method()を一般化してD[][]を求めるにはどのようなソースを組めばよいのでしょうか?
248 :
237 :2007/06/08(金) 22:41:37
>>244 ,246
有難うございます。
>>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
のようになりました。
249 :
237 :2007/06/08(金) 22:42:24
↓がそのCのプログラムです。 もっといい方法がありましたら、お教えください。 #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; }
>>241 #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;
}
>>249 「真ん中を比較して、どんどん半分にする」
という方法が定石だと思うのだけど、どう実現して良いやら。
[1] 授業単元:情報工学実験T [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日 どうかよろしくお願いします
イニシャルの先頭の場所をあらかじめ求めておけばおk 単語が一つ増えただけで書き直しになるけど
255 :
デフォルトの名無しさん :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個まで計算できるようにすること。 僕の能力では解けませんでした。よろしくお願いします。
>>254 日本語でおk。無駄口叩いて知ったかぶっているとボロ出すからw
257 :
237 :2007/06/09(土) 00:50:24
>>253-254 有難うございます。
アルゴリズムを改造せずに姑息な最適化を施したら
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;
}
>>255 >改行で区切られた整数(縦に並んだ整数)
改行で区切られてるのに横に並んでる?
入力ファイルのフォーマットをもう少し詳しく
どこに横に並んでるって書いてあるんだw おまいの頭の中をもう少し詳しく
>>237 これで早くなってるんじゃないかな?
#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;
}
>>256 オフセットの位置をあらかじめ・・・でわかる?
っつか、 strncasecmp って標準ライブラリじゃない?俺んとこじゃこれが使えねぇ orz
>>262 だからそういう取り扱いがすでに不適切だって言ってんだが?
汎用性を無視した固有のやり方は、ちょっと環境が変わればそれに応じた対処をするのに
ものすごく無駄な手間が掛かるぞ?何か運営したことのない素人かい?
266 :
237 :2007/06/09(土) 01:10:29
>>261 素晴らしい!!
real 0m0.020s
user 0m0.030s
sys 0m0.010s
でした。ここまで速ければ文句は無いでしょう。
>>263 VC++では
#ifdef _MSC_VER
#define strncasecmp strnicmp
#endif
とでもしてください。
>>264 ちゃんと書き直しになるって書いてあるだろ
>>261 引数をazとかにしたら検索してくれないアルよ
269 :
237 :2007/06/09(土) 01:14:54
>>268 ほんとだ。微妙なバグがあるようですね……
スマソ fseek(fp, pos_prev, SEEK_SET); ↓ fseek(fp, pos_prev, SEEK_SET); fgets(buff, sizeof(buff), fp);
>>274 < いい加減うぜぇよこいつ。最近でしゃばっている馬鹿か?
276 :
237 :2007/06/09(土) 01:42:29
>>271 azが検索できるようになりました。
>>272 real 0m0.525s
user 0m0.450s
sys 0m0.040s
でした。
>>255 読み込むファイルはリダイレクトで与えてね
#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;
}
fgetc使った方が速いか?そんな気がしてきた。
>>237 ごめ。もう一回
>>261 の訂正
fseek(fp, pos_prev, SEEK_SET);
↓
fseek(fp, pos_prev, SEEK_SET);
if(pos_prev) fgets(buff, sizeof(buff), fp);
>>278 IOを伴う関数は出来る限り呼び出しが少ないほうがいいと思うよ
>>280 検証してからものを言え
#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;
}
標準入出力はバッファリングされるからfgetc()でもfscanf()でも変わらないと思ったらあにはからんや、 cygwinは標準入出力関数の呼出しごとにオーバヘッドがあるらしくfgetc()は鈍足だった。
>>281 fgetc と fscanf とを比較してたのか…orz
確かに fscanf の方が遅いね
284 :
237 :2007/06/09(土) 02:36:09
285 :
デフォルトの名無しさん :2007/06/09(土) 02:53:57
[1] 授業単元:C言語 [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 です。お願いします。
おいっ、エロゲメーカー所属のトーマスさんよぉ、あんたもたまにはクソースでも書いてくれや?
290 :
289 :2007/06/09(土) 04:14:37
DICTのファイル名変えたの戻し忘れてた よしなに あと、下のはエラーチェック一切していない
291 :
237 :2007/06/09(土) 05:01:55
>>289 を勝手に改造してもちっと無駄を省いて速くなった?
if(strncasecmp(buff, argv[1], wlen)>=0) end=pos; ↓
if(strncasecmp(buff, argv[1], wlen)>=0) break;
>>261 全然検証もクソもしてないが、各先頭文字が同じ文字列数が同数と仮定して
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 のが早いかも?
大ざっぱにアドレスを飛ばしてサーチかけてんだし、実際のところ どこからどこまでに何が入っているかなんてわかっていない状態からやってんだし 本当に検索を速くするってなら、適当に単語ファイルを分けて管理する方が良いだろ。
っつか、確かにZやアルファベットの後ろ半分だったらファイルの後ろの方からって 場合わけをするのもありか。
>>261 みたいなfgets()の使い方は小生の四角い頭では思いつけんな
このスレ頭良いやつ多すぎ
お前が頭悪すぎなだけw
298 :
289 :2007/06/09(土) 06:18:10
>>291 read_dictをmmapで実装すると相当速くなるね
289と比べてみたがどちらも0.001秒とかなので
どっちが速いのかよくわからん
>>292 それは速くなることもあるけど平均的には遅くなりますね
>>293 後ろの方検索するときは効果ありそう
問題文にある辞書でも相当バラツキがあるが、線形検索よりは速くなるだろう
>>298 > それは速くなることもあるけど平均的には遅くなりますね
???、探す範囲が見つかったら、それ以降はサーチせんで良いんでは?
速くなるならないは、実行時の単なる誤差でしょ。実際のところ、変更前と後では
扱うデータが大きくないから、人間が感じる範囲内ではほとんど差はない。
>>294 辞書ファイルにまで手を入れるんだったら、
先頭にバイナリでハッシュテーブルでも入れとく方が格段に早い。
でも趣旨と全然違うんだよネ・・・。
301 :
296 :2007/06/09(土) 06:31:39
>>299 このifの条件が成立した段階でstartとposの間に求める単語が
あることはわかっているが、startはもっと後ろにずらせるかもしれない
breakしていないのはそのため
たまたまそれ以上ずらせなかった場合は292のほうが速くなるでしょう
303 :
255です。 :2007/06/09(土) 11:20:04
>fgets(buff, sizeof(buff), fp);
>if(fgets(buff, sizeof(buff), fp)==NULL) break;
なんで
>>261 って一行読み捨ててるの?
305 :
デフォルトの名無しさん :2007/06/09(土) 12:35:54
>>289 様
入出力ファイルの形式は.txtです。よろしくおねがいします。
>>305 そうじゃなくて、入出力するtxtの中身を聴いてるんでしょ
数字の並びをどういう風に整形するのかってこと
馬鹿は何をやっても駄目でしゅ(^▽^)
>>304 ファイルポインタのシーク場所を適当に飛ばしてるから、
単語の途中を指してる可能性が高い。
ていうか自分でifの前にputs(buff);入れて実行してみろよ。
309 :
デフォルトの名無しさん :2007/06/09(土) 13:19:42
入力ファイルの数字の並びはあたえられてなくて、出力ファイルに行列として出力されればいいっていう感じなんです…… 俺の馬鹿さかげんではほんと手がでません。よろしくおねがいします。
311 :
デフォルトの名無しさん :2007/06/09(土) 13:52:52
>>310 さん
error C2143: 構文エラー : '{' が '<' の前にありません。
error C2059: 構文エラー : '<'
ってでちゃうんです…
>>311 うちはコピペでコンパイル通るが。
手で書き写したなら、写し間違いの可能性がある。
>error C2143: 構文エラー : '{' が '<' の前にありません。
が出てる行と前後の行を確かめてみ。
書き間違いが無いなら、ファイルの拡張子をチェック。
それでもダメなら、ファイルをアップロードしてくれ。
] 授業単元:プログラミング実習 2] 問題文(含コード&リンク): 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] その他の制限: 配列を関数までならいました。ポインタは初めてです とにかく初心者です。 よろしくお願いします(><)
>>313 #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;
}
ごめ。
>>314 のscanf、\n要らない。
×:"%d\n"
○:"%d"
316 :
デフォルトの名無しさん :2007/06/09(土) 14:34:53
>>312 さん
'fopen' の宣言を確認してください。
'fscanf' の宣言を確認してください。
って出るようになったのですが、ここからどうすればいいですか?
>>316 警告なら気にしないー
古い形式とか言われるだけでしょ。
>>316 その警告はVisualStudioなら出る。
あとは入力ファイル「inp」を作って実行するだけ。
>>316 っつか、ちゃんとソースをそのまま使ってるのか?ヘッダはちゃんとincludeしてるのかと
このスレの問題解いて勉強してるのですが、
>>314 さんのコードを自分の環境で実行すると
>2教科分の点数を入力してください
>50
>60
>30
>加算する点数を入力してください。
>40
>30点加点したので
>科目1は80点になりました。
みたいな出力になるのですが、これってなんででしょうか?
自分で考えてもコードは合ってる気がするのです><;
321 :
320 :2007/06/09(土) 14:56:18
科目1は〜の後の行に >科目2は90点になりました。 っていう最後の一行コピペし忘れましたorz
322 :
デフォルトの名無しさん :2007/06/09(土) 14:58:22
316の書き込みをしたものです。みなさんありがとうございます。 今度は入力ファイルについての質問なんですが、入力ファイルってどこに作成すればいいんですか。
>>322 カレントのフォルダ。
カレントのフォルダは実行の仕方によって違う。
VS上から実行してるなら、ソースファイルがあるフォルダ。
コマンドプロンプト上からなら、実行時のフォルダ。
>>323 なるほど、scanfって\n付けちゃダメなんですね。
リロードしてなかったので
>>315 を見てませんでした。
あ、決してケチ付けたかったわけじゃなくて、
純粋にどこが悪いか知りたかっただけなので気を悪くさせてしまったらすいません><
>>313です!! >314さん、そしてそれを解いて勉強してる320さん ありがとうございました!!
>>326 いや、カレントで合ってるハズ。
実行ファイルがC:\program\にあって、
コマンドプロンプト上でC:\に居る時に、
パス指定で実行した場合、
ファイル「inp」はC:\に無きゃダメ。
VS上からF5なりCtrl+F5なりで実行した場合、
カレントのフォルダはプロジェクトファイルがある場所。
>>329 あっているあっていないではなく、カレントディレクトリの意味わかってますか?
実行するときにカレントディレクトリを実行プログラムの場所に移動させているって話だろ?
低学歴だってバレるから、これ以上知ったかな口はきかない方が良いよw
331 :
デフォルトの名無しさん :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.結果画像が変わらない。
以下の制約を守っていただければ、どのように変更されても構いません。
>>330 プログラム実行してもカレントは変わらないって・・・。
プログラム内でsystem("cd");を実行してみて試してみると良い。
Linux上ならsystem("pwd");かな。
>>333 ヒント:カレントディレクトリからでも、他の場所にある実行プログラムのあるパス名を指定して
プログラムを実行できる。使用するファイルも指定はパス名を通して指定できる。
ゆえに、現在作業中のディレクトリに置かなくてもなんら問題なし。
335 :
デフォルトの名無しさん :2007/06/09(土) 15:36:41
322の書き込みをしたものです。 Debug Assertion Failed! Program;... File:fscanf.c ってでてしまうんですが・・・
すいません。
>>242 お願いできませんでしょうか。
>>334 >使用するファイルも指定はパス名を通して指定できる。
どんな環境だ?
少なくともVS2005、XPのコマンドプロンプト、bashとcshはそんなことしない。
もしかしてソースコード見てないんじゃないか?
> fp_in = fopen("inp", "r");
こうだぞ?
>>335 どうやって実行してる?
338 :
デフォルトの名無しさん :2007/06/09(土) 16:04:40
>>337 自分の理解力の無い頭を露呈しなくて良いから、黙ってろガキw
カレントディレクトリの意味が書かれている参照ページを出しても理解できないとは、馬鹿じゃね?
現在作業中のディレクトリが必ずしも実行プログラムのある場所とは限らないだろw
とりあえず、実行プログラムと同じ場所においておけばなんら問題なし。
同じ場所でなくてもパス名の指定は可能なんだよ。お前、パスを通すとか理解してないだろ?w
コマンドプロンプトを使ってコンパイル、実行とかしたことないだろ?
UNIXも使ったことないだろ?w
何か荒れてるようなので自粛しますね
カレントディレクトリなんて、時と場合によって違うことがあるんだし その都度カレントディレクトリに実行プログラムと必要なファイルを移動なりコピーして カレントディレクトリに置くか?俺はいちいちそんなことやらんね。カレントディレクトリにではなく ファイルのある場所とか実行プログラムのある場所にカレントディレクトリを移動させるならわかるけど。
そんなポリシーの問題はどうでもいい
おまいらC/C++の問題に熱くなれよw
>>338 >>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に置いて置かないと見つからないんだよ。
俺、何か間違えたこと言ってるのか・・・?
345 :
デフォルトの名無しさん :2007/06/09(土) 16:53:01
[1] 授業単元:c言語 [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; }
いろんな入力に対応しようとすると結構面倒じゃね? 簡単に対応するなら、入力を文字列として受け取ってatoiとかで変換とかかな?
347 :
345 :2007/06/09(土) 17:12:55
>>346 >いろんな入力に対応しようとすると結構面倒じゃね?
そうなんですか・・・
今の段階では自分には無理そうなのであきらめます
他に改善すべき点があればアドバイスお願いします
>>347 valueを初期化していないままwhileの条件判定を行っている。
iが0〜10のループなのでforのほうがいいと個人的に思う。
>アルファベット、記号を入力するとおかしい動作をするので改善 do{ rewind(stdin); if(!scanf("%d", &value[i])) printf("数値でおk\n"); }while(-1);
つーかこの問題別に配列いらないよな
初心者はとりあえずscanf()を馬鹿の一つ覚えでfgets() + sscanf()に 置き換えれば大分被害は減る。 それと、面倒でもこの手の入力関数の戻り値は見とけ。
学校とか入門書でscanfを使いすぎなんだよな。 どーでもいいもん作るなら楽でいいが、少しまともにしようと思うだけで使いもんにならんよな。
細かい説明をしている時間がないんだろ。限られた時間内で必要なところだけ教えるんだし。 データを取り込むインターフェースのほとんどは数字だけでなく 英数字の入力が可能なため、数値を扱う変数には文字が入らないように 一度文字列として入力データを受け継いで、文字列の中から適切に数字を取り込む 仕様にしようとか、初心者に説明してもちんぷんかんぷんかも?
文字が入らないようにって言ったらおかしいか。文字データを%dや%lfといった 書式指定で取り込まないように、かな。まぁ、説明して理解させるのも面倒だろうし 数値だけ入力して取り込むことを条件にして、授業を進めると。俺もそうだった。 まぁ、俺が授業を受けたのは98年だからずいぶん前になるが。今じゃ普通に int main(void)とか(int argc, char *argv[]) とかANSI、ISO準拠も考慮しているのかな?
>>355 scanf()の仕様を初心者に正しく理解させることのほうが
ずっと難しいと思う
>>357 いや、ライブラリについて細かくではなく、データを取り込む手段に関して。
>>331 /* 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);
}
カレントディレクトリさんが知ったかな浅はかな知識で話を進めるから退避。
362 :
252 :2007/06/09(土) 19:04:50
すいません誰か252解いてくれませんか
363 :
デフォルトの名無しさん :2007/06/09(土) 19:36:54
[1] 授業単元:c言語
[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
>>363 問題点
1.いきなり -1 を入力すると…
2.100 より大きな数 又は -1より小さな数を入力すると…
まずはデバッグしてみては?
>>362 しぃぷらぷらはめんどくさくてイヤなのですよ。
[1] 授業単元: アルゴリズム論 [2] 問題文(含コード&リンク): マージソートによるソーティングに対する非再帰的なプログラムを作りなさい。 ただし、データ数を2^kとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 金曜日までです。 [5] その他の制限: 特にないです。 よろしくお願いします。
>>366 # 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);
}
368 :
367 :2007/06/09(土) 20:41:17
ごめん、 int *orig_out = out; は消し忘れ。
>>362 getterとsetterって何するもんなの?
わろた
[1] 授業単元: [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は駄目だそうです
>>370 学生の学籍番号を保持するメンバ変数と、その変数のsetterとgetter
Teacharクラスの役職を保持するメンバ変数と、その変数のsetterとgetter
とテキストにはあります
これで分かりますでしょうか?
学籍番号の桁数とかは適当に設定?
>>373 「距離の2乗」 を配列に入れるのに、
得点から引くのは 「距離」 なの?
>>373 #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;
}
まさかうちの大学の課題が出てるとはおもわなんだ
>>373 >>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;
}
>>374 それでは誰もわからないとおもうよ。
setterとgetterが何のための関数なのかよくわからんし
showも別につけるみたいだし
...わかれよ >保持するメンバ変数と、その変数のsetterとgetter これ以上何が知りたいんだw
ごめん
setter/getterってアクセサの事だろ
388 :
奏 :2007/06/10(日) 00:23:42
[1] 授業単元:c++言語 [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の内容を返します。
[1] 授業単元:C/C++ [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"; } ご多忙のところ申し訳ありませんがよろしくお願いします。
[1] 授業単元: C言語 [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または配列を使ってやる
>387 > 継承した教員クラスで、名前を表示する関数では、「○○教授」、 > 「○○助教授」などのように役職名を添えて表示する関数として、上書き定義せよ。 については? ...って >362 よ、"教授","助教授"ってどうやって判別すんだw
393 :
デフォルトの名無しさん :2007/06/10(日) 01:26:37
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下のコマンドを実行可能な名簿管理システムを作成せよ。 1 メンバの追加 2 メンバの削除 3 メンバリストを名前順(アルファベット昇順)で表示 4 メンバリストのファイル出力 5 引数として"-f ファイルパス"を指定することによるメンバ初期データの読込 メンバ情報としては、最低限、名前と学生番号を持つこと。 [3] 環境 [3.1] OS: TurboLinux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 6月12日18:00まで [5] その他の制限: なし
395 :
392 :2007/06/10(日) 01:34:52
>387 は > class Professor : public Teacher {} > class AssistantProfessor : public Teacher {} ってことだったのね... Teacher で全部やるのかとおもてたのでorz
>>395 問題的にはTeacherでオーバーライドして、
適当に決めうちで「教授」とか出しておけば良いとオモタ。
>388 ろだ 4201.txt ReadPointの仕様がよくわからんので未使用
>393 途中まで書いたけどやぱーりソートがめんどいからパス
>>398 strcmpとかでバブルソートでいいんでね?
[1] 授業単元: 計算機概論 [2] 問題文(含コード&リンク): C言語では、以下のようなコードが許される int a[10]; 0[a]=1; これが、何故なのか、 糖衣構文に留意して答えなさい。 寝てたので分かりません>< 意味不明です。誰か教えてください [3] 環境 [3.1] OS: [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 6月11日10:00まで [5] その他の制限: なし
>>398 そうなんだけど書くのがめんどい
梅酒がまずくなる
BMはオレライブラリにあるけど、棚までCDとりにいくのがめんどい
ググッたけどわかりやすく説明してるページみつかんね・・・ []は単なる演算子。a[0]も0[a]も同じ、程度しかいえないやOTL
添字演算子が整数(オフセット値)とT型へのポインタをオペランドに取り T型のオブジェクトを生成する演算子で、かつオペランドが可換 これだけの事だろ。そういう仕様なんだとしか言い様がない つーかこんな課題に何の意味があるんだろうな そんなトリッキーなコード、IOCCCぐらいでしかお目に掛からないだろ
まぁ、仕様だからそうだろってことを課題にして、うちは他とはちょっと違った異質な授業をしてますよって アピってんだろ。そういう勘違いって、痛々しいけどな・・・
>>400 int array[10]; //int型配列 array の宣言
array[5] = 12; //嘘くせえ書き方
//↑の書き方は単なる↓の糖衣構文(シンタックスシュガー)
*(array+5) = 12; //これが本来の書き方
//足し算なので足す順番をひっくり返してもOK
*(5+array) = 12;
//読みづらければ糖衣構文を使ってもOK
5[array] = 12;
407 :
388 :2007/06/10(日) 04:21:09
すみません、どなたか388の問題を解いてくれませんか?
>397
>>407 かなりてきとう
#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;
}
>>407 #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;
}
412 :
252 :2007/06/10(日) 10:09:47
>>387 ありがとうございます、とても助かりました
for(a=1;a<=100;a++); { printf("%d",a); } で1から100までの数字を表示してるんですが、これを20文字ごとに改行するにはどうすればいいでしょうか?
>>413 int 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;
}
0.7853981634
キーボードから数値を入力して、その入力した数値に20を加えた値まで表示するにはどのような プログラミングを組めばいいのですか
その入力した数値に20を加えた値"まで" の始点はどこですか?
>>417 #include <stdio.h>
int main()
{
int in, i;
scanf("%d", &in);
for (i=in ; i<=in+20 ; i++)
printf("%d\n", i);
return 0;
}
まあこういうスレだからしょうがないんだが、
>>421 のような ありっしたー ってのは伸びないよな
自分で調べて、考えて、ってことをやらない奴は根本的に素養がない
424 :
366 :2007/06/10(日) 12:30:33
>>367 助かりました。
月曜に学校に行って試してみようと思います。
本当にありがとうございました。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): (1) 0-255の範囲の乱数を20個生成して配列に格納し、これを大きい順に並べ替え、当初の配列の要素と並べ替え後の要素を比較して出力するプログラムを作成せよ。 2. 同様な並べ替え処理を(1)と別のアルゴリズムで実現せよ。 [3] 環境 [3.1] OS: MacOSX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 月曜までにお願いします。
>>425 #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;
}
[1] 授業単元: プログラミング演習 [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時
>>428 #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;
}
#include <algorithm> #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) << " "; }
432 :
430 :2007/06/10(日) 14:27:03
すいませんでした
>>427 ありがとうございます。
(2)のほうもできたらお願いします。
434 :
428 :2007/06/10(日) 15:25:15
>>429 素早い回答ありがとうございます.とても助かりました.
>428 よ >429 だと、出力がlate[]の添え字順にならない場合があるがよいのか? 例) 99(0) 1(0) 2(0) 3(0) 4(0)
添え字順にしろとか書いてないし 出力例で思いっきり順番ひっくり返ってるし、いいんじゃねぇの?
> 出力例で思いっきり順番ひっくり返ってるし 確かに〜♪
>>3 #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;
}
439 :
208 :2007/06/10(日) 17:47:19
誰かお願いしますwww もうすぐ締め切られる!!!
誘導されました。ふたたびお願いします。。。。 キーボードから入力された10進数を、2進数として出力するプログラムをつくりなさい。 2進数への変換は、商が0になるまで10進数を2で割りl、あまりを逆の順番で並べる方法を用いる。 ただし、入力は正の整数であって最大値は16838とする
>>441 #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;
}
>>441 #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;
}
func(unsigned int n){ int 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]); }
16838じゃなくて16383だと思うんだけどどうよ?
>>441 テンプレに沿ってって言ったのに
#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;
}
450 :
デフォルトの名無しさん :2007/06/10(日) 18:30:17
>>450 #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;
}
452 :
450 :2007/06/10(日) 18:38:38
>>451 こんなに早く・・・どうもありがとうございましたm(__)m
助かりました。
え?マジ?そうなの?
これは間違ってるだろう・・常識的に考えて ↑のほうに全く同じ回答あるし
自演失敗
>>456 ありがとうございました。エラー出たら自分でなんとかします
何度もスレ汚しすいませんでした。
[1] 授業単元: プログラミング実習 [2] 問題文(含コード&リンク): まずmallocを使ってバッファを確保しバッファへのポインタを返し、 またもう読み込むデータがないならNULL(EOFに到達したら)を返すfgetsのための関数を作る。 入力はいつもstdinからで100バイト程度の大きさとする。 main文では100行程度入力し、最後の行から最初の行に向かって出力させる。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 6/13 [5] その他の制限: 特になし。 よろしくお願いします。
>>460 題意が分かりにくいが、こんなもんでいいのかな
#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;
}
fgetsのための関数ってどういう意味だ
>>460 「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;
}
ここで質問された問題を解くのは自分の勉強にもなるな
465 :
デフォルトの名無しさん :2007/06/10(日) 20:10:00
[1] 授業単元: C言語 [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] 期限: 今日まででお願いします。
>>465 #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;
}
#include <stdio.h> int 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; }
ついでに+1しないと順番がおかしい
#include<stdio.h> int 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; }
はいれつが平仮名になって無いぞ。
はずかしす
はいれつのなまえはa[]らしいぞ
ええい、課題を出せ、課題を!!
475 :
デフォルトの名無しさん :2007/06/10(日) 20:40:56
>>470 ,467,466
ありがとうございます。
これから課題立て続けに書きますけどよろしいでしょうか?
さっきみたいな基礎的な課題です。
476 :
359 :2007/06/10(日) 20:41:09
どんどん来い
>>476 俺にはレベルたけぇYO!
479 :
465 :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
480 :
465 :2007/06/10(日) 20:52:18
要素数が4でint型である配列の全要素を逆順に並べ替えるプログラム。 <実行結果> a[0]=58 a[1]=32 a[2]=17 a[3]=46 a[0]=46 a[1]=17 a[2]=32 a[3]=58
482 :
465 :2007/06/10(日) 20:55:46
下記値を配列x[5]に代入して、各々の値と合計を表示するプログラム。 x[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
[1] 授業単元: C++ [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言語はとりあえず終っています、標準ライブラリは習っていません よろしくお願いします
484 :
465 :2007/06/10(日) 21:00:04
月を整数値として読み込み、その季節を表示するプログラム。 ※switch文を使用すること。 変数はint mon を使用すること。 <実行結果1> 今、何月ですか?:6 夏だよぉプールいきてぇ。 <実行結果2> 今、何月ですか?:2 冬じゃぼけカイロくれぇ。 <実行結果3> 今、何月ですか?:13 ・・・あほ?
なめとるな
#include <stdio.h> int 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; }
[1] 授業単元:C言語 [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"のみで、他の標準ライブラリの関数を使う場合は自作すること。
季節の定義は 春: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("・・・あほ? "); }
今後の気候変動を考慮すべきだ
[1] 授業単元: [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"のみで、他の標準ライブラリの関数を使う場合は自作すること。 この二つをお願いします。
491 :
460 :2007/06/10(日) 21:13:00
#include <stdio.h> int 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; }
#include <stdio.h> int 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; }
あまりにもつまらんからやめた
あまりにもつまらんからはじめた
>>490 とりあえずもう少し他人が読みやすい文章
ということについて考えたほうがいい
志村ー縦々ー!!
>487 #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; }
>>490 それ前スレから数えて3度目
#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;
}
>490 は >487 の続きなんだな
すみません、389をお願いします
>>491 #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;
}
>>496 すみませんでした・・。問題そのままコピペしたもので・・。
このような表示のものを出したいのです
[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
508 :
499 :2007/06/10(日) 21:46:45
>>490 ちと修正
#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;
}
>>507 ああ、getlineの引数がvoidじゃないんだな。
なげーやつ、インデントも気にしているならうpロダ使えよ
結構参考になるコードが載ってることがあるので 1レスに収まるのならオレは jane の過去ログに残っているほうがありがたい
どっちみちそんなに長いのここに貼れないしな
短くてもインデントは気にして
問題に応じてついたレスをまとめたら?
>>389 #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;
}
AA略
キーボードから10進数を入力し、その数値の16進数と8進数を表示しー900を入力すると処理を終了する プログラムはどのようなプログラムを組めばよろしいのでしょうか
またお前か
>>519 キーボードから10進数を入力し、その数値の16進数と8進数を表示しー900を入力すると処理を終了するプログラムを組めばいいと思います。
テンプレ読んでくださいね。
言語と環境くらいは書いてほしいです。
−900で終了って変わってますな。
まずscanfを使って10進数を受け取り、それを適当な変数に格納する。 そのとき、ifを用いて-900なら終了、そうでないならプログラムを継続するようにし、 継続している場合は16進数と8進数を、printfを用いて表示してやればいい。
[1] 授業単元: プログラミング実習
[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] その他の制限: 特になし。
よろしくおねがいします。
お助けください。 プログラミング始めたばかりでよくわからないんです・・・。 どうかお願いします。 最大値を最小値を求める関数を作る問題なのですが、 #include <stdio.h> // iとjのうち,大きいほうの数字を返す double myMax(double i, double j){ // ここを作成する } // iとjのうち,小さいほうの数字を返す double myMin(double i, double j){ // ここを作成する } void main(){ // myMax(), myMin()が正しく動くか調べる処理を書く } の形で作ってもらえませんか。出来れば理解したいので簡単なものにしてほしいです。 いきなり、ずうずうしいと思いますがどうかお願いします。
でもテンプレは読めよ
乞食なんだから、教えてくれてもええのに^ー^b
529 :
526 :2007/06/11(月) 00:04:43
>>526 です。すみませんでした。
[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] その他の制限:とくになし
#include <stdio.h> double 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); }
532 :
526 :2007/06/11(月) 00:16:05
>>530 ありがとうございます。これから理解できるよう勉強します。
ありがとうございました。失礼します。
>>531 テンプレ読んで来いって言われたのがわかんないのか?
>>522 #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;
}
テンプレ守れない奴に回答してる馬鹿は何なの
回答したいヤツが回答して何が悪いのかわからん。
> 気に入らない質問やその他や発言はスルーの方向で。 > 回答者の便宜のため、質問の際は以下を行うことを推奨します。 「推奨」だあくまで。 あとは勝手にやれ。
>>542 はぁ?テンプレ無視した課題でも俺はいちいちガミガミ文句言わずにレスするけど?w
なんかさぁ、世の中を勘違いしている基地外っているよな。ルール違反しているやつを
見つけて、気持ち悪くネチネチおめー悪いんだよ!みたいな司法の番人ぶっているやつ。
終いには、裁く権利もないのに、自分勝手なルールで裁きを始める奴w
そいつ、完全に周りから干されているよな・・・勘違い野郎だってw
538 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:34:29 テンプレ守れない奴に回答してる馬鹿は何なの ↑さらにこれだろ、レスした奴を馬鹿にする奴。いちいちうぜーって。お前がレスすんなやw
>>546 たぶん君、このスレ向いてないと思うよ。
質問者は丸投げするだけ
答えたい奴は勝手に答えるだけ
そういうスレだから。
548 :
デフォルトの名無しさん :2007/06/11(月) 01:13:00
> 気に入らない質問やその他や発言はスルーの方向で。
>>547 たぶん君、このスレ向いてないと思うよ。
質問者は丸投げするだけ
答えたい奴は勝手に答えるだけ
そういうスレだから。
>>551 ?
質問者は自助努力をせずに丸投げがデフォのスレなんだから、
それを乞食と呼び不快に感じるような精神性の持ち主には向いてないよ、と
言ったのだが、分からなかったのかい?
質問者は丸投げとは言えテンプレを守ることが「推奨」されているが、
あくまで推奨だ。
テンプレを守らない質問者の態度が気に食わないのなら、えんえん粘着して
駄レスを積み重ねるような真似をせずに、スルーしたらどうかね。
答えたい奴が答えるかもしれないし、答えないかもしれない。
それは答えるやつの勝手だな。
>>552 答える答えないは回答者の勝手なんだよな?
で、テンプレを使わなかった人が回答が突かずオロオロしてるところに
「テンプレ使え」とアドバイスすることがそこまでキレる理由なのか?
回答するしないも、テンプレ使う使わないも勝手だろ?
アドバイスするしないも勝手じゃね?ってかもうスルーしようよ。
>>552 > そこまでキレる理由なのか?
俺は別にキレてないよ。
>>541 あたりのレスは俺じゃないし。
> 「テンプレ使え」とアドバイス
いや、それは構わんと思うよ。
>>536 , 538は「アドバイス」なんてもんじゃないけどな。
555 :
デフォルトの名無しさん :2007/06/11(月) 01:28:39
>>553 アドバイス?レスした他の人も含めてお前は 馬鹿 にしてんじゃんw
自分の発言や行動に責任を持てや、ガキw
なにこれ?
538 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:34:29
テンプレ守れない奴に回答してる馬鹿は何なの
536 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 00:22:44
>>534 死ね
556 :
デフォルトの名無しさん :2007/06/11(月) 01:30:52
自分が気に食わないものを見ては、怒り狂って自分勝手な都合で他者を攻撃してくる奴っているよなw 良い解決策を教えてやるよ。嫌ならこんなスレに来るな、分かりやすいだろ? 別にお前みたいなクズをこのスレが雇っているわけでもないんだから、嫌ならいつでも辞めて良いよ? どうせお前みたいな奴は、現実社会でも自分が気に入らないことを理由に会社に不満を言って お前辞めろ?って解雇されてんだろw
やべぇテンプレ守らん質問に自演レスすると釣れそう
ま た 自 演 か
553 名前:デフォルトの名無しさん 投稿日:2007/06/11(月) 01:26:04
>>552 答える答えないは回答者の勝手なんだよな?
で、テンプレを使わなかった人が回答が突かずオロオロしてるところに
「テンプレ使え」とアドバイスすることがそこまでキレる理由なのか?
回答するしないも、テンプレ使う使わないも勝手だろ?
アドバイスするしないも勝手じゃね?ってかもうスルーしようよ。
> 答える答えないは回答者の勝手なんだよな?
そうですが何か?w
> 回答するしないも、テンプレ使う使わないも勝手だろ?
勝手って何だよ、勝手ってw いかに自分勝手な奴か分かりやすい奴だなぁw
他人がレスするのも勝手だがお前に馬鹿にされる筋合いはねーよ
嫌ならお前が回答しなきゃ良いだけ、分かったか?
> アドバイスするしないも勝手じゃね?
他者を馬鹿にするのはアドバイスでもなんでもねーよw
一万と二千年前から繰り返されてきたこと。
[1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク):2つの復素数を入力し、それらの積を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年6月11日23:00mmまで [5] その他の制限:復素数は構造体により実現すること どうか宜しくお願いいたします。
ごちゃごちゃうるせーよ、テンプレ通りに書いてない奴が気に入らないならスルーすりゃ良いだろ
携帯からも宿題依頼する人いたんだ
質問する場所を探したのですが、どうもここ以外ないと思いまして、質問させてください 10進数を2進数に変換する問題なのですが、 S(符号)は1ビットで仮数の符号を表す E(指数部)は4ビットで指数を表し負数は2の補数で表現 M(仮数部)は11ビットで仮数の絶対値を表す 基数は2とする 仮数の0,2進数の少数以下第一位が1になるように、正規化された形で表す 小数点はEとMの位置にする 0の表現はー0と+0の二通りがあり特別に指数部と仮数部をすべて0にする 問1.10進数の5.25を2進数で表現しなさい という問題なのですが、答えは0001110101000000であっているのでしょうか
この流れでテンプレ読まずに書き込むってのは狙っているとしか思えん
567 :
389 :2007/06/11(月) 03:15:38
#include <stdio.h> #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;} 今日が月曜だという理由だけで気が滅入る。
おのれ……ゆるさん!
572 :
デフォルトの名無しさん :2007/06/11(月) 09:28:02
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 何か面白いプログラムを作成せよ(笑いを誘うものは評価が高い!) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: 今日中(明日提出なので) [5] その他の制限: ifとPADの授業後の課題。しかし制限は特に指定されていません 僕には面白いものを作成する自信がありません。どうか力を貸して下さい。
575 :
572 :2007/06/11(月) 10:35:26
>>574 面白い占いありがとうございます^^
助かりました。
[1] 授業単元:数値計算 [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] その他の制限: 数値微分を使うらしいのですが、それ以外は分からない状況です。 これだけのヒントで分かる方いましたらよろしくお願いします。
577 :
デフォルトの名無しさん :2007/06/11(月) 11:29:00
[1] 授業単元: C言語 [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日まで よろしくお願いします。
578 :
574 :2007/06/11(月) 11:34:12
>>575 講義の内容から察すると、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;
}
[1] 授業単元:C++研究
[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] その他の制限:特になし
よろしくお願いします
[1] 授業単元:C++研究 [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] その他の制限:特になし よろしくお願いします
[1] 授業単元:C++研究
[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] その他の制限:特になし
よろしくお願いします
582 :
デフォルトの名無しさん :2007/06/11(月) 13:42:04
[2] 問題文:入力した文字列をaから順に並べるプログラム [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; }
583 :
デフォルトの名無しさん :2007/06/11(月) 13:55:02
a=1e-10; これってどういう意味ですか? 実行結果はどうなるの?
>>564 > 仮数の0,2進数の少数以下第一位が1になるように
ってことは、0.1…… × 2^e
の形に正規化するってことかな。
だとすれば、5.25は0.10101(2進) × 2^4だから、
0010010101000000
になると思うよ。
>>583 aに1×10^(-10)が代入される。
>だとすれば、5.25は0.10101(2進) × 2^4だから、 >0010010101000000 何このバカ。
588 :
デフォルトの名無しさん :2007/06/11(月) 15:24:45
589 :
584 :2007/06/11(月) 15:28:27
テラハズカシス
【質問テンプレ】 [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] その他の制限:ポインタ、リスト使用不可 初心者問題で気分悪くされたらもうしわけありません。宜しくお願いします。
593 :
デフォルトの名無しさん :2007/06/11(月) 20:58:52
[1] 授業単元:情報実験第一 [2] 問題文(含コード&リンク): オオカミとヤギを連れキャベツを持った農夫が川岸にいる。 川にはボートがあるが農夫の他には 動物一頭かキャベツ一個しか乗せられない。 農夫がいなければオオカミはヤギを襲うし、 ヤギはキャベツを食べてしまう。 すべてを無事に対岸に渡すにはどうしたらよいか? (出展:wikipedia) この問題を解くプログラムを作れ。 出力の形式は問わないが、他人が見て分かるような形にすること。 [3] 環境 [3.1] OS: Unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007/6/13まで [5] その他の制限:なし。 ぜひよろしければ、アルゴリズムを教えていただきたく思います。 コーディングなしでも、むしろそちらの方がありがたいです。
>>582 バグ取りの依頼かい?コメントの前に全角スペースが入ってるからエラーが出るんだよ。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 任意の関数(変数x)をキーボードから入力し、 xの値を変化させた場合の結果を表として出力するプログラムを作成せよ。 [3] 環境 [3.1] Windows [3.2] Microsoft Visual C++ [3.3] C++ [4] 期限: 2007年06月12日09:00まで [5] その他の制限: 特になし よろしくお願いします。 文字列で入力させた後の分解・解析のやり方が特に分かんないです…
[訂正] [3.2] Microsoft Visual C++ 2003
598 :
デフォルトの名無しさん :2007/06/11(月) 21:20:19
599 :
デフォルトの名無しさん :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] その他の制限:特になし
600 :
575 :2007/06/11(月) 21:38:15
>>578 たしかに、そちらの方が合ってますね。
二度もレス下さって本当にありがとうございます。
合ってねぇよ
[1] 授業単元:ユニット演習 [2] 問題文(含コード&リンク): 1.random(), srandom(seed) 関数を用いて2 数の足し算問題を出すプログラムを作成しなさい. ただし,問題は実行ごとに変化するようにすること 2.任意個の整数データをキーボードから入力して,総和,平均値,最大値,最小値,分散および標 準偏差を求めるプログラムを作成しなさい.ただし,プログラム中のどこかでポインタと配列を用 いて作成し,ポインタを使用した部分にはコメントをつけて処理内容を説明すること. [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限 来週の火曜辺りまで [5] その他の制限 なし よろしくお願いします
>>602 1だけ
#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;
}
>>602 2だけ
#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];
}
続く
完
av = (double)sum/i; for (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; }
[1] 授業単元:プログラミングU [2] 問題文(含コード&リンク):絶対値を求める関数および,2乗の数を求める関数を作成しなさい.main()で正しく動くかチェックすること. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003 [3.3] 言語:C++ [4] 期限:水曜16時まで [5] その他の制限:とくになし よろしくお願いします。
>>607 #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; }
手抜きでよければ
>>604 配列とコメント忘れてたな
int *data; /* 処理内容:データに使う */
int *temp; /* 処理内容:テンポラリに使う*/
char str[] = "ans\n";
:
printf(ans);
こんなもんで。
>>607 #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;
}
611 :
607 :2007/06/11(月) 23:35:16
>>608 ありがとうございます。
ですが、もう少し簡単に出来ませんか?4月から初めてまだあまり理解できないので・・・。
すみません。お願いします。
>>611 4月からはじめてそれならもうあきらめたほうがいいよ
せめてどこが理解できないのかを書くべき
うるせーカス
>>612 昨日もそうだが、おめーはいちいちごちゃごちゃうるせーんだよ
宿題に関係ないレスしてんじゃねー、てめぇ〜みたいなクズに
いちいち他人を心配している余裕があると思ってんのかよ?
お前の今後の人生を考えて生きていけや、格差社会の底辺めが
>>614 昨日は旅行行っててこのスレ書き込んでねーよ
>>615 貧乏人が見栄はって強がってんじゃねーよw
こんな丸投げスレで何上からものを言う説教を始めてんだよ?w
嫌なら答えなくて良いんだよw
>宿題に関係ないレスしてんじゃねー、 どっちもどっちだよ
>>617 >こんな丸投げスレで何上からものを言う説教を始めてんだよ?w
>>614 >お前の今後の人生を考えて生きていけや、格差社会の底辺めが
条件演算子のほうがふさわしいだろ
622 :
619 :2007/06/12(火) 00:05:06
>>611 int myabs(int n)
{
if(n < 0)
{
return -n;
}
else
{
return n;
}
}
これでどうだ
わかりません><
>>624 素?釣り?他人?
int myabs(int n)
{
int abs;/*絶対値を入れる変数*/
if(n < 0)
{
abs = -1 * n; /* nが0より小さいので-1をかけて正の数にする*/
}
else
{
abs = n;
}
return abs;/* nが0以上なのでそのままでOK*/
}
コメント位置間違えた・・・OTL
じゃもうこうだな。 int main(void) { /* 僕には難しくて分かりませんでした */ return 0; }
>>627 やっと分かりました。どうもありがとうございました。
>>599 #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;
}
>>598 #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;
}
宿題じゃないけど教えてください
【言語:コンパイラ】
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
突っ込みどころが多すぎるから↓君に任せた
だが断る。
>>633 #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;
}
>>633 ほいさっさ
#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;
}
>>590 #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;
}
ボーリングめんどいな
[1] 授業単元:IT入門 [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)))として計算せよ. (数値計算の精度が良くなる.各自実験してみよ.)
[1] 授業単元:複雑系演習 [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] その他の制限:とくになし よろしくお願いします。
[1] 授業単元:C++研究 [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] その他の制限:特になし よろしくお願いします
>> 580 前スレで同じような問題があったので、それを使わせてもらいプログラムの方完成できました。
>>579 >>581 の方続けて、よろしくお願いします。
[1] 授業単元:C++研究
[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] その他の制限:特になし
よろしくお願いします
>>644 問題文の意味がよくわからないけど、こんなもんかな?
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;
}
650 :
デフォルトの名無しさん :2007/06/12(火) 12:53:46
[1] 授業単元:プログラミング [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時ごろまで よろしくお願いします。
651 :
デフォルトの名無しさん :2007/06/12(火) 13:02:48
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 次々に入力される値を合計する処理である。 変数dtにデータを入力する処理を繰り返し行い、 入力終了後その合計sumと平均aveを出力する。 なお、入力データは正の整数とし、 入力するデータがなくなったら、 終わりの印として負の値を入力する。 平均の計算は、合計÷入力回数。 入力回数も変数を用意して数える。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: visual studio2005 [3.3] 言語: C [4] 期限: 明日まで [5] その他の制限: ヘッダーは#include<stdio.h>のみでお願いします
>642 図形を手で書いたのなんて何年ぶりだろ。 #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; }
3年ぶり
655 :
デフォルトの名無しさん :2007/06/12(火) 14:38:39
[1] 授業単元: C言語 [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) { /* ここを作成する */ }
657 :
1/2 :2007/06/12(火) 15:28:39
内容: [1] 授業単元: C言語 [2]Nの太さのLを表示するプログラム 出力結果は以下の様になります。 ./letter 1 * * * **** ./letter 2 ** ** ** ** ****** ******
>656 point_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)); }
659 :
2/2 :2007/06/12(火) 15:33:08
縦線は、幅ユニットのnと高さ+2ユニットのnです。 (1個のユニットは1「*」によって表されます) 水平な線は、高さユニットのnと幅+2ユニットの2nです。 (1個のユニットは1「*」によって表されます)
>657 #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; }
>651 #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; }
662 :
デフォルトの名無しさん :2007/06/12(火) 17:07:00
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク):キ−ボ−ドから整数デ−タを入力し、その2乗和を求めるプログラムを作成。 デ−タの終わりは、^Zとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年06月12日11:00まで [5] その他の制限: 配列まで習っています。 お願いいたします。
>>663 すいません。
期限: 2007年06月12日23:00まで
でした。
[1] 授業単元 C++の研修でございます。データの圧縮! [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)
669 :
デフォルトの名無しさん :2007/06/12(火) 20:45:33
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):銀行に預金し、元金が2倍になるまでの年数 を求めなさい。ただし、年利(%)と元金(円)は入力し、利息は複利で計算 するものとする。
>>663 #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;
}
672 :
デフォルトの名無しさん :2007/06/12(火) 21:17:27
[1]C言語・グラフィック [2]OpenGLをつかって 「クリックした全ての点を覚えておき,それらを一筆書きで結んだ折れ線を表示する. なおかつ,右クリックで不要な点を消去できる」 [3]WindowsXP、CigWin、C言語 [4]6月中 [5]リスト構造を使うこと お願いします
>>669 #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;
}
674 :
デフォルトの名無しさん :2007/06/12(火) 21:30:21
>>673 すいません、for文などの繰り返し文ではできないでしょうか?
676 :
デフォルトの名無しさん :2007/06/12(火) 21:40:44
[1] 授業単元: 情報工学実験 [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] その他の制限:特にありません。 プログラミングというかアルゴリズム的な問題ですが・・・。はじめからまったく手付かずでどうしたらいいか分かりません。 どうかよろしくお願いします。
677 :
デフォルトの名無しさん :2007/06/12(火) 21:45:42
[1]C言語 [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
678 :
366 :2007/06/12(火) 21:45:50
>>367 さんに回答を頂いたのですが、まず、
LIBCMT.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmain
CRTStartup で参照されました。
abcd.exe : fatal error LNK1120: 外部参照 1 が未解決です。
(abcdはファイル名です)
というエラーが表示されました。
また、今まで自分が見たプログラムは必ずmain関数があったのですが、
今回はmain関数がないですよね?
プログラム自体の性能は悪くても、動けば良いので、できれば、普通に
main関数と他の関数(他の関数を使わなくても大丈夫ならmain関数だけ)
で簡単に作って頂きたいと思うのですが…
せっかく使って下さったのに申し訳ないです。
main関数ぐらい作れよカス
>>677 どこかでエラーが出たらごめんね!
#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]);
}
>>677 #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;
}
思いっきり被っててワロタ
>>677 #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;
}
684 :
683 :2007/06/12(火) 22:03:36
はいやってしまったサーセンwwww\(^o^)/
686 :
675 :2007/06/12(火) 22:16:49
>>674 ごめんなんか痛いニュースで当て逃げ動画見てたら
イラッときて何故かこんな所で八つ当たりしてしまった。
自分意味分からなさすぎて正直反省しまくっている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;
}
687 :
デフォルトの名無しさん :2007/06/12(火) 22:17:24
[1] 授業単元: C言語 [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] その他の制限:配列の問題なので配列を使っておねがいします。
[1]C言語 [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]制限は特にありません
>>670 すいません!!
ソースを出力して^Zで終わろうとしたら強制的に終了されます。
どうにかならないでしょうか。
^Dも試しましたが同様に終了するだけでした。
690 :
231 :2007/06/12(火) 22:52:16
[1] 授業単元:計算機実習 [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); }
691 :
231 :2007/06/12(火) 22:52:56
2) void 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); }
>>689 すまない、自分の環境ではbccとgccで今やったら正常に終わったけど、
強制的に終了ってのはCtrl+Zを押すとエラー終了するってこと?
>>687 1,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;
}
>>692 コマンドプロンプトから実行じゃなくてアイコンダブルクリックで起動させて
画面が閉じちゃうんです...とかじゃない?
>693 それだと561って入力してもそれを一つの整数として受け取っちゃうからダメだろ
699 :
231 :2007/06/12(火) 23:20:37
>>695 なんでですか・・・・・orz
全然1しかでません
1しか出ないって、 file00.txtは作成できてるんだよね? んで、2のプログラムを走らせたら、出力されないってこと? もっとまともな症状を書いてくれ
&file00 = data00;
data00.txtがないとか 消したとか 違うフォルダにあるとか言うなよ
703 :
デフォルトの名無しさん :2007/06/12(火) 23:27:57
>698 特に指定は無かったので値の入力方法は 5,6,1(,で区切り) 5 6 1 (1個づつ入力) とりあえず入力した整数nの文値を入れて並び替えて、中央値が出れば問題ないと思います。
中央値は5じゃないのか? 1<5<6だろ? 6って最大値やん
>>703 例見ろよ。,で区切ってもいないし、改行もされてないだろうが。
707 :
231 :2007/06/12(火) 23:34:07
出ました! なぜか知りませんがもう1回このスレに貼ったのをやってみたらできました。 ご迷惑おかけしました。
まあ若干間違ってるんだがあえて言うまい 君なら自力で修正できよう
>>694 すいません ゴキブリと奮闘してました。
ctrl+zだと[1]+ Stoppedとでて結果が出力されません。
710 :
デフォルトの名無しさん :2007/06/12(火) 23:37:08
とりあえずn個の整数を入力するから入力方法はなんでもいいのかと、素人の浅い考えですいません。 配列の仕組みよくわからないのでお任せします。
>>709 すまんすまん、
>デ−タの終わりは、^Zとする。
この辺で脳内でCtrl+Zに変換されてた。
Windowsならこれで良いけどUNIXだとフォアグラウンド処理の停止だ。
でも、Ctrl+Dでも出来ない?
712 :
デフォルトの名無しさん :2007/06/12(火) 23:41:25
>>687 561並び替えて156で中央値6?
5じゃねーの?
あー何か俺のせいで揉めてるね orz 修正版 #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; }
>>709 よく見たらlinuxか
コマンドプロンプトじゃないね
715 :
デフォルトの名無しさん :2007/06/12(火) 23:48:28
>>711 出力されるとき何もかえしてこないですね。
>>716 原因がわかりました。
%dが文字化けして数値返してないだけでした。
ctrl+dでいけました
>>716 ちょっと待って。
何も返して来ないって何を返して欲しいの?
それで終了なんでしょ?
ってかこれをc言語で実装させるって・・・ プロログとかでやれば綺麗なのができるのに
723 :
デフォルトの名無しさん :2007/06/13(水) 00:01:18
>>630 ありがとうございます。おかげで助かりました。
724 :
デフォルトの名無しさん :2007/06/13(水) 00:01:41
なんか
>>676 のエロゲがあったな。
お父さんと娘だけだとお父さんが娘襲っちゃって
お母さんと息子だとお母さんが息子襲っちゃって
とかそんな内容の。
>>676 アルゴリズムの問題といわれてもこれくらいだと全パターン検索したいな。
そこまでパターン数爆発するかな?
727 :
720 :2007/06/13(水) 00:06:36
一応、コード書いた上での疑問だが…。 BからAへ船が戻るとき、二人帰るパターンを除外しているのがまずいのかな・・・。 それを入れると無限ループになりそうだ…再帰の打ち切り条件を考えないと・・・。
1度解をみつけてしまえば ステップ回数をはかって それをオーバーしたらアウトって削れるね
>>727 過去の履歴にあるパターンと同じになったら終了とかかな?
状態の数はたかだか32しかないから、 以前の状態を記憶していればいいと思う 岸A にいるオオカミの数 0-3 岸A にいる羊の数 0-3 船の位置 AorB 4*4*2=32
731 :
720 :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 やっぱり全部履歴をとるしかないか。
>>731 再帰つかってるんだよね?
ステップをスタックタイプの変数に積んでいくとかで出来ないかな?
push(step1)→push(step2)→ダメ→pop(step2)→push(step2')→・・・
今までと同じパターンがあるかはスタック内全検索で。
いや、実際コーディングしてないのに横槍スマソ。
できるかどうかもわかんねwスルーしてくれ。
733 :
720 :2007/06/13(水) 00:33:08
あ、そうか、このマトリクス上にVisitフラグ立てちまえばいいんだ。
>>733 確かに、そうだな。
単純なフラグじゃなくて船がどっちにいるかってのも一緒に要素として持たなきゃだめだな。
とりあえず解は出た 開始→狼羊→羊→狼狼→狼→羊羊→狼羊→羊羊→狼→狼狼→狼→狼狼 この順で移動すればおk あとはコーディングかぁ
解一つじゃなくね?
うん
738 :
720 :2007/06/13(水) 01:40:42
735のパターン以外にも序盤を狼狼→狼で始めるパターンでもいけるから最低2パターンはあるね
>>675 > カス
だからいちいちうるせーつってんだよボケが
気に入らないならスルーしろ、別にお前が答えなくてもここは困らんぞ
>>739 一応4パターン発見。
全部11ステップ。
2ステップ目、10ステップ目に2パターンあって入れ替え可能で2×2の4パターンっぽい。
ソース上げるからちょっとまって。いまぐちゃぐちゃw
742 :
720 :2007/06/13(水) 02:04:23
>>738 のメインをこうすると 2つ解出た
int main(){
init_matrix();
AtoB(1,1,1);
init_matrix();
AtoB(2,0,1);
init_matrix();
AtoB(0,2,1);
return 0;
}
どっかのタイミングでVisitフラグクリアする必要があるみたいだな・・・
744 :
720 :2007/06/13(水) 02:17:17
羊と狼逆になってね?
>>746 ほんとだorz
出力は少し見栄えよくと思って後から書いたからか・・・
しかもステップ数、−1とかいらねぇし・・・
748 :
デフォルトの名無しさん :2007/06/13(水) 09:23:01
授業単元:C言語 環境: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
>>748 #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;
}
751 :
デフォルトの名無しさん :2007/06/13(水) 10:15:32
授業単元:C言語 環境: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
>>751 要素数が意味不明だけどタイプミスと解釈した。
#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;
}
実行例通りに作るべきだと思うんだな。間違ってても間違った奴の自己責任 #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; }
[1]C言語 以下のプログラムのバグを取り除きなさい。 #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 よろしくおねがいします。
2問目です #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++;}}
実行結果 ./ 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
757 :
デフォルトの名無しさん :2007/06/13(水) 12:09:33
[1] 授業単元 プログラミング基礎 [2] 問題文 1〜40番目のフィボナッチ数列の下一桁の出現頻度を求めて以下の書式で表示するプログラムを作成せよ. 0 : ** 1 : ****** 2 : ** 3 : **** : <中略> : 9 : ***** ※ヒント:ある整数値の下一桁は,その数を10で割った余りにより得ることができます [3.1] Unix [3.2] gcc [3.3] c [4] 6月15日 20時50分 [5] 配列を使って行う。
>>754 #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;
}
759 :
デフォルトの名無しさん :2007/06/13(水) 12:22:34
授業単元:C言語 環境: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
760 :
デフォルトの名無しさん :2007/06/13(水) 12:38:55
授業単元:C言語 環境: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
>>759 #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;
}
>>757 #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;
}
[1]C言語 [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]制限は特にありません おねがいします
>>760 ソースはウスターソースをかければ良いですか?
たるたるソースでおながいします。
766 :
デフォルトの名無しさん :2007/06/13(水) 13:32:58
>>693 ちょっと遅いけど、ありがとうございます!
小さい順に並べるコードは自分でなんとかします。
>>760 ソースと聞いて、キムチかつが食べたくなったニダ
揚げたてキムチかつと炊き立てご飯を要求するニダ
ついでにこれを受け取るニダ、拒否する事は許さないニダ
#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;
}
768 :
デフォルトの名無しさん :2007/06/13(水) 13:45:50
ソースじゃなくてソートです
769 :
デフォルトの名無しさん :2007/06/13(水) 13:50:23
[1] 授業単元: プログラミング技術 [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] 期限:今日中にお願いします。
770 :
デフォルトの名無しさん :2007/06/13(水) 14:00:22
授業単元:C言語 環境: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
771 :
デフォルトの名無しさん :2007/06/13(水) 14:03:14
760>ソートの間違いです
もはやここまで来ると
>>770 が低脳どころか釣りにしか見えない。
そんなことよりヤヤちゃんってかわいいよね
774 :
デフォルトの名無しさん :2007/06/13(水) 14:19:42
[1]C言語 [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円
>>769 #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;
}
776 :
デフォルトの名無しさん :2007/06/13(水) 14:42:01
何方か770お願いします
[1] 授業単元: 基本プログラミング [2] 問題文:整数を読み込み、値が正ならばその数を逆順に表示するプログラムを作成せよ。 なお、読み込んだ値が負の0以下ならエラーを表示すること。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C++ [4] 期限: 2007/6/13 24:00まで [5] その他の制限: 特にありません 期限近づいて焦ってます・・・どなたかよろしくお願いします。
>>774 #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;
}
>>777 整数利用
#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;
}
[1] 授業単元: 基本プログラミング [2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ 実行例 ***** *** * [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C++ [4] 期限: 2007/6/13 24:00まで [5] その他の制限:for文を使うこと よろしくお願いします・・・
>>774 #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 );
}
続く
void 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] ); } 終わり
783 :
デフォルトの名無しさん :2007/06/13(水) 15:07:19
どなたか770お願いします
>>780 #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;
}
[1] 授業単元: 基本プログラミング [2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ 実行例 ***** *** * [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C++ [4] 期限: 2007/6/13 24:00まで [5] その他の制限:for文を使うこと よろしくお願いします・・・
何度もごめんなさい。 [1] 授業単元: 基本プログラミング [2] 問題文:一番上の数(奇数)を入力すると、*で逆三角形を表示するプログラムを作成せよ 実行例 ***** *** * ここでは空白が表示できないですが、逆ピラミッドになっています。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C++ [4] 期限: 2007/6/13 24:00まで [5] その他の制限:for文を使うこと よろしくお願いします・・・
>>785 ごめん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;
}
788 :
デフォルトの名無しさん :2007/06/13(水) 15:24:35
>>787 さん
ごめんなさい、ついでに言うと、逆ピラミッドは正三角形を逆にした感じで2列目以降空白を入れなければいけませんでした。
あと、言語はC++です
もしお時間あればよろしくお願いします
>>788 いい加減ちょっと吊ってきます…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;
}
***** *** * こういうことかな?
***** *** *
>>785 #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;
}
793 :
デフォルトの名無しさん :2007/06/13(水) 15:37:03
>>789 ごめんなさい、またしても修正しなければならないところがorz
行と行の間は空白なしで大丈夫ですが、列のはじめに空白を入れなければいけないんです。
1行目→空白なし
2行目→空白1個
3行目→空白2個
こんな感じで下にいくにつれてだんだん細くなればおkです。
FFのクリスタルみたいな感じでしょうか・・・
FFのクリスタルなんてしらねーよ
>>793 PCの前で赤面しながらコードを書く自分…。
#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;
}
797 :
デフォルトの名無しさん :2007/06/13(水) 16:08:17
>>775 すごく感謝、期限がぎりぎりだったから更に感謝です。
798 :
デフォルトの名無しさん :2007/06/13(水) 16:33:02
762さん ありがとうございます。助かりました。
[1] 授業単元: プログラミング2 [2] 問題文(含コード&リンク):以下のテキストファイルを読み込んで、空白以外の文字を表示する。 テキストファイル アメニモマケズ カゼニモマケズ ユキニモ ナツノ アツサニモマケヌ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual studio 2005 [3.3] 言語: C [4] 期限: 2007年6月14日まで [5] その他の制限: 特になし やってみたのですが、どうしても 空白が出力で出てしまいます。 すみませんがお願いします
>>799 そのテキストはシフトジスで空白というのは全角空白のことで良いか
ダメです><
804 :
デフォルトの名無しさん :2007/06/13(水) 16:59:46
[1] C [2] ファイルから読み込んだテキストをchar配列として保持し ユーザーにコマンドプロンプト上で入力させた数字(一桁のみ)のバイト数だけ行ごとに表示せよ 行の表示の前後に'|'を表示し、行の上下列には表示バイト数の'-'を表示させ、見やすくまとめること (他は出来たのですが、わからないこと-問題文ではないです) 例えば"あいうえお"の文字列を5バイト分表示したい場合などの時、あい まではいいのですが 日本語の半分の値+'|'の値がまざった文字が最後に一文字表示されてしまいます 最初は、表示桁数が奇数の場合は表示する最後の一文字が半角かどうかを判定していたのですが そのような処理では半角が混ざった時など("aあい"を4バイト表示など)には対応できませんでした [3] 環境 [3.1] XP [3.2] visual studio 2005 [3.3] C [4] 期限: 6/15 10:00 [5] 特にないと思います 半角・全角混ざったchar配列の場合の時に、上記問題を解決できる方法はありませんでしょうか 説明がややこしくなってしまった上、前質問があるようですが、よろしくお願いします
大昔にそういう処理をやってた気が・・・ 漢字の1バイト目は取っておいて2バイト目と同時に出し、 最後1バイト目だけだったときはかわりにスペースを出せばいいかな。
>>799 これ、VS2005でなければwchar_t使うのが楽だと思うが
VS2005だとVSのバグでうまくいかないっぽいな
いいえ、どうみてもお前の力量不足です。 本当にありがとうございました。
#include <stdio.h> #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では動作するけど。
>807 SP1でも解決されてないよな やる気ないのかMS
結論はJavaでコーディングする方向で
812 :
デフォルトの名無しさん :2007/06/13(水) 20:36:40
[1] 授業単元:アルゴリズム [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言語でどう表現したらよいかわかりません。 非常に申し訳ありませんが宜しくお願いします
814 :
デフォルトの名無しさん :2007/06/13(水) 21:15:07
[1] 授業単元: プログラミング [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] 期限: 今日中にお願いします!!
何これ、意味が分からない…。
iは飾りかw
>>812 今日も面白そうな問題があるな。考えてみよ。
>>814 あぁ、%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]の値が出力される。
こんな感じなのかな?
ていうか自分もプログラミング習い始めだから若干不安。
時間ギリっぽいから書いたけどちゃんと詳しい人からレスがあったらそちらを参考にしてほしい…。
>>814 //ていぎ されていない a[0][3], a[0][4], a[0][5] を さんしょう している。
//なにが おきるか しょりけい しだいの おたのしみ。
とかってコメントを追加しろってことか?
>>814 jが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]にアクセス
してしまっているわけだ。
822 :
デフォルトの名無しさん :2007/06/13(水) 21:47:08
配列の添え字は宣言時の数を超えてもコンパイル時にはエラー出ないからね。 このプログラムの実行結果の「22cca0」とかはメモリ上の格納場所、対応アドレスを示してるのか? で入れる配列a[〜][〜]の格納値は〜ですって表示になってんの? どういう仕組みなのかよくわからない。
>>822 > このプログラムの実行結果の「22cca0」とかはメモリ上の格納場所、対応アドレスを
> 示してるのか?
そうなんだが、Cの規格からいうとこれも良くない。%xではなく%pを使うべきだな。
824 :
デフォルトの名無しさん :2007/06/13(水) 21:51:51
みなさん、ありがとうございます。 十分参考になった上仕組みもわかりました。 そうですかC言語では添え字の範囲をチェックすることはなく、本当は違反だけどコンパイラが通ってしまうから アクセス出来ないハズの場所を参照しているとこういうわけですね。
違うよ
826 :
818 :2007/06/13(水) 21:59:44
>>821 横からだけどC言語って添え字の範囲をチェックする機能無いんですね。
>>814 のコンパイルが通った時ひどくビックリしてしまった。
こういうのがアリな場合もあるんだ…。
>>823 %xが非推奨で%pが推奨されるのって何か理由があるですか?
>>809 ありがとうございます。2003で試してみてから、2005で試してみます。
>>827 %xはunsigned intな引数を仮定している。%pはポインタ用。
printf()族のような可変長引数関数は、引数のサイズが分からないので、
ユーザが正しいサイズの引数を渡してくれることを信じて動作するし、
そうしなかった場合の挙動は未定義だ。
早い話が、sizeof(void*) != sizeof(unsigned int)な処理系では、
おかしなことになる。
>>829 なるほど、参考になったです。
ありがとう><
831 :
デフォルトの名無しさん :2007/06/13(水) 22:28:16
[1]情報技術実習(プログラミング) [2]条件分岐を使って2つの数字の四則計算が可能なプログラムを記述せよ [3] [3.1]windowsXP [3.2]bcc32 [3.3]C [4]明日朝提出 [5]この前if,else ifを習いました 命令文はscanfとprintfまでしか習っていません 数値はfloat型に指定されています よろしくお願いします
832 :
デフォルトの名無しさん :2007/06/13(水) 22:32:12
っつか、数値を入力してから演算する分岐にしたら?あと、0での除算はエラーだぞ
834 :
◆lIN/ESgxWw :2007/06/13(水) 22:40:23
アップローダーのNo.4237に問題文をアップさせてもらったので、 よろしくお願いします。
835 :
デフォルトの名無しさん :2007/06/13(水) 22:43:33
[1] 授業単元: C言語 [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 よろしくお願いします。
>>831 #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;
}
>>831 #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;
}
>>812 長いし、工夫も無いけど。
#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;
}
>>839 の続き
hist1[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;
}
↑よろしくお願いします^^
50ってどこやねん
>>841 最後の方は
if (min>20) { printf("not found\n"); return 1; }
の間違い。
炉だのC/C++の宿題を片付けます 89代目の50と言う意味だと思う。
>>844 スレッド全体表示をクリックしていただければ、番号表示されるはずです^^
>>846 C/C++の宿題を片付けます 89代目の50って意味ッス
なんかわかりずらくてスミマセン
850 :
デフォルトの名無しさん :2007/06/13(水) 23:16:41
[1]C言語 [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日間です
>>836 #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;
}
あ、被った。しかもD<0を忘れた…。 しかし書いた後でだけどsqrtは大丈夫なのかな…?
>850 #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; }
855 :
デフォルトの名無しさん :2007/06/13(水) 23:38:27
856 :
デフォルトの名無しさん :2007/06/13(水) 23:38:54
>>832 >>837 遅くなりましたがありがとうございました
>>837 ちょっと習った範囲を出ています…
return -1ってのは正常終了しなかった時に使うのですか?
main()から-1でreturnするのは推奨できん。 エラーを示したい時は1〜127の範囲の小さい正の整数を使うか、 EXIT_FAILUREを使うとよい。
858 :
デフォルトの名無しさん :2007/06/13(水) 23:44:07
>>857 ちんぷんかんぷんです
return xでxが0以外の数字なら、それは正常終了できなかったことをしめす、でFA?
>>857 へぇ、今まで自分もエラーは一括して-1返してた。
ていうかそもそもmainの正常終了異常終了って何かが拾って処理してるんですか?
>843 bR、右下だとは思うんだが、右上だったり左下だったり、もうメチャクチャだな。
863 :
831 :2007/06/13(水) 23:54:34
結局のところ、
>>832 のプログラムに修正を加えれば完成しますね
else 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);
}
これで正常に作動するはず
>>860 $statusとかERRORLEVELとか。Cからsystemで呼んだ場合はそのプログラムとか。
>>858 まーEXIT_FAILURE/EXIT_SUCCESS以外は処理系依存の話になっちゃうんだが、
Cの故郷のUnixでは、0がプロセスの正常終了を意味し、1〜127が
異常終了を示すような慣習になってて、プロセスを起動するシェルも、
それに沿った仕様になってる。んで、MS-DOSやWindowsなんかも一応それを
真似ている。127とかいう制限は無いけれどもな。
Unixでそうなるのは、シグナルで殺された場合のシグナル値とのビット和を
一緒に扱ったりしているからだ。
>>860 その辺は処理系依存だけど、一般には親プロセスで、普通はシェルだな。
Windowsだと、コマンドプロンプトから起動したプロセスの終了コードは
%errorlevel%という変数に入ってて、バッチや何かで使われることが多い。
867 :
860 :2007/06/14(木) 00:03:26
>>861 ,864-865
ありがとうございます。
今までmainの返却値って気にしてなくて、
プログラミングの本で関数なんかの失敗時に-1返すのが多いから
何となくmainも正常以外は-1で良いかくらいのノリ(?)でした><
>843 typedef 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; } }
>>849 >>852 回答ありがとうございました。
>>853 sqrtは習ってないので分かりませんorz
できれば使わない解答も書いていただければ非常にありがたいのですが…。
>>862 ええ。もう、メチャクチャです・・・OTL
>>863 のSystem.out.printlnって何?
ググったらJava関連のばっかり出てきたけどC言語でこういうのあるの?
自分もそれほどCに詳しくはないけど初めて見た。
っていうか
>>831 の書き込みからすごく初歩な人かとオモテタ。
>>865 >%errorlevel%という変数に入ってて、バッチや何かで使われることが多い。
これははじめて知った
ROMってて良かったぁ
873 :
デフォルトの名無しさん :2007/06/14(木) 00:14:04
>>871 ごめんなさい…
System.out.printlnはjavaで使用する命令です…混同してしまいました
>>866 突っ込んでください
874 :
デフォルトの名無しさん :2007/06/14(木) 00:17:02
if(b==0) { printf("0は不正な数値です。1以上の数値を入力してください。プログラムを終了します。"); return 1; } } でいいぜ
いつの間にか四則演算以外のがくっついててワラタw しかしswitch文使いたいね。
> printf("入力された数値は不正です。1〜4の範囲で入力してください。プログラムを終了します。"); おいおい……
879 :
デフォルトの名無しさん :2007/06/14(木) 00:24:52
>>875 分かりました、修正しておきます
>>876 switchはまだ習っていないのです…
yes or no判断で無いならswitchのが断然楽ですね
>>873 if(b==0) ってところも笑うところだな
if(!b)だろ普通
習い始めなら分からんでもないがな
>>881 いいえ、そこは0と比較すべきところであって、無理に論理否定を使うべきところではありません。
>>881 別にどっちでもいいがb==0の方がわかりやすいな
os : xp コンパイラ : 不明 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(); }
887 :
831 :2007/06/14(木) 00:37:15
>>887 引数がないならANSI、ISO準拠だと int main(void) とするのが適切。
>>889 減点理由が意味分からん
あとできるだけdouble型使った方がいいよ
理由は自分で調べてくれ
893 :
デフォルトの名無しさん :2007/06/14(木) 00:43:23
894 :
デフォルトの名無しさん :2007/06/14(木) 00:44:21
>>892 なぜか問題文に「float型で」とあるのです…
厳しく言うと scanf使ってるからバグの誘致はあるだろうし 面積は%fです のあとに \nの改行コードが欲しい。 変数名はローマ字よりheightのような英語であるべき 更に言うと、インデント。 その方法もありだろうけど、 if {...} else if {...} のつながりが、イマイチわかりづらくて一瞬迷う。 こんなところ
897 :
デフォルトの名無しさん :2007/06/14(木) 00:49:32
>>895 分かりました、ありがとうございました
>>896 scanf以外の入力関数を習っていません…
改行コードは完全に見落としでした。ありがとうございます
変数名は先ほども指摘されましたので、英単語の勉強もかねて出来るだけ英語にします
インデントですか…
どういう形にすればいいですかね?
>>886 /* 改行まで読み捨てる */
while ((ch = getchar()) != EOF && ch != '\n') {}
>>869 #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;
900 :
899 :2007/06/14(木) 00:53:47
続き if(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
このスレ的に、int main(中身なし)はタブーだよw
>>897 インデントには色々なやり方があるから一概にこれとは言えない。
人によって見やすい見難いがでるため、いろんなソースを読んだりして自分にあったものを選べばいいと思う。
もし会社なんぞに入れば大抵、そこのコーディング規約があるからそれに従えばOK。
プログラムは習うものというより、調べるものとでも思ったほうがいい。
興味があるならいろいろ調べてなぜscanfがよろしくないといわれるのか考えてみるのもいいと思う。
>>892 joteとかkateとかがちょっとわかりにくかったから減点。
teihenとかjoteiとかkateiだったら-8点くらい。
エラーの return 1; って必要か? 必要ないような気がするけど
>>904 それは質問?それとも指摘?独り言?
終了コードを使いたいと思うことって無い?
>>904 異常終了を1、正常終了を0ってしたかったんだろうね。
確かに気にするような部分じゃないと思う。
>>903 kateはアメリカ人の女の子の名前みたいに読めてしまうな
まぁ上でreturnを覚えたばっかりだから使ってみたんだろう。
910 :
366 :2007/06/14(木) 01:08:48
>>910 >>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]);
}
}
C言語的に、int型の値を返すライブラリにreturn int型の値;の指定がないのはなんとも歯がゆいというか お尻の穴がギョウチュウでムズムズする感じがする
[1] 授業単元: C/C++講座(S) [2] 問題文(含コード&リンク): 参照仮引数にする必要があるケース、および仮引数を参照にした方が良いケース、 それぞれについて思いつく限り、コードを書き、それが必要となる理由や良い理由をできる限り詳しく述べよ。 また、戻り値を参照にする利点についても考え、コードと理由を併せて提出せよ。 [3] 環境 [3.1] OS: WindowsかLinuxどちらでも [3.2] コンパイラ名とバージョン: gcc 3.4、bcc [3.3] 言語: C++ [4] 期限: 2007/06/18 12:50迄 [5] その他の制限: 制限は設けられませんでしたが、あまり高度なことは理解できないと思います。
>>916 もう少し具体的にならない?思いつく限りとかあまりにも抽象的すぎるかと・・・
今までこんな課題がありましたとかでもいいから。
あと、理由とかもあったほうがいいの?そこは自分?
めちゃくちゃ抽象的で俺も困っているんですが、これが初めての課題です。 講義では参照を使う例として、入出力ストリームが紹介されました。 コードさえあれば理由は自分でも考えますが、 わからなかったときに備えて添えていただけると俺が喜びます。 でも自分でも考えたいので、 別々のtxtファイルにして、zipにしてもらえたりすると泣いて喜びます。
>>916 class DummyInterface {
public:
virtual void dummy_method ( ) = 0;
};
void function ( DummyInterface dummy ) {
:
}
[1] 授業単元: コンピュータプログラミング [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; }
int whowin(int you,int com){ if ((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; } 見たことないエラーが出て動いてくれません。 根本的なこと間違えてそうですが、どうか教えてください。
main関数の中身をよくみろタコ
>>920 int com(){
int com;
int you(){
int you;
っつか、function名と変数名が被ってるYO! 当然、こういうのは識別子として使うのはエラー。
汚いし基本が理解できてないプログラム書くな
スコープってものについてよく調べたほうがいいよ
>>920 自力で直したい?
それとも全部コード書いてほしい?
>922-926 ありがとうございます スコープを調べてみて、もう少し自力でがんばってみます
突っ込みどころ多すぎだが、一番の問題点は >whowin(you,com) だな。 youとcomは関数だからintを受け取る関数にはyou()とcom()で渡さないと。
>>839 if (bucket[1][1]==4) break; が嘘くさい気がするんだけど、どうなんだろう
しまった……8lの容器に4lか…… すごい欝
[1] 授業単元: 画像処理
[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 学習自体はうまくいっている(結果の値をそのまま使って復元すると元に戻っている)思うのですが、
量子化を施すと、面影はあるのですがぐちゃぐちゃの画像が出てきて思うように復元することができません。
(プログラムをそのまま実行してみればわかるかと思います)
ここからどのようにすれば、元の画像と遜色なく復元できるのでしょうか。
どなたかご教授のほどをよろしくお願いいたします。
920は関数の戻り値とかその辺の概念について理解しないと進まないぞ
>923 お前はいったい何を言ってるんだ
937 :
デフォルトの名無しさん :2007/06/14(木) 11:28:03
940 :
デフォルトの名無しさん :2007/06/14(木) 12:20:52
授業単元:C言語 環境: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)
941 :
940の続き :2007/06/14(木) 12:38:46
授業単元:C言語 環境: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
>>933 調べてみてもlena.pgmが元々エロ画像であることくらいしかわからん
944 :
デフォルトの名無しさん :2007/06/14(木) 13:36:09
945 :
デフォルトの名無しさん :2007/06/14(木) 13:45:20
[1]授業単元:プログラミング [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分まで よろしくお願いします。
946 :
デフォルトの名無しさん :2007/06/14(木) 13:55:18
944>まぁ〜釣りだと思うぜw
>>940 #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;
}
breakの後のセミコロンタイプミスなので消してくだしあ><
別にエラーにはならんだろ
ならないから消し忘れたんだけど消した方が良いでしょ?
>>945 #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");
}
952 :
951 :2007/06/14(木) 14:12:11
続き int main() { int score; char c; printf("点数を入力してください。\n"); printf("点数="); scanf("%d",&score); putchar('\n'); rank(&c,score); disp(c); return 0; }
953 :
デフォルトの名無しさん :2007/06/14(木) 14:26:02
954 :
デフォルトの名無しさん :2007/06/14(木) 14:28:46
[1] 授業単元:while文 [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回
>>953 なんか微妙に条件付け忘れた。
まだ見てたら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;
}
>>954 int 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;
}
>>954 #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;
}
958 :
修正 :2007/06/14(木) 14:39:58
>>954 int 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;
}
960 :
デフォルトの名無しさん :2007/06/14(木) 14:50:45
連続で申し訳ないのですが、アップローダーのNo.4249に 問題を載せさせてもらいましたので、またよろしくお願いします。
どこかで見た問題だな
964 :
デフォルトの名無しさん :2007/06/14(木) 15:23:59
[1] 授業単元:プログラム [2] 問題文:入力された値が素数か判定するプログラム [3.1] OS:WindowsXP [3.2] BorlandC++ [3.3] C++ [5] その他の制限:<stdio.h>しか使えないです
965 :
問題♀16歳 :2007/06/14(木) 15:24:44
実数を1つ入力して、小数点以下第一位を四捨五入して結果を表示する。 ただし、if文を使用すること。
>>965 ただしif文は使用していないとのこと
#include <stdio.h>
int main(void) {
double x;
printf("Input > ");
scanf("%lf",&x);
printf("%.0lf \n",x);
return 0;
}
問題♀16歳とオマンコして受精する方法
969 :
問題♀16歳 :2007/06/14(木) 15:30:53
>>966 if文だっちゃ!!!でもありがとうございまず。
>>969 それ答えになってないって。21歳の(ry
971 :
問題♀13歳 :2007/06/14(木) 15:38:34
>>964 #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;
}
あれ、C++だからiostreamで書いたら制限がstdio.hだった>< まぁcoutとcinをそれぞれ置き換えてください。
>>964 #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;
}
976 :
29歳♀ :2007/06/14(木) 15:50:45
はやくおしえろカス
>>964 #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;
}
>>965 #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;
}
979 :
デフォルトの名無しさん :2007/06/14(木) 18:54:00
980 :
デフォルトの名無しさん :2007/06/14(木) 19:03:41
[1]C言語 [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
981 :
デフォルトの名無しさん :2007/06/14(木) 19:04:41
実行画面 1行目の 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 よろしくお願いします
>>981 #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;
}
まだ後六日もあんじゃん
985 :
デフォルトの名無しさん :2007/06/14(木) 19:59:11
これはひどい
C++はCに比べて結構面倒くさいからなぁ
ウソ付け。 C++の方が多機能で楽だ。
らくらくふぉんはしんぷるがうりです
何て言うか、面倒くさいわりにやりがいが無いプログラムだから。
xyzzyの罫線モードで時間割書いて、 fstreamで読み込んで表示するのが一番楽だ。
>>645 C++に挑戦したが途中で挫けた。後は自分でガンバレ
#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;
}
994 :
デフォルトの名無しさん :2007/06/14(木) 23:49:47
>>676 ですが、回答して下さった方々ありがとうございました。
理解するのにちょっと時間かかりそうですががんばります!
まあここで質問しなきゃ出来ないような奴は将来目に見えてるな
たしかに8割くらいはどうしようもない質問だけど 2割くらいは自分も考えさせられる質問が出るから一概に馬鹿に出来なくて困る。
将来プログラマになると決まったわけじゃないしいいんじゃない? ただ自分で考える力がないのはどこ行ってもダメだろうけど
人を馬鹿にして優越感に浸るのは、心が寂しい証拠ですよ。 仕事で心が寂しくなってませんか?仕事と2chをやめて 出家すれば、きっとも豊かな心と人間的な生活が取りもどせますよ。
そうかーがっかい♪
1000なら高級言語は二度と使わない
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。