07/06/28 00:22:52
>>355
をお願いしたいのですが
391:デフォルトの名無しさん
07/06/28 00:40:33
>>390
while(j>=0 && x[j]>t) { を
while(j>=0 && x[j]<t) { に変更するだけじゃ駄目かな?
inp1.datとか用意するのだるいからまともに見てないけど
392:デフォルトの名無しさん
07/06/28 00:50:17
>>387
すいません、実行例とは何でしょうか?
>>388
自分でここまでは作ったのですが、最初にアルファベットを打ったときなど
特殊な対応が出来ません。また、全く自信がないためです。
393:デフォルトの名無しさん
07/06/28 00:54:23
今、コンパイルが出来ない環境なので確認できないのですが、いまいち右からつめる
降順の解釈の仕方がわからないんです。
左を右に、昇順を降順にしなくてはいけないので、while(j>=0 && x[j]<t) {の変更
だけでは出来ないと思うのですが。
394:デフォルトの名無しさん
07/06/28 00:56:53
>>392
実行例は例えばこのプログラムを実行するとこういう出力になって欲しいんですよ、的な内容。
入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
どの程度のレベルかわからんが、学校授業で4月開始なら上等なレベルかと。
395:デフォルトの名無しさん
07/06/28 01:00:55
>>392 こんなのはどうかな。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c, max = -1, m, n, nc = 0, f, sign = 1;
while ((c = getchar()) != EOF) {
if (isdigit(c)) {
n = f = 0;
do {
if ((m = n * 10 + c - '0') < n) f = 1;
n = m;
} while ((c = getchar()) != EOF && isdigit(c));
ungetc(c, stdin);
if (f) puts("桁あふれしますた");
else {
n *= sign;
printf("%d\n", n);
if (n > max) max = n;
if (++nc == 10) break;
}
}
else if (c == '-') { sign = -1; }
else sign = 1;
}
if (max != -1) printf("最大値: %d\n", max);
return 0;
}
396:デフォルトの名無しさん
07/06/28 01:10:04
>>393
ああ、右からつめるってそういうことか
単に降順にすればいいだけかと思ってた
めんどくさいからパス。せめてdatファイルがあればなぁ
397:デフォルトの名無しさん
07/06/28 01:16:17
datファイルでなくても、テキストファイルに整数を入れてinp.txtとしても大丈夫だと思うのですが。
398:デフォルトの名無しさん
07/06/28 01:18:19
>>392
ありがとうございます。
10回数字を入力して(ただし、アルファベット、空欄など数字でないやつははじく。また、小数点にも対応する)
桁数は自分で設定し(私のやつは適当に5桁)、最大値を出力する。
>>入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
ずばり、バッファリングの理解が甘く、そこのプログラムが打てず悩んでいます。
分かる方、どうかやり方をご教授願います。
>>392
すいません。書き忘れてしまったのですが、入力の終了はEOFではなく改行でといわれています。
399:デフォルトの名無しさん
07/06/28 01:19:44
>>398
アンカーのつけかたを覚えなさい。全部自分へのレスになってるよ
400:デフォルトの名無しさん
07/06/28 01:21:49
>>398
全て自分に安価する君に惚れたwww
atoi関数に渡す前に
if ( '0' <= str[ j ] && str[ j ] <= '9' ) {
とかでいいんじゃない?
ソースあんま読んでないから、的外れだったらスマソ。
401:デフォルトの名無しさん
07/06/28 01:22:13
>>397
それを用意するのがだるいんだ
まぁやる気が無いだけなんだけどさ
402:デフォルトの名無しさん
07/06/28 01:22:23
>>399
あせってコピペしてしまいました。大変申し訳ありませんでした。
403:デフォルトの名無しさん
07/06/28 01:23:45
>>378
元のプログラムをあまり書き換えないでお願い出来ますか。
注文ばかりですいません。
404:デフォルトの名無しさん
07/06/28 01:28:23
>>400
atoiの前にif ( '0' <= str[ j ] && str[ j ] <= '9' ) {
??????
すいません意味が分かりません。どういうプログラムになるのでしょうか?
405:デフォルトの名無しさん
07/06/28 01:29:31
>>401
無理を言って申し訳ありません。
では、左からつめるを右からに書き換えるにはどうすればいいでしょうか。
406:デフォルトの名無しさん
07/06/28 01:39:11
>>405
左端が0 右端がn-1
今はj=0とかi=1からだんだん加算されていってn-1までループしているのを
n-1から減算していって0までループさせればいい
407:デフォルトの名無しさん
07/06/28 01:47:17
>>355 >>405
for(i=n-2;i>=0;i--) {
t=x[i];
j=i+1;
while(j<=n-1 && x[j]>t) {
x[j-1]=x[j];
j++;
}
x[j-1]=t;
}
てきとー まさかどこと差し替えればいいかなんか聞くなよ?
408:デフォルトの名無しさん
07/06/28 01:49:57
URLリンク(www.infonet.co.jp)
EBCDICでも0~9は連続したコードに登録されているからおkだお ^ω^
409:デフォルトの名無しさん
07/06/28 01:59:50
>>404
ちょっと無理矢理だけど例えば、str[j] = getchar();に下に次の1文を入れてみる。
if ( (str[j] < '0' || '9' < str[j]) && str[j] != '\n' ) j--;
今回getchar関数によって入力された文字が数字じゃなければ、読み込まなかったことにする。
ただ、改行コードもはじかれちゃうのでそれはOKにしておく。
極力、今のソースに手を加えないで変更しようとしたらこんなのになってゴメン・・・orz
410:デフォルトの名無しさん
07/06/28 02:01:29
>>406>>407
ありがとうございます。参考にさせていただきます。
もうひとつ>>359についてお願いできますか?
>>378さんが答えて下さっているのですが、元のプログラムの値をあまり
書き換えないで欲しいのですが。
411:デフォルトの名無しさん
07/06/28 06:01:56
[1] 授業単元:プログラミング
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:WindowsXP
[3.3] 言語:c言語
[4] 期限:6月30日(木)
412:デフォルトの名無しさん
07/06/28 08:34:40
>411
(1)
#include <stdio.h>
#include <stdlib.h>
void putchar_n(char c1, char c2, int num){
if(num <= 0){
return;
}
putchar(c1);
putchar_n(c1,c2,num-1);
putchar(c2);
}
int main(int argc, char* argv[]){
if(argc != 4){
return 1;
}
putchar_n(argv[1][0],argv[2][0],atoi(argv[3]));
printf("\n");
return 0;
}
413:デフォルトの名無しさん
07/06/28 08:44:04
>>411
(2)
#include <stdio.h>
int main(){
int i = 0;
for(i = 0 ; i+31 < 126+1 ; i++){
printf("%c %d %o %x\n",i+31,i+31,i+31,i+31);
if(i%8 == 7){
printf("--------------------\n");
}
}
return 0;
}
414:デフォルトの名無しさん
07/06/28 10:10:46
>>409
ありがとうございます。
ただやってみたのですが、例えば「fsa256」や「256faj」などを入れるとそれも256として
反映されてしまいます。
何とかはじく方法があればと思うのですが・・・。
415:デフォルトの名無しさん
07/06/28 10:14:22
>>410ですが、>>378さんの書いてくださったプログラムをコンパイルしてみたところ、
35以上でかつ95未満の要素の数の処理は出来たのですが、countの要素の合計の処理が
0となり、うまく処理出来ませんでした。
416:デフォルトの名無しさん
07/06/28 10:39:07
getcharじゃなきゃだめなの?
417:デフォルトの名無しさん
07/06/28 10:46:53
まあそれはいいとして
atoi使わずに
URLリンク(www.bohyoh.com)
使えば済む話だと思う
418:デフォルトの名無しさん
07/06/28 10:55:29
>>415
main()だけ修正
int main(void) {
int i, *x, n, size, count[11] = { 0 }, sum;
setp(&x, array(&size));
for (set(&i,0); less(i,size); inc(&i)) {
set(&n,div(at(x,i),10));
if (less(10,n)) set(&n,10);
inc(&count[n]);
}
for (set(&i,0); less(i,10); inc(&i))
printf("%3d台: %d\n", mul(i,10), at(count,i));
set(&sum,0);
for (set(&i,0); less(i,11); inc(&i))
set(&sum,pls(sum,at(count,i)));
printf("countの要素の合計は%d\n",sum);
if (eq(sum,size))
printf("総和は正しいです\n");
else
printf("総和が違います\n");
for (set(&n,0),set(&i,0); less(i,size); inc(&i))
if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
printf("35以上でかつ95未満の要素の数は%d\n", n);
return 0;
}
419:418
07/06/28 10:57:07
すまん、化けたか?
int main(void) {
int i, *x, n, size, count[11] = { 0 }, sum;
setp(&x, array(&size));
for (set(&i,0); less(i,size); inc(&i)) {
set(&n,div(at(x,i),10));
if (less(10,n)) set(&n,10);
inc(&count[n]);
}
for (set(&i,0); less(i,10); inc(&i))
printf("%3d台: %d\n", mul(i,10), at(count,i));
set(&sum,0);
for (set(&i,0); less(i,11); inc(&i))
set(&sum,pls(sum,at(count,i)));
printf("countの要素の合計は%d\n",sum);
if (eq(sum,size))
printf("総和は正しいです\n");
else
printf("総和が違います\n");
for (set(&n,0),set(&i,0); less(i,size); inc(&i))
if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
printf("35以上でかつ95未満の要素の数は%d\n", n);
return 0;
}
420:デフォルトの名無しさん
07/06/28 11:02:03
>>414
後から細々と注文をつけるんなら、「正しい入力」を正確に定義汁。
最初に正確に仕様を述べないから、>>1で言う
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
の状況に結果的にはなっている。
正規表現で言うと、
^-?[0-9]{0,5}$
以外はエラーと思っていいのかな。
負値はどうする?マイナスの場合の桁数の処理は?スペースも許さない?
00004
は正常?
421:デフォルトの名無しさん
07/06/28 11:30:41
-0や00や-000はどうか?という問題もある。
^(0|[1-9][0-9]{0,4}|-[1-9][0-9]{0,3})$
こうか?
422:デフォルトの名無しさん
07/06/28 12:01:40
>>374>>382
早速のレスありがとうございます。ためしにやってみたのですが、うまくいきませんでした。
できれば、
1
/\
/ \
2 3
/\ /\
4 5 6 7
このように表示できたらいいです。表示するデータは3桁の整数です。
おねがいいたします。
423:デフォルトの名無しさん
07/06/28 12:36:11
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
コマンドライン引数から十進整数値として解釈できる文字列のみを選び、
値が小さい順に並べ替えて、一行に一つずつ標準出力に出力するプログラムを書け。
ただし、十進整数値として解釈できる文字列とは、正規表現 ^[-+]?[0-9]+$ に
マッチするものとする。
ヒント:小さい順に並べ替えるには、 qsort()が便利です。
こちらも、使い方は、manコマンドで調べることができます。
コマンドライン引数すべてについて、 含まれるアルファベットすべてを対応する大文字に置き換えて、
一行にコマンドライン引数一つずつ標準出力に出力するプログラム。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:今週中
[5] その他の制限: 特になしです
どうかよろしくお願いします。
424:デフォルトの名無しさん
07/06/28 12:44:31
>>419さん、>>378さんのプログラムと変更が無いようなのですが。
コンパイルしても変わりませんでした。
425:デフォルトの名無しさん
07/06/28 12:48:03
>>423
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp = popen("egrep '^[-+]?[0-9]+$' | sort -n", "w");
while (*++argv)
fprintf(fp, "%s\n", *argv);
pclose(fp);
return 0;
}
426:デフォルトの名無しさん
07/06/28 12:50:09
>>424
もう一度確認してみろ。
427:デフォルトの名無しさん
07/06/28 13:53:21
[1]単元:プログラミング技術
[2]問題文:ローダーのNo.4433にアップしました。
[3]環境
OS:リナックス
コンパイラ:cc
言語:C
[4]期限:できれば本日14時30分ごろまでにお願いします。
どうぞよろしくお願いします。
428:デフォルトの名無しさん
07/06/28 13:54:15
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字型の配列変数mojiに設定されている文字数を答えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7
429:デフォルトの名無しさん
07/06/28 13:55:39
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
430:デフォルトの名無しさん
07/06/28 14:40:31
>>427
#include <stdio.h>
#include <string.h>
void search(char *s1, char *s2)
{
int i;
char *p = s1;
while((p = strstr(p, s2)) != NULL){
*p++ = '#';
for(i = 0; i < strlen(s1) - 1; i++)
*(p + i) = *(p + i + strlen(s2) - 1);
}
}
int main(void)
{
char text[1024], word[1024];
printf("Please input text : ");
gets(text);
printf("text = %s\n", text);
printf("Please input search word : ");
gets(word);
search(text, word);
printf("text = %s\n", text);
return 0;
}
431:デフォルトの名無しさん
07/06/28 14:44:40
このスレでgets()使うと袋叩きにあうよ。
432:デフォルトの名無しさん
07/06/28 14:45:32
>>427
void search(char *s1, char *s2)
{
while((s1 = strstr(s1, s2)) != NULL){
*s1++ = '#';
strcpy(s1, s1 + strlen(s2) - 1);
}
}
433:デフォルトの名無しさん
07/06/28 14:46:56
>>431
俺だって使いたかねーけど、問題文に指定してあるからな。
434:デフォルトの名無しさん
07/06/28 14:54:08
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題
文字列と検索文字、置換文字を入力し文字列中の検索文字を置換文字に置き換えなさい
実行画面
文字列(m1)入力==>ABCDEFAABCDABC
削除文字==>A
置換文字==>*
結果文字列(m1):BCDEF**BCD*BC
435:デフォルトの名無しさん
07/06/28 15:06:21
授業単元 関数
言語 C言語
引数の階乗(1*2*3*....*n)を関数を作れ
お願いします
436:デフォルトの名無しさん
07/06/28 15:09:45
int kaijo(int a)
{
if(a == 1){
return 1;
}
return a*kaijo(a-1);
}
437:デフォルトの名無しさん
07/06/28 15:13:47
int kaijo(int a)
{
int i, result=1;
for(i=1; i<a; i++){
result *= i;
}
return result;
}
438:デフォルトの名無しさん
07/06/28 15:14:47
授業単元 関数
言語 C言語
引数の階乗(1*2*3*....*n)を返す関数を作れ
の間違いでした 申し訳ありません
439:デフォルトの名無しさん
07/06/28 15:20:43
>>378はネタだろw
440:デフォルトの名無しさん
07/06/28 15:21:44
>>422
適当だし、エクスプローラ風の樹形図になっちゃうけど、それでよければ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
441:デフォルトの名無しさん
07/06/28 15:24:36
428 429何方かお願いします
442:デフォルトの名無しさん
07/06/28 15:30:51
>>428
int main()
{
char moji[] = "ABCDEFG";
int i;
for(i=0; moji[i] != '\0'; i++);
printf("文字数:%d\n", i);
}
443:デフォルトの名無しさん
07/06/28 16:11:45
マイナスの引数でエラーを出さない平方根を返す関数を作れ
C言語でお願いします
444:デフォルトの名無しさん
07/06/28 16:14:43
>>443
>>1嫁
445:デフォルトの名無しさん
07/06/28 16:23:53
授業単元 関数
問題文 マイナスの引数でエラーを出さない平方根を返す関数を作れ
環境
LINUX
C言語
期限 いつでも
>>1 よんでおらず申し訳ありませんでした
446:デフォルトの名無しさん
07/06/28 16:28:04
負の数が入ったときの動作は?
447:デフォルトの名無しさん
07/06/28 16:28:05
>>439
もしネタだとしたら、真面目にお願いしたいのですが。
448:デフォルトの名無しさん
07/06/28 16:30:52
>>446
例として2の 平方根 だと 1.4142135...
ー2 の 平方根 だと -1.4142135...
となるようにです
449:デフォルトの名無しさん
07/06/28 16:33:41
マイミクしてください!
URLリンク(mixi.jp)
450:デフォルトの名無しさん
07/06/28 17:00:35
>>448
double exsqrt(double x)
{
if(x<0){
x=-x;
return -sqrt(x);
}
return sqrt(x);
}
451:デフォルトの名無しさん
07/06/28 17:01:37
>>447 まじめにやってもこの程度だが
URLリンク(kansai2channeler.hp.infoseek.co.jp)
452:デフォルトの名無しさん
07/06/28 17:14:08
あ~~fmod()を使って10進数を2進数に変えたいんです。C++
453:デフォルトの名無しさん
07/06/28 17:17:17
[1] 授業単元:多次元配列
[2] 問題文(含コード&リンク):
以下のステップに従って,行列表示及び演算を行う関数群を作成し,3行3列の行列A,Bのかけ算を行い,結果を表示するプログラムを作成してください.なお,行列AとBは,キーボードから値を入力するようにしてください.
1.3行3列の行列を表示する関数hyoujiを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてhyoujiを呼び出し,内容を表示させ,動作確認を行う)
2.3行3列の行列A,Bの足し算を行い,結果を行列Cに代入する関数tasizanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてtasizanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
3.tasizanをコピー・雛形にして,3行3列の行列A,Bのかけ算を行い,結果を行列Cに代入する関数kakezanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてkakezanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
4.キーボードから3行3列の行列に見立てた配列に数値を入力する関数nyuryokuを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてnyuryokuを呼び出し,関数hyoujiにより行列Aを表示させ,動作確認を行う)
kakezanのヒント:3重ループにすると効率よくプログラムできます
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:Borland
[3.3] 言語:C
[4] 期限:7月10日まで
[5] その他の制限:多次元配列までならってます
454:デフォルトの名無しさん
07/06/28 17:30:44
>>451
迅速な返答ありがとうございます。無事実行の確認ができました。
455:デフォルトの名無しさん
07/06/28 19:00:07
>>453
void hyouji(int array[][3])
{
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",array[i][j]);
putchar('\n');
}
}
void tasizan(int A[][3],int B[][3],int C[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
C[i][j]=A[i][j]+B[i][j];
}
456:455
07/06/28 19:04:02
続き
void kakezan(int A[][3],int B[][3],int C[][3])
{
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
C[i][j]+=A[i][k]*B[k][j];
}
void nyuryoku(int A[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf("A%d%d:",i,j);
scanf("%d",&A[i][j]);
}
}
457:デフォルトの名無しさん
07/06/28 19:08:04
[1] 授業単元:C++
[2] 問題文:
メイン関数で整数numに0が入力されるまでキー入力を繰り返し実行する。
負の値も有効とし、0も有効な値とする。
入力が終了した時点での入力値の最大値上位3つと最小値下位3つを画面に出力する。
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:出力にはprintf、入力にはscanfの使用
習い始めなため、出来るだけ簡単な物にしてくれると助かる。
お願いします。
458:デフォルトの名無しさん
07/06/28 19:08:46
>>453
#include <stdio.h>
void hyouji(double a[3][3]){
int i, j;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++) printf("%4.1f", a[i][j]);
printf("\n");
}
}
void tasizan(double a[3][3], double b[3][3], double c[3][3]){
int i, j;
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) c[i][j] = a[i][j] + b[i][j];
}
void kakezan(double a[3][3], double b[3][3], double c[3][3]){
int i, j, k;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++){
c[i][j] = 0;
for(k = 0; k < 3; k++) c[i][j] += a[i][k]*b[k][j];
}
}
void nyuryoku(double a[3][3]){
int i, j;
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) scanf("%lf", &a[i][j]);
}
int main(void){
double a[3][3], b[3][3], c[3][3];
nyuryoku(a); nyuryoku(b);
tasizan(a, b, c); hyouji(c);
kakezan(a, b, c); hyouji(c);
return 0;
}
459:デフォルトの名無しさん
07/06/28 19:46:35
[1] 授業単元:C言語実習基礎
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
数字を昇順でソートできるようにする。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C
[4] 期限: 6/29正午まで
[5] その他の制限: 挿入ソート、選択ソートまで習っています。
460:デフォルトの名無しさん
07/06/28 20:04:14
それはソースコードであって問題文ではない。
461:デフォルトの名無しさん
07/06/28 20:43:32
[1] 授業単元:C++研究
[2] 問題文
あるファイルの中にデータとして多くの0と1が書き込まれており、最後の1文字だけがEであるとする。
このとき、0と1の並びに着目し、データを圧縮することを考える。
ここでは、0と1のそれぞれが何個連続して並んでいるかを記録することで圧縮を行う。
たとえば、digit1.datというファイルに
111110000000000000000000000001E
というように0と1が並んでいるとき、
7 1 24 0 1 1
と圧縮できる。このとき圧縮結果に空白を挟むことに注意する。
上記の圧縮方法に従って、任意の0と1から成るデータを圧縮するプログラムを作成せよ。
ただしデータはリダイレクションを使用し、char型変数の1文字ずつ繰り返し世も困れるものとする。
最後には「圧縮完了」と表示のこと。
3] 環境
[3.1] OS:windowsXP
[3.2] cygwin
[3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:C++です。よろしくお願いします
462:デフォルトの名無しさん
07/06/28 20:51:54
[1] 授業単元: プログラミング序論
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C
[4] 期限: 29日まで
よろしくお願いします
463:デフォルトの名無しさん
07/06/28 20:52:00
>繰り返し世も困れる
読み込まれる?
464:デフォルトの名無しさん
07/06/28 20:58:31
>>460
申し訳ありませんでした。
このソースコードを昇順でソートできるように直しなさい。
という問題です。
465:デフォルトの名無しさん
07/06/28 21:07:00
>>462
(1)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int i, sum = 0;
for(i=0;i<7;i++) sum += array[i];
printf("%d", sum);
return 0;
}
466:デフォルトの名無しさん
07/06/28 21:14:41
>>461
#include <iostream>
using namespace std;
int main()
{
streambuf *sb = cin.rdbuf();
int c, cc, n;
const char *sep = "";
while ((c = sb->sbumpc()) >= 0 && c != 'E') {
for (n = 1; (cc = sb->sbumpc()) >= 0 && cc == c; ++n) {}
sb->sungetc();
cout << sep << n << " " << static_cast<char>(c);
sep = " ";
}
cout << "\n圧縮完了\n";
}
467:デフォルトの名無しさん
07/06/28 21:20:17
>>462
(2)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int array2[7] = {0};
int i;
for(i=0;i<7;i++) array2[i] = array[6-i];
for(i=0;i<7;i++) printf("%d", array[i]);
putchar('\n');
for(i=0;i<7;i++) printf("%d", array2[i]);
return 0;
}
468:453
07/06/28 21:40:36
>>455さんありがとうございます
469:462
07/06/28 21:59:36
>>465
>>467
ありがとうございます
470:デフォルトの名無しさん
07/06/28 22:45:46
>>457
(1)
#include <iostream>
#include <math.h>
#define BUF_MAX 64
#define DATA_MAX 128
char datanum=0;
long data[DATA_MAX];
void seikei(char*);
long henkan(char*);
void touroku(long);
void sort();
void output();
471:デフォルトの名無しさん
07/06/28 22:47:05
(2)
int main() {
char i, sign, buf[BUF_MAX];
long input;
do {
input = 0;
for(i=0; i<BUF_MAX; i++)
buf[i] = NULL;
printf("input number\n> ");
scanf("%s", buf);
if(buf[0]==45) sign = 1;
else sign = 0;
seikei(buf);
input = henkan(buf);
if(input==0) break;
else if(sign==1) input = 0-input;
touroku(input);
} while(1);
sort();
output();
return 0;
}
472:デフォルトの名無しさん
07/06/28 22:47:53
(3)
void seikei(char *buf) {
char i, j, max, str[BUF_MAX];
for(i=0; i<BUF_MAX; i++)
str[i] = NULL;
max = (char)strlen(buf);
for(i=0, j=0; i<max; i++) {
if(!(48>buf[i] && buf[i]<57)) {
str[j] = buf[i]-48;
j++;
}
}
for(i=0; i<BUF_MAX; i++)
buf[i] = str[i];
return;
}
long henkan(char *buf) {
char i, figure;
long input=0;
figure = (char)strlen(buf)-1;
for(i=0; buf[i]!=NULL; i++)
input += buf[i] * pow((double)10, (double)figure-i);
return input;
}
473:デフォルトの名無しさん
07/06/28 22:49:12
(4)
void touroku(long input) {
if(datanum<DATA_MAX) {
data[datanum] = input;
datanum++;
}
return;
}
void sort() {
char i, j, higher;
long tmp;
for(i=0; i<datanum; i++) {
for(j=i+1, higher=i; j<datanum; j++) {
if(data[higher]<=data[j]) higher = j;
}
tmp = data[higher];
data[higher] = data[i];
data[i] = tmp;
}
return;
}
474:デフォルトの名無しさん
07/06/28 22:50:56
(5)
void output() {
char i;
for(i=0; i<3; i++) {
if(data[i]==NULL) break;
printf("上位%d位: %d\n", i+1, data[i]);
}
for(i=datanum-1; i>(datanum-4); i--) {
if(data[i]==NULL) break;
printf("下位%d位: %d\n", datanum-i, data[i]);
}
}
単純なデータ構造にしたつもり。
殴り書きでsorry
475:デフォルトの名無しさん
07/06/28 23:19:21
1] 授業単元:c言語
[2] 問題文: 8個の配列データa={1,2,4,6,8,4,5,9}の和WAおよび平均値MA
を求めるプログラムを配列およびfor文を用いて作成せよ。
[3] 環境
[3.1] OS:XP
[3.2] Visual studio.2005
[3.3] 言語:C
[4] 期限:6月29日:3時まで
[5] その他の制限:特になし
よろしくお願いします
476:デフォルトの名無しさん
07/06/28 23:19:34
宿題じゃないんだが
01011010みたいに
日付が4桁4桁になってる
8桁の数字を生成するのはどうするん?
477:デフォルトの名無しさん
07/06/28 23:24:49
宿題スレじゃなくてC/C++質問スレで頼むわ
478:デフォルトの名無しさん
07/06/28 23:26:16
>>345
お願いします
479:デフォルトの名無しさん
07/06/28 23:28:41
>>475
#include <stdio.h>
int main(void){
double MA;
int i, WA=0;
int a[8] = {1, 2, 4, 6, 8, 4, 5, 9};
for(i=0; i<8; i++){
WA += a[i];
}
MA = WA/8.0;
printf("和 : %d", WA);
printf("平均値 : %lf", MA);
return 0;
}
直接書いてコンパイルとかしてないからエラーでたらおせーてね☆
480:デフォルトの名無しさん
07/06/28 23:35:04
>>478
345の結果ってさ、準決勝で早稲田が下になってるやんか、
あれって逆にしてもええのん?
あかんのやったらあかんでええけど、
481:デフォルトの名無しさん
07/06/28 23:36:28
ああごめんよく読んでなかったわ
得点と失点を記録するんやね
482:デフォルトの名無しさん
07/06/29 00:06:37
>>478
URLリンク(kansai2channeler.hp.infoseek.co.jp)
483:デフォルトの名無しさん
07/06/29 00:08:44
defineにこだわってる所為で汚くなってるじゃんとか言わないでね
484:デフォルトの名無しさん
07/06/29 01:02:03
わからねえよボケ!去ね!
485:デフォルトの名無しさん
07/06/29 01:06:28
>>470-474
サンクス。
ただ、素人がここまで書いてしまうと逆に相手に怪しまれると思うのですよ。
問題文を多少屁理屈で変えてもいいので、もう少し短く簡単にして頂ければ幸いです。
加えてもう一問。
[1] 授業単元:C++
[2] 問題文:
メイン関数a,bに任意の値を入力する。
変数aと変数bで加算と乗算を行い計算結果を表示する。
整数の範囲(-2147483648~2147483648)で正常な計算が行えることを確認する。
実数(float,double)は変数やキャスト等で一切使用しない。
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日の午後
[5] その他の制限:出力にはprintf、入力にはscanfの使用
図々しいことは百も承知ですが、よろしくお願いします。
486:デフォルトの名無しさん
07/06/29 01:10:38
お願いします。
[1]C言語
[2]ファイルを読み込む
I am C.
CAT and ...
を別のファイルに下のように書き込む
1: I am C.
2: CAT and ...
[3.1] OS:Linux
[3.2] gcc 3.4
[3.3] 言語: C
[4]今日の午前中
487:デフォルトの名無しさん
07/06/29 01:20:49
>>486
#include <stdio.h>
int main(void) {
FILE *fop,*fsv;
char buf[32];
int ch;
printf("読み込むファイル名を入力 > ");
scanf("%s",buf);
fop=fopen(buf,"r");
if( fop==NULL ) return 1;
printf("書き込むファイル名を入力 > ");
scanf("%s",buf);
fsv=fopen(buf,"w");
if( fsv==NULL ) { fclose(fop); return 1; }
while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
}
fclose(fop);
fclose(fsv);
return 0;
}
488:デフォルトの名無しさん
07/06/29 01:26:08
[1] 授業単元:情報系ゼミ
[2] 問題文:URLリンク(www.ipsj.or.jp)
上記URLの文中「逆方向のスキャンによる枝刈り(P759)」「ビット列の長さによる枝刈り」
の二項を聞いてる素人にも判る様に説明、解説する。という課題を受けました
しかし今まで習った内容とは明らかにレベルが違いすぎるため、
また、周りが自分を含めプログラムはズブの素人ばかりなので全く理解できず、
一同困惑しています
お時間のある方、この範囲のプログラム文の一行一行がどういう機能を果たしているのかを
馬鹿にも判るように解説して頂けないでしょうか?
よろしくお願いします
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語:C++
[4] 期限:[2007年07月01日まで
[5] その他の制限: まったく習っていない段階
489:デフォルトの名無しさん
07/06/29 01:29:47
あ、書き込むときに
1: ~
2: ~
のように数字をつけたいんです、3行とか4行とかにも対応できるように…。
もしよければおねがいします
490:デフォルトの名無しさん
07/06/29 01:34:37
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: どちらでも可
[4] 期限: 2007年07月01日23:00まで
[5] その他の制限: なし
491:デフォルトの名無しさん
07/06/29 01:41:48
>>489は>>487さんへのレスです。
492:デフォルトの名無しさん
07/06/29 01:53:19
491です。解決しました。あともう一門わからないのがあるので
もしよければお願いします
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:明日
493:492
07/06/29 01:59:20
[2]の例追加
abdcdoddooffffoo
↓
abc→1 df→4 o→5
494:デフォルトの名無しさん
07/06/29 02:01:36
>>491 >>489
>>487 の一部だけ変更。変更部分は↓の一番上と下が一致するところの中
if( fsv==NULL ) { fclose(fop); return 1; }
i=1;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
if( ch=='\n' ) {
i++;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
}
}
fclose(fop);
495:デフォルトの名無しさん
07/06/29 02:06:46
>>494 訂正
fprintf(fsv,"%d:",ch); < の2箇所を
fprintf(fsv,"%d:",i); < ,i に変更
496:デフォルトの名無しさん
07/06/29 02:07:39
>>495 じゃなくて、2箇所ある
fprintf(fsv,"%d:",ch); < これを って意味ね。出力結果がおかしいから分かるだろうけど。
497:デフォルトの名無しさん
07/06/29 02:31:05
[1] 授業単元: プログラミング基礎A
[2] 問題文(含コード&リンク):
奇数かどうか判定する関数および,偶数かどうか判定する関数を作成しなさい.
◎以下を参考の事
奇数判定: int isOdd(int i)
数字iが奇数の場合1,
偶数の場合0を返す関数
偶数判定: int isEven(int i)
数字iが偶数の場合1,
奇数の場合0を返す関数
main関数ではif文を使って正しく動いているかどうか
チェックしてください.
※戻り値にはboolを利用してもOKです
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年6月29日10時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
498:デフォルトの名無しさん
07/06/29 02:33:07
>>497
int isOdd(int i){return i%2;}
int isEven(int i){return i%2==0;}
499:492
07/06/29 05:10:44
テンプレわかりづらかったので、もっかい質問します
是非、教えてください、お願いします。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
ほかの例は
abdcdoddooffffoo
の場合
abc→1 df→4 o→5
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:5時間後くらい
500:492
07/06/29 05:13:41
>>494-496さん本当にありがとうございます!!
501:デフォルトの名無しさん
07/06/29 06:03:57
>>499
#include <stdio.h>
int main(void)
{
int c, nc[256] = {0}, nmax = 0, n, found;
while ((c = getchar()) != EOF) {
nc[c]++;
if (nc[c] > nmax)
nmax = nc[c];
}
for (n = 1; n <= nmax; n++) {
found = 0;
for (c = 0; c < 256; c++) {
if (nc[c] == n) {
putchar(c);
found = 1;
}
}
if (found)
printf("→%d", n);
}
printf("\n");
return 0;
}
502:492
07/06/29 06:27:59
>>501さんありがとうございます。
けどコンパイルしてみたらエラーがたくさん表示されて…。
あとファイルから読み込んで結果を画面に表示してファイルに書き込む
プログラムをつくりたいです。またもしよければアドバイスおねがいします
503:デフォルトの名無しさん
07/06/29 07:02:16
>>500 そういや、int i; も追加だったっけ・・・ってできた?ようだから良いか。
504:492
07/06/29 07:07:45
>>503さんのをアレンジしたらできました!ありがとうございました!!
もしよければ>>499を教えてほしいです…何度もすいません。
505:デフォルトの名無しさん
07/06/29 07:24:24
>>501は全角スペースが入っているからでそ
#include <stdio.h>
int main(void)
{
int c, nc[256] = {0}, nmax = 0, n, found;
while ((c = getchar()) != EOF) {
nc[c]++;
if (nc[c] > nmax)
nmax = nc[c];
}
for (n = 1; n <= nmax; n++) {
found = 0;
for (c = 0; c < 256; c++) {
if (nc[c] == n) {
putchar(c);
found = 1;
}
}
if (found)
printf("→%d", n);
}
printf("\n");
return 0;
}
506:492
07/06/29 07:32:56
これにファイルポインタとか使いしていけばいいんですかね?
これだけだと動きませんでしたので・・・
507:デフォルトの名無しさん
07/06/29 07:38:07
>>506
題意が良くわからないんだが、要するに文字列の中の各アルファベットの数を数えろってことかね?
508:デフォルトの名無しさん
07/06/29 07:39:33
492と493の例だと表示順がわからないんだけど。
出てきた順番でもないし、アルファベット順でも個数順でもない。
509:492
07/06/29 07:44:45
>>507さん、そうですねアルファベット順にしたいです。
cccchaaの例はちょっと間違って書いてましたすいません…。
もうひとつ例としては
aaabcddddee
の場合は
a→3 bcd→4 e→2
です。何度もすいません…アルゴリズムがいまいち思いつかないので…。
510:デフォルトの名無しさん
07/06/29 08:01:13
アルファベットの数を数える部分はできたが、同じ数のものを並べてってのが面倒やな・・・
もう少しで出来そうだが、そこんとこで手詰まり中。まぁ、なんとかなるさ。
511:デフォルトの名無しさん
07/06/29 08:09:25
>>459
ソースコードを昇順ソートできるようにするという問題です。
何度もすみません。
512:デフォルトの名無しさん
07/06/29 08:23:46
>>381お願いします
513:デフォルトの名無しさん
07/06/29 09:13:21
>>509 >>506 >>504 >>499 >>492
汚いソースだが我慢せい
URLリンク(kansai2channeler.hp.infoseek.co.jp)
514:デフォルトの名無しさん
07/06/29 09:15:32
>>509 >>506 >>504 >>499 >>492 訂正
URLリンク(kansai2channeler.hp.infoseek.co.jp)
515:デフォルトの名無しさん
07/06/29 09:27:10
>>509 >>506 >>504 >>499 >>492 さらにマクロでシェイプアップ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
516:デフォルトの名無しさん
07/06/29 09:27:58
>>515 っつか str[1024], <これ要らなかった、削除プリーズ
517:459
07/06/29 12:12:43
時間延長してもらいました。
順を追って試してるんですがうまくいかないです・・・
518:デフォルトの名無しさん
07/06/29 12:41:20
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
↓*ndPtrPtr が指すリストの n 番目のノード(ノード番号は 0 番から始まる)を削除する.
削除したノードに割り当てられていたメモリは解放される.ただし,リスト中のノード数が
n 以下で,n番目のノードがない場合には,何もしない.
戻り値は,n番目のノードが削除できたときには SUCCESS,
n番目のノードが存在せず,削除できなかったときには FAILURE を返す.
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上のnodeInsertを改良して,指定された挿入場所のインデックス n が負のときには,
新しく挿入されたノードがリストの末尾から数えて -n 番目になるようにせよ.
(たとえば,n == -1 のときには,末尾に挿入される)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:月曜日まで
[5] その他の制限: なし
よろしくお願いします。
519:デフォルトの名無しさん
07/06/29 12:43:12
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
3d^2x/dt^2+dx/dt+2x=4
x(t=0)=0
dx/dt(t=0)=0
上記の微分方程式をルンゲークッタ法を用いて解け
[3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C言語
[4] 期限: ([2007年7月1日まで
[5] その他の制限: なし
お願いします
520:デフォルトの名無しさん
07/06/29 12:58:22
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):ふたつあります。
①文字列strをno回だけ連続して表示する関数
void put_stringn(const char str[], int no){/*…*/}を作成せよ。
②以下に示した関数をもとにして、文字列を後ろから逆に表示する("SEC"を受けたら"CES"と表示する)関数put_rstringを作成せよ。
#include <stdio.h>
void put_string(const char str[])
{
unsigned i = 0;
while(str[i])
putchar(str[i++]);
}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
putchar(!\n!);
return(0);
}
[3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:今日中なるべく早く
[5] その他の制限: 明解C言語入門編テキスト使用
お手数おかけしますがどうかよろしくお願いします。
521:デフォルトの名無しさん
07/06/29 13:03:46
明解C言語入門編
URLリンク(www.bohyoh.com)
これか?
522:デフォルトの名無しさん
07/06/29 13:04:27
>>521さん
そうです。
523:デフォルトの名無しさん
07/06/29 13:04:39
[1] 授業単元:C++研究
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記2つのプログラムのクラス(設計図)のインスタンス生成部分をnew演算子を用いた
ものに修正しなさい(すべての個所)。もちろんこのインスタンスをdelete演算子
で削除することを忘れないこと。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年7月1日12:00まで]
[5] その他の制限:特になし
よろしくお願いします。
524:デフォルトの名無しさん
07/06/29 13:06:42
>>520
#include <string.h>
void put_string(const char str[])
{
unsigned i = strlen(str)-1;
while(str[i])
putchar(str[i--]);
}
525:デフォルトの名無しさん
07/06/29 13:09:21
>>520 なんか全角が入ってたり putchar の括弧の中がおかしいから全部書くわ
#include <stdio.h>
#include <string.h>
void put_string(const char str[]) {
unsigned i = strlen(str)-1;
while(str[i])
putchar(str[i--]);
}
int main(void) {
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
putchar('\n');
return(0);
}
526:デフォルトの名無しさん
07/06/29 13:15:04
>>525さん
ありがとうございます。
void put_stringをvoid put_rstringにすればいいんですかね?#include <string.h>て
習っていないのですが…
もしよろしければ問題①のほうもよろしくお願いします
527:デフォルトの名無しさん
07/06/29 13:23:43
内容:
[1] 授業単元:C++
[2] 問題文:
#include <stdio.h>
#define NUM4
#define NAME_LENGTH 20
struct seiseki{
char name[NAME_LENGTH];
int jpn;
int eng;
int math;
/*A*/
}
int main(void){
struct seiseki i06[NUM];
double max;
int max_i;
int i;
for(i=0;i<NUM;i++){
printf("%d番目の名前を入れてください",i);
scanf("%s",i06[i].name);
printf("%d番目の国語の成績を入れてください",i);
scanf("%d",i06[i].jpn);
printf("%d番目の英語の成績を入れてください",i);
scanf("%d",i06[i].eng);
printf("%d番目の数学の成績を入れてください",i);
scanf("%d",i06[i].math);
}
/*B*/
}
528:デフォルトの名無しさん
07/06/29 13:31:36
>>520
#include <stdio.h>
void put_stringn(const char str[], int no) {
int i;
for(i=0; i<no; i++)
printf("%s \n",str);
}
void put_string(const char str[]) {
int i = 0;
while(str[i]!='\0') i++;
while(i-->0)
putchar(str[i]);
}
int main(void) {
char str[100];
int no;
printf("文字列を入力してください:");
scanf("%s", str);
printf("①文字列strをno回だけ連続して表示する関数 no > ");
scanf("%d",&no);
put_stringn(str,no);
printf("②以下に示した関数をもとにして、文字列を後ろから逆に表示\n");
put_string(str);
putchar('\n');
return(0);
}
529:デフォルトの名無しさん
07/06/29 13:31:59
以下のプログラムに構造体を各人の名前と合計点を格納できるように拡張し、最終的には合計点が一番よい学生の名前を出力するプログラムを作成せよ。/*A*/ /*B*/に入れよ
また、成績のAランク(成績が80以上100以下)の個数を格納する変数に変更して、Aランクの数が一番多い学生の名前を出力するプログラムを作成せよ。/*A*/にAランクの数
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日
[5] その他:制限 構造体 他にはとくになかったです。
よろしくお願いします。
530:デフォルトの名無しさん
07/06/29 13:34:25
>>528さん
ありがとうございます。
すみません、①と②の問題は別物なんです
ややこしくかいてしまってすみません
>>528にかいていただいたものをどうわければいいのでしょうか…
本当にすみませんorz