CNTT4A2 COMMUNITY

Thảo luận học tập


You are not connected. Please login or register

Go downThông điệp [Trang 1 trong tổng số 1 trang]

21/9/2011, 10:17 pm
kienhl
kienhl

Tình hình là em viết xong cái giải thuật cho dslk áp dụng bài toán sinh viên mà còn vướng 2 lỗi
các bác xem em với nhé!
Code:
#include<stdio.h>
#include<iomanip.h>
#include<math.h>
struct DATE
{
   int day, month, year;
};
struct Sinhvien
{
   char hoten[35];
   DATE ns;
   float diem;
   Sinhvien* tiep;
};
Sinhvien* dau=NULL,*cuoi=NULL;
Sinhvien* cur=NULL;
int sosv=0;
Sinhvien *Nhap1sv()
{
   Sinhvien *kq = new Sinhvien[1];
   cout<<"\n Sinh vien thu",sosv+1;
   cout<<" Ho ten=";
   cin.getline(kq->hoten);
   cout<<"Ns=";
   cin>>kq->ns.day>>kq->ns.month>>kq->ns.year;
   cout<<"Diem=";
   cin>>kq->diem;
   cin.ignore();
   qk->tiep=NULL;
   return kq;
}
void Bosung()
{
   cur = Nhap1sv();
   if (sosv==0)
      {dau=cuoi=cur;}
   else
      {cuoi->tiep=cur; cuoi=cur;}
      sosv++;
}
void Chentruoc(int n)
{
   cur = Nhap1sv();
   if(sosv==0)
      {
         dau=cuoi=cur;
         sosv++;
          return;
      }
   if (sosv==1||n==1)
      {
         cur->tiep=dau;
         dau=cur;
         sosv++;return;
      }
   Sinhvien* truoc, *sau;
   truoc=dau;
   sau=dau->tiep;
   for (int i=1;i<n-1;i++)
      truoc=truoc->tiep;
   sau=truoc->tiep;
   truoc->tiep=cur;
   cur->tiep=sau;
   sosv++;
}
void Chensau(int n)
{
   cur=Nhap1sv();
   if(sosv==0||sosv<n)
      {
         dau=cuoi=cur;
         sosv++;
         return;
      }
   Sinhvien *truoc, *sau;
   truoc=dau;
   sau=dau->tiep;
   for (int i=1;i<n;i++) truoc=truoc->tiep;
   sau=truoc->tiep;
   truoc->tiep=cur;
   cur->tiep=sau;
   sosv++;
}
void Xoa(int n)
{
   if(sosv==1&&n==1)
   {
      delete dau;
      dau=cuoi=NULL;
      sosv--;
      return;
   }
   if (n==1)
   {
      cur=dau;
      dau=cur->tiep;
      delete cur;
      sosv--;
      return;
   }
   Sinhvien *truoc, *sau;
   truoc = dau;
   sau=dau->tiep;
   for (int i=1; i<n-1;i++)
      truoc=truoc->tiep;
   cur=truoc->tiep;
   sau=cur->tiep;
   truoc->tiep=sau;
   delete cur;
   sosv--;
}
void Taods()
{
  int tiep=1;
  while (tiep)
  {
   Bosung();
   cout<<"Tiep(0/1)?";
   cin>>tiep;
  }
}
void Inds()
{
   cur = dau;
   int i=1;
   while (cur!=NULL)
   {
      cout<<"\n Sinh vien thu"<<i<<"....\n";
      cout<<"Hoten:"<<cur->hoten;
      cout<<"Ngay sinh"<<cur->ns.day<<"/"<<cur->ns.month<<"/"<<cur->ns.year;
      cout<<"Diem:"<<cur->diem;
      cur=cur->tiep;
      i++;
   }
}
void main()
{
   clrscr();
   Taods();
   Inds();
   getch();
}
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
21/9/2011, 11:21 pm
kienhl
kienhl

