C/C++の宿題を片付け ..
[2ch|▼Menu]
502:デフォルトの名無しさん
08/11/10 01:57:40
>>499
クラスは使わず、構造体でお願いします。

503:デフォルトの名無しさん
08/11/10 02:10:50
>>502
ほんとうにいいんだな
構造体にコンストラクタとデストラクタとメンバ関数つけられるぞ?

504:デフォルトの名無しさん
08/11/10 02:11:50
>>500
void reverse(char * s)
{
size_t len = strlen(s); /* 文字列の長さ */
size_t half_len = len / 2; /* 文字列の半分の長さ */
size_t i;

for ( i = 0; i < half_len; ++i ) {
char tmp = *((s + len - 1) - i);
*((s + len - 1) - i) = *(s + i);
*(s + i) = tmp;
}
}
こんなのでいいかな。

505:デフォルトの名無しさん
08/11/10 02:21:28
[1] 授業単元:Cプログラミング
[2] 問題文:
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE];
infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}
for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");
return 0;
}

506:デフォルトの名無しさん
08/11/10 02:21:58
505の続きです。

このプログラムを改造し、データの値を奇数と偶数に分けそれぞれ合計値・個数・平均値を出力せよ。
その際奇数データの数、偶数データの数がそれぞれゼロの場合は平均値を求めないようにせよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Microsoft Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:11月11日

締め切りが急ですみません。
さっぱりわからなくなってしまったので、良ければよろしくお願いします。

507:デフォルトの名無しさん
08/11/10 02:39:50
>>504

ありがとう!

508:デフォルトの名無しさん
08/11/10 02:45:05
>>505
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE], sum[2]={0}, num[2]={0};
char *str[2] = {"奇数", "偶数"};

infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}

for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
sum[data[i]%2] += data[i];
num[data[i]%2]++;
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");

for(i=1; i>=0; i--){
printf("%s:合計値%d, 個数%d個", str[i], sum[i], num[i]);
if(num[i] > 0) printf(", 平均値:%f", (float)sum[i] / (float)num[i]);
printf("\n");
}
return 0;
}

509:デフォルトの名無しさん
08/11/10 02:46:41
あ、奇数と偶数の表示が逆

510:デフォルトの名無しさん
08/11/10 02:52:08
[1] 授業単元: OS
[2] 問題文(含コード&リンク):
ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF タイマーを用いて、プロセスのプロセッサ利用状況を測定するソフトウェアを実装する。
出力には、実行の経過時間、プロセッサ時間、ユーザ空間時間、カーネル空間時間が含むこと。
詳細
(1)すべての時間はミリ秒の分解精度を持つこと
(2)1秒毎にsignalを発生させ、経過した秒数をカウントする
(3)再帰を用いたFibbonacci数を計算するプログラムを子プロセスとした実行結果をしめすこと
[3] 環境
 [3.1] OS: Linux Kernel 2.6.x
 [3.2] コンパイラ名とバージョン: gcc4.x
 [3.3] 言語: C言語
[4] 期限: 2008年11月12日12:00
[5] その他の制限: sigactionやitimervalを用いて実装するのが今回の目的です。時間を計るものはできたのですが、ミリ秒単位の分解精度をどうやって出すのかがわかりません。よろしくお願いします。


511:デフォルトの名無しさん
08/11/10 02:54:37
510です。
稚拙ながらもソースコードを示します。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
int realSec = 0;
int profSec = 0;
int virtualSec = 0;
static void myHandler(int s) {
int errSave;
if (s == SIGALRM) realSec++;
else if (s == SIGVTALRM) virtualSec++;
else if (s == SIGPROF) profSec++;
}
static int setupInterrupt(void) {
struct sigaction act;
act.sa_handler = myHandler;
act.sa_flags = 0;
return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;
}
static int setupitimer(void) {
struct itimerval value;
value.it_interval.tv_sec = 1; value.it_interval.tv_usec = 0;
value.it_value = value.it_interval;
return (setitimer(ITIMER_PROF,&value, NULL) == setitimer(ITIMER_VIRTUAL,&value, NULL) == setitimer(ITIMER_REAL,&value, NULL) == 0)? 0: -1 ;
}


512:デフォルトの名無しさん
08/11/10 02:56:23
510です。続きです。
int main(int argc, char** argv) {
pid_t child, retVal;
struct itimerval real, virtual, profile;
int status;
if (setupInterrupt()) {
perror("Failed to set up handler for SIGPROF"); return 1;
}
if (setupitimer() == -1) {
perror("Failed to set up the ITIMER_PROF intervaltimer");return 1;
}
if (argc < 2){
fprintf (stderr, "Usage:%s command\n", argv[0]);return 1;
}
if ((child = fork()) == -1) {
perror("Failed to fork"); return 1;
}
if (child == 0) { // child code
execvp(argv[1], &argv[1]);
perror("Child failed to execvp the command");
return 1;
} else { // parent code
while((retVal = waitpid(-1, &status, WNOHANG)) != child);
getitimer(ITIMER_REAL, &real);getitimer(ITIMER_PROF, &profile);getitimer(ITIMER_VIRTUAL, &virtual);
//ここも要修正
printf("real = %d.%ld", realSec, 1000000 - real.it_value.tv_usec);
printf(" virtual = %d.%ld", virtualSec, 1000000 - virtual.it_value.tv_usec);
printf(" profile = %d.%ld\n", profSec, 1000000 - profile.it_value.tv_usec);
}
}
よろしくお願いします。

