C/C++の宿題を片付け ..
1:デフォルトの名無しさん
07/08/24 17:28:30
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】 URLリンク(chomework.sakura.ne.jp)
【wiki】 URLリンク(www23.atwiki.jp)
【前スレ】
C/C++の宿題を片付けます 94代目
スレリンク(tech板)
2:デフォルトの名無しさん
07/08/24 19:45:41
いちおつ
3:デフォルトの名無しさん
07/08/24 20:31:24
これが2なら今年こそ34年目にして初めて彼女ができる
4:デフォルトの名無しさん
07/08/24 21:26:28
>>3
また来年
5:デフォルトの名無しさん
07/08/24 22:51:48
ちょっと質問。
std::istreamから区切り文字のある場所を発見するのに
std::find(first, last, '&');
ってやると、戻り値がfirstと一致してしまうんだけど、
こういう使い方って駄目なの?
6:デフォルトの名無しさん
07/08/24 23:41:36
>>3
96代目が待っている。どんどん問題を解いてスレ消化
7:デフォルトの名無しさん
07/08/25 02:57:20
____
/ \
/ ─ ─ \
/ (●) (●) \ >>3さん2GETできなかった気分はどう?
| :::::: (__人__) :::::: |
\. `ー'´ /ヽ
(ヽ、 / ̄) |
| ``ー―‐''| ヽ、. |
ゝ ノ ヽ ノ |
8:デフォルトの名無しさん
07/08/25 12:41:11
しつこい粘着は嫌われる
9:デフォルトの名無しさん
07/08/25 17:56:06
しつこくない粘着は好かれる
10:デフォルトの名無しさん
07/08/25 23:05:14
だよね〜 きれいにはがれないとむかつくよね〜
11:デフォルトの名無しさん
07/08/25 23:06:10
はがれて欲しい時はサクッとはがれてほしいし
はがれては困る時にははがれてほしくない
人間ってゼイタクだよな
12:デフォルトの名無しさん
07/08/26 00:05:59
>>5
firstとlastの型は何?
13:デフォルトの名無しさん
07/08/26 03:28:22
ゼイタクだから今の経済は回ってるんだよな
14:デフォルトの名無しさん
07/08/26 14:36:25
1] 授業単元:C言語
[2] 問題文:
月(1〜12)と日(1〜31)をキーボードから入力し、入力された日付を表示する
プログラムを作成しなさい。
条件@:月の入力については1〜12で範囲チェックを行い。範囲外の入力
だった場合は、エラーメッセージを表示して再入力させること
条件A:日の入力については1〜31で範囲チェックを行い。範囲外の入力
だった場合は、エラーメッセージを表示して再入力させること
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン: (VS 2005)
[3.3] 言語: C
[4] 期限: (2007年9月1日まで)
[5] その他の制限:
実行結果
┏━━━━━━━━━━━━━━
┃月を入力:15 (15の部分はキーボードからの入力)
┃月の入力は「1以上12以下」にしてください
┃月を入力:8 (8の部分はキーボードからの入力)
┃日を入力:46 (46の部分はキーボードからの入力)
┃日の入力は「1以上31以下」にしてください
┃日を入力:25 (25の部分はキーボードからの入力)
┃入力された日付は「8月25日」です
┗━━━━━━━━━━━━━━
↑みたいな感じでよろしくお願いします<(_ _*)>
説明下手ですいません^^;
15:デフォルトの名無しさん
07/08/26 14:53:21
>>14
#include <stdio.h>
int main(void) {
int m,d;
do{
printf("月を入力:");
scanf("%d",&m);
if( m<1 || m>12 ) printf("月の入力は「1以上12以下」にしてください\n");
else break;
}while( 1 );
do{
printf("日を入力:");
scanf("%d",&d);
if( d<1 || d>31 ) printf("日の入力は「1以上31以下」にしてください\n");
else break;
}while( 1 );
printf("入力された日付は「%d月%d日」です\n",m,d);
return 0;
}
16:デフォルトの名無しさん
07/08/26 15:54:08
14です。
素早い返信ありがとうございます^^
またよろしくお願いします(*- -)(*_ _)ペコリ
17:デフォルトの名無しさん
07/08/27 04:40:10
前スレ967ですが
[1] 授業単元: C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: c
[4] 期限: 2007年8月25日
お願いします。
18:デフォルトの名無しさん
07/08/27 05:19:07
>>17
#include <stdio.h>
#include <string.h>
main(){char b1[10],b2[10];scanf("%s %s",b1,b2);if(strcmp(b1,b2)<1)printf("%s %s",b1,b2);else printf("%s %s",b2,b1);}
#include <stdio.h>
#include <string.h>
main(){char b1[10],b2[10];scanf("%s %s",b1,b2);if(strcmp(b1,b2)<1){strcat(b1,b2);printf("%s",b1);}else{strcat(b2,b1);printf("%s",b2);}}
#include <stdio.h>
#include <stdlib.h>
main(){char b1[10];scanf("%s",b1);printf("%d %lf",atoi(b1),atof(b1));}
19:デフォルトの名無しさん
07/08/27 23:44:53
URLリンク(www.afpbb.com)
20:デフォルトの名無しさん
07/08/28 10:47:50
[1] 授業単元: C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: c
[4] 期限: 2007年8月30日
21:デフォルトの名無しさん
07/08/28 11:04:38
>>20
1
#include <stdio.h>
void exch_order(int *pa, int *pb) {
if(*pa>*pb)
{
int tmp=*pa;
*pa=*pb;
*pb=tmp;
}
}
int main(void) {
int a,b;
printf("Input > ");
scanf("%d %d",&a,&b);
exch_order(&a, &b);
printf("%d %d\n",a,b);
return 0;
}
22:デフォルトの名無しさん
07/08/28 11:55:23
>>20 2 きんもぉ〜☆なクソース♪
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 256
#define swap(type,x,y) do{type tmp=x; x=y; y=tmp;}while(0);
int main(void) {
char str[MAX];
size_t i,str_len;
printf("Input > ");
for(i=0; i<sizeof str/ sizeof str[0] -1; i++) {
str[i]=getchar();
if( !isprint(str[i]) ) break;
}
str[i]='\0';
str_len=strlen(str)-1;
for(i=0; i<=str_len/2; i++)
swap(char,str[i],str[str_len-i]);
printf("%s \n",str);
return 0;
}
23:デフォルトの名無しさん
07/08/28 13:03:00
>>21,22
ありがとうございました。
24:デフォルトの名無しさん
07/08/28 14:24:29
>>21
>20の1は、こういうことではないのか?
>整数a,bを入力とし、以下の関数を定義して、小大の順に出力するプログラムを作成せよ。区切りは空白とする。
入力:整数
出力対象:以下の関数
出力条件:小大の順に
関数を小大の順に出力ってのがどういうことかはわかりませんが。
25:デフォルトの名無しさん
07/08/28 14:25:43
しかし、京大にもまとに文章を書けない指導教官がいるんだなぁ……
26:デフォルトの名無しさん
07/08/28 15:52:35
っつか
> void exch_order(int *pa, int *pb)
> ポインタ引数を用い、大小関係により、 *pa と *pb を入れ替えて格納する。
入れ替えて格納する機能だけで十分でしょ。前文には「以下の関数を定義して」とあるんだし。
以下に該当する関数が、表示するところまでは条件に入ってない。
27:デフォルトの名無しさん
07/08/28 17:20:57
xy平面の図形の問題なのですが、
二点(xs,ys)-(xe,ye)で与えられる線分が、長方形の領域(左下コーナー(xmin,ymin)、右上コーナー(xmax,ymax))
と交わるかどうか判定したいのですが、良い方法はありますか?
細かく場合分けして、判定したら出来そうなのですが、
何か物凄くいい方法で、数行で書けるような判定方法があればうれしいのですが。
Cで書いています。
よろしく
28:デフォルトの名無しさん
07/08/28 18:21:07
月を入力したら、1日からその月の最後の日までを
日 月 火・・・
1 2・・・
・・・
と表示するプログラムを教えてください。
29:デフォルトの名無しさん
07/08/28 18:25:41
>>28
カレンダーを見た事は有りますか?
年も指定しないと無理なんですよ。
30:デフォルトの名無しさん
07/08/28 19:09:32
>>29
日本語を見たことありますか?
書かれたまんまのことを答えれば良いのですよ。
31:デフォルトの名無しさん
07/08/28 19:23:57
つまり、実際の曜日に関わらず月の下に1と書けば宜しいか。
32:デフォルトの名無しさん
07/08/28 19:34:52
>>31 たぶん、>>28の内容からしたらそうアルよ。難しく考えないで、答えるアルよ。
けど、テンプレに則ってないんで無視しチャイナ。
33:デフォルトの名無しさん
07/08/28 20:33:59
[1] 授業単元: C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: c
[4] 期限: 2007年8月30日
再々ですがお願いします
34:デフォルトの名無しさん
07/08/28 20:41:32
int *pstr でいいんすか?
35:デフォルトの名無しさん
07/08/28 20:47:08
>>33
#include<ctype.h>
int mystrlen(int*pstr){
char*pstr_=(char*)pstr;
int count = 0;
for(;*pstr_;++pstr_)
if(isspace(*pstr_)) ++count;
return count;
}
void mystrcpy(int*pstr,int*pans){
char*pstr_=(char*)pstr;
char*pans_=(char*)pans;
do if(!isdigit(*pans_))*pstr_++ = *pans_;
while(*pans++);
}
36:デフォルトの名無しさん
07/08/28 21:52:09
[1] 授業単元:C言語
[2] 問題文:
二次座標平面において,ランダムに4〜5個ほど点が与えられる.
そのような複数の点の最近傍を通る円の方程式を求めよ.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:[2007年08月31日24:00まで]
[5] その他の制限:計算速度が速い方が好ましい.
今現在最急降下法で作ってみたのですがうまく動きません。
よろしくお願いします。
37:ジャレ
07/08/28 22:05:11
1] 授業単元:プログラミング
[2] 問題文: pgmファイルを読み込み、幅(width)、高さ(height)、色調(val)を
を表示する。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:visual C++
[3.3] 言語:C
[4] 期限:[2007年08月29日12:00まで]
[5] 自分の実力のなさでグローバル変数を使用しないと上手くいきませんでした・・。
ですので、グローバル変数は使わない方向でお願い致します。
読み込んだ後フーリエ変換させる必要があるので、pgmの読み込み部分は
関数化してくだい。では、よろしくお願い致します!!
38:デフォルトの名無しさん
07/08/28 23:16:32
>>36
回帰直線(最小二乗法)のように数式で表現できるはずだから、それを晒してくれれば…
39:デフォルトの名無しさん
07/08/28 23:18:52
>>27
>>1 の質問テンプレ
それと線分の交差って高校の数学でやらなかったっけ?
もう忘れてしまったけど
40:デフォルトの名無しさん
07/08/29 00:42:22
>>36
URLリンク(kansai2channeler.hp.infoseek.co.jp)
クラメルじゃ遅いかな
入力例
4 (点の個数)
1.0 0.0 (各座標)
0.0 1.0
-1.0 0.0
0.0 -0.5
点の個数が3未満のときと全ての点が一直線上にあるときは答えが出ない
41:デフォルトの名無しさん
07/08/29 02:24:44
>>37
できてるところまでうp!
42:デフォルトの名無しさん
07/08/29 07:31:35
[1] 授業単元:C
[2] 問題文(含コード&リンク):
テーマ:ユーザ関数の作成
再帰関数を使って、Xのn乗を求めるプログラムを作成しなさい
プロトタイプ宣言:int power(int x, int n);
実行画面
文字列入力==>2
文字列入力==0
値:1
文字列入力==>2
文字列入力==>3
値:8
文字列入力==>6
文字列入力==>4
値:1296
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: ボーランド
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
43:デフォルトの名無しさん
07/08/29 08:19:00
[1] 授業単元: C
[2] 問題文(含コード&リンク): 50行以上のプログラムをつくりなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C
[4] 期限: 2007年8月31日
[5] その他の制限: C言語検定3級まで習いましたので、その範囲でお願いします。
44:デフォルトの名無しさん
07/08/29 09:55:36
>>42
#include<stdio.h>
int result;
int power(int x,int n){
if(n==0)
return 0;
result*=x;
n<0?n++:n--;
return power(x,n);
}
int main(void){
for(;;){
int x,n;
result=1;
printf("文字列入力==");
scanf("%d",&x);
printf("文字列入力==");
scanf("%d",&n);
power(x,n);
printf("値:%s%s%d\n",result<0?"-":"",n<0&&(result<-1||result>1)?"1/":"",result<0?-result:result);
}
return 0;
}
45:デフォルトの名無しさん
07/08/29 10:18:59
[1] 授業単元: C
[2] 問題文(含コード&リンク):非負整数の不定長配列 arr[] 中で、指定データ data が出現する回数を返却するプログラムを関数
arr_occur_ct() を用い作成せよ。終端番兵は、EOA(-1) とする。反復変数を用いず、ポインタのアドレス演算を用いる。
int arr_occur_ct(int *arr, int data)
システム上では、入力の先頭をdata、それ以降はarrとする。入力の終了はEOA(-1)とする。
入力例 0 2 0 0 7 0 7 1 0 -1
出力例 4
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: C
[4] 期限: 2007年8月30日
46:デフォルトの名無しさん
07/08/29 10:25:03
unsigned arr_occur_ct(unsigned const * array, unsigned data)
{
if (array == NULL || data == EOA) return 0;
unsigned count = 0;
for (unsinged ic = 0; array[ic] != EOA; ++ic) {
if (array[ic] == data) ++count;
}
return count;
}
47:デフォルトの名無しさん
07/08/29 10:26:34
仕様を勝手に変えるのは最悪
48:デフォルトの名無しさん
07/08/29 10:34:40
問題が悪いな、非負整数の不定長配列と言いつつint *なんだから。
とは言え、>46は性質が悪すぎる。
49:デフォルトの名無しさん
07/08/29 10:48:37
>>46
ソース全部書いて貰えるとうれしいのですが
50:デフォルトの名無しさん
07/08/29 11:26:02
// >>45
// >46を参考に。
#include <stdio.h>
#include <stdlib.h>
#define EOA (-1)
int arr_occur_ct(int const * array, int data)
{
if (array == NULL || data == EOA) return 0;
unsigned count = 0;
for (const int * p = array; * p != EOA; ++p) {
if (* p == data) ++count;
}
return count;
}
int main()
{
int data = EOA;
scanf("%d", & data);
if (data == EOA) return 0;
unsigned cnt = 0;
int * arr = NULL;
do {
int val = EOA;
scanf("%d", & val);
arr = realloc(arr, (cnt + 1) * sizeof(* arr));
arr[cnt] = val;
} while (arr[cnt++] != EOA);
printf("%d\n", arr_occur_ct(arr, data));
return 0;
}
51:デフォルトの名無しさん
07/08/29 11:41:22
数字一つごとにreallocって凄いな
52:デフォルトの名無しさん
07/08/29 11:42:39
realloc()が毎回API叩く仕様だったら泣けるね。
53:デフォルトの名無しさん
07/08/29 12:03:42
何個か一括して要求したらいいのに。
54:デフォルトの名無しさん
07/08/29 12:25:57
[1] 授業単元:C
[2] 問題文(含コード&リンク):
問題1
テーマ:文字配列の操作
文字型の配列変数mojiに設定されている文字数を数えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7
問題2
テーマ:ユーザ関数の作成
問題1をもとに文字数を返すユーザ関数を作成しなさい
プロトタイプ宣言:int MyLen(char *s);
char moji[]="ABCDEFG";
実行画面
文字数:7
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: ボーランド
[4] 期限:
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
55:デフォルトの名無しさん
07/08/29 12:33:33
[1] 授業単元:C
[2] 問題文(含コード&リンク): 検索する文字列を入力し、その一を返すユーザ関数を作成しなさい
プロトタイプ宣言:char *MojiSearch(char *m,char *s);
引数1:検索対象文字列
引数2:検索文字列
戻り値:あった場合(一致した文字列を先頭アドレス)
なかった場合(NULL)
char moji[] = "ABCDEFGHJABFGHSKL";
結果
検索文字列==>HS
検索位置:HSKL
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: ボーランド
[4] 期限:
[5] その他の制限:
何方かお願いします
56:デフォルトの名無しさん
07/08/29 12:54:04
>>54
strlenでググれ。
それだけで解決するから。
57:【4200円(定額)】
07/08/29 13:06:24
>>56
#include <stdio.h>
#include <string.h>
char *MojiSearch(char *m,char *s){
int i = 0;
int j = 0;
int result = 0;
while(i < strlen(m)-strlen(s)+1){
for(j=0;j<strlen(s);j++){
if(m[i+j] == s[j]){
result++;
}
else{
result = 0;
break;
}
}
if(result != 0)
break;
i++;
}
if(result == 0)
return NULL;
else
return &m[i];
}
58:デフォルトの名無しさん
07/08/29 13:08:03
悪い見本のようなコードだな
59:デフォルトの名無しさん
07/08/29 13:16:55
>>58
BM法でやれとか書いてないからいいんじゃないかな。
いかにもって感じで。
60:デフォルトの名無しさん
07/08/29 13:18:42
>>55
char *Mystrstr(const char *m, const char *s)
{
char *cp = (char *)m;
if(*s == '\0')
return cp;
while(*cp != '\0')
{
char *tp = cp;
char *pp = (char *)s;
while(*tp == *pp)
{
if(*pp =='\0')
return cp;
tp++;
pp++;
}
if(*pp == '\0')
return cp;
cp++;
}
return NULL;
}
61:デフォルトの名無しさん
07/08/29 14:00:56
>>37のやつ、真面目にやろうとすると、コメント行読み飛ばしたり、
区切り文字判別したりしなきゃならないのか。
・改行が出現するまでを1行とする
・1行は70文字未満
・区切り文字は空白、タブ、改行の三種類
効率よく単語毎に切り出せるプログラムってどうやって作るの?
62:デフォルトの名無しさん
07/08/29 14:03:26
[1] 授業単元: C
[2] 問題文(含コード&リンク): 自作プログラム作成
1.ステップは最低50文
2.1次元配列or2次元配列を使用
3.if文,while文,for文使用
4.自作関数使用
5.♯define使用
6.ヘッダファイル化
7.必ずプロンプトで誰が見てもわかる対応型プログラムにする
[3] 環境
[3.1] OS:Windows
[3.2] VS2005
[3.3] 言語: C
[4] 期限: ([2007年8月31日AM8:00まで]
お願いします。
63:デフォルトの名無しさん
07/08/29 14:05:28
>>62
その条件を満たせばどんなプログラムでもいいってこと?
64:デフォルトの名無しさん
07/08/29 14:21:41
>必ずプロンプトで誰が見てもわかる対応型プログラム
物凄く難しくね?
65:62
07/08/29 14:31:50
>>63
どんなプログラムでも良いです。
66:デフォルトの名無しさん
07/08/29 14:55:26
対応型じゃなくて対話型?
67:デフォルトの名無しさん
07/08/29 15:02:22
>>64
>>66
問題文には対応型と書いてあったのですが、よくわからないので7番目の条件はどうでも良いです。
すいません。
68:デフォルトの名無しさん
07/08/29 15:07:36
7.がどうでもいいのなら無意味なコードを書き連ねて完成だなw
69:デフォルトの名無しさん
07/08/29 15:18:35
>>62
2〜5の条件にある文は既に習ったんだろうけど
それぞれを学んだ時の題材として作ったのはどんなプログラム?
70:デフォルトの名無しさん
07/08/29 15:21:16
>>62なんでも良いなら、以前宿題スレであった問題に
つけた俺の答えを送ろう
「数値を螺旋状に表示するプログラム」
URLリンク(kansai2channeler.hp.infoseek.co.jp)
71:デフォルトの名無しさん
07/08/29 16:34:41
>>69
入力した数値が処理された数値として出力されるようなプログラムですかね。
平均を出したりとか。
あと、例としてはカレンダーをつくってみてはどうか?と書いてありました。
72:33
07/08/29 20:52:18
>>35
ソース全部を書いて貰えるとうれしいのです
後、2もお願いできませんか
73:ジャレ
07/08/29 22:51:12
>>61
ファイルタイプの判別、コメントを飛ばしが必要です。
1] 授業単元:プログラミング
[2] 問題文: pgmファイルを読み込み、幅(width)、高さ(height)、色調(val)を
を表示する。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:visual C++
[3.3] 言語:C
[5] 作成途中で、バグもありますが仕様はこんな感じになっています。
URLリンク(www8.uploader.jp)
74:デフォルトの名無しさん
07/08/30 00:23:52
>>61
pgmにはバイナリとアスキーがあって、どちらもヘッダ部(コメント含む)を読んだら後は、前者はfread()、
後者は本体部分が70文字以上の長い行のデータが多いことを鑑みてfscanf()で取り出せばいい。
問題はヘッダ部で、途中で改行されると読めないツールや逆に改行がないと読めないツールもあって、
どう解釈するかが微妙。
75:デフォルトの名無しさん
07/08/30 00:27:16
なんだ、>73を見る限りヘッダだけ読めば本体読む必要ないじゃん。
しかし、depthを色調と言われてもぴんとこないなぁ。
76:デフォルトの名無しさん
07/08/30 01:47:49
[1] 授業単元: C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: c
[4] 期限: 2007年8月30日
77:デフォルトの名無しさん
07/08/30 02:29:00
[1] 授業単元:C言語
[2] 問題文: int型の配列に設定されている値の中の最大値と最小値
を求めて出力するプログラム
条件1:int型配列のサイズは10とし、
あらかじめ初期リストによって値が設定されているものとする。
条件2:アルゴリズムは繰り返しで処理すること。
※初期化リストは{10,7,3,15,12,1,18,21,25,14}と設定されているものとする。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン: (VS 2005)
[3.3] 言語: C
[4] 期限: (2007年9月1日まで)
[5] その他の制限:
よろしくお願いします<(_ _*)>
78:デフォルトの名無しさん
07/08/30 02:40:39
>>33
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
1と3だけきんもぉ〜☆なクソースでお届けしまつ
79:デフォルトの名無しさん
07/08/30 03:13:12
>>76
#include <string.h> #include <stdlib.h> #include <stdio.h> #define EOA 0.0
void arr_cycle(int *arr, int len){ int *temp = malloc((sizeof(int))*len); memcpy(temp,arr,((sizeof(int))*len));
memcpy(arr+1,temp,((sizeof(int))*(len-1))); memcpy(arr,temp+len-1,((sizeof(int))));
free(temp);}
int arr_positive(double *arr1, double *arr2)
{double *temp;int i;
for(temp = arr1,i = 0; *temp != EOA; temp++){
if(*temp > 0.0){arr2[i] = *temp;i++;
}
}
arr2[i] = EOA;
return i;
}
int main()
{
int ary[] = {1,2,3,4,5,6};
int i,positive;
double arr1[] = {1.2, -0.8, 2.3, 3.4, -1.1, EOA};
double arr2[sizeof(arr1)/sizeof(double)] = {0};
double *temp;
arr_cycle(ary,6);
for(i = 0; i < 6; i++)
printf("%d ",ary[i]);
putchar('\n');
positive = arr_positive(arr1,arr2);
for(temp = arr2; *temp != EOA; temp++)
printf("%lf ",*temp);
putchar('\n');
return 0;
}
80:デフォルトの名無しさん
07/08/30 03:25:38
>>77
#include <stdio.h>
#define N 10
void bubble_sort(int sort[], int elements)
{
int i,j,temp;
for(i=0; i < elements-1; i++){
for(j=i+1; j < elements; j++){
if(sort[i] > sort[j]){
temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
}
}
}
}
int main()
{
int ary[N] ={10,7,3,15,12,1,18,21,25,14};
bubble_sort(ary, N);
printf("MAX %d MIN %d \n",ary[9],ary[0]);
return 0;
}
81:デフォルトの名無しさん
07/08/30 03:45:09
>>33
#include <stdio.h> #include <ctype.h> #define EOA -1
int mystrlen(int *pstr); int usepointersum(int *ary); void mystrcpy(char *pstr,char *pans);
int main()
{ char ary1[] = "Kyoto"; char ary2[] = "Kyoto Univ"; int iary[] ={ 1,3,5,7,9,2,10,4,8,6,EOA};
char ary3[] = "m04d12t5"; char ary4[20] ={'\0'}; int i;
printf("%s\t%d\n",ary1,mystrlen(ary1)); printf("%s\t%d\n",ary2,mystrlen(ary2));
for(i = 0; i < sizeof(iary)/sizeof(int);i++) printf("%d ",iary[i]);
putchar('\n'); printf("%d \n",usepointersum(iary)); printf("%s \n",ary3);
mystrcpy(ary3,ary4); for(i = 0; ary4[i] != '\0';i++) putchar(ary4[i]);
putchar('\n'); return 0; }
int mystrlen(int *pstr)
{ char *temp=NULL; int num = 0; int i = 0; for(temp = (char *)pstr; *temp!='\0';temp++){
if(*temp > ' '){ num++; } } return num; } int usepointersum(int *ary) {
int sum = 0; int *temp; for(temp = ary; *temp != EOA;temp++) sum += *temp;
return sum; }
void mystrcpy(char *pstr,char *pans)
{
char *tstr;
int i,j=0;
for(tstr = pstr; *tstr != '\0'; tstr++)
if(!(isdigit(*tstr))){
pans[j] = *tstr;
j++;
}
pans[j]='\0';
}
82:デフォルトの名無しさん
07/08/30 04:32:39
1] 授業単元:C++
[2] 問題文(含コード&リンク):メインプログラムを参考に3次元配列を動的に確保する関数を作成せよ。
ただし、関数宣言は”void func(***)”を仕様する
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] Visual Studio 2005
[3.1] OS:Windows
[3.2] VC
[3.3] 言語: C++
[4] 期限: 無期限
[5] その他の制限: 特にありません
よろしくお願いします
83:デフォルトの名無しさん
07/08/30 12:08:13
授業単元: C
[2] 問題文(含コード&リンク):
テーマ:文字列配列の操作
問題1:文字列を入力して偶数番目の要素と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
問題2:文字列と削除文字列を入力し文字列中から削除文字を排除しなさい
実行画面
文字列入力(m1)==>ABCDEFAABCDABC
削除文字==>A
結果文字列(m2):BCDEFBCDBC
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:ボーランド
[3.3] 言語: C
[4] 期限:
[5] その他の制限:
84:デフォルトの名無しさん
07/08/30 12:18:53
授業単元: C
[2] 問題文(含コード&リンク):
テーマ:ポインタの利用
問題1: ポインタ変数を利用して、2つの合計を求めなさい
int a=10,b=5,g;
int *pa,*pb;
実行画面
g:15
問題2:ポインタ変数を利用して、文字型の配列変数mojiの値を実行画面のように表示させなさい
char moji[]="ABCD";
char *mp;
実行画面
A
B
C
D
問題3:文字列を入力し、文字列中の数字のみを別の配列に格納し表示しなさい
実行画面
文字列入力==>AB1CDE23FG4
数字文字列:1234
実行画面
実行画面
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:ボーランド
[3.3] 言語: C
[4] 期限:
[5] その他の制限:
85:デフォルトの名無しさん
07/08/30 12:27:03
こんな問題もできないのか
86:デフォルトの名無しさん
07/08/30 12:27:56
授業単元: C
[2] 問題文(含コード&リンク):
テーマ:文字列配列の操作
問題1:2値を小さい順に表示するユーザ関数を作成しなさい
プロトタイプ宣言:void SortDisp(int dt1,int dt2);
実行画面
数値1入力==>10
数値2入力==>15
数値1:10
数値2:15
数値1入力==>15
数値2入力==>10
数値1:10
数値2:15
問題2:2値の合計を返すユーザ関数を作成しなさい
プロトタイプ宣言:int Add(int aa,int bb);
実行画面
変数a入力==>3
実数b入力==>8
合計:11
数値1入力==>15
数値2入力==>
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:ボーランド
[3.3] 言語: C
[4] 期限:
[5] その他の制限:
87:デフォルトの名無しさん
07/08/30 12:41:05
>>74
仕様に忠実にするなら
P5 100 100 255
P5
#hoge hoge
100 100
255
どちらも読めなきゃだめだよなあ。
88:デフォルトの名無しさん
07/08/30 13:33:48
課題というより依頼みたいなものもここでいいのでしょうか?
89:デフォルトの名無しさん
07/08/30 13:46:07
宿題・課題のみです。
90:デフォルトの名無しさん
07/08/30 13:50:48
あるC++のプログラムをC言語のプログラムに書き変えてほしいのですが
該当スレなどはありませんか?
91:デフォルトの名無しさん
07/08/30 14:01:05
何方か83 84お願いします
92:デフォルトの名無しさん
07/08/30 14:12:40
>>83の問題1
#include <stdio.h>
#define MAX_NUM 128
int main()
{
char str[MAX_NUM], even[MAX_NUM/2], odd[MAX_NUM/2];
int i, j, k;
printf("文字列入力==>");
scanf("%s", str);
for(i=0, j=0, k=0; str[i]; i++)
{
if(i%2) {odd[j] = str[i];j++;}
else {even[k] = str[i];k++;}
}
odd[j] = even[k] = '\0';
printf("偶数要素:%s\n", even);
printf("奇数要素:%s\n", odd);
return 0;
}
93:デフォルトの名無しさん
07/08/30 14:20:22
>>83の問題2
#include <stdio.h>
#define MAX_NUM 128
int main()
{
char m1[MAX_NUM], m2[MAX_NUM], delchr;
int i, j;
printf("文字列入力(m1)==>");
scanf("%s", m1);
fflush(stdin);
printf("削除文字==>");
delchr = (char)getchar();
for(i=0, j=0; m1[i]; i++)
{
if(m1[i] != delchr) {m2[j] = m1[i]; j++;}
}
m2[j] = '\0';
printf("結果文字列(m2):%s", m2);
return 0;
}
94:デフォルトの名無しさん
07/08/30 14:23:07
>>84の問題1
#include <stdio.h>
int main()
{
int a=10, b=5, g;
int *pa, *pb;
pa = &a;
pb = &b;
g = *pa + *pb;
printf("g:%d", g);
return 0;
}
95:デフォルトの名無しさん
07/08/30 14:24:32
>>84の問題2
#include <stdio.h>
int main()
{
char moji[]="ABCD";
char *mp;
mp = moji;
while(*mp) putchar(*mp++);
return 0;
}
96:デフォルトの名無しさん
07/08/30 14:28:06
>>84の問題3
#include <stdio.h>
#include <ctype.h>
#define MAX_NUM 128
int main()
{
char moji[MAX_NUM], digit[MAX_NUM];
int i, j;
printf("文字列入力==>");
scanf("%s", moji);
for(i=0, j=0; moji[i]; i++)
{
if(!isdigit(moji[i]) == 0) {digit[j] = moji[i]; j++;}
}
digit[j] = '\0';
printf("数字文字列:%s", digit);
return 0;
}
97:デフォルトの名無しさん
07/08/30 14:28:18
何方か86お願いします
98:デフォルトの名無しさん
07/08/30 14:32:18
>>86の問題1
void SortDisp(int dt1,int dt2)
{
printf("数値1:%d\n数値2:%d\n", dt1<dt2 ? dt1 : dt2, dt1<dt2 ? dt2 : dt1);
}
>>86の問題2
int Add(int aa,int bb)
{
return aa+bb;
}
99:デフォルトの名無しさん
07/08/30 14:59:04
[1] 授業単元: ランダム関数
[2] 問題文(含コード&リンク):20〜100までのランダムな値を表示
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:BorlandC++
[3.3] 言語:C++
100:76
07/08/30 14:59:28
問題1、2、共にこれを参照と言ってました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
あと>>33の2もお願いできませんか?
101:デフォルトの名無しさん
07/08/30 15:14:23
[1] 授業単元: C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語: c
[4] 期限: 2007年8月31日
102:デフォルトの名無しさん
07/08/30 15:22:46
>>76
あとから、これ参照してとか言うなカス
作った関数意味ねーだろうが
あと>>33の2も答え出てるだろうが
103:82
07/08/30 15:23:50
何方か82お願いします
104:デフォルトの名無しさん
07/08/30 15:26:58
[1] 授業単元:確率統計
[2] 問題文(含コード&リンク):
指定ファイルを読み込んで、
平均値と標準偏差を標準出力するプログラムを作成せよ。
(指定ファイル)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
このファイルの2列目の要素のみ(0.0732421875 0.0693359375 ・・・)の
平均値等を出せばいいようで、他の列の数値は無視して大丈夫だそうです。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 9月1日
[5] その他の制限:制限はありません。
よろしくおねがいします。
105:デフォルトの名無しさん
07/08/30 15:30:08
>>99
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
printf("%d", rand()%81 + 20);
return 0;
}
106:デフォルトの名無しさん
07/08/30 15:45:54
[1] 授業単元: 配列
[2] 2次元配列の中に1~100までの連続した数字を格納し、表示させる
[3.1] WinXP
[3.2] Borland
[3.3] C++
[5] 1 2 3 4 5 6 7 8 910
11121314151617181920
21222324252627282930
…こんな感じで100まで表示させたいのです。
107:デフォルトの名無しさん
07/08/30 15:56:27
#include <stdio.h>
int main(void)
{
int array[100], i;
for (i = 1; i <= 100; i++)
array[i-1] = i;
for (i = 0; i < 100; i++) {
printf("%2d", array[i]);
if (array[i] % 10 == 0)
putchar('\n');
}
}
108:デフォルトの名無しさん
07/08/30 15:59:20
#include <stdio.h>
int main(void)
{
int num[10][10], i, j;
for(i=0; i<10; i++){
for(j=0; j<10; j++){
num[i][j] = i*10 + j + 1;
printf("%2d", num[i][j]);
}
putchar('\n');
}
return(0);
}
109:デフォルトの名無しさん
07/08/30 16:05:47
>>101
3番めこんなのでどうでしょう?
/*
xの昇順階乗を計算する。
fact_pow(10,3) = 10*11*12 = 1320
fact_pow(0,3) = 0*1*2 = 0
fact_pow(3,0) = 1;
fact_pow(-3,3) = -3*-2*-1 = -6
*/
#include <stdio.h>
#include <stdlib.h>
int fact_pow(int x,int p);
int main(void) {
int x, p;
printf("整数[x]を入力してください:");
scanf("%d",&x);
printf("整数[p]を入力してください:");
scanf("%d",&p);
printf("%d^[%d] = %d\n",x,p,fact_pow(x,p));
return 0;
}
int fact_pow(int x,int p) {
int value = 1;
int i;
if(p == 0)
return 1;
for(i = 0; i < p; i++)
value *= (x + i);
return value;
}
110:デフォルトの名無しさん
07/08/30 16:12:55
[1] 授業単元: 乱数
[2] 1~25までの数字をランダムで25個表示させる。その際同じ値がでないようにする。
[3.1] WinXP
[3.2] Borland
[3.3] C++
よろしくお願いします
111:デフォルトの名無しさん
07/08/30 16:24:11
>>104
URLリンク(kansai2channeler.hp.infoseek.co.jp)
112:デフォルトの名無しさん
07/08/30 16:24:20
>>110
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int num[25];
int i, index, tmp;
for(i=0; i<25; i++) num[i] = i+1;
srand(time(NULL));
for(i=0; i<25; i++)
{
index = rand() % (i + 1);
tmp = num[i];
num[i] = num[index];
num[index] = tmp;
}
for(i=0; i<25; i++) printf("%d\n", num[i]);
return 0;
}
113:デフォルトの名無しさん
07/08/30 16:47:21
>>110
#include <iostream>
#include <cstdlib>
#include <ctime>
const int N = 25;
int main()
{
int rnd[N] = {0};
int i,r,r1,r2,temp;
srand((unsigned)time(NULL));
for(i = 0; i < N; i++)
rnd[i] = i + 1;
r = rand();
for(i = 0; i < r; i++){
r1 =rand()%N;
r2 =rand()%N;
temp = rnd[r1];
rnd[r1] = rnd[r2];
rnd[r2] = temp;
}
for(i = 0; i < N; i++)
std::cout << rnd[i] << ' ';
std::cout << '\n';
return 0;
}
114:デフォルトの名無しさん
07/08/30 17:06:12
>>110
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <deque>
using namespace std;
int main(void)
{
const int NUM = 25; //定数宣言
srand((unsigned)time(NULL)); //乱数初期化
//配列qiの宣言と初期化
deque<int> qi;
for(int i = 0; i != NUM; i++)
{
qi.push_back(i+1); //1〜NUMまでの数値を並べる
}
//乱数を使って数値をランダムに取り出す
for(int i = NUM; i != 0; i--)
{
int n = rand() % i; //0〜(i-1)までの乱数を取り出す
cout << qi.at(n) << endl; // n番目の数値を表示
qi.erase(qi.begin()+n); // n番目の数値を配列から削除
}
return 0;
}
115:104
07/08/30 17:23:00
>>111
お早い回答ありがとうございます!!
おかげで助かりました!
116:111
07/08/30 17:48:33
久々ありがとうレスをもらった
「どういたしまして」
117:デフォルトの名無しさん
07/08/30 20:08:54
>>116
回答をしてもらったわけではない部外者だが、他の回答者として
自分よりお早く回答してくれてありがとうございました!
おかげで自分が回答せずに済みました!
118:デフォルトの名無しさん
07/08/30 20:19:47
>>114
このスレでGNUスタイルのコードは初めて見た気がする
119:デフォルトの名無しさん
07/08/30 20:48:25
残念だが C++ の標準スタイルでは引数がないなら
int main() で良いんだよ。CはISO準拠だとint main(void)ってなるが
120:デフォルトの名無しさん
07/08/30 23:05:03
>>73 こんなもんでおk?後々P5 を読む気が無いコードだけど…
#include<stdio.h>
FILE *comment_remove(const char *filename){ // P5 の時はデータ領域が不正になります
FILE *fp_src, *fp_work;
int moji, is_comment=0;
if((fp_src=fopen(filename, "r"))==NULL) return NULL;
if((fp_work=tmpfile())!=NULL){
while((moji=fgetc(fp_src))!=EOF){
if(moji=='#') is_comment=1;
if(moji=='\n') is_comment=0;
if(!is_comment) fputc(moji, fp_work);
}
fseek(fp_work, 0L, SEEK_SET);
}
fclose(fp_src);
return fp_work;
}
int pgm_info(const char *filename, char *pformat, int *pwidth, int *pheight, int *pdepth){
FILE *fp;
char buf[3+1];
int width, height, depth;
fp=comment_remove(filename);
if(fp!=NULL){
if(fscanf(fp, "%3s%d%d%d", buf, &width, &height, &depth)==4) sprintf(pformat, "%s", buf),*pwidth=width,*pheight=height,*pdepth=depth;
fclose(fp);
}
return 0;
}
121:デフォルトの名無しさん
07/08/30 23:12:07
>>73
>>120 の訂正と使い方 (関数 pgm_info の返り値で成否を判定できるようにした)
int pgm_info(const char *filename, char *pformat, int *pwidth, int *pheight, int *pdepth){
FILE *fp;
char buf[3+1];
int width, height, depth, ret=0;
fp=comment_remove(filename);
if(fp!=NULL){
if(fscanf(fp, "%3s%d%d%d", buf, &width, &height, &depth)==4){
sprintf(pformat, "%s", buf),*pwidth=width,*pheight=height,*pdepth=depth,ret=1;
}
fclose(fp);
}
return ret;
}
int main(void){
char format[3+1];
int width, height, depth;
pgm_info("a.pgm", format, &width, &height, &depth);
printf("format : %s\nwidth : %d\nheight : %d\ndepth : %d\n", format, width, height, depth);
return 0;
}
122:デフォルトの名無しさん
07/08/30 23:29:58
>>109
ありがとうございます。
1,2の方もお願いできませんか
123:デフォルトの名無しさん
07/08/30 23:54:22
>>109
1はyの範囲に制限を付けないと難しいのではないかな。
例えば1900年以降でよいとか、前提はないの?
124:123
07/08/30 23:57:24
失礼、
>>109さんではなく>>101さんあてです
125:デフォルトの名無しさん
07/08/31 00:24:33
>>124
問題を確認しましたが101で書いたことしか載ってませんでした。
126:デフォルトの名無しさん
07/08/31 00:56:07
76の1で
void arr_cycle(int *arr, int len)
{
int i, temp;
temp = a[len-1];
for(i=len-1;i>0;i--) arr[i] = arr[i-1];
a[0] = temp:
}
でソースをかいてくれませんか
127:デフォルトの名無しさん
07/08/31 01:10:34
>>126
日本語でOk
128:デフォルトの名無しさん
07/08/31 02:01:56
>>101
日付チェックはしてない。グレゴリオ暦が使われた年以降。
int leap(int y)
{
return (y%4==0)?(y%100==0)?(y%400==0)?1:0:1:0;
}
int days(int y,int m,int d)
{
int dom[2][12]=
{{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
int day=0,i,j;
j=leap(y);
for(i=0;i<m-1;i++) day+=dom[j][i];
day+=d;
return day;
}
main()
{
int y,m,d;
scanf("%d %d %d",&y,&m,&d);
printf("days=%d\n",days(y,m,d));
}
129:デフォルトの名無しさん
07/08/31 07:51:47
>>101
#include<stdio.h>
int f(int y,int m,int d){
if(m<3)
y--,m+=12;
return y*365+y/4-y/100+y/400+(m+1)*306/10+d-428;
}
int leap(int y){
return f(y,3,1)-f(y,2,29);
}
int days(int y,int m,int d){
return f(y,m,d)-f(y,1,0);
}
int main(void){
int ymd;
printf("yyyymmdd="); scanf("%d",&ymd); printf("leap=%d\ndays=%d\n",leap(ymd/10000),days(ymd/10000,ymd%10000/100,ymd%100));
return 0;
}
#include<stdio.h>
#define PI 3.1415926535897932384626433832795
double rad(double s){
return s*PI/180;
}
double deg(double r){
return r*180/PI;
}
int main(void){
double s;
printf("s="); scanf("%lf",&s); printf("rad(s)=%.9f\ndeg(rad(s))=%.9f\n",rad(s),deg(rad(s)));
return 0;
}
130:デフォルトの名無しさん
07/08/31 09:41:06
>>73 バイナリフォーマットにも対応できるように作りなおしてみた
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int pgm_get_word(FILE *fp, char buf[], int buf_size){
int i=0, moji;
while(i<buf_size-1 && (moji=getc(fp))!=EOF){
if(isspace(moji)){ if(i>0) break; }
else if(moji=='#'){
fscanf(fp, "%*[^\n]");
if(i>0) break;
}else{ buf[i++]=moji; }
}
buf[i]='\0';
if(i>=buf_size-1) while((moji=getc(fp))!=EOF && !isspace(moji)) ;
return (i>0);
}
int pgm_info(const char *filename, char *pformat, int *pwidth, int *pheight, int *pdepth){
FILE *fp;
char format[3+1], width[10+1], height[10+1], depth[4+1];
int ret=0;
fp=fopen(filename, "rb");
if(fp!=NULL){
if(pgm_get_word(fp, format, sizeof(format)) && pgm_get_word(fp, width, sizeof(width)) &&
pgm_get_word(fp, height, sizeof(height)) && pgm_get_word(fp, depth, sizeof(depth)) ){
sprintf(pformat, "%s", format); *pwidth=atoi(width); *pheight=atoi(height); *pdepth=atoi(depth);
ret=1;
}
fclose(fp);
}
return ret;
}
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5330日前に更新/83 KB
担当:undef