C/C++の宿題を片付けます 76代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/06(月) 09:04:35【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 75代目
http://pc8.2ch.net/test/read.cgi/tech/1161257941/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
008381
2006/11/07(火) 19:49:050084デフォルトの名無しさん
2006/11/07(火) 19:50:53if(1) goto owari;
owari:
0085デフォルトの名無しさん
2006/11/07(火) 20:01:54先生がイラつくこと間違い無しの良解答だな
0086デフォルトの名無しさん
2006/11/07(火) 20:11:45最近の教科書にはどんどん使いましょうとか書いてあるのか。
0087デフォルトの名無しさん
2006/11/07(火) 20:12:200088デフォルトの名無しさん
2006/11/07(火) 20:19:26#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 1024
typedef struct tag_word_list{
char *word_data;
struct tag_word_list *next;
}word_list;
void word_add(const char *one_word, word_list **start){
word_list *wl;
for(wl=*start;wl!=NULL;wl=wl->next)
if(strcmp(one_word, wl->word_data)==0) return;
wl=malloc(sizeof(word_list));
wl->word_data=strdup(one_word);
wl->next=*start;
*start=wl;
}
int main(void){
char one_word[BUF_SIZE], dummy[BUF_SIZE];
word_list *wl=NULL;
while(!feof(stdin)){
one_word[0]='\0';
if(fscanf(stdin, "%[a-zA-Z-]", one_word)==1) word_add(one_word, &wl);
fscanf(stdin, "%[^a-zA-Z-]", dummy);
}
for(;wl!=NULL;wl=wl->next)
printf("%s\n", wl->word_data);
return 0;
}
0089デフォルトの名無しさん
2006/11/07(火) 20:31:37以下の様なプログラムを作りなさい。
・メイン関数の引数を用いてユーザ名とパスワードの前半部分を入力する。
・scanfを用いてパスワードの後半部分の入力を要求する。
・前半部分と後半部分を連結して1つのパスワードにする。
・前もって決めたパスワードと一致するか調べ、一致する場合には「OK, ユーザ名」のメッセージを
表示し、一致しない場合はパスワードの文字数を表示する。
以下、自分で考えてみたプログラムです。
#include<stdio.h>
#include<string.h>
#define MAX 20
int main(int argc, char *argv[]) /* ユーザ名をargv[1]としてパスワードの前半をargv[2]とします。*/
{char x[MAX], y[MAX], password[MAX]=abcd;
int i, k, flag=1;
scanf("%s", x);
y[MAX] = *strcat(argv[2], x);
k = strlen(strcat(argv[2], x));
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
if(flag == 1)
printf("OK, %s\n", argv[1]);
else
printf("パスワードの長さ:%d", k);}
ユーザ名はVVVでパスワードの前半はabで実行しパスワードの後半はcdを入力してみたのですが、
ちゃんとなりませんでした。どこをどのように訂正すれば良いのでしょうか?
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2006年11月8日18:00まで
[5] その他の制限: C言語を始めて4ヶ月程度なのであまり上級な知識は避けて頂けると助かります。
0090デフォルトの名無しさん
2006/11/07(火) 20:34:42#include <stdio.h>
#include <time.h>
void p(int i) { printf("%d ", i); fflush(stdout); }
int proc(void)
{
int a, b, c, d, e; double x, y, z, f[200];
for (e = 1; e < 200; e++)
f[e] = (double)e * e * e * e * e;
for (e = 1; e < 200; e++)
for (p(e), d = 1; d < e; d++)
for (c = 1; c < d && (z = f[c] + f[d]) < f[e]; c++)
for (b = 1; b < c && (y = f[b] + z) < f[e]; b++) {
for (a = 1; a < b && (x = f[a] + y) < f[e]; a++)
;
if (x == f[e])
return !printf("\na=%d b=%d c=%d d=%d e=%d\n",
a, b, c, d, e);
}
return printf("not found\n");
}
int main(void)
{
clock_t t = clock();
proc();
printf("%g\n", difftime(clock(), t) / CLOCKS_PER_SEC);
return 0;
}
0091デフォルトの名無しさん
2006/11/07(火) 20:39:180092デフォルトの名無しさん
2006/11/07(火) 20:42:01[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse(char *str)を作成せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限:明日まで
[5] その他の制限: インクルードはstdio.hのみでお願いします。
「C言語プログラミング」と文字列に入れたら「グンミラグロプ語言C」と出力されるようにお願いします。
0093デフォルトの名無しさん
2006/11/07(火) 20:43:08[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):ある商店でメロンを販売している。この商店では購入個数が増えると1個あたりの単価が安くなる。メロン1個の仕入価格は1000円である。またメロンの購入個数と単価の関係は以下のようになっている。
5個未満:1個あたり2000円
10個未満:1個あたり1900円
15個未満:1個あたり1500円
20個未満:1個あたり1400円
20個以上:1個あたり1200円
客がn人買いにきたとして、格客の購入個数を入力し、それぞれの支払い価格と商店の総販売価格と総利益出力するプログラムを作成せよ。nはプログラム開始時に読み込むこと。
[3] 環境
[3.1] OS:Windows
[3.3] 言語:C++
[4] 期限:明日
0094デフォルトの名無しさん
2006/11/07(火) 20:47:19password[MAX]=abcd;
↓
password[MAX]="abcd";
y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
↓
flag=(strcmp(y, password)==0);
0095デフォルトの名無しさん
2006/11/07(火) 20:59:06return忘れてるぞ
0096デフォルトの名無しさん
2006/11/07(火) 20:59:26文字コードの指定はないのか?
内部で判別するの?
シフトJIS限定?
0097デフォルトの名無しさん
2006/11/07(火) 21:03:46>引数で受け取った全角文字列を逆順に入れ替える
>〜と出力されるように
どっちだ?
むしろ出力したら駄目なんじゃないかな?かな?
009892
2006/11/07(火) 21:04:37009989
2006/11/07(火) 21:17:45>>94
あ、「"」つけるの忘れてました。
y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
についてですが、sprintfは、まだ習って無いです。strcatを使って出来ないですかね?
strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
それだとコンパイルに通らないですし。
>>95
あ、リターンも忘れてました。
0100デフォルトの名無しさん
2006/11/07(火) 21:21:46010192
2006/11/07(火) 21:21:48int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str++){
tmp = *(--p);
*p = *str;
*str = tmp;
}
return 0;
}
main(void)
{
char str[30]="abcde";
printf("reverse関数実行前\n%s\n",str);
printf("reverse関数実行後\n");
reverse(str);
printf("%s",str);
return 0;
}
1バイト文字をreverse関数で逆順に並べ替えて、main関数で出力はできたのですが、
2バイト文字だと文字化けしてしまいます。
0102デフォルトの名無しさん
2006/11/07(火) 21:23:27今逆行列を求めるプログラムを作っていて
完全陰解法とSOR法では作り終えてるんですが
行列を増やすとそれほど精度が出ない(発散してしまう)ので困っています。
他に逆行列(n元一次方程式)を解く方法はないのでしょうか?
またよいサイトなどありましたら教えてください。
0103!=94
2006/11/07(火) 21:24:40> strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
うん、strcatでもいけるんだな。
ただ、strcatは何を返すの?そして、*演算子は何をするもの?
char y[MAX];
と定義した変数yの型は何?配列とポインタ理解してる?
0104デフォルトの名無しさん
2006/11/07(火) 21:30:18int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str+=2){
tmp = *(--p,--p);
*p = *str;
*str = tmp;
tmp = *(p+1);
*(p+1) = *(str+1);
*(str+1) = tmp;
}
return 0;
}
010592
2006/11/07(火) 21:39:072バイト文字が正常に逆順に出力されました。
宿題ではないのですが、
もしこれが1バイト文字、2バイト文字が混合されていた場合はどうすればいいのでしょうか?
0106デフォルトの名無しさん
2006/11/07(火) 21:41:17[1] 情報演習のスキル�T
[2] 素数を求めるプログラム
[3] 環境
[3.1] OS: WindowsXP
[3.2] cygwin
[3.3] C
[4] 期限: 11月14日
お願いします。
0107デフォルトの名無しさん
2006/11/07(火) 21:42:34文字コードがわからなきゃムリ
0108デフォルトの名無しさん
2006/11/07(火) 21:44:441) 固定長のwchar_tに変換して処理→単一の処理、変換の必要あり
2) 文字種(1バイト文字か2バイト文字か)を判別して処理→エンコードごとに処理が別、変換の必要なし
0109デフォルトの名無しさん
2006/11/07(火) 21:45:48UNICODEは全部2バイトだから判別する必要なし
JISはエスケープシーケンスの切り替えを検出
シフトJISは2バイト文字の1バイト目かどうか調べる
EUCは最上位ビットを検査
0110デフォルトの名無しさん
2006/11/07(火) 21:51:270111デフォルトの名無しさん
2006/11/07(火) 21:53:32#include <stdio.h>
int main()
{
char s[8]
puts("素数を入力してください");
gets(s);
return 0;
}
0112再帰式
2006/11/07(火) 21:56:05[2] 問題文(含コード&リンク):x^3-2x+5=0の近似解を反復法により計算せよ。
参考URL(反復法):http://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E6%B3%95_(%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:C
[4] 期限:明日の午前中までにお願いいたします
�@
#include <stdio.h>
#include <math.h>
#define g(x) (pow(x, 3)+2*x-5)/(2*pow(x, 2))
int main(void)
{ double e,f,x,x1;
e=pow(10,-7.0);
f=fabs(x1-x);
x1=1000;
while(f > e)
{ f=fabs(x1-x);
x=x1;
x1=g(x);
}
printf("解は%1.16lf\n",x1);
return 0;
}
0113再帰式
2006/11/07(火) 21:57:49#include <stdio.h>
#include <math.h>
int main(void)
{
double e,f,x,x1,Xn;
e=pow(10,-7.0);
f=fabs(x1-x);
x1=1000;
while(f > e)
{
Xn=(pow(x, 3)+2*x-5)/(2*pow(x, 2));
f=fabs(x1-x);
x=x1;
x1=Xn;
}
printf("解は%1.16lf\n",x1);
return 0;
}
�@と�Aの違いはどこなのでしょうか?
できれば�Aで実行して成功させたいのですが、どこがおかしいのか分かりません。
アドバイスお願いいたします。
0114デフォルトの名無しさん
2006/11/07(火) 21:59:52/*
pが指すマルチバイト文字の長さを返す
このへんはmbrlenとか使ったほうがいい気もするけど
stdio.hしか使うなという条件を守るために使わない
*/
size_t mblen(const char*p){
/* S-JIS決め打ち */
return (*p&0x80) ? 2 : 1;
}
/*
指定したメモリブロックをreverseする
*/
void memrev(char*str,size_t n){
char*p = str+n;
if(str == p)return;/*C言語のポインタの有効範囲の仕様を守るため*/
for(;str < --p;++str){
char c=*str;*str=*p;*p=c;
}
}
/*
マルチバイト文字を考慮したreverse
*/
void reverse(char*str){
int len = 0;
while(str[len]){
int c = mblen(str+len);
memrev(str+len,c);
len+=c;
}
memrev(str,len);
}
0115デフォルトの名無しさん
2006/11/07(火) 22:00:52#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *sieve_of_eratosthenes(int upper) {
int i, notprime, *integers = (int*)malloc(sizeof(int) * (upper + 1));
for (i = 2; i <= upper; i++) integers[i] = 1;
integers[0] = integers[1] = 0;
for (i = 2; i <= upper / 2; i++) {
notprime = i;
while ((notprime += i) <= upper) integers[notprime] = 0;
}
return integers;
}
int is_prime(int n) {
int *sieve = sieve_of_eratosthenes(n), ret = sieve[n];
free(sieve);
return ret;
}
int main(void) {
int upper_num, *sieve, i;
printf("MAX?:");
scanf("%d", &upper_num);
sieve = sieve_of_eratosthenes(upper_num);
for (i = 2; i <= upper_num; i++)
if (sieve[i]) printf("%4d", i);
free(sieve);
}
0116デフォルトの名無しさん
2006/11/07(火) 22:07:10[2] 問題文(含コード&リンク):第1因数に含まれる第2因数と第3因数の間にある文字列を返す関数を作る(因数はすべて文字列)
[3] 環境
[3.1] Linux
[3.2] gcc 3.4
[3.3] C
[4] 期限: 11/9
[5] その他の制限:特になし
0117デフォルトの名無しさん
2006/11/07(火) 22:07:52for (i = 2; i <= upper / 2; i++) {
+ if (!integers[i]) continue;
notprime = i;
これがないと篩になってないかと。
0118デフォルトの名無しさん
2006/11/07(火) 22:10:47なんで表示してるの?
011992
2006/11/07(火) 22:16:580120デフォルトの名無しさん
2006/11/07(火) 22:20:01#include<stdio.h>
int get_price(int number){
if(number<5) return 2000;
if(number<10) return 1900;
if(number<15) return 1500;
if(number<20) return 1400;
return 1200;
}
int main(void){
int i, n, m;
int total_price=0, total_profit=0;
printf("客の人数を入力してください ");
scanf("%d", &n);
for(i=0;i<n;i++){
printf("購入個数を入力してください ");
scanf("%d", &m);
total_price+=m*get_price(m);
total_profit+=m*(get_price(m)-1000);
printf("\n支払い価格 %d 円\n", m*get_price(m));
}
printf("\n総販売価格 %d 円\n総利益 %d 円\n", total_price, total_profit);
return 0;
}
0121デフォルトの名無しさん
2006/11/07(火) 22:28:41堅苦しいことを言えば、そもそもwchar_tはUnicodeと決まっているわけではないし、
文字集合がUnicodeでも、符号化にUTF-8やUTF-16を使っていれば、固定長とは限らないわけで。
0122デフォルトの名無しさん
2006/11/07(火) 22:59:42これはシンタックスエラーな問題文ですね
0123デフォルトの名無しさん
2006/11/07(火) 22:59:58y[0]='\0';
strcat(y, argv[2]);
strcat(y, x);
または
strcpy(y, argv[2]);
strcat(y, x);
0124デフォルトの名無しさん
2006/11/07(火) 23:00:43s/因数/引数/g
でいいのかな?
0125デフォルトの名無しさん
2006/11/07(火) 23:05:19というより、いろんな意味に取れるのが問題かと…
>>116 のやりたい事は何となく分かるんだけどね
コマンド
./a.out futongafuttonda uton utton
実行結果
gaf
ってところか
0126デフォルトの名無しさん
2006/11/07(火) 23:09:09>関数を作る
main も関数には違いないけど、多分題意とは違うとおもふ。
0128デフォルトの名無しさん
2006/11/07(火) 23:53:22事前に200までの5乗を計算するだけでも現実的時間で終わるよ
0129デフォルトの名無しさん
2006/11/07(火) 23:55:100130デフォルトの名無しさん
2006/11/07(火) 23:58:44計算するアルゴリズムはほとんど一緒なんだが、
多倍長整数の計算が遅くて><
double で計算するなんて思いつきもしなかった…
0131デフォルトの名無しさん
2006/11/08(水) 00:06:240132デフォルトの名無しさん
2006/11/08(水) 00:09:37long long使ってもいいんじゃない?
>>35はVC++6.0だからわからんけど、最近のなら対応してる
0133OS
2006/11/08(水) 00:16:50[2] 問題文(含コード&リンク):
第4回課題 セルオートマトンの動作推移を表現する。
・渋滞の様子をC++を使って表現する。
・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。)
・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。)
・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。
以下に、例を示す。
問題 □□■□■□が与えられるとする。
t=1 □■□■□□
t=2 ■□■□□□
t=3 □■□□□□
t=4 ■□□□□□
終了
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: VC6.0
[3.3] 言語: C、C++ (出来ればC++が望ましい。)
[4] 期限: 2006年11月8日 23:59まで(出来れば23時まで。)
[5] その他の制限: 特になし
0134OS
2006/11/08(水) 00:18:380135 ◆rqrMes8uog
2006/11/08(水) 00:50:42[2] 問題文(含コード&リンク):
最初にあなたは 1 から 99 までの範囲で数を一つ頭に思い浮かべます.
推測値を提示し,その推測が当たっているかどうか,
当たっていなければより大きいか小さいかを繰り返し質問して,
あなたからの答に基づいて推測値を改善し,
最終的にあなたが思い浮かべた数を言い当てるプログラムを作成しなさい.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C++
[4] 期限: 2006年11月8日(水)23:59まで
[5] その他の制限:
・質問への答え方では,「当たりなら0,もっと小さければ1,
もっと大きければ2を入力してください」といったルールを示す。
・質問に対する想定外の答え方には警告を出す
・正しい数を当てるまでにかかった回数を数えて,その回数に応じたメッセージを出す.
・コンピューターからの最初の質問は「50ですか?もっと大きい?小さい?」とする。
以上です。C++を始めたばかりです。
>>133と期限がかぶってしまいまして、すいません。
どうか宜しくお願いします!
0136デフォルトの名無しさん
2006/11/08(水) 01:10:29VC6なら型名は__int64、printfの変換指定子は%I64dね。
0137デフォルトの名無しさん
2006/11/08(水) 01:41:55すまん、俺自身セルオートマトンをいまいち理解してないのだが、
これって塗りつぶしセルが時間に従って左側に移動しているだけであって、
空白セル云々は関係ないように見えるんだが(例を見る限り)
0138デフォルトの名無しさん
2006/11/08(水) 01:43:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2898.cpp
0139デフォルトの名無しさん
2006/11/08(水) 02:09:29http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2899.txt
0140デフォルトの名無しさん
2006/11/08(水) 02:32:07鬼才だなwワロタww
0141デフォルトの名無しさん
2006/11/08(水) 02:53:580142デフォルトの名無しさん
2006/11/08(水) 02:59:18確かに。マイテンプレを修正しておく。
0143デフォルトの名無しさん
2006/11/08(水) 02:59:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2900.c
0144デフォルトの名無しさん
2006/11/08(水) 03:00:010145デフォルトの名無しさん
2006/11/08(水) 03:06:06そもそも機能を覚えさせようとしてるだけであって
推奨してるわけではないだろう
goto文の是非にあたってはここで議論すべきないようではないし
0146 ◆rqrMes8uog
2006/11/08(水) 03:24:130147OS
2006/11/08(水) 04:49:05おそらく、発展問題として、今後
□□■
は
□■□
となるが、
■□■
は
■■□
となる左側で止めてしまう場合があるのです。
この問題は、渋滞の研究に使うものなので、□は、動ける場所、■は、渋滞していて動けない場所というものです。
0148OS
2006/11/08(水) 05:01:07発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。
nは、コマンドラインから入力。(入力方式は問わない。)
(例)
t=1 ■□■
t=2 ■■□
t=3 ■■□
t=4 ■■□
t=5 ■□□
この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。
今、この場合のプログラムも考えてますが、どうも徹夜気味です。宜しくお願いします。
0149デフォルトの名無しさん
2006/11/08(水) 11:51:13[2]
● 2つの自然数を入力して、その間にある素数を表
示するプログラムを作成しましょう。
■ プロジェクト名:07prime ファイル名:07prime.c
■ 入力:整数(自然数)を2つ
■ 大小関係が逆でも対応できるようにすること。
■ 処理:2つの自然数の間で素数の場合、その数を表示
する
■ 素数:1と自分自身以外は割り切れない数
■ 出力:素数の値
■ 自分の学籍番号下4桁と下4桁+100で試してみよう
■ ソースコードを印刷し、自分の学籍番号下4桁と下4桁
+100の結果を記入して、提出しましょう
[3]WindowsXP
[4]11月13日
0150115
2006/11/08(水) 12:12:35>>149
#include <stdio.h>
int main(void) {
int i, j, min, max, temp;
scanf("%d%d", &min, &max);
if (min > max) {
temp = min;
min = max;
max = temp;
}
for (i = min; i <= max; i++) {
for (j = 2; j <= i; j++) if (i % j == 0) break;
if (i == j) printf("%5d", i);
}
return 0;
}
0152デフォルトの名無しさん
2006/11/08(水) 12:33:05画面表示までやるのか、表示はgnuplotに任せちゃっていいのか
0153デフォルトの名無しさん
2006/11/08(水) 13:19:40>>69
69は0.02になってるけどな
表示くらい自分でできるだろ
0154デフォルトの名無しさん
2006/11/08(水) 15:30:08[2] 問題文(含コード&リンク): 名前と5教科の点数(国語、数学、社会、理科、英語)と
基準点を入力して、基準点以上の該当科目と点数を表示する関数
void search(int *mark,int std)を作成せよ。
mark:点数配列 std:基準点
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC6.0
[3.3] 言語: C
[4] 期限: 決まってないです。
[5] その他の制限: 現在、配列とポインタのところをやっています。
よろしくお願いします。
0155デフォルトの名無しさん
2006/11/08(水) 15:39:02それで間違いないの?
0156154
2006/11/08(水) 16:00:35国語の点数:「40」
数学の点数:「50」
社会の点数:「60」
理科の点数:「70」
英語の点数:「80」
基準点:「60」
テストユーザーさんの60点以上の科目は〕
(社会の点数:60
理科の点数:70
英語の点数:80)
〔〕の処理をmain関数で、
「」をscanfでキーボードから入力し
()の部分をsearch関数内でやるのだと思うのですが
0157デフォルトの名無しさん
2006/11/08(水) 16:13:17[2] 問題文(含コード&リンク):
1、自然数n を一つ読み込み、n が2 でも3 でも割り切れない場合は「!」を、
そうでない場合は「@」を画面に書き出すプログラムを作成せよ。
2、自然数n を一つ読み込み、それに続いて画面に2, 4, 6, ... 2n を(都合n 個)
画面に書き出すプログラムを作成せよ。
3、自然数n を一つ読み込み、それを2 で何回割ると0 になるかを数え、その回
数を画面に書き出すプログラムを作成せよ。なお、割り算において割り切れ
ない場合は結果を切り捨てて整数にするものとする。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: (不明)
[3.3] 言語: (C++)
[4] 期限: 明日の正午までには…
お願いいたします。授業内容が早すぎてまともにできません…
0158デフォルトの名無しさん
2006/11/08(水) 16:16:11授業が早いなんて信じられない
0159デフォルトの名無しさん
2006/11/08(水) 16:20:24void func1(int n)
{
printf("%c\n",(n%2 != 0 && n%3 != 0) ? '!' : '@');
}
void func2(int n)
{
int i;
for(i = 2; i<=2*n; i*=2)
printf("%d,",i);
}
void func3(int n)
{
int c=0;
while((n>>c) != 0)c++;
printf("%d回\n",c);
}
0160デフォルトの名無しさん
2006/11/08(水) 16:31:23言いたいことは大体分かるんだが、どうにも例が怪しい。
t=4とt=5の間の遷移はおかしくないか?
そもそも147-148は誰に向けて言ってるの?
0161デフォルトの名無しさん
2006/11/08(水) 16:33:48#include <stdio.h>
#include <stdlib.h>
char subject[6][7] = {"国語","数学","社会","理科", "英語","基準点"};
void search(int *mark,int std)
{
int i;
for(i=0; i<5; i++)
if(mark[i] >= std)
printf("%sの点数:%d\n",subject[i],mark[i]);
}
int main(int argc, char *argv[])
{
int mark[6];
int i;
char name[64];
printf("名前:");
scanf("%s",name);
for(i=0; i<6; i++)
{
printf("%sの点数:",subject[i]);
scanf("%d",&mark[i]);
}
printf("%sさんの%d点以上の科目は\n",name,mark[5]);
search(mark, mark[5]);
return 0;
}
0162デフォルトの名無しさん
2006/11/08(水) 16:37:34訂正
void func2(int n)
{
int i;
for(i = 2; i<=2*n; i+=2)
printf("%d,",i);
}
0163デフォルトの名無しさん
2006/11/08(水) 16:47:47こんなんどうだべ?環境依存だけんども。
#include <stdio.h>
#define 科目数 5
char* kamoku[科目数] = {"国語", "数学", "社会", "理科", "英語"};
void search(int* mark, int std)
{
int i;
char* name = (char*) mark[5];
printf("名前 : %s\n", name);
for(i=0; i!=科目数; i++)
if(mark[i] >= std)
printf("%s : %d点\n", kamoku[i], mark[i]);
}
int main(void){
int i;
int mark[科目数+1];
char name[] = "与太郎";
for(i=0; i!=科目数; i++){
printf("%s 点数>", kamoku[i]); scanf("%d", &mark[i]);
}
mark[5] = (int) name;
search(mark, 50);
return 0;
}
0164デフォルトの名無しさん
2006/11/08(水) 16:54:340165デフォルトの名無しさん
2006/11/08(水) 16:56:260166デフォルトの名無しさん
2006/11/08(水) 17:08:070167デフォルトの名無しさん
2006/11/08(水) 17:11:570168デフォルトの名無しさん
2006/11/08(水) 17:13:28業務プログラムを作ってごらん
ローマ字だらけのプログラムになるから
0169デフォルトの名無しさん
2006/11/08(水) 17:25:16kaisuu
とか使うなあ
0170デフォルトの名無しさん
2006/11/08(水) 17:32:35VC++6.0で通るかは知らんが、こうしたっていいくらいだべ。
#define 科目数 5
#define 末尾 科目数
char* 科目名[科目数] = {"国語", "数学", "社会", "理科", "英語"};
void search(int* mark, int std)
{
int カウンタ;
char* 名前 = (char*) mark[末尾];
printf("名前 : %s\n", 名前);
for(カウンタ=0; カウンタ!=科目数; ++カウンタ)
if(mark[カウンタ] >= std)
printf("%s : %d点\n", 科目名[カウンタ], mark[カウンタ]);
}
0172デフォルトの名無しさん
2006/11/08(水) 17:39:29[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2902.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語: C
[4] 期限:10日まで
[5] その他の制限:
0173デフォルトの名無しさん
2006/11/08(水) 17:50:21[2] 問題文(含コード&リンク):
jpg画像をファイルから読み込み、それを拡大縮小できるようにし、拡大(または縮小)した画像をjpgで保存するプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:2006/11/13
[5] その他の制限:
よろしくお願いします
0174デフォルトの名無しさん
2006/11/08(水) 18:49:09それは自分でデコードするのか?
それともlibjpegとか使っていいの?
0175デフォルトの名無しさん
2006/11/08(水) 19:05:28全部自力って・・・
0176デフォルトの名無しさん
2006/11/08(水) 19:31:42出来なくもないし画像処理演習
なんだからやっても何の不思議もない
0178デフォルトの名無しさん
2006/11/08(水) 19:45:00http://www.amazon.co.jp/gp/product/4797330457
JPEGはこれをパクれ
JPEGのデコードやらせるくらいの演習だから、拡大縮小は自分でできるよな?
0179デフォルトの名無しさん
2006/11/08(水) 19:45:21できればとかじゃなくて宿題でどういう指示が出たかが問題なんじゃないの
教員が想定してないレベルの宿題を他人に作らせると後々ややこしくなるだけだぜ
0180173
2006/11/08(水) 19:54:00完成品のプログラムを見てヒントもらいたいだけだ
拡大縮小処理もたぶんできてる
libjpeg使ってもいいから早くやって下さい
0181デフォルトの名無しさん
2006/11/08(水) 19:58:24http://www.amy.hi-ho.ne.jp/jbaba/jpeg11.htm
JPEG->DIBの完成品のプログラムあるよ
0182デフォルトの名無しさん
2006/11/08(水) 20:00:15#include <stdio.h>
int kaijo(int n) {
if (!n) return 1;
else return n * kaijo(n - 1);
}
double mycos(double x) {
int i, s = -1;
double r = 1, xn = x * x;
for (i = 2; i <= 10; i += 2, xn *= x * x, s *= -1) {
r += s * xn / kaijo(i);
}
return r;
}
double mysin(double x) {
int i, s = -1;
double r = x, xn = x * x * x;
for (i = 3; i <= 11; i += 2, xn *= x * x, s *= -1) {
r += s * xn / kaijo(i);
}
return r;
}
int main(void) {
int i;
printf("x cos sin\n");
for (i = -28; i != 29; i++)
printf("% .1f % .8f % .8f\n", i / 10., mycos(i / 10.), mysin(i / 10.));
}
■ このスレッドは過去ログ倉庫に格納されています