513:デフォルトの名無しさん
08/11/10 03:19:23
[1]授業単元:C言語
[2] 問題文:次のことを行うプログラムを,for文を用いて作成しなさい。
10個の要素をもつ整数配列dataを初期化して宣言する。
配列要素の中の最大値と最小値を出力しなさい。
なお,配列要素の値として,すべて負のものがあるデータも試してみること。
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C言語
[4]期限:なし

初歩的な問題で申し訳ないですが、よろしくお願いします。

514:デフォルトの名無しさん
08/11/10 03:30:10
>>513
#include <stdio.h>
#define SIZE 10
int main() {
//int data[SIZE] = {83,28,35,84,43,21,8,51,2,12};
int data[SIZE] = {-83,-28,-35,-84,-43,-21,-8,-51,-2,-12};
int min, max;
int i;

min = max = data[0];
for (i = 1; i < SIZE; i++) {
if (data[i] > max) {
max = data[i];
} else if (data[i] < min) {
min = data[i];
}
}
printf("min = %d, max = %d\n", min, max);
}



515:デフォルトの名無しさん
08/11/10 05:45:39
>>503
はい、お願いします。

516:デフォルトの名無しさん
08/11/10 05:47:28
追記

>>503
クラス使わないで、構造体で作って動けば問題ないのでお願いします。

517:デフォルトの名無しさん
08/11/10 08:36:06
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境:
 [3.1] WindowsVista
 [3.2] Borland C++Compiler
 [3.3] C言語
[4] 期限: 2008年11月10日23:59まで

518:デフォルトの名無しさん
08/11/10 09:02:31
>>514
ありがとうございます!

519:デフォルトの名無しさん
08/11/10 09:12:11
>>517

#include <stdio.h>
void main(void){
int i,t;t=0;
for(i=1; i<=100; i++){if(i %3 == 0){printf("%d \n" ,i);t++;}}
printf("\n total %d\n",t);}

520:デフォルトの名無しさん
08/11/10 11:43:48
>>511
どうでもいいところかもしれんが

return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;

これ、意図したとおりに動くの? A == B は A と B が等しかったら 1 を返すよ

一つでも 0 以外のを返したら、とやりたいんだったら && とか使うべし

521:デフォルトの名無しさん
08/11/10 13:44:10
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月12日
[5] その他の制限: 特になし

よろしくお願いします。

522:デフォルトの名無しさん
08/11/10 14:06:25
>>521 該当箇所だけ。push, pop はもうできてるんでしょ?
while(!isempty()) {
y = pop();
x = pop();
if (map[y][x] == ' ') {
map[y][x] = '*';
/*ここを適切に埋める(3) */
// up
push(x);
push(y - 1);
// down
push(x);
push(y + 1);
// left
push(x - 1);
push(y);
// right
push(x + 1);
push(y);
/*塗るたびにマップを表示する */
for(y = 0; y < 7; y++)
printf("%s\n", map[y]);
printf("\n");
}
}


523:374
08/11/10 14:22:12
すいません誰か>>374をお願いします。もう締め切りも近いのでどうか頼みます

524:デフォルトの名無しさん
08/11/10 14:28:40
>>508
ありがとうございます!助かりました!

525:デフォルトの名無しさん
08/11/10 14:37:57
>>523
1年分ってのは、入力した年の1月から12月を表示すればよいのか
入力した月から翌年の同月-1 を表示すればよいのか
入力した月を含む前後6か月を表示すればよいのか


526:デフォルトの名無しさん
08/11/10 15:02:16
>>523
カレンダーは >> 525 の返答次第
フィボナッチその1
#include <stdio.h>
int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);
for(i = 0; i < num; i++){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
}
return 0;
}


527:デフォルトの名無しさん
08/11/10 15:02:58
>>523
フィボナッチその2
#include <stdio.h>

int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);

i = 0;
while(i < num){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
}
return 0;
}


528:デフォルトの名無しさん
08/11/10 15:03:33
>>523
フィボナッチその3
#include <stdio.h>

int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);

i = 0;
do{
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
} while(i < num);
return 0;
}


529:初心者
08/11/10 15:59:23
[1] 授業単元:
[2] 問題文(含コード&リンク):
★下記の仕様を満たすプログラムをC言語で作成しなさい.

【仕様】日数計算プログラム