Sau khi xem xét lại, em thấy sai 2 cái cơ bản, mà rất quan trong, thứ nhất là ở cái kq thì viết thành qk( sai chính tả)
thứ 2, cú pháp cin.getline cho kiểu char thiếu giới hạn ( cin.getline(kq->hoten,20)
code sửa lại đây!
Code:
 #include<iostream.h>
#include<conio.h>
#include<string.h>
#include<iomanip.h>
struct DATE
{
   int day, month, year;
};
struct Sinhvien
{
   char hoten[35];
   DATE ns;
   float diem;
   Sinhvien* tiep;
};
Sinhvien* dau=NULL,*cuoi=NULL;
Sinhvien* cur=NULL;
int sosv=0;
Sinhvien* Nhap1sv()
{
   Sinhvien *kq = new Sinhvien[1];
   cout<<"\n Sinh vien thu",sosv+1;
   cout<<" Ho ten=";
   cin.getline(kq->hoten,20);
   cout<<"Ns=";
   cin>>kq->ns.day>>kq->ns.month>>kq->ns.year;
   cout<<"Diem=";
   cin>>kq->diem;
   cin.ignore();
   kq->tiep=NULL;
   return kq;
}
void Bosung()
{
   cur = Nhap1sv();
   if (sosv==0)
      {dau=cuoi=cur;}
   else
      {cuoi->tiep=cur; cuoi=cur;}
      sosv++;
}
void Chentruoc(int n)
{
   cur = Nhap1sv();
   if(sosv==0)
      {
         dau=cuoi=cur;
         sosv++;
          return;
      }
   if (sosv==1||n==1)
      {
         cur->tiep=dau;
         dau=cur;
         sosv++;return;
      }
   Sinhvien* truoc, *sau;
   truoc=dau;
   sau=dau->tiep;
   for (int i=1;i<n-1;i++)
      truoc=truoc->tiep;
   sau=truoc->tiep;
   truoc->tiep=cur;
   cur->tiep=sau;
   sosv++;
}
void Chensau(int n)
{
   cur=Nhap1sv();
   if(sosv==0||sosv<n)
      {
         dau=cuoi=cur;
         sosv++;
         return;
      }
   Sinhvien *truoc, *sau;
   truoc=dau;
   sau=dau->tiep;
   for (int i=1;i<n;i++) truoc=truoc->tiep;
   sau=truoc->tiep;
   truoc->tiep=cur;
   cur->tiep=sau;
   sosv++;
}
void Xoa(int n)
{
   if(sosv==1&&n==1)
   {
      delete dau;
      dau=cuoi=NULL;
      sosv--;
      return;
   }
   if (n==1)
   {
      cur=dau;
      dau=cur->tiep;
      delete cur;
      sosv--;
      return;
   }
   Sinhvien *truoc, *sau;
   truoc = dau;
   sau=dau->tiep;
   for (int i=1; i<n-1;i++)
      truoc=truoc->tiep;
   cur=truoc->tiep;
   sau=cur->tiep;
   truoc->tiep=sau;
   delete cur;
   sosv--;
}
void Taods()
{
  int tiep=1;
  while (tiep)
  {
   Bosung();
   cout<<"Tiep(0/1)?";
   cin>>tiep;
  }
}
void Inds()
{
   cur = dau;
   int i=1;
   while (cur!=NULL)
   {
      cout<<"\n Sinh vien thu"<<i<<"....\n";
      cout<<"Hoten:"<<cur->hoten;
      cout<<"Ngay sinh"<<cur->ns.day<<"/"<<cur->ns.month<<"/"<<cur->ns.year;
      cout<<"Diem:"<<cur->diem;
      cur=cur->tiep;
      i++;
   }
}
void main()
{
   clrscr();
   Taods();
   Inds();
   getch();
}
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
22/9/2011, 6:46 am
whatsltd4us
whatsltd4us


Sinhvien* Nhap1sv()
{
Sinhvien *kq = new Sinhvien[1];
cout<<"\n Sinh vien thu",sosv+1;
cout<<" Ho ten=";
cin.getline(kq->hoten,20);
cout<<"Ns=";
cin>>kq->ns.day>>kq->ns.month>>kq->ns.year;
cout<<"Diem=";
cin>>kq->diem;
cin.ignore();
kq->tiep=NULL;
return kq;
}

Tình hình là kết quả vẫn không đc như ý muốn :D


http://vdvinh-nd.blogspot.com

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà whatsltd4us
22/9/2011, 7:45 am
kienhl
kienhl

giải thuật chưa được hoàn chỉnh mà, up lên mọi người xem và hoàn thiện nha/
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
22/9/2011, 7:47 am
Ice.Tea
Ice.Tea

Uhm ! đúng anh ạ ! vì cái cin.ignore(); kia kìa ! nó lại như ngày trước ... để như kiểu Kiên thì sẽ lỗi khi nhập từ sinh viên thứ 2 & ...++ !


+ Nhưng nếu để như thế này không lỗi nhưng lại phải ENTER để tiếp tục chương trình ! (Lỗi anh em mình ngày xưa @.@)
Code:
Sinhvien *kq = new Sinhvien[1];
   cin.ignore();
   cout<<"Nhap thong tin sinh vien :\n";
   cout<<" Ho ten=";
   cin.getline(kq->hoten,20);
    ............

+ Để như thế này cũng không lỗi khi nhập từ sinh viên thứ 2 trở đi nhưng lại mất chữ cái đầu tiên của sinh viên thứ nhất : (Lỗi giống anh em mình hối trước ! h0h0 )

Code:
Sinhvien *kq = new Sinhvien[1];
   cout<<"Nhap thong tin sinh vien :\n";

   cout<<" Ho ten=";
   cin.ignore();
   cin.getline(kq->hoten,20);
.................

................
+ thử với cin.ígnore(0); và cin.ignore(1) cho kết quả tương tự !
anh sửa đi nhé ... giờ em đi chơi đã ! hihi
http://manhtuan-leo.blogspot.com/

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà Ice.Tea
22/9/2011, 8:11 am
kienhl
kienhl

Đã khắc phục điều đó. các bạn xem và cho ý kiến!
Code sửa
Code:
Sinhvien *Nhap1sv()
{
   Sinhvien *kq = new Sinhvien[0];
   cout<<"\n Sinh vien thu"<<sosv;//,sosv+1;
   cout<<"\n Ho ten=";
   gets(kq->hoten);      //thay cin.getline() bang gets!
   cout<<"\nNs=";
   cin>>kq->ns.day>>kq->ns.month>>kq->ns.year;
   cout<<"\nDiem=";
   cin>>kq->diem;
   cin.ignore();
   kq->tiep=NULL;
   return kq;
}
sau khi sửa cú pháp cin.getline() bằng gets.
Việc nhập họ tên sinh viên không bị lỗi như trước nữa, cho ý kiến nha!
Còn cái yêu cầu tìm kiếm in ra những sinh viên trúng tuyển nữa, phát triển tiếp nha!
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
22/9/2011, 8:15 am
whatsltd4us
whatsltd4us

Dùng gets mà vẫn run được ?
http://vdvinh-nd.blogspot.com

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà whatsltd4us
22/9/2011, 8:17 am
kienhl
kienhl

Vâng, vẫn chạy được mà, trong c và c++ cú pháp gets() được sử dụng thay thế cho cin.getline() dùng để nhập char!
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
22/9/2011, 10:43 am
whatsltd4us
whatsltd4us

Code:

#include<iostream.h>
#include <stdio.h>                          // thêm thư viện
#include<conio.h>                   
.....
.....
.....
Sinhvien* Nhap1sv()
{
           Sinhvien *kq = new Sinhvien[1];
           cout<<"Sinh vien thu "<<sosv+1<<"\n";
           cout<<" Ho ten=";
                fflush(stdin);                            // xoá bộ nhớ đệm
           gets(kq->hoten);                   
           cout<<"Ns=";
           cin>>kq->ns.day>>kq->ns.month>>kq->ns.year;
           cout<<"Diem=";
           cin>>kq->diem;
               kq->tiep=NULL;
           return kq;
}

Anh viết C++, nên quên cái thư viện kia, nó báo lỗi hàm gets()
Em dùng nhiều thư viện thế
http://vdvinh-nd.blogspot.com

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà whatsltd4us
22/9/2011, 10:59 am
kienhl
kienhl

nếu không dùng hàm gets, anh cũng vẫn có thể dùng cin.getline()
nhưng trước khi khai báo tên, anh cho thêm vào cái cin.ignore() nhé. nó khắc phục được lỗi này.
đọc thêm vào link này nhé[You must be registered and logged in to see this link.]
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
22/9/2011, 11:02 am
kienhl
kienhl

code sửa lại hoàn thiện!
Code:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
#include<math.h>
struct DATE
{
   int day, month, year;
};
struct Sinhvien
{
   char hoten[35];
   DATE ns;
   float diem;
   Sinhvien* tiep;
};
Sinhvien* dau=NULL,*cuoi=NULL;
Sinhvien* cur=NULL;
int sosv=0;
Sinhvien *Nhap1sv()
{
   Sinhvien *kq = new Sinhvien[0];
   cout<<"\n Sinh vien thu"<<sosv;//,sosv+1;
  cin.ignore();                      // xu ly loi bo qua khi su dung cin.getline()
   cout<<"\n Ho ten=";
   //gets(kq->hoten);
   cin.getline(kq->hoten,35);      //thay cin.getline() bang gets!
   cout<<"\nNs=";
   cin>>kq->ns.day>>kq->ns.month>>kq->ns.year;
   cout<<"\nDiem=";
   cin>>kq->diem;
   cin.ignore();
   kq->tiep=NULL;
   return kq;
}
void Bosung()
{
   cur = Nhap1sv();
   if (sosv==0)
      {dau=cuoi=cur;}
   else
      {cuoi->tiep=cur; cuoi=cur;}
      sosv++;
}
void Chentruoc(int n)
{
   cur = Nhap1sv();
   if(sosv==0)
      {
         dau=cuoi=cur;
         sosv++;
          return;
      }
   if (sosv==1||n==1)
      {
         cur->tiep=dau;
         dau=cur;
         sosv++;return;
      }
   Sinhvien* truoc, *sau;
   truoc=dau;
   sau=dau->tiep;
   for (int i=1;i<n-1;i++)
      truoc=truoc->tiep;
   sau=truoc->tiep;
   truoc->tiep=cur;
   cur->tiep=sau;
   sosv++;
}
void Chensau(int n)
{
   cur=Nhap1sv();
   if(sosv==0||sosv<n)
      {
         dau=cuoi=cur;
         sosv++;
         return;
      }
   Sinhvien *truoc, *sau;
   truoc=dau;
   sau=dau->tiep;
   for (int i=1;i<n;i++) truoc=truoc->tiep;
   sau=truoc->tiep;
   truoc->tiep=cur;
   cur->tiep=sau;
   sosv++;
}
void Xoa(int n)
{
   if(sosv==1&&n==1)
   {
      delete dau;
      dau=cuoi=NULL;
      sosv--;
      return;
   }
   if (n==1)
   {
      cur=dau;
      dau=cur->tiep;
      delete cur;
      sosv--;
      return;
   }
   Sinhvien *truoc, *sau;
   truoc = dau;
   sau=dau->tiep;
   for (int i=1; i<n-1;i++)
      truoc=truoc->tiep;
   cur=truoc->tiep;
   sau=cur->tiep;
   truoc->tiep=sau;
   delete cur;
   sosv--;
}
void Taods()
{
  int tiep=1;
  while (tiep)
  {
   Bosung();
   cout<<"Tiep(0/1)?";
   cin>>tiep;
  }
}
void Inds()
{
   cur = dau;
   int i=1;
   while (cur!=NULL)
   {
      cout<<"\n Sinh vien thu"<<i<<"....\n";
      cout<<"\nHoten:"<<cur->hoten;
      cout<<"\nNgay sinh: "<<cur->ns.day<<"/"<<cur->ns.month<<"/"<<cur->ns.year;
      cout<<"\nDiem:"<<cur->diem;
      cur=cur->tiep;
      i++;
   }
}
void main()
{
   clrscr();
   Taods();
   Inds();
   getch();
}
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà Sponsored content

Về Đầu TrangThông điệp [Trang 1 trong tổng số 1 trang]

« Xem bài trước | Xem bài kế tiếp »

Bài viết mới cùng chuyên mục

    Bài viết liên quan với DSLK bài toán sinh viên! help me!

      Quyền hạn của bạn:

      Bạn không có quyền trả lời bài viết