▼今日の日付と生年月日を入力すると,今日が生年月日から数えて何日目にあたるかを表示する.西暦・月・日をスペースで区切って入力する.
▼この場合,「うるう年」を考慮しなければならない.「うるう年」の条件は,
@西暦が4で割り切れる.
Aただし,西暦が100で割り切れる年は除く.
Bただし,西暦が400で割り切れる年は含める.
▼「今日は、あなたが生まれた日から数えて〜日目です。」と表示する.
▼計算式は,(西暦1年1月1日から今日までの日数)−(西暦1年1月1日から生年月日までの日数)を使えばよい.
▼生年月日が今日の日付より後になっているときは,「生年月日が今日の日付より後になっています!」とエラーメッセージを表示する.
▼最低限,次の関数を使うこと.
@main関数(これは当たり前ですが)
A入力された値が計算に適切な値かをチェックする関数(4月31日などありえない日付を入れると,「年月日が正しい範囲にありません」と表示する)
B日付を計算する関数
▼日付の入力やメッセージの表示はmain関数で行うこと(ポインタに関する課題なので参照渡しを使うこと).

[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン: 分からないです。
 [3.3] 言語: C言語
[4] 期限: 今週中ぐらい
[5] その他の制限: 繰り返し文、条件判断文、ポインタを使ってお願いします。
初心者なので、初心者にも分かるようなプログラムをお願いします。

530:デフォルトの名無しさん
08/11/10 16:09:07
課題が出たんですが、まったく手に負えません、、、、、
ぜひ、教えてください!
今、XPでvisualを使ってます。

『課題』
円周率πの値を近似式

π≒4Σ(←n=0から100で)(ー1)^n×(2n+1)^(−1)×{(0.5)^(2n+1)+(3)^(ー2nー1)}
を用いて、小数第8位まで正しい値(3.14159265)を出力し、
そのπの値を用いて入力された数値εに大して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。
|(π^2/6)-Σ(←k=1からN)k^(-2)|<ε

531:デフォルトの名無しさん
08/11/10 16:32:39
viの正式名称なんて久しぶりに見たな

532:デフォルトの名無しさん
08/11/10 16:45:16
>>530
こんなんでいい?
#include <stdio.h>
#include <math.h>

int main (void)
{
int i;
double pi, sum, eps;

sum = 0.0;
for(i=0; i<=100; i++){
pi = 4.0 * (sum += pow(-1, i) / (2*i + 1) * (pow(0.5, 2*i+1) + pow(3, -2*i-1)));
}
printf("π≒%.8f\n", pi);

printf("ε:");
scanf("%lf", &eps);

i = 1; sum = 0.0;
while(fabs(pi*pi/6 - (sum += pow(i, -2))) >= eps)
i++;
printf("N = %d\n", i);

return(0);
}

533:デフォルトの名無しさん
08/11/10 17:06:14
誰か>>457をお願いします。
期限は今日中で良いのでお願いします!

534:デフォルトの名無しさん
08/11/10 17:48:20
printf("ε:");
かわいいな

535: ◆25LbU5YSxg
08/11/10 18:09:49
[1] 授業単元:プログラミング演習
[2] 問題文:
プログラム1を改良し、データをファイルから読み込みつつ小さい順にソートして格納するプログラムを作成せよ、。
手順を以下に示す。
1.cell構造体へのポインタとして、struct cell *new、*start、*p1、*p2;の4つを準備し、それぞれNULLで初期化する。
2.データファイルからデータ数を読み込む。
3.データを1つ読み込み、cell構造体を作成してnewにセットした後、その構造体に格納。
  ・はじめてのデータであれば、ポインタstartとp1をnewにセット。
  ・2つ目のデータであれば、p2をnewにセットし、p1が示すリスト要素(構造体)の次に追加接続する。
   ただし、2つ目のデータが1つ目のデータよりも小さい場合には、p1とp2の指す構造体内のデータを入れ替える。
   もしくはリスト要素(構造体)自体の位置を入れ替えポインタをセットし直す必要があることに注意。
  ・3つ目以降のデータであればリスト先頭から順に走査を行う。この際、p1、及びp2をそれぞれ1つずつリスト内の次の要素に進めてゆく。
   。読み込まれたデータが、リスト先頭要素(構造体)の持つ値より小さい場合には、新規作成された構造体newをリスト先頭に追加し、ポインタstartをnewにセットする。
  
   。リスト途中で、p1には読み込まれたデータより小さい値、p2には読み込まれたデータより大きい値となる場所が見つかれば、この間に新規作成された構造体newを挿入する。
  
   。リスト最後尾まで読み込まれたデータより大きい値が見つからなければ、新規作成された構造体newを最後尾に追加する。
4.3をデータ入力数だけ繰り返す。
5.全てのデータを読み込み終えたら、リスト先頭から順にデータを出力する。

num-data.txt
5
23
43
67
14
9



536: ◆25LbU5YSxg
08/11/10 18:15:43
プログラム1
#include<stdio.h>
struct cell{
int data;
struct cell *next; };
int main(void){
int num;
struct cell *new, *start, *ptr;
new = NULL;
start = NULL;
ptr = NULL;
while(1){
scanf("%d",&num);
if(num == -1){ break; }
new= (struct cell *)malloc(sizeof(start));
if(new == NULL){ fprintf(stderr,"Error!:malloc short(struct cell).\n"); }
new->data = num;
new->next = NULL;
if(ptr == NULL){
start = new;
ptr = new;
}else{
ptr->next=new;
ptr = new; } }
ptr = start;
while(ptr != NULL){
printf("%d\n",ptr->data);
ptr=ptr->next; }
return 0;}
[3] 環境 [3.1] OS: Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C
[4] 期限:2008年11月21日17:00まで


537:デフォルトの名無しさん
08/11/10 18:18:32
>>529
URLリンク(kansai2channeler.hp.infoseek.co.jp)
参照渡しをする合理的理由がみあたらないので抜きで作った。
どっか適当に変えてくれ

538:374
08/11/10 19:36:44
>>525>>526
カレンダーは入力した年の1月から12月を表示するものでよかったです。

>>526-528
助かります。本当にありがとうございます

539:525
08/11/10 20:03:17
>>538
URLリンク(kansai2channeler.hp.infoseek.co.jp)

540:374
08/11/10 20:27:03
>>539
もうなんとお礼を言えばよいのかわかりません。本当にありがとうございました。

541:デフォルトの名無しさん
08/11/10 21:12:16
>>535
#include<stdio.h>
#include<stdlib.h>
struct cell {
int data;
struct cell *next;
};
int main(void){
int num;
struct cell *new, *start, *p1, *p2;
new = start = p1 = p2 = NULL;
while (1) {
scanf("%d", &num);
if (num == -1) break;
new = (struct cell *) malloc(sizeof(start));
if (new == NULL) { return 1; }
new->data = num;
new->next = NULL;
for(p1=start,p2=NULL; (p1) && new->data > p1->data; p2=p1, p1=p1->next);
if(p2){
p2->next = new;
new->next = p1;
}else{
new->next = start;
start = new;
}
}
for (p1=start; (p1); p1=p1->next) { printf("%d\n", p1->data); }
return 0;
}

542:デフォルトの名無しさん
08/11/10 22:01:28
[1] 授業単元:プログラミングC演習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Unix
 [3.2] コンパイラ名とバージョン: gcc(versionは不明
 [3.3] 言語: C
[4] 期限: 2008年11月13日(木曜日)12:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・ポインタをメインに使用してください

よろしくお願いします

543:デフォルトの名無しさん
08/11/10 23:11:51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月12日
[5] その他の制限:

よろしくお願いいたします。

544:デフォルトの名無しさん
08/11/10 23:14:37
>>542
malloc は ok なの?
最大長とか単語数は別プログラムで調べるんだったらいいけど、
一度にやるんだったら必ず必要だよ

545:デフォルトの名無しさん
08/11/10 23:22:34
>>543
printf("学籍番号:%d 氏名:%s\n",
p->id, p->name);
○○○   //pに次の構造体のポインタを代入
   ↑↑↑
ここを p = p->next とやるだけでとりあえず動くものはできるけど・・・

List3 は点数を取り込んでないよね。点数を取り込むようにしたいの?
読み込むデータのサンプルはないの?

546:デフォルトの名無しさん
08/11/10 23:25:53
>>542
ツッコミどころが多すぎるんだが・・・

とりあえず
- char *dict[999], *input[50]
+ char dict[999][100], input[50][100]
として、適当に文字列を格納する領域を確保しておくこと。

勘違いだと思うけど
- for(i = 0; scanf("%s",input[i]) != '\n'; i++);
+ for(i = 0; scanf("%s",input[i]) == 1; i++);

添字が逆
- judge = compare( dict[j], input[k]);
+ judge = compare( dict[k], input[j]);

それから、そもそも input[j] に入っているのは標準入力から得た一行だから、単語ごとに分割する処理が必要

547:デフォルトの名無しさん
08/11/10 23:36:49
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
10 個の要素をもつ整数配列data を初期化して宣言する。
配列の隣り合った添え字のデータ同士の差(data[i] – data[i-1])を調べる。
その値が,最も大きなものを探し,データの差がい
くつなのか,添え字の何番と何番との間の差なのか出力しなさい。
最大のものが複数あったときには,添え字の最も大きなものを出力すること。
例えば,data[10]={-6,4,7,-3,-1,9,5,-5,4,6}
で初期化したときには,4 と5 の間の10 が最大となる。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 6.0
 [3.3] 言語:C言語
[4] 期限:11/14
[5] その他の制限:特になし

よろしくお願い致します。

548:デフォルトの名無しさん
08/11/10 23:45:02
>>547
6,7番目の間の10が最大値になる?

549:デフォルトの名無しさん
08/11/10 23:46:40
>>547
素直に書いてみた
差の絶対値じゃなくて差の比較だけでいいんだよね?
#include<stdio.h>
#define N 10
int main(){
    int data[N]={-6,4,7,-3,-1,9,5,-5,4,6};
    int*max_diff = data;
    int*it;
    for(it=data+1;it!=data+N-1;++it)
        if(1[max_diff]-0[max_diff] <= 1[it]-0[it])
            max_diff = it;
    printf("%dと%dの間の差%dが最大\n",
        max_diff-data,max_diff-data+1,1[max_diff]-0[max_diff]);
    return 0;
}

550:デフォルトの名無しさん
08/11/11 00:50:44
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
一次元配列を用いて5人分の得点を100点満点で入力し、平均値を画面およびファイルに書き出すプログラムを作成しなさい。
書き出し用ファイル名はave.txtとする。
[3] 環境:
 [3.1] Windows Vista
 [3.2] Borland C++
 [3.3] C言語
[4] 期限: 11月11日12:00

昼すぎ提出なので時間があまりないですが、どなたかお願いします。

551: ◆8w4FYxc7TQ
08/11/11 00:52:24
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
三つの数字a,b,cを入力したとき、大きい順に出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 9.0
 [3.3] 言語:C++
[4] 期限:11/12
[5] その他の制限:
この問題で使えそうなものは、if、もしくはswitchしか習っていないので、それでお願いします。

自分でif文を使って組み立てると、どうしても思い通りに並べてくれません…
どうかよろしくお願いします。

552:デフォルトの名無しさん
08/11/11 01:11:20
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows vista)
 [3.2] コンパイラ VisualStudio2005
 [3.3] 言語: C言語
[4] 期限: 2008年11月13日15:00まで
[5] その他の制限: (C言語検定2級程度の途中まで習ってます)

すいません、お願いします


553:デフォルトの名無しさん
08/11/11 01:17:33
>>491お願いできませんか?

554:デフォルトの名無しさん
08/11/11 01:25:42
>>549
はい、差の比較のみです。
言葉が足りなくてすみません。
ありがとうございました!

555:521
08/11/11 01:34:59
>>522
ありがとうございます。

誰か、もう一つの課題のほうもお願いいたします。

556:デフォルトの名無しさん
08/11/11 01:46:23
>>550
#include <stdio.h>

int main(void)
{
int i, score, sum=0;
FILE *fp;

for(i=1; i<=5; i++){
printf("%d人目:", i);
scanf("%d", &score);
sum += score;
}
printf("平均値:%f\n", (double)sum / 5.0);

if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);

return 0;
}

557:デフォルトの名無しさん
08/11/11 01:48:54
ああ、配列使うのか
#include <stdio.h>

int main(void)
{
int i, score[5], sum=0;
FILE *fp;

for(i=0; i<5; i++){
printf("%d人目:", i+1);
scanf("%d", &score[i]);
sum += score[i];
}
printf("平均値:%f\n", (double)sum / 5.0);

if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);

return 0;
}


558:デフォルトの名無しさん
08/11/11 01:57:47
>>551
if(a < b){
tmp = a;
a = b;
b = tmp;
}
if(a < c){
tmp = a;
a = c;
c = tmp;
}
if(b < c){
tmp = b;
b = c;
c = tmp;
}

559:デフォルトの名無しさん
08/11/11 02:18:50
>>481
お礼おくれて申し訳ありません。
助かりました。ありがとうございます。

560:デフォルトの名無しさん
08/11/11 02:33:03
>>556-557
ありがとうございます助かりました!
一次元配列使うんです、まぎらわしくてすいません。
二度もありがとうございました。

561:デフォルトの名無しさん
08/11/11 02:39:30
>>552
2番はちょっと余計なこともしてるけど
URLリンク(kansai2channeler.hp.infoseek.co.jp)

562:デフォルトの名無しさん
08/11/11 03:37:42
>>561
rewind(stdin)なんて標準以外の使い方すんなカス

563:デフォルトの名無しさん
08/11/11 03:49:35
[1] 授業単元:
[2] 問題文
0〜9の数字のみからなる文字列を引数として受け取り、
同じ数字並びの整数を返す関数ascii2int()を作り、動作を
確認せよ。ただし、非負の整数のみ考える。
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 11月15日

564:デフォルトの名無しさん
08/11/11 03:56:49
[1] 授業単元:スタック
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:2008/11/12
[5] その他の制限:なし

すいませんが、よろしくお願いします!



565:デフォルトの名無しさん
08/11/11 06:51:39
>>562
これで許してくださいorz
scanf("%*[^\n]\n");

566:デフォルトの名無しさん
08/11/11 06:59:11
>>563
#include<stdio.h>
int ascii2int(const char* str){
int r=0;
while(*str){
r*=10;
r+=*str-'0';
str++;
}
return r;
}
int main(){
char* a = "12345";
printf("%d\n",ascii2int(a));
}

567:デフォルトの名無しさん
08/11/11 07:36:20
>>564
なんかへたくそでごめん。。
#include<stdio.h>
#define N 100
int n,cnt=0,c[N],b[N];
void solve(int a_top,int b_top,int c_top){
if(a_top>n && b_top==0){
int i;
for(i=0;i<n;i++)printf("%d",c[i]);
printf("\n"); cnt++;
}
if(a_top<=n){
b[b_top++] = a_top++;//a->b
solve(a_top,b_top,c_top);
b[--b_top] = --a_top;//b->a
}
if(b_top>0){
c[c_top++]=b[--b_top];//b->c
solve(a_top,b_top,c_top);
b[b_top++]=c[--c_top];//c->b
}
}
int main(){
printf("n:"); scanf("%d",&n);
if(n>0) solve(1,0,0);
printf("%d\n",cnt);
}

568:デフォルトの名無しさん
08/11/11 07:40:51
>>558
ありがとうございます!
やってみます!

569:デフォルトの名無しさん
08/11/11 08:52:57
>>555
2回に分けて。
#include<stdio.h>
#define STACKSIZE 100
typedef struct _Point{
int x,y;
}point;
static int sp = 0;
static point stack[STACKSIZE];
void push(point p){
[sp++] = p;
}
point pop(void){
return stack[--sp];
}
int isempty(void){
return sp == 0;
}


570:デフォルトの名無しさん
08/11/11 08:54:32
//上の[sp++] = p;はstack[sp++] = p;のミス!!
int main(void){
char map[7][11] = {
"**********",
"* * *",
"* *****",
"* ** * *",
"* * *",
"* * * *",
"**********",
};
point p;
int x,y;
p.x=2; p.y=1; push(p);
while(!isempty()){
p=pop(); x=p.x; y=p.y;
if (map[y][x] == ' '){
map[y][x] = '*';
p.x=x; p.y=y-1; push(p); // up
p.x=x; p.y=y+1; push(p); // down
p.x=x-1; p.y=y; push(p); // left
p.x=x+1; p.y=y; push(p); // right
for(y = 0; y < 7; y++) printf("%s\n", map[y]);
printf("\n");
}
}
return 0;
}


571:564
08/11/11 09:00:54
>>567
こんなに早く対応していただけて助かります。
ありがとうございます!

572:デフォルトの名無しさん
08/11/11 10:08:37

[2] 1. define文を使ってN以下の素数を全て求めよ
  2. 関数 f(t)=t^5-t の区間 [0,2] での値を 0.1 刻みで表示するプログラムを作れ
[3]
 [3.1] OS : Linux
 [3.2] ?
 [3.3] 言語 : C
[4] 期限: 11/12
[5] その他の制限:初歩の初歩です。難しすぎるのはよく分かりません

どなたかよろしくお願いします


573:デフォルトの名無しさん
08/11/11 11:06:09
1こめ
#include<stdio.h>
#define N 100
int main(){
int s[N],i,j;
for(i=0;i<N;i++) s[i]=1;
s[0] = s[1] = 0;
for(i=2;i<N;i++){
if(!s[i]) continue;
for(j=i+i;j<N;j+=i){
s[j]=0;
}
}
for(i=0;i<N;i++){
if(s[i]) printf("%d\n",i);
}
}

574:デフォルトの名無しさん
08/11/11 11:14:17
>>573
define文を使うって、#define N 100 ← これだけでいいのかww

575:デフォルトの名無しさん
08/11/11 11:15:35
えっ?だめ??勘違い?(´・ω・`)

576:デフォルトの名無しさん
08/11/11 11:58:52
>>521じゃないけど分からないので質問。>>522の通りにやっても何も表示されないので
たぶん確実に違うisemptyのどこが駄目でしょうか?あとpush,popもおかしかったら教えてください。

void push(int x){
if(sp == 100){
printf("stack is fill.\n");
}
else{
stack[sp]=x;
sp++;
}
}
int pop(void){
if(sp == 0){
printf("stack is empty.\n");
}
else{
sp--;
return(stack[sp]);
}
}

int isempty(void)
{
if(sp ==100)
printf("1");
if(sp ==0)
printf ("0");
}

577:522
08/11/11 12:03:42
>>576
void push(int val)
{
stack[sp++] = val;
}
int pop(void)
{
return stack[sp-- - 1];
}
int isempty(void)
{
/*スタックが空なら1、空でないなら0を返す関数 */
return sp == 0 ? 1 : 0;
}


578:デフォルトの名無しさん
08/11/11 12:08:04
stack[sp++] = val;
は普通だけど、
return stack[sp-- - 1];
って書き方がすごくきもく見えるw

579:デフォルトの名無しさん
08/11/11 12:13:05
return stack[--sp];
だよなぁ常考

580:522
08/11/11 12:37:34
>>578>>579
貼ってから自分でもそうオモタ

581:デフォルトの名無しさん
08/11/11 12:59:00
個人的に
論理式?1:0;とかif(論理式!=0)とかif(論理式==0)
って書き方が好きじゃない。冗長な感じがして。

582:デフォルトの名無しさん
08/11/11 13:01:58
真の時に1を返すと保障されている処理系ならば return sp == 0; でもいいんだけどね


583:デフォルトの名無しさん
08/11/11 13:03:56
C言語は保証されてる

584:デフォルトの名無しさん
08/11/11 14:01:00
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
以下のプログラムを英文清書プログラムに書き換えよ。
元のプログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)
条件
・文の先頭は大文字、それ以外は小文字。
・アルファベット以外の文字は変換しなくてよい。
・改行、スペース、タブにより単語の区切りとする。また文末は改行コードではなくピリオド"."で判定する。
・\endまたは\ENDを挿入するとそのプログラムを終わるようにする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008/11/12 23:59まで
[5] その他の制限: 特にないです。
すみませんが、よろしくお願いします。

585:デフォルトの名無しさん
08/11/11 14:34:13
INExp.hって??

586:デフォルトの名無しさん
08/11/11 15:28:24
isalphaとtoupper使えればいいのかな
ピリオド検索はstrstrで ポインタアドレスの差を文字列長にもしてげへへへ

587:デフォルトの名無しさん
08/11/11 16:00:13
[1] 授業単元:単方向線形
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 11/18
[5] その他の制限: 特になし

全く分かりません。宜しくお願いします

588:デフォルトの名無しさん
08/11/11 16:12:52
>>587
うそつけw
考える気がないだろw

589:デフォルトの名無しさん
08/11/11 17:34:32
それを言ったらこのスレの存在意義がなくなるわけだが

590:デフォルトの名無しさん
08/11/11 17:36:25
どこのスレにだって黙ってればいいのに野暮ったい突っ込みする奴居るじゃん。

591:デフォルトの名無しさん
08/11/11 18:18:38
>>573
ありがとうございます

592:デフォルトの名無しさん
08/11/11 18:19:28
>>587
超めんどくさい!cの単方向リスト嫌い!
URLリンク(kansai2channeler.hp.infoseek.co.jp)

593:576
08/11/11 18:22:40
>>577
ありがとうございます。>>522と合わせてプログラムにしてみたんだが何もマップされないんです。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

自宅のubuntuのgcc(おそらくでやってるんですが環境のせいですか?変なところあったら指摘お願いします。


594:デフォルトの名無しさん
08/11/11 18:24:58
printf("%s\n", map[y]);


595:デフォルトの名無しさん
08/11/11 18:25:43
ごめんかんちがい

596:デフォルトの名無しさん
08/11/11 18:28:38
あ!コピペミスってるだけじゃん〜

597:デフォルトの名無しさん
08/11/11 18:49:43
a

598: ◆25LbU5YSxg
08/11/11 18:52:30
>>541
遅れましたが、解答ありがとうございました。


599:577
08/11/11 19:21:30
>>593
map データがなんだかやせ細ってるよ

600:デフォルトの名無しさん
08/11/11 20:20:46
1] 授業単元: C言語
[2] 問題文(含コード&リンク):
(1) 単項式を入力された順に出力されるように変更する
(2)入力した単項式を次数の大きい順にするに出力されるように変更する
ソースは以下を参考にしてください、たらない変数は任意で増やしてけっこうです
URLリンク(kansai2channeler.hp.infoseek.co.jp)
(1)と(2)は別解答

[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン: 任意
 [3.3] 言語: C
[4] 期限: 2008年11月14日13:30まで
期限が迫ってるのでお願いします


601:デフォルトの名無しさん
08/11/11 20:28:18
この問題昔見たなw

602:デフォルトの名無しさん
08/11/11 20:32:57
すいません
前スレあたりで載せたんですがスルーだったようで自力でやろうとしたけど無理だったので再度^^;
最終期限がすぐであせってます

603:576
08/11/11 20:35:35
なんというミス(^o^)
みなさまありがとうございました。明日も生きていけそうです。

604:デフォルトの名無しさん
08/11/11 20:37:29
[1] 授業単元: 文字列操作
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] cc
 [3.3] C
[4] 期限:2008年11月12日15:00まで
[5] その他の制限:問題文中に出てくる、frequency.c を利用せよ、とありますので、
なるべくそれを基盤にするようにお願いします。

↓途中まで考えてみたものです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

605:デフォルトの名無しさん
08/11/11 20:45:38
>>604
1問目
freqency.c の出力部分を以下のように修正
for(i = 0; i < 26; i++) { /* 結果出力 */
while(alpha[i]-- > 0)
printf("*");
printf("\n");
}


606:605
08/11/11 20:54:39
>>604 2問目 main の中身だけ
char c;
int i, j, alpha[26], max = 0;
for(i = 0; i < 26; i++) /* 配列のクリア */
alpha[i] = 0;
c = getchar();
while(c != '\n') {
if (c >= 'a' && c <= 'z') { /* 英小文字の処理 */
alpha[c - 'a'] += 1;
if (alpha[c - 'a'] > max)
max = alpha[c - 'a'];
} else {
if (c >= 'A' && c <= 'Z') { /* 英大文字の処理 */
alpha[c - 'A'] += 1;
if (alpha[c - 'A'] > max)
max = alpha[c - 'A'];
}
}
c = getchar();
}
for(i = 0; i < max; i++) {
for(j = 0; j < 26; j++) { /* 結果出力 */
if (alpha[j] >= max - i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
for(j = 0; j < 26; j++) /* 結果出力 */
printf("%c ", j + 'a');
printf("\n");

607:デフォルトの名無しさん
08/11/11 20:59:53
すいません・・>>491をお願いします・・

608:デフォルトの名無しさん
08/11/11 21:09:56

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 問1、ユークリッドの法則を使ってn(n≦100)個の正整数の最大公約数を求めるプログラムを作れ
なお、最終的にはgcd(最大公約数を求める整数の羅列)=結果と画面上に表示するようにすること

問2、n個(n≦100以下)の正整数の最小公倍数を求めよ。
表示方法は先ほどの問いと一緒


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11/13
[5] その他の制限: int gcd(int x, int y)の関数を使用してください
あと、なるべく2つずつ比べるようにして、必ず大きい正数が変数xに入るようにしてください


609:デフォルトの名無しさん
08/11/11 21:15:18
>>607
ボールの初速とか角度は風の影響が全く無いときに当たるようにすればいいの?
それとも投げたら絶対当たるように作るの?

610:デフォルトの名無しさん
08/11/11 21:18:17
[1] 授業単元:C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
@2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい.
以下のプログラムを基にして完成せよ.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,原点からの距離を求める関数 length_vector_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体 Point型を使用して,平面の点を表示する関数 print_v_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
A2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい.
以下のプログラムを基にして完成せよ.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,平面の点を表示する関数 print_v_p2を作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体 Point型を使用して,平面の点を代入する関数 input_point_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体ポインタ変数に対して,動的にメモリ領域を確保する. malloc を利用する.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual stadio2008
 [3.3] 言語: C
[4] 期限: 2008年11月13日


611:デフォルトの名無しさん
08/11/11 21:21:25
>>607
前者でお願いします

612:デフォルトの名無しさん
08/11/11 21:25:52
>>600
とりあえず(1)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

613:デフォルトの名無しさん
08/11/11 21:52:31
>>608
n 個の正数は a[] に入力されているとして。
#include <stdio.h>

int gcd(int x, int y)
{
int r;
if (x < y) {
int t = x; x = y; y = t;
}
do {
r = x % y; x = y; y = r;
} while (r != 0);
return x;
}

int main(int argc, char *argv[])
{
int a[] = { 121, 11, 14641, 1331};
int n = 4;
int i, g;

g = a[0];
printf("gcd(%d", a[0]);
for (i = 1; i < n; i++) {
printf(", %d", a[i]);
g = gcd(g, a[i]);
}
printf(") = %d\n", g);
return 0;
}

614:デフォルトの名無しさん
08/11/11 21:57:28
[1] 授業単元: 自作関数
[2] 問題文(含コード&リンク):

5つの数値を入力し(繰り返し入力)し、最大値を表示する。

[3] 環境
 [3.1] OS: Windowsvista
 [3.2] VC 6.0等
 [3.3] 言語: C

[4] 期限: 今日までなのでよろしくお願いします

[5] その他の制限:繰り返し文しかならってないです。

615:デフォルトの名無しさん
08/11/11 21:59:13
>>614

>>614

#include<stdio.h>
int sori(int x, int y)
{
if( x>=y ) return(x);
return(y);
}
int main(void)
{ int a,b,c,d,e,max;
while ( scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)==5) {
max=a;
max=sori(max,b);
max=b;
max=sori(max,c);
max=c;
max=sori(max,d);
max=d;
max=sori(max,e);
printf("%d %d %d %d %d",a,b,c,d,e);
printf("max=%d\n",max);
}
return (0);
}


616:デフォルトの名無しさん
08/11/11 22:00:00
>>614
>>615
エラーメッセージ

エラー E2209 kadai6-1.cpp 1: インクルードファイル 'stdio.h' をオープンできない
エラー E2268 kadai6-1.cpp 9: 未定義の関数 'scanf' を呼び出した(関数 main() )
エラー E2268 kadai6-1.cpp 18: 未定義の関数 'printf' を呼び出した(関数 main()


上記のようなプログラムを自分で作ったのですが、
上に記したようなエラーメッセージが表示されてしまいました。
これ以上わかりません。どうかよろしくお願いします。




617:デフォルトの名無しさん
08/11/11 22:09:48
>>616
Linux  だとちゃんとコンパイルできるから、ワークスペース作ってないとかの問題じゃないの?

以下の行を削除すれば、一応目的は達成できるぞ
max=b;
max=c;
max=d;

618:デフォルトの名無しさん
08/11/11 22:17:17
>>617
試してみます。どうもありがとうございました。

619:デフォルトの名無しさん
08/11/11 22:23:31
コンパイルしたら
「配列または、ポインタでない変数に添字が使われました」って怒られたんですが
どう直せばいいでしょうか?


620:デフォルトの名無しさん
08/11/11 22:24:07
あきらめてください


621:デフォルトの名無しさん
08/11/11 22:25:41
配列またはポインタでない変数に、添え字を使わないようにすればいい

622:デフォルトの名無しさん
08/11/11 22:28:28
まずcppじゃなくてcにするとか


623:619
08/11/11 22:29:25
>>621
ありがとう!

624:デフォルトの名無しさん
08/11/11 22:30:24
てかsoriって関数名なんて意味?ソリ?サンタが乗ってるヤツ?

625:デフォルトの名無しさん
08/11/11 22:33:02
飲み過ぎ食べ過ぎに、ソリマックス。

626:604
08/11/11 22:36:08
>>604,605
素早い対応ありがとうございます。
すいません、問題文のとおりプログラムは1つだけなんです。
つまり、freqency.cを拡張して、横に伸びるグラフと縦に伸びるグラフを
同時に表示したいのです・・・。
605の方を別に作って試してみましたが、縦のグラフは表示できました。
(上の方で1つずつ空白分がずれるのは仕様でしょうか?)

604は、元のプログラムの出力部の変更のみで表示できました。
が、605と一緒にしなければならないので、どうにか605の大文字と小文字の処理を604と
同じくしてできないかと困っています。
よろしければ検討をお願いしたいです。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4995日前に更新/337 KB
担当:undef